Models 44

GLM 5.3 Flash

by Z.aiReasoningClean
Open in new window

Running live in a sandboxed frame. Click inside it before using the keyboard.

How it went

Total time
1 min 21 s
Cost
$0.0042
Output tokens
8,353
Spent thinking
4,296 tokens
Speed
103.2 tok/s
Console errors
0
First token after
429 ms
First visible text after
45.6 s
Prompt tokens
356
Code size
11.2 KB
Finish reason
stop
Served by
Cohere
Model id
z-ai/glm-5.3-flash
Reasoning sent
{"effort":"max"}
Max output
64,000 tokens
Generated
Nov 10, 2026

What it was asked

The prompt
“a "like" button in pure CSS, no JavaScript, that does a crazy animation when you click it”
System prompt, sent with every prompt
You are generating a self-contained web demo. It will be rendered automatically in a sandboxed iframe and compared side by side with the output of other AI models given the exact same task.

Output rules:
- Reply with exactly ONE fenced code block containing the complete file: ```html (or ```svg when the task asks for an SVG). No text before or after the code block.
- Everything must be inline: CSS in <style>, JavaScript in <script>. No external files, images, fonts or network requests, except the CDN URLs explicitly allowed by the task.
- Do not use localStorage, sessionStorage, cookies, IndexedDB, alert(), confirm(), prompt() or window.open(): they are blocked in the sandbox and will throw.
- The page must look right in a 1280×800 viewport and adapt gracefully down to 375px wide. No horizontal scrollbar.
- Something meaningful must be visible on first paint: a screenshot is taken automatically about 3 seconds after load, without any interaction.
- Everything that makes the demo interesting must be visible within the first seconds: nothing hidden behind a high score, a later level or a long play session.
- Games must start in a self-playing demo mode (a simple AI plays) behind a "Click or press a key to start" message, so the game can be judged in action without playing.
- The iframe only receives keyboard events after the user clicks it: if the demo uses the keyboard, display a clear "Click or press a key to start" message.
- The code must run with zero errors in the console of the latest Chrome.

Code run-1.html · 278 lines

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>The Like Button</title>
<style>
  * { margin:0; padding:0; box-sizing:border-box; }

  html, body { height:100%; }

  body {
    font-family: "Avenir Next", "Segoe UI", system-ui, -apple-system, sans-serif;
    background:#0d0e1c;
    color:#fff;
    min-height:100svh;
    display:flex;
    align-items:center;
    justify-content:center;
    overflow:hidden;
  }

  /* ---------- ambient background blobs (always alive) ---------- */
  .bg { position:fixed; inset:0; overflow:hidden; z-index:0; filter:saturate(1.1); }
  .blob {
    position:absolute; border-radius:50%; filter:blur(70px); opacity:.5;
    transition: background 1s ease;
  }
  .b1 { width:46vmax; height:46vmax; left:-12vmax; top:-14vmax;
        background:radial-gradient(circle,#5b2a86,#2a1a4a 60%);
        animation: drift1 14s ease-in-out infinite alternate; }
  .b2 { width:38vmax; height:38vmax; right:-10vmax; bottom:-12vmax;
        background:radial-gradient(circle,#0e4d64,#123 65%);
        animation: drift2 17s ease-in-out infinite alternate; }
  .b3 { width:26vmax; height:26vmax; left:55%; top:60%;
        background:radial-gradient(circle,#7a1f4b,#3a1030 60%);
        animation: drift1 11s ease-in-out infinite alternate-reverse; }
  @keyframes drift1 { from{transform:translate(0,0) scale(1)} to{transform:translate(6vmax,4vmax) scale(1.15)} }
  @keyframes drift2 { from{transform:translate(0,0) scale(1)} to{transform:translate(-5vmax,-5vmax) scale(1.1)} }

  /* the hidden checkbox that powers everything */
  #like { position:fixed; opacity:0; pointer-events:none; }

  /* ---------- full-screen flash on like ---------- */
  .flash {
    position:fixed; inset:0; z-index:50; pointer-events:none; opacity:0;
    background:radial-gradient(circle at 50% 52%, rgba(255,255,255,.95), rgba(255,120,160,.35) 40%, transparent 75%);
  }
  #like:checked ~ .flash { animation: flash .55s ease-out forwards; }
  @keyframes flash { 0%{opacity:.6} 100%{opacity:0} }

  /* ---------- stage / card ---------- */
  .stage { position:relative; z-index:1; padding:24px; text-align:center; }

  .card {
    background:rgba(255,255,255,.05);
    border:1px solid rgba(255,255,255,.1);
    border-radius:28px;
    padding:clamp(28px,6vw,56px) clamp(24px,7vw,72px);
    backdrop-filter:blur(8px);
    box-shadow:0 30px 80px rgba(0,0,0,.45);
  }
  #like:checked ~ .stage .card { animation: shake .5s ease-out; }
  @keyframes shake {
    0%,100% { transform:translate(0,0) rotate(0); }
    20% { transform:translate(-7px,4px) rotate(-1.2deg); }
    40% { transform:translate(6px,-5px) rotate(1deg); }
    60% { transform:translate(-5px,3px) rotate(-.6deg); }
    80% { transform:translate(4px,-2px) rotate(.5deg); }
  }

  h1 {
    font-size:clamp(26px,5vw,44px);
    font-weight:800; letter-spacing:.02em; line-height:1.15;
    background:linear-gradient(90deg,#ff5d8f,#ffd166,#4cc9f0);
    -webkit-background-clip:text; background-clip:text;
    -webkit-text-fill-color:transparent; color:transparent;
    margin-bottom:10px;
  }
  .sub {
    font-size:clamp(13px,2.2vw,16px); color:#9aa0c0; margin-bottom:clamp(24px,5vw,44px);
  }

  /* ---------- THE BUTTON ---------- */
  .btn {
    position:relative;
    display:inline-flex; align-items:center; gap:14px;
    padding:clamp(16px,3vw,22px) clamp(30px,6vw,52px);
    border-radius:999px;
    background:#1b1d33;
    border:2px solid rgba(255,255,255,.16);
    cursor:pointer;
    user-select:none; -webkit-user-select:none; -webkit-tap-highlight-color:transparent;
    font-size:clamp(19px,3.4vw,26px); font-weight:700; letter-spacing:.03em;
    color:#c8ccdf;
    transition: background .35s, color .35s, border-color .35s, box-shadow .35s, transform .15s;
    box-shadow:0 10px 30px rgba(0,0,0,.4);
  }
  .btn:active { transform:scale(.93); }

  /* persistent liked look */
  #like:checked ~ .stage .btn {
    background:linear-gradient(135deg,#ff2d6f,#ff5d3a);
    border-color:rgba(255,255,255,.4);
    color:#fff;
    box-shadow:0 0 0 4px rgba(255,45,111,.25), 0 0 45px rgba(255,45,111,.55), 0 14px 40px rgba(0,0,0,.45);
  }
  /* jelly + glow, one-shot jelly then idle glow pulse */
  #like:checked ~ .stage .btn {
    animation: jelly .6s cubic-bezier(.3,1.6,.4,1), glowPulse 1.8s 1s ease-in-out infinite alternate;
  }
  @keyframes jelly {
    0%   { transform:scale(1,1); }
    22%  { transform:scale(1.3,.7) rotate(-2deg); }
    40%  { transform:scale(.75,1.3) rotate(2deg); }
    58%  { transform:scale(1.18,.88); }
    74%  { transform:scale(.94,1.06); }
    100% { transform:scale(1,1); }
  }
  @keyframes glowPulse {
    from { box-shadow:0 0 0 4px rgba(255,45,111,.2), 0 0 35px rgba(255,45,111,.45), 0 14px 40px rgba(0,0,0,.45); }
    to   { box-shadow:0 0 0 9px rgba(255,45,111,.12), 0 0 65px rgba(255,45,111,.7), 0 14px 40px rgba(0,0,0,.45); }
  }

  /* heart icon */
  .heart-w { display:inline-flex; width:1.35em; height:1.35em; }
  .heart-w svg { width:100%; height:100%; fill:#8b8fa3; transition:fill .35s; animation: beat 1.8s ease-in-out infinite; }
  @keyframes beat { 0%,100%{transform:scale(1)} 50%{transform:scale(1.14)} }
  #like:checked ~ .stage .heart-w svg {
    fill:#fff;
    animation: beat 1.4s ease-in-out infinite;
  }
  #like:checked ~ .stage .heart-w { animation: heartburst .7s cubic-bezier(.3,1.6,.4,1); }
  @keyframes heartburst {
    0%   { transform:scale(1) rotate(0); }
    30%  { transform:scale(1.9) rotate(-10deg); }
    55%  { transform:scale(.7) rotate(6deg); }
    75%  { transform:scale(1.3) rotate(-3deg); }
    100% { transform:scale(1.15) rotate(0); }
  }

  /* Like / Liked! text swap */
  .t { display:inline-grid; }
  .t span { grid-area:1/1; transition:opacity .3s, transform .3s; }
  .t .t2 { opacity:0; transform:translateY(12px) scale(.7); }
  #like:checked ~ .stage .t .t1 { opacity:0; transform:translateY(-12px) scale(.7); }
  #like:checked ~ .stage .t .t2 { opacity:1; transform:translateY(0) scale(1); }

  /* shockwave rings */
  .ring {
    position:absolute; left:50%; top:50%;
    width:70px; height:70px; margin:-35px 0 0 -35px;
    border-radius:50%; border:3px solid rgba(255,255,255,.9);
    opacity:0; pointer-events:none;
  }
  #like:checked ~ .stage .ring { animation: ringOut .8s cubic-bezier(.1,.7,.3,1) forwards; }
  #like:checked ~ .stage .r2 { animation-delay:.12s; border-color:rgba(255,120,170,.9); }
  @keyframes ringOut {
    0%   { transform:scale(.5); opacity:.95; }
    100% { transform:scale(4.2); opacity:0; }
  }

  /* sparks — 24 confetti shards flying radially */
  .sparks { position:absolute; inset:0; pointer-events:none; }
  .sparks i {
    position:absolute; left:50%; top:50%;
    width:10px; height:10px; margin:-5px 0 0 -5px;
    border-radius:2px;
    opacity:0;
    transform:rotate(var(--a)) translateX(0) scale(0);
  }
  .sparks i:nth-child(odd)  { width:14px; height:5px; margin:-2.5px 0 0 -7px; border-radius:3px; }
  .sparks i:nth-child(3n)   { --d:185px; --dl:.05s; }
  .sparks i:nth-child(3n+1) { --d:120px; --dl:.02s; }
  .sparks i:nth-child(3n+2) { --d:150px; --dl:0s; }
  .sparks i:nth-child(4n)   { background:#ffd166; }
  .sparks i:nth-child(4n+1) { background:#ff5d8f; }
  .sparks i:nth-child(4n+2) { background:#4cc9f0; }
  .sparks i:nth-child(4n+3) { background:#ffffff; }
  #like:checked ~ .stage .sparks i { animation: fly .95s cubic-bezier(.15,.75,.35,1) var(--dl) forwards; }
  @keyframes fly {
    0%   { transform:rotate(var(--a)) translateX(14px) scale(0) rotate(0deg); opacity:1; }
    15%  { transform:rotate(var(--a)) translateX(40px) scale(1.1) rotate(40deg); opacity:1; }
    100% { transform:rotate(var(--a)) translateX(var(--d)) scale(0) rotate(220deg); opacity:0; }
  }

  /* emoji fountain */
  .emojis { position:absolute; left:0; right:0; top:-6px; height:0; pointer-events:none; }
  .emojis span {
    position:absolute; bottom:0; left:var(--x);
    font-size:clamp(22px,4vw,30px);
    opacity:0;
    transform:translateY(10px) scale(.3);
  }
  #like:checked ~ .stage .emojis span { animation: popUp 1.7s cubic-bezier(.2,.8,.3,1) var(--dl) forwards; }
  @keyframes popUp {
    0%   { opacity:0; transform:translateY(10px) scale(.2) rotate(0deg); }
    18%  { opacity:1; transform:translateY(-14px) scale(1.35) rotate(calc(var(--r) * .4)); }
    100% { opacity:0; transform:translateY(-160px) scale(.9) rotate(var(--r)); }
  }

  /* hint text swap */
  .hint { margin-top:clamp(22px,4vw,36px); font-size:clamp(13px,2.2vw,15px); color:#7d83a8; min-height:1.4em; }
  .hint span { display:inline-block; transition:opacity .4s; }
  .hint .h2 { position:absolute; opacity:0; }
  .hint { position:relative; }
  #like:checked ~ .stage .hint .h1 { opacity:0; }
  #like:checked ~ .stage .hint .h2 { opacity:1; color:#ff8fb5; }

  @media (prefers-reduced-motion: reduce) {
    * { animation-duration:.01s !important; animation-iteration-count:1 !important; }
  }
</style>
</head>
<body>

  <input type="checkbox" id="like">

  <div class="bg">
    <div class="blob b1"></div>
    <div class="blob b2"></div>
    <div class="blob b3"></div>
  </div>

  <div class="flash"></div>

  <main class="stage">
    <div class="card">
      <h1>THE LIKE BUTTON</h1>
      <p class="sub">Pure CSS. Zero JavaScript. Maximum chaos.</p>

      <label class="btn" for="like">
        <span class="ring r1"></span>
        <span class="ring r2"></span>

        <span class="sparks">
          <i style="--a:0deg"></i><i style="--a:15deg"></i><i style="--a:30deg"></i>
          <i style="--a:45deg"></i><i style="--a:60deg"></i><i style="--a:75deg"></i>
          <i style="--a:90deg"></i><i style="--a:105deg"></i><i style="--a:120deg"></i>
          <i style="--a:135deg"></i><i style="--a:150deg"></i><i style="--a:165deg"></i>
          <i style="--a:180deg"></i><i style="--a:195deg"></i><i style="--a:210deg"></i>
          <i style="--a:225deg"></i><i style="--a:240deg"></i><i style="--a:255deg"></i>
          <i style="--a:270deg"></i><i style="--a:285deg"></i><i style="--a:300deg"></i>
          <i style="--a:315deg"></i><i style="--a:330deg"></i><i style="--a:345deg"></i>
        </span>

        <span class="emojis">
          <span style="--x:8%;  --r:-25deg; --dl:.00s">❤️</span>
          <span style="--x:22%; --r:20deg;  --dl:.08s">🔥</span>
          <span style="--x:36%; --r:-15deg; --dl:.02s">✨</span>
          <span style="--x:50%; --r:10deg;  --dl:.12s">🎉</span>
          <span style="--x:64%; --r:-20deg; --dl:.05s">👍</span>
          <span style="--x:78%; --r:30deg;  --dl:.10s">💥</span>
          <span style="--x:90%; --r:-30deg; --dl:.15s">🌟</span>
          <span style="--x:44%; --r:15deg;  --dl:.20s">💖</span>
        </span>

        <span class="heart-w">
          <svg viewBox="0 0 24 24" aria-hidden="true">
            <path d="M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z"/>
          </svg>
        </span>

        <span class="t">
          <span class="t1">Like</span>
          <span class="t2">Liked!</span>
        </span>
      </label>

      <p class="hint">
        <span class="h1">Go on. Click it. You know you want to.</span>
        <span class="h2">You monster. Click again to take it back.</span>
      </p>
    </div>
  </main>

</body>
</html>
Reasoning trace (4,296 tokens)
The user wants a "like" button in pure CSS, no JavaScript, with a crazy animation on click. I should build a self-contained HTML file with CSS-only animation using checkbox hack (:checked). Make it visually striking — heart burst, particles, confetti, shockwave ring, button shake, etc.

Requirements: single code block, HTML with inline CSS, no JS at all. Must look good at 1280x800 and adapt down to 375px. Something visible on first paint — the button itself. No keyboard needed.

Design: dark background, centered card with a like button. Checkbox hack: label wraps everything. When checked, heart fills red, particles fly out (multiple spans positioned, animated with different angles via CSS custom properties set inline per particle... but no JS — inline styles with --x --y custom properties per particle are fine, that's still pure CSS).

Crazy animation ideas:
- Heart scales, bursts
- Shockwave rings expanding
- Particles (sparks) flying outward in all directions — generate ~20 spans with inline style setting --a (angle) and --d (distance)
- Confetti bits
- Button does a jelly wobble
- Screen flash / background pulse
- Floating "+1" counter
- Emoji reaction emojis (❤️ 🔥 👍 🎉 ✨) popping up and floating away
- Screen shake of the whole card

Also an unlike animation when clicking again (unchecking) — maybe reverse / heart deflates with "broken" particles.

Use CSS animations triggered via :checked ~ selectors. Keep animation-fill-mode forwards so after first burst things settle.

Particles: I'll write them with nth-child to vary angle, or inline custom properties. Inline style="--a:0deg" is simplest.

Let me plan structure:

```html
<input type="checkbox" id="like" hidden>
<label for="like" class="btn">
  <span class="ring r1"></span>
  <span class="ring r2"></span>
  <span class="sparks">... 24 <i style="--a:15deg; --d:130px; --s:1"></i></span>
  <span class="hearts">... few small hearts floating up</span>
  <svg heart>
  <span class="count">...</span>? 
```

Count: pure CSS can't count, but can use a stack of numbers... Actually can do with counter and CSS counters? Checkbox :checked can't increment a real counter shown dynamically... Actually CSS counters can: use `#like:checked` — you can't increment based on checked without repeated elements. Could fake a "+1" floating text that appears. Simpler: label text changes "Like" → "Liked!" via sibling selectors.

Also emojis: hearts/emojis popping up.

Screen flash: a full-viewport div sibling after checkbox that flashes when checked.

Also the whole card shakes via :checked ~ .card? Checkbox must be sibling-ancestor relationship. Put checkbox as first child of body, then card, then flash overlay.

Heart inside label: can select with `#like:checked + .card .heart` etc. But label inside card... Use general sibling `~`.

Let me write it.

Structure:
```
<input type="checkbox" id="like">
<div class="flash"></div>
<main class="stage">
  <div class="card">
    <h1>...</h1>
    <label class="btn" for="like">
      ... everything
    </label>
    <p class="hint">Tap it. Again. Again.</p>
  </div>
</main>
```

Selectors: `#like:checked ~ .flash` works. `#like:checked ~ .stage .btn` works (descendant of general sibling — allowed).

Button design: pill with "Like" text + heart icon. On check:
- Heart scales up with bounce, turns red, then stays big.
- Rings: two expanding circles fading.
- Sparks: 24 dots fly out along --a angle translating rotate(--a) translateX(--d), scale down, fade.
- Emojis: ❤️🔥✨🎉👍 pop above button and float up with rotation, disappear.
- Button jelly: keyframes squish.
- Card shake: keyframes small translate/rotate.
- Flash: white->transparent radial flash covering viewport, pointer-events none.
- Background: subtle animated gradient? Could animate body background hue slowly for life. Add floating ambient blobs for first-paint interest.

Also add a persistent "Liked!" state: button turns red, text "Liked ♥".

Also unlike: when unchecked, heart does quick shrink; maybe reverse animations just snap back. Add a small transition for unchecking (heart deflates with wobble).

Add hint text and title styling. Make it responsive with clamp.

Sparks generation: 24 <i> elements each with inline `--a`. I'll write them out. Distances vary: use nth-child even/odd for distance/speed/size, plus inline angle.

Let me define spark CSS:

```css
.sparks i {
  position:absolute; left:50%; top:50%;
  width:10px; height:10px; border-radius:2px;
  background: var(--c, gold);
  transform: rotate(var(--a)) translateX(0) scale(0);
  opacity:0;
}
#like:checked ~ .stage .sparks i {
  animation: fly .9s cubic-bezier(.2,.7,.3,1) forwards;
  animation-delay: var(--dl, 0s);
}
@keyframes fly {
  0% { transform: rotate(var(--a)) translateX(12px) scale(0); opacity:1 }
  15% { opacity:1 }
  100% { transform: rotate(var(--a)) translateX(var(--d,140px)) scale(0); opacity:0 }
}
```

Colors per spark via inline --c.

Emojis float:

```css
.emojis span { position:absolute; bottom:100%; font-size:26px; opacity:0; }
#like:checked ~ .stage .emojis span { animation: pop 1.6s ease-out forwards; animation-delay: var(--dl) }
@keyframes pop {
 0% {opacity:0; transform: translateY(10px) scale(.3) rotate(0)}
 20% {opacity:1; transform: translateY(-10px) scale(1.2) rotate(var(--r))}
 100% {opacity:0; transform: translateY(-140px) scale(1) rotate(var(--r))}
}
```

Place emojis absolutely relative to button, near center top.

Heart: use an SVG heart or CSS heart? SVG easier. Heart icon inside button that on checked gets fill red + scale bounce:

```css
#like:checked ~ .stage .heart-ic { animation: heartburst .7s ...; fill:red }
```

Actually the main heart: big heart on button. When checked: scales 0→1.4→1, fill goes from gray outline to red gradient.

Big standalone heart? Maybe make the button itself a big circular button with a big heart — more dramatic. I'll do a big pill: "♥ Like" pill width ~220px, height ~90px? Or a big circular heart button 140px. Circular with heart icon, plus label text below ("Like"). Hmm, pill with text is more recognizable as a like button. Go pill: heart icon + "Like".

Jelly animation on the whole button when checked:

```css
#like:checked ~ .stage .btn { animation: jelly .6s; background: red gradient; }
```

Careful: animation on the label re-triggers only when checked changes. Fine.

Shockwave rings: two absolutely positioned circles inside button, border white, scale from 0.6 to 3, fade.

Flash overlay: fixed, inset 0, background radial-gradient white, opacity 0; on checked animation flash .5s forwards. pointer-events:none. z-index high.

Card shake on check.

Also maybe the background hue shifts on like: body ::before blob colors change when checked — transition.

Ambient: two blurred gradient blobs floating with slow keyframes, always animating — gives life at first paint.

Also add "counter" of likes: static numbers stacked that flip? Skip; instead show text under button that swaps "Be honest. You love it." Keep simple.

Also on unchecked, do a little "pop-out" — heart drops with squash: 

```css
#like:not(:checked) ~ .stage .heart-ic { animation: unheart .5s; }
```

That triggers on load too (initial not-checked). Hmm — animations without :checked will run on page load. To avoid initial run, gate: `#like:checked ~ ... ` runs when checked. For unchecked animation, it'd run at load. Use transition instead for unchecked state so no initial animation. Transitions: heart fill/color transition; scale transition with springy cubic-bezier for pop-back. Good enough.

But checked animations: `#like:checked ~ .stage .sparks i {animation: ...}` — runs once when checked, forwards fill. When unchecked, animation removed → returns to base (opacity 0). Good.

For the heart on checked: keep persistent red via `#like:checked ~ .stage .heart { fill:red }` plus a one-time animation for burst. Also add persistent glow.

Text change: `.txt::after`? Have two spans .t1 "Like" and .t2 "Liked!" toggle opacity/transform. Simple: 

```css
.t2 { position:absolute; opacity:0; }
#like:checked ~ .stage .t1 {opacity:0}
#like:checked ~ .stage .t2 {opacity:1}
```

Transition nicely.

Also maybe the "crazy" factor: add screen shake including html? Body animation on checked: `#like:checked ~ .stage { animation: shake .5s }`. Flash + shake + confetti = crazy.

Add a burst of "1" "+1" text? Emojis cover it.

Extra: ring of small hearts around? Fine as is.

Write sparks inline: 26 sparks, angles every ~14° with jitter, colors: gold, pink, cyan, orange, white, purple. I'll handwrite with increasing angles and vary --d, --dl, --c, sizes via nth-child? Inline everything for clarity: style="--a:0deg; --d:150px; --dl:0s; --c:#ffd166". Spark shapes: mix of circles and rectangles? Keep one shape, border-radius 2px, some taller via nth-child(odd){width:6px;height:12px}? I can add nth-child rules for variety.

Emoji spans: 8 emojis with inline --r rotation and left offsets and --dl.

Let me also ensure responsive: button uses clamp sizes; emojis sizes fine.

First paint visible: big title "PRESS LIKE", button, hint, ambient blobs. Good.

Also add subtle idle pulse animation to button so it invites clicking (heart gently pulses). That's always running — nice.

Cursor pointer on label.

Accessibility: hidden checkbox attribute — use class .sr style: position:fixed; opacity:0; pointer-events:none? If opacity 0 and focusable, fine. Use `appearance:none; position:fixed; opacity:0`.

Now write the code carefully.

Keyframes:

heartburst: 0% scale(1) ; 30% scale(1.6) rotate(-8deg); 60% scale(.85); 100% scale(1.15). Keep persistent scale 1.15 when checked via transform on the icon container? If animation ends at 100% with fill forwards? Set fill-mode forwards and final scale 1.15, plus base transition. But when unchecked we want back to 1 with transition — removing animation snaps, transition handles from computed... when animation removed, computed becomes base value, transition animates from current? Transitions don't animate from animated value reliably — actually when animation is removed, style change triggers transition from the last rendered value in Chrome? It does transition from the "before-change style" which includes animation effects? Per spec, before-change style includes animations. So it should transition smoothly. Even if it snaps, fine.

Simpler: wrap heart in .heart-w that scales; inner svg handles fill color transition.

ring keyframes:
```css
@keyframes ring { 0%{transform:scale(.4);opacity:.9} 100%{transform:scale(3.2);opacity:0} }
```

jelly:
```css
@keyframes jelly {
 0%{transform:scale(1,1)}
 25%{transform:scale(1.25,.75)}
 40%{transform:scale(.8,1.2)}
 55%{transform:scale(1.15,.9)}
 70%{transform:scale(.95,1.05)}
 100%{transform:scale(1)}
}
```

shake card:
```css
@keyframes shake {
 0%,100%{transform:translate(0,0) rotate(0)}
 20%{transform:translate(-6px,3px) rotate(-1deg)}
 40%{transform:translate(5px,-4px) rotate(1deg)}
 60%{transform:translate(-4px,2px) rotate(-.5deg)}
 80%{transform:translate(3px,-2px) rotate(.5deg)}
}
```

flash:
```css
@keyframes flash { 0%{opacity:.55} 100%{opacity:0} }
```

Emoji pop as above.

Idle pulse on heart: `@keyframes beat {0%,100%{transform:scale(1)}50%{transform:scale(1.12)}}` applied to heart-w always; but checked burst animation also on heart-w — conflict; put beat on inner svg, burst on wrapper. Good.

Colors: dark bg #0f1020, blobs pink/purple/cyan. Card glassmorphism.

Font: system stack, maybe use a bold rounded look via font-weight 800.

Also add small "double-tap" hint changes? Keep.

Write the sparks: I'll do 26. Let me list angles: 0, 14, 28, ... 360 minus last → 25 sparks at 13.8°? Just use 24 at 15° increments, jitter via alternating --d.

Sparks inline styles — I'll write each: `<i style="--a:15deg"></i>` and let --d vary via nth-child rules:

```css
.sparks i:nth-child(3n) { --d:170px; --dl:.04s }
.sparks i:nth-child(3n+1){ --d:110px; --dl:.02s }
.sparks i:nth-child(3n+2){ --d:145px; --dl:0s; width:14px;height:5px }
```

And colors via nth-child(4n) etc:
```css
.sparks i:nth-child(4n){background:#ffd166}
... #ff5d8f, #4cc9f0, #ffffff
```

But inline --c overrides... just use nth-child for colors, no inline --c. Shapes: default 9px circle; some elongated.

Also add gravity feel: flies then drops? Keyframe with two translate steps: use rotate(a) translateX(d1) then rotate(a) translateX(d2) translateY(dy)? Transform composition: `rotate(var(--a)) translate(var(--dx), var(--dy))` where dy grows. Simpler: keyframe from translateX(14px) to translate(var(--dx), var(--dy)) with --dx/--dy inline? I'll just do radial with scale fade — looks fine with rings + emojis.

Actually nicer: sparks rotate slightly during flight: add rotate(calc(var(--a) + 120deg)) at end — spark spins. Include rotation: `transform: rotate(var(--a)) translateX(var(--d)) rotate(160deg) scale(0)`.

Emoji list: ❤️ 💖 🔥 ✨ 🎉 👍 💥 🌟. positions left: 10%,30%,50%,70%,85%... give each inline left and --dl and --r.

OK also add a second row of tiny hearts rising from button? Emojis suffice.

The "count" bubble: a floating "+1" — add one span "+1" popping up. Emojis include enough.

Let me also handle :active squish on button: `.btn:active { transform: scale(.94) }` — but animation jelly overrides transform when checked... fine, active only matters before checked; when checked and clicking again (uncheck) jelly removed. OK.

Unchecked state visuals: heart gray outline, button dark, border subtle; checked: red gradient bg, white text, glow shadow, heart white fill. Good contrast.

Hint text under: "Click it. Trust me." and after checked maybe change to "You monster. Click again to undo." via .h2 swap like t1/t2.

Flash z-index above everything.

Body: overflow hidden? Need no horizontal scrollbar; use min-height 100svh flex center. Blobs fixed with overflow hidden on a .bg wrapper.

Title: "THE LIKE BUTTON" with gradient text. Subtitle small.

Let me write final HTML. Also ensure reduced motion? Not required; skip or add media query — nice touch but optional; I'll add prefers-reduced-motion to shorten animations. Keep brief.

Write code now.

Spark count 24 with angles 0,15,...345. I'll write them compactly each on one line.

Also the heart SVG path: use a standard heart path: `M12 21s-6.7-4.3-9.3-8C.6 10 2 6 5.5 5.2 7.7 4.7 10 5.6 12 8c2-2.4 4.3-3.3 6.5-2.8C22 6 23.4 10 21.3 13c-2.6 3.7-9.3 8-9.3 8z` roughly. I'll use viewBox "0 0 24 24" with a known heart path:

`M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z` (Material heart). Good.

Heart fill: default currentColor gray? Use fill transitions: `.heart svg { fill:#8b8fa3 }` checked → fill #fff. And beat animation.

Button size: padding clamp; font-size clamp(18px, 3vw, 24px).

Emoji positioning: .emojis spans absolute; container absolute inset with bottom anchored at button top.

Let me assemble.

Also add small floating hearts permanently around background? Blobs enough.

Edge: label contains input? No, input separate before stage; label for=like.

Card shake: apply to .card not stage to avoid moving whole layout — fine either way; apply to .card.

Also "crazy": add a quick chromatic aberration? Skip.

Count of code manageable. Write it.

One more: after checked, keep button glowing with pulsing shadow animation:
```css
#like:checked ~ .stage .btn { animation: jelly .55s cubic-bezier(.3,1.4,.4,1), glow 2s 1s infinite alternate; }
```
Multiple animations fine.

glow: box-shadow pulsating — animating box-shadow ok.

Now the uncheck: heart fill transitions back, background transitions, sparks disappear instantly (they're finished anyway).

Alright, write final answer.