GPT-6.1 Terra
by OpenAIReasoningClean
Running live in a sandboxed frame. Click inside it before using the keyboard.
How it went
- Total time
- 57.5 s
- Cost
- $0.026
- Output tokens
- 5,131
- Spent thinking
- 723 tokens
- Speed
- 110.5 tok/s
- Console errors
- 0
- First token after
- 11.1 s
- First visible text after
- 16.1 s
- Prompt tokens
- 498
- Code size
- 13.0 KB
- Finish reason
- stop
- Served by
- OpenAI
- Model id
openai/gpt-6.1-terra- Reasoning sent
model default- Max output
- 128,000 tokens
- Generated
- Nov 12, 2026
What it was asked
The prompt
Create a set of four animated weather cards (sunny, rainy, snowy, stormy), made with HTML and CSS only. Requirements: - Absolutely no JavaScript: the file must not contain any <script> tag or inline event handler. - No images, no SVG, no icon fonts: every weather icon is built from HTML elements and pseudo-elements styled with CSS. - Each card shows an animated icon (rotating sun rays, falling rain drops, drifting snowflakes, flashing lightning), a city name, a temperature and a short description. - Each card has its own background gradient matching the weather. - The cards are displayed in a responsive grid (4 per row on desktop, stacked on mobile) and lift up on hover. - Smooth infinite animations using @keyframes, and respect prefers-reduced-motion.
System prompt, sent with every prompt
You are generating a self-contained web demo. It will be rendered automatically in a sandboxed iframe and compared side by side with the output of other AI models given the exact same task. Output rules: - Reply with exactly ONE fenced code block containing the complete file: ```html (or ```svg when the task asks for an SVG). No text before or after the code block. - Everything must be inline: CSS in <style>, JavaScript in <script>. No external files, images, fonts or network requests, except the CDN URLs explicitly allowed by the task. - Do not use localStorage, sessionStorage, cookies, IndexedDB, alert(), confirm(), prompt() or window.open(): they are blocked in the sandbox and will throw. - The page must look right in a 1280×800 viewport and adapt gracefully down to 375px wide. No horizontal scrollbar. - Something meaningful must be visible on first paint: a screenshot is taken automatically about 3 seconds after load, without any interaction. - Everything that makes the demo interesting must be visible within the first seconds: nothing hidden behind a high score, a later level or a long play session. - Games must start in a self-playing demo mode (a simple AI plays) behind a "Click or press a key to start" message, so the game can be judged in action without playing. - The iframe only receives keyboard events after the user clicks it: if the demo uses the keyboard, display a clear "Click or press a key to start" message. - The code must run with zero errors in the console of the latest Chrome.
Code run-1.html · 493 lines
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>A Little Weather</title>
<style>
* { box-sizing: border-box; }
:root {
color-scheme: light;
font-family: Arial, Helvetica, sans-serif;
color: #202b37;
background: #f4f3ee;
}
body {
margin: 0;
min-height: 100vh;
background:
radial-gradient(circle at 8% 7%, rgba(232, 219, 190, .35), transparent 27%),
#f4f3ee;
}
.page {
width: min(1152px, calc(100% - 64px));
margin: 0 auto;
padding: 48px 0 38px;
}
.topline {
display: flex;
align-items: center;
justify-content: space-between;
padding-bottom: 20px;
border-bottom: 1px solid #d8d9d3;
color: #66716f;
font-size: 10px;
font-weight: 700;
letter-spacing: .18em;
text-transform: uppercase;
}
.brand {
display: flex;
align-items: center;
gap: 9px;
color: #263b3b;
}
.brand-mark {
width: 20px;
height: 20px;
border: 1px solid #8a9a8d;
border-radius: 50%;
position: relative;
}
.brand-mark::before,
.brand-mark::after {
content: "";
position: absolute;
background: #728477;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
}
.brand-mark::before { width: 10px; height: 1px; }
.brand-mark::after { width: 1px; height: 10px; }
.intro {
display: flex;
justify-content: space-between;
align-items: end;
gap: 30px;
padding: 31px 0 30px;
}
.eyebrow {
margin: 0 0 10px;
color: #8a958d;
font-size: 10px;
font-weight: 700;
letter-spacing: .18em;
text-transform: uppercase;
}
h1 {
margin: 0;
font-family: Georgia, "Times New Roman", serif;
font-size: clamp(36px, 4vw, 50px);
font-weight: 400;
letter-spacing: -.045em;
line-height: 1.08;
}
.intro-copy {
max-width: 250px;
margin: 0 0 3px;
color: #7a8580;
font-size: 13px;
line-height: 1.7;
}
.grid {
display: grid;
grid-template-columns: repeat(4, minmax(0, 1fr));
gap: 16px;
}
.card {
position: relative;
isolation: isolate;
overflow: hidden;
min-height: 416px;
padding: 23px;
border-radius: 18px;
display: flex;
flex-direction: column;
box-shadow: 0 12px 25px rgba(30, 44, 46, .08);
transition: transform .35s ease, box-shadow .35s ease;
}
.card:hover {
transform: translateY(-8px);
box-shadow: 0 20px 35px rgba(30, 44, 46, .16);
}
.card::before {
content: "";
position: absolute;
z-index: -1;
width: 260px;
height: 260px;
right: -108px;
top: 72px;
border: 1px solid currentColor;
border-radius: 50%;
opacity: .12;
box-shadow: 0 0 0 32px transparent, 0 0 0 33px currentColor, 0 0 0 65px transparent, 0 0 0 66px currentColor;
}
.sunny {
color: #67471e;
background: linear-gradient(155deg, #fbe7a9 0%, #f5c86e 54%, #e8a754 100%);
}
.rainy {
color: #f0f7fa;
background: linear-gradient(155deg, #8baebe 0%, #648ba2 51%, #496f89 100%);
}
.snowy {
color: #486675;
background: linear-gradient(155deg, #ecf5f3 0%, #c6e0e5 54%, #a8ced8 100%);
}
.stormy {
color: #f7f1fa;
background: linear-gradient(155deg, #8c8a9f 0%, #66677f 50%, #454d66 100%);
}
.card-top {
display: flex;
align-items: center;
justify-content: space-between;
font-size: 9px;
font-weight: 700;
letter-spacing: .16em;
text-transform: uppercase;
opacity: .78;
}
.card-number {
display: grid;
place-items: center;
width: 27px;
height: 27px;
border: 1px solid currentColor;
border-radius: 50%;
font-size: 9px;
letter-spacing: 0;
opacity: .8;
}
.scene {
height: 205px;
position: relative;
flex: none;
}
.sun {
position: absolute;
width: 88px;
height: 88px;
left: 50%;
top: 52%;
transform: translate(-50%, -50%);
border-radius: 50%;
background: #fff3c2;
box-shadow: 0 0 38px rgba(255, 244, 189, .65), inset -7px -7px 0 rgba(246, 190, 90, .18);
}
.rays {
position: absolute;
width: 166px;
height: 166px;
left: 50%;
top: 52%;
margin: -83px;
border-radius: 50%;
background: repeating-conic-gradient(from 0deg, #fff2be 0deg 5deg, transparent 5deg 45deg);
-webkit-mask: radial-gradient(circle, transparent 0 56px, #000 57px 72px, transparent 73px);
mask: radial-gradient(circle, transparent 0 56px, #000 57px 72px, transparent 73px);
animation: spin 24s linear infinite;
}
.cloud {
position: absolute;
left: 50%;
top: 74px;
width: 132px;
height: 48px;
transform: translateX(-50%);
border-radius: 35px;
background: var(--cloud);
box-shadow: inset 0 -7px 0 rgba(51, 86, 112, .09), 0 10px 22px rgba(40, 62, 83, .1);
z-index: 2;
}
.cloud::before, .cloud::after {
content: "";
position: absolute;
border-radius: 50%;
background: var(--cloud);
}
.cloud::before { width: 66px; height: 66px; left: 18px; bottom: 13px; }
.cloud::after { width: 51px; height: 51px; right: 12px; bottom: 12px; }
.rainy .cloud { --cloud: #e4f1f2; }
.snowy .cloud { --cloud: #fff; }
.stormy .cloud { --cloud: #d1cddb; }
.drop {
position: absolute;
top: 119px;
left: var(--x);
width: 3px;
height: 18px;
border-radius: 4px;
background: #d8f4ff;
transform: rotate(15deg);
opacity: 0;
animation: rain 1.1s linear infinite;
animation-delay: var(--delay);
}
.flake {
position: absolute;
top: 120px;
left: var(--x);
width: 15px;
height: 2px;
border-radius: 2px;
background: #fff;
opacity: 0;
animation: snow 3.2s ease-in-out infinite;
animation-delay: var(--delay);
}
.flake::before, .flake::after {
content: "";
position: absolute;
inset: 0;
border-radius: inherit;
background: inherit;
}
.flake::before { transform: rotate(60deg); }
.flake::after { transform: rotate(-60deg); }
.bolt {
position: absolute;
z-index: 1;
top: 110px;
left: calc(50% - 17px);
width: 43px;
height: 73px;
background: #ffe7a3;
clip-path: polygon(48% 0, 100% 0, 65% 38%, 91% 38%, 14% 100%, 34% 51%, 6% 51%);
filter: drop-shadow(0 0 8px #ffe8a6);
animation: flash 3s infinite;
}
.spark {
position: absolute;
width: 4px;
height: 4px;
border-radius: 50%;
background: currentColor;
opacity: .35;
}
.spark.one { top: 45px; left: 14%; }
.spark.two { top: 132px; right: 13%; width: 5px; height: 5px; }
.spark.three { top: 166px; left: 21%; width: 3px; height: 3px; }
.weather-info { margin-top: auto; }
.city {
margin: 0 0 3px;
font-family: Georgia, "Times New Roman", serif;
font-weight: 400;
font-size: 27px;
letter-spacing: -.025em;
}
.temperature {
margin: 0;
font-size: 51px;
line-height: 1;
font-weight: 300;
letter-spacing: -.065em;
}
.temperature span {
display: inline-block;
vertical-align: top;
margin: 3px 0 0 3px;
font-size: 22px;
letter-spacing: 0;
}
.card-bottom {
display: flex;
justify-content: space-between;
align-items: end;
gap: 8px;
margin-top: 19px;
padding-top: 14px;
border-top: 1px solid currentColor;
border-color: color-mix(in srgb, currentColor 25%, transparent);
}
.description { font-size: 12px; font-weight: 700; }
.detail { font-size: 10px; opacity: .72; white-space: nowrap; }
.footer {
display: flex;
justify-content: space-between;
gap: 15px;
margin-top: 22px;
color: #929a94;
font-size: 10px;
letter-spacing: .04em;
}
@keyframes spin { to { transform: rotate(360deg); } }
@keyframes rain {
0% { opacity: 0; transform: translate(0, -5px) rotate(15deg); }
15% { opacity: .9; }
85% { opacity: .8; }
100% { opacity: 0; transform: translate(-12px, 59px) rotate(15deg); }
}
@keyframes snow {
0% { opacity: 0; transform: translate(0, -5px) rotate(0); }
15% { opacity: 1; }
80% { opacity: .9; }
100% { opacity: 0; transform: translate(15px, 66px) rotate(90deg); }
}
@keyframes flash {
0%, 39%, 43%, 47%, 100% { opacity: .55; }
40%, 45% { opacity: 1; }
41%, 46% { opacity: .2; }
}
@media (max-width: 900px) {
.grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.card { min-height: 400px; }
}
@media (max-width: 560px) {
.page { width: calc(100% - 40px); padding-top: 28px; }
.topline { font-size: 9px; }
.intro { display: block; padding: 28px 0 25px; }
.intro-copy { margin-top: 14px; max-width: 290px; }
.grid { grid-template-columns: 1fr; gap: 14px; }
.card { min-height: 390px; }
.scene { height: 190px; }
.footer { line-height: 1.5; }
}
@media (prefers-reduced-motion: reduce) {
*, *::before, *::after {
animation-duration: .01ms !important;
animation-iteration-count: 1 !important;
transition-duration: .01ms !important;
}
.drop, .flake { opacity: .8; }
.bolt { opacity: 1; }
}
</style>
</head>
<body>
<main class="page">
<div class="topline">
<div class="brand"><span class="brand-mark" aria-hidden="true"></span> The Weather Edit</div>
<span>A study in atmosphere / 01—04</span>
</div>
<header class="intro">
<div>
<p class="eyebrow">A little look outside</p>
<h1>Whatever the weather.</h1>
</div>
<p class="intro-copy">Four places, four moods. A small collection of skies from around the world.</p>
</header>
<section class="grid" aria-label="Illustrated weather forecasts">
<article class="card sunny">
<div class="card-top"><span>01 / Clear skies</span><span class="card-number">01</span></div>
<div class="scene" aria-hidden="true">
<span class="spark one"></span><span class="spark two"></span><span class="spark three"></span>
<div class="rays"></div><div class="sun"></div>
</div>
<div class="weather-info">
<h2 class="city">Lisbon</h2>
<p class="temperature">24<span>°C</span></p>
<div class="card-bottom"><span class="description">Golden & sunny</span><span class="detail">Feels like 26°</span></div>
</div>
</article>
<article class="card rainy">
<div class="card-top"><span>02 / Rain showers</span><span class="card-number">02</span></div>
<div class="scene" aria-hidden="true">
<span class="spark one"></span><span class="spark two"></span>
<div class="cloud"></div>
<i class="drop" style="--x:32%;--delay:-.1s"></i>
<i class="drop" style="--x:42%;--delay:-.7s"></i>
<i class="drop" style="--x:52%;--delay:-.3s"></i>
<i class="drop" style="--x:62%;--delay:-.9s"></i>
<i class="drop" style="--x:70%;--delay:-.5s"></i>
<i class="drop" style="--x:38%;--delay:-.95s"></i>
</div>
<div class="weather-info">
<h2 class="city">Copenhagen</h2>
<p class="temperature">14<span>°C</span></p>
<div class="card-bottom"><span class="description">Passing showers</span><span class="detail">Feels like 12°</span></div>
</div>
</article>
<article class="card snowy">
<div class="card-top"><span>03 / Snowfall</span><span class="card-number">03</span></div>
<div class="scene" aria-hidden="true">
<span class="spark one"></span><span class="spark two"></span><span class="spark three"></span>
<div class="cloud"></div>
<i class="flake" style="--x:29%;--delay:-.3s"></i>
<i class="flake" style="--x:42%;--delay:-1.8s"></i>
<i class="flake" style="--x:54%;--delay:-.8s"></i>
<i class="flake" style="--x:66%;--delay:-2.4s"></i>
<i class="flake" style="--x:36%;--delay:-2.7s"></i>
<i class="flake" style="--x:61%;--delay:-1.4s"></i>
</div>
<div class="weather-info">
<h2 class="city">Sapporo</h2>
<p class="temperature">−2<span>°C</span></p>
<div class="card-bottom"><span class="description">Soft snowfall</span><span class="detail">Feels like −5°</span></div>
</div>
</article>
<article class="card stormy">
<div class="card-top"><span>04 / Thunderstorm</span><span class="card-number">04</span></div>
<div class="scene" aria-hidden="true">
<span class="spark one"></span><span class="spark two"></span><span class="spark three"></span>
<div class="cloud"></div>
<div class="bolt"></div>
</div>
<div class="weather-info">
<h2 class="city">Reykjavík</h2>
<p class="temperature">8<span>°C</span></p>
<div class="card-bottom"><span class="description">Thunder in the air</span><span class="detail">Feels like 5°</span></div>
</div>
</article>
</section>
<footer class="footer">
<span>Made for the moments in between.</span>
<span>Illustrative forecasts · °C</span>
</footer>
</main>
</body>
</html>Reasoning trace (723 tokens)
**Designing weather elements** I'm focusing on creating a cloud design with specific dimensions: width 130, height 48, and rounded corners. I want to include pseudoelements for visual appeal. The clouds will have a box-shadow for depth, and I plan to add rain and snow effects. The rainy clouds will be a whiteish light blue, while storm clouds get a gray or lavender tint. For snowflakes, I'll use a design with 3 bars, and I'll incorporate animations to make them float or fall.**Designing Weather Card Layout** I'm considering how to design a weather card. Instead of using "LIVE WEATHER" since that might imply inaccurate data, maybe I should use "THE FORECAST / 01" instead. I want a small heading that says, "Forecasts, in a little motion." Each card will be labelled “01 / CLEAR SKIES” with a city name and temperature prominently featured. For mobile, I'll stack cards with specific dimensions and a subtle background color. My header will have a premium feel, and I want to add decorative elements too.