dsh-drawai 0.4.2 → 0.4.4

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 (379) hide show
  1. package/README.md +7 -5
  2. package/lib/client.js +142 -16
  3. package/lib/index.js +7945 -7719
  4. package/lib/motion/asset-pack.js +394 -394
  5. package/lib/motion/assets.js +291 -291
  6. package/lib/motion/demo-assets-lock.js +10 -10
  7. package/lib/motion/mgstyles/briefs/23-ink-wash.md +147 -0
  8. package/lib/motion/mgstyles/catalog.d/23-ink-wash.json +28 -0
  9. package/lib/motion/mgstyles/catalog.json +127 -14
  10. package/lib/motion/mgstyles/upstream/demos/23-ink-wash/brush.js +149 -0
  11. package/lib/motion/mgstyles/upstream/demos/23-ink-wash/film.js +202 -0
  12. package/lib/motion/mgstyles/upstream/manifest.json +28 -3
  13. package/lib/motion/mgstyles/upstream/prompts/23-ink-wash.md +59 -0
  14. package/lib/motion/mgstyles/vendor/README.md +28 -28
  15. package/lib/motion/mgstyles/vendor/modules/d3/LICENSE +13 -13
  16. package/lib/motion/mgstyles/vendor/modules/d3/dist/d3.min.js +2 -2
  17. package/lib/motion/mgstyles/vendor/modules/opentype.js/LICENSE +20 -20
  18. package/lib/motion/mgstyles/vendor/modules/opentype.js/dist/opentype.mjs +14460 -14460
  19. package/lib/motion/mgstyles/vendor/modules/simplex-noise/LICENSE +21 -21
  20. package/lib/motion/mgstyles/vendor/modules/simplex-noise/dist/esm/simplex-noise.js +465 -465
  21. package/lib/motion/mgstyles/vendor/modules/topojson-client/LICENSE +13 -13
  22. package/lib/motion/mgstyles/vendor/modules/topojson-client/dist/topojson-client.min.js +2 -2
  23. package/lib/motion/project.js +5 -1
  24. package/lib/motion/qa.js +116 -6
  25. package/lib/motion/render.js +179 -179
  26. package/lib/motion/scene-kit.js +1 -1
  27. package/lib/motion/shotcraft/upstream/SKILL.md +286 -286
  28. package/lib/motion/shotcraft/upstream/assets/lib/Caption.tsx +54 -54
  29. package/lib/motion/shotcraft/upstream/assets/lib/ClipCard.tsx +200 -200
  30. package/lib/motion/shotcraft/upstream/assets/lib/DigitRoll.tsx +45 -45
  31. package/lib/motion/shotcraft/upstream/assets/lib/FlashCut.tsx +20 -20
  32. package/lib/motion/shotcraft/upstream/assets/lib/FlatPanel.tsx +65 -65
  33. package/lib/motion/shotcraft/upstream/assets/lib/PageCam.tsx +151 -151
  34. package/lib/motion/shotcraft/upstream/assets/lib/VerticalTicker.tsx +129 -129
  35. package/lib/motion/shotcraft/upstream/assets/lib/helpers/camera.tsx +75 -75
  36. package/lib/motion/shotcraft/upstream/assets/lib/helpers/motion.ts +40 -40
  37. package/lib/motion/shotcraft/upstream/assets/lib/helpers/rand.ts +11 -11
  38. package/lib/motion/shotcraft/upstream/assets/lib/helpers/shake.ts +10 -10
  39. package/lib/motion/shotcraft/upstream/assets/scripts/build-readme-cover.mjs +49 -49
  40. package/lib/motion/shotcraft/upstream/assets/scripts/capture-template.mjs +210 -210
  41. package/lib/motion/shotcraft/upstream/assets/scripts/sfx-source.py +423 -423
  42. package/lib/motion/shotcraft/upstream/assets/scripts/smoke-render-demos.py +170 -170
  43. package/lib/motion/shotcraft/upstream/assets/scripts/test_sfx_source.py +157 -157
  44. package/lib/motion/shotcraft/upstream/demos/README.md +120 -120
  45. package/lib/motion/shotcraft/upstream/demos/_fixtures/Brand.tsx +112 -112
  46. package/lib/motion/shotcraft/upstream/demos/_fixtures/Fixtures.tsx +647 -647
  47. package/lib/motion/shotcraft/upstream/demos/_fixtures/Look.tsx +316 -316
  48. package/lib/motion/shotcraft/upstream/demos/_fixtures/Motion.tsx +82 -82
  49. package/lib/motion/shotcraft/upstream/demos/_fixtures/PageCam2D.tsx +115 -115
  50. package/lib/motion/shotcraft/upstream/demos/_fixtures/Polish.tsx +243 -243
  51. package/lib/motion/shotcraft/upstream/demos/_textures/live-layout.json +388 -388
  52. package/lib/motion/shotcraft/upstream/demos/camera/basic-3d-scene/Basic3DScene.tsx +250 -250
  53. package/lib/motion/shotcraft/upstream/demos/camera/crash-zoom-punch/CrashImpactReal.tsx +305 -305
  54. package/lib/motion/shotcraft/upstream/demos/camera/crash-zoom-punch/CrashZoomReal.tsx +246 -246
  55. package/lib/motion/shotcraft/upstream/demos/camera/cursor-flyover/CursorFlyover.tsx +390 -390
  56. package/lib/motion/shotcraft/upstream/demos/camera/depth-layer-moves/MultiplaneReal.tsx +138 -138
  57. package/lib/motion/shotcraft/upstream/demos/camera/graze-face-tour/GrazeFaceTour.tsx +542 -542
  58. package/lib/motion/shotcraft/upstream/demos/camera/overhead-camera-moves/OverheadTabletopDrop.tsx +315 -315
  59. package/lib/motion/shotcraft/upstream/demos/camera/overhead-camera-moves/TiltReveal.tsx +299 -299
  60. package/lib/motion/shotcraft/upstream/demos/camera/space-camera-moves/DroneDiveLanding.tsx +173 -173
  61. package/lib/motion/shotcraft/upstream/demos/camera/space-camera-moves/ExplodedView.tsx +348 -348
  62. package/lib/motion/shotcraft/upstream/demos/camera/steep-tilt-glide/SteepTiltGlide.tsx +366 -366
  63. package/lib/motion/shotcraft/upstream/demos/camera/tension-camera-moves/BulletTimeFreezeOrbit.tsx +279 -279
  64. package/lib/motion/shotcraft/upstream/demos/camera/tension-camera-moves/PullBackIsolation.tsx +184 -184
  65. package/lib/motion/shotcraft/upstream/demos/camera/terminal-3d/Terminal3D.tsx +390 -390
  66. package/lib/motion/shotcraft/upstream/demos/data/before-after-slider-scrub/BeforeAfterSliderScrub.tsx +155 -155
  67. package/lib/motion/shotcraft/upstream/demos/data/chart-live-moves/AxisRescaleShockV2.tsx +303 -303
  68. package/lib/motion/shotcraft/upstream/demos/data/chart-live-moves/OscilloscopeStreamV2.tsx +290 -290
  69. package/lib/motion/shotcraft/upstream/demos/data/chart-live-moves/UnitDotSwarmRegroupV2.tsx +278 -278
  70. package/lib/motion/shotcraft/upstream/demos/data/gauge-readout-moves/NeedleSweepSelftest.tsx +307 -307
  71. package/lib/motion/shotcraft/upstream/demos/data/gauge-readout-moves/TapeScrollFixedPointer.tsx +215 -215
  72. package/lib/motion/shotcraft/upstream/demos/data/scroll-brake-moves/BrakeReticleLock.tsx +299 -299
  73. package/lib/motion/shotcraft/upstream/demos/data/scroll-brake-moves/ChangelogScrollBrake.tsx +232 -232
  74. package/lib/motion/shotcraft/upstream/demos/data/timeline-travel/TimelineTravel.tsx +290 -290
  75. package/lib/motion/shotcraft/upstream/demos/effects/assemble-then-type-flyin/AssembleThenTypeFlyin.tsx +273 -273
  76. package/lib/motion/shotcraft/upstream/demos/effects/aurora-bloom-bg-flip/AuroraBloomBgFlip.tsx +167 -167
  77. package/lib/motion/shotcraft/upstream/demos/effects/brand-frame-snap/BrandFrameSnap.tsx +536 -536
  78. package/lib/motion/shotcraft/upstream/demos/effects/fui-hud-moves/ReticleLockOn.tsx +164 -164
  79. package/lib/motion/shotcraft/upstream/demos/effects/glow-flyline-moves/FlylineArc.tsx +175 -175
  80. package/lib/motion/shotcraft/upstream/demos/effects/glow-flyline-moves/GlowOrbAmbient.tsx +197 -197
  81. package/lib/motion/shotcraft/upstream/demos/effects/glow-flyline-moves/OrbFlylineRelay.tsx +241 -241
  82. package/lib/motion/shotcraft/upstream/demos/effects/icon-performance-moves/AttentionBounce.tsx +279 -279
  83. package/lib/motion/shotcraft/upstream/demos/effects/impact-feedback/AnimeImpact.tsx +230 -230
  84. package/lib/motion/shotcraft/upstream/demos/effects/impact-feedback/HitCounter.tsx +345 -345
  85. package/lib/motion/shotcraft/upstream/demos/effects/light-play-moves/SheenSweepRetry.tsx +275 -275
  86. package/lib/motion/shotcraft/upstream/demos/effects/light-play-moves/SpotlightSweepReveal.tsx +229 -229
  87. package/lib/motion/shotcraft/upstream/demos/effects/radial-ripple-phone-chips/RadialRipplePhoneChips.tsx +312 -312
  88. package/lib/motion/shotcraft/upstream/demos/effects/riso-print-hits/RisoMisregistrationHit.tsx +222 -222
  89. package/lib/motion/shotcraft/upstream/demos/effects/scan-bracket-sweep/ScanBracketSweep.tsx +295 -295
  90. package/lib/motion/shotcraft/upstream/demos/effects/scanline-annotate-focus/ScanlineAnnotateFocus.tsx +329 -329
  91. package/lib/motion/shotcraft/upstream/demos/effects/scanline-assemble-flyin/ScanlineAssembleFlyin.tsx +315 -315
  92. package/lib/motion/shotcraft/upstream/demos/effects/slam-entrance-moves/ImpactBurstKit.tsx +264 -264
  93. package/lib/motion/shotcraft/upstream/demos/effects/slam-entrance-moves/KanadaPerspectiveSnap.tsx +260 -260
  94. package/lib/motion/shotcraft/upstream/demos/effects/slam-entrance-moves/ScoreSlam.tsx +263 -263
  95. package/lib/motion/shotcraft/upstream/demos/effects/spotlight-sweep-moves/CornerSpotlightReveal.tsx +123 -123
  96. package/lib/motion/shotcraft/upstream/demos/effects/spotlight-sweep-moves/GlowWakeSleepPanel.tsx +187 -187
  97. package/lib/motion/shotcraft/upstream/demos/effects/spotlight-sweep-moves/SlideSpotlightPan.tsx +175 -175
  98. package/lib/motion/shotcraft/upstream/demos/interaction/autolayout-gap-dial/AutolayoutGapDial.tsx +305 -305
  99. package/lib/motion/shotcraft/upstream/demos/interaction/canvas-materialize-moves/DiagramCascadeBuild.tsx +350 -350
  100. package/lib/motion/shotcraft/upstream/demos/interaction/canvas-materialize-moves/PanelToCanvasMaterialize.tsx +352 -352
  101. package/lib/motion/shotcraft/upstream/demos/interaction/chip-grid-single-select-blackout/ChipGridSingleSelectBlackout.tsx +218 -218
  102. package/lib/motion/shotcraft/upstream/demos/interaction/collab-cursor-moves/CursorCastEnsemble.tsx +297 -297
  103. package/lib/motion/shotcraft/upstream/demos/interaction/glass-pill-dictation-typing/GlassPillDictationTyping.tsx +157 -157
  104. package/lib/motion/shotcraft/upstream/demos/interaction/hashtag-to-pill-materialize/HashtagToPillMaterialize.tsx +218 -218
  105. package/lib/motion/shotcraft/upstream/demos/interaction/picker-carousel-feature-cycle/PickerCarouselFeatureCycle.tsx +202 -202
  106. package/lib/motion/shotcraft/upstream/demos/interaction/segmented-thumb-hero/SegmentedThumbHero.tsx +265 -265
  107. package/lib/motion/shotcraft/upstream/demos/interaction/theme-switch-moves/PaletteThemeRipple.tsx +457 -457
  108. package/lib/motion/shotcraft/upstream/demos/interaction/theme-switch-moves/ThemeSweepToggle.tsx +446 -446
  109. package/lib/motion/shotcraft/upstream/demos/interaction/type-and-filter/TypeAndFilter.tsx +249 -249
  110. package/lib/motion/shotcraft/upstream/demos/interaction/voice-waveform-live/VoiceWaveformLive.tsx +278 -278
  111. package/lib/motion/shotcraft/upstream/demos/opening/crane-rise-reveal/CraneRiseReveal.tsx +332 -332
  112. package/lib/motion/shotcraft/upstream/demos/opening/dataviz-landscape-open/DatavizLandscapeOpen.tsx +358 -358
  113. package/lib/motion/shotcraft/upstream/demos/opening/fracture/Fracture.tsx +201 -201
  114. package/lib/motion/shotcraft/upstream/demos/opening/icon-field-colorize/IconFieldColorize.tsx +200 -200
  115. package/lib/motion/shotcraft/upstream/demos/opening/letterspace-materialize/LetterspaceMaterialize.tsx +208 -208
  116. package/lib/motion/shotcraft/upstream/demos/opening/magician-card-flourish/MagicianCardFlourish.tsx +341 -341
  117. package/lib/motion/shotcraft/upstream/demos/opening/orbit-ring-title-open/OrbitRingTitleOpen.tsx +389 -389
  118. package/lib/motion/shotcraft/upstream/demos/opening/spotlight-hero-card/SpotlightHeroCard.tsx +293 -293
  119. package/lib/motion/shotcraft/upstream/demos/opening/stroke-segment-build/StrokeSegmentBuild.tsx +183 -183
  120. package/lib/motion/shotcraft/upstream/demos/opening/text-as-mask/TextAsMask.tsx +245 -245
  121. package/lib/motion/shotcraft/upstream/demos/outro/grain-dissolve/GrainDissolve.tsx +222 -222
  122. package/lib/motion/shotcraft/upstream/demos/outro/logo-shrink-wordmark-lockup/LogoShrinkWordmarkLockup.tsx +223 -223
  123. package/lib/motion/shotcraft/upstream/demos/outro/neon-triple-marquee/NeonTripleMarquee.tsx +217 -217
  124. package/lib/motion/shotcraft/upstream/demos/outro/outro-group-photo-launch/OutroGroupPhotoLaunch.tsx +343 -343
  125. package/lib/motion/shotcraft/upstream/demos/outro/ui-strip-away-outro/UiStripAwayOutro.tsx +357 -357
  126. package/lib/motion/shotcraft/upstream/demos/outro/ui-to-brand-morph/IconFlipBloomLogo.tsx +187 -187
  127. package/lib/motion/shotcraft/upstream/demos/outro/ui-to-brand-morph/InputMorphsIntoLogo.tsx +333 -333
  128. package/lib/motion/shotcraft/upstream/demos/rhythm/beat-cut-moves/PaparazziFlash.tsx +274 -274
  129. package/lib/motion/shotcraft/upstream/demos/rhythm/beat-step-list-theme-cycle/BeatStepListThemeCycle.tsx +270 -270
  130. package/lib/motion/shotcraft/upstream/demos/rhythm/panel-grid-moves/ComicPanelSplit.tsx +430 -430
  131. package/lib/motion/shotcraft/upstream/demos/rhythm/quad-split-parallel-scenes/QuadSplitParallelScenes.tsx +252 -252
  132. package/lib/motion/shotcraft/upstream/demos/rhythm/rhythm-interrupt-moves/JumpCutPunchIn.tsx +106 -106
  133. package/lib/motion/shotcraft/upstream/demos/rhythm/sakuga-timing-shift/SakugaTimingShift.tsx +288 -288
  134. package/lib/motion/shotcraft/upstream/demos/rhythm/speed-ramp-freeze/FreezeAnnotateReal.tsx +362 -362
  135. package/lib/motion/shotcraft/upstream/demos/rhythm/trailer-grammar-moves/TrailerBumper.tsx +168 -168
  136. package/lib/motion/shotcraft/upstream/demos/transition/bottom-push-stack-wipe/BottomPushStackWipe.tsx +310 -310
  137. package/lib/motion/shotcraft/upstream/demos/transition/card-flip-reveal/CardFlipReveal.tsx +261 -261
  138. package/lib/motion/shotcraft/upstream/demos/transition/card-flock-tumble/CardFlockTumble.tsx +459 -459
  139. package/lib/motion/shotcraft/upstream/demos/transition/circle-match-iris/CircleMatchIris.tsx +294 -294
  140. package/lib/motion/shotcraft/upstream/demos/transition/gradient-transition/GradientTransition.tsx +161 -161
  141. package/lib/motion/shotcraft/upstream/demos/transition/line-carry-transition/LineCarryTransition.tsx +248 -248
  142. package/lib/motion/shotcraft/upstream/demos/transition/mosaic-reframe/MosaicReframe.tsx +359 -359
  143. package/lib/motion/shotcraft/upstream/demos/transition/page-turn-transitions/BarnDoorSplit.tsx +227 -227
  144. package/lib/motion/shotcraft/upstream/demos/transition/print-texture-transitions/InkBleedReveal.tsx +162 -162
  145. package/lib/motion/shotcraft/upstream/demos/transition/shot-transitions/PortalWipeV2.tsx +248 -248
  146. package/lib/motion/shotcraft/upstream/demos/transition/shot-transitions/WhipBrakeReal.tsx +186 -186
  147. package/lib/motion/shotcraft/upstream/demos/transition/tear-streak-transitions/GlitchDisplace.tsx +355 -355
  148. package/lib/motion/shotcraft/upstream/demos/transition/transition-hidden-cut/InvisibleCut.tsx +272 -272
  149. package/lib/motion/shotcraft/upstream/demos/transition/transition-hidden-cut/LightLeakBurn.tsx +262 -262
  150. package/lib/motion/shotcraft/upstream/demos/transition/transition-hidden-cut/VersusSlam.tsx +217 -217
  151. package/lib/motion/shotcraft/upstream/demos/transition/transition-travel/LetterformZoom.tsx +285 -285
  152. package/lib/motion/shotcraft/upstream/demos/transition/white-flash-logo-simplify-cut/WhiteFlashLogoSimplifyCut.tsx +205 -205
  153. package/lib/motion/shotcraft/upstream/demos/transition/wipe-transitions/BlindsSlice.tsx +178 -178
  154. package/lib/motion/shotcraft/upstream/demos/typography/blur-slide/BlurSlide.tsx +147 -147
  155. package/lib/motion/shotcraft/upstream/demos/typography/brace-expand/BraceExpand.tsx +143 -143
  156. package/lib/motion/shotcraft/upstream/demos/typography/brand-ink-open/BrandInkOpen.tsx +134 -134
  157. package/lib/motion/shotcraft/upstream/demos/typography/countdown-arc-scatter/CountdownArcScatter.tsx +217 -217
  158. package/lib/motion/shotcraft/upstream/demos/typography/flying-words/FlyingWords.tsx +198 -198
  159. package/lib/motion/shotcraft/upstream/demos/typography/glitch-cycle/GlitchCycle.tsx +221 -221
  160. package/lib/motion/shotcraft/upstream/demos/typography/gradient-word-sweep/GradientWordSweep.tsx +312 -312
  161. package/lib/motion/shotcraft/upstream/demos/typography/lead-word-zoom-assemble/LeadWordZoomAssemble.tsx +261 -261
  162. package/lib/motion/shotcraft/upstream/demos/typography/marker-underline-title/MarkerUnderlineTitle.tsx +121 -121
  163. package/lib/motion/shotcraft/upstream/demos/typography/outline-word-fill/OutlineWordFill.tsx +153 -153
  164. package/lib/motion/shotcraft/upstream/demos/typography/paper-title-card/PaperTitleCard.tsx +179 -179
  165. package/lib/motion/shotcraft/upstream/demos/typography/pill-chip-slot-cycle-handled/PillChipSlotCycleHandled.tsx +140 -140
  166. package/lib/motion/shotcraft/upstream/demos/typography/pill-slot-cycle/PillSlotCycle.tsx +309 -309
  167. package/lib/motion/shotcraft/upstream/demos/typography/text-column-converge/TextColumnConverge.tsx +191 -191
  168. package/lib/motion/shotcraft/upstream/demos/typography/title-demote-to-label/TitleDemoteToLabel.tsx +292 -292
  169. package/lib/motion/shotcraft/upstream/demos/typography/type-assembly-moves/LetterformDriftAssembly.tsx +135 -135
  170. package/lib/motion/shotcraft/upstream/demos/typography/type-assembly-moves/SplitTextStagger.tsx +124 -124
  171. package/lib/motion/shotcraft/upstream/demos/typography/type-assembly-moves/TextOnPath.tsx +255 -255
  172. package/lib/motion/shotcraft/upstream/demos/typography/type-entrance-moves/LetterDropPhysics.tsx +173 -173
  173. package/lib/motion/shotcraft/upstream/demos/typography/type-rhythm-sync/FontWeightPump.tsx +225 -225
  174. package/lib/motion/shotcraft/upstream/demos/typography/type-rhythm-sync/KaraokeFillSync.tsx +141 -141
  175. package/lib/motion/shotcraft/upstream/demos/typography/typewriter-moves/TypewriterErrorRetype.tsx +137 -137
  176. package/lib/motion/shotcraft/upstream/demos/typography/vertical-word-roll-blur-cycle/VerticalWordRollBlurCycle.tsx +147 -147
  177. package/lib/motion/shotcraft/upstream/demos/typography/word-relay-filmstrip/WordRelayFilmstrip.tsx +409 -409
  178. package/lib/motion/shotcraft/upstream/demos/typography/word-relay-geometry/WordRelayGeometry.tsx +280 -280
  179. package/lib/motion/shotcraft/upstream/demos/ui-entrance/avatar-bracket-carousel/AvatarBracketCarousel.tsx +271 -271
  180. package/lib/motion/shotcraft/upstream/demos/ui-entrance/bezier-source-converge-merge/BezierSourceConvergeMerge.tsx +385 -385
  181. package/lib/motion/shotcraft/upstream/demos/ui-entrance/card-stack/CardStack.tsx +312 -312
  182. package/lib/motion/shotcraft/upstream/demos/ui-entrance/carousel-3d/Carousel3D.tsx +303 -303
  183. package/lib/motion/shotcraft/upstream/demos/ui-entrance/clipcard-looping/ClipCardLooping.tsx +77 -77
  184. package/lib/motion/shotcraft/upstream/demos/ui-entrance/cloner-depth-echo/ClonerDepthEcho.tsx +311 -311
  185. package/lib/motion/shotcraft/upstream/demos/ui-entrance/deck-deal-flyin/DeckDealFlyin.tsx +307 -307
  186. package/lib/motion/shotcraft/upstream/demos/ui-entrance/doc-park-left-pill-deal/DocParkLeftPillDeal.tsx +349 -349
  187. package/lib/motion/shotcraft/upstream/demos/ui-entrance/document-typewriter-reveal/DocumentTypewriterReveal.tsx +255 -255
  188. package/lib/motion/shotcraft/upstream/demos/ui-entrance/draw-svg-trace/DrawSvgTrace.tsx +244 -244
  189. package/lib/motion/shotcraft/upstream/demos/ui-entrance/element-body-moves/ContactShadowLift.tsx +217 -217
  190. package/lib/motion/shotcraft/upstream/demos/ui-entrance/integration-hub-map/IntegrationHubMap.tsx +652 -652
  191. package/lib/motion/shotcraft/upstream/demos/ui-entrance/list-reveal/ListReveal.tsx +153 -153
  192. package/lib/motion/shotcraft/upstream/demos/ui-entrance/list-stack-press/ListStackPress.tsx +238 -238
  193. package/lib/motion/shotcraft/upstream/demos/ui-entrance/neon-frame-forerun/NeonFrameForerun.tsx +324 -324
  194. package/lib/motion/shotcraft/upstream/demos/ui-entrance/neon-frame-orbit-drop/NeonFrameForerunOrbit.tsx +354 -354
  195. package/lib/motion/shotcraft/upstream/demos/ui-entrance/page-waterfall-wall/PageWaterfallWall.tsx +101 -101
  196. package/lib/motion/shotcraft/upstream/demos/ui-entrance/page-waterfall-wall/VerticalTicker.tsx +129 -129
  197. package/lib/motion/shotcraft/upstream/demos/ui-entrance/product-card-progressive-assemble/ProductCardProgressiveAssemble.tsx +297 -297
  198. package/lib/motion/shotcraft/upstream/demos/ui-entrance/radial-wave/RadialWave.tsx +57 -57
  199. package/lib/motion/shotcraft/upstream/demos/ui-entrance/research-card-stack-scroll/ResearchCardStackScroll.tsx +155 -155
  200. package/lib/motion/shotcraft/upstream/demos/ui-entrance/row-embed/RowEmbed.tsx +175 -175
  201. package/lib/motion/shotcraft/upstream/demos/ui-entrance/value-stagger-gradient/ValueStaggerGradient.tsx +153 -153
  202. package/lib/motion/shotcraft/upstream/demos/ui-entrance/wall-reveal-moves/BentoLightUp.tsx +146 -146
  203. package/lib/motion/shotcraft/upstream/demos/ui-entrance/wall-reveal-moves/WireframeDrawOn.tsx +226 -226
  204. package/lib/motion/shotcraft/upstream/gallery/api/library.json +1 -1
  205. package/lib/motion/shotcraft/upstream/references/aesthetic-rules.md +193 -193
  206. package/lib/motion/shotcraft/upstream/references/final-review.md +121 -121
  207. package/lib/motion/shotcraft/upstream/references/guided-free-creation.md +199 -199
  208. package/lib/motion/shotcraft/upstream/references/jianying-export.md +183 -183
  209. package/lib/motion/shotcraft/upstream/references/music-beat-sync.md +257 -257
  210. package/lib/motion/shotcraft/upstream/references/pipeline.md +382 -382
  211. package/lib/motion/shotcraft/upstream/references/publish-upload-post.md +111 -111
  212. package/lib/motion/shotcraft/upstream/references/sequences/promo-energy-arc.md +50 -50
  213. package/lib/motion/shotcraft/upstream/references/sfx-sourcing.md +95 -95
  214. package/lib/motion/shotcraft/upstream/references/shots/camera/basic-3d-scene.md +41 -41
  215. package/lib/motion/shotcraft/upstream/references/shots/camera/crash-zoom-punch.md +52 -52
  216. package/lib/motion/shotcraft/upstream/references/shots/camera/cursor-flyover.md +39 -39
  217. package/lib/motion/shotcraft/upstream/references/shots/camera/depth-layer-moves.md +39 -39
  218. package/lib/motion/shotcraft/upstream/references/shots/camera/graze-face-tour.md +57 -57
  219. package/lib/motion/shotcraft/upstream/references/shots/camera/overhead-camera-moves.md +51 -51
  220. package/lib/motion/shotcraft/upstream/references/shots/camera/space-camera-moves.md +46 -46
  221. package/lib/motion/shotcraft/upstream/references/shots/camera/steep-tilt-glide.md +52 -52
  222. package/lib/motion/shotcraft/upstream/references/shots/camera/tension-camera-moves.md +43 -43
  223. package/lib/motion/shotcraft/upstream/references/shots/camera/terminal-3d.md +42 -42
  224. package/lib/motion/shotcraft/upstream/references/shots/data/before-after-slider-scrub.md +48 -48
  225. package/lib/motion/shotcraft/upstream/references/shots/data/chart-live-moves.md +52 -52
  226. package/lib/motion/shotcraft/upstream/references/shots/data/gauge-readout-moves.md +45 -45
  227. package/lib/motion/shotcraft/upstream/references/shots/data/scroll-brake-moves.md +46 -46
  228. package/lib/motion/shotcraft/upstream/references/shots/data/timeline-travel.md +44 -44
  229. package/lib/motion/shotcraft/upstream/references/shots/effects/assemble-then-type-flyin.md +63 -63
  230. package/lib/motion/shotcraft/upstream/references/shots/effects/aurora-bloom-bg-flip.md +54 -54
  231. package/lib/motion/shotcraft/upstream/references/shots/effects/brand-frame-snap.md +58 -58
  232. package/lib/motion/shotcraft/upstream/references/shots/effects/fui-hud-moves.md +35 -35
  233. package/lib/motion/shotcraft/upstream/references/shots/effects/glow-flyline-moves.md +53 -53
  234. package/lib/motion/shotcraft/upstream/references/shots/effects/icon-performance-moves.md +42 -42
  235. package/lib/motion/shotcraft/upstream/references/shots/effects/impact-feedback.md +50 -50
  236. package/lib/motion/shotcraft/upstream/references/shots/effects/light-play-moves.md +46 -46
  237. package/lib/motion/shotcraft/upstream/references/shots/effects/radial-ripple-phone-chips.md +56 -56
  238. package/lib/motion/shotcraft/upstream/references/shots/effects/riso-print-hits.md +49 -49
  239. package/lib/motion/shotcraft/upstream/references/shots/effects/scan-bracket-sweep.md +50 -50
  240. package/lib/motion/shotcraft/upstream/references/shots/effects/scanline-annotate-focus.md +53 -53
  241. package/lib/motion/shotcraft/upstream/references/shots/effects/scanline-assemble-flyin.md +53 -53
  242. package/lib/motion/shotcraft/upstream/references/shots/effects/slam-entrance-moves.md +55 -55
  243. package/lib/motion/shotcraft/upstream/references/shots/effects/spotlight-sweep-moves.md +52 -52
  244. package/lib/motion/shotcraft/upstream/references/shots/interaction/autolayout-gap-dial.md +60 -60
  245. package/lib/motion/shotcraft/upstream/references/shots/interaction/canvas-materialize-moves.md +57 -57
  246. package/lib/motion/shotcraft/upstream/references/shots/interaction/chip-grid-single-select-blackout.md +51 -51
  247. package/lib/motion/shotcraft/upstream/references/shots/interaction/collab-cursor-moves.md +41 -41
  248. package/lib/motion/shotcraft/upstream/references/shots/interaction/glass-pill-dictation-typing.md +53 -53
  249. package/lib/motion/shotcraft/upstream/references/shots/interaction/hashtag-to-pill-materialize.md +60 -60
  250. package/lib/motion/shotcraft/upstream/references/shots/interaction/picker-carousel-feature-cycle.md +55 -55
  251. package/lib/motion/shotcraft/upstream/references/shots/interaction/segmented-thumb-hero.md +57 -57
  252. package/lib/motion/shotcraft/upstream/references/shots/interaction/theme-switch-moves.md +47 -47
  253. package/lib/motion/shotcraft/upstream/references/shots/interaction/type-and-filter.md +37 -37
  254. package/lib/motion/shotcraft/upstream/references/shots/interaction/voice-waveform-live.md +54 -54
  255. package/lib/motion/shotcraft/upstream/references/shots/opening/brand-ink-open.md +36 -36
  256. package/lib/motion/shotcraft/upstream/references/shots/opening/crane-rise-reveal.md +56 -56
  257. package/lib/motion/shotcraft/upstream/references/shots/opening/dataviz-landscape-open.md +56 -56
  258. package/lib/motion/shotcraft/upstream/references/shots/opening/fracture.md +40 -40
  259. package/lib/motion/shotcraft/upstream/references/shots/opening/icon-field-colorize.md +60 -60
  260. package/lib/motion/shotcraft/upstream/references/shots/opening/letterspace-materialize.md +57 -57
  261. package/lib/motion/shotcraft/upstream/references/shots/opening/magician-card-flourish.md +73 -73
  262. package/lib/motion/shotcraft/upstream/references/shots/opening/orbit-ring-title-open.md +87 -87
  263. package/lib/motion/shotcraft/upstream/references/shots/opening/spotlight-hero-card.md +55 -55
  264. package/lib/motion/shotcraft/upstream/references/shots/opening/stroke-segment-build.md +50 -50
  265. package/lib/motion/shotcraft/upstream/references/shots/opening/text-as-mask.md +59 -59
  266. package/lib/motion/shotcraft/upstream/references/shots/outro/grain-dissolve.md +38 -38
  267. package/lib/motion/shotcraft/upstream/references/shots/outro/logo-shrink-wordmark-lockup.md +38 -38
  268. package/lib/motion/shotcraft/upstream/references/shots/outro/neon-triple-marquee.md +59 -59
  269. package/lib/motion/shotcraft/upstream/references/shots/outro/outro-group-photo-launch.md +39 -39
  270. package/lib/motion/shotcraft/upstream/references/shots/outro/ui-strip-away-outro.md +61 -61
  271. package/lib/motion/shotcraft/upstream/references/shots/outro/ui-to-brand-morph.md +52 -52
  272. package/lib/motion/shotcraft/upstream/references/shots/rhythm/beat-cut-moves.md +50 -50
  273. package/lib/motion/shotcraft/upstream/references/shots/rhythm/beat-step-list-theme-cycle.md +66 -66
  274. package/lib/motion/shotcraft/upstream/references/shots/rhythm/panel-grid-moves.md +43 -43
  275. package/lib/motion/shotcraft/upstream/references/shots/rhythm/quad-split-parallel-scenes.md +38 -38
  276. package/lib/motion/shotcraft/upstream/references/shots/rhythm/rhythm-interrupt-moves.md +38 -38
  277. package/lib/motion/shotcraft/upstream/references/shots/rhythm/sakuga-timing-shift.md +56 -56
  278. package/lib/motion/shotcraft/upstream/references/shots/rhythm/speed-ramp-freeze.md +44 -44
  279. package/lib/motion/shotcraft/upstream/references/shots/rhythm/trailer-grammar-moves.md +38 -38
  280. package/lib/motion/shotcraft/upstream/references/shots/transition/bottom-push-stack-wipe.md +63 -63
  281. package/lib/motion/shotcraft/upstream/references/shots/transition/card-flip-reveal.md +57 -57
  282. package/lib/motion/shotcraft/upstream/references/shots/transition/card-flock-tumble.md +63 -63
  283. package/lib/motion/shotcraft/upstream/references/shots/transition/circle-match-iris.md +58 -58
  284. package/lib/motion/shotcraft/upstream/references/shots/transition/gradient-transition.md +45 -45
  285. package/lib/motion/shotcraft/upstream/references/shots/transition/line-carry-transition.md +55 -55
  286. package/lib/motion/shotcraft/upstream/references/shots/transition/mosaic-reframe.md +49 -49
  287. package/lib/motion/shotcraft/upstream/references/shots/transition/page-turn-transitions.md +42 -42
  288. package/lib/motion/shotcraft/upstream/references/shots/transition/print-texture-transitions.md +42 -42
  289. package/lib/motion/shotcraft/upstream/references/shots/transition/shot-transitions.md +45 -45
  290. package/lib/motion/shotcraft/upstream/references/shots/transition/tear-streak-transitions.md +48 -48
  291. package/lib/motion/shotcraft/upstream/references/shots/transition/transition-hidden-cut.md +55 -55
  292. package/lib/motion/shotcraft/upstream/references/shots/transition/transition-travel.md +43 -43
  293. package/lib/motion/shotcraft/upstream/references/shots/transition/white-flash-logo-simplify-cut.md +41 -41
  294. package/lib/motion/shotcraft/upstream/references/shots/transition/wipe-transitions.md +42 -42
  295. package/lib/motion/shotcraft/upstream/references/shots/typography/blur-slide.md +59 -59
  296. package/lib/motion/shotcraft/upstream/references/shots/typography/brace-expand.md +55 -55
  297. package/lib/motion/shotcraft/upstream/references/shots/typography/countdown-arc-scatter.md +65 -65
  298. package/lib/motion/shotcraft/upstream/references/shots/typography/document-typewriter-reveal.md +42 -42
  299. package/lib/motion/shotcraft/upstream/references/shots/typography/flying-words.md +64 -64
  300. package/lib/motion/shotcraft/upstream/references/shots/typography/glitch-cycle.md +64 -64
  301. package/lib/motion/shotcraft/upstream/references/shots/typography/gradient-word-sweep.md +54 -54
  302. package/lib/motion/shotcraft/upstream/references/shots/typography/lead-word-zoom-assemble.md +91 -91
  303. package/lib/motion/shotcraft/upstream/references/shots/typography/marker-underline-title.md +51 -51
  304. package/lib/motion/shotcraft/upstream/references/shots/typography/outline-word-fill.md +66 -66
  305. package/lib/motion/shotcraft/upstream/references/shots/typography/paper-title-card.md +38 -38
  306. package/lib/motion/shotcraft/upstream/references/shots/typography/pill-chip-slot-cycle-handled.md +66 -66
  307. package/lib/motion/shotcraft/upstream/references/shots/typography/pill-slot-cycle.md +58 -58
  308. package/lib/motion/shotcraft/upstream/references/shots/typography/text-column-converge.md +61 -61
  309. package/lib/motion/shotcraft/upstream/references/shots/typography/title-demote-to-label.md +64 -64
  310. package/lib/motion/shotcraft/upstream/references/shots/typography/type-assembly-moves.md +45 -45
  311. package/lib/motion/shotcraft/upstream/references/shots/typography/type-entrance-moves.md +41 -41
  312. package/lib/motion/shotcraft/upstream/references/shots/typography/type-rhythm-sync.md +51 -51
  313. package/lib/motion/shotcraft/upstream/references/shots/typography/typewriter-moves.md +42 -42
  314. package/lib/motion/shotcraft/upstream/references/shots/typography/vertical-word-roll-blur-cycle.md +63 -63
  315. package/lib/motion/shotcraft/upstream/references/shots/typography/word-relay-filmstrip.md +57 -57
  316. package/lib/motion/shotcraft/upstream/references/shots/typography/word-relay-geometry.md +75 -75
  317. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/avatar-bracket-carousel.md +59 -59
  318. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/bezier-source-converge-merge.md +67 -67
  319. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/card-stack.md +60 -60
  320. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/carousel-3d.md +66 -66
  321. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/cloner-depth-echo.md +40 -40
  322. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/deck-deal-flyin.md +45 -45
  323. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/doc-park-left-pill-deal.md +62 -62
  324. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/draw-svg-trace.md +55 -55
  325. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/element-body-moves.md +37 -37
  326. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/integration-hub-map.md +55 -55
  327. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/list-reveal.md +50 -50
  328. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/list-stack-press.md +43 -43
  329. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/neon-frame-forerun.md +55 -55
  330. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/neon-frame-orbit-drop.md +51 -51
  331. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/page-waterfall-wall.md +51 -51
  332. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/product-card-progressive-assemble.md +56 -56
  333. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/radial-wave.md +49 -49
  334. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/research-card-stack-scroll.md +57 -57
  335. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/row-embed.md +36 -36
  336. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/value-stagger-gradient.md +64 -64
  337. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/wall-reveal-moves.md +47 -47
  338. package/lib/motion/shotcraft/upstream/references/sound-design.md +170 -170
  339. package/lib/motion/shotcraft/upstream/references/workbench.md +157 -157
  340. package/lib/motion/shotcraft/upstream/template/TEMPLATE.md +103 -103
  341. package/lib/motion/shotcraft/upstream/template/THEMES.md +44 -44
  342. package/lib/motion/shotcraft/upstream/template/package.json +20 -20
  343. package/lib/motion/shotcraft/upstream/template/remotion.config.ts +6 -6
  344. package/lib/motion/shotcraft/upstream/template/src/Root.tsx +17 -17
  345. package/lib/motion/shotcraft/upstream/template/src/aifl/Caption.tsx +65 -65
  346. package/lib/motion/shotcraft/upstream/template/src/aifl/DigitRoll.tsx +48 -48
  347. package/lib/motion/shotcraft/upstream/template/src/aifl/FlashCut.tsx +24 -24
  348. package/lib/motion/shotcraft/upstream/template/src/aifl/Main.tsx +192 -192
  349. package/lib/motion/shotcraft/upstream/template/src/aifl/PaperTitleCard.tsx +111 -111
  350. package/lib/motion/shotcraft/upstream/template/src/aifl/live/PageCam.tsx +150 -150
  351. package/lib/motion/shotcraft/upstream/template/src/aifl/live/SceneDetail.tsx +158 -158
  352. package/lib/motion/shotcraft/upstream/template/src/aifl/live/SceneFlyIn.tsx +468 -468
  353. package/lib/motion/shotcraft/upstream/template/src/aifl/live/SceneOpen.tsx +552 -552
  354. package/lib/motion/shotcraft/upstream/template/src/aifl/live/SceneOutroLive.tsx +411 -411
  355. package/lib/motion/shotcraft/upstream/template/src/aifl/live/ScenePapers.tsx +200 -200
  356. package/lib/motion/shotcraft/upstream/template/src/aifl/live/SceneWbr.tsx +324 -324
  357. package/lib/motion/shotcraft/upstream/template/src/aifl/live-layout.json +388 -388
  358. package/lib/motion/shotcraft/upstream/template/src/index.ts +4 -4
  359. package/lib/motion/shotcraft/upstream/template/src/themes/ThemedFilm.tsx +7 -7
  360. package/lib/motion/shotcraft/upstream/template/src/themes/manifest.tsx +68 -68
  361. package/lib/motion/shotcraft/upstream/template/src/themes/palette-assets.json +1 -1
  362. package/lib/motion/shotcraft/upstream/template/src/themes/palette-assets.ts +24 -24
  363. package/lib/motion/shotcraft/upstream/template/src/themes/palettes.json +74 -74
  364. package/lib/motion/shotcraft/upstream/template/src/themes/visual-theme.tsx +91 -91
  365. package/lib/motion/shotcraft/upstream/template/src/workbench.ts +213 -213
  366. package/lib/motion/shotcraft/upstream/template/tsconfig.json +15 -15
  367. package/lib/motion/style-frames.js +306 -306
  368. package/lib/motion/sync.js +214 -214
  369. package/lib/motion-library.js +1 -1
  370. package/lib/motion-project.js +105 -105
  371. package/lib/motion-render-worker.js +174 -174
  372. package/lib/routing/router.js +222 -222
  373. package/lib/routing/vendor/README.md +96 -96
  374. package/lib/routing/vendor/libavoid-routing.js +753 -753
  375. package/lib/routing/vendor/libavoid.min.js +59 -59
  376. package/lib/svg-export.js +1344 -0
  377. package/lib/video-trace-pool.js +128 -128
  378. package/package.json +3 -2
  379. package/LICENSE +0 -4175
@@ -1,312 +1,312 @@
1
- // gradient-word-sweep v3 —— 批次 12 按用户意见微调(v2 结构保留):
2
- // 1) 闪电偏紫红色 + 线宽调细(约减半);
3
- // 2) 整体泛光强度略降(各辉光层 opacity 下调);
4
- // 3) 波前尾迹梯度:刚被点亮的字符辉光最强,随扫过距离衰减到稳态
5
- // (trailing-window 增亮层,填充结束后淡出到稳态呼吸)。
6
- // 质感层(改版 v4):
7
- // a) 修"方框光":辉光层的 mask/clip 原先裁在文字盒上,模糊溢出盒外被一刀切成矩形——
8
- // 改为所有带模糊的层都放进四周外扩 PAD 的 Halo 盒里,mask 色标用 calc 换算回文字坐标;
9
- // b) 闪电从 36 次随机事件收成 7 次排期(间隔 ≥9f、同屏 ≤1 道),末次 ~92f 熄灭,尾段留呼吸;
10
- // c) 入场改两行错峰 blur-slide;整段极缓推近 1→1.025;黑底换带色相的近黑 + 暗角 + 颗粒。
11
- // 文案:充能词 Supercharged 保留(闪电与辉光按它的字宽排布),标语改成 video-shotcraft 的宣传句。
12
- import React from 'react';
13
- import { AbsoluteFill, useCurrentFrame, interpolate, Easing } from 'remotion';
14
- import { EASE, Grain, Vignette, ramp } from '../../_fixtures/Polish';
15
- import { BRAND } from '../../_fixtures/Brand';
16
-
17
- const mulberry32 = (a: number) => () => {
18
- let t = (a += 0x6d2b79f5);
19
- t = Math.imul(t ^ (t >>> 15), t | 1);
20
- t ^= t + Math.imul(t ^ (t >>> 7), t | 61);
21
- return ((t ^ (t >>> 14)) >>> 0) / 4294967296;
22
- };
23
-
24
- const FONT = '"Avenir Next", Futura, "Helvetica Neue", sans-serif';
25
- // 截图 5:S 偏蓝青 → 中段紫 → 粉 → 尾部琥珀
26
- const GRAD = 'linear-gradient(92deg, #59c2ff 0%, #9d6bff 32%, #ff6ed4 62%, #ffc46b 100%)';
27
-
28
- export const GRADIENT_WORD_SWEEP_DURATION = 105;
29
-
30
- const FILL_START = 12;
31
- const FILL_END = 30; // 18 帧 ≈ 0.6s,快扫
32
- const LIGHT_START = FILL_END + 3;
33
-
34
- // ---------- 种子化噪声与闪电 ----------
35
- const rand = mulberry32(20260718);
36
- const FLICKER: number[] = Array.from({ length: 160 }, () => rand());
37
-
38
- type Bolt = { d: string; long: boolean };
39
- const makeLongBolt = (r: () => number): Bolt => {
40
- // 词上方勾连长弧:横跨若干字符,锯齿折线
41
- const x0 = 30 + r() * 220;
42
- const x1 = x0 + 160 + r() * 320;
43
- const yBase = 38 + r() * 42;
44
- const n = 7 + Math.floor(r() * 4);
45
- let d = `M ${x0.toFixed(1)} ${(yBase + 26 + r() * 20).toFixed(1)}`;
46
- for (let i = 1; i <= n; i++) {
47
- const x = x0 + ((x1 - x0) * i) / n + (r() - 0.5) * 22;
48
- const arch = Math.sin((i / n) * Math.PI) * -22; // 中段拱起
49
- const y = yBase + arch + (r() - 0.5) * 30 + (i === n ? 30 + r() * 18 : 0);
50
- d += ` L ${x.toFixed(1)} ${y.toFixed(1)}`;
51
- }
52
- return { d, long: true };
53
- };
54
- const makeShortBolt = (r: () => number): Bolt => {
55
- // 字符之间的短勾连:竖向小锯齿
56
- const x = 60 + r() * 540;
57
- const y0 = 72 + r() * 24;
58
- const y1 = y0 + 55 + r() * 45;
59
- const n = 4 + Math.floor(r() * 3);
60
- let d = `M ${x.toFixed(1)} ${y0.toFixed(1)}`;
61
- for (let i = 1; i <= n; i++) {
62
- const y = y0 + ((y1 - y0) * i) / n;
63
- const xx = x + (r() - 0.5) * 30;
64
- d += ` L ${xx.toFixed(1)} ${y.toFixed(1)}`;
65
- }
66
- return { d, long: false };
67
- };
68
-
69
- const BOLTS: Bolt[] = Array.from({ length: 16 }, (_, i) =>
70
- i % 3 === 0 ? makeShortBolt(rand) : makeLongBolt(rand),
71
- );
72
- // 闪烁事件:排期而非随机——稀疏零星(同屏 ≤1 道、间隔 ≥9f),末次约 92f 熄灭,留出落定呼吸
73
- type Flash = { at: number; life: number; bolt: number };
74
- const FLASH_AT = [2, 12, 22, 33, 43, 52, 56];
75
- const FLASHES: Flash[] = FLASH_AT.map((d, k) => ({
76
- at: LIGHT_START + d,
77
- life: k === FLASH_AT.length - 1 ? 3 : 3 + Math.floor(rand() * 2),
78
- bolt: (k * 5 + 1) % BOLTS.length,
79
- }));
80
-
81
- // 外扩盒:带模糊的辉光层放进四周外扩 PAD 的盒子,mask 不再把溢出的光切成矩形
82
- const PAD = 90;
83
- // 文字坐标里的百分比 x → 外扩盒里的 mask 色标
84
- const at = (x: number) => `calc(${PAD}px + (100% - ${PAD * 2}px) * ${(Math.max(-20, Math.min(120, x)) / 100).toFixed(4)})`;
85
- const Halo: React.FC<{ mask?: string; style?: React.CSSProperties; children: React.ReactNode }> = ({ mask, style, children }) => (
86
- <span
87
- aria-hidden
88
- style={{
89
- position: 'absolute',
90
- left: -PAD,
91
- top: -PAD,
92
- right: -PAD,
93
- bottom: -PAD,
94
- padding: PAD,
95
- ...(mask ? { WebkitMaskImage: mask, maskImage: mask } : {}),
96
- ...style,
97
- }}
98
- >
99
- <span style={{ position: 'relative', display: 'block', width: '100%', height: '100%' }}>{children}</span>
100
- </span>
101
- );
102
-
103
- export const GradientWordSweep: React.FC = () => {
104
- const frame = useCurrentFrame();
105
-
106
- // 入场:两行错峰 blur-slide(第二行晚 4f),同一条 snappy 进度驱动 y/blur/opacity
107
- const enter1 = ramp(frame, 0, 14, EASE.snappy);
108
- const enter2 = ramp(frame, 4, 14, EASE.snappy);
109
- const lineIn = (e: number): React.CSSProperties => ({
110
- opacity: e,
111
- transform: `translateY(${(1 - e) * 36}px)`,
112
- filter: e < 0.999 ? `blur(${((1 - e) * 10).toFixed(2)}px)` : undefined,
113
- });
114
- // 整段极缓推近(smooth,起止速度为 0)
115
- const push = 1 + 0.025 * ramp(frame, 0, 104, EASE.smooth);
116
-
117
- // 快速填充进度
118
- const p = interpolate(frame, [FILL_START, FILL_END], [0, 1], {
119
- extrapolateLeft: 'clamp',
120
- extrapolateRight: 'clamp',
121
- easing: Easing.out(Easing.quad),
122
- });
123
- const pPct = p * 100;
124
- const filling = frame >= FILL_START && frame <= FILL_END + 4;
125
- const headFade = interpolate(frame, [FILL_END, FILL_END + 6], [1, 0], {
126
- extrapolateLeft: 'clamp',
127
- extrapolateRight: 'clamp',
128
- });
129
-
130
- // 波前尾迹:刚点亮字符最亮,向后衰减;填充结束后整体淡出到稳态
131
- const trailFade = interpolate(frame, [FILL_END, FILL_END + 10], [1, 0], {
132
- extrapolateLeft: 'clamp',
133
- extrapolateRight: 'clamp',
134
- });
135
- const TRAIL = 34; // 尾迹长度(% 宽度)
136
- const trailMask =
137
- `linear-gradient(90deg, transparent 0%, transparent ${at(pPct - TRAIL)}, ` +
138
- `rgba(0,0,0,0.9) ${at(pPct - 3)}, rgba(0,0,0,0.9) ${at(pPct + 1)}, ` +
139
- `transparent ${at(pPct + 6)})`;
140
- // 填充头亮核:只露波前 ~10% 词宽,两侧软边(原 clipPath 硬裁 → 方框)
141
- const headMask =
142
- `linear-gradient(90deg, transparent 0%, transparent ${at(pPct - 12)}, #000 ${at(pPct - 6)}, ` +
143
- `#000 ${at(pPct - 1)}, transparent ${at(pPct + 2)})`;
144
-
145
- const noise = FLICKER[Math.min(frame, FLICKER.length - 1)];
146
- // 当前帧活跃闪电
147
- const active = FLASHES.filter((f) => frame >= f.at && frame < f.at + f.life);
148
- const boltBoost = active.length > 0 ? 0.35 : 0;
149
- // 辉光呼吸:填满后带噪声微闪 + 闪电时增亮
150
- const glowLvl =
151
- interpolate(frame, [FILL_START, FILL_END], [0, 1], {
152
- extrapolateLeft: 'clamp',
153
- extrapolateRight: 'clamp',
154
- }) *
155
- (0.82 + 0.18 * noise) +
156
- boltBoost;
157
-
158
- // 软边遮罩:辉光层的填充边缘不生硬
159
- const softMask = (soft: number): string | undefined =>
160
- p >= 1
161
- ? undefined
162
- : `linear-gradient(90deg, #000 0%, #000 ${at(pPct - soft)}, transparent ${at(pPct + soft * 0.6)})`;
163
-
164
- const lineStyle: React.CSSProperties = {
165
- fontFamily: FONT,
166
- fontWeight: 700,
167
- fontStyle: 'italic',
168
- fontSize: 92,
169
- letterSpacing: -1,
170
- lineHeight: 1.28,
171
- color: '#ffffff',
172
- whiteSpace: 'nowrap',
173
- };
174
-
175
- const gradText: React.CSSProperties = {
176
- position: 'absolute',
177
- inset: 0,
178
- backgroundImage: GRAD,
179
- WebkitBackgroundClip: 'text',
180
- backgroundClip: 'text',
181
- color: 'transparent',
182
- };
183
-
184
- return (
185
- <AbsoluteFill
186
- style={{
187
- background: 'radial-gradient(ellipse 70% 70% at 50% 48%, #0d0b14 0%, #07060a 60%, #040405 100%)',
188
- justifyContent: 'center',
189
- alignItems: 'center',
190
- }}
191
- >
192
- <div style={{ position: 'absolute', inset: 0, transform: `scale(${push})` }}>
193
- {/* 词后方环境泛光(大半径,随充能增强) */}
194
- <div
195
- style={{
196
- position: 'absolute',
197
- left: 500,
198
- top: 340,
199
- width: 820,
200
- height: 320,
201
- borderRadius: '50%',
202
- background:
203
- 'radial-gradient(closest-side, rgba(180,110,255,0.6), rgba(255,110,212,0.25) 55%, transparent 78%)',
204
- filter: 'blur(38px)',
205
- opacity: 0.55 * glowLvl,
206
- }}
207
- />
208
- </div>
209
- <div style={{ textAlign: 'center', transform: `scale(${push})` }}>
210
- <div style={{ ...lineStyle, ...lineIn(enter1) }}>
211
- <span style={{ position: 'relative', display: 'inline-block' }}>
212
- <span>Supercharged</span>
213
- {/* AE 式辉光:大半径柔光层(最糊) */}
214
- <Halo mask={softMask(14)} style={{ opacity: 0.55 * glowLvl }}>
215
- <span style={{ ...gradText, filter: 'blur(46px) saturate(1.6)', transform: 'scale(1.05)' }}>Supercharged</span>
216
- </Halo>
217
- {/* 中晕层 */}
218
- <Halo mask={softMask(10)} style={{ opacity: 0.62 * glowLvl }}>
219
- <span style={{ ...gradText, filter: 'blur(18px) saturate(1.4) brightness(1.15)' }}>Supercharged</span>
220
- </Halo>
221
- {/* 近核柔光 */}
222
- <Halo mask={softMask(7)} style={{ opacity: 0.72 * Math.min(1, glowLvl + 0.1) }}>
223
- <span style={{ ...gradText, filter: 'blur(6px) brightness(1.25)' }}>Supercharged</span>
224
- </Halo>
225
- {/* 清晰渐变本体(无模糊,clipPath 硬裁即渐变前沿) */}
226
- <span
227
- aria-hidden
228
- style={{
229
- ...gradText,
230
- clipPath: `inset(-25% ${100 - pPct}% -25% 0)`,
231
- }}
232
- >
233
- Supercharged
234
- </span>
235
- {/* 波前尾迹增亮:刚点亮字符辉光最强,向后衰减到稳态 */}
236
- {trailFade > 0.01 && (
237
- <Halo mask={trailMask} style={{ opacity: 0.95 * trailFade }}>
238
- <span style={{ ...gradText, filter: 'blur(9px) saturate(1.7) brightness(1.7)' }}>Supercharged</span>
239
- </Halo>
240
- )}
241
- {/* 填充头字符过曝亮核(字符形状,非独立光点;仅填充期间;软边 mask 不再出方框) */}
242
- {filling && p < 1 && (
243
- <Halo mask={headMask} style={{ opacity: 0.9 * headFade }}>
244
- <span
245
- style={{
246
- position: 'absolute',
247
- inset: 0,
248
- color: '#fff',
249
- filter: 'blur(3px)',
250
- textShadow: '0 0 22px rgba(255,255,255,0.9), 0 0 55px rgba(216,150,255,0.8)',
251
- }}
252
- >
253
- Supercharged
254
- </span>
255
- </Halo>
256
- )}
257
- {/* 勾连闪电:填充完成后,按排期在字符之间/词上方闪现 */}
258
- <svg
259
- aria-hidden
260
- viewBox="0 0 700 240"
261
- style={{
262
- position: 'absolute',
263
- left: -25,
264
- top: -62,
265
- width: 700,
266
- height: 240,
267
- overflow: 'visible',
268
- pointerEvents: 'none',
269
- }}
270
- >
271
- {active.map((f, i) => {
272
- const b = BOLTS[f.bolt];
273
- const decay = 1 - (frame - f.at) / f.life;
274
- return (
275
- <g key={`${f.at}-${i}`} opacity={Math.min(1, 1.1 * decay)}>
276
- <path
277
- d={b.d}
278
- fill="none"
279
- stroke="rgba(216,60,190,0.65)"
280
- strokeWidth={b.long ? 6 : 4.5}
281
- strokeLinejoin="miter"
282
- style={{ filter: 'blur(6px)' }}
283
- />
284
- <path
285
- d={b.d}
286
- fill="none"
287
- stroke="rgba(235,110,215,0.9)"
288
- strokeWidth={b.long ? 2.4 : 1.9}
289
- strokeLinejoin="miter"
290
- style={{ filter: 'blur(1.5px)' }}
291
- />
292
- <path
293
- d={b.d}
294
- fill="none"
295
- stroke="#ffd8f2"
296
- strokeWidth={b.long ? 1.4 : 1.1}
297
- strokeLinejoin="miter"
298
- />
299
- </g>
300
- );
301
- })}
302
- </svg>
303
- </span>{' '}
304
- <span>product films</span>
305
- </div>
306
- <div style={{ ...lineStyle, ...lineIn(enter2) }}>made with {BRAND.name}</div>
307
- </div>
308
- <Vignette strength={0.5} inner={0.45} color="#000000" />
309
- <Grain opacity={0.07} blend="soft-light" />
310
- </AbsoluteFill>
311
- );
312
- };
1
+ // gradient-word-sweep v3 —— 批次 12 按用户意见微调(v2 结构保留):
2
+ // 1) 闪电偏紫红色 + 线宽调细(约减半);
3
+ // 2) 整体泛光强度略降(各辉光层 opacity 下调);
4
+ // 3) 波前尾迹梯度:刚被点亮的字符辉光最强,随扫过距离衰减到稳态
5
+ // (trailing-window 增亮层,填充结束后淡出到稳态呼吸)。
6
+ // 质感层(改版 v4):
7
+ // a) 修"方框光":辉光层的 mask/clip 原先裁在文字盒上,模糊溢出盒外被一刀切成矩形——
8
+ // 改为所有带模糊的层都放进四周外扩 PAD 的 Halo 盒里,mask 色标用 calc 换算回文字坐标;
9
+ // b) 闪电从 36 次随机事件收成 7 次排期(间隔 ≥9f、同屏 ≤1 道),末次 ~92f 熄灭,尾段留呼吸;
10
+ // c) 入场改两行错峰 blur-slide;整段极缓推近 1→1.025;黑底换带色相的近黑 + 暗角 + 颗粒。
11
+ // 文案:充能词 Supercharged 保留(闪电与辉光按它的字宽排布),标语改成 video-shotcraft 的宣传句。
12
+ import React from 'react';
13
+ import { AbsoluteFill, useCurrentFrame, interpolate, Easing } from 'remotion';
14
+ import { EASE, Grain, Vignette, ramp } from '../../_fixtures/Polish';
15
+ import { BRAND } from '../../_fixtures/Brand';
16
+
17
+ const mulberry32 = (a: number) => () => {
18
+ let t = (a += 0x6d2b79f5);
19
+ t = Math.imul(t ^ (t >>> 15), t | 1);
20
+ t ^= t + Math.imul(t ^ (t >>> 7), t | 61);
21
+ return ((t ^ (t >>> 14)) >>> 0) / 4294967296;
22
+ };
23
+
24
+ const FONT = '"Avenir Next", Futura, "Helvetica Neue", sans-serif';
25
+ // 截图 5:S 偏蓝青 → 中段紫 → 粉 → 尾部琥珀
26
+ const GRAD = 'linear-gradient(92deg, #59c2ff 0%, #9d6bff 32%, #ff6ed4 62%, #ffc46b 100%)';
27
+
28
+ export const GRADIENT_WORD_SWEEP_DURATION = 105;
29
+
30
+ const FILL_START = 12;
31
+ const FILL_END = 30; // 18 帧 ≈ 0.6s,快扫
32
+ const LIGHT_START = FILL_END + 3;
33
+
34
+ // ---------- 种子化噪声与闪电 ----------
35
+ const rand = mulberry32(20260718);
36
+ const FLICKER: number[] = Array.from({ length: 160 }, () => rand());
37
+
38
+ type Bolt = { d: string; long: boolean };
39
+ const makeLongBolt = (r: () => number): Bolt => {
40
+ // 词上方勾连长弧:横跨若干字符,锯齿折线
41
+ const x0 = 30 + r() * 220;
42
+ const x1 = x0 + 160 + r() * 320;
43
+ const yBase = 38 + r() * 42;
44
+ const n = 7 + Math.floor(r() * 4);
45
+ let d = `M ${x0.toFixed(1)} ${(yBase + 26 + r() * 20).toFixed(1)}`;
46
+ for (let i = 1; i <= n; i++) {
47
+ const x = x0 + ((x1 - x0) * i) / n + (r() - 0.5) * 22;
48
+ const arch = Math.sin((i / n) * Math.PI) * -22; // 中段拱起
49
+ const y = yBase + arch + (r() - 0.5) * 30 + (i === n ? 30 + r() * 18 : 0);
50
+ d += ` L ${x.toFixed(1)} ${y.toFixed(1)}`;
51
+ }
52
+ return { d, long: true };
53
+ };
54
+ const makeShortBolt = (r: () => number): Bolt => {
55
+ // 字符之间的短勾连:竖向小锯齿
56
+ const x = 60 + r() * 540;
57
+ const y0 = 72 + r() * 24;
58
+ const y1 = y0 + 55 + r() * 45;
59
+ const n = 4 + Math.floor(r() * 3);
60
+ let d = `M ${x.toFixed(1)} ${y0.toFixed(1)}`;
61
+ for (let i = 1; i <= n; i++) {
62
+ const y = y0 + ((y1 - y0) * i) / n;
63
+ const xx = x + (r() - 0.5) * 30;
64
+ d += ` L ${xx.toFixed(1)} ${y.toFixed(1)}`;
65
+ }
66
+ return { d, long: false };
67
+ };
68
+
69
+ const BOLTS: Bolt[] = Array.from({ length: 16 }, (_, i) =>
70
+ i % 3 === 0 ? makeShortBolt(rand) : makeLongBolt(rand),
71
+ );
72
+ // 闪烁事件:排期而非随机——稀疏零星(同屏 ≤1 道、间隔 ≥9f),末次约 92f 熄灭,留出落定呼吸
73
+ type Flash = { at: number; life: number; bolt: number };
74
+ const FLASH_AT = [2, 12, 22, 33, 43, 52, 56];
75
+ const FLASHES: Flash[] = FLASH_AT.map((d, k) => ({
76
+ at: LIGHT_START + d,
77
+ life: k === FLASH_AT.length - 1 ? 3 : 3 + Math.floor(rand() * 2),
78
+ bolt: (k * 5 + 1) % BOLTS.length,
79
+ }));
80
+
81
+ // 外扩盒:带模糊的辉光层放进四周外扩 PAD 的盒子,mask 不再把溢出的光切成矩形
82
+ const PAD = 90;
83
+ // 文字坐标里的百分比 x → 外扩盒里的 mask 色标
84
+ const at = (x: number) => `calc(${PAD}px + (100% - ${PAD * 2}px) * ${(Math.max(-20, Math.min(120, x)) / 100).toFixed(4)})`;
85
+ const Halo: React.FC<{ mask?: string; style?: React.CSSProperties; children: React.ReactNode }> = ({ mask, style, children }) => (
86
+ <span
87
+ aria-hidden
88
+ style={{
89
+ position: 'absolute',
90
+ left: -PAD,
91
+ top: -PAD,
92
+ right: -PAD,
93
+ bottom: -PAD,
94
+ padding: PAD,
95
+ ...(mask ? { WebkitMaskImage: mask, maskImage: mask } : {}),
96
+ ...style,
97
+ }}
98
+ >
99
+ <span style={{ position: 'relative', display: 'block', width: '100%', height: '100%' }}>{children}</span>
100
+ </span>
101
+ );
102
+
103
+ export const GradientWordSweep: React.FC = () => {
104
+ const frame = useCurrentFrame();
105
+
106
+ // 入场:两行错峰 blur-slide(第二行晚 4f),同一条 snappy 进度驱动 y/blur/opacity
107
+ const enter1 = ramp(frame, 0, 14, EASE.snappy);
108
+ const enter2 = ramp(frame, 4, 14, EASE.snappy);
109
+ const lineIn = (e: number): React.CSSProperties => ({
110
+ opacity: e,
111
+ transform: `translateY(${(1 - e) * 36}px)`,
112
+ filter: e < 0.999 ? `blur(${((1 - e) * 10).toFixed(2)}px)` : undefined,
113
+ });
114
+ // 整段极缓推近(smooth,起止速度为 0)
115
+ const push = 1 + 0.025 * ramp(frame, 0, 104, EASE.smooth);
116
+
117
+ // 快速填充进度
118
+ const p = interpolate(frame, [FILL_START, FILL_END], [0, 1], {
119
+ extrapolateLeft: 'clamp',
120
+ extrapolateRight: 'clamp',
121
+ easing: Easing.out(Easing.quad),
122
+ });
123
+ const pPct = p * 100;
124
+ const filling = frame >= FILL_START && frame <= FILL_END + 4;
125
+ const headFade = interpolate(frame, [FILL_END, FILL_END + 6], [1, 0], {
126
+ extrapolateLeft: 'clamp',
127
+ extrapolateRight: 'clamp',
128
+ });
129
+
130
+ // 波前尾迹:刚点亮字符最亮,向后衰减;填充结束后整体淡出到稳态
131
+ const trailFade = interpolate(frame, [FILL_END, FILL_END + 10], [1, 0], {
132
+ extrapolateLeft: 'clamp',
133
+ extrapolateRight: 'clamp',
134
+ });
135
+ const TRAIL = 34; // 尾迹长度(% 宽度)
136
+ const trailMask =
137
+ `linear-gradient(90deg, transparent 0%, transparent ${at(pPct - TRAIL)}, ` +
138
+ `rgba(0,0,0,0.9) ${at(pPct - 3)}, rgba(0,0,0,0.9) ${at(pPct + 1)}, ` +
139
+ `transparent ${at(pPct + 6)})`;
140
+ // 填充头亮核:只露波前 ~10% 词宽,两侧软边(原 clipPath 硬裁 → 方框)
141
+ const headMask =
142
+ `linear-gradient(90deg, transparent 0%, transparent ${at(pPct - 12)}, #000 ${at(pPct - 6)}, ` +
143
+ `#000 ${at(pPct - 1)}, transparent ${at(pPct + 2)})`;
144
+
145
+ const noise = FLICKER[Math.min(frame, FLICKER.length - 1)];
146
+ // 当前帧活跃闪电
147
+ const active = FLASHES.filter((f) => frame >= f.at && frame < f.at + f.life);
148
+ const boltBoost = active.length > 0 ? 0.35 : 0;
149
+ // 辉光呼吸:填满后带噪声微闪 + 闪电时增亮
150
+ const glowLvl =
151
+ interpolate(frame, [FILL_START, FILL_END], [0, 1], {
152
+ extrapolateLeft: 'clamp',
153
+ extrapolateRight: 'clamp',
154
+ }) *
155
+ (0.82 + 0.18 * noise) +
156
+ boltBoost;
157
+
158
+ // 软边遮罩:辉光层的填充边缘不生硬
159
+ const softMask = (soft: number): string | undefined =>
160
+ p >= 1
161
+ ? undefined
162
+ : `linear-gradient(90deg, #000 0%, #000 ${at(pPct - soft)}, transparent ${at(pPct + soft * 0.6)})`;
163
+
164
+ const lineStyle: React.CSSProperties = {
165
+ fontFamily: FONT,
166
+ fontWeight: 700,
167
+ fontStyle: 'italic',
168
+ fontSize: 92,
169
+ letterSpacing: -1,
170
+ lineHeight: 1.28,
171
+ color: '#ffffff',
172
+ whiteSpace: 'nowrap',
173
+ };
174
+
175
+ const gradText: React.CSSProperties = {
176
+ position: 'absolute',
177
+ inset: 0,
178
+ backgroundImage: GRAD,
179
+ WebkitBackgroundClip: 'text',
180
+ backgroundClip: 'text',
181
+ color: 'transparent',
182
+ };
183
+
184
+ return (
185
+ <AbsoluteFill
186
+ style={{
187
+ background: 'radial-gradient(ellipse 70% 70% at 50% 48%, #0d0b14 0%, #07060a 60%, #040405 100%)',
188
+ justifyContent: 'center',
189
+ alignItems: 'center',
190
+ }}
191
+ >
192
+ <div style={{ position: 'absolute', inset: 0, transform: `scale(${push})` }}>
193
+ {/* 词后方环境泛光(大半径,随充能增强) */}
194
+ <div
195
+ style={{
196
+ position: 'absolute',
197
+ left: 500,
198
+ top: 340,
199
+ width: 820,
200
+ height: 320,
201
+ borderRadius: '50%',
202
+ background:
203
+ 'radial-gradient(closest-side, rgba(180,110,255,0.6), rgba(255,110,212,0.25) 55%, transparent 78%)',
204
+ filter: 'blur(38px)',
205
+ opacity: 0.55 * glowLvl,
206
+ }}
207
+ />
208
+ </div>
209
+ <div style={{ textAlign: 'center', transform: `scale(${push})` }}>
210
+ <div style={{ ...lineStyle, ...lineIn(enter1) }}>
211
+ <span style={{ position: 'relative', display: 'inline-block' }}>
212
+ <span>Supercharged</span>
213
+ {/* AE 式辉光:大半径柔光层(最糊) */}
214
+ <Halo mask={softMask(14)} style={{ opacity: 0.55 * glowLvl }}>
215
+ <span style={{ ...gradText, filter: 'blur(46px) saturate(1.6)', transform: 'scale(1.05)' }}>Supercharged</span>
216
+ </Halo>
217
+ {/* 中晕层 */}
218
+ <Halo mask={softMask(10)} style={{ opacity: 0.62 * glowLvl }}>
219
+ <span style={{ ...gradText, filter: 'blur(18px) saturate(1.4) brightness(1.15)' }}>Supercharged</span>
220
+ </Halo>
221
+ {/* 近核柔光 */}
222
+ <Halo mask={softMask(7)} style={{ opacity: 0.72 * Math.min(1, glowLvl + 0.1) }}>
223
+ <span style={{ ...gradText, filter: 'blur(6px) brightness(1.25)' }}>Supercharged</span>
224
+ </Halo>
225
+ {/* 清晰渐变本体(无模糊,clipPath 硬裁即渐变前沿) */}
226
+ <span
227
+ aria-hidden
228
+ style={{
229
+ ...gradText,
230
+ clipPath: `inset(-25% ${100 - pPct}% -25% 0)`,
231
+ }}
232
+ >
233
+ Supercharged
234
+ </span>
235
+ {/* 波前尾迹增亮:刚点亮字符辉光最强,向后衰减到稳态 */}
236
+ {trailFade > 0.01 && (
237
+ <Halo mask={trailMask} style={{ opacity: 0.95 * trailFade }}>
238
+ <span style={{ ...gradText, filter: 'blur(9px) saturate(1.7) brightness(1.7)' }}>Supercharged</span>
239
+ </Halo>
240
+ )}
241
+ {/* 填充头字符过曝亮核(字符形状,非独立光点;仅填充期间;软边 mask 不再出方框) */}
242
+ {filling && p < 1 && (
243
+ <Halo mask={headMask} style={{ opacity: 0.9 * headFade }}>
244
+ <span
245
+ style={{
246
+ position: 'absolute',
247
+ inset: 0,
248
+ color: '#fff',
249
+ filter: 'blur(3px)',
250
+ textShadow: '0 0 22px rgba(255,255,255,0.9), 0 0 55px rgba(216,150,255,0.8)',
251
+ }}
252
+ >
253
+ Supercharged
254
+ </span>
255
+ </Halo>
256
+ )}
257
+ {/* 勾连闪电:填充完成后,按排期在字符之间/词上方闪现 */}
258
+ <svg
259
+ aria-hidden
260
+ viewBox="0 0 700 240"
261
+ style={{
262
+ position: 'absolute',
263
+ left: -25,
264
+ top: -62,
265
+ width: 700,
266
+ height: 240,
267
+ overflow: 'visible',
268
+ pointerEvents: 'none',
269
+ }}
270
+ >
271
+ {active.map((f, i) => {
272
+ const b = BOLTS[f.bolt];
273
+ const decay = 1 - (frame - f.at) / f.life;
274
+ return (
275
+ <g key={`${f.at}-${i}`} opacity={Math.min(1, 1.1 * decay)}>
276
+ <path
277
+ d={b.d}
278
+ fill="none"
279
+ stroke="rgba(216,60,190,0.65)"
280
+ strokeWidth={b.long ? 6 : 4.5}
281
+ strokeLinejoin="miter"
282
+ style={{ filter: 'blur(6px)' }}
283
+ />
284
+ <path
285
+ d={b.d}
286
+ fill="none"
287
+ stroke="rgba(235,110,215,0.9)"
288
+ strokeWidth={b.long ? 2.4 : 1.9}
289
+ strokeLinejoin="miter"
290
+ style={{ filter: 'blur(1.5px)' }}
291
+ />
292
+ <path
293
+ d={b.d}
294
+ fill="none"
295
+ stroke="#ffd8f2"
296
+ strokeWidth={b.long ? 1.4 : 1.1}
297
+ strokeLinejoin="miter"
298
+ />
299
+ </g>
300
+ );
301
+ })}
302
+ </svg>
303
+ </span>{' '}
304
+ <span>product films</span>
305
+ </div>
306
+ <div style={{ ...lineStyle, ...lineIn(enter2) }}>made with {BRAND.name}</div>
307
+ </div>
308
+ <Vignette strength={0.5} inner={0.45} color="#000000" />
309
+ <Grain opacity={0.07} blend="soft-light" />
310
+ </AbsoluteFill>
311
+ );
312
+ };