claude-sonnet-4-6-thinking @ medium · cursor

cursormedium
config
claude-sonnet-4-6-thinking-eff-medium--cli--cursor--dev
batch
2026-07-19--unified
transport
cursor-agent-cli-isolated-home
protocol
cli · plan
served model
claude-4.6-sonnet-medium-thinking
captured
Jul 18, 2026, 11:54 AM · N=2
variant
live
slot 0 · P-q · sandboxed iframe
claude-sonnet-4-6-thinking @medium · cursor P-q slot 0 screenshot

The screenshot is the exact frozen pixels the similarity channels measured. Run live re-executes the raw output in a sandboxed iframe; its rendering depends on your browser and fonts and is not guaranteed to match the measured pixels.

similarity neighbors

within session 2026-07-19--unified

similarity measures convergence within this session — not quality.

Fidelity — does the card show the right data?

  • namematch
  • conditionmatch
  • datematch
  • max tempambiguousinsufficient-distinct-temperature-nodes
  • min tempambiguousinsufficient-distinct-temperature-nodes
  • hourlyambiguouscoverage · 0 match · 0 mismatch · 24 not shown
  • request sidematch0 violation(s)

extractor fidelity-extractor-v1+Berlin-2026-07-15

Source — raw model output, one byte unchanged

download card.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=1280">
<title>Weather</title>
<style>
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }

html, body {
  width: 1280px;
  height: 800px;
  overflow: hidden;
}

body {
  display: flex;
  align-items: center;
  justify-content: center;
  font-family: -apple-system, BlinkMacSystemFont, 'SF Pro Display', 'Segoe UI', system-ui, sans-serif;
  background: #09101e;
}

/* ── Background ─────────────────────────────────────── */
#bg {
  position: fixed;
  inset: 0;
  overflow: hidden;
  z-index: 0;
}

#bg-grad {
  position: absolute;
  inset: 0;
  transition: background 1.6s ease;
  background: linear-gradient(145deg, #09101e 0%, #112038 50%, #0c1930 100%);
}

.orb {
  position: absolute;
  border-radius: 50%;
  filter: blur(96px);
  pointer-events: none;
  transition: background 1.6s ease;
}

#o1 { width: 580px; height: 580px; top: -160px; right: -100px; animation: fa 13s ease-in-out infinite; }
#o2 { width: 440px; height: 440px; bottom: -90px; left: -90px;  animation: fb 10s ease-in-out infinite; }
#o3 { width: 340px; height: 340px; top: 50%; left: 46%;
      transform: translate(-50%,-50%);                           animation: fc 16s ease-in-out infinite; }

@keyframes fa { 0%,100%{transform:translateY(0) scale(1)} 50%{transform:translateY(-40px) scale(1.07)} }
@keyframes fb { 0%,100%{transform:translateY(0) scale(1)} 50%{transform:translateY(28px) scale(0.95)} }
@keyframes fc {
  0%,100%{transform:translate(-50%,-50%) scale(1)}
  40%{transform:translate(-50%,-62%) scale(1.09)}
  80%{transform:translate(-50%,-40%) scale(0.93)}
}

/* ── Root ───────────────────────────────────────────── */
#root {
  position: relative;
  z-index: 1;
  width: 100%;
  height: 100%;
  display: flex;
  align-items: center;
  justify-content: center;
}

/* ── Loading ────────────────────────────────────────── */
#loading {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 18px;
}

.spin {
  width: 42px; height: 42px;
  border: 2.5px solid rgba(255,255,255,0.1);
  border-top-color: rgba(255,255,255,0.7);
  border-radius: 50%;
  animation: sp 0.8s linear infinite;
}
@keyframes sp { to { transform: rotate(360deg); } }

.spin-lbl {
  font-size: 14px;
  color: rgba(255,255,255,0.42);
  letter-spacing: 0.05em;
}

/* ── Error ──────────────────────────────────────────── */
#error-view {
  display: none;
  flex-direction: column;
  align-items: center;
  gap: 14px;
  text-align: center;
  max-width: 440px;
}

.err-ico  { font-size: 52px; line-height: 1; }
.err-ttl  { font-size: 21px; font-weight: 600; color: #fff; letter-spacing: -0.01em; }
.err-msg  { font-size: 14px; color: rgba(255,255,255,0.5); line-height: 1.65; }

/* ── Card ───────────────────────────────────────────── */
#weather { display: none; }

.card {
  position: relative;
  width: 880px;
  background: rgba(255,255,255,0.07);
  backdrop-filter: blur(44px) saturate(165%);
  -webkit-backdrop-filter: blur(44px) saturate(165%);
  border-radius: 40px;
  border: 1px solid rgba(255,255,255,0.13);
  box-shadow:
    0 52px 130px rgba(0,0,0,0.42),
    inset 0 0 0 0.5px rgba(255,255,255,0.05),
    inset 0 1px 0 rgba(255,255,255,0.17);
  padding: 50px 60px 46px;
  animation: cin 0.65s cubic-bezier(0.16,1,0.3,1) both;
}

@keyframes cin {
  from { opacity: 0; transform: translateY(30px) scale(0.964); }
  to   { opacity: 1; transform: none; }
}

/* Card header */
.ch {
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin-bottom: 42px;
}

.loc-wrap {
  display: flex;
  align-items: center;
  gap: 7px;
}

.loc-wrap svg { color: rgba(255,255,255,0.46); flex-shrink: 0; }

.loc-name {
  font-size: 12.5px;
  font-weight: 700;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: rgba(255,255,255,0.66);
}

.date-str {
  font-size: 13.5px;
  color: rgba(255,255,255,0.4);
  letter-spacing: 0.025em;
}

/* Card body */
.cb {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 46px;
  gap: 16px;
}

/* Temperature column */
.tc {
  flex: 1;
  display: flex;
  flex-direction: column;
}

.temp-row {
  display: flex;
  align-items: flex-start;
  gap: 2px;
  line-height: 1;
}

.tv {
  font-size: 112px;
  font-weight: 200;
  letter-spacing: -6px;
  color: #fff;
  line-height: 0.87;
}

.tu {
  font-size: 38px;
  font-weight: 300;
  color: rgba(255,255,255,0.56);
  margin-top: 11px;
  margin-left: 2px;
}

.th-lbl {
  font-size: 10.5px;
  font-weight: 700;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: rgba(255,255,255,0.26);
  margin-top: 6px;
  margin-left: 3px;
}

.cond-badge {
  margin-top: 22px;
  display: inline-flex;
  align-items: center;
  background: rgba(255,255,255,0.09);
  border: 1px solid rgba(255,255,255,0.13);
  border-radius: 100px;
  padding: 8px 18px;
  font-size: 14px;
  font-weight: 500;
  color: rgba(255,255,255,0.8);
  letter-spacing: 0.01em;
  width: fit-content;
}

.lo-row {
  margin-top: 16px;
  display: flex;
  align-items: baseline;
  gap: 5px;
}

.lo-arrow {
  font-size: 15px;
  color: rgba(128,192,255,0.82);
  line-height: 1;
}

.lo-val {
  font-size: 29px;
  font-weight: 300;
  color: rgba(128,192,255,0.9);
  letter-spacing: -0.5px;
}

.lo-lbl {
  font-size: 10px;
  font-weight: 700;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: rgba(255,255,255,0.26);
  margin-left: 4px;
  padding-bottom: 5px;
}

/* Icon column */
.ic {
  width: 210px;
  height: 200px;
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
}

.w-icon {
  width: 178px;
  height: 178px;
  filter: drop-shadow(0 10px 32px rgba(0,0,0,0.3));
  animation: wpu 5s ease-in-out infinite;
}

@keyframes wpu {
  0%,100% { filter: drop-shadow(0 10px 32px rgba(0,0,0,0.3)) brightness(1); }
  50%      { filter: drop-shadow(0 16px 44px rgba(0,0,0,0.22)) brightness(1.07); }
}

/* Divider */
.dv {
  height: 1px;
  background: linear-gradient(90deg, transparent 0%, rgba(255,255,255,0.1) 25%, rgba(255,255,255,0.1) 75%, transparent 100%);
  margin-bottom: 26px;
}

/* Chart */
.chart-lbl {
  font-size: 10px;
  font-weight: 700;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: rgba(255,255,255,0.28);
  margin-bottom: 10px;
}

#chart {
  width: 100%;
  height: 108px;
  display: block;
}
</style>
</head>
<body>

<div id="bg">
  <div id="bg-grad"></div>
  <div class="orb" id="o1"></div>
  <div class="orb" id="o2"></div>
  <div class="orb" id="o3"></div>
</div>

<div id="root">

  <div id="loading">
    <div class="spin"></div>
    <div class="spin-lbl">Loading weather data&hellip;</div>
  </div>

  <div id="error-view">
    <div class="err-ico">&#9928;&#65039;</div>
    <div class="err-ttl">Weather data unavailable</div>
    <div class="err-msg" id="error-msg">Unable to load weather data for this location and date.</div>
  </div>

  <div id="weather">
    <div class="card">

      <div class="ch">
        <div class="loc-wrap">
          <svg width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">
            <path d="M21 10c0 7-9 13-9 13S3 17 3 10a9 9 0 0 1 18 0z"/>
            <circle cx="12" cy="10" r="3"/>
          </svg>
          <span class="loc-name" id="loc-name">Berlin</span>
        </div>
        <div class="date-str" id="date-str">&mdash;</div>
      </div>

      <div class="cb">
        <div class="tc">
          <div class="temp-row">
            <span class="tv" id="hi-val">&mdash;</span>
            <span class="tu">&deg;C</span>
          </div>
          <div class="th-lbl">High Temperature</div>
          <div class="cond-badge" id="condition">&mdash;</div>
          <div class="lo-row">
            <span class="lo-arrow">&#8595;</span>
            <span class="lo-val" id="lo-val">&mdash;</span>
            <span class="lo-lbl">Low</span>
          </div>
        </div>
        <div class="ic">
          <div class="w-icon" id="w-icon"></div>
        </div>
      </div>

      <div class="dv"></div>

      <div>
        <div class="chart-lbl">24-Hour Temperature</div>
        <svg id="chart" viewBox="0 0 760 108" xmlns="http://www.w3.org/2000/svg"></svg>
      </div>

    </div>
  </div>

</div>

<script>
(function () {
  'use strict';

  /* ── URL params ─────────────────────────────────────────── */
  function getParams() {
    var p = new URLSearchParams(location.search);
    var today = new Date().toISOString().slice(0, 10);
    return {
      lat:  parseFloat(p.get('lat')  || '52.52'),
      lon:  parseFloat(p.get('lon')  || '13.405'),
      name: p.get('name') || 'Berlin',
      date: p.get('date') || today,
    };
  }

  function todayUTC() { return new Date().toISOString().slice(0, 10); }
  function isFutureOrToday(d) { return d >= todayUTC(); }

  function fmtDate(s) {
    var parts = s.split('-').map(Number);
    return new Date(Date.UTC(parts[0], parts[1] - 1, parts[2])).toLocaleDateString('en-US', {
      weekday: 'long', month: 'long', day: 'numeric', year: 'numeric', timeZone: 'UTC'
    });
  }

  /* ── WMO weather codes ──────────────────────────────────── */
  var WMO = {
    0:  ['Clear Sky',           'sun',       'clear'],
    1:  ['Mainly Clear',        'sun',       'clear'],
    2:  ['Partly Cloudy',       'partly',    'partly'],
    3:  ['Overcast',            'cloud',     'cloudy'],
    45: ['Foggy',               'fog',       'fog'],
    48: ['Freezing Fog',        'fog',       'fog'],
    51: ['Light Drizzle',       'drizzle',   'rain'],
    53: ['Drizzle',             'drizzle',   'rain'],
    55: ['Dense Drizzle',       'drizzle',   'rain'],
    56: ['Icy Drizzle',         'drizzle',   'rain'],
    57: ['Heavy Icy Drizzle',   'drizzle',   'rain'],
    61: ['Light Rain',          'rain',      'rain'],
    63: ['Rain',                'rain',      'rain'],
    65: ['Heavy Rain',          'heavyrain', 'storm'],
    66: ['Icy Rain',            'rain',      'rain'],
    67: ['Heavy Icy Rain',      'heavyrain', 'storm'],
    71: ['Light Snow',          'snow',      'snow'],
    73: ['Snow',                'snow',      'snow'],
    75: ['Heavy Snow',          'snow',      'snow'],
    77: ['Snow Grains',         'snow',      'snow'],
    80: ['Light Showers',       'rain',      'rain'],
    81: ['Showers',             'rain',      'rain'],
    82: ['Heavy Showers',       'heavyrain', 'storm'],
    85: ['Snow Showers',        'snow',      'snow'],
    86: ['Heavy Snow Showers',  'snow',      'snow'],
    95: ['Thunderstorm',        'thunder',   'thunder'],
    96: ['Thunderstorm',        'thunder',   'thunder'],
    99: ['Thunderstorm',        'thunder',   'thunder'],
  };

  function wmoInfo(code) { return WMO[code] || ['Unknown', 'cloud', 'cloudy']; }

  /* ── Themes ─────────────────────────────────────────────── */
  var THEMES = {
    clear:   { bg: 'linear-gradient(145deg,#0c1340 0%,#1a3870 45%,#b06010 100%)',
               o1:'rgba(255,178,38,0.65)', o2:'rgba(28,88,200,0.44)', o3:'rgba(255,115,18,0.3)',
               ln:'rgba(255,212,80,0.95)', f1:'rgba(255,212,80,0.32)', f2:'rgba(255,212,80,0)' },
    partly:  { bg: 'linear-gradient(145deg,#0d1b36 0%,#1e4072 50%,#3c6ea5 100%)',
               o1:'rgba(198,215,255,0.5)', o2:'rgba(38,98,200,0.44)', o3:'rgba(248,195,78,0.28)',
               ln:'rgba(138,210,255,0.95)', f1:'rgba(138,210,255,0.3)', f2:'rgba(138,210,255,0)' },
    cloudy:  { bg: 'linear-gradient(145deg,#191e2c 0%,#29344e 50%,#435065 100%)',
               o1:'rgba(142,155,178,0.48)', o2:'rgba(68,90,130,0.4)', o3:'rgba(98,115,152,0.3)',
               ln:'rgba(178,190,208,0.95)', f1:'rgba(178,190,208,0.3)', f2:'rgba(178,190,208,0)' },
    fog:     { bg: 'linear-gradient(145deg,#1d2332 0%,#374458 50%,#5f7080 100%)',
               o1:'rgba(172,186,208,0.42)', o2:'rgba(98,118,145,0.38)', o3:'rgba(145,162,182,0.3)',
               ln:'rgba(188,200,216,0.95)', f1:'rgba(188,200,216,0.3)', f2:'rgba(188,200,216,0)' },
    rain:    { bg: 'linear-gradient(145deg,#08101e 0%,#0c1e3c 45%,#0e3160 100%)',
               o1:'rgba(38,115,218,0.55)', o2:'rgba(16,76,175,0.44)', o3:'rgba(55,95,196,0.3)',
               ln:'rgba(92,175,255,0.95)', f1:'rgba(92,175,255,0.32)', f2:'rgba(92,175,255,0)' },
    storm:   { bg: 'linear-gradient(145deg,#040810 0%,#0b1322 45%,#091b38 100%)',
               o1:'rgba(16,76,175,0.5)', o2:'rgba(8,38,118,0.44)', o3:'rgba(35,56,138,0.3)',
               ln:'rgba(72,145,238,0.95)', f1:'rgba(72,145,238,0.3)', f2:'rgba(72,145,238,0)' },
    snow:    { bg: 'linear-gradient(145deg,#0c1826 0%,#182d4e 45%,#38577a 100%)',
               o1:'rgba(192,216,255,0.5)', o2:'rgba(135,175,228,0.42)', o3:'rgba(175,206,248,0.35)',
               ln:'rgba(205,226,255,0.95)', f1:'rgba(205,226,255,0.32)', f2:'rgba(205,226,255,0)' },
    thunder: { bg: 'linear-gradient(145deg,#050308 0%,#0f081e 45%,#1a0d3c 100%)',
               o1:'rgba(115,52,215,0.58)', o2:'rgba(55,15,145,0.44)', o3:'rgba(195,145,42,0.32)',
               ln:'rgba(175,115,255,0.95)', f1:'rgba(175,115,255,0.32)', f2:'rgba(175,115,255,0)' },
  };

  function applyTheme(name) {
    var t = THEMES[name] || THEMES.clear;
    document.getElementById('bg-grad').style.background = t.bg;
    document.getElementById('o1').style.background = 'radial-gradient(circle,' + t.o1 + ' 0%,transparent 70%)';
    document.getElementById('o2').style.background = 'radial-gradient(circle,' + t.o2 + ' 0%,transparent 70%)';
    document.getElementById('o3').style.background = 'radial-gradient(circle,' + t.o3 + ' 0%,transparent 70%)';
    return t;
  }

  /* ── SVG icon helpers ───────────────────────────────────── */
  function rays(cx, cy, r1, r2, n, sw, col) {
    var out = '';
    for (var i = 0; i < n; i++) {
      var a = i * (360 / n) * Math.PI / 180;
      var c = Math.cos(a), s = Math.sin(a);
      out += '<line x1="' + (cx + r1*c).toFixed(1) + '" y1="' + (cy + r1*s).toFixed(1) +
             '" x2="' + (cx + r2*c).toFixed(1) + '" y2="' + (cy + r2*s).toFixed(1) +
             '" stroke="' + col + '" stroke-width="' + sw + '" stroke-linecap="round"/>';
    }
    return out;
  }

  function cloudPaths(fill, ex, ey, scale) {
    scale = scale || 1;
    var s = scale;
    return '<ellipse cx="' + (ex+0*s) + '" cy="' + (ey+14*s) + '" rx="' + (30*s) + '" ry="' + (14*s) + '" fill="' + fill + '"/>' +
           '<circle cx="' + (ex-14*s) + '" cy="' + (ey+11*s) + '" r="' + (13*s) + '" fill="' + fill + '"/>' +
           '<circle cx="' + (ex+2*s)  + '" cy="' + (ey+4*s)  + '" r="' + (17*s) + '" fill="' + fill + '"/>' +
           '<circle cx="' + (ex+17*s) + '" cy="' + (ey+11*s) + '" r="' + (12*s) + '" fill="' + fill + '"/>';
  }

  var ICONS = {
    sun: function () {
      return '<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">' +
        '<defs><radialGradient id="sg"><stop offset="0%" stop-color="#FFE966"/>' +
        '<stop offset="100%" stop-color="#FF9700"/></radialGradient>' +
        '<filter id="gf"><feGaussianBlur stdDeviation="2.8" result="b"/>' +
        '<feMerge><feMergeNode in="b"/><feMergeNode in="SourceGraphic"/></feMerge></filter></defs>' +
        '<g filter="url(#gf)">' + rays(50,50,27,39,8,3.6,'#FFC93A') +
        '<circle cx="50" cy="50" r="19" fill="url(#sg)"/></g></svg>';
    },
    partly: function () {
      return '<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">' +
        '<defs><radialGradient id="sg2"><stop offset="0%" stop-color="#FFE966"/>' +
        '<stop offset="100%" stop-color="#FF9700"/></radialGradient>' +
        '<linearGradient id="cg2" x1="0" y1="0" x2="1" y2="1">' +
        '<stop offset="0%" stop-color="#D3E9FF"/><stop offset="100%" stop-color="#A4C6E8"/></linearGradient></defs>' +
        rays(34,37,20,30,6,3.0,'#FFC93A') +
        '<circle cx="34" cy="37" r="14" fill="url(#sg2)" opacity="0.92"/>' +
        '<ellipse cx="57" cy="70" rx="23" ry="12" fill="url(#cg2)"/>' +
        '<circle cx="44" cy="67" r="11" fill="url(#cg2)"/>' +
        '<circle cx="59" cy="61" r="14" fill="url(#cg2)"/>' +
        '<circle cx="72" cy="67" r="9"  fill="url(#cg2)"/>' +
        '</svg>';
    },
    cloud: function () {
      return '<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">' +
        '<defs><linearGradient id="cg3" x1="0" y1="0" x2="1" y2="1">' +
        '<stop offset="0%" stop-color="#BFDBF4"/><stop offset="100%" stop-color="#87AAC8"/></linearGradient>' +
        '<filter id="cs"><feDropShadow dx="0" dy="5" stdDeviation="5" flood-color="rgba(0,0,0,0.18)"/></filter></defs>' +
        '<g filter="url(#cs)">' + cloudPaths('url(#cg3)', 50, 52, 1) + '</g></svg>';
    },
    fog: function () {
      var lines = [[12,25,76,5.5,0.72],[18,40,64,5.5,0.60],[8,55,78,5.5,0.70],[16,70,68,5.5,0.56]];
      var s = '';
      for (var i = 0; i < lines.length; i++) {
        var l = lines[i];
        s += '<rect x="' + l[0] + '" y="' + l[1] + '" width="' + l[2] + '" height="' + l[3] +
             '" rx="2.5" fill="rgba(182,198,218,' + l[4] + ')"/>';
      }
      return '<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">' + s + '</svg>';
    },
    drizzle: function () {
      var dd = [[35,73],[47,80],[59,73],[71,80],[41,88],[53,95]];
      var s = '';
      for (var i = 0; i < dd.length; i++) {
        s += '<line x1="' + dd[i][0] + '" y1="' + dd[i][1] + '" x2="' + (dd[i][0]-2) + '" y2="' + (dd[i][1]+6) +
             '" stroke="rgba(110,174,238,0.75)" stroke-width="2.2" stroke-linecap="round"/>';
      }
      return '<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">' +
        '<defs><linearGradient id="dc" x1="0" y1="0" x2="1" y2="1">' +
        '<stop offset="0%" stop-color="#9DC0D8"/><stop offset="100%" stop-color="#769FBE"/></linearGradient></defs>' +
        '<ellipse cx="50" cy="54" rx="27" ry="12" fill="url(#dc)"/>' +
        '<circle cx="38" cy="52" r="11" fill="url(#dc)"/>' +
        '<circle cx="52" cy="46" r="15" fill="url(#dc)"/>' +
        '<circle cx="65" cy="52" r="10" fill="url(#dc)"/>' + s + '</svg>';
    },
    rain: function () {
      var dd = [[32,72],[43,79],[54,72],[65,79],[76,72],[37,86],[48,93],[59,86],[70,93]];
      var s = '';
      for (var i = 0; i < dd.length; i++) {
        s += '<ellipse cx="' + dd[i][0] + '" cy="' + dd[i][1] + '" rx="2.2" ry="4.5" fill="rgba(90,166,238,0.82)"/>';
      }
      return '<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">' +
        '<defs><linearGradient id="rc" x1="0" y1="0" x2="1" y2="1">' +
        '<stop offset="0%" stop-color="#7EACC8"/><stop offset="100%" stop-color="#5083A7"/></linearGradient></defs>' +
        cloudPaths('url(#rc)', 50, 38, 1) + s + '</svg>';
    },
    heavyrain: function () {
      var dd = [[27,67],[38,74],[49,67],[60,74],[71,67],[32,82],[43,89],[54,82],[65,89],[76,82]];
      var s = '';
      for (var i = 0; i < dd.length; i++) {
        s += '<ellipse cx="' + dd[i][0] + '" cy="' + dd[i][1] + '" rx="2.4" ry="5.5" fill="rgba(70,143,232,0.85)"/>';
      }
      return '<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">' +
        '<defs><linearGradient id="hrc" x1="0" y1="0" x2="1" y2="1">' +
        '<stop offset="0%" stop-color="#577895"/><stop offset="100%" stop-color="#2F4E65"/></linearGradient></defs>' +
        '<ellipse cx="50" cy="45" rx="31" ry="14" fill="url(#hrc)"/>' +
        '<circle cx="35" cy="43" r="14" fill="url(#hrc)"/>' +
        '<circle cx="52" cy="37" r="17" fill="url(#hrc)"/>' +
        '<circle cx="68" cy="43" r="12" fill="url(#hrc)"/>' + s + '</svg>';
    },
    snow: function () {
      var pts = [[33,73],[50,80],[67,73],[41,88],[59,88]];
      var s = '';
      for (var i = 0; i < pts.length; i++) {
        var cx = pts[i][0], cy = pts[i][1];
        s += '<line x1="' + cx + '" y1="' + (cy-5.5) + '" x2="' + cx + '" y2="' + (cy+5.5) +
             '" stroke="rgba(200,224,255,0.92)" stroke-width="2.2" stroke-linecap="round"/>';
        s += '<line x1="' + (cx-5.5) + '" y1="' + cy + '" x2="' + (cx+5.5) + '" y2="' + cy +
             '" stroke="rgba(200,224,255,0.92)" stroke-width="2.2" stroke-linecap="round"/>';
        s += '<line x1="' + (cx-3.8) + '" y1="' + (cy-3.8) + '" x2="' + (cx+3.8) + '" y2="' + (cy+3.8) +
             '" stroke="rgba(200,224,255,0.8)" stroke-width="1.5" stroke-linecap="round"/>';
        s += '<line x1="' + (cx+3.8) + '" y1="' + (cy-3.8) + '" x2="' + (cx-3.8) + '" y2="' + (cy+3.8) +
             '" stroke="rgba(200,224,255,0.8)" stroke-width="1.5" stroke-linecap="round"/>';
      }
      return '<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">' +
        '<defs><linearGradient id="sc" x1="0" y1="0" x2="1" y2="1">' +
        '<stop offset="0%" stop-color="#D5EEFF"/><stop offset="100%" stop-color="#A8C9E6"/></linearGradient></defs>' +
        '<ellipse cx="50" cy="46" rx="28" ry="13" fill="url(#sc)"/>' +
        '<circle cx="36" cy="44" r="12" fill="url(#sc)"/>' +
        '<circle cx="52" cy="38" r="16" fill="url(#sc)"/>' +
        '<circle cx="65" cy="44" r="10" fill="url(#sc)"/>' + s + '</svg>';
    },
    thunder: function () {
      return '<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">' +
        '<defs><linearGradient id="tc" x1="0" y1="0" x2="1" y2="1">' +
        '<stop offset="0%" stop-color="#374268"/><stop offset="100%" stop-color="#192040"/></linearGradient>' +
        '<filter id="bf"><feGaussianBlur stdDeviation="3" result="b"/>' +
        '<feMerge><feMergeNode in="b"/><feMergeNode in="SourceGraphic"/></feMerge></filter></defs>' +
        '<ellipse cx="50" cy="43" rx="30" ry="14" fill="url(#tc)"/>' +
        '<circle cx="35" cy="41" r="13" fill="url(#tc)"/>' +
        '<circle cx="52" cy="35" r="17" fill="url(#tc)"/>' +
        '<circle cx="67" cy="41" r="11" fill="url(#tc)"/>' +
        '<path d="M54 56 L43 74 L52 74 L47 89 L62 68 L53 68 Z" fill="#FFDC28" filter="url(#bf)" opacity="0.97"/>' +
        '</svg>';
    },
  };

  /* ── Hourly chart ───────────────────────────────────────── */
  function drawChart(temps, theme) {
    var svg = document.getElementById('chart');
    var W = 760, H = 108;
    var pl = 4, pr = 4, pt = 18, pb = 24;
    var iW = W - pl - pr, iH = H - pt - pb;
    var d = temps.slice(0, 24);
    if (d.length < 2) return;

    var mn = Math.min.apply(null, d) - 0.5;
    var mx = Math.max.apply(null, d) + 0.5;
    var rng = mx - mn || 1;

    var pts = d.map(function (v, i) {
      return {
        x: pl + (i / (d.length - 1)) * iW,
        y: pt + (1 - (v - mn) / rng) * iH,
        v: v
      };
    });

    /* Smooth cubic bezier path */
    var line = 'M ' + pts[0].x.toFixed(2) + ',' + pts[0].y.toFixed(2);
    for (var i = 1; i < pts.length; i++) {
      var a = pts[i-1], b = pts[i];
      var cx = (a.x + b.x) / 2;
      line += ' C ' + cx.toFixed(2) + ',' + a.y.toFixed(2) +
              ' ' + cx.toFixed(2) + ',' + b.y.toFixed(2) +
              ' ' + b.x.toFixed(2) + ',' + b.y.toFixed(2);
    }
    var last = pts[pts.length - 1];
    var area = line + ' L ' + last.x.toFixed(2) + ',' + (H - pb) +
               ' L ' + pts[0].x.toFixed(2) + ',' + (H - pb) + ' Z';

    var gid = 'g' + (Math.random() * 1e8 | 0).toString(36);

    /* Time labels at 0,3,6,9,12,15,18,21 */
    var timeLabels = '';
    var tlHours = [0, 3, 6, 9, 12, 15, 18, 21];
    for (var ti = 0; ti < tlHours.length; ti++) {
      var h = tlHours[ti];
      if (h >= pts.length) continue;
      var p = pts[h];
      var lbl = h === 0 ? '12a' : (h < 12 ? h + 'a' : (h === 12 ? '12p' : (h - 12) + 'p'));
      timeLabels += '<text x="' + p.x.toFixed(2) + '" y="' + (H - 6) +
                    '" text-anchor="middle" fill="rgba(255,255,255,0.34)" font-size="10" font-family="-apple-system,system-ui,sans-serif" font-weight="500">' + lbl + '</text>';
    }

    /* Temp labels + dots at 6am, 12pm, 6pm */
    var markers = '';
    var markerHours = [6, 12, 18];
    for (var mi = 0; mi < markerHours.length; mi++) {
      var mh = markerHours[mi];
      if (mh >= pts.length) continue;
      var mp = pts[mh];
      markers += '<circle cx="' + mp.x.toFixed(2) + '" cy="' + mp.y.toFixed(2) +
                 '" r="3" fill="' + theme.ln + '" opacity="0.82"/>';
      var ly = mp.y <= pt + 11 ? mp.y + 14 : mp.y - 6;
      markers += '<text x="' + mp.x.toFixed(2) + '" y="' + ly.toFixed(1) +
                 '" text-anchor="middle" fill="rgba(255,255,255,0.65)" font-size="9.5" font-family="-apple-system,system-ui,sans-serif" font-weight="600">' +
                 Math.round(mp.v) + '&deg;</text>';
    }

    svg.innerHTML =
      '<defs><linearGradient id="' + gid + '" x1="0" y1="0" x2="0" y2="1">' +
      '<stop offset="0%" stop-color="' + theme.f1 + '"/>' +
      '<stop offset="100%" stop-color="' + theme.f2 + '"/>' +
      '</linearGradient></defs>' +
      '<path d="' + area + '" fill="url(#' + gid + ')"/>' +
      '<path d="' + line + '" stroke="' + theme.ln + '" stroke-width="2.2" fill="none" stroke-linecap="round" stroke-linejoin="round"/>' +
      markers + timeLabels;
  }

  /* ── UI ─────────────────────────────────────────────────── */
  function showError(msg) {
    document.getElementById('loading').style.display = 'none';
    var ev = document.getElementById('error-view');
    ev.style.display = 'flex';
    document.getElementById('error-msg').textContent = msg;
  }

  function render(data, params) {
    try {
      var daily  = data.daily;
      var hourly = data.hourly;

      if (!daily || !daily.temperature_2m_max || !daily.temperature_2m_max.length ||
          !daily.temperature_2m_min || !daily.temperature_2m_min.length) {
        showError('No weather data found for this location and date. The date may be outside the supported range.');
        return;
      }

      var hi   = Math.round(daily.temperature_2m_max[0]);
      var lo   = Math.round(daily.temperature_2m_min[0]);
      var code = (daily.weather_code && daily.weather_code[0] != null) ? daily.weather_code[0] : 0;
      var info = wmoInfo(code);
      var theme = applyTheme(info[2]);

      var hourlyTemps = [];
      if (hourly && hourly.temperature_2m) {
        hourlyTemps = hourly.temperature_2m.slice(0, 24);
      }

      document.getElementById('loc-name').textContent  = params.name;
      document.getElementById('date-str').textContent  = fmtDate(params.date);
      document.getElementById('hi-val').textContent    = hi;
      document.getElementById('lo-val').textContent    = lo + '\u00B0';
      document.getElementById('condition').textContent = info[0];

      var iconFn = ICONS[info[1]] || ICONS.cloud;
      document.getElementById('w-icon').innerHTML = iconFn();

      if (hourlyTemps.length >= 2) {
        drawChart(hourlyTemps, theme);
      }

      document.getElementById('loading').style.display = 'none';
      document.getElementById('weather').style.display = 'block';
    } catch (e) {
      showError('Failed to render weather data: ' + e.message);
    }
  }

  /* ── Fetch ──────────────────────────────────────────────── */
  async function go() {
    var params = getParams();
    try {
      var endpoint = isFutureOrToday(params.date) ? '/api/om/forecast' : '/api/om/archive';
      var url = new URL(endpoint, location.origin);
      url.searchParams.set('latitude',         params.lat);
      url.searchParams.set('longitude',        params.lon);
      url.searchParams.set('daily',            'temperature_2m_max,temperature_2m_min,weather_code');
      url.searchParams.set('hourly',           'temperature_2m');
      url.searchParams.set('timezone',         'UTC');
      url.searchParams.set('temperature_unit', 'celsius');
      url.searchParams.set('start_date',       params.date);
      url.searchParams.set('end_date',         params.date);

      var res = await fetch(url.toString());
      if (!res.ok) throw new Error('HTTP ' + res.status + ' ' + res.statusText);
      var data = await res.json();
      if (data.error) throw new Error(data.reason || String(data.error));
      render(data, params);
    } catch (e) {
      showError('Could not load weather data. ' + e.message);
    }
  }

  go();
})();
</script>

</body>
</html>

L1 — cheap deterministic descriptors

bytes total29,267html / css / js2,125 / 6,683 / 20,459
dom nodes47dom depth9
css rules58js presentyes
brightness41.9contrast17.1
colorfulness40.2whitespace70.6%

This slot's telemetry

prompt tokens7completion tokens12,460
total tokens12,467wall771.9 s
cost—request id—
config.json620 B
{
  "N": 2,
  "auth": {
    "credential_ref": "WCB_NONE",
    "method": "oauth-login"
  },
  "billing": "plan",
  "config_id": "claude-sonnet-4-6-thinking-eff-medium--cli--cursor--dev",
  "effort": "medium",
  "family": "claude",
  "m": {
    "min": 2,
    "q": 2
  },
  "model_id": "claude-sonnet-4-6-thinking",
  "protocol": "cli",
  "served_model": "claude-4.6-sonnet-medium-thinking",
  "telemetry": {
    "completion_tokens": 68173,
    "cost_usd": null,
    "prompt_tokens": 25,
    "total_tokens": 68198,
    "wall_ms": 1557346
  },
  "transport": "cursor-agent-cli-isolated-home",
  "vendor_sanction_ref": null
}
send-log2.5 KB
{
  "N": 2,
  "batch_id": "2026-08-13--cursor-s0",
  "config_id": "claude-4.6-sonnet-medium-thinking--cli--cursor--dev",
  "positions": [
    {
      "attempts": [
        {
          "attempt_index": 0,
          "backoff_ms": null,
          "charged": true,
          "ended_at": "2026-08-12T20:35:48.331484+00:00",
          "http_status": null,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-08-12T20:34:29.235610+00:00"
        }
      ],
      "block_index": 0,
      "model_reaching_attempt_index": 0,
      "slot_index": 0,
      "terminal_state": "valid",
      "variant": "P-min"
    },
    {
      "attempts": [
        {
          "attempt_index": 0,
          "backoff_ms": null,
          "charged": true,
          "ended_at": "2026-08-12T20:48:44.416560+00:00",
          "http_status": null,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-08-12T20:35:52.516773+00:00"
        }
      ],
      "block_index": 0,
      "model_reaching_attempt_index": 0,
      "slot_index": 0,
      "terminal_state": "valid",
      "variant": "P-q"
    },
    {
      "attempts": [
        {
          "attempt_index": 0,
          "backoff_ms": null,
          "charged": true,
          "ended_at": "2026-08-12T20:59:19.704884+00:00",
          "http_status": null,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-08-12T20:48:48.049435+00:00"
        }
      ],
      "block_index": 1,
      "model_reaching_attempt_index": 0,
      "slot_index": 1,
      "terminal_state": "valid",
      "variant": "P-q"
    },
    {
      "attempts": [
        {
          "attempt_index": 0,
          "backoff_ms": null,
          "charged": true,
          "ended_at": "2026-08-12T21:00:37.909408+00:00",
          "http_status": null,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-08-12T20:59:23.147101+00:00"
        }
      ],
      "block_index": 1,
      "model_reaching_attempt_index": 0,
      "slot_index": 1,
      "terminal_state": "valid",
      "variant": "P-min"
    }
  ],
  "retry_policy": {
    "max_unreachable_retries": 5,
    "rate_limit_backoff": {
      "max_attempts": 4,
      "max_total_ms": 60000
    }
  }
}