claude-opus-4-7-thinking @ xhigh · cursor-xl
cursor-xlxhigh
- config
- claude-opus-4-7-thinking-eff-xhigh--cli--cursor-xl--dev
- batch
- 2026-07-19--unified
- transport
- cursor-agent-cli-isolated-home
- protocol
- cli · plan
- served model
- claude-opus-4-7-thinking-xhigh
- captured
- Jul 18, 2026, 11:54 AM · N=2
variant
live
slot 0 · P-q · sandboxed iframe

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
nearest
claude-opus-4-7-thinking @high · cursor0.67claude-opus-4-7 @high · cursor-xl0.66claude-opus-5 @medium · CC0.66claude-opus-4-7 @medium · kiro0.66claude-opus-5-thinking @medium · cursor-xl0.66farthest
qwen3.6-plus · go0.51claude-sonnet-4-6-thinking @medium · cursor0.52gemini-3.1-pro @low · agy0.52north-mini-code-free · api0.52gemini-3.1-pro · cursor-xl0.53within 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 tempmismatchshown: 13.405
- min tempmismatchshown: 52.52
- hourlymismatchcoverage 0/24 · 0 match · 2 mismatch · 22 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,initial-scale=1">
<title>Weather</title>
<style>
:root {
--card-bg: rgba(255, 255, 255, 0.78);
--card-border: rgba(255, 255, 255, 0.55);
--ink: #111a2e;
--ink-soft: #4a5677;
--ink-mute: #8592ad;
--accent: #3b82f6;
--hi: #ea580c;
--lo: #2563eb;
--line: rgba(17, 26, 46, 0.08);
--grad-a: #7dd3fc;
--grad-b: #fecaca;
--grad-c: #fef3c7;
}
body[data-theme="clear"] { --grad-a:#60a5fa; --grad-b:#fbbf24; --grad-c:#fed7aa; --accent:#f59e0b; }
body[data-theme="partly"] { --grad-a:#93c5fd; --grad-b:#c4b5fd; --grad-c:#e0e7ff; --accent:#6366f1; }
body[data-theme="cloudy"] { --grad-a:#94a3b8; --grad-b:#cbd5e1; --grad-c:#e2e8f0; --accent:#64748b; }
body[data-theme="fog"] { --grad-a:#cbd5e1; --grad-b:#e2e8f0; --grad-c:#f1f5f9; --accent:#64748b; }
body[data-theme="rain"] { --grad-a:#334155; --grad-b:#60a5fa; --grad-c:#a5b4fc; --accent:#3b82f6; }
body[data-theme="snow"] { --grad-a:#bfdbfe; --grad-b:#ede9fe; --grad-c:#f5f3ff; --accent:#6366f1; }
body[data-theme="storm"] { --grad-a:#1e1b4b; --grad-b:#7c3aed; --grad-c:#a78bfa; --accent:#8b5cf6; }
* { box-sizing: border-box; margin: 0; padding: 0; }
html, body {
width: 1280px;
height: 800px;
overflow: hidden;
font-family: -apple-system, BlinkMacSystemFont, "Inter", "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
color: var(--ink);
-webkit-font-smoothing: antialiased;
text-rendering: optimizeLegibility;
font-feature-settings: "ss01","ss02","cv11";
}
body {
background:
radial-gradient(1200px 800px at 12% 8%, var(--grad-c) 0%, transparent 55%),
radial-gradient(1000px 700px at 88% 92%, var(--grad-a) 0%, transparent 55%),
linear-gradient(135deg, var(--grad-a) 0%, var(--grad-b) 100%);
display: flex;
align-items: center;
justify-content: center;
padding: 32px;
}
.card {
width: 100%;
height: 100%;
background: var(--card-bg);
backdrop-filter: blur(28px) saturate(1.4);
-webkit-backdrop-filter: blur(28px) saturate(1.4);
border: 1px solid var(--card-border);
border-radius: 32px;
box-shadow:
0 40px 80px -30px rgba(15, 23, 42, 0.4),
0 0 0 1px rgba(255, 255, 255, 0.35) inset,
0 2px 0 rgba(255, 255, 255, 0.7) inset;
padding: 56px 64px;
display: grid;
grid-template-rows: auto 1fr auto;
gap: 24px;
position: relative;
overflow: hidden;
}
.card::before {
content: '';
position: absolute;
top: -220px;
right: -180px;
width: 560px;
height: 560px;
background: radial-gradient(circle at 30% 30%, var(--grad-b) 0%, transparent 65%);
opacity: 0.5;
filter: blur(20px);
pointer-events: none;
}
.card::after {
content: '';
position: absolute;
bottom: -160px;
left: -140px;
width: 460px;
height: 460px;
background: radial-gradient(circle at 60% 40%, var(--grad-a) 0%, transparent 65%);
opacity: 0.35;
filter: blur(24px);
pointer-events: none;
}
.header {
display: flex;
justify-content: space-between;
align-items: flex-start;
position: relative;
z-index: 1;
}
.location {
font-size: 52px;
font-weight: 700;
letter-spacing: -0.03em;
line-height: 1;
}
.date {
margin-top: 10px;
font-size: 18px;
font-weight: 500;
color: var(--ink-soft);
letter-spacing: 0.01em;
}
.meta {
margin-top: 6px;
font-size: 12px;
color: var(--ink-mute);
text-transform: uppercase;
letter-spacing: 0.14em;
font-variant-numeric: tabular-nums;
}
.icon-block {
display: flex;
flex-direction: column;
align-items: flex-end;
gap: 10px;
}
.icon-wrap {
width: 148px;
height: 148px;
display: flex;
align-items: center;
justify-content: center;
filter: drop-shadow(0 20px 40px rgba(15, 23, 42, 0.18));
}
.icon-wrap svg { width: 100%; height: 100%; }
.condition {
font-size: 22px;
font-weight: 600;
color: var(--ink);
text-align: right;
max-width: 260px;
letter-spacing: -0.01em;
}
.hero {
display: flex;
align-items: center;
gap: 56px;
position: relative;
z-index: 1;
padding: 4px 0;
}
.stat {
display: flex;
flex-direction: column;
gap: 4px;
min-width: 200px;
}
.stat .label {
font-size: 12px;
font-weight: 700;
letter-spacing: 0.18em;
text-transform: uppercase;
color: var(--ink-mute);
}
.stat .value {
font-size: 148px;
font-weight: 200;
letter-spacing: -0.06em;
line-height: 0.9;
color: var(--ink);
font-variant-numeric: tabular-nums;
display: flex;
align-items: flex-start;
}
.stat .value .deg {
font-size: 56px;
font-weight: 300;
margin-top: 12px;
margin-left: 2px;
color: var(--ink-soft);
}
.stat.hi .value { color: var(--hi); }
.stat.hi .value .deg { color: color-mix(in oklab, var(--hi), white 30%); }
.stat.lo .value { color: var(--lo); }
.stat.lo .value .deg { color: color-mix(in oklab, var(--lo), white 30%); }
.divider {
width: 1px;
height: 100px;
background: linear-gradient(to bottom, transparent, var(--line), transparent);
}
.chart-section {
position: relative;
z-index: 1;
border-top: 1px solid var(--line);
padding-top: 20px;
}
.chart-header {
display: flex;
justify-content: space-between;
align-items: baseline;
margin-bottom: 6px;
}
.chart-title {
font-size: 12px;
text-transform: uppercase;
letter-spacing: 0.18em;
font-weight: 700;
color: var(--ink-mute);
}
.chart-sub {
font-size: 11px;
color: var(--ink-mute);
text-transform: uppercase;
letter-spacing: 0.14em;
font-variant-numeric: tabular-nums;
}
.chart-svg {
width: 100%;
height: 190px;
display: block;
overflow: visible;
}
.chart-svg .grid { stroke: var(--line); stroke-width: 1; }
.chart-svg .axis-label {
fill: var(--ink-mute);
font-size: 11px;
font-family: inherit;
font-weight: 500;
letter-spacing: 0.06em;
}
.chart-svg .curve { stroke: var(--accent); stroke-width: 2.5; fill: none; stroke-linecap: round; stroke-linejoin: round; }
.chart-svg .curve-fill { fill: url(#gradFill); }
.chart-svg .hour-dot { fill: var(--accent); opacity: 0.6; }
.chart-svg .marker {
fill: white;
stroke: var(--accent);
stroke-width: 2.5;
}
.chart-svg .marker-label {
fill: var(--ink);
font-size: 13px;
font-weight: 700;
font-variant-numeric: tabular-nums;
letter-spacing: -0.01em;
}
.chart-svg .marker-badge {
fill: white;
stroke: var(--line);
stroke-width: 1;
}
.error {
grid-row: 1 / -1;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 16px;
padding: 40px;
text-align: center;
color: var(--ink);
}
.error svg { width: 88px; height: 88px; opacity: 0.55; }
.error .title { font-size: 32px; font-weight: 700; letter-spacing: -0.02em; }
.error .msg { font-size: 16px; color: var(--ink-soft); max-width: 520px; line-height: 1.5; }
.error .details {
margin-top: 8px;
font-size: 12px;
color: var(--ink-mute);
font-family: ui-monospace, "SF Mono", Menlo, monospace;
background: rgba(17,26,46,0.05);
padding: 8px 12px;
border-radius: 8px;
max-width: 600px;
word-break: break-word;
}
.loading {
grid-row: 1 / -1;
display: flex;
align-items: center;
justify-content: center;
height: 100%;
color: var(--ink-mute);
font-size: 14px;
letter-spacing: 0.14em;
text-transform: uppercase;
}
</style>
</head>
<body data-theme="clear">
<article class="card" id="card">
<div class="loading">Loading weather…</div>
</article>
<script>
(function () {
"use strict";
var WEATHER = {
0: { label: "Clear sky", icon: "sun", theme: "clear" },
1: { label: "Mainly clear", icon: "sun-cloud", theme: "clear" },
2: { label: "Partly cloudy", icon: "sun-cloud", theme: "partly" },
3: { label: "Overcast", icon: "cloud", theme: "cloudy" },
45: { label: "Fog", icon: "fog", theme: "fog" },
48: { label: "Depositing rime fog", icon: "fog", theme: "fog" },
51: { label: "Light drizzle", icon: "drizzle", theme: "rain" },
53: { label: "Drizzle", icon: "drizzle", theme: "rain" },
55: { label: "Dense drizzle", icon: "drizzle", theme: "rain" },
56: { label: "Freezing drizzle", icon: "drizzle", theme: "rain" },
57: { label: "Freezing drizzle", icon: "drizzle", theme: "rain" },
61: { label: "Light rain", icon: "rain", theme: "rain" },
63: { label: "Rain", icon: "rain", theme: "rain" },
65: { label: "Heavy rain", icon: "rain", theme: "rain" },
66: { label: "Freezing rain", icon: "rain", theme: "rain" },
67: { label: "Freezing rain", icon: "rain", theme: "rain" },
71: { label: "Light snowfall", icon: "snow", theme: "snow" },
73: { label: "Snowfall", icon: "snow", theme: "snow" },
75: { label: "Heavy snowfall", icon: "snow", theme: "snow" },
77: { label: "Snow grains", icon: "snow", theme: "snow" },
80: { label: "Rain showers", icon: "rain", theme: "rain" },
81: { label: "Rain showers", icon: "rain", theme: "rain" },
82: { label: "Violent rain showers", icon: "rain", theme: "rain" },
85: { label: "Snow showers", icon: "snow", theme: "snow" },
86: { label: "Heavy snow showers", icon: "snow", theme: "snow" },
95: { label: "Thunderstorm", icon: "storm", theme: "storm" },
96: { label: "Thunderstorm w/ hail", icon: "storm", theme: "storm" },
99: { label: "Severe thunderstorm", icon: "storm", theme: "storm" }
};
function pad(n) { return String(n).padStart(2, "0"); }
function todayUTC() {
var d = new Date();
return d.getUTCFullYear() + "-" + pad(d.getUTCMonth() + 1) + "-" + pad(d.getUTCDate());
}
function escapeHtml(s) {
return String(s).replace(/[&<>"']/g, function (c) {
return { "&": "&", "<": "<", ">": ">", '"': """, "'": "'" }[c];
});
}
function parseParams() {
var p = new URLSearchParams(window.location.search);
var lat = parseFloat(p.get("lat"));
var lon = parseFloat(p.get("lon"));
var name = p.get("name");
var date = p.get("date");
return {
lat: Number.isFinite(lat) ? lat : 52.52,
lon: Number.isFinite(lon) ? lon : 13.405,
name: (name && name.trim()) ? name : "Berlin",
date: /^\d{4}-\d{2}-\d{2}$/.test(date || "") ? date : todayUTC()
};
}
function isPastDate(dateStr) {
return dateStr < todayUTC();
}
function formatDateLong(dateStr) {
var parts = dateStr.split("-").map(Number);
var dt = new Date(Date.UTC(parts[0], parts[1] - 1, parts[2]));
return dt.toLocaleDateString("en-US", {
weekday: "long", year: "numeric", month: "long", day: "numeric", timeZone: "UTC"
});
}
function formatCoord(lat, lon) {
var latH = lat >= 0 ? "N" : "S";
var lonH = lon >= 0 ? "E" : "W";
return Math.abs(lat).toFixed(3) + "° " + latH + " · " + Math.abs(lon).toFixed(3) + "° " + lonH;
}
async function fetchWeather(p) {
var base = isPastDate(p.date) ? "/api/om/archive" : "/api/om/forecast";
var qs = new URLSearchParams({
latitude: String(p.lat),
longitude: String(p.lon),
daily: "temperature_2m_max,temperature_2m_min,weather_code",
hourly: "temperature_2m",
timezone: "UTC",
temperature_unit: "celsius",
start_date: p.date,
end_date: p.date
});
var res = await fetch(base + "?" + qs.toString(), { headers: { accept: "application/json" } });
if (!res.ok) {
var body = "";
try { body = await res.text(); } catch (e) {}
throw new Error("HTTP " + res.status + (body ? " – " + body.slice(0, 160) : ""));
}
var data = await res.json();
if (data && data.error) throw new Error(data.reason || "API error");
return data;
}
function icon(kind) {
switch (kind) {
case "sun":
return '<svg viewBox="0 0 100 100">'
+ '<defs><radialGradient id="sunG" cx="50%" cy="45%" r="55%">'
+ '<stop offset="0%" stop-color="#fef9c3"/>'
+ '<stop offset="60%" stop-color="#fbbf24"/>'
+ '<stop offset="100%" stop-color="#f59e0b"/>'
+ '</radialGradient></defs>'
+ '<g stroke="#f59e0b" stroke-width="3" stroke-linecap="round">'
+ '<line x1="50" y1="4" x2="50" y2="16"/>'
+ '<line x1="50" y1="84" x2="50" y2="96"/>'
+ '<line x1="4" y1="50" x2="16" y2="50"/>'
+ '<line x1="84" y1="50" x2="96" y2="50"/>'
+ '<line x1="17" y1="17" x2="25" y2="25"/>'
+ '<line x1="75" y1="75" x2="83" y2="83"/>'
+ '<line x1="83" y1="17" x2="75" y2="25"/>'
+ '<line x1="17" y1="83" x2="25" y2="75"/>'
+ '</g>'
+ '<circle cx="50" cy="50" r="22" fill="url(#sunG)" stroke="#f59e0b" stroke-width="2"/>'
+ '</svg>';
case "sun-cloud":
return '<svg viewBox="0 0 100 100">'
+ '<defs>'
+ '<radialGradient id="sunG2" cx="50%" cy="45%" r="55%">'
+ '<stop offset="0%" stop-color="#fef9c3"/>'
+ '<stop offset="100%" stop-color="#fbbf24"/>'
+ '</radialGradient>'
+ '<linearGradient id="cloudG" x1="0" y1="0" x2="0" y2="1">'
+ '<stop offset="0%" stop-color="#ffffff"/>'
+ '<stop offset="100%" stop-color="#dbeafe"/>'
+ '</linearGradient>'
+ '</defs>'
+ '<g stroke="#f59e0b" stroke-width="2.5" stroke-linecap="round">'
+ '<line x1="36" y1="8" x2="36" y2="18"/>'
+ '<line x1="10" y1="36" x2="20" y2="36"/>'
+ '<line x1="17" y1="17" x2="24" y2="24"/>'
+ '<line x1="55" y1="17" x2="48" y2="24"/>'
+ '</g>'
+ '<circle cx="36" cy="36" r="14" fill="url(#sunG2)" stroke="#f59e0b" stroke-width="2"/>'
+ '<path d="M30,74 Q18,74 18,62 Q18,50 32,50 Q35,40 48,40 Q63,40 66,52 Q82,52 82,64 Q82,76 66,76 L30,76 Z" fill="url(#cloudG)" stroke="#94a3b8" stroke-width="1.8" stroke-linejoin="round"/>'
+ '</svg>';
case "cloud":
return '<svg viewBox="0 0 100 100">'
+ '<defs><linearGradient id="cloudG2" x1="0" y1="0" x2="0" y2="1">'
+ '<stop offset="0%" stop-color="#ffffff"/>'
+ '<stop offset="100%" stop-color="#cbd5e1"/>'
+ '</linearGradient></defs>'
+ '<path d="M28,74 Q14,74 14,60 Q14,46 30,46 Q34,32 50,32 Q68,32 72,50 Q88,50 88,64 Q88,78 72,78 L28,78 Z" fill="url(#cloudG2)" stroke="#94a3b8" stroke-width="2" stroke-linejoin="round"/>'
+ '<path d="M42,58 Q52,58 58,50" fill="none" stroke="#94a3b8" stroke-width="1.5" stroke-linecap="round" opacity="0.6"/>'
+ '</svg>';
case "rain":
return '<svg viewBox="0 0 100 100">'
+ '<defs><linearGradient id="cloudR" x1="0" y1="0" x2="0" y2="1">'
+ '<stop offset="0%" stop-color="#e2e8f0"/>'
+ '<stop offset="100%" stop-color="#94a3b8"/>'
+ '</linearGradient></defs>'
+ '<path d="M25,58 Q13,58 13,46 Q13,34 27,34 Q30,20 46,20 Q64,20 68,38 Q84,38 84,52 Q84,64 68,64 L25,64 Z" fill="url(#cloudR)" stroke="#64748b" stroke-width="2" stroke-linejoin="round"/>'
+ '<g stroke="#3b82f6" stroke-width="3.5" stroke-linecap="round">'
+ '<line x1="30" y1="72" x2="26" y2="86"/>'
+ '<line x1="45" y1="74" x2="41" y2="90"/>'
+ '<line x1="60" y1="72" x2="56" y2="86"/>'
+ '<line x1="74" y1="74" x2="70" y2="88"/>'
+ '</g></svg>';
case "drizzle":
return '<svg viewBox="0 0 100 100">'
+ '<defs><linearGradient id="cloudD" x1="0" y1="0" x2="0" y2="1">'
+ '<stop offset="0%" stop-color="#f1f5f9"/>'
+ '<stop offset="100%" stop-color="#94a3b8"/>'
+ '</linearGradient></defs>'
+ '<path d="M25,58 Q13,58 13,46 Q13,34 27,34 Q30,20 46,20 Q64,20 68,38 Q84,38 84,52 Q84,64 68,64 L25,64 Z" fill="url(#cloudD)" stroke="#64748b" stroke-width="2" stroke-linejoin="round"/>'
+ '<g stroke="#60a5fa" stroke-width="2.5" stroke-linecap="round">'
+ '<line x1="32" y1="74" x2="30" y2="80"/>'
+ '<line x1="46" y1="76" x2="44" y2="82"/>'
+ '<line x1="60" y1="74" x2="58" y2="80"/>'
+ '<line x1="72" y1="76" x2="70" y2="82"/>'
+ '</g></svg>';
case "snow":
return '<svg viewBox="0 0 100 100">'
+ '<defs><linearGradient id="cloudS" x1="0" y1="0" x2="0" y2="1">'
+ '<stop offset="0%" stop-color="#ffffff"/>'
+ '<stop offset="100%" stop-color="#cbd5e1"/>'
+ '</linearGradient></defs>'
+ '<path d="M25,56 Q13,56 13,44 Q13,32 27,32 Q30,18 46,18 Q64,18 68,36 Q84,36 84,50 Q84,62 68,62 L25,62 Z" fill="url(#cloudS)" stroke="#94a3b8" stroke-width="2" stroke-linejoin="round"/>'
+ '<g stroke="#3b82f6" stroke-width="1.8" stroke-linecap="round" fill="none">'
+ '<g transform="translate(30 80)"><line x1="-5" y1="0" x2="5" y2="0"/><line x1="0" y1="-5" x2="0" y2="5"/><line x1="-3.5" y1="-3.5" x2="3.5" y2="3.5"/><line x1="-3.5" y1="3.5" x2="3.5" y2="-3.5"/></g>'
+ '<g transform="translate(50 86)"><line x1="-5" y1="0" x2="5" y2="0"/><line x1="0" y1="-5" x2="0" y2="5"/><line x1="-3.5" y1="-3.5" x2="3.5" y2="3.5"/><line x1="-3.5" y1="3.5" x2="3.5" y2="-3.5"/></g>'
+ '<g transform="translate(70 80)"><line x1="-5" y1="0" x2="5" y2="0"/><line x1="0" y1="-5" x2="0" y2="5"/><line x1="-3.5" y1="-3.5" x2="3.5" y2="3.5"/><line x1="-3.5" y1="3.5" x2="3.5" y2="-3.5"/></g>'
+ '</g></svg>';
case "storm":
return '<svg viewBox="0 0 100 100">'
+ '<defs><linearGradient id="cloudT" x1="0" y1="0" x2="0" y2="1">'
+ '<stop offset="0%" stop-color="#94a3b8"/>'
+ '<stop offset="100%" stop-color="#334155"/>'
+ '</linearGradient></defs>'
+ '<path d="M25,56 Q13,56 13,44 Q13,32 27,32 Q30,18 46,18 Q64,18 68,36 Q84,36 84,50 Q84,62 68,62 L25,62 Z" fill="url(#cloudT)" stroke="#1e293b" stroke-width="2" stroke-linejoin="round"/>'
+ '<path d="M52,58 L38,80 L48,80 L42,94 L64,72 L54,72 L58,58 Z" fill="#fbbf24" stroke="#f59e0b" stroke-width="1.5" stroke-linejoin="round"/>'
+ '</svg>';
case "fog":
return '<svg viewBox="0 0 100 100">'
+ '<defs><linearGradient id="cloudF" x1="0" y1="0" x2="0" y2="1">'
+ '<stop offset="0%" stop-color="#f8fafc"/>'
+ '<stop offset="100%" stop-color="#cbd5e1"/>'
+ '</linearGradient></defs>'
+ '<path d="M25,46 Q13,46 13,34 Q13,22 27,22 Q30,10 46,10 Q64,10 68,28 Q84,28 84,42 Q84,54 68,54 L25,54 Z" fill="url(#cloudF)" stroke="#94a3b8" stroke-width="2" stroke-linejoin="round"/>'
+ '<g stroke="#94a3b8" stroke-width="4" stroke-linecap="round">'
+ '<line x1="14" y1="66" x2="86" y2="66"/>'
+ '<line x1="22" y1="78" x2="78" y2="78"/>'
+ '<line x1="14" y1="90" x2="70" y2="90"/>'
+ '</g></svg>';
}
return "";
}
function smoothPath(pts) {
if (pts.length === 0) return "";
if (pts.length === 1) return "M " + pts[0].x + " " + pts[0].y;
var d = "M " + pts[0].x.toFixed(2) + " " + pts[0].y.toFixed(2);
for (var i = 0; i < pts.length - 1; i++) {
var p0 = pts[i - 1] || pts[i];
var p1 = pts[i];
var p2 = pts[i + 1];
var p3 = pts[i + 2] || p2;
var c1x = p1.x + (p2.x - p0.x) / 6;
var c1y = p1.y + (p2.y - p0.y) / 6;
var c2x = p2.x - (p3.x - p1.x) / 6;
var c2y = p2.y - (p3.y - p1.y) / 6;
d += " C " + c1x.toFixed(2) + " " + c1y.toFixed(2)
+ ", " + c2x.toFixed(2) + " " + c2y.toFixed(2)
+ ", " + p2.x.toFixed(2) + " " + p2.y.toFixed(2);
}
return d;
}
function buildChart(hourly, dateStr) {
var times = (hourly && hourly.time) || [];
var temps = (hourly && hourly.temperature_2m) || [];
var points = [];
for (var i = 0; i < times.length; i++) {
var t = times[i];
if (typeof t !== "string" || t.indexOf(dateStr) !== 0) continue;
var hour = parseInt(t.slice(11, 13), 10);
var v = temps[i];
if (Number.isFinite(v) && Number.isFinite(hour)) points.push({ hour: hour, v: v });
}
if (points.length === 0) {
return '<div style="padding:24px 0;color:var(--ink-mute);font-size:14px;">No hourly data for this date.</div>';
}
var W = 1152, H = 190;
var padL = 12, padR = 12, padT = 30, padB = 34;
var cw = W - padL - padR;
var ch = H - padT - padB;
var vals = points.map(function (p) { return p.v; });
var min = Math.min.apply(null, vals);
var max = Math.max.apply(null, vals);
var range = Math.max(1, max - min);
var yMin = min - range * 0.20;
var yMax = max + range * 0.35;
var yRange = yMax - yMin;
function xFor(h) { return padL + (h / 23) * cw; }
function yFor(v) { return padT + (1 - (v - yMin) / yRange) * ch; }
var pts = points.map(function (p) {
return { x: xFor(p.hour), y: yFor(p.v), v: p.v, hour: p.hour };
});
var line = smoothPath(pts);
var area = line
+ " L " + pts[pts.length - 1].x.toFixed(2) + " " + (padT + ch)
+ " L " + pts[0].x.toFixed(2) + " " + (padT + ch)
+ " Z";
var peakIdx = 0, troughIdx = 0;
for (var j = 1; j < pts.length; j++) {
if (pts[j].v > pts[peakIdx].v) peakIdx = j;
if (pts[j].v < pts[troughIdx].v) troughIdx = j;
}
var tickHours = [0, 3, 6, 9, 12, 15, 18, 21];
var ticksSvg = tickHours.map(function (h) {
var x = xFor(h);
var label;
if (h === 0) label = "12 AM";
else if (h === 12) label = "12 PM";
else if (h < 12) label = h + " AM";
else label = (h - 12) + " PM";
return '<text class="axis-label" x="' + x.toFixed(2) + '" y="' + (H - 8) + '" text-anchor="middle">' + label + "</text>";
}).join("");
var gridSvg = "";
tickHours.forEach(function (h) {
var x = xFor(h);
gridSvg += '<line class="grid" x1="' + x.toFixed(2) + '" y1="' + padT + '" x2="' + x.toFixed(2) + '" y2="' + (padT + ch) + '"/>';
});
[0, 0.5, 1].forEach(function (f) {
var y = padT + f * ch;
gridSvg += '<line class="grid" x1="' + padL + '" y1="' + y.toFixed(2) + '" x2="' + (W - padR) + '" y2="' + y.toFixed(2) + '"/>';
});
var dotsSvg = pts.map(function (p) {
return '<circle class="hour-dot" cx="' + p.x.toFixed(2) + '" cy="' + p.y.toFixed(2) + '" r="2"/>';
}).join("");
var peak = pts[peakIdx];
var trough = pts[troughIdx];
function markerBadge(p, above) {
var lbl = Math.round(p.v) + "°";
var bw = 44, bh = 22;
var bx = Math.max(padL + 4, Math.min(W - padR - bw - 4, p.x - bw / 2));
var by = above ? (p.y - bh - 12) : (p.y + 12);
return '<g>'
+ '<rect class="marker-badge" x="' + bx.toFixed(2) + '" y="' + by.toFixed(2) + '" width="' + bw + '" height="' + bh + '" rx="11" ry="11"/>'
+ '<text class="marker-label" x="' + (bx + bw / 2).toFixed(2) + '" y="' + (by + bh / 2 + 4.5).toFixed(2) + '" text-anchor="middle">' + lbl + '</text>'
+ '<circle class="marker" cx="' + p.x.toFixed(2) + '" cy="' + p.y.toFixed(2) + '" r="5"/>'
+ '</g>';
}
return '<svg class="chart-svg" viewBox="0 0 ' + W + " " + H + '" preserveAspectRatio="none">'
+ '<defs>'
+ '<linearGradient id="gradFill" x1="0" y1="0" x2="0" y2="1">'
+ '<stop offset="0%" stop-color="var(--accent)" stop-opacity="0.35"/>'
+ '<stop offset="100%" stop-color="var(--accent)" stop-opacity="0"/>'
+ '</linearGradient>'
+ '</defs>'
+ gridSvg
+ '<path class="curve-fill" d="' + area + '"/>'
+ '<path class="curve" d="' + line + '"/>'
+ dotsSvg
+ ticksSvg
+ markerBadge(peak, true)
+ markerBadge(trough, false)
+ '</svg>';
}
function renderError(message, detail) {
document.body.setAttribute("data-theme", "cloudy");
var el = document.getElementById("card");
el.innerHTML = ''
+ '<div class="error">'
+ '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5">'
+ '<path d="M12 9v4M12 17h.01M4.93 19h14.14a2 2 0 0 0 1.75-2.96l-7.07-12a2 2 0 0 0-3.5 0l-7.07 12A2 2 0 0 0 4.93 19z" stroke-linecap="round" stroke-linejoin="round"/>'
+ '</svg>'
+ '<div class="title">Weather data unavailable</div>'
+ '<div class="msg">' + escapeHtml(message) + '</div>'
+ (detail ? '<div class="details">' + escapeHtml(detail) + '</div>' : '')
+ '</div>';
}
function render(params, data) {
var daily = data && data.daily;
if (!daily || !Array.isArray(daily.time)) {
throw new Error("The weather service returned no daily data.");
}
var idx = daily.time.indexOf(params.date);
if (idx < 0) {
throw new Error("No data returned for " + params.date + ".");
}
var tMax = daily.temperature_2m_max && daily.temperature_2m_max[idx];
var tMin = daily.temperature_2m_min && daily.temperature_2m_min[idx];
var code = daily.weather_code && daily.weather_code[idx];
if (!Number.isFinite(tMax) || !Number.isFinite(tMin)) {
throw new Error("Temperature values are missing.");
}
var info = WEATHER[code] || { label: "Unknown conditions", icon: "cloud", theme: "cloudy" };
document.body.setAttribute("data-theme", info.theme);
var chart = buildChart(data.hourly || {}, params.date);
document.getElementById("card").innerHTML = ''
+ '<header class="header">'
+ '<div>'
+ '<h1 class="location">' + escapeHtml(params.name) + '</h1>'
+ '<div class="date">' + escapeHtml(formatDateLong(params.date)) + '</div>'
+ '<div class="meta">' + escapeHtml(formatCoord(params.lat, params.lon)) + ' · UTC</div>'
+ '</div>'
+ '<div class="icon-block">'
+ '<div class="icon-wrap">' + icon(info.icon) + '</div>'
+ '<div class="condition">' + escapeHtml(info.label) + '</div>'
+ '</div>'
+ '</header>'
+ '<section class="hero">'
+ '<div class="stat hi">'
+ '<div class="label">High</div>'
+ '<div class="value">' + Math.round(tMax) + '<span class="deg">°C</span></div>'
+ '</div>'
+ '<div class="divider"></div>'
+ '<div class="stat lo">'
+ '<div class="label">Low</div>'
+ '<div class="value">' + Math.round(tMin) + '<span class="deg">°C</span></div>'
+ '</div>'
+ '</section>'
+ '<section class="chart-section">'
+ '<div class="chart-header">'
+ '<div class="chart-title">Hourly Temperature</div>'
+ '<div class="chart-sub">°C · UTC</div>'
+ '</div>'
+ chart
+ '</section>';
}
async function main() {
var params = parseParams();
try {
var data = await fetchWeather(params);
render(params, data);
} catch (err) {
var msg = "We couldn't load weather for " + params.name + " on " + params.date + ".";
renderError(msg, err && err.message ? err.message : String(err));
}
}
main();
})();
</script>
</body>
</html>L1 — cheap deterministic descriptors
| bytes total | 27,744 | html / css / js | 328 / 7,624 / 19,792 |
|---|---|---|---|
| dom nodes | 10 | dom depth | 4 |
| css rules | 51 | js present | yes |
| brightness | 202.5 | contrast | 39.1 |
| colorfulness | 33.6 | whitespace | 67.7% |
This slot's telemetry
| prompt tokens | 7 | completion tokens | 49,918 |
|---|---|---|---|
| total tokens | 49,925 | wall | 404.7 s |
| cost | — | request id | — |
config.json613 B
{
"N": 2,
"auth": {
"credential_ref": "WCB_NONE",
"method": "oauth-login"
},
"billing": "plan",
"config_id": "claude-opus-4-7-thinking-eff-xhigh--cli--cursor-xl--dev",
"effort": "xhigh",
"family": "claude",
"m": {
"min": 2,
"q": 2
},
"model_id": "claude-opus-4-7-thinking",
"protocol": "cli",
"served_model": "claude-opus-4-7-thinking-xhigh",
"telemetry": {
"completion_tokens": 82176,
"cost_usd": null,
"prompt_tokens": 28,
"total_tokens": 82204,
"wall_ms": 726762
},
"transport": "cursor-agent-cli-isolated-home",
"vendor_sanction_ref": null
}send-log2.5 KB
{
"N": 2,
"batch_id": "2026-08-13--cursor-xl-s0",
"config_id": "claude-opus-4-7-thinking-eff-xhigh--cli--cursor-xl--dev",
"positions": [
{
"attempts": [
{
"attempt_index": 0,
"backoff_ms": null,
"charged": true,
"ended_at": "2026-08-13T14:35:04.161686+00:00",
"http_status": null,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-08-13T14:33:03.598757+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-13T14:41:52.256276+00:00",
"http_status": null,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-08-13T14:35:07.444308+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-13T14:43:46.586655+00:00",
"http_status": null,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-08-13T14:41:55.770698+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-13T14:45:20.717580+00:00",
"http_status": null,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-08-13T14:43:50.076573+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
}
}
}