Grand & deep
+Slower timing, longer travel, an entrance blur and deeper parallax. Ideal for hero moments and full-bleed storytelling.
+Replay reveal +From 2200b04978c75e3660b99be49f49a88971e88d7d Mon Sep 17 00:00:00 2001
From: Cursor Agent
+ A single declarative attribute —
+ Add
+ Modes work by assigning central
+ Because the defaults are neutral (scale
+ The engine is CSS-first progressive enhancement. There are two layers:
+
+ If a browser does not support CSS
+ Reduced motion is always respected:
+
+ The
+ The Slower timing, longer travel, an entrance blur and deeper parallax. Ideal for hero moments and full-bleed storytelling. Faster timing, short travel and soft easing. Ideal for dense dashboards and content-heavy interfaces where restraint matters. Author-driven reduced motion: the composed resting state renders with no movement, independent of the OS setting. The engine also honors Modes re-scale central Conditional Motion Engine
+ vl-motion — selects a motion mode for an
+ element and its subtree. It does not name a preset; instead it re-scales the shared engine tokens
+ that every preset already reads, so one attribute adapts timing, travel, depth, blur and easing
+ across the whole subtree. Zero JavaScript.
+ The Modes
+ vl-motion to any element. Descendant vl-effect / vl-enter
+ reveals inherit the mode automatically.
+
+
+
+
+
+
+
+ Value Intent Engine effect
+
+
+ standardBalanced default feel
+ Neutral scale (1×), cinematic easing
+
+
+
+ subtleQuiet, fast, short travel
+ Faster duration, reduced travel & depth, soft easing
+
+
+
+ cinematicGrand, slow, deep, blurred entrances
+ Slower duration, larger travel & depth, entrance blur
+
+
+
+
+ stillAuthor-driven reduced motion
+ Resting/composed state, no movement (independent of OS setting)
+
+
+ <!-- One attribute governs the whole subtree -->
+<section vl-motion="cinematic">
+ <h2 vl-enter="reveal-cinematic" vl-timeline="view">Grand & deep</h2>
+ <p vl-effect="fade-up" vl-timeline="view">Slower, deeper, blurred entrance.</p>
+</section>
+
+<section vl-motion="subtle">...quieter, faster motion...</section>
+<section vl-motion="still">...reduced-motion-safe resting state...</section>Engine Tokens
+ --vl-* knobs (declared in 01-tokens.css).
+ Presets consume these instead of hardcoding per-selector values, which keeps adaptation in one place.
+
+
+
+
+
+
+ Token Role Neutral default
+ --vl-motion-modeActive mode (queried by if(style()))standard
+ --vl-motion-speed-scaleDuration multiplier 1
+ --vl-motion-intensityTravel-distance multiplier 1
+ --vl-motion-depthParallax / z-depth multiplier 1
+ --vl-motion-blurAdditive entrance blur 0px
+ --vl-motion-preferenceReflects reduced-motion intent auto
+
+ --vl-motion-mode-easeEasing selected by the mode --vl-ease-cinematic1, offset 0), motion behaves exactly
+ as before when no vl-motion mode is present. Explicit per-element modifiers such as
+ vl-speed and vl-depth still win over the mode.
+ Progressive Enhancement with CSS
+ if()
+
+ [vl-motion="…"] attribute
+ selectors assign the engine knobs. No if() required.
+ @supports + if()): a single
+ [vl-motion] rule re-derives the same knobs using CSS if() with
+ media(), style() and supports(), folding in live
+ conditions — prefers-reduced-motion, pointer: coarse, and
+ scroll-timeline availability.
+
+
+ @supports (width: if(style(--vl-probe: 1): 1px; else: 2px)) {
+ [vl-motion] {
+ --vl-motion-intensity: if(
+ media(prefers-reduced-motion: reduce): 0;
+ style(--vl-motion-mode: cinematic): if(media(pointer: coarse): 1.2; else: 1.6);
+ style(--vl-motion-mode: subtle): 0.45;
+ else: 1
+ );
+ --vl-motion-depth: if(
+ supports(animation-timeline: view()): 1.8; /* only where scroll timelines exist */
+ else: 0
+ );
+ }
+}Fallback for browsers without
+ if()if(), the entire @supports block is
+ ignored and the baseline [vl-motion="…"] values remain in effect. Modes still work —
+ they simply do not receive the extra live pointer/support-aware refinements. Nothing breaks, and no
+ JavaScript fallback is introduced.
+ Accessibility
+
+
+
+ @media (prefers-reduced-motion: reduce) the engine knobs collapse
+ (travel, depth and blur go to zero), and — as with every Velora effect — animations are disabled
+ globally in 03-motion.css.
+ vl-motion="still" lets an author opt any subtree into a motionless resting state
+ regardless of the OS setting.
+ Browser Support
+ vl-motion modes themselves work in all modern browsers. The if()-based
+ refinement requires a browser with CSS if() support; everywhere else the baseline modes
+ are used. See the live comparison on the
+ Zero-JS Motion showcase page.
+
+
+ One attribute. Adaptive motion.
+
+vl-motion attribute selects a motion mode that centrally re-scales Velora's shared engine tokens — timing, travel, depth, blur and easing — without touching a single line of JavaScript. Baseline modes work everywhere; CSS if() is layered on only as progressive enhancement. Scroll each panel into view to compare the same reveal under different modes.
+ Grand & deep
+Quiet & quick
+Calm & static
+prefers-reduced-motion automatically for every mode.<!-- Zero-JS conditional motion. One attribute governs the whole subtree. -->
+<section vl-motion="cinematic">
+ <h2 vl-enter="reveal-cinematic" vl-timeline="view">Grand & deep</h2>
+ <p vl-effect="fade-up" vl-timeline="view">Slower, deeper, blurred entrance.</p>
+</section>
+
+<section vl-motion="subtle">...quieter, faster motion...</section>
+<section vl-motion="still">...reduced-motion-safe resting state...</section>
+--vl-motion-* tokens. CSS if() adds live media/pointer/support adaptation as progressive enhancement — never required.
Scene 01
Scene 02
Scene 03
Engine
Act V · Signature
+Lesson · vl-pin + depth
- A pinned shot, a moving light field, and a few CSS layers turn scroll into a camera cue. + Engine: pin + scroll layers. The cinematic chrome is a Skin. Timeline.
Act VI · Map
-Lesson · where to go next
+- The homepage is the trailer; each destination below opens the mechanics behind a frame, cue, transition, or scene. + Trailer below; mechanics on Timeline, Skins, Catalog, Hosts. Older demos: Archive.
Tokens
- Build the foundation - Semantic color, spacing, radius, elevation, and theme primitives. + +Skins
+ Retoken the project + Named models via data-editorial-theme. Cards here are Skin look. - -Motion
+ +Timeline
Author native motion - Scroll, view, enter, exit, loop, hover, and scene contracts. + Track, stage, acts — pin and scrub with zero JS. - -Typography
- Scale brand expression - Display systems, composition, and dense interface reading. + +Catalog
+ Copy the attributes + Channels, ranges, and living demos. - -Tooling
- Audit the system - Contrast, architecture, conversion, and framework checks. + +Hosts
+ Engine without Skins + motion-core plus Tailwind or any UI. - -Aethel
- Architectural dark - Black field, copper massing, restrained motion, and structural grids. + +Archive
+ Previous Showcase + Hero recipes, tools, and DS pages kept in the repo. - -Meridian
- Terrain intelligence - Glass panels, terrain greens, map rhythm, and analytical depth. + +Home
+ This trailer + Dense demos with a lesson on every beat.Archive // frozen Showcase
+
+ Snapshot: archive/showcase-2026-08/ in the repo (outside Vite and verify:contract).
+ Restore a page by copying it into apps/showcase/pages/ and adding it to the template registry.
+
index.html — cinematic home (pre-lean)pages/scenes/scene-hero.html — hero scene recipepages/scenes/scene-story.html — pinned storypages/scenes/scene-features.html — feature flowpages/scenes/scene-creator.html — scene creatorpages/components/buttons.html — button kitpages/components/forms.html — formspages/color/design-tokens.html — token referencepages/typography/typography.html — type samplespages/tools/architecture.html — architecturepages/library/gallery.html — library gallerypages/motion/3d-explorer.html — 3D explorerarchive/showcase-2026-08/MANIFEST.mdHosts // motion without Skins
+vl-*. Your UI.
+ Import @velora/css/motion-core (optional transitions). Style with Tailwind or any host.
+ Do not require .vl-card or Skins tokens for scenes to run.
+
<section vl-scene vl-timeline="view" vl-pin="3" vl-scrub> + <div vl-stage class="min-h-svh grid place-items-center"> + <h1 vl-enter="clip-rise" vl-act="1">Host classes + Velora clock</h1> + </div> +</section>+
Skins // named design-system models
+
+ Skins are the Velora visual system — not the motion grammar.
+ Set html[data-editorial-theme] (Noir, Earth, Aethel, Meridian) and
+ data-theme (dark / light). Tokens restyle header, type, cards, and controls together.
+
noir
Dark kinetic base. Default Showcase skin.
earth
Warm light laboratory. Light theme pack.
aethel
Architectural concepts. Dark geometry.
meridian
Terrain intelligence. Cartographic dark.