Cinematic Video Hero
A style pack for building premium landing pages built around a fullscreen
looping background video. This skill produces a runnable React + Vite +
TypeScript + Tailwind project (single App.tsx) with a shared liquid-glass
design system and Framer Motion animations.
The look: a raw, undimmed background video fills the viewport; all UI floats on
top in translucent "liquid glass" chrome; headings use an elegant italic serif,
everything else a clean grotesk sans; content enters with soft blur/rise
animations. Think aerospace-launch, luxury-studio, mindfulness-app landing
pages.
Before you build
- Read the companion design skill. Also open
/mnt/skills/public/frontend-design/SKILL.md for this environment's styling
constraints (Tailwind utility limits, no browser storage, etc.). This skill
defines the aesthetic; that one defines the guardrails.
- Collect the content. You need the slots in the table below. If the user
didn't give them, ask once for the essentials (brand name + one-line pitch +
background video), and invent tasteful defaults for the rest rather than
stalling. The background video is the centerpiece — if the user has no
URL, ask for one; only if they insist on none, fall back to a dark animated
CSS gradient and tell them it's a placeholder.
| Slot |
Example |
Notes |
BRAND |
"Velorah", "VANGUARD" |
Shown in navbar + optionally the heading |
NAV_LINKS |
Story, Studio, About, Journal |
3–5 short items |
HEADLINE |
"Where dreams rise through the silence." |
3–8 words; mark 1–2 emphasis words |
SUBTEXT |
one or two sentences |
The pitch |
PRIMARY_CTA / SECONDARY_CTA |
"Begin Journey" / "View work" |
|
VIDEO_URL |
a fullscreen loop |
The centerpiece |
STATS (optional) |
"250+ / Brands", "95% / Retention" |
0–3 pairs |
TONE |
navy-cinematic, warm-cream, stark-mono |
Picks the palette |
Tech stack (pin these)
- Vite + React 18 + TypeScript
- Tailwind CSS 3
framer-motion — all entrance animations
lucide-react — icons (ArrowUpRight, Play, Crown, Menu, X, etc.)
Everything lives in one App.tsx. No routing. Fonts load in index.html; the
design system lives in index.css; tokens register in tailwind.config.js.
Build workflow
Follow this order — it prevents the most common breakages (fonts not applied,
Tailwind tokens missing, video not covering).
- Scaffold a Vite React-TS project and add the deps:
npm create vite@latest site -- --template react-ts
cd site && npm i && npm i framer-motion lucide-react
npm i -D tailwindcss@3 postcss autoprefixer && npx tailwindcss init -p
- Copy
assets/index.html into the project root and swap in the fonts you
picked (see the type pairings in references/design-system.md).
- Copy
assets/index.css into src/ — it holds the Tailwind directives,
the global font rule, the .liquid-glass classes, and the keyframes.
- Copy
assets/tailwind.config.js and adjust fontFamily + colors to
the chosen TONE.
- Write
src/App.tsx. Assemble the sections from
references/section-recipes.md, using the components from
references/components.md. Fill every slot from the table above.
- Run
npm run dev and verify against the Quality checklist below.
If the user wants an instant preview instead of a project, produce a single
self-contained .html file using CDN Tailwind + the UMD React/Framer-Motion
setup described in references/components.md (the FadingVideo section). The
design system and components are identical — only the packaging changes.
Design system
The visual identity is fully specified in references/design-system.md:
the exact .liquid-glass / .liquid-glass-strong CSS, the type pairings, the
TONE palettes, and the hard rules (no dark overlay on the video by default;
contrast comes from the glass chrome, not from dimming). Read it before writing
any CSS — do not reinvent these values, they are tuned.
Animation components
Reusable components with full code live in references/components.md:
FadeIn / animate-fade-rise — the default staggered entrance for hero
elements (opacity + translateY, ~0.2s incremental delays).
BlurText — headline that animates in word by word with a blur-to-sharp
keyframe. The signature move for serif headlines.
AnimatedHeading — headline that animates character by character (opacity
- translateX stagger). Use for stark/mono tones.
WordsPullUp — words slide up from y:20 on scroll into view; supports a
superscript asterisk accent. Use for oversized display headings.
FadingVideo — rAF-driven crossfade between multiple background videos (no
CSS transition). Use only when the design switches between clips.
Pick one headline animation per page — mixing them reads as noise.
Section recipes
Assembly-ready layouts for each region are in
references/section-recipes.md: the navbar (glass pill vs. bordered),
the two hero layouts (centered vs. bottom-aligned 12-col grid), the stats row,
the partners strip, and the mobile menu overlay. Compose the page as:
Nav → Hero (centered OR bottom-grid) → [Stats] → [Partners]
Most pages are a single h-screen section. Multi-section variants (hero +
about + features) reuse the same primitives stacked with min-h-screen.
Responsive rules
Mobile-first, breakpoints at sm 640 / md 768 / lg 1024. Non-negotiables:
- The
<video> is absolute inset-0 w-full h-full object-cover. Never let it
letterbox.
- Desktop nav links + CTA show at
md:; a hamburger + fullscreen overlay menu
replace them below md.
- Headlines use
clamp() or vw units so they scale smoothly, never a fixed
px.
- Stat/CTA rows use
flex-wrap so they never overflow on narrow screens.
- Secondary badges (award chips, partner strips) hide on the smallest screens
(
hidden sm:flex).
Quality checklist
Before delivering, confirm:
Adapting to other tones
This skill ships three palettes (navy-cinematic, warm-cream, stark-mono)
in the design-system reference. Switching TONE swaps the color tokens and the
headline animation but keeps the architecture. That is the intended way to reuse
the layout without it feeling like the same page twice.
1---2name: cinematic-video-hero3description: Build a cinematic, premium landing page (or standalone hero section) whose centerpiece is a fullscreen looping background video, layered with a liquid-glass design system, a serif-display + sans-body type pairing, and Framer Motion entrance animations. Use this skill whenever the user wants a modern, moody, high-end marketing page or hero — for a studio, agency, startup, app, or brand launch — and especially when they mention a "video background", "cinematic", "liquid glass", "glassmorphism", "hero section", or a sleek dark landing page, EVEN IF they do not name this exact style. Prefer this skill over building a hero from scratch: it encodes the exact CSS, fonts, animation components, and section layouts so the result is consistent and polished every time.4---56# Cinematic Video Hero78A style pack for building premium landing pages built around a fullscreen9looping background video. This skill produces a runnable **React + Vite +10TypeScript + Tailwind** project (single `App.tsx`) with a shared liquid-glass11design system and Framer Motion animations.1213The look: a raw, undimmed background video fills the viewport; all UI floats on14top in translucent "liquid glass" chrome; headings use an elegant italic serif,15everything else a clean grotesk sans; content enters with soft blur/rise16animations. Think aerospace-launch, luxury-studio, mindfulness-app landing17pages.1819## Before you build20211. **Read the companion design skill.** Also open22 `/mnt/skills/public/frontend-design/SKILL.md` for this environment's styling23 constraints (Tailwind utility limits, no browser storage, etc.). This skill24 defines the *aesthetic*; that one defines the *guardrails*.252. **Collect the content.** You need the slots in the table below. If the user26 didn't give them, ask once for the essentials (brand name + one-line pitch +27 background video), and invent tasteful defaults for the rest rather than28 stalling. The **background video is the centerpiece** — if the user has no29 URL, ask for one; only if they insist on none, fall back to a dark animated30 CSS gradient and tell them it's a placeholder.3132| Slot | Example | Notes |33|------|---------|-------|34| `BRAND` | "Velorah", "VANGUARD" | Shown in navbar + optionally the heading |35| `NAV_LINKS` | Story, Studio, About, Journal | 3–5 short items |36| `HEADLINE` | "Where dreams rise through the silence." | 3–8 words; mark 1–2 emphasis words |37| `SUBTEXT` | one or two sentences | The pitch |38| `PRIMARY_CTA` / `SECONDARY_CTA` | "Begin Journey" / "View work" | |39| `VIDEO_URL` | a fullscreen loop | The centerpiece |40| `STATS` (optional) | "250+ / Brands", "95% / Retention" | 0–3 pairs |41| `TONE` | navy-cinematic, warm-cream, stark-mono | Picks the palette |4243## Tech stack (pin these)4445- Vite + React 18 + TypeScript46- Tailwind CSS 347- `framer-motion` — all entrance animations48- `lucide-react` — icons (`ArrowUpRight`, `Play`, `Crown`, `Menu`, `X`, etc.)4950Everything lives in one `App.tsx`. No routing. Fonts load in `index.html`; the51design system lives in `index.css`; tokens register in `tailwind.config.js`.5253## Build workflow5455Follow this order — it prevents the most common breakages (fonts not applied,56Tailwind tokens missing, video not covering).57581. **Scaffold** a Vite React-TS project and add the deps:59 ```bash60 npm create vite@latest site -- --template react-ts61 cd site && npm i && npm i framer-motion lucide-react62 npm i -D tailwindcss@3 postcss autoprefixer && npx tailwindcss init -p63 ```642. **Copy `assets/index.html`** into the project root and swap in the fonts you65 picked (see the type pairings in `references/design-system.md`).663. **Copy `assets/index.css`** into `src/` — it holds the Tailwind directives,67 the global font rule, the `.liquid-glass` classes, and the keyframes.684. **Copy `assets/tailwind.config.js`** and adjust `fontFamily` + `colors` to69 the chosen `TONE`.705. **Write `src/App.tsx`.** Assemble the sections from71 `references/section-recipes.md`, using the components from72 `references/components.md`. Fill every slot from the table above.736. **Run `npm run dev`** and verify against the Quality checklist below.7475If the user wants an *instant preview* instead of a project, produce a single76self-contained `.html` file using CDN Tailwind + the UMD React/Framer-Motion77setup described in `references/components.md` (the `FadingVideo` section). The78design system and components are identical — only the packaging changes.7980## Design system8182The visual identity is fully specified in **`references/design-system.md`**:83the exact `.liquid-glass` / `.liquid-glass-strong` CSS, the type pairings, the84`TONE` palettes, and the hard rules (no dark overlay on the video by default;85contrast comes from the glass chrome, not from dimming). Read it before writing86any CSS — do not reinvent these values, they are tuned.8788## Animation components8990Reusable components with full code live in **`references/components.md`**:9192- `FadeIn` / `animate-fade-rise` — the default staggered entrance for hero93 elements (opacity + translateY, ~0.2s incremental delays).94- `BlurText` — headline that animates in **word by word** with a blur-to-sharp95 keyframe. The signature move for serif headlines.96- `AnimatedHeading` — headline that animates **character by character** (opacity97 + translateX stagger). Use for stark/mono tones.98- `WordsPullUp` — words slide up from `y:20` on scroll into view; supports a99 superscript asterisk accent. Use for oversized display headings.100- `FadingVideo` — rAF-driven crossfade between multiple background videos (no101 CSS transition). Use only when the design switches between clips.102103Pick **one** headline animation per page — mixing them reads as noise.104105## Section recipes106107Assembly-ready layouts for each region are in108**`references/section-recipes.md`**: the navbar (glass pill vs. bordered),109the two hero layouts (centered vs. bottom-aligned 12-col grid), the stats row,110the partners strip, and the mobile menu overlay. Compose the page as:111112```113Nav → Hero (centered OR bottom-grid) → [Stats] → [Partners]114```115116Most pages are a single `h-screen` section. Multi-section variants (hero +117about + features) reuse the same primitives stacked with `min-h-screen`.118119## Responsive rules120121Mobile-first, breakpoints at `sm` 640 / `md` 768 / `lg` 1024. Non-negotiables:122123- The `<video>` is `absolute inset-0 w-full h-full object-cover`. Never let it124 letterbox.125- Desktop nav links + CTA show at `md:`; a hamburger + fullscreen overlay menu126 replace them below `md`.127- Headlines use `clamp()` or `vw` units so they scale smoothly, never a fixed128 `px`.129- Stat/CTA rows use `flex-wrap` so they never overflow on narrow screens.130- Secondary badges (award chips, partner strips) hide on the smallest screens131 (`hidden sm:flex`).132133## Quality checklist134135Before delivering, confirm:136137- [ ] Video autoplays: has `autoPlay muted loop playsInline` and `object-cover`.138- [ ] Global font actually applies (the `* { font-family }` rule is present and139 the Google Fonts `<link>` is in `index.html`).140- [ ] `.liquid-glass` renders as translucent glass, not a solid box (the141 `::before` gradient border is present).142- [ ] Exactly one headline animation is used, and it fires on load / in-view.143- [ ] No dark overlay dims the video unless the user asked for one.144- [ ] Fully responsive: check 375px, 768px, 1280px. Hamburger works below `md`.145- [ ] All slots filled — no "Lorem ipsum", no leftover `BRAND` placeholder.146147## Adapting to other tones148149This skill ships three palettes (`navy-cinematic`, `warm-cream`, `stark-mono`)150in the design-system reference. Switching `TONE` swaps the color tokens and the151headline animation but keeps the architecture. That is the intended way to reuse152the layout without it feeling like the same page twice.