Models 44

GPT-6 Luna

by OpenAIReasoningClean
Open in new window

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

How it went

Total time
43.5 s
Cost
$0.0024
Output tokens
4,713
Spent thinking
185 tokens
Speed
149.5 tok/s
Console errors
0
First token after
12.0 s
First visible text after
12.7 s
Prompt tokens
498
Code size
13.1 KB
Finish reason
stop
Served by
OpenAI
Model id
openai/gpt-6-luna
Reasoning sent
{"effort":"low"}
Max output
64,000 tokens
Generated
Nov 10, 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 · 471 lines

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Weather, in motion</title>
<style>
  :root {
    color-scheme: dark;
    --ink: #f6f8ff;
    --muted: rgba(246, 248, 255, .68);
  }

  * { box-sizing: border-box; }

  body {
    margin: 0;
    min-height: 100vh;
    padding: 52px clamp(20px, 5vw, 76px) 48px;
    color: var(--ink);
    background:
      radial-gradient(ellipse at 50% -20%, #253956 0, transparent 55%),
      #101723;
    font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
  }

  .page {
    width: min(100%, 1370px);
    margin: 0 auto;
  }

  header {
    display: flex;
    align-items: end;
    justify-content: space-between;
    gap: 20px;
    margin-bottom: 30px;
  }

  .eyebrow {
    margin: 0 0 9px;
    color: #a7c7ff;
    font-size: 11px;
    font-weight: 750;
    letter-spacing: .19em;
    text-transform: uppercase;
  }

  h1 {
    margin: 0;
    font-size: clamp(29px, 4vw, 46px);
    font-weight: 620;
    letter-spacing: -.055em;
    line-height: 1.06;
  }

  .header-note {
    margin: 0 0 3px;
    color: #aab5c7;
    font-size: 13px;
    letter-spacing: .02em;
  }

  .grid {
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    gap: 18px;
  }

  .card {
    --accent: #ffe185;
    position: relative;
    min-height: 455px;
    overflow: hidden;
    border: 1px solid rgba(255,255,255,.18);
    border-radius: 25px;
    padding: 23px 22px 21px;
    isolation: isolate;
    box-shadow: 0 18px 42px rgba(0,0,0,.22), inset 0 1px rgba(255,255,255,.18);
    transition: transform .35s cubic-bezier(.2,.8,.2,1), box-shadow .35s ease;
  }

  .card:hover {
    transform: translateY(-9px);
    box-shadow: 0 28px 52px rgba(0,0,0,.34), inset 0 1px rgba(255,255,255,.22);
  }

  .card::before {
    content: "";
    position: absolute;
    z-index: -1;
    width: 240px;
    height: 240px;
    right: -100px;
    top: 118px;
    border-radius: 50%;
    background: rgba(255,255,255,.09);
    filter: blur(1px);
  }

  .sunny {
    --accent: #ffe18b;
    background: linear-gradient(155deg, #f49b53 0%, #ee7658 48%, #bc5574 100%);
  }
  .rainy {
    --accent: #bce9ff;
    background: linear-gradient(155deg, #3a789a 0%, #356487 48%, #38476e 100%);
  }
  .snowy {
    --accent: #e3f4ff;
    background: linear-gradient(155deg, #8dbcd4 0%, #658fb9 49%, #586a9b 100%);
  }
  .stormy {
    --accent: #e0c5ff;
    background: linear-gradient(155deg, #66558c 0%, #4c477c 48%, #33385e 100%);
  }

  .card-top {
    display: flex;
    align-items: start;
    justify-content: space-between;
  }

  .city {
    margin: 0;
    font-size: 20px;
    font-weight: 650;
    letter-spacing: -.035em;
  }

  .region {
    margin: 5px 0 0;
    color: rgba(255,255,255,.72);
    font-size: 11px;
    letter-spacing: .105em;
    text-transform: uppercase;
  }

  .condition-tag {
    margin-top: 2px;
    padding: 6px 9px;
    border: 1px solid rgba(255,255,255,.24);
    border-radius: 99px;
    color: rgba(255,255,255,.92);
    background: rgba(255,255,255,.1);
    font-size: 10px;
    font-weight: 700;
    letter-spacing: .08em;
    text-transform: uppercase;
  }

  .scene {
    position: relative;
    height: 193px;
    margin: 8px -8px 0;
    display: grid;
    place-items: center;
  }

  .temperature {
    margin: -1px 0 0;
    font-size: 60px;
    font-weight: 520;
    letter-spacing: -.075em;
    line-height: 1;
  }

  .temperature sup {
    position: relative;
    top: 5px;
    margin-left: 3px;
    font-size: 25px;
    font-weight: 450;
    letter-spacing: -.04em;
  }

  .description {
    margin: 10px 0 0;
    color: rgba(255,255,255,.85);
    font-size: 13px;
    line-height: 1.45;
  }

  .divider {
    height: 1px;
    margin: 17px 0 13px;
    background: rgba(255,255,255,.21);
  }

  .footer {
    display: flex;
    justify-content: space-between;
    color: rgba(255,255,255,.73);
    font-size: 11px;
    letter-spacing: .02em;
  }

  .footer strong {
    color: #fff;
    font-weight: 650;
  }

  /* Sunny: glowing disc with a rotating ring of rays */
  .sun {
    position: relative;
    width: 90px;
    height: 90px;
    border-radius: 50%;
    background: radial-gradient(circle at 35% 32%, #fff9ce 0, #ffe88e 34%, #ffbd61 77%);
    box-shadow: 0 0 27px 9px rgba(255,225,131,.38), 0 0 75px 23px rgba(255,211,113,.17);
    animation: sun-glow 3.5s ease-in-out infinite;
  }

  .sun::before {
    content: "";
    position: absolute;
    inset: -28px;
    border-radius: 50%;
    background: repeating-conic-gradient(from 0deg, transparent 0 12deg, rgba(255,231,151,.88) 12.5deg 15deg, transparent 15.5deg 30deg);
    mask: radial-gradient(circle, transparent 0 56%, #000 58% 69%, transparent 71%);
    -webkit-mask: radial-gradient(circle, transparent 0 56%, #000 58% 69%, transparent 71%);
    animation: rotate 22s linear infinite;
  }

  .sun::after {
    content: "";
    position: absolute;
    inset: -45px;
    border-radius: 50%;
    background: radial-gradient(circle, transparent 36%, rgba(255,225,131,.1) 64%, transparent 69%);
  }

  /* Rain: a soft cloud and staggered falling drops */
  .rain-cloud {
    position: absolute;
    top: 47px;
    left: 50%;
    width: 113px;
    height: 41px;
    transform: translateX(-50%);
    border-radius: 30px;
    background: linear-gradient(180deg, #e7f5ff, #adc8dc);
    box-shadow: 0 8px 17px rgba(21,43,69,.22), inset 0 3px 4px rgba(255,255,255,.72);
  }
  .rain-cloud::before, .rain-cloud::after {
    content: "";
    position: absolute;
    border-radius: 50%;
    background: inherit;
  }
  .rain-cloud::before { width: 57px; height: 57px; left: 19px; top: -27px; }
  .rain-cloud::after { width: 43px; height: 43px; right: 15px; top: -18px; }

  .drop {
    position: absolute;
    top: 103px;
    width: 5px;
    height: 17px;
    border-radius: 0 100% 100% 100%;
    background: linear-gradient(#d9f3ff, #7dc8f0);
    transform: rotate(25deg);
    opacity: 0;
    animation: rain-fall 1.05s ease-in infinite;
  }
  .drop:nth-child(2) { left: calc(50% - 37px); animation-delay: -.62s; }
  .drop:nth-child(3) { left: calc(50% - 10px); animation-delay: -.18s; }
  .drop:nth-child(4) { left: calc(50% + 20px); animation-delay: -.82s; }
  .drop:nth-child(5) { left: calc(50% + 43px); animation-delay: -.43s; }

  /* Snow: three slow, drifting flakes */
  .snow-cloud {
    position: absolute;
    top: 52px;
    left: 50%;
    width: 107px;
    height: 37px;
    transform: translateX(-50%);
    border-radius: 26px;
    background: linear-gradient(180deg, #f7fdff, #c7e2ef);
    box-shadow: 0 8px 18px rgba(34,68,100,.19), inset 0 2px 4px #fff;
  }
  .snow-cloud::before, .snow-cloud::after {
    content: "";
    position: absolute;
    border-radius: 50%;
    background: inherit;
  }
  .snow-cloud::before { width: 53px; height: 53px; left: 17px; top: -26px; }
  .snow-cloud::after { width: 40px; height: 40px; right: 14px; top: -17px; }

  .flake {
    position: absolute;
    top: 113px;
    color: #f2fbff;
    font-size: 22px;
    line-height: 1;
    text-shadow: 0 0 9px rgba(230,249,255,.8);
    animation: snow-drift 3.5s ease-in-out infinite;
  }
  .flake.one { left: calc(50% - 35px); animation-delay: -.4s; }
  .flake.two { left: calc(50% - 2px); top: 129px; font-size: 17px; animation-delay: -2s; }
  .flake.three { left: calc(50% + 28px); animation-delay: -1.3s; }

  /* Storm: dark cloud and a bright, CSS-drawn bolt */
  .storm-cloud {
    position: absolute;
    top: 49px;
    left: 50%;
    width: 119px;
    height: 46px;
    transform: translateX(-50%);
    border-radius: 28px;
    background: linear-gradient(180deg, #b4a8d3, #777193);
    box-shadow: 0 9px 19px rgba(22,24,48,.28), inset 0 3px 4px rgba(255,255,255,.45);
  }
  .storm-cloud::before, .storm-cloud::after {
    content: "";
    position: absolute;
    border-radius: 50%;
    background: inherit;
  }
  .storm-cloud::before { width: 59px; height: 59px; left: 18px; top: -27px; }
  .storm-cloud::after { width: 47px; height: 47px; right: 14px; top: -20px; }

  .bolt {
    position: absolute;
    z-index: 2;
    top: 97px;
    left: calc(50% - 13px);
    width: 29px;
    height: 55px;
    background: #ffe78d;
    clip-path: polygon(56% 0, 100% 0, 66% 40%, 96% 40%, 22% 100%, 39% 55%, 7% 55%);
    filter: drop-shadow(0 0 8px #fff1a6);
    animation: lightning-flash 2.8s steps(1, end) infinite;
  }

  .storm-glow {
    position: absolute;
    top: 100px;
    left: 50%;
    width: 76px;
    height: 76px;
    transform: translateX(-50%);
    border-radius: 50%;
    background: #f9dcff;
    filter: blur(30px);
    opacity: 0;
    animation: glow-flash 2.8s steps(1, end) infinite;
  }

  @keyframes rotate { to { transform: rotate(360deg); } }
  @keyframes sun-glow {
    50% { box-shadow: 0 0 37px 12px rgba(255,225,131,.48), 0 0 83px 28px rgba(255,211,113,.22); }
  }
  @keyframes rain-fall {
    0% { transform: translateY(-5px) rotate(25deg); opacity: 0; }
    15% { opacity: .95; }
    100% { transform: translateY(37px) rotate(25deg); opacity: 0; }
  }
  @keyframes snow-drift {
    0%, 100% { transform: translate(0, -3px) rotate(0deg); opacity: .55; }
    50% { transform: translate(9px, 13px) rotate(35deg); opacity: 1; }
  }
  @keyframes lightning-flash {
    0%, 8%, 10%, 48%, 50%, 100% { opacity: .14; }
    9%, 49% { opacity: 1; }
  }
  @keyframes glow-flash {
    0%, 8%, 10%, 48%, 50%, 100% { opacity: 0; }
    9%, 49% { opacity: .53; }
  }

  @media (max-width: 1000px) {
    body { padding-top: 36px; }
    .grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
    .card { min-height: 430px; }
    .scene { height: 175px; }
  }

  @media (max-width: 560px) {
    body { padding: 30px 18px; }
    header { align-items: start; flex-direction: column; margin-bottom: 22px; }
    .header-note { font-size: 12px; }
    .grid { grid-template-columns: 1fr; gap: 14px; }
    .card { min-height: 405px; padding: 22px; }
    .scene { height: 165px; }
  }

  @media (prefers-reduced-motion: reduce) {
    *, *::before, *::after {
      animation-duration: .01ms !important;
      animation-iteration-count: 1 !important;
      scroll-behavior: auto !important;
      transition-duration: .01ms !important;
    }
  }
</style>
</head>
<body>
  <main class="page">
    <header>
      <div>
        <p class="eyebrow">The daily forecast</p>
        <h1>Weather, in motion.</h1>
      </div>
      <p class="header-note">A little look at the skies around the world</p>
    </header>

    <section class="grid" aria-label="Weather forecast cards">
      <article class="card sunny">
        <div class="card-top">
          <div><h2 class="city">Lisbon</h2><p class="region">Portugal · 11:42 AM</p></div>
          <span class="condition-tag">Sunny</span>
        </div>
        <div class="scene" aria-hidden="true"><div class="sun"></div></div>
        <p class="temperature">24<sup>°</sup></p>
        <p class="description">Clear skies and a lovely warm breeze.</p>
        <div class="divider"></div>
        <div class="footer"><span>Feels like <strong>26°</strong></span><span>Humidity <strong>38%</strong></span></div>
      </article>

      <article class="card rainy">
        <div class="card-top">
          <div><h2 class="city">London</h2><p class="region">United Kingdom · 10:42 AM</p></div>
          <span class="condition-tag">Rainy</span>
        </div>
        <div class="scene" aria-hidden="true">
          <div class="rain-cloud"></div>
          <i class="drop"></i><i class="drop"></i><i class="drop"></i><i class="drop"></i>
        </div>
        <p class="temperature">12<sup>°</sup></p>
        <p class="description">Light showers drifting through the city.</p>
        <div class="divider"></div>
        <div class="footer"><span>Feels like <strong>10°</strong></span><span>Humidity <strong>82%</strong></span></div>
      </article>

      <article class="card snowy">
        <div class="card-top">
          <div><h2 class="city">Sapporo</h2><p class="region">Japan · 7:42 PM</p></div>
          <span class="condition-tag">Snowy</span>
        </div>
        <div class="scene" aria-hidden="true">
          <div class="snow-cloud"></div>
          <i class="flake one">✳</i><i class="flake two">✳</i><i class="flake three">✳</i>
        </div>
        <p class="temperature">−3<sup>°</sup></p>
        <p class="description">Soft snowfall with a crisp winter chill.</p>
        <div class="divider"></div>
        <div class="footer"><span>Feels like <strong>−7°</strong></span><span>Humidity <strong>71%</strong></span></div>
      </article>

      <article class="card stormy">
        <div class="card-top">
          <div><h2 class="city">New York</h2><p class="region">United States · 6:42 AM</p></div>
          <span class="condition-tag">Stormy</span>
        </div>
        <div class="scene" aria-hidden="true">
          <div class="storm-glow"></div>
          <div class="storm-cloud"></div>
          <div class="bolt"></div>
        </div>
        <p class="temperature">18<sup>°</sup></p>
        <p class="description">Thunderstorms nearby. Best bring a coat.</p>
        <div class="divider"></div>
        <div class="footer"><span>Feels like <strong>16°</strong></span><span>Wind <strong>24 km/h</strong></span></div>
      </article>
    </section>
  </main>
</body>
</html>
Reasoning trace (185 tokens)
**Designing Weather Card HTML**

I need to create polished output in HTML for weather cards using only CSS. The design should include four cards laid out in a desktop-friendly 1280x800 composition with a header. Each card needs a rich design featuring CSS-generated icons, avoiding SVGs entirely. For the visual elements, I might use sunny rotating rays and rain drops falling via spans. The cards should be responsive and have a sleek dark navy theme with gradient backgrounds. I’ll ensure the dimensions are appropriate and visually appealing.