๐ค Modern CSS (@property ยท oklch)
Living Typography
@property lets the browser interpolate gradient angles and hues natively โ animations CSS literally could not express before. Plus sibling-index() stagger and squircle corners.
Use it for: Brand sites ยท headers ยท design systems
@property
oklch()
sibling-index()
corner-shape
Open devtools and delete the <style> tag's animations โ every moving thing here is native CSS. The gradient angles and hues are typed custom properties the browser itself interpolates.
The complete source
This is the exact file rendering the demo above โ a single self-contained React client component with its styles inline. Copy or download it, drop it into any React / Next.js project, and it runs. No extra dependencies.
houdini.jsx
1"use client";23/* ============================================================4LIVING TYPOGRAPHY โ modern CSS only. No JavaScript at all.5- @property: registers --angle / --hue as REAL typed values,6so the browser can animate a gradient's geometry natively.7- oklch(): perceptually uniform color ramps.8- sibling-index(): per-letter stagger with zero JS (Chrome,9progressive โ falls back to uniform timing elsewhere).10- corner-shape: squircle cards where supported.11============================================================ */1213const WORD = "GENIUS";1415export default function Houdini() {16return (17<div className="ht-wrap">18<style>{`19/* typed custom properties โ the browser can tween these */20@property --ht-angle { syntax: "<angle>"; inherits: false; initial-value: 0deg; }21@property --ht-hue { syntax: "<number>"; inherits: false; initial-value: 0; }2223.ht-wrap {24display: grid; place-items: center; gap: 3rem;25min-height: 55svh; padding: 4rem 1.6rem;26border-radius: 24px; border: 1px solid rgba(255,255,255,.15);27background: #0a0a12; overflow: clip;28}2930/* 1 โ conic gradient whose ANGLE animates (impossible pre-@property) */31.ht-word { display: flex; gap: .4rem; }32.ht-letter {33font-size: clamp(4rem, 11vw, 10rem); font-weight: 900; line-height: 1;34--ht-angle: 0deg;35background: conic-gradient(from var(--ht-angle),36oklch(58% .25 295), oklch(78% .14 215),37oklch(80% .16 80), oklch(68% .21 20),38oklch(58% .25 295));39-webkit-background-clip: text; background-clip: text; color: transparent;40animation: ht-rotate 4s linear infinite;41}42/* per-letter stagger via sibling-index() โ no JS, no nth-child forest */43@supports (animation-delay: calc(sibling-index() * 1s)) {44.ht-letter { animation-delay: calc(sibling-index() * -0.45s); }45}46@keyframes ht-rotate { to { --ht-angle: 360deg; } }4748/* 2 โ a hue that breathes through oklch's full perceptual wheel */49.ht-orb {50width: 130px; height: 130px;51--ht-hue: 0;52background: radial-gradient(circle at 32% 30%,53oklch(90% .1 calc(var(--ht-hue) + 60)),54oklch(60% .26 var(--ht-hue)) 55%,55oklch(30% .15 calc(var(--ht-hue) + 30)));56border-radius: 50%;57box-shadow: 0 0 80px oklch(60% .26 var(--ht-hue) / .55);58animation: ht-breathe 7s linear infinite;59}60@keyframes ht-breathe { to { --ht-hue: 360; } }6162/* 3 โ squircle cards (corner-shape) with graceful rounded fallback */63.ht-cards { display: flex; flex-wrap: wrap; gap: 1.6rem; justify-content: center; }64.ht-card {65padding: 1.8rem 2.6rem; font-size: 1.5rem; font-weight: 700; color: #fff;66background: rgba(255,255,255,.06); border: 1px solid rgba(255,255,255,.18);67border-radius: 18px;68}69@supports (corner-shape: squircle) {70.ht-card { corner-shape: squircle; border-radius: 28px; }71}7273.ht-note { font-size: 1.3rem; color: rgba(255,255,255,.5); text-align: center; max-width: 52ch; }74`}</style>7576<div className="ht-word" aria-label={WORD}>77{WORD.split("").map((ch, i) => (78<span className="ht-letter" key={i} aria-hidden="true">79{ch}80</span>81))}82</div>8384<div className="ht-orb" aria-hidden="true" />8586<div className="ht-cards">87<div className="ht-card">@property</div>88<div className="ht-card">oklch()</div>89<div className="ht-card">sibling-index()</div>90<div className="ht-card">corner-shape</div>91</div>9293<p className="ht-note">94Open devtools and delete the <style> tag's animations โ every95moving thing here is native CSS. The gradient angles and hues are96typed custom properties the browser itself interpolates.97</p>98</div>99);100}101