@oh-story/dsh 0.1.3 → 0.1.5

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 (524) hide show
  1. package/README.md +58 -12
  2. package/lib/client.js +2970 -537
  3. package/lib/client.js.map +4 -4
  4. package/lib/drama/manifest.json +218 -178
  5. package/lib/drama/skills/short-drama/SKILL.md +110 -117
  6. package/lib/drama/skills/short-drama/references/audience-reveal.md +14 -67
  7. package/lib/drama/skills/short-drama/references/contract-and-ownership.md +26 -77
  8. package/lib/drama/skills/short-drama/references/creator-documents.md +204 -0
  9. package/lib/drama/skills/short-drama/references/creator-workflow.md +73 -63
  10. package/lib/drama/skills/short-drama/references/knowhow-index.md +5 -0
  11. package/lib/drama/skills/short-drama/references/look-development.md +2 -3
  12. package/lib/drama/skills/short-drama/references/pickup-and-alternate.md +14 -48
  13. package/lib/drama/skills/short-drama/references/production-form-profiles.md +1 -1
  14. package/lib/drama/skills/short-drama/references/reference-roles.md +32 -135
  15. package/lib/drama/skills/short-drama/references/runtime-preflight.md +16 -19
  16. package/lib/drama/skills/short-drama/scripts/creator_markdown_check.py +1002 -0
  17. package/lib/drama/skills/short-drama/scripts/project_tool.py +485 -5
  18. package/lib/drama/skills/short-drama-assets/SKILL.md +59 -170
  19. package/lib/drama/skills/short-drama-assets/references/asset-review-checklist.md +18 -25
  20. package/lib/drama/skills/short-drama-assets/references/character-and-look.md +13 -15
  21. package/lib/drama/skills/short-drama-assets/references/continuity-delta.md +11 -14
  22. package/lib/drama/skills/short-drama-assets/references/continuity-lock.md +116 -0
  23. package/lib/drama/skills/short-drama-assets/references/identity-vs-variant.md +6 -12
  24. package/lib/drama/skills/short-drama-assets/references/occurrence-extraction.md +8 -11
  25. package/lib/drama/skills/short-drama-assets/references/prop-and-state.md +21 -2
  26. package/lib/drama/skills/short-drama-assets/references/stage-contract.md +12 -105
  27. package/lib/drama/skills/short-drama-assets/references/voice-direction.md +12 -32
  28. package/lib/drama/skills/short-drama-assets/scripts/asset_check.py +1 -1
  29. package/lib/drama/skills/short-drama-image-prompts/SKILL.md +45 -155
  30. package/lib/drama/skills/short-drama-image-prompts/references/character-and-look.md +12 -13
  31. package/lib/drama/skills/short-drama-image-prompts/references/common-recipe.md +12 -13
  32. package/lib/drama/skills/short-drama-image-prompts/references/edit-and-revision.md +39 -51
  33. package/lib/drama/skills/short-drama-image-prompts/references/location-plate.md +3 -4
  34. package/lib/drama/skills/short-drama-image-prompts/references/look-and-state-variant.md +15 -14
  35. package/lib/drama/skills/short-drama-image-prompts/references/lookdev-frame.md +11 -15
  36. package/lib/drama/skills/short-drama-image-prompts/references/production-sheet-recipes.md +1 -1
  37. package/lib/drama/skills/short-drama-image-prompts/references/prop-plate.md +4 -7
  38. package/lib/drama/skills/short-drama-image-prompts/references/review-and-fixtures.md +23 -23
  39. package/lib/drama/skills/short-drama-image-prompts/references/stage-contract.md +8 -65
  40. package/lib/drama/skills/short-drama-image-prompts/scripts/image_prompt_check.py +8 -8
  41. package/lib/drama/skills/short-drama-image-prompts/scripts/selftest.py +4 -2
  42. package/lib/drama/skills/short-drama-produce/SKILL.md +67 -15
  43. package/lib/drama/skills/short-drama-produce/references/adapter-contract.md +65 -8
  44. package/lib/drama/skills/short-drama-produce/references/providers/minimax-h3-video.md +85 -0
  45. package/lib/drama/skills/short-drama-produce/references/providers/seedance.md +27 -10
  46. package/lib/drama/skills/short-drama-produce/scripts/production_tool.py +362 -3
  47. package/lib/drama/skills/short-drama-produce/scripts/provider_adapters.py +627 -40
  48. package/lib/drama/skills/short-drama-produce/scripts/selftest.py +5 -4
  49. package/lib/drama/skills/short-drama-review/SKILL.md +61 -123
  50. package/lib/drama/skills/short-drama-review/references/anti-template-repair.md +10 -15
  51. package/lib/drama/skills/short-drama-review/references/production-quality-gates.md +15 -16
  52. package/lib/drama/skills/short-drama-review/references/project-calibration.md +7 -9
  53. package/lib/drama/skills/short-drama-review/references/review-method.md +8 -9
  54. package/lib/drama/skills/short-drama-review/references/rubric-assets-prompts.md +9 -13
  55. package/lib/drama/skills/short-drama-review/references/rubric-story-script.md +104 -4
  56. package/lib/drama/skills/short-drama-review/references/rubric-visual-motion.md +27 -19
  57. package/lib/drama/skills/short-drama-review/references/stage-contract.md +4 -63
  58. package/lib/drama/skills/short-drama-review/scripts/review_check.py +1 -1
  59. package/lib/drama/skills/short-drama-storyboard/SKILL.md +116 -238
  60. package/lib/drama/skills/short-drama-storyboard/assets/shot-template.jsonl +1 -1
  61. package/lib/drama/skills/short-drama-storyboard/references/blocking-playbooks.md +9 -34
  62. package/lib/drama/skills/short-drama-storyboard/references/comic-keyframe-lexicon.md +156 -0
  63. package/lib/drama/skills/short-drama-storyboard/references/coverage-audition.md +5 -10
  64. package/lib/drama/skills/short-drama-storyboard/references/keyframe-craft.md +12 -7
  65. package/lib/drama/skills/short-drama-storyboard/references/production-shot-grammar.md +19 -4
  66. package/lib/drama/skills/short-drama-storyboard/references/review-and-fixtures.md +27 -62
  67. package/lib/drama/skills/short-drama-storyboard/references/scene-visual-plan.md +16 -25
  68. package/lib/drama/skills/short-drama-storyboard/references/screenplay-to-keyframe-example.md +21 -23
  69. package/lib/drama/skills/short-drama-storyboard/references/shot-craft.md +8 -10
  70. package/lib/drama/skills/short-drama-storyboard/references/shot-revision-identity.md +9 -13
  71. package/lib/drama/skills/short-drama-storyboard/references/stage-contract.md +16 -71
  72. package/lib/drama/skills/short-drama-storyboard/scripts/storyboard_check.py +1 -1
  73. package/lib/drama/skills/short-drama-video-prompts/SKILL.md +123 -230
  74. package/lib/drama/skills/short-drama-video-prompts/assets/motion-spec.jsonl.md +6 -1
  75. package/lib/drama/skills/short-drama-video-prompts/assets/video-prompts.md +17 -1
  76. package/lib/drama/skills/short-drama-video-prompts/references/camera-audio-continuity.md +10 -8
  77. package/lib/drama/skills/short-drama-video-prompts/references/delivery-profile.md +24 -6
  78. package/lib/drama/skills/short-drama-video-prompts/references/generability.md +2 -2
  79. package/lib/drama/skills/short-drama-video-prompts/references/minimax-h3.md +154 -0
  80. package/lib/drama/skills/short-drama-video-prompts/references/motion-recipe.md +35 -27
  81. package/lib/drama/skills/short-drama-video-prompts/references/performance-action-timing.md +8 -11
  82. package/lib/drama/skills/short-drama-video-prompts/references/production-prompt-grammar.md +13 -10
  83. package/lib/drama/skills/short-drama-video-prompts/references/review-and-fixtures.md +34 -63
  84. package/lib/drama/skills/short-drama-video-prompts/references/seedance-2.0.md +41 -0
  85. package/lib/drama/skills/short-drama-video-prompts/references/seedance-2.5.md +66 -0
  86. package/lib/drama/skills/short-drama-video-prompts/references/stage-contract.md +17 -73
  87. package/lib/drama/skills/short-drama-video-prompts/references/target-model-profile.md +115 -0
  88. package/lib/drama/skills/short-drama-video-prompts/scripts/container_check.py +1 -1
  89. package/lib/drama/skills/short-drama-video-prompts/scripts/music_spec_check.py +1 -1
  90. package/lib/drama/skills/short-drama-write/SKILL.md +74 -268
  91. package/lib/drama/skills/short-drama-write/references/dialogue-craft.md +7 -0
  92. package/lib/drama/skills/short-drama-write/references/scene-handoff-capsule.md +17 -43
  93. package/lib/drama/skills/short-drama-write/references/screenplay-format.md +15 -15
  94. package/lib/drama/skills/short-drama-write/references/script-craft.md +208 -21
  95. package/lib/drama/skills/short-drama-write/references/stage-contract.md +11 -70
  96. package/lib/drama/skills/short-drama-write/scripts/duration_estimate.py +1 -1
  97. package/lib/drama/skills/short-drama-write/scripts/screenplay_index.py +2 -2
  98. package/lib/drama/skills/short-drama-write/scripts/voice_sheet_check.py +1 -1
  99. package/lib/index.js +971 -46
  100. package/lib/index.js.map +4 -4
  101. package/lib/novel-to-game/LICENSE +21 -0
  102. package/lib/novel-to-game/README.md +180 -0
  103. package/lib/novel-to-game/README_ZH.md +178 -0
  104. package/lib/novel-to-game/VERSION +1 -0
  105. package/lib/novel-to-game/examples/jin-ping-mei/build/BUILD_BRIEF.md +217 -0
  106. package/lib/novel-to-game/examples/jin-ping-mei/build/app/.vercelignore +3 -0
  107. package/lib/novel-to-game/examples/jin-ping-mei/build/app/RUN.md +130 -0
  108. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/bg/compound_new_guofeng.webp +0 -0
  109. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/finale/fate_coda.webp +0 -0
  110. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/finale/meng.webp +0 -0
  111. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/finale/pan.webp +0 -0
  112. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/finale/pinger.webp +0 -0
  113. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/finale/xuee.webp +0 -0
  114. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/finale/yue.webp +0 -0
  115. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/group/inner_court_accord_five.webp +0 -0
  116. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/group/inner_court_afterglow_five.webp +0 -0
  117. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/group/inner_court_alliance.webp +0 -0
  118. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/group/public_day10.webp +0 -0
  119. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/group/public_day15.webp +0 -0
  120. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/group/public_day5.webp +0 -0
  121. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/group/title_new_guofeng.webp +0 -0
  122. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/joint/pan_pinger.webp +0 -0
  123. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/joint/pan_xuee.webp +0 -0
  124. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/joint/yue_meng.webp +0 -0
  125. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/joint/yue_pan.webp +0 -0
  126. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/joint/yue_pinger.webp +0 -0
  127. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/meng/explicit.webp +0 -0
  128. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/meng/prelude.webp +0 -0
  129. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/milestone/meng.webp +0 -0
  130. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/milestone/pan.webp +0 -0
  131. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/milestone/pinger.webp +0 -0
  132. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/milestone/xuee.webp +0 -0
  133. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/milestone/yue.webp +0 -0
  134. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/pan/explicit.webp +0 -0
  135. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/pan/prelude.webp +0 -0
  136. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/pinger/explicit.webp +0 -0
  137. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/pinger/prelude.webp +0 -0
  138. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/xuee/explicit.webp +0 -0
  139. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/xuee/prelude.webp +0 -0
  140. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/yue/explicit.webp +0 -0
  141. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/yue/prelude.webp +0 -0
  142. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/heroine/meng/night.webp +0 -0
  143. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/heroine/pan/night.webp +0 -0
  144. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/heroine/pinger/night.webp +0 -0
  145. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/heroine/xuee/night.webp +0 -0
  146. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/heroine/yue/night.webp +0 -0
  147. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/household/li_jiaoer.webp +0 -0
  148. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/scene/gate_collector.webp +0 -0
  149. package/lib/novel-to-game/examples/jin-ping-mei/build/app/css/new-guofeng.css +1105 -0
  150. package/lib/novel-to-game/examples/jin-ping-mei/build/app/css/style.css +2539 -0
  151. package/lib/novel-to-game/examples/jin-ping-mei/build/app/index.html +18 -0
  152. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/assets.js +147 -0
  153. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/audio.js +332 -0
  154. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/data.js +7472 -0
  155. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/engine.js +13077 -0
  156. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/main.js +3028 -0
  157. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/text.js +32 -0
  158. package/lib/novel-to-game/examples/jin-ping-mei/build/app/package.json +10 -0
  159. package/lib/novel-to-game/examples/jin-ping-mei/build/app/vercel.json +23 -0
  160. package/lib/novel-to-game/examples/jin-ping-mei/build/art/generated-art.json +161 -0
  161. package/lib/novel-to-game/examples/jin-ping-mei/example.json +12 -0
  162. package/lib/novel-to-game/examples/jin-ping-mei/qa/README.md +31 -0
  163. package/lib/novel-to-game/examples/jin-ping-mei/qa/playable-model.json +99 -0
  164. package/lib/novel-to-game/examples/jin-ping-mei/qa/verification.json +41 -0
  165. package/lib/novel-to-game/examples/jin-ping-mei/qa/verify_playable_model.mjs +129 -0
  166. package/lib/novel-to-game/manifest.json +508 -0
  167. package/lib/novel-to-game/skills/game-art-direction/SKILL.md +73 -0
  168. package/lib/novel-to-game/skills/game-art-direction/agents/openai.yaml +4 -0
  169. package/lib/novel-to-game/skills/game-art-direction/references/art-direction-method.md +119 -0
  170. package/lib/novel-to-game/skills/game-build/SKILL.md +84 -0
  171. package/lib/novel-to-game/skills/game-build/agents/openai.yaml +4 -0
  172. package/lib/novel-to-game/skills/game-build/references/build-brief-contract.md +109 -0
  173. package/lib/novel-to-game/skills/game-build/references/generative-media-pipeline.md +56 -0
  174. package/lib/novel-to-game/skills/game-build/references/playable-model-contract.md +81 -0
  175. package/lib/novel-to-game/skills/game-build/references/tts-production-contract.md +37 -0
  176. package/lib/novel-to-game/skills/game-concept/SKILL.md +72 -0
  177. package/lib/novel-to-game/skills/game-concept/agents/openai.yaml +4 -0
  178. package/lib/novel-to-game/skills/game-concept/references/concept-method.md +94 -0
  179. package/lib/novel-to-game/skills/game-qa/SKILL.md +50 -0
  180. package/lib/novel-to-game/skills/game-qa/agents/openai.yaml +4 -0
  181. package/lib/novel-to-game/skills/game-qa/references/qa-contract.md +66 -0
  182. package/lib/novel-to-game/skills/game-qa/references/test-design-method.md +45 -0
  183. package/lib/novel-to-game/skills/game-world-design/SKILL.md +63 -0
  184. package/lib/novel-to-game/skills/game-world-design/agents/openai.yaml +4 -0
  185. package/lib/novel-to-game/skills/game-world-design/references/dialogue-design-method.md +59 -0
  186. package/lib/novel-to-game/skills/game-world-design/references/game-writing-craft.md +53 -0
  187. package/lib/novel-to-game/skills/game-world-design/references/narrative-design-method.md +84 -0
  188. package/lib/novel-to-game/skills/game-world-design/references/numeric-design-method.md +56 -0
  189. package/lib/novel-to-game/skills/game-world-design/references/world-design-method.md +124 -0
  190. package/lib/novel-to-game/skills/novel-game-analyze/SKILL.md +77 -0
  191. package/lib/novel-to-game/skills/novel-game-analyze/agents/openai.yaml +4 -0
  192. package/lib/novel-to-game/skills/novel-game-analyze/references/gameability-protocol.md +65 -0
  193. package/lib/novel-to-game/skills/novel-to-game/SKILL.md +71 -0
  194. package/lib/novel-to-game/skills/novel-to-game/agents/openai.yaml +4 -0
  195. package/lib/novel-to-game/skills/novel-to-game/references/intake-benchmark-reference.md +42 -0
  196. package/lib/novel-to-game/skills/novel-to-game/references/intake-method.md +51 -0
  197. package/lib/novel-to-game/skills/novel-to-game/references/pipeline-contract.md +65 -0
  198. package/lib/oh-story/manifest.json +419 -309
  199. package/lib/oh-story/roles/character-designer.md +4 -4
  200. package/lib/oh-story/roles/consistency-checker.md +1 -1
  201. package/lib/oh-story/roles/narrative-writer.md +41 -42
  202. package/lib/oh-story/roles/story-architect.md +19 -23
  203. package/lib/oh-story/roles/story-explorer.md +8 -5
  204. package/lib/oh-story/skills/browser-cdp/SKILL.md +1 -1
  205. package/lib/oh-story/skills/story/SKILL.md +16 -9
  206. package/lib/oh-story/skills/story/VERSION +1 -1
  207. package/lib/oh-story/skills/story/references/author-memory.md +163 -0
  208. package/lib/oh-story/skills/story/scripts/author_memory_commit.py +871 -0
  209. package/lib/oh-story/skills/story-cover/SKILL.md +1 -1
  210. package/lib/oh-story/skills/story-deslop/SKILL.md +10 -5
  211. package/lib/oh-story/skills/story-deslop/references/anti-ai-writing.md +2 -1
  212. package/lib/oh-story/skills/story-deslop/references/author-memory.md +163 -0
  213. package/lib/oh-story/skills/story-deslop/references/banned-words.md +6 -4
  214. package/lib/oh-story/skills/story-deslop/scripts/author_memory_commit.py +871 -0
  215. package/lib/oh-story/skills/story-deslop/scripts/check-ai-patterns.js +64 -1
  216. package/lib/oh-story/skills/story-import/SKILL.md +21 -8
  217. package/lib/oh-story/skills/story-import/references/format-and-structure.md +9 -10
  218. package/lib/oh-story/skills/story-import/references/structure-mapping-long.md +2 -2
  219. package/lib/oh-story/skills/story-import/references/structure-mapping-short.md +1 -1
  220. package/lib/oh-story/skills/story-import/references/tracking-transaction.md +14 -6
  221. package/lib/oh-story/skills/story-import/scripts/check-outline-contract.js +251 -0
  222. package/lib/oh-story/skills/story-import/scripts/tracking_commit.py +98 -9
  223. package/lib/oh-story/skills/story-import/scripts/wordcount_core.py +246 -0
  224. package/lib/oh-story/skills/story-long-analyze/SKILL.md +4 -4
  225. package/lib/oh-story/skills/story-long-scan/SKILL.md +1 -1
  226. package/lib/oh-story/skills/story-long-write/SKILL.md +35 -21
  227. package/lib/oh-story/skills/story-long-write/references/anti-ai-writing.md +2 -1
  228. package/lib/oh-story/skills/story-long-write/references/artifact-protocols.md +7 -3
  229. package/lib/oh-story/skills/story-long-write/references/author-memory.md +163 -0
  230. package/lib/oh-story/skills/story-long-write/references/banned-words.md +6 -4
  231. package/lib/oh-story/skills/story-long-write/references/cross-book-recall.md +6 -6
  232. package/lib/oh-story/skills/story-long-write/references/genre-prose-cards.md +1 -1
  233. package/lib/oh-story/skills/story-long-write/references/genre-readers.md +1 -1
  234. package/lib/oh-story/skills/{story-setup/references/agent-references/hooks-chapter.md → story-long-write/references/long-chapter-hooks.md} +5 -5
  235. package/lib/oh-story/skills/story-long-write/references/{quality-checklist.md → long-chapter-quality.md} +2 -1
  236. package/lib/oh-story/skills/story-long-write/references/long-format.md +42 -0
  237. package/lib/oh-story/skills/{story-setup/references/agent-references/genre-catalog.md → story-long-write/references/long-genre-catalog.md} +11 -97
  238. package/lib/oh-story/skills/story-long-write/references/{genre-core-mechanics.md → long-genre-mechanics.md} +1 -1
  239. package/lib/oh-story/skills/story-long-write/references/{reversal-toolkit.md → long-reversal.md} +18 -32
  240. package/lib/oh-story/skills/story-long-write/references/{hooks-suspense.md → long-suspense.md} +6 -6
  241. package/lib/oh-story/skills/story-long-write/references/opening-design.md +1 -1
  242. package/lib/oh-story/skills/story-long-write/references/outline-structure-theory.md +1 -1
  243. package/lib/oh-story/skills/story-long-write/references/style-genre-modules.md +1 -1
  244. package/lib/oh-story/skills/story-long-write/references/tracking-transaction.md +14 -6
  245. package/lib/oh-story/skills/story-long-write/references/workflow-chapter.md +32 -27
  246. package/lib/oh-story/skills/story-long-write/references/workflow-daily.md +5 -4
  247. package/lib/oh-story/skills/story-long-write/references/workflow-revision.md +2 -2
  248. package/lib/oh-story/skills/story-long-write/references/workflow-setup.md +17 -11
  249. package/lib/oh-story/skills/story-long-write/references/writing-craft.md +54 -54
  250. package/lib/oh-story/skills/story-long-write/scripts/author_memory_commit.py +871 -0
  251. package/lib/oh-story/skills/story-long-write/scripts/check-ai-patterns.js +64 -1
  252. package/lib/oh-story/skills/story-long-write/scripts/check-outline-contract.js +251 -0
  253. package/lib/oh-story/skills/story-long-write/scripts/storyctl.py +303 -0
  254. package/lib/oh-story/skills/story-long-write/scripts/tracking_commit.py +98 -9
  255. package/lib/oh-story/skills/story-long-write/scripts/wordcount_core.py +246 -0
  256. package/lib/oh-story/skills/story-review/SKILL.md +26 -17
  257. package/lib/oh-story/skills/story-review/references/anti-ai-writing.md +2 -1
  258. package/lib/oh-story/skills/story-review/references/author-memory.md +163 -0
  259. package/lib/oh-story/skills/story-review/references/banned-words.md +6 -4
  260. package/lib/oh-story/skills/story-review/references/{quality-checklist.md → review-quality.md} +22 -21
  261. package/lib/oh-story/skills/story-review/references/tracking-transaction.md +14 -6
  262. package/lib/oh-story/skills/story-review/scripts/author_memory_commit.py +871 -0
  263. package/lib/oh-story/skills/story-review/scripts/check-ai-patterns.js +64 -1
  264. package/lib/oh-story/skills/story-review/scripts/tracking_commit.py +98 -9
  265. package/lib/oh-story/skills/story-review/scripts/wordcount_core.py +246 -0
  266. package/lib/oh-story/skills/story-setup/SKILL.md +85 -41
  267. package/lib/oh-story/skills/story-setup/references/agent-references/agent-quality.md +72 -0
  268. package/lib/oh-story/skills/story-setup/references/agent-references/agent-reference-profiles.md +55 -0
  269. package/lib/oh-story/skills/story-setup/references/agent-references/anti-ai-writing.md +2 -1
  270. package/lib/oh-story/skills/story-setup/references/agent-references/banned-words.md +6 -4
  271. package/lib/oh-story/skills/story-setup/references/agent-references/format-and-structure.md +9 -10
  272. package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards.md +1 -1
  273. package/lib/oh-story/skills/story-setup/references/agent-references/genre-readers.md +1 -1
  274. package/lib/oh-story/skills/{story-short-analyze/references/hooks-chapter.md → story-setup/references/agent-references/long-chapter-hooks.md} +5 -5
  275. package/lib/oh-story/skills/story-setup/references/agent-references/long-emotional-methods.md +209 -0
  276. package/lib/oh-story/skills/{story-long-write/references/genre-catalog.md → story-setup/references/agent-references/long-genre-catalog.md} +11 -97
  277. package/lib/oh-story/skills/story-setup/references/agent-references/{genre-core-mechanics.md → long-genre-mechanics.md} +1 -1
  278. package/lib/oh-story/skills/story-setup/references/agent-references/long-quality.md +40 -0
  279. package/lib/oh-story/skills/{story-short-write/references/reversal-toolkit.md → story-setup/references/agent-references/long-reversal.md} +18 -32
  280. package/lib/oh-story/skills/{story-short-write/references/hooks-suspense.md → story-setup/references/agent-references/long-suspense.md} +6 -6
  281. package/lib/oh-story/skills/story-setup/references/agent-references/opening-design.md +1 -1
  282. package/lib/oh-story/skills/story-setup/references/agent-references/{emotional-methods.md → short-emotional-methods.md} +4 -4
  283. package/lib/oh-story/skills/{story-long-write/references/genre-writing-formulas.md → story-setup/references/agent-references/short-genre-formulas.md} +32 -44
  284. package/lib/oh-story/skills/story-setup/references/agent-references/short-quality.md +39 -0
  285. package/lib/oh-story/skills/story-setup/references/agent-references/{reversal-toolkit.md → short-reversal.md} +29 -23
  286. package/lib/oh-story/skills/story-setup/references/agent-references/{hooks-suspense.md → short-suspense.md} +31 -31
  287. package/lib/oh-story/skills/story-setup/references/agent-references/style-genre-modules.md +1 -1
  288. package/lib/oh-story/skills/story-setup/references/agent-references/writing-craft.md +55 -55
  289. package/lib/oh-story/skills/story-short-analyze/SKILL.md +28 -28
  290. package/lib/oh-story/skills/story-short-analyze/references/{character-basics.md → analysis-character-basics.md} +1 -1
  291. package/lib/oh-story/skills/story-short-analyze/references/{character-design-methods.md → analysis-character-design.md} +1 -1
  292. package/lib/oh-story/skills/story-short-analyze/references/{character-relations.md → analysis-character-relations.md} +1 -1
  293. package/lib/oh-story/skills/story-short-analyze/references/{hooks-paragraph.md → analysis-paragraph-hooks.md} +1 -1
  294. package/lib/oh-story/skills/story-short-analyze/references/{genre-readers.md → analysis-reader-profile.md} +2 -2
  295. package/lib/oh-story/skills/story-short-analyze/references/analysis-report-style.md +45 -0
  296. package/lib/oh-story/skills/story-short-analyze/references/analysis-short-genres.md +65 -0
  297. package/lib/oh-story/skills/story-short-analyze/references/analysis-short-hooks.md +77 -0
  298. package/lib/oh-story/skills/story-short-analyze/references/analysis-short-mechanics.md +82 -0
  299. package/lib/oh-story/skills/story-short-analyze/references/analysis-short-patterns.md +50 -0
  300. package/lib/oh-story/skills/story-short-analyze/references/analysis-short-suspense.md +98 -0
  301. package/lib/oh-story/skills/story-short-analyze/references/{genre-writing-techniques.md → analysis-writing-techniques.md} +21 -19
  302. package/lib/oh-story/skills/story-short-analyze/references/deconstruction-examples.md +1 -1
  303. package/lib/oh-story/skills/story-short-analyze/references/material-decomposition.md +21 -28
  304. package/lib/oh-story/skills/story-short-analyze/references/output-contract.md +1 -1
  305. package/lib/oh-story/skills/story-short-analyze/references/output-templates.md +17 -17
  306. package/lib/oh-story/skills/story-short-analyze/references/{quality-checklist.md → source-story-quality.md} +28 -49
  307. package/lib/oh-story/skills/story-short-analyze/references/zhihu-style.md +2 -2
  308. package/lib/oh-story/skills/story-short-scan/SKILL.md +1 -1
  309. package/lib/oh-story/skills/story-short-write/SKILL.md +78 -55
  310. package/lib/oh-story/skills/story-short-write/references/author-memory.md +163 -0
  311. package/lib/oh-story/skills/story-short-write/references/banned-words.md +6 -4
  312. package/lib/oh-story/skills/story-short-write/references/cross-book-recall.md +3 -3
  313. package/lib/oh-story/skills/story-short-write/references/emotional-methods.md +4 -4
  314. package/lib/oh-story/skills/story-short-write/references/genre-styles//344/270/226/346/203/205/346/211/223/350/204/270.md +3 -3
  315. package/lib/oh-story/skills/story-short-write/references/genre-styles//345/217/214/347/224/267/344/270/273.md +2 -2
  316. package/lib/oh-story/skills/story-short-write/references/genre-styles//345/244/215/344/273/207/346/211/223/350/204/270.md +3 -3
  317. package/lib/oh-story/skills/story-short-write/references/genre-styles//345/256/205/346/226/227/345/256/253/346/226/227.md +6 -6
  318. package/lib/oh-story/skills/story-short-write/references/genre-styles//346/200/273/350/243/201/350/261/252/351/227/250.md +3 -3
  319. package/lib/oh-story/skills/story-short-write/references/genre-styles//346/202/254/347/226/221.md +4 -4
  320. package/lib/oh-story/skills/story-short-write/references/genre-styles//346/260/221/344/277/227/346/200/252/350/260/210.md +7 -7
  321. package/lib/oh-story/skills/story-short-write/references/genre-styles//346/262/231/351/233/225/350/204/221/346/264/236.md +5 -5
  322. package/lib/oh-story/skills/story-short-write/references/genre-styles//347/224/234/345/256/240.md +4 -4
  323. package/lib/oh-story/skills/story-short-write/references/genre-styles//350/277/275/345/246/273/347/201/253/350/221/254/345/234/272.md +3 -3
  324. package/lib/oh-story/skills/story-short-write/references/genre-writing-formulas.md +32 -44
  325. package/lib/oh-story/skills/story-short-write/references/genre-writing-techniques.md +20 -18
  326. package/lib/oh-story/skills/story-short-write/references/output-contract.md +1 -1
  327. package/lib/oh-story/skills/story-short-write/references/short-craft.md +18 -18
  328. package/lib/oh-story/skills/story-short-write/references/short-deslop.md +1 -1
  329. package/lib/oh-story/skills/story-short-write/references/short-format.md +38 -8
  330. package/lib/oh-story/skills/story-short-write/references/{quality-checklist.md → short-prose-quality.md} +22 -21
  331. package/lib/oh-story/skills/story-short-write/references/short-reversal.md +355 -0
  332. package/lib/oh-story/skills/{story-short-analyze/references/hooks-suspense.md → story-short-write/references/short-suspense.md} +31 -31
  333. package/lib/oh-story/skills/story-short-write/references/submission-craft.md +2 -2
  334. package/lib/oh-story/skills/story-short-write/references/writing-workflow.md +31 -22
  335. package/lib/oh-story/skills/story-short-write/scripts/author_memory_commit.py +871 -0
  336. package/lib/oh-story/skills/story-short-write/scripts/check-ai-patterns.js +64 -1
  337. package/lib/oh-story/skills/story-short-write/scripts/check-delivery-contract.js +212 -0
  338. package/lib/oh-story/skills/story-short-write/scripts/check-phase2-contract.js +363 -0
  339. package/lib/types/client/drama-production-view.d.ts +34 -0
  340. package/lib/types/client/drama-production-view.d.ts.map +1 -0
  341. package/lib/types/client/drama-production.d.ts +92 -0
  342. package/lib/types/client/drama-production.d.ts.map +1 -0
  343. package/lib/types/client/file-activity.d.ts +9 -2
  344. package/lib/types/client/file-activity.d.ts.map +1 -1
  345. package/lib/types/client/index.d.ts +1 -1
  346. package/lib/types/client/index.d.ts.map +1 -1
  347. package/lib/types/client/production-intents.d.ts +9 -0
  348. package/lib/types/client/production-intents.d.ts.map +1 -0
  349. package/lib/types/client/production-prompts.d.ts +9 -0
  350. package/lib/types/client/production-prompts.d.ts.map +1 -0
  351. package/lib/types/client/production-runtime.d.ts +58 -0
  352. package/lib/types/client/production-runtime.d.ts.map +1 -0
  353. package/lib/types/client/video-studio.d.ts +41 -0
  354. package/lib/types/client/video-studio.d.ts.map +1 -0
  355. package/lib/types/client/workbench-ui.d.ts +5 -0
  356. package/lib/types/client/workbench-ui.d.ts.map +1 -0
  357. package/lib/types/game-verification.d.ts +16 -0
  358. package/lib/types/game-verification.d.ts.map +1 -0
  359. package/lib/types/index.d.ts +5 -2
  360. package/lib/types/index.d.ts.map +1 -1
  361. package/lib/types/production-intent.d.ts +21 -0
  362. package/lib/types/production-intent.d.ts.map +1 -0
  363. package/lib/types/production-tool.d.ts +5 -0
  364. package/lib/types/production-tool.d.ts.map +1 -0
  365. package/lib/types/reference-tool.d.ts +6 -0
  366. package/lib/types/reference-tool.d.ts.map +1 -0
  367. package/lib/types/role-provider.d.ts.map +1 -1
  368. package/lib/types/role-tool.d.ts +3 -1
  369. package/lib/types/role-tool.d.ts.map +1 -1
  370. package/lib/types/skill-provider.d.ts +7 -0
  371. package/lib/types/skill-provider.d.ts.map +1 -1
  372. package/lib/types/video-project.d.ts +42 -0
  373. package/lib/types/video-project.d.ts.map +1 -0
  374. package/lib/types/workspace-request-trust.d.ts +6 -0
  375. package/lib/types/workspace-request-trust.d.ts.map +1 -1
  376. package/lib/types/workspace-route.d.ts +20 -0
  377. package/lib/types/workspace-route.d.ts.map +1 -1
  378. package/lib/video-recap/CHANGELOG.md +282 -0
  379. package/lib/video-recap/LICENSE +21 -0
  380. package/lib/video-recap/README.en.md +257 -0
  381. package/lib/video-recap/README.md +255 -0
  382. package/lib/video-recap/manifest.json +684 -0
  383. package/lib/video-recap/skills/video-assemble/SKILL.md +97 -0
  384. package/lib/video-recap/skills/video-assemble/references/jianying/LICENSE.duo-video +21 -0
  385. package/lib/video-recap/skills/video-assemble/references/jianying/SOURCE.md +15 -0
  386. package/lib/video-recap/skills/video-assemble/references/jianying/empty_draft_meta_info.json +69 -0
  387. package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_combination_segment.json +84 -0
  388. package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_combination_video_material.json +98 -0
  389. package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_draft.json +204 -0
  390. package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_material_video.json +83 -0
  391. package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_meta_material_value.json +23 -0
  392. package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_project_info.json +133 -0
  393. package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_segment.json +70 -0
  394. package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_text_styles.json +30 -0
  395. package/lib/video-recap/skills/video-assemble/references/jianying/empty_yj_material_audio.json +41 -0
  396. package/lib/video-recap/skills/video-assemble/references/jianying/empty_yj_material_text.json +109 -0
  397. package/lib/video-recap/skills/video-assemble/scripts/artifacts.py +88 -0
  398. package/lib/video-recap/skills/video-assemble/scripts/assemble.py +345 -0
  399. package/lib/video-recap/skills/video-assemble/scripts/assemble_constants.py +34 -0
  400. package/lib/video-recap/skills/video-assemble/scripts/assembly_contract.py +305 -0
  401. package/lib/video-recap/skills/video-assemble/scripts/assembly_settings.py +94 -0
  402. package/lib/video-recap/skills/video-assemble/scripts/audio_automation.py +205 -0
  403. package/lib/video-recap/skills/video-assemble/scripts/audio_mix.py +555 -0
  404. package/lib/video-recap/skills/video-assemble/scripts/export_jianying.py +261 -0
  405. package/lib/video-recap/skills/video-assemble/scripts/jianying_builders.py +767 -0
  406. package/lib/video-recap/skills/video-assemble/scripts/jianying_model.py +111 -0
  407. package/lib/video-recap/skills/video-assemble/scripts/jianying_optional.py +24 -0
  408. package/lib/video-recap/skills/video-assemble/scripts/jianying_schema.py +109 -0
  409. package/lib/video-recap/skills/video-assemble/scripts/jianying_templates.py +37 -0
  410. package/lib/video-recap/skills/video-assemble/scripts/jianying_timeline_contract.py +191 -0
  411. package/lib/video-recap/skills/video-assemble/scripts/jianying_tracks.py +75 -0
  412. package/lib/video-recap/skills/video-assemble/scripts/jianying_writer.py +394 -0
  413. package/lib/video-recap/skills/video-assemble/scripts/lib.py +239 -0
  414. package/lib/video-recap/skills/video-assemble/scripts/media.py +243 -0
  415. package/lib/video-recap/skills/video-assemble/scripts/narration_audio.py +477 -0
  416. package/lib/video-recap/skills/video-assemble/scripts/render_preflight.py +46 -0
  417. package/lib/video-recap/skills/video-assemble/scripts/source_subtitles.py +486 -0
  418. package/lib/video-recap/skills/video-assemble/scripts/subtitle_core.py +376 -0
  419. package/lib/video-recap/skills/video-assemble/scripts/subtitle_render.py +88 -0
  420. package/lib/video-recap/skills/video-assemble/scripts/timeline.py +248 -0
  421. package/lib/video-recap/skills/video-assemble/scripts/timeline_emit.py +89 -0
  422. package/lib/video-recap/skills/video-assemble/scripts/visual_render.py +512 -0
  423. package/lib/video-recap/skills/video-cut/SKILL.md +90 -0
  424. package/lib/video-recap/skills/video-cut/scripts/cut.py +67 -0
  425. package/lib/video-recap/skills/video-cut/scripts/cut_cli.py +320 -0
  426. package/lib/video-recap/skills/video-cut/scripts/cut_contract.py +545 -0
  427. package/lib/video-recap/skills/video-cut/scripts/cut_render.py +348 -0
  428. package/lib/video-recap/skills/video-cut/scripts/lib.py +77 -0
  429. package/lib/video-recap/skills/video-cut/scripts/media_geometry.py +341 -0
  430. package/lib/video-recap/skills/video-cut/scripts/narration_mapping.py +249 -0
  431. package/lib/video-recap/skills/video-cut/scripts/sentence_boundaries.py +745 -0
  432. package/lib/video-recap/skills/video-recap/SKILL.md +216 -0
  433. package/lib/video-recap/skills/video-recap/references/config-playbook.md +61 -0
  434. package/lib/video-recap/skills/video-recap/references/creative-editing-playbook.md +225 -0
  435. package/lib/video-recap/skills/video-recap/references/data-schema.md +534 -0
  436. package/lib/video-recap/skills/video-recap/references/research-guide.md +74 -0
  437. package/lib/video-recap/skills/video-recap/references/shift-left-qc-schema.md +23 -0
  438. package/lib/video-recap/skills/video-recap/references/timeline-and-jianying.md +251 -0
  439. package/lib/video-recap/skills/video-recap/scripts/doctor.py +483 -0
  440. package/lib/video-recap/skills/video-recap/scripts/final_qc.py +737 -0
  441. package/lib/video-recap/skills/video-recap/scripts/lib.py +242 -0
  442. package/lib/video-recap/skills/video-recap/scripts/materials.py +457 -0
  443. package/lib/video-recap/skills/video-recap/scripts/mimo_qc.py +95 -0
  444. package/lib/video-recap/skills/video-recap/scripts/mimo_qc_client.py +18 -0
  445. package/lib/video-recap/skills/video-recap/scripts/mimo_qc_contract.py +9 -0
  446. package/lib/video-recap/skills/video-recap/scripts/mimo_qc_evidence.py +371 -0
  447. package/lib/video-recap/skills/video-recap/scripts/mimo_qc_observations.py +201 -0
  448. package/lib/video-recap/skills/video-recap/scripts/mimo_qc_payload.py +227 -0
  449. package/lib/video-recap/skills/video-recap/scripts/mimo_qc_report.py +362 -0
  450. package/lib/video-recap/skills/video-recap/scripts/mimo_qc_runner.py +129 -0
  451. package/lib/video-recap/skills/video-recap/scripts/qc_contract.py +338 -0
  452. package/lib/video-recap/skills/video-recap/scripts/recap.py +9 -0
  453. package/lib/video-recap/skills/video-recap/scripts/recap_cli.py +140 -0
  454. package/lib/video-recap/skills/video-recap/scripts/recap_inspect.py +550 -0
  455. package/lib/video-recap/skills/video-recap/scripts/recap_review.py +77 -0
  456. package/lib/video-recap/skills/video-recap/scripts/recap_runner.py +654 -0
  457. package/lib/video-recap/skills/video-recap/scripts/recap_runtime.py +335 -0
  458. package/lib/video-recap/skills/video-recap/scripts/recap_stage_qc.py +217 -0
  459. package/lib/video-recap/skills/video-recap/scripts/recap_timeline.py +795 -0
  460. package/lib/video-recap/skills/video-script/SKILL.md +248 -0
  461. package/lib/video-recap/skills/video-script/references/creative-editing-playbook.md +225 -0
  462. package/lib/video-recap/skills/video-script/references/research-guide.md +75 -0
  463. package/lib/video-recap/skills/video-script/scripts/agent_brief.py +399 -0
  464. package/lib/video-recap/skills/video-script/scripts/agent_text.py +410 -0
  465. package/lib/video-recap/skills/video-script/scripts/brief_context.py +403 -0
  466. package/lib/video-recap/skills/video-script/scripts/brief_inputs.py +332 -0
  467. package/lib/video-recap/skills/video-script/scripts/brief_timeline.py +442 -0
  468. package/lib/video-recap/skills/video-script/scripts/deslop_qc.py +237 -0
  469. package/lib/video-recap/skills/video-script/scripts/evidence_bundle.py +492 -0
  470. package/lib/video-recap/skills/video-script/scripts/lib.py +327 -0
  471. package/lib/video-recap/skills/video-script/scripts/narration.py +12 -0
  472. package/lib/video-recap/skills/video-script/scripts/narration_lint.py +678 -0
  473. package/lib/video-recap/skills/video-script/scripts/review.py +42 -0
  474. package/lib/video-recap/skills/video-script/scripts/review_grounding.py +262 -0
  475. package/lib/video-recap/skills/video-script/scripts/review_response.py +761 -0
  476. package/lib/video-recap/skills/video-script/scripts/review_runner.py +200 -0
  477. package/lib/video-recap/skills/video-script/scripts/speech_ownership.py +204 -0
  478. package/lib/video-recap/skills/video-script/scripts/timeline_fusion.py +199 -0
  479. package/lib/video-recap/skills/video-script/scripts/validate.py +164 -0
  480. package/lib/video-recap/skills/video-understanding/SKILL.md +75 -0
  481. package/lib/video-recap/skills/video-understanding/references/data-schema.md +299 -0
  482. package/lib/video-recap/skills/video-understanding/references/prompt-templates.md +37 -0
  483. package/lib/video-recap/skills/video-understanding/references/research-guide.md +74 -0
  484. package/lib/video-recap/skills/video-understanding/scripts/agent_brief.py +399 -0
  485. package/lib/video-recap/skills/video-understanding/scripts/agent_text.py +410 -0
  486. package/lib/video-recap/skills/video-understanding/scripts/asr.py +260 -0
  487. package/lib/video-recap/skills/video-understanding/scripts/brief.py +12 -0
  488. package/lib/video-recap/skills/video-understanding/scripts/brief_context.py +403 -0
  489. package/lib/video-recap/skills/video-understanding/scripts/brief_inputs.py +332 -0
  490. package/lib/video-recap/skills/video-understanding/scripts/brief_timeline.py +442 -0
  491. package/lib/video-recap/skills/video-understanding/scripts/consolidate.py +647 -0
  492. package/lib/video-recap/skills/video-understanding/scripts/deslop_qc.py +237 -0
  493. package/lib/video-recap/skills/video-understanding/scripts/detect.py +513 -0
  494. package/lib/video-recap/skills/video-understanding/scripts/extract.py +62 -0
  495. package/lib/video-recap/skills/video-understanding/scripts/lib.py +470 -0
  496. package/lib/video-recap/skills/video-understanding/scripts/narration_lint.py +678 -0
  497. package/lib/video-recap/skills/video-understanding/scripts/speech_ownership.py +204 -0
  498. package/lib/video-recap/skills/video-understanding/scripts/storyboard.py +507 -0
  499. package/lib/video-recap/skills/video-understanding/scripts/timeline_fusion.py +199 -0
  500. package/lib/video-recap/skills/video-understanding/scripts/understand.py +9 -0
  501. package/lib/video-recap/skills/video-understanding/scripts/understanding_brief.py +216 -0
  502. package/lib/video-recap/skills/video-understanding/scripts/understanding_cache.py +327 -0
  503. package/lib/video-recap/skills/video-understanding/scripts/understanding_runner.py +367 -0
  504. package/lib/video-recap/skills/video-understanding/scripts/understanding_storyboard.py +162 -0
  505. package/lib/video-recap/skills/video-understanding/scripts/vlm.py +705 -0
  506. package/lib/video-recap/skills/video-voiceover/SKILL.md +81 -0
  507. package/lib/video-recap/skills/video-voiceover/scripts/dub.py +637 -0
  508. package/lib/video-recap/skills/video-voiceover/scripts/fish_audio.py +109 -0
  509. package/lib/video-recap/skills/video-voiceover/scripts/lib.py +421 -0
  510. package/lib/video-recap/skills/video-voiceover/scripts/tts_audio.py +113 -0
  511. package/lib/video-recap/skills/video-voiceover/scripts/voiceover.py +782 -0
  512. package/package.json +57 -41
  513. package/lib/drama/skills/short-drama/references/lifecycle-commands.md +0 -130
  514. package/lib/oh-story/skills/story-deslop/scripts/check-outline-copy.js +0 -241
  515. package/lib/oh-story/skills/story-long-write/references/format-and-structure.md +0 -169
  516. package/lib/oh-story/skills/story-setup/references/agent-references/genre-writing-formulas.md +0 -444
  517. package/lib/oh-story/skills/story-setup/references/agent-references/quality-checklist.md +0 -247
  518. package/lib/oh-story/skills/story-short-analyze/references/anti-ai-writing.md +0 -582
  519. package/lib/oh-story/skills/story-short-analyze/references/banned-words.md +0 -147
  520. package/lib/oh-story/skills/story-short-analyze/references/genre-catalog.md +0 -490
  521. package/lib/oh-story/skills/story-short-analyze/references/genre-core-mechanics.md +0 -425
  522. package/lib/oh-story/skills/story-short-analyze/references/genre-writing-formulas.md +0 -453
  523. /package/lib/oh-story/skills/{story-long-write/references/hooks-chapter.md → story-setup/references/agent-references/short-chapter-hooks.md} +0 -0
  524. /package/lib/oh-story/skills/{story-long-write/references/hooks-paragraph.md → story-setup/references/agent-references/short-paragraph-hooks.md} +0 -0
@@ -0,0 +1,1105 @@
1
+ /*
2
+ * 新国风叙事 CG 主题(2026-08)
3
+ *
4
+ * 目标不是复刻古画,也不是把古装人物放进现代时尚棚拍。完整保留晚明世界,
5
+ * 以当代文字游戏常见的二维人物审美、通透光色、情绪化镜头和丝绸层次重塑界面。
6
+ * 白日保持春庭高明度;夜景用蓝紫月光与暖灯形成可读层次,不允许全屏压黑。
7
+ */
8
+
9
+ :root {
10
+ --paper: #fff7ed;
11
+ --paper-light: #fffdf8;
12
+ --paper-dark: #e7d6c7;
13
+ --ink: #292d3b;
14
+ --ink-soft: #646676;
15
+ --night: #e8edf8;
16
+ --night-soft: #d8dfef;
17
+ --gold: #b98642;
18
+ --gold-bright: #d2a15b;
19
+ --cinnabar: #c84f5c;
20
+ --jade: #3f8f83;
21
+ --honey: #d39847;
22
+ --azurite: #355f98;
23
+ --lilac: #8c79ad;
24
+ --line: rgba(72, 75, 96, .2);
25
+ --silk: rgba(255, 250, 245, .9);
26
+ --silk-strong: rgba(255, 253, 249, .975);
27
+ --cg-shadow: 0 22px 64px rgba(79, 63, 74, .16);
28
+ }
29
+
30
+ html,
31
+ body {
32
+ color: var(--ink);
33
+ background:
34
+ radial-gradient(circle at 14% 10%, rgba(242, 180, 188, .2), transparent 28%),
35
+ radial-gradient(circle at 86% 86%, rgba(91, 146, 170, .15), transparent 30%),
36
+ #f3e9df;
37
+ }
38
+
39
+ #app::after {
40
+ opacity: .34;
41
+ mix-blend-mode: soft-light;
42
+ background-image:
43
+ radial-gradient(ellipse at 12% 18%, rgba(255,255,255,.9) 0 1px, transparent 2px),
44
+ radial-gradient(ellipse at 74% 12%, rgba(229,137,154,.34) 0 1px, transparent 2px),
45
+ radial-gradient(circle at 48% 82%, rgba(82,128,152,.22) 0 1px, transparent 2px);
46
+ background-size: 31px 37px, 43px 49px, 53px 61px;
47
+ }
48
+
49
+ .loading,
50
+ .fatal-card {
51
+ color: var(--ink);
52
+ background: linear-gradient(145deg, #fffdf8, #f3e4dd);
53
+ }
54
+
55
+ .eyebrow { color: var(--cinnabar); }
56
+
57
+ /* 年龄门:从明亮宅门进入,而不是穿过一堵黑墙。 */
58
+ .age-gate {
59
+ color: var(--ink);
60
+ background:
61
+ linear-gradient(90deg, rgba(255,250,244,.96) 0%, rgba(255,250,244,.86) 45%, rgba(255,250,244,.25) 76%),
62
+ url('../assets/bg/compound_new_guofeng.webp') center / cover;
63
+ }
64
+
65
+ .age-gate::before {
66
+ border: 1px solid rgba(185, 127, 92, .26);
67
+ background: rgba(255, 248, 242, .12);
68
+ box-shadow:
69
+ inset 0 0 0 8px rgba(255, 253, 249, .42),
70
+ inset 0 0 0 9px rgba(200, 79, 92, .12),
71
+ 0 26px 90px rgba(75, 65, 82, .13);
72
+ }
73
+
74
+ .age-gate p:not(.eyebrow) { color: #5d6070; }
75
+
76
+ .age-seal {
77
+ color: var(--cinnabar);
78
+ border-color: var(--cinnabar);
79
+ background: rgba(255, 250, 245, .76);
80
+ box-shadow: 0 10px 28px rgba(152, 63, 79, .14);
81
+ }
82
+
83
+ /* 按钮是剧情签,不是黑色系统框。 */
84
+ .ink-button,
85
+ .plain-button {
86
+ border-color: rgba(80, 91, 120, .28);
87
+ color: #343745;
88
+ background: rgba(255, 252, 248, .84);
89
+ box-shadow: 0 9px 25px rgba(61, 69, 91, .08);
90
+ backdrop-filter: blur(8px);
91
+ }
92
+
93
+ .ink-button:hover:not(:disabled),
94
+ .plain-button:hover {
95
+ color: #a93345;
96
+ border-color: rgba(200, 79, 92, .58);
97
+ background: #fffaf7;
98
+ }
99
+
100
+ .ink-button.primary {
101
+ color: #fffaf7;
102
+ border-color: #b94050;
103
+ background: linear-gradient(145deg, #d96370, #b83f50);
104
+ box-shadow: 0 13px 32px rgba(177, 56, 73, .24);
105
+ }
106
+
107
+ .ink-button.primary:hover:not(:disabled),
108
+ .ink-button.primary:focus-visible {
109
+ color: #fff;
110
+ border-color: #a83546;
111
+ background: linear-gradient(145deg, #e06d79, #aa3547);
112
+ }
113
+
114
+ .ink-button.story-continue {
115
+ color: #406d91;
116
+ background: transparent;
117
+ box-shadow: none;
118
+ }
119
+
120
+ .ink-button.story-continue:hover:not(:disabled) { color: var(--cinnabar); }
121
+
122
+ /* 标题图自带左侧春庭留白,标题直接进入画面,不另做硬分栏。 */
123
+ .title-screen {
124
+ display: grid;
125
+ grid-template-columns: minmax(19rem, 42%) 1fr;
126
+ color: var(--ink);
127
+ background: #f7e9e2;
128
+ }
129
+
130
+ .title-art {
131
+ background-position: center;
132
+ filter: saturate(1.04) contrast(1.01) brightness(1.02);
133
+ }
134
+
135
+ .title-art::after {
136
+ background:
137
+ linear-gradient(90deg, rgba(255,250,246,.96) 0%, rgba(255,250,246,.82) 22%, rgba(255,250,246,.18) 45%, transparent 66%),
138
+ linear-gradient(0deg, rgba(92,65,83,.1), transparent 45%);
139
+ }
140
+
141
+ .title-copy {
142
+ z-index: 2;
143
+ grid-column: 1;
144
+ padding: 8vh 2.2vw 7vh 5.3vw;
145
+ background: radial-gradient(circle at 30% 48%, rgba(255,255,255,.62), transparent 54%);
146
+ }
147
+
148
+ .title-copy::before {
149
+ right: auto;
150
+ left: 2.1vw;
151
+ top: 8vh;
152
+ color: rgba(192, 66, 85, .08);
153
+ }
154
+
155
+ .title-copy::after {
156
+ content: "";
157
+ width: min(18rem, 76%);
158
+ height: 3px;
159
+ margin: .2rem 0 1.25rem;
160
+ order: -1;
161
+ background: linear-gradient(90deg, var(--azurite) 0 20%, var(--cinnabar) 20% 40%, #d5aa65 40% 60%, var(--lilac) 60% 80%, var(--jade) 80%);
162
+ box-shadow: 0 1px rgba(255,255,255,.86);
163
+ }
164
+
165
+ .title-copy h1 {
166
+ color: #2e3040;
167
+ text-shadow: 0 2px rgba(255,255,255,.78);
168
+ }
169
+
170
+ .title-subtitle { color: #996334; }
171
+ .identity-line { color: #545969; border-left-color: var(--cinnabar); }
172
+ .rating-line { color: #a74d59; }
173
+ .save-note { color: #767786; }
174
+
175
+ /* 游戏框架像一层铺在 CG 上的轻绢,不再把画面装进暗木盒。 */
176
+ .game-shell { background: #e8e5e7; }
177
+
178
+ .topbar {
179
+ color: #343846;
180
+ border-bottom-color: rgba(64, 96, 135, .22);
181
+ background:
182
+ linear-gradient(90deg, rgba(255,253,249,.98), rgba(239,245,248,.95) 55%, rgba(255,241,238,.97));
183
+ box-shadow: 0 8px 30px rgba(65, 71, 91, .12);
184
+ }
185
+
186
+ .day-mark { border-right-color: rgba(64, 96, 135, .18); }
187
+ .day-mark b { color: #7a5a2e; }
188
+ .day-mark span,
189
+ .hud-notice { color: #707383; }
190
+ .hud-notice.urgent { color: #a93647; background: rgba(200,79,92,.08); }
191
+ .top-actions #btn-mute { color: #6e7180; }
192
+
193
+ .phase-stage,
194
+ .dialogue-stage,
195
+ .night-talk-stage,
196
+ .scene-view { background: #e7e4e7; }
197
+
198
+ #app .visual-stage::before { filter: saturate(1.01) contrast(1.01) brightness(1.03); }
199
+
200
+ #app .visual-stage::after {
201
+ background:
202
+ linear-gradient(180deg, rgba(255,248,244,.02), rgba(77,72,91,.08)),
203
+ radial-gradient(120% 96% at 76% 36%, transparent 55%, rgba(70,64,89,.11) 100%);
204
+ }
205
+
206
+ /* 通用对话与账册面板。 */
207
+ .decision-panel,
208
+ .confirm-card,
209
+ .gallery-book,
210
+ .roster-sheet,
211
+ .epilogue-copy,
212
+ .fate-coda-copy {
213
+ color: var(--ink);
214
+ border-color: rgba(86, 92, 119, .22);
215
+ background:
216
+ linear-gradient(145deg, var(--silk-strong), rgba(245, 236, 236, .94));
217
+ box-shadow: var(--cg-shadow);
218
+ backdrop-filter: blur(16px) saturate(.9);
219
+ }
220
+
221
+ .decision-panel::before,
222
+ .confirm-card::before {
223
+ content: "";
224
+ position: absolute;
225
+ inset: 7px;
226
+ pointer-events: none;
227
+ border: 1px solid rgba(200, 79, 92, .09);
228
+ }
229
+
230
+ .phase-header h2,
231
+ .decision-panel h2,
232
+ .confirm-card h2,
233
+ .gallery-book h2,
234
+ .roster-sheet h2 { color: #303342; }
235
+
236
+ .phase-header > p:last-child,
237
+ .phase-lead,
238
+ .speaker-line,
239
+ .consent-note,
240
+ .want-line { color: #626574; }
241
+
242
+ .morning-note,
243
+ .day-speaker,
244
+ .want-line {
245
+ border-left-color: rgba(200,79,92,.58);
246
+ color: #575b69;
247
+ background: rgba(217,99,112,.055);
248
+ }
249
+
250
+ .choice-button {
251
+ color: #343745;
252
+ border: 1px solid rgba(79, 91, 120, .18);
253
+ border-left: 4px solid rgba(78, 125, 155, .58);
254
+ background: rgba(255,253,249,.76);
255
+ box-shadow: 0 7px 22px rgba(66,68,89,.06);
256
+ }
257
+
258
+ .choice-button span { color: #676a79; }
259
+ .choice-button .choice-meta { color: #9a6834; }
260
+
261
+ .choice-button:hover:not(:disabled):not([aria-disabled="true"]),
262
+ .choice-button:focus-visible {
263
+ border-color: rgba(200,79,92,.5);
264
+ border-left-color: var(--cinnabar);
265
+ background: #fffaf7;
266
+ box-shadow: 0 10px 27px rgba(141,65,81,.1);
267
+ }
268
+
269
+ .story-progress { color: #9b6d3a; }
270
+ .story-progress b { color: #4c5060; }
271
+
272
+ /* 五扇院门像角色卡面,但仍属于同一个古代庭院。 */
273
+ .visit-prompt {
274
+ color: #333746;
275
+ border-left-color: var(--cinnabar);
276
+ background: rgba(255,251,247,.9);
277
+ box-shadow: 0 14px 40px rgba(72,67,88,.13);
278
+ backdrop-filter: blur(14px);
279
+ }
280
+
281
+ .accord-panel { border-left-color: rgba(71,101,134,.24); }
282
+ .accord-heading,
283
+ .visit-prompt h2 { color: #353846; }
284
+
285
+ .accord-seal {
286
+ color: #707383;
287
+ border-color: rgba(74,91,118,.2);
288
+ background: rgba(255,253,249,.72);
289
+ }
290
+
291
+ .accord-seal.complete { color: #8d4450; background: rgba(200,79,92,.07); }
292
+
293
+ .door-card {
294
+ color: #303441;
295
+ border: 1px solid rgba(87, 92, 119, .27);
296
+ background: #fbf2ed;
297
+ box-shadow: 0 16px 42px rgba(71,65,87,.15);
298
+ }
299
+
300
+ .door-card::before { border-color: rgba(200,79,92,.16); }
301
+ .door-card > span { color: #4d5264; background: rgba(255,250,246,.88); }
302
+ .door-card img { filter: saturate(1.03) brightness(1.05) contrast(.99); }
303
+ .door-card > div { color: #323542; background: linear-gradient(transparent, rgba(251,242,237,.97) 58%); }
304
+ .door-card small,
305
+ .door-knock,
306
+ .door-forecast dd { color: #666978; }
307
+
308
+ /* 人物近景保留插画质感;只在文字所在一侧覆浅色雾纱。 */
309
+ .close-portrait,
310
+ .close-portrait.closer {
311
+ filter: drop-shadow(-16px 20px 22px rgba(74,64,87,.17)) saturate(1.03) brightness(1.04) contrast(1.01);
312
+ }
313
+
314
+ #app .dialogue-stage::after,
315
+ #app .morning-stage::after { background: linear-gradient(90deg, rgba(255,249,245,.34), transparent 60%); }
316
+
317
+ .night-talk-cg,
318
+ .close-cg,
319
+ .close-cg.closer,
320
+ #app .scene-view > img { filter: saturate(1.02) brightness(1.03) contrast(1.01); }
321
+
322
+ .close-cg::after,
323
+ .morning-cg::after {
324
+ background:
325
+ linear-gradient(96deg, rgba(244,240,244,.94) 0%, rgba(244,240,244,.8) 30%, rgba(244,240,244,.08) 58%, rgba(63,59,82,.08) 100%),
326
+ radial-gradient(112% 88% at 72% 40%, transparent 52%, rgba(69,62,91,.13) 100%);
327
+ }
328
+
329
+ .close-cg.closer { filter: saturate(1.04) brightness(1.01) contrast(1.02); }
330
+ .morning-cg { filter: saturate(1) brightness(1.08) contrast(1); }
331
+
332
+ #app .night-talk-stage::after,
333
+ #app .night-talk-result::after {
334
+ background:
335
+ linear-gradient(96deg, rgba(243,241,249,.96) 0%, rgba(243,241,249,.86) 42%, rgba(243,241,249,.1) 69%),
336
+ linear-gradient(0deg, rgba(72,62,98,.08), transparent 62%);
337
+ }
338
+
339
+ .night-talk-voice,
340
+ .night-talk-continuity,
341
+ .night-talk-memory,
342
+ .route-branch-memory,
343
+ .day-consequence,
344
+ .ledger-status {
345
+ color: #515565;
346
+ border-color: rgba(75, 91, 120, .22);
347
+ background: rgba(255,253,250,.68);
348
+ }
349
+
350
+ .night-talk-voice b,
351
+ .night-talk-continuity b,
352
+ .route-branch-memory b,
353
+ .day-consequence b { color: #3f4352; }
354
+
355
+ .night-talk-voice p,
356
+ .night-talk-memory p,
357
+ .night-talk-continuity p,
358
+ .route-branch-memory p { color: #626575; }
359
+
360
+ .night-talk-prop {
361
+ color: #7b5a2e;
362
+ border-color: rgba(179, 130, 66, .35);
363
+ background: radial-gradient(circle, rgba(255,253,249,.98), rgba(226,214,221,.94) 72%);
364
+ box-shadow: 0 18px 46px rgba(74,65,91,.16), inset 0 0 0 8px rgba(255,255,255,.25);
365
+ }
366
+
367
+ /* 场景册与剧情结果让 CG 继续占主位。 */
368
+ #app .scene-scrim {
369
+ background: linear-gradient(90deg, rgba(247,243,246,.93) 0%, rgba(247,243,246,.67) 34%, transparent 66%);
370
+ }
371
+
372
+ #app .scene-caption,
373
+ #app .scene-view:is([data-scene-tier="public"], [data-scene-tier="ensemble"]) .scene-caption {
374
+ color: #303442;
375
+ border: 1px solid rgba(77, 91, 119, .21);
376
+ border-left: 4px solid var(--cinnabar);
377
+ background: rgba(255,251,248,.88);
378
+ box-shadow: 0 20px 52px rgba(67,63,84,.15);
379
+ backdrop-filter: blur(14px);
380
+ }
381
+
382
+ #app .scene-caption h2,
383
+ #app .scene-caption > p:not(.eyebrow) { color: #343746; }
384
+ #app .scene-meta { color: #6a6d7c; }
385
+ #app .scene-meta span { border-color: rgba(75,91,119,.22); }
386
+
387
+ #app .scene-view:is([data-scene-tier="public"], [data-scene-tier="ensemble"]) .scene-scrim {
388
+ background: linear-gradient(0deg, rgba(250,246,247,.72) 0%, rgba(250,246,247,0) 38%);
389
+ }
390
+
391
+ #app .scene-view:is([data-scene-tier="public"], [data-scene-tier="ensemble"]) .scene-caption {
392
+ background: linear-gradient(0deg, rgba(255,251,248,.96) 0%, rgba(255,251,248,.84) 52%, rgba(255,251,248,0) 100%);
393
+ backdrop-filter: none;
394
+ }
395
+
396
+ #app .scene-view:is([data-scene-tier="public"], [data-scene-tier="ensemble"]) > img {
397
+ filter: saturate(1.03) brightness(1.03) contrast(1.01);
398
+ }
399
+
400
+ /* 旧结构里最暗的三张群像,强制回到新 CG 自己的曝光。 */
401
+ .scene-view[data-scene-id="inner_court_alliance"] > img,
402
+ .scene-view[data-scene-id="inner_court_accord"] > img,
403
+ .scene-view[data-scene-id="inner_court_afterglow"] > img {
404
+ filter: saturate(1.03) brightness(1.04) contrast(1.01);
405
+ }
406
+
407
+ .scene-view[data-scene-id="inner_court_alliance"] .scene-caption,
408
+ .scene-view[data-scene-id="inner_court_afterglow"] .scene-caption {
409
+ color: var(--ink);
410
+ border-color: rgba(80,95,123,.22);
411
+ border-left-color: var(--cinnabar);
412
+ background: linear-gradient(145deg, rgba(255,253,249,.97), rgba(241,235,241,.92));
413
+ }
414
+
415
+ .shared-night-accord-overview,
416
+ .shared-night-accord-entry,
417
+ .alliance-tableau-overview,
418
+ .alliance-tableau-entry,
419
+ .shared-afterglow-tableau-overview,
420
+ .shared-afterglow-tableau-entry {
421
+ color: #4a4e5e;
422
+ border-color: rgba(80,96,124,.2);
423
+ background: rgba(255,252,249,.68);
424
+ }
425
+
426
+ .shared-night-accord-overview header,
427
+ .shared-night-accord-entry > header,
428
+ .alliance-tableau-overview > header,
429
+ .alliance-tableau-entry > header,
430
+ .shared-afterglow-tableau-overview header,
431
+ .shared-afterglow-tableau-entry > header { color: #767887; }
432
+
433
+ .shared-night-accord-overview header b,
434
+ .shared-night-accord-entry > header b,
435
+ .alliance-tableau-overview > header b,
436
+ .alliance-tableau-entry > header b,
437
+ .shared-afterglow-tableau-overview header b,
438
+ .shared-afterglow-tableau-entry > header b { color: #8e6040; }
439
+
440
+ .shared-night-accord-overview > div > span,
441
+ .shared-night-accord-ledger article,
442
+ .alliance-tableau-overview,
443
+ .alliance-tableau-entry,
444
+ .alliance-tableau-path > span,
445
+ .alliance-tableau-actions article,
446
+ .shared-afterglow-tableau-overview > div > span,
447
+ .shared-afterglow-tableau-actions article {
448
+ border-color: rgba(91,111,140,.18);
449
+ background: rgba(247,244,247,.68);
450
+ }
451
+
452
+ .shared-night-accord-overview b,
453
+ .shared-night-accord-ledger b,
454
+ .alliance-tableau-members b,
455
+ .alliance-tableau-path b,
456
+ .alliance-tableau-actions b,
457
+ .shared-afterglow-tableau-overview b,
458
+ .shared-afterglow-tableau-actions b { color: #805a42; }
459
+
460
+ .shared-night-accord-overview em,
461
+ .shared-night-accord-overview small,
462
+ .shared-night-accord-ledger p,
463
+ .shared-night-accord-conclusion,
464
+ .alliance-tableau-overview > p,
465
+ .alliance-tableau-entry > p,
466
+ .alliance-tableau-members span,
467
+ .alliance-tableau-path small,
468
+ .alliance-tableau-path em,
469
+ .alliance-tableau-actions p,
470
+ .shared-afterglow-tableau-overview small,
471
+ .shared-afterglow-tableau-overview em,
472
+ .shared-afterglow-tableau-entry > p,
473
+ .shared-afterglow-tableau-actions p { color: #666a79; }
474
+
475
+ .alliance-tableau-members figure { background: rgba(231,226,232,.72); }
476
+ .alliance-tableau-members img,
477
+ .alliance-tableau-actions img { filter: saturate(1) brightness(1.03); }
478
+ .alliance-tableau-members figcaption { background: linear-gradient(90deg, transparent, rgba(251,247,245,.94) 42%); }
479
+
480
+ .shared-night-accord-ledger blockquote,
481
+ .alliance-tableau-entry > blockquote,
482
+ .shared-afterglow-tableau-entry > blockquote {
483
+ color: #4b655f;
484
+ border-left-color: rgba(63,143,131,.54);
485
+ background: rgba(63,143,131,.07);
486
+ }
487
+
488
+ .gallery-overlay,
489
+ .confirm-overlay,
490
+ .roster-overlay,
491
+ .epilogue-overlay,
492
+ .fate-coda-overlay {
493
+ background: rgba(224, 220, 226, .62);
494
+ backdrop-filter: blur(14px) saturate(.82);
495
+ }
496
+
497
+ .gallery-book > header,
498
+ .roster-sheet > header,
499
+ .epilogue-copy > header,
500
+ .fate-coda-copy > header { border-color: rgba(79,94,122,.19); }
501
+
502
+ .roster-sheet,
503
+ .gallery-book { color: #383c4a; }
504
+
505
+ /* 压力与成功只改变局部色,不改变整场曝光。 */
506
+ .day-consequence.resolved {
507
+ border-color: rgba(63,143,131,.4);
508
+ background: rgba(63,143,131,.07);
509
+ }
510
+
511
+ .day-consequence.missed,
512
+ .hud-notice.urgent {
513
+ border-color: rgba(200,79,92,.44);
514
+ background: rgba(200,79,92,.075);
515
+ }
516
+
517
+ .fast .scene-view > img { animation: none; filter: saturate(1.02) brightness(1.03); }
518
+
519
+ /*
520
+ * 复合叙事页不能继续沿用旧主题的“黑底上叠半透明卡”结构。新插画本身已经
521
+ * 承担场景气氛;面板、旁听者和多人回应要成为彼此分开的纸面层,不能互相透图。
522
+ */
523
+ #app :is(.opening-aftermath-stage, .day-aftermath-stage, .aftermath-stage, [class*="-aftermath-stage"]) {
524
+ background: #e8e4e7;
525
+ }
526
+
527
+ #app :is(
528
+ .day-aftermath-lead,
529
+ .aftermath-main,
530
+ .personal-afterglow-aftermath-close
531
+ ) {
532
+ filter: saturate(1.02) brightness(1.04) contrast(1.01);
533
+ }
534
+
535
+ #app .decision-panel :is(p:not(.eyebrow), li, dd, small, em) { color: #626574; }
536
+ #app .decision-panel :is(h2, h3, h4, b, strong, dt) { color: #343746; }
537
+
538
+ #app .decision-panel :is(
539
+ blockquote,
540
+ [class*="-origin"],
541
+ [class*="-echo"],
542
+ [class*="-memory"],
543
+ [class*="-stake"],
544
+ [class*="-ledger"],
545
+ [class*="-rule"],
546
+ [class*="-voice"],
547
+ [class*="-note"]
548
+ ) {
549
+ color: #515565;
550
+ border-color: rgba(75, 91, 120, .22);
551
+ background: rgba(255, 253, 250, .72);
552
+ }
553
+
554
+ #app .decision-panel :is(
555
+ [class*="-transcript"],
556
+ [class*="-archive"]
557
+ ) li,
558
+ #app .supporting-context > summary,
559
+ #app .supporting-context-pages > * {
560
+ color: #5f6271;
561
+ border-color: rgba(75, 91, 120, .18);
562
+ background: rgba(244, 240, 241, .82);
563
+ }
564
+
565
+ #app .decision-panel :is(
566
+ blockquote,
567
+ [class*="-origin"],
568
+ [class*="-echo"],
569
+ [class*="-memory"],
570
+ [class*="-stake"],
571
+ [class*="-ledger"],
572
+ [class*="-rule"],
573
+ [class*="-voice"],
574
+ [class*="-note"],
575
+ [class*="-transcript"] li,
576
+ [class*="-archive"] li
577
+ ) :is(p, small, em) { color: #626574; }
578
+
579
+ #app .decision-panel :is(
580
+ blockquote,
581
+ [class*="-origin"],
582
+ [class*="-echo"],
583
+ [class*="-memory"],
584
+ [class*="-stake"],
585
+ [class*="-ledger"],
586
+ [class*="-rule"],
587
+ [class*="-voice"],
588
+ [class*="-note"],
589
+ [class*="-transcript"] li,
590
+ [class*="-archive"] li
591
+ ) :is(b, strong) { color: #3f4352; }
592
+
593
+ #app .decision-panel :is(
594
+ blockquote,
595
+ [class*="-origin"],
596
+ [class*="-echo"],
597
+ [class*="-memory"],
598
+ [class*="-stake"],
599
+ [class*="-ledger"],
600
+ [class*="-rule"],
601
+ [class*="-voice"],
602
+ [class*="-note"],
603
+ [class*="-transcript"] li,
604
+ [class*="-archive"] li
605
+ ) > span { color: #91623f; }
606
+
607
+ /* 多人卡不再悬浮在同一张人物图上:给卡组一张不透底的薄绢托纸。 */
608
+ #app :is(
609
+ .opening-aftermath-cast,
610
+ .crisis-cast,
611
+ .crisis-aftermath-cast,
612
+ .pair-portraits,
613
+ .pair-aftermath-cast,
614
+ .jiaoer-aftermath-cast,
615
+ .invitation-aftermath-cast,
616
+ .council-resolution-cast,
617
+ .public-aftermath-cast,
618
+ .act-aftermath-cast,
619
+ .final-aftermath-cast,
620
+ .alliance-assembly-cast,
621
+ .alliance-result-cast,
622
+ .collapse-cast,
623
+ .collapse-result-cast,
624
+ .shared-result-cast,
625
+ .shared-dawn-result-cast
626
+ ) {
627
+ padding: .45rem;
628
+ border: 1px solid rgba(80, 95, 123, .18);
629
+ background: rgba(249, 246, 246, .94);
630
+ box-shadow: 0 18px 52px rgba(67, 63, 84, .14);
631
+ backdrop-filter: blur(12px) saturate(.9);
632
+ }
633
+
634
+ #app :is(
635
+ .opening-aftermath-cast,
636
+ .day-aftermath-reactions,
637
+ .crisis-cast,
638
+ .crisis-aftermath-cast,
639
+ .pair-portraits,
640
+ .pair-aftermath-cast,
641
+ .jiaoer-aftermath-cast,
642
+ .invitation-aftermath-cast,
643
+ .council-resolution-cast,
644
+ .public-aftermath-cast,
645
+ .act-aftermath-cast,
646
+ .final-aftermath-cast,
647
+ .alliance-assembly-cast,
648
+ .alliance-result-cast,
649
+ .collapse-cast,
650
+ .collapse-result-cast,
651
+ .shared-result-cast,
652
+ .shared-dawn-result-cast
653
+ ) figure {
654
+ border-color: rgba(80, 95, 123, .2);
655
+ background: #eee7e6;
656
+ filter: none;
657
+ transform: none;
658
+ }
659
+
660
+ #app :is(
661
+ .opening-aftermath-cast,
662
+ .day-aftermath-reactions,
663
+ .crisis-cast,
664
+ .crisis-aftermath-cast,
665
+ .pair-portraits,
666
+ .pair-aftermath-cast,
667
+ .jiaoer-aftermath-cast,
668
+ .invitation-aftermath-cast,
669
+ .council-resolution-cast,
670
+ .public-aftermath-cast,
671
+ .act-aftermath-cast,
672
+ .final-aftermath-cast,
673
+ .alliance-assembly-cast,
674
+ .alliance-result-cast,
675
+ .collapse-cast,
676
+ .collapse-result-cast,
677
+ .shared-result-cast,
678
+ .shared-dawn-result-cast
679
+ ) figure:not(.speaking):not(.is-responding) { opacity: .8; }
680
+
681
+ #app :is(
682
+ .opening-aftermath-cast,
683
+ .day-aftermath-reactions,
684
+ .crisis-cast,
685
+ .crisis-aftermath-cast,
686
+ .pair-portraits,
687
+ .pair-aftermath-cast,
688
+ .jiaoer-aftermath-cast,
689
+ .invitation-aftermath-cast,
690
+ .council-resolution-cast,
691
+ .public-aftermath-cast,
692
+ .act-aftermath-cast,
693
+ .final-aftermath-cast,
694
+ .alliance-assembly-cast,
695
+ .alliance-result-cast,
696
+ .collapse-cast,
697
+ .collapse-result-cast,
698
+ .shared-result-cast,
699
+ .shared-dawn-result-cast
700
+ ) figure:is(.speaking, .is-responding) {
701
+ opacity: 1;
702
+ border-color: rgba(200, 79, 92, .54);
703
+ box-shadow: 0 10px 28px rgba(130, 66, 82, .14);
704
+ }
705
+
706
+ #app :is(
707
+ .opening-aftermath-cast,
708
+ .day-aftermath-reactions,
709
+ .crisis-cast,
710
+ .crisis-aftermath-cast,
711
+ .pair-portraits,
712
+ .pair-aftermath-cast,
713
+ .jiaoer-aftermath-cast,
714
+ .invitation-aftermath-cast,
715
+ .council-resolution-cast,
716
+ .public-aftermath-cast,
717
+ .act-aftermath-cast,
718
+ .final-aftermath-cast,
719
+ .alliance-assembly-cast,
720
+ .alliance-result-cast,
721
+ .collapse-cast,
722
+ .collapse-result-cast,
723
+ .shared-result-cast,
724
+ .shared-dawn-result-cast
725
+ ) img { filter: saturate(1.02) brightness(1.04) contrast(1.01); }
726
+
727
+ #app :is(
728
+ .opening-aftermath-cast,
729
+ .day-aftermath-reactions,
730
+ .crisis-cast,
731
+ .crisis-aftermath-cast,
732
+ .pair-portraits,
733
+ .pair-aftermath-cast,
734
+ .jiaoer-aftermath-cast,
735
+ .invitation-aftermath-cast,
736
+ .council-resolution-cast,
737
+ .public-aftermath-cast,
738
+ .act-aftermath-cast,
739
+ .final-aftermath-cast,
740
+ .alliance-assembly-cast,
741
+ .alliance-result-cast,
742
+ .collapse-cast,
743
+ .collapse-result-cast,
744
+ .shared-result-cast,
745
+ .shared-dawn-result-cast
746
+ ) figcaption {
747
+ color: #444856;
748
+ background: linear-gradient(transparent, rgba(252, 248, 246, .98) 48%);
749
+ }
750
+
751
+ #app :is(
752
+ .opening-aftermath-cast,
753
+ .day-aftermath-reactions,
754
+ .crisis-cast,
755
+ .crisis-aftermath-cast,
756
+ .pair-portraits,
757
+ .pair-aftermath-cast,
758
+ .jiaoer-aftermath-cast,
759
+ .invitation-aftermath-cast,
760
+ .council-resolution-cast,
761
+ .public-aftermath-cast,
762
+ .act-aftermath-cast,
763
+ .final-aftermath-cast,
764
+ .alliance-assembly-cast,
765
+ .alliance-result-cast,
766
+ .collapse-cast,
767
+ .collapse-result-cast,
768
+ .shared-result-cast,
769
+ .shared-dawn-result-cast
770
+ ) figcaption :is(b, strong) { color: #353846; }
771
+
772
+ #app :is(
773
+ .opening-aftermath-cast,
774
+ .day-aftermath-reactions,
775
+ .crisis-cast,
776
+ .crisis-aftermath-cast,
777
+ .pair-portraits,
778
+ .pair-aftermath-cast,
779
+ .jiaoer-aftermath-cast,
780
+ .invitation-aftermath-cast,
781
+ .council-resolution-cast,
782
+ .public-aftermath-cast,
783
+ .act-aftermath-cast,
784
+ .final-aftermath-cast,
785
+ .alliance-assembly-cast,
786
+ .alliance-result-cast,
787
+ .collapse-cast,
788
+ .collapse-result-cast,
789
+ .shared-result-cast,
790
+ .shared-dawn-result-cast
791
+ ) figcaption :is(span, small, em, p) { color: #666978; }
792
+
793
+ .day-aftermath-reactions figure:only-child {
794
+ width: min(250px, 100%);
795
+ height: min(520px, 72%);
796
+ align-self: center;
797
+ }
798
+
799
+ .aftermath-observer {
800
+ padding: .38rem;
801
+ color: #3f4352;
802
+ border: 1px solid rgba(80, 95, 123, .2);
803
+ background: rgba(252, 248, 246, .94);
804
+ box-shadow: 0 14px 38px rgba(67, 63, 84, .14);
805
+ opacity: 1;
806
+ }
807
+
808
+ .aftermath-observer img {
809
+ mask-image: none;
810
+ filter: saturate(1.02) brightness(1.04) contrast(1.01);
811
+ }
812
+
813
+ .aftermath-observer figcaption span { color: #91623f; }
814
+ .aftermath-observer figcaption b { color: #353846; }
815
+
816
+ /* 单人抉择按内容收高,避免短段落被一整块空白纸面包到屏幕底。 */
817
+ .dialogue-panel,
818
+ .night-talk-panel {
819
+ top: 50%;
820
+ bottom: auto;
821
+ max-height: 88%;
822
+ overflow-y: auto;
823
+ transform: translateY(-50%);
824
+ }
825
+
826
+ /* 结局与后日谈也必须延续亮色叙事,不在最后一屏突然回到旧黑金主题。 */
827
+ .ending-view {
828
+ color: var(--ink);
829
+ background: #eee7e6;
830
+ }
831
+
832
+ .ending-art,
833
+ .ending-view[data-ending="exclusive"] .ending-art,
834
+ .ending-view[data-ending="intrigue"] .ending-art,
835
+ .ending-view[data-ending="unstable"] .ending-art {
836
+ filter: saturate(1.01) brightness(1.03) contrast(1.01);
837
+ background-blend-mode: screen;
838
+ }
839
+
840
+ .ending-copy {
841
+ border-left: 1px solid rgba(80, 95, 123, .16);
842
+ background:
843
+ radial-gradient(circle at 18% 12%, rgba(218, 113, 126, .08), transparent 35%),
844
+ linear-gradient(145deg, rgba(255, 253, 249, .985), rgba(240, 237, 243, .97));
845
+ box-shadow: -20px 0 54px rgba(67, 63, 84, .12);
846
+ }
847
+
848
+ .ending-copy h1 { color: #303342; }
849
+ .ending-copy h1:focus-visible {
850
+ outline: 2px solid rgba(200, 79, 92, .54);
851
+ outline-offset: .3rem;
852
+ }
853
+ .ending-tag { color: #9a6834; }
854
+ .ending-copy > p:not(.eyebrow):not(.ending-tag):not(.ending-note) { color: #5f6372; }
855
+ .ending-note { color: #737584; }
856
+
857
+ .ending-ledger span,
858
+ .ending-habits,
859
+ .ending-habits article,
860
+ .household-ending span {
861
+ color: #626574;
862
+ border-color: rgba(80, 95, 123, .18);
863
+ background: rgba(255, 253, 250, .64);
864
+ }
865
+
866
+ .ending-ledger b,
867
+ .ending-habits > header b,
868
+ .ending-habits article b,
869
+ .household-ending b { color: #454958; }
870
+
871
+ .ending-habits > header,
872
+ .ending-habits article span,
873
+ .ending-habits article small,
874
+ .household-ending small { color: #737584; }
875
+
876
+ .epilogue-book,
877
+ .fate-coda-book {
878
+ color: var(--ink);
879
+ border-color: rgba(80, 95, 123, .24);
880
+ background: #eee7e8;
881
+ box-shadow: 0 32px 90px rgba(67, 63, 84, .28);
882
+ }
883
+
884
+ .epilogue-art { background: #e8e2e3; }
885
+ .epilogue-art::after { background: linear-gradient(90deg, transparent 62%, rgba(244, 239, 240, .9)); }
886
+ .epilogue-art img { filter: saturate(1.02) brightness(1.03) contrast(1.01); }
887
+ .epilogue-art > span { color: rgba(154, 104, 52, .22); }
888
+
889
+ .epilogue-copy h2,
890
+ .epilogue-body,
891
+ .epilogue-progress,
892
+ .epilogue-relations b,
893
+ .epilogue-route-note,
894
+ .epilogue-habit b,
895
+ .epilogue-habit p,
896
+ .epilogue-night-conversations header b,
897
+ .epilogue-night-conversations li b,
898
+ .epilogue-night-conversations li p { color: #4e5261; }
899
+
900
+ .epilogue-relations span,
901
+ .epilogue-route-note,
902
+ .epilogue-habit,
903
+ .epilogue-night-conversations,
904
+ .epilogue-night-conversations li {
905
+ color: #666978;
906
+ border-color: rgba(80, 95, 123, .18);
907
+ background: rgba(255, 253, 250, .64);
908
+ }
909
+
910
+ .fate-coda-art { filter: saturate(1.01) brightness(1.03) contrast(1.01); }
911
+ .fate-coda-art::after {
912
+ background: linear-gradient(90deg, rgba(242, 241, 246, .98) 0%, rgba(242, 241, 246, .9) 31%, rgba(242, 241, 246, .2) 55%, transparent 76%);
913
+ }
914
+
915
+ .fate-coda-copy {
916
+ color: #4e5261;
917
+ background: linear-gradient(90deg, rgba(248, 250, 252, .99), rgba(248, 250, 252, .9) 72%, transparent);
918
+ }
919
+
920
+ .fate-coda-copy > header p,
921
+ .fate-coda-copy > header .eyebrow,
922
+ .fate-coda-progress i,
923
+ .fate-coda-variants > span { color: #6d7180; }
924
+
925
+ .fate-coda-variants,
926
+ .fate-coda-variants button {
927
+ color: #555968;
928
+ border-color: rgba(80, 95, 123, .2);
929
+ background: rgba(255, 253, 250, .7);
930
+ }
931
+
932
+ .fate-coda-variants button.current {
933
+ color: #8d4450;
934
+ border-color: rgba(200, 79, 92, .48);
935
+ background: rgba(200, 79, 92, .07);
936
+ }
937
+
938
+ .fate-coda-copy h2 { color: #303442; }
939
+ .fate-coda-body,
940
+ .fate-coda-decision > p,
941
+ .fate-coda-result p,
942
+ .fate-coda-combination > p { color: #5f6372; }
943
+
944
+ .fate-coda-ledger-section,
945
+ .fate-coda-ledger-section article,
946
+ .fate-coda-result {
947
+ color: #555968;
948
+ border-color: rgba(80, 95, 123, .2);
949
+ background: rgba(255, 253, 250, .7);
950
+ }
951
+
952
+ .fate-coda-ledger-section > header span,
953
+ .fate-coda-ledger-section article > span,
954
+ .fate-coda-result span,
955
+ .fate-coda-combination > span { color: #737786; }
956
+
957
+ .fate-coda-ledger-section > header h3,
958
+ .fate-coda-ledger-section article > b,
959
+ .fate-coda-result b,
960
+ .fate-coda-combination > b { color: #454958; }
961
+
962
+ .fate-coda-ledger-section article > p { color: #626574; }
963
+
964
+ .fate-coda-decision .choice-button {
965
+ color: #343745;
966
+ border-color: rgba(79, 91, 120, .2);
967
+ background: rgba(255, 253, 249, .82);
968
+ }
969
+
970
+ .fate-coda-decision .choice-button:hover,
971
+ .fate-coda-decision .choice-button:focus-visible {
972
+ border-color: rgba(200, 79, 92, .5);
973
+ background: #fffaf7;
974
+ }
975
+
976
+ .fate-coda-copy > footer > span { color: #707483; }
977
+
978
+ @media (max-width: 900px) {
979
+ .age-gate {
980
+ background:
981
+ linear-gradient(0deg, rgba(255,250,245,.98) 0%, rgba(255,250,245,.87) 56%, rgba(255,250,245,.22) 100%),
982
+ url('../assets/bg/compound_new_guofeng.webp') center / cover;
983
+ }
984
+
985
+ .title-art {
986
+ inset: 0 0 auto;
987
+ height: 52%;
988
+ background-color: #f8e8e2;
989
+ background-position: 63% top;
990
+ background-size: auto 100%;
991
+ background-repeat: no-repeat;
992
+ }
993
+
994
+ .title-art::after {
995
+ background: linear-gradient(0deg, #f7e8e2 0%, rgba(247,232,226,.86) 36%, rgba(247,232,226,.04) 72%);
996
+ }
997
+
998
+ .title-copy {
999
+ justify-content: flex-start;
1000
+ padding: 42vh 1.2rem 1.25rem;
1001
+ background: linear-gradient(0deg, rgba(247,232,226,.99), rgba(247,232,226,.8) 68%, transparent);
1002
+ }
1003
+
1004
+ .title-copy h1 {
1005
+ white-space: nowrap;
1006
+ font-size: clamp(2rem, 8.7vw, 2.45rem);
1007
+ }
1008
+
1009
+ .title-copy::after { width: 13rem; margin-bottom: .65rem; }
1010
+ .visit-prompt { background: rgba(255,251,248,.94); }
1011
+
1012
+ /* 窄屏只保留一张主图;重复的人物卡会把画面和正文同时吃掉。 */
1013
+ .opening-aftermath-cast,
1014
+ .day-aftermath-reactions,
1015
+ .aftermath-observer { display: none; }
1016
+
1017
+ .opening-aftermath-panel,
1018
+ .aftermath-panel { max-height: 76%; overflow-y: auto; }
1019
+
1020
+ .dialogue-panel,
1021
+ .night-talk-panel {
1022
+ top: auto;
1023
+ bottom: 2%;
1024
+ max-height: 76%;
1025
+ transform: none;
1026
+ }
1027
+
1028
+ #app :is(
1029
+ .crisis-cast,
1030
+ .crisis-aftermath-cast,
1031
+ .pair-portraits,
1032
+ .pair-aftermath-cast,
1033
+ .jiaoer-aftermath-cast,
1034
+ .invitation-aftermath-cast,
1035
+ .council-resolution-cast,
1036
+ .public-aftermath-cast,
1037
+ .act-aftermath-cast,
1038
+ .final-aftermath-cast,
1039
+ .alliance-assembly-cast,
1040
+ .alliance-result-cast,
1041
+ .collapse-cast,
1042
+ .collapse-result-cast,
1043
+ .shared-result-cast,
1044
+ .shared-dawn-result-cast
1045
+ ) {
1046
+ top: 1.5%;
1047
+ bottom: auto;
1048
+ height: 22%;
1049
+ padding: .2rem;
1050
+ }
1051
+
1052
+ #app :is(
1053
+ .crisis-cast,
1054
+ .crisis-aftermath-cast,
1055
+ .pair-portraits,
1056
+ .pair-aftermath-cast,
1057
+ .jiaoer-aftermath-cast,
1058
+ .invitation-aftermath-cast,
1059
+ .council-resolution-cast,
1060
+ .public-aftermath-cast,
1061
+ .act-aftermath-cast,
1062
+ .final-aftermath-cast,
1063
+ .alliance-assembly-cast,
1064
+ .alliance-result-cast,
1065
+ .collapse-cast,
1066
+ .collapse-result-cast,
1067
+ .shared-result-cast,
1068
+ .shared-dawn-result-cast
1069
+ ) figcaption :is(p, small, em) { display: none; }
1070
+
1071
+ #app .scene-scrim {
1072
+ background: linear-gradient(0deg, rgba(246,242,246,.96), rgba(246,242,246,.16) 74%);
1073
+ }
1074
+
1075
+ .close-cg::after,
1076
+ .morning-cg::after {
1077
+ background: linear-gradient(0deg, rgba(243,240,245,.98) 0%, rgba(243,240,245,.83) 47%, rgba(243,240,245,.05) 78%);
1078
+ }
1079
+
1080
+ .fate-coda-art::after {
1081
+ background: linear-gradient(0deg, rgba(240,244,248,.99) 0%, rgba(240,244,248,.9) 62%, rgba(240,244,248,.06) 91%);
1082
+ }
1083
+
1084
+ .fate-coda-copy {
1085
+ background: linear-gradient(0deg, rgba(248,250,252,.995), rgba(248,250,252,.91) 78%, transparent);
1086
+ }
1087
+
1088
+ .ending-art { opacity: .76; }
1089
+ .ending-copy {
1090
+ background: linear-gradient(0deg, rgba(250, 247, 245, .995) 0%, rgba(250, 247, 245, .95) 64%, rgba(250, 247, 245, .88) 100%);
1091
+ }
1092
+
1093
+ .epilogue-art::after { background: linear-gradient(0deg, rgba(244, 239, 240, .94), transparent 62%); }
1094
+ }
1095
+
1096
+ @media (prefers-reduced-motion: reduce) {
1097
+ .title-art,
1098
+ .door-card img,
1099
+ .night-talk-cg,
1100
+ .close-portrait,
1101
+ .scene-view > img {
1102
+ transition: none !important;
1103
+ animation: none !important;
1104
+ }
1105
+ }