Models 44

Nemotron 3 Ultra (free)

by NVIDIAReasoningClean
Open in new window

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

How it went

Total time
1 min 24 s
Cost
$0
Output tokens
6,533
Spent thinking
2,866 tokens
Speed
120.3 tok/s
Console errors
0
First token after
30.0 s
First visible text after
58.8 s
Prompt tokens
524
Code size
9.5 KB
Finish reason
stop
Served by
Nvidia
Model id
nvidia/nemotron-3-ultra-550b-a55b:free
Reasoning sent
{"effort":"high"}
Max output
32,000 tokens
Generated
Nov 9, 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 · 286 lines

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Animated Weather Cards</title>
<style>
  *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
  body {
    min-height: 100vh;
    display: flex;
    align-items: center;
    justify-content: center;
    background: #f0f2f5;
    font-family: system-ui, -apple-system, sans-serif;
    padding: 24px;
  }
  .weather-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
    gap: 24px;
    width: 100%;
    max-width: 1200px;
  }
  .weather-card {
    position: relative;
    border-radius: 20px;
    padding: 32px 24px;
    color: #fff;
    text-align: center;
    transition: transform 0.3s ease, box-shadow 0.3s ease;
    overflow: hidden;
  }
  .weather-card:hover {
    transform: translateY(-8px);
    box-shadow: 0 20px 40px rgba(0,0,0,0.2);
  }
  .weather-card::before {
    content: '';
    position: absolute;
    inset: 0;
    background: inherit;
    filter: blur(60px);
    opacity: 0.4;
    z-index: -1;
  }
  /* Gradients */
  .sunny { background: linear-gradient(135deg, #fceabb 0%, #f8b500 100%); }
  .rainy { background: linear-gradient(135deg, #89f7fe 0%, #66a6ff 100%); }
  .snowy { background: linear-gradient(135deg, #e6dada 0%, #274046 100%); }
  .stormy { background: linear-gradient(135deg, #232526 0%, #414345 100%); }
  /* Icon container */
  .icon {
    width: 120px;
    height: 120px;
    margin: 0 auto 20px;
    position: relative;
  }
  /* SUNNY */
  .sunny-icon .sun {
    position: absolute;
    top: 50%; left: 50%;
    width: 56px; height: 56px;
    margin: -28px 0 0 -28px;
    background: radial-gradient(circle at 30% 30%, #fff8a0, #ffd700);
    border-radius: 50%;
    box-shadow: 0 0 30px rgba(255,215,0,0.6);
  }
  .sunny-icon .ray {
    position: absolute;
    top: -40px; left: 50%;
    width: 4px; height: 40px;
    margin-left: -2px;
    background: linear-gradient(180deg, transparent, #ffd700);
    border-radius: 2px;
    transform-origin: bottom center;
  }
  .sunny-icon .ray:nth-child(1) { transform: rotate(0deg); }
  .sunny-icon .ray:nth-child(2) { transform: rotate(45deg); }
  .sunny-icon .ray:nth-child(3) { transform: rotate(90deg); }
  .sunny-icon .ray:nth-child(4) { transform: rotate(135deg); }
  .sunny-icon .ray:nth-child(5) { transform: rotate(180deg); }
  .sunny-icon .ray:nth-child(6) { transform: rotate(225deg); }
  .sunny-icon .ray:nth-child(7) { transform: rotate(270deg); }
  .sunny-icon .ray:nth-child(8) { transform: rotate(315deg); }
  /* RAINY */
  .rainy-icon .cloud {
    position: absolute;
    bottom: 10px; left: 50%;
    width: 80px; height: 40px;
    margin-left: -40px;
    background: #fff;
    border-radius: 20px;
  }
  .rainy-icon .cloud::before,
  .rainy-icon .cloud::after {
    content: '';
    position: absolute;
    background: #fff;
    border-radius: 50%;
  }
  .rainy-icon .cloud::before {
    width: 50px; height: 50px;
    top: -25px; left: 10px;
  }
  .rainy-icon .cloud::after {
    width: 60px; height: 60px;
    top: -30px; right: 10px;
  }
  .rainy-icon .drop {
    position: absolute;
    bottom: 10px;
    width: 4px; height: 12px;
    background: #4da6ff;
    border-radius: 50% 50% 50% 50% / 60% 60% 40% 40%;
    opacity: 0;
    transform: translateY(0);
  }
  /* SNOWY */
  .snowy-icon .cloud {
    position: absolute;
    bottom: 10px; left: 50%;
    width: 80px; height: 40px;
    margin-left: -40px;
    background: #fff;
    border-radius: 20px;
  }
  .snowy-icon .cloud::before,
  .snowy-icon .cloud::after {
    content: '';
    position: absolute;
    background: #fff;
    border-radius: 50%;
  }
  .snowy-icon .cloud::before {
    width: 50px; height: 50px;
    top: -25px; left: 10px;
  }
  .snowy-icon .cloud::after {
    width: 60px; height: 60px;
    top: -30px; right: 10px;
  }
  .snowy-icon .snowflake {
    position: absolute;
    top: 40px;
    width: 6px; height: 6px;
    background: #fff;
    border-radius: 50%;
    opacity: 0;
    transform: translate(0, 0) rotate(0deg);
  }
  /* STORMY */
  .stormy-icon .cloud {
    position: absolute;
    bottom: 10px; left: 50%;
    width: 80px; height: 40px;
    margin-left: -40px;
    background: #37474f;
    border-radius: 20px;
  }
  .stormy-icon .cloud::before,
  .stormy-icon .cloud::after {
    content: '';
    position: absolute;
    background: #37474f;
    border-radius: 50%;
  }
  .stormy-icon .cloud::before {
    width: 50px; height: 50px;
    top: -25px; left: 10px;
  }
  .stormy-icon .cloud::after {
    width: 60px; height: 60px;
    top: -30px; right: 10px;
  }
  .stormy-icon .lightning {
    position: absolute;
    top: 30px; left: 50%;
    width: 20px; height: 80px;
    margin-left: -10px;
    background: #ffeb3b;
    clip-path: polygon(50% 0%, 65% 35%, 55% 35%, 70% 70%, 45% 70%, 55% 100%, 50% 100%, 45% 65%, 30% 65%, 45% 30%);
    opacity: 0;
    filter: drop-shadow(0 0 8px #ffeb3b);
  }
  /* Text */
  .city { font-size: 1.5rem; font-weight: 600; margin-bottom: 8px; text-shadow: 0 2px 4px rgba(0,0,0,0.2); }
  .temp { font-size: 4rem; font-weight: 700; line-height: 1; margin-bottom: 8px; text-shadow: 0 2px 8px rgba(0,0,0,0.2); }
  .desc { font-size: 1.1rem; opacity: 0.9; font-weight: 400; text-transform: capitalize; }
  /* Animations */
  @media (prefers-reduced-motion: no-preference) {
    .sunny-icon .sun { animation: rotate 20s linear infinite; }
    .rainy-icon .drop { animation: fall 1s linear infinite; }
    .snowy-icon .snowflake { animation: drift 3s ease-in-out infinite; }
    .stormy-icon .lightning { animation: flash 3s ease-in-out infinite; }
    /* Stagger rain drops */
    .rainy-icon .drop:nth-child(3)  { left: 15%;  animation-delay: 0s; }
    .rainy-icon .drop:nth-child(4)  { left: 30%;  animation-delay: 0.15s; }
    .rainy-icon .drop:nth-child(5)  { left: 45%;  animation-delay: 0.3s; }
    .rainy-icon .drop:nth-child(6)  { left: 60%;  animation-delay: 0.45s; }
    .rainy-icon .drop:nth-child(7)  { left: 75%;  animation-delay: 0.6s; }
    .rainy-icon .drop:nth-child(8)  { left: 85%;  animation-delay: 0.75s; }
    /* Stagger snowflakes */
    .snowy-icon .snowflake:nth-child(3)  { left: 10%;  animation-delay: 0s;     animation-duration: 3s; }
    .snowy-icon .snowflake:nth-child(4)  { left: 25%;  animation-delay: 0.5s;   animation-duration: 3.5s; }
    .snowy-icon .snowflake:nth-child(5)  { left: 40%;  animation-delay: 1s;     animation-duration: 2.8s; }
    .snowy-icon .snowflake:nth-child(6)  { left: 55%;  animation-delay: 1.5s;   animation-duration: 3.2s; }
    .snowy-icon .snowflake:nth-child(7)  { left: 70%;  animation-delay: 2s;     animation-duration: 2.5s; }
    .snowy-icon .snowflake:nth-child(8)  { left: 85%;  animation-delay: 2.5s;   animation-duration: 3.8s; }
    .snowy-icon .snowflake:nth-child(9)  { left: 20%;  animation-delay: 0.8s;   animation-duration: 3.3s; }
    .snowy-icon .snowflake:nth-child(10) { left: 65%;  animation-delay: 1.8s;   animation-duration: 2.9s; }
  }
  @keyframes rotate { to { transform: rotate(360deg); } }
  @keyframes fall {
    0% { opacity: 0.8; transform: translateY(0) scaleX(1); }
    70% { opacity: 1; }
    100% { opacity: 0; transform: translateY(80px) scaleX(0.5); }
  }
  @keyframes drift {
    0% { opacity: 0; transform: translate(0, 0) rotate(0deg); }
    10% { opacity: 1; }
    50% { transform: translate(-15px, 50px) rotate(180deg); opacity: 0.8; }
    100% { transform: translate(15px, 100px) rotate(360deg); opacity: 0; }
  }
  @keyframes flash {
    0%, 45%, 55%, 65%, 100% { opacity: 0; }
    50%, 60% { opacity: 1; }
  }
  /* Reduced motion fallbacks */
  @media (prefers-reduced-motion: reduce) {
    .sunny-icon .sun,
    .rainy-icon .drop,
    .snowy-icon .snowflake,
    .stormy-icon .lightning { animation: none; }
    .rainy-icon .drop { opacity: 0.6; transform: translateY(40px); }
    .snowy-icon .snowflake { opacity: 0.5; transform: translateY(50px); }
    .stormy-icon .lightning { opacity: 0.3; }
  }
</style>
</head>
<body>
<div class="weather-grid">
  <article class="weather-card sunny">
    <div class="icon sunny-icon">
      <div class="sun">
        <span class="ray"></span><span class="ray"></span><span class="ray"></span><span class="ray"></span>
        <span class="ray"></span><span class="ray"></span><span class="ray"></span><span class="ray"></span>
      </div>
    </div>
    <h2 class="city">Los Angeles</h2>
    <p class="temp">28°C</p>
    <p class="desc">Sunny</p>
  </article>
  <article class="weather-card rainy">
    <div class="icon rainy-icon">
      <div class="cloud"></div>
      <span class="drop"></span><span class="drop"></span><span class="drop"></span>
      <span class="drop"></span><span class="drop"></span><span class="drop"></span>
    </div>
    <h2 class="city">London</h2>
    <p class="temp">14°C</p>
    <p class="desc">Rainy</p>
  </article>
  <article class="weather-card snowy">
    <div class="icon snowy-icon">
      <div class="cloud"></div>
      <span class="snowflake"></span><span class="snowflake"></span><span class="snowflake"></span>
      <span class="snowflake"></span><span class="snowflake"></span><span class="snowflake"></span>
      <span class="snowflake"></span><span class="snowflake"></span>
    </div>
    <h2 class="city">Oslo</h2>
    <p class="temp">-2°C</p>
    <p class="desc">Snowy</p>
  </article>
  <article class="weather-card stormy">
    <div class="icon stormy-icon">
      <div class="cloud"></div>
      <div class="lightning"></div>
    </div>
    <h2 class="city">Miami</h2>
    <p class="temp">26°C</p>
    <p class="desc">Thunderstorms</p>
  </article>
</div>
</body>
</html>
Reasoning trace (2,866 tokens)
The user wants four animated weather cards using only HTML and CSS. No JavaScript, no images, no SVG, no icon fonts. Everything must be built with HTML elements and CSS pseudo-elements.

Key requirements:
1. Four cards: sunny, rainy, snowy, stormy
2. Animated icons using CSS only
3. Each card has city name, temperature, description
4. Background gradients matching weather
5. Responsive grid: 4 per row desktop, stacked mobile
6. Hover lift effect
7. Infinite animations with @keyframes
8. Respect prefers-reduced-motion
9. No JS at all

Let me design each weather icon:

Sunny: A circle with rotating rays
Rainy: Cloud with falling drops
Snowy: Cloud with drifting snowflakes
Stormy: Cloud with flashing lightning

I'll use a grid layout with CSS Grid, responsive with media queries or auto-fit.

For animations:
- Sunny: rotate rays continuously
- Rainy: drops fall from cloud, loop
- Snowy: snowflakes drift down and sway
- Stormy: lightning flashes intermittently

Prefers-reduced-motion: wrap animations in @media (prefers-reduced-motion: no-preference)

Hover lift: transform: translateY(-8px) with transition

Let me structure the HTML:
- Container div with class "weather-grid"
- Four article elements with class "weather-card" and specific weather class
- Each card: icon container, city name, temperature, description

For icons, I'll use a main div with pseudo-elements for the shapes.

Let me write the CSS carefully.

Sunny icon:
- Central circle (sun)
- Rays: multiple elements or pseudo-elements rotated around center
- Can use ::before and ::after for rays, but need multiple rays. Could use multiple child divs, but requirement says HTML elements and pseudo-elements. I can use multiple spans for rays, or use a single element with conic-gradient for rotating rays? But conic-gradient animation might be heavy. Better: create 8 ray elements (spans) and rotate the container.

Actually, to minimize HTML, I can use a single element for rays and animate its rotation. But need multiple rays. Could use a repeating conic-gradient as background and rotate the background? Or use multiple pseudo-elements? Only two pseudo-elements per element.

Better: In HTML, for sunny, have a div.sun with 8 span.ray elements. That's acceptable - HTML elements styled with CSS.

Similarly for rain: cloud div with multiple drop spans.

Snow: cloud with multiple snowflake spans.

Storm: cloud with lightning bolt (can be made with CSS polygon or multiple elements).

Let me plan the HTML structure for each card:

```html
<article class="weather-card sunny">
  <div class="icon sunny-icon">
    <div class="sun">
      <span class="ray"></span>
      <span class="ray"></span>
      ... 8 rays
    </div>
  </div>
  <h2 class="city">Los Angeles</h2>
  <p class="temp">28°C</p>
  <p class="desc">Sunny</p>
</article>
```

But the requirement says "every weather icon is built from HTML elements and pseudo-elements styled with CSS." So using spans for rays is fine.

For rain: cloud shape using border-radius on a div, with ::before and ::after for puffs. Then multiple drop spans animated.

For snow: similar cloud, with snowflake spans (could be simple dots or asterisks using text content? But no icon fonts. Could use CSS to create snowflake shape with pseudo-elements on each span. Or just use small white circles with animation.

For storm: cloud with lightning bolt. Lightning can be a polygon using clip-path or a div with transformed pseudo-elements.

Let me keep it simple but effective.

I'll create a unified icon container for each, with specific inner structure.

Responsive grid: 
```css
.weather-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
  gap: 24px;
  padding: 24px;
  max-width: 1200px;
  margin: 0 auto;
}
```
This will give 4 columns on desktop (1280px / 280 ≈ 4.5), stacked on mobile.

Hover lift:
```css
.weather-card {
  transition: transform 0.3s ease, box-shadow 0.3s ease;
}
.weather-card:hover {
  transform: translateY(-8px);
  box-shadow: 0 20px 40px rgba(0,0,0,0.2);
}
```

Animations with prefers-reduced-motion:
```css
@media (prefers-reduced-motion: no-preference) {
  .ray { animation: rotate 20s linear infinite; }
  .drop { animation: fall 1s linear infinite; }
  .snowflake { animation: drift 3s ease-in-out infinite; }
  .lightning { animation: flash 3s ease-in-out infinite; }
}
@keyframes rotate { to { transform: rotate(360deg); } }
@keyframes fall { to { transform: translateY(100px); opacity: 0; } }
@keyframes drift { ... }
@keyframes flash { ... }
```

Need to stagger animations for rain drops and snowflakes using animation-delay on each child.

I'll use nth-child for delays.

Now, let me write the complete HTML/CSS.

I'll put everything in one HTML file with style block.

Let me design each icon in detail:

1. Sunny:
   - Container: .sunny-icon (relative, fixed size)
   - .sun: absolute centered circle, yellow/orange gradient
   - .ray: 8 spans, absolute positioned from center, rotated 45deg each, with gradient background, extending outward. Actually, rays can be simple rectangles rotated around center.
   - Better: .sun has ::before and ::after for two sets of rays? But need 8 rays. Use 8 spans inside .sun.
   - Each ray: width: 2px, height: 40px, positioned at top: -50px (from center), left: 50%, transform-origin: bottom center, rotated by index*45deg.
   - Animate .sun rotation? Or animate rays container. If I rotate the .sun, the rays rotate with it. But the sun circle would rotate too (not visible). So rotate .sun.

2. Rainy:
   - .cloud: white rounded shape using multiple circles (main div + ::before + ::after)
   - .drop: multiple spans, absolute positioned under cloud, animated falling.
   - Cloud shape: main div with border-radius, ::before and ::after as additional circles to make fluffy cloud.

3. Snowy:
   - Similar cloud.
   - .snowflake: small white circles (or use ::before with content: '❄' but no icon fonts. Use CSS to make a snowflake shape? Too complex. Just use small circles with opacity, drifting down and sideways.

4. Stormy:
   - Darker cloud.
   - .lightning: a zigzag shape. Can be made with a polygon clip-path or multiple divs. Simpler: a div with background and clip-path: polygon(...) for lightning bolt shape. Animate opacity flash.

Let me code the cloud shape first:
```css
.cloud {
  position: relative;
  width: 80px;
  height: 40px;
  background: white;
  border-radius: 20px;
}
.cloud::before,
.cloud::after {
  content: '';
  position: absolute;
  background: white;
  border-radius: 50%;
}
.cloud::before {
  width: 50px;
  height: 50px;
  top: -25px;
  left: 10px;
}
.cloud::after {
  width: 60px;
  height: 60px;
  top: -30px;
  right: 10px;
}
```
This makes a fluffy cloud.

For rain drops: 5-6 spans with class .drop, positioned at bottom of cloud, different left positions, animation delay staggered.

For snowflakes: similar but more flakes, drifting animation with horizontal movement.

For lightning: a bolt shape. Use a div with clip-path: polygon(50% 0%, 60% 35%, 40% 35%, 50% 70%, 40% 70%, 60% 100%, 50% 100%, 40% 65%, 60% 65%, 50% 30%) - something like that. Or simpler: two triangles? Let me use a simple lightning bolt using a div with transformed pseudo-elements? Actually, a single element with clip-path is fine.

I'll define the lightning as:
```css
.lightning {
  position: absolute;
  width: 20px;
  height: 80px;
  background: #ffeb3b;
  clip-path: polygon(50% 0%, 65% 35%, 55% 35%, 70% 70%, 45% 70%, 55% 100%, 50% 100%, 45% 65%, 30% 65%, 45% 30%);
  opacity: 0;
}
```
Then animate opacity flash.

Now, temperatures and cities:
- Sunny: Los Angeles, 28°C, Sunny
- Rainy: London, 14°C, Rainy
- Snowy: Oslo, -2°C, Snowy
- Stormy: Miami, 26°C, Thunderstorms

Gradients:
- Sunny: linear-gradient(135deg, #fceabb 0%, #f8b500 100%)
- Rainy: linear-gradient(135deg, #89f7fe 0%, #66a6ff 100%)
- Snowy: linear-gradient(135deg, #e6dada 0%, #274046 100%)
- Stormy: linear-gradient(135deg, #232526 0%, #414345 100%)

Card styling: white text on dark gradients? Or semi-transparent white background for content? Better: card has gradient background, content in white with slight transparency.

Card structure:
```html
<article class="weather-card sunny">
  <div class="icon-container">
    <div class="icon sunny-icon">
      <div class="sun">
        <span class="ray"></span>...8 rays
      </div>
    </div>
  </div>
  <div class="info">
    <h2 class="city">Los Angeles</h2>
    <p class="temp">28°C</p>
    <p class="desc">Sunny</p>
  </div>
</article>
```

But the icon container might not be needed. Just put icon directly.

Let me write the full CSS.

I need to ensure animations are smooth and respect reduced motion.

For staggered delays, I'll use :nth-child in CSS.

Sun rays: 8 rays, each rotated 45deg * index. The .sun rotates continuously.

Rain drops: 6 drops, each with animation-delay: calc(var(--i) * 0.15s) but CSS can't use var from HTML easily without inline style. Since no JS, I can use nth-child:
```css
.drop:nth-child(1) { animation-delay: 0s; left: 10%; }
.drop:nth-child(2) { animation-delay: 0.15s; left: 25%; }
...
```

Same for snowflakes.

Snowflakes animation: drift down while swaying left-right.
```css
@keyframes drift {
  0% { transform: translate(0, 0) rotate(0deg); opacity: 1; }
  50% { transform: translate(-10px, 50px) rotate(180deg); opacity: 0.8; }
  100% { transform: translate(10px, 100px) rotate(360deg); opacity: 0; }
}
```

Lightning flash: quick on/off.
```css
@keyframes flash {
  0%, 90%, 92%, 94%, 100% { opacity: 0; }
  91%, 93% { opacity: 1; }
}
```

Now, let me assemble the complete code.

I'll write the HTML with all four cards.

Check for any console errors: none expected.

Viewport: 1280x800, responsive down to 375px.

No horizontal scrollbar: use box-sizing: border-box, proper grid.

First paint meaningful: cards visible immediately.

No JS at all.

Let me write the code now.