{
 "site": "https://vawe.dev",
 "groups": [
  {
   "id": "reveal-a-title",
   "label": "Reveal a title"
  },
  {
   "id": "change-between-shots",
   "label": "Change between shots"
  },
  {
   "id": "point-the-eye",
   "label": "Point the eye"
  },
  {
   "id": "move-the-camera",
   "label": "Move the camera"
  },
  {
   "id": "end-a-film",
   "label": "End a film"
  },
  {
   "id": "product-moments",
   "label": "Product moments"
  },
  {
   "id": "grounds",
   "label": "Grounds"
  }
 ],
 "looks": [
  "vawe",
  "brutal",
  "chrome",
  "daylight",
  "dusk",
  "field",
  "paper",
  "signal",
  "swiss",
  "terminal"
 ],
 "featured": [
  "marquee-along-path",
  "lens",
  "counter-dive",
  "ticker-takeover",
  "shape-trace-morph"
 ],
 "jobs": [
  {
   "id": "open-on-a-detail-answer-with-the-whole",
   "label": "open on a detail, answer with the whole"
  },
  {
   "id": "open-on-the-brand-in-under-2-s",
   "label": "open on the brand in under 2 s"
  },
  {
   "id": "arrive-by-flying-into-a-scene-or-give-a-push-depth",
   "label": "arrive by flying into a scene, or give a push depth"
  },
  {
   "id": "land-a-title-or-wordmark-soft",
   "label": "land a title or wordmark, soft"
  },
  {
   "id": "type-a-command-prompt-or-name",
   "label": "type a command, prompt or name"
  },
  {
   "id": "land-one-hero-word-on-the-beat",
   "label": "land one hero word on the beat"
  },
  {
   "id": "cut-a-line-in-under-hard-edges-per-character-word-or-line",
   "label": "cut a line in under hard edges, per character, word or line"
  },
  {
   "id": "roll-a-word-or-label-letter-by-letter-forward-back-or-in-random-order",
   "label": "roll a word or label letter by letter, forward, back, or in random order"
  },
  {
   "id": "turn-each-character-over-as-a-small-cube",
   "label": "turn each character over as a small cube"
  },
  {
   "id": "put-a-picture-inside-the-name",
   "label": "put a picture inside the name"
  },
  {
   "id": "decide-a-name-or-number-on-screen",
   "label": "decide a name or number on screen"
  },
  {
   "id": "point-at-one-word-in-a-held-line",
   "label": "point at one word in a held line"
  },
  {
   "id": "change-what-a-word-means",
   "label": "change what a word means"
  },
  {
   "id": "point-at-one-part-of-a-ui",
   "label": "point at one part of a UI"
  },
  {
   "id": "change-between-shots-hard-and-fast-exposure-flash-reads-as-camera-over-exposure",
   "label": "change between shots, hard and fast (exposure-flash reads as camera over-exposure)"
  },
  {
   "id": "change-between-shots-soft",
   "label": "change between shots, soft"
  },
  {
   "id": "change-between-shots-graphic",
   "label": "change between shots, graphic"
  },
  {
   "id": "change-between-shots-spatial",
   "label": "change between shots, spatial"
  },
  {
   "id": "change-between-shots-one-object-carries-over-with-no-cut-and-no-crossfade",
   "label": "change between shots, one object carries over with no cut and no crossfade"
  },
  {
   "id": "run-every-beat-in-and-out",
   "label": "run every beat in and out"
  },
  {
   "id": "lean-the-camera-toward-a-subject",
   "label": "lean the camera toward a subject"
  },
  {
   "id": "film-a-screen-as-a-real-object-tilt-depth-bloom-led-grid-fringes",
   "label": "film a screen as a real object: tilt, depth, bloom, LED grid, fringes"
  },
  {
   "id": "move-the-camera-over-a-whole-world-push-pull-whip",
   "label": "move the camera over a whole world: push, pull, whip"
  },
  {
   "id": "give-a-camera-move-depth-ground-mid-and-front-layers-move-by-different-amounts",
   "label": "give a camera move depth: ground, mid and front layers move by different amounts"
  },
  {
   "id": "two-depths-of-words-that-resolve-as-the-camera-arrives-a-focus-pull",
   "label": "two depths of words that resolve as the camera arrives; a focus pull"
  },
  {
   "id": "make-some-arrivals-overshoot-21-to-41-percent-of-them",
   "label": "make some arrivals overshoot (21 to 41 percent of them)"
  },
  {
   "id": "enter-the-next-world-by-flying-into-an-element",
   "label": "enter the next world by flying into an element"
  },
  {
   "id": "wipe-in-the-next-beat-along-the-last-move-s-direction",
   "label": "wipe in the next beat along the last move's direction"
  },
  {
   "id": "overlap-beats-so-the-next-starts-before-the-last-ends",
   "label": "overlap beats so the next starts before the last ends"
  },
  {
   "id": "hold-a-line-still-to-read-with-a-ground-option-behind-it-the-hold-itself-keeps-a-part-moving-rule-live-hold",
   "label": "hold a line still to read, with a ground option behind it (the hold itself keeps a part moving, rule live-hold)"
  },
  {
   "id": "give-a-held-frame-a-living-ground",
   "label": "give a held frame a living ground"
  },
  {
   "id": "show-a-click-doing-its-job",
   "label": "show a click doing its job"
  },
  {
   "id": "show-a-real-ui-arriving",
   "label": "show a real UI arriving"
  },
  {
   "id": "show-an-ai-product-answering",
   "label": "show an AI product answering"
  },
  {
   "id": "show-an-ai-agent-doing-several-steps",
   "label": "show an AI agent doing several steps"
  },
  {
   "id": "show-an-edit-and-its-result-in-one-frame",
   "label": "show an edit and its result in one frame"
  },
  {
   "id": "prove-a-number",
   "label": "prove a number"
  },
  {
   "id": "prove-a-change-with-a-picture",
   "label": "prove a change with a picture"
  },
  {
   "id": "end-on-the-brand",
   "label": "end on the brand"
  },
  {
   "id": "end-quietly",
   "label": "end quietly"
  },
  {
   "id": "end-on-an-action",
   "label": "end on an action"
  },
  {
   "id": "hand-the-product-to-the-brand",
   "label": "hand the product to the brand"
  },
  {
   "id": "prove-it-with-customers",
   "label": "prove it with customers"
  },
  {
   "id": "show-the-problem-then-the-fix",
   "label": "show the problem, then the fix"
  },
  {
   "id": "show-the-product-works-with-other-tools",
   "label": "show the product works with other tools"
  },
  {
   "id": "make-many-things-read-as-one-gesture",
   "label": "make many things read as one gesture"
  },
  {
   "id": "tour-several-features-in-one-space",
   "label": "tour several features in one space"
  },
  {
   "id": "hit-one-detail-on-a-beat",
   "label": "hit one detail on a beat"
  },
  {
   "id": "replace-a-line-with-the-answer-by-impact",
   "label": "replace a line with the answer, by impact"
  },
  {
   "id": "say-it-works-for-everyone-while-the-brand-stays-still",
   "label": "say it works for everyone while the brand stays still"
  },
  {
   "id": "name-the-person-on-screen",
   "label": "name the person on screen"
  },
  {
   "id": "carry-a-line-along-a-curve",
   "label": "carry a line along a curve"
  },
  {
   "id": "melt-a-tab-or-panel-into-the-next",
   "label": "melt a tab or panel into the next"
  },
  {
   "id": "ride-tiles-along-a-curve-or-slide-rows-of-them",
   "label": "ride tiles along a curve, or slide rows of them"
  },
  {
   "id": "orbit-tiles-around-one-point",
   "label": "orbit tiles around one point"
  },
  {
   "id": "turn-a-cube-to-show-another-face",
   "label": "turn a cube to show another face"
  },
  {
   "id": "break-a-picture-into-blocks-and-clear-it",
   "label": "break a picture into blocks and clear it"
  },
  {
   "id": "open-a-picture-inside-a-line-of-type",
   "label": "open a picture inside a line of type"
  },
  {
   "id": "run-a-spoken-line-as-captions",
   "label": "run a spoken line as captions"
  }
 ],
 "moves": [
  {
   "name": "mask-rise",
   "title": "Mask rise",
   "group": "reveal-a-title",
   "look": "paper",
   "jobs": [
    "land-a-title-or-wordmark-soft"
   ],
   "use": "a line of type enters from under an invisible edge; the mask box is tall enough for descenders",
   "clip": "https://vawe.dev/moves/mask-rise.mp4",
   "md": "https://vawe.dev/moves/mask-rise.md",
   "page": "https://vawe.dev/moves/mask-rise",
   "duration": 1
  },
  {
   "name": "tracking-collapse",
   "title": "Tracking collapse",
   "group": "reveal-a-title",
   "look": "swiss",
   "jobs": [
    "land-a-title-or-wordmark-soft"
   ],
   "use": "a title or wordmark arrives: letters converge from wide tracking while the word sharpens",
   "clip": "https://vawe.dev/moves/tracking-collapse.mp4",
   "md": "https://vawe.dev/moves/tracking-collapse.md",
   "page": "https://vawe.dev/moves/tracking-collapse",
   "duration": 1
  },
  {
   "name": "caret-typing",
   "title": "Caret typing",
   "group": "reveal-a-title",
   "look": "terminal",
   "jobs": [
    "type-a-command-prompt-or-name"
   ],
   "use": "a command, a prompt, a name typed in; the caret moves with each character then becomes the next element",
   "clip": "https://vawe.dev/moves/caret-typing.mp4",
   "md": "https://vawe.dev/moves/caret-typing.md",
   "page": "https://vawe.dev/moves/caret-typing",
   "duration": 1
  },
  {
   "name": "letter-stagger",
   "title": "Per-letter stagger",
   "group": "reveal-a-title",
   "look": "signal",
   "jobs": [
    "land-one-hero-word-on-the-beat"
   ],
   "use": "a word lands letter by letter, 45 ms apart, on one exact curve",
   "clip": "https://vawe.dev/moves/letter-stagger.mp4",
   "md": "https://vawe.dev/moves/letter-stagger.md",
   "page": "https://vawe.dev/moves/letter-stagger",
   "duration": 1
  },
  {
   "name": "scale-punch",
   "title": "Scale punch",
   "group": "reveal-a-title",
   "look": "brutal",
   "jobs": [
    "land-one-hero-word-on-the-beat"
   ],
   "use": "the hero word hits from 1.4x and recoils on the overshoot curve; a full stop pops after it",
   "clip": "https://vawe.dev/moves/scale-punch.mp4",
   "md": "https://vawe.dev/moves/scale-punch.md",
   "page": "https://vawe.dev/moves/scale-punch",
   "duration": 1
  },
  {
   "name": "flap-resolve",
   "title": "Split-flap resolve",
   "group": "reveal-a-title",
   "look": "chrome",
   "jobs": [
    "decide-a-name-or-number-on-screen"
   ],
   "use": "a name or number is decided: each letter is a tile that flips through seeded glyphs on a hinge and locks left to right",
   "clip": "https://vawe.dev/moves/flap-resolve.mp4",
   "md": "https://vawe.dev/moves/flap-resolve.md",
   "page": "https://vawe.dev/moves/flap-resolve",
   "duration": 1.4
  },
  {
   "name": "word-swap-slot",
   "title": "Word swap slot",
   "group": "reveal-a-title",
   "look": "dusk",
   "jobs": [
    "decide-a-name-or-number-on-screen"
   ],
   "use": "one word in a held sentence rolls through 3 or 4 values and lands; the sentence reflows its width",
   "clip": "https://vawe.dev/moves/word-swap-slot.mp4",
   "md": "https://vawe.dev/moves/word-swap-slot.md",
   "page": "https://vawe.dev/moves/word-swap-slot",
   "duration": 1.8
  },
  {
   "name": "blur-word-cascade",
   "title": "Blur word cascade",
   "group": "reveal-a-title",
   "look": "swiss",
   "jobs": [
    "land-a-title-or-wordmark-soft"
   ],
   "use": "copy resolves word by word from blur with a slight rise; no mask, so nothing cuts a descender",
   "clip": "https://vawe.dev/moves/blur-word-cascade.mp4",
   "md": "https://vawe.dev/moves/blur-word-cascade.md",
   "page": "https://vawe.dev/moves/blur-word-cascade",
   "duration": 1.6
  },
  {
   "name": "text-as-mask",
   "title": "Text as mask",
   "group": "reveal-a-title",
   "look": "brutal",
   "jobs": [
    "put-a-picture-inside-the-name"
   ],
   "use": "the type is a window onto a rich picture: the frame opens tight on image, pulls back to the title, and the layers keep moving inside the fixed letters",
   "clip": "https://vawe.dev/moves/text-as-mask.mp4",
   "md": "https://vawe.dev/moves/text-as-mask.md",
   "page": "https://vawe.dev/moves/text-as-mask",
   "duration": 2
  },
  {
   "name": "outline-fill",
   "title": "Outline fill",
   "group": "reveal-a-title",
   "look": "signal",
   "jobs": [
    "land-one-hero-word-on-the-beat"
   ],
   "use": "one hero word arrives as an outline, letter by letter, then an accent floods each letter from its baseline on the beat",
   "clip": "https://vawe.dev/moves/outline-fill.mp4",
   "md": "https://vawe.dev/moves/outline-fill.md",
   "page": "https://vawe.dev/moves/outline-fill",
   "duration": 2
  },
  {
   "name": "strikethrough-replace",
   "title": "Strikethrough replace",
   "group": "reveal-a-title",
   "look": "paper",
   "jobs": [
    "decide-a-name-or-number-on-screen"
   ],
   "use": "an old word or price is struck through by a tilted line drawn left to right, it dims and shrinks, and the new value rises in beside it character by character",
   "clip": "https://vawe.dev/moves/strikethrough-replace.mp4",
   "md": "https://vawe.dev/moves/strikethrough-replace.md",
   "page": "https://vawe.dev/moves/strikethrough-replace",
   "duration": 1.6
  },
  {
   "name": "grid-stagger-wave",
   "title": "Grid stagger wave",
   "group": "reveal-a-title",
   "look": "field",
   "jobs": [
    "make-many-things-read-as-one-gesture"
   ],
   "use": "a title arrives with many things around it: a grid of tiles enters in a wave by distance from the title, 70 ms per tile, each tile pushed out from the source on a spring",
   "clip": "https://vawe.dev/moves/grid-stagger-wave.mp4",
   "md": "https://vawe.dev/moves/grid-stagger-wave.md",
   "page": "https://vawe.dev/moves/grid-stagger-wave",
   "duration": 1.6
  },
  {
   "name": "text-scramble-decode",
   "title": "Text scramble decode",
   "group": "reveal-a-title",
   "look": "terminal",
   "jobs": [
    "decide-a-name-or-number-on-screen"
   ],
   "use": "a name or codename is revealed as a lookup: a mono line of seeded wrong glyphs locks left to right, each fresh letter flashes accent, then a verified line appears under it",
   "clip": "https://vawe.dev/moves/text-scramble-decode.mp4",
   "md": "https://vawe.dev/moves/text-scramble-decode.md",
   "page": "https://vawe.dev/moves/text-scramble-decode",
   "duration": 3
  },
  {
   "name": "ticker-takeover",
   "title": "Ticker takeover",
   "group": "reveal-a-title",
   "look": "brutal",
   "jobs": [
    "replace-a-line-with-the-answer-by-impact"
   ],
   "use": "a line with a cycling word is replaced by the answer: the word rolls through three values, then the hero crashes in on a long slide and its edge pushes the whole text group out of the frame",
   "clip": "https://vawe.dev/moves/ticker-takeover.mp4",
   "md": "https://vawe.dev/moves/ticker-takeover.md",
   "page": "https://vawe.dev/moves/ticker-takeover",
   "duration": 3.6
  },
  {
   "name": "anchor-cycle",
   "title": "Anchor cycle",
   "group": "reveal-a-title",
   "look": "signal",
   "jobs": [
    "say-it-works-for-everyone-while-the-brand-stays-still"
   ],
   "use": "one phrase stays pinned while a tape beside it is hard-cut through eight words, slow then fast, and holds on the last; a brand lockup then drops in under the still anchor",
   "clip": "https://vawe.dev/moves/anchor-cycle.mp4",
   "md": "https://vawe.dev/moves/anchor-cycle.md",
   "page": "https://vawe.dev/moves/anchor-cycle",
   "duration": 4.6
  },
  {
   "name": "lower-third",
   "title": "Lower third",
   "group": "reveal-a-title",
   "look": "paper",
   "jobs": [
    "name-the-person-on-screen"
   ],
   "use": "a person is on screen: an accent rule grows, a plate wipes open, the name rises from a mask and the role follows, then the card leaves faster than it came",
   "clip": "https://vawe.dev/moves/lower-third.mp4",
   "md": "https://vawe.dev/moves/lower-third.md",
   "page": "https://vawe.dev/moves/lower-third",
   "duration": 3.2
  },
  {
   "name": "liquid-displace",
   "title": "Liquid displace",
   "group": "reveal-a-title",
   "look": "field",
   "jobs": [
    "land-a-title-or-wordmark-soft"
   ],
   "use": "a title arrives bent by moving water and settles to sharp type: an SVG turbulence map drives a displacement that drains to zero by 1.15 s, then the type holds still and readable",
   "clip": "https://vawe.dev/moves/liquid-displace.mp4",
   "md": "https://vawe.dev/moves/liquid-displace.md",
   "page": "https://vawe.dev/moves/liquid-displace",
   "duration": 2.6
  },
  {
   "name": "echo-trail",
   "title": "Echo trail",
   "group": "reveal-a-title",
   "look": "dusk",
   "jobs": [
    "hit-one-detail-on-a-beat"
   ],
   "use": "one element flies in and stops on a beat: five time-offset copies of it trail with falling opacity, then fold into the lead on the hit frame while it squashes and recoils",
   "clip": "https://vawe.dev/moves/echo-trail.mp4",
   "md": "https://vawe.dev/moves/echo-trail.md",
   "page": "https://vawe.dev/moves/echo-trail",
   "duration": 2.6
  },
  {
   "name": "caption-karaoke",
   "title": "Caption karaoke",
   "group": "reveal-a-title",
   "look": "dusk",
   "jobs": [
    "run-a-spoken-line-as-captions"
   ],
   "use": "a spoken line runs as captions: the word being said lifts to full ink and one soft pill glides word to word on a [[t, wordIndex]] speech table",
   "clip": "https://vawe.dev/moves/caption-karaoke.mp4",
   "md": "https://vawe.dev/moves/caption-karaoke.md",
   "page": "https://vawe.dev/moves/caption-karaoke",
   "duration": 3.4
  },
  {
   "name": "caption-editorial",
   "title": "Caption editorial",
   "group": "reveal-a-title",
   "look": "paper",
   "jobs": [
    "run-a-spoken-line-as-captions"
   ],
   "use": "editorial captions: one or two key words per line in a contrasting italic serif, and the next caption replaces the last on a short line-by-line mask cut",
   "clip": "https://vawe.dev/moves/caption-editorial.mp4",
   "md": "https://vawe.dev/moves/caption-editorial.md",
   "page": "https://vawe.dev/moves/caption-editorial",
   "duration": 3.6
  },
  {
   "name": "variable-weight-wave",
   "title": "Variable weight wave",
   "group": "reveal-a-title",
   "look": "brutal",
   "jobs": [
    "land-one-hero-word-on-the-beat"
   ],
   "use": "one hero word arrives as a wave: weight and width of a variable face crest letter by letter, left to right, then settle at a firm weight",
   "clip": "https://vawe.dev/moves/variable-weight-wave.mp4",
   "md": "https://vawe.dev/moves/variable-weight-wave.md",
   "page": "https://vawe.dev/moves/variable-weight-wave",
   "duration": 2.4
  },
  {
   "name": "text-on-path",
   "title": "Text on path",
   "group": "reveal-a-title",
   "look": "signal",
   "jobs": [
    "carry-a-line-along-a-curve"
   ],
   "use": "a line of words rides an SVG path with startOffset set from the seek time, front word first, and settles readable on the curve",
   "clip": "https://vawe.dev/moves/text-on-path.mp4",
   "md": "https://vawe.dev/moves/text-on-path.md",
   "page": "https://vawe.dev/moves/text-on-path",
   "duration": 3
  },
  {
   "name": "vertical-cut-reveal",
   "title": "Vertical cut reveal",
   "group": "reveal-a-title",
   "look": "swiss",
   "jobs": [
    "cut-a-line-in-under-hard-edges-per-character-word-or-line"
   ],
   "use": "a line arrives hard-edged: every character, word or line rises from under its own clip edge, staggered from the first, last, middle or any item on the motion library's spring (port of fancy)",
   "clip": "https://vawe.dev/moves/vertical-cut-reveal.mp4",
   "md": "https://vawe.dev/moves/vertical-cut-reveal.md",
   "page": "https://vawe.dev/moves/vertical-cut-reveal",
   "duration": 2.4
  },
  {
   "name": "letter-swap",
   "title": "Letter swap",
   "group": "reveal-a-title",
   "look": "swiss",
   "jobs": [
    "roll-a-word-or-label-letter-by-letter-forward-back-or-in-random-order"
   ],
   "use": "a word or label rolls letter by letter: each letter slides out of its clip box and the same letter slides in; forward or pingpong, stagger or seeded random order (port of fancy)",
   "clip": "https://vawe.dev/moves/letter-swap.mp4",
   "md": "https://vawe.dev/moves/letter-swap.md",
   "page": "https://vawe.dev/moves/letter-swap",
   "duration": 3.8
  },
  {
   "name": "letter-3d-swap",
   "title": "Letter 3D swap",
   "group": "reveal-a-title",
   "look": "swiss",
   "jobs": [
    "turn-each-character-over-as-a-small-cube"
   ],
   "use": "a lowercase line turns over as boxes: each character is a cube that rolls 90 degrees about its centre to the same character on the next face (port of fancy)",
   "clip": "https://vawe.dev/moves/letter-3d-swap.mp4",
   "md": "https://vawe.dev/moves/letter-3d-swap.md",
   "page": "https://vawe.dev/moves/letter-3d-swap",
   "duration": 1.8
  },
  {
   "name": "cut-on-motion",
   "title": "Cut on motion",
   "group": "change-between-shots",
   "look": "brutal",
   "jobs": [
    "change-between-shots-hard-and-fast-exposure-flash-reads-as-camera-over-exposure"
   ],
   "use": "a moving shape carries the eye across a hard cut into a new scene",
   "clip": "https://vawe.dev/moves/cut-on-motion.mp4",
   "md": "https://vawe.dev/moves/cut-on-motion.md",
   "page": "https://vawe.dev/moves/cut-on-motion",
   "duration": 1
  },
  {
   "name": "push-blur",
   "title": "Push with directional blur",
   "group": "change-between-shots",
   "look": "daylight",
   "jobs": [
    "change-between-shots-spatial"
   ],
   "use": "a panel pushes in with a directional blur that follows its speed, set per frame",
   "clip": "https://vawe.dev/moves/push-blur.mp4",
   "md": "https://vawe.dev/moves/push-blur.md",
   "page": "https://vawe.dev/moves/push-blur",
   "duration": 1
  },
  {
   "name": "exit-fast",
   "title": "Exits faster than entrances",
   "group": "change-between-shots",
   "look": "paper",
   "jobs": [
    "run-every-beat-in-and-out"
   ],
   "use": "the pair every beat needs: arrive fast and land soft, leave faster and shorter",
   "clip": "https://vawe.dev/moves/exit-fast.mp4",
   "md": "https://vawe.dev/moves/exit-fast.md",
   "page": "https://vawe.dev/moves/exit-fast",
   "duration": 1
  },
  {
   "name": "chain-beats",
   "title": "Chain beats",
   "group": "change-between-shots",
   "look": "terminal",
   "jobs": [
    "run-every-beat-in-and-out",
    "overlap-beats-so-the-next-starts-before-the-last-ends"
   ],
   "use": "beats overlap: the next starts at 65% of the last and one element hands off (dot, bar, rule); use once per film",
   "clip": "https://vawe.dev/moves/chain-beats.mp4",
   "md": "https://vawe.dev/moves/chain-beats.md",
   "page": "https://vawe.dev/moves/chain-beats",
   "duration": 1.4
  },
  {
   "name": "whip-pan",
   "title": "Whip pan",
   "group": "change-between-shots",
   "look": "field",
   "jobs": [
    "change-between-shots-spatial"
   ],
   "use": "the next shot is to the side: a fast sideways pan with a blur that follows its speed hides the seam",
   "clip": "https://vawe.dev/moves/whip-pan.mp4",
   "md": "https://vawe.dev/moves/whip-pan.md",
   "page": "https://vawe.dev/moves/whip-pan",
   "duration": 1.2
  },
  {
   "name": "match-cut",
   "title": "Match cut",
   "group": "change-between-shots",
   "look": "swiss",
   "jobs": [
    "change-between-shots-graphic"
   ],
   "use": "one shape crosses a scene change at the same place, size and angle and changes meaning (spinner ring, finished ring)",
   "clip": "https://vawe.dev/moves/match-cut.mp4",
   "md": "https://vawe.dev/moves/match-cut.md",
   "page": "https://vawe.dev/moves/match-cut",
   "duration": 1.25
  },
  {
   "name": "iris-wipe",
   "title": "Iris wipe",
   "group": "change-between-shots",
   "look": "vawe",
   "jobs": [
    "change-between-shots-soft"
   ],
   "use": "a circle closes on the click or mark the eye is on and uncovers the next scene",
   "clip": "https://vawe.dev/moves/iris-wipe.mp4",
   "md": "https://vawe.dev/moves/iris-wipe.md",
   "page": "https://vawe.dev/moves/iris-wipe",
   "duration": 1.6
  },
  {
   "name": "stack-cover",
   "title": "Stack cover",
   "group": "change-between-shots",
   "look": "chrome",
   "jobs": [
    "change-between-shots-soft"
   ],
   "use": "the next panel slides over the last one: the old shot moves a quarter as far and dims, a shadow grows with the overlap",
   "clip": "https://vawe.dev/moves/stack-cover.mp4",
   "md": "https://vawe.dev/moves/stack-cover.md",
   "page": "https://vawe.dev/moves/stack-cover",
   "duration": 1.6
  },
  {
   "name": "split-reveal",
   "title": "Split reveal",
   "group": "change-between-shots",
   "look": "dusk",
   "jobs": [
    "change-between-shots-soft"
   ],
   "use": "the frame opens like doors onto the next shot: two halves part, the gap starts dark and lights as they clear",
   "clip": "https://vawe.dev/moves/split-reveal.mp4",
   "md": "https://vawe.dev/moves/split-reveal.md",
   "page": "https://vawe.dev/moves/split-reveal",
   "duration": 1.6
  },
  {
   "name": "slice-shift",
   "title": "Slice shift",
   "group": "change-between-shots",
   "look": "signal",
   "jobs": [
    "change-between-shots-hard-and-fast-exposure-flash-reads-as-camera-over-exposure"
   ],
   "use": "horizontal bands slide off in alternation, staggered with seeded jitter and speed blur, and uncover the next shot",
   "clip": "https://vawe.dev/moves/slice-shift.mp4",
   "md": "https://vawe.dev/moves/slice-shift.md",
   "page": "https://vawe.dev/moves/slice-shift",
   "duration": 1.6
  },
  {
   "name": "type-fill-transition",
   "title": "Type fill transition",
   "group": "change-between-shots",
   "look": "brutal",
   "jobs": [
    "change-between-shots-graphic"
   ],
   "use": "a word scales into one letter until its stem is the whole frame; that colour is the next shot's ground",
   "clip": "https://vawe.dev/moves/type-fill-transition.mp4",
   "md": "https://vawe.dev/moves/type-fill-transition.md",
   "page": "https://vawe.dev/moves/type-fill-transition",
   "duration": 1.8
  },
  {
   "name": "color-block-wipe",
   "title": "Colour block wipe",
   "group": "change-between-shots",
   "look": "field",
   "jobs": [
    "change-between-shots-graphic"
   ],
   "use": "a solid brand-colour block sweeps across the cut with a slanted, blurred leading edge; a darker block trails it and the next shot sits behind",
   "clip": "https://vawe.dev/moves/color-block-wipe.mp4",
   "md": "https://vawe.dev/moves/color-block-wipe.md",
   "page": "https://vawe.dev/moves/color-block-wipe",
   "duration": 1.7
  },
  {
   "name": "zoom-through",
   "title": "Zoom through",
   "group": "change-between-shots",
   "look": "vawe",
   "jobs": [
    "change-between-shots-spatial",
    "enter-the-next-world-by-flying-into-an-element"
   ],
   "use": "the camera dives into a UI part until it fills the frame and the next shot comes out of it, with real zoom blur from stacked exposures",
   "clip": "https://vawe.dev/moves/zoom-through.mp4",
   "md": "https://vawe.dev/moves/zoom-through.md",
   "page": "https://vawe.dev/moves/zoom-through",
   "duration": 1.7
  },
  {
   "name": "speed-ramp-freeze",
   "title": "Speed ramp freeze",
   "group": "change-between-shots",
   "look": "chrome",
   "jobs": [
    "change-between-shots-hard-and-fast-exposure-flash-reads-as-camera-over-exposure"
   ],
   "use": "a beat needs weight before a change: story time is an integral of a speed curve, so the ball, its squash and the camera slow to a sharp near-hold on the hit frame, then snap on at 3.5x with blur",
   "clip": "https://vawe.dev/moves/speed-ramp-freeze.mp4",
   "md": "https://vawe.dev/moves/speed-ramp-freeze.md",
   "page": "https://vawe.dev/moves/speed-ramp-freeze",
   "duration": 1.5
  },
  {
   "name": "speed-ramp",
   "title": "Speed ramp",
   "group": "change-between-shots",
   "look": "vawe",
   "jobs": [
    "change-between-shots-hard-and-fast-exposure-flash-reads-as-camera-over-exposure"
   ],
   "use": "both sides of a cut move the same way: the outgoing accelerates into the cut and the incoming leaves it at the same speed and slows, so the cut lands at peak speed",
   "clip": "https://vawe.dev/moves/speed-ramp.mp4",
   "md": "https://vawe.dev/moves/speed-ramp.md",
   "page": "https://vawe.dev/moves/speed-ramp",
   "duration": null
  },
  {
   "name": "liquid-wipe",
   "title": "Liquid wipe",
   "group": "change-between-shots",
   "look": "field",
   "jobs": [
    "change-between-shots-graphic"
   ],
   "use": "a gooey organic edge floods the frame onto the next shot: bars with round heads fuse through a goo filter into a wet edge, and an accent band leads the next shot",
   "clip": "https://vawe.dev/moves/liquid-wipe.mp4",
   "md": "https://vawe.dev/moves/liquid-wipe.md",
   "page": "https://vawe.dev/moves/liquid-wipe",
   "duration": 1.4
  },
  {
   "name": "grid-tile-flip",
   "title": "Grid tile flip",
   "group": "change-between-shots",
   "look": "terminal",
   "jobs": [
    "change-between-shots-spatial"
   ],
   "use": "a wall of tiles flips in a wave to the next shot: one perspective for the grid, each tile lifts toward the camera and darkens edge-on, shot A on the front and shot B on the back",
   "clip": "https://vawe.dev/moves/grid-tile-flip.mp4",
   "md": "https://vawe.dev/moves/grid-tile-flip.md",
   "page": "https://vawe.dev/moves/grid-tile-flip",
   "duration": 1.4
  },
  {
   "name": "luma-matte-dissolve",
   "title": "Luma matte dissolve",
   "group": "change-between-shots",
   "look": "dusk",
   "jobs": [
    "change-between-shots-soft"
   ],
   "use": "the next shot arrives through its own brightness: an SVG luminance matte with a falling threshold shows its bright areas first, then midtones, and its dark ground last",
   "clip": "https://vawe.dev/moves/luma-matte-dissolve.mp4",
   "md": "https://vawe.dev/moves/luma-matte-dissolve.md",
   "page": "https://vawe.dev/moves/luma-matte-dissolve",
   "duration": 1.5
  },
  {
   "name": "smear-stretch",
   "title": "Smear stretch",
   "group": "change-between-shots",
   "look": "daylight",
   "jobs": [
    "change-between-shots-hard-and-fast-exposure-flash-reads-as-camera-over-exposure"
   ],
   "use": "an elastic cut: shot A's content stretches into streaks on an ease-in, the cut lands at the peak, and shot B snaps back from the streak on an under-damped spring, thinning and bulging like rubber",
   "clip": "https://vawe.dev/moves/smear-stretch.mp4",
   "md": "https://vawe.dev/moves/smear-stretch.md",
   "page": "https://vawe.dev/moves/smear-stretch",
   "duration": 1.4
  },
  {
   "name": "shape-morph-wipe",
   "title": "Shape morph wipe",
   "group": "change-between-shots",
   "look": "swiss",
   "jobs": [
    "change-between-shots-graphic"
   ],
   "use": "the next shot grows out of a shape on screen: the mask is born as a dot, grows as a circle, then widens and squares off into a rounded card and past the frame",
   "clip": "https://vawe.dev/moves/shape-morph-wipe.mp4",
   "md": "https://vawe.dev/moves/shape-morph-wipe.md",
   "page": "https://vawe.dev/moves/shape-morph-wipe",
   "duration": 1.5
  },
  {
   "name": "spin-transition",
   "title": "Spin transition",
   "group": "change-between-shots",
   "look": "paper",
   "jobs": [
    "change-between-shots-spatial"
   ],
   "use": "a 90 degree camera roll carries the cut: A rolls to 45 degrees speeding up, B rolls in from -45 and lands soft, scaled to always cover the frame, with rotational blur from 16 stacked exposures",
   "clip": "https://vawe.dev/moves/spin-transition.mp4",
   "md": "https://vawe.dev/moves/spin-transition.md",
   "page": "https://vawe.dev/moves/spin-transition",
   "duration": 1.4
  },
  {
   "name": "swipe-continues",
   "title": "Swipe continues",
   "group": "change-between-shots",
   "look": "daylight",
   "jobs": [
    "change-between-shots-one-object-carries-over-with-no-cut-and-no-crossfade"
   ],
   "use": "a card is swiped left and the next scene arrives from the right at the same speed: one belt, the finger lets go at the peak, 40 percent of the travel on the throw and 60 on the brake, 8 stacked exposures for the blur",
   "clip": "https://vawe.dev/moves/swipe-continues.mp4",
   "md": "https://vawe.dev/moves/swipe-continues.md",
   "page": "https://vawe.dev/moves/swipe-continues",
   "duration": 3
  },
  {
   "name": "drop-and-land",
   "title": "Drop and land",
   "group": "change-between-shots",
   "look": "paper",
   "jobs": [
    "change-between-shots-one-object-carries-over-with-no-cut-and-no-crossfade"
   ],
   "use": "an action in scene A lands in scene B: the product tile lifts, falls under gravity out of the card into the cart while one camera tilt brings the cart up and stops before the landing, then squashes and settles on a spring",
   "clip": "https://vawe.dev/moves/drop-and-land.mp4",
   "md": "https://vawe.dev/moves/drop-and-land.md",
   "page": "https://vawe.dev/moves/drop-and-land",
   "duration": 3.2
  },
  {
   "name": "spin-rotation",
   "title": "Spin rotation",
   "group": "change-between-shots",
   "look": "vawe",
   "jobs": [
    "change-between-shots-one-object-carries-over-with-no-cut-and-no-crossfade"
   ],
   "use": "a loading spinner hands over to the loaded screen: the arc's leading edge sweeps a wedge that uncovers the next screen, the camera rolls 14 degrees with the turn and settles tilted, and the ring flies to the header as its mark",
   "clip": "https://vawe.dev/moves/spin-rotation.mp4",
   "md": "https://vawe.dev/moves/spin-rotation.md",
   "page": "https://vawe.dev/moves/spin-rotation",
   "duration": 3.2
  },
  {
   "name": "counter-dive",
   "title": "Counter dive",
   "group": "change-between-shots",
   "look": "field",
   "jobs": [
    "change-between-shots-one-object-carries-over-with-no-cut-and-no-crossfade"
   ],
   "use": "a title is entered through one letter: the camera pushes in log space into the counter of an \"o\" cut out of the title, scene B is already inside it as a miniature, and it fills the frame with no cut",
   "clip": "https://vawe.dev/moves/counter-dive.mp4",
   "md": "https://vawe.dev/moves/counter-dive.md",
   "page": "https://vawe.dev/moves/counter-dive",
   "duration": 3.6
  },
  {
   "name": "thumbnail-grid",
   "title": "Thumbnail grid",
   "group": "change-between-shots",
   "look": "swiss",
   "jobs": [
    "change-between-shots-one-object-carries-over-with-no-cut-and-no-crossfade"
   ],
   "use": "the scene shrinks into a thumbnail in a grid that is the next scene: one pull back in log space about the middle cell, nine frame-sized cells in the world, radius from square to the look's step, then the title and a selection ring",
   "clip": "https://vawe.dev/moves/thumbnail-grid.mp4",
   "md": "https://vawe.dev/moves/thumbnail-grid.md",
   "page": "https://vawe.dev/moves/thumbnail-grid",
   "duration": 3.4
  },
  {
   "name": "light-leak-transition",
   "title": "Light leak transition",
   "group": "change-between-shots",
   "look": "vawe",
   "jobs": [
    "change-between-shots-soft"
   ],
   "use": "two shots meet through warmth: three generated warm layers swell over a dark UI on their own clocks, the cut lands on the peak, and the new shot climbs out as they fall faster; no image asset",
   "clip": "https://vawe.dev/moves/light-leak-transition.mp4",
   "md": "https://vawe.dev/moves/light-leak-transition.md",
   "page": "https://vawe.dev/moves/light-leak-transition",
   "duration": 2.6
  },
  {
   "name": "type-match-cut",
   "title": "Type match cut",
   "group": "change-between-shots",
   "look": "field",
   "jobs": [
    "change-between-shots-graphic"
   ],
   "use": "one word grows in shot A and holds its place while the frame cuts around it; in shot B the same node is part of a new line",
   "clip": "https://vawe.dev/moves/type-match-cut.mp4",
   "md": "https://vawe.dev/moves/type-match-cut.md",
   "page": "https://vawe.dev/moves/type-match-cut",
   "duration": 2.6
  },
  {
   "name": "cursor-spotlight",
   "title": "Cursor spotlight",
   "group": "change-between-shots",
   "look": "daylight",
   "jobs": [
    "change-between-shots-one-object-carries-over-with-no-cut-and-no-crossfade"
   ],
   "use": "a click opens the next screen: the cursor tip grows a soft circle (a radial mask, not a blur) that shows shot B inside it while shot A stays outside until the circle covers the frame",
   "clip": "https://vawe.dev/moves/cursor-spotlight.mp4",
   "md": "https://vawe.dev/moves/cursor-spotlight.md",
   "page": "https://vawe.dev/moves/cursor-spotlight",
   "duration": 3.6
  },
  {
   "name": "toggle-horizon",
   "title": "Toggle horizon",
   "group": "change-between-shots",
   "look": "dusk",
   "jobs": [
    "change-between-shots-one-object-carries-over-with-no-cut-and-no-crossfade"
   ],
   "use": "a setting switches the world: the toggle track stretches past both frame edges and thins to the horizon line of the next scene, and shot A opens away from the line, up and down",
   "clip": "https://vawe.dev/moves/toggle-horizon.mp4",
   "md": "https://vawe.dev/moves/toggle-horizon.md",
   "page": "https://vawe.dev/moves/toggle-horizon",
   "duration": 3.8
  },
  {
   "name": "progress-timeline",
   "title": "Progress timeline",
   "group": "change-between-shots",
   "look": "vawe",
   "jobs": [
    "change-between-shots-one-object-carries-over-with-no-cut-and-no-crossfade"
   ],
   "use": "a bar ends and the result opens in an editor: the fill runs past its end, stands up into the scrubber of a timeline and reveals it while it keeps the fill's speed",
   "clip": "https://vawe.dev/moves/progress-timeline.mp4",
   "md": "https://vawe.dev/moves/progress-timeline.md",
   "page": "https://vawe.dev/moves/progress-timeline",
   "duration": 3.6
  },
  {
   "name": "avatar-world",
   "title": "Avatar world",
   "group": "change-between-shots",
   "look": "daylight",
   "jobs": [
    "change-between-shots-one-object-carries-over-with-no-cut-and-no-crossfade"
   ],
   "use": "a person or brand is the way in: a round vector avatar grows until its circle covers the frame and its art is the ground of the next scene",
   "clip": "https://vawe.dev/moves/avatar-world.mp4",
   "md": "https://vawe.dev/moves/avatar-world.md",
   "page": "https://vawe.dev/moves/avatar-world",
   "duration": 3.8
  },
  {
   "name": "glow-record",
   "title": "Glow record",
   "group": "change-between-shots",
   "look": "vawe",
   "jobs": [
    "change-between-shots-one-object-carries-over-with-no-cut-and-no-crossfade"
   ],
   "use": "an alert becomes a live state: a badge's red floods the frame in 0.35 s on a screen blend with over-exposure, then gathers into the red dot of a recording light",
   "clip": "https://vawe.dev/moves/glow-record.mp4",
   "md": "https://vawe.dev/moves/glow-record.md",
   "page": "https://vawe.dev/moves/glow-record",
   "duration": 3.8
  },
  {
   "name": "highlight-sweep",
   "title": "Highlight sweep",
   "group": "change-between-shots",
   "look": "signal",
   "jobs": [
    "change-between-shots-one-object-carries-over-with-no-cut-and-no-crossfade"
   ],
   "use": "a highlight sweeps across a key word, keeps going off the line and grows into the next panel's background; the edge never stops at the word, and the word flips to dark ink at the edge",
   "clip": "https://vawe.dev/moves/highlight-sweep.mp4",
   "md": "https://vawe.dev/moves/highlight-sweep.md",
   "page": "https://vawe.dev/moves/highlight-sweep",
   "duration": 3.6
  },
  {
   "name": "shadow-handoff",
   "title": "Shadow handoff",
   "group": "change-between-shots",
   "look": "daylight",
   "jobs": [
    "change-between-shots-one-object-carries-over-with-no-cut-and-no-crossfade"
   ],
   "use": "a card lifts, its blurred shadow stretches down and right and darkens into the night scene's ground colour, then the card leaves faster than it lifted",
   "clip": "https://vawe.dev/moves/shadow-handoff.mp4",
   "md": "https://vawe.dev/moves/shadow-handoff.md",
   "page": "https://vawe.dev/moves/shadow-handoff",
   "duration": 3.8
  },
  {
   "name": "word-portal",
   "title": "Word portal",
   "group": "change-between-shots",
   "look": "vawe",
   "jobs": [
    "change-between-shots-one-object-carries-over-with-no-cut-and-no-crossfade"
   ],
   "use": "a typed word grows until one stem is the whole frame and the next scene shows through the letterforms (an SVG text clip over a fixed scene B), on a log-path zoom",
   "clip": "https://vawe.dev/moves/word-portal.mp4",
   "md": "https://vawe.dev/moves/word-portal.md",
   "page": "https://vawe.dev/moves/word-portal",
   "duration": 3.8
  },
  {
   "name": "underline-road",
   "title": "Underline road",
   "group": "change-between-shots",
   "look": "paper",
   "jobs": [
    "change-between-shots-one-object-carries-over-with-no-cut-and-no-crossfade"
   ],
   "use": "the underline of a headline extends, bends down and becomes the route on a simple map, with the camera trailing the head at its speed and stopping at the map's end",
   "clip": "https://vawe.dev/moves/underline-road.mp4",
   "md": "https://vawe.dev/moves/underline-road.md",
   "page": "https://vawe.dev/moves/underline-road",
   "duration": 3.9
  },
  {
   "name": "caret-door",
   "title": "Caret door",
   "group": "change-between-shots",
   "look": "terminal",
   "jobs": [
    "change-between-shots-one-object-carries-over-with-no-cut-and-no-crossfade"
   ],
   "use": "the blinking caret grows tall, then opens as a two-frame-wide door that turns about it under perspective; the next screen is on the door's face",
   "clip": "https://vawe.dev/moves/caret-door.mp4",
   "md": "https://vawe.dev/moves/caret-door.md",
   "page": "https://vawe.dev/moves/caret-door",
   "duration": 3.6
  },
  {
   "name": "word-sweep",
   "title": "Word colour sweep",
   "group": "point-the-eye",
   "look": "signal",
   "jobs": [
    "point-at-one-word-in-a-held-line"
   ],
   "use": "the accent runs word by word in reading order and stays on the target word",
   "clip": "https://vawe.dev/moves/word-sweep.mp4",
   "md": "https://vawe.dev/moves/word-sweep.md",
   "page": "https://vawe.dev/moves/word-sweep",
   "duration": 1.5
  },
  {
   "name": "weight-morph",
   "title": "Weight morph",
   "group": "point-the-eye",
   "look": "swiss",
   "jobs": [
    "change-what-a-word-means"
   ],
   "use": "one word gets heavier on a real variable-font axis; the glyphs reshape, nothing is scaled",
   "clip": "https://vawe.dev/moves/weight-morph.mp4",
   "md": "https://vawe.dev/moves/weight-morph.md",
   "page": "https://vawe.dev/moves/weight-morph",
   "duration": 1.2
  },
  {
   "name": "marker-highlight",
   "title": "Marker highlight",
   "group": "point-the-eye",
   "look": "paper",
   "jobs": [
    "point-at-one-word-in-a-held-line"
   ],
   "use": "a highlighter bar wipes behind one phrase and the text flips dark for contrast",
   "clip": "https://vawe.dev/moves/marker-highlight.mp4",
   "md": "https://vawe.dev/moves/marker-highlight.md",
   "page": "https://vawe.dev/moves/marker-highlight",
   "duration": 1.4
  },
  {
   "name": "underline-draw",
   "title": "Underline draw",
   "group": "point-the-eye",
   "look": "brutal",
   "jobs": [
    "point-at-one-word-in-a-held-line"
   ],
   "use": "a line draws under the key word, left to right, fast in and slow out",
   "clip": "https://vawe.dev/moves/underline-draw.mp4",
   "md": "https://vawe.dev/moves/underline-draw.md",
   "page": "https://vawe.dev/moves/underline-draw",
   "duration": 1.4
  },
  {
   "name": "bracket-callout",
   "title": "Bracket callout",
   "group": "point-the-eye",
   "look": "daylight",
   "jobs": [
    "point-at-one-part-of-a-ui"
   ],
   "use": "corner brackets fly in and snap onto a word or a UI part with a small overshoot",
   "clip": "https://vawe.dev/moves/bracket-callout.mp4",
   "md": "https://vawe.dev/moves/bracket-callout.md",
   "page": "https://vawe.dev/moves/bracket-callout",
   "duration": 1.4
  },
  {
   "name": "spotlight-dim",
   "title": "Spotlight dim",
   "group": "point-the-eye",
   "look": "dusk",
   "jobs": [
    "point-at-one-part-of-a-ui"
   ],
   "use": "the frame dims around one target: a hole closes from the full frame onto it and its shadow is the dim",
   "clip": "https://vawe.dev/moves/spotlight-dim.mp4",
   "md": "https://vawe.dev/moves/spotlight-dim.md",
   "page": "https://vawe.dev/moves/spotlight-dim",
   "duration": 1.1
  },
  {
   "name": "hand-drawn-notes",
   "title": "Hand drawn notes",
   "group": "point-the-eye",
   "look": "swiss",
   "jobs": [
    "point-at-one-word-in-a-held-line"
   ],
   "use": "a person's margin notes: a loose circle round one word, an arrow from a written label and an underline, drawn on with stroke-dashoffset and a seeded wobble",
   "clip": "https://vawe.dev/moves/hand-drawn-notes.mp4",
   "md": "https://vawe.dev/moves/hand-drawn-notes.md",
   "page": "https://vawe.dev/moves/hand-drawn-notes",
   "duration": 2.8
  },
  {
   "name": "ui-focus-zoom",
   "title": "UI focus zoom",
   "group": "move-the-camera",
   "look": "daylight",
   "jobs": [
    "point-at-one-part-of-a-ui"
   ],
   "use": "zoom onto one part of a captured UI: the cursor lands, then one translate and one scale put the part in the middle",
   "clip": "https://vawe.dev/moves/ui-focus-zoom.mp4",
   "md": "https://vawe.dev/moves/ui-focus-zoom.md",
   "page": "https://vawe.dev/moves/ui-focus-zoom",
   "duration": 1.3
  },
  {
   "name": "caret-follow",
   "title": "Caret follow",
   "group": "move-the-camera",
   "look": "terminal",
   "jobs": [
    "type-a-command-prompt-or-name"
   ],
   "use": "the camera trails the typing caret on a soft spring, so a long line stays readable at close range",
   "clip": "https://vawe.dev/moves/caret-follow.mp4",
   "md": "https://vawe.dev/moves/caret-follow.md",
   "page": "https://vawe.dev/moves/caret-follow",
   "duration": 2
  },
  {
   "name": "pull-back-reveal",
   "title": "Pull back reveal",
   "group": "move-the-camera",
   "look": "vawe",
   "jobs": [
    "open-on-a-detail-answer-with-the-whole"
   ],
   "use": "open tight on a detail and pull back to the whole; scale runs on a log path so the speed reads even",
   "clip": "https://vawe.dev/moves/pull-back-reveal.mp4",
   "md": "https://vawe.dev/moves/pull-back-reveal.md",
   "page": "https://vawe.dev/moves/pull-back-reveal",
   "duration": 1.8
  },
  {
   "name": "parallax-dive",
   "title": "Parallax dive",
   "group": "move-the-camera",
   "look": "field",
   "jobs": [
    "arrive-by-flying-into-a-scene-or-give-a-push-depth",
    "give-a-camera-move-depth-ground-mid-and-front-layers-move-by-different-amounts"
   ],
   "use": "the camera flies forward through layers at real depths: near layers rush past, the far ground barely moves; also one camera move on ground, mid and front layers by depth (parallax())",
   "clip": "https://vawe.dev/moves/parallax-dive.mp4",
   "md": "https://vawe.dev/moves/parallax-dive.md",
   "page": "https://vawe.dev/moves/parallax-dive",
   "duration": 2
  },
  {
   "name": "exposure-flash",
   "title": "Exposure flash",
   "group": "move-the-camera",
   "look": "terminal",
   "jobs": [
    "change-between-shots-hard-and-fast-exposure-flash-reads-as-camera-over-exposure"
   ],
   "use": "a cut on a screen film reads as over-exposure: 3 frames of white, the swap inside the peak, the new shot starts at 2x brightness and settles in 0.15 s; at most 3 flashes a second",
   "clip": "https://vawe.dev/moves/exposure-flash.mp4",
   "md": "https://vawe.dev/moves/exposure-flash.md",
   "page": "https://vawe.dev/moves/exposure-flash",
   "duration": 2
  },
  {
   "name": "lens",
   "title": "Lens",
   "group": "move-the-camera",
   "look": "vawe",
   "jobs": [
    "film-a-screen-as-a-real-object-tilt-depth-bloom-led-grid-fringes"
   ],
   "use": "a screen filmed as a real object: tilt, depth, bloom, LED grid, fringes, done as lens work and never faked with CSS layers",
   "clip": "https://vawe.dev/moves/lens.mp4",
   "md": "https://vawe.dev/moves/lens.md",
   "page": "https://vawe.dev/moves/lens",
   "duration": 6
  },
  {
   "name": "camera-moves",
   "title": "Camera moves",
   "group": "move-the-camera",
   "look": "swiss",
   "jobs": [
    "lean-the-camera-toward-a-subject",
    "move-the-camera-over-a-whole-world-push-pull-whip"
   ],
   "use": "a whole world as one wrapper: push toward a subject (the ground scales less so the layers separate), pull, whip between worlds (camera()); the camera holds still by default",
   "clip": "https://vawe.dev/moves/camera-moves.mp4",
   "md": "https://vawe.dev/moves/camera-moves.md",
   "page": "https://vawe.dev/moves/camera-moves",
   "duration": 2
  },
  {
   "name": "depth-resolve",
   "title": "Depth resolve",
   "group": "move-the-camera",
   "look": "vawe",
   "jobs": [
    "two-depths-of-words-that-resolve-as-the-camera-arrives-a-focus-pull"
   ],
   "use": "far words small and soft resolve as the camera arrives; a focus pull (focus())",
   "clip": "https://vawe.dev/moves/depth-resolve.mp4",
   "md": "https://vawe.dev/moves/depth-resolve.md",
   "page": "https://vawe.dev/moves/depth-resolve",
   "duration": null
  },
  {
   "name": "scale-through",
   "title": "Scale through",
   "group": "move-the-camera",
   "look": "vawe",
   "jobs": [
    "enter-the-next-world-by-flying-into-an-element"
   ],
   "use": "fly into a plain element and its colour is the next world, in Web Animations only",
   "clip": "https://vawe.dev/moves/scale-through.mp4",
   "md": "https://vawe.dev/moves/scale-through.md",
   "page": "https://vawe.dev/moves/scale-through",
   "duration": null
  },
  {
   "name": "direction-wipe",
   "title": "Direction wipe",
   "group": "move-the-camera",
   "look": "vawe",
   "jobs": [
    "change-between-shots-graphic",
    "wipe-in-the-next-beat-along-the-last-move-s-direction"
   ],
   "use": "a mask edge moves the way the last move went and reveals the next beat",
   "clip": "https://vawe.dev/moves/direction-wipe.mp4",
   "md": "https://vawe.dev/moves/direction-wipe.md",
   "page": "https://vawe.dev/moves/direction-wipe",
   "duration": null
  },
  {
   "name": "arrival-spring",
   "title": "Arrival spring",
   "group": "move-the-camera",
   "look": "vawe",
   "jobs": [
    "make-some-arrivals-overshoot-21-to-41-percent-of-them"
   ],
   "use": "EASE.nudge on one arrival in three, EASE.pop on the one that matters (nudgeEvery)",
   "clip": "https://vawe.dev/moves/arrival-spring.mp4",
   "md": "https://vawe.dev/moves/arrival-spring.md",
   "page": "https://vawe.dev/moves/arrival-spring",
   "duration": null
  },
  {
   "name": "rack-focus",
   "title": "Rack focus",
   "group": "move-the-camera",
   "look": "dusk",
   "jobs": [
    "lean-the-camera-toward-a-subject"
   ],
   "use": "focus moves from one depth layer to another: near melts, far resolves, pinpoint lights swell into discs; use once per film",
   "clip": "https://vawe.dev/moves/rack-focus.mp4",
   "md": "https://vawe.dev/moves/rack-focus.md",
   "page": "https://vawe.dev/moves/rack-focus",
   "duration": 1.4
  },
  {
   "name": "drift-hold",
   "title": "Drift hold",
   "group": "move-the-camera",
   "look": "paper",
   "jobs": [
    "hold-a-line-still-to-read-with-a-ground-option-behind-it-the-hold-itself-keeps-a-part-moving-rule-live-hold"
   ],
   "use": "the line holds still while only the ground drifts, so a held frame never sits dead",
   "clip": "https://vawe.dev/moves/drift-hold.mp4",
   "md": "https://vawe.dev/moves/drift-hold.md",
   "page": "https://vawe.dev/moves/drift-hold",
   "duration": 2
  },
  {
   "name": "gradient-mesh-field",
   "title": "Gradient mesh field",
   "group": "move-the-camera",
   "look": "signal",
   "jobs": [
    "hold-a-line-still-to-read-with-a-ground-option-behind-it-the-hold-itself-keeps-a-part-moving-rule-live-hold",
    "give-a-held-frame-a-living-ground"
   ],
   "use": "a title sits on a living ground: four soft colour pools drift on seeded paths in one fragment shader, with grain against banding; the copy keeps 4.5:1",
   "clip": "https://vawe.dev/moves/gradient-mesh-field.mp4",
   "md": "https://vawe.dev/moves/gradient-mesh-field.md",
   "page": "https://vawe.dev/moves/gradient-mesh-field",
   "duration": 3
  },
  {
   "name": "pan-stations",
   "title": "Pan stations",
   "group": "move-the-camera",
   "look": "vawe",
   "jobs": [
    "tour-several-features-in-one-space"
   ],
   "use": "several steps or features as one continuous place: the camera pans between stations on one wide canvas and holds at each, a rail and a parallax dot grid carrying the space between them",
   "clip": "https://vawe.dev/moves/pan-stations.mp4",
   "md": "https://vawe.dev/moves/pan-stations.md",
   "page": "https://vawe.dev/moves/pan-stations",
   "duration": 2
  },
  {
   "name": "crash-zoom",
   "title": "Crash zoom",
   "group": "move-the-camera",
   "look": "signal",
   "jobs": [
    "hit-one-detail-on-a-beat"
   ],
   "use": "one detail hits on a beat: a 0.13 s ease-in slam to 2.6x with real zoom blur from 16 stacked exposures, a 5 percent overshoot and a short recoil",
   "clip": "https://vawe.dev/moves/crash-zoom.mp4",
   "md": "https://vawe.dev/moves/crash-zoom.md",
   "page": "https://vawe.dev/moves/crash-zoom",
   "duration": 1.6
  },
  {
   "name": "logo-sting",
   "title": "Logo sting",
   "group": "end-a-film",
   "look": "vawe",
   "jobs": [
    "open-on-the-brand-in-under-2-s",
    "end-on-the-brand"
   ],
   "use": "a short logo hit: the mark lands, one light band crosses it, the word opens from behind it, a slow push runs to the last frame; use once per film",
   "clip": "https://vawe.dev/moves/logo-sting.mp4",
   "md": "https://vawe.dev/moves/logo-sting.md",
   "page": "https://vawe.dev/moves/logo-sting",
   "duration": 1.8
  },
  {
   "name": "wordmark-cascade",
   "title": "Wordmark cascade",
   "group": "end-a-film",
   "look": "brutal",
   "jobs": [
    "end-on-the-brand"
   ],
   "use": "the name is the last beat: letters fall onto a rail with shrinking gaps, the full stop lands last, an accent bar runs the rail; use once per film",
   "clip": "https://vawe.dev/moves/wordmark-cascade.mp4",
   "md": "https://vawe.dev/moves/wordmark-cascade.md",
   "page": "https://vawe.dev/moves/wordmark-cascade",
   "duration": 1.9
  },
  {
   "name": "mark-trace",
   "title": "Mark trace",
   "group": "end-a-film",
   "look": "swiss",
   "jobs": [
    "end-on-the-brand"
   ],
   "use": "a line mark draws itself with a riding tip, thickens to its final weight, then an accent bar runs the finished mark; use once per film",
   "clip": "https://vawe.dev/moves/mark-trace.mp4",
   "md": "https://vawe.dev/moves/mark-trace.md",
   "page": "https://vawe.dev/moves/mark-trace",
   "duration": 2
  },
  {
   "name": "shape-trace-morph",
   "title": "Shape trace morph",
   "group": "end-a-film",
   "look": "signal",
   "jobs": [
    "end-on-the-brand"
   ],
   "use": "a brand mark is built like a shape layer: an outline draws on, fills as it closes, then morphs into the real mark on one spring; both paths keep the same command count; use once per film",
   "clip": "https://vawe.dev/moves/shape-trace-morph.mp4",
   "md": "https://vawe.dev/moves/shape-trace-morph.md",
   "page": "https://vawe.dev/moves/shape-trace-morph",
   "duration": 3.2
  },
  {
   "name": "calm-lockup",
   "title": "Calm lockup",
   "group": "end-a-film",
   "look": "dusk",
   "jobs": [
    "end-quietly"
   ],
   "use": "the quiet ending: logo and line settle slowly while two lights drift behind and the lockup floats; use once per film",
   "clip": "https://vawe.dev/moves/calm-lockup.mp4",
   "md": "https://vawe.dev/moves/calm-lockup.md",
   "page": "https://vawe.dev/moves/calm-lockup",
   "duration": 2
  },
  {
   "name": "cta-pop",
   "title": "CTA pop",
   "group": "end-a-film",
   "look": "field",
   "jobs": [
    "end-on-an-action"
   ],
   "use": "the call to action pops in under its line on the overshoot curve, the one accent, and the arrow leans to invite the click",
   "clip": "https://vawe.dev/moves/cta-pop.mp4",
   "md": "https://vawe.dev/moves/cta-pop.md",
   "page": "https://vawe.dev/moves/cta-pop",
   "duration": 1.8
  },
  {
   "name": "thanks-sweep",
   "title": "Thanks sweep",
   "group": "end-a-film",
   "look": "paper",
   "jobs": [
    "end-quietly"
   ],
   "use": "a closing line sweeps in on a soft mask edge with an accent bar riding the edge, then drifts; use once per film",
   "clip": "https://vawe.dev/moves/thanks-sweep.mp4",
   "md": "https://vawe.dev/moves/thanks-sweep.md",
   "page": "https://vawe.dev/moves/thanks-sweep",
   "duration": 1.8
  },
  {
   "name": "ui-strip-away",
   "title": "UI strip away",
   "group": "end-a-film",
   "look": "vawe",
   "jobs": [
    "hand-the-product-to-the-brand"
   ],
   "use": "the last beat hands the product to the brand: the UI leaves layer by layer, top layer first, while the sidebar mark travels to the middle and becomes the lockup",
   "clip": "https://vawe.dev/moves/ui-strip-away.mp4",
   "md": "https://vawe.dev/moves/ui-strip-away.md",
   "page": "https://vawe.dev/moves/ui-strip-away",
   "duration": 2
  },
  {
   "name": "logo-wall",
   "title": "Logo wall",
   "group": "end-a-film",
   "look": "daylight",
   "jobs": [
    "prove-it-with-customers"
   ],
   "use": "the proof beat before the call to action: three lanes of hairline cells with invented logos slide in from alternate sides on a stagger, blurred to their speed, and keep drifting after they land",
   "clip": "https://vawe.dev/moves/logo-wall.mp4",
   "md": "https://vawe.dev/moves/logo-wall.md",
   "page": "https://vawe.dev/moves/logo-wall",
   "duration": 2
  },
  {
   "name": "cta-morph-press",
   "title": "CTA morph press",
   "group": "end-a-film",
   "look": "chrome",
   "jobs": [
    "end-on-an-action"
   ],
   "use": "the close moves from brand to action: one plate changes shape into a button on one spring, a cursor arrives on a bowed path and presses, and the button shows a confirmed state",
   "clip": "https://vawe.dev/moves/cta-morph-press.mp4",
   "md": "https://vawe.dev/moves/cta-morph-press.md",
   "page": "https://vawe.dev/moves/cta-morph-press",
   "duration": 4
  },
  {
   "name": "clip-expand",
   "title": "Clip expand from a point",
   "group": "product-moments",
   "look": "dusk",
   "jobs": [
    "show-a-real-ui-arriving"
   ],
   "use": "a panel or capture grows out of one point the eye is already on",
   "clip": "https://vawe.dev/moves/clip-expand.mp4",
   "md": "https://vawe.dev/moves/clip-expand.md",
   "page": "https://vawe.dev/moves/clip-expand",
   "duration": 1
  },
  {
   "name": "cursor-click",
   "title": "Cursor click",
   "group": "product-moments",
   "look": "daylight",
   "jobs": [
    "show-a-click-doing-its-job"
   ],
   "use": "a cursor travels a bowed path to a control, the control lights and dips on the press, the label rolls to its result, the cursor leaves",
   "clip": "https://vawe.dev/moves/cursor-click.mp4",
   "md": "https://vawe.dev/moves/cursor-click.md",
   "page": "https://vawe.dev/moves/cursor-click",
   "duration": 2
  },
  {
   "name": "count-up",
   "title": "Count up",
   "group": "product-moments",
   "look": "swiss",
   "jobs": [
    "prove-a-number"
   ],
   "use": "a number is the proof: each digit is a wheel that rolls to its value with speed blur, then a delta chip and a sparkline",
   "clip": "https://vawe.dev/moves/count-up.mp4",
   "md": "https://vawe.dev/moves/count-up.md",
   "page": "https://vawe.dev/moves/count-up",
   "duration": 2
  },
  {
   "name": "card-assemble",
   "title": "Card assemble",
   "group": "product-moments",
   "look": "chrome",
   "jobs": [
    "show-a-real-ui-arriving"
   ],
   "use": "a UI card builds: the shell lands, then each part arrives from the side of its slot, the accent action last",
   "clip": "https://vawe.dev/moves/card-assemble.mp4",
   "md": "https://vawe.dev/moves/card-assemble.md",
   "page": "https://vawe.dev/moves/card-assemble",
   "duration": 1.9
  },
  {
   "name": "notification-pop",
   "title": "Notification pop",
   "group": "product-moments",
   "look": "field",
   "jobs": [
    "show-a-click-doing-its-job"
   ],
   "use": "a banner drops in on the overshoot curve, icon then text, holds a second and leaves faster than it came",
   "clip": "https://vawe.dev/moves/notification-pop.mp4",
   "md": "https://vawe.dev/moves/notification-pop.md",
   "page": "https://vawe.dev/moves/notification-pop",
   "duration": 2
  },
  {
   "name": "chart-build",
   "title": "Chart build",
   "group": "product-moments",
   "look": "swiss",
   "jobs": [
    "prove-a-number"
   ],
   "use": "gridlines draw, bars rise in sequence, the newest bar turns accent and its value tag pops on it",
   "clip": "https://vawe.dev/moves/chart-build.mp4",
   "md": "https://vawe.dev/moves/chart-build.md",
   "page": "https://vawe.dev/moves/chart-build",
   "duration": 2
  },
  {
   "name": "before-after-wipe",
   "title": "Before and after wipe",
   "group": "product-moments",
   "look": "daylight",
   "jobs": [
    "prove-a-change-with-a-picture"
   ],
   "use": "the claim is a change: one card in two states, and a scan line carries the after state (accent, real numbers) over the grey before on the iris curve",
   "clip": "https://vawe.dev/moves/before-after-wipe.mp4",
   "md": "https://vawe.dev/moves/before-after-wipe.md",
   "page": "https://vawe.dev/moves/before-after-wipe",
   "duration": 2
  },
  {
   "name": "skeleton-reveal",
   "title": "Skeleton reveal",
   "group": "product-moments",
   "look": "dusk",
   "jobs": [
    "show-a-real-ui-arriving"
   ],
   "use": "grey blocks in the shape of the content shimmer under one moving light, then each region resolves into real content, 200 ms apart; use once per film",
   "clip": "https://vawe.dev/moves/skeleton-reveal.mp4",
   "md": "https://vawe.dev/moves/skeleton-reveal.md",
   "page": "https://vawe.dev/moves/skeleton-reveal",
   "duration": 2
  },
  {
   "name": "ai-stream-response",
   "title": "AI stream response",
   "group": "product-moments",
   "look": "terminal",
   "jobs": [
    "show-an-ai-product-answering"
   ],
   "use": "a typed prompt is sent up into the thread, a status line shines, then the answer streams in 1 to 3 word chunks with a caret on the newest chunk",
   "clip": "https://vawe.dev/moves/ai-stream-response.mp4",
   "md": "https://vawe.dev/moves/ai-stream-response.md",
   "page": "https://vawe.dev/moves/ai-stream-response",
   "duration": 2.4
  },
  {
   "name": "overwhelm-collapse",
   "title": "Overwhelm collapse",
   "group": "product-moments",
   "look": "brutal",
   "jobs": [
    "show-the-problem-then-the-fix"
   ],
   "use": "the problem turns to the fix: 26 cards, chips and notifications flood the frame on a shrinking gap, then a fast cubic-in collapse pulls them into one point and one clean element opens",
   "clip": "https://vawe.dev/moves/overwhelm-collapse.mp4",
   "md": "https://vawe.dev/moves/overwhelm-collapse.md",
   "page": "https://vawe.dev/moves/overwhelm-collapse",
   "duration": 2.2
  },
  {
   "name": "success-check",
   "title": "Success check",
   "group": "product-moments",
   "look": "vawe",
   "jobs": [
    "show-a-click-doing-its-job"
   ],
   "use": "a button resolves into a drawn check: the press dips, the width closes to a circle, the check draws on one dash, the circle lands on a small spring and one ring leaves it",
   "clip": "https://vawe.dev/moves/success-check.mp4",
   "md": "https://vawe.dev/moves/success-check.md",
   "page": "https://vawe.dev/moves/success-check",
   "duration": 1.6
  },
  {
   "name": "integration-hub",
   "title": "Integration hub",
   "group": "product-moments",
   "look": "terminal",
   "jobs": [
    "show-the-product-works-with-other-tools"
   ],
   "use": "the \"works with your tools\" beat: invented tool logos fly in on curved paths and land on a ring around the product mark, then every wire draws in the same frames and pulses ride into the hub",
   "clip": "https://vawe.dev/moves/integration-hub.mp4",
   "md": "https://vawe.dev/moves/integration-hub.md",
   "page": "https://vawe.dev/moves/integration-hub",
   "duration": 2
  },
  {
   "name": "device-tilt-stage",
   "title": "Device tilt stage",
   "group": "product-moments",
   "look": "chrome",
   "jobs": [
    "show-a-real-ui-arriving"
   ],
   "use": "the product as an object: the UI on a CSS 3D laptop that rises from a steep top-down angle, turns and settles on a spring, the glass reflection sliding with the lid's angle",
   "clip": "https://vawe.dev/moves/device-tilt-stage.mp4",
   "md": "https://vawe.dev/moves/device-tilt-stage.md",
   "page": "https://vawe.dev/moves/device-tilt-stage",
   "duration": 2
  },
  {
   "name": "command-palette-summon",
   "title": "Command palette summon",
   "group": "product-moments",
   "look": "vawe",
   "jobs": [
    "show-a-click-doing-its-job"
   ],
   "use": "the keyboard-first beat: the app dims, a Cmd+K palette drops in on a spring, a query types, non-matching rows collapse to zero height, Enter presses the chosen row and the palette leaves fast",
   "clip": "https://vawe.dev/moves/command-palette-summon.mp4",
   "md": "https://vawe.dev/moves/command-palette-summon.md",
   "page": "https://vawe.dev/moves/command-palette-summon",
   "duration": 2
  },
  {
   "name": "gooey-filter",
   "title": "Gooey filter",
   "group": "product-moments",
   "look": "vawe",
   "jobs": [
    "melt-a-tab-or-panel-into-the-next"
   ],
   "use": "a tab, pill or panel must melt into the next: shapes that touch merge into one soft outline through the SVG gooey filter (blur 15, alpha matrix 19 and -9), the active tab box slides on a critically damped spring and the page swaps in 0.2 s",
   "clip": "https://vawe.dev/moves/gooey-filter.mp4",
   "md": "https://vawe.dev/moves/gooey-filter.md",
   "page": "https://vawe.dev/moves/gooey-filter",
   "duration": 3.6
  },
  {
   "name": "agent-progress",
   "title": "Agent progress",
   "group": "product-moments",
   "look": "daylight",
   "jobs": [
    "show-an-ai-agent-doing-several-steps"
   ],
   "use": "an AI agent works through steps: a card springs in, an arc turns beside a status line that swaps states, and numbered rows flip to checks one by one, ending mid-list",
   "clip": "https://vawe.dev/moves/agent-progress.mp4",
   "md": "https://vawe.dev/moves/agent-progress.md",
   "page": "https://vawe.dev/moves/agent-progress",
   "duration": 3.2
  },
  {
   "name": "panel-live-sync",
   "title": "Panel live sync",
   "group": "product-moments",
   "look": "vawe",
   "jobs": [
    "show-an-edit-and-its-result-in-one-frame"
   ],
   "use": "an edit and its result in one frame: a cursor scrubs fields in a panel and the button on the page beside it rotates, rounds and grows in the same frames",
   "clip": "https://vawe.dev/moves/panel-live-sync.mp4",
   "md": "https://vawe.dev/moves/panel-live-sync.md",
   "page": "https://vawe.dev/moves/panel-live-sync",
   "duration": 3.8
  },
  {
   "name": "aurora-drift",
   "title": "Aurora drift",
   "group": "grounds",
   "look": "terminal",
   "jobs": [
    "give-a-held-frame-a-living-ground"
   ],
   "use": "three soft bands of light hang from the top of the frame and fold slowly in one shader while the copy sits low; the light thins out above the type",
   "clip": "https://vawe.dev/moves/aurora-drift.mp4",
   "md": "https://vawe.dev/moves/aurora-drift.md",
   "page": "https://vawe.dev/moves/aurora-drift",
   "duration": 4
  },
  {
   "name": "grain-field",
   "title": "Grain field",
   "group": "grounds",
   "look": "paper",
   "jobs": [
    "give-a-held-frame-a-living-ground"
   ],
   "use": "a quiet printed or filmic frame breathes: a slow tonal ground and film grain that turns over 24 times a second, seeded from the seek time, never from Math.random",
   "clip": "https://vawe.dev/moves/grain-field.mp4",
   "md": "https://vawe.dev/moves/grain-field.md",
   "page": "https://vawe.dev/moves/grain-field",
   "duration": 4
  },
  {
   "name": "halftone-field",
   "title": "Halftone field",
   "group": "grounds",
   "look": "chrome",
   "jobs": [
    "give-a-held-frame-a-living-ground"
   ],
   "use": "a physical or retro frame gets a 45 degree dot screen whose dot size waves across the frame while every dot stays in its cell",
   "clip": "https://vawe.dev/moves/halftone-field.mp4",
   "md": "https://vawe.dev/moves/halftone-field.md",
   "page": "https://vawe.dev/moves/halftone-field",
   "duration": 4
  },
  {
   "name": "ink-warp",
   "title": "Ink warp",
   "group": "grounds",
   "look": "signal",
   "jobs": [
    "give-a-held-frame-a-living-ground"
   ],
   "use": "a rich liquid ground for short large copy: marbled ink flows by domain warp in one shader, thinner behind the type",
   "clip": "https://vawe.dev/moves/ink-warp.mp4",
   "md": "https://vawe.dev/moves/ink-warp.md",
   "page": "https://vawe.dev/moves/ink-warp",
   "duration": 4
  },
  {
   "name": "dot-grid-wave",
   "title": "Dot grid wave",
   "group": "grounds",
   "look": "daylight",
   "jobs": [
    "give-a-held-frame-a-living-ground"
   ],
   "use": "a clean product or data frame gets a plain SVG dot grid with one travelling wave of scale and brightness, weaker behind the copy",
   "clip": "https://vawe.dev/moves/dot-grid-wave.mp4",
   "md": "https://vawe.dev/moves/dot-grid-wave.md",
   "page": "https://vawe.dev/moves/dot-grid-wave",
   "duration": 4
  },
  {
   "name": "light-pool",
   "title": "Light pool",
   "group": "grounds",
   "look": "vawe",
   "jobs": [
    "give-a-held-frame-a-living-ground"
   ],
   "use": "a matte held frame gets one soft pool of light that wanders on a seeded path, plain CSS with no shader; the stillest ground of the group",
   "clip": "https://vawe.dev/moves/light-pool.mp4",
   "md": "https://vawe.dev/moves/light-pool.md",
   "page": "https://vawe.dev/moves/light-pool",
   "duration": 4
  },
  {
   "name": "marquee-along-path",
   "title": "Marquee along path",
   "group": "grounds",
   "look": "vawe",
   "jobs": [
    "ride-tiles-along-a-curve-or-slide-rows-of-them"
   ],
   "use": "tiles ride one SVG path forever at an even gap, turned with the curve, rolling z-index, 8 percent of the path per second; one element along the path is an option",
   "clip": "https://vawe.dev/moves/marquee-along-path.mp4",
   "md": "https://vawe.dev/moves/marquee-along-path.md",
   "page": "https://vawe.dev/moves/marquee-along-path",
   "duration": 5
  },
  {
   "name": "simple-marquee",
   "title": "Simple marquee",
   "group": "grounds",
   "look": "vawe",
   "jobs": [
    "ride-tiles-along-a-curve-or-slide-rows-of-them"
   ],
   "use": "three rows of tiles slide for a whole beat, left, right, left, each row four copies that wrap by one set width at 8 percent per second",
   "clip": "https://vawe.dev/moves/simple-marquee.mp4",
   "md": "https://vawe.dev/moves/simple-marquee.md",
   "page": "https://vawe.dev/moves/simple-marquee",
   "duration": 4
  },
  {
   "name": "circling-elements",
   "title": "Circling elements",
   "group": "grounds",
   "look": "vawe",
   "jobs": [
    "orbit-tiles-around-one-point"
   ],
   "use": "eight upright tiles orbit one point on a 120 px radius, one linear turn in 10 s",
   "clip": "https://vawe.dev/moves/circling-elements.mp4",
   "md": "https://vawe.dev/moves/circling-elements.md",
   "page": "https://vawe.dev/moves/circling-elements",
   "duration": 5
  },
  {
   "name": "css-box",
   "title": "CSS box",
   "group": "grounds",
   "look": "vawe",
   "jobs": [
    "turn-a-cube-to-show-another-face"
   ],
   "use": "a 200 px cube of bold type turns to another face on a stiff overdamped spring (stiffness 100, damping 30, no overshoot) under perspective 600",
   "clip": "https://vawe.dev/moves/css-box.mp4",
   "md": "https://vawe.dev/moves/css-box.md",
   "page": "https://vawe.dev/moves/css-box",
   "duration": 4.6
  },
  {
   "name": "pixelate-svg-filter",
   "title": "Pixelate SVG filter",
   "group": "grounds",
   "look": "vawe",
   "jobs": [
    "break-a-picture-into-blocks-and-clear-it"
   ],
   "use": "a photo breaks into square blocks that grow and shrink with one number, size = x / 30 through a convolve, tile and dilate SVG filter",
   "clip": "https://vawe.dev/moves/pixelate-svg-filter.mp4",
   "md": "https://vawe.dev/moves/pixelate-svg-filter.md",
   "page": "https://vawe.dev/moves/pixelate-svg-filter",
   "duration": 4.8
  },
  {
   "name": "media-between-text",
   "title": "Media between text",
   "group": "grounds",
   "look": "vawe",
   "jobs": [
    "open-a-picture-inside-a-line-of-type"
   ],
   "use": "a picture grows from zero width inside a line of type on a 0.4 s critical spring and closes on a 0.3 s tween, the words part and wrap",
   "clip": "https://vawe.dev/moves/media-between-text.mp4",
   "md": "https://vawe.dev/moves/media-between-text.md",
   "page": "https://vawe.dev/moves/media-between-text",
   "duration": 4.2
  }
 ]
}
