hypeorcode
Network offOpen alone (new tab)

Run details

Model
anthropic/claude-haiku-5.5
Route
OpenRouter API, one user message
Reasoning
provider default, 2,918 reasoning tokens
Limits
60 min · 128,000 output tokens
Date
21 Oct 2026
Time
34 s
Size
9.4 kB
Tokens
124 in, 7,632 out
List price
$0.004 ($0.1 in / $0.5 out per M)
Paid
$0.004

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

9.4 kB 246 lines Raw

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Aurelon Chronometer</title>
<style>
  html, body {
    margin: 0;
    height: 100%;
    background: radial-gradient(ellipse at 50% 35%, #26262b 0%, #101013 60%, #050506 100%);
    display: flex;
    align-items: center;
    justify-content: center;
    overflow: hidden;
  }
  svg {
    width: min(92vw, 520px);
    height: auto;
    filter: drop-shadow(0 30px 40px rgba(0,0,0,0.75));
  }
  .brand {
    font-family: Georgia, "Times New Roman", serif;
    letter-spacing: 6px;
  }
</style>
</head>
<body>

<svg viewBox="0 0 500 580" xmlns="http://www.w3.org/2000/svg" aria-label="Wristwatch showing local time">
  <defs>
    <!-- Polished gold case -->
    <linearGradient id="goldCase" x1="0" y1="0" x2="1" y2="1">
      <stop offset="0%" stop-color="#fbeec2"/>
      <stop offset="25%" stop-color="#c99a45"/>
      <stop offset="50%" stop-color="#7a5620"/>
      <stop offset="75%" stop-color="#e2b865"/>
      <stop offset="100%" stop-color="#5b3e14"/>
    </linearGradient>
    <linearGradient id="goldLug" x1="0" y1="0" x2="1" y2="0">
      <stop offset="0%" stop-color="#6e4c18"/>
      <stop offset="40%" stop-color="#f4dc9a"/>
      <stop offset="60%" stop-color="#c58f3a"/>
      <stop offset="100%" stop-color="#5a3c12"/>
    </linearGradient>
    <linearGradient id="goldHand" x1="0" y1="0" x2="1" y2="0">
      <stop offset="0%" stop-color="#8a6324"/>
      <stop offset="45%" stop-color="#fbe7a6"/>
      <stop offset="55%" stop-color="#d9a955"/>
      <stop offset="100%" stop-color="#6b4a18"/>
    </linearGradient>
    <radialGradient id="dialFace" cx="50%" cy="42%" r="60%">
      <stop offset="0%" stop-color="#2c2e35"/>
      <stop offset="70%" stop-color="#15161a"/>
      <stop offset="100%" stop-color="#08080a"/>
    </radialGradient>
    <radialGradient id="glassSheen" cx="32%" cy="22%" r="60%">
      <stop offset="0%" stop-color="#ffffff" stop-opacity="0.22"/>
      <stop offset="40%" stop-color="#ffffff" stop-opacity="0.04"/>
      <stop offset="100%" stop-color="#ffffff" stop-opacity="0"/>
    </radialGradient>
    <linearGradient id="strapFill" x1="0" y1="0" x2="1" y2="1">
      <stop offset="0%" stop-color="#1b1410"/>
      <stop offset="100%" stop-color="#040303"/>
    </linearGradient>
    <filter id="handShadow" x="-20%" y="-20%" width="140%" height="140%">
      <feDropShadow dx="2" dy="3" stdDeviation="2.2" flood-color="#000" flood-opacity="0.6"/>
    </filter>
  </defs>

  <!-- Everything is drawn relative to the dial centre (250, 290) -->
  <g transform="translate(250 290)">

    <!-- Leather strap hints (behind the case) -->
    <path d="M -95 -150 Q -110 -230 -80 -300 L 80 -300 Q 110 -230 95 -150 Z" fill="url(#strapFill)" opacity="0"/>
    <rect x="-82" y="-236" width="164" height="116" rx="18" fill="url(#strapFill)"/>
    <rect x="-82" y="120" width="164" height="116" rx="18" fill="url(#strapFill)"/>

    <!-- Lugs -->
    <rect x="-46" y="-232" width="92" height="70" rx="14" fill="url(#goldLug)" stroke="#2a1d08" stroke-width="1.5"/>
    <rect x="-46" y="162" width="92" height="70" rx="14" fill="url(#goldLug)" stroke="#2a1d08" stroke-width="1.5"/>

    <!-- Crown and stem -->
    <rect x="186" y="-14" width="22" height="28" rx="4" fill="url(#goldLug)" stroke="#2a1d08" stroke-width="1"/>
    <rect x="200" y="-9" width="12" height="18" rx="2" fill="#3a2810"/>
    <g id="crownRidges" stroke="#2a1d08" stroke-width="1" opacity="0.7">
      <line x1="192" y1="-12" x2="192" y2="12"/>
      <line x1="197" y1="-12" x2="197" y2="12"/>
      <line x1="202" y1="-12" x2="202" y2="12"/>
    </g>

    <!-- Case body -->
    <g filter="url(#handShadow)">
      <circle r="190" fill="url(#goldCase)" stroke="#2a1d08" stroke-width="2"/>
    </g>
    <!-- Brushed bezel ring -->
    <circle r="176" fill="none" stroke="#fff3c9" stroke-opacity="0.25" stroke-width="2"/>
    <circle r="168" fill="#0d0d0f" stroke="#3b2a12" stroke-width="2"/>

    <!-- Dial -->
    <circle r="160" fill="url(#dialFace)"/>

    <!-- Guilloché engraving pattern -->
    <g id="guilloche" fill="none" stroke="#e8d7a8" stroke-opacity="0.045" stroke-width="0.8"></g>

    <!-- Minute track -->
    <g id="ticks"></g>

    <!-- Applied hour indices -->
    <g id="indices"></g>

    <!-- Brand and text -->
    <text class="brand" x="0" y="-70" text-anchor="middle" font-size="14" fill="#e6c77a">AURELON</text>
    <text x="0" y="-48" text-anchor="middle" font-size="6.5" fill="#b89650" font-family="Georgia, serif" letter-spacing="2">GENÈVE · CHRONOMÈTRE</text>
    <text x="0" y="82" text-anchor="middle" font-size="8" fill="#b89650" font-family="Georgia, serif" letter-spacing="3">AUTOMATIC</text>

    <!-- Date window at 3 o'clock -->
    <rect x="62" y="-15" width="40" height="30" rx="3" fill="#0a0a0c" stroke="#c9a04e" stroke-width="1.6"/>
    <rect x="63.5" y="-13.5" width="37" height="27" rx="2" fill="none" stroke="#000" stroke-width="0.8" opacity="0.8"/>
    <text id="dateText" x="81" y="7" text-anchor="middle" font-size="19" font-family="Georgia, 'Times New Roman', serif" fill="#f5f0e3">1</text>

    <!-- Hour hand -->
    <g id="hourHand" filter="url(#handShadow)">
      <path d="M -9 14 L -8 -78 L 0 -94 L 8 -78 L 9 14 Z" fill="url(#goldHand)" stroke="#3b2a0c" stroke-width="1"/>
      <path d="M -3 4 L -3 -70 L 0 -82 L 3 -70 L 3 4 Z" fill="#f2f7e6" opacity="0.85"/>
    </g>

    <!-- Minute hand -->
    <g id="minuteHand" filter="url(#handShadow)">
      <path d="M -6 16 L -5 -126 L 0 -140 L 5 -126 L 6 16 Z" fill="url(#goldHand)" stroke="#3b2a0c" stroke-width="1"/>
      <path d="M -2 6 L -2 -118 L 0 -130 L 2 -118 L 2 6 Z" fill="#f2f7e6" opacity="0.85"/>
    </g>

    <!-- Sweeping seconds hand -->
    <g id="secondHand" filter="url(#handShadow)">
      <line x1="0" y1="30" x2="0" y2="-138" stroke="#c81e2a" stroke-width="1.6" stroke-linecap="round"/>
      <circle cx="0" cy="22" r="6" fill="#c81e2a" stroke="#5a0a10" stroke-width="0.8"/>
      <circle cx="0" cy="-118" r="2.2" fill="#c81e2a"/>
    </g>

    <!-- Hub -->
    <circle r="8" fill="url(#goldHand)" stroke="#3b2a0c" stroke-width="1"/>
    <circle r="3" fill="#c81e2a"/>

    <!-- Glass: sapphire reflection -->
    <circle r="160" fill="url(#glassSheen)" pointer-events="none"/>
    <circle r="160" fill="none" stroke="#ffffff" stroke-opacity="0.08" stroke-width="1"/>
  </g>
</svg>

<script>
  (function () {
    const NS = "http://www.w3.org/2000/svg";
    const ticks = document.getElementById("ticks");
    const indices = document.getElementById("indices");
    const guilloche = document.getElementById("guilloche");

    // Guilloché-style concentric engraving
    for (let r = 10; r <= 156; r += 2.4) {
      const c = document.createElementNS(NS, "circle");
      c.setAttribute("r", r.toFixed(1));
      guilloche.appendChild(c);
    }

    // Minute track (skipping hour positions)
    for (let i = 0; i < 60; i++) {
      if (i % 5 === 0) continue;
      const l = document.createElementNS(NS, "rect");
      l.setAttribute("x", -0.6);
      l.setAttribute("y", -150);
      l.setAttribute("width", 1.2);
      l.setAttribute("height", 6);
      l.setAttribute("fill", "#c9a04e");
      l.setAttribute("opacity", "0.7");
      l.setAttribute("transform", `rotate(${i * 6})`);
      ticks.appendChild(l);
    }

    // Applied hour indices with luminous inserts
    for (let i = 0; i < 12; i++) {
      const isTwelve = i === 0;
      const isQuarter = i % 3 === 0;
      const w = isQuarter ? 11 : 7;
      const h = isQuarter ? 30 : 24;

      const g = document.createElementNS(NS, "g");
      g.setAttribute("transform", `rotate(${i * 30})`);

      const outer = document.createElementNS(NS, "rect");
      outer.setAttribute("x", -w / 2 - 1);
      outer.setAttribute("y", -143 - 1);
      outer.setAttribute("width", w + 2);
      outer.setAttribute("height", h + 2);
      outer.setAttribute("rx", 2);
      outer.setAttribute("fill", "url(#goldHand)");
      outer.setAttribute("stroke", "#2a1d08");
      outer.setAttribute("stroke-width", "0.6");
      g.appendChild(outer);

      const lume = document.createElementNS(NS, "rect");
      lume.setAttribute("x", -w / 2 + 1.5);
      lume.setAttribute("y", -141);
      lume.setAttribute("width", w - 3);
      lume.setAttribute("height", h - 4);
      lume.setAttribute("rx", 1);
      lume.setAttribute("fill", "#f4f0dc");
      lume.setAttribute("opacity", "0.92");
      g.appendChild(lume);

      indices.appendChild(g);
    }

    // Hand references
    const hour = document.getElementById("hourHand");
    const minute = document.getElementById("minuteHand");
    const second = document.getElementById("secondHand");
    const dateText = document.getElementById("dateText");
    let lastDate = -1;

    function frame() {
      const now = new Date();
      const ms = now.getMilliseconds();

      // Continuous sweep for the seconds hand
      const sec = now.getSeconds() + ms / 1000;
      const min = now.getMinutes() + sec / 60;
      const hr = (now.getHours() % 12) + min / 60;

      second.setAttribute("transform", `rotate(${(sec * 6).toFixed(3)})`);
      minute.setAttribute("transform", `rotate(${(min * 6).toFixed(3)})`);
      hour.setAttribute("transform", `rotate(${(hr * 30).toFixed(3)})`);

      const day = now.getDate();
      if (day !== lastDate) {
        dateText.textContent = String(day);
        lastDate = day;
      }

      requestAnimationFrame(frame);
    }

    requestAnimationFrame(frame);
  })();
</script>
</body>
</html>

Compare with

Claude Haiku 5.5: other attempts