dsh-drawai 0.4.2 → 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 (366) hide show
  1. package/README.md +4 -3
  2. package/lib/index.js +7777 -7719
  3. package/lib/motion/asset-pack.js +394 -394
  4. package/lib/motion/assets.js +291 -291
  5. package/lib/motion/demo-assets-lock.js +10 -10
  6. package/lib/motion/mgstyles/vendor/README.md +28 -28
  7. package/lib/motion/mgstyles/vendor/modules/d3/LICENSE +13 -13
  8. package/lib/motion/mgstyles/vendor/modules/d3/dist/d3.min.js +2 -2
  9. package/lib/motion/mgstyles/vendor/modules/opentype.js/LICENSE +20 -20
  10. package/lib/motion/mgstyles/vendor/modules/opentype.js/dist/opentype.mjs +14460 -14460
  11. package/lib/motion/mgstyles/vendor/modules/simplex-noise/LICENSE +21 -21
  12. package/lib/motion/mgstyles/vendor/modules/simplex-noise/dist/esm/simplex-noise.js +465 -465
  13. package/lib/motion/mgstyles/vendor/modules/topojson-client/LICENSE +13 -13
  14. package/lib/motion/mgstyles/vendor/modules/topojson-client/dist/topojson-client.min.js +2 -2
  15. package/lib/motion/render.js +179 -179
  16. package/lib/motion/shotcraft/upstream/SKILL.md +286 -286
  17. package/lib/motion/shotcraft/upstream/assets/lib/Caption.tsx +54 -54
  18. package/lib/motion/shotcraft/upstream/assets/lib/ClipCard.tsx +200 -200
  19. package/lib/motion/shotcraft/upstream/assets/lib/DigitRoll.tsx +45 -45
  20. package/lib/motion/shotcraft/upstream/assets/lib/FlashCut.tsx +20 -20
  21. package/lib/motion/shotcraft/upstream/assets/lib/FlatPanel.tsx +65 -65
  22. package/lib/motion/shotcraft/upstream/assets/lib/PageCam.tsx +151 -151
  23. package/lib/motion/shotcraft/upstream/assets/lib/VerticalTicker.tsx +129 -129
  24. package/lib/motion/shotcraft/upstream/assets/lib/helpers/camera.tsx +75 -75
  25. package/lib/motion/shotcraft/upstream/assets/lib/helpers/motion.ts +40 -40
  26. package/lib/motion/shotcraft/upstream/assets/lib/helpers/rand.ts +11 -11
  27. package/lib/motion/shotcraft/upstream/assets/lib/helpers/shake.ts +10 -10
  28. package/lib/motion/shotcraft/upstream/assets/scripts/build-readme-cover.mjs +49 -49
  29. package/lib/motion/shotcraft/upstream/assets/scripts/capture-template.mjs +210 -210
  30. package/lib/motion/shotcraft/upstream/assets/scripts/sfx-source.py +423 -423
  31. package/lib/motion/shotcraft/upstream/assets/scripts/smoke-render-demos.py +170 -170
  32. package/lib/motion/shotcraft/upstream/assets/scripts/test_sfx_source.py +157 -157
  33. package/lib/motion/shotcraft/upstream/demos/README.md +120 -120
  34. package/lib/motion/shotcraft/upstream/demos/_fixtures/Brand.tsx +112 -112
  35. package/lib/motion/shotcraft/upstream/demos/_fixtures/Fixtures.tsx +647 -647
  36. package/lib/motion/shotcraft/upstream/demos/_fixtures/Look.tsx +316 -316
  37. package/lib/motion/shotcraft/upstream/demos/_fixtures/Motion.tsx +82 -82
  38. package/lib/motion/shotcraft/upstream/demos/_fixtures/PageCam2D.tsx +115 -115
  39. package/lib/motion/shotcraft/upstream/demos/_fixtures/Polish.tsx +243 -243
  40. package/lib/motion/shotcraft/upstream/demos/_textures/live-layout.json +388 -388
  41. package/lib/motion/shotcraft/upstream/demos/camera/basic-3d-scene/Basic3DScene.tsx +250 -250
  42. package/lib/motion/shotcraft/upstream/demos/camera/crash-zoom-punch/CrashImpactReal.tsx +305 -305
  43. package/lib/motion/shotcraft/upstream/demos/camera/crash-zoom-punch/CrashZoomReal.tsx +246 -246
  44. package/lib/motion/shotcraft/upstream/demos/camera/cursor-flyover/CursorFlyover.tsx +390 -390
  45. package/lib/motion/shotcraft/upstream/demos/camera/depth-layer-moves/MultiplaneReal.tsx +138 -138
  46. package/lib/motion/shotcraft/upstream/demos/camera/graze-face-tour/GrazeFaceTour.tsx +542 -542
  47. package/lib/motion/shotcraft/upstream/demos/camera/overhead-camera-moves/OverheadTabletopDrop.tsx +315 -315
  48. package/lib/motion/shotcraft/upstream/demos/camera/overhead-camera-moves/TiltReveal.tsx +299 -299
  49. package/lib/motion/shotcraft/upstream/demos/camera/space-camera-moves/DroneDiveLanding.tsx +173 -173
  50. package/lib/motion/shotcraft/upstream/demos/camera/space-camera-moves/ExplodedView.tsx +348 -348
  51. package/lib/motion/shotcraft/upstream/demos/camera/steep-tilt-glide/SteepTiltGlide.tsx +366 -366
  52. package/lib/motion/shotcraft/upstream/demos/camera/tension-camera-moves/BulletTimeFreezeOrbit.tsx +279 -279
  53. package/lib/motion/shotcraft/upstream/demos/camera/tension-camera-moves/PullBackIsolation.tsx +184 -184
  54. package/lib/motion/shotcraft/upstream/demos/camera/terminal-3d/Terminal3D.tsx +390 -390
  55. package/lib/motion/shotcraft/upstream/demos/data/before-after-slider-scrub/BeforeAfterSliderScrub.tsx +155 -155
  56. package/lib/motion/shotcraft/upstream/demos/data/chart-live-moves/AxisRescaleShockV2.tsx +303 -303
  57. package/lib/motion/shotcraft/upstream/demos/data/chart-live-moves/OscilloscopeStreamV2.tsx +290 -290
  58. package/lib/motion/shotcraft/upstream/demos/data/chart-live-moves/UnitDotSwarmRegroupV2.tsx +278 -278
  59. package/lib/motion/shotcraft/upstream/demos/data/gauge-readout-moves/NeedleSweepSelftest.tsx +307 -307
  60. package/lib/motion/shotcraft/upstream/demos/data/gauge-readout-moves/TapeScrollFixedPointer.tsx +215 -215
  61. package/lib/motion/shotcraft/upstream/demos/data/scroll-brake-moves/BrakeReticleLock.tsx +299 -299
  62. package/lib/motion/shotcraft/upstream/demos/data/scroll-brake-moves/ChangelogScrollBrake.tsx +232 -232
  63. package/lib/motion/shotcraft/upstream/demos/data/timeline-travel/TimelineTravel.tsx +290 -290
  64. package/lib/motion/shotcraft/upstream/demos/effects/assemble-then-type-flyin/AssembleThenTypeFlyin.tsx +273 -273
  65. package/lib/motion/shotcraft/upstream/demos/effects/aurora-bloom-bg-flip/AuroraBloomBgFlip.tsx +167 -167
  66. package/lib/motion/shotcraft/upstream/demos/effects/brand-frame-snap/BrandFrameSnap.tsx +536 -536
  67. package/lib/motion/shotcraft/upstream/demos/effects/fui-hud-moves/ReticleLockOn.tsx +164 -164
  68. package/lib/motion/shotcraft/upstream/demos/effects/glow-flyline-moves/FlylineArc.tsx +175 -175
  69. package/lib/motion/shotcraft/upstream/demos/effects/glow-flyline-moves/GlowOrbAmbient.tsx +197 -197
  70. package/lib/motion/shotcraft/upstream/demos/effects/glow-flyline-moves/OrbFlylineRelay.tsx +241 -241
  71. package/lib/motion/shotcraft/upstream/demos/effects/icon-performance-moves/AttentionBounce.tsx +279 -279
  72. package/lib/motion/shotcraft/upstream/demos/effects/impact-feedback/AnimeImpact.tsx +230 -230
  73. package/lib/motion/shotcraft/upstream/demos/effects/impact-feedback/HitCounter.tsx +345 -345
  74. package/lib/motion/shotcraft/upstream/demos/effects/light-play-moves/SheenSweepRetry.tsx +275 -275
  75. package/lib/motion/shotcraft/upstream/demos/effects/light-play-moves/SpotlightSweepReveal.tsx +229 -229
  76. package/lib/motion/shotcraft/upstream/demos/effects/radial-ripple-phone-chips/RadialRipplePhoneChips.tsx +312 -312
  77. package/lib/motion/shotcraft/upstream/demos/effects/riso-print-hits/RisoMisregistrationHit.tsx +222 -222
  78. package/lib/motion/shotcraft/upstream/demos/effects/scan-bracket-sweep/ScanBracketSweep.tsx +295 -295
  79. package/lib/motion/shotcraft/upstream/demos/effects/scanline-annotate-focus/ScanlineAnnotateFocus.tsx +329 -329
  80. package/lib/motion/shotcraft/upstream/demos/effects/scanline-assemble-flyin/ScanlineAssembleFlyin.tsx +315 -315
  81. package/lib/motion/shotcraft/upstream/demos/effects/slam-entrance-moves/ImpactBurstKit.tsx +264 -264
  82. package/lib/motion/shotcraft/upstream/demos/effects/slam-entrance-moves/KanadaPerspectiveSnap.tsx +260 -260
  83. package/lib/motion/shotcraft/upstream/demos/effects/slam-entrance-moves/ScoreSlam.tsx +263 -263
  84. package/lib/motion/shotcraft/upstream/demos/effects/spotlight-sweep-moves/CornerSpotlightReveal.tsx +123 -123
  85. package/lib/motion/shotcraft/upstream/demos/effects/spotlight-sweep-moves/GlowWakeSleepPanel.tsx +187 -187
  86. package/lib/motion/shotcraft/upstream/demos/effects/spotlight-sweep-moves/SlideSpotlightPan.tsx +175 -175
  87. package/lib/motion/shotcraft/upstream/demos/interaction/autolayout-gap-dial/AutolayoutGapDial.tsx +305 -305
  88. package/lib/motion/shotcraft/upstream/demos/interaction/canvas-materialize-moves/DiagramCascadeBuild.tsx +350 -350
  89. package/lib/motion/shotcraft/upstream/demos/interaction/canvas-materialize-moves/PanelToCanvasMaterialize.tsx +352 -352
  90. package/lib/motion/shotcraft/upstream/demos/interaction/chip-grid-single-select-blackout/ChipGridSingleSelectBlackout.tsx +218 -218
  91. package/lib/motion/shotcraft/upstream/demos/interaction/collab-cursor-moves/CursorCastEnsemble.tsx +297 -297
  92. package/lib/motion/shotcraft/upstream/demos/interaction/glass-pill-dictation-typing/GlassPillDictationTyping.tsx +157 -157
  93. package/lib/motion/shotcraft/upstream/demos/interaction/hashtag-to-pill-materialize/HashtagToPillMaterialize.tsx +218 -218
  94. package/lib/motion/shotcraft/upstream/demos/interaction/picker-carousel-feature-cycle/PickerCarouselFeatureCycle.tsx +202 -202
  95. package/lib/motion/shotcraft/upstream/demos/interaction/segmented-thumb-hero/SegmentedThumbHero.tsx +265 -265
  96. package/lib/motion/shotcraft/upstream/demos/interaction/theme-switch-moves/PaletteThemeRipple.tsx +457 -457
  97. package/lib/motion/shotcraft/upstream/demos/interaction/theme-switch-moves/ThemeSweepToggle.tsx +446 -446
  98. package/lib/motion/shotcraft/upstream/demos/interaction/type-and-filter/TypeAndFilter.tsx +249 -249
  99. package/lib/motion/shotcraft/upstream/demos/interaction/voice-waveform-live/VoiceWaveformLive.tsx +278 -278
  100. package/lib/motion/shotcraft/upstream/demos/opening/crane-rise-reveal/CraneRiseReveal.tsx +332 -332
  101. package/lib/motion/shotcraft/upstream/demos/opening/dataviz-landscape-open/DatavizLandscapeOpen.tsx +358 -358
  102. package/lib/motion/shotcraft/upstream/demos/opening/fracture/Fracture.tsx +201 -201
  103. package/lib/motion/shotcraft/upstream/demos/opening/icon-field-colorize/IconFieldColorize.tsx +200 -200
  104. package/lib/motion/shotcraft/upstream/demos/opening/letterspace-materialize/LetterspaceMaterialize.tsx +208 -208
  105. package/lib/motion/shotcraft/upstream/demos/opening/magician-card-flourish/MagicianCardFlourish.tsx +341 -341
  106. package/lib/motion/shotcraft/upstream/demos/opening/orbit-ring-title-open/OrbitRingTitleOpen.tsx +389 -389
  107. package/lib/motion/shotcraft/upstream/demos/opening/spotlight-hero-card/SpotlightHeroCard.tsx +293 -293
  108. package/lib/motion/shotcraft/upstream/demos/opening/stroke-segment-build/StrokeSegmentBuild.tsx +183 -183
  109. package/lib/motion/shotcraft/upstream/demos/opening/text-as-mask/TextAsMask.tsx +245 -245
  110. package/lib/motion/shotcraft/upstream/demos/outro/grain-dissolve/GrainDissolve.tsx +222 -222
  111. package/lib/motion/shotcraft/upstream/demos/outro/logo-shrink-wordmark-lockup/LogoShrinkWordmarkLockup.tsx +223 -223
  112. package/lib/motion/shotcraft/upstream/demos/outro/neon-triple-marquee/NeonTripleMarquee.tsx +217 -217
  113. package/lib/motion/shotcraft/upstream/demos/outro/outro-group-photo-launch/OutroGroupPhotoLaunch.tsx +343 -343
  114. package/lib/motion/shotcraft/upstream/demos/outro/ui-strip-away-outro/UiStripAwayOutro.tsx +357 -357
  115. package/lib/motion/shotcraft/upstream/demos/outro/ui-to-brand-morph/IconFlipBloomLogo.tsx +187 -187
  116. package/lib/motion/shotcraft/upstream/demos/outro/ui-to-brand-morph/InputMorphsIntoLogo.tsx +333 -333
  117. package/lib/motion/shotcraft/upstream/demos/rhythm/beat-cut-moves/PaparazziFlash.tsx +274 -274
  118. package/lib/motion/shotcraft/upstream/demos/rhythm/beat-step-list-theme-cycle/BeatStepListThemeCycle.tsx +270 -270
  119. package/lib/motion/shotcraft/upstream/demos/rhythm/panel-grid-moves/ComicPanelSplit.tsx +430 -430
  120. package/lib/motion/shotcraft/upstream/demos/rhythm/quad-split-parallel-scenes/QuadSplitParallelScenes.tsx +252 -252
  121. package/lib/motion/shotcraft/upstream/demos/rhythm/rhythm-interrupt-moves/JumpCutPunchIn.tsx +106 -106
  122. package/lib/motion/shotcraft/upstream/demos/rhythm/sakuga-timing-shift/SakugaTimingShift.tsx +288 -288
  123. package/lib/motion/shotcraft/upstream/demos/rhythm/speed-ramp-freeze/FreezeAnnotateReal.tsx +362 -362
  124. package/lib/motion/shotcraft/upstream/demos/rhythm/trailer-grammar-moves/TrailerBumper.tsx +168 -168
  125. package/lib/motion/shotcraft/upstream/demos/transition/bottom-push-stack-wipe/BottomPushStackWipe.tsx +310 -310
  126. package/lib/motion/shotcraft/upstream/demos/transition/card-flip-reveal/CardFlipReveal.tsx +261 -261
  127. package/lib/motion/shotcraft/upstream/demos/transition/card-flock-tumble/CardFlockTumble.tsx +459 -459
  128. package/lib/motion/shotcraft/upstream/demos/transition/circle-match-iris/CircleMatchIris.tsx +294 -294
  129. package/lib/motion/shotcraft/upstream/demos/transition/gradient-transition/GradientTransition.tsx +161 -161
  130. package/lib/motion/shotcraft/upstream/demos/transition/line-carry-transition/LineCarryTransition.tsx +248 -248
  131. package/lib/motion/shotcraft/upstream/demos/transition/mosaic-reframe/MosaicReframe.tsx +359 -359
  132. package/lib/motion/shotcraft/upstream/demos/transition/page-turn-transitions/BarnDoorSplit.tsx +227 -227
  133. package/lib/motion/shotcraft/upstream/demos/transition/print-texture-transitions/InkBleedReveal.tsx +162 -162
  134. package/lib/motion/shotcraft/upstream/demos/transition/shot-transitions/PortalWipeV2.tsx +248 -248
  135. package/lib/motion/shotcraft/upstream/demos/transition/shot-transitions/WhipBrakeReal.tsx +186 -186
  136. package/lib/motion/shotcraft/upstream/demos/transition/tear-streak-transitions/GlitchDisplace.tsx +355 -355
  137. package/lib/motion/shotcraft/upstream/demos/transition/transition-hidden-cut/InvisibleCut.tsx +272 -272
  138. package/lib/motion/shotcraft/upstream/demos/transition/transition-hidden-cut/LightLeakBurn.tsx +262 -262
  139. package/lib/motion/shotcraft/upstream/demos/transition/transition-hidden-cut/VersusSlam.tsx +217 -217
  140. package/lib/motion/shotcraft/upstream/demos/transition/transition-travel/LetterformZoom.tsx +285 -285
  141. package/lib/motion/shotcraft/upstream/demos/transition/white-flash-logo-simplify-cut/WhiteFlashLogoSimplifyCut.tsx +205 -205
  142. package/lib/motion/shotcraft/upstream/demos/transition/wipe-transitions/BlindsSlice.tsx +178 -178
  143. package/lib/motion/shotcraft/upstream/demos/typography/blur-slide/BlurSlide.tsx +147 -147
  144. package/lib/motion/shotcraft/upstream/demos/typography/brace-expand/BraceExpand.tsx +143 -143
  145. package/lib/motion/shotcraft/upstream/demos/typography/brand-ink-open/BrandInkOpen.tsx +134 -134
  146. package/lib/motion/shotcraft/upstream/demos/typography/countdown-arc-scatter/CountdownArcScatter.tsx +217 -217
  147. package/lib/motion/shotcraft/upstream/demos/typography/flying-words/FlyingWords.tsx +198 -198
  148. package/lib/motion/shotcraft/upstream/demos/typography/glitch-cycle/GlitchCycle.tsx +221 -221
  149. package/lib/motion/shotcraft/upstream/demos/typography/gradient-word-sweep/GradientWordSweep.tsx +312 -312
  150. package/lib/motion/shotcraft/upstream/demos/typography/lead-word-zoom-assemble/LeadWordZoomAssemble.tsx +261 -261
  151. package/lib/motion/shotcraft/upstream/demos/typography/marker-underline-title/MarkerUnderlineTitle.tsx +121 -121
  152. package/lib/motion/shotcraft/upstream/demos/typography/outline-word-fill/OutlineWordFill.tsx +153 -153
  153. package/lib/motion/shotcraft/upstream/demos/typography/paper-title-card/PaperTitleCard.tsx +179 -179
  154. package/lib/motion/shotcraft/upstream/demos/typography/pill-chip-slot-cycle-handled/PillChipSlotCycleHandled.tsx +140 -140
  155. package/lib/motion/shotcraft/upstream/demos/typography/pill-slot-cycle/PillSlotCycle.tsx +309 -309
  156. package/lib/motion/shotcraft/upstream/demos/typography/text-column-converge/TextColumnConverge.tsx +191 -191
  157. package/lib/motion/shotcraft/upstream/demos/typography/title-demote-to-label/TitleDemoteToLabel.tsx +292 -292
  158. package/lib/motion/shotcraft/upstream/demos/typography/type-assembly-moves/LetterformDriftAssembly.tsx +135 -135
  159. package/lib/motion/shotcraft/upstream/demos/typography/type-assembly-moves/SplitTextStagger.tsx +124 -124
  160. package/lib/motion/shotcraft/upstream/demos/typography/type-assembly-moves/TextOnPath.tsx +255 -255
  161. package/lib/motion/shotcraft/upstream/demos/typography/type-entrance-moves/LetterDropPhysics.tsx +173 -173
  162. package/lib/motion/shotcraft/upstream/demos/typography/type-rhythm-sync/FontWeightPump.tsx +225 -225
  163. package/lib/motion/shotcraft/upstream/demos/typography/type-rhythm-sync/KaraokeFillSync.tsx +141 -141
  164. package/lib/motion/shotcraft/upstream/demos/typography/typewriter-moves/TypewriterErrorRetype.tsx +137 -137
  165. package/lib/motion/shotcraft/upstream/demos/typography/vertical-word-roll-blur-cycle/VerticalWordRollBlurCycle.tsx +147 -147
  166. package/lib/motion/shotcraft/upstream/demos/typography/word-relay-filmstrip/WordRelayFilmstrip.tsx +409 -409
  167. package/lib/motion/shotcraft/upstream/demos/typography/word-relay-geometry/WordRelayGeometry.tsx +280 -280
  168. package/lib/motion/shotcraft/upstream/demos/ui-entrance/avatar-bracket-carousel/AvatarBracketCarousel.tsx +271 -271
  169. package/lib/motion/shotcraft/upstream/demos/ui-entrance/bezier-source-converge-merge/BezierSourceConvergeMerge.tsx +385 -385
  170. package/lib/motion/shotcraft/upstream/demos/ui-entrance/card-stack/CardStack.tsx +312 -312
  171. package/lib/motion/shotcraft/upstream/demos/ui-entrance/carousel-3d/Carousel3D.tsx +303 -303
  172. package/lib/motion/shotcraft/upstream/demos/ui-entrance/clipcard-looping/ClipCardLooping.tsx +77 -77
  173. package/lib/motion/shotcraft/upstream/demos/ui-entrance/cloner-depth-echo/ClonerDepthEcho.tsx +311 -311
  174. package/lib/motion/shotcraft/upstream/demos/ui-entrance/deck-deal-flyin/DeckDealFlyin.tsx +307 -307
  175. package/lib/motion/shotcraft/upstream/demos/ui-entrance/doc-park-left-pill-deal/DocParkLeftPillDeal.tsx +349 -349
  176. package/lib/motion/shotcraft/upstream/demos/ui-entrance/document-typewriter-reveal/DocumentTypewriterReveal.tsx +255 -255
  177. package/lib/motion/shotcraft/upstream/demos/ui-entrance/draw-svg-trace/DrawSvgTrace.tsx +244 -244
  178. package/lib/motion/shotcraft/upstream/demos/ui-entrance/element-body-moves/ContactShadowLift.tsx +217 -217
  179. package/lib/motion/shotcraft/upstream/demos/ui-entrance/integration-hub-map/IntegrationHubMap.tsx +652 -652
  180. package/lib/motion/shotcraft/upstream/demos/ui-entrance/list-reveal/ListReveal.tsx +153 -153
  181. package/lib/motion/shotcraft/upstream/demos/ui-entrance/list-stack-press/ListStackPress.tsx +238 -238
  182. package/lib/motion/shotcraft/upstream/demos/ui-entrance/neon-frame-forerun/NeonFrameForerun.tsx +324 -324
  183. package/lib/motion/shotcraft/upstream/demos/ui-entrance/neon-frame-orbit-drop/NeonFrameForerunOrbit.tsx +354 -354
  184. package/lib/motion/shotcraft/upstream/demos/ui-entrance/page-waterfall-wall/PageWaterfallWall.tsx +101 -101
  185. package/lib/motion/shotcraft/upstream/demos/ui-entrance/page-waterfall-wall/VerticalTicker.tsx +129 -129
  186. package/lib/motion/shotcraft/upstream/demos/ui-entrance/product-card-progressive-assemble/ProductCardProgressiveAssemble.tsx +297 -297
  187. package/lib/motion/shotcraft/upstream/demos/ui-entrance/radial-wave/RadialWave.tsx +57 -57
  188. package/lib/motion/shotcraft/upstream/demos/ui-entrance/research-card-stack-scroll/ResearchCardStackScroll.tsx +155 -155
  189. package/lib/motion/shotcraft/upstream/demos/ui-entrance/row-embed/RowEmbed.tsx +175 -175
  190. package/lib/motion/shotcraft/upstream/demos/ui-entrance/value-stagger-gradient/ValueStaggerGradient.tsx +153 -153
  191. package/lib/motion/shotcraft/upstream/demos/ui-entrance/wall-reveal-moves/BentoLightUp.tsx +146 -146
  192. package/lib/motion/shotcraft/upstream/demos/ui-entrance/wall-reveal-moves/WireframeDrawOn.tsx +226 -226
  193. package/lib/motion/shotcraft/upstream/gallery/api/library.json +1 -1
  194. package/lib/motion/shotcraft/upstream/references/aesthetic-rules.md +193 -193
  195. package/lib/motion/shotcraft/upstream/references/final-review.md +121 -121
  196. package/lib/motion/shotcraft/upstream/references/guided-free-creation.md +199 -199
  197. package/lib/motion/shotcraft/upstream/references/jianying-export.md +183 -183
  198. package/lib/motion/shotcraft/upstream/references/music-beat-sync.md +257 -257
  199. package/lib/motion/shotcraft/upstream/references/pipeline.md +382 -382
  200. package/lib/motion/shotcraft/upstream/references/publish-upload-post.md +111 -111
  201. package/lib/motion/shotcraft/upstream/references/sequences/promo-energy-arc.md +50 -50
  202. package/lib/motion/shotcraft/upstream/references/sfx-sourcing.md +95 -95
  203. package/lib/motion/shotcraft/upstream/references/shots/camera/basic-3d-scene.md +41 -41
  204. package/lib/motion/shotcraft/upstream/references/shots/camera/crash-zoom-punch.md +52 -52
  205. package/lib/motion/shotcraft/upstream/references/shots/camera/cursor-flyover.md +39 -39
  206. package/lib/motion/shotcraft/upstream/references/shots/camera/depth-layer-moves.md +39 -39
  207. package/lib/motion/shotcraft/upstream/references/shots/camera/graze-face-tour.md +57 -57
  208. package/lib/motion/shotcraft/upstream/references/shots/camera/overhead-camera-moves.md +51 -51
  209. package/lib/motion/shotcraft/upstream/references/shots/camera/space-camera-moves.md +46 -46
  210. package/lib/motion/shotcraft/upstream/references/shots/camera/steep-tilt-glide.md +52 -52
  211. package/lib/motion/shotcraft/upstream/references/shots/camera/tension-camera-moves.md +43 -43
  212. package/lib/motion/shotcraft/upstream/references/shots/camera/terminal-3d.md +42 -42
  213. package/lib/motion/shotcraft/upstream/references/shots/data/before-after-slider-scrub.md +48 -48
  214. package/lib/motion/shotcraft/upstream/references/shots/data/chart-live-moves.md +52 -52
  215. package/lib/motion/shotcraft/upstream/references/shots/data/gauge-readout-moves.md +45 -45
  216. package/lib/motion/shotcraft/upstream/references/shots/data/scroll-brake-moves.md +46 -46
  217. package/lib/motion/shotcraft/upstream/references/shots/data/timeline-travel.md +44 -44
  218. package/lib/motion/shotcraft/upstream/references/shots/effects/assemble-then-type-flyin.md +63 -63
  219. package/lib/motion/shotcraft/upstream/references/shots/effects/aurora-bloom-bg-flip.md +54 -54
  220. package/lib/motion/shotcraft/upstream/references/shots/effects/brand-frame-snap.md +58 -58
  221. package/lib/motion/shotcraft/upstream/references/shots/effects/fui-hud-moves.md +35 -35
  222. package/lib/motion/shotcraft/upstream/references/shots/effects/glow-flyline-moves.md +53 -53
  223. package/lib/motion/shotcraft/upstream/references/shots/effects/icon-performance-moves.md +42 -42
  224. package/lib/motion/shotcraft/upstream/references/shots/effects/impact-feedback.md +50 -50
  225. package/lib/motion/shotcraft/upstream/references/shots/effects/light-play-moves.md +46 -46
  226. package/lib/motion/shotcraft/upstream/references/shots/effects/radial-ripple-phone-chips.md +56 -56
  227. package/lib/motion/shotcraft/upstream/references/shots/effects/riso-print-hits.md +49 -49
  228. package/lib/motion/shotcraft/upstream/references/shots/effects/scan-bracket-sweep.md +50 -50
  229. package/lib/motion/shotcraft/upstream/references/shots/effects/scanline-annotate-focus.md +53 -53
  230. package/lib/motion/shotcraft/upstream/references/shots/effects/scanline-assemble-flyin.md +53 -53
  231. package/lib/motion/shotcraft/upstream/references/shots/effects/slam-entrance-moves.md +55 -55
  232. package/lib/motion/shotcraft/upstream/references/shots/effects/spotlight-sweep-moves.md +52 -52
  233. package/lib/motion/shotcraft/upstream/references/shots/interaction/autolayout-gap-dial.md +60 -60
  234. package/lib/motion/shotcraft/upstream/references/shots/interaction/canvas-materialize-moves.md +57 -57
  235. package/lib/motion/shotcraft/upstream/references/shots/interaction/chip-grid-single-select-blackout.md +51 -51
  236. package/lib/motion/shotcraft/upstream/references/shots/interaction/collab-cursor-moves.md +41 -41
  237. package/lib/motion/shotcraft/upstream/references/shots/interaction/glass-pill-dictation-typing.md +53 -53
  238. package/lib/motion/shotcraft/upstream/references/shots/interaction/hashtag-to-pill-materialize.md +60 -60
  239. package/lib/motion/shotcraft/upstream/references/shots/interaction/picker-carousel-feature-cycle.md +55 -55
  240. package/lib/motion/shotcraft/upstream/references/shots/interaction/segmented-thumb-hero.md +57 -57
  241. package/lib/motion/shotcraft/upstream/references/shots/interaction/theme-switch-moves.md +47 -47
  242. package/lib/motion/shotcraft/upstream/references/shots/interaction/type-and-filter.md +37 -37
  243. package/lib/motion/shotcraft/upstream/references/shots/interaction/voice-waveform-live.md +54 -54
  244. package/lib/motion/shotcraft/upstream/references/shots/opening/brand-ink-open.md +36 -36
  245. package/lib/motion/shotcraft/upstream/references/shots/opening/crane-rise-reveal.md +56 -56
  246. package/lib/motion/shotcraft/upstream/references/shots/opening/dataviz-landscape-open.md +56 -56
  247. package/lib/motion/shotcraft/upstream/references/shots/opening/fracture.md +40 -40
  248. package/lib/motion/shotcraft/upstream/references/shots/opening/icon-field-colorize.md +60 -60
  249. package/lib/motion/shotcraft/upstream/references/shots/opening/letterspace-materialize.md +57 -57
  250. package/lib/motion/shotcraft/upstream/references/shots/opening/magician-card-flourish.md +73 -73
  251. package/lib/motion/shotcraft/upstream/references/shots/opening/orbit-ring-title-open.md +87 -87
  252. package/lib/motion/shotcraft/upstream/references/shots/opening/spotlight-hero-card.md +55 -55
  253. package/lib/motion/shotcraft/upstream/references/shots/opening/stroke-segment-build.md +50 -50
  254. package/lib/motion/shotcraft/upstream/references/shots/opening/text-as-mask.md +59 -59
  255. package/lib/motion/shotcraft/upstream/references/shots/outro/grain-dissolve.md +38 -38
  256. package/lib/motion/shotcraft/upstream/references/shots/outro/logo-shrink-wordmark-lockup.md +38 -38
  257. package/lib/motion/shotcraft/upstream/references/shots/outro/neon-triple-marquee.md +59 -59
  258. package/lib/motion/shotcraft/upstream/references/shots/outro/outro-group-photo-launch.md +39 -39
  259. package/lib/motion/shotcraft/upstream/references/shots/outro/ui-strip-away-outro.md +61 -61
  260. package/lib/motion/shotcraft/upstream/references/shots/outro/ui-to-brand-morph.md +52 -52
  261. package/lib/motion/shotcraft/upstream/references/shots/rhythm/beat-cut-moves.md +50 -50
  262. package/lib/motion/shotcraft/upstream/references/shots/rhythm/beat-step-list-theme-cycle.md +66 -66
  263. package/lib/motion/shotcraft/upstream/references/shots/rhythm/panel-grid-moves.md +43 -43
  264. package/lib/motion/shotcraft/upstream/references/shots/rhythm/quad-split-parallel-scenes.md +38 -38
  265. package/lib/motion/shotcraft/upstream/references/shots/rhythm/rhythm-interrupt-moves.md +38 -38
  266. package/lib/motion/shotcraft/upstream/references/shots/rhythm/sakuga-timing-shift.md +56 -56
  267. package/lib/motion/shotcraft/upstream/references/shots/rhythm/speed-ramp-freeze.md +44 -44
  268. package/lib/motion/shotcraft/upstream/references/shots/rhythm/trailer-grammar-moves.md +38 -38
  269. package/lib/motion/shotcraft/upstream/references/shots/transition/bottom-push-stack-wipe.md +63 -63
  270. package/lib/motion/shotcraft/upstream/references/shots/transition/card-flip-reveal.md +57 -57
  271. package/lib/motion/shotcraft/upstream/references/shots/transition/card-flock-tumble.md +63 -63
  272. package/lib/motion/shotcraft/upstream/references/shots/transition/circle-match-iris.md +58 -58
  273. package/lib/motion/shotcraft/upstream/references/shots/transition/gradient-transition.md +45 -45
  274. package/lib/motion/shotcraft/upstream/references/shots/transition/line-carry-transition.md +55 -55
  275. package/lib/motion/shotcraft/upstream/references/shots/transition/mosaic-reframe.md +49 -49
  276. package/lib/motion/shotcraft/upstream/references/shots/transition/page-turn-transitions.md +42 -42
  277. package/lib/motion/shotcraft/upstream/references/shots/transition/print-texture-transitions.md +42 -42
  278. package/lib/motion/shotcraft/upstream/references/shots/transition/shot-transitions.md +45 -45
  279. package/lib/motion/shotcraft/upstream/references/shots/transition/tear-streak-transitions.md +48 -48
  280. package/lib/motion/shotcraft/upstream/references/shots/transition/transition-hidden-cut.md +55 -55
  281. package/lib/motion/shotcraft/upstream/references/shots/transition/transition-travel.md +43 -43
  282. package/lib/motion/shotcraft/upstream/references/shots/transition/white-flash-logo-simplify-cut.md +41 -41
  283. package/lib/motion/shotcraft/upstream/references/shots/transition/wipe-transitions.md +42 -42
  284. package/lib/motion/shotcraft/upstream/references/shots/typography/blur-slide.md +59 -59
  285. package/lib/motion/shotcraft/upstream/references/shots/typography/brace-expand.md +55 -55
  286. package/lib/motion/shotcraft/upstream/references/shots/typography/countdown-arc-scatter.md +65 -65
  287. package/lib/motion/shotcraft/upstream/references/shots/typography/document-typewriter-reveal.md +42 -42
  288. package/lib/motion/shotcraft/upstream/references/shots/typography/flying-words.md +64 -64
  289. package/lib/motion/shotcraft/upstream/references/shots/typography/glitch-cycle.md +64 -64
  290. package/lib/motion/shotcraft/upstream/references/shots/typography/gradient-word-sweep.md +54 -54
  291. package/lib/motion/shotcraft/upstream/references/shots/typography/lead-word-zoom-assemble.md +91 -91
  292. package/lib/motion/shotcraft/upstream/references/shots/typography/marker-underline-title.md +51 -51
  293. package/lib/motion/shotcraft/upstream/references/shots/typography/outline-word-fill.md +66 -66
  294. package/lib/motion/shotcraft/upstream/references/shots/typography/paper-title-card.md +38 -38
  295. package/lib/motion/shotcraft/upstream/references/shots/typography/pill-chip-slot-cycle-handled.md +66 -66
  296. package/lib/motion/shotcraft/upstream/references/shots/typography/pill-slot-cycle.md +58 -58
  297. package/lib/motion/shotcraft/upstream/references/shots/typography/text-column-converge.md +61 -61
  298. package/lib/motion/shotcraft/upstream/references/shots/typography/title-demote-to-label.md +64 -64
  299. package/lib/motion/shotcraft/upstream/references/shots/typography/type-assembly-moves.md +45 -45
  300. package/lib/motion/shotcraft/upstream/references/shots/typography/type-entrance-moves.md +41 -41
  301. package/lib/motion/shotcraft/upstream/references/shots/typography/type-rhythm-sync.md +51 -51
  302. package/lib/motion/shotcraft/upstream/references/shots/typography/typewriter-moves.md +42 -42
  303. package/lib/motion/shotcraft/upstream/references/shots/typography/vertical-word-roll-blur-cycle.md +63 -63
  304. package/lib/motion/shotcraft/upstream/references/shots/typography/word-relay-filmstrip.md +57 -57
  305. package/lib/motion/shotcraft/upstream/references/shots/typography/word-relay-geometry.md +75 -75
  306. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/avatar-bracket-carousel.md +59 -59
  307. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/bezier-source-converge-merge.md +67 -67
  308. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/card-stack.md +60 -60
  309. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/carousel-3d.md +66 -66
  310. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/cloner-depth-echo.md +40 -40
  311. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/deck-deal-flyin.md +45 -45
  312. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/doc-park-left-pill-deal.md +62 -62
  313. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/draw-svg-trace.md +55 -55
  314. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/element-body-moves.md +37 -37
  315. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/integration-hub-map.md +55 -55
  316. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/list-reveal.md +50 -50
  317. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/list-stack-press.md +43 -43
  318. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/neon-frame-forerun.md +55 -55
  319. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/neon-frame-orbit-drop.md +51 -51
  320. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/page-waterfall-wall.md +51 -51
  321. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/product-card-progressive-assemble.md +56 -56
  322. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/radial-wave.md +49 -49
  323. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/research-card-stack-scroll.md +57 -57
  324. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/row-embed.md +36 -36
  325. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/value-stagger-gradient.md +64 -64
  326. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/wall-reveal-moves.md +47 -47
  327. package/lib/motion/shotcraft/upstream/references/sound-design.md +170 -170
  328. package/lib/motion/shotcraft/upstream/references/workbench.md +157 -157
  329. package/lib/motion/shotcraft/upstream/template/TEMPLATE.md +103 -103
  330. package/lib/motion/shotcraft/upstream/template/THEMES.md +44 -44
  331. package/lib/motion/shotcraft/upstream/template/package.json +20 -20
  332. package/lib/motion/shotcraft/upstream/template/remotion.config.ts +6 -6
  333. package/lib/motion/shotcraft/upstream/template/src/Root.tsx +17 -17
  334. package/lib/motion/shotcraft/upstream/template/src/aifl/Caption.tsx +65 -65
  335. package/lib/motion/shotcraft/upstream/template/src/aifl/DigitRoll.tsx +48 -48
  336. package/lib/motion/shotcraft/upstream/template/src/aifl/FlashCut.tsx +24 -24
  337. package/lib/motion/shotcraft/upstream/template/src/aifl/Main.tsx +192 -192
  338. package/lib/motion/shotcraft/upstream/template/src/aifl/PaperTitleCard.tsx +111 -111
  339. package/lib/motion/shotcraft/upstream/template/src/aifl/live/PageCam.tsx +150 -150
  340. package/lib/motion/shotcraft/upstream/template/src/aifl/live/SceneDetail.tsx +158 -158
  341. package/lib/motion/shotcraft/upstream/template/src/aifl/live/SceneFlyIn.tsx +468 -468
  342. package/lib/motion/shotcraft/upstream/template/src/aifl/live/SceneOpen.tsx +552 -552
  343. package/lib/motion/shotcraft/upstream/template/src/aifl/live/SceneOutroLive.tsx +411 -411
  344. package/lib/motion/shotcraft/upstream/template/src/aifl/live/ScenePapers.tsx +200 -200
  345. package/lib/motion/shotcraft/upstream/template/src/aifl/live/SceneWbr.tsx +324 -324
  346. package/lib/motion/shotcraft/upstream/template/src/aifl/live-layout.json +388 -388
  347. package/lib/motion/shotcraft/upstream/template/src/index.ts +4 -4
  348. package/lib/motion/shotcraft/upstream/template/src/themes/ThemedFilm.tsx +7 -7
  349. package/lib/motion/shotcraft/upstream/template/src/themes/manifest.tsx +68 -68
  350. package/lib/motion/shotcraft/upstream/template/src/themes/palette-assets.json +1 -1
  351. package/lib/motion/shotcraft/upstream/template/src/themes/palette-assets.ts +24 -24
  352. package/lib/motion/shotcraft/upstream/template/src/themes/palettes.json +74 -74
  353. package/lib/motion/shotcraft/upstream/template/src/themes/visual-theme.tsx +91 -91
  354. package/lib/motion/shotcraft/upstream/template/src/workbench.ts +213 -213
  355. package/lib/motion/shotcraft/upstream/template/tsconfig.json +15 -15
  356. package/lib/motion/style-frames.js +306 -306
  357. package/lib/motion/sync.js +214 -214
  358. package/lib/motion-project.js +105 -105
  359. package/lib/motion-render-worker.js +174 -174
  360. package/lib/routing/router.js +222 -222
  361. package/lib/routing/vendor/README.md +96 -96
  362. package/lib/routing/vendor/libavoid-routing.js +753 -753
  363. package/lib/routing/vendor/libavoid.min.js +59 -59
  364. package/lib/video-trace-pool.js +128 -128
  365. package/package.json +1 -1
  366. package/LICENSE +0 -4175
@@ -1,153 +1,153 @@
1
- // value-stagger-gradient — Value Stagger 数值梯度(motion-lab 定稿转原生 Remotion)
2
- // stagger 不只错开时间,还把属性值在 N 个元素上铺成梯度:16 根柱入场时
3
- // delay=stagger(时间),同时高度/色相/模糊都是 stagger([from,to]) 的数值梯度;
4
- // 第二拍换 from:'center',脉冲幅度以中心为原点重新铺开。
5
- // 设计坐标 480×270(DesignStage zoom 放大,按目标分辨率栅格化),参数表数值以此坐标系标定。
6
- // 质感改版:
7
- // - 柱子改用 height 生长(底部锚定)而非 scaleY,圆角不再被压扁;顶部受光高光 + 地面倒影 + 基线刻度;
8
- // - 代码字幕做成语法着色的代码条(≥38px 输出字高),两拍之间上下交叉换句,不再硬切;
9
- // - 柱群与代码条整体居中构图;带色相的深底 + 柱群下方柔光 + 暗角 + 颗粒(原生分辨率)。
10
- import React from 'react';
11
- import { AbsoluteFill } from 'remotion';
12
- import { DesignStage, E, lerp, seg, useT } from '../../_fixtures/Motion';
13
- import { EASE, FONT, Grain, Vignette } from '../../_fixtures/Polish';
14
-
15
- export const VALUE_STAGGER_GRADIENT_DURATION = 150; // 5000ms @30fps
16
-
17
- // 数值梯度 util(等价 stagger([a,b]) 的 value 模式)
18
- const staggerVal = (i: number, n: number, a: number, b: number, ease?: (x: number) => number) => {
19
- let k = n <= 1 ? 0 : i / (n - 1);
20
- if (ease) k = ease(k);
21
- return lerp(k, a, b);
22
- };
23
-
24
- const N = 16;
25
- const C = (N - 1) / 2;
26
- const BARS = Array.from({ length: N }, (_, i) => ({
27
- i,
28
- hue: staggerVal(i, N, 200, 320), // 数值梯度:色相铺开
29
- hMax: staggerVal(i, N, 92, 32), // 数值梯度:高度 1→0.35
30
- distC: Math.abs(i - C) / C,
31
- }));
32
-
33
- const BASE_Y = 196; // 基线(设计 px)
34
- const SWITCH = 0.52; // 两拍之间换代码句
35
-
36
- // 语法着色片段:[文本, 颜色]
37
- const KEY = '#9aa3bd';
38
- const FN = '#c9b3ff';
39
- const NUM = '#86d4ff';
40
- const STR = '#f3b58c';
41
- const PUN = '#5f6782';
42
- type Tok = [string, string];
43
- const LINE1: Tok[] = [
44
- ['scale', KEY], [': ', PUN], ['stagger', FN], ['([', PUN], ['1', NUM], [', ', PUN], ['0.35', NUM], ['])', PUN],
45
- [' hue', KEY], [': ', PUN], ['stagger', FN], ['([', PUN], ['200', NUM], [', ', PUN], ['320', NUM], ['])', PUN],
46
- ];
47
- const LINE2: Tok[] = [
48
- ['pulse', KEY], [': ', PUN], ['stagger', FN], ['([', PUN], ['.06', NUM], [', ', PUN], ['.42', NUM], ['], { ', PUN],
49
- ['from', KEY], [': ', PUN], ["'center'", STR], [' })', PUN],
50
- ];
51
-
52
- const Code: React.FC<{ toks: Tok[]; style: React.CSSProperties }> = ({ toks, style }) => (
53
- <div style={{ position: 'absolute', left: 0, right: 0, textAlign: 'center', whiteSpace: 'pre', ...style }}>
54
- {toks.map(([s, c], k) => (
55
- <span key={k} style={{ color: c }}>{s}</span>
56
- ))}
57
- </div>
58
- );
59
-
60
- export const ValueStaggerGradient: React.FC = () => {
61
- const t = useT();
62
- // 代码条:入场淡入上浮;两拍间旧句上移淡出、新句自下而上替入(≈5f 交叉)
63
- const capIn = seg(t, 0.03, 0.12, EASE.out);
64
- const sw = seg(t, SWITCH - 0.018, SWITCH + 0.022, EASE.smooth);
65
- // 柱群下方的柔光随第一拍铺开、第二拍脉冲略增
66
- const pulseC = Math.sin(seg(t, 0.56, 0.74) * Math.PI);
67
- return (
68
- <AbsoluteFill style={{ background: 'linear-gradient(180deg, #0e0f15 0%, #0a0b0f 100%)' }}>
69
- <AbsoluteFill
70
- style={{
71
- background: 'radial-gradient(ellipse 46% 34% at 50% 66%, rgba(120,110,255,0.16), rgba(120,110,255,0) 70%)',
72
- opacity: 0.35 + 0.65 * seg(t, 0.06, 0.5) + pulseC * 0.3,
73
- }}
74
- />
75
- <DesignStage bg="transparent" raster="zoom">
76
- <div style={{ position: 'absolute', inset: 0, overflow: 'hidden', fontFamily: FONT.mono }}>
77
- {/* 代码条 */}
78
- <div
79
- style={{
80
- position: 'absolute', left: '50%', top: 40, height: 22, width: 316, marginLeft: -158, borderRadius: 7,
81
- background: 'rgba(255,255,255,0.035)', boxShadow: 'inset 0 0 0 0.25px rgba(255,255,255,0.12), inset 0 0.25px 0 rgba(255,255,255,0.08)',
82
- overflow: 'hidden', opacity: capIn, transform: `translateY(${lerp(capIn, 4, 0).toFixed(3)}px)`,
83
- }}
84
- >
85
- <Code toks={LINE1} style={{ top: 5.6, fontSize: 9.5, lineHeight: '11px', opacity: 1 - sw, transform: `translateY(${(-sw * 12).toFixed(3)}px)` }} />
86
- <Code toks={LINE2} style={{ top: 5.6, fontSize: 9.5, lineHeight: '11px', opacity: sw, transform: `translateY(${((1 - sw) * 12).toFixed(3)}px)` }} />
87
- </div>
88
- {/* 基线 + 刻度 */}
89
- <div style={{ position: 'absolute', left: '7%', right: '7%', top: BASE_Y + 0.5, height: 0.3, background: 'rgba(255,255,255,0.12)', opacity: seg(t, 0.02, 0.1) }} />
90
- {BARS.map(({ i, hue, hMax, distC }) => {
91
- // 拍一:时间 stagger(linear from first)× 数值梯度(y/blur 同时铺开)
92
- const d = i * 0.02;
93
- const e = seg(t, 0.06 + d, 0.28 + d, E.outCubic);
94
- const y0 = staggerVal(i, N, 46, 14); // 位移量本身也是梯度
95
- const b0 = staggerVal(i, N, 8, 2); // 模糊量梯度
96
- // 拍二:from:'center' —— 波与幅度都以中心为原点铺开
97
- const w = seg(t, 0.56 + distC * 0.13, 0.74 + distC * 0.13);
98
- const pulse = Math.sin(w * Math.PI);
99
- const amp = lerp(1 - distC, 0.06, 0.42); // 幅度梯度:中心最大
100
- const h = hMax * e * (1 + pulse * amp);
101
- const x = `${8 + i * 5.4}%`;
102
- const blur = (1 - e) * b0;
103
- const bright = 1 + pulse * 0.55;
104
- const body = `linear-gradient(180deg, hsl(${hue},80%,70%) 0%, hsl(${hue},72%,56%) 45%, hsl(${hue},66%,40%) 100%)`;
105
- return (
106
- <React.Fragment key={i}>
107
- {/* 刻度 */}
108
- <div style={{ position: 'absolute', top: BASE_Y + 3, left: `${8 + i * 5.4 + 1.7}%`, width: 0.3, height: 2.5, background: 'rgba(255,255,255,0.18)', opacity: seg(t, 0.02, 0.1) }} />
109
- {/* 柱体(底部锚定,height 生长) */}
110
- <div
111
- style={{
112
- position: 'absolute',
113
- top: BASE_Y - h,
114
- left: x,
115
- width: '3.4%',
116
- height: h,
117
- borderRadius: 4,
118
- background: body,
119
- boxShadow: `inset 0 0.5px 0 rgba(255,255,255,0.45), inset 0 0 0 0.25px rgba(255,255,255,0.10), 0 0 10px hsla(${hue},85%,58%,${(0.18 + pulse * 0.22).toFixed(3)})`,
120
- opacity: e,
121
- filter: `${blur > 0.02 ? `blur(${blur.toFixed(2)}px) ` : ''}brightness(${bright.toFixed(3)})`,
122
- transform: `translateY(${((1 - e) * y0).toFixed(3)}px)`,
123
- overflow: 'hidden',
124
- }}
125
- >
126
- {/* 左侧受光条 */}
127
- <div style={{ position: 'absolute', left: 0, top: 0, bottom: 0, width: '34%', background: 'linear-gradient(90deg, rgba(255,255,255,0.16), rgba(255,255,255,0))' }} />
128
- </div>
129
- {/* 地面倒影:翻转、渐隐、略糊 */}
130
- <div
131
- style={{
132
- position: 'absolute',
133
- top: BASE_Y + 1.5,
134
- left: x,
135
- width: '3.4%',
136
- height: h * 0.45,
137
- borderRadius: 4,
138
- background: `linear-gradient(180deg, hsla(${hue},70%,52%,0.32), hsla(${hue},70%,40%,0))`,
139
- opacity: e * 0.8,
140
- filter: `blur(${(0.8 + blur).toFixed(2)}px) brightness(${bright.toFixed(3)})`,
141
- transform: `translateY(${((1 - e) * y0 * 0.4).toFixed(3)}px)`,
142
- }}
143
- />
144
- </React.Fragment>
145
- );
146
- })}
147
- </div>
148
- </DesignStage>
149
- <Vignette strength={0.5} color="#000000" inner={0.45} />
150
- <Grain opacity={0.08} blend="soft-light" />
151
- </AbsoluteFill>
152
- );
153
- };
1
+ // value-stagger-gradient — Value Stagger 数值梯度(motion-lab 定稿转原生 Remotion)
2
+ // stagger 不只错开时间,还把属性值在 N 个元素上铺成梯度:16 根柱入场时
3
+ // delay=stagger(时间),同时高度/色相/模糊都是 stagger([from,to]) 的数值梯度;
4
+ // 第二拍换 from:'center',脉冲幅度以中心为原点重新铺开。
5
+ // 设计坐标 480×270(DesignStage zoom 放大,按目标分辨率栅格化),参数表数值以此坐标系标定。
6
+ // 质感改版:
7
+ // - 柱子改用 height 生长(底部锚定)而非 scaleY,圆角不再被压扁;顶部受光高光 + 地面倒影 + 基线刻度;
8
+ // - 代码字幕做成语法着色的代码条(≥38px 输出字高),两拍之间上下交叉换句,不再硬切;
9
+ // - 柱群与代码条整体居中构图;带色相的深底 + 柱群下方柔光 + 暗角 + 颗粒(原生分辨率)。
10
+ import React from 'react';
11
+ import { AbsoluteFill } from 'remotion';
12
+ import { DesignStage, E, lerp, seg, useT } from '../../_fixtures/Motion';
13
+ import { EASE, FONT, Grain, Vignette } from '../../_fixtures/Polish';
14
+
15
+ export const VALUE_STAGGER_GRADIENT_DURATION = 150; // 5000ms @30fps
16
+
17
+ // 数值梯度 util(等价 stagger([a,b]) 的 value 模式)
18
+ const staggerVal = (i: number, n: number, a: number, b: number, ease?: (x: number) => number) => {
19
+ let k = n <= 1 ? 0 : i / (n - 1);
20
+ if (ease) k = ease(k);
21
+ return lerp(k, a, b);
22
+ };
23
+
24
+ const N = 16;
25
+ const C = (N - 1) / 2;
26
+ const BARS = Array.from({ length: N }, (_, i) => ({
27
+ i,
28
+ hue: staggerVal(i, N, 200, 320), // 数值梯度:色相铺开
29
+ hMax: staggerVal(i, N, 92, 32), // 数值梯度:高度 1→0.35
30
+ distC: Math.abs(i - C) / C,
31
+ }));
32
+
33
+ const BASE_Y = 196; // 基线(设计 px)
34
+ const SWITCH = 0.52; // 两拍之间换代码句
35
+
36
+ // 语法着色片段:[文本, 颜色]
37
+ const KEY = '#9aa3bd';
38
+ const FN = '#c9b3ff';
39
+ const NUM = '#86d4ff';
40
+ const STR = '#f3b58c';
41
+ const PUN = '#5f6782';
42
+ type Tok = [string, string];
43
+ const LINE1: Tok[] = [
44
+ ['scale', KEY], [': ', PUN], ['stagger', FN], ['([', PUN], ['1', NUM], [', ', PUN], ['0.35', NUM], ['])', PUN],
45
+ [' hue', KEY], [': ', PUN], ['stagger', FN], ['([', PUN], ['200', NUM], [', ', PUN], ['320', NUM], ['])', PUN],
46
+ ];
47
+ const LINE2: Tok[] = [
48
+ ['pulse', KEY], [': ', PUN], ['stagger', FN], ['([', PUN], ['.06', NUM], [', ', PUN], ['.42', NUM], ['], { ', PUN],
49
+ ['from', KEY], [': ', PUN], ["'center'", STR], [' })', PUN],
50
+ ];
51
+
52
+ const Code: React.FC<{ toks: Tok[]; style: React.CSSProperties }> = ({ toks, style }) => (
53
+ <div style={{ position: 'absolute', left: 0, right: 0, textAlign: 'center', whiteSpace: 'pre', ...style }}>
54
+ {toks.map(([s, c], k) => (
55
+ <span key={k} style={{ color: c }}>{s}</span>
56
+ ))}
57
+ </div>
58
+ );
59
+
60
+ export const ValueStaggerGradient: React.FC = () => {
61
+ const t = useT();
62
+ // 代码条:入场淡入上浮;两拍间旧句上移淡出、新句自下而上替入(≈5f 交叉)
63
+ const capIn = seg(t, 0.03, 0.12, EASE.out);
64
+ const sw = seg(t, SWITCH - 0.018, SWITCH + 0.022, EASE.smooth);
65
+ // 柱群下方的柔光随第一拍铺开、第二拍脉冲略增
66
+ const pulseC = Math.sin(seg(t, 0.56, 0.74) * Math.PI);
67
+ return (
68
+ <AbsoluteFill style={{ background: 'linear-gradient(180deg, #0e0f15 0%, #0a0b0f 100%)' }}>
69
+ <AbsoluteFill
70
+ style={{
71
+ background: 'radial-gradient(ellipse 46% 34% at 50% 66%, rgba(120,110,255,0.16), rgba(120,110,255,0) 70%)',
72
+ opacity: 0.35 + 0.65 * seg(t, 0.06, 0.5) + pulseC * 0.3,
73
+ }}
74
+ />
75
+ <DesignStage bg="transparent" raster="zoom">
76
+ <div style={{ position: 'absolute', inset: 0, overflow: 'hidden', fontFamily: FONT.mono }}>
77
+ {/* 代码条 */}
78
+ <div
79
+ style={{
80
+ position: 'absolute', left: '50%', top: 40, height: 22, width: 316, marginLeft: -158, borderRadius: 7,
81
+ background: 'rgba(255,255,255,0.035)', boxShadow: 'inset 0 0 0 0.25px rgba(255,255,255,0.12), inset 0 0.25px 0 rgba(255,255,255,0.08)',
82
+ overflow: 'hidden', opacity: capIn, transform: `translateY(${lerp(capIn, 4, 0).toFixed(3)}px)`,
83
+ }}
84
+ >
85
+ <Code toks={LINE1} style={{ top: 5.6, fontSize: 9.5, lineHeight: '11px', opacity: 1 - sw, transform: `translateY(${(-sw * 12).toFixed(3)}px)` }} />
86
+ <Code toks={LINE2} style={{ top: 5.6, fontSize: 9.5, lineHeight: '11px', opacity: sw, transform: `translateY(${((1 - sw) * 12).toFixed(3)}px)` }} />
87
+ </div>
88
+ {/* 基线 + 刻度 */}
89
+ <div style={{ position: 'absolute', left: '7%', right: '7%', top: BASE_Y + 0.5, height: 0.3, background: 'rgba(255,255,255,0.12)', opacity: seg(t, 0.02, 0.1) }} />
90
+ {BARS.map(({ i, hue, hMax, distC }) => {
91
+ // 拍一:时间 stagger(linear from first)× 数值梯度(y/blur 同时铺开)
92
+ const d = i * 0.02;
93
+ const e = seg(t, 0.06 + d, 0.28 + d, E.outCubic);
94
+ const y0 = staggerVal(i, N, 46, 14); // 位移量本身也是梯度
95
+ const b0 = staggerVal(i, N, 8, 2); // 模糊量梯度
96
+ // 拍二:from:'center' —— 波与幅度都以中心为原点铺开
97
+ const w = seg(t, 0.56 + distC * 0.13, 0.74 + distC * 0.13);
98
+ const pulse = Math.sin(w * Math.PI);
99
+ const amp = lerp(1 - distC, 0.06, 0.42); // 幅度梯度:中心最大
100
+ const h = hMax * e * (1 + pulse * amp);
101
+ const x = `${8 + i * 5.4}%`;
102
+ const blur = (1 - e) * b0;
103
+ const bright = 1 + pulse * 0.55;
104
+ const body = `linear-gradient(180deg, hsl(${hue},80%,70%) 0%, hsl(${hue},72%,56%) 45%, hsl(${hue},66%,40%) 100%)`;
105
+ return (
106
+ <React.Fragment key={i}>
107
+ {/* 刻度 */}
108
+ <div style={{ position: 'absolute', top: BASE_Y + 3, left: `${8 + i * 5.4 + 1.7}%`, width: 0.3, height: 2.5, background: 'rgba(255,255,255,0.18)', opacity: seg(t, 0.02, 0.1) }} />
109
+ {/* 柱体(底部锚定,height 生长) */}
110
+ <div
111
+ style={{
112
+ position: 'absolute',
113
+ top: BASE_Y - h,
114
+ left: x,
115
+ width: '3.4%',
116
+ height: h,
117
+ borderRadius: 4,
118
+ background: body,
119
+ boxShadow: `inset 0 0.5px 0 rgba(255,255,255,0.45), inset 0 0 0 0.25px rgba(255,255,255,0.10), 0 0 10px hsla(${hue},85%,58%,${(0.18 + pulse * 0.22).toFixed(3)})`,
120
+ opacity: e,
121
+ filter: `${blur > 0.02 ? `blur(${blur.toFixed(2)}px) ` : ''}brightness(${bright.toFixed(3)})`,
122
+ transform: `translateY(${((1 - e) * y0).toFixed(3)}px)`,
123
+ overflow: 'hidden',
124
+ }}
125
+ >
126
+ {/* 左侧受光条 */}
127
+ <div style={{ position: 'absolute', left: 0, top: 0, bottom: 0, width: '34%', background: 'linear-gradient(90deg, rgba(255,255,255,0.16), rgba(255,255,255,0))' }} />
128
+ </div>
129
+ {/* 地面倒影:翻转、渐隐、略糊 */}
130
+ <div
131
+ style={{
132
+ position: 'absolute',
133
+ top: BASE_Y + 1.5,
134
+ left: x,
135
+ width: '3.4%',
136
+ height: h * 0.45,
137
+ borderRadius: 4,
138
+ background: `linear-gradient(180deg, hsla(${hue},70%,52%,0.32), hsla(${hue},70%,40%,0))`,
139
+ opacity: e * 0.8,
140
+ filter: `blur(${(0.8 + blur).toFixed(2)}px) brightness(${bright.toFixed(3)})`,
141
+ transform: `translateY(${((1 - e) * y0 * 0.4).toFixed(3)}px)`,
142
+ }}
143
+ />
144
+ </React.Fragment>
145
+ );
146
+ })}
147
+ </div>
148
+ </DesignStage>
149
+ <Vignette strength={0.5} color="#000000" inner={0.45} />
150
+ <Grain opacity={0.08} blend="soft-light" />
151
+ </AbsoluteFill>
152
+ );
153
+ };
@@ -1,146 +1,146 @@
1
- import React from 'react';
2
- import { AbsoluteFill, Easing, interpolate, useCurrentFrame } from 'remotion';
3
- import { Card } from '../../_fixtures/Fixtures';
4
- import { BRAND, PITCH, ShotcraftMark } from '../../_fixtures/Brand';
5
- import { Backdrop, FONT, Grain } from '../../_fixtures/Polish';
6
-
7
- // bento-light-up:暗场里 3×2 bento 墙压暗待命,随节拍逐格点亮——
8
- // 边框流光先描一圈(琥珀),格内内容随后提亮上浮弹出;六格全亮后整体微推收住。
9
- // 节拍:0–20 建立(hold) → 每格间隔 12f 依次激活(描边 8f + 内容弹出 8f)
10
- // → ~96f 全亮 → 96–121 scale 1→1.04 缓推 → 121–150 静止收尾。
11
- // 质感改版:
12
- // - 真 bento:两行宽窄互补(600/420/420 ↔ 420/420/600),不再是六张等大格子;
13
- // - 卡面用暗色出版级 Card(tone=dark),暗场品牌段里不再"白卡亮瞎",点亮读作通电而非换色;
14
- // - 流光描边改为"彗星":亮头 + 渐隐尾的描边段跑一圈后收成常亮细边,辉光只在描边上(不外溢成方框);
15
- // - 标题改为眉标 + 主标题的字阶;暗场柔光底(暖色余光)+ 暗角 + 颗粒。
16
- // 品牌:眉标 = video-shotcraft 标志 + 小写字标(琥珀),主标题 = PITCH 口号「Every shot, tuned in one place.」。
17
- export const BENTO_LIGHT_UP_DURATION = 150;
18
-
19
- const AMBER = '#e8b45e';
20
- const FIRST = 20; // 首格激活帧
21
- const GAP = 12; // 格间节拍
22
- const CELL_H = 330;
23
- const GUT = 44;
24
- const U = 480; // 宽窄格基准:宽 1.25U=600,窄 0.875U=420,每行 1440 + 2 道沟(宽窄差再大,卡内字阶会明显不一)
25
- const ROW_W = U * 3 + GUT * 2;
26
- const LEFT = (1920 - ROW_W) / 2;
27
- const TOP = (1080 - (CELL_H * 2 + GUT)) / 2 + 44;
28
- const WIDTHS = [
29
- [1.25, 0.875, 0.875],
30
- [0.875, 0.875, 1.25],
31
- ];
32
- const CELLS = WIDTHS.flatMap((row, r) => {
33
- let x = LEFT;
34
- return row.map((k) => {
35
- const w = k * U;
36
- const c = { x, y: TOP + r * (CELL_H + GUT), w };
37
- x += w + GUT;
38
- return c;
39
- });
40
- });
41
-
42
- const clamp = { extrapolateLeft: 'clamp', extrapolateRight: 'clamp' } as const;
43
-
44
- const Cell: React.FC<{ i: number; frame: number }> = ({ i, frame }) => {
45
- const start = FIRST + i * GAP;
46
- const { x, y, w } = CELLS[i];
47
-
48
- // ① 边框流光:彗星段(长 22% 周长)沿 pathLength=100 跑一圈,8f;随后整圈细边常亮
49
- const draw = interpolate(frame, [start, start + 8], [0, 1], { ...clamp, easing: Easing.out(Easing.cubic) });
50
- // 描完后流光退火:琥珀亮边 → 弱化成常亮细边
51
- const strokeFade = interpolate(frame, [start + 12, start + 26], [1, 0.4], { ...clamp, easing: Easing.out(Easing.quad) });
52
- const ring = interpolate(frame, [start + 2, start + 10], [0, 1], { ...clamp, easing: Easing.out(Easing.quad) });
53
-
54
- // ② 内容提亮 + 上浮弹出:描边过半后接力,8f 弹出(back-out 带一点过冲)
55
- const lit = interpolate(frame, [start + 6, start + 14], [0, 1], { ...clamp, easing: Easing.out(Easing.cubic) });
56
- const rise = interpolate(frame, [start + 6, start + 14], [0, 1], { ...clamp, easing: Easing.bezier(0.3, 1.4, 0.5, 1) });
57
- const opacity = 0.18 + 0.82 * lit;
58
- const ty = 20 * (1 - rise);
59
- // seed 正弦哈希做每格微差(点亮瞬间的辉光强度略有随机感)
60
- const jitter = Math.abs((Math.sin(i * 127.3) * 43758.5453) % 1);
61
- const pulse = lit * (1 - lit) * 4; // 点亮中段最亮的辉光脉冲
62
- const head = 100 * draw; // 彗星头位置(周长百分比)
63
- const TAIL = 22;
64
-
65
- return (
66
- <div style={{ position: 'absolute', left: x, top: y, width: w, height: CELL_H }}>
67
- {/* 暗态卡 + 点亮后的内容(同一张卡,靠 opacity/translateY 提亮浮出) */}
68
- <div style={{ opacity, transform: `translateY(${ty.toFixed(2)}px)`, borderRadius: 14 }}>
69
- <Card w={w} h={CELL_H} seed={i + 1} tone="dark" />
70
- {/* 点亮瞬间卡内一层暖光(裁在圆角内,脉冲后归零) */}
71
- <div style={{
72
- position: 'absolute', inset: 0, borderRadius: 14, pointerEvents: 'none',
73
- background: `radial-gradient(90% 70% at 50% 0%, rgba(232,180,94,${(0.16 * pulse * (0.8 + jitter * 0.4)).toFixed(3)}), rgba(232,180,94,0) 70%)`,
74
- }} />
75
- </div>
76
- {/* 边框流光:SVG rect 描边 */}
77
- {draw > 0 && (
78
- <svg width={w} height={CELL_H} viewBox={`0 0 ${w} ${CELL_H}`} style={{ position: 'absolute', left: 0, top: ty, overflow: 'visible' }}>
79
- <defs>
80
- <filter id={`blu-glow-${i}`} x="-10%" y="-10%" width="120%" height="120%">
81
- <feGaussianBlur stdDeviation={4 + jitter * 2} />
82
- </filter>
83
- </defs>
84
- {/* 常亮细边:随彗星走过逐段出现,退火后保持 */}
85
- <rect
86
- x={0.75} y={0.75} width={w - 1.5} height={CELL_H - 1.5} rx={14} fill="none"
87
- stroke={AMBER} strokeWidth={1.5} pathLength={100} strokeDasharray={100} strokeDashoffset={100 * (1 - draw)}
88
- opacity={ring * strokeFade}
89
- />
90
- {/* 彗星:辉光层 + 亮芯层,跑完一圈后随退火淡去 */}
91
- {[0, 1].map((k) => (
92
- <rect
93
- key={k}
94
- x={1.5} y={1.5} width={w - 3} height={CELL_H - 3} rx={14} fill="none"
95
- stroke={k ? '#ffe3ae' : AMBER}
96
- strokeWidth={k ? 2.5 : 6}
97
- strokeLinecap="round"
98
- pathLength={100}
99
- strokeDasharray={`${TAIL} ${100 - TAIL}`}
100
- strokeDashoffset={TAIL - head}
101
- opacity={(1 - interpolate(frame, [start + 8, start + 16], [0, 1], clamp)) * (k ? 1 : 0.8)}
102
- filter={k ? undefined : `url(#blu-glow-${i})`}
103
- />
104
- ))}
105
- </svg>
106
- )}
107
- </div>
108
- );
109
- };
110
-
111
- export const BentoLightUp: React.FC = () => {
112
- const frame = useCurrentFrame();
113
-
114
- // ③ 六格全亮(~96f)后整体缓推 scale 1→1.04,25f 收住,之后真静止
115
- const push = interpolate(frame, [96, 121], [1, 1.04], { ...clamp, easing: Easing.bezier(0.33, 0, 0.2, 1) });
116
-
117
- // 标题随首格点亮微微提亮,交代场景
118
- const titleLit = interpolate(frame, [FIRST, FIRST + 20], [0.25, 1], { ...clamp, easing: Easing.out(Easing.quad) });
119
- // 全亮后地面暖光稍起
120
- const allLit = interpolate(frame, [FIRST + 5 * GAP + 6, FIRST + 5 * GAP + 30], [0, 1], { ...clamp, easing: Easing.out(Easing.quad) });
121
-
122
- return (
123
- <AbsoluteFill style={{ overflow: 'hidden' }}>
124
- <Backdrop tone="dark" light={{ x: 0.5, y: 0.1 }} accent={AMBER} grain={0} vignette={0.55} />
125
- <AbsoluteFill style={{
126
- background: 'radial-gradient(ellipse 50% 40% at 50% 62%, rgba(232,180,94,0.10), rgba(232,180,94,0) 70%)',
127
- opacity: 0.3 + 0.7 * allLit,
128
- }} />
129
- <div style={{ position: 'absolute', inset: 0, transform: `scale(${push.toFixed(5)})`, transformOrigin: '960px 540px' }}>
130
- <div style={{ position: 'absolute', left: LEFT, top: TOP - 132, fontFamily: FONT.sans, opacity: titleLit }}>
131
- <div style={{ display: 'flex', alignItems: 'center', gap: 9, height: 18 }}>
132
- <ShotcraftMark size={24} tone="dark" />
133
- <span style={{ fontFamily: BRAND.font, fontSize: 17, fontWeight: 700, letterSpacing: '0.03em', color: AMBER, opacity: 0.9, lineHeight: 1 }}>{BRAND.name}</span>
134
- </div>
135
- <div style={{ marginTop: 10, fontSize: 56, fontWeight: 700, letterSpacing: '-0.03em', color: '#f1efe9', lineHeight: 1 }}>
136
- {PITCH.en.taglines[2]}
137
- </div>
138
- </div>
139
- {CELLS.map((_, i) => (
140
- <Cell key={i} i={i} frame={frame} />
141
- ))}
142
- </div>
143
- <Grain opacity={0.08} blend="soft-light" />
144
- </AbsoluteFill>
145
- );
146
- };
1
+ import React from 'react';
2
+ import { AbsoluteFill, Easing, interpolate, useCurrentFrame } from 'remotion';
3
+ import { Card } from '../../_fixtures/Fixtures';
4
+ import { BRAND, PITCH, ShotcraftMark } from '../../_fixtures/Brand';
5
+ import { Backdrop, FONT, Grain } from '../../_fixtures/Polish';
6
+
7
+ // bento-light-up:暗场里 3×2 bento 墙压暗待命,随节拍逐格点亮——
8
+ // 边框流光先描一圈(琥珀),格内内容随后提亮上浮弹出;六格全亮后整体微推收住。
9
+ // 节拍:0–20 建立(hold) → 每格间隔 12f 依次激活(描边 8f + 内容弹出 8f)
10
+ // → ~96f 全亮 → 96–121 scale 1→1.04 缓推 → 121–150 静止收尾。
11
+ // 质感改版:
12
+ // - 真 bento:两行宽窄互补(600/420/420 ↔ 420/420/600),不再是六张等大格子;
13
+ // - 卡面用暗色出版级 Card(tone=dark),暗场品牌段里不再"白卡亮瞎",点亮读作通电而非换色;
14
+ // - 流光描边改为"彗星":亮头 + 渐隐尾的描边段跑一圈后收成常亮细边,辉光只在描边上(不外溢成方框);
15
+ // - 标题改为眉标 + 主标题的字阶;暗场柔光底(暖色余光)+ 暗角 + 颗粒。
16
+ // 品牌:眉标 = video-shotcraft 标志 + 小写字标(琥珀),主标题 = PITCH 口号「Every shot, tuned in one place.」。
17
+ export const BENTO_LIGHT_UP_DURATION = 150;
18
+
19
+ const AMBER = '#e8b45e';
20
+ const FIRST = 20; // 首格激活帧
21
+ const GAP = 12; // 格间节拍
22
+ const CELL_H = 330;
23
+ const GUT = 44;
24
+ const U = 480; // 宽窄格基准:宽 1.25U=600,窄 0.875U=420,每行 1440 + 2 道沟(宽窄差再大,卡内字阶会明显不一)
25
+ const ROW_W = U * 3 + GUT * 2;
26
+ const LEFT = (1920 - ROW_W) / 2;
27
+ const TOP = (1080 - (CELL_H * 2 + GUT)) / 2 + 44;
28
+ const WIDTHS = [
29
+ [1.25, 0.875, 0.875],
30
+ [0.875, 0.875, 1.25],
31
+ ];
32
+ const CELLS = WIDTHS.flatMap((row, r) => {
33
+ let x = LEFT;
34
+ return row.map((k) => {
35
+ const w = k * U;
36
+ const c = { x, y: TOP + r * (CELL_H + GUT), w };
37
+ x += w + GUT;
38
+ return c;
39
+ });
40
+ });
41
+
42
+ const clamp = { extrapolateLeft: 'clamp', extrapolateRight: 'clamp' } as const;
43
+
44
+ const Cell: React.FC<{ i: number; frame: number }> = ({ i, frame }) => {
45
+ const start = FIRST + i * GAP;
46
+ const { x, y, w } = CELLS[i];
47
+
48
+ // ① 边框流光:彗星段(长 22% 周长)沿 pathLength=100 跑一圈,8f;随后整圈细边常亮
49
+ const draw = interpolate(frame, [start, start + 8], [0, 1], { ...clamp, easing: Easing.out(Easing.cubic) });
50
+ // 描完后流光退火:琥珀亮边 → 弱化成常亮细边
51
+ const strokeFade = interpolate(frame, [start + 12, start + 26], [1, 0.4], { ...clamp, easing: Easing.out(Easing.quad) });
52
+ const ring = interpolate(frame, [start + 2, start + 10], [0, 1], { ...clamp, easing: Easing.out(Easing.quad) });
53
+
54
+ // ② 内容提亮 + 上浮弹出:描边过半后接力,8f 弹出(back-out 带一点过冲)
55
+ const lit = interpolate(frame, [start + 6, start + 14], [0, 1], { ...clamp, easing: Easing.out(Easing.cubic) });
56
+ const rise = interpolate(frame, [start + 6, start + 14], [0, 1], { ...clamp, easing: Easing.bezier(0.3, 1.4, 0.5, 1) });
57
+ const opacity = 0.18 + 0.82 * lit;
58
+ const ty = 20 * (1 - rise);
59
+ // seed 正弦哈希做每格微差(点亮瞬间的辉光强度略有随机感)
60
+ const jitter = Math.abs((Math.sin(i * 127.3) * 43758.5453) % 1);
61
+ const pulse = lit * (1 - lit) * 4; // 点亮中段最亮的辉光脉冲
62
+ const head = 100 * draw; // 彗星头位置(周长百分比)
63
+ const TAIL = 22;
64
+
65
+ return (
66
+ <div style={{ position: 'absolute', left: x, top: y, width: w, height: CELL_H }}>
67
+ {/* 暗态卡 + 点亮后的内容(同一张卡,靠 opacity/translateY 提亮浮出) */}
68
+ <div style={{ opacity, transform: `translateY(${ty.toFixed(2)}px)`, borderRadius: 14 }}>
69
+ <Card w={w} h={CELL_H} seed={i + 1} tone="dark" />
70
+ {/* 点亮瞬间卡内一层暖光(裁在圆角内,脉冲后归零) */}
71
+ <div style={{
72
+ position: 'absolute', inset: 0, borderRadius: 14, pointerEvents: 'none',
73
+ background: `radial-gradient(90% 70% at 50% 0%, rgba(232,180,94,${(0.16 * pulse * (0.8 + jitter * 0.4)).toFixed(3)}), rgba(232,180,94,0) 70%)`,
74
+ }} />
75
+ </div>
76
+ {/* 边框流光:SVG rect 描边 */}
77
+ {draw > 0 && (
78
+ <svg width={w} height={CELL_H} viewBox={`0 0 ${w} ${CELL_H}`} style={{ position: 'absolute', left: 0, top: ty, overflow: 'visible' }}>
79
+ <defs>
80
+ <filter id={`blu-glow-${i}`} x="-10%" y="-10%" width="120%" height="120%">
81
+ <feGaussianBlur stdDeviation={4 + jitter * 2} />
82
+ </filter>
83
+ </defs>
84
+ {/* 常亮细边:随彗星走过逐段出现,退火后保持 */}
85
+ <rect
86
+ x={0.75} y={0.75} width={w - 1.5} height={CELL_H - 1.5} rx={14} fill="none"
87
+ stroke={AMBER} strokeWidth={1.5} pathLength={100} strokeDasharray={100} strokeDashoffset={100 * (1 - draw)}
88
+ opacity={ring * strokeFade}
89
+ />
90
+ {/* 彗星:辉光层 + 亮芯层,跑完一圈后随退火淡去 */}
91
+ {[0, 1].map((k) => (
92
+ <rect
93
+ key={k}
94
+ x={1.5} y={1.5} width={w - 3} height={CELL_H - 3} rx={14} fill="none"
95
+ stroke={k ? '#ffe3ae' : AMBER}
96
+ strokeWidth={k ? 2.5 : 6}
97
+ strokeLinecap="round"
98
+ pathLength={100}
99
+ strokeDasharray={`${TAIL} ${100 - TAIL}`}
100
+ strokeDashoffset={TAIL - head}
101
+ opacity={(1 - interpolate(frame, [start + 8, start + 16], [0, 1], clamp)) * (k ? 1 : 0.8)}
102
+ filter={k ? undefined : `url(#blu-glow-${i})`}
103
+ />
104
+ ))}
105
+ </svg>
106
+ )}
107
+ </div>
108
+ );
109
+ };
110
+
111
+ export const BentoLightUp: React.FC = () => {
112
+ const frame = useCurrentFrame();
113
+
114
+ // ③ 六格全亮(~96f)后整体缓推 scale 1→1.04,25f 收住,之后真静止
115
+ const push = interpolate(frame, [96, 121], [1, 1.04], { ...clamp, easing: Easing.bezier(0.33, 0, 0.2, 1) });
116
+
117
+ // 标题随首格点亮微微提亮,交代场景
118
+ const titleLit = interpolate(frame, [FIRST, FIRST + 20], [0.25, 1], { ...clamp, easing: Easing.out(Easing.quad) });
119
+ // 全亮后地面暖光稍起
120
+ const allLit = interpolate(frame, [FIRST + 5 * GAP + 6, FIRST + 5 * GAP + 30], [0, 1], { ...clamp, easing: Easing.out(Easing.quad) });
121
+
122
+ return (
123
+ <AbsoluteFill style={{ overflow: 'hidden' }}>
124
+ <Backdrop tone="dark" light={{ x: 0.5, y: 0.1 }} accent={AMBER} grain={0} vignette={0.55} />
125
+ <AbsoluteFill style={{
126
+ background: 'radial-gradient(ellipse 50% 40% at 50% 62%, rgba(232,180,94,0.10), rgba(232,180,94,0) 70%)',
127
+ opacity: 0.3 + 0.7 * allLit,
128
+ }} />
129
+ <div style={{ position: 'absolute', inset: 0, transform: `scale(${push.toFixed(5)})`, transformOrigin: '960px 540px' }}>
130
+ <div style={{ position: 'absolute', left: LEFT, top: TOP - 132, fontFamily: FONT.sans, opacity: titleLit }}>
131
+ <div style={{ display: 'flex', alignItems: 'center', gap: 9, height: 18 }}>
132
+ <ShotcraftMark size={24} tone="dark" />
133
+ <span style={{ fontFamily: BRAND.font, fontSize: 17, fontWeight: 700, letterSpacing: '0.03em', color: AMBER, opacity: 0.9, lineHeight: 1 }}>{BRAND.name}</span>
134
+ </div>
135
+ <div style={{ marginTop: 10, fontSize: 56, fontWeight: 700, letterSpacing: '-0.03em', color: '#f1efe9', lineHeight: 1 }}>
136
+ {PITCH.en.taglines[2]}
137
+ </div>
138
+ </div>
139
+ {CELLS.map((_, i) => (
140
+ <Cell key={i} i={i} frame={frame} />
141
+ ))}
142
+ </div>
143
+ <Grain opacity={0.08} blend="soft-light" />
144
+ </AbsoluteFill>
145
+ );
146
+ };