claude-opus-5 @ high · CC
CChigh
- config
- claude-opus-5-eff-high--cli--claude-code--dev
- batch
- 2026-07-19--unified
- transport
- claude-code-cli-headless
- protocol
- cli · plan
- served model
- claude-opus-5
- 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-5 @xhigh · CC0.73claude-fable-5 @xhigh · CC0.70grok-4.5 @low · grok-cli0.69grok-4.5 @medium · api0.69grok-4.5 @high · api0.69farthest
north-mini-code-free · api0.48qwen3.5-plus · go0.51claude-sonnet-4 · kiro0.51claude-haiku-4-5 @max · CC0.52minimax-m2.5 · go0.52within 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: 21.2
- 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=1280, initial-scale=1">
<title>Weather Card</title>
<style>
:root{
--accent:#7fb2ff;
--bg-0:#080b14;
--bg-1:#0e1526;
--ink:#eef3ff;
--ink-dim:#9aa8c4;
--ink-faint:#6b7893;
--line:rgba(255,255,255,.09);
--panel:rgba(255,255,255,.035);
}
*{box-sizing:border-box;margin:0;padding:0}
html,body{height:100%}
body{
font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Inter","Helvetica Neue",Arial,sans-serif;
background:var(--bg-0);
color:var(--ink);
min-height:100vh;
display:flex;align-items:center;justify-content:center;
padding:36px 24px;
-webkit-font-smoothing:antialiased;
font-variant-numeric:tabular-nums;
overflow-x:hidden;
}
body::before{
content:"";position:fixed;inset:-20%;z-index:0;pointer-events:none;
background:
radial-gradient(46% 42% at 18% 8%, color-mix(in srgb, var(--accent) 26%, transparent), transparent 70%),
radial-gradient(40% 40% at 88% 92%, color-mix(in srgb, var(--accent) 14%, transparent), transparent 72%),
radial-gradient(70% 60% at 50% 0%, #16203a, transparent 75%),
linear-gradient(180deg,#080b14,#0a0f1c 55%,#070a11);
transition:background 700ms ease;
}
.card{
position:relative;z-index:1;
width:1180px;max-width:100%;
background:linear-gradient(158deg, rgba(255,255,255,.075), rgba(255,255,255,.022) 42%, rgba(255,255,255,.045));
border:1px solid var(--line);
border-radius:28px;
padding:30px 34px 32px;
box-shadow:
0 1px 0 rgba(255,255,255,.12) inset,
0 40px 90px -30px rgba(0,0,0,.85),
0 0 120px -60px color-mix(in srgb, var(--accent) 70%, transparent);
backdrop-filter:blur(22px) saturate(130%);
}
/* ---------- header ---------- */
.head{display:flex;align-items:flex-start;justify-content:space-between;gap:24px;padding-bottom:22px;border-bottom:1px solid var(--line)}
.place{display:flex;flex-direction:column;gap:9px;min-width:0}
.eyebrow{font-size:11px;letter-spacing:.19em;text-transform:uppercase;color:var(--ink-faint);font-weight:600}
.place h1{font-size:38px;line-height:1.05;font-weight:600;letter-spacing:-.02em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:640px}
.meta{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.chip{
font-size:12px;color:var(--ink-dim);border:1px solid var(--line);
background:var(--panel);padding:5px 11px;border-radius:999px;letter-spacing:.02em;
}
.chip.accent{color:color-mix(in srgb, var(--accent) 78%, white);border-color:color-mix(in srgb, var(--accent) 34%, transparent);background:color-mix(in srgb, var(--accent) 12%, transparent);font-weight:600}
.datebox{text-align:right;flex-shrink:0}
.datebox .d1{font-size:15px;color:var(--ink-dim);letter-spacing:.01em}
.datebox .d2{font-size:27px;font-weight:600;letter-spacing:-.01em;margin-top:3px}
/* ---------- body ---------- */
.body{display:grid;grid-template-columns:352px 1fr;gap:34px;padding-top:26px}
.now{display:flex;flex-direction:column}
.iconwrap{position:relative;width:118px;height:118px;display:flex;align-items:center;justify-content:center;margin-bottom:6px}
.iconwrap::after{
content:"";position:absolute;inset:2px;border-radius:50%;z-index:0;
background:radial-gradient(circle at 50% 45%, color-mix(in srgb, var(--accent) 34%, transparent), transparent 68%);
filter:blur(8px);
}
.iconwrap svg{position:relative;z-index:1;width:104px;height:104px;color:var(--accent);
filter:drop-shadow(0 8px 22px color-mix(in srgb, var(--accent) 45%, transparent))}
.cond{font-size:24px;font-weight:600;letter-spacing:-.01em;margin-top:12px}
.condsub{font-size:13px;color:var(--ink-faint);margin-top:5px;letter-spacing:.02em}
.hero{display:flex;align-items:flex-start;gap:4px;margin-top:20px}
.hero .val{
font-size:104px;line-height:.92;font-weight:250;letter-spacing:-.05em;
background:linear-gradient(170deg,#fff, color-mix(in srgb, var(--accent) 62%, #ffffff));
-webkit-background-clip:text;background-clip:text;color:transparent;
}
.hero .deg{font-size:40px;font-weight:250;color:color-mix(in srgb, var(--accent) 55%, #ffffff);margin-top:8px;letter-spacing:-.03em}
.herolabel{font-size:11px;letter-spacing:.19em;text-transform:uppercase;color:var(--ink-faint);font-weight:600;margin-top:12px}
.stats{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-top:26px}
.stat{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:13px 14px}
.stat .k{font-size:10px;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-faint);font-weight:600}
.stat .v{font-size:23px;font-weight:500;margin-top:7px;letter-spacing:-.02em}
.panel{background:var(--panel);border:1px solid var(--line);border-radius:20px;padding:20px 22px 16px;display:flex;flex-direction:column}
.panel-head{display:flex;align-items:baseline;justify-content:space-between;margin-bottom:6px}
.panel-head h2{font-size:14px;font-weight:600;letter-spacing:.13em;text-transform:uppercase;color:var(--ink-dim)}
.panel-head .note{font-size:12px;color:var(--ink-faint)}
.chart{width:100%;height:auto;display:block}
.hours{display:grid;grid-template-columns:repeat(12,1fr);gap:6px;margin-top:16px}
.hr{
border-radius:11px;padding:9px 4px 7px;text-align:center;
background:rgba(255,255,255,.035);border:1px solid rgba(255,255,255,.05);
transition:transform .16s ease,background .16s ease,border-color .16s ease;
}
.hr:hover{transform:translateY(-3px);background:rgba(255,255,255,.085);border-color:rgba(255,255,255,.14)}
.hr .h{font-size:10px;color:var(--ink-faint);letter-spacing:.06em;font-weight:600}
.hr .t{font-size:16px;font-weight:500;margin-top:4px;letter-spacing:-.02em}
.hr .bar{height:3px;border-radius:3px;margin-top:7px;opacity:.95}
/* ---------- states ---------- */
.state{min-height:360px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px;text-align:center;padding:40px 20px}
.state svg{width:54px;height:54px;color:var(--ink-faint)}
.state h3{font-size:20px;font-weight:600}
.state p{font-size:14px;color:var(--ink-dim);max-width:520px;line-height:1.6}
.state code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12.5px;color:var(--ink-faint);
background:rgba(255,255,255,.05);border:1px solid var(--line);padding:3px 8px;border-radius:7px;display:inline-block;margin-top:4px;word-break:break-word}
.state.err svg{color:#ff8b7d}
.state.err h3{color:#ffb0a5}
.spin{width:34px;height:34px;border-radius:50%;border:2.5px solid rgba(255,255,255,.12);border-top-color:var(--accent);animation:spin .85s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}
.fade{animation:fade .5s ease both}
@keyframes fade{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
.foot{margin-top:18px;display:flex;justify-content:space-between;align-items:center;font-size:11.5px;color:var(--ink-faint);letter-spacing:.03em}
</style>
</head>
<body>
<main class="card" id="card">
<div class="state" id="boot">
<div class="spin"></div>
<p>Loading weather data…</p>
</div>
</main>
<script>
(function(){
"use strict";
/* ---------------- params ---------------- */
var qs = new URLSearchParams(window.location.search);
function numOr(v, d){ var n = parseFloat(v); return isFinite(n) ? n : d; }
var lat = numOr(qs.get('lat'), 52.52);
var lon = numOr(qs.get('lon'), 13.405);
var name = (qs.get('name') || '').trim() || 'Berlin';
var todayUTC = new Date().toISOString().slice(0,10);
var rawDate = (qs.get('date') || '').trim();
var date = /^\d{4}-\d{2}-\d{2}$/.test(rawDate) ? rawDate : todayUTC;
document.title = name + ' · ' + date;
/* ---------------- weather codes ---------------- */
var CODES = {
0:['Clear sky','clear','#ffc76b'],
1:['Mainly clear','partly','#ffd08a'],
2:['Partly cloudy','partly','#9fc4ff'],
3:['Overcast','cloud','#9fb0cc'],
45:['Fog','fog','#a9b6c8'], 48:['Depositing rime fog','fog','#a9b6c8'],
51:['Light drizzle','drizzle','#7fc4f2'], 53:['Moderate drizzle','drizzle','#7fc4f2'], 55:['Dense drizzle','drizzle','#6fb8ee'],
56:['Light freezing drizzle','drizzle','#8fd6f2'], 57:['Dense freezing drizzle','drizzle','#8fd6f2'],
61:['Slight rain','rain','#68a9f5'], 63:['Moderate rain','rain','#5b9df2'], 65:['Heavy rain','rain','#4f8fe8'],
66:['Light freezing rain','rain','#7cc0f0'], 67:['Heavy freezing rain','rain','#6bb2ea'],
71:['Slight snowfall','snow','#bfe4ff'], 73:['Moderate snowfall','snow','#bfe4ff'], 75:['Heavy snowfall','snow','#d3edff'],
77:['Snow grains','snow','#cfe9ff'],
80:['Slight rain showers','rain','#6fb0f7'], 81:['Moderate rain showers','rain','#5fa2f2'], 82:['Violent rain showers','rain','#4f92ea'],
85:['Slight snow showers','snow','#c6e7ff'], 86:['Heavy snow showers','snow','#c6e7ff'],
95:['Thunderstorm','thunder','#b79cff'],
96:['Thunderstorm with slight hail','thunder','#b79cff'],
99:['Thunderstorm with heavy hail','thunder','#c0a6ff']
};
function codeInfo(c){
var e = CODES[c];
if(!e) return {text: (c===null||c===undefined) ? 'Condition unavailable' : 'Code ' + c, kind:'cloud', accent:'#9fb0cc'};
return {text:e[0], kind:e[1], accent:e[2]};
}
/* ---------------- icons ---------------- */
function cloudShape(dx,dy,op){
dx=dx||0; dy=dy||0;
return '<g transform="translate('+dx+','+dy+')" opacity="'+(op===undefined?1:op)+'">'+
'<circle cx="25" cy="35" r="9.5"/><circle cx="38" cy="31.5" r="12.5"/>'+
'<rect x="21" y="35" width="24" height="11" rx="5.5"/></g>';
}
function rays(cx,cy,r,len){
var out='';
for(var i=0;i<8;i++){
var a=i*Math.PI/4;
var x1=cx+Math.cos(a)*(r+3.5), y1=cy+Math.sin(a)*(r+3.5);
var x2=cx+Math.cos(a)*(r+3.5+len), y2=cy+Math.sin(a)*(r+3.5+len);
out+='<line x1="'+x1.toFixed(1)+'" y1="'+y1.toFixed(1)+'" x2="'+x2.toFixed(1)+'" y2="'+y2.toFixed(1)+'"/>';
}
return '<g stroke="currentColor" stroke-width="3.2" stroke-linecap="round">'+out+'</g>';
}
function icon(kind){
var s='<svg viewBox="0 0 64 64" fill="currentColor" aria-hidden="true">';
if(kind==='clear'){
s+= rays(32,32,12,6) + '<circle cx="32" cy="32" r="12"/>';
} else if(kind==='partly'){
s+= '<g opacity=".95">'+rays(24,24,8.5,5)+'<circle cx="24" cy="24" r="8.5"/></g>' + cloudShape(2,7);
} else if(kind==='cloud'){
s+= cloudShape(-4,-6,.55) + cloudShape(1,4);
} else if(kind==='fog'){
s+= cloudShape(1,-2,.9) +
'<g stroke="currentColor" stroke-width="3.4" stroke-linecap="round" opacity=".7">'+
'<line x1="15" y1="50" x2="47" y2="50"/><line x1="21" y1="57" x2="43" y2="57"/></g>';
} else if(kind==='drizzle'){
s+= cloudShape(1,-4) +
'<g stroke="currentColor" stroke-width="3.2" stroke-linecap="round" opacity=".85">'+
'<line x1="24" y1="47" x2="22" y2="52"/><line x1="33" y1="47" x2="31" y2="52"/><line x1="42" y1="47" x2="40" y2="52"/></g>';
} else if(kind==='rain'){
s+= cloudShape(1,-5) +
'<g stroke="currentColor" stroke-width="3.4" stroke-linecap="round" opacity=".9">'+
'<line x1="24" y1="45" x2="20" y2="55"/><line x1="33" y1="45" x2="29" y2="55"/><line x1="42" y1="45" x2="38" y2="55"/></g>';
} else if(kind==='snow'){
s+= cloudShape(1,-5) +
'<g opacity=".92"><circle cx="23" cy="50" r="2.6"/><circle cx="32" cy="55" r="2.6"/><circle cx="41" cy="50" r="2.6"/></g>';
} else if(kind==='thunder'){
s+= cloudShape(1,-6) + '<path d="M34 43l-11 12h7l-3 10 12-13h-7z"/>';
}
return s+'</svg>';
}
var ICON_WARN = '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"><path d="M10.3 3.9 1.8 18a2 2 0 0 0 1.7 3h17a2 2 0 0 0 1.7-3L13.7 3.9a2 2 0 0 0-3.4 0Z"/><line x1="12" y1="9" x2="12" y2="13.5"/><circle cx="12" cy="17.2" r=".9" fill="currentColor"/></svg>';
/* ---------------- temperature colour ramp ---------------- */
var STOPS=[[-20,'#5d7ce6'],[-5,'#4aa8e8'],[5,'#43c6d8'],[13,'#5ecfa0'],[20,'#e8c65a'],[27,'#ee9450'],[35,'#e2604f'],[45,'#cf3f52']];
function hex2rgb(h){return [parseInt(h.slice(1,3),16),parseInt(h.slice(3,5),16),parseInt(h.slice(5,7),16)];}
function tempColor(t){
if(!isFinite(t)) return '#8896b0';
if(t<=STOPS[0][0]) return STOPS[0][1];
if(t>=STOPS[STOPS.length-1][0]) return STOPS[STOPS.length-1][1];
for(var i=0;i<STOPS.length-1;i++){
var a=STOPS[i], b=STOPS[i+1];
if(t>=a[0]&&t<=b[0]){
var f=(t-a[0])/(b[0]-a[0]), ca=hex2rgb(a[1]), cb=hex2rgb(b[1]);
return 'rgb('+Math.round(ca[0]+(cb[0]-ca[0])*f)+','+Math.round(ca[1]+(cb[1]-ca[1])*f)+','+Math.round(ca[2]+(cb[2]-ca[2])*f)+')';
}
}
return '#8896b0';
}
/* ---------------- helpers ---------------- */
function esc(s){return String(s).replace(/[&<>"']/g,function(c){return {'&':'&','<':'<','>':'>','"':'"',"'":'''}[c];});}
function d1(n){ return (Math.round(n*10)/10).toFixed(1); }
function d0(n){ return String(Math.round(n)); }
function fmtCoord(v,pos,neg){ return Math.abs(v).toFixed(3) + '\u00B0' + (v>=0?pos:neg); }
function longDate(iso){
var d = new Date(iso+'T12:00:00Z');
if(isNaN(d)) return iso;
try{
return new Intl.DateTimeFormat('en-GB',{weekday:'long',day:'numeric',month:'long',year:'numeric',timeZone:'UTC'}).format(d);
}catch(e){ return iso; }
}
function dayDelta(iso){
var a = Date.parse(iso+'T00:00:00Z'), b = Date.parse(todayUTC+'T00:00:00Z');
if(isNaN(a)||isNaN(b)) return null;
return Math.round((a-b)/86400000);
}
/* ---------------- data ---------------- */
function apiURL(path){
var p = new URLSearchParams({
latitude: String(lat),
longitude: String(lon),
daily: 'temperature_2m_max,temperature_2m_min,weather_code',
hourly: 'temperature_2m',
timezone: 'UTC',
temperature_unit: 'celsius',
start_date: date,
end_date: date
});
return path + '?' + p.toString();
}
function usable(d){
return !!(d && d.daily && Array.isArray(d.daily.time) && d.daily.time.length &&
Array.isArray(d.daily.temperature_2m_max) && d.daily.temperature_2m_max[0] !== null &&
d.daily.temperature_2m_max[0] !== undefined);
}
function grab(path){
return fetch(apiURL(path), {headers:{'Accept':'application/json'}}).then(function(res){
return res.text().then(function(txt){
var json=null;
try{ json = JSON.parse(txt); }catch(e){}
if(!res.ok){
var reason = (json && (json.reason || json.error_message)) || ('HTTP ' + res.status + ' ' + res.statusText);
throw new Error(reason);
}
if(!json) throw new Error('The API returned a response that is not valid JSON.');
if(json.error) throw new Error(json.reason || 'The API reported an error.');
return json;
});
});
}
function load(){
var past = dayDelta(date);
var isPast = (past !== null && past < 0);
var primary = isPast ? '/api/om/archive' : '/api/om/forecast';
var secondary = isPast ? '/api/om/forecast' : '/api/om/archive';
var firstErr = null;
return grab(primary).catch(function(e){ firstErr = e; return null; }).then(function(d){
if(usable(d)) return d;
return grab(secondary).catch(function(e){ if(!firstErr) firstErr = e; return null; }).then(function(d2){
if(usable(d2)) return d2;
throw firstErr || new Error('No temperature data is available for ' + date + ' at this location.');
});
});
}
/* ---------------- chart ---------------- */
function chart(hours){
var W=772,H=250,L=46,R=16,T=26,B=34;
var iw=W-L-R, ih=H-T-B;
var temps = hours.map(function(h){return h.t;});
var lo=Math.min.apply(null,temps), hi=Math.max.apply(null,temps);
if(hi-lo < 2){ var mid=(hi+lo)/2; lo=mid-1.5; hi=mid+1.5; }
var padY=(hi-lo)*0.18; lo-=padY; hi+=padY;
var n=hours.length;
function X(i){ return n===1 ? L+iw/2 : L + (i/(n-1))*iw; }
function Y(t){ return T + ih - ((t-lo)/(hi-lo))*ih; }
// gridlines
var step = (hi-lo)>26 ? 10 : (hi-lo)>13 ? 5 : (hi-lo)>6 ? 2 : 1;
var grid='', g=Math.ceil(lo/step)*step;
for(; g<=hi; g+=step){
var y=Y(g).toFixed(1);
grid += '<line x1="'+L+'" y1="'+y+'" x2="'+(W-R)+'" y2="'+y+'" stroke="rgba(255,255,255,.07)" stroke-width="1"/>'+
'<text x="'+(L-11)+'" y="'+(parseFloat(y)+4)+'" text-anchor="end" font-size="11" fill="#6b7893">'+d0(g)+'\u00B0</text>';
}
// line + area
var pts = hours.map(function(h,i){ return X(i).toFixed(2)+','+Y(h.t).toFixed(2); });
var line = 'M' + pts.join(' L');
var area = line + ' L' + X(n-1).toFixed(2) + ',' + (T+ih) + ' L' + X(0).toFixed(2) + ',' + (T+ih) + ' Z';
// gradient coloured by temperature along x
var stops = hours.map(function(h,i){
var off = n===1 ? 0 : (i/(n-1))*100;
return '<stop offset="'+off.toFixed(2)+'%" stop-color="'+tempColor(h.t)+'"/>';
}).join('');
// x labels every 3 hours
var xl='';
hours.forEach(function(h,i){
if(h.hour % 3 !== 0) return;
xl += '<text x="'+X(i).toFixed(1)+'" y="'+(T+ih+21)+'" text-anchor="middle" font-size="10.5" fill="#6b7893" letter-spacing=".5">'+
(h.hour<10?'0':'')+h.hour+'</text>';
});
// extreme markers
var iMax=0,iMin=0;
hours.forEach(function(h,i){ if(h.t>hours[iMax].t) iMax=i; if(h.t<hours[iMin].t) iMin=i; });
function marker(i, above){
var x=X(i), y=Y(hours[i].t), c=tempColor(hours[i].t);
var ty = above ? y-13 : y+19;
var anchor = x<L+40 ? 'start' : (x>W-R-40 ? 'end' : 'middle');
return '<circle cx="'+x.toFixed(1)+'" cy="'+y.toFixed(1)+'" r="4.5" fill="'+c+'" stroke="#0b1120" stroke-width="2"/>'+
'<text x="'+x.toFixed(1)+'" y="'+ty.toFixed(1)+'" text-anchor="'+anchor+'" font-size="12" font-weight="600" fill="#eef3ff">'+d1(hours[i].t)+'\u00B0</text>';
}
var dots = hours.map(function(h,i){
return '<circle cx="'+X(i).toFixed(1)+'" cy="'+Y(h.t).toFixed(1)+'" r="2.4" fill="'+tempColor(h.t)+'" opacity=".9"/>';
}).join('');
return '<svg class="chart" viewBox="0 0 '+W+' '+H+'" role="img" aria-label="Hourly temperature chart">'+
'<defs>'+
'<linearGradient id="lineGrad" x1="0" y1="0" x2="1" y2="0">'+stops+'</linearGradient>'+
'<linearGradient id="areaGrad" x1="0" y1="0" x2="0" y2="1">'+
'<stop offset="0%" stop-color="var(--accent)" stop-opacity=".34"/>'+
'<stop offset="100%" stop-color="var(--accent)" stop-opacity="0"/>'+
'</linearGradient>'+
'</defs>'+
grid +
'<path d="'+area+'" fill="url(#areaGrad)"/>'+
'<path d="'+line+'" fill="none" stroke="url(#lineGrad)" stroke-width="2.8" stroke-linejoin="round" stroke-linecap="round"/>'+
dots + marker(iMax,true) + marker(iMin,false) + xl +
'</svg>';
}
/* ---------------- render ---------------- */
var card = document.getElementById('card');
function header(extraChip){
var delta = dayDelta(date);
var rel = delta===0 ? 'Today' : delta===-1 ? 'Yesterday' : delta===1 ? 'Tomorrow'
: (delta===null ? '' : (delta<0 ? Math.abs(delta)+' days ago' : 'In '+delta+' days'));
return '<div class="head">'+
'<div class="place">'+
'<span class="eyebrow">Weather report</span>'+
'<h1>'+esc(name)+'</h1>'+
'<div class="meta">'+
'<span class="chip">'+fmtCoord(lat,'N','S')+', '+fmtCoord(lon,'E','W')+'</span>'+
'<span class="chip">UTC</span>'+
(extraChip||'')+
'</div>'+
'</div>'+
'<div class="datebox">'+
(rel ? '<div class="chip accent" style="margin-bottom:9px;display:inline-block">'+esc(rel)+'</div>' : '')+
'<div class="d1">'+esc(longDate(date))+'</div>'+
'<div class="d2">'+esc(date)+'</div>'+
'</div>'+
'</div>';
}
function renderError(msg){
card.innerHTML = header('') +
'<div class="state err fade">'+ ICON_WARN +
'<h3>Weather data could not be loaded</h3>'+
'<p>The forecast service did not return usable data for this location and date.</p>'+
'<code>'+esc(msg || 'Unknown error')+'</code>'+
'</div>';
}
function render(data){
var dly = data.daily;
var tmax = dly.temperature_2m_max[0];
var tmin = (dly.temperature_2m_min && dly.temperature_2m_min[0] !== null && dly.temperature_2m_min[0] !== undefined)
? dly.temperature_2m_min[0] : null;
var code = (dly.weather_code && dly.weather_code.length) ? dly.weather_code[0] : null;
var info = codeInfo(code);
document.documentElement.style.setProperty('--accent', info.accent);
// hourly for the requested date
var hours = [];
if(data.hourly && Array.isArray(data.hourly.time) && Array.isArray(data.hourly.temperature_2m)){
data.hourly.time.forEach(function(ts,i){
var t = data.hourly.temperature_2m[i];
if(typeof ts === 'string' && ts.slice(0,10) === date && t !== null && t !== undefined && isFinite(t)){
hours.push({hour: parseInt(ts.slice(11,13),10) || 0, t: t});
}
});
}
var mean = hours.length ? hours.reduce(function(s,h){return s+h.t;},0)/hours.length : null;
var range = (tmin !== null) ? (tmax - tmin) : null;
var hourlyBlock;
if(hours.length){
hourlyBlock = chart(hours) +
'<div class="hours">'+ hours.map(function(h){
var c = tempColor(h.t);
return '<div class="hr" title="'+(h.hour<10?'0':'')+h.hour+':00 UTC \u2014 '+d1(h.t)+' \u00B0C">'+
'<div class="h">'+(h.hour<10?'0':'')+h.hour+'</div>'+
'<div class="t">'+d0(h.t)+'\u00B0</div>'+
'<div class="bar" style="background:'+c+'"></div>'+
'</div>';
}).join('') + '</div>';
} else {
hourlyBlock = '<div class="state" style="min-height:220px">'+ICON_WARN+
'<h3 style="font-size:16px">Hourly temperatures unavailable</h3>'+
'<p>The API returned daily values for this date, but no hourly series.</p></div>';
}
card.innerHTML = header('<span class="chip">'+esc(info.text)+'</span>') +
'<div class="body fade">'+
'<section class="now">'+
'<div class="iconwrap">'+icon(info.kind)+'</div>'+
'<div class="cond">'+esc(info.text)+'</div>'+
'<div class="condsub">WMO weather code '+(code===null?'\u2014':esc(code))+'</div>'+
'<div class="hero"><span class="val">'+d1(tmax)+'</span><span class="deg">\u00B0C</span></div>'+
'<div class="herolabel">Daily maximum</div>'+
'<div class="stats">'+
'<div class="stat"><div class="k">Minimum</div><div class="v" style="color:'+(tmin!==null?tempColor(tmin):'inherit')+'">'+(tmin!==null?d1(tmin)+'\u00B0':'\u2014')+'</div></div>'+
'<div class="stat"><div class="k">Mean</div><div class="v">'+(mean!==null?d1(mean)+'\u00B0':'\u2014')+'</div></div>'+
'<div class="stat"><div class="k">Range</div><div class="v">'+(range!==null?d1(range)+'\u00B0':'\u2014')+'</div></div>'+
'</div>'+
'</section>'+
'<section class="panel">'+
'<div class="panel-head"><h2>Hourly temperature</h2><span class="note">'+(hours.length?hours.length+' readings \u00B7 \u00B0C \u00B7 UTC':'\u00B0C \u00B7 UTC')+'</span></div>'+
hourlyBlock +
'</section>'+
'</div>'+
'<div class="foot"><span>Open-Meteo compatible API \u00B7 '+(dayDelta(date)<0?'archive':'forecast')+'</span><span>All temperatures in \u00B0C</span></div>';
}
load().then(render).catch(function(e){
renderError(e && e.message ? e.message : String(e));
});
})();
</script>
</body>
</html>L1 — cheap deterministic descriptors
| bytes total | 23,936 | html / css / js | 360 / 6,946 / 16,630 |
|---|---|---|---|
| dom nodes | 12 | dom depth | 5 |
| css rules | 57 | js present | yes |
| brightness | 32.5 | contrast | 18.3 |
| colorfulness | 14.9 | whitespace | 84.3% |
This slot's telemetry
| prompt tokens | 2 | completion tokens | 16,592 |
|---|---|---|---|
| total tokens | 16,594 | wall | 186.7 s |
| cost | — | request id | — |
config.json567 B
{
"N": 2,
"auth": {
"credential_ref": "WCB_NONE",
"method": "oauth-login"
},
"billing": "plan",
"config_id": "claude-opus-5-eff-high--cli--claude-code--dev",
"effort": "high",
"family": "claude",
"m": {
"min": 2,
"q": 2
},
"model_id": "claude-opus-5",
"protocol": "cli",
"served_model": "claude-opus-5",
"telemetry": {
"completion_tokens": 55574,
"cost_usd": null,
"prompt_tokens": 8,
"total_tokens": 55582,
"wall_ms": 598694
},
"transport": "claude-code-cli-headless",
"vendor_sanction_ref": null
}send-log2.5 KB
{
"N": 2,
"batch_id": "2026-07-25--cc-opus5",
"config_id": "claude-opus-5-eff-high--cli--claude-code--dev",
"positions": [
{
"attempts": [
{
"attempt_index": 0,
"backoff_ms": null,
"charged": true,
"ended_at": "2026-07-24T17:18:07.682854+00:00",
"http_status": null,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-07-24T17:16:09.467165+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-24T17:21:19.849342+00:00",
"http_status": null,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-07-24T17:18:13.119701+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-24T17:24:59.282705+00:00",
"http_status": null,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-07-24T17:21:23.607049+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-24T17:26:21.477084+00:00",
"http_status": null,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-07-24T17:25:03.390861+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
}
}
}