gpt-5.6-terra @ max · cursor-xl
cursor-xlmax
- config
- gpt-5.6-terra-eff-max--cli--cursor-xl--dev
- batch
- 2026-07-19--unified
- transport
- cursor-agent-cli-isolated-home
- protocol
- cli · plan
- served model
- gpt-5.6-terra-max
- 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
gpt-5.6-luna @max · cursor-xl0.75gpt-5.6-luna @xhigh · cursor-xl0.73gpt-5.6-luna @xhigh · kiro0.73gpt-5.6-luna @max · codex-oauth0.72gpt-5.6-luna @xhigh · cursor0.72farthest
north-mini-code-free · api0.47claude-haiku-4-5 @max · CC0.47claude-haiku-4-5 @medium · CC0.48claude-sonnet-4 · cursor0.48claude-haiku-4-5 @xhigh · CC0.48within 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 tempmatchshown: 25.3
- min tempmatchshown: 16
- 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=device-width, initial-scale=1">
<title>Weather</title>
<style>
:root {
color-scheme: dark;
font-family: Inter, ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
font-synthesis: none;
}
* { box-sizing: border-box; }
body {
margin: 0;
min-width: 980px;
min-height: 100vh;
overflow: hidden;
color: #edf5ff;
background:
radial-gradient(circle at 15% 12%, rgba(59, 133, 221, .18), transparent 27%),
radial-gradient(circle at 86% 82%, rgba(81, 214, 193, .11), transparent 28%),
linear-gradient(135deg, #07101d 0%, #0b1728 47%, #0d1d30 100%);
}
body::before {
position: fixed;
inset: 0;
z-index: -1;
content: "";
opacity: .35;
background-image:
linear-gradient(rgba(154, 185, 220, .035) 1px, transparent 1px),
linear-gradient(90deg, rgba(154, 185, 220, .035) 1px, transparent 1px);
background-size: 42px 42px;
mask-image: linear-gradient(to bottom, black, transparent 85%);
}
.ambient {
position: fixed;
z-index: -1;
border-radius: 50%;
filter: blur(3px);
pointer-events: none;
}
.ambient-one {
width: 240px;
height: 240px;
top: 60px;
right: 96px;
border: 1px solid rgba(124, 190, 255, .11);
box-shadow: 0 0 90px rgba(72, 151, 255, .08);
}
.ambient-two {
width: 420px;
height: 420px;
bottom: -250px;
left: 80px;
background: rgba(51, 173, 190, .08);
filter: blur(85px);
}
.page {
min-height: 100vh;
display: grid;
place-items: center;
padding: 42px;
}
.weather-card {
--weather-glow: rgba(255, 194, 90, .34);
position: relative;
isolation: isolate;
width: min(1120px, calc(100vw - 84px));
min-height: 628px;
display: grid;
grid-template-columns: 390px minmax(0, 1fr);
overflow: hidden;
border: 1px solid rgba(178, 211, 246, .16);
border-radius: 30px;
background:
linear-gradient(115deg, rgba(19, 36, 57, .97), rgba(12, 25, 43, .95) 48%, rgba(11, 24, 42, .97));
box-shadow:
0 32px 80px rgba(0, 0, 0, .38),
0 3px 0 rgba(255, 255, 255, .025) inset,
0 -1px 0 rgba(0, 0, 0, .18) inset;
}
.weather-card::before {
position: absolute;
inset: 0;
z-index: -1;
content: "";
opacity: .58;
background:
linear-gradient(120deg, rgba(255, 255, 255, .035), transparent 27%),
radial-gradient(circle at 74% -35%, rgba(91, 180, 255, .12), transparent 37%);
pointer-events: none;
}
.hero {
position: relative;
display: flex;
flex-direction: column;
min-width: 0;
padding: 34px 36px 35px;
overflow: hidden;
border-right: 1px solid rgba(178, 211, 246, .12);
background:
linear-gradient(160deg, rgba(45, 78, 111, .35), rgba(24, 45, 71, .13) 62%, rgba(11, 28, 48, .26));
}
.hero::before {
position: absolute;
width: 380px;
height: 380px;
top: 94px;
left: 15px;
z-index: -1;
content: "";
border-radius: 50%;
background: radial-gradient(circle, var(--weather-glow) 0%, rgba(255, 214, 126, .1) 34%, transparent 69%);
filter: blur(3px);
opacity: .92;
}
.hero::after {
position: absolute;
width: 290px;
height: 290px;
top: 111px;
left: 47px;
z-index: -1;
content: "";
border: 1px solid rgba(230, 244, 255, .09);
border-radius: 50%;
box-shadow:
0 0 0 20px rgba(213, 236, 255, .018),
0 0 0 55px rgba(213, 236, 255, .012);
}
.status-line,
.panel-kicker,
.hourly-heading,
.metric-label,
.source-label {
letter-spacing: .13em;
text-transform: uppercase;
}
.status-line {
display: inline-flex;
align-items: center;
gap: 8px;
width: fit-content;
min-height: 24px;
padding: 0 9px;
border: 1px solid rgba(207, 230, 255, .14);
border-radius: 999px;
color: #b9cee3;
font-size: 9px;
font-weight: 750;
background: rgba(6, 17, 30, .22);
}
.status-pulse {
width: 6px;
height: 6px;
border-radius: 50%;
background: #86bdf3;
box-shadow: 0 0 0 4px rgba(134, 189, 243, .12);
animation: pulse 1.7s ease-in-out infinite;
}
.is-ready .status-pulse {
background: #62dfc8;
box-shadow: 0 0 0 4px rgba(98, 223, 200, .12);
animation: none;
}
.is-error .status-pulse {
background: #ff8b8b;
box-shadow: 0 0 0 4px rgba(255, 139, 139, .13);
animation: none;
}
@keyframes pulse {
50% { opacity: .45; transform: scale(.72); }
}
.location-block {
margin-top: 27px;
}
.location-block h1 {
max-width: 310px;
margin: 0;
overflow-wrap: anywhere;
color: #f7fbff;
font-size: clamp(30px, 3vw, 40px);
font-weight: 670;
letter-spacing: -.055em;
line-height: 1.05;
}
.date-label {
margin: 10px 0 0;
color: #aac1d8;
font-size: 13px;
font-weight: 520;
letter-spacing: .005em;
}
.coordinates {
margin: 7px 0 0;
color: #6f91af;
font-size: 10px;
font-weight: 650;
letter-spacing: .08em;
text-transform: uppercase;
}
.weather-illustration {
width: 254px;
height: 190px;
margin: 4px auto 0;
display: grid;
place-items: center;
}
.weather-illustration svg,
.mini-weather svg {
width: 100%;
height: 100%;
overflow: visible;
filter: drop-shadow(0 18px 18px rgba(0, 9, 20, .22));
}
.icon-sun-core {
fill: #ffd369;
stroke: #fff0b3;
stroke-width: 3;
}
.icon-rays {
fill: none;
stroke: #ffe29a;
stroke-width: 5;
stroke-linecap: round;
}
.icon-cloud {
fill: #b8cce0;
stroke: #e5f3ff;
stroke-width: 3;
stroke-linejoin: round;
}
.icon-cloud-shadow {
fill: #7d9ab6;
opacity: .42;
}
.icon-rain {
fill: none;
stroke: #69d6ff;
stroke-width: 5;
stroke-linecap: round;
}
.icon-snow {
fill: none;
stroke: #d9f5ff;
stroke-width: 4;
stroke-linecap: round;
}
.icon-lightning {
fill: #ffda67;
stroke: #ffecaa;
stroke-width: 2;
stroke-linejoin: round;
}
.icon-fog {
fill: none;
stroke: #c9ddeb;
stroke-width: 4;
stroke-linecap: round;
opacity: .86;
}
.hero-reading {
margin-top: auto;
position: relative;
}
.temperature-primary {
display: flex;
align-items: flex-start;
color: #ffffff;
font-variant-numeric: tabular-nums;
}
.temperature-primary .number {
font-size: 80px;
font-weight: 620;
letter-spacing: -.085em;
line-height: .84;
}
.temperature-primary .unit {
margin: 9px 0 0 9px;
color: #d6e8f7;
font-size: 19px;
font-weight: 650;
letter-spacing: -.04em;
}
.hero-condition {
margin: 14px 0 0;
color: #e7f2fb;
font-size: 16px;
font-weight: 630;
letter-spacing: -.015em;
}
.low-reading {
margin: 6px 0 0;
color: #9fb8d0;
font-size: 12px;
font-weight: 560;
}
.low-reading span {
color: #d8e8f5;
font-variant-numeric: tabular-nums;
}
.detail-panel {
min-width: 0;
padding: 34px 36px 32px;
display: flex;
flex-direction: column;
}
.panel-top {
display: flex;
align-items: flex-start;
justify-content: space-between;
gap: 20px;
}
.panel-kicker {
margin: 0;
color: #83a6c7;
font-size: 10px;
font-weight: 760;
}
.panel-subtitle {
margin: 8px 0 0;
color: #dce9f5;
font-size: 15px;
font-weight: 560;
}
.source-label {
flex: 0 0 auto;
margin-top: 1px;
color: #7d9bb6;
font-size: 9px;
font-weight: 730;
text-align: right;
}
.condition-band {
display: grid;
grid-template-columns: 74px minmax(0, 1fr);
align-items: center;
gap: 17px;
margin-top: 23px;
min-height: 84px;
padding: 11px 16px 11px 11px;
border: 1px solid rgba(177, 212, 244, .11);
border-radius: 18px;
background: linear-gradient(100deg, rgba(91, 135, 178, .13), rgba(92, 160, 188, .045));
}
.mini-weather {
width: 66px;
height: 60px;
display: grid;
place-items: center;
}
.condition-copy {
min-width: 0;
}
.condition-copy h2 {
margin: 0;
color: #f2f8ff;
font-size: 20px;
font-weight: 650;
letter-spacing: -.035em;
}
.condition-copy p {
margin: 5px 0 0;
color: #9db8d0;
font-size: 12px;
line-height: 1.4;
}
.metrics {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 10px;
margin-top: 17px;
}
.metric {
min-height: 74px;
padding: 13px 15px;
border: 1px solid rgba(181, 213, 243, .09);
border-radius: 15px;
background: rgba(5, 16, 29, .17);
}
.metric-label {
display: flex;
align-items: center;
gap: 7px;
color: #7fa1c1;
font-size: 9px;
font-weight: 750;
}
.metric-label::before {
width: 6px;
height: 6px;
content: "";
border-radius: 50%;
background: #ffcf6c;
box-shadow: 0 0 0 3px rgba(255, 207, 108, .1);
}
.metric:last-child .metric-label::before {
background: #75cbff;
box-shadow: 0 0 0 3px rgba(117, 203, 255, .1);
}
.metric-value {
display: block;
margin-top: 7px;
color: #f3f9ff;
font-size: 24px;
font-weight: 650;
letter-spacing: -.045em;
font-variant-numeric: tabular-nums;
}
.hourly-section {
margin-top: 21px;
}
.hourly-topline {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 10px;
}
.hourly-heading {
margin: 0;
color: #d7e7f6;
font-size: 10px;
font-weight: 760;
}
.hourly-unit {
color: #7697b3;
font-size: 10px;
font-weight: 660;
letter-spacing: .04em;
}
.chart-shell {
position: relative;
height: 124px;
overflow: hidden;
border: 1px solid rgba(178, 210, 241, .09);
border-radius: 15px;
background:
linear-gradient(180deg, rgba(39, 76, 112, .17), rgba(11, 27, 46, .16)),
rgba(4, 14, 26, .14);
}
.chart-shell svg {
display: block;
width: 100%;
height: 100%;
}
.chart-grid-line {
stroke: rgba(178, 212, 241, .12);
stroke-width: 1;
}
.chart-area {
fill: url(#temperature-fill);
}
.chart-line {
fill: none;
stroke: #88d9f5;
stroke-width: 3;
stroke-linecap: round;
stroke-linejoin: round;
filter: drop-shadow(0 3px 4px rgba(50, 194, 234, .28));
}
.chart-point {
fill: #d8f8ff;
stroke: #61caed;
stroke-width: 2;
}
.chart-label {
fill: #6f91ad;
font-family: Inter, ui-sans-serif, sans-serif;
font-size: 9px;
font-weight: 650;
letter-spacing: .08em;
}
.hourly-grid {
display: grid;
grid-template-columns: repeat(12, minmax(0, 1fr));
gap: 6px;
margin-top: 10px;
}
.hour-cell {
min-width: 0;
min-height: 57px;
padding: 8px 3px 6px;
border: 1px solid rgba(174, 209, 240, .075);
border-radius: 10px;
text-align: center;
background: rgba(6, 18, 32, .13);
transition: background .2s ease, transform .2s ease;
}
.hour-cell:hover {
background: rgba(86, 151, 188, .17);
transform: translateY(-2px);
}
.hour-cell.is-daylight {
border-color: rgba(239, 199, 106, .11);
background: linear-gradient(180deg, rgba(147, 123, 67, .12), rgba(10, 24, 39, .12));
}
.hour-time {
display: block;
color: #7898b4;
font-size: 9px;
font-weight: 720;
letter-spacing: .02em;
font-variant-numeric: tabular-nums;
}
.hour-value {
display: block;
margin-top: 6px;
color: #e9f5fe;
font-size: 12px;
font-weight: 680;
letter-spacing: -.035em;
font-variant-numeric: tabular-nums;
}
.hour-cell.is-unavailable .hour-value {
color: #7991a9;
}
.empty-chart {
width: 100%;
height: 100%;
display: grid;
place-items: center;
color: #7793ac;
font-size: 12px;
}
.error-message {
display: flex;
align-items: center;
gap: 10px;
margin-top: 16px;
padding: 10px 13px;
border: 1px solid rgba(255, 142, 142, .22);
border-radius: 12px;
color: #ffc3c3;
background: rgba(112, 37, 46, .2);
font-size: 12px;
line-height: 1.35;
}
.error-message[hidden] {
display: none;
}
.error-icon {
flex: 0 0 auto;
width: 20px;
height: 20px;
display: grid;
place-items: center;
border: 1px solid rgba(255, 172, 172, .38);
border-radius: 50%;
color: #ffb0b0;
font-size: 13px;
font-weight: 800;
}
.error-message strong {
display: block;
color: #ffd0d0;
font-weight: 700;
}
.error-message span:last-child {
color: #dea6ac;
}
@media (max-width: 1040px) {
body { min-width: 0; overflow: auto; }
.page { padding: 24px; }
.weather-card {
width: min(760px, 100%);
grid-template-columns: 1fr;
}
.hero {
min-height: 420px;
border-right: 0;
border-bottom: 1px solid rgba(178, 211, 246, .12);
}
.weather-illustration {
position: absolute;
top: 90px;
right: 22px;
width: 210px;
}
}
@media (max-width: 620px) {
.page { padding: 12px; }
.hero, .detail-panel { padding: 26px 22px; }
.weather-illustration { opacity: .7; right: -18px; }
.hourly-grid { grid-template-columns: repeat(6, minmax(0, 1fr)); }
.source-label { display: none; }
}
</style>
</head>
<body>
<div class="ambient ambient-one" aria-hidden="true"></div>
<div class="ambient ambient-two" aria-hidden="true"></div>
<main class="page">
<section id="weather-card" class="weather-card is-loading" aria-labelledby="location-name" aria-busy="true">
<aside class="hero">
<div class="status-line">
<span class="status-pulse" aria-hidden="true"></span>
<span id="status-copy">Loading weather</span>
</div>
<div class="location-block">
<h1 id="location-name">Berlin</h1>
<p id="date-label" class="date-label">—</p>
<p id="coordinates" class="coordinates">—</p>
</div>
<div id="weather-icon" class="weather-illustration" aria-hidden="true"></div>
<div class="hero-reading">
<div class="temperature-primary">
<span id="hero-max" class="number">—</span>
<span class="unit">°C</span>
</div>
<p id="hero-condition" class="hero-condition">Loading conditions</p>
<p class="low-reading">Daily low <span id="hero-min">—</span></p>
</div>
</aside>
<section class="detail-panel">
<div class="panel-top">
<div>
<p class="panel-kicker">One day outlook</p>
<p class="panel-subtitle">Temperature across the day</p>
</div>
<span id="source-label" class="source-label">UTC</span>
</div>
<div class="condition-band">
<div id="mini-icon" class="mini-weather" aria-hidden="true"></div>
<div class="condition-copy">
<h2 id="condition-name">Preparing forecast</h2>
<p id="condition-detail">Connecting to the weather service.</p>
</div>
</div>
<div class="metrics" aria-label="Daily temperatures">
<div class="metric">
<span class="metric-label">Maximum</span>
<strong id="max-reading" class="metric-value">—</strong>
</div>
<div class="metric">
<span class="metric-label">Minimum</span>
<strong id="min-reading" class="metric-value">—</strong>
</div>
</div>
<div id="error-message" class="error-message" role="status" hidden>
<span class="error-icon" aria-hidden="true">!</span>
<div>
<strong>Weather data could not be loaded.</strong>
<span>Please try again later.</span>
</div>
</div>
<section class="hourly-section" aria-labelledby="hourly-heading">
<div class="hourly-topline">
<h2 id="hourly-heading" class="hourly-heading">Hourly temperature</h2>
<span class="hourly-unit">UTC · °C</span>
</div>
<div id="hourly-chart" class="chart-shell" role="img" aria-label="Hourly temperature chart"></div>
<div id="hourly-grid" class="hourly-grid" aria-label="Hourly temperatures in Celsius"></div>
</section>
</section>
</section>
</main>
<script>
(() => {
"use strict";
const query = new URLSearchParams(window.location.search);
const utcToday = new Date().toISOString().slice(0, 10);
const requestedDate = validDate(query.get("date"), utcToday);
const latitude = validCoordinate("lat", 52.52, -90, 90);
const longitude = validCoordinate("lon", 13.405, -180, 180);
const locationName = (query.get("name") || "").trim() || "Berlin";
const isPast = requestedDate < utcToday;
const card = document.getElementById("weather-card");
const locationElement = document.getElementById("location-name");
const dateElement = document.getElementById("date-label");
const coordinatesElement = document.getElementById("coordinates");
const statusCopy = document.getElementById("status-copy");
const sourceLabel = document.getElementById("source-label");
const weatherIcon = document.getElementById("weather-icon");
const miniIcon = document.getElementById("mini-icon");
const heroMax = document.getElementById("hero-max");
const heroMin = document.getElementById("hero-min");
const heroCondition = document.getElementById("hero-condition");
const conditionName = document.getElementById("condition-name");
const conditionDetail = document.getElementById("condition-detail");
const maxReading = document.getElementById("max-reading");
const minReading = document.getElementById("min-reading");
const hourlyChart = document.getElementById("hourly-chart");
const hourlyGrid = document.getElementById("hourly-grid");
const errorMessage = document.getElementById("error-message");
locationElement.textContent = locationName;
dateElement.textContent = formatDate(requestedDate);
coordinatesElement.textContent = `${formatCoordinate(latitude, "N", "S")} · ${formatCoordinate(longitude, "E", "W")}`;
sourceLabel.textContent = `${isPast ? "Archive" : "Forecast"} · UTC`;
document.title = `${locationName} weather`;
setWeatherIcon("partly");
renderLoadingHours();
loadWeather();
function validDate(value, fallback) {
if (!value || !/^\d{4}-\d{2}-\d{2}$/.test(value)) return fallback;
const [year, month, day] = value.split("-").map(Number);
const date = new Date(Date.UTC(year, month - 1, day));
if (
date.getUTCFullYear() !== year ||
date.getUTCMonth() !== month - 1 ||
date.getUTCDate() !== day
) {
return fallback;
}
return value;
}
function validCoordinate(name, fallback, min, max) {
const rawValue = query.get(name);
if (rawValue === null || rawValue.trim() === "") return fallback;
const value = Number(rawValue);
return Number.isFinite(value) && value >= min && value <= max ? value : fallback;
}
function formatCoordinate(value, positive, negative) {
return `${Math.abs(value).toFixed(3)}° ${value >= 0 ? positive : negative}`;
}
function formatDate(isoDate) {
const [year, month, day] = isoDate.split("-").map(Number);
return new Intl.DateTimeFormat("en-US", {
weekday: "long",
month: "long",
day: "numeric",
year: "numeric",
timeZone: "UTC"
}).format(new Date(Date.UTC(year, month - 1, day, 12)));
}
function finiteNumber(value) {
if (value === null || value === undefined || value === "") return null;
const parsed = typeof value === "number" ? value : Number(value);
return Number.isFinite(parsed) ? parsed : null;
}
function temperatureNumber(value) {
if (!Number.isFinite(value)) return "—";
const rounded = Math.round(value * 10) / 10;
return Number.isInteger(rounded) ? String(rounded) : rounded.toFixed(1);
}
function temperature(value) {
return `${temperatureNumber(value)}°C`;
}
async function loadWeather() {
const apiParameters = new URLSearchParams({
latitude: String(latitude),
longitude: String(longitude),
daily: "temperature_2m_max,temperature_2m_min,weather_code",
hourly: "temperature_2m",
timezone: "UTC",
temperature_unit: "celsius",
start_date: requestedDate,
end_date: requestedDate
});
const endpoint = isPast ? "/api/om/archive" : "/api/om/forecast";
try {
const response = await fetch(`${endpoint}?${apiParameters.toString()}`, {
headers: { Accept: "application/json" }
});
if (!response.ok) {
throw new Error("Weather request failed");
}
const data = await response.json();
renderWeather(data);
} catch (error) {
renderError();
}
}
function renderWeather(data) {
const daily = data && data.daily;
const hourly = data && data.hourly;
if (
!daily ||
!Array.isArray(daily.time) ||
!hourly ||
!Array.isArray(hourly.time) ||
!Array.isArray(hourly.temperature_2m)
) {
throw new Error("Incomplete weather data");
}
const dailyIndex = daily.time.indexOf(requestedDate);
if (dailyIndex < 0) {
throw new Error("Requested day is unavailable");
}
const maximum = finiteNumber(daily.temperature_2m_max && daily.temperature_2m_max[dailyIndex]);
const minimum = finiteNumber(daily.temperature_2m_min && daily.temperature_2m_min[dailyIndex]);
const weatherCode = finiteNumber(daily.weather_code && daily.weather_code[dailyIndex]);
const hourlyRows = hourly.time
.map((timestamp, index) => ({
timestamp: String(timestamp),
value: finiteNumber(hourly.temperature_2m[index])
}))
.filter((entry) => entry.timestamp.slice(0, 10) === requestedDate);
if (
maximum === null ||
minimum === null ||
weatherCode === null ||
hourlyRows.length === 0 ||
!hourlyRows.some((entry) => entry.value !== null)
) {
throw new Error("Missing weather readings");
}
const condition = weatherDescription(weatherCode);
card.classList.remove("is-loading", "is-error");
card.classList.add("is-ready");
card.setAttribute("aria-busy", "false");
statusCopy.textContent = isPast ? "Observed weather" : "Forecast ready";
heroMax.textContent = temperatureNumber(maximum);
heroMin.textContent = temperature(minimum);
heroCondition.textContent = condition.title;
conditionName.textContent = condition.title;
conditionDetail.textContent = condition.detail;
maxReading.textContent = temperature(maximum);
minReading.textContent = temperature(minimum);
errorMessage.hidden = true;
setWeatherIcon(condition.kind);
renderChart(hourlyRows);
renderHours(hourlyRows);
}
function renderError() {
card.classList.remove("is-loading", "is-ready");
card.classList.add("is-error");
card.setAttribute("aria-busy", "false");
statusCopy.textContent = "Data unavailable";
heroMax.textContent = "—";
heroMin.textContent = "—";
heroCondition.textContent = "Weather unavailable";
conditionName.textContent = "Data unavailable";
conditionDetail.textContent = "The weather service did not return usable data for this date.";
maxReading.textContent = "—";
minReading.textContent = "—";
errorMessage.hidden = false;
hourlyChart.innerHTML = '<div class="empty-chart">No hourly readings available</div>';
renderUnavailableHours();
}
function weatherDescription(code) {
if (code === 0) return {
title: "Clear sky",
detail: "Bright, open skies throughout the day.",
kind: "clear"
};
if (code === 1) return {
title: "Mainly clear",
detail: "Mostly sunny with only a little cloud.",
kind: "partly"
};
if (code === 2) return {
title: "Partly cloudy",
detail: "A mix of sunshine and passing clouds.",
kind: "partly"
};
if (code === 3) return {
title: "Overcast",
detail: "A blanket of cloud covers the sky.",
kind: "cloud"
};
if ([45, 48].includes(code)) return {
title: "Foggy",
detail: "Visibility may be reduced at times.",
kind: "fog"
};
if ([51, 53, 55, 56, 57].includes(code)) return {
title: "Drizzle",
detail: "Light rain is expected through parts of the day.",
kind: "rain"
};
if ([61, 63, 65, 66, 67, 80, 81, 82].includes(code)) return {
title: "Rain",
detail: "Wet conditions are expected during the day.",
kind: "rain"
};
if ([71, 73, 75, 77, 85, 86].includes(code)) return {
title: "Snow",
detail: "Snowy conditions are expected during the day.",
kind: "snow"
};
if ([95, 96, 99].includes(code)) return {
title: "Thunderstorm",
detail: "Stormy conditions may develop during the day.",
kind: "storm"
};
return {
title: "Mixed conditions",
detail: "Weather conditions vary across the day.",
kind: "cloud"
};
}
function setWeatherIcon(kind) {
const palettes = {
clear: "rgba(255, 194, 90, .37)",
partly: "rgba(255, 190, 92, .26)",
cloud: "rgba(151, 201, 241, .21)",
fog: "rgba(164, 212, 236, .2)",
rain: "rgba(77, 181, 235, .25)",
snow: "rgba(191, 235, 255, .25)",
storm: "rgba(156, 119, 255, .25)"
};
card.style.setProperty("--weather-glow", palettes[kind] || palettes.cloud);
const icon = iconMarkup(kind);
weatherIcon.innerHTML = icon;
miniIcon.innerHTML = icon;
}
function iconMarkup(kind) {
const svgStart = '<svg viewBox="0 0 256 212" aria-hidden="true" focusable="false">';
const svgEnd = "</svg>";
const sun = `
<g class="icon-rays">
<path d="M104 35v17M104 136v17M53 94h17M138 94h17M68 58l12 12M128 118l12 12M68 130l12-12M128 70l12-12"/>
</g>
<circle class="icon-sun-core" cx="104" cy="94" r="34"/>
`;
const cloud = `
<ellipse class="icon-cloud-shadow" cx="139" cy="138" rx="69" ry="20"/>
<path class="icon-cloud" d="M58 139c0-18 13-32 31-34 8-24 31-39 56-34 20 3 36 18 41 38 18 1 32 15 32 33 0 19-16 34-35 34H93c-20 0-35-16-35-37Z"/>
`;
if (kind === "clear") {
return `${svgStart}
<circle cx="128" cy="101" r="74" fill="rgba(255,219,125,.09)"/>
<circle cx="128" cy="101" r="58" fill="rgba(255,219,125,.08)"/>
<g transform="translate(24 7)">${sun}</g>
${svgEnd}`;
}
if (kind === "partly") {
return `${svgStart}
<g transform="translate(7 2) scale(.88)">${sun}</g>
<g transform="translate(8 3)">${cloud}</g>
${svgEnd}`;
}
if (kind === "fog") {
return `${svgStart}
<g transform="translate(8 -5)">${cloud}</g>
<g class="icon-fog">
<path d="M53 180h150"/>
<path d="M70 194h116"/>
</g>
${svgEnd}`;
}
if (kind === "rain") {
return `${svgStart}
<g transform="translate(8 -12)">${cloud}</g>
<g class="icon-rain">
<path d="M92 174l-6 14"/>
<path d="M128 174l-6 14"/>
<path d="M164 174l-6 14"/>
</g>
${svgEnd}`;
}
if (kind === "snow") {
return `${svgStart}
<g transform="translate(8 -16)">${cloud}</g>
<g class="icon-snow">
<path d="M90 178v18M81 187h18M84 181l12 12M96 181l-12 12"/>
<path d="M137 178v18M128 187h18M131 181l12 12M143 181l-12 12"/>
<path d="M184 178v18M175 187h18M178 181l12 12M190 181l-12 12"/>
</g>
${svgEnd}`;
}
if (kind === "storm") {
return `${svgStart}
<g transform="translate(8 -10)">${cloud}</g>
<path class="icon-lightning" d="M132 150h22l-16 25h16l-34 38 10-30h-16z"/>
${svgEnd}`;
}
return `${svgStart}<g transform="translate(8 0)">${cloud}</g>${svgEnd}`;
}
function hourLabel(timestamp, index) {
const match = timestamp.match(/T(\d{2}):/);
return match ? match[1] : String(index).padStart(2, "0");
}
function renderChart(rows) {
const validRows = rows
.map((row, index) => ({ ...row, index }))
.filter((row) => row.value !== null);
if (!validRows.length) {
hourlyChart.innerHTML = '<div class="empty-chart">No hourly readings available</div>';
return;
}
const values = validRows.map((row) => row.value);
const min = Math.min(...values);
const max = Math.max(...values);
const range = Math.max(max - min, 5);
const chartMin = min - range * .22;
const chartMax = max + range * .22;
const width = 680;
const left = 17;
const right = 663;
const top = 16;
const bottom = 88;
const xFor = (index) => left + ((right - left) * index) / Math.max(rows.length - 1, 1);
const yFor = (value) => bottom - ((value - chartMin) / (chartMax - chartMin)) * (bottom - top);
const points = validRows.map((row) => ({
x: xFor(row.index),
y: yFor(row.value),
index: row.index
}));
const linePath = points
.map((point, index) => `${index === 0 ? "M" : "L"} ${point.x.toFixed(1)} ${point.y.toFixed(1)}`)
.join(" ");
const areaPath = points.length > 1
? `M ${points[0].x.toFixed(1)} ${bottom} L ${points.map((point) => `${point.x.toFixed(1)} ${point.y.toFixed(1)}`).join(" L ")} L ${points[points.length - 1].x.toFixed(1)} ${bottom} Z`
: "";
const horizontalGrid = [top, (top + bottom) / 2, bottom]
.map((y) => `<line class="chart-grid-line" x1="${left}" y1="${y}" x2="${right}" y2="${y}"/>`)
.join("");
const timeMarkers = [0, 6, 12, 18, rows.length - 1]
.filter((index, position, array) => index >= 0 && index < rows.length && array.indexOf(index) === position)
.map((index) => {
const label = hourLabel(rows[index].timestamp, index);
return `<text class="chart-label" x="${xFor(index).toFixed(1)}" y="113" text-anchor="middle">${label}</text>`;
})
.join("");
const circles = points
.map((point) => `<circle class="chart-point" cx="${point.x.toFixed(1)}" cy="${point.y.toFixed(1)}" r="3.1"/>`)
.join("");
hourlyChart.innerHTML = `
<svg viewBox="0 0 ${width} 124" preserveAspectRatio="none" aria-hidden="true">
<defs>
<linearGradient id="temperature-fill" x1="0" x2="0" y1="0" y2="1">
<stop offset="0%" stop-color="#72d6f5" stop-opacity=".25"/>
<stop offset="100%" stop-color="#72d6f5" stop-opacity="0"/>
</linearGradient>
</defs>
${horizontalGrid}
${areaPath ? `<path class="chart-area" d="${areaPath}"/>` : ""}
<path class="chart-line" d="${linePath}"/>
${circles}
${timeMarkers}
</svg>
`;
hourlyChart.setAttribute(
"aria-label",
`Hourly temperature chart in Celsius: ${rows.map((row, index) => `${hourLabel(row.timestamp, index)}:00 ${temperature(row.value)}`).join(", ")}`
);
}
function renderHours(rows) {
hourlyGrid.replaceChildren();
rows.forEach((row, index) => {
const hour = Number(hourLabel(row.timestamp, index));
const item = document.createElement("div");
item.className = `hour-cell${hour >= 6 && hour < 18 ? " is-daylight" : ""}`;
item.title = `${hourLabel(row.timestamp, index)}:00 UTC — ${temperature(row.value)}`;
const time = document.createElement("span");
time.className = "hour-time";
time.textContent = hourLabel(row.timestamp, index);
const value = document.createElement("span");
value.className = "hour-value";
value.textContent = row.value === null ? "—" : `${temperatureNumber(row.value)}°`;
item.append(time, value);
hourlyGrid.append(item);
});
}
function renderLoadingHours() {
hourlyChart.innerHTML = '<div class="empty-chart">Loading hourly temperatures</div>';
hourlyGrid.replaceChildren();
for (let index = 0; index < 24; index += 1) {
const item = document.createElement("div");
item.className = `hour-cell is-unavailable${index >= 6 && index < 18 ? " is-daylight" : ""}`;
const time = document.createElement("span");
time.className = "hour-time";
time.textContent = String(index).padStart(2, "0");
const value = document.createElement("span");
value.className = "hour-value";
value.textContent = "—";
item.append(time, value);
hourlyGrid.append(item);
}
}
function renderUnavailableHours() {
hourlyGrid.replaceChildren();
for (let index = 0; index < 24; index += 1) {
const item = document.createElement("div");
item.className = `hour-cell is-unavailable${index >= 6 && index < 18 ? " is-daylight" : ""}`;
const time = document.createElement("span");
time.className = "hour-time";
time.textContent = String(index).padStart(2, "0");
const value = document.createElement("span");
value.className = "hour-value";
value.textContent = "—";
item.append(time, value);
hourlyGrid.append(item);
}
}
})();
</script>
</body>
</html>L1 — cheap deterministic descriptors
| bytes total | 36,295 | html / css / js | 3,265 / 14,502 / 18,528 |
|---|---|---|---|
| dom nodes | 57 | dom depth | 8 |
| css rules | 93 | js present | yes |
| brightness | 34.4 | contrast | 27.7 |
| colorfulness | 15.3 | whitespace | 83.4% |
This slot's telemetry
| prompt tokens | 3 | completion tokens | 20,396 |
|---|---|---|---|
| total tokens | 20,399 | wall | 201.3 s |
| cost | — | request id | — |
config.json571 B
{
"N": 2,
"auth": {
"credential_ref": "WCB_NONE",
"method": "oauth-login"
},
"billing": "plan",
"config_id": "gpt-5.6-terra-eff-max--cli--cursor-xl--dev",
"effort": "max",
"family": "gpt",
"m": {
"min": 2,
"q": 2
},
"model_id": "gpt-5.6-terra",
"protocol": "cli",
"served_model": "gpt-5.6-terra-max",
"telemetry": {
"completion_tokens": 81195,
"cost_usd": null,
"prompt_tokens": 12,
"total_tokens": 81207,
"wall_ms": 831641
},
"transport": "cursor-agent-cli-isolated-home",
"vendor_sanction_ref": null
}send-log2.5 KB
{
"N": 2,
"batch_id": "2026-08-13--cursor-xl-s2",
"config_id": "gpt-5.6-terra-eff-max--cli--cursor-xl--dev",
"positions": [
{
"attempts": [
{
"attempt_index": 0,
"backoff_ms": null,
"charged": true,
"ended_at": "2026-08-13T13:20:35.817315+00:00",
"http_status": null,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-08-13T13:18:13.286870+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-13T13:24:00.663924+00:00",
"http_status": null,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-08-13T13:20:39.347141+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-13T13:30:01.476964+00:00",
"http_status": null,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-08-13T13:24:04.656394+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-13T13:32:16.572522+00:00",
"http_status": null,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-08-13T13:30:05.598730+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
}
}
}