Open like a film premiere, settle like a director's note.
The first frame swings wide — display-cinema typography, full-bleed canvas, an audible exhale. The second frame is intimate copy. Both registers belong to the same film.
Six voice principles. They govern every line of copy, every section break, every silence. Cinematic ambition is permission to be spare.
The first frame swings wide — display-cinema typography, full-bleed canvas, an audible exhale. The second frame is intimate copy. Both registers belong to the same film.
Feeldreamy speaks in one violet voice. The studio speaks in the full aurora — teal, violet, pink, cream. The parent contains the child; it never repeats it.
Long opening clauses set the scene. Short follow-ups land the cut. Every paragraph is a take.
One hero per page. Very few CTAs. Generous letterboxing. We earn the right to be cinematic by being quiet between the takes.
We open with intent. The frame is the proof. Anything that does not earn the next second is cut from the assembly.
We validate the problem and earn demand on the story before a line of code is written. Time spent on the wrong thing is the real cost — cinematic ambition is permission to overshoot, not to bluff.
A 5-stop chromatic gradient over a 2-stop neutral base. Aurora hues are luminous — high chroma, mid-high lightness — and only ever appear as light against deep surface, never as flat fills. Neutrals carry text and chrome.
Space Grotesk for display — a narrow, cooler grotesque visually distinct from Feeldreamy's Sora. Inter for body. JetBrains Mono for labels and shader notes. All variable, only the wght axis used.
display-cinema per page — the hero <h1>.+0.18em tracking — e.g. STUDIO · 01 / 05.font-feature-settings: 'tnum' 1 wherever they appear in tabular context.latin-ext covers all required diacritics.
All curves are cubic-beziers — no springs in CSS. Springs only inside R3F via lerp. Every primitive declares its property contract, duration, and curve. Hover any cell to retrigger the demo.
Background shader hue rotation, infinite
linearCursor bloom translate
cubic-bezier(0.16, 1, 0.3, 1)Section dolly on scroll
linearSection divider sweep
cubic-bezier(0.65, 0, 0.35, 1)Dream object dissolve into points
cubic-bezier(0.83, 0, 0.17, 1)Element enters viewport
cubic-bezier(0.22, 1, 0.36, 1)Aurora-gradient text shimmer
ease-in-outCard hover
cubic-bezier(0.2, 0.8, 0.2, 1)Idle dream-object breath
ease-in-outButton press
cubic-bezier(0.4, 0, 1, 1)View Transitions API
cubic-bezier(0.65, 0, 0.35, 1)
Runtime adjustment via drei's <PerformanceMonitor>: sustained FPS below 40 fires onDecline and the tier downshifts — effects are removed in order.
When prefers-reduced-motion: reduce matches, the hero canvas is never mounted. The bloom cursor is disabled. Aurora text shimmer falls to a static gradient. Lens flare sweeps become 60ms cross-fades. Particle disperse is replaced by a 180ms opacity swap.
Every Aurora component, rendered live. File paths and one-line roles included. The full inventory is the assembly.
A full-bleed, rounded, glass-bordered container — the "press kit" frame.
src/components/aurora/Frame.astro Optional letterbox prop locks a 16:9 ratio. Surface-deep fill, surface-edge hairline.
A Section gives every block its vertical rhythm: padding-block clamps to 5rem → 12vh → 9rem by default, with optional compact or loose variants.
src/components/aurora/Section.astro Width: narrow (64rem) · default (80rem) · wide (96rem) · full. Spacing: compact, default, loose.
src/components/aurora/LensFlareDivider.astro Scroll-driven sweep via animation-timeline: view(). Falls back to a static gradient line under reduced motion.
src/components/aurora/AuroraStreak.astro A softer, infinite-shimmer alternative to LensFlareDivider. Used between sub-sections.
src/components/aurora/Pill.astro Mono uppercase tag. Tones: default, outline, glow (cream text over surface-deep with violet ring).
src/components/aurora/Button.astro Three variants. Cinema: violet→pink gradient with bloom hover. Ghost: hairline border, brightens to cream. Link: aurora underline grows on focus.
A glass card lifts 4px, gains a violet ring, and casts a soft bloom shadow.
src/components/aurora/Card.astro Glass card primitive. Surface-deep at 80% with backdrop-blur. Polymorphic article / div / a.
src/components/aurora/Stat.astro Large display numeral over a mono label. Optional accent flips the value to aurora gradient.
src/components/aurora/FounderCard.astro Portrait + outline pill + essence + chip row + read link. Hover lifts and warms the bloom shadow with aurora-pink.
Your dream means more than you think.
An AI dream-analysis SaaS. Tell it the dream; get an eight-step reflection — emotional architecture, recurring symbols, moon phase, and a question to sit with. It's grounded, not predictive.
src/components/aurora/ProductShowcase.astro A 2-col product callout. Browser mockup at left, copy + stats + CTA at right. Mockup body uses a violet radial wash over cosmos.
src/components/aurora/TimelineItem.astro A row in a vertical timeline. Dot, mono period, role, org, optional context. current glows the dot with the aurora gradient.
Passionate about innovation and business. Love sitting on crypto and stocks charts. Capturing moments with camera.
src/components/aurora/PullQuote.astro Editorial pull quote. Aurora-gradient quote mark anchored top-left, display body, mono source line.
Dreamchasers, MB · Vilnius, Lietuva · 2026
src/components/aurora/ContactBlock.astro Email row, LinkedIn duo, legal block. Aurora-gradient underline grows on hover for every link.
src/components/aurora/hero/HeroSceneIsland.tsx The R3F canvas. Owns scroll-progress, pointer tracking, tier detection, and the fallback gate. Hydrated client:visible. See the live cover at the top of this dossier — that is the component.
src/components/aurora/hero/BloomCursor.tsx DOM-overlay lens bloom. Hydrated client:idle. Active everywhere on this brandbook — move your cursor to see the soft cyan→pink halo follow you (disabled under reduced motion or touch).
src/components/aurora/hero/shaders/aurora.glsl.ts Vertex + fragment shaders shipped as TS modules so they minify with the island bundle. ~140 lines including Ashima Arts simplex noise.
A full-bleed canvas occupies the hero. A custom fragment shader paints aurora ribbons over a cosmic floor. A frosted-glass icosahedron breathes at the centre. The cursor adds a bloom centre to the shader. As the user scrolls, the camera dollies forward and the dream object dissolves into the next section. Below: the same scene rendered at half-viewport in a controlled environment.
A fullscreen quad. fBm noise drives the hue mix between teal → violet → pink → cream. uMouse adds a soft bloom centre, uMouseStrength attenuates it. Hue uniforms are pre-computed once from the OKLCH tokens.
A single rounded icosahedron wrapped in drei's <Float>. <MeshTransmissionMaterial> gives the frosted glass: transmission 1, thickness 0.9, IOR 1.4, chromatic aberration 0.08, backside on.
A DollyRig lerps camera z from 5.0 to 1.4 and FOV from 38 to 52 across the first 100svh. After hero exit, the scene unmounts via IntersectionObserver — GPU returns to idle.
Bundle: ~256 KB gzipped for the entire hero island (three.js dominates). Outside the hero, the site ships ~14 KB of motion. The cost is honest and we own it.
// HeroSceneIsland.tsx — uniform handoff
const uniforms = useMemo(() => ({
uTime: { value: 0 },
uResolution: { value: new THREE.Vector2(width, height) },
uMouse: { value: new THREE.Vector2(0.5, 0.5) },
uMouseStrength: { value: 0.6 },
uHueA: { value: HUE_A.clone() }, // aurora-teal
uHueB: { value: HUE_B.clone() }, // aurora-violet
uHueC: { value: HUE_C.clone() }, // aurora-pink
uHueD: { value: HUE_D.clone() }, // aurora-cream
uCosmos: { value: COSMOS.clone() }, // surface-cosmos
}), []); // aurora.glsl.ts — fragment core
vec2 uv = (gl_FragCoord.xy - 0.5 * uResolution) / uResolution.y;
vec3 p = vec3(uv * 1.2, uTime * 0.06);
float n1 = fbm(p + vec3(0.0, 0.0, uTime * 0.08));
float n2 = fbm(p + vec3(2.7, 5.1, -uTime * 0.05));
vec2 mPos = (uMouse - 0.5) * vec2(uResolution.x / uResolution.y, 1.0);
float md = distance(uv, mPos);
float bloom = exp(-md * 4.0) * uMouseStrength;
float t = smoothstep(-0.5, 0.5, n1 + bloom * 0.6);
vec3 ab = mix(uHueA, uHueB, t);
vec3 cd = mix(uHueC, uHueD, smoothstep(-0.4, 0.6, n2));
vec3 col = mix(ab, cd, smoothstep(-0.2, 0.4, n1 - n2));
col += vec3(0.78, 0.74, 0.95) * bloom * 0.7;
gl_FragColor = vec4(col, 1.0); <Canvas> below 5% intersection. A snapshot AVIF takes over as a fixed background.The Aurora layout is editorial-first: narrow columns for prose, wide stages for product showcases. Cinematic frame proportions reference 16:9; container caps engage at the wide breakpoint.
clamp(3rem, 6vh, 5rem) Tight section padding (block)
clamp(5rem, 12vh, 9rem) Standard section padding (block)
clamp(7rem, 16vh, 12rem) Hero / dossier section padding (block)
max-w 64rem (1024px) Editorial copy column
max-w 80rem (1280px) Default page width
max-w 96rem (1536px) Hero, showcase, wide content
22px Glass cards, frames
999px Pills, buttons, contact links
clamp(1.75rem, 3vw, 2.5rem) Inner section gap
≥ 600px Small phones to phablets — first grid breaks
≥ 760px Tablets — header nav appears, founder grid 2-col
≥ 960px Small laptops — ProductShowcase becomes 2-col
≥ 1280px Default desktop — container caps engage
≥ 1536px Cinema — wide container reveals
The "frame" of the press kit. Always full-bleed within its column.
The cinematic register is opt-in. Every animation has a reduced-motion path, every spectrum hue has a verified contrast pair, and every interactive element has a cream focus ring on cosmos that passes 3:1 non-text AAA.
Every focusable element shows 2px solid var(--focus-ring) at 4px offset. The cream value passes 16.1 : 1 against cosmos — 3 : 1 non-text AAA, visibility guaranteed.
<nav> <ul>.The hero <h1> is real DOM, never inside the canvas. Three.js holds visuals; semantics live in the overlay. <main>, <header>, <footer>, <nav> are all used as documented.
The brandbook is canon. Components ship from this page; tokens come from aurora.css; copy is signed off by the studio. For the long-form documentation, head to the markdown source.