• Updated 23 Oct, 19:41 UTC
  • Next run 24 Oct, 05:17 UTCNext 24 Oct 05:17
  • Last 7 days: 5 new models, 196 runs7 d: 5 models, 196 runs
Wristwatch that shows the current time

Ember-1Fireworks

Network offOpen alone (new tab)

Run details

Model
fireworks/ember-1
Route
OpenRouter API, one user message
Served by
Fireworks
Effort
max, OpenRouter's default for this model
Limits
60 min · 40,000 output tokens (our $0.60 limit per run at $15/M)
Date
23 Oct 2026
Time
5 min 11 s
Size
13 kB
Tokens
164 in, 23,775 out (18,746 of them thinking)
List price
$0.36 at today's price ($3 in / $15 out per M)
Paid
$0.36

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

13 kB 268 lines Raw

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Meridian Genève — Automatic Chronometer</title>
<style>
  html,body{height:100%;margin:0;}
  body{
    display:flex;align-items:center;justify-content:center;overflow:hidden;
    background:radial-gradient(140vmax 90vmax at 50% 18%, #454e5e 0%, #23272f 42%, #0a0c10 100%);
  }
  svg{
    height:min(96vh,160vw);width:auto;display:block;
    filter:drop-shadow(0 34px 44px rgba(0,0,0,.65)) drop-shadow(0 6px 14px rgba(0,0,0,.5));
  }
</style>
</head>
<body>
<svg id="watch" viewBox="0 0 600 1000" role="img" aria-label="Luxury mechanical wristwatch showing the current local time">
  <defs>
    <!-- polished steel -->
    <linearGradient id="steel" x1="0" y1="0" x2="1" y2="1">
      <stop offset="0" stop-color="#f5f6f8"/><stop offset=".35" stop-color="#b7bac2"/>
      <stop offset=".55" stop-color="#eaecee"/><stop offset=".78" stop-color="#7d818a"/>
      <stop offset="1" stop-color="#c9ccd2"/>
    </linearGradient>
    <!-- polished bezel -->
    <linearGradient id="bezel" x1="0" y1="0" x2="1" y2="1">
      <stop offset="0" stop-color="#ffffff"/><stop offset=".25" stop-color="#ced1d8"/>
      <stop offset=".5" stop-color="#898d96"/><stop offset=".62" stop-color="#e0e2e7"/>
      <stop offset=".82" stop-color="#73777e"/><stop offset="1" stop-color="#babdc3"/>
    </linearGradient>
    <linearGradient id="idx" x1="0" y1="0" x2="1" y2="0">
      <stop offset="0" stop-color="#f7f8fa"/><stop offset=".5" stop-color="#a6aab3"/>
      <stop offset="1" stop-color="#e9ebef"/>
    </linearGradient>
    <radialGradient id="capG" cx=".4" cy=".35" r=".8">
      <stop offset="0" stop-color="#f3f4f6"/><stop offset="1" stop-color="#9ba0a9"/>
    </radialGradient>
    <!-- deep blue sunburst dial -->
    <radialGradient id="dial" cx=".5" cy=".42" r=".78">
      <stop offset="0" stop-color="#3a5c92"/><stop offset=".55" stop-color="#1b3050"/>
      <stop offset="1" stop-color="#091525"/>
    </radialGradient>
    <radialGradient id="dialLight" cx=".38" cy=".32" r=".75">
      <stop offset="0" stop-color="#ffffff" stop-opacity=".17"/>
      <stop offset=".6" stop-color="#ffffff" stop-opacity=".03"/>
      <stop offset="1" stop-color="#ffffff" stop-opacity="0"/>
    </radialGradient>
    <radialGradient id="rehautG" cx=".5" cy=".5" r=".5">
      <stop offset="0" stop-color="#2b323d"/><stop offset=".82" stop-color="#1a2029"/>
      <stop offset="1" stop-color="#0d1117"/>
    </radialGradient>
    <linearGradient id="leather" x1="0" y1="0" x2="0" y2="1">
      <stop offset="0" stop-color="#5b4027"/><stop offset=".45" stop-color="#382716"/>
      <stop offset="1" stop-color="#1e140b"/>
    </linearGradient>
    <linearGradient id="glareG" x1="0" y1="0" x2="0" y2="1">
      <stop offset="0" stop-color="#ffffff" stop-opacity=".15"/>
      <stop offset="1" stop-color="#ffffff" stop-opacity="0"/>
    </linearGradient>
    <radialGradient id="spotG" cx=".5" cy=".5" r=".5">
      <stop offset="0" stop-color="#ffffff" stop-opacity=".2"/>
      <stop offset="1" stop-color="#ffffff" stop-opacity="0"/>
    </radialGradient>
    <linearGradient id="dshade" x1="0" y1="0" x2="0" y2="1">
      <stop offset="0" stop-color="#000" stop-opacity=".3"/>
      <stop offset="1" stop-color="#000" stop-opacity="0"/>
    </linearGradient>

    <filter id="hs" x="-40%" y="-40%" width="180%" height="180%">
      <feDropShadow dx="1.5" dy="4" stdDeviation="3" flood-color="#000" flood-opacity=".42"/>
    </filter>
    <filter id="lumeGlow" x="-80%" y="-80%" width="260%" height="260%">
      <feGaussianBlur stdDeviation="1.6" result="b"/>
      <feMerge><feMergeNode in="b"/><feMergeNode in="SourceGraphic"/></feMerge>
    </filter>
    <filter id="caseShadow" x="-30%" y="-30%" width="160%" height="160%">
      <feDropShadow dx="0" dy="10" stdDeviation="12" flood-color="#000" flood-opacity=".55"/>
    </filter>
    <filter id="grain" x="0" y="0" width="100%" height="100%">
      <feTurbulence type="fractalNoise" baseFrequency="0.9" numOctaves="2" stitchTiles="stitch" result="n"/>
      <feColorMatrix in="n" type="matrix"
        values="0 0 0 0 0  0 0 0 0 0  0 0 0 0 0  0.8 0.8 0.8 0 0"/>
    </filter>

    <clipPath id="dialClip"><circle cx="300" cy="500" r="176"/></clipPath>
    <clipPath id="crystal"><circle cx="300" cy="500" r="206"/></clipPath>
    <clipPath id="strapClip">
      <path d="M215 6 Q214 2 224 2 L376 2 Q386 2 385 6 C392 110 400 210 402 330 L198 330 C200 210 208 110 215 6 Z"/>
      <path d="M198 670 C200 790 208 890 215 994 Q214 998 224 998 L376 998 Q386 998 385 994 C392 890 400 790 402 670 Z"/>
    </clipPath>
  </defs>

  <!-- ===== leather strap ===== -->
  <g fill="url(#leather)" stroke="rgba(0,0,0,.55)" stroke-width="1.5">
    <path d="M215 6 Q214 2 224 2 L376 2 Q386 2 385 6 C392 110 400 210 402 330 L198 330 C200 210 208 110 215 6 Z"/>
    <path d="M198 670 C200 790 208 890 215 994 Q214 998 224 998 L376 998 Q386 998 385 994 C392 890 400 790 402 670 Z"/>
  </g>
  <rect x="150" y="0" width="300" height="1000" filter="url(#grain)" opacity=".22" clip-path="url(#strapClip)"/>
  <g fill="none" stroke="#c9b183" stroke-width="2" stroke-dasharray="6 5" opacity=".75">
    <path d="M226 10 C232 110 240 210 242 326"/>
    <path d="M374 10 C368 110 360 210 358 326"/>
    <path d="M242 674 C240 790 232 890 226 990"/>
    <path d="M358 674 C360 790 368 890 374 990"/>
  </g>

  <!-- ===== lugs ===== -->
  <g fill="url(#steel)" stroke="#4d525a" stroke-width=".8">
    <g transform="rotate(-32 300 500)"><rect x="285" y="238" width="30" height="72" rx="10"/></g>
    <g transform="rotate(32 300 500)"><rect x="285" y="238" width="30" height="72" rx="10"/></g>
    <g transform="rotate(148 300 500)"><rect x="285" y="238" width="30" height="72" rx="10"/></g>
    <g transform="rotate(212 300 500)"><rect x="285" y="238" width="30" height="72" rx="10"/></g>
  </g>

  <!-- ===== case / bezel / crown ===== -->
  <circle cx="300" cy="500" r="212" fill="url(#steel)" filter="url(#caseShadow)"/>
  <circle cx="300" cy="500" r="211" fill="none" stroke="rgba(255,255,255,.25)" stroke-width="1"/>
  <circle cx="300" cy="500" r="206" fill="url(#bezel)"/>
  <circle cx="300" cy="500" r="205" fill="none" stroke="rgba(255,255,255,.55)" stroke-width="1.2"/>
  <path d="M101 500 A199 199 0 0 1 399.5 327.6" fill="none" stroke="#fff" stroke-opacity=".3" stroke-width="3" stroke-linecap="round"/>
  <path d="M499 500 A199 199 0 0 1 399.5 672.4" fill="none" stroke="#fff" stroke-opacity=".12" stroke-width="2.5" stroke-linecap="round"/>
  <circle cx="300" cy="500" r="188.5" fill="none" stroke="rgba(0,0,0,.55)" stroke-width="2.5"/>
  <g>
    <rect x="506" y="493" width="14" height="14" rx="2" fill="#6f747d"/>
    <rect x="517" y="482" width="24" height="36" rx="8" fill="url(#steel)" stroke="#54595f" stroke-width="1"/>
    <g id="knurl"></g>
    <line x1="519.5" y1="486" x2="519.5" y2="514" stroke="rgba(255,255,255,.55)" stroke-width="1.5"/>
  </g>

  <!-- ===== rehaut + dial ===== -->
  <circle cx="300" cy="500" r="188" fill="url(#rehautG)"/>
  <g id="ticks"></g>
  <circle cx="300" cy="500" r="176" fill="url(#dial)"/>
  <g clip-path="url(#dialClip)">
    <g id="sunburst"></g>
    <circle cx="300" cy="500" r="176" fill="url(#dialLight)"/>
  </g>
  <circle cx="300" cy="500" r="177" fill="none" stroke="#000" stroke-opacity=".5" stroke-width="2"/>

  <!-- ===== indices, logo, text ===== -->
  <g id="indices"></g>
  <g id="logo"></g>
  <text x="300" y="430" text-anchor="middle" fill="#e9edf3"
        style="font-family:Georgia,'Times New Roman',serif;font-size:25px;letter-spacing:5px">MERIDIAN</text>
  <text x="300" y="449" text-anchor="middle" fill="#aab3c0"
        style="font-family:'Helvetica Neue',Arial,sans-serif;font-size:10px;letter-spacing:6px">GENÈVE</text>
  <text x="300" y="566" text-anchor="middle" fill="#c6cdd8"
        style="font-family:'Helvetica Neue',Arial,sans-serif;font-size:11px;letter-spacing:3.5px">AUTOMATIC</text>
  <text x="300" y="583" text-anchor="middle" fill="#98a1af"
        style="font-family:'Helvetica Neue',Arial,sans-serif;font-size:9px;letter-spacing:3px">CHRONOMETER</text>
  <text x="300" y="657" text-anchor="middle" fill="#878f9d"
        style="font-family:'Helvetica Neue',Arial,sans-serif;font-size:8px;letter-spacing:2.5px">SWISS MADE</text>

  <!-- ===== date window at 3 ===== -->
  <g>
    <rect x="420.5" y="486.5" width="44" height="32" rx="4.5" fill="#000" fill-opacity=".4"/>
    <rect x="419" y="484" width="44" height="32" rx="4.5" fill="#0e1218" stroke="#cfd3da" stroke-width="2"/>
    <rect x="422" y="487" width="38" height="26" rx="2.5" fill="#f4f5f7"/>
    <rect x="422" y="487" width="38" height="6" fill="url(#dshade)"/>
    <text id="dateNum" x="441" y="506.5" text-anchor="middle" fill="#14171c"
          style="font-family:'Helvetica Neue',Arial,sans-serif;font-size:19px;font-weight:700">1</text>
  </g>

  <!-- ===== hands ===== -->
  <g id="hourHand" filter="url(#hs)">
    <path d="M300 516 L293.5 509 L298.7 403 L300 397.5 Z" fill="#f7f8fa" stroke="#3f444c" stroke-width=".5"/>
    <path d="M300 516 L306.5 509 L301.3 403 L300 397.5 Z" fill="#9aa0a9" stroke="#3f444c" stroke-width=".5"/>
    <path d="M300 462 L297.7 456 L299.3 414 L300.7 414 L302.3 456 Z" fill="#e7f2e2" filter="url(#lumeGlow)"/>
  </g>
  <g id="minHand" filter="url(#hs)">
    <path d="M300 516 L295 509 L299.1 355 L300 349.5 Z" fill="#f7f8fa" stroke="#3f444c" stroke-width=".5"/>
    <path d="M300 516 L305 509 L300.9 355 L300 349.5 Z" fill="#9aa0a9" stroke="#3f444c" stroke-width=".5"/>
    <path d="M300 470 L297.9 465 L299.4 396 L300.6 396 L302.1 465 Z" fill="#e7f2e2" filter="url(#lumeGlow)"/>
  </g>
  <g id="secHand" filter="url(#hs)">
    <rect x="299.1" y="334" width="1.8" height="202" fill="#eef0f3"/>
    <rect x="300" y="334" width="0.9" height="202" fill="#b4b9c1"/>
    <circle cx="300" cy="527" r="8" fill="#eef0f3" stroke="#7a7f88" stroke-width="1"/>
    <circle cx="300" cy="527" r="3.2" fill="#121a26"/>
  </g>
  <circle cx="300" cy="500" r="7" fill="url(#capG)" stroke="#4b5057" stroke-width=".8"/>
  <circle cx="300" cy="500" r="2.2" fill="#22262d"/>

  <!-- ===== crystal glare ===== -->
  <g clip-path="url(#crystal)">
    <ellipse cx="245" cy="395" rx="170" ry="95" transform="rotate(-28 245 395)" fill="url(#glareG)"/>
    <ellipse cx="380" cy="620" rx="120" ry="50" transform="rotate(-28 380 620)" fill="url(#glareG)" opacity=".4"/>
    <circle cx="228" cy="358" r="95" fill="url(#spotG)"/>
  </g>
</svg>

<script>
(function(){
  const NS='http://www.w3.org/2000/svg';
  const CX=300, CY=500;
  const G=id=>document.getElementById(id);
  function E(t,a,p){const e=document.createElementNS(NS,t);for(const k in a)e.setAttribute(k,a[k]);p.appendChild(e);return e;}

  // sunburst brushing: 180 fine wedges
  const sun=G('sunburst'), R=176;
  for(let i=0;i<180;i++){
    const a=i*2*Math.PI/180, b=(i+1.7)*2*Math.PI/180;
    E('path',{d:`M${CX} ${CY} L${(CX+R*Math.cos(a)).toFixed(1)} ${(CY+R*Math.sin(a)).toFixed(1)} L${(CX+R*Math.cos(b)).toFixed(1)} ${(CY+R*Math.sin(b)).toFixed(1)} Z`,
      fill:'#ffffff', opacity:(i%2?0.055:0.015)}, sun);
  }

  // minute track on the rehaut
  const tk=G('ticks');
  for(let i=0;i<60;i++){
    const a=i*6*Math.PI/180, hr=i%5===0, r1=hr?179:182.5, r2=187.5;
    E('line',{x1:(CX+r1*Math.cos(a)).toFixed(2), y1:(CY+r1*Math.sin(a)).toFixed(2),
              x2:(CX+r2*Math.cos(a)).toFixed(2), y2:(CY+r2*Math.sin(a)).toFixed(2),
              stroke:hr?'#e2e6ee':'#7c8492', 'stroke-width':hr?2.6:1.2, 'stroke-linecap':'round'}, tk);
  }

  // applied baton indices (double baton at 12, date replaces 3)
  const idx=G('indices');
  for(let h=0;h<12;h++){
    if(h===3) continue;
    const g=E('g',{transform:`rotate(${h*30} ${CX} ${CY})`}, idx);
    const bs = h===0 ? [{x:CX-10.5,w:8},{x:CX+2.5,w:8}] : [{x:CX-4.5,w:9}];
    bs.forEach(b=>{
      E('rect',{x:b.x+1.4, y:CY-155.6, width:b.w, height:30, rx:1.5, fill:'#000', 'fill-opacity':.38}, g);
      E('rect',{x:b.x, y:CY-158, width:b.w, height:30, rx:1.5, fill:'url(#idx)', stroke:'#3c414a', 'stroke-width':.5}, g);
      const lw=b.w>=9?4:3;
      E('rect',{x:b.x+(b.w-lw)/2, y:CY-150, width:lw, height:18, rx:1, fill:'#e7f2e2', filter:'url(#lumeGlow)'}, g);
    });
  }

  // star logo
  (function(){
    let d='';
    for(let i=0;i<10;i++){
      const r=i%2?4:9.5, a=-Math.PI/2+i*Math.PI/5;
      d+=(i?'L':'M')+(CX+r*Math.cos(a)).toFixed(1)+' '+(388+r*Math.sin(a)).toFixed(1);
    }
    E('path',{d:d+'Z', fill:'url(#steel)', stroke:'#4e535b', 'stroke-width':.6}, G('logo'));
  })();

  // crown knurling
  const kn=G('knurl');
  for(let x=523;x<=536;x+=3.2)
    E('line',{x1:x, y1:485, x2:x, y2:515, stroke:'rgba(0,0,0,.32)', 'stroke-width':1.6}, kn);

  // timekeeping — hi-beat sweep: 10 micro-steps per second (36,000 vph)
  const hour=G('hourHand'), min=G('minHand'), sec=G('secHand'), date=G('dateNum');
  const RM=matchMedia('(prefers-reduced-motion: reduce)').matches;
  const STEP=RM?1000:100;
  let lastDay=-1;
  function tick(){
    const n=new Date();
    const s=n.getSeconds()+Math.floor(n.getMilliseconds()/STEP)*(STEP/1000);
    const m=n.getMinutes()+s/60;
    const h=(n.getHours()%12)+m/60;
    sec .setAttribute('transform',`rotate(${s*6} ${CX} ${CY})`);
    min .setAttribute('transform',`rotate(${m*6} ${CX} ${CY})`);
    hour.setAttribute('transform',`rotate(${h*30} ${CX} ${CY})`);
    const d=n.getDate();
    if(d!==lastDay){date.textContent=d; lastDay=d;}
    requestAnimationFrame(tick);
  }
  tick();
})();
</script>
</body>
</html>

Compare with

Ember-1: other attempts