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,447 @@
1
+ import { Img, interpolate, staticFile, useCurrentFrame, Easing } from 'remotion';
2
+ import { PageCam, CamKey } from './PageCam';
3
+ import layout from '../live-layout.json';
4
+
5
+ const cards = layout.projects.cards;
6
+ const PAGE_H = layout.projects.pageH;
7
+
8
+ const HOVER_H = 40; // px above the slot (translateZ) a card hovers at mid-dive
9
+ const SETTLE_EASE = Easing.bezier(0.3, 0, 0.25, 1.15); // slight overshoot / compress
10
+ const DIVE_EASE = Easing.bezier(0.3, 0, 0.2, 1); // decelerate into the hover
11
+ const SLIDE_EASE = Easing.bezier(0.35, 0, 0.2, 1); // nano-lab card slide to the top slot
12
+
13
+ // page paper colors, sampled from the rendered projects-empty texture
14
+ const PAPER = '#f9f6f1'; // page background (bottom rows)
15
+ const FIELD = '#fefcf9'; // search-box interior
16
+
17
+ // ---- 16 "overflow" extras extend the grid DOWNWARD (no hovering, no overlap):
18
+ // fill the empty 3rd column of the y=1402 row, then five new rows below the
19
+ // texture at y=1795…3367, columns matching the real grid. ----
20
+ const COLS = [408, 781.328125, 1154.65625];
21
+ const CARD_W = 357.328125;
22
+ const EXTRA_ROWS = [1795, 2188, 2581, 2974, 3367];
23
+ const PAPER_EXT = { x: 0, y: PAGE_H, w: 1920, h: 2036 }; // paper extension below the texture (flush bottom 3782)
24
+
25
+ const extras = Array.from({ length: 16 }, (_, i) => ({
26
+ file: `card${((i * 3 + 2) % 10) + 1}.png`, // deterministic, neighbors differ
27
+ x: i === 0 ? COLS[2] : COLS[(i - 1) % 3],
28
+ y: i === 0 ? 1402 : EXTRA_ROWS[Math.floor((i - 1) / 3)],
29
+ w: CARD_W,
30
+ h: 312,
31
+ title: '',
32
+ }));
33
+
34
+ // ---- the DECK: all 26 cards start stacked in one pile at the page's top
35
+ // right. The shot opens on a rotating 3D close-up of the pile (0–35), pulls
36
+ // back to reveal the page (35–62), and the cards deal themselves to their
37
+ // slots in reading order (y, then x) on a hard-accelerating cadence — the gap
38
+ // between departures shrinks from 4f to 0.2f (gap_k = 4 − 0.1584k), so the
39
+ // dealing goes from deliberate to a blur. First departs at 36 (mid pull-back),
40
+ // last ≈88, lands ≈96. Pile poses carry a small deterministic jitter and each
41
+ // card keeps a stack height (top of pile = first to leave). ----
42
+ const PILE = { x: 1430, y: 240 };
43
+ const N_CARDS = 26;
44
+ const DEAL_START = 36;
45
+ const STACK_STEP = 3; // px of physical height per card — the pile reads as a real stack
46
+
47
+ // dark-metal backdrop for the opening close-up: covers everything in the page
48
+ // plane, with a warm spotlight pooled on the pile; fades out with the pull-back
49
+ const METAL_FADE = [34, 56] as const;
50
+
51
+ const grid = [
52
+ ...cards.map((c) => ({ file: c.file, x: c.x, y: c.y, w: c.w, h: c.h, title: c.title })),
53
+ ...extras,
54
+ ]
55
+ .sort((a, b) => a.y - b.y || a.x - b.x)
56
+ .map((c, k) => ({
57
+ ...c,
58
+ cue: DEAL_START + 4 * k - 0.0792 * k * (k - 1),
59
+ // pile pose: tiny alternating offsets + roll, stacked top-down by k
60
+ px: PILE.x + (((k * 7) % 9) - 4) * 2,
61
+ py: PILE.y + (((k * 5) % 7) - 3) * 2,
62
+ protZ: ((k * 11) % 7) - 3,
63
+ pz: (N_CARDS - k) * STACK_STEP, // physical stack height; k=0 rides on top
64
+ }));
65
+
66
+ // ---- the search target: nano-lab slides up to the first-row slot on filter ----
67
+ const nanoIdx = grid.findIndex((c) => c.title.includes('nano-lab'));
68
+ const nano = grid[nanoIdx];
69
+ const NANO_TO = { x: 408, y: 247 }; // first-row slot the filtered card slides into
70
+ const CLICK_C = { x: 586, y: 391 }; // click point on the settled result card
71
+
72
+ // filter departure rank for the 19 non-target cards (reading order)
73
+ const leaveRank = new Map<number, number>();
74
+ grid.forEach((_, i) => {
75
+ if (i !== nanoIdx) leaveRank.set(i, leaveRank.size);
76
+ });
77
+
78
+ // search box (page-space CSS px) + typing beats
79
+ const SEARCH = { x: 408, y: 130, w: 1016, h: 44 };
80
+ const QUERY = 'nano-lab';
81
+ const TYPE_START = 128; // 3 frames per character → last char at ≈149
82
+ const FILTER_START = 160; // beat of rest after typing, then the grid filters
83
+
84
+ // pile centre for the opening close-up
85
+ const PILE_CX = PILE.x + CARD_W / 2;
86
+ const PILE_CY = PILE.y + 156;
87
+
88
+ // Narrative: the shot opens on a rotating 3D CLOSE-UP of the 26-card pile
89
+ // (orbiting from a left-oblique to a right-oblique look), pulls back to
90
+ // reveal the page as the pile starts dealing cards to their grid slots, each
91
+ // departure faster than the last, extending the grid far below the page fold
92
+ // → the camera scrolls down chasing the dealing, FASTER each leg, arriving
93
+ // straight at the bottom → rests half a second on the full board → swooshes
94
+ // back up to the search box → "nano-lab" is typed (unhurried), a breath, then
95
+ // the grid filters down to one card which slides into the first row → a click
96
+ // ripple fires and the camera pushes into the card, handing off to detail.
97
+ const CAM_KEYS: CamKey[] = [
98
+ { frame: 0, cx: PILE_CX - 30, cy: PILE_CY + 60, zoom: 1.95, rotX: 46, rotY: -30, rotZ: 9, persp: 1100 }, // low side view of the stack, left-oblique
99
+ { frame: 34, cx: PILE_CX + 30, cy: PILE_CY + 40, zoom: 1.85, rotX: 42, rotY: 26, rotZ: -7, persp: 1100 }, // orbit around the pile to a right-oblique
100
+ { frame: 62, cx: 960, cy: 900, zoom: 0.88, rotX: 26, rotY: 0, rotZ: 2, persp: 1300 }, // pull back — dashboard revealed, dealing underway
101
+ { frame: 82, cx: 950, cy: 1900, zoom: 0.78, rotX: 14, rotY: 0, rotZ: 0, persp: 1300 }, // speeding up (~50 px/f)
102
+ { frame: 98, cx: 960, cy: 3032, zoom: 0.72, rotX: 0, rotY: 0, rotZ: 0, persp: 1300 }, // fastest leg (~70 px/f), arrives straight at the paper's flush bottom
103
+ { frame: 113, cx: 960, cy: 3032, zoom: 0.72, rotX: 0, rotY: 0, rotZ: 0, persp: 1300 }, // 0.5s REST on the full board
104
+ { frame: 124, cx: 960, cy: 380, zoom: 0.9, rotX: 0, rotY: 0, rotZ: 0, persp: 1300 }, // swoosh back up to the search/filter header
105
+ { frame: 174, cx: 960, cy: 380, zoom: 0.9, rotX: 0, rotY: 0, rotZ: 0, persp: 1300 }, // hold through typing, breath, filter, slide
106
+ { frame: 190, cx: CLICK_C.x, cy: CLICK_C.y, zoom: 2.2, rotX: 0, rotY: 0, rotZ: 0, persp: 1300 }, // push into the clicked card, carried through the white flash
107
+ ];
108
+
109
+ export const SceneFlyIn: React.FC = () => {
110
+ const frame = useCurrentFrame();
111
+
112
+ // DOF fades out over the straightening leg of the scroll (82 → 98)
113
+ const dofStrength = interpolate(frame, [82, 98], [5, 0], {
114
+ extrapolateLeft: 'clamp', extrapolateRight: 'clamp',
115
+ });
116
+
117
+ // typed characters: one every 3 frames from TYPE_START (unhurried typing)
118
+ const typedCount = frame < TYPE_START
119
+ ? 0
120
+ : Math.min(QUERY.length, Math.floor((frame - TYPE_START) / 3) + 1);
121
+ // caret: solid while typing, then blinks on an 8-frame cycle until the click
122
+ const caretOn =
123
+ frame >= TYPE_START - 2 &&
124
+ frame <= 185 &&
125
+ (frame <= TYPE_START + 24 || Math.floor((frame - (TYPE_START + 24)) / 8) % 2 === 0);
126
+
127
+ return (
128
+ <PageCam
129
+ src="textures/live/projects-empty.png"
130
+ pageH={PAGE_H}
131
+ keys={CAM_KEYS}
132
+ ease={Easing.bezier(0.33, 0, 0.15, 1)}
133
+ dof={dofStrength > 0.1 ? { focusY: 260, strength: dofStrength } : undefined}
134
+ >
135
+ {/* ---- dark brushed-metal table under the opening pile close-up: a huge
136
+ plane (covers the viewport at any oblique angle) with a warm
137
+ spotlight pooled on the stack; fades away as the camera pulls
138
+ back and the dashboard page takes over ---- */}
139
+ {frame < METAL_FADE[1] ? (
140
+ <div
141
+ style={{
142
+ position: 'absolute',
143
+ left: -3000,
144
+ top: -3000,
145
+ width: 9000,
146
+ height: 9000,
147
+ opacity: interpolate(frame, [METAL_FADE[0], METAL_FADE[1]], [1, 0], {
148
+ extrapolateLeft: 'clamp', extrapolateRight: 'clamp',
149
+ }),
150
+ background: [
151
+ // warm key light pooled on the pile
152
+ `radial-gradient(1300px 900px at ${3000 + PILE_CX}px ${3000 + PILE_CY}px, rgba(255,214,150,0.20), rgba(255,190,120,0.06) 40%, transparent 68%)`,
153
+ // brushed-metal grain: fine anisotropic streaks
154
+ 'repeating-linear-gradient(100deg, rgba(255,255,255,0.028) 0px, rgba(255,255,255,0.028) 1px, transparent 2px, transparent 7px)',
155
+ 'repeating-linear-gradient(100deg, rgba(0,0,0,0.16) 0px, rgba(0,0,0,0.16) 2px, transparent 4px, transparent 13px)',
156
+ // broad steel sheen
157
+ 'linear-gradient(115deg, #2a2d33 0%, #383c44 28%, #22242a 55%, #33363e 78%, #1d1f24 100%)',
158
+ ].join(', '),
159
+ pointerEvents: 'none',
160
+ }}
161
+ />
162
+ ) : null}
163
+
164
+ {/* ---- paper extension: the page grows past the texture so the three
165
+ extra rows sit on paper, not on the void ---- */}
166
+ <div
167
+ style={{
168
+ position: 'absolute',
169
+ left: PAPER_EXT.x,
170
+ top: PAPER_EXT.y,
171
+ width: PAPER_EXT.w,
172
+ height: PAPER_EXT.h,
173
+ background: PAPER,
174
+ pointerEvents: 'none',
175
+ }}
176
+ />
177
+
178
+ {/* ---- filter clean-up: paper patch over the stale section headers /
179
+ counts baked into the texture below y=500, revealed 84–92 ---- */}
180
+ {frame >= FILTER_START ? (
181
+ <div
182
+ style={{
183
+ position: 'absolute',
184
+ left: 0,
185
+ top: 500,
186
+ width: 1920,
187
+ height: PAGE_H - 500,
188
+ background: PAPER,
189
+ opacity: interpolate(frame, [FILTER_START, FILTER_START + 8], [0, 1], {
190
+ extrapolateLeft: 'clamp', extrapolateRight: 'clamp',
191
+ }),
192
+ pointerEvents: 'none',
193
+ }}
194
+ />
195
+ ) : null}
196
+
197
+ {/* ---- 26 cards: visible pile at top right from frame 0, each card
198
+ deals itself to its slot (arc flight, roll resolving) on an
199
+ accelerating cadence; on filter the 25 non-matches fade+sink
200
+ away and nano-lab slides up to row one ---- */}
201
+ {grid.map((c, i) => {
202
+ const { cue } = c;
203
+ const radius = 16;
204
+ const isNano = i === nanoIdx;
205
+
206
+ // --- filter fade-out for the 25 non-target cards (staggered, 5f) ---
207
+ const outCue = isNano ? Infinity : FILTER_START + leaveRank.get(i)! * 0.4;
208
+ if (frame >= outCue + 5) return null;
209
+ const outT = isNano
210
+ ? 0
211
+ : interpolate(frame, [outCue, outCue + 5], [0, 1], {
212
+ extrapolateLeft: 'clamp', extrapolateRight: 'clamp', easing: Easing.inOut(Easing.quad),
213
+ });
214
+
215
+ // --- beat 1: deal (cue → cue+8): from the pile pose (px,py, stack
216
+ // height pz, small roll) to the hover pose over the slot. The flight
217
+ // arcs UP first (z bulge) like a card snapped off the top of a deck. ---
218
+ const diveT = interpolate(frame, [cue, cue + 8], [0, 1], {
219
+ extrapolateLeft: 'clamp', extrapolateRight: 'clamp', easing: DIVE_EASE,
220
+ });
221
+
222
+ // --- beat 2: settle (cue+8 → cue+12): Z from HOVER_H down to 0 ---
223
+ const settleT = interpolate(frame, [cue + 8, cue + 12], [0, 1], {
224
+ extrapolateLeft: 'clamp', extrapolateRight: 'clamp', easing: SETTLE_EASE,
225
+ });
226
+
227
+ // in-flight pose: pile → slot, roll resolving to 0 by touchdown-hover.
228
+ const dx = (c.px - c.x) * (1 - diveT);
229
+ const dy = (c.py - c.y) * (1 - diveT);
230
+ const rotFlight = c.protZ * (1 - diveT);
231
+
232
+ // depth: stack height → arc bulge (+90 at mid-flight) → hover → settle 0.
233
+ const arc = Math.sin(diveT * Math.PI) * 90;
234
+ const zDive = interpolate(diveT, [0, 1], [c.pz, HOVER_H]) + arc;
235
+ const z = frame < cue ? c.pz : zDive * (1 - settleT); // pile height before the deal
236
+
237
+ // scale: in the pile 1, snap up 1.06 mid-flight, settle back to 1
238
+ const dealScale = 1 + Math.sin(diveT * Math.PI) * 0.06;
239
+ const press = interpolate(frame, [cue + 10, cue + 11, cue + 12], [1, 0.996, 1], {
240
+ extrapolateLeft: 'clamp', extrapolateRight: 'clamp',
241
+ });
242
+ const scale = dealScale * press;
243
+
244
+ // --- nano-lab slide (104 → 114): glide from (408,1402) to the first-row
245
+ // slot with a light float (scale 1→1.02→1, small Z lift, wider shadow) ---
246
+ const slideT = isNano
247
+ ? interpolate(frame, [FILTER_START, FILTER_START + 10], [0, 1], {
248
+ extrapolateLeft: 'clamp', extrapolateRight: 'clamp', easing: SLIDE_EASE,
249
+ })
250
+ : 0;
251
+ const slideDy = (NANO_TO.y - nano.y) * slideT;
252
+ const slideDx = (NANO_TO.x - nano.x) * slideT;
253
+ const float = Math.sin(slideT * Math.PI); // 0→1→0 across the slide
254
+ const slideScale = 1 + 0.02 * float;
255
+ const slideZ = 18 * float;
256
+
257
+ // once fully settled, force an exact identity so the card sits flush
258
+ // with its slot on the tilted board (no residual sub-px drift).
259
+ const landed = frame >= cue + 12;
260
+ const inPile = frame < cue;
261
+ const transform = isNano && frame >= FILTER_START
262
+ ? `translate3d(${slideDx}px, ${slideDy}px, ${slideZ}px) scale(${slideScale})`
263
+ : outT > 0
264
+ ? `translate3d(0px, ${8 * outT}px, 0px)`
265
+ : landed
266
+ ? 'translate3d(0px, 0px, 0px)'
267
+ : inPile
268
+ ? `translate3d(${c.px - c.x}px, ${c.py - c.y}px, ${c.pz}px) rotateZ(${c.protZ}deg)`
269
+ : `translate3d(${dx}px, ${dy}px, ${z}px) rotateZ(${rotFlight}deg) scale(${scale})`;
270
+
271
+ // shadow: stacked cards carry almost none (they sit on each other),
272
+ // airborne large/soft, tight when flush, widening on the slide
273
+ const shadow = isNano && frame >= FILTER_START
274
+ ? `0 ${2 + 14 * float}px ${6 + 26 * float}px rgba(60,45,30,${0.08 + 0.1 * float})`
275
+ : landed
276
+ ? '0 2px 6px rgba(60,45,30,.08)'
277
+ : inPile
278
+ ? '0 1px 3px rgba(60,45,30,.14)'
279
+ : `0 ${36 - 30 * settleT}px ${70 - 60 * settleT}px rgba(60,45,30,${0.3 - 0.22 * settleT})`;
280
+
281
+ // motion-blur ghost during the deal: a faint blurred copy trailing the flight path
282
+ const showGhost = diveT > 0.02 && diveT < 0.98;
283
+ const ghostLagX = (c.px - c.x) * 0.05;
284
+ const ghostLagY = (c.py - c.y) * 0.05;
285
+
286
+ return (
287
+ <div key={`${c.file}-${i}`} style={{ transformStyle: 'preserve-3d' }}>
288
+ {showGhost ? (
289
+ <div
290
+ style={{
291
+ position: 'absolute',
292
+ left: c.x,
293
+ top: c.y,
294
+ width: c.w,
295
+ height: c.h,
296
+ transform: `translate3d(${dx + ghostLagX}px, ${dy + ghostLagY}px, ${z}px) rotateZ(${rotFlight}deg) scale(${scale})`,
297
+ transformOrigin: 'center center',
298
+ opacity: 0.25 * (1 - diveT),
299
+ filter: 'blur(6px)',
300
+ borderRadius: radius,
301
+ overflow: 'hidden',
302
+ pointerEvents: 'none',
303
+ }}
304
+ >
305
+ <Img
306
+ src={staticFile(`textures/live/${c.file}`)}
307
+ style={{ position: 'absolute', inset: 0, width: '100%', height: '100%', display: 'block' }}
308
+ />
309
+ </div>
310
+ ) : null}
311
+
312
+ <div
313
+ style={{
314
+ position: 'absolute',
315
+ left: c.x,
316
+ top: c.y,
317
+ width: c.w,
318
+ height: c.h,
319
+ transform,
320
+ transformOrigin: 'center center',
321
+ boxShadow: shadow,
322
+ borderRadius: radius,
323
+ opacity: 1 - outT,
324
+ overflow: 'hidden',
325
+ }}
326
+ >
327
+ <Img
328
+ src={staticFile(`textures/live/${c.file}`)}
329
+ style={{ position: 'absolute', inset: 0, width: '100%', height: '100%', display: 'block' }}
330
+ />
331
+ </div>
332
+ </div>
333
+ );
334
+ })}
335
+
336
+ {/* ---- search box: paper patch over the placeholder text (keeps the
337
+ magnifier icon), then "nano-lab" typed in with a blinking caret ---- */}
338
+ {frame >= 118 ? (
339
+ <div
340
+ style={{
341
+ position: 'absolute',
342
+ left: 440,
343
+ top: SEARCH.y + 4,
344
+ width: SEARCH.x + SEARCH.w - 448,
345
+ height: SEARCH.h - 8,
346
+ background: FIELD,
347
+ opacity: interpolate(frame, [118, 124], [0, 1], {
348
+ extrapolateLeft: 'clamp', extrapolateRight: 'clamp',
349
+ }),
350
+ pointerEvents: 'none',
351
+ }}
352
+ />
353
+ ) : null}
354
+ {frame >= TYPE_START - 2 ? (
355
+ <div
356
+ style={{
357
+ position: 'absolute',
358
+ left: 448,
359
+ top: SEARCH.y,
360
+ height: SEARCH.h,
361
+ display: 'flex',
362
+ alignItems: 'center',
363
+ fontFamily: 'ui-sans-serif, system-ui, -apple-system, sans-serif',
364
+ fontSize: 15,
365
+ letterSpacing: 0.2,
366
+ color: 'oklch(25% 0.006 82)',
367
+ pointerEvents: 'none',
368
+ }}
369
+ >
370
+ <span>{QUERY.slice(0, typedCount)}</span>
371
+ {caretOn ? (
372
+ <span
373
+ style={{
374
+ display: 'inline-block',
375
+ width: 2,
376
+ height: 20,
377
+ marginLeft: 2,
378
+ background: 'oklch(58% 0.13 65)',
379
+ }}
380
+ />
381
+ ) : null}
382
+ </div>
383
+ ) : null}
384
+
385
+ {/* ---- click ripple on the filtered card: two concentric amber rings ---- */}
386
+ {[0, 1].map((r) => {
387
+ const start = 176 + r * 3;
388
+ if (frame < start || frame > start + 10) return null;
389
+ const t = interpolate(frame, [start, start + 10], [0, 1], {
390
+ extrapolateLeft: 'clamp', extrapolateRight: 'clamp', easing: Easing.out(Easing.cubic),
391
+ });
392
+ const rad = interpolate(t, [0, 1], [14, r === 0 ? 54 : 78]);
393
+ return (
394
+ <div
395
+ key={`ripple-${r}`}
396
+ style={{
397
+ position: 'absolute',
398
+ left: CLICK_C.x - rad,
399
+ top: CLICK_C.y - rad,
400
+ width: rad * 2,
401
+ height: rad * 2,
402
+ borderRadius: '50%',
403
+ border: '2px solid oklch(58% 0.13 65)',
404
+ opacity: 1 - t,
405
+ pointerEvents: 'none',
406
+ }}
407
+ />
408
+ );
409
+ })}
410
+
411
+ {/* ---- selected-card amber outline, lit from the click until the cut ---- */}
412
+ {frame >= 178 ? (
413
+ <div
414
+ style={{
415
+ position: 'absolute',
416
+ left: NANO_TO.x - 6,
417
+ top: NANO_TO.y - 6,
418
+ width: nano.w + 12,
419
+ height: nano.h + 12,
420
+ borderRadius: 16,
421
+ border: '3px solid oklch(58% 0.13 65)',
422
+ boxShadow: '0 0 40px rgba(180,120,50,0.5)',
423
+ opacity: interpolate(frame, [178, 181], [0.5, 1], {
424
+ extrapolateLeft: 'clamp', extrapolateRight: 'clamp',
425
+ }),
426
+ pointerEvents: 'none',
427
+ }}
428
+ />
429
+ ) : null}
430
+
431
+ {/* near-edge rim light along the extended board's leading (bottom) edge */}
432
+ <div
433
+ style={{
434
+ position: 'absolute',
435
+ left: 0,
436
+ right: 0,
437
+ top: PAPER_EXT.y + PAPER_EXT.h - 8,
438
+ height: 8,
439
+ background: 'rgba(255,255,255,0.85)',
440
+ filter: 'blur(6px)',
441
+ opacity: 0.5,
442
+ pointerEvents: 'none',
443
+ }}
444
+ />
445
+ </PageCam>
446
+ );
447
+ };