Skip to content
VVVER

Design System / 07.10

Media & motion

Components for video, image sequences, production metadata, surface texture, and short reveals. Every animated example includes a still reduced-motion state.

Component reference

Ambient video

Decorative cover footage with no controls or accessible content. Playback begins only while the element is on screen and the document is visible, and pauses for reduced motion or reduced data. Pair it with independent text; use Video when the footage itself matters.

Live specimen

Rendered output

Ambient study / moving band of light

API reference

Inputs, types, and behavior

Inputbw
Typeboolean = false
BehaviorApplies a static grayscale treatment; leave false to preserve the supplied footage.
Inputplayback contract
Typeforced decorative video
BehaviorA poster is required. Playback is muted, looped, inline, aria-hidden, unfocusable, and preload=none.
Input…rest / className
Typerestricted video props / string?
BehaviorSource and media callbacks pass through. className merges last on the object-cover video.

Component reference

Logo wall

A still grid for supplied partner marks. It preserves the supplied marks by default and adds no invented hover restoration. The neutral labels below demonstrate density without implying partner relationships.

Live specimen

Rendered output

  • Specimen 01
  • Specimen 02
  • Specimen 03
  • Specimen 04
  • Specimen 05
  • Specimen 06
  • Specimen 07
  • Specimen 08

API reference

Inputs, types, and behavior

Inputlogos
Type{ alt, src?, node? }[]
Behaviorsrc renders an image; node accepts a supplied static mark. Blank alt marks are decorative.
Inputcolumns / divided
Type2 | 3 | 4 | 5 | 6 / boolean
BehaviorTwo columns on phones, then a responsive ladder to the requested maximum. divided adds /15 hairlines.
Inputgrayscale
Typeboolean = false
BehaviorExplicit static normalization only; never restores color on hover.
InputclassName
Typestring?
BehaviorMerged last on the list grid.

Component reference

Marquee

A continuous horizontal register with a persistent pause control. It pauses on hover, focus, offscreen placement, hidden tabs, and live reduced-motion changes. Reduced motion resets one complete static row.

Live specimen

Rendered output

BriefField notesProofRevisionArchive

API reference

Inputs, types, and behavior

InputautoPlay / speed
Typeboolean = true / number = 60
BehaviorautoPlay sets the initial state; finite speed controls px/s and a negative value reverses direction.
Inputgap / edgeFade
Typestring = "3rem" / boolean
BehaviorControls copy spacing and an optional currentColor mask at the strip edges.
Inputlabel / children
Typestring? / ReactNode
Behaviorlabel names the region. Children repeat once in an aria-hidden, inert loop copy.
InputclassName
Typestring?
BehaviorMerged last on the named region.

Component reference

Material texture

Static deterministic traces of four real substrates and processes. Choose the variant because the composition refers to paper, film, cloth, or dry print—never as generic atmosphere, fake wear on photography, or invented provenance.

Live specimen

Rendered output

Paper

Uncoated stock / sparse fiber

Film

Fine grain / rare scratch

Cloth

Broken warp and weft

Press

Dry ink / short pull

API reference

Inputs, types, and behavior

Inputvariant
Type"paper" | "film" | "cloth" | "press" = "paper"
BehaviorPaper is sparse fiber; film is fine grain; cloth is broken weave; press is dry ink and short pulls.
Inputsize
Typenumber = 160
BehaviorTile edge in CSS px, rounded and clamped to 48–1024; non-finite input uses 160.
InputclassName
Typestring?
BehaviorMerged last on the absolute decorative SVG; hosts may tune --texture-grain-opacity from its 6% default.

Component reference

Media sequence

A sequence for full-width, paired, and inset media. The only photograph below is the catalog’s one demo source; the paired document panels are plainly labeled layout specimens, not falsely presented as separate project assets.

Live specimen

Rendered output

Woman seated on the steps of a pale green garden shed
Catalog demo source / garden shed portrait
Layout onlyA / wide media track
Layout specimen A
Layout onlyB / narrow media track
Layout specimen B
Layout onlyC / inset media track
Inset layout specimen / no source claim

API reference

Inputs, types, and behavior

Inputitems
Typesingle | diptych entries[]
BehaviorMedia nodes own crop and alternative text. Invalid empty entries are skipped instead of emitting blank figures.
Inputlayout / balance
Type"full" | "inset" | "diptych" / "equal" | "left" | "right"
BehaviorDiptychs stack in source order below md; a malformed one-item tuple collapses to one full track.
Inputalign / gap
Type"start" | "center" | "end" / "tight" | "normal" | "open"
BehaviorPositions inset media and selects the vertical spacing.
InputclassName
Typestring?
BehaviorMerged last on the sequence root; item classes style their own block.

Component reference

Page fade

A fixed media-ink dip for same-origin full-page navigation. It skips router-prevented, modified, hash, download, external, and opted-out links. Reduced motion never intercepts; a live preference change completes a pending navigation without waiting.

Live specimen

Rendered output

Page A — Catalog index

Open a component page to review its rendered states and API.

API reference

Inputs, types, and behavior

Inputduration
Typenumber = 350
BehaviorArrival duration, clamped to 0–10000ms; non-finite input uses 350ms. Exit is capped at 250ms and uses the exit curve.
Inputdata-page-fade
Type"off" link attribute
BehaviorOpts a link out. Use for client-router links; the component is intended for MPA navigation.
InputclassName
Typestring?
BehaviorMerged last on the fixed, pointer-transparent veil.
tsx
// Render once for full-page navigation.
<PageFade />

// Let a client router own this link.
<a data-page-fade="off" href="/archive">Archive</a>

Component reference

Pattern backdrop

Four static currentColor patterns for structure, not simulated wear. Grid measures a field, rule establishes a baseline, hatch marks a hatched zone, and square points create a sparse index. Use one role per region and keep readable content above it.

Live specimen

Rendered output

Grid

Measured field / 32px

Point

Sparse index / 20px

Rule

Baseline register / 24px

Hatch

Marked zone / 28px

API reference

Inputs, types, and behavior

Inputvariant
Type"grid" | "dot" | "rule" | "hatch" = "grid"
BehaviorEach variant has one job: measured field, sparse index, baseline register, or marked zone.
Inputsize / dotSize
Typenumber = 24 / number = 1.5
BehaviorCell size is clamped to 4–512px; point size to 1–2px; non-finite values use defaults.
InputedgeFade / className
Typeboolean / string?
BehaviorAdds a static radial mask; className merges last on the decorative SVG.
tsx
<section className="relative overflow-hidden">
  <PatternBackdrop edgeFade size={24} variant="rule" />
  <div className="relative">Readable foreground content</div>
</section>

Component reference

Preloader

A rare opening curtain with count and typed variants. Count runs over 1400ms, holds for 600ms, then lifts in 700ms. Typed copy uses a 36ms-per-grapheme cadence, pauses 500ms between lines, then honors the hold before a 500ms fade. Reduced motion finishes immediately and still calls onDone.

Live specimen

Rendered output

Count variant

Ran once — replay

Loading

Contained for display — on a real site the overlay covers the viewport once, then slides away and unmounts.

Typed variant

Ran once — replay

Loading

Contained for display — on a real site the overlay covers the viewport once, then slides away and unmounts.

API reference

Inputs, types, and behavior

Inputvariant
Type"count" | "typed" = "count"
BehaviorMalformed runtime values fall back to count.
Inputduration / hold
Typenumber = 1400 / number = 600
BehaviorDuration controls the count run; hold applies to both modes. Both sanitize to 0–10000ms, while typed mode keeps its fixed 36ms/grapheme rhythm.
Inputtarget / suffix / label
Typenumber / string / ReactNode
BehaviorCount content. A non-finite target falls back to 550.
Inputlines / onDone
Typestring[] / () => void
BehaviorTyped mode uses at most two grapheme-safe lines; onDone fires once after exit or immediately under reduced motion.

Component reference

Proof frame

A clear margin, four /15 crop marks, and a figcaption around supplied media. The metadata below records only facts visible in this repository; it does not invent a plate, date, client, or production history.

Live specimen

Rendered output

Woman seated on the steps of a pale green garden shed
Catalog demo image / garden shed portraitFile / demo.jpg · 1200×800

API reference

Inputs, types, and behavior

Inputchildren
TypeReactNode
BehaviorImage, scan, document, or still; the child owns its alternative text.
Inputcaption / meta
TypeReactNode? / ReactNode?
BehaviorNonblank values share one semantic figcaption at the readable /60 floor.
Inputmarks
Typeboolean = true
BehaviorDecorative currentColor crop marks at the /15 structural rung.
InputmediaClassName / className
Typestring? / string?
BehaviorMerge last on the clipped media wrapper and figure respectively.

Component reference

QR frame

A fixed media-paper presenter for a host-generated code. It does not generate, encode, validate, or guarantee a scanner quiet zone. This specimen is explicitly non-scannable and demonstrates framing only.

Live specimen

Rendered output

Frame preview — not a scannable code

API reference

Inputs, types, and behavior

Inputchildren
TypeReactNode
BehaviorHost-generated and validated img, canvas, or SVG. CurrentColor children inherit fixed media ink.
Inputsize / padded
Typenumber = 180 / boolean = true
BehaviorEdge is bounded to 64–512px. Padding adds paper margin but does not certify QR validity.
Inputlabel / caption
Typestring? / ReactNode?
BehaviorA nonblank label creates a named group; a nonblank caption creates the figcaption.
InputclassName
Typestring?
BehaviorMerged last on the figure.

Component reference

Rule draw

A decorative currentColor hairline that scales from its left edge in 1200ms on the curtain curve. Lead-ins retain a measured drafting cadence; reduced motion and no script show the complete line.

Live specimen

Rendered output

Three-rule sequence

API reference

Inputs, types, and behavior

Inputdelay
Typenumber = 0
BehaviorLead-in in ms, clamped to 0–600; non-finite input uses zero.
InputclassName
Typestring?
BehaviorMerged last on the aria-hidden /15 hairline.

Component reference

Scroll reveal

A one-shot group reveal. Text rises eight pixels over 700ms; media fades in place over 1000ms. Effective stagger stays within a 480ms staging window. No script and reduced motion present complete content.

Live specimen

Rendered output

Editorial register

Process note / 01

Source notes and captions

Captions, files, and material facts establish authorship more honestly than animated distress.

API reference

Inputs, types, and behavior

Inputkind
Type"text" | "media" = "text"
BehaviorText lifts and fades over 700ms; media fades in place over 1000ms.
Inputstagger
Typenumber = 80
BehaviorRequested per-child delay, clamped by child count inside a 480ms staging window.
Inputas / className
Type"div" | "section" / string?
BehaviorSelects the flow container; className merges last on it. Each child receives one wrapper.

Component reference

Scroll settle

A rare hero-only, position-mapped settle from 92% scale and 80% opacity to rest. It follows scroll rather than a timer, completes by mid-viewport, and becomes a stable final frame under reduced motion or without scripting.

Live specimen

Rendered output

Woman seated on the steps of a pale green garden shed

API reference

Inputs, types, and behavior

Inputchildren
TypeReactNode
BehaviorOne justified hero image or figure; ordinary editorial media should remain static.
InputclassName
Typestring?
BehaviorMerged last on the transform/opacity wrapper.

Component reference

Slideshow

A named carousel with its rotation control first, visible previous and next controls, optional thumbnails, and a live slide announcement after manual navigation. Its two local sources are the catalog shed photograph and the extracted poster frame from the demo footage. New images dissolve over 1000ms while outgoing images leave in 300ms.

Live specimen

Rendered output

01 / 02
Woman seated on the steps of a pale green garden shed

Slide 1 of 2

API reference

Inputs, types, and behavior

Inputimages / label
Type{ src, alt }[] / string?
BehaviorBlank sources are skipped; label names the carousel. Every active slide retains its alt text.
InputautoPlay / interval
Typeboolean = true / number = 6000
BehaviorInitial rotation policy and a finite 4–60s interval. Manual navigation stops rotation until resumed.
InputhoverHalves / thumbnails
Typeboolean / boolean
BehaviorHalf-stage hit zones remain visibly arrowed on touch and keyboard; thumbnails always self-dim.
InputclassName / stageClassName
Typestring? / string?
BehaviorMerge last on the named carousel root and internal 3:2 stage; use stageClassName to override aspect.

Component reference

Video

A figure around user-controlled native video. Unlike AmbientVideo, it keeps accessible controls and lets the host choose preload, poster, playback, tracks, and source behavior. This demo uses a frame mechanically extracted from the footage rather than the unrelated photograph.

Live specimen

Rendered output

Demo footage / soft band of light crossing a dark field / 3.17s

API reference

Inputs, types, and behavior

Inputcaption
TypeReactNode?
BehaviorA nonblank mono figcaption below the native player.
InputclassName / videoClassName
Typestring? / string?
BehaviorMerge last on the figure and video respectively.
Input…rest
Typevideo props
BehaviorSpread last onto the element. controls and preload=metadata are defaults the host may override deliberately.