Skill 18 · Hyperframes Animation
Subchapter 18.28
blueprints/device-surface-showcase.mdMarkdown17 KBView on GitHub
intent: A product surface — a device mockup or a floating browser/app window — is the hero held in frame while its screens cycle through a real flow, showcased by a camera move that ranges from a static hold to a continuous 3D push.
roles served
showcase-carousel): the showcase-carousel — two surfaces in sequence (a widget card cycling brand skins, a phone frame with app screens sliding through it) gated by interstitial claim words; the screen cycle is a breadth carousel (“N brands / N apps”), not a flow.duration: 5–11.3s (page-scroll-spotlight 5–9s · floating-window 7.8s · 3d-hand 7.9s · in-device approval 7.9s · stepwise-flow 8.5–9.4s · device-tour 9.6s · showcase-carousel 11.3s)
shot structure One product surface — a [device mockup] or a [floating browser/app window] — is the persistent hero on a [styled backdrop: gradient / radial / stylized 3D void]; its [screens/sections] cycle through a real [product flow] while a showcase camera (static-hold, push-in→zoom-out, or one continuous push) presents it. Each screen state holds ~1.0–1.5s.
Scene 1 (0.0–~1.5s): The surface ESTABLISHES — it [slides in from an edge / drifts in from a tilt / dissolves from a full-frame title card] and settles, with a [accent shape or backdrop] resolving behind it; the first [screen] is visible. The showcase camera begins (see variants).
Scene 2 (~1.5–~Xs): The surface is OPERATED on its own face — a [tap/select/scroll] triggers the first screen advance: old content [pushes out / scrolls up], new [screen/section] [pulls up / pushes in from the side]; concurrently a [label / header word / side headline] updates. The camera continues its move.
Scene 3+ (~Xs–end, repeat for [2–4 screen beats]): The surface ADVANCES through successive [screens/sections], each a discrete swap or scroll synced to the surface’s flow, while the secondary copy [swaps out-up / in-up] or stays marked to hold reading position. HOLDS on the final [screen] (or, for one variant, blooms out — see variant).
Variant — static-tour (key-feature-device-screen-tour, 9.6s): a [device mockup] slides in from off-screen and settles (ease-out); an [accent-color shape] scales up behind it (spring overshoot). Camera STAYS STATIC the entire clip — all motion is element/UI-level: a tap COMPRESSES a button (95%→100%), the UI scrolls/transitions to the next view (old pushes out, new pulls up), and a [side headline] SWAPS beside the device (old slides up + fades, new slides up + in) per screen. Holds on the final screen. No camera move, no cursor.
Variant — floating-window (key-feature-floating-window-scroll, 7.8s): OPENS on a full-frame [title card] (a small [icon] draws in at center, [feature name] below; holds ~2s), which DISSOLVES to a [macOS-style browser/app window] floating on a [vivid gradient] (traffic-lights + [URL pill] + tabs; left nav, central content, right [sidebar]). Camera PUSHES IN on a [target region/sidebar] (active item highlighted [accent], a cursor drifts down the list), then ZOOMS BACK OUT to re-frame the whole window while the content SCROLLS through [sections]; the [highlighted item] stays marked. One push-in→zoom-out arc, gated by the title-card opener.
Variant — 3d-hand (key-feature-3d-device-hand-demo, 7.9s): FULLY 3D — a [3D device] drifts in a [stylized 3D void / bloom + particles], opening tilted and self-rotating to face the lens nearly flat as ONE CONTINUOUS forward camera push begins (no cuts). A glossy [3D hand] rises from the bottom-foreground and GESTURE-DRIVES the surface: it swipes to scroll a [picker/sidebar panel] of [option cards] and taps [option] (while a [header word] letter-flips in place); the selection APPLIES — a [new layout] grows from center to fill the device face, nav flips, a [marquee] scrolls horizontally; the hand swipes again to scroll the page upward through [sections], then drifts out. The camera never stops pushing; the bright device face keeps growing toward the lens until it BLOOMS into a [light] wash — a zoom-through “portal” exit that fills the frame.
Variant — stepwise-flow (Product_Intro, 8.5–9.4s; in-device Key_Feature sub-mode 7.9s): CURSORLESS end-to-end flow — the surface completes [setup/auth → action → success] as a narrative arc. Opens on a [title card] that fades in/out on an ambient gradient (or a typed [command] running character-by-character on a terminal field). The [flow surface] arrives (phone mock slides up oversized and settles / bordered log panel replaces the command) and step 1 completes via rapid sequential pops — [OTP digits] fill boxes left-to-right capped by a green check, or [log steps] pop top-down with highlighted tokens, ending on a trailing-dots waiting state. State advances laterally (old content slides out left, new in from right, chrome persists) or via a dark-to-light scene swap into a white [detail/confirm card] whose elements stagger in. COMMIT: the [CTA button] is pressed (press dip / spinner “Processing”) and a [success state] renders with check bullets — in the in-device sub-mode the commit runs a biometric ritual: dim overlay, [squircle] spring-pops, a ring draws around an icon, the icon morphs to a checkmark and holds; a slight camera push-in fires ONLY at the state transition (camera punctuates the commit, then re-locks). EXIT: the surface leaves and closing [title cards] pop in and ease smaller — the surface exits before the coda instead of holding. Camera otherwise static. For this variant the persistent hero is the FLOW, not one surface: a terminal panel may hand off wholesale to a confirm card.
Variant — showcase-carousel (Key_Feature, 11.3s): TWO surfaces in sequence on a slowly drifting [pastel mesh gradient], static camera, gated by centered interstitial [claim words] (fade in with gentle scale-up, fade out). Act 1: a white [widget card] scales in, flips/morphs into a tilted vertical widget and CYCLES [N brand skins] (~0.8s each) — one shared layout, per-skin content and accent swaps — while a large [brand logo] crossfades below per flip; the widget scales away. Act 2: a [phone frame] enters oversized and tilted, settles upright at center; full [app screens] slide left through it (~1s each), holding on the last. The screen cycle is a breadth carousel, not a flow — no taps, no cursor, no camera.
motion vocabulary surface establish (edge slide-in + settle / tilt drift-in + self-rotate-to-camera / title-card dissolve); accent shape spring behind surface; element-level screen-cycling (scroll-swap, push-in-from-side, scale-swap); button tap-compress; staggered side-headline reveal + copy swap (out-up / in-up); in-place header-word letter-flip; floating browser-window-on-gradient idle float; full-frame title-card opener (icon draw-in + label); camera push-IN on a region; camera zoom-OUT re-frame; content scroll-through; one continuous 3D camera-follow push (no cuts); 3D device drift + self-rotate; stylized-environment bloom/particles; 3D-hand entrance + swipe-scroll + tap (gesture-driven); picker-panel slide-in; template-apply grow-from-center; horizontal marquee scroll; gesture-driven page scroll; zoom-through bloom/portal exit; static-hold (no camera) as the floor of the camera range. Stepwise-flow additions: title-card bookends (fade-in/out opener; closers pop in then ease smaller); typed terminal command with prompt chevron; sequential top-down log pops with sub-line reveals; animated trailing-dots wait state; sequential digit pops left-to-right + green check confirm; lateral screen slide with persistent chrome; dark-to-light scene swap; staggered card element build-in (fade + slide-up); button press dip + fill flip; spinner processing state; success check-bullet reveal; notification banner spring-in with overshoot; lockscreen fade/blur-away as a card expands to fill the device face; commit-synced micro push-in; dim overlay; squircle spring pop; circular ring draw; icon morph to checkmark; surface exit before a title coda. Showcase-carousel additions: interstitial claim-word gate; brand-skin cycling with per-flip logo crossfade; card flip/morph into a tilted widget; oversized-tilted surface entry settling upright; fast slide-left screen carousel inside a static frame; drifting mesh-gradient backdrop.
rule mapping (per motion verb → backing rule, or flagged special)
3d-page-scroll (webpage/app as a tilted card whose content translateY-scrolls to sections; primary mechanic for the surface’s screen flow)3d-page-scroll (the tilt/perspective framing) + css-3d-transforms (perspective/translateZ depth)discrete-text-sequencediscrete-text-sequencehacker-flip-3dscale-swap-transitioncenter-outward-expansion (clustered-at-center → expand to fill)card-morph-anchorpress-release-spring (or physics-press-reaction for a heavier press)cursor-click-rippleasr-keyword-glow (accent glow on the focused item)camera-cursor-tracking (flat-cursor drift; pairs with the push-in)sine-wave-loopcss-3d-transforms (CSS-3D) or 3d.md technique (true Three.js/R3F device); see camera modifier[marquee] scroll (3d-hand) → viewport-change (PAN mode on the marquee strip) — thin fit; a literal CSS-marquee/translateX loop is closer to a gsap-effects/CSS recipe than a named motion rule3d.md — R3F, useGLTF HandModel, --gl=swiftshader for the shader/bloom), but no motion-shape rule models a 3D hand as the swipe-to-scroll / tap-to-select gesture protocol. context-sensitive-cursor / camera-cursor-tracking only model a flat typing/pointer cursor, not a 3D gesturing hand.techniques.md → WebGL shader (via 3d.md headless WebGL: --gl=swiftshader --concurrency=1), but no named transition rule covers a bloom/portal fly-through.discrete-text-sequence (typing + threshold state replacement) with dynamic-content-sequencing computing each step’s window from content lengthspring-pop-entrance (staggered group form; low overshoot for log lines)sine-wave-loop (finite repeats; step the opacity of 3 dots on a shared phase)3d-page-scroll translateX form inside the clipped surface); chrome sits outside the sliding layerspring-pop-entrancecard-morph-anchor (uniform-scale container morph — never tween width/height) + depth-of-field-blur (the blur-away)multi-phase-camera (single short push phase placed at the state transition)press-release-spring (already mapped; the fill flip is its color-transition variation)svg-icon-enrichment (rotating internal element with explicit SVG center)svg-path-draw (check strokes; ring rotated −90° to start at 12 o’clock) + spring-pop-entrance for the bullet popstechniques.md / the keyframes skill, same tier as the blueprint's existing WebGL flagsgsap-effects (plain fade/scale chord; deliberately quieter than kinetic-beat-slam)discrete-text-sequence (whole-state content replacement at thresholds) + scale-swap-transition where a flip reads as shrink-out/pop-in; the card→tilted-widget flip/morph → card-morph-anchor + css-3d-transformssine-wave-loop (very-low-amplitude position/hue drift on gradient blobs)camera modifier: The showcase camera spans a RANGE keyed by variant, all on a single content-wrapping virtual camera (viewport-change):
viewport-change held at scale 1, or omitted); all motion is element-level. This is the floor of the range and what distinguishes the device-tour from the rest.multi-phase-camera (e.g. dramatic-reveal 1.1→1.0→0.95 feel): push IN on the [sidebar/region] via coordinate-target-zoom (off-center target = scale + counter-translate), then multi-phase-camera zooms back OUT to re-frame the whole window while content scrolls.multi-phase-camera in steady-push mode (1.0→1.03→1.06… plus its sine micro-drift) layered over css-3d-transforms/3d.md so the device self-rotates-to-lens during the push; the push runs unbroken into the bloom/portal exit (exit itself is the WebGL-shader flagged special above). Across all three: viewport-change is the base virtual-camera primitive; multi-phase-camera sequences the push/zoom phases (and supplies the always-on micro-drift that keeps even the “static” tour from feeling dead); coordinate-target-zoom aims the push at off-center screen detail.Overflow (pan/scroll surfaces — required for a clean check): a panned or scrolled surface deliberately moves content PAST the edges of its framing card. Clip it at the card (overflow: hidden on the card/window) AND mark the moving inner layer (the .world / surface wrapper holding the screenshot + any markers/labels) with data-layout-allow-overflow — otherwise check reports text_box_overflow / container_overflow errors for the parts that scroll off (e.g. a marker label panned off the left edge). The card clips them visually; the attribute tells the layout audit it’s intentional, not a layout bug.