gpt-5.6-sol @ ultra · codex-oauth
codex-oauthultra
- config
- gpt-5.6-sol-eff-ultra--cli--codex-oauth--dev
- batch
- 2026-07-19--unified
- transport
- codex-cli-oauth-chatgpt
- protocol
- cli · plan
- served model
- gpt-5.6-sol
- 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 @high · kiro0.63gpt-5.4 @xhigh · codex-oauth0.59gpt-5.4-mini @medium · codex-oauth0.59grok-4.5 · go0.58qwen3.7-max · qoder0.58farthest
claude-opus-4-8 @high · CC0.42hy3-free · api0.44gpt-5.6-terra @xhigh · kiro0.44gpt-5.6-sol @max · kiro0.44gpt-5.6-luna @max · codex-oauth0.44within 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
- hourlymatchcoverage 24/24 · 24 match · 0 mismatch · 0 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">
<meta name="color-scheme" content="light">
<title>Daily Weather</title>
<style>
:root {
--ink: #132238;
--muted: #68778b;
--line: rgba(19, 34, 56, 0.09);
--panel: rgba(255, 255, 255, 0.92);
--sky-a: #176cce;
--sky-b: #75c5ff;
--accent: #ffd36a;
--chart: #2477dc;
--chart-soft: rgba(36, 119, 220, 0.13);
}
* {
box-sizing: border-box;
}
html,
body {
width: 100%;
min-width: 320px;
min-height: 100%;
margin: 0;
}
body {
display: grid;
min-height: 100vh;
place-items: center;
overflow: hidden;
color: var(--ink);
background:
radial-gradient(circle at 13% 17%, rgba(255, 255, 255, 0.94) 0 4%, transparent 17%),
radial-gradient(circle at 88% 84%, rgba(113, 174, 239, 0.23), transparent 28%),
linear-gradient(135deg, #edf4fa 0%, #dfeaf5 52%, #eef4f8 100%);
font-family: Inter, ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
-webkit-font-smoothing: antialiased;
}
button {
font: inherit;
}
.ambient {
position: fixed;
z-index: 0;
border-radius: 999px;
pointer-events: none;
filter: blur(2px);
}
.ambient.one {
top: -110px;
right: 100px;
width: 320px;
height: 320px;
background: rgba(255, 255, 255, 0.62);
}
.ambient.two {
bottom: -180px;
left: -70px;
width: 410px;
height: 410px;
background: rgba(102, 166, 232, 0.16);
}
.weather-card {
position: relative;
z-index: 1;
width: min(1180px, calc(100vw - 64px));
height: min(720px, calc(100vh - 64px));
min-height: 620px;
padding: 20px;
overflow: hidden;
border: 1px solid rgba(255, 255, 255, 0.86);
border-radius: 34px;
background: rgba(250, 252, 255, 0.88);
box-shadow:
0 32px 80px rgba(40, 66, 99, 0.18),
0 3px 10px rgba(40, 66, 99, 0.06),
inset 0 1px 0 rgba(255, 255, 255, 0.95);
backdrop-filter: blur(20px);
}
.card-content {
display: grid;
height: 100%;
grid-template-rows: 54px 282px minmax(0, 1fr);
gap: 15px;
transition: opacity 180ms ease;
}
.is-loading .card-content {
opacity: 0.32;
}
.topbar {
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 8px;
}
.brand {
display: flex;
align-items: center;
gap: 12px;
}
.brand-mark {
position: relative;
width: 36px;
height: 36px;
overflow: hidden;
border-radius: 12px;
background: var(--ink);
box-shadow: 0 8px 18px rgba(19, 34, 56, 0.16);
}
.brand-mark::before,
.brand-mark::after {
position: absolute;
content: "";
border-radius: 50%;
}
.brand-mark::before {
top: 7px;
left: 7px;
width: 12px;
height: 12px;
background: var(--accent);
box-shadow: 10px 10px 0 rgba(255, 255, 255, 0.96);
}
.brand-mark::after {
right: -7px;
bottom: -7px;
width: 21px;
height: 21px;
border: 2px solid rgba(255, 255, 255, 0.46);
}
.brand-copy strong {
display: block;
font-size: 14px;
font-weight: 800;
letter-spacing: 0.08em;
line-height: 1.1;
text-transform: uppercase;
}
.brand-copy span {
display: block;
margin-top: 3px;
color: var(--muted);
font-size: 10px;
font-weight: 650;
letter-spacing: 0.16em;
text-transform: uppercase;
}
.mode-pill {
display: flex;
align-items: center;
gap: 8px;
min-height: 34px;
padding: 0 13px;
border: 1px solid var(--line);
border-radius: 999px;
color: #526174;
background: rgba(255, 255, 255, 0.68);
font-size: 11px;
font-weight: 750;
letter-spacing: 0.08em;
text-transform: uppercase;
}
.mode-dot {
width: 7px;
height: 7px;
border-radius: 50%;
background: var(--chart);
box-shadow: 0 0 0 4px var(--chart-soft);
}
.summary {
display: grid;
min-height: 0;
grid-template-columns: 1.08fr 0.92fr;
gap: 15px;
}
.sky-panel {
position: relative;
min-width: 0;
overflow: hidden;
padding: 27px 29px;
color: white;
border-radius: 26px;
background: linear-gradient(135deg, var(--sky-a), var(--sky-b));
box-shadow: 0 18px 36px color-mix(in srgb, var(--sky-a) 25%, transparent);
isolation: isolate;
}
.sky-panel::before {
position: absolute;
z-index: -1;
top: -104px;
right: -45px;
width: 265px;
height: 265px;
content: "";
border: 1px solid rgba(255, 255, 255, 0.2);
border-radius: 50%;
box-shadow:
0 0 0 32px rgba(255, 255, 255, 0.055),
0 0 0 65px rgba(255, 255, 255, 0.035);
}
.sky-panel::after {
position: absolute;
z-index: -1;
right: 96px;
bottom: -105px;
width: 230px;
height: 180px;
content: "";
border-radius: 50%;
background: rgba(255, 255, 255, 0.1);
filter: blur(1px);
}
.location-row {
display: flex;
align-items: center;
gap: 9px;
max-width: 66%;
}
.pin {
flex: 0 0 auto;
width: 16px;
height: 16px;
opacity: 0.88;
}
.location {
overflow: hidden;
margin: 0;
font-size: clamp(20px, 2vw, 27px);
font-weight: 760;
letter-spacing: -0.04em;
line-height: 1.15;
text-overflow: ellipsis;
white-space: nowrap;
}
.coordinates {
margin: 7px 0 0 25px;
color: rgba(255, 255, 255, 0.7);
font-size: 10px;
font-weight: 650;
letter-spacing: 0.1em;
text-transform: uppercase;
}
.condition {
position: relative;
z-index: 2;
max-width: 64%;
margin: 36px 0 0;
font-size: 17px;
font-weight: 650;
letter-spacing: -0.02em;
}
.weather-art {
position: absolute;
top: 46px;
right: 25px;
width: 172px;
height: 172px;
filter: drop-shadow(0 17px 18px rgba(15, 47, 82, 0.16));
}
.weather-art svg {
display: block;
width: 100%;
height: 100%;
}
.temperature-range {
position: absolute;
right: 29px;
bottom: 25px;
left: 29px;
display: flex;
align-items: flex-end;
gap: 22px;
}
.temperature-item {
position: relative;
min-width: 105px;
}
.temperature-item + .temperature-item {
padding-left: 22px;
}
.temperature-item + .temperature-item::before {
position: absolute;
top: 4px;
bottom: 3px;
left: 0;
width: 1px;
content: "";
background: rgba(255, 255, 255, 0.27);
}
.temperature-value {
display: block;
font-size: 43px;
font-weight: 650;
letter-spacing: -0.07em;
line-height: 0.95;
}
.temperature-label {
display: block;
margin-top: 8px;
color: rgba(255, 255, 255, 0.7);
font-size: 9px;
font-weight: 750;
letter-spacing: 0.15em;
text-transform: uppercase;
}
.unit-badge {
margin: 0 0 2px auto;
padding: 7px 9px;
border: 1px solid rgba(255, 255, 255, 0.2);
border-radius: 10px;
color: rgba(255, 255, 255, 0.8);
background: rgba(255, 255, 255, 0.09);
font-size: 10px;
font-weight: 750;
letter-spacing: 0.1em;
}
.day-panel {
display: flex;
min-width: 0;
flex-direction: column;
justify-content: space-between;
padding: 26px 28px 24px;
border: 1px solid rgba(19, 34, 56, 0.055);
border-radius: 26px;
background:
linear-gradient(145deg, rgba(255, 255, 255, 0.95), rgba(241, 246, 251, 0.92));
}
.eyebrow {
color: var(--chart);
font-size: 9px;
font-weight: 800;
letter-spacing: 0.18em;
text-transform: uppercase;
}
.date-heading {
margin: 8px 0 0;
font-size: clamp(29px, 3vw, 41px);
font-weight: 720;
letter-spacing: -0.055em;
line-height: 1.02;
}
.date-heading span {
display: block;
margin-top: 5px;
color: #526174;
font-size: 19px;
font-weight: 560;
letter-spacing: -0.03em;
}
.day-summary {
max-width: 460px;
margin: 13px 0 0;
color: var(--muted);
font-size: 12px;
line-height: 1.55;
}
.range-block {
margin-top: 17px;
}
.range-meta {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 9px;
color: #586779;
font-size: 9px;
font-weight: 750;
letter-spacing: 0.11em;
text-transform: uppercase;
}
.range-track {
position: relative;
height: 8px;
overflow: hidden;
border-radius: 999px;
background: #dfe7ef;
}
.range-fill {
position: absolute;
inset: 0;
border-radius: inherit;
background: linear-gradient(90deg, #79baf5, var(--chart), var(--accent));
}
.mini-stats {
display: grid;
margin-top: 18px;
grid-template-columns: repeat(3, 1fr);
gap: 8px;
}
.mini-stat {
min-width: 0;
padding: 11px 12px;
border: 1px solid var(--line);
border-radius: 13px;
background: rgba(255, 255, 255, 0.68);
}
.mini-stat span {
display: block;
overflow: hidden;
color: #7a8797;
font-size: 8px;
font-weight: 750;
letter-spacing: 0.11em;
text-overflow: ellipsis;
text-transform: uppercase;
white-space: nowrap;
}
.mini-stat strong {
display: block;
overflow: hidden;
margin-top: 6px;
font-size: 13px;
font-weight: 720;
letter-spacing: -0.025em;
text-overflow: ellipsis;
white-space: nowrap;
}
.hourly-panel {
display: flex;
min-height: 0;
flex-direction: column;
padding: 18px 20px 13px;
border: 1px solid rgba(19, 34, 56, 0.06);
border-radius: 26px;
background: var(--panel);
}
.hourly-header {
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 4px;
}
.hourly-title {
margin: 0;
font-size: 15px;
font-weight: 760;
letter-spacing: -0.025em;
}
.hourly-subtitle {
margin: 4px 0 0;
color: var(--muted);
font-size: 9px;
font-weight: 650;
letter-spacing: 0.11em;
text-transform: uppercase;
}
.reading-count {
color: #69788b;
font-size: 9px;
font-weight: 750;
letter-spacing: 0.11em;
text-transform: uppercase;
}
.chart-wrap {
position: relative;
min-height: 0;
flex: 1;
margin-top: 5px;
}
#chart {
display: block;
width: 100%;
height: 100%;
min-height: 170px;
overflow: visible;
}
.chart-tooltip {
position: absolute;
z-index: 3;
top: 15px;
left: 0;
display: none;
min-width: 76px;
padding: 8px 10px;
transform: translateX(-50%);
border: 1px solid rgba(255, 255, 255, 0.85);
border-radius: 10px;
color: white;
background: rgba(19, 34, 56, 0.93);
box-shadow: 0 8px 24px rgba(19, 34, 56, 0.2);
font-size: 10px;
line-height: 1.35;
pointer-events: none;
}
.chart-tooltip strong {
display: block;
font-size: 13px;
}
.chart-tooltip span {
color: rgba(255, 255, 255, 0.68);
}
.status-layer {
position: absolute;
z-index: 10;
inset: 0;
display: none;
place-items: center;
padding: 30px;
border-radius: inherit;
background: rgba(247, 251, 255, 0.77);
backdrop-filter: blur(7px);
}
.is-loading .status-layer,
.has-error .status-layer {
display: grid;
}
.status-card {
width: min(370px, 90%);
padding: 30px;
text-align: center;
border: 1px solid rgba(19, 34, 56, 0.08);
border-radius: 24px;
background: rgba(255, 255, 255, 0.94);
box-shadow: 0 20px 60px rgba(35, 62, 94, 0.15);
}
.status-icon {
display: grid;
width: 54px;
height: 54px;
margin: 0 auto 17px;
place-items: center;
border-radius: 18px;
color: var(--chart);
background: var(--chart-soft);
}
.loading-ring {
width: 23px;
height: 23px;
border: 2px solid rgba(36, 119, 220, 0.18);
border-top-color: var(--chart);
border-radius: 50%;
animation: spin 800ms linear infinite;
}
.error-mark {
display: none;
font-size: 25px;
font-weight: 500;
line-height: 1;
}
.has-error .loading-ring {
display: none;
}
.has-error .error-mark {
display: block;
}
.status-title {
margin: 0;
font-size: 19px;
font-weight: 760;
letter-spacing: -0.035em;
}
.status-message {
margin: 9px 0 0;
color: var(--muted);
font-size: 12px;
line-height: 1.55;
}
.retry-button {
display: none;
min-height: 38px;
margin: 19px auto 0;
padding: 0 17px;
border: 0;
border-radius: 12px;
color: white;
background: var(--ink);
cursor: pointer;
font-size: 11px;
font-weight: 750;
letter-spacing: 0.05em;
}
.retry-button:hover {
background: #263b56;
}
.has-error .retry-button {
display: block;
}
.sr-only {
position: absolute !important;
width: 1px !important;
height: 1px !important;
padding: 0 !important;
overflow: hidden !important;
clip: rect(0, 0, 0, 0) !important;
white-space: nowrap !important;
border: 0 !important;
}
@keyframes spin {
to {
transform: rotate(360deg);
}
}
@media (max-width: 900px), (max-height: 680px) {
body {
overflow: auto;
}
.weather-card {
width: calc(100vw - 28px);
height: auto;
min-height: 720px;
margin: 14px;
}
.card-content {
grid-template-rows: 54px auto 280px;
}
.summary {
grid-template-columns: 1fr;
}
.sky-panel,
.day-panel {
min-height: 282px;
}
}
@media (prefers-reduced-motion: reduce) {
*,
*::before,
*::after {
scroll-behavior: auto !important;
animation-duration: 1ms !important;
animation-iteration-count: 1 !important;
transition-duration: 1ms !important;
}
}
</style>
</head>
<body class="is-loading">
<div class="ambient one"></div>
<div class="ambient two"></div>
<main class="weather-card" id="weatherCard" aria-busy="true">
<div class="card-content">
<header class="topbar">
<div class="brand" aria-label="Atmos daily weather">
<div class="brand-mark" aria-hidden="true"></div>
<div class="brand-copy">
<strong>Atmos</strong>
<span>Daily weather</span>
</div>
</div>
<div class="mode-pill">
<span class="mode-dot" aria-hidden="true"></span>
<span id="modeLabel">Forecast · UTC</span>
</div>
</header>
<section class="summary" aria-label="Daily weather summary">
<article class="sky-panel">
<div class="location-row">
<svg class="pin" viewBox="0 0 24 24" fill="none" aria-hidden="true">
<path d="M20 10c0 5.3-8 11-8 11S4 15.3 4 10a8 8 0 1 1 16 0Z" stroke="currentColor" stroke-width="1.8"/>
<circle cx="12" cy="10" r="2.7" stroke="currentColor" stroke-width="1.8"/>
</svg>
<h1 class="location" id="locationLabel">Berlin</h1>
</div>
<p class="coordinates" id="coordinateLabel">52.520° N · 13.405° E</p>
<p class="condition" id="conditionLabel">Loading weather…</p>
<div class="weather-art" id="weatherArt" aria-hidden="true"></div>
<div class="temperature-range">
<div class="temperature-item">
<span class="temperature-value" id="highTemp">—</span>
<span class="temperature-label">Daily high</span>
</div>
<div class="temperature-item">
<span class="temperature-value" id="lowTemp">—</span>
<span class="temperature-label">Daily low</span>
</div>
<span class="unit-badge">°C</span>
</div>
</article>
<article class="day-panel">
<div>
<span class="eyebrow" id="dateEyebrow">Selected date</span>
<h2 class="date-heading" id="dateHeading">
Loading
<span>—</span>
</h2>
<p class="day-summary" id="daySummary">Retrieving the temperature profile for this day.</p>
</div>
<div>
<div class="range-block">
<div class="range-meta">
<span>Daily temperature range</span>
<span id="spreadLabel">—</span>
</div>
<div class="range-track" aria-hidden="true">
<span class="range-fill"></span>
</div>
</div>
<div class="mini-stats">
<div class="mini-stat">
<span>Condition</span>
<strong id="conditionMini">—</strong>
</div>
<div class="mini-stat">
<span>Maximum</span>
<strong id="maximumMini">—</strong>
</div>
<div class="mini-stat">
<span>Minimum</span>
<strong id="minimumMini">—</strong>
</div>
</div>
</div>
</article>
</section>
<section class="hourly-panel" aria-labelledby="hourlyTitle">
<div class="hourly-header">
<div>
<h2 class="hourly-title" id="hourlyTitle">Hourly temperatures</h2>
<p class="hourly-subtitle">Celsius · Coordinated Universal Time</p>
</div>
<span class="reading-count" id="readingCount">24 readings</span>
</div>
<div class="chart-wrap" id="chartWrap">
<svg id="chart" viewBox="0 0 1080 190" preserveAspectRatio="none" role="img" aria-label="Hourly temperature chart"></svg>
<div class="chart-tooltip" id="chartTooltip"></div>
</div>
<table class="sr-only" aria-label="Hourly temperatures">
<thead>
<tr><th>Time UTC</th><th>Temperature Celsius</th></tr>
</thead>
<tbody id="hourlyTable"></tbody>
</table>
</section>
</div>
<div class="status-layer" role="status" aria-live="polite">
<div class="status-card">
<div class="status-icon" aria-hidden="true">
<span class="loading-ring"></span>
<span class="error-mark">!</span>
</div>
<h2 class="status-title" id="statusTitle">Loading the day’s weather</h2>
<p class="status-message" id="statusMessage">Fetching daily and hourly temperatures in UTC.</p>
<button class="retry-button" id="retryButton" type="button">Try again</button>
</div>
</div>
</main>
<noscript>
<div style="position:fixed;inset:0;z-index:100;display:grid;place-items:center;padding:24px;background:#edf4fa;color:#132238;font:600 18px system-ui,sans-serif;text-align:center">
Weather data could not be loaded because JavaScript is disabled.
</div>
</noscript>
<script>
(() => {
"use strict";
const defaults = {
lat: 52.52,
lon: 13.405,
name: "Berlin"
};
const elements = {
card: document.getElementById("weatherCard"),
location: document.getElementById("locationLabel"),
coordinates: document.getElementById("coordinateLabel"),
mode: document.getElementById("modeLabel"),
condition: document.getElementById("conditionLabel"),
conditionMini: document.getElementById("conditionMini"),
high: document.getElementById("highTemp"),
low: document.getElementById("lowTemp"),
maximumMini: document.getElementById("maximumMini"),
minimumMini: document.getElementById("minimumMini"),
art: document.getElementById("weatherArt"),
eyebrow: document.getElementById("dateEyebrow"),
dateHeading: document.getElementById("dateHeading"),
summary: document.getElementById("daySummary"),
spread: document.getElementById("spreadLabel"),
readings: document.getElementById("readingCount"),
chart: document.getElementById("chart"),
chartWrap: document.getElementById("chartWrap"),
tooltip: document.getElementById("chartTooltip"),
table: document.getElementById("hourlyTable"),
statusTitle: document.getElementById("statusTitle"),
statusMessage: document.getElementById("statusMessage"),
retry: document.getElementById("retryButton")
};
const params = new URLSearchParams(location.search);
const todayUTC = new Date().toISOString().slice(0, 10);
function validCoordinate(raw, fallback, min, max) {
if (raw === null || raw.trim() === "") return fallback;
const value = Number(raw);
return Number.isFinite(value) && value >= min && value <= max ? value : fallback;
}
function validDate(raw) {
if (!raw || !/^\d{4}-\d{2}-\d{2}$/.test(raw)) return todayUTC;
const parsed = new Date(raw + "T00:00:00Z");
return Number.isFinite(parsed.getTime()) && parsed.toISOString().slice(0, 10) === raw
? raw
: todayUTC;
}
const state = {
lat: validCoordinate(params.get("lat"), defaults.lat, -90, 90),
lon: validCoordinate(params.get("lon"), defaults.lon, -180, 180),
name: (params.get("name") || defaults.name).trim().slice(0, 90) || defaults.name,
date: validDate(params.get("date"))
};
function coordinateText(value, positive, negative) {
return Math.abs(value).toFixed(3) + "° " + (value >= 0 ? positive : negative);
}
function temperature(value, suffix = false) {
const text = new Intl.NumberFormat(undefined, {
maximumFractionDigits: 1,
minimumFractionDigits: Math.abs(value % 1) > 0.04 ? 1 : 0
}).format(value);
return text + "°" + (suffix ? "C" : "");
}
function weatherMeta(code) {
if (code === 0) return { label: "Clear sky", kind: "clear", phrase: "A clear-sky day" };
if (code === 1) return { label: "Mainly clear", kind: "clear", phrase: "A mostly clear day" };
if (code === 2) return { label: "Partly cloudy", kind: "partly", phrase: "A partly cloudy day" };
if (code === 3) return { label: "Overcast", kind: "cloud", phrase: "An overcast day" };
if (code === 45 || code === 48) return { label: "Foggy", kind: "fog", phrase: "A foggy day" };
if ([51, 53, 55].includes(code)) return { label: "Drizzle", kind: "rain", phrase: "A day with drizzle" };
if ([56, 57].includes(code)) return { label: "Freezing drizzle", kind: "rain", phrase: "A day with freezing drizzle" };
if ([61, 63, 65].includes(code)) return { label: "Rain", kind: "rain", phrase: "A rainy day" };
if ([66, 67].includes(code)) return { label: "Freezing rain", kind: "rain", phrase: "A day with freezing rain" };
if ([71, 73, 75].includes(code)) return { label: "Snowfall", kind: "snow", phrase: "A snowy day" };
if (code === 77) return { label: "Snow grains", kind: "snow", phrase: "A day with snow grains" };
if ([80, 81, 82].includes(code)) return { label: "Rain showers", kind: "rain", phrase: "A day with rain showers" };
if ([85, 86].includes(code)) return { label: "Snow showers", kind: "snow", phrase: "A day with snow showers" };
if (code === 95) return { label: "Thunderstorm", kind: "storm", phrase: "A stormy day" };
if ([96, 99].includes(code)) return { label: "Thunderstorm with hail", kind: "storm", phrase: "A day with storms and hail" };
return { label: "Unknown conditions", kind: "cloud", phrase: "A day with variable conditions" };
}
const icons = {
clear: `
<svg viewBox="0 0 180 180" fill="none">
<g stroke="#FFE08A" stroke-width="6" stroke-linecap="round">
<path d="M90 23v14M90 143v14M23 90h14M143 90h14M43 43l10 10M127 127l10 10M137 43l-10 10M53 127l-10 10"/>
</g>
<circle cx="90" cy="90" r="38" fill="#FFD66B"/>
<circle cx="78" cy="76" r="12" fill="#FFE89E" opacity=".55"/>
</svg>`,
partly: `
<svg viewBox="0 0 180 180" fill="none">
<g stroke="#FFE08A" stroke-width="5" stroke-linecap="round" opacity=".9">
<path d="M70 23v12M28 65h12M100 35l-8 9M40 35l8 9"/>
</g>
<circle cx="70" cy="66" r="30" fill="#FFD66B"/>
<path d="M46 132h88c16 0 27-10 27-24 0-13-10-24-24-25-5-20-21-32-41-32-23 0-41 17-44 39-18 1-31 10-31 23 0 11 9 19 25 19Z" fill="white"/>
<path d="M52 132h82c16 0 27-10 27-24 0-7-3-13-8-18-5 22-23 31-51 31H29c4 7 12 11 23 11Z" fill="#DCECF7" opacity=".72"/>
</svg>`,
cloud: `
<svg viewBox="0 0 180 180" fill="none">
<path d="M37 126h102c18 0 31-12 31-28 0-15-12-27-28-28-6-23-25-39-50-39-29 0-51 20-55 47C16 80 4 91 4 106c0 12 11 20 33 20Z" fill="white"/>
<path d="M37 126h102c17 0 29-10 31-24-10 10-25 14-45 14H13c6 7 14 10 24 10Z" fill="#DCEAF3"/>
<ellipse cx="92" cy="140" rx="54" ry="7" fill="#184468" opacity=".12"/>
</svg>`,
fog: `
<svg viewBox="0 0 180 180" fill="none">
<path d="M48 101h81c15 0 26-10 26-23 0-12-10-22-23-23-5-19-21-31-40-31-23 0-41 16-44 38-17 1-28 10-28 21 0 10 9 18 28 18Z" fill="white"/>
<g stroke="white" stroke-width="8" stroke-linecap="round" opacity=".78">
<path d="M22 120h111M47 140h111M20 159h105"/>
</g>
</svg>`,
rain: `
<svg viewBox="0 0 180 180" fill="none">
<path d="M38 106h101c18 0 31-12 31-28 0-15-12-27-28-28-6-23-25-38-50-38-28 0-50 20-55 46C17 60 5 71 5 86c0 12 11 20 33 20Z" fill="white"/>
<path d="M38 106h101c15 0 27-9 30-21-11 8-25 11-43 11H13c6 7 14 10 25 10Z" fill="#DCEAF3"/>
<g stroke="#9FE2FF" stroke-width="7" stroke-linecap="round">
<path d="M51 124l-8 17M89 124l-9 20M128 124l-8 17"/>
</g>
</svg>`,
snow: `
<svg viewBox="0 0 180 180" fill="none">
<path d="M38 102h101c18 0 31-12 31-28 0-15-12-27-28-28C136 23 117 8 92 8 64 8 42 28 37 54 17 56 5 67 5 82c0 12 11 20 33 20Z" fill="white"/>
<g stroke="#D7F4FF" stroke-width="4" stroke-linecap="round">
<path d="M48 121v24M38 127l20 12M58 127l-20 12M92 121v24M82 127l20 12M102 127l-20 12M135 121v24M125 127l20 12M145 127l-20 12"/>
</g>
</svg>`,
storm: `
<svg viewBox="0 0 180 180" fill="none">
<path d="M38 101h101c18 0 31-12 31-28 0-15-12-27-28-28C136 22 117 7 92 7 64 7 42 27 37 53 17 55 5 66 5 81c0 12 11 20 33 20Z" fill="#E9ECF7"/>
<path d="M88 95h31l-20 28h16l-39 46 10-35H69l19-39Z" fill="#FFD15F"/>
<path d="M38 101h101c15 0 27-9 30-21-11 8-25 11-43 11H13c6 7 14 10 25 10Z" fill="#BEC9DE" opacity=".65"/>
</svg>`
};
const themes = {
clear: ["#1169c8", "#72c4ff", "#ffd36a", "#2378db"],
partly: ["#2375bf", "#8bc8ef", "#ffd36a", "#2878c5"],
cloud: ["#4d6783", "#9bb0c2", "#e5edf4", "#547b9f"],
fog: ["#60798a", "#aebfc5", "#eff6f7", "#607f90"],
rain: ["#173f68", "#5488b5", "#9fe2ff", "#3979b4"],
snow: ["#547c98", "#b8d8e3", "#eefbff", "#5b9ab9"],
storm: ["#22294e", "#5c6084", "#ffd15f", "#585ac0"]
};
function applyTheme(kind) {
const theme = themes[kind] || themes.cloud;
const root = document.documentElement.style;
root.setProperty("--sky-a", theme[0]);
root.setProperty("--sky-b", theme[1]);
root.setProperty("--accent", theme[2]);
root.setProperty("--chart", theme[3]);
root.setProperty("--chart-soft", theme[3] + "22");
}
function dateParts(dateString) {
const date = new Date(dateString + "T00:00:00Z");
return {
weekday: new Intl.DateTimeFormat(undefined, {
weekday: "long",
timeZone: "UTC"
}).format(date),
rest: new Intl.DateTimeFormat(undefined, {
day: "numeric",
month: "long",
year: "numeric",
timeZone: "UTC"
}).format(date)
};
}
function chartPath(points) {
if (points.length < 2) return "";
let path = `M ${points[0].x.toFixed(2)} ${points[0].y.toFixed(2)}`;
for (let i = 0; i < points.length - 1; i++) {
const current = points[i];
const next = points[i + 1];
const previous = points[i - 1] || current;
const after = points[i + 2] || next;
const cp1x = current.x + (next.x - previous.x) / 6;
const cp1y = current.y + (next.y - previous.y) / 6;
const cp2x = next.x - (after.x - current.x) / 6;
const cp2y = next.y - (after.y - current.y) / 6;
path += ` C ${cp1x.toFixed(2)} ${cp1y.toFixed(2)}, ${cp2x.toFixed(2)} ${cp2y.toFixed(2)}, ${next.x.toFixed(2)} ${next.y.toFixed(2)}`;
}
return path;
}
function renderChart(readings) {
const width = 1080;
const height = 190;
const left = 24;
const right = 24;
const top = 36;
const bottom = 36;
const plotBottom = height - bottom;
const plotHeight = plotBottom - top;
const values = readings.map(item => item.value);
let low = Math.floor(Math.min(...values) - 2);
let high = Math.ceil(Math.max(...values) + 2);
if (high - low < 6) {
const midpoint = (high + low) / 2;
low = Math.floor(midpoint - 3);
high = Math.ceil(midpoint + 3);
}
const points = readings.map((item, index) => ({
x: left + index * ((width - left - right) / Math.max(1, readings.length - 1)),
y: top + ((high - item.value) / (high - low)) * plotHeight,
value: item.value,
hour: item.hour
}));
const line = chartPath(points);
const area = line + ` L ${points[points.length - 1].x} ${plotBottom} L ${points[0].x} ${plotBottom} Z`;
const grid = [0, 0.5, 1].map(ratio => {
const y = top + ratio * plotHeight;
return `<line x1="${left}" y1="${y}" x2="${width - right}" y2="${y}" stroke="rgba(19,34,56,.075)" stroke-width="1"/>`;
}).join("");
const labels = points.map((point, index) => {
const anchor = index === 0 ? "start" : index === points.length - 1 ? "end" : "middle";
const valueY = Math.max(13, point.y - 10);
return `
<g>
<text x="${point.x}" y="${valueY}" text-anchor="${anchor}" fill="#35475d" font-size="10.5" font-weight="700">${temperature(point.value)}</text>
<text x="${point.x}" y="178" text-anchor="${anchor}" fill="#8490a0" font-size="9" font-weight="650">${point.hour}</text>
<circle cx="${point.x}" cy="${point.y}" r="3.3" fill="white" stroke="var(--chart)" stroke-width="2"/>
<rect class="hit-area" data-index="${index}" x="${point.x - 19}" y="0" width="38" height="${height}" fill="transparent"/>
</g>`;
}).join("");
elements.chart.innerHTML = `
<defs>
<linearGradient id="areaGradient" x1="0" y1="0" x2="0" y2="1">
<stop offset="0%" stop-color="var(--chart)" stop-opacity=".24"/>
<stop offset="100%" stop-color="var(--chart)" stop-opacity=".015"/>
</linearGradient>
</defs>
${grid}
<path d="${area}" fill="url(#areaGradient)"/>
<path d="${line}" fill="none" stroke="var(--chart)" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/>
${labels}
`;
elements.chart.setAttribute(
"aria-label",
`Hourly temperature chart from ${temperature(Math.min(...values), true)} to ${temperature(Math.max(...values), true)}`
);
elements.chart.querySelectorAll(".hit-area").forEach(hit => {
const index = Number(hit.dataset.index);
const point = points[index];
const reading = readings[index];
hit.addEventListener("mouseenter", () => {
const chartWidth = elements.chartWrap.getBoundingClientRect().width;
elements.tooltip.style.left = (point.x / width * chartWidth) + "px";
elements.tooltip.innerHTML = `<strong>${temperature(reading.value, true)}</strong><span>${reading.hour}:00 UTC</span>`;
elements.tooltip.style.display = "block";
});
hit.addEventListener("mouseleave", () => {
elements.tooltip.style.display = "none";
});
});
elements.table.replaceChildren();
readings.forEach(reading => {
const row = document.createElement("tr");
const timeCell = document.createElement("td");
const tempCell = document.createElement("td");
timeCell.textContent = reading.hour + ":00";
tempCell.textContent = temperature(reading.value, true);
row.append(timeCell, tempCell);
elements.table.appendChild(row);
});
}
function showLoading() {
document.body.classList.add("is-loading");
document.body.classList.remove("has-error");
elements.card.setAttribute("aria-busy", "true");
elements.statusTitle.textContent = "Loading the day’s weather";
elements.statusMessage.textContent = "Fetching daily and hourly temperatures in UTC.";
}
function showError() {
document.body.classList.remove("is-loading");
document.body.classList.add("has-error");
elements.card.setAttribute("aria-busy", "false");
elements.statusTitle.textContent = "Weather data could not be loaded.";
elements.statusMessage.textContent = "Check the location or date, then try again.";
}
function showReady() {
document.body.classList.remove("is-loading", "has-error");
elements.card.setAttribute("aria-busy", "false");
}
function render(data, isPast) {
if (!data || !data.daily || !data.hourly) throw new Error("Missing weather fields");
const dailyTimes = Array.isArray(data.daily.time) ? data.daily.time : [];
const dayIndex = dailyTimes.indexOf(state.date);
const index = dayIndex >= 0 ? dayIndex : 0;
const maximum = Number(data.daily.temperature_2m_max?.[index]);
const minimum = Number(data.daily.temperature_2m_min?.[index]);
const code = Number(data.daily.weather_code?.[index]);
if (![maximum, minimum, code].every(Number.isFinite)) {
throw new Error("Invalid daily weather values");
}
const times = Array.isArray(data.hourly.time) ? data.hourly.time : [];
const temperatures = Array.isArray(data.hourly.temperature_2m)
? data.hourly.temperature_2m
: [];
const readings = [];
for (let i = 0; i < Math.min(times.length, temperatures.length); i++) {
if (String(times[i]).slice(0, 10) !== state.date) continue;
const value = Number(temperatures[i]);
if (!Number.isFinite(value)) continue;
const match = String(times[i]).match(/T(\d{2})/);
readings.push({
hour: match ? match[1] : String(readings.length).padStart(2, "0"),
value
});
}
if (!readings.length) throw new Error("No hourly weather values");
const meta = weatherMeta(code);
const parts = dateParts(state.date);
const spread = Math.max(0, maximum - minimum);
applyTheme(meta.kind);
elements.location.textContent = state.name;
elements.coordinates.textContent =
coordinateText(state.lat, "N", "S") + " · " + coordinateText(state.lon, "E", "W");
elements.mode.textContent = (isPast ? "Archive" : "Forecast") + " · UTC";
elements.eyebrow.textContent = isPast ? "Historical weather" : "Selected forecast";
elements.condition.textContent = meta.label;
elements.conditionMini.textContent = meta.label;
elements.high.textContent = temperature(maximum);
elements.low.textContent = temperature(minimum);
elements.maximumMini.textContent = temperature(maximum, true);
elements.minimumMini.textContent = temperature(minimum, true);
elements.spread.textContent = temperature(spread, true) + " span";
elements.art.innerHTML = icons[meta.kind] || icons.cloud;
elements.dateHeading.innerHTML = "";
elements.dateHeading.append(document.createTextNode(parts.weekday));
const dateRest = document.createElement("span");
dateRest.textContent = parts.rest;
elements.dateHeading.appendChild(dateRest);
elements.summary.textContent =
`${meta.phrase}, ranging ${temperature(spread, true)} from a low of ${temperature(minimum, true)} to a high of ${temperature(maximum, true)}.`;
elements.readings.textContent = `${readings.length} reading${readings.length === 1 ? "" : "s"}`;
document.title = `${state.name} · ${parts.weekday} weather`;
renderChart(readings);
showReady();
}
async function loadWeather() {
showLoading();
const isPast = state.date < todayUTC;
const endpoint = isPast ? "/api/om/archive" : "/api/om/forecast";
const query = new URLSearchParams({
latitude: String(state.lat),
longitude: String(state.lon),
daily: "temperature_2m_max,temperature_2m_min,weather_code",
hourly: "temperature_2m",
timezone: "UTC",
temperature_unit: "celsius",
start_date: state.date,
end_date: state.date
});
const controller = new AbortController();
const timeout = setTimeout(() => controller.abort(), 15000);
try {
const response = await fetch(endpoint + "?" + query.toString(), {
signal: controller.signal,
headers: { "Accept": "application/json" }
});
if (!response.ok) throw new Error("Weather request failed");
const data = await response.json();
if (data && data.error) throw new Error("Weather API error");
render(data, isPast);
} catch (error) {
showError();
} finally {
clearTimeout(timeout);
}
}
elements.location.textContent = state.name;
elements.coordinates.textContent =
coordinateText(state.lat, "N", "S") + " · " + coordinateText(state.lon, "E", "W");
elements.retry.addEventListener("click", loadWeather);
loadWeather();
})();
</script>
</body>
</html>L1 — cheap deterministic descriptors
| bytes total | 40,062 | html / css / js | 5,274 / 14,914 / 19,874 |
|---|---|---|---|
| dom nodes | 88 | dom depth | 10 |
| css rules | 86 | js present | yes |
| brightness | 217.2 | contrast | 56.3 |
| colorfulness | 33.0 | whitespace | 79.5% |
This slot's telemetry
| prompt tokens | 0 | completion tokens | 21,544 |
|---|---|---|---|
| total tokens | 0 | wall | 326 s |
| cost | — | request id | — |
config.json562 B
{
"N": 2,
"auth": {
"credential_ref": "WCB_NONE",
"method": "oauth-login"
},
"billing": "plan",
"config_id": "gpt-5.6-sol-eff-ultra--cli--codex-oauth--dev",
"effort": "ultra",
"family": "gpt",
"m": {
"min": 2,
"q": 2
},
"model_id": "gpt-5.6-sol",
"protocol": "cli",
"served_model": "gpt-5.6-sol",
"telemetry": {
"completion_tokens": 82149,
"cost_usd": null,
"prompt_tokens": null,
"total_tokens": null,
"wall_ms": 1251436
},
"transport": "codex-cli-oauth-chatgpt",
"vendor_sanction_ref": null
}send-log2.5 KB
{
"N": 2,
"batch_id": "2026-07-19--codex-oauth-extra",
"config_id": "gpt-5.6-sol-eff-ultra--cli--codex-oauth--dev",
"positions": [
{
"attempts": [
{
"attempt_index": 0,
"backoff_ms": null,
"charged": true,
"ended_at": "2026-07-18T22:13:14.402058+00:00",
"http_status": null,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-07-18T22:08:52.165648+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-07-18T22:18:44.343144+00:00",
"http_status": null,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-07-18T22:13:18.299860+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-07-18T22:25:45.374391+00:00",
"http_status": null,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-07-18T22:18:47.909323+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-07-18T22:29:55.043577+00:00",
"http_status": null,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-07-18T22:25:49.309804+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
}
}
}