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.
- package/README.md +7 -5
- package/lib/client.js +142 -16
- package/lib/index.js +7945 -7719
- package/lib/motion/asset-pack.js +394 -394
- package/lib/motion/assets.js +291 -291
- package/lib/motion/demo-assets-lock.js +10 -10
- package/lib/motion/mgstyles/briefs/23-ink-wash.md +147 -0
- package/lib/motion/mgstyles/catalog.d/23-ink-wash.json +28 -0
- package/lib/motion/mgstyles/catalog.json +127 -14
- package/lib/motion/mgstyles/upstream/demos/23-ink-wash/brush.js +149 -0
- package/lib/motion/mgstyles/upstream/demos/23-ink-wash/film.js +202 -0
- package/lib/motion/mgstyles/upstream/manifest.json +28 -3
- package/lib/motion/mgstyles/upstream/prompts/23-ink-wash.md +59 -0
- package/lib/motion/mgstyles/vendor/README.md +28 -28
- package/lib/motion/mgstyles/vendor/modules/d3/LICENSE +13 -13
- package/lib/motion/mgstyles/vendor/modules/d3/dist/d3.min.js +2 -2
- package/lib/motion/mgstyles/vendor/modules/opentype.js/LICENSE +20 -20
- package/lib/motion/mgstyles/vendor/modules/opentype.js/dist/opentype.mjs +14460 -14460
- package/lib/motion/mgstyles/vendor/modules/simplex-noise/LICENSE +21 -21
- package/lib/motion/mgstyles/vendor/modules/simplex-noise/dist/esm/simplex-noise.js +465 -465
- package/lib/motion/mgstyles/vendor/modules/topojson-client/LICENSE +13 -13
- package/lib/motion/mgstyles/vendor/modules/topojson-client/dist/topojson-client.min.js +2 -2
- package/lib/motion/project.js +5 -1
- package/lib/motion/qa.js +116 -6
- package/lib/motion/render.js +179 -179
- package/lib/motion/scene-kit.js +1 -1
- package/lib/motion/shotcraft/upstream/SKILL.md +286 -286
- package/lib/motion/shotcraft/upstream/assets/lib/Caption.tsx +54 -54
- package/lib/motion/shotcraft/upstream/assets/lib/ClipCard.tsx +200 -200
- package/lib/motion/shotcraft/upstream/assets/lib/DigitRoll.tsx +45 -45
- package/lib/motion/shotcraft/upstream/assets/lib/FlashCut.tsx +20 -20
- package/lib/motion/shotcraft/upstream/assets/lib/FlatPanel.tsx +65 -65
- package/lib/motion/shotcraft/upstream/assets/lib/PageCam.tsx +151 -151
- package/lib/motion/shotcraft/upstream/assets/lib/VerticalTicker.tsx +129 -129
- package/lib/motion/shotcraft/upstream/assets/lib/helpers/camera.tsx +75 -75
- package/lib/motion/shotcraft/upstream/assets/lib/helpers/motion.ts +40 -40
- package/lib/motion/shotcraft/upstream/assets/lib/helpers/rand.ts +11 -11
- package/lib/motion/shotcraft/upstream/assets/lib/helpers/shake.ts +10 -10
- package/lib/motion/shotcraft/upstream/assets/scripts/build-readme-cover.mjs +49 -49
- package/lib/motion/shotcraft/upstream/assets/scripts/capture-template.mjs +210 -210
- package/lib/motion/shotcraft/upstream/assets/scripts/sfx-source.py +423 -423
- package/lib/motion/shotcraft/upstream/assets/scripts/smoke-render-demos.py +170 -170
- package/lib/motion/shotcraft/upstream/assets/scripts/test_sfx_source.py +157 -157
- package/lib/motion/shotcraft/upstream/demos/README.md +120 -120
- package/lib/motion/shotcraft/upstream/demos/_fixtures/Brand.tsx +112 -112
- package/lib/motion/shotcraft/upstream/demos/_fixtures/Fixtures.tsx +647 -647
- package/lib/motion/shotcraft/upstream/demos/_fixtures/Look.tsx +316 -316
- package/lib/motion/shotcraft/upstream/demos/_fixtures/Motion.tsx +82 -82
- package/lib/motion/shotcraft/upstream/demos/_fixtures/PageCam2D.tsx +115 -115
- package/lib/motion/shotcraft/upstream/demos/_fixtures/Polish.tsx +243 -243
- package/lib/motion/shotcraft/upstream/demos/_textures/live-layout.json +388 -388
- package/lib/motion/shotcraft/upstream/demos/camera/basic-3d-scene/Basic3DScene.tsx +250 -250
- package/lib/motion/shotcraft/upstream/demos/camera/crash-zoom-punch/CrashImpactReal.tsx +305 -305
- package/lib/motion/shotcraft/upstream/demos/camera/crash-zoom-punch/CrashZoomReal.tsx +246 -246
- package/lib/motion/shotcraft/upstream/demos/camera/cursor-flyover/CursorFlyover.tsx +390 -390
- package/lib/motion/shotcraft/upstream/demos/camera/depth-layer-moves/MultiplaneReal.tsx +138 -138
- package/lib/motion/shotcraft/upstream/demos/camera/graze-face-tour/GrazeFaceTour.tsx +542 -542
- package/lib/motion/shotcraft/upstream/demos/camera/overhead-camera-moves/OverheadTabletopDrop.tsx +315 -315
- package/lib/motion/shotcraft/upstream/demos/camera/overhead-camera-moves/TiltReveal.tsx +299 -299
- package/lib/motion/shotcraft/upstream/demos/camera/space-camera-moves/DroneDiveLanding.tsx +173 -173
- package/lib/motion/shotcraft/upstream/demos/camera/space-camera-moves/ExplodedView.tsx +348 -348
- package/lib/motion/shotcraft/upstream/demos/camera/steep-tilt-glide/SteepTiltGlide.tsx +366 -366
- package/lib/motion/shotcraft/upstream/demos/camera/tension-camera-moves/BulletTimeFreezeOrbit.tsx +279 -279
- package/lib/motion/shotcraft/upstream/demos/camera/tension-camera-moves/PullBackIsolation.tsx +184 -184
- package/lib/motion/shotcraft/upstream/demos/camera/terminal-3d/Terminal3D.tsx +390 -390
- package/lib/motion/shotcraft/upstream/demos/data/before-after-slider-scrub/BeforeAfterSliderScrub.tsx +155 -155
- package/lib/motion/shotcraft/upstream/demos/data/chart-live-moves/AxisRescaleShockV2.tsx +303 -303
- package/lib/motion/shotcraft/upstream/demos/data/chart-live-moves/OscilloscopeStreamV2.tsx +290 -290
- package/lib/motion/shotcraft/upstream/demos/data/chart-live-moves/UnitDotSwarmRegroupV2.tsx +278 -278
- package/lib/motion/shotcraft/upstream/demos/data/gauge-readout-moves/NeedleSweepSelftest.tsx +307 -307
- package/lib/motion/shotcraft/upstream/demos/data/gauge-readout-moves/TapeScrollFixedPointer.tsx +215 -215
- package/lib/motion/shotcraft/upstream/demos/data/scroll-brake-moves/BrakeReticleLock.tsx +299 -299
- package/lib/motion/shotcraft/upstream/demos/data/scroll-brake-moves/ChangelogScrollBrake.tsx +232 -232
- package/lib/motion/shotcraft/upstream/demos/data/timeline-travel/TimelineTravel.tsx +290 -290
- package/lib/motion/shotcraft/upstream/demos/effects/assemble-then-type-flyin/AssembleThenTypeFlyin.tsx +273 -273
- package/lib/motion/shotcraft/upstream/demos/effects/aurora-bloom-bg-flip/AuroraBloomBgFlip.tsx +167 -167
- package/lib/motion/shotcraft/upstream/demos/effects/brand-frame-snap/BrandFrameSnap.tsx +536 -536
- package/lib/motion/shotcraft/upstream/demos/effects/fui-hud-moves/ReticleLockOn.tsx +164 -164
- package/lib/motion/shotcraft/upstream/demos/effects/glow-flyline-moves/FlylineArc.tsx +175 -175
- package/lib/motion/shotcraft/upstream/demos/effects/glow-flyline-moves/GlowOrbAmbient.tsx +197 -197
- package/lib/motion/shotcraft/upstream/demos/effects/glow-flyline-moves/OrbFlylineRelay.tsx +241 -241
- package/lib/motion/shotcraft/upstream/demos/effects/icon-performance-moves/AttentionBounce.tsx +279 -279
- package/lib/motion/shotcraft/upstream/demos/effects/impact-feedback/AnimeImpact.tsx +230 -230
- package/lib/motion/shotcraft/upstream/demos/effects/impact-feedback/HitCounter.tsx +345 -345
- package/lib/motion/shotcraft/upstream/demos/effects/light-play-moves/SheenSweepRetry.tsx +275 -275
- package/lib/motion/shotcraft/upstream/demos/effects/light-play-moves/SpotlightSweepReveal.tsx +229 -229
- package/lib/motion/shotcraft/upstream/demos/effects/radial-ripple-phone-chips/RadialRipplePhoneChips.tsx +312 -312
- package/lib/motion/shotcraft/upstream/demos/effects/riso-print-hits/RisoMisregistrationHit.tsx +222 -222
- package/lib/motion/shotcraft/upstream/demos/effects/scan-bracket-sweep/ScanBracketSweep.tsx +295 -295
- package/lib/motion/shotcraft/upstream/demos/effects/scanline-annotate-focus/ScanlineAnnotateFocus.tsx +329 -329
- package/lib/motion/shotcraft/upstream/demos/effects/scanline-assemble-flyin/ScanlineAssembleFlyin.tsx +315 -315
- package/lib/motion/shotcraft/upstream/demos/effects/slam-entrance-moves/ImpactBurstKit.tsx +264 -264
- package/lib/motion/shotcraft/upstream/demos/effects/slam-entrance-moves/KanadaPerspectiveSnap.tsx +260 -260
- package/lib/motion/shotcraft/upstream/demos/effects/slam-entrance-moves/ScoreSlam.tsx +263 -263
- package/lib/motion/shotcraft/upstream/demos/effects/spotlight-sweep-moves/CornerSpotlightReveal.tsx +123 -123
- package/lib/motion/shotcraft/upstream/demos/effects/spotlight-sweep-moves/GlowWakeSleepPanel.tsx +187 -187
- package/lib/motion/shotcraft/upstream/demos/effects/spotlight-sweep-moves/SlideSpotlightPan.tsx +175 -175
- package/lib/motion/shotcraft/upstream/demos/interaction/autolayout-gap-dial/AutolayoutGapDial.tsx +305 -305
- package/lib/motion/shotcraft/upstream/demos/interaction/canvas-materialize-moves/DiagramCascadeBuild.tsx +350 -350
- package/lib/motion/shotcraft/upstream/demos/interaction/canvas-materialize-moves/PanelToCanvasMaterialize.tsx +352 -352
- package/lib/motion/shotcraft/upstream/demos/interaction/chip-grid-single-select-blackout/ChipGridSingleSelectBlackout.tsx +218 -218
- package/lib/motion/shotcraft/upstream/demos/interaction/collab-cursor-moves/CursorCastEnsemble.tsx +297 -297
- package/lib/motion/shotcraft/upstream/demos/interaction/glass-pill-dictation-typing/GlassPillDictationTyping.tsx +157 -157
- package/lib/motion/shotcraft/upstream/demos/interaction/hashtag-to-pill-materialize/HashtagToPillMaterialize.tsx +218 -218
- package/lib/motion/shotcraft/upstream/demos/interaction/picker-carousel-feature-cycle/PickerCarouselFeatureCycle.tsx +202 -202
- package/lib/motion/shotcraft/upstream/demos/interaction/segmented-thumb-hero/SegmentedThumbHero.tsx +265 -265
- package/lib/motion/shotcraft/upstream/demos/interaction/theme-switch-moves/PaletteThemeRipple.tsx +457 -457
- package/lib/motion/shotcraft/upstream/demos/interaction/theme-switch-moves/ThemeSweepToggle.tsx +446 -446
- package/lib/motion/shotcraft/upstream/demos/interaction/type-and-filter/TypeAndFilter.tsx +249 -249
- package/lib/motion/shotcraft/upstream/demos/interaction/voice-waveform-live/VoiceWaveformLive.tsx +278 -278
- package/lib/motion/shotcraft/upstream/demos/opening/crane-rise-reveal/CraneRiseReveal.tsx +332 -332
- package/lib/motion/shotcraft/upstream/demos/opening/dataviz-landscape-open/DatavizLandscapeOpen.tsx +358 -358
- package/lib/motion/shotcraft/upstream/demos/opening/fracture/Fracture.tsx +201 -201
- package/lib/motion/shotcraft/upstream/demos/opening/icon-field-colorize/IconFieldColorize.tsx +200 -200
- package/lib/motion/shotcraft/upstream/demos/opening/letterspace-materialize/LetterspaceMaterialize.tsx +208 -208
- package/lib/motion/shotcraft/upstream/demos/opening/magician-card-flourish/MagicianCardFlourish.tsx +341 -341
- package/lib/motion/shotcraft/upstream/demos/opening/orbit-ring-title-open/OrbitRingTitleOpen.tsx +389 -389
- package/lib/motion/shotcraft/upstream/demos/opening/spotlight-hero-card/SpotlightHeroCard.tsx +293 -293
- package/lib/motion/shotcraft/upstream/demos/opening/stroke-segment-build/StrokeSegmentBuild.tsx +183 -183
- package/lib/motion/shotcraft/upstream/demos/opening/text-as-mask/TextAsMask.tsx +245 -245
- package/lib/motion/shotcraft/upstream/demos/outro/grain-dissolve/GrainDissolve.tsx +222 -222
- package/lib/motion/shotcraft/upstream/demos/outro/logo-shrink-wordmark-lockup/LogoShrinkWordmarkLockup.tsx +223 -223
- package/lib/motion/shotcraft/upstream/demos/outro/neon-triple-marquee/NeonTripleMarquee.tsx +217 -217
- package/lib/motion/shotcraft/upstream/demos/outro/outro-group-photo-launch/OutroGroupPhotoLaunch.tsx +343 -343
- package/lib/motion/shotcraft/upstream/demos/outro/ui-strip-away-outro/UiStripAwayOutro.tsx +357 -357
- package/lib/motion/shotcraft/upstream/demos/outro/ui-to-brand-morph/IconFlipBloomLogo.tsx +187 -187
- package/lib/motion/shotcraft/upstream/demos/outro/ui-to-brand-morph/InputMorphsIntoLogo.tsx +333 -333
- package/lib/motion/shotcraft/upstream/demos/rhythm/beat-cut-moves/PaparazziFlash.tsx +274 -274
- package/lib/motion/shotcraft/upstream/demos/rhythm/beat-step-list-theme-cycle/BeatStepListThemeCycle.tsx +270 -270
- package/lib/motion/shotcraft/upstream/demos/rhythm/panel-grid-moves/ComicPanelSplit.tsx +430 -430
- package/lib/motion/shotcraft/upstream/demos/rhythm/quad-split-parallel-scenes/QuadSplitParallelScenes.tsx +252 -252
- package/lib/motion/shotcraft/upstream/demos/rhythm/rhythm-interrupt-moves/JumpCutPunchIn.tsx +106 -106
- package/lib/motion/shotcraft/upstream/demos/rhythm/sakuga-timing-shift/SakugaTimingShift.tsx +288 -288
- package/lib/motion/shotcraft/upstream/demos/rhythm/speed-ramp-freeze/FreezeAnnotateReal.tsx +362 -362
- package/lib/motion/shotcraft/upstream/demos/rhythm/trailer-grammar-moves/TrailerBumper.tsx +168 -168
- package/lib/motion/shotcraft/upstream/demos/transition/bottom-push-stack-wipe/BottomPushStackWipe.tsx +310 -310
- package/lib/motion/shotcraft/upstream/demos/transition/card-flip-reveal/CardFlipReveal.tsx +261 -261
- package/lib/motion/shotcraft/upstream/demos/transition/card-flock-tumble/CardFlockTumble.tsx +459 -459
- package/lib/motion/shotcraft/upstream/demos/transition/circle-match-iris/CircleMatchIris.tsx +294 -294
- package/lib/motion/shotcraft/upstream/demos/transition/gradient-transition/GradientTransition.tsx +161 -161
- package/lib/motion/shotcraft/upstream/demos/transition/line-carry-transition/LineCarryTransition.tsx +248 -248
- package/lib/motion/shotcraft/upstream/demos/transition/mosaic-reframe/MosaicReframe.tsx +359 -359
- package/lib/motion/shotcraft/upstream/demos/transition/page-turn-transitions/BarnDoorSplit.tsx +227 -227
- package/lib/motion/shotcraft/upstream/demos/transition/print-texture-transitions/InkBleedReveal.tsx +162 -162
- package/lib/motion/shotcraft/upstream/demos/transition/shot-transitions/PortalWipeV2.tsx +248 -248
- package/lib/motion/shotcraft/upstream/demos/transition/shot-transitions/WhipBrakeReal.tsx +186 -186
- package/lib/motion/shotcraft/upstream/demos/transition/tear-streak-transitions/GlitchDisplace.tsx +355 -355
- package/lib/motion/shotcraft/upstream/demos/transition/transition-hidden-cut/InvisibleCut.tsx +272 -272
- package/lib/motion/shotcraft/upstream/demos/transition/transition-hidden-cut/LightLeakBurn.tsx +262 -262
- package/lib/motion/shotcraft/upstream/demos/transition/transition-hidden-cut/VersusSlam.tsx +217 -217
- package/lib/motion/shotcraft/upstream/demos/transition/transition-travel/LetterformZoom.tsx +285 -285
- package/lib/motion/shotcraft/upstream/demos/transition/white-flash-logo-simplify-cut/WhiteFlashLogoSimplifyCut.tsx +205 -205
- package/lib/motion/shotcraft/upstream/demos/transition/wipe-transitions/BlindsSlice.tsx +178 -178
- package/lib/motion/shotcraft/upstream/demos/typography/blur-slide/BlurSlide.tsx +147 -147
- package/lib/motion/shotcraft/upstream/demos/typography/brace-expand/BraceExpand.tsx +143 -143
- package/lib/motion/shotcraft/upstream/demos/typography/brand-ink-open/BrandInkOpen.tsx +134 -134
- package/lib/motion/shotcraft/upstream/demos/typography/countdown-arc-scatter/CountdownArcScatter.tsx +217 -217
- package/lib/motion/shotcraft/upstream/demos/typography/flying-words/FlyingWords.tsx +198 -198
- package/lib/motion/shotcraft/upstream/demos/typography/glitch-cycle/GlitchCycle.tsx +221 -221
- package/lib/motion/shotcraft/upstream/demos/typography/gradient-word-sweep/GradientWordSweep.tsx +312 -312
- package/lib/motion/shotcraft/upstream/demos/typography/lead-word-zoom-assemble/LeadWordZoomAssemble.tsx +261 -261
- package/lib/motion/shotcraft/upstream/demos/typography/marker-underline-title/MarkerUnderlineTitle.tsx +121 -121
- package/lib/motion/shotcraft/upstream/demos/typography/outline-word-fill/OutlineWordFill.tsx +153 -153
- package/lib/motion/shotcraft/upstream/demos/typography/paper-title-card/PaperTitleCard.tsx +179 -179
- package/lib/motion/shotcraft/upstream/demos/typography/pill-chip-slot-cycle-handled/PillChipSlotCycleHandled.tsx +140 -140
- package/lib/motion/shotcraft/upstream/demos/typography/pill-slot-cycle/PillSlotCycle.tsx +309 -309
- package/lib/motion/shotcraft/upstream/demos/typography/text-column-converge/TextColumnConverge.tsx +191 -191
- package/lib/motion/shotcraft/upstream/demos/typography/title-demote-to-label/TitleDemoteToLabel.tsx +292 -292
- package/lib/motion/shotcraft/upstream/demos/typography/type-assembly-moves/LetterformDriftAssembly.tsx +135 -135
- package/lib/motion/shotcraft/upstream/demos/typography/type-assembly-moves/SplitTextStagger.tsx +124 -124
- package/lib/motion/shotcraft/upstream/demos/typography/type-assembly-moves/TextOnPath.tsx +255 -255
- package/lib/motion/shotcraft/upstream/demos/typography/type-entrance-moves/LetterDropPhysics.tsx +173 -173
- package/lib/motion/shotcraft/upstream/demos/typography/type-rhythm-sync/FontWeightPump.tsx +225 -225
- package/lib/motion/shotcraft/upstream/demos/typography/type-rhythm-sync/KaraokeFillSync.tsx +141 -141
- package/lib/motion/shotcraft/upstream/demos/typography/typewriter-moves/TypewriterErrorRetype.tsx +137 -137
- package/lib/motion/shotcraft/upstream/demos/typography/vertical-word-roll-blur-cycle/VerticalWordRollBlurCycle.tsx +147 -147
- package/lib/motion/shotcraft/upstream/demos/typography/word-relay-filmstrip/WordRelayFilmstrip.tsx +409 -409
- package/lib/motion/shotcraft/upstream/demos/typography/word-relay-geometry/WordRelayGeometry.tsx +280 -280
- package/lib/motion/shotcraft/upstream/demos/ui-entrance/avatar-bracket-carousel/AvatarBracketCarousel.tsx +271 -271
- package/lib/motion/shotcraft/upstream/demos/ui-entrance/bezier-source-converge-merge/BezierSourceConvergeMerge.tsx +385 -385
- package/lib/motion/shotcraft/upstream/demos/ui-entrance/card-stack/CardStack.tsx +312 -312
- package/lib/motion/shotcraft/upstream/demos/ui-entrance/carousel-3d/Carousel3D.tsx +303 -303
- package/lib/motion/shotcraft/upstream/demos/ui-entrance/clipcard-looping/ClipCardLooping.tsx +77 -77
- package/lib/motion/shotcraft/upstream/demos/ui-entrance/cloner-depth-echo/ClonerDepthEcho.tsx +311 -311
- package/lib/motion/shotcraft/upstream/demos/ui-entrance/deck-deal-flyin/DeckDealFlyin.tsx +307 -307
- package/lib/motion/shotcraft/upstream/demos/ui-entrance/doc-park-left-pill-deal/DocParkLeftPillDeal.tsx +349 -349
- package/lib/motion/shotcraft/upstream/demos/ui-entrance/document-typewriter-reveal/DocumentTypewriterReveal.tsx +255 -255
- package/lib/motion/shotcraft/upstream/demos/ui-entrance/draw-svg-trace/DrawSvgTrace.tsx +244 -244
- package/lib/motion/shotcraft/upstream/demos/ui-entrance/element-body-moves/ContactShadowLift.tsx +217 -217
- package/lib/motion/shotcraft/upstream/demos/ui-entrance/integration-hub-map/IntegrationHubMap.tsx +652 -652
- package/lib/motion/shotcraft/upstream/demos/ui-entrance/list-reveal/ListReveal.tsx +153 -153
- package/lib/motion/shotcraft/upstream/demos/ui-entrance/list-stack-press/ListStackPress.tsx +238 -238
- package/lib/motion/shotcraft/upstream/demos/ui-entrance/neon-frame-forerun/NeonFrameForerun.tsx +324 -324
- package/lib/motion/shotcraft/upstream/demos/ui-entrance/neon-frame-orbit-drop/NeonFrameForerunOrbit.tsx +354 -354
- package/lib/motion/shotcraft/upstream/demos/ui-entrance/page-waterfall-wall/PageWaterfallWall.tsx +101 -101
- package/lib/motion/shotcraft/upstream/demos/ui-entrance/page-waterfall-wall/VerticalTicker.tsx +129 -129
- package/lib/motion/shotcraft/upstream/demos/ui-entrance/product-card-progressive-assemble/ProductCardProgressiveAssemble.tsx +297 -297
- package/lib/motion/shotcraft/upstream/demos/ui-entrance/radial-wave/RadialWave.tsx +57 -57
- package/lib/motion/shotcraft/upstream/demos/ui-entrance/research-card-stack-scroll/ResearchCardStackScroll.tsx +155 -155
- package/lib/motion/shotcraft/upstream/demos/ui-entrance/row-embed/RowEmbed.tsx +175 -175
- package/lib/motion/shotcraft/upstream/demos/ui-entrance/value-stagger-gradient/ValueStaggerGradient.tsx +153 -153
- package/lib/motion/shotcraft/upstream/demos/ui-entrance/wall-reveal-moves/BentoLightUp.tsx +146 -146
- package/lib/motion/shotcraft/upstream/demos/ui-entrance/wall-reveal-moves/WireframeDrawOn.tsx +226 -226
- package/lib/motion/shotcraft/upstream/gallery/api/library.json +1 -1
- package/lib/motion/shotcraft/upstream/references/aesthetic-rules.md +193 -193
- package/lib/motion/shotcraft/upstream/references/final-review.md +121 -121
- package/lib/motion/shotcraft/upstream/references/guided-free-creation.md +199 -199
- package/lib/motion/shotcraft/upstream/references/jianying-export.md +183 -183
- package/lib/motion/shotcraft/upstream/references/music-beat-sync.md +257 -257
- package/lib/motion/shotcraft/upstream/references/pipeline.md +382 -382
- package/lib/motion/shotcraft/upstream/references/publish-upload-post.md +111 -111
- package/lib/motion/shotcraft/upstream/references/sequences/promo-energy-arc.md +50 -50
- package/lib/motion/shotcraft/upstream/references/sfx-sourcing.md +95 -95
- package/lib/motion/shotcraft/upstream/references/shots/camera/basic-3d-scene.md +41 -41
- package/lib/motion/shotcraft/upstream/references/shots/camera/crash-zoom-punch.md +52 -52
- package/lib/motion/shotcraft/upstream/references/shots/camera/cursor-flyover.md +39 -39
- package/lib/motion/shotcraft/upstream/references/shots/camera/depth-layer-moves.md +39 -39
- package/lib/motion/shotcraft/upstream/references/shots/camera/graze-face-tour.md +57 -57
- package/lib/motion/shotcraft/upstream/references/shots/camera/overhead-camera-moves.md +51 -51
- package/lib/motion/shotcraft/upstream/references/shots/camera/space-camera-moves.md +46 -46
- package/lib/motion/shotcraft/upstream/references/shots/camera/steep-tilt-glide.md +52 -52
- package/lib/motion/shotcraft/upstream/references/shots/camera/tension-camera-moves.md +43 -43
- package/lib/motion/shotcraft/upstream/references/shots/camera/terminal-3d.md +42 -42
- package/lib/motion/shotcraft/upstream/references/shots/data/before-after-slider-scrub.md +48 -48
- package/lib/motion/shotcraft/upstream/references/shots/data/chart-live-moves.md +52 -52
- package/lib/motion/shotcraft/upstream/references/shots/data/gauge-readout-moves.md +45 -45
- package/lib/motion/shotcraft/upstream/references/shots/data/scroll-brake-moves.md +46 -46
- package/lib/motion/shotcraft/upstream/references/shots/data/timeline-travel.md +44 -44
- package/lib/motion/shotcraft/upstream/references/shots/effects/assemble-then-type-flyin.md +63 -63
- package/lib/motion/shotcraft/upstream/references/shots/effects/aurora-bloom-bg-flip.md +54 -54
- package/lib/motion/shotcraft/upstream/references/shots/effects/brand-frame-snap.md +58 -58
- package/lib/motion/shotcraft/upstream/references/shots/effects/fui-hud-moves.md +35 -35
- package/lib/motion/shotcraft/upstream/references/shots/effects/glow-flyline-moves.md +53 -53
- package/lib/motion/shotcraft/upstream/references/shots/effects/icon-performance-moves.md +42 -42
- package/lib/motion/shotcraft/upstream/references/shots/effects/impact-feedback.md +50 -50
- package/lib/motion/shotcraft/upstream/references/shots/effects/light-play-moves.md +46 -46
- package/lib/motion/shotcraft/upstream/references/shots/effects/radial-ripple-phone-chips.md +56 -56
- package/lib/motion/shotcraft/upstream/references/shots/effects/riso-print-hits.md +49 -49
- package/lib/motion/shotcraft/upstream/references/shots/effects/scan-bracket-sweep.md +50 -50
- package/lib/motion/shotcraft/upstream/references/shots/effects/scanline-annotate-focus.md +53 -53
- package/lib/motion/shotcraft/upstream/references/shots/effects/scanline-assemble-flyin.md +53 -53
- package/lib/motion/shotcraft/upstream/references/shots/effects/slam-entrance-moves.md +55 -55
- package/lib/motion/shotcraft/upstream/references/shots/effects/spotlight-sweep-moves.md +52 -52
- package/lib/motion/shotcraft/upstream/references/shots/interaction/autolayout-gap-dial.md +60 -60
- package/lib/motion/shotcraft/upstream/references/shots/interaction/canvas-materialize-moves.md +57 -57
- package/lib/motion/shotcraft/upstream/references/shots/interaction/chip-grid-single-select-blackout.md +51 -51
- package/lib/motion/shotcraft/upstream/references/shots/interaction/collab-cursor-moves.md +41 -41
- package/lib/motion/shotcraft/upstream/references/shots/interaction/glass-pill-dictation-typing.md +53 -53
- package/lib/motion/shotcraft/upstream/references/shots/interaction/hashtag-to-pill-materialize.md +60 -60
- package/lib/motion/shotcraft/upstream/references/shots/interaction/picker-carousel-feature-cycle.md +55 -55
- package/lib/motion/shotcraft/upstream/references/shots/interaction/segmented-thumb-hero.md +57 -57
- package/lib/motion/shotcraft/upstream/references/shots/interaction/theme-switch-moves.md +47 -47
- package/lib/motion/shotcraft/upstream/references/shots/interaction/type-and-filter.md +37 -37
- package/lib/motion/shotcraft/upstream/references/shots/interaction/voice-waveform-live.md +54 -54
- package/lib/motion/shotcraft/upstream/references/shots/opening/brand-ink-open.md +36 -36
- package/lib/motion/shotcraft/upstream/references/shots/opening/crane-rise-reveal.md +56 -56
- package/lib/motion/shotcraft/upstream/references/shots/opening/dataviz-landscape-open.md +56 -56
- package/lib/motion/shotcraft/upstream/references/shots/opening/fracture.md +40 -40
- package/lib/motion/shotcraft/upstream/references/shots/opening/icon-field-colorize.md +60 -60
- package/lib/motion/shotcraft/upstream/references/shots/opening/letterspace-materialize.md +57 -57
- package/lib/motion/shotcraft/upstream/references/shots/opening/magician-card-flourish.md +73 -73
- package/lib/motion/shotcraft/upstream/references/shots/opening/orbit-ring-title-open.md +87 -87
- package/lib/motion/shotcraft/upstream/references/shots/opening/spotlight-hero-card.md +55 -55
- package/lib/motion/shotcraft/upstream/references/shots/opening/stroke-segment-build.md +50 -50
- package/lib/motion/shotcraft/upstream/references/shots/opening/text-as-mask.md +59 -59
- package/lib/motion/shotcraft/upstream/references/shots/outro/grain-dissolve.md +38 -38
- package/lib/motion/shotcraft/upstream/references/shots/outro/logo-shrink-wordmark-lockup.md +38 -38
- package/lib/motion/shotcraft/upstream/references/shots/outro/neon-triple-marquee.md +59 -59
- package/lib/motion/shotcraft/upstream/references/shots/outro/outro-group-photo-launch.md +39 -39
- package/lib/motion/shotcraft/upstream/references/shots/outro/ui-strip-away-outro.md +61 -61
- package/lib/motion/shotcraft/upstream/references/shots/outro/ui-to-brand-morph.md +52 -52
- package/lib/motion/shotcraft/upstream/references/shots/rhythm/beat-cut-moves.md +50 -50
- package/lib/motion/shotcraft/upstream/references/shots/rhythm/beat-step-list-theme-cycle.md +66 -66
- package/lib/motion/shotcraft/upstream/references/shots/rhythm/panel-grid-moves.md +43 -43
- package/lib/motion/shotcraft/upstream/references/shots/rhythm/quad-split-parallel-scenes.md +38 -38
- package/lib/motion/shotcraft/upstream/references/shots/rhythm/rhythm-interrupt-moves.md +38 -38
- package/lib/motion/shotcraft/upstream/references/shots/rhythm/sakuga-timing-shift.md +56 -56
- package/lib/motion/shotcraft/upstream/references/shots/rhythm/speed-ramp-freeze.md +44 -44
- package/lib/motion/shotcraft/upstream/references/shots/rhythm/trailer-grammar-moves.md +38 -38
- package/lib/motion/shotcraft/upstream/references/shots/transition/bottom-push-stack-wipe.md +63 -63
- package/lib/motion/shotcraft/upstream/references/shots/transition/card-flip-reveal.md +57 -57
- package/lib/motion/shotcraft/upstream/references/shots/transition/card-flock-tumble.md +63 -63
- package/lib/motion/shotcraft/upstream/references/shots/transition/circle-match-iris.md +58 -58
- package/lib/motion/shotcraft/upstream/references/shots/transition/gradient-transition.md +45 -45
- package/lib/motion/shotcraft/upstream/references/shots/transition/line-carry-transition.md +55 -55
- package/lib/motion/shotcraft/upstream/references/shots/transition/mosaic-reframe.md +49 -49
- package/lib/motion/shotcraft/upstream/references/shots/transition/page-turn-transitions.md +42 -42
- package/lib/motion/shotcraft/upstream/references/shots/transition/print-texture-transitions.md +42 -42
- package/lib/motion/shotcraft/upstream/references/shots/transition/shot-transitions.md +45 -45
- package/lib/motion/shotcraft/upstream/references/shots/transition/tear-streak-transitions.md +48 -48
- package/lib/motion/shotcraft/upstream/references/shots/transition/transition-hidden-cut.md +55 -55
- package/lib/motion/shotcraft/upstream/references/shots/transition/transition-travel.md +43 -43
- package/lib/motion/shotcraft/upstream/references/shots/transition/white-flash-logo-simplify-cut.md +41 -41
- package/lib/motion/shotcraft/upstream/references/shots/transition/wipe-transitions.md +42 -42
- package/lib/motion/shotcraft/upstream/references/shots/typography/blur-slide.md +59 -59
- package/lib/motion/shotcraft/upstream/references/shots/typography/brace-expand.md +55 -55
- package/lib/motion/shotcraft/upstream/references/shots/typography/countdown-arc-scatter.md +65 -65
- package/lib/motion/shotcraft/upstream/references/shots/typography/document-typewriter-reveal.md +42 -42
- package/lib/motion/shotcraft/upstream/references/shots/typography/flying-words.md +64 -64
- package/lib/motion/shotcraft/upstream/references/shots/typography/glitch-cycle.md +64 -64
- package/lib/motion/shotcraft/upstream/references/shots/typography/gradient-word-sweep.md +54 -54
- package/lib/motion/shotcraft/upstream/references/shots/typography/lead-word-zoom-assemble.md +91 -91
- package/lib/motion/shotcraft/upstream/references/shots/typography/marker-underline-title.md +51 -51
- package/lib/motion/shotcraft/upstream/references/shots/typography/outline-word-fill.md +66 -66
- package/lib/motion/shotcraft/upstream/references/shots/typography/paper-title-card.md +38 -38
- package/lib/motion/shotcraft/upstream/references/shots/typography/pill-chip-slot-cycle-handled.md +66 -66
- package/lib/motion/shotcraft/upstream/references/shots/typography/pill-slot-cycle.md +58 -58
- package/lib/motion/shotcraft/upstream/references/shots/typography/text-column-converge.md +61 -61
- package/lib/motion/shotcraft/upstream/references/shots/typography/title-demote-to-label.md +64 -64
- package/lib/motion/shotcraft/upstream/references/shots/typography/type-assembly-moves.md +45 -45
- package/lib/motion/shotcraft/upstream/references/shots/typography/type-entrance-moves.md +41 -41
- package/lib/motion/shotcraft/upstream/references/shots/typography/type-rhythm-sync.md +51 -51
- package/lib/motion/shotcraft/upstream/references/shots/typography/typewriter-moves.md +42 -42
- package/lib/motion/shotcraft/upstream/references/shots/typography/vertical-word-roll-blur-cycle.md +63 -63
- package/lib/motion/shotcraft/upstream/references/shots/typography/word-relay-filmstrip.md +57 -57
- package/lib/motion/shotcraft/upstream/references/shots/typography/word-relay-geometry.md +75 -75
- package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/avatar-bracket-carousel.md +59 -59
- package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/bezier-source-converge-merge.md +67 -67
- package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/card-stack.md +60 -60
- package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/carousel-3d.md +66 -66
- package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/cloner-depth-echo.md +40 -40
- package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/deck-deal-flyin.md +45 -45
- package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/doc-park-left-pill-deal.md +62 -62
- package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/draw-svg-trace.md +55 -55
- package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/element-body-moves.md +37 -37
- package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/integration-hub-map.md +55 -55
- package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/list-reveal.md +50 -50
- package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/list-stack-press.md +43 -43
- package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/neon-frame-forerun.md +55 -55
- package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/neon-frame-orbit-drop.md +51 -51
- package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/page-waterfall-wall.md +51 -51
- package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/product-card-progressive-assemble.md +56 -56
- package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/radial-wave.md +49 -49
- package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/research-card-stack-scroll.md +57 -57
- package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/row-embed.md +36 -36
- package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/value-stagger-gradient.md +64 -64
- package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/wall-reveal-moves.md +47 -47
- package/lib/motion/shotcraft/upstream/references/sound-design.md +170 -170
- package/lib/motion/shotcraft/upstream/references/workbench.md +157 -157
- package/lib/motion/shotcraft/upstream/template/TEMPLATE.md +103 -103
- package/lib/motion/shotcraft/upstream/template/THEMES.md +44 -44
- package/lib/motion/shotcraft/upstream/template/package.json +20 -20
- package/lib/motion/shotcraft/upstream/template/remotion.config.ts +6 -6
- package/lib/motion/shotcraft/upstream/template/src/Root.tsx +17 -17
- package/lib/motion/shotcraft/upstream/template/src/aifl/Caption.tsx +65 -65
- package/lib/motion/shotcraft/upstream/template/src/aifl/DigitRoll.tsx +48 -48
- package/lib/motion/shotcraft/upstream/template/src/aifl/FlashCut.tsx +24 -24
- package/lib/motion/shotcraft/upstream/template/src/aifl/Main.tsx +192 -192
- package/lib/motion/shotcraft/upstream/template/src/aifl/PaperTitleCard.tsx +111 -111
- package/lib/motion/shotcraft/upstream/template/src/aifl/live/PageCam.tsx +150 -150
- package/lib/motion/shotcraft/upstream/template/src/aifl/live/SceneDetail.tsx +158 -158
- package/lib/motion/shotcraft/upstream/template/src/aifl/live/SceneFlyIn.tsx +468 -468
- package/lib/motion/shotcraft/upstream/template/src/aifl/live/SceneOpen.tsx +552 -552
- package/lib/motion/shotcraft/upstream/template/src/aifl/live/SceneOutroLive.tsx +411 -411
- package/lib/motion/shotcraft/upstream/template/src/aifl/live/ScenePapers.tsx +200 -200
- package/lib/motion/shotcraft/upstream/template/src/aifl/live/SceneWbr.tsx +324 -324
- package/lib/motion/shotcraft/upstream/template/src/aifl/live-layout.json +388 -388
- package/lib/motion/shotcraft/upstream/template/src/index.ts +4 -4
- package/lib/motion/shotcraft/upstream/template/src/themes/ThemedFilm.tsx +7 -7
- package/lib/motion/shotcraft/upstream/template/src/themes/manifest.tsx +68 -68
- package/lib/motion/shotcraft/upstream/template/src/themes/palette-assets.json +1 -1
- package/lib/motion/shotcraft/upstream/template/src/themes/palette-assets.ts +24 -24
- package/lib/motion/shotcraft/upstream/template/src/themes/palettes.json +74 -74
- package/lib/motion/shotcraft/upstream/template/src/themes/visual-theme.tsx +91 -91
- package/lib/motion/shotcraft/upstream/template/src/workbench.ts +213 -213
- package/lib/motion/shotcraft/upstream/template/tsconfig.json +15 -15
- package/lib/motion/style-frames.js +306 -306
- package/lib/motion/sync.js +214 -214
- package/lib/motion-library.js +1 -1
- package/lib/motion-project.js +105 -105
- package/lib/motion-render-worker.js +174 -174
- package/lib/routing/router.js +222 -222
- package/lib/routing/vendor/README.md +96 -96
- package/lib/routing/vendor/libavoid-routing.js +753 -753
- package/lib/routing/vendor/libavoid.min.js +59 -59
- package/lib/svg-export.js +1344 -0
- package/lib/video-trace-pool.js +128 -128
- package/package.json +3 -2
- package/LICENSE +0 -4175
package/lib/motion/shotcraft/upstream/references/shots/typography/vertical-word-roll-blur-cycle.md
CHANGED
|
@@ -1,63 +1,63 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: vertical-word-roll-blur-cycle
|
|
3
|
-
一句话: 句尾词换成竖向滚轮,3 次换词各 0.55s(outQuint 七成 + outBack 三成,前快后极慢带微过冲),相邻行按距离上垂直 blur 与灰度,中心词落定瞬间从灰染成强调色
|
|
4
|
-
适用: "Crafted for ___" / "Built for ___" 这类句干 + 受众/对象列举的一句话卖点;浅底品牌片的干净一拍
|
|
5
|
-
时长: 约 5.0s(150f@30fps:静置 → 3 次换词 → 尾部整组淡出)
|
|
6
|
-
能量: 中(稳定三拍,无峰值)
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## 意图
|
|
10
|
-
句尾换词的最优解是滚轮而不是淡入淡出:滚轮自带**方向**(往上翻页),
|
|
11
|
-
观众知道"还有下一个"。这卡的两个身份记号是相邻行的**垂直 blur**
|
|
12
|
-
(滚轮景深,模拟机械转筒的失焦)和落定时的**染色**(灰→强调色,
|
|
13
|
-
"这个才是答案")。句干(demo `Crafted for`)全程纹丝不动——眼睛钉在滚轮上,
|
|
14
|
-
句干一晃列举感就散。
|
|
15
|
-
|
|
16
|
-
## 动效核心
|
|
17
|
-
- 位置量 `p` 由 3 段窗累加:`STEPS = [0.16, 0.36, 0.56]`,每段窗 0.11
|
|
18
|
-
(≈16f,约 0.55s),段间留 0.09 静置给观众读词
|
|
19
|
-
- 每段缓动是**混合曲线**:`0.7·E.outQuint(u) + 0.3·E.outBack(u)`——
|
|
20
|
-
outQuint 给"前快后极慢"的机械减速,outBack 那三成给落定的微过冲回落
|
|
21
|
-
- reel 定位 `translateY(ROW - p·ROW)`,ROW=44px,mask 高 `ROW·3`=132px
|
|
22
|
-
(露三行)——中心行恒定是 mask 第二行
|
|
23
|
-
- 距离驱动的三通道,`d = |i - p|`:
|
|
24
|
-
- blur:`d<1` 时 `3d`,`d≥1` 时 `3 + 2·min(d-1,1)`(最远 5px);demo 用 SVG
|
|
25
|
-
`feGaussianBlur stdDeviation="0 b"` 只糊纵向,转动时再按滚轮速度叠 ≤4px 纵向运动模糊(静止为 0)
|
|
26
|
-
- opacity:`d<1` 时 `1 - 0.65d`,否则 `max(0.1, 0.35 - 0.23(d-1))`
|
|
27
|
-
- 颜色:`mixHex(ACCENT_DIM, ACCENT, clamp01(1 - 2.4d))` —— **d>0.42 就完全
|
|
28
|
-
是暗色**,所以只有真正落定的那一刻才是强调色,滚动中途全程灰
|
|
29
|
-
- 收尾 `seg(t, 0.9, 0.985)` 整组(句干 + 滚轮)淡出,不留残影给下一镜
|
|
30
|
-
|
|
31
|
-
## 参数表
|
|
32
|
-
| 参数 | 典型值 | 调节手感 |
|
|
33
|
-
|------|--------|----------|
|
|
34
|
-
| 词表 | 4 词(Launches→Demos→Promos→Every Shot),3 次换词 | 末词是结论(最宽那个词),前三个是例子;>5 词观众开始数,<3 词读不出"列举" |
|
|
35
|
-
| 拍点 | `[0.16, 0.36, 0.56]`,窗 0.11(≈16f) | 段间 0.09(≈13f)静置是给读词的,读不完的拍子等于没换;窗 >0.18 新旧同屏太久 |
|
|
36
|
-
| 缓动配方 | `0.7·outQuint + 0.3·outBack` | outQuint 是机械减速的来源;outBack 那三成给落定"咔"一下,纯 outQuint 读作电子屏滑动 |
|
|
37
|
-
| 行高/视窗 | ROW 44px、mask `44×3`px、词宽 190px | 露三行才有滚筒感(露一行读作淡入淡出);宽度写死 190 是为不挤句干,词更长要同步加 |
|
|
38
|
-
| 相邻行 blur | 邻行 3px,最远 5px,**仅垂直向感知** | blur 是"滚筒景深"的身份证,删了退化成词条平移;>8px 邻行糊成灰条看不出是字 |
|
|
39
|
-
| 落定染色 | `1 - 2.4d` 映射 ACCENT_DIM→ACCENT | 系数 2.4 让染色只发生在落定瞬间;<1.5 滚动中途就上色,答案感散掉 |
|
|
40
|
-
| 字号字重 | 句干与滚轮同为 30px/800、`letter-spacing:-.5px` | 必须完全一致——滚轮词比句干大就读作两个元素,不是一句话 |
|
|
41
|
-
| 收尾淡出 | `seg(t, 0.9, 0.985)` 整组 | 末词落定后约 40f 静置再淡出;不 hold 等于白列举 |
|
|
42
|
-
|
|
43
|
-
## 已知坑
|
|
44
|
-
- demo 在灰阶/占位素材上调校通过——参数是调校起点非实战定稿,
|
|
45
|
-
首次实战须以真实素材回验
|
|
46
|
-
- **mask 宽度写死 190px**:换词表时最长词(demo `Every Shot`,带空格的词组要 `white-space: nowrap`)必须能装进去,
|
|
47
|
-
否则被裁字;反之词都很短则右侧留大片空白,句子重心偏左——换词表必须
|
|
48
|
-
重量一次宽度
|
|
49
|
-
- 词长差别不宜过大:mask 宽度是固定的(本卡不做宽度自适应,那是
|
|
50
|
-
pill-chip-slot-cycle-handled 的活),词长差 >2 倍时短词在框里显得孤立
|
|
51
|
-
- 句干必须钉死:demo 用 `flex + gap:14px` 是因为 mask 宽度恒定不会推挤
|
|
52
|
-
句干——一旦改成宽度自适应的滚轮,就必须换成绝对定位锚左端,
|
|
53
|
-
否则句干随词宽左右甩
|
|
54
|
-
- `p` 是三段窗**累加**出来的,所以三段窗不能重叠:重叠会让 p 在一帧内
|
|
55
|
-
跨越一整行,滚轮"跳格"
|
|
56
|
-
- 与 pill-chip-slot-cycle-handled 分工:那卡是深色胶囊 + 宽度自适应挤开
|
|
57
|
-
(词是徽章),本卡是裸词滚轮(词是句子成分)——同片只留一个
|
|
58
|
-
- 声音:每次落定是一个节奏点,配轻机械/开关音;三连发要交替双样本
|
|
59
|
-
防机枪感,配法纪律见 sound-design.md
|
|
60
|
-
|
|
61
|
-
## 参考实现
|
|
62
|
-
demos/typography/vertical-word-roll-blur-cycle/
|
|
63
|
-
(VerticalWordRollBlurCycle.tsx)
|
|
1
|
+
---
|
|
2
|
+
name: vertical-word-roll-blur-cycle
|
|
3
|
+
一句话: 句尾词换成竖向滚轮,3 次换词各 0.55s(outQuint 七成 + outBack 三成,前快后极慢带微过冲),相邻行按距离上垂直 blur 与灰度,中心词落定瞬间从灰染成强调色
|
|
4
|
+
适用: "Crafted for ___" / "Built for ___" 这类句干 + 受众/对象列举的一句话卖点;浅底品牌片的干净一拍
|
|
5
|
+
时长: 约 5.0s(150f@30fps:静置 → 3 次换词 → 尾部整组淡出)
|
|
6
|
+
能量: 中(稳定三拍,无峰值)
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 意图
|
|
10
|
+
句尾换词的最优解是滚轮而不是淡入淡出:滚轮自带**方向**(往上翻页),
|
|
11
|
+
观众知道"还有下一个"。这卡的两个身份记号是相邻行的**垂直 blur**
|
|
12
|
+
(滚轮景深,模拟机械转筒的失焦)和落定时的**染色**(灰→强调色,
|
|
13
|
+
"这个才是答案")。句干(demo `Crafted for`)全程纹丝不动——眼睛钉在滚轮上,
|
|
14
|
+
句干一晃列举感就散。
|
|
15
|
+
|
|
16
|
+
## 动效核心
|
|
17
|
+
- 位置量 `p` 由 3 段窗累加:`STEPS = [0.16, 0.36, 0.56]`,每段窗 0.11
|
|
18
|
+
(≈16f,约 0.55s),段间留 0.09 静置给观众读词
|
|
19
|
+
- 每段缓动是**混合曲线**:`0.7·E.outQuint(u) + 0.3·E.outBack(u)`——
|
|
20
|
+
outQuint 给"前快后极慢"的机械减速,outBack 那三成给落定的微过冲回落
|
|
21
|
+
- reel 定位 `translateY(ROW - p·ROW)`,ROW=44px,mask 高 `ROW·3`=132px
|
|
22
|
+
(露三行)——中心行恒定是 mask 第二行
|
|
23
|
+
- 距离驱动的三通道,`d = |i - p|`:
|
|
24
|
+
- blur:`d<1` 时 `3d`,`d≥1` 时 `3 + 2·min(d-1,1)`(最远 5px);demo 用 SVG
|
|
25
|
+
`feGaussianBlur stdDeviation="0 b"` 只糊纵向,转动时再按滚轮速度叠 ≤4px 纵向运动模糊(静止为 0)
|
|
26
|
+
- opacity:`d<1` 时 `1 - 0.65d`,否则 `max(0.1, 0.35 - 0.23(d-1))`
|
|
27
|
+
- 颜色:`mixHex(ACCENT_DIM, ACCENT, clamp01(1 - 2.4d))` —— **d>0.42 就完全
|
|
28
|
+
是暗色**,所以只有真正落定的那一刻才是强调色,滚动中途全程灰
|
|
29
|
+
- 收尾 `seg(t, 0.9, 0.985)` 整组(句干 + 滚轮)淡出,不留残影给下一镜
|
|
30
|
+
|
|
31
|
+
## 参数表
|
|
32
|
+
| 参数 | 典型值 | 调节手感 |
|
|
33
|
+
|------|--------|----------|
|
|
34
|
+
| 词表 | 4 词(Launches→Demos→Promos→Every Shot),3 次换词 | 末词是结论(最宽那个词),前三个是例子;>5 词观众开始数,<3 词读不出"列举" |
|
|
35
|
+
| 拍点 | `[0.16, 0.36, 0.56]`,窗 0.11(≈16f) | 段间 0.09(≈13f)静置是给读词的,读不完的拍子等于没换;窗 >0.18 新旧同屏太久 |
|
|
36
|
+
| 缓动配方 | `0.7·outQuint + 0.3·outBack` | outQuint 是机械减速的来源;outBack 那三成给落定"咔"一下,纯 outQuint 读作电子屏滑动 |
|
|
37
|
+
| 行高/视窗 | ROW 44px、mask `44×3`px、词宽 190px | 露三行才有滚筒感(露一行读作淡入淡出);宽度写死 190 是为不挤句干,词更长要同步加 |
|
|
38
|
+
| 相邻行 blur | 邻行 3px,最远 5px,**仅垂直向感知** | blur 是"滚筒景深"的身份证,删了退化成词条平移;>8px 邻行糊成灰条看不出是字 |
|
|
39
|
+
| 落定染色 | `1 - 2.4d` 映射 ACCENT_DIM→ACCENT | 系数 2.4 让染色只发生在落定瞬间;<1.5 滚动中途就上色,答案感散掉 |
|
|
40
|
+
| 字号字重 | 句干与滚轮同为 30px/800、`letter-spacing:-.5px` | 必须完全一致——滚轮词比句干大就读作两个元素,不是一句话 |
|
|
41
|
+
| 收尾淡出 | `seg(t, 0.9, 0.985)` 整组 | 末词落定后约 40f 静置再淡出;不 hold 等于白列举 |
|
|
42
|
+
|
|
43
|
+
## 已知坑
|
|
44
|
+
- demo 在灰阶/占位素材上调校通过——参数是调校起点非实战定稿,
|
|
45
|
+
首次实战须以真实素材回验
|
|
46
|
+
- **mask 宽度写死 190px**:换词表时最长词(demo `Every Shot`,带空格的词组要 `white-space: nowrap`)必须能装进去,
|
|
47
|
+
否则被裁字;反之词都很短则右侧留大片空白,句子重心偏左——换词表必须
|
|
48
|
+
重量一次宽度
|
|
49
|
+
- 词长差别不宜过大:mask 宽度是固定的(本卡不做宽度自适应,那是
|
|
50
|
+
pill-chip-slot-cycle-handled 的活),词长差 >2 倍时短词在框里显得孤立
|
|
51
|
+
- 句干必须钉死:demo 用 `flex + gap:14px` 是因为 mask 宽度恒定不会推挤
|
|
52
|
+
句干——一旦改成宽度自适应的滚轮,就必须换成绝对定位锚左端,
|
|
53
|
+
否则句干随词宽左右甩
|
|
54
|
+
- `p` 是三段窗**累加**出来的,所以三段窗不能重叠:重叠会让 p 在一帧内
|
|
55
|
+
跨越一整行,滚轮"跳格"
|
|
56
|
+
- 与 pill-chip-slot-cycle-handled 分工:那卡是深色胶囊 + 宽度自适应挤开
|
|
57
|
+
(词是徽章),本卡是裸词滚轮(词是句子成分)——同片只留一个
|
|
58
|
+
- 声音:每次落定是一个节奏点,配轻机械/开关音;三连发要交替双样本
|
|
59
|
+
防机枪感,配法纪律见 sound-design.md
|
|
60
|
+
|
|
61
|
+
## 参考实现
|
|
62
|
+
demos/typography/vertical-word-roll-blur-cycle/
|
|
63
|
+
(VerticalWordRollBlurCycle.tsx)
|
|
@@ -1,57 +1,57 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: word-relay-filmstrip
|
|
3
|
-
一句话: 左列黑白相间等高页面卡步进滚动(焦点卡全亮、邻卡离焦压暗)、右侧衬线大词原位接力(名词恒定+动词轮换)——切词瞬间才滚动一格,词块垂直中心与当前页面卡中点精确对齐
|
|
4
|
-
适用: "一个主体 × 多种能力"的枚举段(Shotcraft frames/builds/ships…);作品集/案例流展示;产品多场景巡礼
|
|
5
|
-
时长: 每词期 ~1.5–2s × 3–4 词;demo 180f(6s)
|
|
6
|
-
能量: 中低(编辑部气质,节奏靠切词的"咔哒"感)
|
|
7
|
-
标签: ui-entrance
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
## 意图
|
|
11
|
-
左边是证据(页面截图胶片),右边是论点(大词):动词换一次,
|
|
12
|
-
胶片就步进一格给出新证据——文字与画面互为注脚。命门是**步进制**:
|
|
13
|
-
左列平时完全静止,只在切词瞬间滚动一格(滚动=换证据的机械动作),
|
|
14
|
-
持续滚动会让左列沦为背景装饰、切词失去"咔哒"感。第二命门是
|
|
15
|
-
**对齐**:大词块垂直中心必须与当前页面卡中点精确对齐(像素级),
|
|
16
|
-
歪了整个版式的"编辑部严谨感"就塌了。
|
|
17
|
-
|
|
18
|
-
## 动效核心
|
|
19
|
-
- 舞台:graphite 近单色暗场 + 金色点缀;左列:等高页面卡(940×530,间距 105)纵向排列,
|
|
20
|
-
黑白(深浅)强制相间以显滚动步进;切词窗口内 18f 不对称 in-out(EASE.swift)滚动恰好一卡高,
|
|
21
|
-
其余时间零位移,快段叠纵向运动模糊
|
|
22
|
-
- 景深:按离焦点距离 `dist = |卡顶 - 275| / 635`,邻卡压暗 `0.68·dist`、缩到 0.94、虚化 ≤3px——
|
|
23
|
-
步进时新证据"对焦"进来
|
|
24
|
-
- 右侧:衬线体(Didot 类,140px)两行——主体名词「Shotcraft」正体次级墨恒定,动词斜体白字原位接力:
|
|
25
|
-
旧词 10f 灰化 → 切点起 8f ease-in 从遮罩上沿升出(先出),新词切点 +7f 起逐字母从遮罩下沿升起
|
|
26
|
-
(1.2f 错峰,金色句点最后到,后进),先出后进不许叠影(判例:v2 叠影"resebuilds"被抓)
|
|
27
|
-
- 金色引线:从焦点卡右缘指向词块中线 y=540,切词起 6f 收回、切点 +10f 后 16f 重画;
|
|
28
|
-
词块上方 mono 序号 01/03、下方 32px 证据注脚随动词同步接力
|
|
29
|
-
- 对齐:词块两行各一个 154px 行盒,`top = 540 - 154`,总高中心 = 当前卡顶 + 卡高/2 = y540@1080p
|
|
30
|
-
(精确到个位像素)
|
|
31
|
-
- 滚动与切词同步:滚动起点=旧词开始灰化,滚动终点=新词落稳
|
|
32
|
-
|
|
33
|
-
## 参数表
|
|
34
|
-
| 参数 | 典型值 | 调节手感 |
|
|
35
|
-
|------|--------|----------|
|
|
36
|
-
| 页面卡 | 等高(530px@1080p)、黑白相间、约半屏宽 | 不等高/同色系读不出步进;卡太窄失去"证据"分量 |
|
|
37
|
-
| 词期 | ~45–60f/词 | <40f 读不完词+胶片看不清;词期不必均匀 |
|
|
38
|
-
| 滚动窗口 | ~16–18f 不对称 in-out,恰一卡高 | 持续滚动=命门违例;滚过头/不足读作机械故障 |
|
|
39
|
-
| 词接力 | 旧词灰化后 8f 升出 → 切点 +7f 新词逐字母升起(16f/字母,1.2f 错峰) | 同帧交叉必叠影;间隙 >10f 读作断片 |
|
|
40
|
-
| 垂直对齐 | 词块中心=当前卡中点(像素级) | 用户单点意见"文字高度和中间的页面中点要对齐";差 >8px 可感 |
|
|
41
|
-
| 字体 | 衬线 Didot 类、动词斜体白字 / 名词正体次级墨 | 无衬线会丢"编辑部"气质;动词要比名词亮,它才是换的那一个 |
|
|
42
|
-
| 邻卡离焦 | 压暗 0.68·dist、缩 6%、虚化 ≤3px | 不压暗则邻卡和焦点卡抢戏;虚化 >5px 读不出是页面 |
|
|
43
|
-
|
|
44
|
-
## 已知坑
|
|
45
|
-
- demo 在灰阶/占位素材上调校通过——参数是调校起点非实战定稿,
|
|
46
|
-
首次实战须以真实素材回验
|
|
47
|
-
- 与 text-column-converge 分工:那张是左右对峙合拢的揭晓戏;
|
|
48
|
-
本卡是纵向证据流+原位接力,无合拢无揭晓
|
|
49
|
-
- 与 pill-slot-cycle 分工:那张是胶囊槽位轮换 UI 元素;
|
|
50
|
-
本卡是版式级的图文对位系统
|
|
51
|
-
- 实战素材:页面卡应使用真实截图(demo 为手搓假页面——分镜脚本 / 渲染流水线 / 成片 PR 评审,每个动词停在
|
|
52
|
-
与之对应的证据卡上,残余差距已知);截图亮度要人工分档保证相间可读
|
|
53
|
-
|
|
54
|
-
## 参考实现
|
|
55
|
-
demos/typography/word-relay-filmstrip/
|
|
56
|
-
(WordRelayFilmstrip.tsx)
|
|
57
|
-
原片出处:perplexity-promo.mp4 ≈76–90s
|
|
1
|
+
---
|
|
2
|
+
name: word-relay-filmstrip
|
|
3
|
+
一句话: 左列黑白相间等高页面卡步进滚动(焦点卡全亮、邻卡离焦压暗)、右侧衬线大词原位接力(名词恒定+动词轮换)——切词瞬间才滚动一格,词块垂直中心与当前页面卡中点精确对齐
|
|
4
|
+
适用: "一个主体 × 多种能力"的枚举段(Shotcraft frames/builds/ships…);作品集/案例流展示;产品多场景巡礼
|
|
5
|
+
时长: 每词期 ~1.5–2s × 3–4 词;demo 180f(6s)
|
|
6
|
+
能量: 中低(编辑部气质,节奏靠切词的"咔哒"感)
|
|
7
|
+
标签: ui-entrance
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## 意图
|
|
11
|
+
左边是证据(页面截图胶片),右边是论点(大词):动词换一次,
|
|
12
|
+
胶片就步进一格给出新证据——文字与画面互为注脚。命门是**步进制**:
|
|
13
|
+
左列平时完全静止,只在切词瞬间滚动一格(滚动=换证据的机械动作),
|
|
14
|
+
持续滚动会让左列沦为背景装饰、切词失去"咔哒"感。第二命门是
|
|
15
|
+
**对齐**:大词块垂直中心必须与当前页面卡中点精确对齐(像素级),
|
|
16
|
+
歪了整个版式的"编辑部严谨感"就塌了。
|
|
17
|
+
|
|
18
|
+
## 动效核心
|
|
19
|
+
- 舞台:graphite 近单色暗场 + 金色点缀;左列:等高页面卡(940×530,间距 105)纵向排列,
|
|
20
|
+
黑白(深浅)强制相间以显滚动步进;切词窗口内 18f 不对称 in-out(EASE.swift)滚动恰好一卡高,
|
|
21
|
+
其余时间零位移,快段叠纵向运动模糊
|
|
22
|
+
- 景深:按离焦点距离 `dist = |卡顶 - 275| / 635`,邻卡压暗 `0.68·dist`、缩到 0.94、虚化 ≤3px——
|
|
23
|
+
步进时新证据"对焦"进来
|
|
24
|
+
- 右侧:衬线体(Didot 类,140px)两行——主体名词「Shotcraft」正体次级墨恒定,动词斜体白字原位接力:
|
|
25
|
+
旧词 10f 灰化 → 切点起 8f ease-in 从遮罩上沿升出(先出),新词切点 +7f 起逐字母从遮罩下沿升起
|
|
26
|
+
(1.2f 错峰,金色句点最后到,后进),先出后进不许叠影(判例:v2 叠影"resebuilds"被抓)
|
|
27
|
+
- 金色引线:从焦点卡右缘指向词块中线 y=540,切词起 6f 收回、切点 +10f 后 16f 重画;
|
|
28
|
+
词块上方 mono 序号 01/03、下方 32px 证据注脚随动词同步接力
|
|
29
|
+
- 对齐:词块两行各一个 154px 行盒,`top = 540 - 154`,总高中心 = 当前卡顶 + 卡高/2 = y540@1080p
|
|
30
|
+
(精确到个位像素)
|
|
31
|
+
- 滚动与切词同步:滚动起点=旧词开始灰化,滚动终点=新词落稳
|
|
32
|
+
|
|
33
|
+
## 参数表
|
|
34
|
+
| 参数 | 典型值 | 调节手感 |
|
|
35
|
+
|------|--------|----------|
|
|
36
|
+
| 页面卡 | 等高(530px@1080p)、黑白相间、约半屏宽 | 不等高/同色系读不出步进;卡太窄失去"证据"分量 |
|
|
37
|
+
| 词期 | ~45–60f/词 | <40f 读不完词+胶片看不清;词期不必均匀 |
|
|
38
|
+
| 滚动窗口 | ~16–18f 不对称 in-out,恰一卡高 | 持续滚动=命门违例;滚过头/不足读作机械故障 |
|
|
39
|
+
| 词接力 | 旧词灰化后 8f 升出 → 切点 +7f 新词逐字母升起(16f/字母,1.2f 错峰) | 同帧交叉必叠影;间隙 >10f 读作断片 |
|
|
40
|
+
| 垂直对齐 | 词块中心=当前卡中点(像素级) | 用户单点意见"文字高度和中间的页面中点要对齐";差 >8px 可感 |
|
|
41
|
+
| 字体 | 衬线 Didot 类、动词斜体白字 / 名词正体次级墨 | 无衬线会丢"编辑部"气质;动词要比名词亮,它才是换的那一个 |
|
|
42
|
+
| 邻卡离焦 | 压暗 0.68·dist、缩 6%、虚化 ≤3px | 不压暗则邻卡和焦点卡抢戏;虚化 >5px 读不出是页面 |
|
|
43
|
+
|
|
44
|
+
## 已知坑
|
|
45
|
+
- demo 在灰阶/占位素材上调校通过——参数是调校起点非实战定稿,
|
|
46
|
+
首次实战须以真实素材回验
|
|
47
|
+
- 与 text-column-converge 分工:那张是左右对峙合拢的揭晓戏;
|
|
48
|
+
本卡是纵向证据流+原位接力,无合拢无揭晓
|
|
49
|
+
- 与 pill-slot-cycle 分工:那张是胶囊槽位轮换 UI 元素;
|
|
50
|
+
本卡是版式级的图文对位系统
|
|
51
|
+
- 实战素材:页面卡应使用真实截图(demo 为手搓假页面——分镜脚本 / 渲染流水线 / 成片 PR 评审,每个动词停在
|
|
52
|
+
与之对应的证据卡上,残余差距已知);截图亮度要人工分档保证相间可读
|
|
53
|
+
|
|
54
|
+
## 参考实现
|
|
55
|
+
demos/typography/word-relay-filmstrip/
|
|
56
|
+
(WordRelayFilmstrip.tsx)
|
|
57
|
+
原片出处:perplexity-promo.mp4 ≈76–90s
|
|
@@ -1,75 +1,75 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: word-relay-geometry
|
|
3
|
-
一句话: 三个利益词各带一套专属几何接力——虚线大圆减速自转 + 彗星弧飞跑 → 三实线圆 trim 依次生长后收拢咬紧 → 镀铬金属 sheen 扫过后一拍收成纯白;旧词缩到 0.86 淡出,新词描边→填充揭示
|
|
4
|
-
适用: 三点式利益陈述(更快/更好/更强);品牌价值观段落;需要"一词一世界"的中段推进
|
|
5
|
-
时长: 约 6.0s(180f@30fps:三段各 ≈60f,段间重叠 6f)
|
|
6
|
-
能量: 中高(三拍推进 + 全程几何运动 + 背景粒子,无静止帧)
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## 意图
|
|
10
|
-
三点式利益陈述最容易做成三张字卡硬切。接力的做法是给每个词配一套
|
|
11
|
-
**只属于它的几何**:虚线圆是"在转"(快)、三圆相扣并收拢是"互相咬合"(紧 / 好)、
|
|
12
|
-
金属扫光是"材质硬"(强)——几何本身就在替形容词做论证。第三个词
|
|
13
|
-
留了升格待遇(sheen 扫光 + 收白),因为它是结论。背景微尘、共用舞台光与底部
|
|
14
|
-
三段进度条把三拍缝成一个连续空间,不然还是三张卡。
|
|
15
|
-
|
|
16
|
-
## 动效核心
|
|
17
|
-
(demo 版本:石墨暗场电影字卡,词表 Faster / Tighter / Stronger,1920×1080 原生坐标)
|
|
18
|
-
- 三段按帧排:Faster 2→62、Tighter 56→122、Stronger 116→180;每段入场 14f(snappy,
|
|
19
|
-
`scale 1.06→1` + 10px 去虚)、出场 10f(exit 强 ease-in,`scale 1→0.86` + 12px 退焦),
|
|
20
|
-
交接重叠 6f 是交棒而非硬切;末段无出场,收白后 hold 22f
|
|
21
|
-
- 每词三层文字(230px/800,静态字库 Helvetica Neue):`outline` 层 `-webkit-text-stroke:2px`
|
|
22
|
-
+ 透明填充,`fill` 层纯白——**描边先到位,填充后揭示**;三层共用 `padding: 0.08em 0.1em 0.28em`,
|
|
23
|
-
否则 mask / background-clip 只画在盒内,会裁掉 g 的下伸部与末字右沿、露出底下的描边层
|
|
24
|
-
- 前两词的填充是 ±7% 柔边 `mask-image` 横向擦入(入场后 10f 起、18f,swift),描边层透明度
|
|
25
|
-
同步降到 0.2 留一点重影
|
|
26
|
-
- Faster 的几何:虚线大圆(r=400、`dash 10 16`)+ 外圈 120 格刻度环(r=452,反向慢转),
|
|
27
|
-
入场 22f 从 0.4 snappy 长到 1,同时多转 160° 减速刹住(飞轮感),之后匀速慢转永不停;一道 16 段
|
|
28
|
-
渐隐的白色彗星弧沿 r=400 以 7.5°/帧飞跑——"快"由两层相对转速 + 彗星的速度差读出
|
|
29
|
-
- Tighter 的几何:三实线圆(r=218)`pathLength=1` + dashoffset trim 生长,起笔绕各自圆心
|
|
30
|
-
`rotate(-90 cx 0)`,延迟 0/6/12f、各 22f(out),笔头一粒发光点长满即熄;92f 起三圆间距
|
|
31
|
-
340→300 收拢 14f(swift),落定时圆线提亮一次、四个相交点亮起菱形铆钉光点(overshoot 弹出)
|
|
32
|
-
——"紧"是看得见的收拢动作
|
|
33
|
-
- Stronger 无几何:120f 起描边 → 竖向镀铬渐变(亮顶—暗腰—亮底);124→148f 一道带香槟暖色的
|
|
34
|
-
窄白带(`100deg`、`background-size:300%`)从左扫到右;146→158f 收成纯白 + 一次泛光脉冲,
|
|
35
|
-
脚下横向光带从 0.2 宽 snappy 展开,舞台主光同拍提亮——结论词独享的升格待遇
|
|
36
|
-
- 词下 40px 副句给产品证据(rise 逐词升起,demo 是 video-shotcraft 的三句宣传),左上 mono 计数「01 / 03」、
|
|
37
|
-
右上镜刻标志 + video-shotcraft 小写字标、底部三段进度条(label 级纹理);
|
|
38
|
-
相机全程 1→1.025 smooth 极缓推进(不抖)
|
|
39
|
-
|
|
40
|
-
## 参数表
|
|
41
|
-
| 参数 | 典型值 | 调节手感 |
|
|
42
|
-
|------|--------|----------|
|
|
43
|
-
| 三段时段 | 各 ≈60f,重叠 6f | 每词约 2s 是"读词 + 看几何"的下限;重叠 <3f 读作硬切,>12f 两词同屏打架 |
|
|
44
|
-
| 入/出场窗 | 入 14f snappy / 出 10f exit | 出场比入场短是对的(退场要决绝);出场用 out 曲线会读作"舍不得走" |
|
|
45
|
-
| outline→fill | 18f swift,±7% 柔边,outline 留 0.2 | 留一点描边做重影是质感来源,降到 0 字变扁;窗 >30f 擦入慢得像加载条 |
|
|
46
|
-
| 虚线圆 | r=400、`dash 10 16`、scale 0.4→1、入场多转 160° 刹住 | 刹车是"快"的第一证据;scale 起点 >0.7 就没有"长出来" |
|
|
47
|
-
| 彗星弧 | 7.5°/帧、16 段渐隐 | 比环快 8 倍以上才读得出"速度差";段数 <8 尾巴断成虚线 |
|
|
48
|
-
| trim 生长 | 延迟 6f/圆、各 22f | 相位差是"依次相扣"的关键,同时生长读作三个独立圆 |
|
|
49
|
-
| 收拢 | 间距 340→300(14f swift)+ 交点铆钉 | 收拢量 <20px 看不出动作;>60px 三圆挤成一坨 |
|
|
50
|
-
| sheen 扫光 | `100deg`、`background-size:300%`、24f smooth | 300% 保证白带只占字宽一小段(=金属高光);镀铬底层不能省,否则扫光前是一块灰字 |
|
|
51
|
-
| 收白 | 12f + 泛光脉冲 + 脚下光带 | 这一下是全片唯一的"结论"待遇;删了三个词就是平级,第三点没有落点 |
|
|
52
|
-
| 字号配色 | 词 230px/800、副句 40px、几何 `rgba(236,238,244,.42)`、graphite 暗场 | 几何比字暗一档是层级,几何比字亮就抢主角 |
|
|
53
|
-
|
|
54
|
-
## 已知坑
|
|
55
|
-
- demo 在灰阶/占位素材上调校通过——参数是调校起点非实战定稿,
|
|
56
|
-
首次实战须以真实素材回验
|
|
57
|
-
- **三个词必须是同一句法的三点(demo 都是比较级单词,6–8 字母)**:
|
|
58
|
-
时段是等长的,词长差大时几何(圆半径、间距)都是写死的坐标,
|
|
59
|
-
长词会顶出虚线圆或压到相扣圆上——换词表要同步调 r 与收拢间距
|
|
60
|
-
- `-webkit-text-stroke` 是前缀属性:Chromium/WebKit 才有,Firefox 下描边层
|
|
61
|
-
直接是透明(词消失)。Remotion 渲染走 Chromium 无碍,但预览环境要注意
|
|
62
|
-
- SVG trim 用的 `pathLength=1` 归一化在部分老版本浏览器上对 `<circle>`
|
|
63
|
-
支持不全,退化表现是圆一次性全画出(丢生长感)——移植时先在目标
|
|
64
|
-
渲染器上验一帧
|
|
65
|
-
- 出场 trim 是"入场 trim 减出场 seg"直接相减:两段窗若靠得太近
|
|
66
|
-
(段长 <40f)会出现还没长完就开始收,圆只画出一小段
|
|
67
|
-
- sheen 层与 fill 层是叠着的两个 DOM:切换靠透明度交叉,若把 `white` 窗
|
|
68
|
-
与 `sh` 窗调成重叠不足,会有 1–2 帧两层都半透(字发灰)
|
|
69
|
-
- 第三个词的升格待遇只能给一次:全片三个词都上 sheen 就没有结论感
|
|
70
|
-
(P4 手法去重精神);声音上三次入场是三个节奏点,第三个词的收白值得
|
|
71
|
-
单独一记重音,配法纪律见 sound-design.md
|
|
72
|
-
|
|
73
|
-
## 参考实现
|
|
74
|
-
demos/typography/word-relay-geometry/
|
|
75
|
-
(WordRelayGeometry.tsx)
|
|
1
|
+
---
|
|
2
|
+
name: word-relay-geometry
|
|
3
|
+
一句话: 三个利益词各带一套专属几何接力——虚线大圆减速自转 + 彗星弧飞跑 → 三实线圆 trim 依次生长后收拢咬紧 → 镀铬金属 sheen 扫过后一拍收成纯白;旧词缩到 0.86 淡出,新词描边→填充揭示
|
|
4
|
+
适用: 三点式利益陈述(更快/更好/更强);品牌价值观段落;需要"一词一世界"的中段推进
|
|
5
|
+
时长: 约 6.0s(180f@30fps:三段各 ≈60f,段间重叠 6f)
|
|
6
|
+
能量: 中高(三拍推进 + 全程几何运动 + 背景粒子,无静止帧)
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 意图
|
|
10
|
+
三点式利益陈述最容易做成三张字卡硬切。接力的做法是给每个词配一套
|
|
11
|
+
**只属于它的几何**:虚线圆是"在转"(快)、三圆相扣并收拢是"互相咬合"(紧 / 好)、
|
|
12
|
+
金属扫光是"材质硬"(强)——几何本身就在替形容词做论证。第三个词
|
|
13
|
+
留了升格待遇(sheen 扫光 + 收白),因为它是结论。背景微尘、共用舞台光与底部
|
|
14
|
+
三段进度条把三拍缝成一个连续空间,不然还是三张卡。
|
|
15
|
+
|
|
16
|
+
## 动效核心
|
|
17
|
+
(demo 版本:石墨暗场电影字卡,词表 Faster / Tighter / Stronger,1920×1080 原生坐标)
|
|
18
|
+
- 三段按帧排:Faster 2→62、Tighter 56→122、Stronger 116→180;每段入场 14f(snappy,
|
|
19
|
+
`scale 1.06→1` + 10px 去虚)、出场 10f(exit 强 ease-in,`scale 1→0.86` + 12px 退焦),
|
|
20
|
+
交接重叠 6f 是交棒而非硬切;末段无出场,收白后 hold 22f
|
|
21
|
+
- 每词三层文字(230px/800,静态字库 Helvetica Neue):`outline` 层 `-webkit-text-stroke:2px`
|
|
22
|
+
+ 透明填充,`fill` 层纯白——**描边先到位,填充后揭示**;三层共用 `padding: 0.08em 0.1em 0.28em`,
|
|
23
|
+
否则 mask / background-clip 只画在盒内,会裁掉 g 的下伸部与末字右沿、露出底下的描边层
|
|
24
|
+
- 前两词的填充是 ±7% 柔边 `mask-image` 横向擦入(入场后 10f 起、18f,swift),描边层透明度
|
|
25
|
+
同步降到 0.2 留一点重影
|
|
26
|
+
- Faster 的几何:虚线大圆(r=400、`dash 10 16`)+ 外圈 120 格刻度环(r=452,反向慢转),
|
|
27
|
+
入场 22f 从 0.4 snappy 长到 1,同时多转 160° 减速刹住(飞轮感),之后匀速慢转永不停;一道 16 段
|
|
28
|
+
渐隐的白色彗星弧沿 r=400 以 7.5°/帧飞跑——"快"由两层相对转速 + 彗星的速度差读出
|
|
29
|
+
- Tighter 的几何:三实线圆(r=218)`pathLength=1` + dashoffset trim 生长,起笔绕各自圆心
|
|
30
|
+
`rotate(-90 cx 0)`,延迟 0/6/12f、各 22f(out),笔头一粒发光点长满即熄;92f 起三圆间距
|
|
31
|
+
340→300 收拢 14f(swift),落定时圆线提亮一次、四个相交点亮起菱形铆钉光点(overshoot 弹出)
|
|
32
|
+
——"紧"是看得见的收拢动作
|
|
33
|
+
- Stronger 无几何:120f 起描边 → 竖向镀铬渐变(亮顶—暗腰—亮底);124→148f 一道带香槟暖色的
|
|
34
|
+
窄白带(`100deg`、`background-size:300%`)从左扫到右;146→158f 收成纯白 + 一次泛光脉冲,
|
|
35
|
+
脚下横向光带从 0.2 宽 snappy 展开,舞台主光同拍提亮——结论词独享的升格待遇
|
|
36
|
+
- 词下 40px 副句给产品证据(rise 逐词升起,demo 是 video-shotcraft 的三句宣传),左上 mono 计数「01 / 03」、
|
|
37
|
+
右上镜刻标志 + video-shotcraft 小写字标、底部三段进度条(label 级纹理);
|
|
38
|
+
相机全程 1→1.025 smooth 极缓推进(不抖)
|
|
39
|
+
|
|
40
|
+
## 参数表
|
|
41
|
+
| 参数 | 典型值 | 调节手感 |
|
|
42
|
+
|------|--------|----------|
|
|
43
|
+
| 三段时段 | 各 ≈60f,重叠 6f | 每词约 2s 是"读词 + 看几何"的下限;重叠 <3f 读作硬切,>12f 两词同屏打架 |
|
|
44
|
+
| 入/出场窗 | 入 14f snappy / 出 10f exit | 出场比入场短是对的(退场要决绝);出场用 out 曲线会读作"舍不得走" |
|
|
45
|
+
| outline→fill | 18f swift,±7% 柔边,outline 留 0.2 | 留一点描边做重影是质感来源,降到 0 字变扁;窗 >30f 擦入慢得像加载条 |
|
|
46
|
+
| 虚线圆 | r=400、`dash 10 16`、scale 0.4→1、入场多转 160° 刹住 | 刹车是"快"的第一证据;scale 起点 >0.7 就没有"长出来" |
|
|
47
|
+
| 彗星弧 | 7.5°/帧、16 段渐隐 | 比环快 8 倍以上才读得出"速度差";段数 <8 尾巴断成虚线 |
|
|
48
|
+
| trim 生长 | 延迟 6f/圆、各 22f | 相位差是"依次相扣"的关键,同时生长读作三个独立圆 |
|
|
49
|
+
| 收拢 | 间距 340→300(14f swift)+ 交点铆钉 | 收拢量 <20px 看不出动作;>60px 三圆挤成一坨 |
|
|
50
|
+
| sheen 扫光 | `100deg`、`background-size:300%`、24f smooth | 300% 保证白带只占字宽一小段(=金属高光);镀铬底层不能省,否则扫光前是一块灰字 |
|
|
51
|
+
| 收白 | 12f + 泛光脉冲 + 脚下光带 | 这一下是全片唯一的"结论"待遇;删了三个词就是平级,第三点没有落点 |
|
|
52
|
+
| 字号配色 | 词 230px/800、副句 40px、几何 `rgba(236,238,244,.42)`、graphite 暗场 | 几何比字暗一档是层级,几何比字亮就抢主角 |
|
|
53
|
+
|
|
54
|
+
## 已知坑
|
|
55
|
+
- demo 在灰阶/占位素材上调校通过——参数是调校起点非实战定稿,
|
|
56
|
+
首次实战须以真实素材回验
|
|
57
|
+
- **三个词必须是同一句法的三点(demo 都是比较级单词,6–8 字母)**:
|
|
58
|
+
时段是等长的,词长差大时几何(圆半径、间距)都是写死的坐标,
|
|
59
|
+
长词会顶出虚线圆或压到相扣圆上——换词表要同步调 r 与收拢间距
|
|
60
|
+
- `-webkit-text-stroke` 是前缀属性:Chromium/WebKit 才有,Firefox 下描边层
|
|
61
|
+
直接是透明(词消失)。Remotion 渲染走 Chromium 无碍,但预览环境要注意
|
|
62
|
+
- SVG trim 用的 `pathLength=1` 归一化在部分老版本浏览器上对 `<circle>`
|
|
63
|
+
支持不全,退化表现是圆一次性全画出(丢生长感)——移植时先在目标
|
|
64
|
+
渲染器上验一帧
|
|
65
|
+
- 出场 trim 是"入场 trim 减出场 seg"直接相减:两段窗若靠得太近
|
|
66
|
+
(段长 <40f)会出现还没长完就开始收,圆只画出一小段
|
|
67
|
+
- sheen 层与 fill 层是叠着的两个 DOM:切换靠透明度交叉,若把 `white` 窗
|
|
68
|
+
与 `sh` 窗调成重叠不足,会有 1–2 帧两层都半透(字发灰)
|
|
69
|
+
- 第三个词的升格待遇只能给一次:全片三个词都上 sheen 就没有结论感
|
|
70
|
+
(P4 手法去重精神);声音上三次入场是三个节奏点,第三个词的收白值得
|
|
71
|
+
单独一记重音,配法纪律见 sound-design.md
|
|
72
|
+
|
|
73
|
+
## 参考实现
|
|
74
|
+
demos/typography/word-relay-geometry/
|
|
75
|
+
(WordRelayGeometry.tsx)
|
package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/avatar-bracket-carousel.md
CHANGED
|
@@ -1,59 +1,59 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: avatar-bracket-carousel
|
|
3
|
-
一句话: "Your ___ agent" 填空排版,四角对焦框钉在句中不动,头像队列在框内垂直 spring 轮换三次,入框放大清晰、出框按距离缩小淡化模糊,角色标签同步更换,切换瞬间对焦框呼吸 7%
|
|
4
|
-
适用: "一个位置,多种角色"的能力枚举;团队/身份/预设/人格类产品的核心一句话镜头
|
|
5
|
-
时长: 约 5.2s(156f@30fps)
|
|
6
|
-
能量: 中(三次等距切换构成稳定节拍器,对焦框脉冲是唯一装饰性动作)
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## 意图
|
|
10
|
-
"我们的 agent 能当导演、剪辑、动画师、音效师"列成四行就是一张清单。塞进一句话的一个槽位里,
|
|
11
|
-
它变成一个承诺加四次证明:句子不动,只有槽里的人在换。四角对焦框是这个手法的关键
|
|
12
|
-
——它不参与轮换,但它把观众的眼睛钉死在那 92×92 的方框里,所以四次更换才读作
|
|
13
|
-
"同一个位置"而不是"四张头像飘过"。
|
|
14
|
-
|
|
15
|
-
## 动效核心
|
|
16
|
-
- 位置量 `pos` 是三段 spring 的累加:`[0.24, 0.46, 0.68].forEach(s0 => pos +=
|
|
17
|
-
seg(t, s0, s0+0.14, k => E.spring(k, 0.25)))`——不是索引跳变,而是连续量,所以任意
|
|
18
|
-
时刻都能算出每个头像离槽位有多远
|
|
19
|
-
- 距离驱动一切:`d = |k - pos|`,然后 `scale = max(0.5, 1-d*0.38)`、
|
|
20
|
-
`opacity = max(0, 1-d*0.62)`、`blur = min(3, d*2.4)`、`translateY = (k-pos)*76`——
|
|
21
|
-
四个属性同源于一个距离量,所以入框/出框的变化天然同步,不需要单独排时间
|
|
22
|
-
- 队列是绝对定位在 `slot` 的 0×0 锚点上叠放的(`left:-29px, top:-29px` 自居中),
|
|
23
|
-
垂直位移全靠 `(k-pos)*STEP`;框外的头像照样在渲染,只是被 opacity 和 blur 藏掉
|
|
24
|
-
- 入场是叠在轮换之上的另一层:`el.style.opacity = op * seg(t, 0.02+k*0.03, 0.12+k*0.03)`
|
|
25
|
-
——四张按 0.03 错峰在开场 0.15 内建立队列,之后这一项恒为 1,轮换全权接管
|
|
26
|
-
- 角色标签独立一套但共享 `pos`:`opacity = max(0, 1-|k-pos|*2.2)`,衰减斜率 2.2 比
|
|
27
|
-
头像的 0.62 陡得多——标签在 0.45 格距离外就完全消失,永远不会出现两个标签同屏
|
|
28
|
-
- 对焦框呼吸:`breath = Σ sin(seg(t, s0, s0+0.1) * π)`,取 `min(1, breath)` 后乘 0.07
|
|
29
|
-
加到 scale 上;正弦包络让脉冲在切换动作的正中达峰,走完归零
|
|
30
|
-
|
|
31
|
-
## 参数表
|
|
32
|
-
| 参数 | 典型值 | 调节手感 |
|
|
33
|
-
|------|--------|----------|
|
|
34
|
-
| 切换点 | 0.24 / 0.46 / 0.68,间隔 0.22(≈34f / 1.14s) | 间隔就是"读得完一个角色"的时长;<0.12 观众来不及看标签,>0.3 节拍器感散掉 |
|
|
35
|
-
| 切换行程 | 窗 0.14(≈22f),`E.spring(k, 0.25)` | 行程占间隔的 64% → 静置时间约 12f;阻尼 0.25 是明确一次回弹,调小会抖两下与相邻切换互相干扰 |
|
|
36
|
-
| 步距 | STEP=76px(框 92px、头像 58px) | 步距必须大于头像直径否则相邻两张会咬边;76/92 意味着出框的头像仍露出一角,队列的存在被暗示 |
|
|
37
|
-
| 缩放衰减 | `1 - d*0.38`,下限 0.5 | 一格距离缩到 0.62;斜率调大出框更决绝,但下限 0.5 会更早触顶,队列变成"两档尺寸" |
|
|
38
|
-
| 透明度衰减 | `1 - d*0.62` | 1.6 格距离外完全消失 → 画面里始终有约 3 张可见;斜率降到 0.3 会看到整列四张都在,取景框的"锁定"语义被削弱 |
|
|
39
|
-
| 模糊衰减 | `d*2.4`,上限 3px | 模糊是景深暗示,2.4 的斜率让邻位约 2.4px;>4px 邻位糊成色块,队列读不出是头像 |
|
|
40
|
-
| 标签衰减 | `1 - d*2.2` | 斜率必须显著大于头像的 0.62——标签是文字,两句同时半透明叠着最难读 |
|
|
41
|
-
| 框脉冲 | 窗 0.1,`sin(·π)` × 0.07 | 7% 是"咬合了一下"的量;>15% 框自己变成主角,抢过头像更换 |
|
|
42
|
-
|
|
43
|
-
## 已知坑
|
|
44
|
-
- 四张头像对三次切换:`pos` 最终停在 3,正好是末位。加第五张必须加第四次切换(且
|
|
45
|
-
末次切换要在 0.86 之前结束才有静置时间),否则队列末尾永远进不了框
|
|
46
|
-
- 切换点是硬编码数组,出现两处(`pos` 累加与 `breath` 累加)。改节拍必须同时改两处,
|
|
47
|
-
漏改一处会出现"框脉冲和头像换位错开"
|
|
48
|
-
- 入场 stagger 与首次切换的间隔只有 0.09(入场末 0.15 → 切换 0.24)。加头像数会推后
|
|
49
|
-
入场结束点(`0.12+k*0.03`),5 张以上就要把首次切换往后挪
|
|
50
|
-
- 头像是白色线性图标 + 中性灰阶受光渐变圆(灰度分层仅用于区分队列项),强调色只用在对焦框的
|
|
51
|
-
四个 SVG 角标上(及标签 chip 的一粒圆点)——落地换成真实头像后仍应保持这个分工,头像本身别抢色
|
|
52
|
-
- 对焦框 SVG 的四条 path 与 92×92 viewBox 是写死的坐标(`M4,26 L4,4 L26,4` 等)。改
|
|
53
|
-
框尺寸要整套重标,只改容器宽高会让角标缩放失真
|
|
54
|
-
- 句子 "Your ___ agent"(demo:video-shotcraft 的 agent 摄制组 Director / Editor / Animator / Sound)用 flex + gap:22px 居中,槽宽固定 92px 所以句干不会因
|
|
55
|
-
头像更换而重排——但换成中文句子时要确认槽两侧的字宽变化不会让槽偏离画面中心
|
|
56
|
-
|
|
57
|
-
## 参考实现
|
|
58
|
-
demos/ui-entrance/avatar-bracket-carousel/
|
|
59
|
-
(AvatarBracketCarousel.tsx)
|
|
1
|
+
---
|
|
2
|
+
name: avatar-bracket-carousel
|
|
3
|
+
一句话: "Your ___ agent" 填空排版,四角对焦框钉在句中不动,头像队列在框内垂直 spring 轮换三次,入框放大清晰、出框按距离缩小淡化模糊,角色标签同步更换,切换瞬间对焦框呼吸 7%
|
|
4
|
+
适用: "一个位置,多种角色"的能力枚举;团队/身份/预设/人格类产品的核心一句话镜头
|
|
5
|
+
时长: 约 5.2s(156f@30fps)
|
|
6
|
+
能量: 中(三次等距切换构成稳定节拍器,对焦框脉冲是唯一装饰性动作)
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 意图
|
|
10
|
+
"我们的 agent 能当导演、剪辑、动画师、音效师"列成四行就是一张清单。塞进一句话的一个槽位里,
|
|
11
|
+
它变成一个承诺加四次证明:句子不动,只有槽里的人在换。四角对焦框是这个手法的关键
|
|
12
|
+
——它不参与轮换,但它把观众的眼睛钉死在那 92×92 的方框里,所以四次更换才读作
|
|
13
|
+
"同一个位置"而不是"四张头像飘过"。
|
|
14
|
+
|
|
15
|
+
## 动效核心
|
|
16
|
+
- 位置量 `pos` 是三段 spring 的累加:`[0.24, 0.46, 0.68].forEach(s0 => pos +=
|
|
17
|
+
seg(t, s0, s0+0.14, k => E.spring(k, 0.25)))`——不是索引跳变,而是连续量,所以任意
|
|
18
|
+
时刻都能算出每个头像离槽位有多远
|
|
19
|
+
- 距离驱动一切:`d = |k - pos|`,然后 `scale = max(0.5, 1-d*0.38)`、
|
|
20
|
+
`opacity = max(0, 1-d*0.62)`、`blur = min(3, d*2.4)`、`translateY = (k-pos)*76`——
|
|
21
|
+
四个属性同源于一个距离量,所以入框/出框的变化天然同步,不需要单独排时间
|
|
22
|
+
- 队列是绝对定位在 `slot` 的 0×0 锚点上叠放的(`left:-29px, top:-29px` 自居中),
|
|
23
|
+
垂直位移全靠 `(k-pos)*STEP`;框外的头像照样在渲染,只是被 opacity 和 blur 藏掉
|
|
24
|
+
- 入场是叠在轮换之上的另一层:`el.style.opacity = op * seg(t, 0.02+k*0.03, 0.12+k*0.03)`
|
|
25
|
+
——四张按 0.03 错峰在开场 0.15 内建立队列,之后这一项恒为 1,轮换全权接管
|
|
26
|
+
- 角色标签独立一套但共享 `pos`:`opacity = max(0, 1-|k-pos|*2.2)`,衰减斜率 2.2 比
|
|
27
|
+
头像的 0.62 陡得多——标签在 0.45 格距离外就完全消失,永远不会出现两个标签同屏
|
|
28
|
+
- 对焦框呼吸:`breath = Σ sin(seg(t, s0, s0+0.1) * π)`,取 `min(1, breath)` 后乘 0.07
|
|
29
|
+
加到 scale 上;正弦包络让脉冲在切换动作的正中达峰,走完归零
|
|
30
|
+
|
|
31
|
+
## 参数表
|
|
32
|
+
| 参数 | 典型值 | 调节手感 |
|
|
33
|
+
|------|--------|----------|
|
|
34
|
+
| 切换点 | 0.24 / 0.46 / 0.68,间隔 0.22(≈34f / 1.14s) | 间隔就是"读得完一个角色"的时长;<0.12 观众来不及看标签,>0.3 节拍器感散掉 |
|
|
35
|
+
| 切换行程 | 窗 0.14(≈22f),`E.spring(k, 0.25)` | 行程占间隔的 64% → 静置时间约 12f;阻尼 0.25 是明确一次回弹,调小会抖两下与相邻切换互相干扰 |
|
|
36
|
+
| 步距 | STEP=76px(框 92px、头像 58px) | 步距必须大于头像直径否则相邻两张会咬边;76/92 意味着出框的头像仍露出一角,队列的存在被暗示 |
|
|
37
|
+
| 缩放衰减 | `1 - d*0.38`,下限 0.5 | 一格距离缩到 0.62;斜率调大出框更决绝,但下限 0.5 会更早触顶,队列变成"两档尺寸" |
|
|
38
|
+
| 透明度衰减 | `1 - d*0.62` | 1.6 格距离外完全消失 → 画面里始终有约 3 张可见;斜率降到 0.3 会看到整列四张都在,取景框的"锁定"语义被削弱 |
|
|
39
|
+
| 模糊衰减 | `d*2.4`,上限 3px | 模糊是景深暗示,2.4 的斜率让邻位约 2.4px;>4px 邻位糊成色块,队列读不出是头像 |
|
|
40
|
+
| 标签衰减 | `1 - d*2.2` | 斜率必须显著大于头像的 0.62——标签是文字,两句同时半透明叠着最难读 |
|
|
41
|
+
| 框脉冲 | 窗 0.1,`sin(·π)` × 0.07 | 7% 是"咬合了一下"的量;>15% 框自己变成主角,抢过头像更换 |
|
|
42
|
+
|
|
43
|
+
## 已知坑
|
|
44
|
+
- 四张头像对三次切换:`pos` 最终停在 3,正好是末位。加第五张必须加第四次切换(且
|
|
45
|
+
末次切换要在 0.86 之前结束才有静置时间),否则队列末尾永远进不了框
|
|
46
|
+
- 切换点是硬编码数组,出现两处(`pos` 累加与 `breath` 累加)。改节拍必须同时改两处,
|
|
47
|
+
漏改一处会出现"框脉冲和头像换位错开"
|
|
48
|
+
- 入场 stagger 与首次切换的间隔只有 0.09(入场末 0.15 → 切换 0.24)。加头像数会推后
|
|
49
|
+
入场结束点(`0.12+k*0.03`),5 张以上就要把首次切换往后挪
|
|
50
|
+
- 头像是白色线性图标 + 中性灰阶受光渐变圆(灰度分层仅用于区分队列项),强调色只用在对焦框的
|
|
51
|
+
四个 SVG 角标上(及标签 chip 的一粒圆点)——落地换成真实头像后仍应保持这个分工,头像本身别抢色
|
|
52
|
+
- 对焦框 SVG 的四条 path 与 92×92 viewBox 是写死的坐标(`M4,26 L4,4 L26,4` 等)。改
|
|
53
|
+
框尺寸要整套重标,只改容器宽高会让角标缩放失真
|
|
54
|
+
- 句子 "Your ___ agent"(demo:video-shotcraft 的 agent 摄制组 Director / Editor / Animator / Sound)用 flex + gap:22px 居中,槽宽固定 92px 所以句干不会因
|
|
55
|
+
头像更换而重排——但换成中文句子时要确认槽两侧的字宽变化不会让槽偏离画面中心
|
|
56
|
+
|
|
57
|
+
## 参考实现
|
|
58
|
+
demos/ui-entrance/avatar-bracket-carousel/
|
|
59
|
+
(AvatarBracketCarousel.tsx)
|