Kodza

Hero Focus

A title sharp over a blurred picture. On scroll the focus moves to the picture, the title blurs and leaves, a readout counts the distance, then notes point out the details. It rewinds.

Hero No dependencies herosectionlandingscrollstickypinimagefocusblurannotationsscrub Added Oct 2026
/anim/hero-focus/ GitHub Fullscreen

With your AI

Just ask.

Say it to your AI. It gets the exact code below, not its best guess, and knows where it goes.

Add the Kodza Hero Focus to my page.

Not plugged in yet?
claude mcp add -t http kodza https://kodza.dev/api/mcp
Also in Codex, Cursor and VS Code.
kodza-hero-focus.html
<section class="kodza-hero-focus">
  <div class="kodza-hero-focus__scene">
    <div class="kodza-hero-focus__media">
      <div class="kodza-hero-focus__lens">
        <div class="kodza-hero-focus__frame">
          <img class="kodza-hero-focus__img" src="https://kodza.dev/media/kz-overflow-2400.webp" alt="A two-storey concrete house, its upper floor cantilevered over the ground" width="2400" height="2400" />
          <ol class="kodza-hero-focus__notes">
            <li class="kodza-hero-focus__note" style="--x: 0.6921; --y: 0.4821" data-side="right">
              <span class="kodza-hero-focus__dot"></span><span class="kodza-hero-focus__wire"></span>
              <span class="kodza-hero-focus__card"><span class="kodza-hero-focus__mask"><span class="kodza-hero-focus__rise kodza-hero-focus__label">01 — Cantilever</span></span><span class="kodza-hero-focus__mask"><span class="kodza-hero-focus__rise kodza-hero-focus__text">3.8 m out. Nothing underneath.</span></span></span>
            </li>
            <li class="kodza-hero-focus__note" style="--x: 0.4979; --y: 0.3861" data-side="left">
              <span class="kodza-hero-focus__dot"></span><span class="kodza-hero-focus__wire"></span>
              <span class="kodza-hero-focus__card"><span class="kodza-hero-focus__mask"><span class="kodza-hero-focus__rise kodza-hero-focus__label">02 — Ribbon window</span></span><span class="kodza-hero-focus__mask"><span class="kodza-hero-focus__rise kodza-hero-focus__text">6.8 m of glass in one line. The view does the rest.</span></span></span>
            </li>
            <li class="kodza-hero-focus__note" style="--x: 0.3261; --y: 0.5895" data-side="left">
              <span class="kodza-hero-focus__dot"></span><span class="kodza-hero-focus__wire"></span>
              <span class="kodza-hero-focus__card"><span class="kodza-hero-focus__mask"><span class="kodza-hero-focus__rise kodza-hero-focus__label">03 — Entrance</span></span><span class="kodza-hero-focus__mask"><span class="kodza-hero-focus__rise kodza-hero-focus__text">Set back 1.2 m. The rain stays outside.</span></span></span>
            </li>
          </ol>
        </div>
      </div>
      <div class="kodza-hero-focus__veil"></div>
    </div>
    <div class="kodza-hero-focus__inner">
      <p class="kodza-hero-focus__eyebrow"><span class="kodza-hero-focus__rise">Issue 07 — Concrete houses</span></p>
      <div class="kodza-hero-focus__copy">
        <h1 class="kodza-hero-focus__title"><span class="kodza-hero-focus__line"><span class="kodza-hero-focus__rise">Look</span></span><span class="kodza-hero-focus__line"><span class="kodza-hero-focus__rise">closer.</span></span></h1>
        <p class="kodza-hero-focus__lead">A concrete house, rendered in code. Every detail has a reason. Scroll, and the lens finds it.</p>
      </div>
      <div class="kodza-hero-focus__foot">
        <a class="kodza-hero-focus__button" href="#">Read the issue<svg class="kodza-hero-focus__arrow" viewBox="0 0 16 16" aria-hidden="true"><path d="M2.5 8h10.5M9 3.5 13.5 8 9 12.5" /></svg></a>
        <p class="kodza-hero-focus__readout" aria-hidden="true"><span>focus</span><span class="kodza-hero-focus__ring"><span class="kodza-hero-focus__mark"></span></span><span class="kodza-hero-focus__value">0.4 m</span></p>
      </div>
    </div>
  </div>
</section>

Checked

Checked before you paste.

Robots poked at it before you did. Every component goes through the same checks, and again each time it changes.

What ranLast run
Accessibilityaxe-core 4.10.2: the WCAG 2.1 A and AA rules, plus best practices. 0 issues
KeyboardThe Tab key gets there, and the focus ring shows when it does. Passed
Reduced motionTurn on reduced motion and what moved just appears. Nothing loops. Passed
Light and darkThe same checks on both themes, contrast included. Passed
WordPressPasted into Twenty Twenty-Five, Twenty Twenty-One, Astra, Blocksy, GeneratePress, Hello Elementor, Kadence and OceanWP. Nothing to flag. 8 / 8 themes
Robots checked this. A human with VoiceOver hasn't yet.
KeyboardPress them in the preview
On the button
  • Follows the linkEnter

More like this

More in Hero