Animated space-exploration hero (video)

A 5.9-second animated hero: a Mars fly-through intro, a logo that flies to the corner, and a card that expands into a dive through Earth’s atmosphere. Below is the prompt Recast wrote from this 6-second video, word for word.

The input: Recast sampled 12 frames from this clip. Fictional concept design.

Colors Recast named

  • #FFFFFF
  • #0A0A0A
  • #000000
  • #B85A34
  • #E39A62
  • #2A2220
  • #E8844A
  • #5C6B2E

What the prompt covers

Layout · Visual style · Content · Components · Images and graphics · Interactions and states · Motion and timeline · Build notes

Prompt v1 · Precise · 2,780 words

Planetary Journey: Cinematic Planet Explorer Hero

A full-screen, cinematic website that explores the solar system. It opens with a preloader over an aerial Mars fly-through, then settles into a planet "resting state": a full-bleed landscape photo or video, a giant condensed planet name, a planet list, a glassy nav pill, and a rounded "Next" preview card in the centre. Clicking the card plays a dive transition: the card expands to full screen and the camera zooms from space through the clouds down to the next planet's surface. The UI then re-populates for the new planet. Rebuild it faithfully and make it fully working, with smooth motion at 60fps.

Layout

  • Reference viewport is 1280×944. Everything is position: fixed over a full-viewport media stage (100vw × 100dvh, overflow: hidden).
  • Background stage (z 0): a full-bleed landscape video or image with object-fit: cover.
    • A bottom darkening gradient covers the lower ~35%, from transparent to rgba(0,0,0,0.75).
    • A subtle top darkening covers the top ~25%, from rgba(0,0,0,0.35) to transparent.
  • Logo (top-left): the "K" mark, ~40×40px, at left 26px and top 28px.
  • Nav (top-right): right edge at 24px from the viewport edge, top 30px, height 44px.
    • A glass pill group, ~278px wide, holds About, Explore and Planets.
    • It is followed immediately by a separate solid white "Menu" pill, ~84px wide.
  • Planet list (left, vertically centred): left 26px, first item at ~392px from the top, 8 items on a ~27.5px row pitch (ending ~585px).
  • Next label + preview card (centre):
    • The card is ~338×368px, centred horizontally, with its top edge at ~288px (card centre ~ 50% x, 50% y).
    • The label row sits 14px above the card, spanning the card's width. "Next:" is left-aligned to the card's left edge, and "[03] Earth" is right-aligned to its right edge.
  • Giant planet name (bottom-left): left 20px, baseline ~32px from the bottom.
    • Cap height is ~192px, and the word "EARTH" renders ~372px wide.
    • "MARS" renders ~365px wide.
  • Data table (bottom-right): x ≈ 808–1242px (width ~434px), bottom ~40px.
    • Label column ~164px wide, value column the remainder.
    • Rows are separated by 1px lines.
  • Preloader: the logo is centred (~64px tall) and the percentage counter is bottom-centred, ~50px from the bottom.
  • Responsive:
    • Desktop (≥1024px): as described above.
    • Tablet (640–1023px):
      • The card shrinks to ~280×305px.
      • The data table moves to full width below the planet name, with 24px side padding.
      • The planet name shrinks to about 18vw.
    • Mobile (<640px):
      • The nav collapses to the logo plus the "Menu" pill only.
      • The planet list becomes a horizontal scrollable row of chips above the planet name.
      • The card is ~220×240px, placed at ~40% height.
      • The planet name is sized at 26vw.
      • The table stacks label over value.

Visual style

Colors

  • #FFFFFF: all UI text, active pills, the cursor dot, and the active list dot.
  • #0A0A0A: text inside white pills (About, Menu).
  • rgba(255,255,255,0.10) with backdrop-filter: blur(12px): glass nav background (static blur, never animated).
  • rgba(255,255,255,0.40): glass nav border, 1px.
  • rgba(255,255,255,0.45): data table dividers.
  • rgba(255,255,255,0.85): inactive planet list items and the "[03]" index.
  • #000000: the space area at the top of preview cards and the star field background.
  • Scene palette (from the media, for placeholders):
    • Mars rust: #B85A34
    • Mars haze: #E39A62
    • Mars sky dusk: #2A2220
    • Savanna sunset orange: #E8844A
    • Savanna grass: #5C6B2E
    • Earth ocean: #2F5E8E
    • Venus: #B8612A

Typography

  • UI sans: "Inter" (fallback "Helvetica Neue", Arial, sans-serif).
    • Nav pills: 15px / 500, tight letter spacing -0.01em.
    • Planet list items: 15px / 400. The active item is 17px / 700.
    • "Next:" label: 14px / 400.
    • "[03]" index: 15px / 400.
    • Next planet name: 17px / 700.
    • Table labels: 15px / 700. Table values: 15px / 400, line-height 1.3.
    • Cursor "Enter" label: 14px / 400.
  • Preloader counter: "Inter" 200 (thin), ~54px, with a trailing "%" at ~22px / 400 aligned to the baseline. Use tabular numerals.
  • Giant planet name: a tall, narrow, heavy condensed face.
    • Use "Big Shoulders Display" 800 (fallback "Antonio" 700, "Bebas Neue", sans-serif).
    • All caps, line-height 0.8, letter-spacing -0.01em, white.
    • Size it so cap height ≈ 192px at 1280px (≈ font-size 265px, i.e. clamp(96px, 20.7vw, 300px)).
    • At that size "EARTH" should measure about 372px wide. If the chosen family renders wider, apply transform: scaleX() on the text so it matches. The letters must look tall and narrow, not regular-width.

Shapes and effects

  • Preview card: radius ~56px (squircle-like, very rounded), overflow: hidden, no border, no shadow.
  • Pills: fully rounded (999px).
  • Active planet dot: a 16px white filled circle, with an 8px gap before the text.
  • Custom cursor:
    • A 44px circle with a 1.5px border of rgba(255,255,255,0.7) and fill rgba(255,255,255,0.25).
    • A 10px solid white centre dot.
    • The "Enter" label sits 8px below it.

Content

  • Logo: a stylised "K" mark, no text.
  • Nav: "About" (active, white pill), "Explore", "Planets", then a separate white pill "Menu".
  • Planet list, in this order: "Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune".
  • Preloader: the counter reads "49%", "71%" and "100%" in the frames; it counts 0→100.
  • Mars state:
    • Active list item: Mars.
    • Heading: "MARS".
    • Next label: "Next:" … "[03]" "Earth".
    • Card shows Earth.
  • Custom cursor label: "Enter".
  • Earth state:
    • Active list item: Earth.
    • Heading: "EARTH".
    • Next label: "Next:" … "[02]" "Venus".
    • Card shows Venus.
    • Data table:
      • "Distance:" — "149.6 million km from the Sun."
      • "Year:" — "365.25 Earth days."
      • "Temperature:" — "Average surface temperature around 15 °C."
      • "Atmosphere:" — "Mostly nitrogen and oxygen, supporting life and liquid water."
  • Index numbering: Mercury 01, Venus 02, Earth 03, Mars 04, Jupiter 05, Saturn 06, Uranus 07, Neptune 08.
  • "Next" direction: the next planet is always the one with index −1, moving toward the Sun. Mercury wraps to Neptune.
  • Data for the other planets: only Earth's is shown. Use the same four fields with mock data, for example:
    • Mars: "227.9 million km from the Sun." / "687 Earth days." / "Average surface temperature around −63 °C." / "Thin, mostly carbon dioxide."
    • Venus: "108.2 million km from the Sun." / "225 Earth days." / "Average surface temperature around 464 °C." / "Thick carbon dioxide with sulfuric acid clouds."

Components

  • Preloader:
    • A full-screen layer over the Mars video, with the centred white K logo.
    • The counter is bottom-centre in thin white numerals with a small "%".
  • Logo: a white K mark. It starts centred at 64px, then moves (FLIP, transform only) to the top-left at 40px.
  • NavPill:
    • A glass container with a 1px translucent white border and 4px inner padding.
    • Items are 36px tall with 18px horizontal padding.
    • The active item is a white pill with black text.
  • MenuButton: a separate white pill, 44px tall with 20px padding, black 15px text.
  • PlanetList:
    • A vertical list of <button>s.
    • The active item shows the white dot and bold, larger text.
    • Inactive items are 85% white.
  • NextLabel: one row with "Next:" on the left and "[NN] Name" on the right, with a 10px gap between the index and the name.
  • PreviewCard:
    • A rounded ~338×368 card showing the next planet from orbit: black starfield in the top ~30%, and the planet's curved limb filling the lower ~70%.
    • The card is a <button aria-label="Enter Earth">.
    • While it is hovered, the system cursor is hidden and the custom "Enter" cursor follows the pointer.
  • CustomCursor: a ring, dot and label. It follows the pointer with lerp smoothing (factor 0.2 per frame, transform only). It appears only over the card and during the dive.
  • PlanetTitle: the giant condensed name described above.
  • DataTable: a <dl> grid of 4 rows.
    • Each row has 12px vertical padding.
    • A 1px rgba(255,255,255,0.45) bottom border separates each row except the last.
    • Labels are bold, values regular and wrapping.

Images and graphics

  • Mars preloader video: an aerial drone-style fly-over of red Martian mesas and canyons with dusty haze. The camera moves forward and tilts up to the horizon over ~1.2s.
    • It ends on a still: wide red plain, flat-topped buttes on the horizon, a cliff on the right, dark rocks bottom-left, an orange-to-dark dusk sky with faint stars.
    • This final frame is also the Mars resting background.
    • Use a placeholder MP4 plus a poster image.
  • Earth resting background: a savanna at sunset.
    • A lone flat-topped acacia tree slightly left of centre.
    • Green grass, a dark dirt foreground, and bluish mountains on the right.
    • A dramatic orange cloud-filled sky with the sun glowing behind the tree.
  • Planet orbit images (card content): a black space band with a few white stars, over a curved planet limb.
    • Earth: blue oceans, swirling white cyclones, the Sahara visible at the bottom.
    • Venus: an orange-brown mottled volcanic surface.
    • Provide one per planet as placeholders.
  • Dive transition: Earth from space → close through the clouds → blurry aerial of the savanna tree → the sharp sunset savanna. Best built as a short pre-rendered video per planet (~2s). An image-sequence fallback is described in the Motion section.
  • Icons: the logo is a custom SVG (a white, blocky "K" with a rounded leg). No other icons are needed. The cursor is built in CSS.

Interactions and states

  • State 0: Preloader (0–1.2s).
    • The Mars fly-through plays with the logo centred.
    • The counter counts up to 100 while media preloads. Tie it to real preload progress, with a minimum duration of ~1.1s.
  • State 1: Mars resting.
    • Mars background still.
    • Logo top-left, nav visible, list active on Mars.
    • Heading "MARS" and the Mars data table.
    • Card shows Earth with "Next: [03] Earth".
  • Card hover:
    • The card scales to 1.04 over 400ms with cubic-bezier(0.22,1,0.36,1).
    • The custom Enter cursor fades in (150ms).
  • Card click / Enter key: the dive.
    • The heading, Next label and table fade out.
    • The card expands to full screen, the zoom plays, and the new planet's background is revealed.
  • State 2: Earth resting.
    • Savanna background.
    • List active on Earth.
    • Heading "EARTH" with the Earth table.
    • Card shows Venus with "Next: [02] Venus".
  • Planet list click: jumps to that planet by playing the same dive sequence, using that planet's media.
  • Nav buttons: the clicked pill becomes the active white pill. Slide the white indicator with a transform over 300ms.
    • "Menu" opens a full-screen overlay listing the planets (fade 250ms). It closes with Esc or its close button.
  • Hover states:
    • Inactive nav items go to a white 15% background.
    • List items go to 100% white and shift 4px right (transform).
  • Focus: a 2px white outline with a 3px offset on all buttons.
  • Active (press): scale 0.97.
  • Busy state: during a dive, all controls are aria-disabled, so there is no double-triggering.
  • Keyboard: Tab reaches the nav, list and card. Arrow Up/Down on the list moves focus.

Motion and timeline

The intro plays once on load. After that, every dive is triggered by a click.

Intro, then Mars resting:

  • 0.0–1.2s:
    • The Mars fly-through video plays: camera forward and tilting up, ending on the horizon still.
    • The counter counts 0→100 with ease-out (it is at ~49 at 0.3s and ~71 at 0.7s).
  • 1.05–1.35s: the counter fades to 0 opacity and moves translateY 8px (300ms ease-in).
  • 1.1–1.9s: the logo travels from the centre to the top-left.
    • It uses translate plus scale 1.6→1, with cubic-bezier(0.65,0,0.35,1).
    • It passes ~(474,347) at 1.2s.
  • 1.4–1.8s: the preview card and Next label appear.
    • The card goes from scale 0.2 to 1 and opacity 0→1 over 500ms with cubic-bezier(0.22,1,0.36,1), from the card's centre.
    • The label fades in with a 100ms delay.
  • 1.8–2.4s (together):
    • The nav slides down: translateY −12px→0 with an opacity fade, 450ms.
    • The planet list items stagger in: translateX −12px→0 plus opacity, 40ms apart.
    • The planet name rises, starting from translateY 40px.
      • It crossfades from a statically pre-blurred copy (blur 12px, rendered once) to the sharp copy over 600ms with cubic-bezier(0.22,1,0.36,1).
      • It is blurry at 2.2s.
    • The data table rows stagger in with the same crossfade and translateY 10px, 80ms apart.

Dive on click (the frames show it at ~2.4s):

  • +0–0.3s:
    • The card scales 1→1.05.
    • The Next label, planet name and table fade to 0 (250ms).
  • +0.3–0.8s: the card expands to full screen using FLIP.
    • The wrapper is scaled from the card rect to the viewport over 500ms with cubic-bezier(0.76,0,0.24,1).
    • The inner image is counter-scaled so it isn't distorted.
    • The border-radius or clip-path goes from 56px to 0.
    • It shows the full Earth globe and a starfield at +0.8s.
  • +0.8–1.8s: the zoom through the atmosphere.
    • The globe scales ~1→8 toward the cursor point with ease-in.
    • At ~+1.2s it crossfades to the cloud close-up.
    • At ~+1.6s it crossfades to a pre-blurred aerial savanna frame.
    • It then crossfades to the sharp savanna background (+1.8–2.3s, ease-out), with a slight scale settle from 1.08 to 1.
    • If a transition video exists, play it in the expanded card instead and crossfade it into the resting background at the end.
  • +2.3–2.6s: the active list item switches. The dot moves to the new item (translateY, 300ms), and the weights and sizes swap.
  • +2.6–3.4s:
    • The new Next label fades in.
    • The new card (next planet) grows from scale 0.21 (~72px) to 1 over 600ms with cubic-bezier(0.22,1,0.36,1).
    • The new heading rises and unblurs (crossfade technique).
    • The table rows stagger 80ms apart. The last row is still resolving at ~+3.3s.

Ambient motion:

  • The resting background has a slow Ken Burns scale of 1→1.04 over 20s, alternating.
  • The card image drifts: translateY ±4px over 6s, ease-in-out, looping.
  • The stars in the card twinkle: opacity 0.6↔1, randomised over 2–4s.
  • The custom cursor follows the pointer with lerp.

Implementation:

  • Use GSAP timelines (or Framer Motion sequences) for the intro and the dive.
  • Use CSS transitions for hover and focus.
  • The cursor uses a requestAnimationFrame lerp.
  • If a starfield is generated rather than photographed, draw it once to an offscreen canvas (about 120 stars, 1–2.5px) and only animate star opacity.

Reduced motion (`prefers-reduced-motion`):

  • Skip the fly-through and show the poster.
  • The counter jumps straight to done, and the logo is placed top-left.
  • All entrances become 200ms opacity fades.
  • The dive becomes a 400ms crossfade between backgrounds, with no zoom or scaling.
  • Ambient motion is disabled.

Performance requirements:

  • Animate only transform and opacity. Never animate width, height, top, left, margin or box-shadow.
  • Never animate filter: blur() on large layers. The heading, table and dive blur effects are crossfades between sharp copies and copies blurred once, statically. The nav's backdrop-filter stays static.
  • Expand the card with FLIP: scale a transformed wrapper, with at most a small border-radius or clip-path change.
  • Apply will-change: transform, opacity only to the layers that move during a transition, and remove it afterwards.
  • Preload and decode all media before its transition starts: img.decode() for images and canplaythrough for videos. Preload the next planet's card image, dive frames or video, and background during the resting state, so nothing loads mid-animation.
  • For any canvas, cap devicePixelRatio at 2, and pause when the tab is hidden or the element is off-screen.

Build notes

  • Use the builder's default stack (React with Tailwind CSS if it has no preference), plus GSAP or Framer Motion.
  • Structure it as reusable components: Preloader, Logo, NavPill, PlanetList, NextLabel, PreviewCard, CustomCursor, PlanetTitle, DataTable, DiveTransition, BackgroundStage.
  • Drive everything from a planets data array: index, name, background media, orbit image, dive media and the 4 facts.
  • State lives in a single currentPlanet plus an isTransitioning flag.
  • Use semantic HTML: a <nav> for the nav, the planet list as buttons, an <h1> for the planet name, and a <dl> for the table.
  • Ensure keyboard access, visible focus, and sufficient contrast. The bottom gradient must keep the white text readable over bright scenes.
  • Keep motion at 60fps: animate only transform and opacity, and never animate width, height, top, left, or box-shadow.

The design spec, for your coding agent

Recast also turns this prompt into files you keep in your codebase: a DESIGN.md that Claude Code and Cursor build to, and a Tailwind v4 theme with the exact tokens. Both below are the real export for this design. CSS variables and W3C tokens.json export the same way.

DESIGN.md
# Design spec: Planetary Journey

A cinematic full-screen planet explorer with a preloader, glassy nav, giant condensed planet names, and dive transitions between planets.

## Rules for the coding agent

- Build to this spec exactly. Use only the colors, fonts, sizes, radii, spacing and shadows listed here; don't invent new values.
- Put the tokens in one place (CSS variables or the Tailwind theme) and reference them; never hard-code a value that has a token.
- When something isn't specified, choose the closest existing token and say so.

## Colors

| Token | Value | Use |
|---|---|---|
| `--color-white` | #FFFFFF | UI text, active pills, cursor dot, active list dot |
| `--color-ink` | #0A0A0A | text inside white pills |
| `--color-glass-bg` | #FFFFFF | glass nav background (10% opacity, blurred) |
| `--color-glass-border` | #FFFFFF | glass nav border (40% opacity) |
| `--color-table-divider` | #FFFFFF | data table dividers (45% opacity) |
| `--color-muted-text` | #FFFFFF | inactive planet list items and index (85% opacity) |
| `--color-black` | #000000 | space area of preview cards, star field background |
| `--color-mars-rust` | #B85A34 | scene palette - Mars |
| `--color-mars-haze` | #E39A62 | scene palette - Mars haze |
| `--color-mars-dusk` | #2A2220 | scene palette - Mars sky |
| `--color-savanna-sunset` | #E8844A | scene palette - Earth savanna sunset |
| `--color-savanna-grass` | #5C6B2E | scene palette - Earth savanna grass |
| `--color-earth-ocean` | #2F5E8E | scene palette - Earth ocean |
| `--color-venus` | #B8612A | scene palette - Venus |

## Fonts

| Role | Family | Weights |
|---|---|---|
| body | Inter (Helvetica Neue, Arial, sans-serif) | 400, 500, 700 |
| accent | Inter (Helvetica Neue, Arial, sans-serif) | 200 |
| heading | Big Shoulders Display (Antonio, Bebas Neue, sans-serif) | 800 |

## Type scale

| Style | Size | Line height | Weight | Letter spacing |
|---|---|---|---|---|
| nav-pill | 15px | 1.2 | 500 | -0.01em |
| planet-list-item | 15px | 1.2 | 400 | 0 |
| planet-list-active | 17px | 1.2 | 700 | 0 |
| next-label | 14px | 1.2 | 400 | 0 |
| index | 15px | 1.2 | 400 | 0 |
| next-planet-name | 17px | 1.2 | 700 | 0 |
| table-label | 15px | 1.2 | 700 | 0 |
| table-value | 15px | 1.3 | 400 | 0 |
| cursor-label | 14px | 1.2 | 400 | 0 |
| preloader-counter | 54px | 1 | 200 | 0 |
| preloader-percent | 22px | 1 | 400 | 0 |
| giant-planet-name | 265px | 0.8 | 800 | -0.01em |

## Shape and space

- Radii: card 56px, pill 999px
- Spacing scale: 4px, 8px, 10px, 12px, 14px, 18px, 20px, 24px, 26px, 28px, 30px, 40px (base 4px)

## Layout

- Max content width: 1280px
- Reference viewport 1280×944, all elements position:fixed over full-viewport media stage
- Background stage full-bleed with bottom gradient (35% height) and top gradient (25% height)
- Logo top-left ~40x40 at left 26px top 28px
- Nav top-right: glass pill group ~278px wide (About, Explore, Planets) + separate white Menu pill ~84px wide, right 24px top 30px height 44px
- Planet list left 26px, first item ~392px from top, 8 items at 27.5px row pitch
- Preview card ~338x368 centered, top ~288px, Next label row 14px above card
- Giant planet name bottom-left, left 20px, baseline ~32px from bottom, cap height ~192px
- Data table bottom-right x 808-1242px width ~434px bottom ~40px, label column 164px
- Preloader logo centered ~64px, percentage counter bottom-centered ~50px from bottom
- Tablet (640-1023px): card ~280x305, table moves below name full width with 24px padding, name ~18vw
- Mobile (<640px): nav collapses to logo+Menu, list becomes horizontal scroll chips, card ~220x240 at ~40% height, name 26vw, table stacks

## Components

- **Preloader:** Full-screen layer over Mars video with centered white K logo and bottom-center thin white percentage counter (0→100), fades out and logo moves to top-left
- **Logo:** White blocky K mark SVG, ~40x40px, FLIP-animates from centered 64px to top-left 40px
- **NavPill:** Glass container with 1px translucent white border, 4px inner padding, items 36px tall with 18px horizontal padding; active item is white pill with black text; inactive hover goes to 15% white background
- **MenuButton:** Separate solid white pill, 44px tall, 20px padding, black 15px text; opens full-screen overlay listing planets, fades 250ms, closes on Esc or close button
- **PlanetList:** Vertical list of buttons; active item shows 16px white filled dot with 8px gap and bold larger text; inactive items 85% white; hover shifts 4px right via transform
- **NextLabel:** Row with 'Next:' left-aligned and '[NN] Name' right-aligned, 10px gap between index and name
- **PreviewCard:** Rounded ~338x368 squircle card (radius 56px), overflow hidden, no border/shadow; shows black starfield top 30% and curved planet limb bottom 70%; button aria-label 'Enter {planet}'; hover scales to 1.04 over 400ms; hides system cursor showing custom cursor instead
- **CustomCursor:** 44px ring with 1.5px border rgba(255,255,255,0.7) and fill rgba(255,255,255,0.25), 10px solid white center dot, 'Enter' label 8px below; follows pointer via rAF lerp 0.2; visible only over card and during dive
- **PlanetTitle:** Giant tall narrow condensed all-caps planet name, white, line-height 0.8, letter-spacing -0.01em, crossfades from static pre-blurred copy to sharp copy on entrance
- **DataTable:** dl grid of 4 rows (Distance, Year, Temperature, Atmosphere), 12px vertical padding per row, 1px rgba(255,255,255,0.45) bottom border between rows except last, bold labels, regular wrapping values
- **DiveTransition:** Card expands to full screen via FLIP, zooms through atmosphere/clouds to new planet's surface, crossfading intermediate frames; border-radius/clip-path goes from 56px to 0
- **BackgroundStage:** Full-bleed video/image background with slow Ken Burns scale 1→1.04 over 20s alternating, top and bottom darkening gradients

## Motion

- **preloader-intro:** Mars fly-through plays 0-1.2s, counter counts 0→100 ease-out (~49 at 0.3s, ~71 at 0.7s)
- **counter-exit:** 1.05-1.35s counter fades to 0 opacity and moves translateY 8px, 300ms ease-in
- **logo-travel:** 1.1-1.9s logo moves from center to top-left using translate plus scale 1.6→1, cubic-bezier(0.65,0,0.35,1), passing ~(474,347) at 1.2s
- **card-entrance:** 1.4-1.8s card scales 0.2→1 opacity 0→1 over 500ms cubic-bezier(0.22,1,0.36,1); label fades in with 100ms delay
- **ui-entrance:** 1.8-2.4s nav slides down translateY -12px→0 with fade 450ms; list items stagger translateX -12px→0 plus opacity 40ms apart; planet name rises from translateY 40px crossfading blur 12px to sharp over 600ms cubic-bezier(0.22,1,0.36,1); table rows stagger crossfade+translateY 10px 80ms apart
- **dive-start:** +0-0.3s card scales 1→1.05, Next label/planet name/table fade to 0 over 250ms
- **dive-expand:** +0.3-0.8s card expands to full screen via FLIP over 500ms cubic-bezier(0.76,0,0.24,1), inner image counter-scaled, border-radius/clip-path 56px→0
- **dive-zoom:** +0.8-1.8s globe scales 1→8 toward cursor ease-in, crossfades to cloud close-up at +1.2s, then to pre-blurred aerial frame at +1.6s, then sharp savanna background +1.8-2.3s ease-out with scale settle 1.08→1
- **list-switch:** +2.3-2.6s active list item switches, dot moves translateY 300ms, weights/sizes swap
- **resting-entrance-after-dive:** +2.6-3.4s new Next label fades in, new card grows from scale 0.21 to 1 over 600ms cubic-bezier(0.22,1,0.36,1), heading rises and unblurs via crossfade, table rows stagger 80ms apart
- **ambient-kenburns:** Resting background slow Ken Burns scale 1→1.04 over 20s, alternating
- **ambient-card-drift:** Card image drifts translateY ±4px over 6s ease-in-out, looping
- **ambient-star-twinkle:** Stars in card twinkle opacity 0.6↔1, randomised over 2-4s
- **cursor-lerp:** Custom cursor follows pointer with lerp factor 0.2 per frame via requestAnimationFrame
- **hover-card:** Card scales to 1.04 over 400ms cubic-bezier(0.22,1,0.36,1), custom cursor fades in 150ms
- **nav-indicator-slide:** Active nav pill indicator slides via transform over 300ms
- **reduced-motion:** Skip fly-through, counter jumps to done, logo placed top-left, entrances become 200ms opacity fades, dive becomes 400ms crossfade with no zoom/scale, ambient motion disabled

---
Generated by Recast from the design's build prompt.
Tailwind v4 theme
/* Planetary Journey: Tailwind v4 theme from Recast. Paste after @import "tailwindcss"; */
@theme {
  --color-white: #FFFFFF;
  --color-ink: #0A0A0A;
  --color-glass-bg: #FFFFFF;
  --color-glass-border: #FFFFFF;
  --color-table-divider: #FFFFFF;
  --color-muted-text: #FFFFFF;
  --color-black: #000000;
  --color-mars-rust: #B85A34;
  --color-mars-haze: #E39A62;
  --color-mars-dusk: #2A2220;
  --color-savanna-sunset: #E8844A;
  --color-savanna-grass: #5C6B2E;
  --color-earth-ocean: #2F5E8E;
  --color-venus: #B8612A;
  --font-body: "Inter", Helvetica Neue, Arial, sans-serif;
  --font-accent: "Inter", Helvetica Neue, Arial, sans-serif;
  --font-heading: "Big Shoulders Display", Antonio, Bebas Neue, sans-serif;
  --text-nav-pill: 0.938rem;
  --text-nav-pill--line-height: 1.2;
  --text-nav-pill--letter-spacing: -0.01em;
  --text-nav-pill--font-weight: 500;
  --text-planet-list-item: 0.938rem;
  --text-planet-list-item--line-height: 1.2;
  --text-planet-list-item--letter-spacing: 0;
  --text-planet-list-item--font-weight: 400;
  --text-planet-list-active: 1.063rem;
  --text-planet-list-active--line-height: 1.2;
  --text-planet-list-active--letter-spacing: 0;
  --text-planet-list-active--font-weight: 700;
  --text-next-label: 0.875rem;
  --text-next-label--line-height: 1.2;
  --text-next-label--letter-spacing: 0;
  --text-next-label--font-weight: 400;
  --text-index: 0.938rem;
  --text-index--line-height: 1.2;
  --text-index--letter-spacing: 0;
  --text-index--font-weight: 400;
  --text-next-planet-name: 1.063rem;
  --text-next-planet-name--line-height: 1.2;
  --text-next-planet-name--letter-spacing: 0;
  --text-next-planet-name--font-weight: 700;
  --text-table-label: 0.938rem;
  --text-table-label--line-height: 1.2;
  --text-table-label--letter-spacing: 0;
  --text-table-label--font-weight: 700;
  --text-table-value: 0.938rem;
  --text-table-value--line-height: 1.3;
  --text-table-value--letter-spacing: 0;
  --text-table-value--font-weight: 400;
  --text-cursor-label: 0.875rem;
  --text-cursor-label--line-height: 1.2;
  --text-cursor-label--letter-spacing: 0;
  --text-cursor-label--font-weight: 400;
  --text-preloader-counter: 3.375rem;
  --text-preloader-counter--line-height: 1;
  --text-preloader-counter--letter-spacing: 0;
  --text-preloader-counter--font-weight: 200;
  --text-preloader-percent: 1.375rem;
  --text-preloader-percent--line-height: 1;
  --text-preloader-percent--letter-spacing: 0;
  --text-preloader-percent--font-weight: 400;
  --text-giant-planet-name: 16.563rem;
  --text-giant-planet-name--line-height: 0.8;
  --text-giant-planet-name--letter-spacing: -0.01em;
  --text-giant-planet-name--font-weight: 800;
  --radius-card: 3.5rem;
  --radius-pill: 62.438rem;
  --spacing: 0.25rem;
  --container-page: 80rem;
}

More examples

Try it on your own design.

Drop in a screenshot, hero video, or screen recording, and Recast writes the exact prompt to rebuild it in v0, Lovable, Bolt, Claude Code, or Cursor.

Start free