Exploding like buttonOne-line
Dots3-Note Preview (free)
by Dots StudioReasoningClean
Running live in a sandboxed frame. Click inside it before using the keyboard.
How it went
- Total time
- 27.3 s
- Cost
- $0
- Output tokens
- 2,912
- Spent thinking
- 0 tokens
- Speed
- 109 tok/s
- Console errors
- 0
- First token after
- 564 ms
- First visible text after
- 564 ms
- Prompt tokens
- 358
- Code size
- 8.3 KB
- Finish reason
- stop
- Served by
- AtlasCloud
- Model id
dots-studio/dots-3-note-preview:free- Reasoning sent
{"effort":"none"}- Max output
- 32,000 tokens
- Generated
- Nov 9, 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 · 398 lines
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Crazy CSS Like Button</title>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
font-family: 'Arial', sans-serif;
overflow: hidden;
}
.like-container {
position: relative;
width: 200px;
height: 200px;
perspective: 1000px;
}
.like-btn {
position: relative;
width: 100%;
height: 100%;
background: none;
border: none;
cursor: pointer;
outline: none;
transform-style: preserve-3d;
transition: transform 0.3s ease;
}
.like-btn:active {
transform: scale(0.95);
}
.heart {
position: absolute;
top: 50%;
left: 50%;
width: 80px;
height: 80px;
background: #ff4757;
transform: translate(-50%, -50%);
border-radius: 50% 50% 45% 45% 45% 45% 55% 55%;
transform-origin: center bottom;
animation: heartbeat 1.5s infinite;
box-shadow: 0 10px 20px rgba(255, 71, 87, 0.4);
}
.heart::before,
.heart::after {
content: '';
position: absolute;
width: 80px;
height: 80px;
background: #ff4757;
border-radius: 50%;
transform: translate(-50%, -50%);
}
.heart::before {
top: -40px;
left: 0;
}
.heart::after {
top: 0;
left: -40px;
}
.like-btn input {
display: none;
}
.like-btn input:checked ~ .heart {
animation: explode 0.8s ease-out forwards;
}
/* Heartbeat animation */
@keyframes heartbeat {
0% { transform: translate(-50%, -50%) scale(1); }
25% { transform: translate(-50%, -50%) scale(1.1); }
50% { transform: translate(-50%, -50%) scale(1); }
75% { transform: translate(-50%, -50%) scale(1.1); }
100% { transform: translate(-50%, -50%) scale(1); }
}
/* Crazy explosion animation */
@keyframes explode {
0% {
transform: translate(-50%, -50%) scale(1) rotate(0deg);
opacity: 1;
}
20% {
transform: translate(-50%, -50%) scale(1.5) rotate(180deg);
opacity: 1;
}
40% {
transform: translate(-50%, -50%) scale(2) rotate(360deg);
opacity: 0.9;
}
60% {
transform: translate(-50%, -50%) scale(2.5) rotate(540deg);
opacity: 0.7;
}
80% {
transform: translate(-50%, -50%) scale(3) rotate(720deg);
opacity: 0.4;
}
100% {
transform: translate(-50%, -50%) scale(3.5) rotate(900deg);
opacity: 0;
}
}
/* Floating particles */
.like-btn input:checked ~ .particles {
display: block;
}
.particles {
position: absolute;
top: 50%;
left: 50%;
display: none;
width: 100%;
height: 100%;
transform: translate(-50%, -50%);
}
.particle {
position: absolute;
width: 8px;
height: 8px;
background: #ff4757;
border-radius: 50%;
opacity: 0;
}
.particle:nth-child(1) {
top: 0;
left: 50%;
animation: particle-float 1s ease-out forwards;
animation-delay: 0s;
}
.particle:nth-child(2) {
top: 20%;
left: 80%;
animation: particle-float 1s ease-out forwards;
animation-delay: 0.1s;
}
.particle:nth-child(3) {
top: 40%;
left: 100%;
animation: particle-float 1s ease-out forwards;
animation-delay: 0.2s;
}
.particle:nth-child(4) {
top: 60%;
left: 90%;
animation: particle-float 1s ease-out forwards;
animation-delay: 0.3s;
}
.particle:nth-child(5) {
top: 80%;
left: 70%;
animation: particle-float 1s ease-out forwards;
animation-delay: 0.4s;
}
.particle:nth-child(6) {
top: 100%;
left: 50%;
animation: particle-float 1s ease-out forwards;
animation-delay: 0.5s;
}
.particle:nth-child(7) {
top: 80%;
left: 30%;
animation: particle-float 1s ease-out forwards;
animation-delay: 0.6s;
}
.particle:nth-child(8) {
top: 60%;
left: 10%;
animation: particle-float 1s ease-out forwards;
animation-delay: 0.7s;
}
.particle:nth-child(9) {
top: 40%;
left: 0%;
animation: particle-float 1s ease-out forwards;
animation-delay: 0.8s;
}
.particle:nth-child(10) {
top: 20%;
left: 20%;
animation: particle-float 1s ease-out forwards;
animation-delay: 0.9s;
}
@keyframes particle-float {
0% {
transform: translate(0, 0) scale(1);
opacity: 1;
}
100% {
transform: translate(var(--tx, 50px), var(--ty, -50px)) scale(0);
opacity: 0;
}
}
/* Ripple effect */
.like-btn input:checked ~ .ripple {
animation: ripple 1s ease-out forwards;
}
.ripple {
position: absolute;
top: 50%;
left: 50%;
width: 10px;
height: 10px;
background: rgba(255, 71, 87, 0.3);
border-radius: 50%;
transform: translate(-50%, -50%);
opacity: 0;
}
@keyframes ripple {
0% {
width: 10px;
height: 10px;
opacity: 0.7;
}
100% {
width: 200px;
height: 200px;
opacity: 0;
}
}
/* Text label */
.like-label {
position: absolute;
bottom: -40px;
left: 50%;
transform: translateX(-50%);
color: white;
font-size: 18px;
font-weight: bold;
text-shadow: 0 2px 4px rgba(0,0,0,0.3);
transition: all 0.3s ease;
}
.like-btn input:checked ~ .like-label {
transform: translateX(-50%) scale(1.2);
color: #ffd700;
text-shadow: 0 0 10px rgba(255, 215, 0, 0.8);
}
/* Auto-play demo */
.demo-toggle {
position: absolute;
top: 20px;
left: 20px;
z-index: 10;
}
.demo-toggle input {
display: none;
}
.demo-toggle label {
background: rgba(255, 255, 255, 0.2);
color: white;
padding: 8px 16px;
border-radius: 20px;
font-size: 14px;
cursor: pointer;
backdrop-filter: blur(10px);
transition: all 0.3s ease;
}
.demo-toggle label:hover {
background: rgba(255, 255, 255, 0.3);
}
.demo-toggle input:checked + label {
background: #ff4757;
}
.auto-play {
animation: auto-click 3s infinite;
}
@keyframes auto-click {
0%, 60%, 100% {
transform: scale(1);
}
30% {
transform: scale(0.95);
}
}
@media (max-width: 480px) {
.like-container {
width: 150px;
height: 150px;
}
.heart {
width: 60px;
height: 60px;
}
.heart::before,
.heart::after {
width: 60px;
height: 60px;
}
.like-label {
font-size: 16px;
bottom: -35px;
}
}
</style>
</head>
<body>
<div class="demo-toggle">
<input type="checkbox" id="autoPlay" checked>
<label for="autoPlay">Auto Demo</label>
</div>
<div class="like-container">
<button class="like-btn auto-play">
<input type="checkbox" id="likeInput">
<div class="heart"></div>
<div class="particles">
<div class="particle" style="--tx: 60px; --ty: -60px;"></div>
<div class="particle" style="--tx: 80px; --ty: -40px;"></div>
<div class="particle" style="--tx: 100px; --ty: 0px;"></div>
<div class="particle" style="--tx: 80px; --ty: 40px;"></div>
<div class="particle" style="--tx: 60px; --ty: 60px;"></div>
<div class="particle" style="--tx: 0px; --ty: 60px;"></div>
<div class="particle" style="--tx: -60px; --ty: 60px;"></div>
<div class="particle" style="--tx: -80px; --ty: 40px;"></div>
<div class="particle" style="--tx: -100px; --ty: 0px;"></div>
<div class="particle" style="--tx: -80px; --ty: -40px;"></div>
</div>
<div class="ripple"></div>
<div class="like-label">Like This!</div>
</button>
</div>
<script>
// Auto-play functionality
const autoPlayCheckbox = document.getElementById('autoPlay');
const likeInput = document.getElementById('likeInput');
const autoPlayBtn = document.querySelector('.auto-play');
autoPlayCheckbox.addEventListener('change', function() {
if (this.checked) {
autoPlayBtn.classList.add('auto-play');
} else {
autoPlayBtn.classList.remove('auto-play');
}
});
// Manual click simulation for auto-play
setInterval(() => {
if (autoPlayCheckbox.checked) {
likeInput.checked = !likeInput.checked;
}
}, 2000);
</script>
</body>
</html>