hypeorcode
Network offOpen alone (new tab)

Run details

Model
reflection/beam-1.0-501b-a23b
Route
OpenRouter API, one user message
Reasoning
provider default, 6,340 reasoning tokens
Limits
60 min · 600,000 output tokens
Date
21 Oct 2026
Time
30 s
Size
12 kB
Tokens
121 in, 11,096 out
List price
$0.011 ($0.3 in / $1 out per M)
Paid
$0.011

Raw files: output · meta.json

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

12 kB 325 lines Raw

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Mechanical Wristwatch</title>
<style>
  :root {
    --bg-1: #151a24;
    --bg-2: #05070c;
  }

  * { box-sizing: border-box; }

  html, body {
    margin: 0;
    min-height: 100%;
    background: radial-gradient(circle at 50% 35%, var(--bg-1), var(--bg-2) 72%);
    color: #e9e4d6;
    font-family: "Times New Roman", "Didot", Georgia, serif;
    overflow: hidden;
  }

  body {
    display: grid;
    place-items: center;
    min-height: 100vh;
    padding: 24px;
  }

  .stage {
    width: min(92vw, 760px);
    aspect-ratio: 1 / 1;
    position: relative;
  }

  svg {
    width: 100%;
    height: 100%;
    display: block;
    filter: drop-shadow(0 28px 42px rgba(0, 0, 0, 0.55));
  }

  .caption {
    position: absolute;
    left: 50%;
    bottom: -2.2rem;
    transform: translateX(-50%);
    font-size: 0.72rem;
    letter-spacing: 0.38em;
    text-transform: uppercase;
    color: rgba(212, 175, 55, 0.72);
    white-space: nowrap;
  }
</style>
</head>
<body>
<div class="stage">
<svg id="watchSvg" viewBox="0 0 500 500" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Mechanical wristwatch showing the current local time">
  <defs>
    <radialGradient id="pageBg" cx="50%" cy="40%" r="70%">
      <stop offset="0" stop-color="#1a2030"/>
      <stop offset="1" stop-color="#05060a"/>
    </radialGradient>

    <linearGradient id="gold" x1="0%" y1="0%" x2="100%" y2="100%">
      <stop offset="0%" stop-color="#fff0b8"/>
      <stop offset="18%" stop-color="#e6c86a"/>
      <stop offset="42%" stop-color="#b88922"/>
      <stop offset="62%" stop-color="#d4af37"/>
      <stop offset="82%" stop-color="#8a6412"/>
      <stop offset="100%" stop-color="#f3dd8a"/>
    </linearGradient>

    <linearGradient id="goldEdge" x1="0%" y1="0%" x2="0%" y2="100%">
      <stop offset="0%" stop-color="#f7e7a1"/>
      <stop offset="50%" stop-color="#a87418"/>
      <stop offset="100%" stop-color="#f7e7a1"/>
    </linearGradient>

    <radialGradient id="dial" cx="40%" cy="34%" r="78%">
      <stop offset="0%" stop-color="#24437f"/>
      <stop offset="34%" stop-color="#102453"/>
      <stop offset="72%" stop-color="#07122d"/>
      <stop offset="100%" stop-color="#020611"/>
    </radialGradient>

    <linearGradient id="silverHand" x1="0%" y1="0%" x2="0%" y2="100%">
      <stop offset="0%" stop-color="#ffffff"/>
      <stop offset="45%" stop-color="#dde3f0"/>
      <stop offset="100%" stop-color="#8f99b5"/>
    </linearGradient>

    <linearGradient id="steelBlue" x1="0%" y1="0%" x2="0%" y2="100%">
      <stop offset="0%" stop-color="#6aa8ff"/>
      <stop offset="50%" stop-color="#1f4f95"/>
      <stop offset="100%" stop-color="#0b2148"/>
    </linearGradient>

    <linearGradient id="leather" x1="0%" y1="0%" x2="0%" y2="100%">
      <stop offset="0%" stop-color="#3b2418"/>
      <stop offset="45%" stop-color="#1f120b"/>
      <stop offset="100%" stop-color="#3b2418"/>
    </linearGradient>

    <radialGradient id="crystal" cx="34%" cy="28%" r="62%">
      <stop offset="0%" stop-color="rgba(255,255,255,0.42)"/>
      <stop offset="24%" stop-color="rgba(255,255,255,0.12)"/>
      <stop offset="58%" stop-color="rgba(255,255,255,0.03)"/>
      <stop offset="100%" stop-color="rgba(255,255,255,0)"/>
    </radialGradient>

    <radialGradient id="cyclops" cx="38%" cy="32%" r="70%">
      <stop offset="0%" stop-color="rgba(255,255,255,0.55)"/>
      <stop offset="35%" stop-color="rgba(255,255,255,0.16)"/>
      <stop offset="100%" stop-color="rgba(255,255,255,0)"/>
    </radialGradient>

    <pattern id="guilloche" patternUnits="userSpaceOnUse" width="7" height="7" patternTransform="rotate(45)">
      <line x1="0" y1="0" x2="0" y2="7" stroke="rgba(255,255,255,0.045)" stroke-width="0.55"/>
    </pattern>

    <pattern id="leatherTexture" patternUnits="userSpaceOnUse" width="5" height="5">
      <circle cx="1" cy="1" r="0.35" fill="rgba(255,255,255,0.035)"/>
      <circle cx="4" cy="4" r="0.3" fill="rgba(0,0,0,0.18)"/>
    </pattern>

    <filter id="softShadow" x="-25%" y="-25%" width="150%" height="150%">
      <feDropShadow dx="0" dy="10" stdDeviation="12" flood-color="#000000" flood-opacity="0.5"/>
    </filter>

    <filter id="innerShadow" x="-20%" y="-20%" width="140%" height="140%">
      <feDropShadow dx="0" dy="2" stdDeviation="3" flood-color="#000000" flood-opacity="0.35"/>
    </filter>
  </defs>

  <rect width="500" height="500" fill="url(#pageBg)"/>

  <g filter="url(#softShadow)">
    <!-- Strap -->
    <rect x="215" y="8" width="70" height="128" rx="12" fill="url(#leather)"/>
    <rect x="215" y="8" width="70" height="128" rx="12" fill="url(#leatherTexture)"/>
    <rect x="215" y="364" width="70" height="128" rx="12" fill="url(#leather)"/>
    <rect x="215" y="364" width="70" height="128" rx="12" fill="url(#leatherTexture)"/>

    <!-- Lugs -->
    <rect x="205" y="72" width="90" height="22" rx="6" fill="url(#gold)"/>
    <rect x="205" y="406" width="90" height="22" rx="6" fill="url(#gold)"/>

    <!-- Case -->
    <circle cx="250" cy="250" r="192" fill="url(#gold)"/>
    <circle cx="250" cy="250" r="184" fill="#0a0d14"/>
    <circle cx="250" cy="250" r="181" fill="url(#goldEdge)"/>
    <circle cx="250" cy="250" r="170" fill="#07101f"/>
    <circle cx="250" cy="250" r="150" fill="url(#dial)"/>
    <circle cx="250" cy="250" r="150" fill="url(#guilloche)"/>

    <!-- Rehaut / minute track -->
    <g id="ticks"></g>
    <circle cx="250" cy="250" r="150" fill="none" stroke="rgba(212,175,55,0.55)" stroke-width="1.2"/>
    <circle cx="250" cy="250" r="168" fill="none" stroke="rgba(255,255,255,0.08)" stroke-width="1"/>

    <!-- Sunburst rays -->
    <g id="sunburst" opacity="0.45"></g>

    <!-- Hour markers -->
    <g id="indices"></g>

    <!-- Brand and numerals -->
    <text x="250" y="104" text-anchor="middle" font-size="15" font-weight="700" letter-spacing="3" fill="#d4af37">AURUM</text>
    <text x="250" y="126" text-anchor="middle" font-size="16" font-weight="700" fill="#e8d9a8">XII</text>
    <text x="250" y="392" text-anchor="middle" font-size="16" font-weight="700" fill="#e8d9a8">VI</text>
    <text x="118" y="256" text-anchor="middle" font-size="16" font-weight="700" fill="#e8d9a8">IX</text>
    <text x="250" y="405" text-anchor="middle" font-size="8.5" letter-spacing="2.2" fill="rgba(212,175,55,0.72)">AUTOMATIC</text>
    <text x="250" y="418" text-anchor="middle" font-size="7.5" letter-spacing="1.8" fill="rgba(232,217,168,0.55)">SWISS MADE</text>

    <!-- Date window -->
    <g transform="translate(0,0)">
      <rect x="330" y="236" width="44" height="30" rx="4" fill="#f4f0de" stroke="#b9943a" stroke-width="1.2"/>
      <text id="dateText" x="352" y="258" text-anchor="middle" font-size="19" font-weight="700" fill="#101010">01</text>
      <ellipse cx="352" cy="251" rx="29" ry="22" fill="url(#cyclops)" stroke="rgba(255,255,255,0.45)" stroke-width="1.2"/>
      <ellipse cx="344" cy="243" rx="8" ry="5" fill="rgba(255,255,255,0.35)"/>
    </g>

    <!-- Hands -->
    <g id="hourHand" transform="rotate(0 250 250)">
      <path d="M 246 250 L 242 172 Q 250 150 258 172 L 254 250 Z" fill="url(#silverHand)" stroke="rgba(255,255,255,0.35)" stroke-width="0.5"/>
    </g>

    <g id="minuteHand" transform="rotate(0 250 250)">
      <path d="M 248 250 L 246 132 Q 250 108 254 132 L 252 250 Z" fill="url(#silverHand)" stroke="rgba(255,255,255,0.35)" stroke-width="0.5"/>
    </g>

    <g id="secondHand" transform="rotate(0 250 250)">
      <line x1="250" y1="286" x2="250" y2="104" stroke="url(#steelBlue)" stroke-width="1.35" stroke-linecap="round"/>
      <circle cx="250" cy="250" r="4.2" fill="url(#gold)" stroke="#7a5a12" stroke-width="0.6"/>
      <circle cx="250" cy="104" r="2.2" fill="#d94a4a"/>
    </g>

    <!-- Center cap -->
    <circle cx="250" cy="250" r="7.5" fill="url(#gold)" stroke="#7a5a12" stroke-width="0.8"/>
    <circle cx="250" cy="250" r="3.2" fill="#8b1a1a"/>

    <!-- Crystal highlight -->
    <circle cx="250" cy="250" r="170" fill="url(#crystal)"/>
    <ellipse cx="210" cy="185" rx="72" ry="34" fill="rgba(255,255,255,0.08)" transform="rotate(-22 210 185)"/>

    <!-- Crown -->
    <g transform="translate(438,250)">
      <rect x="-6" y="-16" width="20" height="32" rx="4" fill="url(#gold)"/>
      <rect x="10" y="-13" width="16" height="26" rx="3" fill="url(#goldEdge)"/>
      <line x1="13" y1="-8" x2="23" y2="-8" stroke="rgba(90,60,10,0.55)" stroke-width="1"/>
      <line x1="13" y1="-3" x2="23" y2="-3" stroke="rgba(90,60,10,0.55)" stroke-width="1"/>
      <line x1="13" y1="2" x2="23" y2="2" stroke="rgba(90,60,10,0.55)" stroke-width="1"/>
      <line x1="13" y1="7" x2="23" y2="7" stroke="rgba(90,60,10,0.55)" stroke-width="1"/>
    </g>
  </g>
</svg>
<div class="caption">AURUM &middot; AUTOMATIC &middot; SWISS MADE</div>
</div>

<script>
  (function () {
    const cx = 250;
    const cy = 250;
    const svgNS = 'http://www.w3.org/2000/svg';

    function polar(radius, degrees) {
      const radians = (degrees - 90) * Math.PI / 180;
      return {
        x: cx + Math.cos(radians) * radius,
        y: cy + Math.sin(radians) * radius
      };
    }

    function makeLine(x1, y1, x2, y2, stroke, width, opacity) {
      const line = document.createElementNS(svgNS, 'line');
      line.setAttribute('x1', x1);
      line.setAttribute('y1', y1);
      line.setAttribute('x2', x2);
      line.setAttribute('y2', y2);
      line.setAttribute('stroke', stroke);
      line.setAttribute('stroke-width', width);
      if (opacity !== undefined) line.setAttribute('opacity', opacity);
      line.setAttribute('stroke-linecap', 'round');
      return line;
    }

    function makeRect(x, y, width, height, rx, fill, transform) {
      const rect = document.createElementNS(svgNS, 'rect');
      rect.setAttribute('x', x);
      rect.setAttribute('y', y);
      rect.setAttribute('width', width);
      rect.setAttribute('height', height);
      rect.setAttribute('rx', rx);
      rect.setAttribute('fill', fill);
      if (transform) rect.setAttribute('transform', transform);
      return rect;
    }

    // Minute ticks and hour markers
    const ticksGroup = document.getElementById('ticks');
    for (let i = 0; i < 60; i++) {
      const angle = i * 6;
      const isHour = i % 5 === 0;
      const outer = polar(166, angle);
      const inner = polar(isHour ? 150 : 158, angle);
      const tick = makeLine(
        outer.x, outer.y, inner.x, inner.y,
        isHour ? 'rgba(212,175,55,0.95)' : 'rgba(235,235,245,0.34)',
        isHour ? 2.1 : 0.9
      );
      ticksGroup.appendChild(tick);
    }

    const indicesGroup = document.getElementById('indices');
    for (let i = 0; i < 12; i++) {
      if (i === 3) continue; // date window occupies this position
      const angle = i * 30;
      const marker = makeRect(cx - 3.2, cy - 145, 6.4, 24, 2.2, 'url(#gold)',
        'rotate(' + angle + ' ' + cx + ' ' + cy + ')');
      marker.setAttribute('filter', 'url(#innerShadow)');
      indicesGroup.appendChild(marker);
    }

    // Subtle sunburst
    const sunburstGroup = document.getElementById('sunburst');
    for (let i = 0; i < 72; i++) {
      const angle = i * 5;
      const inner = polar(18, angle);
      const outer = polar(148, angle);
      const ray = makeLine(inner.x, inner.y, outer.x, outer.y, 'rgba(255,255,255,0.06)', 0.45);
      sunburstGroup.appendChild(ray);
    }

    const hourHand = document.getElementById('hourHand');
    const minuteHand = document.getElementById('minuteHand');
    const secondHand = document.getElementById('secondHand');
    const dateText = document.getElementById('dateText');

    function setHand(element, degrees) {
      element.setAttribute('transform', 'rotate(' + degrees + ' ' + cx + ' ' + cy + ')');
    }

    function update() {
      const now = new Date();
      const milliseconds = now.getMilliseconds();
      const seconds = now.getSeconds() + milliseconds / 1000;
      const minutes = now.getMinutes() + seconds / 60;
      const hours = (now.getHours() % 12) + minutes / 60;

      setHand(hourHand, hours * 30);
      setHand(minuteHand, minutes * 6);
      setHand(secondHand, seconds * 6);

      dateText.textContent = String(now.getDate()).padStart(2, '0');

      requestAnimationFrame(update);
    }

    update();
  })();
</script>
</body>
</html>

Compare with

Beam 1.0: other attempts