@property registers --bg-angle as a CSS property of type <angle>. Without that declaration, animating a gradient from 0 deg to 360 deg would produce an instant jump — the engine has no way to interpolate an angle inside background-image. With @property, interpolation works exactly like a number: the breathingAngle animation (12 s, linear) continuously spins the gradient direction without any flicker.
Color stops use OKLCH (oklch(L% C H)). Unlike HSL, OKLCH guarantees perceptually uniform lightness: a transition from purple → pink → green produces no brightness spike in the middle of the gradient. Only the H component (hue, 0–360) changes from stop to stop; L and C stay constant, yielding smooth transitions that sRGB cannot match.
The second animation, breathingHue (8 s, ease-in-out), shifts background-position along a diagonal path: 0% 50% → 100% 0% → 100% 100% → 0% 100%. Combined with background-size: 300% 300% — the gradient covers three times the element area — that movement scrolls hues across the visible zone. The two non-divisible durations (8 s / 12 s) ensure the animations never resync during the first few minutes, producing a long and unpredictable cycle.
The effect is 100% CSS: no JavaScript, no dependencies. It composes naturally with border-radius, clip-path, and mask, and applies to any HTML element. A position: absolute overlay with background: rgba(0,0,0,0.3) is enough to keep overlaid text readable without touching the gradient.
On Firefox < 128, <code>@property</code> is not supported: the angle stays at 0 deg (static gradient), but the <code>breathingHue</code> <code>background-position</code> animation keeps running. On Chrome/Edge < 111 or Safari < 15.4, <code>oklch()</code> is not recognized: the gradient is ignored and the element falls back to the solid color declared in <code>initial-value</code>.