Run details
- Model
- minimax/minimax-m3
- Route
- OpenRouter API, one user message
- Reasoning
- provider default, 44,334 reasoning tokens
- Limits
- 60 min · 512,000 output tokens
- Date
- 21 Oct 2026
- Time
- 10 min 32 s
- Size
- 11 kB
- Tokens
- 252 in, 48,782 out
- List price
- $0.059 ($0.3 in / $1.2 out per M)
- Paid
- $0.059
Exact prompt
Draw a mechanical wristwatch that shows the current local time, with a sweeping seconds hand and a date window. Make it look expensive. It must be one complete, self-contained HTML file: inline all CSS and JavaScript, and make no network requests of any kind (no CDNs, web fonts or remote images). Reply with the file in a single ```html code block.
Source
11 kB 447 lines Raw
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Mechanical Wristwatch</title>
<style>
* { box-sizing: border-box; margin: 0; padding: 0; }
html, body { height: 100%; overflow: hidden; }
body {
background:
radial-gradient(ellipse at center, #2a2a2a 0%, #0a0a0a 60%, #000 100%);
display: flex;
align-items: center;
justify-content: center;
font-family: 'Georgia', 'Times New Roman', serif;
}
.watch {
position: relative;
width: 420px;
height: 420px;
filter: drop-shadow(0 40px 80px rgba(0, 0, 0, 0.8));
}
/* Leather strap */
.strap {
position: absolute;
left: 50%;
width: 180px;
height: 140px;
transform: translateX(-50%);
background:
linear-gradient(90deg, #1a0f08 0%, #3a2010 15%, #4a2a18 50%, #3a2010 85%, #1a0f08 100%);
z-index: 0;
box-shadow:
inset 0 8px 15px rgba(0, 0, 0, 0.6),
inset 0 -8px 15px rgba(0, 0, 0, 0.4);
}
.strap::before {
content: '';
position: absolute;
inset: 0;
background:
repeating-linear-gradient(90deg,
transparent 0px, transparent 25px,
rgba(0, 0, 0, 0.15) 25px, rgba(0, 0, 0, 0.15) 26px);
}
.strap-top { top: -100px; border-radius: 15px 15px 8px 8px; }
.strap-bottom { bottom: -100px; border-radius: 8px 8px 15px 15px; }
/* Lugs */
.lug {
position: absolute;
width: 28px;
height: 55px;
background: linear-gradient(135deg, #f0f0f0 0%, #808080 50%, #f0f0f0 100%);
z-index: 1;
box-shadow: inset 0 0 3px rgba(0, 0, 0, 0.3), 0 2px 4px rgba(0, 0, 0, 0.4);
}
.lug-tl { top: 10px; left: 115px; border-radius: 3px 12px 12px 3px; }
.lug-tr { top: 10px; right: 115px; border-radius: 12px 3px 3px 12px; }
.lug-bl { bottom: 10px; left: 115px; border-radius: 3px 12px 12px 3px; }
.lug-br { bottom: 10px; right: 115px; border-radius: 12px 3px 3px 12px; }
/* Case */
.case {
position: absolute;
inset: 0;
border-radius: 50%;
background:
radial-gradient(circle at 35% 30%,
#fafafa 0%, #e0e0e0 15%, #b0b0b0 40%, #808080 60%, #a0a0a0 80%, #d0d0d0 100%);
box-shadow:
inset 0 0 40px rgba(0, 0, 0, 0.3),
inset 3px 3px 6px rgba(255, 255, 255, 0.4),
inset -3px -3px 6px rgba(0, 0, 0, 0.3),
0 0 0 4px #303030,
0 15px 40px rgba(0, 0, 0, 0.6);
z-index: 2;
}
/* Crown */
.crown {
position: absolute;
right: -10px;
top: 50%;
transform: translateY(-50%);
width: 22px;
height: 38px;
background: repeating-linear-gradient(0deg, #d0d0d0 0px, #707070 2px, #d0d0d0 4px);
border-radius: 4px;
box-shadow: inset 0 0 4px rgba(0, 0, 0, 0.5), 0 2px 5px rgba(0, 0, 0, 0.6);
z-index: 1;
}
.crown::before {
content: '';
position: absolute;
left: -4px;
top: 50%;
transform: translateY(-50%);
width: 8px;
height: 24px;
background: linear-gradient(135deg, #909090, #505050);
border-radius: 2px;
}
/* Bezel */
.bezel {
position: absolute;
inset: 26px;
border-radius: 50%;
background:
conic-gradient(from 45deg,
#e8e8e8 0deg, #909090 30deg, #e8e8e8 60deg,
#909090 90deg, #e8e8e8 120deg, #909090 150deg,
#e8e8e8 180deg, #909090 210deg, #e8e8e8 240deg,
#909090 270deg, #e8e8e8 300deg, #909090 330deg, #e8e8e8 360deg);
box-shadow:
inset 0 2px 5px rgba(255, 255, 255, 0.6),
inset 0 -2px 5px rgba(0, 0, 0, 0.4),
inset 0 0 0 1px rgba(0, 0, 0, 0.2);
}
/* Dial */
.dial {
position: absolute;
inset: 42px;
border-radius: 50%;
background:
repeating-conic-gradient(from 0deg,
rgba(255, 255, 255, 0.08) 0deg,
rgba(255, 255, 255, 0.02) 0.5deg,
rgba(255, 255, 255, 0.08) 1deg,
rgba(255, 255, 255, 0.02) 1.5deg),
radial-gradient(circle at 35% 30%, #2a4060 0%, #1a2840 40%, #0a1525 100%);
box-shadow:
inset 0 0 60px rgba(0, 0, 0, 0.9),
inset 0 2px 4px rgba(255, 255, 255, 0.1),
inset 0 -2px 4px rgba(0, 0, 0, 0.4);
overflow: hidden;
}
/* Glass reflection */
.glass {
position: absolute;
inset: 42px;
border-radius: 50%;
background:
radial-gradient(ellipse at 30% 20%,
rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0.08) 25%, transparent 55%);
pointer-events: none;
z-index: 25;
}
.glass::after {
content: '';
position: absolute;
top: 18%;
left: 22%;
width: 35%;
height: 18%;
background: radial-gradient(ellipse, rgba(255, 255, 255, 0.2) 0%, transparent 70%);
transform: rotate(-25deg);
filter: blur(2px);
}
/* Markers */
.marker {
position: absolute;
top: 50%;
left: 50%;
transform-origin: 50% 50%;
}
.marker.major {
width: 7px;
height: 26px;
margin-left: -3.5px;
margin-top: -13px;
background: linear-gradient(180deg,
#ffffff 0%, #d0d0d0 30%, #909090 50%, #d0d0d0 70%, #ffffff 100%);
border-radius: 2px;
box-shadow:
0 1px 2px rgba(0, 0, 0, 0.6),
inset 0 1px 0 rgba(255, 255, 255, 0.8),
inset 0 -1px 0 rgba(0, 0, 0, 0.3);
z-index: 3;
}
.marker.minor {
width: 2.5px;
height: 14px;
margin-left: -1.25px;
margin-top: -7px;
background: linear-gradient(180deg, #f5f5f5 0%, #b0b0b0 50%, #f5f5f5 100%);
border-radius: 1px;
box-shadow: 0 1px 1px rgba(0, 0, 0, 0.4);
z-index: 3;
}
/* Minute ticks */
.tick {
position: absolute;
top: 50%;
left: 50%;
width: 1.5px;
height: 5px;
margin-left: -0.75px;
margin-top: -2.5px;
background: #c0c0c0;
transform-origin: 50% 50%;
box-shadow: 0 0 1px rgba(0, 0, 0, 0.3);
z-index: 3;
}
/* Brand */
.brand {
position: absolute;
top: 26%;
left: 50%;
transform: translateX(-50%);
font-size: 18px;
font-weight: bold;
color: #f5f5f5;
letter-spacing: 4px;
text-shadow: 0 1px 2px rgba(0, 0, 0, 0.9), 0 0 15px rgba(255, 255, 255, 0.15);
z-index: 5;
}
.sub-brand {
position: absolute;
top: 35%;
left: 50%;
transform: translateX(-50%);
font-size: 9px;
color: #c0c0c0;
letter-spacing: 3px;
text-shadow: 0 1px 2px rgba(0, 0, 0, 0.9);
font-style: italic;
z-index: 5;
}
.origin {
position: absolute;
bottom: 24%;
left: 50%;
transform: translateX(-50%);
font-size: 8px;
color: #a0a0a0;
letter-spacing: 2px;
text-shadow: 0 1px 1px rgba(0, 0, 0, 0.8);
z-index: 5;
}
/* Date window */
.date-window {
position: absolute;
top: 50%;
right: 10%;
transform: translateY(-50%);
width: 40px;
height: 32px;
background: linear-gradient(180deg, #ffffff 0%, #e8e8e8 100%);
border-radius: 2px;
box-shadow:
inset 0 0 5px rgba(0, 0, 0, 0.2),
inset 0 -2px 3px rgba(0, 0, 0, 0.15),
0 1px 3px rgba(0, 0, 0, 0.4);
display: flex;
align-items: center;
justify-content: center;
font-size: 20px;
font-weight: bold;
color: #1a1a1a;
z-index: 5;
}
/* Hands */
.hand {
position: absolute;
top: 50%;
left: 50%;
z-index: 10;
}
.hour-hand {
width: 8px;
height: 90px;
margin-left: -4px;
margin-top: -90px;
background: linear-gradient(180deg,
#f5f5f5 0%, #d0d0d0 30%, #909090 50%, #d0d0d0 70%, #f5f5f5 100%);
border-radius: 3px 3px 1px 1px;
transform-origin: 50% 100%;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.5), inset 1px 0 0 rgba(255, 255, 255, 0.6);
}
.minute-hand {
width: 6px;
height: 120px;
margin-left: -3px;
margin-top: -120px;
background: linear-gradient(180deg,
#f5f5f5 0%, #d0d0d0 30%, #909090 50%, #d0d0d0 70%, #f5f5f5 100%);
border-radius: 2px;
transform-origin: 50% 100%;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.5), inset 1px 0 0 rgba(255, 255, 255, 0.6);
}
.second-hand {
width: 2px;
height: 130px;
margin-left: -1px;
margin-top: -130px;
background: linear-gradient(180deg, #ff3030 0%, #c01818 50%, #ff3030 100%);
transform-origin: 50% 100%;
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.5);
}
.second-hand::after {
content: '';
position: absolute;
bottom: -35px;
left: -5px;
width: 12px;
height: 35px;
background: linear-gradient(180deg, #c01818 0%, #ff3030 100%);
border-radius: 4px;
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.4);
}
/* Center cap */
.center-cap {
position: absolute;
top: 50%;
left: 50%;
width: 20px;
height: 20px;
transform: translate(-50%, -50%);
background: radial-gradient(circle at 30% 30%,
#ffffff 0%, #c0c0c0 40%, #606060 70%, #303030 100%);
border-radius: 50%;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.6), inset 0 1px 2px rgba(255, 255, 255, 0.6);
z-index: 20;
}
.center-cap::after {
content: '';
position: absolute;
top: 50%;
left: 50%;
width: 5px;
height: 5px;
transform: translate(-50%, -50%);
background: #1a1a1a;
border-radius: 50%;
}
</style>
</head>
<body>
<div class="watch">
<div class="strap strap-top"></div>
<div class="strap strap-bottom"></div>
<div class="lug lug-tl"></div>
<div class="lug lug-tr"></div>
<div class="lug lug-bl"></div>
<div class="lug lug-br"></div>
<div class="case">
<div class="bezel">
<div class="dial" id="dial">
<div class="brand">CHRONOS</div>
<div class="sub-brand">Automatic</div>
<div class="origin">SWISS MADE</div>
<div class="date-window" id="dateWindow">1</div>
<div class="hand hour-hand" id="hourHand"></div>
<div class="hand minute-hand" id="minuteHand"></div>
<div class="hand second-hand" id="secondHand"></div>
<div class="center-cap"></div>
</div>
<div class="glass"></div>
</div>
</div>
<div class="crown"></div>
</div>
<script>
const dial = document.getElementById('dial');
// Create hour markers
const markerRadius = 140;
for (let i = 0; i < 12; i++) {
const angle = i * 30;
const isMajor = i % 3 === 0;
const marker = document.createElement('div');
marker.className = 'marker ' + (isMajor ? 'major' : 'minor');
marker.style.transform = `rotate(${angle}deg) translateY(-${markerRadius}px)`;
dial.appendChild(marker);
}
// Create minute ticks
const tickRadius = 154;
for (let i = 0; i < 60; i++) {
if (i % 5 === 0) continue;
const tick = document.createElement('div');
tick.className = 'tick';
tick.style.transform = `rotate(${i * 6}deg) translateY(-${tickRadius}px)`;
dial.appendChild(tick);
}
// Update time with smooth sweeping motion
function updateTime() {
const now = new Date();
const hours = now.getHours() % 12;
const minutes = now.getMinutes();
const seconds = now.getSeconds();
const milliseconds = now.getMilliseconds();
const hourDeg = (hours * 30) + (minutes * 0.5) + (seconds * 0.5 / 60);
const minuteDeg = (minutes * 6) + (seconds * 0.1);
const secondDeg = (seconds * 6) + (milliseconds * 0.006);
document.getElementById('hourHand').style.transform = `rotate(${hourDeg}deg)`;
document.getElementById('minuteHand').style.transform = `rotate(${minuteDeg}deg)`;
document.getElementById('secondHand').style.transform = `rotate(${secondDeg}deg)`;
document.getElementById('dateWindow').textContent = now.getDate();
requestAnimationFrame(updateTime);
}
updateTime();
</script>
</body>
</html>

