Models 44

GPT-6.1 Terra

by OpenAIReasoningClean
Open in new window

Running live in a sandboxed frame. Click inside it before using the keyboard.

How it went

Total time
41.0 s
Cost
$0.019
Output tokens
3,623
Spent thinking
120 tokens
Speed
99.3 tok/s
Console errors
0
First token after
4.5 s
First visible text after
7.5 s
Prompt tokens
498
Code size
10.0 KB
Finish reason
stop
Served by
OpenAI
Model id
openai/gpt-6.1-terra
Reasoning sent
{"effort":"low"}
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 · 134 lines

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Weather, wherever you are</title>
<style>
  * { box-sizing: border-box; }
  :root { color-scheme: dark; }
  body {
    margin: 0;
    min-height: 100vh;
    font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
    background: #0c1424;
    color: #f7f9ff;
  }
  body::before {
    content: "";
    position: fixed;
    inset: 0;
    pointer-events: none;
    background: radial-gradient(ellipse at 50% 0%, #243b5b 0%, transparent 55%);
  }
  main { position: relative; width: min(1152px, calc(100% - 48px)); margin: 0 auto; padding: 72px 0 55px; }
  header { text-align: center; margin-bottom: 47px; }
  .eyebrow { color: #98aec8; font-size: 11px; font-weight: 800; letter-spacing: .24em; text-transform: uppercase; }
  h1 { font-size: clamp(30px, 4vw, 44px); letter-spacing: -.045em; line-height: 1.1; margin: 15px 0 12px; }
  .subtitle { color: #9baec4; font-size: 15px; margin: 0; }
  .grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 18px; }
  .card {
    position: relative;
    overflow: hidden;
    min-height: 390px;
    border: 1px solid rgba(255,255,255,.22);
    border-radius: 22px;
    padding: 22px;
    display: flex;
    flex-direction: column;
    box-shadow: 0 18px 38px rgba(0,0,0,.19), inset 0 1px rgba(255,255,255,.1);
    transition: transform .3s ease, box-shadow .3s ease;
  }
  .card:hover { transform: translateY(-8px); box-shadow: 0 25px 45px rgba(0,0,0,.3); }
  .sunny { background: linear-gradient(155deg, #f4b45c 0%, #ea8256 55%, #bb5e59 100%); }
  .rainy { background: linear-gradient(155deg, #7dabc4 0%, #4d7d9e 55%, #375c80 100%); }
  .snowy { background: linear-gradient(155deg, #b7d8e0 0%, #84b3c5 52%, #6691aa 100%); }
  .stormy { background: linear-gradient(155deg, #7a779d 0%, #545675 55%, #343b5c 100%); }
  .card-top { display: flex; justify-content: space-between; align-items: center; position: relative; z-index: 2; }
  .tag { font-size: 10px; text-transform: uppercase; letter-spacing: .15em; font-weight: 800; background: rgba(255,255,255,.17); border: 1px solid rgba(255,255,255,.15); padding: 7px 10px; border-radius: 30px; }
  .number { font-size: 11px; font-weight: 700; letter-spacing: .08em; opacity: .65; }
  .scene { height: 190px; position: relative; display: grid; place-items: center; }
  .scene::before { content: ""; position: absolute; width: 160px; height: 160px; border-radius: 50%; background: rgba(255,255,255,.09); }
  .scene::after { content: ""; position: absolute; bottom: 10px; width: 120px; height: 15px; border-radius: 50%; background: rgba(20,40,60,.1); filter: blur(6px); }
  .sun-wrap { position: relative; width: 132px; height: 132px; animation: spin 20s linear infinite; }
  .rays { position: absolute; inset: 0; border-radius: 50%; background: repeating-conic-gradient(from 0deg, #ffe5a3 0deg 6deg, transparent 6deg 30deg); -webkit-mask: radial-gradient(circle, transparent 0 44px, #000 45px); mask: radial-gradient(circle, transparent 0 44px, #000 45px); }
  .sun-core { position: absolute; inset: 27px; border-radius: 50%; background: #ffe9a8; box-shadow: 0 0 35px rgba(255,232,154,.5), inset -6px -7px rgba(244,171,85,.18); }
  .cloud { position: absolute; width: 115px; height: 45px; border-radius: 35px; background: #edf6fa; z-index: 2; box-shadow: inset -5px -7px rgba(109,155,175,.15), 0 8px 15px rgba(34,65,89,.1); animation: float 4s ease-in-out infinite; }
  .cloud::before, .cloud::after { content: ""; position: absolute; border-radius: 50%; background: inherit; }
  .cloud::before { width: 58px; height: 58px; left: 17px; bottom: 14px; }
  .cloud::after { width: 43px; height: 43px; right: 13px; bottom: 13px; }
  .rain-cloud { top: 60px; }
  .rain { position: absolute; top: 100px; left: 50%; width: 100px; height: 75px; transform: translateX(-50%); }
  .drop { position: absolute; width: 4px; height: 15px; border-radius: 4px; background: #c0edff; transform: rotate(15deg); animation: rainfall 1s linear infinite; }
  .drop:nth-child(1) { left: 12px; animation-delay: -.2s; }
  .drop:nth-child(2) { left: 34px; animation-delay: -.7s; }
  .drop:nth-child(3) { left: 55px; animation-delay: -.4s; }
  .drop:nth-child(4) { left: 76px; animation-delay: -.9s; }
  .drop:nth-child(5) { left: 95px; animation-delay: -.55s; }
  .snow-cloud { top: 59px; background: #f4fbfc; }
  .snowfall { position: absolute; top: 105px; left: 50%; width: 120px; height: 75px; transform: translateX(-50%); }
  .flake { position: absolute; width: 12px; height: 12px; animation: snowfall 2.8s linear infinite; }
  .flake::before, .flake::after { content: ""; position: absolute; top: 5px; left: 0; width: 12px; height: 2px; border-radius: 2px; background: #fff; }
  .flake::after { transform: rotate(60deg); box-shadow: none; }
  .flake { background: linear-gradient(120deg, transparent 44%, #fff 45%, #fff 55%, transparent 56%); }
  .flake:nth-child(1) { left: 4px; animation-delay: -.4s; }
  .flake:nth-child(2) { left: 28px; animation-delay: -1.8s; transform: scale(.7); }
  .flake:nth-child(3) { left: 55px; animation-delay: -1s; }
  .flake:nth-child(4) { left: 84px; animation-delay: -2.3s; }
  .flake:nth-child(5) { left: 104px; animation-delay: -1.4s; }
  .storm-cloud { top: 57px; background: #c0c8db; }
  .bolt { position: absolute; z-index: 1; top: 99px; left: calc(50% - 20px); width: 43px; height: 75px; background: #ffe58a; clip-path: polygon(47% 0, 100% 0, 65% 38%, 91% 38%, 12% 100%, 34% 53%, 7% 53%); filter: drop-shadow(0 0 8px #ffdf83); animation: flash 3s infinite; }
  .info { margin-top: auto; position: relative; z-index: 2; }
  .city { font-size: 15px; font-weight: 650; letter-spacing: .01em; }
  .temperature { font-size: 54px; font-weight: 500; line-height: 1; letter-spacing: -.06em; margin: 11px 0 10px; }
  .temperature span { font-size: .68em; vertical-align: top; letter-spacing: 0; }
  .description { font-size: 13px; color: rgba(255,255,255,.83); margin: 0; }
  .card-bottom { border-top: 1px solid rgba(255,255,255,.24); margin-top: 20px; padding-top: 13px; display: flex; justify-content: space-between; font-size: 10px; font-weight: 700; letter-spacing: .09em; text-transform: uppercase; color: rgba(255,255,255,.72); }
  footer { text-align: center; color: #71859d; margin-top: 33px; font-size: 12px; letter-spacing: .03em; }
  @keyframes spin { to { transform: rotate(360deg); } }
  @keyframes float { 50% { transform: translateY(-7px); } }
  @keyframes rainfall { 0% { opacity: 0; transform: translateY(0) rotate(15deg); } 20% { opacity: 1; } 100% { opacity: 0; transform: translateY(54px) rotate(15deg); } }
  @keyframes snowfall { 0% { opacity: 0; transform: translate(0, -3px) rotate(0); } 20% { opacity: 1; } 100% { opacity: 0; transform: translate(14px, 60px) rotate(100deg); } }
  @keyframes flash { 0%, 38%, 43%, 48%, 100% { opacity: .65; } 40%, 46% { opacity: 1; filter: drop-shadow(0 0 15px #ffe891); } 42%, 47% { opacity: .25; } }
  @media (max-width: 850px) { .grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } main { max-width: 650px; padding-top: 50px; } }
  @media (max-width: 520px) { main { width: min(340px, calc(100% - 40px)); padding-top: 44px; } header { margin-bottom: 30px; } .grid { grid-template-columns: 1fr; } .card { min-height: 375px; } }
  @media (prefers-reduced-motion: reduce) { *, *::before, *::after { animation-duration: .001ms !important; animation-iteration-count: 1 !important; transition-duration: .001ms !important; } .drop, .flake { opacity: 1; } }
</style>
</head>
<body>
<main>
  <header>
    <div class="eyebrow">A little look outside</div>
    <h1>Weather, wherever you are.</h1>
    <p class="subtitle">Four places, four moods. Take a moment to look up.</p>
  </header>
  <section class="grid" aria-label="Weather around the world">
    <article class="card sunny">
      <div class="card-top"><span class="tag">Sunny</span><span class="number">01 / 04</span></div>
      <div class="scene" aria-hidden="true"><div class="sun-wrap"><div class="rays"></div><div class="sun-core"></div></div></div>
      <div class="info"><div class="city">Los Angeles</div><div class="temperature">28<span>°</span></div><p class="description">Golden skies all day</p></div>
      <div class="card-bottom"><span>California, USA</span><span>Feels like 30°</span></div>
    </article>
    <article class="card rainy">
      <div class="card-top"><span class="tag">Rainy</span><span class="number">02 / 04</span></div>
      <div class="scene" aria-hidden="true"><div class="cloud rain-cloud"></div><div class="rain"><i class="drop"></i><i class="drop"></i><i class="drop"></i><i class="drop"></i><i class="drop"></i></div></div>
      <div class="info"><div class="city">London</div><div class="temperature">14<span>°</span></div><p class="description">A little rain, a lot of charm</p></div>
      <div class="card-bottom"><span>England, UK</span><span>Feels like 12°</span></div>
    </article>
    <article class="card snowy">
      <div class="card-top"><span class="tag">Snowy</span><span class="number">03 / 04</span></div>
      <div class="scene" aria-hidden="true"><div class="cloud snow-cloud"></div><div class="snowfall"><i class="flake"></i><i class="flake"></i><i class="flake"></i><i class="flake"></i><i class="flake"></i></div></div>
      <div class="info"><div class="city">Sapporo</div><div class="temperature">−2<span>°</span></div><p class="description">Soft snow in the air</p></div>
      <div class="card-bottom"><span>Hokkaido, Japan</span><span>Feels like −5°</span></div>
    </article>
    <article class="card stormy">
      <div class="card-top"><span class="tag">Stormy</span><span class="number">04 / 04</span></div>
      <div class="scene" aria-hidden="true"><div class="cloud storm-cloud"></div><div class="bolt"></div></div>
      <div class="info"><div class="city">New Orleans</div><div class="temperature">21<span>°</span></div><p class="description">Thunder rolling through</p></div>
      <div class="card-bottom"><span>Louisiana, USA</span><span>Feels like 20°</span></div>
    </article>
  </section>
  <footer>A small forecast for every kind of day.</footer>
</main>
</body>
</html>
Reasoning trace (120 tokens)
**Designing weather icons**

I need to create attractive CSS icons for four cards, including top labels and visuals. The cards should be centered in a 1280 viewport. For snowflakes, I could use text and CSS elements like pseudo-elements with rotations, plus box shadows for effect. Rain drops can be done using nth-child, while storm lightning might involve CSS clip-paths. I want sunny rays using repeating-conic-gradient for that rotating effect. The background will be dark navy with appropriately sized cards, 260x380, and ensure mobile designs stack properly.