Models 44

Mistral Large 4

by MistralReasoningClean
Open in new window

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

How it went

Total time
5 min 12 s
Cost
$0.059
Output tokens
27,978
Spent thinking
20,901 tokens
Speed
90 tok/s
Console errors
0
First token after
1.3 s
First visible text after
4 min 15 s
Prompt tokens
360
Code size
18.5 KB
Finish reason
stop
Served by
Mistral
Model id
mistralai/mistral-large-4-0
Reasoning sent
model default
Max output
262,144 tokens
Generated
Nov 12, 2026

What it was asked

The prompt
“draw me an SVG of an astronaut cat skateboarding on the moon”
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.svg · 328 lines

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Astronaut Cat Skateboarding on the Moon</title>
<style>
  html,body{margin:0;padding:0;background:#030612;overflow:hidden}
  body{display:flex;align-items:center;justify-content:center;min-height:100vh}
  svg{display:block;width:100vw;height:100vh}
  .star{animation:twinkle 3.2s ease-in-out infinite}
  @keyframes twinkle{0%,100%{opacity:.15}50%{opacity:1}}
  .spark{animation:sparkle 2.6s ease-in-out infinite;transform-box:fill-box;transform-origin:center}
  @keyframes sparkle{0%,100%{opacity:.25;transform:scale(.65) rotate(0deg)}50%{opacity:1;transform:scale(1.15) rotate(20deg)}}
  #rider{animation:bob 2.8s ease-in-out infinite}
  @keyframes bob{0%,100%{transform:translateY(0)}50%{transform:translateY(-12px)}}
  #shadow{animation:shpulse 2.8s ease-in-out infinite;transform-box:fill-box;transform-origin:center}
  @keyframes shpulse{0%,100%{transform:scale(1);opacity:.42}50%{transform:scale(.88);opacity:.28}}
  .wheel{animation:spin .7s linear infinite;transform-box:fill-box;transform-origin:center}
  @keyframes spin{to{transform:rotate(360deg)}}
  .speed{stroke-dasharray:26 20;animation:dash .55s linear infinite}
  @keyframes dash{to{stroke-dashoffset:-46}}
  .puff{animation:puff 1.15s ease-out infinite;transform-box:fill-box;transform-origin:center;opacity:0}
  @keyframes puff{0%{transform:scale(.4);opacity:.75}100%{transform:scale(1.7);opacity:0}}
  .floaty{animation:floaty 9s ease-in-out infinite}
  @keyframes floaty{0%,100%{transform:translateY(0)}50%{transform:translateY(-9px)}}
  .shoot{animation:shoot 7s linear infinite;animation-delay:1.6s;opacity:0}
  @keyframes shoot{0%{transform:translate(0,0);opacity:0}3%{opacity:1}17%{transform:translate(360px,140px);opacity:0}100%{transform:translate(360px,140px);opacity:0}}
  @media (prefers-reduced-motion:reduce){*{animation:none!important}}
</style>
</head>
<body>
<svg viewBox="0 0 1280 800" preserveAspectRatio="xMidYMid meet" role="img" aria-label="An astronaut cat in a space helmet skateboarding across the moon under a starry sky, with Earth in the distance">
  <defs>
    <linearGradient id="sky" x1="0" y1="0" x2="0" y2="1">
      <stop offset="0" stop-color="#02040f"/>
      <stop offset=".55" stop-color="#0a1030"/>
      <stop offset="1" stop-color="#151d45"/>
    </linearGradient>
    <linearGradient id="moon" x1="0" y1="0" x2="0" y2="1">
      <stop offset="0" stop-color="#d9d9e3"/>
      <stop offset=".5" stop-color="#a9a9ba"/>
      <stop offset="1" stop-color="#7b7b8d"/>
    </linearGradient>
    <radialGradient id="glass" cx=".35" cy=".28" r=".95">
      <stop offset="0" stop-color="#cfe6ff" stop-opacity=".55"/>
      <stop offset=".6" stop-color="#9cc4f5" stop-opacity=".22"/>
      <stop offset="1" stop-color="#6f9fe0" stop-opacity=".12"/>
    </radialGradient>
    <linearGradient id="deck" x1="0" y1="0" x2="1" y2="0">
      <stop offset="0" stop-color="#34e0c8"/>
      <stop offset=".5" stop-color="#5aa2ff"/>
      <stop offset="1" stop-color="#b06bff"/>
    </linearGradient>
    <radialGradient id="glow" cx=".5" cy=".5" r=".5">
      <stop offset="0" stop-color="#7db4ff" stop-opacity=".4"/>
      <stop offset="1" stop-color="#7db4ff" stop-opacity="0"/>
    </radialGradient>
    <linearGradient id="earthShade" x1="0" y1="0" x2="1" y2="1">
      <stop offset="0" stop-color="#00103a" stop-opacity="0"/>
      <stop offset="1" stop-color="#00103a" stop-opacity=".5"/>
    </linearGradient>
    <linearGradient id="shootGrad" x1="0" y1="0" x2="1" y2="0">
      <stop offset="0" stop-color="#ffffff" stop-opacity="0"/>
      <stop offset="1" stop-color="#ffffff" stop-opacity=".9"/>
    </linearGradient>
    <path id="spark" d="M0,-9 L2.2,-2.2 L9,0 L2.2,2.2 L0,9 L-2.2,2.2 L-9,0 L-2.2,-2.2 Z"/>
  </defs>

  <!-- sky -->
  <rect width="1280" height="800" fill="url(#sky)"/>

  <!-- stars -->
  <g fill="#ffffff">
    <circle class="star" cx="60" cy="80" r="2"/>
    <circle class="star" cx="140" cy="180" r="1.6" style="animation-delay:-1.1s"/>
    <circle class="star" cx="220" cy="60" r="2.4" style="animation-delay:-2s"/>
    <circle class="star" cx="300" cy="140" r="1.6"/>
    <circle class="star" cx="380" cy="90" r="2" style="animation-delay:-.7s"/>
    <circle class="star" cx="450" cy="200" r="1.5" style="animation-delay:-1.6s"/>
    <circle class="star" cx="520" cy="60" r="2"/>
    <circle class="star" cx="590" cy="150" r="1.6" style="animation-delay:-2.5s"/>
    <circle class="star" cx="660" cy="80" r="2.4" style="animation-delay:-.4s"/>
    <circle class="star" cx="740" cy="180" r="1.5"/>
    <circle class="star" cx="820" cy="100" r="2" style="animation-delay:-1.9s"/>
    <circle class="star" cx="900" cy="60" r="1.6" style="animation-delay:-.9s"/>
    <circle class="star" cx="960" cy="210" r="2" style="animation-delay:-2.2s"/>
    <circle class="star" cx="1240" cy="90" r="2"/>
    <circle class="star" cx="1200" cy="300" r="1.6" style="animation-delay:-1.3s"/>
    <circle class="star" cx="1160" cy="380" r="2" style="animation-delay:-.2s"/>
    <circle class="star" cx="1050" cy="340" r="1.5" style="animation-delay:-2.8s"/>
    <circle class="star" cx="90" cy="300" r="2" style="animation-delay:-1s"/>
    <circle class="star" cx="180" cy="390" r="1.5"/>
    <circle class="star" cx="280" cy="300" r="2" style="animation-delay:-1.7s"/>
    <circle class="star" cx="360" cy="390" r="1.5" style="animation-delay:-.6s"/>
    <circle class="star" cx="460" cy="320" r="2"/>
    <circle class="star" cx="540" cy="260" r="1.5" style="animation-delay:-2.4s"/>
    <circle class="star" cx="700" cy="300" r="1.5" style="animation-delay:-1.4s"/>
    <circle class="star" cx="780" cy="250" r="2" style="animation-delay:-.3s"/>
    <circle class="star" cx="860" cy="350" r="1.5"/>
    <circle class="star" cx="60" cy="480" r="1.5" style="animation-delay:-2.1s"/>
    <circle class="star" cx="240" cy="470" r="2" style="animation-delay:-1.8s"/>
    <circle class="star" cx="400" cy="440" r="1.5"/>
    <circle class="star" cx="30" cy="180" r="1.6" style="animation-delay:-.8s"/>
    <circle class="star" cx="620" cy="230" r="1.4" style="animation-delay:-2.6s"/>
    <circle class="star" cx="840" cy="210" r="1.4"/>
    <circle class="star" cx="1120" cy="430" r="1.6" style="animation-delay:-1.2s"/>
    <circle class="star" cx="960" cy="420" r="1.4" style="animation-delay:-2.9s"/>
    <circle class="star" cx="720" cy="120" r="1.6" style="animation-delay:-.5s"/>
    <circle class="star" cx="500" cy="120" r="1.4" style="animation-delay:-1.5s"/>
  </g>
  <g fill="#ffffff">
    <g transform="translate(350,120)"><use href="#spark" class="spark"/></g>
    <g transform="translate(980,120) scale(1.2)"><use href="#spark" class="spark" style="animation-delay:-.9s"/></g>
    <g transform="translate(150,260) scale(.8)"><use href="#spark" class="spark" style="animation-delay:-1.7s"/></g>
    <g transform="translate(1120,300) scale(1.1)"><use href="#spark" class="spark" style="animation-delay:-2.1s"/></g>
    <g transform="translate(660,180) scale(.7)"><use href="#spark" class="spark" style="animation-delay:-.4s"/></g>
  </g>

  <!-- Earth -->
  <g transform="translate(1095,150)">
    <g class="floaty">
      <circle r="92" fill="url(#glow)"/>
      <circle r="62" fill="#2f6fd0"/>
      <path d="M-32,-24 Q-12,-42 12,-32 Q30,-24 20,-6 Q2,4 -18,-6 Q-36,-14 -32,-24 Z" fill="#43b06a"/>
      <path d="M8,14 Q30,6 42,22 Q46,40 26,44 Q6,42 4,28 Q2,18 8,14 Z" fill="#43b06a"/>
      <path d="M-46,18 Q-36,10 -27,19 Q-23,30 -36,33 Q-47,29 -46,18 Z" fill="#43b06a"/>
      <ellipse cx="-14" cy="6" rx="18" ry="6" fill="#ffffff" opacity=".8"/>
      <ellipse cx="22" cy="-20" rx="14" ry="5" fill="#ffffff" opacity=".8"/>
      <ellipse cx="-38" cy="-10" rx="10" ry="4" fill="#ffffff" opacity=".8"/>
      <ellipse cx="10" cy="34" rx="12" ry="4" fill="#ffffff" opacity=".8"/>
      <circle r="62" fill="url(#earthShade)"/>
      <circle r="62" fill="none" stroke="#8cb8ff" stroke-width="3" opacity=".6"/>
    </g>
  </g>

  <!-- shooting star -->
  <g transform="translate(200,90)">
    <g class="shoot">
      <line x1="0" y1="0" x2="90" y2="35" stroke="url(#shootGrad)" stroke-width="4" stroke-linecap="round"/>
    </g>
  </g>

  <!-- distant hills -->
  <path d="M600,545 Q740,485 880,542 L880,575 L600,575 Z" fill="#9d9db0" opacity=".9"/>
  <path d="M60,556 Q170,510 290,552 L290,575 L60,575 Z" fill="#9d9db0" opacity=".9"/>

  <!-- moon surface -->
  <path d="M0,560 Q640,500 1280,560 L1280,800 L0,800 Z" fill="url(#moon)"/>
  <path d="M0,560 Q640,500 1280,560" fill="none" stroke="#e6e6f2" stroke-width="3" opacity=".5"/>

  <!-- craters -->
  <g>
    <ellipse cx="210" cy="692" rx="95" ry="27" fill="#7b7b8c"/>
    <ellipse cx="210" cy="692" rx="95" ry="27" fill="none" stroke="#c6c6d4" stroke-width="4"/>
    <ellipse cx="210" cy="697" rx="78" ry="19" fill="#000000" opacity=".16"/>
    <ellipse cx="1060" cy="732" rx="130" ry="33" fill="#7b7b8c"/>
    <ellipse cx="1060" cy="732" rx="130" ry="33" fill="none" stroke="#c6c6d4" stroke-width="5"/>
    <ellipse cx="1060" cy="738" rx="108" ry="24" fill="#000000" opacity=".16"/>
    <ellipse cx="880" cy="632" rx="52" ry="15" fill="#7b7b8c"/>
    <ellipse cx="880" cy="632" rx="52" ry="15" fill="none" stroke="#c6c6d4" stroke-width="3"/>
    <ellipse cx="880" cy="636" rx="42" ry="10" fill="#000000" opacity=".16"/>
    <ellipse cx="430" cy="752" rx="72" ry="21" fill="#7b7b8c"/>
    <ellipse cx="430" cy="752" rx="72" ry="21" fill="none" stroke="#c6c6d4" stroke-width="4"/>
    <ellipse cx="430" cy="756" rx="58" ry="15" fill="#000000" opacity=".16"/>
    <ellipse cx="625" cy="725" rx="28" ry="9" fill="#7b7b8c"/>
    <ellipse cx="625" cy="725" rx="28" ry="9" fill="none" stroke="#c6c6d4" stroke-width="2.5"/>
    <ellipse cx="70" cy="628" rx="38" ry="11" fill="#7b7b8c"/>
    <ellipse cx="70" cy="628" rx="38" ry="11" fill="none" stroke="#c6c6d4" stroke-width="3"/>
    <ellipse cx="1185" cy="648" rx="44" ry="13" fill="#7b7b8c"/>
    <ellipse cx="1185" cy="648" rx="44" ry="13" fill="none" stroke="#c6c6d4" stroke-width="3"/>
  </g>

  <!-- rocks -->
  <g fill="#9a9aaa">
    <ellipse cx="330" cy="645" rx="11" ry="6"/>
    <ellipse cx="760" cy="700" rx="12" ry="7"/>
    <ellipse cx="990" cy="600" rx="8" ry="5"/>
    <ellipse cx="150" cy="610" rx="7" ry="4"/>
    <ellipse cx="1150" cy="700" rx="10" ry="6"/>
  </g>

  <!-- flag -->
  <g>
    <ellipse cx="950" cy="545" rx="15" ry="4" fill="#000000" opacity=".2"/>
    <line x1="950" y1="542" x2="950" y2="428" stroke="#d7dbe6" stroke-width="6" stroke-linecap="round"/>
    <circle cx="950" cy="424" r="6" fill="#ffd166"/>
    <path d="M950,430 C976,422 998,438 1024,428 L1024,460 C998,470 976,454 950,462 Z" fill="#ff5d73" stroke="#d63c55" stroke-width="2.5" stroke-linejoin="round"/>
    <g fill="#ffffff">
      <circle cx="987" cy="446" r="5.5"/>
      <circle cx="979" cy="439" r="2.8"/>
      <circle cx="987" cy="436" r="2.8"/>
      <circle cx="995" cy="439" r="2.8"/>
    </g>
  </g>

  <!-- shadow -->
  <ellipse id="shadow" cx="612" cy="692" rx="180" ry="18" fill="#23233a" opacity=".42"/>

  <!-- speed lines -->
  <g stroke="#a8bcff" stroke-width="7" stroke-linecap="round" fill="none" opacity=".55">
    <path class="speed" d="M250,392 H390"/>
    <path class="speed" d="M215,442 H400" style="animation-delay:-.2s"/>
    <path class="speed" d="M250,492 H410" style="animation-delay:-.35s"/>
    <path class="speed" d="M300,532 H430" style="animation-delay:-.1s"/>
  </g>

  <!-- rider: astronaut cat on skateboard -->
  <g id="rider">
    <!-- skateboard -->
    <g transform="translate(610,638) rotate(-6)">
      <g transform="translate(-88,26)">
        <circle r="16" fill="#ffd166" stroke="#b97f16" stroke-width="3"/>
        <g class="wheel">
          <path d="M-11,0 H11 M0,-11 V11" stroke="#b97f16" stroke-width="3"/>
          <circle r="5" fill="#b97f16"/>
        </g>
      </g>
      <g transform="translate(88,26)">
        <circle r="16" fill="#ffd166" stroke="#b97f16" stroke-width="3"/>
        <g class="wheel" style="animation-delay:-.35s">
          <path d="M-11,0 H11 M0,-11 V11" stroke="#b97f16" stroke-width="3"/>
          <circle r="5" fill="#b97f16"/>
        </g>
      </g>
      <rect x="-101" y="8" width="22" height="12" rx="3" fill="#7c8698"/>
      <rect x="79" y="8" width="22" height="12" rx="3" fill="#7c8698"/>
      <path d="M-168,-2 C-172,-16 -158,-24 -140,-24 L140,-24 C158,-24 172,-16 168,-2 L158,10 L-158,10 Z" fill="url(#deck)" stroke="#1e2440" stroke-width="3" stroke-linejoin="round"/>
      <text x="0" y="-4" text-anchor="middle" font-family="'Trebuchet MS',Verdana,sans-serif" font-size="14" font-weight="bold" letter-spacing="4" fill="#101736" opacity=".9">MEOW</text>
    </g>

    <!-- dust puffs -->
    <g fill="#cfd0da">
      <circle class="puff" cx="498" cy="682" r="7"/>
      <circle class="puff" cx="472" cy="690" r="5" style="animation-delay:-.4s"/>
      <circle class="puff" cx="520" cy="694" r="4" style="animation-delay:-.8s"/>
    </g>

    <!-- legs -->
    <path d="M582,506 C570,540 564,568 562,592" fill="none" stroke="#aab2c8" stroke-width="38" stroke-linecap="round"/>
    <path d="M582,506 C570,540 564,568 562,592" fill="none" stroke="#f4f6fb" stroke-width="30" stroke-linecap="round"/>
    <path d="M636,506 C664,530 688,558 699,586" fill="none" stroke="#aab2c8" stroke-width="38" stroke-linecap="round"/>
    <path d="M636,506 C664,530 688,558 699,586" fill="none" stroke="#f4f6fb" stroke-width="30" stroke-linecap="round"/>
    <!-- boots -->
    <g transform="translate(562,600) rotate(-4)">
      <rect x="-32" y="-8" width="60" height="28" rx="10" fill="#e8ebf4" stroke="#aab2c8" stroke-width="3"/>
      <rect x="-32" y="12" width="60" height="8" rx="4" fill="#8f97ab"/>
    </g>
    <g transform="translate(699,587) rotate(5)">
      <rect x="-33" y="-8" width="62" height="28" rx="10" fill="#e8ebf4" stroke="#aab2c8" stroke-width="3"/>
      <rect x="-33" y="12" width="62" height="8" rx="4" fill="#8f97ab"/>
    </g>

    <!-- backpack -->
    <rect x="494" y="402" width="66" height="110" rx="16" fill="#cdd3e0" stroke="#9aa3b8" stroke-width="3"/>
    <rect x="505" y="416" width="44" height="32" rx="6" fill="#b7bed0" stroke="#9aa3b8" stroke-width="2"/>
    <circle cx="513" cy="462" r="5" fill="#ff6b6b"/>
    <circle cx="533" cy="462" r="5" fill="#6bd48a"/>
    <path d="M505,482 H549" stroke="#9aa3b8" stroke-width="3"/>
    <line x1="527" y1="402" x2="527" y2="374" stroke="#9aa3b8" stroke-width="4"/>
    <circle cx="527" cy="368" r="7" fill="#ff6b6b" stroke="#d63c55" stroke-width="2"/>

    <!-- scarf -->
    <path d="M600,412 C562,390 516,394 480,418 C505,424 524,438 552,434 C574,430 592,422 602,418 Z" fill="#ff5d73" stroke="#d63c55" stroke-width="3" stroke-linejoin="round"/>
    <path d="M516,406 C536,414 560,420 584,418" stroke="#d63c55" stroke-width="2" fill="none" opacity=".6"/>

    <!-- back arm -->
    <path d="M562,428 C530,442 504,462 490,488" fill="none" stroke="#aab2c8" stroke-width="34" stroke-linecap="round"/>
    <path d="M562,428 C530,442 504,462 490,488" fill="none" stroke="#f4f6fb" stroke-width="26" stroke-linecap="round"/>
    <circle cx="496" cy="480" r="9.5" fill="#c3c9d9" stroke="#9aa3b8" stroke-width="2"/>
    <circle cx="486" cy="494" r="17" fill="#f4f6fb" stroke="#aab2c8" stroke-width="3"/>

    <!-- torso -->
    <rect x="552" y="390" width="118" height="128" rx="36" fill="#f4f6fb" stroke="#aab2c8" stroke-width="3"/>
    <path d="M560,452 H664" stroke="#d5dae6" stroke-width="3"/>
    <rect x="584" y="428" width="58" height="46" rx="8" fill="#e2e7f2" stroke="#aab2c8" stroke-width="2"/>
    <rect x="592" y="435" width="42" height="17" rx="3" fill="#7fd4f2" stroke="#aab2c8" stroke-width="1.5"/>
    <path d="M596,449 L610,437" stroke="#ffffff" stroke-width="2" opacity=".8"/>
    <circle cx="596" cy="464" r="4" fill="#ff6b6b"/>
    <circle cx="611" cy="464" r="4" fill="#ffd166"/>
    <circle cx="626" cy="464" r="4" fill="#6bd48a"/>
    <rect x="556" y="494" width="110" height="16" rx="8" fill="#c3c9d9" stroke="#9aa3b8" stroke-width="2"/>
    <rect x="600" y="496" width="24" height="12" rx="3" fill="#ffd166" stroke="#c98f1b" stroke-width="2"/>

    <!-- front arm -->
    <path d="M654,424 C694,410 726,396 754,380" fill="none" stroke="#aab2c8" stroke-width="34" stroke-linecap="round"/>
    <path d="M654,424 C694,410 726,396 754,380" fill="none" stroke="#f4f6fb" stroke-width="26" stroke-linecap="round"/>
    <circle cx="744" cy="386" r="9.5" fill="#c3c9d9" stroke="#9aa3b8" stroke-width="2"/>
    <circle cx="760" cy="376" r="17" fill="#f4f6fb" stroke="#aab2c8" stroke-width="3"/>

    <!-- life-support tube -->
    <path d="M552,416 C566,404 562,392 558,382" fill="none" stroke="#9aa3b8" stroke-width="6" stroke-linecap="round"/>

    <!-- neck ring -->
    <ellipse cx="612" cy="392" rx="52" ry="15" fill="#c3c9d9" stroke="#9aa3b8" stroke-width="3"/>

    <!-- cat head -->
    <path d="M568,276 L580,240 L606,262 Z" fill="#f6a55c" stroke="#d97f35" stroke-width="3" stroke-linejoin="round"/>
    <path d="M576,266 L581,249 L593,260 Z" fill="#f7b8c4"/>
    <path d="M656,276 L644,240 L618,262 Z" fill="#f6a55c" stroke="#d97f35" stroke-width="3" stroke-linejoin="round"/>
    <path d="M648,266 L643,249 L631,260 Z" fill="#f7b8c4"/>
    <circle cx="612" cy="320" r="58" fill="#f6a55c" stroke="#d97f35" stroke-width="3"/>
    <path d="M599,266 Q604,276 600,285 M612,263 Q617,273 613,283 M625,266 Q630,276 626,285" stroke="#e0823a" stroke-width="4" fill="none" stroke-linecap="round"/>
    <circle cx="590" cy="315" r="7.5" fill="#402d1c"/>
    <circle cx="592.5" cy="312.5" r="2.6" fill="#ffffff"/>
    <circle cx="634" cy="315" r="7.5" fill="#402d1c"/>
    <circle cx="636.5" cy="312.5" r="2.6" fill="#ffffff"/>
    <ellipse cx="612" cy="344" rx="28" ry="18" fill="#fff1e0"/>
    <path d="M605,335 Q612,330 619,335 Q617,343 612,344 Q607,343 605,335 Z" fill="#ef7d95"/>
    <path d="M612,344 Q611,351 604,352 M612,344 Q613,351 620,352" stroke="#b06a3a" stroke-width="2.5" fill="none" stroke-linecap="round"/>
    <g stroke="#ffffff" stroke-width="2" opacity=".85" stroke-linecap="round">
      <path d="M584,340 L556,333"/>
      <path d="M584,348 L558,352"/>
      <path d="M640,340 L668,333"/>
      <path d="M640,348 L666,352"/>
    </g>
    <ellipse cx="576" cy="333" rx="7" ry="4" fill="#ff9db1" opacity=".55"/>
    <ellipse cx="648" cy="333" rx="7" ry="4" fill="#ff9db1" opacity=".55"/>

    <!-- helmet glass -->
    <circle cx="612" cy="312" r="86" fill="url(#glass)" stroke="#f2f7ff" stroke-width="7"/>
    <circle cx="612" cy="312" r="77" fill="none" stroke="#ffffff" stroke-width="2" opacity=".3"/>
    <path d="M543,287 A74,74 0 0 1 637,242" stroke="#ffffff" stroke-width="9" fill="none" stroke-linecap="round" opacity=".75"/>
    <circle cx="580" cy="252" r="6" fill="#ffffff" opacity=".9"/>
  </g>
</svg>
</body>
</html>
Reasoning trace (20,901 tokens)
The user wants an SVG of an astronaut cat skateboarding on the moon. Let me create a detailed, self-contained HTML file with an inline SVG illustration.

Key elements:
- Moon surface (gray, craters)
- Starry space background
- Earth in the distance maybe
- Astronaut cat: cat head with ears, helmet (glass dome), spacesuit, skating pose on a skateboard
- Skateboard with wheels
- Maybe motion lines, stars twinkling
- Should look good at 1280×800 and down to 375px

I'll make an SVG with viewBox like 0 0 1280 800, responsive with width:100%. Add some CSS animations for twinkling stars and maybe a gentle float. Keep it self-contained, no external resources.

Let me design:

Background: dark space gradient (deep navy to black), stars (circles with animation), maybe a planet Earth top-right.

Moon ground: a curved horizon line, gray fill with craters (ellipses with darker inner shading).

Astronaut cat:
- Body: white spacesuit torso, slightly leaning forward
- Helmet: circle glass dome with light blue tint, cat face inside: orange/white fur, ears poking through? Actually cat ears inside helmet — cute. Cat face: eyes, whiskers, pink nose.
- Backpack (life support) behind
- Arms: one forward, one back, with gloved hands
- Legs: bent in skating stance, boots
- Skateboard: deck (rounded rectangle), two wheels, maybe tilted
- Motion lines behind

Let me write coordinates. Canvas 1280×800. Horizon around y=560. Moon surface from y=560 to 800 with slight curve.

Cat centered around x=600, y=380.

Let me plan the cat:
- Helmet: circle center (600, 300), r=85. Glass: fill light blue with opacity, stroke white.
- Cat head inside: circle center (600, 310), r=62, fur color orange (#f5a65b) with white muzzle. Ears: two triangles at top of head, inside helmet.
- Face: eyes (closed happy arcs or big eyes), pink nose, whiskers lines, smile.
- Body: torso from below helmet, rounded rect from (545, 385) to (655, 520), white suit with gray shading, chest panel with buttons.
- Backpack: rect behind torso on left side (since facing right, backpack on back = left side) around (500, 400) size 60×110, gray with details.
- Arms: right arm reaching forward (to the right): from shoulder (640, 420) to hand (740, 380), thick white stroke with round cap, glove circle at end. Left arm back: from (560, 425) to (480, 470), glove circle.
- Legs: skating stance — front leg bent: hip (630, 510) to knee (680, 560) to boot (700, 610)? Actually feet on skateboard. Skateboard on moon ground at y≈640. Let's put skateboard deck at y=630, from x=480 to x=760, slight tilt. Wheels at (540, 655) and (700, 655), r=18.

Hmm, let me make the board tilted slightly (front up) for dynamic feel: use a rotated group.

Legs: back leg from hip (575, 510) to boot on board at (560, 615); front leg from hip (630, 510) to knee (690, 555) to boot (700, 612). Boots: gray rounded rects on the board.

Motion lines: a few horizontal curved lines behind (left of) the cat, and dust puffs at wheels.

Shadow under skateboard on moon: ellipse.

Stars: scatter circles with class twinkle, animation delays. Also a couple of shooting stars maybe.

Earth: circle top right at (1080, 150), r=70, blue with green land blobs and white clouds, slight atmosphere glow.

Add a flag? Maybe a small planted flag with paw print — cute detail. Optional. Maybe a "MOON" sign? Keep it simple but nice: a small flag with a paw print.

Text? Could add small text "MEOW-n" on the skateboard deck. Cute. Use SVG text with generic font-family (sans-serif). That's fine, no external fonts.

Animations (CSS in <style>): twinkling stars (opacity), Earth slow rotate? Rotating earth would look odd with land; instead gentle pulse glow. Cat group gentle bob (translateY) — but feet on board... animate whole cat+board group bobbing slightly and shadow scaling. Motion lines dash animation. Wheel spin? Could rotate wheels with spokes. Keep simple: add spin animation to wheel inner circles.

Also maybe a slow drifting of the whole scene? Keep subtle.

Responsive: SVG with viewBox and width 100%, height auto, max-height 100vh maybe. Page background matches space color so it blends. Center the SVG. At 375px wide it scales down, fine, no horizontal scrollbar.

Ensure first paint shows everything: yes, static SVG visible immediately.

Let me write the code carefully.

Colors:
- Space gradient: #0b1026 to #1b2340 / black. Radial maybe.
- Moon surface: gradient #c9c9d1 to #8f8f9c. Craters darker #7a7a88 with highlight.
- Suit: #f4f6fb white, shading #d7dbe6, outlines #9aa3b8 or dark #2b3245 for contrast? Use stroke #333a4d thin.
- Helmet glass: rgba(160, 210, 255, 0.35), stroke #e8f2ff width 6, highlight arc.
- Cat fur: #f6a55c (orange tabby) with stripes #e0823a, muzzle white #fff4e6, inner ear pink #f7b8c4, nose #f27e93.
- Backpack: #c7ccd9 with darker details, red/blue buttons.
- Skateboard deck: maybe purple/teal gradient with paw print, trucks gray, wheels #ffd166 with hub.

Let me lay out coordinates more concretely.

SVG viewBox="0 0 1280 800".

Sky: rect 0 0 1280 800 fill url(#skyGrad).
Stars group: ~40 circles random positions, plus 4 bigger with cross sparkle. Use <g class="stars">.

Earth group at translate(1090,140): glow circle r=86 fill rgba(90,160,255,0.15); circle r=64 fill #3d7bd9; land paths fill #4caf6d; clouds white ellipses opacity .8; subtle shading circle overlay dark on one side.

Moon ground: path M0,560 Q640,500 1280,560 L1280,800 L0,800 Z fill url(#moonGrad). Horizon line highlight: same curve stroke #e8e8f0 width 3 opacity .6.

Craters: ellipses on ground: e.g., at (200, 680) rx=90 ry=26; inner darker ellipse offset; rim highlight arc. A few: (180,690), (1050,720) rx=120 ry=32, (880, 640) rx=50 ry=14, (420, 740) rx=70 ry=20. Also small dots.

Cat + skateboard group id="rider" with animation bob.

Skateboard group at translate(610, 640) rotate(-6):
- deck: path rounded: M-150,0 Q-150,-14 -130,-14 L130,-14 Q150,-14 150,0 Q150,10 130,10 L-130,10 Q-150,10 -150,0 Z — actually deck shape: use rect x=-150 y=-16 width=300 height=20 rx=10, fill url(#deckGrad) stroke. Add kicked ends: maybe path with upturned nose/tail. Simpler: path M-160,-6 Q-165,-20 -145,-20 L145,-20 Q165,-20 160,-6 L150,6 L-150,6 Z. Hmm. Let me do: deck as path:
M -165 -4 C -165 -18, -150 -22, -138 -22 L 138 -22 C 150 -22, 165 -18, 165 -4 L 158 8 L -158 8 Z
Fill gradient purple (#7b5cff to #4a3aff?) maybe teal #19c2b8. Add stripe line along top. Text "MEOW" rotated? Place text at center y=-6? Deck height from -22 to 8, so text at y=-6 font-size 14. Actually put paw prints instead of text. Let me do text "★ MEOW ★"? Keep "MEOW" with letter-spacing.

- trucks: two rects at x=-90 and x=90: rect x=-100 y=8 width=24 height=10 fill #8a93a6; similar at 76..100.
- wheels: circles at (-88, 26) and (88, 26) r=16 fill #ffd166 stroke #c98f1b, inner hub circle r=6 fill #c98f1b, plus spokes lines for spin. Wheel group class="wheel" with transform-origin at wheel center — SVG CSS transform-origin works with transform-box: fill-box. Use style="transform-box: fill-box; transform-origin: center;" and animation spin.

Dust puffs behind wheels: small circles gray opacity animation.

Cat (facing right), positioned above board. Board center ~ (610,640) before rotation; feet on deck top y≈618 (deck top at -22 => 618). Let's place boots at y≈614.

- Back leg (left, trailing): from hip (585, 505) to boot at (560, 600). Draw as thick path stroke white width 34 linecap round: M585,505 L565,560 L560,598. Boot: rounded rect at (540, 592) w=52 h=30 rx=10 rotated slightly, fill #dfe3ee stroke. Boot sole darker.
- Front leg: hip (635, 505) knee (690, 545) boot (705, 600): path M635,505 L690,548 L703,596 stroke width 34. Boot rect at (683, 590) w=54 h=30 rx=10.

Hmm wait, board rotated -6°, feet approx fine.

- Torso: rounded rect x=552 y=392 w=116 h=130 rx=34 fill suit white, stroke #b9c0d4. Slight lean: rotate group? Keep upright-ish, maybe rotate whole cat 6° forward (to the right) around board center for dynamism. I'll wrap cat body in g transform="rotate(6 610 500)".

- Chest panel: rect x=585 y=430 w=56 h=44 rx=8 fill #dfe4f0 stroke; buttons: circles red, yellow, green small; small lines.
- Belt: rect x=556 y=498 w=108 h=14 rx=7 fill #c3c9d9.
- Backpack: behind on left: rect x=496 y=400 w=64 h=112 rx=16 fill #c9cfdd stroke #9aa3b8; details: two vertical lines, small antenna with ball on top: line from (528,400) to (528,372), circle r=6 fill red at (528,368). Tubes from backpack to helmet: path curve stroke gray.

- Arms: 
  - Right arm (front, reaching forward): shoulder at (655, 425): path M655,425 C700,410 730,395 758,378 stroke white width 30 round; glove circle at (762,375) r=17 fill #f4f6fb stroke; cuff ring at wrist.
  - Left arm (back, swung back): M560,430 C525,445 500,465 485,490 stroke width 30; glove circle (482,494) r=16.
  Cuffs: small circles/rects at wrists fill #c3c9d9.

- Helmet: circle center (612, 312) r=88 fill glass gradient rgba, stroke #eef4ff width 7. Inner rim circle r=78 stroke #c9d4ea width 4? The neck ring: ellipse at (612, 392) rx=52 ry=16 fill #c3c9d9.

- Cat head inside helmet: 
  - Ears: triangles at top: left ear path M560,268 L575,222 L600,258 Z fill fur stroke; right ear M624,258 L649,222 L664,268 Z. Inner ear pink smaller triangles.
  - Head: circle center (612, 318) r=60 fill #f6a55c stroke #d97f35 width 3.
  - Muzzle: ellipse (612, 342) rx=30 ry=20 fill #fff1e0.
  - Stripes on forehead: three small paths stroke #e0823a.
  - Eyes: happy closed arcs: path M585,312 Q593,304 601,312 stroke #4a2f1d width 4 fill none linecap round; right eye M623,312 Q631,304 639,312. Or big shiny eyes: circles with highlight. Closed happy arcs are cute. Let's do open eyes with sparkle: circle (592, 310) r=7 fill #3a2a1a, highlight circle r=2.5 white at (594,307); same right (632,310). Add eyelashes? Keep simple.
  - Nose: small triangle/heart at (612, 332): path M606,330 Q612,326 618,330 Q616,338 612,339 Q608,338 606,330 fill #f27e93.
  - Mouth: path M612,339 Q612,346 604,347 M612,339 Q612,346 620,347 stroke #b06a3a? Use width 2.5.
  - Whiskers: lines from muzzle: (582,336) to (556,330), (582,344) to (558,346), right side (642,336)-(668,330), (642,344)-(666,346) stroke #fff opacity .9 width 2.
  - Cheek blush: pink ellipses opacity .5 at (578, 330) and (646, 330)? optional.

- Helmet highlights: arc path on upper-left of glass: M556,270 A70,70 0 0 1 640,240 stroke white width 8 opacity .7 fill none linecap round. Small shine circle.

- Antenna on helmet? Backpack antenna enough.

Motion lines: behind cat (left side): three curved lines at y≈400, 450, 500 from x 300→430 stroke #8fa3ff opacity .5 width 6 linecap round, with dash animation moving. Class "speed".

Shadow: ellipse under board at (610, 690) rx=170 ry=18 fill #000 opacity .25 — on moon ground. With bob animation, scale shadow inversely. Simpler: shadow inside rider group? If rider bobs up, shadow should stay. Put shadow outside rider group, animate its opacity/scale with same duration.

Flag: at (950, 520): pole line from (950,640) to (950,520) stroke #d7dbe6 width 6; flag rect/path waving: path M950,522 L1030,532 L950,552 Z? Make a waving flag: path M950,520 C980,512 1000,528 1030,520 L1030,556 C1000,564 980,548 950,556 Z fill #ff5d73? With paw print white in center. Cute. Place on ground: ground at x=950 is y≈? horizon curve: at x=950, y = 560 + something... The curve Q640,500: at x=950, roughly y≈ 560 - ... let's compute: quadratic from (0,560) control (640,500) to (1280,560). At t where x=950: x(t)= (1-t)²*0 + 2(1-t)t*640 + t²*1280 = 1280t - 640t² ... set =950: 1280t - 640t² = 950 → 640t² -1280t +950=0 → t = [1280 ± sqrt(1280² - 4*640*950)]/(2*640) = [1280 ± sqrt(1638400 - 2432000)]/1280 → discriminant negative? 1638400-2432000 = -793600. Negative — meaning curve never dips? Wait control y=500 above 560, the max x issue... x(t) = 2(1-t)t*640 + t²*1280 = 1280t(1-t) + 1280t² = 1280t. Oh nice, x(t)=1280t linear. So t=950/1280=0.742. y(t) = (1-t)²*560 + 2(1-t)t*500 + t²*560 = 560 - 2(1-t)t*60 = 560 - 120t(1-t) = 560 - 120*0.742*0.258 = 560 - 22.97 ≈ 537. So ground at x=950 is y≈537. Pole base at (950, 545) fine, pole top (950, 430), flag at top.

Also small rocks scattered.

Shooting star: line with gradient, animated translate. Optional; add one with CSS animation moving across sky every few seconds. Keep subtle: a <line> with class shoot, animation keyframes translating from (200,100) to (500,220) fading. Use opacity keyframes.

CSS animations:
@keyframes twinkle { 0%,100%{opacity:.2} 50%{opacity:1} }
.star { animation: twinkle 3s ease-in-out infinite; } with inline style animation-delay varied.

@keyframes bob { 0%,100%{ transform: translateY(0) } 50%{ transform: translateY(-10px) } }
#rider { animation: bob 2.6s ease-in-out infinite; } — transform on SVG g via CSS works in Chrome.

@keyframes shadowPulse { 0%,100%{ transform: scaleX(1); opacity:.28 } 50%{ transform: scaleX(.92); opacity:.2 } } with transform-box fill-box origin center on ellipse.

@keyframes spin { to { transform: rotate(360deg) } } .wheel { transform-box: fill-box; transform-origin: center; animation: spin .8s linear infinite; }

@keyframes dash { to { stroke-dashoffset: -60; } } .speed { stroke-dasharray: 30 18; animation: dash 0.7s linear infinite; }

@keyframes shoot { 0% { transform: translate(0,0); opacity:0 } 5%{opacity:1} 25%{ transform: translate(420px,180px); opacity:0 } 100%{ transform: translate(420px,180px); opacity:0 } } duration 6s infinite. Apply to a g containing a gradient line.

Earth: maybe slow float: @keyframes floaty { 50% { transform: translateY(-8px) } } 8s.

Also add subtle glow around moon horizon? fine.

Title text? Maybe small caption bottom: not necessary. Could add "The Moon" no. Keep pure illustration. Maybe add tiny text on helmet? no.

Let me also add a few small stars as 4-point sparkles: path M x,y ... use polygon star shape. Simple: use <path d="M0,-8 L2,-2 L8,0 L2,2 L0,8 L-2,2 L-8,0 L-2,-2 Z"> with transform translate.

Now, page HTML: body with dark background (#05070f), flex center, svg max-width 1280 width 100% height auto. Ensure at 1280×800 the svg fits: aspect 1280/800 = 1.6; viewport 1280×800 exactly 1.6, so fits nicely. Use height: 100vh? Set svg style width:100vw; height:100vh; with preserveAspectRatio="xMidYMid meet" — that letterboxes, background matches so fine. Simpler: body margin 0, background #05070f, svg display block width 100vw height 100vh. With meet, at exactly 1.6 ratio it fills. At 375 wide, height 100vh might crop? With meet, whole viewBox visible, letterboxed — width 375 → svg content scaled to fit height 100vh? meet scales to min(scaleX, scaleY); if viewport ratio taller than 1.6, scale limited by width, centered vertically with empty space top/bottom — background matches, no scrollbar. Good. Set overflow hidden on body to guarantee no scrollbars.

Actually to "adapt gracefully down to 375px", letterboxing is fine since bg color matches space. Or set svg height auto and body center. I'll do: body { margin:0; background:#04060d; display:flex; align-items:center; justify-content:center; min-height:100vh; overflow:hidden; } svg { width:100vw; height:100vh; display:block; } with preserveAspectRatio meet. Good.

Now write all the star coordinates. I'll generate manually ~35 stars across sky (y < 540 mostly, some below near horizon fine but avoid ground area y>540 mostly; stars behind ground get covered anyway since ground drawn after).

Stars list (x,y,r): 
(60,80,2) (140,180,1.5) (220,60,2.5) (300,140,1.5) (380,90,2) (450,200,1.5) (520,60,2) (590,150,1.5) (660,80,2.5) (740,180,1.5) (820,100,2) (900,60,1.5) (960,200,2) (1030,90,1.5) (1200,80,2) (1240,220,1.5) (1160,300,2) (1050,330,1.5) (90,300,2) (180,380,1.5) (280,300,2) (360,380,1.5) (460,320,2) (540,260,1.5) (700,300,1.5) (780,260,2) (860,340,1.5) (60,480,1.5) (240,470,2) (400,440,1.5) (1180,440,2) (1120,180,2.5) (30,180,1.5) (620,240,1.2) (840,220,1.2)
Plus sparkles at (350,120), (980,140), (150,260), (1120,380).

Vary animation-delay via style attr: style="animation-delay:-1.2s" etc. I'll add delays to some.

Earth details: at translate(1095,150):
- glow: circle r=88 fill url(#glowGrad) (radial rgba(110,170,255,.35) to transparent)
- ocean circle r=62 fill #2f6fd0
- land: path blobs fill #43b06a: e.g., M-30,-25 Q-10,-40 12,-30 Q28,-22 18,-5 Q0,2 -18,-8 Q-34,-14 -30,-25 Z ; another M10,15 Q30,8 40,22 Q44,38 26,42 Q8,40 6,28 Q4,20 10,15 Z ; small one M-45,20 Q-35,14 -28,22 Q-24,32 -36,34 Q-46,30 -45,20 Z
- clouds: ellipses white opacity .85: (-15,5) rx18 ry6; (20,-18) rx14 ry5; (-38,-8) rx10 ry4; (8,34) rx12 ry4
- shading: circle r=62 fill url(#earthShade) radial dark on lower-right: radialGradient with offset. Use linearGradient from transparent to rgba(0,10,40,.45).
- atmosphere stroke: circle r=62 fill none stroke rgba(140,190,255,.6) width 3.

Moon gradient: linearGradient moonGrad y: #d6d6df → #9a9aa8 → maybe bottom #7d7d8c.

Crater rendering: group per crater: outer ellipse fill #8b8b9a; inner ellipse (offset up-left) fill #a7a7b6? Typical crater: rim highlight on top, dark bottom. Do: ellipse fill #83838f (deeper), then ellipse same size slightly smaller offset (-3,-3) fill #b9b9c6? Hmm. Simpler: crater = ellipse fill #7f7f8c stroke #a9a9b8 stroke-width 3 (rim), plus inner shadow ellipse offset down fill rgba(0,0,0,.25) clipped? Without clip it's fine: draw dark ellipse rx*0.8 ry*0.6 at cy+2 fill rgba(40,40,55,.35), then rim arc highlight: path arc stroke #d9d9e2.

I'll craft 4 craters:
1. (210, 690): rx95 ry28. 
2. (1060, 730): rx130 ry34.
3. (880, 630): rx55 ry16.
4. (430, 750): rx75 ry22.
5. small (620, 720) rx30 ry9, (60, 620) rx40 ry12, (1180, 640) rx45 ry13.
Rocks: small polygons/ellipses gray #9d9dab.

Rider shadow ellipse (610, 688) rx180 ry20 fill #3a3a4a opacity .35? On moon, shadow dark: fill #2e2e3c opacity .45.

Board position: translate(610, 645) rotate(-6). Deck top at y=-22 → world y ≈ 623 (minus rotation effect). Boots bottom at ~620. Let's set boots so they sit on deck: boot rect y from 592 to 622 (h=30) at x positions. In world coords before rider bob. Legs connect hip (y~505) to boots.

Let me define cat group transform="rotate(7 610 560)" to lean forward. Hmm, rotating whole cat around (610,560) by 7° shifts helmet forward-right, looks like leaning into motion. Feet would rotate off board slightly — acceptable since boots drawn within same group... boots would lift. Alternative: keep cat upright, board tilted; add lean by drawing torso slightly rotated only. Simpler: no rotation of whole cat; draw dynamic pose via limbs. Fine.

Also add scarf? A flowing scarf would add motion: red scarf from neck flowing left: path M585,400 C540,390 500,400 460,430 C490,425 520,430 545,420 ... make wavy ribbon fill #ff5d73. Cute! Add behind torso. Yes, flowing scarf adds sense of speed. Path: M600,405 C560,385 510,390 470,415 C500,418 530,430 560,425 L575,415 Z? Let me design: scarf attached at neck (600, 410), flowing to the left with wave: 
path d="M598,408 C560,388 515,392 478,414 C500,420 520,432 548,430 C570,428 590,420 600,416 Z" fill #ff5d73 stroke #d63c55. Plus a second fold line. Good enough.

Order of drawing within rider group: shadow outside. Inside: speed lines? Put speed lines behind everything in scene (not in rider, so they don't bob). Wheels spin.

Draw order in rider group:
1. back arm (left) — behind torso
2. backpack
3. back leg
4. torso
5. scarf (behind torso? scarf at neck flows left, draw before torso? draw after torso but behind head) — draw scarf before torso so torso overlaps its base.
Actually order: backpack, back arm, scarf, legs (back then front), torso, chest panel, front arm, neck ring, helmet glass back? Helmet should be drawn over head: draw head+face first, then glass dome over it (semi-transparent), then helmet rim/highlight. So: ... torso, then cat head group (ears, head, face), then helmet glass circle over, then neck ring under helmet? Neck ring at bottom of helmet over torso top: ellipse at (612, 388) rx 50 ry 14 — draw after torso, before/after head fine (head overlaps top of ring).

Boots on board: draw board first within rider? The rider group includes board; draw board first, then legs/boots over it, then cat. Yes: rider group: board (deck, trucks, wheels), dust, back leg+boot, front leg+boot, backpack, scarf, back arm, torso, panel, belt, front arm, head, helmet glass, highlights, neck ring.

Wait wheels should be behind board? Wheels below trucks; draw wheels first then deck over top of wheels slightly — typical: draw wheels, trucks, then deck. Deck at y -22..8, wheels at cy 26 r16 → top of wheel at 10, just below deck bottom 8. Fine: draw wheels, trucks (y 8..18), deck.

Legs strokes width 32 color suit with stroke outline? Use path stroke #f4f6fb width 32, plus same path stroke #b9c0d4 width 34 underneath? Trick: draw wider darker path first then narrower lighter on top → outline effect. I'll do that for limbs: outline path stroke #aab2c8 width 36, inner stroke #f4f6fb width 28.

Boots: rect fill #e8ebf4 stroke #aab2c8 width 3, sole rect fill #8f97ab height 8 at bottom.

Gloves: circle fill #f4f6fb stroke #aab2c8 width 3 r 16, cuff circle r 10 fill #c3c9d9 at wrist.

Chest panel details: rect + 3 buttons (red #ff6b6b, yellow #ffd166, green #6bd48a) r4 at y 442; two small lines; a little screen rect fill #9fe8ff.

Helmet: circle cx612 cy312 r86: fill url(#glassGrad) (radial: rgba(190,225,255,.45) center-top to rgba(120,170,230,.15)), stroke #f2f7ff width 7, inner stroke circle r 78 stroke rgba(255,255,255,.35) width 2. Highlight arc: path M556,278 A72,72 0 0 1 648,238 stroke #fff width 9 opacity .8 linecap round fill none. Small circle shine (580,250) r6 white .9.

Cat head: ears first: left ear polygon points "566,272 578,224 604,260" fill fur stroke #d97f35 3 linejoin round; inner "574,262 580,238 594,256" fill #f7b8c4. Right ear mirrored: "658,272 646,224 620,260", inner "650,262 644,238 630,256". Head circle cx612 cy320 r58 fill #f6a55c stroke #d97f35 3. Stripes: paths on top of head: M596,268 Q600,278 596,286? Actually forehead stripes vertical small arcs: M600,266 Q604,276 600,284; M612,264 Q616,274 612,282; M624,266 Q628,276 624,284 stroke #e0823a width 4 fill none linecap round. Muzzle ellipse cx612 cy344 rx28 ry18 fill #fff1e0. Eyes: circles (590,314) r7.5 fill #402d1c; highlight (592.5,311.5) r2.6 white; right (634,314) r7.5, highlight (636.5,311.5). Eyelash? skip. Nose path M605,334 Q612,329 619,334 Q617,342 612,343 Q607,342 605,334 fill #ef7d95. Mouth: M612,343 Q611,350 604,351 M612,343 Q613,350 620,351 stroke #b06a3a width 2.5 fill none linecap round. Whiskers stroke #ffffff opacity .85 width 2: M584,340 L556,333; M584,348 L558,351; M640,340 L668,333; M640,348 L666,351. Blush ellipses (576,332) rx7 ry4 fill #ff9db1 opacity .5; (648,332).

Chin/tuft: small white fur tuft under muzzle? skip.

Neck ring: ellipse cx612 cy392 rx52 ry15 fill #c3c9d9 stroke #9aa3b8 3. Draw before head? Head bottom at cy320+58=378, ring at 392 below head — draw ring after torso, head overlaps ring top. Order fine.

Backpack: rect x=494 y=402 w=66 h=110 rx=16 fill #cdd3e0 stroke #9aa3b8 3; top rounded; details: rect x=506 y=418 w=42 h=30 rx=6 fill #b7bed0; two circles buttons (514,462) r5 #ff6b6b, (534,462) r5 #6bd48a; lines. Antenna: line x1=527 y1=402 x2=527 y2=372 stroke #9aa3b8 width 4; circle (527,366) r7 fill #ff6b6b stroke #d63c55 2. Tube: path M560,410 C575,395 585,390 596,388 stroke #9aa3b8 width 6 fill none.

Torso: rect x=552 y=390 w=118 h=128 rx=36 fill #f4f6fb stroke #aab2c8 3. Add shading path on right side: path fill #dde2ee opacity .8: M640,395 ... maybe skip, use subtle: rect inner. Add suit seams: line M552,450 H670? light stroke #d5dae6.

Belt: rect x=556 y=496 w=110 h=16 rx=8 fill #c3c9d9 stroke #9aa3b8 2. Buckle rect x=600 y=498 w=22 h=12 rx=3 fill #ffd166 stroke #c98f1b.

Arms: 
Back arm: outline path M562,428 C528,444 502,464 488,490 stroke #aab2c8 width 34 linecap round fill none; inner same stroke #f4f6fb width 26. Glove: circle (484,496) r17 fill #f4f6fb stroke #aab2c8 3; cuff circle (496,482) r9 fill #c3c9d9.
Front arm: M656,424 C696,410 728,396 756,380 outline/inner; glove circle (762,376) r17; cuff (748,386) r9.

Legs:
Back leg: M582,505 C570,540 564,570 562,596 → boot at (562,596). Outline width 38 #aab2c8, inner 30 #f4f6fb.
Front leg: M636,505 C668,528 690,556 700,592. 
Boots: back boot: g transform translate(562,598) rotate(-4): rect x=-30 y=-6 w=58 h=28 rx=10 fill #e8ebf4 stroke #aab2c8 3; sole rect x=-30 y=14 w=58 h=8 rx=4 fill #8f97ab. Front boot translate(700,594) rotate(6): similar w=60.

Boot bottoms at y≈620; deck top world y: board group translate(610,645) rotate(-6): deck top edge local y=-22 → world approx y=623 near center; at x=562 (local x=-48): rotation -6°: y offset = -22 - (-48)*sin(-6°)? Point (local) (-48,-22) rotated -6°: x' = x cosθ - y sinθ with θ=-6°: cos=.9945, sin=-.1045. x' = -48*.9945 - (-22)(-.1045) = -47.7 - 2.3 = -50 → world x 560. y' = x sinθ + y cosθ = (-48)(-.1045) + (-22)(.9945) = 5.0 - 21.9 = -16.9 → world y = 645-16.9 = 628. Boot bottom at 620 — floats 8px above deck. Adjust: move board up: translate(610, 638) → deck top near center y≈616 at center; at boot x≈560, y≈621. Boot bottom 620-622 ok close. Set board translate(610,638). Wheels at local y=26 → world ~664 center. Ground at x=610: y = 560 - 120*t(1-t), t=610/1280=0.4766, t(1-t)=0.2493 → y=560-29.9=530?? Wait that's the horizon line y≈530 at center. But ground fills below horizon to 800. Board at y 638 is ON the ground surface visually (ground region). Wheels at 664, shadow at ~688. Ground extends to 800, so fine — rider is in foreground on the moon surface plane. Craters placed around y 630-750 to be near rider depth. Good.

Shadow ellipse cx610 cy690 rx185 ry20.

Speed lines: at left of rider: paths M300,420 H430; M260,470 H420; M310,520 H440 with class speed, stroke #9fb4ff width 7 linecap round opacity .6, dasharray. In world coords, left of cat (cat spans x 460-780). Lines from x 240-440 fine, above ground? y 420-520 is sky region (horizon ~530-560). Hmm speed lines in sky behind cat look fine. Also dust at back wheel: circles at (520,660) etc with class puff animation (scale/opacity). Add 3 small circles.

Flag: at (950, ...) ground y≈537. Pole from (950,545) to (950,425), flag wave path M950,428 C975,420 995,436 1022,426 L1022,458 C995,468 975,452 950,460 Z fill #ff5d73 stroke #d63c55 2. Paw print on flag: white: circle (986,443) r5 + three toes r2.5 at (979,437),(986,434),(993,437). Pole cap circle (950,422) r5 fill #ffd166.

Also add small sign? enough.

Shooting star: g class="shoot": line x1=0 y1=0 x2=90 y2=36 stroke url(#shootGrad) width 4 linecap round, positioned via transform translate(180,90) in attribute? CSS animation transform overrides attribute transform... CSS transform replaces attribute. So wrap: outer g transform="translate(180,80)", inner g class="shoot" with line, CSS animates inner translate from 0 to (380,150). Keyframes: 0%{transform:translate(0,0);opacity:0} 4%{opacity:1} 20%{transform:translate(380px,150px);opacity:0} 100%{...opacity 0}. duration 7s, delay 2s.

Star sparkle shape: path "M0,-9 L2.2,-2.2 L9,0 L2.2,2.2 L0,9 L-2.2,2.2 L-9,0 L-2.2,-2.2 Z" fill #fff, with twinkle animation, wrapped in g translate.

Gradients defs:
- skyGrad: linear x1=0 y1=0 x2=0 y2=1: #050816 → #0d1330 → #1a2350? stops: 0 #030612, .55 #0b1030, 1 #141c42.
- moonGrad: linear y: 0 #d8d8e2, .5 #a8a8b8, 1 #83839a? bottom darker: 1 #787889.
- glassGrad: radial cx .35 cy .3 r .9: rgba(200,230,255,.5) → rgba(140,180,235,.18).
- deckGrad: linear x: #22d3ee → #818cf8 → #c084fc? A cosmic gradient deck: stops #34e0c8, #5aa2ff, #b06bff. Stroke #1e2440 width 3.
- glowGrad radial for earth glow.
- earthShade linear.
- shootGrad linear white→transparent.

Text on deck: <text x="0" y="2" text-anchor="middle" font-family="Verdana, sans-serif" font-size="13" font-weight="bold" fill="#ffffff" letter-spacing="3" transform="rotate(-6?)">MEOW</text> inside board group at deck center (0,-8)? Deck spans y -22..8, center -7. Put text y=-5, fill #0e1430? On bright deck, dark text reads better: fill #131a3a opacity .85. Deck gradient bright → dark text good. Add small paw prints? Text "MEOW ✦"? Keep "MEOW".

Wheel: circle r16 fill #ffd166 stroke #b97f16 3; spokes: g.wheel: lines through center: path M-11,0 H11 M0,-11 V11 stroke #b97f16 width 3; hub circle r5 fill #b97f16. Wheel positions local (-88,26) and (88,26). Truck rects: x -100..-76 (w24 h10 y8) fill #7c8698; and 76..100.

Kicked deck shape path: M-168,-2 C-172,-16 -158,-24 -140,-24 L140,-24 C158,-24 172,-16 168,-2 L158,10 L-158,10 Z. Wheels at y 26: wheel top = 10, deck bottom edge 10 — touching. Trucks y 10..20 between deck and wheels: rect x=-100 y=8 w=22 h=12; x=78 y=8 w=22 h=12.

Deck text at (0,-6) font-size 14.

Board rotate(-6) around its origin (0,0) which is deck center — good.

Now bob animation on #rider: translateY -10px. Shadow separate with pulse. Also maybe rotate rider slightly: keyframes bob { 50% { transform: translateY(-12px) rotate(-1.5deg) } } with transform-origin 610px 640px? CSS transform-origin on SVG: use transform-box: view-box? Simpler just translateY.

Dust puffs: circles class puff at (505,668) r8, (480,676) r6, (530,678) r5 fill #cfd0da opacity .7, animation puff 1.2s infinite: from opacity .8 scale .6 to opacity 0 scale 1.4. transform-box fill-box origin center. Different delays.

Also add a couple of tiny stars reflected? no.

Compose final HTML. Also include <title>. Body bg #030612 to match sky top.

Let me also double-check no external resources, no JS needed really — CSS animations only. No script needed. That's fine ("JavaScript in <script>" only if used). I'll skip JS entirely — pure SVG+CSS. That's allowed.

Accessibility: role="img" aria-label.

Write star elements concisely. I'll write them out.

Let me now write final code.

Crater drawing function manually:

Crater 1 at (210,690) rx95 ry28:
<g>
 <ellipse cx="210" cy="690" rx="95" ry="28" fill="#8e8e9e"/>
 <ellipse cx="210" cy="686" rx="88" ry="24" fill="#b3b3c2"/>  (raised inner? actually crater bowl: inner darker)
Better: outer ellipse rim color lighter #c2c2cf, inner ellipse (slightly up) darker #84849a? Real crater look: rim highlight top, shadow inside bottom. Do:
 <ellipse cx=210 cy=690 rx=95 ry=28 fill="#7e7e8e"/>  (bowl)
 <path d="M115,690 A95,28 0 0 1 305,690" fill="none" stroke="#cfcfdb" stroke-width="5"/> (top rim highlight) — arc from left to right over the top: A rx ry 0 0 1 draws... from (115,690) to (305,690) with sweep 1 goes over top? sweep-flag 1 = clockwise; from left point to right point clockwise passes through bottom (in SVG y-down, clockwise from left goes up? Let's think: in screen coords y down, moving clockwise visually means... from (115,690) to (305,690), clockwise arc goes through top (y smaller)? In SVG, sweep=1 means positive angle direction which is clockwise in y-down coords: from left point, clockwise goes down first? Ugh. Use sweep 0 to go over top: from (115,690) to (305,690) with sweep 0 → counterclockwise → passes through top (y<690)? In y-down coordinate, counterclockwise visually is... Let me just use ellipse with clip or simply draw a thin ellipse arc via path with large-arc 0 sweep 1 and test mentally: Standard moon crater examples use: path d="M x1 y A rx ry 0 0 1 x2 y" for bottom rim? I'll avoid ambiguity: draw rim as full ellipse stroke with dasharray to show only top? Simpler: draw two ellipses: bowl dark ellipse, then smaller ellipse offset up by 4 fill lighter (#a9a9b8), then a small shadow ellipse at bottom inside offset down fill dark rgba. Layered:
 <ellipse cx cy rx ry fill="#84849a"/>            base bowl (mid)
 <ellipse cx cy-4 rx*0.92 ry*0.8 fill="#b9b9c8"/>  inner floor lighter, offset up → looks like rim thickness at bottom? Hmm.
 
Simplest convincing: 
 - ellipse fill #77778a (dark bowl)
 - ellipse same cx cy rx ry fill none stroke #c9c9d6 width 4 opacity .8 (rim) — full ring fine.
 - path arc bottom inner shadow: ellipse cx cy+3 rx*0.85 ry*0.7 fill rgba(30,30,45,.35)
That reads as crater. Good enough at this scale.

Craters:
1. (210,692) rx95 ry27
2. (1060,732) rx130 ry33
3. (880,632) rx52 ry15
4. (430,752) rx72 ry21
5. (625,725) rx28 ry9
6. (70,628) rx38 ry11
7. (1185,648) rx44 ry13

Rocks: ellipse (330,640) rx10 ry6 #9a9aa8; (760,700) rx12 ry7; (990,600) rx8 ry5; polygon rock (150,600)...

Horizon highlight: path M0,560 Q640,500 1280,560 stroke #e6e6f2 width 3 fill none opacity .5.

Also distant mountains? small bumps on horizon: path with little triangles fill #b9b9c8 along horizon? Could add subtle: M0,560 Q640,500 1280,560 then a few small arcs. Skip, craters enough. Maybe add distant hill: path M700,540 Q800,505 900,538 ... fill #b5b5c4 behind ground? The ground path covers below horizon; add hills as separate shapes above horizon line slightly: e.g., path M650,545 Q760,495 880,542 L880,560 L650,560 Z fill #b0b0c0 opacity .8 — drawn after ground? Ground path top edge is the curve; hills would poke above it. Draw hills before ground? They'd be hidden. Draw after ground but they sit on top edge — fine, they are on the surface. Eh, adds depth. Add two: near x 700-900 and x 80-260. Fill slightly darker than sky, lighter than ground: #a3a3b5.

Hmm but horizon highlight stroke then crosses them. Draw hills before the horizon stroke. Order: sky, stars, earth, shoot, hills, ground, horizon line, craters, rocks, flag, shadow, speed lines, rider.

Speed lines should be behind rider but in sky: draw before rider. y 420-520 is above horizon (~530+), ok.

Rider details recap coordinates — cat head center (612,320), helmet (612,312) r86 → helmet top 226, bottom 398. Torso 390-518. Legs 505-620. Board 638±. Total rider height ~226-680. Nice size (~450px tall) in 800 canvas. Good.

Whisker lines white on glass? They're on cat face inside helmet — fine.

Front arm reaches to (756,380) — outside helmet (helmet right edge x=698). Arm passes in front of helmet edge — draw arm after helmet? Arm shoulder at (656,424) below helmet, path goes up-right to (756,380); helmet circle at (612,312) r86: point (700,390) distance from center: (88,78) → 117 > 86 outside. So arm mostly outside helmet; near start (670,415): dist (58,103)=118>86. OK no overlap. Draw front arm after torso, before head is fine.

Glove at (762,376) r17.

Also maybe give cat a little tail? Spacesuit covers; skip.

CSS: 

<style>
  .star{animation:twinkle 3.2s ease-in-out infinite}
  @keyframes twinkle{0%,100%{opacity:.15}50%{opacity:1}}
  .spark{animation:twinkle 2.4s ease-in-out infinite; transform-box:fill-box; transform-origin:center}
  ... sparkles also scale pulse: add scale in keyframes? separate keyframes sparkle {0%,100%{opacity:.3; transform:scale(.7)} 50%{opacity:1; transform:scale(1.15)}}
  #rider{animation:bob 2.8s ease-in-out infinite}
  @keyframes bob{0%,100%{transform:translateY(0)}50%{transform:translateY(-12px)}}
  #shadow{animation:shpulse 2.8s ease-in-out infinite; transform-box:fill-box; transform-origin:center}
  @keyframes shpulse{0%,100%{transform:scale(1);opacity:.4}50%{transform:scale(.9);opacity:.28}}
  .wheel{animation:spin .7s linear infinite; transform-box:fill-box; transform-origin:center}
  @keyframes spin{to{transform:rotate(360deg)}}
  .speed{stroke-dasharray:26 20; animation:dash .6s linear infinite}
  @keyframes dash{to{stroke-dashoffset:-46}}
  .puff{animation:puff 1.1s ease-out infinite; transform-box:fill-box; transform-origin:center}
  @keyframes puff{0%{transform:scale(.4);opacity:.8}100%{transform:scale(1.6);opacity:0}}
  #earth{animation:floaty 9s ease-in-out infinite}
  @keyframes floaty{0%,100%{transform:translate(1095px,150px)}50%{transform:translate(1095px,142px)}}
  
Careful: #earth has attribute transform translate(1095,150); CSS animation overrides it, so include translation in keyframes as above. Or wrap: outer g transform attr, inner g#earth animated translateY only. Safer: wrapper approach. I'll do wrapper <g transform="translate(1095,150)"><g class="floaty">...</g></g> with .floaty{animation:floaty...} keyframes translateY(0)/translateY(-8px). CSS transform on inner g without attribute transform — fine.

Same for shoot: wrapper translate, inner animated.

  .shoot{animation:shoot 7s linear infinite; animation-delay:1.5s; opacity:0}
  @keyframes shoot{0%{transform:translate(0,0);opacity:0}3%{opacity:1}18%{transform:translate(360px,140px);opacity:0}100%{transform:translate(360px,140px);opacity:0}}

prefers-reduced-motion: add media query to disable animations — nice touch:
@media (prefers-reduced-motion: reduce){ *{animation:none !important} }

Now stars markup — write each circle with class star and some with style="animation-delay:-Xs". I'll include ~30.

Sparkle path define once in defs as <path id="spark" d="M0,-9 L2.2,-2.2 L9,0 L2.2,2.2 L0,9 L-2.2,2.2 L-9,0 L-2.2,-2.2 Z"/> then <use href="#spark" class="spark" transform="translate(350,120)"/> etc. Use xlink? Modern href works in Chrome. Fine.

Note: `use` with class animation transform — the use has attribute transform translate; CSS animation on .spark sets transform scale → overrides attribute transform, breaking position! Because CSS transform property overrides presentation attribute transform. So wrap: <g transform="translate(350,120)"><use href="#spark" class="spark"/></g>. Same issue as earth. Do that for each sparkle.

Similarly .star circles: animation only opacity — no transform conflict. Good.

Wheels: .wheel g inside wheel group at translate(-88,26): <g transform="translate(-88,26)"><g class="wheel">...</g></g>. 

Puffs: circles with cx cy; class puff uses transform scale — transform-box fill-box origin center handles positioning. OK since no attribute transform on them.

#rider bob: translateY only, no attribute transform on rider g. Good.

#shadow: scale via fill-box. Good.

Speed lines: stroke-dashoffset animation only. Good.

Now finalize numbers for deck text: inside board group (rotated), text at x=0 y=-4: but deck top -24 bottom 10; text baseline -4 with font-size 14 → text spans -14..-4, fits. Add slight rotate? It inherits board rotation. Fine. fill "#101736" opacity .9, font-weight bold, letter-spacing 4, font-family "Trebuchet MS, Verdana, sans-serif".

Also small paw print on deck ends? skip.

Helmet back rim: circle r86 stroke — plus neck ring ellipse.

One more cute detail: cat tail poking from suit back? Add small curved tail behind torso left: path M556,480 C530,490 515,505 512,522 stroke #f6a55c width 14 linecap round + outline? With suit... a cat tail through suit hole is cute but complex; skip.

Scarf: draw behind torso: path d="M600,412 C562,390 516,394 480,418 C505,424 524,438 552,434 C574,430 592,422 602,418 Z" fill #ff5d73 stroke #d63c55 stroke-width 3 linejoin round. Add fold line path M520,408 C540,414 560,420 580,418 stroke #d63c55 width 2 fill none opacity .7.

Wait scarf at neck flows left (behind, since moving right). Good.

Backpack behind torso at x 494-560; torso starts 552 — overlap 8px, good (backpack peeks left).

Antenna on backpack top at (527,402) up to (527,372), ball (527,366).

Tube from backpack to helmet: path M556,414 C570,400 582,394 594,391 stroke #9aa3b8 width 6 fill none linecap round.

Torso rect x552 y390 w118 h128 → right edge 670. Front arm shoulder (656,424) inside torso. Good.

Chest panel x584 y428 w58 h46 rx8 fill #e2e7f2 stroke #aab2c8 2. Screen rect x592 y436 w42 h16 rx3 fill #8fd8f0? #7fd4f2 with shine line. Buttons circles (596,462) r4 #ff6b6b, (610,462) r4 #ffd166, (624,462) r4 #6bd48a. Wait panel h46 → 428..474; buttons at y 462 inside. Screen 436..452. OK.

Belt y 496 h16.

Legs attach at hip y~505 under belt. Good.

Boots: back boot center (562,600): rect x=-32 y=-8 w=60 h=28 rx=10 → spans y 592..620, sole y 612..620: rect x=-32 y=12 w=60 h=8 rx=4 fill #8f97ab. Leg path ends at (562,596) inside boot. Front boot center (700,596): rect x=-34 y=-8 w=62 h=28 → 588..616... let me align both bottoms ~620: front boot translate(700,598): rect y=-8 h=28 → 590..618, sole y=12..20 → 610..618. Slight difference fine given board tilt.

Actually board rotated -6°: at local x=-48 (world 560), deck top y≈621 (computed 628 earlier with translate 645; with 638 → 621). Boot bottom 620 ≈ on deck. At local x=+90 (world 700): y' = 90*(-.1045) + (-22)(.9945) = -9.4 -21.9 = -31.3 → world y = 638-31.3 = 606.7. Front boot bottom at 618 → 11px below deck top → boot sinks into deck. Adjust front boot up: translate(700,588): bottom 608. Still 1px below 607. translate(700,586) → bottom 606. Good. Back boot at world x 560 deck top 621, bottom 620 good.

But visually legs: front leg path ends (700,592) — boot center (700,586) covers. ok. Adjust front leg path end to (700,588).

Hmm wait recompute back boot: translate(562,600), rect y -8..20 → world 592..620; deck top at that x ≈621. Good.

Also knee/hip: back leg M582,505 C570,540 564,568 562,592. Front leg M636,505 C664,530 688,558 700,588.

Wheel world positions: local (-88,26) → rotate -6: x'=-88*.9945 - 26*(-.1045) = -87.5+2.7=-84.8 → 525; y' = -88*(-.1045)+26*.9945 = 9.2+25.9=35.1 → 673. Front wheel local (88,26): x'=87.5+2.7=90.2→700; y'=-9.2+25.9=16.7→655. Wheels at (525,673) r16 → bottom 689; (700,655) bottom 671. Ground plane there — shadow at 690. Fine, board tilted with back wheel lower. Matches rotate -6 (front up). Good.

Puffs near back wheel (525,673): circles at (495,680) r7, (470,688) r5, (515,692) r4.

Shadow ellipse cx 612 cy 692 rx 180 ry 18.

Speed lines: M250,430 H400; M215,478 H390; M255,526 H410 — but y 526 near horizon at x~300: horizon y at x=300: t=0.234, y=560-120*.234*.766=560-21.5=538. So 526 slightly above horizon, ok in sky. stroke #a8bcff opacity .55 width 7 linecap round class speed. Maybe 4 lines: add M280,392 H380 shorter.

Everything set. Earth at (1095,150) r62 — top-right. Flag at 950 — no overlap.

Also add subtle big glow behind rider? no.

Text label maybe "LUNAR SKATE PARK"? skip.

Now write the full HTML. Also include <meta viewport>. Title "Astronaut Cat on the Moon".

Star delays: assign inline styles randomly.

Let me write it:

```html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Astronaut Cat Skateboarding on the Moon</title>
<style>
  html,body{margin:0;padding:0;background:#030612;overflow:hidden}
  body{display:flex;align-items:center;justify-content:center;min-height:100vh}
  svg{display:block;width:100vw;height:100vh}
  .star{animation:twinkle 3.2s ease-in-out infinite}
  @keyframes twinkle{0%,100%{opacity:.15}50%{opacity:1}}
  .spark{animation:sparkle 2.6s ease-in-out infinite;transform-box:fill-box;transform-origin:center}
  @keyframes sparkle{0%,100%{opacity:.25;transform:scale(.65) rotate(0deg)}50%{opacity:1;transform:scale(1.15) rotate(20deg)}}
  #rider{animation:bob 2.8s ease-in-out infinite}
  @keyframes bob{0%,100%{transform:translateY(0)}50%{transform:translateY(-12px)}}
  #shadow{animation:shpulse 2.8s ease-in-out infinite;transform-box:fill-box;transform-origin:center}
  @keyframes shpulse{0%,100%{transform:scale(1);opacity:.42}50%{transform:scale(.88);opacity:.28}}
  .wheel{animation:spin .7s linear infinite;transform-box:fill-box;transform-origin:center}
  @keyframes spin{to{transform:rotate(360deg)}}
  .speed{stroke-dasharray:26 20;animation:dash .55s linear infinite}
  @keyframes dash{to{stroke-dashoffset:-46}}
  .puff{animation:puff 1.15s ease-out infinite;transform-box:fill-box;transform-origin:center;opacity:0}
  @keyframes puff{0%{transform:scale(.4);opacity:.75}100%{transform:scale(1.7);opacity:0}}
  .floaty{animation:floaty 9s ease-in-out infinite}
  @keyframes floaty{0%,100%{transform:translateY(0)}50%{transform:translateY(-9px)}}
  .shoot{animation:shoot 7s linear infinite;animation-delay:1.6s;opacity:0}
  @keyframes shoot{0%{transform:translate(0,0);opacity:0}3%{opacity:1}17%{transform:translate(360px,140px);opacity:0}100%{transform:translate(360px,140px);opacity:0}}
  @media (prefers-reduced-motion:reduce){*{animation:none!important}}
</style>
</head>
<body>
<svg viewBox="0 0 1280 800" preserveAspectRatio="xMidYMid meet" role="img" aria-label="An astronaut cat skateboarding on the moon under a starry sky">
<defs>
  <linearGradient id="sky" x1="0" y1="0" x2="0" y2="1">
    <stop offset="0" stop-color="#02040f"/>
    <stop offset=".55" stop-color="#0a1030"/>
    <stop offset="1" stop-color="#151d45"/>
  </linearGradient>
  <linearGradient id="moon" x1="0" y1="0" x2="0" y2="1">
    <stop offset="0" stop-color="#d9d9e3"/>
    <stop offset=".5" stop-color="#a9a9ba"/>
    <stop offset="1" stop-color="#7b7b8d"/>
  </linearGradient>
  <radialGradient id="glass" cx=".35" cy=".28" r=".95">
    <stop offset="0" stop-color="#cfe6ff" stop-opacity=".55"/>
    <stop offset=".6" stop-color="#9cc4f5" stop-opacity=".22"/>
    <stop offset="1" stop-color="#6f9fe0" stop-opacity=".12"/>
  </radialGradient>
  <linearGradient id="deck" x1="0" y1="0" x2="1" y2="0">
    <stop offset="0" stop-color="#34e0c8"/>
    <stop offset=".5" stop-color="#5aa2ff"/>
    <stop offset="1" stop-color="#b06bff"/>
  </linearGradient>
  <radialGradient id="glow" cx=".5" cy=".5" r=".5">
    <stop offset="0" stop-color="#7db4ff" stop-opacity=".4"/>
    <stop offset="1" stop-color="#7db4ff" stop-opacity="0"/>
  </radialGradient>
  <linearGradient id="earthShade" x1="0" y1="0" x2="1" y2="1">
    <stop offset="0" stop-color="#00103a" stop-opacity="0"/>
    <stop offset="1" stop-color="#00103a" stop-opacity=".5"/>
  </linearGradient>
  <linearGradient id="shootGrad" x1="0" y1="0" x2="1" y2="0">
    <stop offset="0" stop-color="#ffffff" stop-opacity="0"/>
    <stop offset="1" stop-color="#ffffff" stop-opacity=".9"/>
  </linearGradient>
  <path id="spark" d="M0,-9 L2.2,-2.2 L9,0 L2.2,2.2 L0,9 L-2.2,2.2 L-9,0 L-2.2,-2.2 Z"/>
</defs>

<!-- sky -->
<rect width="1280" height="800" fill="url(#sky)"/>

<!-- stars -->
<g fill="#ffffff">
  <circle class="star" cx="60" cy="80" r="2"/>
  ... etc
</g>
...
```

Write all stars. Then sparkles uses. Earth. Shooting star. Hills, ground, horizon, craters, rocks, flag, shadow, speed lines, rider.

Rider group:

<g id="rider">
  <!-- skateboard -->
  <g transform="translate(610,638) rotate(-6)">
    wheels: <g transform="translate(-88,26)"><circle r="16" fill="#ffd166" stroke="#b97f16" stroke-width="3"/><g class="wheel"><path d="M-11,0 H11 M0,-11 V11" stroke="#b97f16" stroke-width="3"/><circle r="5" fill="#b97f16"/></g></g>
    same at (88,26)
    trucks: <rect x="-101" y="8" width="22" height="12" rx="3" fill="#7c8698"/><rect x="79" y="8" width="22" height="12" rx="3" fill="#7c8698"/>
    deck: <path d="M-168,-2 C-172,-16 -158,-24 -140,-24 L140,-24 C158,-24 172,-16 168,-2 L158,10 L-158,10 Z" fill="url(#deck)" stroke="#1e2440" stroke-width="3" stroke-linejoin="round"/>
    <text x="0" y="-4" text-anchor="middle" font-family="'Trebuchet MS',Verdana,sans-serif" font-size="14" font-weight="bold" letter-spacing="4" fill="#101736" opacity=".9">MEOW</text>
  </g>
  dust puffs (world coords)
  legs, boots
  backpack + antenna + tube
  scarf
  back arm + glove
  torso, panel, belt
  front arm + glove
  neck ring
  cat head (ears, head, stripes, eyes, muzzle, nose, mouth, whiskers, blush)
  helmet glass circle + inner stroke + highlight arc + shine
</g>

Wait: helmet glass drawn over head gives glass effect — good. But helmet stroke rim should be on top too — same circle with stroke. Draw one circle with fill url(#glass) stroke #f2f7ff width 7. Then highlight arc.

Neck ring: draw after torso before head: ellipse (612,392) rx52 ry15 fill #c3c9d9 stroke #9aa3b8 3.

Head bottom 378 overlaps ring top — head drawn after ring covers ring center. Good.

Order within rider: board, puffs, back leg, back boot, front leg, front boot, backpack(+antenna), tube, scarf, back arm, glove, torso, panel, belt, front arm, front glove, neck ring, ears, head, face, helmet glass, highlights.

Hmm scarf behind torso: draw scarf before torso. Back arm behind torso: before torso. Backpack before torso. Legs before torso (hips under torso). Order: board → puffs → legs+boots → backpack/antenna/tube → scarf → back arm+glove → torso+panel+belt → front arm+glove → neck ring → head group → helmet.

Front arm shoulder should appear from torso — drawing after torso is right.

Tube from backpack to helmet: draw after backpack, before torso (goes behind torso? tube goes to helmet side). Draw tube after torso so visible: path M556,414 C572,398 584,392 596,389 — ends near helmet bottom-left (helmet bottom 398 at x612; at x596 y~395 on circle? point (596,391): dist from (612,312): (16,79)=80.6 <86 inside helmet. So tube should end at helmet edge — end at (600,384): dist (12,72)=73 inside still. Circle r86: edge at angle... point on circle toward backpack: direction from center to (540,400): (-72,88) len 113.7; edge point = center + 86*(-72,88)/113.7 = (612-54.5, 312+67) = (557.5, 379). So tube path M556,414 C570,400 560,390 558,380 — ends at (558,380) on helmet rim. Good, draw tube after helmet? It connects backpack to helmet — draw after torso but before helmet so helmet rim covers end. Path: M552,416 C566,404 562,392 558,382 stroke #9aa3b8 width 6 fill none linecap round.

Antenna: line (527,402)-(527,374) stroke #9aa3b8 width 4; circle (527,368) r7 fill #ff6b6b stroke #d63c55 2.

Backpack rect x494 y402 w66 h110 rx16 fill #cdd3e0 stroke #9aa3b8 3. Panel rect x505 y416 w44 h32 rx6 fill #b7bed0 stroke #9aa3b8 2. Buttons (513,462) r5 #ff6b6b; (533,462) r5 #6bd48a. Lines: M505,482 H549 stroke #9aa3b8 3.

Back arm: outline path M562,428 C530,442 504,462 490,488 stroke #aab2c8 sw 34; inner same #f4f6fb sw 26. Cuff circle (496,480) r9.5 fill #c3c9d9 stroke #9aa3b8 2; glove circle (486,494) r17 fill #f4f6fb stroke #aab2c8 3.

Front arm: M654,424 C694,410 726,396 754,380 outline/inner; cuff (744,386) r9.5; glove (760,376) r17.

Torso: rect x552 y390 w118 h128 rx36 fill #f4f6fb stroke #aab2c8 3. Seam: path M560,452 H664 stroke #d5dae6 3? subtle. Add.

Panel: rect x584 y428 w58 h46 rx8 fill #e2e7f2 stroke #aab2c8 2; screen rect x592 y435 w42 h17 rx3 fill #7fd4f2 stroke #aab2c8 1.5; screen shine line M596,449 L610,437 stroke #fff 2 opacity .8; buttons (596,464) r4 #ff6b6b, (611,464) r4 #ffd166, (626,464) r4 #6bd48a.

Belt: rect x556 y494 w110 h16 rx8 fill #c3c9d9 stroke #9aa3b8 2; buckle rect x600 y496 w24 h12 rx3 fill #ffd166 stroke #c98f1b 2.

Legs:
back: outline M582,506 C570,540 564,568 562,592 sw38 #aab2c8; inner sw30 #f4f6fb.
front: M636,506 C664,530 688,558 699,586 sw38/30.
boots: <g transform="translate(562,600) rotate(-4)"><rect x="-32" y="-8" width="60" height="28" rx="10" fill="#e8ebf4" stroke="#aab2c8" stroke-width="3"/><rect x="-32" y="12" width="60" height="8" rx="4" fill="#8f97ab"/></g>
front: <g transform="translate(699,587) rotate(5)"><rect x="-33" y="-8" width="62" height="28" rx="10" .../><rect x="-33" y="12" width="62" height="8" rx="4" fill="#8f97ab"/></g>

Check front boot bottom: translate y 587 + 20 = 607; deck top at world x~699: local x = 699-610=89; y' = 89*(-.1045) + (-22)(.9945) = -9.3-21.9=-31.2 → 638-31.2=606.8. Boot bottom 607 — perfect.
Back boot bottom: 600+20=620 (rotate -4 minor). Deck at local x=-48: computed 621. 

Head group:
ears: <path d="M566,272 L578,222 L606,260 Z" fill="#f6a55c" stroke="#d97f35" stroke-width="3" stroke-linejoin="round"/> inner <path d="M575,260 L580,238 L594,256 Z" fill="#f7b8c4"/>
right: <path d="M658,272 L646,222 L618,260 Z" .../> inner <path d="M649,260 L644,238 L630,256 Z"/>
head circle cx612 cy320 r58 fill #f6a55c stroke #d97f35 3.
stripes: <path d="M599,266 Q604,276 600,285 M612,263 Q617,273 613,283 M625,266 Q630,276 626,285" stroke="#e0823a" stroke-width="4" fill="none" stroke-linecap="round"/>
Wait stripes on forehead between ears — head top at y=262. Stripes from y 266 to 285 — on upper head. ok.
eyes: <circle cx="590" cy="315" r="7.5" fill="#402d1c"/><circle cx="592.5" cy="312.5" r="2.6" fill="#fff"/> <circle cx="634" cy="315" r="7.5" fill="#402d1c"/><circle cx="636.5" cy="312.5" r="2.6" fill="#fff"/>
muzzle: <ellipse cx="612" cy="344" rx="28" ry="18" fill="#fff1e0"/>
nose: <path d="M605,335 Q612,330 619,335 Q617,343 612,344 Q607,343 605,335 Z" fill="#ef7d95"/>
mouth: <path d="M612,344 Q611,351 604,352 M612,344 Q613,351 620,352" stroke="#b06a3a" stroke-width="2.5" fill="none" stroke-linecap="round"/>
whiskers: <g stroke="#ffffff" stroke-width="2" opacity=".85" stroke-linecap="round"><path d="M584,340 L556,333"/><path d="M584,348 L558,352"/><path d="M640,340 L668,333"/><path d="M640,348 L666,352"/></g>
blush: <ellipse cx="576" cy="333" rx="7" ry="4" fill="#ff9db1" opacity=".55"/><ellipse cx="648" cy="333" rx="7" ry="4" fill="#ff9db1" opacity=".55"/>

helmet: <circle cx="612" cy="312" r="86" fill="url(#glass)" stroke="#f2f7ff" stroke-width="7"/>
inner rim: <circle cx="612" cy="312" r="77" fill="none" stroke="#ffffff" stroke-width="2" opacity=".3"/>
highlight: <path d="M556,278 A72,72 0 0 1 646,238" stroke="#fff" stroke-width="9" fill="none" stroke-linecap="round" opacity=".75"/>
shine: <circle cx="580" cy="252" r="6" fill="#fff" opacity=".9"/>

Check arc: from (556,278) to (646,238) r72 sweep 1 — should bulge outward (upper-left). Center of helmet (612,312). Both points roughly on r86 circle? (556,278): dist (56,34)=65.5 — inside. Arc r72 between them sweep 1... may look off but roughly a shine arc inside upper area. Let me pick points on circle r~74: angle 200°: (612+74cos200, 312+74sin200) = (612-69.5, 312-25.3)=(542.5,286.7). angle 290°: (612+25.3, 312-69.5)=(637.3,242.5). Arc from (543,287) to (637,242) with r 74, large-arc 0, sweep 1 (clockwise from 200° to 290° going through 245° i.e., upper area — in y-down, increasing angle goes clockwise visually... ugh). In SVG coords, angle measured from +x axis, positive toward +y (down). Point at 200° is upper-left, 290° is upper-right (since sin290 = -0.94 → y above center). Going from 200° to 290° increasing angle passes 245° (upper). sweep-flag=1 corresponds to increasing angle direction. So sweep 1. Path: M543,287 A74,74 0 0 1 637,242. Good.

Scarf path check: M600,412 C562,390 516,394 480,418 C505,424 524,438 552,434 C574,430 592,422 602,418 Z — a wavy ribbon. Fill #ff5d73 stroke #d63c55 3 linejoin round. Fold line: M516,406 C536,414 560,420 584,418 stroke #d63c55 2 opacity .6 fill none.

Scarf drawn before torso so base hidden behind torso (torso x552.. covers right part). Scarf spans x480-602 — visible left of torso. Good.

Flag: 
<g>
 <line x1="950" y1="548" x2="950" y2="428" stroke="#d7dbe6" stroke-width="6" stroke-linecap="round"/>
 <circle cx="950" cy="424" r="6" fill="#ffd166"/>
 <path d="M950,430 C976,422 998,438 1024,428 L1024,460 C998,470 976,454 950,462 Z" fill="#ff5d73" stroke="#d63c55" stroke-width="2.5" stroke-linejoin="round"/>
 paw: <g fill="#fff"><circle cx="987" cy="445" r="5.5"/><circle cx="979" cy="438" r="2.8"/><circle cx="987" cy="435" r="2.8"/><circle cx="995" cy="438" r="2.8"/></g>
</g>
Ground at x=950 ≈ 537 — pole base 548 slightly below surface line: pole should plant on surface: base y = 540. Set line y1=542. Flag top 428. Fine. Also small shadow ellipse under pole (950,544) rx14 ry4 dark.

Craters group with the layered style. Write each:

<g>
 <ellipse cx="210" cy="692" rx="95" ry="27" fill="#7b7b8c"/>
 <ellipse cx="210" cy="692" rx="95" ry="27" fill="none" stroke="#c6c6d4" stroke-width="4"/>
 <ellipse cx="210" cy="696" rx="80" ry="20" fill="#000000" opacity=".18"/>
</g>
Hmm inner shadow offset down then rim stroke on top. Also add top highlight arc: skip, rim ring suffices plus shadow. Actually ring all around + inner shadow bottom looks decent.

Do similar for others with proportional sizes.

Rocks: <ellipse cx="330" cy="645" rx="11" ry="6" fill="#9a9aaa"/> etc. plus tiny shadows.

Hills: <path d="M640,552 Q770,492 905,548 L905,560 L640,560 Z" fill="#a9a9bb"/> hmm ground curve at x 640-905: horizon y ranges 530-540. Hill top Q control 492 → peak ~521 above horizon — pokes into sky. Draw hills BEFORE ground? Then ground covers below-horizon part; hills above horizon remain visible. But ground path covers y >= curve; hill region above curve visible. So draw hills after sky, before ground. Then ground covers hill bottoms. Then horizon stroke over. Let me place hills: hill1 M600,545 Q740,485 880,542 L880,570 L600,570 Z; hill2 M60,556 Q170,510 290,552 L290,572 L60,572 Z. Fill #9d9db0 opacity .9. These get covered below horizon by ground fill (ground drawn after). Their visible parts are above the curve. 

Wait ground path: M0,560 Q640,500 1280,560 L1280,800 L0,800 Z — covers everything below curve. Hills drawn before → only parts above curve show. Good.

Earth group:
<g transform="translate(1095,150)"><g class="floaty">
 <circle r="92" fill="url(#glow)"/>
 <circle r="62" fill="#2f6fd0"/>
 land paths fill #43b06a:
  <path d="M-32,-24 Q-12,-42 12,-32 Q30,-24 20,-6 Q2,4 -18,-6 Q-36,-14 -32,-24 Z"/>
  <path d="M8,14 Q30,6 42,22 Q46,40 26,44 Q6,42 4,28 Q2,18 8,14 Z"/>
  <path d="M-46,18 Q-36,10 -27,19 Q-23,30 -36,33 Q-47,29 -46,18 Z"/>
 clouds fill #fff opacity .8:
  <ellipse cx="-14" cy="6" rx="18" ry="6"/>
  <ellipse cx="22" cy="-20" rx="14" ry="5"/>
  <ellipse cx="-38" cy="-10" rx="10" ry="4"/>
  <ellipse cx="10" cy="34" rx="12" ry="4"/>
 <circle r="62" fill="url(#earthShade)"/>
 <circle r="62" fill="none" stroke="#8cb8ff" stroke-width="3" opacity=".6"/>
</g></g>

Shooting star: <g transform="translate(200,90)"><g class="shoot"><line x1="0" y1="0" x2="90" y2="35" stroke="url(#shootGrad)" stroke-width="4" stroke-linecap="round"/></g></g> — line direction: head at (90,35) bright (gradient offset 1 = white at x2 end). Animation translates inner g by (360,140). Good.

Speed lines group:
<g stroke="#a8bcff" stroke-width="7" stroke-linecap="round" fill="none" opacity=".55">
 <path class="speed" d="M250,392 H390"/>
 <path class="speed" d="M215,442 H400" style="animation-delay:-.2s"/>
 <path class="speed" d="M250,492 H410" style="animation-delay:-.35s"/>
 <path class="speed" d="M300,540 H430" style="animation-delay:-.1s"/>
</g>
y=540 at x 300-430: horizon ~538-543 there; line at 540 basically on horizon — move to 528? At x=300 horizon 538.5; line y 540 slightly below → over ground, fine actually (dust trail on ground?). Keep 3 sky lines + one at 535: d="M300,535 H430". Eh fine.

Hmm wait, these are behind the rider but rider spans x 480-780; lines end at 430 — good gap.

Puffs: <g fill="#cfd0da"><circle class="puff" cx="498" cy="682" r="7"/><circle class="puff" cx="472" cy="690" r="5" style="animation-delay:-.4s"/><circle class="puff" cx="520" cy="694" r="4" style="animation-delay:-.8s"/></g> — inside rider group so they bob with it; fine (dust follows board). Or outside. Inside ok.

Shadow: <ellipse id="shadow" cx="612" cy="692" rx="180" ry="18" fill="#23233a" opacity=".42"/> drawn before rider (so board over shadow). Place after ground/craters, before speed lines? Shadow under rider: draw right before rider group.

Stars list — final coordinates (avoid earth region x>1000,y<230 and rider area? stars behind everything anyway since drawn first; fine to have anywhere y<560):
(60,80,2)(140,180,1.6)(220,60,2.4)(300,140,1.6)(380,90,2)(450,200,1.5)(520,60,2)(590,150,1.6)(660,80,2.4)(740,180,1.5)(820,100,2)(900,60,1.6)(960,210,2)(1240,90,2)(1200,300,1.6)(1160,380,2)(1050,340,1.5)(90,300,2)(180,390,1.5)(280,300,2)(360,390,1.5)(460,320,2)(540,260,1.5)(700,300,1.5)(780,250,2)(860,350,1.5)(60,480,1.5)(240,470,2)(400,440,1.5)(30,180,1.6)(620,230,1.4)(840,210,1.4)(1120,430,1.6)(960,420,1.4)(720,120,1.6)(500,120,1.4)

Sparkles at (350,120),(980,120),(150,260),(1120,300),(660,180) scale maybe vary via wrapper g transform translate + scale.

Some with animation-delay inline.

OK, also moon ground small pebbles: few tiny circles #8f8fa0.

I think we're ready to write final. Also ensure no horizontal scrollbar: body overflow hidden. SVG width 100vw height 100vh meet.

One concern: CSS `transform-box: fill-box` on .wheel g containing path+circle — fill-box of the g = bbox of spokes (-11..11) — origin center = (0,0) local since spokes symmetric. Good.

.puff circles: fill-box = circle bbox, origin center = circle center. Good.

#shadow ellipse: fill-box origin center. Good.

.spark use element: fill-box of use — bbox of spark path (-9..9). origin center. Good.

#rider: animation translateY only; no transform-box needed (translate doesn't need origin). But default transform-origin for SVG elements is 0 0 of view-box? For translation it doesn't matter. Good.

.floaty translateY only. .shoot translate only. Good.

Font: generic families only. Good.

Double-check text element inside rotated group renders — yes.

Let me also add a soft radial vignette? skip.

Write final answer with exactly one code block. Let me carefully compose, ensuring all tags closed properly.

Also add a faint big circle glow behind moon horizon? skip.

Count craters and write them.

Final check on helmet vs head: helmet r86 at (612,312); head r58 at (612,320) — head fully inside helmet (58+8=66 < 86 minus stroke). Ears: ear tip (578,222): dist from (612,312): (34,90)=96.3 > 86 — ears poke OUTSIDE the helmet! Cat ears sticking through glass — actually cute ("ears poke out"), but physically weird; typically ears inside helmet. Either draw ears inside (smaller/shorter) or let them poke through the glass humorously. Poking through looks intentional-cute? It'd overlap the glass stroke. Let me shorten ears to stay inside: ear tips at (580,240) and (644,240): dist (32,72)=78.8 < 86 ✓. Redraw ears:
left ear: M568,276 L580,240 L606,262 Z; inner M576,266 L581,249 L593,260 Z
right ear: M656,276 L644,240 L618,262 Z; inner M648,266 L643,249 L631,260 Z
Head top at y=262 — ears base at 262-276 on head circle edge. Good, inside glass.

Alternatively poke through for comedy... keep inside, cleaner.

Whisker endpoints (556,333): dist from helmet center (612,312): (56,21)=59.8 < 86 inside. Good.

Glove front (760,376) outside helmet — fine.

Now write everything out. Also include <title> in svg for a11y.

Star circle markup with delays — I'll add style to every 3rd.

Let me write the final file now, being careful with syntax.
Raw response
```html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Astronaut Cat Skateboarding on the Moon</title>
<style>
  html,body{margin:0;padding:0;background:#030612;overflow:hidden}
  body{display:flex;align-items:center;justify-content:center;min-height:100vh}
  svg{display:block;width:100vw;height:100vh}
  .star{animation:twinkle 3.2s ease-in-out infinite}
  @keyframes twinkle{0%,100%{opacity:.15}50%{opacity:1}}
  .spark{animation:sparkle 2.6s ease-in-out infinite;transform-box:fill-box;transform-origin:center}
  @keyframes sparkle{0%,100%{opacity:.25;transform:scale(.65) rotate(0deg)}50%{opacity:1;transform:scale(1.15) rotate(20deg)}}
  #rider{animation:bob 2.8s ease-in-out infinite}
  @keyframes bob{0%,100%{transform:translateY(0)}50%{transform:translateY(-12px)}}
  #shadow{animation:shpulse 2.8s ease-in-out infinite;transform-box:fill-box;transform-origin:center}
  @keyframes shpulse{0%,100%{transform:scale(1);opacity:.42}50%{transform:scale(.88);opacity:.28}}
  .wheel{animation:spin .7s linear infinite;transform-box:fill-box;transform-origin:center}
  @keyframes spin{to{transform:rotate(360deg)}}
  .speed{stroke-dasharray:26 20;animation:dash .55s linear infinite}
  @keyframes dash{to{stroke-dashoffset:-46}}
  .puff{animation:puff 1.15s ease-out infinite;transform-box:fill-box;transform-origin:center;opacity:0}
  @keyframes puff{0%{transform:scale(.4);opacity:.75}100%{transform:scale(1.7);opacity:0}}
  .floaty{animation:floaty 9s ease-in-out infinite}
  @keyframes floaty{0%,100%{transform:translateY(0)}50%{transform:translateY(-9px)}}
  .shoot{animation:shoot 7s linear infinite;animation-delay:1.6s;opacity:0}
  @keyframes shoot{0%{transform:translate(0,0);opacity:0}3%{opacity:1}17%{transform:translate(360px,140px);opacity:0}100%{transform:translate(360px,140px);opacity:0}}
  @media (prefers-reduced-motion:reduce){*{animation:none!important}}
</style>
</head>
<body>
<svg viewBox="0 0 1280 800" preserveAspectRatio="xMidYMid meet" role="img" aria-label="An astronaut cat in a space helmet skateboarding across the moon under a starry sky, with Earth in the distance">
  <defs>
    <linearGradient id="sky" x1="0" y1="0" x2="0" y2="1">
      <stop offset="0" stop-color="#02040f"/>
      <stop offset=".55" stop-color="#0a1030"/>
      <stop offset="1" stop-color="#151d45"/>
    </linearGradient>
    <linearGradient id="moon" x1="0" y1="0" x2="0" y2="1">
      <stop offset="0" stop-color="#d9d9e3"/>
      <stop offset=".5" stop-color="#a9a9ba"/>
      <stop offset="1" stop-color="#7b7b8d"/>
    </linearGradient>
    <radialGradient id="glass" cx=".35" cy=".28" r=".95">
      <stop offset="0" stop-color="#cfe6ff" stop-opacity=".55"/>
      <stop offset=".6" stop-color="#9cc4f5" stop-opacity=".22"/>
      <stop offset="1" stop-color="#6f9fe0" stop-opacity=".12"/>
    </radialGradient>
    <linearGradient id="deck" x1="0" y1="0" x2="1" y2="0">
      <stop offset="0" stop-color="#34e0c8"/>
      <stop offset=".5" stop-color="#5aa2ff"/>
      <stop offset="1" stop-color="#b06bff"/>
    </linearGradient>
    <radialGradient id="glow" cx=".5" cy=".5" r=".5">
      <stop offset="0" stop-color="#7db4ff" stop-opacity=".4"/>
      <stop offset="1" stop-color="#7db4ff" stop-opacity="0"/>
    </radialGradient>
    <linearGradient id="earthShade" x1="0" y1="0" x2="1" y2="1">
      <stop offset="0" stop-color="#00103a" stop-opacity="0"/>
      <stop offset="1" stop-color="#00103a" stop-opacity=".5"/>
    </linearGradient>
    <linearGradient id="shootGrad" x1="0" y1="0" x2="1" y2="0">
      <stop offset="0" stop-color="#ffffff" stop-opacity="0"/>
      <stop offset="1" stop-color="#ffffff" stop-opacity=".9"/>
    </linearGradient>
    <path id="spark" d="M0,-9 L2.2,-2.2 L9,0 L2.2,2.2 L0,9 L-2.2,2.2 L-9,0 L-2.2,-2.2 Z"/>
  </defs>

  <!-- sky -->
  <rect width="1280" height="800" fill="url(#sky)"/>

  <!-- stars -->
  <g fill="#ffffff">
    <circle class="star" cx="60" cy="80" r="2"/>
    <circle class="star" cx="140" cy="180" r="1.6" style="animation-delay:-1.1s"/>
    <circle class="star" cx="220" cy="60" r="2.4" style="animation-delay:-2s"/>
    <circle class="star" cx="300" cy="140" r="1.6"/>
    <circle class="star" cx="380" cy="90" r="2" style="animation-delay:-.7s"/>
    <circle class="star" cx="450" cy="200" r="1.5" style="animation-delay:-1.6s"/>
    <circle class="star" cx="520" cy="60" r="2"/>
    <circle class="star" cx="590" cy="150" r="1.6" style="animation-delay:-2.5s"/>
    <circle class="star" cx="660" cy="80" r="2.4" style="animation-delay:-.4s"/>
    <circle class="star" cx="740" cy="180" r="1.5"/>
    <circle class="star" cx="820" cy="100" r="2" style="animation-delay:-1.9s"/>
    <circle class="star" cx="900" cy="60" r="1.6" style="animation-delay:-.9s"/>
    <circle class="star" cx="960" cy="210" r="2" style="animation-delay:-2.2s"/>
    <circle class="star" cx="1240" cy="90" r="2"/>
    <circle class="star" cx="1200" cy="300" r="1.6" style="animation-delay:-1.3s"/>
    <circle class="star" cx="1160" cy="380" r="2" style="animation-delay:-.2s"/>
    <circle class="star" cx="1050" cy="340" r="1.5" style="animation-delay:-2.8s"/>
    <circle class="star" cx="90" cy="300" r="2" style="animation-delay:-1s"/>
    <circle class="star" cx="180" cy="390" r="1.5"/>
    <circle class="star" cx="280" cy="300" r="2" style="animation-delay:-1.7s"/>
    <circle class="star" cx="360" cy="390" r="1.5" style="animation-delay:-.6s"/>
    <circle class="star" cx="460" cy="320" r="2"/>
    <circle class="star" cx="540" cy="260" r="1.5" style="animation-delay:-2.4s"/>
    <circle class="star" cx="700" cy="300" r="1.5" style="animation-delay:-1.4s"/>
    <circle class="star" cx="780" cy="250" r="2" style="animation-delay:-.3s"/>
    <circle class="star" cx="860" cy="350" r="1.5"/>
    <circle class="star" cx="60" cy="480" r="1.5" style="animation-delay:-2.1s"/>
    <circle class="star" cx="240" cy="470" r="2" style="animation-delay:-1.8s"/>
    <circle class="star" cx="400" cy="440" r="1.5"/>
    <circle class="star" cx="30" cy="180" r="1.6" style="animation-delay:-.8s"/>
    <circle class="star" cx="620" cy="230" r="1.4" style="animation-delay:-2.6s"/>
    <circle class="star" cx="840" cy="210" r="1.4"/>
    <circle class="star" cx="1120" cy="430" r="1.6" style="animation-delay:-1.2s"/>
    <circle class="star" cx="960" cy="420" r="1.4" style="animation-delay:-2.9s"/>
    <circle class="star" cx="720" cy="120" r="1.6" style="animation-delay:-.5s"/>
    <circle class="star" cx="500" cy="120" r="1.4" style="animation-delay:-1.5s"/>
  </g>
  <g fill="#ffffff">
    <g transform="translate(350,120)"><use href="#spark" class="spark"/></g>
    <g transform="translate(980,120) scale(1.2)"><use href="#spark" class="spark" style="animation-delay:-.9s"/></g>
    <g transform="translate(150,260) scale(.8)"><use href="#spark" class="spark" style="animation-delay:-1.7s"/></g>
    <g transform="translate(1120,300) scale(1.1)"><use href="#spark" class="spark" style="animation-delay:-2.1s"/></g>
    <g transform="translate(660,180) scale(.7)"><use href="#spark" class="spark" style="animation-delay:-.4s"/></g>
  </g>

  <!-- Earth -->
  <g transform="translate(1095,150)">
    <g class="floaty">
      <circle r="92" fill="url(#glow)"/>
      <circle r="62" fill="#2f6fd0"/>
      <path d="M-32,-24 Q-12,-42 12,-32 Q30,-24 20,-6 Q2,4 -18,-6 Q-36,-14 -32,-24 Z" fill="#43b06a"/>
      <path d="M8,14 Q30,6 42,22 Q46,40 26,44 Q6,42 4,28 Q2,18 8,14 Z" fill="#43b06a"/>
      <path d="M-46,18 Q-36,10 -27,19 Q-23,30 -36,33 Q-47,29 -46,18 Z" fill="#43b06a"/>
      <ellipse cx="-14" cy="6" rx="18" ry="6" fill="#ffffff" opacity=".8"/>
      <ellipse cx="22" cy="-20" rx="14" ry="5" fill="#ffffff" opacity=".8"/>
      <ellipse cx="-38" cy="-10" rx="10" ry="4" fill="#ffffff" opacity=".8"/>
      <ellipse cx="10" cy="34" rx="12" ry="4" fill="#ffffff" opacity=".8"/>
      <circle r="62" fill="url(#earthShade)"/>
      <circle r="62" fill="none" stroke="#8cb8ff" stroke-width="3" opacity=".6"/>
    </g>
  </g>

  <!-- shooting star -->
  <g transform="translate(200,90)">
    <g class="shoot">
      <line x1="0" y1="0" x2="90" y2="35" stroke="url(#shootGrad)" stroke-width="4" stroke-linecap="round"/>
    </g>
  </g>

  <!-- distant hills -->
  <path d="M600,545 Q740,485 880,542 L880,575 L600,575 Z" fill="#9d9db0" opacity=".9"/>
  <path d="M60,556 Q170,510 290,552 L290,575 L60,575 Z" fill="#9d9db0" opacity=".9"/>

  <!-- moon surface -->
  <path d="M0,560 Q640,500 1280,560 L1280,800 L0,800 Z" fill="url(#moon)"/>
  <path d="M0,560 Q640,500 1280,560" fill="none" stroke="#e6e6f2" stroke-width="3" opacity=".5"/>

  <!-- craters -->
  <g>
    <ellipse cx="210" cy="692" rx="95" ry="27" fill="#7b7b8c"/>
    <ellipse cx="210" cy="692" rx="95" ry="27" fill="none" stroke="#c6c6d4" stroke-width="4"/>
    <ellipse cx="210" cy="697" rx="78" ry="19" fill="#000000" opacity=".16"/>
    <ellipse cx="1060" cy="732" rx="130" ry="33" fill="#7b7b8c"/>
    <ellipse cx="1060" cy="732" rx="130" ry="33" fill="none" stroke="#c6c6d4" stroke-width="5"/>
    <ellipse cx="1060" cy="738" rx="108" ry="24" fill="#000000" opacity=".16"/>
    <ellipse cx="880" cy="632" rx="52" ry="15" fill="#7b7b8c"/>
    <ellipse cx="880" cy="632" rx="52" ry="15" fill="none" stroke="#c6c6d4" stroke-width="3"/>
    <ellipse cx="880" cy="636" rx="42" ry="10" fill="#000000" opacity=".16"/>
    <ellipse cx="430" cy="752" rx="72" ry="21" fill="#7b7b8c"/>
    <ellipse cx="430" cy="752" rx="72" ry="21" fill="none" stroke="#c6c6d4" stroke-width="4"/>
    <ellipse cx="430" cy="756" rx="58" ry="15" fill="#000000" opacity=".16"/>
    <ellipse cx="625" cy="725" rx="28" ry="9" fill="#7b7b8c"/>
    <ellipse cx="625" cy="725" rx="28" ry="9" fill="none" stroke="#c6c6d4" stroke-width="2.5"/>
    <ellipse cx="70" cy="628" rx="38" ry="11" fill="#7b7b8c"/>
    <ellipse cx="70" cy="628" rx="38" ry="11" fill="none" stroke="#c6c6d4" stroke-width="3"/>
    <ellipse cx="1185" cy="648" rx="44" ry="13" fill="#7b7b8c"/>
    <ellipse cx="1185" cy="648" rx="44" ry="13" fill="none" stroke="#c6c6d4" stroke-width="3"/>
  </g>

  <!-- rocks -->
  <g fill="#9a9aaa">
    <ellipse cx="330" cy="645" rx="11" ry="6"/>
    <ellipse cx="760" cy="700" rx="12" ry="7"/>
    <ellipse cx="990" cy="600" rx="8" ry="5"/>
    <ellipse cx="150" cy="610" rx="7" ry="4"/>
    <ellipse cx="1150" cy="700" rx="10" ry="6"/>
  </g>

  <!-- flag -->
  <g>
    <ellipse cx="950" cy="545" rx="15" ry="4" fill="#000000" opacity=".2"/>
    <line x1="950" y1="542" x2="950" y2="428" stroke="#d7dbe6" stroke-width="6" stroke-linecap="round"/>
    <circle cx="950" cy="424" r="6" fill="#ffd166"/>
    <path d="M950,430 C976,422 998,438 1024,428 L1024,460 C998,470 976,454 950,462 Z" fill="#ff5d73" stroke="#d63c55" stroke-width="2.5" stroke-linejoin="round"/>
    <g fill="#ffffff">
      <circle cx="987" cy="446" r="5.5"/>
      <circle cx="979" cy="439" r="2.8"/>
      <circle cx="987" cy="436" r="2.8"/>
      <circle cx="995" cy="439" r="2.8"/>
    </g>
  </g>

  <!-- shadow -->
  <ellipse id="shadow" cx="612" cy="692" rx="180" ry="18" fill="#23233a" opacity=".42"/>

  <!-- speed lines -->
  <g stroke="#a8bcff" stroke-width="7" stroke-linecap="round" fill="none" opacity=".55">
    <path class="speed" d="M250,392 H390"/>
    <path class="speed" d="M215,442 H400" style="animation-delay:-.2s"/>
    <path class="speed" d="M250,492 H410" style="animation-delay:-.35s"/>
    <path class="speed" d="M300,532 H430" style="animation-delay:-.1s"/>
  </g>

  <!-- rider: astronaut cat on skateboard -->
  <g id="rider">
    <!-- skateboard -->
    <g transform="translate(610,638) rotate(-6)">
      <g transform="translate(-88,26)">
        <circle r="16" fill="#ffd166" stroke="#b97f16" stroke-width="3"/>
        <g class="wheel">
          <path d="M-11,0 H11 M0,-11 V11" stroke="#b97f16" stroke-width="3"/>
          <circle r="5" fill="#b97f16"/>
        </g>
      </g>
      <g transform="translate(88,26)">
        <circle r="16" fill="#ffd166" stroke="#b97f16" stroke-width="3"/>
        <g class="wheel" style="animation-delay:-.35s">
          <path d="M-11,0 H11 M0,-11 V11" stroke="#b97f16" stroke-width="3"/>
          <circle r="5" fill="#b97f16"/>
        </g>
      </g>
      <rect x="-101" y="8" width="22" height="12" rx="3" fill="#7c8698"/>
      <rect x="79" y="8" width="22" height="12" rx="3" fill="#7c8698"/>
      <path d="M-168,-2 C-172,-16 -158,-24 -140,-24 L140,-24 C158,-24 172,-16 168,-2 L158,10 L-158,10 Z" fill="url(#deck)" stroke="#1e2440" stroke-width="3" stroke-linejoin="round"/>
      <text x="0" y="-4" text-anchor="middle" font-family="'Trebuchet MS',Verdana,sans-serif" font-size="14" font-weight="bold" letter-spacing="4" fill="#101736" opacity=".9">MEOW</text>
    </g>

    <!-- dust puffs -->
    <g fill="#cfd0da">
      <circle class="puff" cx="498" cy="682" r="7"/>
      <circle class="puff" cx="472" cy="690" r="5" style="animation-delay:-.4s"/>
      <circle class="puff" cx="520" cy="694" r="4" style="animation-delay:-.8s"/>
    </g>

    <!-- legs -->
    <path d="M582,506 C570,540 564,568 562,592" fill="none" stroke="#aab2c8" stroke-width="38" stroke-linecap="round"/>
    <path d="M582,506 C570,540 564,568 562,592" fill="none" stroke="#f4f6fb" stroke-width="30" stroke-linecap="round"/>
    <path d="M636,506 C664,530 688,558 699,586" fill="none" stroke="#aab2c8" stroke-width="38" stroke-linecap="round"/>
    <path d="M636,506 C664,530 688,558 699,586" fill="none" stroke="#f4f6fb" stroke-width="30" stroke-linecap="round"/>
    <!-- boots -->
    <g transform="translate(562,600) rotate(-4)">
      <rect x="-32" y="-8" width="60" height="28" rx="10" fill="#e8ebf4" stroke="#aab2c8" stroke-width="3"/>
      <rect x="-32" y="12" width="60" height="8" rx="4" fill="#8f97ab"/>
    </g>
    <g transform="translate(699,587) rotate(5)">
      <rect x="-33" y="-8" width="62" height="28" rx="10" fill="#e8ebf4" stroke="#aab2c8" stroke-width="3"/>
      <rect x="-33" y="12" width="62" height="8" rx="4" fill="#8f97ab"/>
    </g>

    <!-- backpack -->
    <rect x="494" y="402" width="66" height="110" rx="16" fill="#cdd3e0" stroke="#9aa3b8" stroke-width="3"/>
    <rect x="505" y="416" width="44" height="32" rx="6" fill="#b7bed0" stroke="#9aa3b8" stroke-width="2"/>
    <circle cx="513" cy="462" r="5" fill="#ff6b6b"/>
    <circle cx="533" cy="462" r="5" fill="#6bd48a"/>
    <path d="M505,482 H549" stroke="#9aa3b8" stroke-width="3"/>
    <line x1="527" y1="402" x2="527" y2="374" stroke="#9aa3b8" stroke-width="4"/>
    <circle cx="527" cy="368" r="7" fill="#ff6b6b" stroke="#d63c55" stroke-width="2"/>

    <!-- scarf -->
    <path d="M600,412 C562,390 516,394 480,418 C505,424 524,438 552,434 C574,430 592,422 602,418 Z" fill="#ff5d73" stroke="#d63c55" stroke-width="3" stroke-linejoin="round"/>
    <path d="M516,406 C536,414 560,420 584,418" stroke="#d63c55" stroke-width="2" fill="none" opacity=".6"/>

    <!-- back arm -->
    <path d="M562,428 C530,442 504,462 490,488" fill="none" stroke="#aab2c8" stroke-width="34" stroke-linecap="round"/>
    <path d="M562,428 C530,442 504,462 490,488" fill="none" stroke="#f4f6fb" stroke-width="26" stroke-linecap="round"/>
    <circle cx="496" cy="480" r="9.5" fill="#c3c9d9" stroke="#9aa3b8" stroke-width="2"/>
    <circle cx="486" cy="494" r="17" fill="#f4f6fb" stroke="#aab2c8" stroke-width="3"/>

    <!-- torso -->
    <rect x="552" y="390" width="118" height="128" rx="36" fill="#f4f6fb" stroke="#aab2c8" stroke-width="3"/>
    <path d="M560,452 H664" stroke="#d5dae6" stroke-width="3"/>
    <rect x="584" y="428" width="58" height="46" rx="8" fill="#e2e7f2" stroke="#aab2c8" stroke-width="2"/>
    <rect x="592" y="435" width="42" height="17" rx="3" fill="#7fd4f2" stroke="#aab2c8" stroke-width="1.5"/>
    <path d="M596,449 L610,437" stroke="#ffffff" stroke-width="2" opacity=".8"/>
    <circle cx="596" cy="464" r="4" fill="#ff6b6b"/>
    <circle cx="611" cy="464" r="4" fill="#ffd166"/>
    <circle cx="626" cy="464" r="4" fill="#6bd48a"/>
    <rect x="556" y="494" width="110" height="16" rx="8" fill="#c3c9d9" stroke="#9aa3b8" stroke-width="2"/>
    <rect x="600" y="496" width="24" height="12" rx="3" fill="#ffd166" stroke="#c98f1b" stroke-width="2"/>

    <!-- front arm -->
    <path d="M654,424 C694,410 726,396 754,380" fill="none" stroke="#aab2c8" stroke-width="34" stroke-linecap="round"/>
    <path d="M654,424 C694,410 726,396 754,380" fill="none" stroke="#f4f6fb" stroke-width="26" stroke-linecap="round"/>
    <circle cx="744" cy="386" r="9.5" fill="#c3c9d9" stroke="#9aa3b8" stroke-width="2"/>
    <circle cx="760" cy="376" r="17" fill="#f4f6fb" stroke="#aab2c8" stroke-width="3"/>

    <!-- life-support tube -->
    <path d="M552,416 C566,404 562,392 558,382" fill="none" stroke="#9aa3b8" stroke-width="6" stroke-linecap="round"/>

    <!-- neck ring -->
    <ellipse cx="612" cy="392" rx="52" ry="15" fill="#c3c9d9" stroke="#9aa3b8" stroke-width="3"/>

    <!-- cat head -->
    <path d="M568,276 L580,240 L606,262 Z" fill="#f6a55c" stroke="#d97f35" stroke-width="3" stroke-linejoin="round"/>
    <path d="M576,266 L581,249 L593,260 Z" fill="#f7b8c4"/>
    <path d="M656,276 L644,240 L618,262 Z" fill="#f6a55c" stroke="#d97f35" stroke-width="3" stroke-linejoin="round"/>
    <path d="M648,266 L643,249 L631,260 Z" fill="#f7b8c4"/>
    <circle cx="612" cy="320" r="58" fill="#f6a55c" stroke="#d97f35" stroke-width="3"/>
    <path d="M599,266 Q604,276 600,285 M612,263 Q617,273 613,283 M625,266 Q630,276 626,285" stroke="#e0823a" stroke-width="4" fill="none" stroke-linecap="round"/>
    <circle cx="590" cy="315" r="7.5" fill="#402d1c"/>
    <circle cx="592.5" cy="312.5" r="2.6" fill="#ffffff"/>
    <circle cx="634" cy="315" r="7.5" fill="#402d1c"/>
    <circle cx="636.5" cy="312.5" r="2.6" fill="#ffffff"/>
    <ellipse cx="612" cy="344" rx="28" ry="18" fill="#fff1e0"/>
    <path d="M605,335 Q612,330 619,335 Q617,343 612,344 Q607,343 605,335 Z" fill="#ef7d95"/>
    <path d="M612,344 Q611,351 604,352 M612,344 Q613,351 620,352" stroke="#b06a3a" stroke-width="2.5" fill="none" stroke-linecap="round"/>
    <g stroke="#ffffff" stroke-width="2" opacity=".85" stroke-linecap="round">
      <path d="M584,340 L556,333"/>
      <path d="M584,348 L558,352"/>
      <path d="M640,340 L668,333"/>
      <path d="M640,348 L666,352"/>
    </g>
    <ellipse cx="576" cy="333" rx="7" ry="4" fill="#ff9db1" opacity=".55"/>
    <ellipse cx="648" cy="333" rx="7" ry="4" fill="#ff9db1" opacity=".55"/>

    <!-- helmet glass -->
    <circle cx="612" cy="312" r="86" fill="url(#glass)" stroke="#f2f7ff" stroke-width="7"/>
    <circle cx="612" cy="312" r="77" fill="none" stroke="#ffffff" stroke-width="2" opacity=".3"/>
    <path d="M543,287 A74,74 0 0 1 637,242" stroke="#ffffff" stroke-width="9" fill="none" stroke-linecap="round" opacity=".75"/>
    <circle cx="580" cy="252" r="6" fill="#ffffff" opacity=".9"/>
  </g>
</svg>
</body>
</html>
```