hyper-animator-codex 0.7.0 → 0.8.0

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 (321) hide show
  1. package/README.md +67 -7
  2. package/bin/hyper-animator-codex.mjs +31 -9
  3. package/bin/postinstall.mjs +19 -0
  4. package/lib/install-options.mjs +3 -0
  5. package/lib/install-skill.mjs +84 -2
  6. package/lib/minimax-config.mjs +3 -3
  7. package/package.json +3 -2
  8. package/skills/hyper-animator-codex/SKILL.md +58 -20
  9. package/skills/hyper-animator-codex/agents/openai.yaml +2 -2
  10. package/skills/hyper-animator-codex/contracts/shot-plan.schema.json +214 -0
  11. package/skills/hyper-animator-codex/contracts/workflow-policy.json +85 -0
  12. package/skills/hyper-animator-codex/references/HyperFrames-AI-Generation-Patterns-codex.md +788 -0
  13. package/skills/hyper-animator-codex/references/beat-sync-workflow.md +7 -0
  14. package/skills/hyper-animator-codex/references/examples/shot-plan-dual-catalog.json +69 -0
  15. package/skills/hyper-animator-codex/references/hyperframes-agent-pseudocode.ts +1 -1
  16. package/skills/hyper-animator-codex/references/hyperframes-catalog-map.json +97 -230
  17. package/skills/hyper-animator-codex/references/hyperframes-intent-workflow.md +23 -7
  18. package/skills/hyper-animator-codex/references/minimax-music-workflow.md +24 -4
  19. package/skills/hyper-animator-codex/references/narration-audio-workflow.md +31 -1
  20. package/skills/hyper-animator-codex/references/shotcraft/LICENSE +202 -0
  21. package/skills/hyper-animator-codex/references/shotcraft/cards/ai-stream-response/README.md +46 -0
  22. package/skills/hyper-animator-codex/references/shotcraft/cards/autolayout-gap-dial/README.md +53 -0
  23. package/skills/hyper-animator-codex/references/shotcraft/cards/beat-cut-moves/README.md +54 -0
  24. package/skills/hyper-animator-codex/references/shotcraft/cards/beat-step-list-theme-cycle/README.md +59 -0
  25. package/skills/hyper-animator-codex/references/shotcraft/cards/before-after-slider-scrub/README.md +47 -0
  26. package/skills/hyper-animator-codex/references/shotcraft/cards/bottom-push-stack-wipe/README.md +58 -0
  27. package/skills/hyper-animator-codex/references/shotcraft/cards/brand-frame-snap/README.md +51 -0
  28. package/skills/hyper-animator-codex/references/shotcraft/cards/brand-ink-open/README.md +35 -0
  29. package/skills/hyper-animator-codex/references/shotcraft/cards/bubble-swarm-takeover/README.md +62 -0
  30. package/skills/hyper-animator-codex/references/shotcraft/cards/canvas-materialize-moves/README.md +55 -0
  31. package/skills/hyper-animator-codex/references/shotcraft/cards/card-flip-reveal/README.md +50 -0
  32. package/skills/hyper-animator-codex/references/shotcraft/cards/card-flock-tumble/README.md +54 -0
  33. package/skills/hyper-animator-codex/references/shotcraft/cards/cel-flash-stomp/README.md +54 -0
  34. package/skills/hyper-animator-codex/references/shotcraft/cards/chart-live-moves/README.md +51 -0
  35. package/skills/hyper-animator-codex/references/shotcraft/cards/circle-match-iris/README.md +53 -0
  36. package/skills/hyper-animator-codex/references/shotcraft/cards/cloner-depth-echo/README.md +38 -0
  37. package/skills/hyper-animator-codex/references/shotcraft/cards/collab-cursor-moves/README.md +48 -0
  38. package/skills/hyper-animator-codex/references/shotcraft/cards/color-block-step-wipe/README.md +54 -0
  39. package/skills/hyper-animator-codex/references/shotcraft/cards/command-palette-summon/README.md +45 -0
  40. package/skills/hyper-animator-codex/references/shotcraft/cards/crane-rise-reveal/README.md +47 -0
  41. package/skills/hyper-animator-codex/references/shotcraft/cards/crash-zoom-punch/README.md +38 -0
  42. package/skills/hyper-animator-codex/references/shotcraft/cards/dataviz-landscape-open/README.md +54 -0
  43. package/skills/hyper-animator-codex/references/shotcraft/cards/deck-deal-flyin/README.md +45 -0
  44. package/skills/hyper-animator-codex/references/shotcraft/cards/depth-layer-moves/README.md +40 -0
  45. package/skills/hyper-animator-codex/references/shotcraft/cards/document-typewriter-reveal/README.md +40 -0
  46. package/skills/hyper-animator-codex/references/shotcraft/cards/draw-svg-trace/README.md +50 -0
  47. package/skills/hyper-animator-codex/references/shotcraft/cards/edit-hook-moves/README.md +38 -0
  48. package/skills/hyper-animator-codex/references/shotcraft/cards/element-body-moves/README.md +49 -0
  49. package/skills/hyper-animator-codex/references/shotcraft/cards/fui-hud-moves/README.md +44 -0
  50. package/skills/hyper-animator-codex/references/shotcraft/cards/gauge-readout-moves/README.md +45 -0
  51. package/skills/hyper-animator-codex/references/shotcraft/cards/glow-flyline-moves/README.md +51 -0
  52. package/skills/hyper-animator-codex/references/shotcraft/cards/gradient-word-sweep/README.md +49 -0
  53. package/skills/hyper-animator-codex/references/shotcraft/cards/graze-face-tour/README.md +56 -0
  54. package/skills/hyper-animator-codex/references/shotcraft/cards/hashtag-to-pill-materialize/README.md +57 -0
  55. package/skills/hyper-animator-codex/references/shotcraft/cards/hires-rasterize-3d-text/README.md +34 -0
  56. package/skills/hyper-animator-codex/references/shotcraft/cards/icon-field-colorize/README.md +53 -0
  57. package/skills/hyper-animator-codex/references/shotcraft/cards/icon-performance-moves/README.md +46 -0
  58. package/skills/hyper-animator-codex/references/shotcraft/cards/impact-feedback/README.md +50 -0
  59. package/skills/hyper-animator-codex/references/shotcraft/cards/input-trigger-moves/README.md +49 -0
  60. package/skills/hyper-animator-codex/references/shotcraft/cards/integration-hub-map/README.md +54 -0
  61. package/skills/hyper-animator-codex/references/shotcraft/cards/letterspace-materialize/README.md +52 -0
  62. package/skills/hyper-animator-codex/references/shotcraft/cards/light-play-moves/README.md +49 -0
  63. package/skills/hyper-animator-codex/references/shotcraft/cards/line-boil/README.md +52 -0
  64. package/skills/hyper-animator-codex/references/shotcraft/cards/line-carry-transition/README.md +52 -0
  65. package/skills/hyper-animator-codex/references/shotcraft/cards/list-stack-press/README.md +43 -0
  66. package/skills/hyper-animator-codex/references/shotcraft/cards/magician-card-flourish/README.md +63 -0
  67. package/skills/hyper-animator-codex/references/shotcraft/cards/marker-underline-title/README.md +48 -0
  68. package/skills/hyper-animator-codex/references/shotcraft/cards/montage-rhythm-moves/README.md +55 -0
  69. package/skills/hyper-animator-codex/references/shotcraft/cards/morph-from-primitive/README.md +51 -0
  70. package/skills/hyper-animator-codex/references/shotcraft/cards/neon-frame-forerun/README.md +50 -0
  71. package/skills/hyper-animator-codex/references/shotcraft/cards/neon-frame-orbit-drop/README.md +50 -0
  72. package/skills/hyper-animator-codex/references/shotcraft/cards/neon-triple-marquee/README.md +55 -0
  73. package/skills/hyper-animator-codex/references/shotcraft/cards/odometer-digit-roll/README.md +54 -0
  74. package/skills/hyper-animator-codex/references/shotcraft/cards/outro-group-photo-launch/README.md +39 -0
  75. package/skills/hyper-animator-codex/references/shotcraft/cards/overhead-camera-moves/README.md +50 -0
  76. package/skills/hyper-animator-codex/references/shotcraft/cards/page-turn-transitions/README.md +48 -0
  77. package/skills/hyper-animator-codex/references/shotcraft/cards/page-waterfall-wall/README.md +52 -0
  78. package/skills/hyper-animator-codex/references/shotcraft/cards/panel-grid-moves/README.md +52 -0
  79. package/skills/hyper-animator-codex/references/shotcraft/cards/paper-craft-moves/README.md +46 -0
  80. package/skills/hyper-animator-codex/references/shotcraft/cards/paper-plane-messenger/README.md +62 -0
  81. package/skills/hyper-animator-codex/references/shotcraft/cards/paper-title-card/README.md +36 -0
  82. package/skills/hyper-animator-codex/references/shotcraft/cards/particle-celebrate-hits/README.md +42 -0
  83. package/skills/hyper-animator-codex/references/shotcraft/cards/particle-sand-fill/README.md +39 -0
  84. package/skills/hyper-animator-codex/references/shotcraft/cards/pill-slot-cycle/README.md +57 -0
  85. package/skills/hyper-animator-codex/references/shotcraft/cards/print-texture-transitions/README.md +40 -0
  86. package/skills/hyper-animator-codex/references/shotcraft/cards/rhythm-interrupt-moves/README.md +44 -0
  87. package/skills/hyper-animator-codex/references/shotcraft/cards/riso-print-hits/README.md +54 -0
  88. package/skills/hyper-animator-codex/references/shotcraft/cards/row-embed/README.md +36 -0
  89. package/skills/hyper-animator-codex/references/shotcraft/cards/runway-ground-skim/README.md +52 -0
  90. package/skills/hyper-animator-codex/references/shotcraft/cards/sakuga-timing-shift/README.md +50 -0
  91. package/skills/hyper-animator-codex/references/shotcraft/cards/scene-locked-title/README.md +43 -0
  92. package/skills/hyper-animator-codex/references/shotcraft/cards/scroll-brake-moves/README.md +45 -0
  93. package/skills/hyper-animator-codex/references/shotcraft/cards/segmented-thumb-hero/README.md +57 -0
  94. package/skills/hyper-animator-codex/references/shotcraft/cards/shot-transitions/README.md +60 -0
  95. package/skills/hyper-animator-codex/references/shotcraft/cards/skeleton-reveal/README.md +54 -0
  96. package/skills/hyper-animator-codex/references/shotcraft/cards/slam-entrance-moves/README.md +53 -0
  97. package/skills/hyper-animator-codex/references/shotcraft/cards/smear-multiples/README.md +49 -0
  98. package/skills/hyper-animator-codex/references/shotcraft/cards/space-camera-moves/README.md +53 -0
  99. package/skills/hyper-animator-codex/references/shotcraft/cards/spectrum-morph-ui/README.md +50 -0
  100. package/skills/hyper-animator-codex/references/shotcraft/cards/speed-ramp-freeze/README.md +42 -0
  101. package/skills/hyper-animator-codex/references/shotcraft/cards/split-flap-title/README.md +52 -0
  102. package/skills/hyper-animator-codex/references/shotcraft/cards/spotlight-hero-card/README.md +39 -0
  103. package/skills/hyper-animator-codex/references/shotcraft/cards/spotlight-sweep-moves/README.md +51 -0
  104. package/skills/hyper-animator-codex/references/shotcraft/cards/steep-tilt-glide/README.md +53 -0
  105. package/skills/hyper-animator-codex/references/shotcraft/cards/stroke-segment-build/README.md +43 -0
  106. package/skills/hyper-animator-codex/references/shotcraft/cards/tear-streak-transitions/README.md +43 -0
  107. package/skills/hyper-animator-codex/references/shotcraft/cards/tension-camera-moves/README.md +55 -0
  108. package/skills/hyper-animator-codex/references/shotcraft/cards/text-as-mask/README.md +50 -0
  109. package/skills/hyper-animator-codex/references/shotcraft/cards/text-column-converge/README.md +55 -0
  110. package/skills/hyper-animator-codex/references/shotcraft/cards/theme-switch-moves/README.md +44 -0
  111. package/skills/hyper-animator-codex/references/shotcraft/cards/timeline-travel/README.md +43 -0
  112. package/skills/hyper-animator-codex/references/shotcraft/cards/title-demote-to-label/README.md +58 -0
  113. package/skills/hyper-animator-codex/references/shotcraft/cards/trailer-grammar-moves/README.md +51 -0
  114. package/skills/hyper-animator-codex/references/shotcraft/cards/transition-hidden-cut/README.md +52 -0
  115. package/skills/hyper-animator-codex/references/shotcraft/cards/transition-travel/README.md +48 -0
  116. package/skills/hyper-animator-codex/references/shotcraft/cards/type-and-filter/README.md +37 -0
  117. package/skills/hyper-animator-codex/references/shotcraft/cards/type-assembly-moves/README.md +50 -0
  118. package/skills/hyper-animator-codex/references/shotcraft/cards/type-entrance-moves/README.md +46 -0
  119. package/skills/hyper-animator-codex/references/shotcraft/cards/type-rhythm-sync/README.md +47 -0
  120. package/skills/hyper-animator-codex/references/shotcraft/cards/typewriter-moves/README.md +50 -0
  121. package/skills/hyper-animator-codex/references/shotcraft/cards/ui-strip-away-outro/README.md +63 -0
  122. package/skills/hyper-animator-codex/references/shotcraft/cards/ui-to-brand-morph/README.md +52 -0
  123. package/skills/hyper-animator-codex/references/shotcraft/cards/voice-waveform-live/README.md +52 -0
  124. package/skills/hyper-animator-codex/references/shotcraft/cards/wall-reveal-moves/README.md +53 -0
  125. package/skills/hyper-animator-codex/references/shotcraft/cards/wipe-transitions/README.md +47 -0
  126. package/skills/hyper-animator-codex/references/shotcraft/cards/word-relay-filmstrip/README.md +50 -0
  127. package/skills/hyper-animator-codex/references/shotcraft/catalog.json +3946 -0
  128. package/skills/hyper-animator-codex/references/shotcraft/references/aesthetic-rules.md +157 -0
  129. package/skills/hyper-animator-codex/references/shotcraft/references/final-review.md +107 -0
  130. package/skills/hyper-animator-codex/references/shotcraft/references/guided-free-creation.md +197 -0
  131. package/skills/hyper-animator-codex/references/shotcraft/references/music-beat-sync.md +125 -0
  132. package/skills/hyper-animator-codex/references/shotcraft/references/pipeline.md +357 -0
  133. package/skills/hyper-animator-codex/references/shotcraft/references/sound-design.md +126 -0
  134. package/skills/hyper-animator-codex/references/shotcraft/source/assets/lib/Caption.tsx +50 -0
  135. package/skills/hyper-animator-codex/references/shotcraft/source/assets/lib/DigitRoll.tsx +45 -0
  136. package/skills/hyper-animator-codex/references/shotcraft/source/assets/lib/FlashCut.tsx +20 -0
  137. package/skills/hyper-animator-codex/references/shotcraft/source/assets/lib/FlatPanel.tsx +65 -0
  138. package/skills/hyper-animator-codex/references/shotcraft/source/assets/lib/PageCam.tsx +151 -0
  139. package/skills/hyper-animator-codex/references/shotcraft/source/assets/lib/VerticalTicker.tsx +129 -0
  140. package/skills/hyper-animator-codex/references/shotcraft/source/assets/lib/helpers/camera.tsx +75 -0
  141. package/skills/hyper-animator-codex/references/shotcraft/source/assets/lib/helpers/motion.ts +40 -0
  142. package/skills/hyper-animator-codex/references/shotcraft/source/assets/lib/helpers/rand.ts +11 -0
  143. package/skills/hyper-animator-codex/references/shotcraft/source/assets/lib/helpers/shake.ts +10 -0
  144. package/skills/hyper-animator-codex/references/shotcraft/source/demos/_fixtures/Fixtures.tsx +83 -0
  145. package/skills/hyper-animator-codex/references/shotcraft/source/demos/ai-stream-response/StreamResponse.tsx +146 -0
  146. package/skills/hyper-animator-codex/references/shotcraft/source/demos/autolayout-gap-dial/AutolayoutGapDial.tsx +174 -0
  147. package/skills/hyper-animator-codex/references/shotcraft/source/demos/beat-cut-moves/BeatCutAccelerando.tsx +77 -0
  148. package/skills/hyper-animator-codex/references/shotcraft/source/demos/beat-cut-moves/PaparazziFlash.tsx +115 -0
  149. package/skills/hyper-animator-codex/references/shotcraft/source/demos/beat-step-list-theme-cycle/BeatStepListThemeCycle.tsx +98 -0
  150. package/skills/hyper-animator-codex/references/shotcraft/source/demos/before-after-slider-scrub/BeforeAfterSliderScrub.tsx +99 -0
  151. package/skills/hyper-animator-codex/references/shotcraft/source/demos/bottom-push-stack-wipe/BottomPushStackWipe.tsx +79 -0
  152. package/skills/hyper-animator-codex/references/shotcraft/source/demos/brand-frame-snap/BrandFrameSnap.tsx +110 -0
  153. package/skills/hyper-animator-codex/references/shotcraft/source/demos/bubble-swarm-takeover/BubbleSwarmTakeover.tsx +189 -0
  154. package/skills/hyper-animator-codex/references/shotcraft/source/demos/canvas-materialize-moves/DiagramCascadeBuild.tsx +172 -0
  155. package/skills/hyper-animator-codex/references/shotcraft/source/demos/canvas-materialize-moves/PanelToCanvasMaterialize.tsx +254 -0
  156. package/skills/hyper-animator-codex/references/shotcraft/source/demos/card-flip-reveal/CardFlipReveal.tsx +139 -0
  157. package/skills/hyper-animator-codex/references/shotcraft/source/demos/card-flock-tumble/CardFlockTumble.tsx +382 -0
  158. package/skills/hyper-animator-codex/references/shotcraft/source/demos/cel-flash-stomp/CelFlashStomp.tsx +111 -0
  159. package/skills/hyper-animator-codex/references/shotcraft/source/demos/chart-live-moves/AxisRescaleShockV2.tsx +282 -0
  160. package/skills/hyper-animator-codex/references/shotcraft/source/demos/chart-live-moves/OscilloscopeStreamV2.tsx +227 -0
  161. package/skills/hyper-animator-codex/references/shotcraft/source/demos/chart-live-moves/UnitDotSwarmRegroupV2.tsx +248 -0
  162. package/skills/hyper-animator-codex/references/shotcraft/source/demos/circle-match-iris/CircleMatchIris.tsx +124 -0
  163. package/skills/hyper-animator-codex/references/shotcraft/source/demos/cloner-depth-echo/ClonerDepthEcho.tsx +90 -0
  164. package/skills/hyper-animator-codex/references/shotcraft/source/demos/collab-cursor-moves/CursorCastEnsemble.tsx +136 -0
  165. package/skills/hyper-animator-codex/references/shotcraft/source/demos/collab-cursor-moves/CursorDialogueDuet.tsx +145 -0
  166. package/skills/hyper-animator-codex/references/shotcraft/source/demos/color-block-step-wipe/ColorBlockStepWipe.tsx +157 -0
  167. package/skills/hyper-animator-codex/references/shotcraft/source/demos/command-palette-summon/CommandPaletteSummon.tsx +173 -0
  168. package/skills/hyper-animator-codex/references/shotcraft/source/demos/crane-rise-reveal/CraneRiseReveal.tsx +91 -0
  169. package/skills/hyper-animator-codex/references/shotcraft/source/demos/crash-zoom-punch/CrashImpactReal.tsx +63 -0
  170. package/skills/hyper-animator-codex/references/shotcraft/source/demos/crash-zoom-punch/CrashZoomReal.tsx +60 -0
  171. package/skills/hyper-animator-codex/references/shotcraft/source/demos/dataviz-landscape-open/DatavizLandscapeOpen.tsx +401 -0
  172. package/skills/hyper-animator-codex/references/shotcraft/source/demos/depth-layer-moves/DollyZoomReal.tsx +55 -0
  173. package/skills/hyper-animator-codex/references/shotcraft/source/demos/depth-layer-moves/MultiplaneReal.tsx +45 -0
  174. package/skills/hyper-animator-codex/references/shotcraft/source/demos/draw-svg-trace/DrawSvgTrace.tsx +199 -0
  175. package/skills/hyper-animator-codex/references/shotcraft/source/demos/edit-hook-moves/LogoStingButton.tsx +106 -0
  176. package/skills/hyper-animator-codex/references/shotcraft/source/demos/element-body-moves/AxialStretch.tsx +112 -0
  177. package/skills/hyper-animator-codex/references/shotcraft/source/demos/element-body-moves/ContactShadowLift.tsx +117 -0
  178. package/skills/hyper-animator-codex/references/shotcraft/source/demos/fui-hud-moves/LineUnfoldPanel.tsx +125 -0
  179. package/skills/hyper-animator-codex/references/shotcraft/source/demos/fui-hud-moves/ReticleLockOn.tsx +139 -0
  180. package/skills/hyper-animator-codex/references/shotcraft/source/demos/gauge-readout-moves/NeedleSweepSelftest.tsx +146 -0
  181. package/skills/hyper-animator-codex/references/shotcraft/source/demos/gauge-readout-moves/TapeScrollFixedPointer.tsx +120 -0
  182. package/skills/hyper-animator-codex/references/shotcraft/source/demos/glow-flyline-moves/FlylineArc.tsx +158 -0
  183. package/skills/hyper-animator-codex/references/shotcraft/source/demos/glow-flyline-moves/GlowOrbAmbient.tsx +131 -0
  184. package/skills/hyper-animator-codex/references/shotcraft/source/demos/glow-flyline-moves/OrbFlylineRelay.tsx +268 -0
  185. package/skills/hyper-animator-codex/references/shotcraft/source/demos/gradient-word-sweep/GradientWordSweep.tsx +307 -0
  186. package/skills/hyper-animator-codex/references/shotcraft/source/demos/graze-face-tour/GrazeFaceTour.tsx +469 -0
  187. package/skills/hyper-animator-codex/references/shotcraft/source/demos/hashtag-to-pill-materialize/HashtagToPillMaterialize.tsx +166 -0
  188. package/skills/hyper-animator-codex/references/shotcraft/source/demos/icon-field-colorize/IconFieldColorize.tsx +93 -0
  189. package/skills/hyper-animator-codex/references/shotcraft/source/demos/icon-performance-moves/AttentionBounce.tsx +193 -0
  190. package/skills/hyper-animator-codex/references/shotcraft/source/demos/icon-performance-moves/PopBurstConfirm.tsx +162 -0
  191. package/skills/hyper-animator-codex/references/shotcraft/source/demos/impact-feedback/AnimeImpact.tsx +149 -0
  192. package/skills/hyper-animator-codex/references/shotcraft/source/demos/impact-feedback/HitCounter.tsx +147 -0
  193. package/skills/hyper-animator-codex/references/shotcraft/source/demos/input-trigger-moves/CursorPerformancePunchIn.tsx +154 -0
  194. package/skills/hyper-animator-codex/references/shotcraft/source/demos/input-trigger-moves/KeycapSmashCut.tsx +217 -0
  195. package/skills/hyper-animator-codex/references/shotcraft/source/demos/integration-hub-map/IntegrationHubMap.tsx +554 -0
  196. package/skills/hyper-animator-codex/references/shotcraft/source/demos/letterspace-materialize/LetterspaceMaterialize.tsx +85 -0
  197. package/skills/hyper-animator-codex/references/shotcraft/source/demos/light-play-moves/HalationBloom.tsx +139 -0
  198. package/skills/hyper-animator-codex/references/shotcraft/source/demos/light-play-moves/SheenSweepRetry.tsx +85 -0
  199. package/skills/hyper-animator-codex/references/shotcraft/source/demos/light-play-moves/SpotlightSweepReveal.tsx +102 -0
  200. package/skills/hyper-animator-codex/references/shotcraft/source/demos/line-boil/LineBoil.tsx +140 -0
  201. package/skills/hyper-animator-codex/references/shotcraft/source/demos/line-carry-transition/LineCarryTransition.tsx +151 -0
  202. package/skills/hyper-animator-codex/references/shotcraft/source/demos/magician-card-flourish/MagicianCardFlourish.tsx +294 -0
  203. package/skills/hyper-animator-codex/references/shotcraft/source/demos/marker-underline-title/MarkerUnderlineTitle.tsx +87 -0
  204. package/skills/hyper-animator-codex/references/shotcraft/source/demos/montage-rhythm-moves/DominoCascade.tsx +125 -0
  205. package/skills/hyper-animator-codex/references/shotcraft/source/demos/montage-rhythm-moves/DropBlackoutSlam.tsx +135 -0
  206. package/skills/hyper-animator-codex/references/shotcraft/source/demos/montage-rhythm-moves/WrightTripleCut.tsx +175 -0
  207. package/skills/hyper-animator-codex/references/shotcraft/source/demos/morph-from-primitive/MorphFromPrimitive.tsx +190 -0
  208. package/skills/hyper-animator-codex/references/shotcraft/source/demos/neon-frame-forerun/NeonFrameForerun.tsx +279 -0
  209. package/skills/hyper-animator-codex/references/shotcraft/source/demos/neon-frame-orbit-drop/NeonFrameForerunOrbit.tsx +273 -0
  210. package/skills/hyper-animator-codex/references/shotcraft/source/demos/neon-triple-marquee/NeonTripleMarquee.tsx +111 -0
  211. package/skills/hyper-animator-codex/references/shotcraft/source/demos/odometer-digit-roll/OdometerDigitRoll.tsx +178 -0
  212. package/skills/hyper-animator-codex/references/shotcraft/source/demos/overhead-camera-moves/OverheadTabletopDrop.tsx +129 -0
  213. package/skills/hyper-animator-codex/references/shotcraft/source/demos/overhead-camera-moves/TiltReveal.tsx +55 -0
  214. package/skills/hyper-animator-codex/references/shotcraft/source/demos/page-turn-transitions/BarnDoorSplit.tsx +138 -0
  215. package/skills/hyper-animator-codex/references/shotcraft/source/demos/page-turn-transitions/CubeRotate.tsx +114 -0
  216. package/skills/hyper-animator-codex/references/shotcraft/source/demos/page-waterfall-wall/PageWaterfallWall.tsx +76 -0
  217. package/skills/hyper-animator-codex/references/shotcraft/source/demos/page-waterfall-wall/VerticalTicker.tsx +129 -0
  218. package/skills/hyper-animator-codex/references/shotcraft/source/demos/panel-grid-moves/ComicPanelSplit.tsx +171 -0
  219. package/skills/hyper-animator-codex/references/shotcraft/source/demos/panel-grid-moves/FlipGridReflow.tsx +121 -0
  220. package/skills/hyper-animator-codex/references/shotcraft/source/demos/panel-grid-moves/GridFlashMosaic.tsx +182 -0
  221. package/skills/hyper-animator-codex/references/shotcraft/source/demos/paper-craft-moves/MaskingTapeSlap.tsx +163 -0
  222. package/skills/hyper-animator-codex/references/shotcraft/source/demos/paper-craft-moves/PopupBookRise.tsx +134 -0
  223. package/skills/hyper-animator-codex/references/shotcraft/source/demos/paper-plane-messenger/PaperPlaneMessenger.tsx +183 -0
  224. package/skills/hyper-animator-codex/references/shotcraft/source/demos/particle-celebrate-hits/ConfettiCrossfire.tsx +115 -0
  225. package/skills/hyper-animator-codex/references/shotcraft/source/demos/particle-celebrate-hits/CounterTickSparks.tsx +103 -0
  226. package/skills/hyper-animator-codex/references/shotcraft/source/demos/particle-sand-fill/ParticleSandFill.tsx +119 -0
  227. package/skills/hyper-animator-codex/references/shotcraft/source/demos/pill-slot-cycle/PillSlotCycle.tsx +220 -0
  228. package/skills/hyper-animator-codex/references/shotcraft/source/demos/print-texture-transitions/InkBleedReveal.tsx +81 -0
  229. package/skills/hyper-animator-codex/references/shotcraft/source/demos/rhythm-interrupt-moves/JumpCutPunchIn.tsx +72 -0
  230. package/skills/hyper-animator-codex/references/shotcraft/source/demos/rhythm-interrupt-moves/StrobeBlackFrames.tsx +99 -0
  231. package/skills/hyper-animator-codex/references/shotcraft/source/demos/riso-print-hits/RisoBeatPump.tsx +155 -0
  232. package/skills/hyper-animator-codex/references/shotcraft/source/demos/riso-print-hits/RisoMisregistrationHit.tsx +120 -0
  233. package/skills/hyper-animator-codex/references/shotcraft/source/demos/runway-ground-skim/RunwayGroundSkim.tsx +258 -0
  234. package/skills/hyper-animator-codex/references/shotcraft/source/demos/sakuga-timing-shift/SakugaTimingShift.tsx +178 -0
  235. package/skills/hyper-animator-codex/references/shotcraft/source/demos/scene-locked-title/SceneLockedTitle.tsx +98 -0
  236. package/skills/hyper-animator-codex/references/shotcraft/source/demos/scroll-brake-moves/BrakeReticleLock.tsx +171 -0
  237. package/skills/hyper-animator-codex/references/shotcraft/source/demos/scroll-brake-moves/ChangelogScrollBrake.tsx +117 -0
  238. package/skills/hyper-animator-codex/references/shotcraft/source/demos/segmented-thumb-hero/SegmentedThumbHero.tsx +213 -0
  239. package/skills/hyper-animator-codex/references/shotcraft/source/demos/shot-transitions/MaskWipeReal.tsx +67 -0
  240. package/skills/hyper-animator-codex/references/shotcraft/source/demos/shot-transitions/PortalWipeV2.tsx +128 -0
  241. package/skills/hyper-animator-codex/references/shotcraft/source/demos/shot-transitions/WhipBrakeReal.tsx +60 -0
  242. package/skills/hyper-animator-codex/references/shotcraft/source/demos/shot-transitions/WhipPanReal.tsx +45 -0
  243. package/skills/hyper-animator-codex/references/shotcraft/source/demos/skeleton-reveal/SkeletonReveal.tsx +283 -0
  244. package/skills/hyper-animator-codex/references/shotcraft/source/demos/slam-entrance-moves/ImpactBurstKit.tsx +185 -0
  245. package/skills/hyper-animator-codex/references/shotcraft/source/demos/slam-entrance-moves/KanadaPerspectiveSnap.tsx +91 -0
  246. package/skills/hyper-animator-codex/references/shotcraft/source/demos/slam-entrance-moves/ScoreSlam.tsx +225 -0
  247. package/skills/hyper-animator-codex/references/shotcraft/source/demos/smear-multiples/SmearMultiples.tsx +88 -0
  248. package/skills/hyper-animator-codex/references/shotcraft/source/demos/space-camera-moves/DroneDiveLanding.tsx +91 -0
  249. package/skills/hyper-animator-codex/references/shotcraft/source/demos/space-camera-moves/ExplodedView.tsx +178 -0
  250. package/skills/hyper-animator-codex/references/shotcraft/source/demos/space-camera-moves/SnorricamLock.tsx +130 -0
  251. package/skills/hyper-animator-codex/references/shotcraft/source/demos/spectrum-morph-ui/SpectrumMorphUi.tsx +129 -0
  252. package/skills/hyper-animator-codex/references/shotcraft/source/demos/speed-ramp-freeze/FreezeAnnotateReal.tsx +70 -0
  253. package/skills/hyper-animator-codex/references/shotcraft/source/demos/speed-ramp-freeze/SpeedRampReal.tsx +58 -0
  254. package/skills/hyper-animator-codex/references/shotcraft/source/demos/split-flap-title/SplitFlapFlip.tsx +189 -0
  255. package/skills/hyper-animator-codex/references/shotcraft/source/demos/spotlight-sweep-moves/CornerSpotlightReveal.tsx +121 -0
  256. package/skills/hyper-animator-codex/references/shotcraft/source/demos/spotlight-sweep-moves/GlowWakeSleepPanel.tsx +183 -0
  257. package/skills/hyper-animator-codex/references/shotcraft/source/demos/spotlight-sweep-moves/SlideSpotlightPan.tsx +171 -0
  258. package/skills/hyper-animator-codex/references/shotcraft/source/demos/steep-tilt-glide/SteepTiltGlide.tsx +315 -0
  259. package/skills/hyper-animator-codex/references/shotcraft/source/demos/stroke-segment-build/StrokeSegmentBuild.tsx +126 -0
  260. package/skills/hyper-animator-codex/references/shotcraft/source/demos/tear-streak-transitions/GlitchDisplace.tsx +107 -0
  261. package/skills/hyper-animator-codex/references/shotcraft/source/demos/tension-camera-moves/BulletTimeFreezeOrbit.tsx +219 -0
  262. package/skills/hyper-animator-codex/references/shotcraft/source/demos/tension-camera-moves/DutchRollToLevel.tsx +110 -0
  263. package/skills/hyper-animator-codex/references/shotcraft/source/demos/tension-camera-moves/PullBackIsolation.tsx +120 -0
  264. package/skills/hyper-animator-codex/references/shotcraft/source/demos/tension-camera-moves/SlowPushIn.tsx +96 -0
  265. package/skills/hyper-animator-codex/references/shotcraft/source/demos/text-as-mask/TextAsMask.tsx +94 -0
  266. package/skills/hyper-animator-codex/references/shotcraft/source/demos/text-column-converge/TextColumnConverge.tsx +122 -0
  267. package/skills/hyper-animator-codex/references/shotcraft/source/demos/theme-switch-moves/PaletteThemeRipple.tsx +207 -0
  268. package/skills/hyper-animator-codex/references/shotcraft/source/demos/theme-switch-moves/ThemeSweepToggle.tsx +123 -0
  269. package/skills/hyper-animator-codex/references/shotcraft/source/demos/timeline-travel/TimelineTravel.tsx +123 -0
  270. package/skills/hyper-animator-codex/references/shotcraft/source/demos/title-demote-to-label/TitleDemoteToLabel.tsx +174 -0
  271. package/skills/hyper-animator-codex/references/shotcraft/source/demos/trailer-grammar-moves/CardFootageCadence.tsx +118 -0
  272. package/skills/hyper-animator-codex/references/shotcraft/source/demos/trailer-grammar-moves/SmashCut.tsx +105 -0
  273. package/skills/hyper-animator-codex/references/shotcraft/source/demos/trailer-grammar-moves/TrailerBumper.tsx +103 -0
  274. package/skills/hyper-animator-codex/references/shotcraft/source/demos/transition-hidden-cut/InvisibleCut.tsx +93 -0
  275. package/skills/hyper-animator-codex/references/shotcraft/source/demos/transition-hidden-cut/LightLeakBurn.tsx +122 -0
  276. package/skills/hyper-animator-codex/references/shotcraft/source/demos/transition-hidden-cut/VersusSlam.tsx +104 -0
  277. package/skills/hyper-animator-codex/references/shotcraft/source/demos/transition-travel/LetterformZoom.tsx +141 -0
  278. package/skills/hyper-animator-codex/references/shotcraft/source/demos/transition-travel/SharedElementMorph.tsx +101 -0
  279. package/skills/hyper-animator-codex/references/shotcraft/source/demos/type-assembly-moves/LetterformDriftAssembly.tsx +107 -0
  280. package/skills/hyper-animator-codex/references/shotcraft/source/demos/type-assembly-moves/SplitTextStagger.tsx +101 -0
  281. package/skills/hyper-animator-codex/references/shotcraft/source/demos/type-assembly-moves/TextOnPath.tsx +92 -0
  282. package/skills/hyper-animator-codex/references/shotcraft/source/demos/type-assembly-moves/TrackingExpandReveal.tsx +109 -0
  283. package/skills/hyper-animator-codex/references/shotcraft/source/demos/type-entrance-moves/LetterDropPhysics.tsx +100 -0
  284. package/skills/hyper-animator-codex/references/shotcraft/source/demos/type-entrance-moves/ScrambleDecode.tsx +90 -0
  285. package/skills/hyper-animator-codex/references/shotcraft/source/demos/type-rhythm-sync/FontWeightPump.tsx +124 -0
  286. package/skills/hyper-animator-codex/references/shotcraft/source/demos/type-rhythm-sync/KaraokeFillSync.tsx +93 -0
  287. package/skills/hyper-animator-codex/references/shotcraft/source/demos/typewriter-moves/TerminalTypewriter.tsx +122 -0
  288. package/skills/hyper-animator-codex/references/shotcraft/source/demos/typewriter-moves/TypewriterErrorRetype.tsx +109 -0
  289. package/skills/hyper-animator-codex/references/shotcraft/source/demos/ui-strip-away-outro/UiStripAwayOutro.tsx +218 -0
  290. package/skills/hyper-animator-codex/references/shotcraft/source/demos/ui-to-brand-morph/IconFlipBloomLogo.tsx +199 -0
  291. package/skills/hyper-animator-codex/references/shotcraft/source/demos/ui-to-brand-morph/InputMorphsIntoLogo.tsx +215 -0
  292. package/skills/hyper-animator-codex/references/shotcraft/source/demos/voice-waveform-live/VoiceWaveformLive.tsx +171 -0
  293. package/skills/hyper-animator-codex/references/shotcraft/source/demos/wall-reveal-moves/BentoLightUp.tsx +135 -0
  294. package/skills/hyper-animator-codex/references/shotcraft/source/demos/wipe-transitions/BlindsSlice.tsx +107 -0
  295. package/skills/hyper-animator-codex/references/shotcraft/source/demos/wipe-transitions/ClockWipe.tsx +83 -0
  296. package/skills/hyper-animator-codex/references/shotcraft/source/demos/word-relay-filmstrip/WordRelayFilmstrip.tsx +300 -0
  297. package/skills/hyper-animator-codex/references/shotcraft/source/template/src/Root.tsx +15 -0
  298. package/skills/hyper-animator-codex/references/shotcraft/source/template/src/aifl/Caption.tsx +49 -0
  299. package/skills/hyper-animator-codex/references/shotcraft/source/template/src/aifl/DigitRoll.tsx +44 -0
  300. package/skills/hyper-animator-codex/references/shotcraft/source/template/src/aifl/FlashCut.tsx +19 -0
  301. package/skills/hyper-animator-codex/references/shotcraft/source/template/src/aifl/Main.tsx +163 -0
  302. package/skills/hyper-animator-codex/references/shotcraft/source/template/src/aifl/PaperTitleCard.tsx +89 -0
  303. package/skills/hyper-animator-codex/references/shotcraft/source/template/src/aifl/live/PageCam.tsx +145 -0
  304. package/skills/hyper-animator-codex/references/shotcraft/source/template/src/aifl/live/SceneDetail.tsx +146 -0
  305. package/skills/hyper-animator-codex/references/shotcraft/source/template/src/aifl/live/SceneFlyIn.tsx +447 -0
  306. package/skills/hyper-animator-codex/references/shotcraft/source/template/src/aifl/live/SceneOpen.tsx +532 -0
  307. package/skills/hyper-animator-codex/references/shotcraft/source/template/src/aifl/live/SceneOutroLive.tsx +394 -0
  308. package/skills/hyper-animator-codex/references/shotcraft/source/template/src/aifl/live/ScenePapers.tsx +185 -0
  309. package/skills/hyper-animator-codex/references/shotcraft/source/template/src/aifl/live/SceneWbr.tsx +299 -0
  310. package/skills/hyper-animator-codex/references/shotcraft/source/template/src/index.ts +4 -0
  311. package/skills/hyper-animator-codex/references/shotcraft/source-notes.md +10 -0
  312. package/skills/hyper-animator-codex/scripts/generate_minimax_music.mjs +27 -10
  313. package/skills/hyper-animator-codex/scripts/generate_minimax_tts.mjs +142 -13
  314. package/skills/hyper-animator-codex/scripts/generate_subtitles.mjs +42 -3
  315. package/skills/hyper-animator-codex/scripts/minimax_runtime_config.mjs +3 -3
  316. package/skills/hyper-animator-codex/scripts/query_shotcraft.mjs +140 -0
  317. package/skills/hyper-animator-codex/scripts/validate_hyperframes_html.py +22 -0
  318. package/skills/hyper-animator-codex/scripts/validate_provider_policy.mjs +108 -0
  319. package/skills/hyper-animator-codex/scripts/validate_shot_plan.mjs +193 -0
  320. package/skills/hyper-animator-codex/vendor/music-beat-detector/beat_detector/analyzer.py +3 -1
  321. package/skills/hyper-animator-codex/vendor/music-beat-detector/beat_detector/beat.py +37 -1
@@ -0,0 +1,120 @@
1
+ // 套印错位冲击帧(riso-misregistration-hit)——标题撞停瞬间裂成两份单色"印版"
2
+ // (浅灰琥珀版 G.mid + 深墨版 G.ink,mix-blend-mode: multiply 叠加),像 riso 印刷
3
+ // 没对准版;两版反向错位(x 为主 y 少量)做衰减震荡 offset = A*cos(ωt)*exp(-t/τ)
4
+ // 抖两下,帧 72 啪地硬切回单一正体(套准合一),带 4f scale 1.03→1 脉冲收束。
5
+ // 结构:0–19f 空场 hold(只有底部装饰线);20–28f 标题从右画外 Easing.in(cubic)
6
+ // 撞入屏心(帧 28 命中);28–71f 双版错位震荡;72–75f 套准脉冲;76–119f 真静止 44f。
7
+ import React from 'react';
8
+ import { useCurrentFrame, interpolate, Easing } from 'remotion';
9
+ import { G, TitleBlock } from '../_fixtures/Fixtures';
10
+
11
+ const HIT = 28; // 撞停命中帧
12
+ const SNAP = 72; // 套准合一帧
13
+ const AX = 16; // 单版 x 错位振幅(两版反向 → 总分离 ~32px,肉眼明显)
14
+ const AY = 7; // 单版 y 错位振幅(少量,更像没对准版)
15
+ const OMEGA = (2 * Math.PI) / 18; // 震荡周期 18f,44f 内抖两下半
16
+ const TAU = 60; // 缓衰减:帧 72 前仍余 ~14px 总分离,被"啪地"硬切归零
17
+
18
+ // 与 TitleBlock 同字形的可调色标题(错位印版需要单色副本)
19
+ const Plate: React.FC<{ color: string; dx: number; dy: number }> = ({ color, dx, dy }) => (
20
+ <div
21
+ style={{
22
+ position: 'absolute',
23
+ inset: 0,
24
+ display: 'flex',
25
+ alignItems: 'center',
26
+ justifyContent: 'center',
27
+ transform: `translate(${dx}px, ${dy}px)`,
28
+ mixBlendMode: 'multiply',
29
+ }}
30
+ >
31
+ <div
32
+ style={{
33
+ fontFamily: 'Helvetica, Arial, sans-serif',
34
+ fontWeight: 800,
35
+ fontSize: 200,
36
+ color,
37
+ letterSpacing: -1,
38
+ whiteSpace: 'nowrap',
39
+ }}
40
+ >
41
+ IMPACT
42
+ </div>
43
+ </div>
44
+ );
45
+
46
+ export const RisoMisregistrationHit: React.FC = () => {
47
+ const frame = useCurrentFrame();
48
+
49
+ // 阶段判定
50
+ const entering = frame >= 20 && frame < HIT; // 撞入
51
+ const split = frame >= HIT && frame < SNAP; // 双版错位震荡
52
+ const showSingle = frame < HIT || frame >= SNAP; // 正体(画外/撞入/套准后)
53
+
54
+ // 撞入位移:右画外 1400px → 0,8f Easing.in(cubic)(加速撞停)
55
+ const slideX = interpolate(frame, [20, HIT], [1400, 0], {
56
+ easing: Easing.in(Easing.cubic),
57
+ extrapolateLeft: 'clamp',
58
+ extrapolateRight: 'clamp',
59
+ });
60
+
61
+ // 错位震荡包络:t 自命中起,衰减余弦(帧 72 前仍有可见残余,硬切归零成"啪")
62
+ const t = frame - HIT;
63
+ const m = split ? Math.cos(OMEGA * t) * Math.exp(-t / TAU) : 0;
64
+ const dx = AX * m;
65
+ const dy = AY * m;
66
+
67
+ // 套准合一脉冲:帧 72 起 4f scale 1.03 → 1,之后精确 1(保证结尾真静止)
68
+ const pulse =
69
+ frame >= SNAP && frame < SNAP + 4 ? 1 + 0.03 * (1 - (frame - SNAP) / 4) : 1;
70
+
71
+ return (
72
+ <div
73
+ style={{
74
+ width: 1920,
75
+ height: 1080,
76
+ background: G.bg,
77
+ position: 'relative',
78
+ overflow: 'hidden',
79
+ }}
80
+ >
81
+ {/* 底部装饰线:全程静止的布景锚点 */}
82
+ <div
83
+ style={{
84
+ position: 'absolute',
85
+ left: 510,
86
+ top: 740,
87
+ width: 900,
88
+ height: 6,
89
+ borderRadius: 3,
90
+ background: G.bar,
91
+ }}
92
+ />
93
+
94
+ {/* 正体:画外等待 / 撞入 / 套准后(撞入前 frame<20 时在画外,视觉等同空场) */}
95
+ {showSingle && (
96
+ <div
97
+ style={{
98
+ position: 'absolute',
99
+ inset: 0,
100
+ display: 'flex',
101
+ alignItems: 'center',
102
+ justifyContent: 'center',
103
+ transform: `translateX(${entering || frame < 20 ? slideX : 0}px) scale(${pulse})`,
104
+ transformOrigin: 'center center',
105
+ }}
106
+ >
107
+ <TitleBlock text="IMPACT" size={200} />
108
+ </div>
109
+ )}
110
+
111
+ {/* 双版错位:浅灰版与深墨版反向偏移,multiply 叠加出"重影套印" */}
112
+ {split && (
113
+ <>
114
+ <Plate color={G.mid} dx={-dx} dy={dy} />
115
+ <Plate color={G.ink} dx={dx} dy={-dy} />
116
+ </>
117
+ )}
118
+ </div>
119
+ );
120
+ };
@@ -0,0 +1,258 @@
1
+ // runway-ground-skim v5 —— 源片 clickup-30.mp4 约 46–50s(clickup10 截图 5 张):
2
+ // 用户 v5 意见(逐字):"去掉落地后弹起的效果,然后整个下落的过程快一点"
3
+ // 落实:①删除落地压弹——着地即停,零回弹零压缩(判例:掉落感=干脆利落);
4
+ // ②下落整体提速——单卡下落 15→9 帧,全员落定 f45→f33,立起段随之前移;
5
+ // ③保留项不动:错峰 3 帧起点、界面位置顺序(行优先左→右)、重力加速
6
+ // (距离∝t²)、贴落完成后页面立起转正收尾。
7
+ import React from 'react';
8
+ import { AbsoluteFill, interpolate, useCurrentFrame, Easing } from 'remotion';
9
+
10
+ const FONT = 'Helvetica, Arial, sans-serif';
11
+ const INK = '#3c3c42';
12
+ const MID = '#8d8d94';
13
+ const FAINT = '#d2d2d5';
14
+
15
+ const easeRise = Easing.bezier(0.42, 0, 0.16, 1);
16
+
17
+ /* mulberry32 带种子(起跳节奏 ≤1.5 帧微差 < 3 帧错峰,顺序不乱) */
18
+ const mulberry32 = (seed: number) => () => {
19
+ seed |= 0; seed = (seed + 0x6d2b79f5) | 0;
20
+ let t = Math.imul(seed ^ (seed >>> 15), 1 | seed);
21
+ t = (t + Math.imul(t ^ (t >>> 7), 61 | t)) ^ t;
22
+ return ((t ^ (t >>> 14)) >>> 0) / 4294967296;
23
+ };
24
+
25
+ const CARD_W = 760;
26
+ const MiniCardFace: React.FC<{ title: string; sub: string }> = ({ title, sub }) => (
27
+ <div style={{
28
+ width: CARD_W, border: `4px solid ${FAINT}`, borderRadius: 22, padding: '30px 40px',
29
+ background: '#fcfcfb', display: 'flex', flexDirection: 'column', gap: 14, boxSizing: 'border-box',
30
+ }}>
31
+ <div style={{ display: 'flex', alignItems: 'center', gap: 24 }}>
32
+ <div style={{ width: 40, height: 40, border: '6px solid #85858b', borderRadius: 8, flexShrink: 0 }} />
33
+ <div style={{ fontFamily: FONT, fontSize: 46, color: INK, fontWeight: 650, whiteSpace: 'nowrap' }}>{title}</div>
34
+ </div>
35
+ <div style={{ fontFamily: FONT, fontSize: 36, color: MID, paddingLeft: 64, whiteSpace: 'nowrap' }}>{sub}</div>
36
+ </div>
37
+ );
38
+
39
+ /* 界面位置顺序 = 数组顺序:第一行左→右,再第二行左→右 */
40
+ const CARDS: { title: string; sub: string; col: number; row: number }[] = [
41
+ { title: 'Creative Refresh', sub: 'New logo exploration', col: 0, row: 0 },
42
+ { title: 'New Bugs Per Week', sub: 'Bug tracker Dashboard', col: 1, row: 0 },
43
+ { title: 'Tiger Team Roadmap', sub: 'Roadmap Outline', col: 2, row: 0 },
44
+ { title: 'Design System', sub: 'Design Handbook Inspo', col: 3, row: 0 },
45
+ { title: 'Development Sprint Dashboard', sub: 'Dev Team Sprints', col: 0, row: 1 },
46
+ { title: 'CSS Bug Tracker', sub: 'Query Reports', col: 1, row: 1 },
47
+ { title: 'Platform', sub: 'System Health Monitor', col: 2, row: 1 },
48
+ ];
49
+
50
+ /* Recent 网格槽位(面板内容坐标) */
51
+ const GRID_X = 1180, GRID_Y = 760, COL_GAP = 850, ROW_GAP = 250;
52
+ const slotPos = (col: number, row: number) => ({ x: GRID_X + col * COL_GAP, y: GRID_Y + row * ROW_GAP });
53
+
54
+ /* 平躺地面:Home 仪表盘(卡片槽位留空,由悬浮卡片落入) */
55
+ const Ground: React.FC = () => (
56
+ <div style={{ width: 4600, height: 2600, background: '#f6f6f5', borderRadius: 60, position: 'relative', overflow: 'hidden' }}>
57
+ <div style={{ display: 'flex', height: '100%' }}>
58
+ {/* 左侧栏 */}
59
+ <div style={{ width: 860, borderRight: `4px solid ${FAINT}`, padding: '70px 60px 0', background: '#f1f1f0' }}>
60
+ <div style={{ display: 'flex', alignItems: 'center', gap: 26 }}>
61
+ <div style={{ width: 64, height: 64, borderRadius: 18, background: 'linear-gradient(135deg,#adadb3,#6b6b72)' }} />
62
+ <div style={{ fontFamily: FONT, fontSize: 56, fontWeight: 800, color: INK }}>ClickUp</div>
63
+ </div>
64
+ <div style={{ height: 46 }} />
65
+ {['Home', 'Inbox', 'Company', 'People & Teams', 'Goals', 'Docs', 'More'].map((t, i) => (
66
+ <div key={t} style={{
67
+ display: 'flex', alignItems: 'center', gap: 30, height: 108, paddingLeft: 32,
68
+ background: i === 0 ? '#e6e6f0' : 'transparent', borderRadius: 20,
69
+ }}>
70
+ <div style={{ width: 36, height: 36, border: '6px solid #90909a', borderRadius: 9 }} />
71
+ <div style={{ fontFamily: FONT, fontSize: 46, color: INK, fontWeight: i === 0 ? 650 : 400 }}>{t}</div>
72
+ </div>
73
+ ))}
74
+ <div style={{ height: 60 }} />
75
+ <div style={{ fontFamily: FONT, fontSize: 38, letterSpacing: 5, color: MID, fontWeight: 600, paddingLeft: 32 }}>SPACES</div>
76
+ <div style={{ height: 16 }} />
77
+ {['EPD', 'Product roadmap', 'Design', 'Designer handbook', '3.0', 'Design system'].map((t) => (
78
+ <div key={t} style={{ display: 'flex', alignItems: 'center', gap: 30, height: 96, paddingLeft: 32 }}>
79
+ <div style={{ width: 44, height: 44, borderRadius: 12, background: '#d6d6da' }} />
80
+ <div style={{ fontFamily: FONT, fontSize: 42, color: INK }}>{t}</div>
81
+ </div>
82
+ ))}
83
+ </div>
84
+ {/* 主区 */}
85
+ <div style={{ flex: 1, padding: '70px 100px 0', position: 'relative' }}>
86
+ {/* 顶部 tab 条 */}
87
+ <div style={{ display: 'flex', gap: 110, fontFamily: FONT, fontSize: 42, color: MID, marginBottom: 60 }}>
88
+ <div>Product analytics</div><div style={{ fontWeight: 700, color: INK }}>ClickUp 3.0</div>
89
+ <div>Widget brainstorm</div><div>Design system</div><div>Design</div>
90
+ </div>
91
+ <div style={{ fontFamily: FONT, fontSize: 110, fontWeight: 750, color: INK }}>Home</div>
92
+ <div style={{ height: 40 }} />
93
+ <div style={{
94
+ display: 'flex', alignItems: 'center', gap: 30, border: `4px solid ${FAINT}`,
95
+ borderRadius: 24, padding: '28px 42px', background: '#fff', width: 1400,
96
+ }}>
97
+ <div style={{ width: 38, height: 38, borderRadius: 19, border: '6px solid #9a9aa0' }} />
98
+ <div style={{ fontFamily: FONT, fontSize: 42, color: MID }}>Search by app, filetype, or keyword</div>
99
+ </div>
100
+ <div style={{ height: 66 }} />
101
+ <div style={{ display: 'flex', gap: 70, fontFamily: FONT, fontSize: 46 }}>
102
+ <div style={{ color: INK, fontWeight: 700 }}>Recent</div>
103
+ <div style={{ color: MID }}>Favorites</div>
104
+ </div>
105
+ {/* ↑ Recent 网格槽位区域留空(卡片从空中落入 GRID_X/GRID_Y 起的两行四列) */}
106
+ <div style={{ height: 560 }} />
107
+ <div style={{ display: 'flex', gap: 70, fontFamily: FONT, fontSize: 44 }}>
108
+ <div style={{ color: INK, fontWeight: 700 }}>Todo</div>
109
+ <div style={{ color: MID }}>Comments</div>
110
+ <div style={{ color: MID }}>Done</div>
111
+ <div style={{ color: MID }}>Delegated</div>
112
+ </div>
113
+ <div style={{ height: 36 }} />
114
+ <div style={{
115
+ display: 'inline-block', padding: '16px 40px', background: '#e4e4e3', borderRadius: 14,
116
+ fontFamily: FONT, fontSize: 36, letterSpacing: 4, color: '#6f6f75', fontWeight: 600,
117
+ }}>TODAY</div>
118
+ <div style={{ height: 40 }} />
119
+ {['New Bugs Per Week', 'Designer handbook', 'Mobile screens', 'Product roadmap'].map((t) => (
120
+ <div key={t} style={{
121
+ display: 'flex', alignItems: 'center', gap: 34, height: 118,
122
+ borderBottom: '3px solid #e5e5e3', width: 2600,
123
+ }}>
124
+ <div style={{ width: 32, height: 32, borderRadius: 9, background: '#c04a6e' }} />
125
+ <div style={{ fontFamily: FONT, fontSize: 46, color: INK, fontWeight: 550 }}>{t}</div>
126
+ <div style={{ marginLeft: 'auto', width: 180, height: 16, background: '#e3e3e8', borderRadius: 8 }} />
127
+ </div>
128
+ ))}
129
+ </div>
130
+ </div>
131
+ </div>
132
+ );
133
+
134
+ export const RunwayGroundSkim: React.FC = () => {
135
+ const frame = useCurrentFrame();
136
+ const rand = mulberry32(20260718);
137
+ const jit = CARDS.map(() => rand() * 1.2); // ≤1.2 帧微差 < 3 帧错峰,顺序绝不乱
138
+
139
+ /* ---- 节奏(掉落提速+着地即停版,118 帧)----
140
+ * f0–6 开场:全员悬空在黑色空域
141
+ * f6–33 掉落:第 i 张起跳 f = 6 + i*3(错峰只差 3 帧),下落 9 帧
142
+ * ⇒ 9 >> 3,空中同时 3–4 张在落(重叠并行,非串行等待);
143
+ * 重力加速(距离∝t²),着地即停——零回弹零压缩
144
+ * f38–94 页面立起 + 视角转正(rotateX 66→0,镜头拉远居中)
145
+ * f94–118 终态正视整页 hold */
146
+ // v6(批次 15):用户意见"下落的时间差多调小一些,不需要一个落下了
147
+ // 再启动第二个"——起点差 3→1.5 帧(9 帧下落窗口重叠度 6 倍,
148
+ // 任意时刻空中 5–6 张同落,几乎齐落带涟漪感)
149
+ const START0 = 6, GAP = 1.5, FALLF = 9;
150
+
151
+ const lifts = CARDS.map((c, i) => {
152
+ const t = frame - (START0 + i * GAP + jit[i]);
153
+ const H = 560 + (i % 3) * 160; // 初始悬浮高度错落
154
+ if (t <= 0) return H;
155
+ const p = t / FALLF;
156
+ if (p < 1) return H * (1 - p * p); // 重力加速:下落距离 ∝ t²
157
+ return 0; // 着地即停,无弹起
158
+ });
159
+
160
+ /* 立起段进度 */
161
+ const riseP = interpolate(frame, [38, 94], [0, 1], { easing: easeRise, extrapolateLeft: 'clamp', extrapolateRight: 'clamp' });
162
+
163
+ /* 镜头:落卡段轻微推进(72→66°),立起段转正(→0°)并拉远居中 */
164
+ const landP = interpolate(frame, [0, 34], [0, 1], { easing: Easing.bezier(0.3, 0.1, 0.6, 0.9), extrapolateLeft: 'clamp', extrapolateRight: 'clamp' });
165
+ const rx = interpolate(landP, [0, 1], [72, 66]) - 66 * riseP;
166
+ const z = interpolate(landP, [0, 1], [-620, -320]) + riseP * (-1620 - -320);
167
+ const bright = interpolate(frame, [0, 32, 86], [0.32, 0.8, 1.0], { extrapolateLeft: 'clamp', extrapolateRight: 'clamp' });
168
+
169
+ /* 锚点/透视原点随立起归中:终态整页入画、中心≈画面中心 */
170
+ const anchorTop = 58 - riseP * 6; // % :58 → 52(终态整页不裁底)
171
+ const perspY = 30 + riseP * 20; // % :30 → 50
172
+
173
+ const cam = (children: React.ReactNode, extra?: React.CSSProperties) => (
174
+ <AbsoluteFill style={{ perspective: 1050, perspectiveOrigin: `50% ${perspY}%`, ...extra }}>
175
+ <div style={{
176
+ position: 'absolute', left: '50%', top: `${anchorTop}%`, width: 0, height: 0,
177
+ transformStyle: 'preserve-3d',
178
+ transform: `translateZ(${z}px) rotateX(${rx}deg)`,
179
+ }}>
180
+ {children}
181
+ </div>
182
+ </AbsoluteFill>
183
+ );
184
+
185
+ const scene = (
186
+ <div style={{ position: 'absolute', transformStyle: 'preserve-3d', transform: 'translate(-2300px, -1500px)' }}>
187
+ {/* 地面 */}
188
+ <div style={{ filter: `brightness(${bright})` }}>
189
+ <Ground />
190
+ </div>
191
+ {/* 地面上的软影(z≈0,卡片同形,随悬浮高度变化大小/偏移/浓度) */}
192
+ {CARDS.map((c, i) => {
193
+ const h = lifts[i];
194
+ if (h < 2) return null;
195
+ const s = slotPos(c.col, c.row);
196
+ return (
197
+ <div key={'sh' + i} style={{
198
+ position: 'absolute', left: s.x + 20, top: s.y + 14, width: CARD_W - 40, height: 150,
199
+ transform: `translateZ(1px) translate(${h * 0.08}px, ${h * 0.12}px) scale(${1 + h * 0.0004})`,
200
+ background: 'rgba(10,8,16,0.9)', borderRadius: 24,
201
+ filter: `blur(${10 + h * 0.03}px)`,
202
+ opacity: Math.max(0.12, 0.38 - h * 0.0003),
203
+ }} />
204
+ );
205
+ })}
206
+ {/* 悬空卡片:与地面同向平躺,translateZ 抬高,落回槽位。
207
+ 空中时被"追光"打亮(比暗地面亮),落地融入地面亮度 */}
208
+ {CARDS.map((c, i) => {
209
+ const h = lifts[i];
210
+ const s = slotPos(c.col, c.row);
211
+ const airLit = h > 2 ? Math.max(1.35, bright) : bright;
212
+ return (
213
+ <div key={'card' + i} style={{
214
+ position: 'absolute', left: s.x, top: s.y,
215
+ transform: `translateZ(${h}px)`,
216
+ filter: `brightness(${airLit})`,
217
+ boxShadow: h > 2 ? `0 0 ${30 + h * 0.05}px rgba(240,235,255,${Math.min(0.3, h * 0.0004)})` : 'none',
218
+ }}>
219
+ <MiniCardFace title={c.title} sub={c.sub} />
220
+ </div>
221
+ );
222
+ })}
223
+ </div>
224
+ );
225
+
226
+ /* 立起段各氛围层收敛:黑空域压顶/地平线光/近景糊都随转正淡出 */
227
+ const airOp = 1 - riseP;
228
+
229
+ return (
230
+ <AbsoluteFill style={{ background: '#07060a' }}>
231
+ {/* 地平线微光(转正后消失) */}
232
+ <AbsoluteFill style={{
233
+ background: `radial-gradient(ellipse 60% 14% at 50% 40%, rgba(190,170,255,${(0.16 + landP * 0.1) * airOp}), transparent 75%)`,
234
+ }} />
235
+ {cam(scene)}
236
+ {/* 近景轻糊(转正后消失) */}
237
+ {airOp > 0.02 && (
238
+ <AbsoluteFill style={{
239
+ filter: 'blur(10px) brightness(0.88)', opacity: airOp,
240
+ WebkitMaskImage: 'linear-gradient(180deg, transparent 60%, rgba(0,0,0,0.7) 84%, black 98%)',
241
+ maskImage: 'linear-gradient(180deg, transparent 60%, rgba(0,0,0,0.7) 84%, black 98%)',
242
+ }}>
243
+ {cam(scene)}
244
+ </AbsoluteFill>
245
+ )}
246
+ {/* 上半空域压黑(随立起淡出) */}
247
+ <AbsoluteFill style={{
248
+ background: 'linear-gradient(180deg, rgba(4,3,8,0.9) 0%, rgba(4,3,8,0.35) 16%, transparent 32%)',
249
+ opacity: airOp, pointerEvents: 'none',
250
+ }} />
251
+ {/* 暗角(转正后减弱不消失) */}
252
+ <AbsoluteFill style={{
253
+ background: 'radial-gradient(ellipse 95% 90% at 50% 55%, transparent 50%, rgba(3,2,7,0.55) 85%, rgba(2,1,5,0.88) 100%)',
254
+ opacity: 1 - riseP * 0.55, pointerEvents: 'none',
255
+ }} />
256
+ </AbsoluteFill>
257
+ );
258
+ };
@@ -0,0 +1,178 @@
1
+ // sakuga-timing-shift —— 一拍三转一拍一(作画打拍切换)
2
+ // 0–48f:驱动帧 q = floor(f/3)*3,卡从左侧顿挫横移到右侧(10fps 手翻书感),
3
+ // 每步 ≈74px + rotate 摆动 = 一拍三的钝感;48f 切换点后改用原始 f 连续驱动,
4
+ // 48–75f 丝滑冲刺折返中央(out-poly(4) 高初速 + 运动拉伸 scaleX + 残影),
5
+ // 过冲 36px 后 3f 回弹落位。左上角标 "on 3s"/"on 1s" 随段切换并带 line-boil
6
+ // (boil 在 f=108 后冻结)。收尾真静止 ≥40f。
7
+ import React from 'react';
8
+ import { useCurrentFrame, interpolate, Easing } from 'remotion';
9
+ import { G, Card, TitleBlock } from '../_fixtures/Fixtures';
10
+
11
+ const W = 1920;
12
+ const CARD_W = 420;
13
+ const CARD_H = 260;
14
+ const CARD_Y = (1080 - CARD_H) / 2; // 410
15
+
16
+ const X_LEFT = 120;
17
+ const X_RIGHT = 1380; // 卡左缘,右侧停点
18
+ const X_CENTER = (W - CARD_W) / 2; // 750,中央落位
19
+ const OVERSHOOT = 36;
20
+
21
+ const SWITCH = 48; // 打拍切换帧
22
+ const ARRIVE = 70; // 冲刺到过冲点
23
+ const SETTLE = 75; // 回弹落位完成
24
+
25
+ // 段一:一拍三。位置函数线性,但只在 q = floor(f/3)*3 上取值。
26
+ const pos1 = (t: number): number =>
27
+ interpolate(t, [0, SWITCH], [X_LEFT, X_RIGHT], {
28
+ extrapolateLeft: 'clamp',
29
+ extrapolateRight: 'clamp',
30
+ });
31
+
32
+ // 段二:一拍一。out-poly(4) 高初速冲刺 → 过冲 → 3f 回弹。
33
+ const pos2 = (t: number): number =>
34
+ interpolate(t, [SWITCH, ARRIVE, SETTLE], [X_RIGHT, X_CENTER - OVERSHOOT, X_CENTER], {
35
+ easing: Easing.out(Easing.poly(4)),
36
+ extrapolateLeft: 'clamp',
37
+ extrapolateRight: 'clamp',
38
+ });
39
+
40
+ export const SakugaTimingShift: React.FC = () => {
41
+ const f = useCurrentFrame();
42
+ const onThrees = f < SWITCH;
43
+
44
+ // ---- 卡片位置 ----
45
+ const q = Math.floor(f / 3) * 3; // 一拍三驱动帧
46
+ const x = onThrees ? pos1(q) : pos2(f);
47
+
48
+ // 顿挫段 rotate 摆动(随 q 冻结,一步一个姿势)
49
+ const rot = onThrees
50
+ ? Math.sin(q * 0.7) * 5
51
+ : interpolate(f, [SWITCH, SWITCH + 8], [Math.sin(SWITCH * 0.7) * 5, 0], {
52
+ extrapolateLeft: 'clamp',
53
+ extrapolateRight: 'clamp',
54
+ });
55
+
56
+ // 冲刺段速度(位置差分,帧时间解耦)→ 运动拉伸
57
+ const v = onThrees ? 0 : Math.abs(pos2(f) - pos2(f - 1));
58
+ const sFac = Math.min(v / 55, 1);
59
+ const stretchX = 1 + 0.35 * sFac; // 峰值 ≈1.35,横向拉丝
60
+ const stretchY = 1 - 0.12 * sFac;
61
+
62
+ // 落位急停回弹:72–78f scaleX 压扁再回 1
63
+ const sqX = interpolate(f, [SETTLE - 3, SETTLE, SETTLE + 3], [1, 0.9, 1], {
64
+ easing: Easing.out(Easing.cubic),
65
+ extrapolateLeft: 'clamp',
66
+ extrapolateRight: 'clamp',
67
+ });
68
+ const sqY = interpolate(f, [SETTLE - 3, SETTLE, SETTLE + 3], [1, 1.07, 1], {
69
+ easing: Easing.out(Easing.cubic),
70
+ extrapolateLeft: 'clamp',
71
+ extrapolateRight: 'clamp',
72
+ });
73
+
74
+ // 冲刺残影:只在段二速度高时挂载(条件挂载,不留 opacity 0 的壳)
75
+ const ghosts =
76
+ !onThrees && f > SWITCH + 1 && f < ARRIVE + 2 && sFac > 0.15
77
+ ? [
78
+ { xg: pos2(f - 2), op: 0.28 * sFac },
79
+ { xg: pos2(f - 4), op: 0.13 * sFac },
80
+ ]
81
+ : [];
82
+
83
+ // ---- 角标 "on 3s" / "on 1s",line-boil,f=108 后冻结 ----
84
+ const h = (n: number) => {
85
+ const s = Math.sin(n * 127.3) * 43758.5453;
86
+ return s - Math.floor(s);
87
+ };
88
+ const qb = Math.min(Math.floor(f / 4) * 4, 108); // boil 驱动帧,108 后冻结
89
+ const bx = (h(qb + 1) - 0.5) * 7;
90
+ const by = (h(qb + 2) - 0.5) * 7;
91
+ const brot = (h(qb + 3) - 0.5) * 3;
92
+ // 切换瞬间角标弹一下
93
+ const pop = interpolate(f, [SWITCH, SWITCH + 3, SWITCH + 9], [1, 1.35, 1], {
94
+ easing: Easing.out(Easing.cubic),
95
+ extrapolateLeft: 'clamp',
96
+ extrapolateRight: 'clamp',
97
+ });
98
+
99
+ const titleOp = interpolate(f, [0, 10], [0, 1], {
100
+ extrapolateLeft: 'clamp',
101
+ extrapolateRight: 'clamp',
102
+ });
103
+
104
+ return (
105
+ <div style={{ width: 1920, height: 1080, background: G.bg, position: 'relative', overflow: 'hidden' }}>
106
+ <div style={{ position: 'absolute', top: 90, width: '100%', textAlign: 'center', opacity: titleOp }}>
107
+ <TitleBlock text="SAKUGA TIMING SHIFT" size={64} />
108
+ </div>
109
+
110
+ {/* 轨道基线 + 中央落位虚线槽 */}
111
+ <div
112
+ style={{
113
+ position: 'absolute',
114
+ left: 100,
115
+ right: 100,
116
+ top: CARD_Y + CARD_H + 24,
117
+ height: 3,
118
+ background: G.line,
119
+ borderRadius: 2,
120
+ }}
121
+ />
122
+ <div
123
+ style={{
124
+ position: 'absolute',
125
+ left: X_CENTER,
126
+ top: CARD_Y,
127
+ width: CARD_W,
128
+ height: CARD_H,
129
+ border: `3px dashed ${G.bar}`,
130
+ borderRadius: 14,
131
+ boxSizing: 'border-box',
132
+ }}
133
+ />
134
+
135
+ {/* 冲刺残影 */}
136
+ {ghosts.map((g, i) => (
137
+ <div
138
+ key={`ghost-${i}`}
139
+ style={{ position: 'absolute', left: 0, top: CARD_Y, opacity: g.op, transform: `translateX(${g.xg}px)` }}
140
+ >
141
+ <Card w={CARD_W} h={CARD_H} seed={4} />
142
+ </div>
143
+ ))}
144
+
145
+ {/* 主卡 */}
146
+ <div
147
+ style={{
148
+ position: 'absolute',
149
+ left: 0,
150
+ top: CARD_Y,
151
+ transform: `translateX(${x}px) rotate(${rot}deg) scaleX(${stretchX * sqX}) scaleY(${stretchY * sqY})`,
152
+ transformOrigin: '50% 50%',
153
+ }}
154
+ >
155
+ <Card w={CARD_W} h={CARD_H} seed={4} />
156
+ </div>
157
+
158
+ {/* 角标:on 3s / on 1s */}
159
+ <div
160
+ style={{
161
+ position: 'absolute',
162
+ left: 120,
163
+ top: 160,
164
+ transform: `translate(${bx}px, ${by}px) rotate(${brot}deg) scale(${pop})`,
165
+ transformOrigin: '0% 50%',
166
+ fontFamily: 'Courier New, monospace',
167
+ fontWeight: 700,
168
+ fontSize: 84,
169
+ color: G.ink,
170
+ borderBottom: `6px solid ${G.ink}`,
171
+ paddingBottom: 6,
172
+ }}
173
+ >
174
+ {onThrees ? 'on 3s' : 'on 1s'}
175
+ </div>
176
+ </div>
177
+ );
178
+ };
@@ -0,0 +1,98 @@
1
+ // scene-locked-title —— 透视锁定标题(《战栗空间》式)
2
+ // dashboard 平面躺在 3D 空间里,巨大标题悬浮其前方(translateZ 分离)。
3
+ // 只动最外层"相机"容器(缓慢平移 + 轻转),标题与 UI 共享灭点、
4
+ // 随透视一起变形,视差让人读出"字钉在场景里"而非贴在玻璃上。
5
+ // f0–12 初始静置,f12–112 相机运动(inOut,非匀速),f112 起真静止 ≥38f。
6
+ import React from 'react';
7
+ import { useCurrentFrame, interpolate, Easing } from 'remotion';
8
+ import { G, FakeDashboard, TitleBlock } from '../_fixtures/Fixtures';
9
+
10
+ const MOVE_START = 12;
11
+ const MOVE_END = 112;
12
+ const camEase = Easing.inOut(Easing.cubic);
13
+
14
+ const cam = (f: number, from: number, to: number): number =>
15
+ interpolate(f, [MOVE_START, MOVE_END], [from, to], {
16
+ easing: camEase,
17
+ extrapolateLeft: 'clamp',
18
+ extrapolateRight: 'clamp',
19
+ });
20
+
21
+ export const SceneLockedTitle: React.FC = () => {
22
+ const frame = useCurrentFrame();
23
+
24
+ // 相机:横移 ±280px + rotateY ±8° + 轻微升降。幅度取可感下限以上。
25
+ const camX = cam(frame, 280, -280);
26
+ const camY = cam(frame, -40, 40);
27
+ const camRY = cam(frame, -8, 8);
28
+
29
+ return (
30
+ <div
31
+ style={{
32
+ width: 1920,
33
+ height: 1080,
34
+ background: G.bg,
35
+ overflow: 'hidden',
36
+ position: 'relative',
37
+ perspective: 1200,
38
+ perspectiveOrigin: '50% 42%',
39
+ }}
40
+ >
41
+ {/* 相机层:唯一被动画的 transform */}
42
+ <div
43
+ style={{
44
+ position: 'absolute',
45
+ left: '50%',
46
+ top: '50%',
47
+ width: 0,
48
+ height: 0,
49
+ transformStyle: 'preserve-3d',
50
+ transform: `translate3d(${camX}px, ${camY}px, 0) rotateY(${camRY}deg)`,
51
+ }}
52
+ >
53
+ {/* 场景层:静态的"躺倒"姿态,dashboard 与标题共享此平面系 */}
54
+ <div
55
+ style={{
56
+ transformStyle: 'preserve-3d',
57
+ transform: 'rotateX(50deg) rotateZ(-16deg)',
58
+ }}
59
+ >
60
+ {/* dashboard 平面(translateZ 0) */}
61
+ <div
62
+ style={{
63
+ position: 'absolute',
64
+ left: -960,
65
+ top: -540,
66
+ transform: 'translateZ(0px) scale(0.92)',
67
+ }}
68
+ >
69
+ <FakeDashboard variant="A" />
70
+ </div>
71
+ {/* 标题悬浮在平面前方 150px,与 UI 同灭点,随透视变形 */}
72
+ <div
73
+ style={{
74
+ position: 'absolute',
75
+ left: -700,
76
+ top: -140,
77
+ transform: 'translateZ(150px)',
78
+ }}
79
+ >
80
+ <TitleBlock text="NORTH STAR" size={200} />
81
+ </div>
82
+ {/* 副标题:更贴近平面(Z 60px),运动中与主标题产生层间视差 */}
83
+ <div
84
+ style={{
85
+ position: 'absolute',
86
+ left: -690,
87
+ top: 90,
88
+ transform: 'translateZ(60px)',
89
+ opacity: 0.75,
90
+ }}
91
+ >
92
+ <TitleBlock text="A FILM BY DASHBOARD" size={44} />
93
+ </div>
94
+ </div>
95
+ </div>
96
+ </div>
97
+ );
98
+ };