dsh-drawai 0.4.1 → 0.4.3

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 (365) hide show
  1. package/README.md +96 -253
  2. package/lib/client.js +28 -7
  3. package/lib/index.js +474 -97
  4. package/lib/motion/asset-pack.js +109 -50
  5. package/lib/motion/assets.js +291 -291
  6. package/lib/motion/demo-assets-lock.js +10 -0
  7. package/lib/motion/mgstyles/vendor/README.md +28 -0
  8. package/lib/motion/mgstyles/vendor/modules/d3/LICENSE +13 -0
  9. package/lib/motion/mgstyles/vendor/modules/d3/dist/d3.min.js +2 -0
  10. package/lib/motion/mgstyles/vendor/modules/opentype.js/LICENSE +20 -0
  11. package/lib/motion/mgstyles/vendor/modules/opentype.js/dist/opentype.mjs +14460 -0
  12. package/lib/motion/mgstyles/vendor/modules/simplex-noise/LICENSE +21 -0
  13. package/lib/motion/mgstyles/vendor/modules/simplex-noise/dist/esm/simplex-noise.js +466 -0
  14. package/lib/motion/mgstyles/vendor/modules/topojson-client/LICENSE +13 -0
  15. package/lib/motion/mgstyles/vendor/modules/topojson-client/dist/topojson-client.min.js +2 -0
  16. package/lib/motion/preview.js +10 -3
  17. package/lib/motion/render.js +19 -1
  18. package/lib/motion/shotcraft/upstream/SKILL.md +286 -286
  19. package/lib/motion/shotcraft/upstream/assets/lib/Caption.tsx +54 -54
  20. package/lib/motion/shotcraft/upstream/assets/lib/ClipCard.tsx +200 -200
  21. package/lib/motion/shotcraft/upstream/assets/lib/DigitRoll.tsx +45 -45
  22. package/lib/motion/shotcraft/upstream/assets/lib/FlashCut.tsx +20 -20
  23. package/lib/motion/shotcraft/upstream/assets/lib/FlatPanel.tsx +65 -65
  24. package/lib/motion/shotcraft/upstream/assets/lib/PageCam.tsx +151 -151
  25. package/lib/motion/shotcraft/upstream/assets/lib/VerticalTicker.tsx +129 -129
  26. package/lib/motion/shotcraft/upstream/assets/lib/helpers/camera.tsx +75 -75
  27. package/lib/motion/shotcraft/upstream/assets/lib/helpers/motion.ts +40 -40
  28. package/lib/motion/shotcraft/upstream/assets/lib/helpers/rand.ts +11 -11
  29. package/lib/motion/shotcraft/upstream/assets/lib/helpers/shake.ts +10 -10
  30. package/lib/motion/shotcraft/upstream/assets/scripts/build-readme-cover.mjs +49 -49
  31. package/lib/motion/shotcraft/upstream/assets/scripts/capture-template.mjs +210 -210
  32. package/lib/motion/shotcraft/upstream/assets/scripts/sfx-source.py +423 -423
  33. package/lib/motion/shotcraft/upstream/assets/scripts/smoke-render-demos.py +170 -170
  34. package/lib/motion/shotcraft/upstream/assets/scripts/test_sfx_source.py +157 -157
  35. package/lib/motion/shotcraft/upstream/demos/README.md +120 -120
  36. package/lib/motion/shotcraft/upstream/demos/_fixtures/Brand.tsx +112 -112
  37. package/lib/motion/shotcraft/upstream/demos/_fixtures/Fixtures.tsx +647 -647
  38. package/lib/motion/shotcraft/upstream/demos/_fixtures/Look.tsx +316 -316
  39. package/lib/motion/shotcraft/upstream/demos/_fixtures/Motion.tsx +82 -82
  40. package/lib/motion/shotcraft/upstream/demos/_fixtures/PageCam2D.tsx +115 -115
  41. package/lib/motion/shotcraft/upstream/demos/_fixtures/Polish.tsx +243 -243
  42. package/lib/motion/shotcraft/upstream/demos/_textures/live-layout.json +388 -388
  43. package/lib/motion/shotcraft/upstream/demos/camera/basic-3d-scene/Basic3DScene.tsx +250 -250
  44. package/lib/motion/shotcraft/upstream/demos/camera/crash-zoom-punch/CrashImpactReal.tsx +305 -305
  45. package/lib/motion/shotcraft/upstream/demos/camera/crash-zoom-punch/CrashZoomReal.tsx +246 -246
  46. package/lib/motion/shotcraft/upstream/demos/camera/cursor-flyover/CursorFlyover.tsx +390 -390
  47. package/lib/motion/shotcraft/upstream/demos/camera/depth-layer-moves/MultiplaneReal.tsx +138 -138
  48. package/lib/motion/shotcraft/upstream/demos/camera/graze-face-tour/GrazeFaceTour.tsx +542 -542
  49. package/lib/motion/shotcraft/upstream/demos/camera/overhead-camera-moves/OverheadTabletopDrop.tsx +315 -315
  50. package/lib/motion/shotcraft/upstream/demos/camera/overhead-camera-moves/TiltReveal.tsx +299 -299
  51. package/lib/motion/shotcraft/upstream/demos/camera/space-camera-moves/DroneDiveLanding.tsx +173 -173
  52. package/lib/motion/shotcraft/upstream/demos/camera/space-camera-moves/ExplodedView.tsx +348 -348
  53. package/lib/motion/shotcraft/upstream/demos/camera/steep-tilt-glide/SteepTiltGlide.tsx +366 -366
  54. package/lib/motion/shotcraft/upstream/demos/camera/tension-camera-moves/BulletTimeFreezeOrbit.tsx +279 -279
  55. package/lib/motion/shotcraft/upstream/demos/camera/tension-camera-moves/PullBackIsolation.tsx +184 -184
  56. package/lib/motion/shotcraft/upstream/demos/camera/terminal-3d/Terminal3D.tsx +390 -390
  57. package/lib/motion/shotcraft/upstream/demos/data/before-after-slider-scrub/BeforeAfterSliderScrub.tsx +155 -155
  58. package/lib/motion/shotcraft/upstream/demos/data/chart-live-moves/AxisRescaleShockV2.tsx +303 -303
  59. package/lib/motion/shotcraft/upstream/demos/data/chart-live-moves/OscilloscopeStreamV2.tsx +290 -290
  60. package/lib/motion/shotcraft/upstream/demos/data/chart-live-moves/UnitDotSwarmRegroupV2.tsx +278 -278
  61. package/lib/motion/shotcraft/upstream/demos/data/gauge-readout-moves/NeedleSweepSelftest.tsx +307 -307
  62. package/lib/motion/shotcraft/upstream/demos/data/gauge-readout-moves/TapeScrollFixedPointer.tsx +215 -215
  63. package/lib/motion/shotcraft/upstream/demos/data/scroll-brake-moves/BrakeReticleLock.tsx +299 -299
  64. package/lib/motion/shotcraft/upstream/demos/data/scroll-brake-moves/ChangelogScrollBrake.tsx +232 -232
  65. package/lib/motion/shotcraft/upstream/demos/data/timeline-travel/TimelineTravel.tsx +290 -290
  66. package/lib/motion/shotcraft/upstream/demos/effects/assemble-then-type-flyin/AssembleThenTypeFlyin.tsx +273 -273
  67. package/lib/motion/shotcraft/upstream/demos/effects/aurora-bloom-bg-flip/AuroraBloomBgFlip.tsx +167 -167
  68. package/lib/motion/shotcraft/upstream/demos/effects/brand-frame-snap/BrandFrameSnap.tsx +536 -536
  69. package/lib/motion/shotcraft/upstream/demos/effects/fui-hud-moves/ReticleLockOn.tsx +164 -164
  70. package/lib/motion/shotcraft/upstream/demos/effects/glow-flyline-moves/FlylineArc.tsx +175 -175
  71. package/lib/motion/shotcraft/upstream/demos/effects/glow-flyline-moves/GlowOrbAmbient.tsx +197 -197
  72. package/lib/motion/shotcraft/upstream/demos/effects/glow-flyline-moves/OrbFlylineRelay.tsx +241 -241
  73. package/lib/motion/shotcraft/upstream/demos/effects/icon-performance-moves/AttentionBounce.tsx +279 -279
  74. package/lib/motion/shotcraft/upstream/demos/effects/impact-feedback/AnimeImpact.tsx +230 -230
  75. package/lib/motion/shotcraft/upstream/demos/effects/impact-feedback/HitCounter.tsx +345 -345
  76. package/lib/motion/shotcraft/upstream/demos/effects/light-play-moves/SheenSweepRetry.tsx +275 -275
  77. package/lib/motion/shotcraft/upstream/demos/effects/light-play-moves/SpotlightSweepReveal.tsx +229 -229
  78. package/lib/motion/shotcraft/upstream/demos/effects/radial-ripple-phone-chips/RadialRipplePhoneChips.tsx +312 -312
  79. package/lib/motion/shotcraft/upstream/demos/effects/riso-print-hits/RisoMisregistrationHit.tsx +222 -222
  80. package/lib/motion/shotcraft/upstream/demos/effects/scan-bracket-sweep/ScanBracketSweep.tsx +295 -295
  81. package/lib/motion/shotcraft/upstream/demos/effects/scanline-annotate-focus/ScanlineAnnotateFocus.tsx +329 -329
  82. package/lib/motion/shotcraft/upstream/demos/effects/scanline-assemble-flyin/ScanlineAssembleFlyin.tsx +315 -315
  83. package/lib/motion/shotcraft/upstream/demos/effects/slam-entrance-moves/ImpactBurstKit.tsx +264 -264
  84. package/lib/motion/shotcraft/upstream/demos/effects/slam-entrance-moves/KanadaPerspectiveSnap.tsx +260 -260
  85. package/lib/motion/shotcraft/upstream/demos/effects/slam-entrance-moves/ScoreSlam.tsx +263 -263
  86. package/lib/motion/shotcraft/upstream/demos/effects/spotlight-sweep-moves/CornerSpotlightReveal.tsx +123 -123
  87. package/lib/motion/shotcraft/upstream/demos/effects/spotlight-sweep-moves/GlowWakeSleepPanel.tsx +187 -187
  88. package/lib/motion/shotcraft/upstream/demos/effects/spotlight-sweep-moves/SlideSpotlightPan.tsx +175 -175
  89. package/lib/motion/shotcraft/upstream/demos/interaction/autolayout-gap-dial/AutolayoutGapDial.tsx +305 -305
  90. package/lib/motion/shotcraft/upstream/demos/interaction/canvas-materialize-moves/DiagramCascadeBuild.tsx +350 -350
  91. package/lib/motion/shotcraft/upstream/demos/interaction/canvas-materialize-moves/PanelToCanvasMaterialize.tsx +352 -352
  92. package/lib/motion/shotcraft/upstream/demos/interaction/chip-grid-single-select-blackout/ChipGridSingleSelectBlackout.tsx +218 -218
  93. package/lib/motion/shotcraft/upstream/demos/interaction/collab-cursor-moves/CursorCastEnsemble.tsx +297 -297
  94. package/lib/motion/shotcraft/upstream/demos/interaction/glass-pill-dictation-typing/GlassPillDictationTyping.tsx +157 -157
  95. package/lib/motion/shotcraft/upstream/demos/interaction/hashtag-to-pill-materialize/HashtagToPillMaterialize.tsx +218 -218
  96. package/lib/motion/shotcraft/upstream/demos/interaction/picker-carousel-feature-cycle/PickerCarouselFeatureCycle.tsx +202 -202
  97. package/lib/motion/shotcraft/upstream/demos/interaction/segmented-thumb-hero/SegmentedThumbHero.tsx +265 -265
  98. package/lib/motion/shotcraft/upstream/demos/interaction/theme-switch-moves/PaletteThemeRipple.tsx +457 -457
  99. package/lib/motion/shotcraft/upstream/demos/interaction/theme-switch-moves/ThemeSweepToggle.tsx +446 -446
  100. package/lib/motion/shotcraft/upstream/demos/interaction/type-and-filter/TypeAndFilter.tsx +249 -249
  101. package/lib/motion/shotcraft/upstream/demos/interaction/voice-waveform-live/VoiceWaveformLive.tsx +278 -278
  102. package/lib/motion/shotcraft/upstream/demos/opening/crane-rise-reveal/CraneRiseReveal.tsx +332 -332
  103. package/lib/motion/shotcraft/upstream/demos/opening/dataviz-landscape-open/DatavizLandscapeOpen.tsx +358 -358
  104. package/lib/motion/shotcraft/upstream/demos/opening/fracture/Fracture.tsx +201 -201
  105. package/lib/motion/shotcraft/upstream/demos/opening/icon-field-colorize/IconFieldColorize.tsx +200 -200
  106. package/lib/motion/shotcraft/upstream/demos/opening/letterspace-materialize/LetterspaceMaterialize.tsx +208 -208
  107. package/lib/motion/shotcraft/upstream/demos/opening/magician-card-flourish/MagicianCardFlourish.tsx +341 -341
  108. package/lib/motion/shotcraft/upstream/demos/opening/orbit-ring-title-open/OrbitRingTitleOpen.tsx +389 -389
  109. package/lib/motion/shotcraft/upstream/demos/opening/spotlight-hero-card/SpotlightHeroCard.tsx +293 -293
  110. package/lib/motion/shotcraft/upstream/demos/opening/stroke-segment-build/StrokeSegmentBuild.tsx +183 -183
  111. package/lib/motion/shotcraft/upstream/demos/opening/text-as-mask/TextAsMask.tsx +245 -245
  112. package/lib/motion/shotcraft/upstream/demos/outro/grain-dissolve/GrainDissolve.tsx +222 -222
  113. package/lib/motion/shotcraft/upstream/demos/outro/logo-shrink-wordmark-lockup/LogoShrinkWordmarkLockup.tsx +223 -223
  114. package/lib/motion/shotcraft/upstream/demos/outro/neon-triple-marquee/NeonTripleMarquee.tsx +217 -217
  115. package/lib/motion/shotcraft/upstream/demos/outro/outro-group-photo-launch/OutroGroupPhotoLaunch.tsx +343 -343
  116. package/lib/motion/shotcraft/upstream/demos/outro/ui-strip-away-outro/UiStripAwayOutro.tsx +357 -357
  117. package/lib/motion/shotcraft/upstream/demos/outro/ui-to-brand-morph/IconFlipBloomLogo.tsx +187 -187
  118. package/lib/motion/shotcraft/upstream/demos/outro/ui-to-brand-morph/InputMorphsIntoLogo.tsx +333 -333
  119. package/lib/motion/shotcraft/upstream/demos/rhythm/beat-cut-moves/PaparazziFlash.tsx +274 -274
  120. package/lib/motion/shotcraft/upstream/demos/rhythm/beat-step-list-theme-cycle/BeatStepListThemeCycle.tsx +270 -270
  121. package/lib/motion/shotcraft/upstream/demos/rhythm/panel-grid-moves/ComicPanelSplit.tsx +430 -430
  122. package/lib/motion/shotcraft/upstream/demos/rhythm/quad-split-parallel-scenes/QuadSplitParallelScenes.tsx +252 -252
  123. package/lib/motion/shotcraft/upstream/demos/rhythm/rhythm-interrupt-moves/JumpCutPunchIn.tsx +106 -106
  124. package/lib/motion/shotcraft/upstream/demos/rhythm/sakuga-timing-shift/SakugaTimingShift.tsx +288 -288
  125. package/lib/motion/shotcraft/upstream/demos/rhythm/speed-ramp-freeze/FreezeAnnotateReal.tsx +362 -362
  126. package/lib/motion/shotcraft/upstream/demos/rhythm/trailer-grammar-moves/TrailerBumper.tsx +168 -168
  127. package/lib/motion/shotcraft/upstream/demos/transition/bottom-push-stack-wipe/BottomPushStackWipe.tsx +310 -310
  128. package/lib/motion/shotcraft/upstream/demos/transition/card-flip-reveal/CardFlipReveal.tsx +261 -261
  129. package/lib/motion/shotcraft/upstream/demos/transition/card-flock-tumble/CardFlockTumble.tsx +459 -459
  130. package/lib/motion/shotcraft/upstream/demos/transition/circle-match-iris/CircleMatchIris.tsx +294 -294
  131. package/lib/motion/shotcraft/upstream/demos/transition/gradient-transition/GradientTransition.tsx +161 -161
  132. package/lib/motion/shotcraft/upstream/demos/transition/line-carry-transition/LineCarryTransition.tsx +248 -248
  133. package/lib/motion/shotcraft/upstream/demos/transition/mosaic-reframe/MosaicReframe.tsx +359 -359
  134. package/lib/motion/shotcraft/upstream/demos/transition/page-turn-transitions/BarnDoorSplit.tsx +227 -227
  135. package/lib/motion/shotcraft/upstream/demos/transition/print-texture-transitions/InkBleedReveal.tsx +162 -162
  136. package/lib/motion/shotcraft/upstream/demos/transition/shot-transitions/PortalWipeV2.tsx +248 -248
  137. package/lib/motion/shotcraft/upstream/demos/transition/shot-transitions/WhipBrakeReal.tsx +186 -186
  138. package/lib/motion/shotcraft/upstream/demos/transition/tear-streak-transitions/GlitchDisplace.tsx +355 -355
  139. package/lib/motion/shotcraft/upstream/demos/transition/transition-hidden-cut/InvisibleCut.tsx +272 -272
  140. package/lib/motion/shotcraft/upstream/demos/transition/transition-hidden-cut/LightLeakBurn.tsx +262 -262
  141. package/lib/motion/shotcraft/upstream/demos/transition/transition-hidden-cut/VersusSlam.tsx +217 -217
  142. package/lib/motion/shotcraft/upstream/demos/transition/transition-travel/LetterformZoom.tsx +285 -285
  143. package/lib/motion/shotcraft/upstream/demos/transition/white-flash-logo-simplify-cut/WhiteFlashLogoSimplifyCut.tsx +205 -205
  144. package/lib/motion/shotcraft/upstream/demos/transition/wipe-transitions/BlindsSlice.tsx +178 -178
  145. package/lib/motion/shotcraft/upstream/demos/typography/blur-slide/BlurSlide.tsx +147 -147
  146. package/lib/motion/shotcraft/upstream/demos/typography/brace-expand/BraceExpand.tsx +143 -143
  147. package/lib/motion/shotcraft/upstream/demos/typography/brand-ink-open/BrandInkOpen.tsx +134 -134
  148. package/lib/motion/shotcraft/upstream/demos/typography/countdown-arc-scatter/CountdownArcScatter.tsx +217 -217
  149. package/lib/motion/shotcraft/upstream/demos/typography/flying-words/FlyingWords.tsx +198 -198
  150. package/lib/motion/shotcraft/upstream/demos/typography/glitch-cycle/GlitchCycle.tsx +221 -221
  151. package/lib/motion/shotcraft/upstream/demos/typography/gradient-word-sweep/GradientWordSweep.tsx +312 -312
  152. package/lib/motion/shotcraft/upstream/demos/typography/lead-word-zoom-assemble/LeadWordZoomAssemble.tsx +261 -261
  153. package/lib/motion/shotcraft/upstream/demos/typography/marker-underline-title/MarkerUnderlineTitle.tsx +121 -121
  154. package/lib/motion/shotcraft/upstream/demos/typography/outline-word-fill/OutlineWordFill.tsx +153 -153
  155. package/lib/motion/shotcraft/upstream/demos/typography/paper-title-card/PaperTitleCard.tsx +179 -179
  156. package/lib/motion/shotcraft/upstream/demos/typography/pill-chip-slot-cycle-handled/PillChipSlotCycleHandled.tsx +140 -140
  157. package/lib/motion/shotcraft/upstream/demos/typography/pill-slot-cycle/PillSlotCycle.tsx +309 -309
  158. package/lib/motion/shotcraft/upstream/demos/typography/text-column-converge/TextColumnConverge.tsx +191 -191
  159. package/lib/motion/shotcraft/upstream/demos/typography/title-demote-to-label/TitleDemoteToLabel.tsx +292 -292
  160. package/lib/motion/shotcraft/upstream/demos/typography/type-assembly-moves/LetterformDriftAssembly.tsx +135 -135
  161. package/lib/motion/shotcraft/upstream/demos/typography/type-assembly-moves/SplitTextStagger.tsx +124 -124
  162. package/lib/motion/shotcraft/upstream/demos/typography/type-assembly-moves/TextOnPath.tsx +255 -255
  163. package/lib/motion/shotcraft/upstream/demos/typography/type-entrance-moves/LetterDropPhysics.tsx +173 -173
  164. package/lib/motion/shotcraft/upstream/demos/typography/type-rhythm-sync/FontWeightPump.tsx +225 -225
  165. package/lib/motion/shotcraft/upstream/demos/typography/type-rhythm-sync/KaraokeFillSync.tsx +141 -141
  166. package/lib/motion/shotcraft/upstream/demos/typography/typewriter-moves/TypewriterErrorRetype.tsx +137 -137
  167. package/lib/motion/shotcraft/upstream/demos/typography/vertical-word-roll-blur-cycle/VerticalWordRollBlurCycle.tsx +147 -147
  168. package/lib/motion/shotcraft/upstream/demos/typography/word-relay-filmstrip/WordRelayFilmstrip.tsx +409 -409
  169. package/lib/motion/shotcraft/upstream/demos/typography/word-relay-geometry/WordRelayGeometry.tsx +280 -280
  170. package/lib/motion/shotcraft/upstream/demos/ui-entrance/avatar-bracket-carousel/AvatarBracketCarousel.tsx +271 -271
  171. package/lib/motion/shotcraft/upstream/demos/ui-entrance/bezier-source-converge-merge/BezierSourceConvergeMerge.tsx +385 -385
  172. package/lib/motion/shotcraft/upstream/demos/ui-entrance/card-stack/CardStack.tsx +312 -312
  173. package/lib/motion/shotcraft/upstream/demos/ui-entrance/carousel-3d/Carousel3D.tsx +303 -303
  174. package/lib/motion/shotcraft/upstream/demos/ui-entrance/clipcard-looping/ClipCardLooping.tsx +77 -77
  175. package/lib/motion/shotcraft/upstream/demos/ui-entrance/cloner-depth-echo/ClonerDepthEcho.tsx +311 -311
  176. package/lib/motion/shotcraft/upstream/demos/ui-entrance/deck-deal-flyin/DeckDealFlyin.tsx +307 -307
  177. package/lib/motion/shotcraft/upstream/demos/ui-entrance/doc-park-left-pill-deal/DocParkLeftPillDeal.tsx +349 -349
  178. package/lib/motion/shotcraft/upstream/demos/ui-entrance/document-typewriter-reveal/DocumentTypewriterReveal.tsx +255 -255
  179. package/lib/motion/shotcraft/upstream/demos/ui-entrance/draw-svg-trace/DrawSvgTrace.tsx +244 -244
  180. package/lib/motion/shotcraft/upstream/demos/ui-entrance/element-body-moves/ContactShadowLift.tsx +217 -217
  181. package/lib/motion/shotcraft/upstream/demos/ui-entrance/integration-hub-map/IntegrationHubMap.tsx +652 -652
  182. package/lib/motion/shotcraft/upstream/demos/ui-entrance/list-reveal/ListReveal.tsx +153 -153
  183. package/lib/motion/shotcraft/upstream/demos/ui-entrance/list-stack-press/ListStackPress.tsx +238 -238
  184. package/lib/motion/shotcraft/upstream/demos/ui-entrance/neon-frame-forerun/NeonFrameForerun.tsx +324 -324
  185. package/lib/motion/shotcraft/upstream/demos/ui-entrance/neon-frame-orbit-drop/NeonFrameForerunOrbit.tsx +354 -354
  186. package/lib/motion/shotcraft/upstream/demos/ui-entrance/page-waterfall-wall/PageWaterfallWall.tsx +101 -101
  187. package/lib/motion/shotcraft/upstream/demos/ui-entrance/page-waterfall-wall/VerticalTicker.tsx +129 -129
  188. package/lib/motion/shotcraft/upstream/demos/ui-entrance/product-card-progressive-assemble/ProductCardProgressiveAssemble.tsx +297 -297
  189. package/lib/motion/shotcraft/upstream/demos/ui-entrance/radial-wave/RadialWave.tsx +57 -57
  190. package/lib/motion/shotcraft/upstream/demos/ui-entrance/research-card-stack-scroll/ResearchCardStackScroll.tsx +155 -155
  191. package/lib/motion/shotcraft/upstream/demos/ui-entrance/row-embed/RowEmbed.tsx +175 -175
  192. package/lib/motion/shotcraft/upstream/demos/ui-entrance/value-stagger-gradient/ValueStaggerGradient.tsx +153 -153
  193. package/lib/motion/shotcraft/upstream/demos/ui-entrance/wall-reveal-moves/BentoLightUp.tsx +146 -146
  194. package/lib/motion/shotcraft/upstream/demos/ui-entrance/wall-reveal-moves/WireframeDrawOn.tsx +226 -226
  195. package/lib/motion/shotcraft/upstream/gallery/api/library.json +1 -1
  196. package/lib/motion/shotcraft/upstream/references/aesthetic-rules.md +193 -193
  197. package/lib/motion/shotcraft/upstream/references/final-review.md +121 -121
  198. package/lib/motion/shotcraft/upstream/references/guided-free-creation.md +199 -199
  199. package/lib/motion/shotcraft/upstream/references/jianying-export.md +183 -183
  200. package/lib/motion/shotcraft/upstream/references/music-beat-sync.md +257 -257
  201. package/lib/motion/shotcraft/upstream/references/pipeline.md +382 -382
  202. package/lib/motion/shotcraft/upstream/references/publish-upload-post.md +111 -111
  203. package/lib/motion/shotcraft/upstream/references/sequences/promo-energy-arc.md +50 -50
  204. package/lib/motion/shotcraft/upstream/references/sfx-sourcing.md +95 -95
  205. package/lib/motion/shotcraft/upstream/references/shots/camera/basic-3d-scene.md +41 -41
  206. package/lib/motion/shotcraft/upstream/references/shots/camera/crash-zoom-punch.md +52 -52
  207. package/lib/motion/shotcraft/upstream/references/shots/camera/cursor-flyover.md +39 -39
  208. package/lib/motion/shotcraft/upstream/references/shots/camera/depth-layer-moves.md +39 -39
  209. package/lib/motion/shotcraft/upstream/references/shots/camera/graze-face-tour.md +57 -57
  210. package/lib/motion/shotcraft/upstream/references/shots/camera/overhead-camera-moves.md +51 -51
  211. package/lib/motion/shotcraft/upstream/references/shots/camera/space-camera-moves.md +46 -46
  212. package/lib/motion/shotcraft/upstream/references/shots/camera/steep-tilt-glide.md +52 -52
  213. package/lib/motion/shotcraft/upstream/references/shots/camera/tension-camera-moves.md +43 -43
  214. package/lib/motion/shotcraft/upstream/references/shots/camera/terminal-3d.md +42 -42
  215. package/lib/motion/shotcraft/upstream/references/shots/data/before-after-slider-scrub.md +48 -48
  216. package/lib/motion/shotcraft/upstream/references/shots/data/chart-live-moves.md +52 -52
  217. package/lib/motion/shotcraft/upstream/references/shots/data/gauge-readout-moves.md +45 -45
  218. package/lib/motion/shotcraft/upstream/references/shots/data/scroll-brake-moves.md +46 -46
  219. package/lib/motion/shotcraft/upstream/references/shots/data/timeline-travel.md +44 -44
  220. package/lib/motion/shotcraft/upstream/references/shots/effects/assemble-then-type-flyin.md +63 -63
  221. package/lib/motion/shotcraft/upstream/references/shots/effects/aurora-bloom-bg-flip.md +54 -54
  222. package/lib/motion/shotcraft/upstream/references/shots/effects/brand-frame-snap.md +58 -58
  223. package/lib/motion/shotcraft/upstream/references/shots/effects/fui-hud-moves.md +35 -35
  224. package/lib/motion/shotcraft/upstream/references/shots/effects/glow-flyline-moves.md +53 -53
  225. package/lib/motion/shotcraft/upstream/references/shots/effects/icon-performance-moves.md +42 -42
  226. package/lib/motion/shotcraft/upstream/references/shots/effects/impact-feedback.md +50 -50
  227. package/lib/motion/shotcraft/upstream/references/shots/effects/light-play-moves.md +46 -46
  228. package/lib/motion/shotcraft/upstream/references/shots/effects/radial-ripple-phone-chips.md +56 -56
  229. package/lib/motion/shotcraft/upstream/references/shots/effects/riso-print-hits.md +49 -49
  230. package/lib/motion/shotcraft/upstream/references/shots/effects/scan-bracket-sweep.md +50 -50
  231. package/lib/motion/shotcraft/upstream/references/shots/effects/scanline-annotate-focus.md +53 -53
  232. package/lib/motion/shotcraft/upstream/references/shots/effects/scanline-assemble-flyin.md +53 -53
  233. package/lib/motion/shotcraft/upstream/references/shots/effects/slam-entrance-moves.md +55 -55
  234. package/lib/motion/shotcraft/upstream/references/shots/effects/spotlight-sweep-moves.md +52 -52
  235. package/lib/motion/shotcraft/upstream/references/shots/interaction/autolayout-gap-dial.md +60 -60
  236. package/lib/motion/shotcraft/upstream/references/shots/interaction/canvas-materialize-moves.md +57 -57
  237. package/lib/motion/shotcraft/upstream/references/shots/interaction/chip-grid-single-select-blackout.md +51 -51
  238. package/lib/motion/shotcraft/upstream/references/shots/interaction/collab-cursor-moves.md +41 -41
  239. package/lib/motion/shotcraft/upstream/references/shots/interaction/glass-pill-dictation-typing.md +53 -53
  240. package/lib/motion/shotcraft/upstream/references/shots/interaction/hashtag-to-pill-materialize.md +60 -60
  241. package/lib/motion/shotcraft/upstream/references/shots/interaction/picker-carousel-feature-cycle.md +55 -55
  242. package/lib/motion/shotcraft/upstream/references/shots/interaction/segmented-thumb-hero.md +57 -57
  243. package/lib/motion/shotcraft/upstream/references/shots/interaction/theme-switch-moves.md +47 -47
  244. package/lib/motion/shotcraft/upstream/references/shots/interaction/type-and-filter.md +37 -37
  245. package/lib/motion/shotcraft/upstream/references/shots/interaction/voice-waveform-live.md +54 -54
  246. package/lib/motion/shotcraft/upstream/references/shots/opening/brand-ink-open.md +36 -36
  247. package/lib/motion/shotcraft/upstream/references/shots/opening/crane-rise-reveal.md +56 -56
  248. package/lib/motion/shotcraft/upstream/references/shots/opening/dataviz-landscape-open.md +56 -56
  249. package/lib/motion/shotcraft/upstream/references/shots/opening/fracture.md +40 -40
  250. package/lib/motion/shotcraft/upstream/references/shots/opening/icon-field-colorize.md +60 -60
  251. package/lib/motion/shotcraft/upstream/references/shots/opening/letterspace-materialize.md +57 -57
  252. package/lib/motion/shotcraft/upstream/references/shots/opening/magician-card-flourish.md +73 -73
  253. package/lib/motion/shotcraft/upstream/references/shots/opening/orbit-ring-title-open.md +87 -87
  254. package/lib/motion/shotcraft/upstream/references/shots/opening/spotlight-hero-card.md +55 -55
  255. package/lib/motion/shotcraft/upstream/references/shots/opening/stroke-segment-build.md +50 -50
  256. package/lib/motion/shotcraft/upstream/references/shots/opening/text-as-mask.md +59 -59
  257. package/lib/motion/shotcraft/upstream/references/shots/outro/grain-dissolve.md +38 -38
  258. package/lib/motion/shotcraft/upstream/references/shots/outro/logo-shrink-wordmark-lockup.md +38 -38
  259. package/lib/motion/shotcraft/upstream/references/shots/outro/neon-triple-marquee.md +59 -59
  260. package/lib/motion/shotcraft/upstream/references/shots/outro/outro-group-photo-launch.md +39 -39
  261. package/lib/motion/shotcraft/upstream/references/shots/outro/ui-strip-away-outro.md +61 -61
  262. package/lib/motion/shotcraft/upstream/references/shots/outro/ui-to-brand-morph.md +52 -52
  263. package/lib/motion/shotcraft/upstream/references/shots/rhythm/beat-cut-moves.md +50 -50
  264. package/lib/motion/shotcraft/upstream/references/shots/rhythm/beat-step-list-theme-cycle.md +66 -66
  265. package/lib/motion/shotcraft/upstream/references/shots/rhythm/panel-grid-moves.md +43 -43
  266. package/lib/motion/shotcraft/upstream/references/shots/rhythm/quad-split-parallel-scenes.md +38 -38
  267. package/lib/motion/shotcraft/upstream/references/shots/rhythm/rhythm-interrupt-moves.md +38 -38
  268. package/lib/motion/shotcraft/upstream/references/shots/rhythm/sakuga-timing-shift.md +56 -56
  269. package/lib/motion/shotcraft/upstream/references/shots/rhythm/speed-ramp-freeze.md +44 -44
  270. package/lib/motion/shotcraft/upstream/references/shots/rhythm/trailer-grammar-moves.md +38 -38
  271. package/lib/motion/shotcraft/upstream/references/shots/transition/bottom-push-stack-wipe.md +63 -63
  272. package/lib/motion/shotcraft/upstream/references/shots/transition/card-flip-reveal.md +57 -57
  273. package/lib/motion/shotcraft/upstream/references/shots/transition/card-flock-tumble.md +63 -63
  274. package/lib/motion/shotcraft/upstream/references/shots/transition/circle-match-iris.md +58 -58
  275. package/lib/motion/shotcraft/upstream/references/shots/transition/gradient-transition.md +45 -45
  276. package/lib/motion/shotcraft/upstream/references/shots/transition/line-carry-transition.md +55 -55
  277. package/lib/motion/shotcraft/upstream/references/shots/transition/mosaic-reframe.md +49 -49
  278. package/lib/motion/shotcraft/upstream/references/shots/transition/page-turn-transitions.md +42 -42
  279. package/lib/motion/shotcraft/upstream/references/shots/transition/print-texture-transitions.md +42 -42
  280. package/lib/motion/shotcraft/upstream/references/shots/transition/shot-transitions.md +45 -45
  281. package/lib/motion/shotcraft/upstream/references/shots/transition/tear-streak-transitions.md +48 -48
  282. package/lib/motion/shotcraft/upstream/references/shots/transition/transition-hidden-cut.md +55 -55
  283. package/lib/motion/shotcraft/upstream/references/shots/transition/transition-travel.md +43 -43
  284. package/lib/motion/shotcraft/upstream/references/shots/transition/white-flash-logo-simplify-cut.md +41 -41
  285. package/lib/motion/shotcraft/upstream/references/shots/transition/wipe-transitions.md +42 -42
  286. package/lib/motion/shotcraft/upstream/references/shots/typography/blur-slide.md +59 -59
  287. package/lib/motion/shotcraft/upstream/references/shots/typography/brace-expand.md +55 -55
  288. package/lib/motion/shotcraft/upstream/references/shots/typography/countdown-arc-scatter.md +65 -65
  289. package/lib/motion/shotcraft/upstream/references/shots/typography/document-typewriter-reveal.md +42 -42
  290. package/lib/motion/shotcraft/upstream/references/shots/typography/flying-words.md +64 -64
  291. package/lib/motion/shotcraft/upstream/references/shots/typography/glitch-cycle.md +64 -64
  292. package/lib/motion/shotcraft/upstream/references/shots/typography/gradient-word-sweep.md +54 -54
  293. package/lib/motion/shotcraft/upstream/references/shots/typography/lead-word-zoom-assemble.md +91 -91
  294. package/lib/motion/shotcraft/upstream/references/shots/typography/marker-underline-title.md +51 -51
  295. package/lib/motion/shotcraft/upstream/references/shots/typography/outline-word-fill.md +66 -66
  296. package/lib/motion/shotcraft/upstream/references/shots/typography/paper-title-card.md +38 -38
  297. package/lib/motion/shotcraft/upstream/references/shots/typography/pill-chip-slot-cycle-handled.md +66 -66
  298. package/lib/motion/shotcraft/upstream/references/shots/typography/pill-slot-cycle.md +58 -58
  299. package/lib/motion/shotcraft/upstream/references/shots/typography/text-column-converge.md +61 -61
  300. package/lib/motion/shotcraft/upstream/references/shots/typography/title-demote-to-label.md +64 -64
  301. package/lib/motion/shotcraft/upstream/references/shots/typography/type-assembly-moves.md +45 -45
  302. package/lib/motion/shotcraft/upstream/references/shots/typography/type-entrance-moves.md +41 -41
  303. package/lib/motion/shotcraft/upstream/references/shots/typography/type-rhythm-sync.md +51 -51
  304. package/lib/motion/shotcraft/upstream/references/shots/typography/typewriter-moves.md +42 -42
  305. package/lib/motion/shotcraft/upstream/references/shots/typography/vertical-word-roll-blur-cycle.md +63 -63
  306. package/lib/motion/shotcraft/upstream/references/shots/typography/word-relay-filmstrip.md +57 -57
  307. package/lib/motion/shotcraft/upstream/references/shots/typography/word-relay-geometry.md +75 -75
  308. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/avatar-bracket-carousel.md +59 -59
  309. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/bezier-source-converge-merge.md +67 -67
  310. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/card-stack.md +60 -60
  311. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/carousel-3d.md +66 -66
  312. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/cloner-depth-echo.md +40 -40
  313. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/deck-deal-flyin.md +45 -45
  314. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/doc-park-left-pill-deal.md +62 -62
  315. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/draw-svg-trace.md +55 -55
  316. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/element-body-moves.md +37 -37
  317. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/integration-hub-map.md +55 -55
  318. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/list-reveal.md +50 -50
  319. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/list-stack-press.md +43 -43
  320. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/neon-frame-forerun.md +55 -55
  321. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/neon-frame-orbit-drop.md +51 -51
  322. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/page-waterfall-wall.md +51 -51
  323. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/product-card-progressive-assemble.md +56 -56
  324. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/radial-wave.md +49 -49
  325. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/research-card-stack-scroll.md +57 -57
  326. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/row-embed.md +36 -36
  327. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/value-stagger-gradient.md +64 -64
  328. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/wall-reveal-moves.md +47 -47
  329. package/lib/motion/shotcraft/upstream/references/sound-design.md +170 -170
  330. package/lib/motion/shotcraft/upstream/references/workbench.md +157 -157
  331. package/lib/motion/shotcraft/upstream/template/TEMPLATE.md +103 -103
  332. package/lib/motion/shotcraft/upstream/template/THEMES.md +44 -44
  333. package/lib/motion/shotcraft/upstream/template/package.json +20 -20
  334. package/lib/motion/shotcraft/upstream/template/remotion.config.ts +6 -6
  335. package/lib/motion/shotcraft/upstream/template/src/Root.tsx +17 -17
  336. package/lib/motion/shotcraft/upstream/template/src/aifl/Caption.tsx +65 -65
  337. package/lib/motion/shotcraft/upstream/template/src/aifl/DigitRoll.tsx +48 -48
  338. package/lib/motion/shotcraft/upstream/template/src/aifl/FlashCut.tsx +24 -24
  339. package/lib/motion/shotcraft/upstream/template/src/aifl/Main.tsx +192 -192
  340. package/lib/motion/shotcraft/upstream/template/src/aifl/PaperTitleCard.tsx +111 -111
  341. package/lib/motion/shotcraft/upstream/template/src/aifl/live/PageCam.tsx +150 -150
  342. package/lib/motion/shotcraft/upstream/template/src/aifl/live/SceneDetail.tsx +158 -158
  343. package/lib/motion/shotcraft/upstream/template/src/aifl/live/SceneFlyIn.tsx +468 -468
  344. package/lib/motion/shotcraft/upstream/template/src/aifl/live/SceneOpen.tsx +552 -552
  345. package/lib/motion/shotcraft/upstream/template/src/aifl/live/SceneOutroLive.tsx +411 -411
  346. package/lib/motion/shotcraft/upstream/template/src/aifl/live/ScenePapers.tsx +200 -200
  347. package/lib/motion/shotcraft/upstream/template/src/aifl/live/SceneWbr.tsx +324 -324
  348. package/lib/motion/shotcraft/upstream/template/src/aifl/live-layout.json +388 -388
  349. package/lib/motion/shotcraft/upstream/template/src/index.ts +4 -4
  350. package/lib/motion/shotcraft/upstream/template/src/themes/ThemedFilm.tsx +7 -7
  351. package/lib/motion/shotcraft/upstream/template/src/themes/manifest.tsx +68 -68
  352. package/lib/motion/shotcraft/upstream/template/src/themes/palette-assets.json +1 -1
  353. package/lib/motion/shotcraft/upstream/template/src/themes/palette-assets.ts +24 -24
  354. package/lib/motion/shotcraft/upstream/template/src/themes/palettes.json +74 -74
  355. package/lib/motion/shotcraft/upstream/template/src/themes/visual-theme.tsx +91 -91
  356. package/lib/motion/shotcraft/upstream/template/src/workbench.ts +213 -213
  357. package/lib/motion/shotcraft/upstream/template/tsconfig.json +15 -15
  358. package/lib/motion/style-frames.js +47 -12
  359. package/lib/motion-project.js +22 -3
  360. package/lib/motion-render-worker.js +31 -9
  361. package/lib/routing/router.js +12 -1
  362. package/lib/style-kernel.js +16 -6
  363. package/lib/video-trace-pool.js +128 -128
  364. package/package.json +1 -1
  365. package/LICENSE +0 -4175
@@ -1,222 +1,222 @@
1
- // 套印错位冲击帧(riso-misregistration-hit)——标题撞停瞬间裂成两份单色"印版"
2
- // (mix-blend-mode: multiply 叠在纸上),像 riso 印刷没对准版;两版反向错位(x 为主 y 少量)
3
- // 做衰减震荡 offset = A·cos(ωt)·exp(-t/τ) 抖两下,帧 72 啪地硬切回套准,带 4f scale 脉冲收束。
4
- //
5
- // 第二轮重设计(双色 riso 演出海报 · 荧光粉 × 蓝):
6
- // - 配色 custom:再生新闻纸 #f3eee2 + riso 两色油墨——荧光粉 FLUO #ff4fa3 与 蓝 BLUE #1f5fc4。
7
- // 两版套准时 multiply 叠成深紫墨色(同一字形两版重合),错开时一侧粉、一侧蓝的彩边——经典 riso 毛边。
8
- // - 版式:瑞士网格海报(video-shotcraft 的 riso 宣传海报)。左对齐 300px 黑体两行「CRAFT IT / LOUD.」压在右侧
9
- // 一只半调网点大太阳上(粉版,点径随离心距离变小 = 真半调),顶部版记、底部三栏卖点信息(蓝版)。只有标题两版会错,
10
- // 背景元素保持套准(整画面全裂读作故障而非印刷)。
11
- // - 节奏:开场太阳像被墨辊滚上纸(自上而下的擦入 0–16f)、信息栏错峰落位 → 标题 8f ease-in 撞入
12
- // → 命中同帧裂版 + 整页一记 1.2% 的顿挫 → 44f 衰减震荡 → 72f 硬切套准 + 「ON REGISTER」圆章盖下
13
- // (圆章中心是单色版镜刻标志——BRAND.md 规定单色印刷用 mono 版,蓝版一色印出)
14
- // → 44f 干净 hold(极缓推进)。
15
- //
16
- // 时间表(30fps,共 120f):
17
- // 0–18 预备:纸面、版记第 1 帧就在;太阳墨辊擦入 0–16f;底部信息栏 4–18f 错峰升起
18
- // 20–28 主动作:标题从右画外 ease-in(cubic) 撞入(速度方向性模糊),28f 命中
19
- // 28–71 余波:两版反向衰减震荡(周期 18f、τ 60f,72f 前仍余 ~11px 单版残差)
20
- // 72–76 套准:硬切归零 + 4f scale 1.03→1;圆章 72f 盖下(scale 1.5→1,4f)
21
- // 76–120 hold 44f:相机 smooth 极缓推进 1.000→1.012(~110f 收敛),尾段逐帧近乎相同
22
- import React from 'react';
23
- import { useCurrentFrame } from 'remotion';
24
- import { EASE, FONT, Grain, SpeedBlur, Vignette, bezier, mix, ramp, velocity } from '../../_fixtures/Polish';
25
- import { MARK_PATHS } from '../../_fixtures/Brand';
26
-
27
- export const RISO_MISREGISTRATION_HIT_DURATION = 120;
28
-
29
- const HIT = 28; // 撞停命中帧
30
- const SNAP = 72; // 套准合一帧
31
- const AX = 20; // 单版 x 错位振幅(两版反向 → 总分离 ~40px;300px 大字下才可感)
32
- const AY = 8; // 单版 y 错位振幅(少量,更像没对准版)
33
- const OMEGA = (2 * Math.PI) / 18; // 震荡周期 18f,44f 内抖两下半
34
- const TAU = 60; // 缓衰减:帧 72 前仍余可见残差,被"啪地"硬切归零
35
-
36
- const PAPER = '#f3eee2'; // 再生新闻纸
37
- const FLUO = '#ff4fa3'; // riso 荧光粉版
38
- const BLUE = '#1f5fc4'; // riso 蓝版
39
- const inCubic = bezier(0.55, 0.055, 0.675, 0.19);
40
- const SANS = FONT.sans;
41
-
42
- // 单色印版:同字形、可调色、可错位,multiply 叠到纸上
43
- const Plate: React.FC<{ color: string; dx: number; dy: number; scale?: number }> = ({ color, dx, dy, scale = 1 }) => (
44
- <div style={{
45
- position: 'absolute', left: 120, top: 250,
46
- transform: `translate(${dx.toFixed(2)}px, ${dy.toFixed(2)}px) scale(${scale})`, transformOrigin: '30% 60%',
47
- mixBlendMode: 'multiply', color, fontFamily: SANS, fontWeight: 900, fontSize: 300, lineHeight: 0.84,
48
- letterSpacing: '-0.045em', whiteSpace: 'nowrap',
49
- }}>
50
- {/* F 与 T 顶横在 −0.045em 字距下恰好相接,抗锯齿会留一条发丝缝——F 后再收 0.01em 让两笔重叠 */}
51
- <div>CRA<span style={{ marginRight: '-0.01em' }}>F</span>T IT</div>
52
- <div>LOUD.</div>
53
- </div>
54
- );
55
-
56
- // 半调网点太阳:粉版,点按网格排布,点径随离心距离缩小(真半调,而非等大点阵)
57
- const SUN_R = 372;
58
- const SUN_STEP = 22;
59
- const SUN_DOTS = (() => {
60
- const out: { x: number; y: number; r: number }[] = [];
61
- const n = Math.ceil(SUN_R / SUN_STEP);
62
- for (let iy = -n; iy <= n; iy++) {
63
- for (let ix = -n; ix <= n; ix++) {
64
- // 45° 网角:奇数行错半格
65
- const x = ix * SUN_STEP + (iy % 2 ? SUN_STEP / 2 : 0);
66
- const y = iy * SUN_STEP * 0.866;
67
- const d = Math.hypot(x, y) / SUN_R;
68
- if (d > 1) continue;
69
- const tone = 1 - Math.pow(d, 2.4); // 中心实、边缘点径收到 0(轮廓是圆,不是网格的六边形)
70
- const r = (SUN_STEP / 2) * 1.1 * Math.sqrt(tone);
71
- if (r > 0.9) out.push({ x, y, r });
72
- }
73
- }
74
- return out;
75
- })();
76
-
77
- const Sun: React.FC<{ reveal: number }> = ({ reveal }) => (
78
- <svg width={SUN_R * 2 + 40} height={SUN_R * 2 + 40} viewBox={`${-SUN_R - 20} ${-SUN_R - 20} ${SUN_R * 2 + 40} ${SUN_R * 2 + 40}`}
79
- style={{
80
- position: 'absolute', left: 1090, top: 108, mixBlendMode: 'multiply',
81
- // 墨辊擦入:自上而下的硬边遮罩(印刷是一次滚过,不是淡入)
82
- clipPath: `inset(0 0 ${((1 - reveal) * 100).toFixed(2)}% 0)`,
83
- }}>
84
- <g fill={FLUO}>
85
- {SUN_DOTS.map((d, i) => <circle key={i} cx={d.x} cy={d.y} r={d.r} />)}
86
- </g>
87
- </svg>
88
- );
89
-
90
- // 套准十字(印刷对位标):静止布景锚点
91
- const RegMark: React.FC<{ x: number; y: number }> = ({ x, y }) => (
92
- <svg width={40} height={40} viewBox="0 0 40 40" style={{ position: 'absolute', left: x - 20, top: y - 20, mixBlendMode: 'multiply' }}>
93
- <g fill="none" stroke={BLUE} strokeWidth={1.6} opacity={0.75}>
94
- <circle cx={20} cy={20} r={9} />
95
- <path d="M20 1 V39 M1 20 H39" />
96
- </g>
97
- </svg>
98
- );
99
-
100
- // 圆章:套准那一帧盖下的「ON REGISTER」(蓝版,环形字 + 中心单色镜刻标志;标志反向转回 14° 保持正立)
101
- const Stamp: React.FC<{ s: number; o: number }> = ({ s, o }) => (
102
- <svg width={300} height={300} viewBox="-130 -130 260 260"
103
- style={{ position: 'absolute', left: 1480, top: 500, mixBlendMode: 'multiply', opacity: o, transform: `rotate(-14deg) scale(${s.toFixed(4)})` }}>
104
- <defs>
105
- <path id="rmh-ring" d="M -88 0 A 88 88 0 1 1 88 0 A 88 88 0 1 1 -88 0" />
106
- </defs>
107
- <g fill="none" stroke={BLUE} strokeWidth={5}>
108
- <circle r={122} />
109
- <circle r={66} strokeWidth={3} />
110
- </g>
111
- <text fill={BLUE} style={{ fontFamily: FONT.mono, fontSize: 28, fontWeight: 700 }}>
112
- <textPath href="#rmh-ring" textLength={540} lengthAdjust="spacing">ON REGISTER ✶ SHOTCRAFT ✶</textPath>
113
- </text>
114
- {/* 标志内容框 x16–120 / y16–112,中心 (68,64);缩到 ~66px 宽放进内圈 r66 */}
115
- <g transform="rotate(14) scale(0.64) translate(-68 -64)" fill={BLUE}>
116
- <path d={MARK_PATHS.frame} />
117
- <path d={MARK_PATHS.cut} />
118
- </g>
119
- </svg>
120
- );
121
-
122
- // 撞入位移:右画外 1700px → 0,8f ease-in(cubic)(加速撞停)
123
- const slideAt = (f: number) => mix(1700, 0, ramp(f, 20, HIT - 20, inCubic));
124
-
125
- export const RisoMisregistrationHit: React.FC = () => {
126
- const frame = useCurrentFrame();
127
-
128
- const split = frame >= HIT && frame < SNAP;
129
- const slideX = frame < HIT ? slideAt(frame) : 0;
130
- const vx = frame >= 20 && frame < HIT ? velocity(slideAt, frame) : 0;
131
-
132
- // 错位震荡包络:t 自命中起,衰减余弦;帧 72 硬切归零
133
- const t = frame - HIT;
134
- const m = split ? Math.cos(OMEGA * t) * Math.exp(-t / TAU) : 0;
135
- const dx = AX * m;
136
- const dy = AY * m;
137
-
138
- // 套准脉冲:72f 起 4f scale 1.03 → 1
139
- const pulse = frame >= SNAP && frame < SNAP + 4 ? 1 + 0.03 * (1 - (frame - SNAP) / 4) : 1;
140
- // 命中顿挫:整页 1.2% 一帧到位、指数回落(10f 窗口外精确 1)
141
- const th = frame - HIT;
142
- const kick = th >= 0 && th < 10 ? 1 + 0.012 * Math.exp(-th / 2.5) : 1;
143
- // 相机:smooth 极缓推进,110f 收敛
144
- const cam = 1 + 0.012 * ramp(frame, 0, 110, EASE.smooth);
145
-
146
- // 圆章:72f 盖下,4f 由 1.5 压到 1(ease-out),之后静止
147
- const sp = ramp(frame, SNAP, 4, EASE.out);
148
- const stampS = frame < SNAP ? 1.5 : mix(1.5, 1, sp);
149
- const stampO = frame < SNAP ? 0 : Math.min(1, sp * 2.5);
150
-
151
- const sunReveal = ramp(frame, 0, 16, EASE.swift);
152
- const info = (i: number) => {
153
- const p = ramp(frame, 4 + i * 4, 14, EASE.snappy);
154
- return { opacity: p, transform: `translateY(${((1 - p) * 26).toFixed(2)}px)` };
155
- };
156
-
157
- return (
158
- <div style={{ width: 1920, height: 1080, background: PAPER, position: 'relative', overflow: 'hidden' }}>
159
- <div style={{ position: 'absolute', inset: 0, transform: `scale(${(cam * kick).toFixed(5)})`, transformOrigin: '40% 50%' }}>
160
- {/* 纸面:中心略亮 + 静态纸纤维(multiply) */}
161
- <div style={{ position: 'absolute', inset: 0, background: 'radial-gradient(ellipse 72% 70% at 42% 44%, #f8f4ea 0%, #f3eee2 58%, #e8e1d1 100%)' }} />
162
- <Grain opacity={0.11} step={100000} scale={2.4} freq={0.55} blend="multiply" />
163
-
164
- <Sun reveal={sunReveal} />
165
-
166
- {/* 版记:四角套准十字 + 顶栏(蓝版) */}
167
- <RegMark x={64} y={64} />
168
- <RegMark x={1856} y={64} />
169
- <RegMark x={64} y={1016} />
170
- <RegMark x={1856} y={1016} />
171
- <div style={{
172
- position: 'absolute', left: 120, right: 120, top: 104, display: 'flex', justifyContent: 'space-between',
173
- fontFamily: FONT.mono, fontSize: 26, fontWeight: 600, letterSpacing: '0.12em', color: BLUE, mixBlendMode: 'multiply',
174
- opacity: ramp(frame, 0, 10, EASE.out),
175
- }}>
176
- <span>VIDEO-SHOTCRAFT — Nº 07</span>
177
- <span>TWO-COLOUR RISO · 1 OF 300</span>
178
- </div>
179
- <div style={{ position: 'absolute', left: 120, right: 120, top: 150, height: 4, background: BLUE, mixBlendMode: 'multiply', transformOrigin: '0 50%', transform: `scaleX(${ramp(frame, 0, 18, EASE.snappy).toFixed(4)})` }} />
180
-
181
- {/* 底部三栏演出信息(蓝版) */}
182
- <div style={{ position: 'absolute', left: 120, right: 120, top: 878, height: 4, background: BLUE, mixBlendMode: 'multiply', transformOrigin: '0 50%', transform: `scaleX(${ramp(frame, 2, 18, EASE.snappy).toFixed(4)})` }} />
183
- <div style={{ position: 'absolute', left: 120, right: 120, top: 906, display: 'grid', gridTemplateColumns: '1.25fr 1fr 1fr', gap: 48, color: BLUE, mixBlendMode: 'multiply' }}>
184
- {[
185
- ['SHOT RECIPE CARDS', 'Cinematic product films'],
186
- ['ONE PROMPT', 'To a finished promo'],
187
- ['BUILT ON REMOTION', 'For Claude Code & Codex'],
188
- ].map(([a, b], i) => (
189
- <div key={i} style={info(i)}>
190
- <div style={{ fontFamily: SANS, fontSize: 40, fontWeight: 850, letterSpacing: '-0.01em', lineHeight: 1.1 }}>{a}</div>
191
- <div style={{ fontFamily: SANS, fontSize: 32, fontWeight: 450, letterSpacing: '-0.01em', lineHeight: 1.35, marginTop: 6 }}>{b}</div>
192
- </div>
193
- ))}
194
- </div>
195
-
196
- {/* 撞入:两版重合(套准态)整体横飞,带方向性运动模糊 */}
197
- {frame >= 20 && frame < HIT && (
198
- <SpeedBlur vx={vx} amount={0.09} max={34}>
199
- <div style={{ position: 'absolute', inset: 0, transform: `translateX(${slideX.toFixed(1)}px)` }}>
200
- <Plate color={FLUO} dx={0} dy={0} />
201
- <Plate color={BLUE} dx={0} dy={0} />
202
- </div>
203
- </SpeedBlur>
204
- )}
205
-
206
- {/* 双版错位:粉版与蓝版反向偏移,multiply 叠出"重影套印";套准后两版归零重合成深紫 */}
207
- {frame >= HIT && (
208
- <>
209
- <Plate color={FLUO} dx={-dx} dy={dy} scale={pulse} />
210
- <Plate color={BLUE} dx={dx} dy={-dy} scale={pulse} />
211
- </>
212
- )}
213
-
214
- <Stamp s={stampS} o={stampO} />
215
- </div>
216
-
217
- {/* 油墨颗粒:screen 细噪让墨块带 riso 那种不均匀的白点(静态)+ 暖褐暗角 */}
218
- <Grain opacity={0.2} step={100000} freq={1.25} blend="screen" />
219
- <Vignette strength={0.13} inner={0.55} color="#5a4a32" />
220
- </div>
221
- );
222
- };
1
+ // 套印错位冲击帧(riso-misregistration-hit)——标题撞停瞬间裂成两份单色"印版"
2
+ // (mix-blend-mode: multiply 叠在纸上),像 riso 印刷没对准版;两版反向错位(x 为主 y 少量)
3
+ // 做衰减震荡 offset = A·cos(ωt)·exp(-t/τ) 抖两下,帧 72 啪地硬切回套准,带 4f scale 脉冲收束。
4
+ //
5
+ // 第二轮重设计(双色 riso 演出海报 · 荧光粉 × 蓝):
6
+ // - 配色 custom:再生新闻纸 #f3eee2 + riso 两色油墨——荧光粉 FLUO #ff4fa3 与 蓝 BLUE #1f5fc4。
7
+ // 两版套准时 multiply 叠成深紫墨色(同一字形两版重合),错开时一侧粉、一侧蓝的彩边——经典 riso 毛边。
8
+ // - 版式:瑞士网格海报(video-shotcraft 的 riso 宣传海报)。左对齐 300px 黑体两行「CRAFT IT / LOUD.」压在右侧
9
+ // 一只半调网点大太阳上(粉版,点径随离心距离变小 = 真半调),顶部版记、底部三栏卖点信息(蓝版)。只有标题两版会错,
10
+ // 背景元素保持套准(整画面全裂读作故障而非印刷)。
11
+ // - 节奏:开场太阳像被墨辊滚上纸(自上而下的擦入 0–16f)、信息栏错峰落位 → 标题 8f ease-in 撞入
12
+ // → 命中同帧裂版 + 整页一记 1.2% 的顿挫 → 44f 衰减震荡 → 72f 硬切套准 + 「ON REGISTER」圆章盖下
13
+ // (圆章中心是单色版镜刻标志——BRAND.md 规定单色印刷用 mono 版,蓝版一色印出)
14
+ // → 44f 干净 hold(极缓推进)。
15
+ //
16
+ // 时间表(30fps,共 120f):
17
+ // 0–18 预备:纸面、版记第 1 帧就在;太阳墨辊擦入 0–16f;底部信息栏 4–18f 错峰升起
18
+ // 20–28 主动作:标题从右画外 ease-in(cubic) 撞入(速度方向性模糊),28f 命中
19
+ // 28–71 余波:两版反向衰减震荡(周期 18f、τ 60f,72f 前仍余 ~11px 单版残差)
20
+ // 72–76 套准:硬切归零 + 4f scale 1.03→1;圆章 72f 盖下(scale 1.5→1,4f)
21
+ // 76–120 hold 44f:相机 smooth 极缓推进 1.000→1.012(~110f 收敛),尾段逐帧近乎相同
22
+ import React from 'react';
23
+ import { useCurrentFrame } from 'remotion';
24
+ import { EASE, FONT, Grain, SpeedBlur, Vignette, bezier, mix, ramp, velocity } from '../../_fixtures/Polish';
25
+ import { MARK_PATHS } from '../../_fixtures/Brand';
26
+
27
+ export const RISO_MISREGISTRATION_HIT_DURATION = 120;
28
+
29
+ const HIT = 28; // 撞停命中帧
30
+ const SNAP = 72; // 套准合一帧
31
+ const AX = 20; // 单版 x 错位振幅(两版反向 → 总分离 ~40px;300px 大字下才可感)
32
+ const AY = 8; // 单版 y 错位振幅(少量,更像没对准版)
33
+ const OMEGA = (2 * Math.PI) / 18; // 震荡周期 18f,44f 内抖两下半
34
+ const TAU = 60; // 缓衰减:帧 72 前仍余可见残差,被"啪地"硬切归零
35
+
36
+ const PAPER = '#f3eee2'; // 再生新闻纸
37
+ const FLUO = '#ff4fa3'; // riso 荧光粉版
38
+ const BLUE = '#1f5fc4'; // riso 蓝版
39
+ const inCubic = bezier(0.55, 0.055, 0.675, 0.19);
40
+ const SANS = FONT.sans;
41
+
42
+ // 单色印版:同字形、可调色、可错位,multiply 叠到纸上
43
+ const Plate: React.FC<{ color: string; dx: number; dy: number; scale?: number }> = ({ color, dx, dy, scale = 1 }) => (
44
+ <div style={{
45
+ position: 'absolute', left: 120, top: 250,
46
+ transform: `translate(${dx.toFixed(2)}px, ${dy.toFixed(2)}px) scale(${scale})`, transformOrigin: '30% 60%',
47
+ mixBlendMode: 'multiply', color, fontFamily: SANS, fontWeight: 900, fontSize: 300, lineHeight: 0.84,
48
+ letterSpacing: '-0.045em', whiteSpace: 'nowrap',
49
+ }}>
50
+ {/* F 与 T 顶横在 −0.045em 字距下恰好相接,抗锯齿会留一条发丝缝——F 后再收 0.01em 让两笔重叠 */}
51
+ <div>CRA<span style={{ marginRight: '-0.01em' }}>F</span>T IT</div>
52
+ <div>LOUD.</div>
53
+ </div>
54
+ );
55
+
56
+ // 半调网点太阳:粉版,点按网格排布,点径随离心距离缩小(真半调,而非等大点阵)
57
+ const SUN_R = 372;
58
+ const SUN_STEP = 22;
59
+ const SUN_DOTS = (() => {
60
+ const out: { x: number; y: number; r: number }[] = [];
61
+ const n = Math.ceil(SUN_R / SUN_STEP);
62
+ for (let iy = -n; iy <= n; iy++) {
63
+ for (let ix = -n; ix <= n; ix++) {
64
+ // 45° 网角:奇数行错半格
65
+ const x = ix * SUN_STEP + (iy % 2 ? SUN_STEP / 2 : 0);
66
+ const y = iy * SUN_STEP * 0.866;
67
+ const d = Math.hypot(x, y) / SUN_R;
68
+ if (d > 1) continue;
69
+ const tone = 1 - Math.pow(d, 2.4); // 中心实、边缘点径收到 0(轮廓是圆,不是网格的六边形)
70
+ const r = (SUN_STEP / 2) * 1.1 * Math.sqrt(tone);
71
+ if (r > 0.9) out.push({ x, y, r });
72
+ }
73
+ }
74
+ return out;
75
+ })();
76
+
77
+ const Sun: React.FC<{ reveal: number }> = ({ reveal }) => (
78
+ <svg width={SUN_R * 2 + 40} height={SUN_R * 2 + 40} viewBox={`${-SUN_R - 20} ${-SUN_R - 20} ${SUN_R * 2 + 40} ${SUN_R * 2 + 40}`}
79
+ style={{
80
+ position: 'absolute', left: 1090, top: 108, mixBlendMode: 'multiply',
81
+ // 墨辊擦入:自上而下的硬边遮罩(印刷是一次滚过,不是淡入)
82
+ clipPath: `inset(0 0 ${((1 - reveal) * 100).toFixed(2)}% 0)`,
83
+ }}>
84
+ <g fill={FLUO}>
85
+ {SUN_DOTS.map((d, i) => <circle key={i} cx={d.x} cy={d.y} r={d.r} />)}
86
+ </g>
87
+ </svg>
88
+ );
89
+
90
+ // 套准十字(印刷对位标):静止布景锚点
91
+ const RegMark: React.FC<{ x: number; y: number }> = ({ x, y }) => (
92
+ <svg width={40} height={40} viewBox="0 0 40 40" style={{ position: 'absolute', left: x - 20, top: y - 20, mixBlendMode: 'multiply' }}>
93
+ <g fill="none" stroke={BLUE} strokeWidth={1.6} opacity={0.75}>
94
+ <circle cx={20} cy={20} r={9} />
95
+ <path d="M20 1 V39 M1 20 H39" />
96
+ </g>
97
+ </svg>
98
+ );
99
+
100
+ // 圆章:套准那一帧盖下的「ON REGISTER」(蓝版,环形字 + 中心单色镜刻标志;标志反向转回 14° 保持正立)
101
+ const Stamp: React.FC<{ s: number; o: number }> = ({ s, o }) => (
102
+ <svg width={300} height={300} viewBox="-130 -130 260 260"
103
+ style={{ position: 'absolute', left: 1480, top: 500, mixBlendMode: 'multiply', opacity: o, transform: `rotate(-14deg) scale(${s.toFixed(4)})` }}>
104
+ <defs>
105
+ <path id="rmh-ring" d="M -88 0 A 88 88 0 1 1 88 0 A 88 88 0 1 1 -88 0" />
106
+ </defs>
107
+ <g fill="none" stroke={BLUE} strokeWidth={5}>
108
+ <circle r={122} />
109
+ <circle r={66} strokeWidth={3} />
110
+ </g>
111
+ <text fill={BLUE} style={{ fontFamily: FONT.mono, fontSize: 28, fontWeight: 700 }}>
112
+ <textPath href="#rmh-ring" textLength={540} lengthAdjust="spacing">ON REGISTER ✶ SHOTCRAFT ✶</textPath>
113
+ </text>
114
+ {/* 标志内容框 x16–120 / y16–112,中心 (68,64);缩到 ~66px 宽放进内圈 r66 */}
115
+ <g transform="rotate(14) scale(0.64) translate(-68 -64)" fill={BLUE}>
116
+ <path d={MARK_PATHS.frame} />
117
+ <path d={MARK_PATHS.cut} />
118
+ </g>
119
+ </svg>
120
+ );
121
+
122
+ // 撞入位移:右画外 1700px → 0,8f ease-in(cubic)(加速撞停)
123
+ const slideAt = (f: number) => mix(1700, 0, ramp(f, 20, HIT - 20, inCubic));
124
+
125
+ export const RisoMisregistrationHit: React.FC = () => {
126
+ const frame = useCurrentFrame();
127
+
128
+ const split = frame >= HIT && frame < SNAP;
129
+ const slideX = frame < HIT ? slideAt(frame) : 0;
130
+ const vx = frame >= 20 && frame < HIT ? velocity(slideAt, frame) : 0;
131
+
132
+ // 错位震荡包络:t 自命中起,衰减余弦;帧 72 硬切归零
133
+ const t = frame - HIT;
134
+ const m = split ? Math.cos(OMEGA * t) * Math.exp(-t / TAU) : 0;
135
+ const dx = AX * m;
136
+ const dy = AY * m;
137
+
138
+ // 套准脉冲:72f 起 4f scale 1.03 → 1
139
+ const pulse = frame >= SNAP && frame < SNAP + 4 ? 1 + 0.03 * (1 - (frame - SNAP) / 4) : 1;
140
+ // 命中顿挫:整页 1.2% 一帧到位、指数回落(10f 窗口外精确 1)
141
+ const th = frame - HIT;
142
+ const kick = th >= 0 && th < 10 ? 1 + 0.012 * Math.exp(-th / 2.5) : 1;
143
+ // 相机:smooth 极缓推进,110f 收敛
144
+ const cam = 1 + 0.012 * ramp(frame, 0, 110, EASE.smooth);
145
+
146
+ // 圆章:72f 盖下,4f 由 1.5 压到 1(ease-out),之后静止
147
+ const sp = ramp(frame, SNAP, 4, EASE.out);
148
+ const stampS = frame < SNAP ? 1.5 : mix(1.5, 1, sp);
149
+ const stampO = frame < SNAP ? 0 : Math.min(1, sp * 2.5);
150
+
151
+ const sunReveal = ramp(frame, 0, 16, EASE.swift);
152
+ const info = (i: number) => {
153
+ const p = ramp(frame, 4 + i * 4, 14, EASE.snappy);
154
+ return { opacity: p, transform: `translateY(${((1 - p) * 26).toFixed(2)}px)` };
155
+ };
156
+
157
+ return (
158
+ <div style={{ width: 1920, height: 1080, background: PAPER, position: 'relative', overflow: 'hidden' }}>
159
+ <div style={{ position: 'absolute', inset: 0, transform: `scale(${(cam * kick).toFixed(5)})`, transformOrigin: '40% 50%' }}>
160
+ {/* 纸面:中心略亮 + 静态纸纤维(multiply) */}
161
+ <div style={{ position: 'absolute', inset: 0, background: 'radial-gradient(ellipse 72% 70% at 42% 44%, #f8f4ea 0%, #f3eee2 58%, #e8e1d1 100%)' }} />
162
+ <Grain opacity={0.11} step={100000} scale={2.4} freq={0.55} blend="multiply" />
163
+
164
+ <Sun reveal={sunReveal} />
165
+
166
+ {/* 版记:四角套准十字 + 顶栏(蓝版) */}
167
+ <RegMark x={64} y={64} />
168
+ <RegMark x={1856} y={64} />
169
+ <RegMark x={64} y={1016} />
170
+ <RegMark x={1856} y={1016} />
171
+ <div style={{
172
+ position: 'absolute', left: 120, right: 120, top: 104, display: 'flex', justifyContent: 'space-between',
173
+ fontFamily: FONT.mono, fontSize: 26, fontWeight: 600, letterSpacing: '0.12em', color: BLUE, mixBlendMode: 'multiply',
174
+ opacity: ramp(frame, 0, 10, EASE.out),
175
+ }}>
176
+ <span>VIDEO-SHOTCRAFT — Nº 07</span>
177
+ <span>TWO-COLOUR RISO · 1 OF 300</span>
178
+ </div>
179
+ <div style={{ position: 'absolute', left: 120, right: 120, top: 150, height: 4, background: BLUE, mixBlendMode: 'multiply', transformOrigin: '0 50%', transform: `scaleX(${ramp(frame, 0, 18, EASE.snappy).toFixed(4)})` }} />
180
+
181
+ {/* 底部三栏演出信息(蓝版) */}
182
+ <div style={{ position: 'absolute', left: 120, right: 120, top: 878, height: 4, background: BLUE, mixBlendMode: 'multiply', transformOrigin: '0 50%', transform: `scaleX(${ramp(frame, 2, 18, EASE.snappy).toFixed(4)})` }} />
183
+ <div style={{ position: 'absolute', left: 120, right: 120, top: 906, display: 'grid', gridTemplateColumns: '1.25fr 1fr 1fr', gap: 48, color: BLUE, mixBlendMode: 'multiply' }}>
184
+ {[
185
+ ['SHOT RECIPE CARDS', 'Cinematic product films'],
186
+ ['ONE PROMPT', 'To a finished promo'],
187
+ ['BUILT ON REMOTION', 'For Claude Code & Codex'],
188
+ ].map(([a, b], i) => (
189
+ <div key={i} style={info(i)}>
190
+ <div style={{ fontFamily: SANS, fontSize: 40, fontWeight: 850, letterSpacing: '-0.01em', lineHeight: 1.1 }}>{a}</div>
191
+ <div style={{ fontFamily: SANS, fontSize: 32, fontWeight: 450, letterSpacing: '-0.01em', lineHeight: 1.35, marginTop: 6 }}>{b}</div>
192
+ </div>
193
+ ))}
194
+ </div>
195
+
196
+ {/* 撞入:两版重合(套准态)整体横飞,带方向性运动模糊 */}
197
+ {frame >= 20 && frame < HIT && (
198
+ <SpeedBlur vx={vx} amount={0.09} max={34}>
199
+ <div style={{ position: 'absolute', inset: 0, transform: `translateX(${slideX.toFixed(1)}px)` }}>
200
+ <Plate color={FLUO} dx={0} dy={0} />
201
+ <Plate color={BLUE} dx={0} dy={0} />
202
+ </div>
203
+ </SpeedBlur>
204
+ )}
205
+
206
+ {/* 双版错位:粉版与蓝版反向偏移,multiply 叠出"重影套印";套准后两版归零重合成深紫 */}
207
+ {frame >= HIT && (
208
+ <>
209
+ <Plate color={FLUO} dx={-dx} dy={dy} scale={pulse} />
210
+ <Plate color={BLUE} dx={dx} dy={-dy} scale={pulse} />
211
+ </>
212
+ )}
213
+
214
+ <Stamp s={stampS} o={stampO} />
215
+ </div>
216
+
217
+ {/* 油墨颗粒:screen 细噪让墨块带 riso 那种不均匀的白点(静态)+ 暖褐暗角 */}
218
+ <Grain opacity={0.2} step={100000} freq={1.25} blend="screen" />
219
+ <Vignette strength={0.13} inner={0.55} color="#5a4a32" />
220
+ </div>
221
+ );
222
+ };