hypeorcode
Network offOpen alone (new tab)

Run details

Model
deepseek/deepseek-v4.1-flash-1017
Route
OpenRouter API, one user message
Reasoning
provider default, 12,569 reasoning tokens
Limits
60 min · 393,216 output tokens
Date
21 Oct 2026
Time
2 min 20 s
Size
14 kB
Tokens
79 in, 17,288 out
List price
$0.010 ($0.15 in / $0.6 out per M)
Paid
$0.009

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

14 kB 362 lines Raw

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Aurelius Genève — Automatique</title>
<style>
  html,body{height:100%;margin:0;}
  body{
    display:flex;align-items:center;justify-content:center;
    background:radial-gradient(ellipse at 50% 32%,#242b38 0%,#12161d 46%,#05070a 100%);
    overflow:hidden;
  }
  .stage{
    width:min(88vmin,660px);
    aspect-ratio:1/1;
    filter:drop-shadow(0 3.2vmin 4.5vmin rgba(0,0,0,.85));
  }
  svg{width:100%;height:100%;display:block;overflow:visible;}
</style>
</head>
<body>
<div class="stage">
<svg viewBox="0 0 400 400" xmlns="http://www.w3.org/2000/svg">
  <defs>
    <!-- ============ METALS ============ -->
    <linearGradient id="caseGrad" x1="0%" y1="0%" x2="100%" y2="100%">
      <stop offset="0%"   stop-color="#fff8dc"/>
      <stop offset="14%"  stop-color="#e8ca82"/>
      <stop offset="34%"  stop-color="#a67e30"/>
      <stop offset="50%"  stop-color="#6d4f13"/>
      <stop offset="66%"  stop-color="#b78e3c"/>
      <stop offset="86%"  stop-color="#f2dc9a"/>
      <stop offset="100%" stop-color="#fffdf0"/>
    </linearGradient>

    <linearGradient id="bezelGrad" x1="0%" y1="0%" x2="100%" y2="100%">
      <stop offset="0%"   stop-color="#fffbe8"/>
      <stop offset="20%"  stop-color="#dcbc6d"/>
      <stop offset="45%"  stop-color="#7b5a18"/>
      <stop offset="55%"  stop-color="#9a742a"/>
      <stop offset="78%"  stop-color="#f0d995"/>
      <stop offset="100%" stop-color="#fffef5"/>
    </linearGradient>

    <linearGradient id="lugGrad" x1="0%" y1="0%" x2="100%" y2="0%">
      <stop offset="0%"   stop-color="#8a6a22"/>
      <stop offset="35%"  stop-color="#e6c980"/>
      <stop offset="60%"  stop-color="#b98f3c"/>
      <stop offset="100%" stop-color="#6b4d12"/>
    </linearGradient>

    <!-- ============ DIAL ============ -->
    <radialGradient id="dialGrad" cx="50%" cy="40%" r="76%">
      <stop offset="0%"   stop-color="#21508f"/>
      <stop offset="35%"  stop-color="#163667"/>
      <stop offset="68%"  stop-color="#0c1e3d"/>
      <stop offset="90%"  stop-color="#071427"/>
      <stop offset="100%" stop-color="#040b18"/>
    </radialGradient>

    <radialGradient id="vignette" cx="50%" cy="50%" r="50%">
      <stop offset="72%"  stop-color="#000000" stop-opacity="0"/>
      <stop offset="100%" stop-color="#000000" stop-opacity="0.62"/>
    </radialGradient>

    <radialGradient id="glareGrad" cx="50%" cy="50%" r="50%">
      <stop offset="0%"   stop-color="#ffffff" stop-opacity="0.55"/>
      <stop offset="55%"  stop-color="#cfe4ff" stop-opacity="0.14"/>
      <stop offset="100%" stop-color="#ffffff" stop-opacity="0"/>
    </radialGradient>

    <!-- ============ HANDS ============ -->
    <linearGradient id="handLight" x1="0%" y1="0%" x2="100%" y2="0%">
      <stop offset="0%"   stop-color="#fff9e2"/>
      <stop offset="55%"  stop-color="#f3dd9d"/>
      <stop offset="100%" stop-color="#c8a353"/>
    </linearGradient>

    <linearGradient id="handDark" x1="0%" y1="0%" x2="100%" y2="0%">
      <stop offset="0%"   stop-color="#a87e2c"/>
      <stop offset="55%"  stop-color="#c9a253"/>
      <stop offset="100%" stop-color="#8a6520"/>
    </linearGradient>

    <linearGradient id="goldText" x1="0%" y1="0%" x2="100%" y2="100%">
      <stop offset="0%"   stop-color="#fff3c4"/>
      <stop offset="45%"  stop-color="#e2c47c"/>
      <stop offset="100%" stop-color="#a8812f"/>
    </linearGradient>

    <!-- ============ DATE WINDOW ============ -->
    <linearGradient id="dateShadow" x1="0%" y1="0%" x2="0%" y2="100%">
      <stop offset="0%"   stop-color="#000000" stop-opacity="0.42"/>
      <stop offset="55%"  stop-color="#000000" stop-opacity="0"/>
      <stop offset="100%" stop-color="#000000" stop-opacity="0"/>
    </linearGradient>

    <!-- ============ FILTERS / CLIPS ============ -->
    <filter id="handShadow" filterUnits="userSpaceOnUse" x="0" y="0" width="400" height="400">
      <feDropShadow dx="1.6" dy="2.6" stdDeviation="2.2" flood-color="#000" flood-opacity="0.6"/>
    </filter>

    <clipPath id="dialClip"><circle cx="200" cy="200" r="155"/></clipPath>
  </defs>

  <!-- ================= LUGS ================= -->
  <g fill="url(#lugGrad)">
    <rect x="159" y="-10" width="23" height="62" rx="10"/>
    <rect x="218" y="-10" width="23" height="62" rx="10"/>
    <rect x="159" y="348" width="23" height="62" rx="10"/>
    <rect x="218" y="348" width="23" height="62" rx="10"/>
  </g>

  <!-- ================= CASE ================= -->
  <circle cx="200" cy="200" r="182" fill="url(#caseGrad)"/>
  <g id="coinEdge"></g>
  <circle cx="200" cy="200" r="181" fill="none" stroke="#fffbe8" stroke-opacity="0.5" stroke-width="1.4"/>
  <circle cx="200" cy="200" r="163" fill="none" stroke="#6b4d12" stroke-opacity="0.55" stroke-width="1.2"/>

  <!-- bezel inner slope -->
  <circle cx="200" cy="200" r="158" fill="none" stroke="url(#bezelGrad)" stroke-width="9"/>

  <!-- ================= DIAL ================= -->
  <circle cx="200" cy="200" r="155" fill="url(#dialGrad)"/>

  <g clip-path="url(#dialClip)">
    <!-- sunburst brushing -->
    <g id="sunburst"></g>

    <!-- depth vignette -->
    <circle cx="200" cy="200" r="155" fill="url(#vignette)"/>
  </g>

  <!-- minute track -->
  <g id="minuteTrack"></g>

  <!-- applied hour indices -->
  <g id="indices" filter="url(#handShadow)"></g>

  <!-- ================= DATE WINDOW ================= -->
  <g>
    <rect x="306" y="186" width="34" height="28" rx="2.5"
          fill="#f4efe2" stroke="url(#goldText)" stroke-width="2.6"/>
    <rect x="307.4" y="187.4" width="31.2" height="25.2" rx="1.6" fill="url(#dateShadow)"/>
    <text id="dateNum" x="323" y="207.4" text-anchor="middle"
          font-family="Georgia,'Times New Roman',serif" font-size="18"
          font-weight="600" fill="#101010">1</text>
  </g>

  <!-- ================= DIAL TEXT ================= -->
  <g font-family="Georgia,'Times New Roman',serif" text-anchor="middle">
    <text x="200" y="136" font-size="15.5" letter-spacing="5.5" fill="url(#goldText)">AURELIUS</text>
    <text x="200" y="154" font-size="7" letter-spacing="3.4" fill="#c2a86a">GENÈVE</text>
    <text x="200" y="258" font-size="7.5" letter-spacing="2.8" fill="#c2a86a">AUTOMATIQUE</text>
    <text x="200" y="300" font-size="6" letter-spacing="3.4" fill="#8f7c52">SWISS MADE</text>
  </g>

  <!-- ================= HANDS ================= -->
  <g filter="url(#handShadow)">
    <!-- hour hand -->
    <g id="hourHand" transform="rotate(0 200 200)">
      <g transform="translate(200,200)">
        <path d="M0,-88 L-7.2,-30 L-5,20 L0,20 Z" fill="url(#handLight)"/>
        <path d="M0,-88 L7.2,-30 L5,20 L0,20 Z"  fill="url(#handDark)"/>
        <line x1="0" y1="-85" x2="0" y2="18" stroke="#6b4d12" stroke-width="0.8" opacity="0.5"/>
      </g>
    </g>

    <!-- minute hand -->
    <g id="minuteHand" transform="rotate(0 200 200)">
      <g transform="translate(200,200)">
        <path d="M0,-133 L-6.4,-46 L-4.4,22 L0,22 Z" fill="url(#handLight)"/>
        <path d="M0,-133 L6.4,-46 L4.4,22 L0,22 Z"  fill="url(#handDark)"/>
        <line x1="0" y1="-130" x2="0" y2="20" stroke="#6b4d12" stroke-width="0.75" opacity="0.5"/>
      </g>
    </g>

    <!-- sweeping seconds hand (blued steel) -->
    <g id="secondHand" transform="rotate(0 200 200)">
      <line x1="200" y1="228" x2="200" y2="60" stroke="#2f5aa0" stroke-width="1.7" stroke-linecap="round"/>
      <circle cx="200" cy="228" r="6.2" fill="#2f5aa0"/>
      <circle cx="200" cy="228" r="2.2" fill="#12243f"/>
      <circle cx="200" cy="61" r="5.2" fill="none" stroke="#2f5aa0" stroke-width="1.9"/>
    </g>
  </g>

  <!-- centre cap -->
  <g>
    <circle cx="200" cy="200" r="6.4" fill="url(#goldText)"/>
    <circle cx="200" cy="200" r="3.4" fill="#8a6520"/>
    <circle cx="199" cy="198.6" r="1.6" fill="#fff6d8" opacity="0.9"/>
  </g>

  <!-- ================= CRYSTAL GLARE ================= -->
  <g clip-path="url(#dialClip)">
    <ellipse cx="128" cy="118" rx="150" ry="72" fill="url(#glareGrad)"
             transform="rotate(-34 128 118)" opacity="0.55"/>
    <ellipse cx="272" cy="292" rx="120" ry="52" fill="url(#glareGrad)"
             transform="rotate(-34 272 292)" opacity="0.22"/>
  </g>
</svg>
</div>

<script>
(function () {
  "use strict";
  var NS = "http://www.w3.org/2000/svg";
  var CX = 200, CY = 200;

  /* ---------------------------------------------------------
     1. Sunburst brushing on the dial
     --------------------------------------------------------- */
  (function buildSunburst() {
    var host = document.getElementById("sunburst");
    var frag = document.createDocumentFragment();
    for (var i = 0; i < 240; i++) {
      var a = (i * 1.5) * Math.PI / 180;
      var ln = document.createElementNS(NS, "line");
      ln.setAttribute("x1", CX + Math.sin(a) * 12);
      ln.setAttribute("y1", CY - Math.cos(a) * 12);
      ln.setAttribute("x2", CX + Math.sin(a) * 156);
      ln.setAttribute("y2", CY - Math.cos(a) * 156);
      ln.setAttribute("stroke", (i % 2) ? "#8fbaff" : "#2f6ab5");
      ln.setAttribute("stroke-width", (i % 2) ? 0.9 : 1.25);
      ln.setAttribute("stroke-opacity", (i % 2) ? 0.035 : 0.065);
      frag.appendChild(ln);
    }
    host.appendChild(frag);
  })();

  /* ---------------------------------------------------------
     2. Coin edge (fluted) detail on the case band
     --------------------------------------------------------- */
  (function buildCoinEdge() {
    var host = document.getElementById("coinEdge");
    var frag = document.createDocumentFragment();
    for (var i = 0; i < 132; i++) {
      var a = (i * (360 / 132)) * Math.PI / 180;
      var ln = document.createElementNS(NS, "line");
      ln.setAttribute("x1", CX + Math.sin(a) * 171);
      ln.setAttribute("y1", CY - Math.cos(a) * 171);
      ln.setAttribute("x2", CX + Math.sin(a) * 180.5);
      ln.setAttribute("y2", CY - Math.cos(a) * 180.5);
      ln.setAttribute("stroke", i % 2 ? "#5f4410" : "#fff3cc");
      ln.setAttribute("stroke-width", 1.1);
      ln.setAttribute("stroke-opacity", i % 2 ? 0.35 : 0.30);
      ln.setAttribute("stroke-linecap", "round");
      frag.appendChild(ln);
    }
    host.appendChild(frag);
  })();

  /* ---------------------------------------------------------
     3. Minute track  (60 ticks, longer every 5 min)
     --------------------------------------------------------- */
  (function buildMinuteTrack() {
    var host = document.getElementById("minuteTrack");
    var frag = document.createDocumentFragment();
    for (var i = 0; i < 60; i++) {
      if (i === 15) continue;                 /* gap for date window at 3 o'clock */
      var a = (i * 6) * Math.PI / 180;
      var isFive = (i % 5 === 0);
      var r1 = isFive ? 137 : 143.5;
      var r2 = 151;
      var ln = document.createElementNS(NS, "line");
      ln.setAttribute("x1", CX + Math.sin(a) * r1);
      ln.setAttribute("y1", CY - Math.cos(a) * r1);
      ln.setAttribute("x2", CX + Math.sin(a) * r2);
      ln.setAttribute("y2", CY - Math.cos(a) * r2);
      ln.setAttribute("stroke", isFive ? "#e9d296" : "#8d7a50");
      ln.setAttribute("stroke-width", isFive ? 2.3 : 1.05);
      ln.setAttribute("stroke-linecap", "round");
      frag.appendChild(ln);
    }
    host.appendChild(frag);
  })();

  /* ---------------------------------------------------------
     4. Applied hour indices (faceted gold batons)
     --------------------------------------------------------- */
  (function buildIndices() {
    var host = document.getElementById("indices");
    var frag = document.createDocumentFragment();

    function baton(angleDeg, offsetX) {
      var g = document.createElementNS(NS, "g");
      g.setAttribute("transform",
        "rotate(" + angleDeg + " " + CX + " " + CY + ") translate(" + offsetX + ",0)");

      var outer = document.createElementNS(NS, "rect");
      outer.setAttribute("x", CX - 3.1);
      outer.setAttribute("y", CY - 134);
      outer.setAttribute("width", 6.2);
      outer.setAttribute("height", 23);
      outer.setAttribute("rx", 1.1);
      outer.setAttribute("fill", "url(#handLight)");
      g.appendChild(outer);

      var inner = document.createElementNS(NS, "rect");
      inner.setAttribute("x", CX + 0.35);
      inner.setAttribute("y", CY - 134);
      inner.setAttribute("width", 2.75);
      inner.setAttribute("height", 23);
      inner.setAttribute("rx", 0.8);
      inner.setAttribute("fill", "url(#handDark)");
      g.appendChild(inner);

      return g;
    }

    for (var i = 0; i < 12; i++) {
      if (i === 3) continue;               /* replaced by the date window */
      var ang = i * 30;
      if (i === 0) {
        frag.appendChild(baton(ang, -8.5));
        frag.appendChild(baton(ang,  8.5));
      } else {
        frag.appendChild(baton(ang, 0));
      }
    }
    host.appendChild(frag);
  })();

  /* ---------------------------------------------------------
     5. Live time — smooth sweeping seconds hand
     --------------------------------------------------------- */
  var hourHand   = document.getElementById("hourHand");
  var minuteHand = document.getElementById("minuteHand");
  var secondHand = document.getElementById("secondHand");
  var dateNum    = document.getElementById("dateNum");
  var lastDate   = 0;

  function rot(el, deg) {
    el.setAttribute("transform", "rotate(" + deg.toFixed(4) + " " + CX + " " + CY + ")");
  }

  function render() {
    var now = new Date();
    var ms  = now.getMilliseconds();
    var s   = now.getSeconds() + ms / 1000;
    var m   = now.getMinutes() + s / 60;
    var h   = (now.getHours() % 12) + m / 60;

    rot(secondHand, s * 6);
    rot(minuteHand, m * 6);
    rot(hourHand,   h * 30);

    var d = now.getDate();
    if (d !== lastDate) {
      dateNum.textContent = d;
      lastDate = d;
    }

    requestAnimationFrame(render);
  }

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

Compare with

DeepSeek V4.1 Flash 1017: other attempts