Skateboarding astronaut catOne-line
Qwen3.8 Flash
by QwenReasoningClean
Running live in a sandboxed frame. Click inside it before using the keyboard.
How it went
- Total time
- 5 min 26 s
- Cost
- $0.013
- Output tokens
- 28,040
- Spent thinking
- 20,257 tokens
- Speed
- 86.1 tok/s
- Console errors
- 0
- First token after
- 597 ms
- First visible text after
- 4 min 17 s
- Prompt tokens
- 403
- Code size
- 16.5 KB
- Finish reason
- stop
- Served by
- Alibaba
- Model id
qwen/qwen3.8-flash- Reasoning sent
model default- Max output
- 64,000 tokens
- Generated
- Nov 11, 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 · 375 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>
body, html {
margin: 0;
padding: 0;
width: 100%;
height: 100%;
overflow: hidden;
background-color: #030214;
}
svg {
display: block;
width: 100%;
height: 100%;
}
/* Animations */
@keyframes hover {
0%, 100% { transform: translateY(0); }
50% { transform: translateY(-25px); }
}
.hover-board {
animation: hover 2.5s ease-in-out infinite;
transform-box: fill-box;
transform-origin: center;
}
@keyframes shadow-pulse {
0%, 100% { transform: scale(1); opacity: 0.6; }
50% { transform: scale(0.7); opacity: 0.3; }
}
.shadow {
animation: shadow-pulse 2.5s ease-in-out infinite;
transform-box: fill-box;
transform-origin: center;
}
@keyframes dust-float {
0%, 100% { transform: translate(0, 0); opacity: 0.6; }
50% { transform: translate(-5px, -15px); opacity: 0.2; }
}
.dust {
animation: dust-float 2s ease-in-out infinite;
}
</style>
</head>
<body>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 800" preserveAspectRatio="xMidYMid slice">
<defs>
<!-- Background gradients -->
<linearGradient id="spaceGrad" x1="0" y1="0" x2="0" y2="1">
<stop offset="0%" stop-color="#030214"/>
<stop offset="50%" stop-color="#0a0a2a"/>
<stop offset="100%" stop-color="#150c26"/>
</linearGradient>
<linearGradient id="moonGrad" x1="0" y1="0" x2="0" y2="1">
<stop offset="0%" stop-color="#3a3a4a"/>
<stop offset="100%" stop-color="#1b1b24"/>
</linearGradient>
<linearGradient id="earthGrad" x1="0" y1="0" x2="1" y2="1">
<stop offset="0%" stop-color="#00c6ff"/>
<stop offset="50%" stop-color="#0072ff"/>
<stop offset="100%" stop-color="#2b1055"/>
</linearGradient>
<!-- Object gradients -->
<radialGradient id="suitGrad" cx="40%" cy="40%" r="60%">
<stop offset="0%" stop-color="#ffffff"/>
<stop offset="80%" stop-color="#e0e0e0"/>
<stop offset="100%" stop-color="#b0b0b0"/>
</radialGradient>
<linearGradient id="boardGrad" x1="0" y1="0" x2="0" y2="1">
<stop offset="0%" stop-color="#ff3f65"/>
<stop offset="100%" stop-color="#d91a43"/>
</linearGradient>
<linearGradient id="wheelGlow" x1="0" y1="0" x2="0" y2="1">
<stop offset="0%" stop-color="#00ffff"/>
<stop offset="100%" stop-color="#ff00ff"/>
</linearGradient>
<linearGradient id="helmetGlass" x1="0" y1="0" x2="1" y2="1">
<stop offset="0%" stop-color="rgba(135, 206, 235, 0.6)"/>
<stop offset="50%" stop-color="rgba(135, 206, 235, 0.1)"/>
<stop offset="100%" stop-color="rgba(135, 206, 235, 0.4)"/>
</linearGradient>
<!-- Filters -->
<filter id="glow" x="-50%" y="-50%" width="200%" height="200%">
<feGaussianBlur stdDeviation="6" result="blur" />
<feMerge>
<feMergeNode in="blur" />
<feMergeNode in="SourceGraphic" />
</feMerge>
</filter>
<filter id="softBlur" x="-20%" y="-20%" width="140%" height="140%">
<feGaussianBlur stdDeviation="4" />
</filter>
<filter id="shadowBlur" x="-30%" y="-30%" width="160%" height="160%">
<feGaussianBlur stdDeviation="8" />
</filter>
<filter id="dustBlur" x="-50%" y="-50%" width="200%" height="200%">
<feGaussianBlur stdDeviation="2" />
</filter>
</defs>
<!-- Space -->
<rect width="1200" height="800" fill="url(#spaceGrad)"/>
<!-- Stars -->
<g fill="#ffffff">
<!-- Large stars -->
<circle cx="150" cy="200" r="2.5" opacity="0.9"/>
<circle cx="850" cy="120" r="3" opacity="0.8" filter="url(#glow)"/>
<circle cx="1050" cy="450" r="2" opacity="0.7"/>
<circle cx="250" cy="550" r="2.5" opacity="0.6"/>
<!-- 4-point stars -->
<path d="M 400 150 L 403 155 L 408 158 L 403 161 L 400 166 L 397 161 L 392 158 L 397 155 Z" opacity="0.8"/>
<path d="M 750 280 L 753 286 L 759 289 L 753 292 L 750 298 L 747 292 L 741 289 L 747 286 Z" opacity="0.9" filter="url(#glow)"/>
<path d="M 1100 180 L 1102 185 L 1107 187 L 1102 189 L 1100 194 L 1098 189 L 1093 187 L 1098 185 Z" opacity="0.7"/>
<!-- Small dots -->
<circle cx="80" cy="80" r="1.5" opacity="0.5"/>
<circle cx="220" cy="120" r="1" opacity="0.6"/>
<circle cx="320" cy="60" r="2" opacity="0.4"/>
<circle cx="480" cy="90" r="1.5" opacity="0.8"/>
<circle cx="600" cy="150" r="1" opacity="0.5"/>
<circle cx="720" cy="100" r="2" opacity="0.7"/>
<circle cx="920" cy="180" r="1.5" opacity="0.6"/>
<circle cx="1150" cy="100" r="1" opacity="0.9"/>
<circle cx="180" cy="350" r="1.5" opacity="0.5"/>
<circle cx="300" cy="400" r="1" opacity="0.7"/>
<circle cx="550" cy="320" r="2" opacity="0.4"/>
<circle cx="800" cy="380" r="1.5" opacity="0.8"/>
<circle cx="1000" cy="350" r="1" opacity="0.6"/>
<circle cx="50" cy="500" r="2" opacity="0.5"/>
<circle cx="400" cy="520" r="1.5" opacity="0.7"/>
<circle cx="700" cy="550" r="1" opacity="0.4"/>
<circle cx="950" cy="580" r="2" opacity="0.6"/>
<circle cx="1100" cy="550" r="1.5" opacity="0.8"/>
</g>
<!-- Earth -->
<g transform="translate(950, 220)">
<!-- Atmosphere Glow -->
<circle cx="0" cy="0" r="160" fill="none" stroke="#a3cbf0" stroke-width="20" opacity="0.4" filter="url(#softBlur)"/>
<circle cx="0" cy="0" r="170" fill="none" stroke="#00c6ff" stroke-width="10" opacity="0.2" filter="url(#glow)"/>
<!-- Planet Base -->
<circle cx="0" cy="0" r="150" fill="url(#earthGrad)"/>
<!-- Continents -->
<path d="M -80 -120 Q -40 -140 10 -110 Q 60 -80 80 -20 Q 100 40 60 90 Q 10 130 -50 110 Q -110 80 -130 20 Q -120 -50 -80 -120" fill="#2ed573" opacity="0.85" filter="url(#softBlur)"/>
<path d="M -80 -120 Q -40 -140 10 -110 Q 60 -80 80 -20 Q 100 40 60 90 Q 10 130 -50 110 Q -110 80 -130 20 Q -120 -50 -80 -120" fill="#7bed9f" opacity="0.6"/>
<!-- Clouds -->
<path d="M -120 -60 Q -60 -80 0 -40 Q 60 -10 100 20 Q 120 50 80 80 Q 0 100 -60 60 Q -100 20 -120 -60" fill="#ffffff" opacity="0.7" filter="url(#softBlur)"/>
<path d="M 20 -120 Q 80 -140 120 -80 Q 140 -20 100 20" fill="none" stroke="#ffffff" stroke-width="15" opacity="0.5" stroke-linecap="round" filter="url(#softBlur)"/>
<!-- Shading / Terminator -->
<path d="M 0 -150 A 150 150 0 0 1 150 0 A 150 150 0 0 1 0 150 A 150 150 0 0 0 -150 0 A 150 150 0 0 0 0 -150" fill="rgba(0,0,0,0.4)"/>
<path d="M 0 -150 A 150 150 0 0 1 150 0 A 150 150 0 0 1 0 150 Z" fill="rgba(0,0,0,0.6)"/>
</g>
<!-- Moon Surface -->
<path d="M0 620 Q 200 580 400 650 T 800 600 T 1200 680 L 1200 800 L 0 800 Z" fill="url(#moonGrad)"/>
<!-- Terrain Details / Craters -->
<g opacity="0.8">
<!-- Big crater -->
<ellipse cx="250" cy="700" rx="60" ry="20" fill="#14141c"/>
<ellipse cx="250" cy="695" rx="60" ry="20" fill="#2a2a38"/>
<!-- Medium crater -->
<ellipse cx="550" cy="660" rx="35" ry="12" fill="#14141c"/>
<ellipse cx="550" cy="657" rx="35" ry="12" fill="#2a2a38"/>
<!-- Far right crater -->
<ellipse cx="950" cy="730" rx="80" ry="25" fill="#14141c"/>
<ellipse cx="950" cy="723" rx="80" ry="25" fill="#2a2a38"/>
<!-- Small craters -->
<ellipse cx="100" cy="660" rx="15" ry="5" fill="#14141c"/>
<ellipse cx="100" cy="658" rx="15" ry="5" fill="#2a2a38"/>
<ellipse cx="750" cy="640" rx="20" ry="6" fill="#14141c"/>
<ellipse cx="750" cy="638" rx="20" ry="6" fill="#2a2a38"/>
<ellipse cx="1100" cy="650" rx="25" ry="8" fill="#14141c"/>
<ellipse cx="1100" cy="647" rx="25" ry="8" fill="#2a2a38"/>
<!-- Rocks -->
<path d="M 180 640 L 190 630 L 205 635 L 210 645 L 195 650 Z" fill="#1f1f29"/>
<path d="M 180 640 L 190 630 L 205 635 L 195 645 Z" fill="#343445"/>
<path d="M 650 680 L 665 670 L 680 680 L 670 695 Z" fill="#1f1f29"/>
<path d="M 650 680 L 665 670 L 680 680 L 665 685 Z" fill="#343445"/>
</g>
<!-- Skateboard and Cat Group -->
<g transform="translate(600, 480) rotate(-12)">
<!-- Shadow -->
<ellipse class="shadow" cx="0" cy="120" rx="130" ry="25" fill="rgba(0,0,0,0.6)" filter="url(#shadowBlur)"/>
<!-- Floating Dust / Debris -->
<g class="dust" fill="#ffffff" filter="url(#dustBlur)">
<circle cx="-80" cy="40" r="2.5" opacity="0.6" />
<circle cx="-50" cy="60" r="1.5" opacity="0.6" />
<circle cx="-20" cy="35" r="3" opacity="0.6" />
<circle cx="10" cy="70" r="2" opacity="0.6" />
<circle cx="40" cy="45" r="1.5" opacity="0.6" />
<circle cx="70" cy="65" r="2.5" opacity="0.6" />
<circle cx="100" cy="30" r="2" opacity="0.6" />
</g>
<!-- Hovering Board and Cat -->
<g class="hover-board">
<!-- Skateboard -->
<g id="skateboard">
<!-- Deck -->
<rect x="-130" y="0" width="260" height="14" rx="7" fill="url(#boardGrad)"/>
<rect x="-120" y="0" width="240" height="4" rx="2" fill="#ff768e"/>
<rect x="-120" y="10" width="240" height="4" rx="2" fill="rgba(0,0,0,0.3)"/>
<!-- Grip Tape / Paws -->
<g fill="#111" opacity="0.8">
<circle cx="-60" cy="7" r="2"/>
<circle cx="-65" cy="5" r="2"/>
<circle cx="-55" cy="5" r="2"/>
<line x1="-60" y1="5" x2="-60" y2="9"/>
<line x1="-65" y1="5" x2="-65" y2="9"/>
<line x1="-55" y1="5" x2="-55" y2="9"/>
<circle cx="60" cy="7" r="2"/>
<circle cx="65" cy="5" r="2"/>
<circle cx="55" cy="5" r="2"/>
<line x1="60" y1="5" x2="60" y2="9"/>
<line x1="65" y1="5" x2="65" y2="9"/>
<line x1="55" y1="5" x2="55" y2="9"/>
</g>
<!-- Wheels and Trucks -->
<!-- Back -->
<path d="M-90 14 L-80 28 L-70 28 L-60 14 Z" fill="#747d8c"/>
<path d="M-90 14 L-80 28 L-70 28 L-60 14 Z" fill="none" stroke="#374151" stroke-width="2"/>
<circle cx="-85" cy="28" r="14" fill="url(#wheelGlow)" filter="url(#glow)"/>
<circle cx="-65" cy="28" r="14" fill="url(#wheelGlow)" filter="url(#glow)"/>
<circle cx="-85" cy="28" r="7" fill="#fff" opacity="0.9"/>
<circle cx="-65" cy="28" r="7" fill="#fff" opacity="0.9"/>
<circle cx="-85" cy="28" r="3" fill="#57606f"/>
<circle cx="-65" cy="28" r="3" fill="#57606f"/>
<!-- Front -->
<path d="M60 14 L70 28 L80 28 L90 14 Z" fill="#747d8c"/>
<path d="M60 14 L70 28 L80 28 L90 14 Z" fill="none" stroke="#374151" stroke-width="2"/>
<circle cx="65" cy="28" r="14" fill="url(#wheelGlow)" filter="url(#glow)"/>
<circle cx="85" cy="28" r="14" fill="url(#wheelGlow)" filter="url(#glow)"/>
<circle cx="65" cy="28" r="7" fill="#fff" opacity="0.9"/>
<circle cx="85" cy="28" r="7" fill="#fff" opacity="0.9"/>
<circle cx="65" cy="28" r="3" fill="#57606f"/>
<circle cx="85" cy="28" r="3" fill="#57606f"/>
</g>
<!-- Cat Astronaut -->
<g id="cat-astronaut">
<!-- Tail inside a clear tube -->
<path d="M 15 40 Q 60 70 80 20 Q 95 -15 130 5" fill="none" stroke="rgba(255,255,255,0.3)" stroke-width="24" stroke-linecap="round"/>
<path d="M 15 40 Q 60 70 80 20 Q 95 -15 130 5" fill="none" stroke="rgba(255,255,255,0.1)" stroke-width="24" stroke-linecap="round"/>
<!-- Tail inside -->
<path d="M 15 40 Q 58 66 76 22 Q 90 -10 122 3" fill="none" stroke="#3742fa" stroke-width="14" stroke-linecap="round"/>
<!-- Backpack -->
<rect x="-45" y="-15" width="45" height="60" rx="8" fill="#2f3542" transform="rotate(-10)"/>
<rect x="-35" y="-5" width="25" height="15" rx="3" fill="#57606f" transform="rotate(-10)"/>
<circle cx="-22" cy="2" r="3" fill="#ffa502" filter="url(#glow)" transform="rotate(-10)"/>
<rect x="-35" y="25" width="25" height="10" rx="2" fill="#747d8c" transform="rotate(-10)"/>
<!-- Back / Left Arm -->
<path d="M -15 10 Q -60 -10 -90 30" fill="none" stroke="url(#suitGrad)" stroke-width="20" stroke-linecap="round"/>
<circle cx="-90" cy="30" r="11" fill="#ff4757"/> <!-- Glove -->
<path d="M -90 30 Q -110 20 -115 35 Q -100 45 -90 30" fill="#2f3542"/> <!-- Fingers/paws -->
<!-- Legs -->
<!-- Left / Back Leg -->
<path d="M -15 35 Q -40 45 -45 85" fill="none" stroke="url(#suitGrad)" stroke-width="24" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M -45 85 L -25 95 L -25 115 L -60 115 C -65 105 -65 95 -45 85 Z" fill="#2f3542"/>
<path d="M -45 85 L -25 95 L -25 105 L -50 105 Z" fill="rgba(255,255,255,0.2)"/>
<!-- Right / Front Leg -->
<path d="M 5 40 Q 30 50 60 75" fill="none" stroke="url(#suitGrad)" stroke-width="24" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 60 75 L 75 65 L 95 85 L 80 100 C 70 95 60 90 60 75 Z" fill="#2f3542"/>
<path d="M 60 75 L 75 65 L 85 75 L 70 85 Z" fill="rgba(255,255,255,0.2)"/>
<!-- Torso -->
<path d="M -20 -5 Q -35 25 -15 45 Q 10 50 20 35 Q 25 10 10 -10 Z" fill="url(#suitGrad)"/>
<!-- Suit stripes -->
<path d="M -25 15 Q 0 25 20 10" fill="none" stroke="#ff4757" stroke-width="4"/>
<path d="M -20 20 Q 0 30 22 15" fill="none" stroke="#3742fa" stroke-width="4"/>
<!-- Chest Control Panel -->
<rect x="-10" y="5" width="20" height="12" rx="2" fill="#2f3542"/>
<circle cx="-5" cy="11" r="2" fill="#1e90ff"/>
<circle cx="5" cy="11" r="2" fill="#ff4757"/>
<line x1="-8" y1="11" x2="-2" y2="11" stroke="#fff" stroke-width="1"/>
<!-- Front / Right Arm -->
<path d="M 10 10 Q 50 0 80 -40" fill="none" stroke="url(#suitGrad)" stroke-width="20" stroke-linecap="round"/>
<circle cx="80" cy="-40" r="11" fill="#ff4757"/> <!-- Glove -->
<path d="M 80 -40 Q 100 -50 110 -35 Q 90 -25 80 -40" fill="#2f3542"/> <!-- Fingers/paws -->
<!-- Collar Ring -->
<ellipse cx="-5" cy="-12" rx="22" ry="7" fill="#747d8c"/>
<ellipse cx="-5" cy="-14" rx="19" ry="5" fill="#a4b0be"/>
<!-- Helmet -->
<!-- Outer Ring -->
<circle cx="-5" cy="-65" r="45" fill="none" stroke="#a4b0be" stroke-width="4"/>
<!-- Glass -->
<circle cx="-5" cy="-65" r="45" fill="url(#helmetGlass)"/>
<circle cx="-5" cy="-65" r="45" fill="rgba(255,255,255,0.1)" filter="url(#glow)"/>
<!-- Cat Face inside Helmet -->
<g transform="translate(0, -10)">
<!-- Ears -->
<polygon points="-12,-45 -22,-65 -4,-55" fill="#2f3542"/>
<polygon points="-10,-47 -19,-60 -5,-55" fill="#ff6b81"/>
<polygon points="12,-45 22,-65 4,-55" fill="#2f3542"/>
<polygon points="10,-47 19,-60 5,-55" fill="#ff6b81"/>
<!-- Head base -->
<circle cx="0" cy="-45" r="22" fill="#333"/>
<!-- Eyes -->
<ellipse cx="-8" cy="-45" rx="6" ry="7" fill="#a3cbf0"/>
<ellipse cx="8" cy="-45" rx="6" ry="7" fill="#a3cbf0"/>
<ellipse cx="-8" cy="-45" rx="3" ry="5" fill="#111"/>
<ellipse cx="8" cy="-45" rx="3" ry="5" fill="#111"/>
<circle cx="-9" cy="-47" r="2" fill="#fff"/>
<circle cx="7" cy="-47" r="2" fill="#fff"/>
<!-- Nose -->
<polygon points="0,-35 -4,-40 4,-40" fill="#ff6b81"/>
<!-- Whiskers -->
<line x1="-15" y1="-38" x2="-30" y2="-40" stroke="#fff" stroke-width="1.5" opacity="0.8" stroke-linecap="round"/>
<line x1="-15" y1="-35" x2="-32" y2="-35" stroke="#fff" stroke-width="1.5" opacity="0.8" stroke-linecap="round"/>
<line x1="-15" y1="-32" x2="-30" y2="-30" stroke="#fff" stroke-width="1.5" opacity="0.8" stroke-linecap="round"/>
<line x1="15" y1="-38" x2="30" y2="-40" stroke="#fff" stroke-width="1.5" opacity="0.8" stroke-linecap="round"/>
<line x1="15" y1="-35" x2="32" y2="-35" stroke="#fff" stroke-width="1.5" opacity="0.8" stroke-linecap="round"/>
<line x1="15" y1="-32" x2="30" y2="-30" stroke="#fff" stroke-width="1.5" opacity="0.8" stroke-linecap="round"/>
</g>
<!-- Helmet Reflection -->
<path d="M -40 -85 A 35 35 0 0 1 10 -95 A 40 40 0 0 0 -45 -40 Z" fill="rgba(255,255,255,0.4)" filter="url(#softBlur)"/>
<path d="M 20 -45 A 40 40 0 0 0 35 -60 A 45 45 0 0 1 25 -40 Z" fill="rgba(255,255,255,0.3)" filter="url(#softBlur)"/>
<!-- Antenna -->
<line x1="-25" y1="-100" x2="-45" y2="-120" stroke="#747d8c" stroke-width="3" stroke-linecap="round"/>
<circle cx="-45" cy="-120" r="4" fill="#ff4757" filter="url(#glow)"/>
</g>
</g>
</g>
</svg>
</body>
</html>Reasoning trace (20,257 tokens)
Thinking:
I need to generate a self-contained SVG file based on the user's prompt: "draw me an SVG of an astronaut cat skateboarding on the moon".
The output must be exactly one fenced code block containing the complete SVG file. No HTML, just SVG, because the prompt asks for an SVG.
The SVG must be visible in a 1280x800 viewport, adapt gracefully, no horizontal scrollbar (SVG will scale).
No interaction needed, but it should look good on first paint.
Let's design the SVG:
- Background: Moon surface (craters, gray terrain), space background (stars, maybe Earth in the distance).
- Astronaut Cat: A cat wearing a space suit (helmet, backpack, suit details).
- Skateboard: A skateboard the cat is riding.
- Action: The cat is doing a trick or gliding across the moon surface.
- Style: vector art, flat colors, maybe some shading.
Plan for SVG:
1. **Canvas setup**: `viewBox="0 0 800 600"`, `width="100%"`, `height="100%"`, `preserveAspectRatio="xMidYMid meet"`.
2. **Definitions (`<defs>`)**: Gradients for space, moon, cat suit, helmet visor.
3. **Space Background**: Dark blue/black gradient, scattered stars (white circles/polygons).
4. **Earth in background**: A nice blue/green sphere with some clouds.
5. **Moon Surface**: Gray/white terrain with craters (ellipses, paths).
6. **Skateboard**: Deck (maybe with a paw print or space theme), trucks, glowing wheels (to show low gravity motion).
7. **Astronaut Cat**:
- Body/Suit: White with orange/blue accents.
- Head/Helmet: Cat face inside a glass dome.
- Arms/Legs: Posing for skateboarding (arms out, one leg pushing or crouching).
- Backpack: Life support pack.
8. **Motion Lines**: Dashed lines or speed marks to give a dynamic feel.
Refining the Astronaut Cat:
- Helmet: Glass sphere with a reflection. Inside, a cute cat face (ears, eyes, nose, whiskers).
- Body: Bulky space suit torso.
- Arms: One arm stretched out back, one forward.
- Legs: Bent knees, standing on the board.
- Tail: Maybe sticking out of a special hole in the suit, or just inside a clear tube. Let's do a clear tube on the back or just suit-shaped tail. A clear helmet tube for the tail would be cute.
Refining the Skateboard:
- Deck: Rectangular with rounded ends, tilted slightly upwards (doing an ollie or moon-glide).
- Wheels: Glowing neon circles to signify lunar low-gravity hovering.
- Shadow: Blurred ellipse below to show height off the ground.
Refining the Moon:
- Ground: Grayish-blue with some darker craters.
- Craters: Ellipses with inner shadow/highlight to make them look 3D.
Let's write out the SVG structure.
```xml
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 800" width="100%" height="100%">
<defs>
<!-- Gradients -->
<linearGradient id="spaceGrad" x1="0" y1="0" x2="0" y2="1">
<stop offset="0%" stop-color="#020111"/>
<stop offset="50%" stop-color="#0a0a2a"/>
<stop offset="100%" stop-color="#12123a"/>
</linearGradient>
<linearGradient id="moonGrad" x1="0" y1="0" x2="0" y2="1">
<stop offset="0%" stop-color="#2a2a35"/>
<stop offset="100%" stop-color="#15151a"/>
</linearGradient>
<linearGradient id="earthGrad" x1="0" y1="0" x2="1" y2="1">
<stop offset="0%" stop-color="#4facfe"/>
<stop offset="50%" stop-color="#00f2fe"/>
<stop offset="100%" stop-color="#2b5876"/>
</linearGradient>
<radialGradient id="suitGrad" cx="30%" cy="30%" r="70%">
<stop offset="0%" stop-color="#ffffff"/>
<stop offset="80%" stop-color="#e0e0e0"/>
<stop offset="100%" stop-color="#b0b0b0"/>
</radialGradient>
<linearGradient id="helmetGlass" x1="0" y1="0" x2="1" y2="1">
<stop offset="0%" stop-color="rgba(135, 206, 235, 0.6)"/>
<stop offset="50%" stop-color="rgba(135, 206, 235, 0.2)"/>
<stop offset="100%" stop-color="rgba(135, 206, 235, 0.4)"/>
</linearGradient>
<linearGradient id="wheelGlow" x1="0" y1="0" x2="0" y2="1">
<stop offset="0%" stop-color="#00ffff"/>
<stop offset="100%" stop-color="#ff00ff"/>
</linearGradient>
<!-- Filters -->
<filter id="glow" x="-20%" y="-20%" width="140%" height="140%">
<feGaussianBlur stdDeviation="5" result="blur" />
<feMerge>
<feMergeNode in="blur" />
<feMergeNode in="SourceGraphic" />
</feMerge>
</filter>
<filter id="shadowBlur" x="-20%" y="-20%" width="140%" height="140%">
<feGaussianBlur stdDeviation="8" />
</filter>
</defs>
<!-- Background Space -->
<rect width="1200" height="800" fill="url(#spaceGrad)"/>
<!-- Stars -->
<g fill="white" opacity="0.8">
<!-- Generate multiple stars -->
</g>
<!-- Earth -->
<circle cx="950" cy="250" r="180" fill="url(#earthGrad)"/>
<path d="..." fill="white" opacity="0.6"/> <!-- Continents/Clouds -->
<!-- Moon Surface -->
<path d="M0 650 Q 300 600 600 680 T 1200 620 L 1200 800 L 0 800 Z" fill="url(#moonGrad)"/>
<!-- Craters -->
<!-- Skateboard & Cat Group -->
<g transform="translate(600, 450) rotate(-15)">
<!-- Shadow -->
<ellipse cx="0" cy="150" rx="120" ry="20" fill="rgba(0,0,0,0.5)" filter="url(#shadowBlur)"/>
<!-- Skateboard -->
<g id="skateboard">
<!-- Deck -->
<path d="M-150 50 L 150 50 C 160 50 170 45 170 40 C 170 35 160 30 150 30 L -150 30 C -160 30 -170 35 -170 40 C -170 45 -160 50 -150 50 Z" fill="#ff4757"/>
<!-- Deck graphic (paw print) -->
<!-- Trucks -->
<!-- Wheels with glow -->
</g>
<!-- Cat Astronaut -->
<g id="cat-astronaut">
<!-- Tail tube -->
<!-- Backpack -->
<!-- Legs -->
<!-- Body -->
<!-- Arms -->
<!-- Helmet -->
<!-- Cat Face inside -->
</g>
</g>
</svg>
```
Let's detail the drawing parts.
1. Stars: A few circles with varying radius, some 4-point stars using path.
2. Earth: Add a soft glow.
3. Moon terrain: More craters. Ellipses with two overlapping ellipses for depth (a dark one, a lighter smaller one offset).
4. Cat: Needs to look distinctly like a cat inside the suit.
- Ears inside helmet: Two triangles poking up.
- Face: Eyes, nose, whiskers.
- Helmet: A large circle with a thick stroke, plus a glassy overlay.
5. Skateboard: Tilted, maybe some motion trails (lines from left to right).
6. Astronaut suit: White with orange stripes. Add chest control panel.
7. Low gravity effect: Add some floating dust particles around the wheels.
Refining SVG elements:
Stars:
```xml
<!-- Random stars -->
<circle cx="100" cy="150" r="2" fill="#fff" opacity="0.8"/>
<circle cx="250" cy="80" r="1.5" fill="#fff" opacity="0.5"/>
<circle cx="400" cy="220" r="2" fill="#fff" opacity="0.7"/>
...
<path d="M 300 150 L 302 153 L 305 155 L 302 157 L 300 160 L 298 157 L 295 155 L 298 153 Z" fill="#fff" opacity="0.9"/>
```
Earth:
Add continents:
```xml
<path d="M 950 70 A 180 180 0 0 0 880 130 Q 930 170 950 250 Q 1050 320 1100 280 A 180 180 0 0 0 950 70" fill="white" opacity="0.4" filter="blur(2px)"/>
```
Actually, simpler Earth:
```xml
<g transform="translate(950,250)">
<circle cx="0" cy="0" r="160" fill="url(#earthGrad)"/>
<path d="M -120 -40 Q -50 -100 20 -80 Q 80 -60 140 -20 Q 100 60 40 80 Q -60 100 -120 40 Z" fill="#2ed573" opacity="0.8"/> <!-- Africa-ish shape -->
<circle cx="0" cy="0" r="175" fill="none" stroke="#a3cbf0" stroke-width="15" opacity="0.4" filter="blur(8px)"/> <!-- Atmosphere -->
</g>
```
Moon Surface:
```xml
<path d="M0 580 Q 150 520 300 550 T 600 600 T 900 530 T 1200 580 L 1200 800 L 0 800 Z" fill="url(#moonGrad)"/>
<!-- Craters -->
<g fill="#1e1e26">
<ellipse cx="200" cy="620" rx="40" ry="15"/>
<ellipse cx="200" cy="617" rx="40" ry="15" fill="#343440"/>
<ellipse cx="450" cy="660" rx="70" ry="25"/>
<ellipse cx="450" cy="655" rx="70" ry="25" fill="#343440"/>
<ellipse cx="800" cy="600" rx="50" ry="18"/>
<ellipse cx="800" cy="597" rx="50" ry="18" fill="#343440"/>
<ellipse cx="1050" cy="650" rx="80" ry="28"/>
<ellipse cx="1050" cy="645" rx="80" ry="28" fill="#343440"/>
</g>
```
Motion lines in background:
```xml
<g stroke="rgba(255,255,255,0.1)" stroke-width="4" stroke-linecap="round">
<line x1="100" y1="450" x2="350" y2="450"/>
<line x1="800" y1="400" x2="1150" y2="400"/>
<line x1="150" y1="300" x2="250" y2="300"/>
</g>
```
Skateboard and Cat:
Place them in the center. The skateboard should be tilted.
```xml
<g transform="translate(600, 450) rotate(-12)">
<!-- Shadow -->
<ellipse cx="0" cy="140" rx="140" ry="25" fill="rgba(0,0,0,0.6)" filter="url(#shadowBlur)"/>
<!-- Skateboard -->
<g id="skateboard" transform="translate(0, 20)">
<!-- Deck -->
<rect x="-140" y="-10" width="280" height="16" rx="8" fill="#ff4757"/>
<rect x="-130" y="-10" width="260" height="8" fill="#ff6b81"/> <!-- Highlight -->
<!-- Wheels (Glowing) -->
<g id="wheels">
<!-- Back truck -->
<path d="M-90 6 L-80 20 L-70 20 L-60 6 Z" fill="#747d8c"/>
<circle cx="-85" cy="25" r="14" fill="url(#wheelGlow)" filter="url(#glow)"/>
<circle cx="-65" cy="25" r="14" fill="url(#wheelGlow)" filter="url(#glow)"/>
<!-- Front truck -->
<path d="M60 6 L70 20 L80 20 L90 6 Z" fill="#747d8c"/>
<circle cx="65" cy="25" r="14" fill="url(#wheelGlow)" filter="url(#glow)"/>
<circle cx="85" cy="25" r="14" fill="url(#wheelGlow)" filter="url(#glow)"/>
<!-- Wheel cores -->
<circle cx="-85" cy="25" r="6" fill="#fff"/>
<circle cx="-65" cy="25" r="6" fill="#fff"/>
<circle cx="65" cy="25" r="6" fill="#fff"/>
<circle cx="85" cy="25" r="6" fill="#fff"/>
</g>
</g>
<!-- Cat Astronaut -->
<g id="cat-astronaut" transform="translate(0, -10)">
<!-- Tail Tube -->
<path d="M 10 60 Q 60 90 80 40 Q 90 10 120 30" fill="none" stroke="rgba(255,255,255,0.4)" stroke-width="22" stroke-linecap="round"/>
<path d="M 10 60 Q 60 90 80 40 Q 90 10 120 30" fill="none" stroke="rgba(255,255,255,0.15)" stroke-width="22" stroke-linecap="round"/>
<!-- Actual tail inside -->
<path d="M 12 60 Q 58 85 76 42 Q 88 14 115 32" fill="none" stroke="#e67e22" stroke-width="16" stroke-linecap="round"/>
<!-- Backpack -->
<rect x="-35" y="0" width="50" height="70" rx="10" fill="#2f3542" transform="rotate(-15)"/>
<rect x="-25" y="10" width="30" height="20" rx="5" fill="#57606f" transform="rotate(-15)"/>
<circle cx="-10" cy="20" r="4" fill="#ffa502" transform="rotate(-15)"/>
<!-- Legs -->
<!-- Back leg (bent) -->
<path d="M -15 50 Q -45 60 -50 90 L -40 105" fill="none" stroke="url(#suitGrad)" stroke-width="26" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M -40 105 L -55 105 L -60 115 L -35 120 L -30 110 Z" fill="#2f3542"/> <!-- Boot -->
<!-- Front leg (extended forward) -->
<path d="M 5 55 Q 35 65 55 80 L 70 95" fill="none" stroke="url(#suitGrad)" stroke-width="26" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 70 95 L 85 85 L 95 90 L 85 105 L 65 105 Z" fill="#2f3542"/> <!-- Boot -->
<!-- Torso -->
<path d="M -20 10 Q -35 40 -20 60 Q 5 70 20 55 Q 30 30 10 10 Z" fill="url(#suitGrad)"/>
<!-- Suit details -->
<path d="M -25 30 Q 0 40 20 25" fill="none" stroke="#ff4757" stroke-width="4"/>
<rect x="-10" y="35" width="15" height="10" rx="2" fill="#3742fa"/>
<circle cx="-5" cy="40" r="2" fill="#fff"/>
<circle cx="0" cy="40" r="2" fill="#fff"/>
<!-- Collar ring -->
<ellipse cx="-5" cy="5" rx="25" ry="8" fill="#747d8c"/>
<ellipse cx="-5" cy="2" rx="22" ry="6" fill="#a4b0be"/>
<!-- Arms -->
<!-- Left Arm (stretched back) -->
<path d="M -15 20 Q -60 -10 -90 20" fill="none" stroke="url(#suitGrad)" stroke-width="20" stroke-linecap="round"/>
<circle cx="-90" cy="20" r="12" fill="#ff4757"/> <!-- Glove -->
<path d="M -90 20 Q -110 10 -115 25 Q -100 35 -90 20" fill="#2f3542"/> <!-- Glove details -->
<!-- Right Arm (stretched forward/up) -->
<path d="M 5 20 Q 50 0 80 -40" fill="none" stroke="url(#suitGrad)" stroke-width="20" stroke-linecap="round"/>
<circle cx="80" cy="-40" r="12" fill="#ff4757"/> <!-- Glove -->
<!-- Helmet -->
<circle cx="-5" cy="-40" r="45" fill="rgba(255,255,255,0.05)" stroke="#a4b0be" stroke-width="6"/>
<!-- Helmet reflection -->
<path d="M -35 -65 A 40 40 0 0 1 20 -65 A 40 40 0 0 0 -35 -25" fill="rgba(255,255,255,0.2)"/>
<!-- Antenna -->
<line x1="-40" y1="-75" x2="-55" y2="-95" stroke="#a4b0be" stroke-width="4" stroke-linecap="round"/>
<circle cx="-55" cy="-95" r="4" fill="#ff4757" filter="url(#glow)"/>
<!-- Cat Face inside Helmet -->
<!-- Ears -->
<polygon points="-25,-55 -35,-80 -15,-70" fill="#2f3542"/> <!-- Left ear -->
<polygon points="-22,-57 -30,-75 -17,-68" fill="#ff6b81"/> <!-- Inner left -->
<polygon points="5,-55 15,-80 -5,-70" fill="#2f3542"/> <!-- Right ear -->
<polygon points="2,-57 10,-75 -3,-68" fill="#ff6b81"/> <!-- Inner right -->
<!-- Head base -->
<ellipse cx="-10" cy="-45" rx="25" ry="18" fill="#333"/> <!-- Dark cat (tuxedo or black) -->
<!-- Eyes -->
<circle cx="-18" cy="-45" r="5" fill="#1e90ff"/> <!-- Blue eyes for contrast -->
<circle cx="-2" cy="-45" r="5" fill="#1e90ff"/>
<circle cx="-16" cy="-45" r="2" fill="#000"/>
<circle cx="0" cy="-45" r="2" fill="#000"/>
<!-- Eye sparkle -->
<circle cx="-17" cy="-47" r="1.5" fill="#fff"/>
<circle cx="-1" cy="-47" r="1.5" fill="#fff"/>
<!-- Nose & Mouth -->
<polygon points="-10,-38 -13,-35 -7,-35" fill="#ff6b81"/>
<path d="M -13 -35 Q -10 -30 -7 -35" fill="none" stroke="#fff" stroke-width="1.5" opacity="0.7"/>
<!-- Whiskers -->
<line x1="-25" y1="-38" x2="-35" y2="-40" stroke="#fff" stroke-width="1" opacity="0.7"/>
<line x1="-25" y1="-35" x2="-36" y2="-35" stroke="#fff" stroke-width="1" opacity="0.7"/>
<line x1="5" y1="-38" x2="15" y2="-40" stroke="#fff" stroke-width="1" opacity="0.7"/>
<line x1="5" y1="-35" x2="16" y2="-35" stroke="#fff" stroke-width="1" opacity="0.7"/>
</g>
</g>
```
Let's review the layout and coordinates.
The group `cat-astronaut` has legs extending to `y=120` (from transform `translate(0,-10)`, so effectively `y=110`).
The skateboard is at `translate(0,20)`, deck is `y=-10` to `y=6`, wheels `y=25`. Total bottom is `y=39`.
Relative to the skateboard, the cat needs to be higher up (negative Y in the un-translated group space).
Wait, if skateboard is at `y=20`, its surface is at `y=20 - 10 = 10` (deck top).
Cat's boots:
Back boot: `L -40 105`, `L -60 115`, `L -35 120`.
Front boot: `L 70 95`, `L 85 85`, `L 85 105`, `L 65 105`.
In the cat group's local space (after `translate(0,-10)`), `y=105` becomes `y=95`.
If skateboard deck top is at `y=10` globally, the cat's boots at `y=95` are way too high.
Let's align the Y coordinates carefully.
Let's remove the `translate(0,-10)` from the cat and just draw it directly.
Redo coordinates:
Center group: `translate(600, 450) rotate(-12)`
Skateboard:
Deck: `rect x="-140" y="0" width="280" height="16" rx="8" fill="#ff4757"`
Wheels: `circle cx="-85" cy="35" r="14"`
Trucks: `path d="M-90 16 L-80 30 L-70 30 L-60 16 Z"`
Cat Astronaut (needs to sit on the board at `y=0` or slightly above):
Let's shift Cat group `translate(0, -120)`. So the cat's `y=120` local becomes `y=0` global.
Let's map Cat coordinates with local `y` around 100 for feet:
Back boot: `L -40 105` (global `y = -120 + 105 = -15`, close to board top `0`).
Wait, `rotate(-12)` means global coordinates are tilted. If we draw the cat relative to the skateboard in the same tilted group, it's perfect.
So skateboard deck top is at `y=0`.
Boots should be around `y=0` to `y=10`.
Let's set boots:
Back leg `M -15 50 Q -45 60 -50 90 L -40 100`
Boot path: `M -40 100 L -55 100 L -60 110 L -35 110 L -30 100 Z`
Front leg `M 5 55 Q 35 65 55 80 L 70 95`
Boot path: `M 70 95 L 85 85 L 95 90 L 85 100 L 65 100 Z`
Torso: `y=10` to `y=60`.
Head: `y=-40`.
So total height is about `150`. This fits nicely on the skateboard!
Let's add some floating space dust around the board to emphasize low gravity:
```xml
<g fill="#fff" opacity="0.5">
<circle cx="-50" cy="30" r="2" />
<circle cx="-20" cy="40" r="1.5" />
<circle cx="10" cy="35" r="2" />
<circle cx="40" cy="45" r="1" />
<circle cx="60" cy="25" r="2.5" />
<!-- Add a blur filter to dust -->
</g>
```
Let's enhance the background and overall composition.
Instead of just a generic moon, let's make it look more sci-fi: neon grid lines or futuristic structures? No, the prompt just says "astronaut cat skateboarding on the moon", keep it focused on the cat and skateboard.
I will use a clean, vibrant, stylized cartoon illustration.
Let's refine the colors.
- Cat: dark gray/black suit, white helmet.
- Skateboard: bright red/orange, with neon blue/pink glowing wheels.
- Background: Deep purple to black space, bright white stars, Earth with vivid blue and green, Moon terrain with gray tones and dark craters.
To ensure "Something meaningful is visible on first paint" and the iframe renders properly:
The SVG must contain `xmlns="http://www.w3.org/2000/svg"`.
A viewBox of `0 0 1200 800` is good.
The code must have no console errors.
Let's build out the SVG structure carefully:
```xml
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 800" width="100%" height="100%">
<defs>
<!-- Background gradients -->
<linearGradient id="spaceGrad" x1="0" y1="0" x2="0" y2="1">
<stop offset="0%" stop-color="#030214"/>
<stop offset="50%" stop-color="#0a0a2a"/>
<stop offset="100%" stop-color="#150c26"/>
</linearGradient>
<linearGradient id="moonGrad" x1="0" y1="0" x2="0" y2="1">
<stop offset="0%" stop-color="#3a3a4a"/>
<stop offset="100%" stop-color="#1b1b24"/>
</linearGradient>
<linearGradient id="earthGrad" x1="0" y1="0" x2="1" y2="1">
<stop offset="0%" stop-color="#00c6ff"/>
<stop offset="50%" stop-color="#0072ff"/>
<stop offset="100%" stop-color="#2b1055"/>
</linearGradient>
<!-- Object gradients -->
<radialGradient id="suitGrad" cx="40%" cy="40%" r="60%">
<stop offset="0%" stop-color="#ffffff"/>
<stop offset="80%" stop-color="#e0e0e0"/>
<stop offset="100%" stop-color="#b0b0b0"/>
</radialGradient>
<linearGradient id="boardGrad" x1="0" y1="0" x2="0" y2="1">
<stop offset="0%" stop-color="#ff3f65"/>
<stop offset="100%" stop-color="#d91a43"/>
</linearGradient>
<linearGradient id="wheelGlow" x1="0" y1="0" x2="0" y2="1">
<stop offset="0%" stop-color="#00ffff"/>
<stop offset="100%" stop-color="#ff00ff"/>
</linearGradient>
<linearGradient id="helmetGlass" x1="0" y1="0" x2="1" y2="1">
<stop offset="0%" stop-color="rgba(135, 206, 235, 0.6)"/>
<stop offset="50%" stop-color="rgba(135, 206, 235, 0.1)"/>
<stop offset="100%" stop-color="rgba(135, 206, 235, 0.4)"/>
</linearGradient>
<!-- Filters -->
<filter id="glow" x="-50%" y="-50%" width="200%" height="200%">
<feGaussianBlur stdDeviation="6" result="blur" />
<feMerge>
<feMergeNode in="blur" />
<feMergeNode in="SourceGraphic" />
</feMerge>
</filter>
<filter id="softBlur" x="-20%" y="-20%" width="140%" height="140%">
<feGaussianBlur stdDeviation="4" />
</filter>
<filter id="shadowBlur" x="-30%" y="-30%" width="160%" height="160%">
<feGaussianBlur stdDeviation="8" />
</filter>
<filter id="dustBlur" x="-50%" y="-50%" width="200%" height="200%">
<feGaussianBlur stdDeviation="2" />
</filter>
</defs>
<!-- Space -->
<rect width="1200" height="800" fill="url(#spaceGrad)"/>
<!-- Stars -->
<g fill="#ffffff">
<!-- Large stars -->
<circle cx="150" cy="200" r="2.5" opacity="0.9"/>
<circle cx="850" cy="120" r="3" opacity="0.8" filter="url(#glow)"/>
<circle cx="1050" cy="450" r="2" opacity="0.7"/>
<circle cx="250" cy="550" r="2.5" opacity="0.6"/>
<!-- 4-point stars -->
<path d="M 400 150 L 403 155 L 408 158 L 403 161 L 400 166 L 397 161 L 392 158 L 397 155 Z" opacity="0.8"/>
<path d="M 750 280 L 753 286 L 759 289 L 753 292 L 750 298 L 747 292 L 741 289 L 747 286 Z" opacity="0.9" filter="url(#glow)"/>
<path d="M 1100 180 L 1102 185 L 1107 187 L 1102 189 L 1100 194 L 1098 189 L 1093 187 L 1098 185 Z" opacity="0.7"/>
<!-- Small dots -->
<circle cx="80" cy="80" r="1.5" opacity="0.5"/>
<circle cx="220" cy="120" r="1" opacity="0.6"/>
<circle cx="320" cy="60" r="2" opacity="0.4"/>
<circle cx="480" cy="90" r="1.5" opacity="0.8"/>
<circle cx="600" cy="150" r="1" opacity="0.5"/>
<circle cx="720" cy="100" r="2" opacity="0.7"/>
<circle cx="920" cy="180" r="1.5" opacity="0.6"/>
<circle cx="1150" cy="100" r="1" opacity="0.9"/>
<circle cx="180" cy="350" r="1.5" opacity="0.5"/>
<circle cx="300" cy="400" r="1" opacity="0.7"/>
<circle cx="550" cy="320" r="2" opacity="0.4"/>
<circle cx="800" cy="380" r="1.5" opacity="0.8"/>
<circle cx="1000" cy="350" r="1" opacity="0.6"/>
<circle cx="50" cy="500" r="2" opacity="0.5"/>
<circle cx="400" cy="520" r="1.5" opacity="0.7"/>
<circle cx="700" cy="550" r="1" opacity="0.4"/>
<circle cx="950" cy="580" r="2" opacity="0.6"/>
<circle cx="1100" cy="550" r="1.5" opacity="0.8"/>
</g>
<!-- Earth -->
<g transform="translate(950, 220)">
<!-- Atmosphere Glow -->
<circle cx="0" cy="0" r="160" fill="none" stroke="#a3cbf0" stroke-width="20" opacity="0.4" filter="url(#softBlur)"/>
<circle cx="0" cy="0" r="170" fill="none" stroke="#00c6ff" stroke-width="10" opacity="0.2" filter="url(#glow)"/>
<!-- Planet Base -->
<circle cx="0" cy="0" r="150" fill="url(#earthGrad)"/>
<!-- Continents -->
<path d="M -80 -120 Q -40 -140 10 -110 Q 60 -80 80 -20 Q 100 40 60 90 Q 10 130 -50 110 Q -110 80 -130 20 Q -120 -50 -80 -120" fill="#2ed573" opacity="0.85" filter="url(#softBlur)"/>
<path d="M -80 -120 Q -40 -140 10 -110 Q 60 -80 80 -20 Q 100 40 60 90 Q 10 130 -50 110 Q -110 80 -130 20 Q -120 -50 -80 -120" fill="#7bed9f" opacity="0.6"/>
<!-- Clouds -->
<path d="M -120 -60 Q -60 -80 0 -40 Q 60 -10 100 20 Q 120 50 80 80 Q 0 100 -60 60 Q -100 20 -120 -60" fill="#ffffff" opacity="0.7" filter="url(#softBlur)"/>
<path d="M 20 -120 Q 80 -140 120 -80 Q 140 -20 100 20" fill="none" stroke="#ffffff" stroke-width="15" opacity="0.5" stroke-linecap="round" filter="url(#softBlur)"/>
<!-- Shading / Terminator -->
<path d="M 0 -150 A 150 150 0 0 1 150 0 A 150 150 0 0 1 0 150 A 150 150 0 0 0 -150 0 A 150 150 0 0 0 0 -150" fill="rgba(0,0,0,0.4)"/>
<path d="M 0 -150 A 150 150 0 0 1 150 0 A 150 150 0 0 1 0 150 Z" fill="rgba(0,0,0,0.6)"/>
</g>
<!-- Moon Surface -->
<path d="M0 620 Q 200 580 400 650 T 800 600 T 1200 680 L 1200 800 L 0 800 Z" fill="url(#moonGrad)"/>
<!-- Terrain Details / Craters -->
<g opacity="0.8">
<!-- Big crater -->
<ellipse cx="250" cy="700" rx="60" ry="20" fill="#14141c"/>
<ellipse cx="250" cy="695" rx="60" ry="20" fill="#2a2a38"/>
<!-- Medium crater -->
<ellipse cx="550" cy="660" rx="35" ry="12" fill="#14141c"/>
<ellipse cx="550" cy="657" rx="35" ry="12" fill="#2a2a38"/>
<!-- Far right crater -->
<ellipse cx="950" cy="730" rx="80" ry="25" fill="#14141c"/>
<ellipse cx="950" cy="723" rx="80" ry="25" fill="#2a2a38"/>
<!-- Small craters -->
<ellipse cx="100" cy="660" rx="15" ry="5" fill="#14141c"/>
<ellipse cx="100" cy="658" rx="15" ry="5" fill="#2a2a38"/>
<ellipse cx="750" cy="640" rx="20" ry="6" fill="#14141c"/>
<ellipse cx="750" cy="638" rx="20" ry="6" fill="#2a2a38"/>
<ellipse cx="1100" cy="650" rx="25" ry="8" fill="#14141c"/>
<ellipse cx="1100" cy="647" rx="25" ry="8" fill="#2a2a38"/>
<!-- Rocks -->
<path d="M 180 640 L 190 630 L 205 635 L 210 645 L 195 650 Z" fill="#1f1f29"/>
<path d="M 180 640 L 190 630 L 205 635 L 195 645 Z" fill="#343445"/>
<path d="M 650 680 L 665 670 L 680 680 L 670 695 Z" fill="#1f1f29"/>
<path d="M 650 680 L 665 670 L 680 680 L 665 685 Z" fill="#343445"/>
</g>
<!-- Skateboard and Cat Group -->
<g transform="translate(600, 480) rotate(-12)">
<!-- Shadow -->
<ellipse cx="0" cy="120" rx="130" ry="25" fill="rgba(0,0,0,0.6)" filter="url(#shadowBlur)"/>
<!-- Floating Dust / Debris -->
<g fill="#ffffff" opacity="0.6" filter="url(#dustBlur)">
<circle cx="-80" cy="40" r="2.5" />
<circle cx="-50" cy="60" r="1.5" />
<circle cx="-20" cy="35" r="3" />
<circle cx="10" cy="70" r="2" />
<circle cx="40" cy="45" r="1.5" />
<circle cx="70" cy="65" r="2.5" />
<circle cx="100" cy="30" r="2" />
</g>
<!-- Skateboard -->
<g id="skateboard">
<!-- Deck -->
<rect x="-130" y="0" width="260" height="14" rx="7" fill="url(#boardGrad)"/>
<rect x="-120" y="0" width="240" height="4" rx="2" fill="#ff768e"/>
<rect x="-120" y="10" width="240" height="4" rx="2" fill="rgba(0,0,0,0.3)"/>
<!-- Grip Tape / Paws -->
<g fill="#111" opacity="0.8">
<circle cx="-60" cy="2" r="2"/>
<circle cx="-65" cy="-2" r="2"/>
<circle cx="-55" cy="-2" r="2"/>
<path d="M -60 -2 L -60 2"/>
<line x1="-65" y1="-2" x2="-65" y2="2"/>
<line x1="-55" y1="-2" x2="-55" y2="2"/>
<circle cx="60" cy="2" r="2"/>
<circle cx="65" cy="-2" r="2"/>
<circle cx="55" cy="-2" r="2"/>
<line x1="60" y1="-2" x2="60" y2="2"/>
<line x1="65" y1="-2" x2="65" y2="2"/>
<line x1="55" y1="-2" x2="55" y2="2"/>
</g>
<!-- Wheels and Trucks -->
<!-- Back -->
<path d="M-90 14 L-80 28 L-70 28 L-60 14 Z" fill="#747d8c"/>
<path d="M-90 14 L-80 28 L-70 28 L-60 14 Z" fill="none" stroke="#374151" stroke-width="2"/>
<circle cx="-85" cy="28" r="14" fill="url(#wheelGlow)" filter="url(#glow)"/>
<circle cx="-65" cy="28" r="14" fill="url(#wheelGlow)" filter="url(#glow)"/>
<circle cx="-85" cy="28" r="7" fill="#fff" opacity="0.9"/>
<circle cx="-65" cy="28" r="7" fill="#fff" opacity="0.9"/>
<circle cx="-85" cy="28" r="3" fill="#57606f"/>
<circle cx="-65" cy="28" r="3" fill="#57606f"/>
<!-- Front -->
<path d="M60 14 L70 28 L80 28 L90 14 Z" fill="#747d8c"/>
<path d="M60 14 L70 28 L80 28 L90 14 Z" fill="none" stroke="#374151" stroke-width="2"/>
<circle cx="65" cy="28" r="14" fill="url(#wheelGlow)" filter="url(#glow)"/>
<circle cx="85" cy="28" r="14" fill="url(#wheelGlow)" filter="url(#glow)"/>
<circle cx="65" cy="28" r="7" fill="#fff" opacity="0.9"/>
<circle cx="85" cy="28" r="7" fill="#fff" opacity="0.9"/>
<circle cx="65" cy="28" r="3" fill="#57606f"/>
<circle cx="85" cy="28" r="3" fill="#57606f"/>
</g>
<!-- Cat Astronaut -->
<g id="cat-astronaut">
<!-- Tail inside a clear tube -->
<path d="M 15 40 Q 60 70 80 20 Q 95 -15 130 5" fill="none" stroke="rgba(255,255,255,0.3)" stroke-width="24" stroke-linecap="round"/>
<path d="M 15 40 Q 60 70 80 20 Q 95 -15 130 5" fill="none" stroke="rgba(255,255,255,0.1)" stroke-width="24" stroke-linecap="round"/>
<!-- Tail inside -->
<path d="M 15 40 Q 58 66 76 22 Q 90 -10 122 3" fill="none" stroke="#3742fa" stroke-width="14" stroke-linecap="round"/>
<!-- Backpack -->
<rect x="-45" y="-15" width="45" height="60" rx="8" fill="#2f3542" transform="rotate(-10)"/>
<rect x="-35" y="-5" width="25" height="15" rx="3" fill="#57606f" transform="rotate(-10)"/>
<circle cx="-22" cy="2" r="3" fill="#ffa502" filter="url(#glow)" transform="rotate(-10)"/>
<rect x="-35" y="25" width="25" height="10" rx="2" fill="#747d8c" transform="rotate(-10)"/>
<!-- Legs -->
<!-- Left / Back Leg -->
<path d="M -15 35 Q -40 45 -50 75 L -40 95" fill="none" stroke="url(#suitGrad)" stroke-width="24" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M -40 95 L -55 95 L -60 110 L -30 110 L -25 100 Z" fill="#2f3542"/>
<!-- Boot highlights -->
<path d="M -55 95 L -40 95 L -30 110 L -45 110 Z" fill="rgba(255,255,255,0.2)"/>
<!-- Right / Front Leg -->
<path d="M 5 40 Q 30 50 50 65 L 65 85" fill="none" stroke="url(#suitGrad)" stroke-width="24" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 65 85 L 85 75 L 95 85 L 80 100 L 60 100 Z" fill="#2f3542"/>
<!-- Boot highlights -->
<path d="M 65 85 L 85 75 L 95 85 L 75 95 Z" fill="rgba(255,255,255,0.2)"/>
<!-- Torso -->
<path d="M -20 -5 Q -35 25 -15 45 Q 10 50 20 35 Q 25 10 10 -10 Z" fill="url(#suitGrad)"/>
<!-- Suit stripes -->
<path d="M -25 15 Q 0 25 20 10" fill="none" stroke="#ff4757" stroke-width="4"/>
<path d="M -20 20 Q 0 30 22 15" fill="none" stroke="#3742fa" stroke-width="4"/>
<!-- Chest Control Panel -->
<rect x="-10" y="5" width="20" height="12" rx="2" fill="#2f3542"/>
<circle cx="-5" cy="11" r="2" fill="#1e90ff"/>
<circle cx="5" cy="11" r="2" fill="#ff4757"/>
<line x1="-8" y1="11" x2="-2" y2="11" stroke="#fff" stroke-width="1"/>
<!-- Collar Ring -->
<ellipse cx="-5" cy="-12" rx="22" ry="7" fill="#747d8c"/>
<ellipse cx="-5" cy="-14" rx="19" ry="5" fill="#a4b0be"/>
<!-- Arms -->
<!-- Back / Left Arm -->
<path d="M -15 10 Q -60 -10 -90 30" fill="none" stroke="url(#suitGrad)" stroke-width="20" stroke-linecap="round"/>
<circle cx="-90" cy="30" r="11" fill="#ff4757"/> <!-- Glove -->
<path d="M -90 30 Q -110 20 -115 35 Q -100 45 -90 30" fill="#2f3542"/> <!-- Fingers/paws -->
<!-- Front / Right Arm -->
<path d="M 10 10 Q 50 0 80 -40" fill="none" stroke="url(#suitGrad)" stroke-width="20" stroke-linecap="round"/>
<circle cx="80" cy="-40" r="11" fill="#ff4757"/> <!-- Glove -->
<path d="M 80 -40 Q 100 -50 110 -35 Q 90 -25 80 -40" fill="#2f3542"/> <!-- Fingers/paws -->
<!-- Helmet -->
<!-- Outer Ring -->
<circle cx="-5" cy="-65" r="45" fill="none" stroke="#a4b0be" stroke-width="4"/>
<!-- Glass -->
<circle cx="-5" cy="-65" r="45" fill="url(#helmetGlass)"/>
<circle cx="-5" cy="-65" r="45" fill="rgba(255,255,255,0.1)" filter="url(#glow)"/>
<!-- Cat Face inside Helmet -->
<g transform="translate(-10, -15)">
<!-- Ears -->
<polygon points="-15,-40 -25,-65 -5,-55" fill="#2f3542"/>
<polygon points="-12,-42 -22,-60 -6,-54" fill="#ff6b81"/>
<polygon points="15,-40 25,-65 5,-55" fill="#2f3542"/>
<polygon points="12,-42 22,-60 6,-54" fill="#ff6b81"/>
<!-- Head base -->
<circle cx="0" cy="-35" r="22" fill="#333"/> <!-- Make it a dark grey cat -->
<!-- Eyes (bright and reflective) -->
<ellipse cx="-8" cy="-35" rx="6" ry="7" fill="#a3cbf0"/>
<ellipse cx="8" cy="-35" rx="6" ry="7" fill="#a3cbf0"/>
<ellipse cx="-8" cy="-35" rx="3" ry="5" fill="#111"/>
<ellipse cx="8" cy="-35" rx="3" ry="5" fill="#111"/>
<circle cx="-9" cy="-37" r="2" fill="#fff"/>
<circle cx="7" cy="-37" r="2" fill="#fff"/>
<!-- Nose -->
<polygon points="0,-25 -4,-30 4,-30" fill="#ff6b81"/>
<!-- Whiskers -->
<line x1="-15" y1="-28" x2="-30" y2="-30" stroke="#fff" stroke-width="1.5" opacity="0.8" stroke-linecap="round"/>
<line x1="-15" y1="-25" x2="-32" y2="-25" stroke="#fff" stroke-width="1.5" opacity="0.8" stroke-linecap="round"/>
<line x1="-15" y1="-22" x2="-30" y2="-20" stroke="#fff" stroke-width="1.5" opacity="0.8" stroke-linecap="round"/>
<line x1="15" y1="-28" x2="30" y2="-30" stroke="#fff" stroke-width="1.5" opacity="0.8" stroke-linecap="round"/>
<line x1="15" y1="-25" x2="32" y2="-25" stroke="#fff" stroke-width="1.5" opacity="0.8" stroke-linecap="round"/>
<line x1="15" y1="-22" x2="30" y2="-20" stroke="#fff" stroke-width="1.5" opacity="0.8" stroke-linecap="round"/>
</g>
<!-- Helmet Reflection -->
<path d="M -40 -85 A 35 35 0 0 1 10 -95 A 40 40 0 0 0 -45 -40 Z" fill="rgba(255,255,255,0.4)" filter="blur(2px)"/>
<path d="M 20 -45 A 40 40 0 0 0 35 -60 A 45 45 0 0 1 25 -40 Z" fill="rgba(255,255,255,0.3)" filter="blur(1px)"/>
<!-- Antenna -->
<line x1="-40" y1="-95" x2="-55" y2="-115" stroke="#747d8c" stroke-width="3" stroke-linecap="round"/>
<circle cx="-55" cy="-115" r="4" fill="#ff4757" filter="url(#glow)"/>
</g>
</g>
</svg>
```
Double check constraints:
- No horizontal scrollbar on the iframe: SVG `width="100%" height="100%"` inside `<html><body>` with zero margins is safer, but the prompt says ````html` or ````svg`. If I return just ` ```svg `, the iframe automatically wraps it. To ensure zero scrollbar, I should output a valid `<!DOCTYPE html>` with `<html><body style="margin:0;overflow:hidden">...svg...</body></html>`? Wait, "exactly ONE fenced code block containing the complete file: ```html (or ```svg when the task asks for an SVG)".
I will wrap it as an HTML file to explicitly control body margin and overflow.
Actually, if I just output `<svg>` without `<html>`, the sandbox wraps it. If it wraps, default body margin might exist, leading to a scrollbar. To be safe and comply with `html` option: I'll wrap the SVG in a standard minimal HTML document with `body { margin: 0; overflow: hidden; background: #000; }`. This guarantees no scrollbar and perfect fit.
Wait, the prompt allows either. Let's use `html` format so I can enforce margin:0 and background color.
Let's refine the HTML wrapper:
```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>
body, html {
margin: 0;
padding: 0;
width: 100%;
height: 100%;
overflow: hidden;
background-color: #030214;
}
svg {
display: block;
width: 100%;
height: 100%;
}
</style>
</head>
<body>
<svg ...>
...
</svg>
</body>
</html>
```
Let's check the cat proportions. The tail path inside tube looks nice. The floating dust is a neat touch for lunar surface gravity. Neon skateboard wheels look distinctively "in space". The Earth background grounds the setting visually.
Is the cat's suit readable as an astronaut suit? Yes: helmet with glass reflection, white bulky suit, backpack, chest control panel, collar rings, boots and gloves with orange/blue accents.
Does the cat look like a cat? Ears inside helmet, dark cat head, glowing eyes, pink nose, white whiskers. Excellent.
Skateboarding pose? Legs bent to absorb landing, arms spread, tilted board. Shadow under board shows height. Motion lines/dust emphasize the action.
Self-running demo? A static, highly-detailed animated scene might not be required unless it's a "game" but this is an SVG illustration task. I can add a simple CSS/SVG animation to make it "in action" as a bonus, but since it is "a self-contained web demo" and "games must start...", this is an SVG, not a game. An animated SVG will make it "look right" and "visible within first seconds".
Let's add subtle CSS animations to the skateboard group to simulate hovering and floating!
CSS Animation:
```css
@keyframes hover {
0%, 100% { transform: translate(600px, 480px) rotate(-12deg); }
50% { transform: translate(600px, 460px) rotate(-10deg); }
}
.hover-group {
animation: hover 2.5s ease-in-out infinite;
}
@keyframes dust-float {
0% { transform: translateY(0) translateX(0); opacity: 0.6; }
50% { transform: translateY(-5px) translateX(-5px); opacity: 0.3; }
100% { transform: translateY(0) translateX(0); opacity: 0.6; }
}
.dust {
animation: dust-float 2s ease-in-out infinite;
}
```
Applying classes:
```xml
<g class="hover-group" transform="translate(600, 480) rotate(-12)">
...
</g>
```
And apply `.dust` to the floating particles.
For the hover animation, the shadow needs to scale up and down!
```xml
<!-- Shadow -->
<ellipse class="shadow" cx="0" cy="120" rx="130" ry="25" fill="rgba(0,0,0,0.6)" filter="url(#shadowBlur)"/>
```
```css
@keyframes shadow-pulse {
0%, 100% { transform: scale(1); opacity: 0.6; }
50% { transform: scale(0.8); opacity: 0.4; }
}
.shadow {
animation: shadow-pulse 2.5s ease-in-out infinite;
transform-origin: center;
}
```
This is a great addition to satisfy "something meaningful visible within the first seconds" — a dynamic hovering scene.
One correction: the transform in the hover keyframes uses `translate(600px, 480px)`. In SVG, if I use `transform` attribute and CSS animation, they might conflict. Better to put the positioning on a parent `<g>` and the animation on a child `<g>`.
```xml
<!-- Skateboard and Cat Group -->
<g transform="translate(600, 480) rotate(-12)">
<!-- Shadow -->
<ellipse class="shadow" cx="0" cy="120" rx="130" ry="25" fill="rgba(0,0,0,0.6)" filter="url(#shadowBlur)"/>
<!-- Floating Dust / Debris -->
<g class="dust">
<circle cx="-80" cy="40" r="2.5" fill="#ffffff" opacity="0.6" filter="url(#dustBlur)" />
<circle cx="-50" cy="60" r="1.5" fill="#ffffff" opacity="0.6" filter="url(#dustBlur)" />
<circle cx="-20" cy="35" r="3" fill="#ffffff" opacity="0.6" filter="url(#dustBlur)" />
<circle cx="10" cy="70" r="2" fill="#ffffff" opacity="0.6" filter="url(#dustBlur)" />
<circle cx="40" cy="45" r="1.5" fill="#ffffff" opacity="0.6" filter="url(#dustBlur)" />
<circle cx="70" cy="65" r="2.5" fill="#ffffff" opacity="0.6" filter="url(#dustBlur)" />
<circle cx="100" cy="30" r="2" fill="#ffffff" opacity="0.6" filter="url(#dustBlur)" />
</g>
<!-- Hovering Board and Cat -->
<g class="hover-board">
<!-- Skateboard -->
<g id="skateboard">
...
```
CSS updates:
```css
@keyframes hover {
0%, 100% { transform: translateY(0); }
50% { transform: translateY(-25px); }
}
.hover-board {
animation: hover 2.5s ease-in-out infinite;
}
@keyframes shadow-pulse {
0%, 100% { transform: scale(1); opacity: 0.6; }
50% { transform: scale(0.7); opacity: 0.3; }
}
.shadow {
animation: shadow-pulse 2.5s ease-in-out infinite;
transform-origin: 0 120px;
}
@keyframes dust-float {
0%, 100% { transform: translate(0, 0); opacity: 0.6; }
50% { transform: translate(-5px, -10px); opacity: 0.2; }
}
.dust {
animation: dust-float 2s ease-in-out infinite;
}
```
This CSS transform will be relative to the local coordinate system after the outer `translate(600, 480) rotate(-12)`.
When using CSS transforms in SVG, it is best to avoid conflicts. The transform origin is important:
`.shadow { transform-origin: 0px 120px; }` (using SVG coords).
Let's double check `transform-origin` in SVG CSS. Modern browsers support CSS `transform-origin` with `fill-box` or explicit pixel values in local coordinate.
```css
.shadow {
animation: shadow-pulse 2.5s ease-in-out infinite;
transform-box: fill-box;
transform-origin: center;
}
.hover-board {
animation: hover 2.5s ease-in-out infinite;
transform-box: fill-box;
transform-origin: center;
}
```
Actually, using CSS transforms on SVG groups is standard. To make it simpler, no need to overcomplicate origin. A translate animation is perfectly fine without origin. Scale needs origin.
To safely scale without transform-origin bugs, I could animate SVG path attributes? No, CSS is much easier and widely supported in modern Chrome. `transform-box: fill-box; transform-origin: center;` is the safest cross-browser approach for CSS scaling inside SVG.
Let's check if there are any errors in my paths.
Tail path: `M 15 40 Q 60 70 80 20 Q 95 -15 130 5` -> works.
Grip tape lines: `line x1="-65" y1="-2" x2="-65" y2="2"` -> wait, if `rect` is at `y=0`, the grip tape line goes `y=-2` to `y=2` which might stick out of the board!
The board deck is `rect y="0" height="14"`. Top edge is `y=0`. Lines from `-2` to `2` stick out by `-2`.
Change lines to `y1="2"` `y2="6"` (inside the deck). Circles also `cy="5"` `cy="3"`.
Let's adjust grip tape positions:
```xml
<circle cx="-60" cy="5" r="2"/>
<circle cx="-65" cy="3" r="2"/>
<circle cx="-55" cy="3" r="2"/>
<line x1="-60" y1="3" x2="-60" y2="7"/>
<line x1="-65" y1="3" x2="-65" y2="7"/>
<line x1="-55" y1="3" x2="-55" y2="7"/>
```
Wait, the circle coordinates are `cy="5"` and `cy="3"`, but board rect is `y=0` to `14`, rx=7. The curve makes edges tighter. Better to position grip marks around `x=-40` to `x=40` or just `cx=-60`, `cy=7` (the middle) so they don't cross the border radius.
Let's change `cy` to `7`.
```xml
<circle cx="-60" cy="7" r="2"/>
<circle cx="-65" cy="5" r="2"/>
<circle cx="-55" cy="5" r="2"/>
<line x1="-60" y1="5" x2="-60" y2="9"/>
<line x1="-65" y1="5" x2="-65" y2="9"/>
<line x1="-55" y1="5" x2="-55" y2="9"/>
```
Front paws:
```xml
<circle cx="60" cy="7" r="2"/>
<circle cx="65" cy="5" r="2"/>
<circle cx="55" cy="5" r="2"/>
<line x1="60" y1="5" x2="60" y2="9"/>
<line x1="65" y1="5" x2="65" y2="9"/>
<line x1="55" y1="5" x2="55" y2="9"/>
```
Helmet Face inside:
The face is centered at `(-10, -15)`. The ear coordinates in local space: `-15,-40` to `-25,-65`. Relative to face `cx=0, cy=-35`, ears should be on top of head, so `y=-50` to `-65`.
Let's reposition the head face.
```xml
<g transform="translate(0, -10)">
<!-- Ears -->
<polygon points="-12,-45 -22,-65 -4,-55" fill="#2f3542"/>
...
<polygon points="12,-45 22,-65 4,-55" fill="#2f3542"/>
...
<!-- Head base -->
<circle cx="0" cy="-45" r="22" fill="#333"/>
<!-- Eyes -->
<ellipse cx="-8" cy="-45" rx="6" ry="7" fill="#a3cbf0"/>
<ellipse cx="8" cy="-45" rx="6" ry="7" fill="#a3cbf0"/>
<ellipse cx="-8" cy="-45" rx="3" ry="5" fill="#111"/>
<ellipse cx="8" cy="-45" rx="3" ry="5" fill="#111"/>
<circle cx="-9" cy="-47" r="2" fill="#fff"/>
<circle cx="7" cy="-47" r="2" fill="#fff"/>
<!-- Nose -->
<polygon points="0,-35 -4,-40 4,-40" fill="#ff6b81"/>
<!-- Whiskers -->
<line x1="-15" y1="-38" x2="-30" y2="-40" stroke="#fff" stroke-width="1.5" opacity="0.8" stroke-linecap="round"/>
<line x1="-15" y1="-35" x2="-32" y2="-35" stroke="#fff" stroke-width="1.5" opacity="0.8" stroke-linecap="round"/>
<line x1="-15" y1="-32" x2="-30" y2="-30" stroke="#fff" stroke-width="1.5" opacity="0.8" stroke-linecap="round"/>
<line x1="15" y1="-38" x2="30" y2="-40" stroke="#fff" stroke-width="1.5" opacity="0.8" stroke-linecap="round"/>
<line x1="15" y1="-35" x2="32" y2="-35" stroke="#fff" stroke-width="1.5" opacity="0.8" stroke-linecap="round"/>
<line x1="15" y1="-32" x2="30" y2="-30" stroke="#fff" stroke-width="1.5" opacity="0.8" stroke-linecap="round"/>
</g>
```
Since the head center `cx="-5" cy="-65" r="45"`, and the face transform is `translate(0, -10)`, the head circle inside is at `cy = -45 -10 = -55`.
Radius 45 covers `y=-110` to `-20`. So head `cy=-55 r=22` is perfectly centered.
Antenna:
The helmet is a circle `cx="-5" cy="-65" r="45"`.
The antenna should start on the edge and point up/right or up/left.
```xml
<!-- Antenna -->
<line x1="-35" y1="-105" x2="-50" y2="-125" stroke="#747d8c" stroke-width="3" stroke-linecap="round"/>
<circle cx="-50" cy="-125" r="4" fill="#ff4757" filter="url(#glow)"/>
```
If `x1=-35, y1=-105` is near the top left edge of helmet:
Distance from center (-5,-65):
dx = -30, dy = -40. Radius = sqrt(900+1600) = 50.
Wait, helmet radius is 45. So `dx=-30, dy=-35` (dist 46).
Let's just position line properly:
```xml
<line x1="-25" y1="-100" x2="-45" y2="-120" stroke="#747d8c" stroke-width="3" stroke-linecap="round"/>
<circle cx="-45" cy="-120" r="4" fill="#ff4757" filter="url(#glow)"/>
```
Distance of start point: cx=-5, cy=-65. dx=-20, dy=-35. r=sqrt(400+1225)=40.3. Good.
End point distance: dx=-40, dy=-55. r=sqrt(1600+3025)=68. Good.
Let's review the boot path and leg lines:
Back Leg: `M -15 35 Q -40 45 -50 75 L -40 95`
Back Boot: `M -40 95 L -55 95 L -60 110 L -30 110 L -25 100 Z`
Wait, `L -40 95` connects line to boot. The boot looks like a flat shoe.
Let's make it look more like an astronaut boot.
```xml
<!-- Back Boot -->
<path d="M -45 85 L -25 95 L -25 115 L -60 115 C -65 105 -65 95 -45 85 Z" fill="#2f3542"/>
```
Front Boot:
```xml
<!-- Front Boot -->
<path d="M 60 75 L 75 65 L 95 85 L 80 100 C 70 95 60 90 60 75 Z" fill="#2f3542"/>
```
Legs need to connect to these boots.
Back Leg stroke ends at `-45 85`.
Front Leg stroke ends at `60 75`.
```xml
<!-- Left / Back Leg -->
<path d="M -15 35 Q -40 45 -45 85" fill="none" stroke="url(#suitGrad)" stroke-width="24" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M -45 85 L -25 95 L -25 115 L -60 115 C -65 105 -65 95 -45 85 Z" fill="#2f3542"/>
<path d="M -45 85 L -25 95 L -25 105 L -50 105 Z" fill="rgba(255,255,255,0.2)"/>
<!-- Right / Front Leg -->
<path d="M 5 40 Q 30 50 60 75" fill="none" stroke="url(#suitGrad)" stroke-width="24" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 60 75 L 75 65 L 95 85 L 80 100 C 70 95 60 90 60 75 Z" fill="#2f3542"/>
<path d="M 60 75 L 75 65 L 85 75 L 70 85 Z" fill="rgba(255,255,255,0.2)"/>
```
This looks way more natural.
The arms:
```xml
<!-- Back / Left Arm -->
<path d="M -15 10 Q -60 -10 -90 30" fill="none" stroke="url(#suitGrad)" stroke-width="20" stroke-linecap="round"/>
<!-- Front / Right Arm -->
<path d="M 10 10 Q 50 0 80 -40" fill="none" stroke="url(#suitGrad)" stroke-width="20" stroke-linecap="round"/>
```
Arms connect at `y=10`. Shoulders look natural.
Torso connection:
Torso uses path `M -20 -5 Q -35 25 -15 45 Q 10 50 20 35 Q 25 10 10 -10 Z`.
Wait, if back leg connects at `y=35` and front leg at `y=40`, and torso ends at `y=50`, there is a good overlap, and the stroke ends will be rounded nicely inside the torso path (the suit has a bulky look). The torso is drawn BEFORE the legs, so legs overlap the torso, which is also good. Actually, in the code, the legs are drawn BEFORE the torso!
If legs drawn before torso:
The legs should overlap the torso bottom? No, space suit pants go *into* the top section. Let's draw legs first, then torso overlaps.
Yes, code has legs first, then torso. Perfect.
What about backpack? It goes behind torso.
Code order: Tail, Backpack, Legs, Torso, Collar, Arms, Helmet.
Wait, arms should be drawn after torso, yes, but front arm should be on top. Back arm behind torso?
For simplicity, drawing both arms after torso is fine, with different z-order? I just drew arms after torso. They will sit on top of the torso, which is fine. To be perfectly correct:
Order: Tail, Backpack, Back Arm, Legs, Torso, Front Arm, Collar, Helmet.
Let's modify arm placement:
Back Arm goes before Legs. Front Arm goes after Torso.
```xml
<!-- Backpack -->
...
<!-- Back / Left Arm -->
<path d="M -15 10 Q -60 -10 -90 30" fill="none" stroke="url(#suitGrad)" stroke-width="20" stroke-linecap="round"/>
<circle cx="-90" cy="30" r="11" fill="#ff4757"/> <!-- Glove -->
<path d="M -90 30 Q -110 20 -115 35 Q -100 45 -90 30" fill="#2f3542"/> <!-- Fingers/paws -->
<!-- Legs -->
...
<!-- Torso -->
...
<!-- Front / Right Arm -->
<path d="M 10 10 Q 50 0 80 -40" fill="none" stroke="url(#suitGrad)" stroke-width="20" stroke-linecap="round"/>
<circle cx="80" cy="-40" r="11" fill="#ff4757"/> <!-- Glove -->
<path d="M 80 -40 Q 100 -50 110 -35 Q 90 -25 80 -40" fill="#2f3542"/> <!-- Fingers/paws -->
```
The collar ellipse `cy="-12"` goes between torso and head, covering neck area.
Order of collar and arms: Torso, Front Arm, Collar, Helmet.
This ensures the neck joint looks smooth and the collar sits nicely.
Head center `cy=-65`, radius 45. Bottom edge `cy=-20`. Collar is at `y=-14`, so head overlaps collar nicely!
Glow filters:
Ensure glow filters don't get cut off. I set `x="-50%" y="-50%" width="200%" height="200%"` which provides ample room around small circles for the blur.
Everything looks correct and matches the aesthetic expectations: colorful, detailed, high-quality vector illustration.
One final check on the HTML wrapper to ensure full screen without scroll.
```html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<style>
body, html { margin:0; padding:0; overflow:hidden; background:#000; height:100%; width:100%; }
svg { width:100%; height:100%; display:block; }
</style>
</head>
<body>
<svg ...>
```
This perfectly fulfills the "no horizontal scrollbar", self-contained, and high-res SVG requirement. The code will execute cleanly without any external assets.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>
body, html {
margin: 0;
padding: 0;
width: 100%;
height: 100%;
overflow: hidden;
background-color: #030214;
}
svg {
display: block;
width: 100%;
height: 100%;
}
/* Animations */
@keyframes hover {
0%, 100% { transform: translateY(0); }
50% { transform: translateY(-25px); }
}
.hover-board {
animation: hover 2.5s ease-in-out infinite;
transform-box: fill-box;
transform-origin: center;
}
@keyframes shadow-pulse {
0%, 100% { transform: scale(1); opacity: 0.6; }
50% { transform: scale(0.7); opacity: 0.3; }
}
.shadow {
animation: shadow-pulse 2.5s ease-in-out infinite;
transform-box: fill-box;
transform-origin: center;
}
@keyframes dust-float {
0%, 100% { transform: translate(0, 0); opacity: 0.6; }
50% { transform: translate(-5px, -15px); opacity: 0.2; }
}
.dust {
animation: dust-float 2s ease-in-out infinite;
}
</style>
</head>
<body>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 800" preserveAspectRatio="xMidYMid slice">
<defs>
<!-- Background gradients -->
<linearGradient id="spaceGrad" x1="0" y1="0" x2="0" y2="1">
<stop offset="0%" stop-color="#030214"/>
<stop offset="50%" stop-color="#0a0a2a"/>
<stop offset="100%" stop-color="#150c26"/>
</linearGradient>
<linearGradient id="moonGrad" x1="0" y1="0" x2="0" y2="1">
<stop offset="0%" stop-color="#3a3a4a"/>
<stop offset="100%" stop-color="#1b1b24"/>
</linearGradient>
<linearGradient id="earthGrad" x1="0" y1="0" x2="1" y2="1">
<stop offset="0%" stop-color="#00c6ff"/>
<stop offset="50%" stop-color="#0072ff"/>
<stop offset="100%" stop-color="#2b1055"/>
</linearGradient>
<!-- Object gradients -->
<radialGradient id="suitGrad" cx="40%" cy="40%" r="60%">
<stop offset="0%" stop-color="#ffffff"/>
<stop offset="80%" stop-color="#e0e0e0"/>
<stop offset="100%" stop-color="#b0b0b0"/>
</radialGradient>
<linearGradient id="boardGrad" x1="0" y1="0" x2="0" y2="1">
<stop offset="0%" stop-color="#ff3f65"/>
<stop offset="100%" stop-color="#d91a43"/>
</linearGradient>
<linearGradient id="wheelGlow" x1="0" y1="0" x2="0" y2="1">
<stop offset="0%" stop-color="#00ffff"/>
<stop offset="100%" stop-color="#ff00ff"/>
</linearGradient>
<linearGradient id="helmetGlass" x1="0" y1="0" x2="1" y2="1">
<stop offset="0%" stop-color="rgba(135, 206, 235, 0.6)"/>
<stop offset="50%" stop-color="rgba(135, 206, 235, 0.1)"/>
<stop offset="100%" stop-color="rgba(135, 206, 235, 0.4)"/>
</linearGradient>
<!-- Filters -->
<filter id="glow" x="-50%" y="-50%" width="200%" height="200%">
<feGaussianBlur stdDeviation="6" result="blur" />
<feMerge>
<feMergeNode in="blur" />
<feMergeNode in="SourceGraphic" />
</feMerge>
</filter>
<filter id="softBlur" x="-20%" y="-20%" width="140%" height="140%">
<feGaussianBlur stdDeviation="4" />
</filter>
<filter id="shadowBlur" x="-30%" y="-30%" width="160%" height="160%">
<feGaussianBlur stdDeviation="8" />
</filter>
<filter id="dustBlur" x="-50%" y="-50%" width="200%" height="200%">
<feGaussianBlur stdDeviation="2" />
</filter>
</defs>
<!-- Space -->
<rect width="1200" height="800" fill="url(#spaceGrad)"/>
<!-- Stars -->
<g fill="#ffffff">
<!-- Large stars -->
<circle cx="150" cy="200" r="2.5" opacity="0.9"/>
<circle cx="850" cy="120" r="3" opacity="0.8" filter="url(#glow)"/>
<circle cx="1050" cy="450" r="2" opacity="0.7"/>
<circle cx="250" cy="550" r="2.5" opacity="0.6"/>
<!-- 4-point stars -->
<path d="M 400 150 L 403 155 L 408 158 L 403 161 L 400 166 L 397 161 L 392 158 L 397 155 Z" opacity="0.8"/>
<path d="M 750 280 L 753 286 L 759 289 L 753 292 L 750 298 L 747 292 L 741 289 L 747 286 Z" opacity="0.9" filter="url(#glow)"/>
<path d="M 1100 180 L 1102 185 L 1107 187 L 1102 189 L 1100 194 L 1098 189 L 1093 187 L 1098 185 Z" opacity="0.7"/>
<!-- Small dots -->
<circle cx="80" cy="80" r="1.5" opacity="0.5"/>
<circle cx="220" cy="120" r="1" opacity="0.6"/>
<circle cx="320" cy="60" r="2" opacity="0.4"/>
<circle cx="480" cy="90" r="1.5" opacity="0.8"/>
<circle cx="600" cy="150" r="1" opacity="0.5"/>
<circle cx="720" cy="100" r="2" opacity="0.7"/>
<circle cx="920" cy="180" r="1.5" opacity="0.6"/>
<circle cx="1150" cy="100" r="1" opacity="0.9"/>
<circle cx="180" cy="350" r="1.5" opacity="0.5"/>
<circle cx="300" cy="400" r="1" opacity="0.7"/>
<circle cx="550" cy="320" r="2" opacity="0.4"/>
<circle cx="800" cy="380" r="1.5" opacity="0.8"/>
<circle cx="1000" cy="350" r="1" opacity="0.6"/>
<circle cx="50" cy="500" r="2" opacity="0.5"/>
<circle cx="400" cy="520" r="1.5" opacity="0.7"/>
<circle cx="700" cy="550" r="1" opacity="0.4"/>
<circle cx="950" cy="580" r="2" opacity="0.6"/>
<circle cx="1100" cy="550" r="1.5" opacity="0.8"/>
</g>
<!-- Earth -->
<g transform="translate(950, 220)">
<!-- Atmosphere Glow -->
<circle cx="0" cy="0" r="160" fill="none" stroke="#a3cbf0" stroke-width="20" opacity="0.4" filter="url(#softBlur)"/>
<circle cx="0" cy="0" r="170" fill="none" stroke="#00c6ff" stroke-width="10" opacity="0.2" filter="url(#glow)"/>
<!-- Planet Base -->
<circle cx="0" cy="0" r="150" fill="url(#earthGrad)"/>
<!-- Continents -->
<path d="M -80 -120 Q -40 -140 10 -110 Q 60 -80 80 -20 Q 100 40 60 90 Q 10 130 -50 110 Q -110 80 -130 20 Q -120 -50 -80 -120" fill="#2ed573" opacity="0.85" filter="url(#softBlur)"/>
<path d="M -80 -120 Q -40 -140 10 -110 Q 60 -80 80 -20 Q 100 40 60 90 Q 10 130 -50 110 Q -110 80 -130 20 Q -120 -50 -80 -120" fill="#7bed9f" opacity="0.6"/>
<!-- Clouds -->
<path d="M -120 -60 Q -60 -80 0 -40 Q 60 -10 100 20 Q 120 50 80 80 Q 0 100 -60 60 Q -100 20 -120 -60" fill="#ffffff" opacity="0.7" filter="url(#softBlur)"/>
<path d="M 20 -120 Q 80 -140 120 -80 Q 140 -20 100 20" fill="none" stroke="#ffffff" stroke-width="15" opacity="0.5" stroke-linecap="round" filter="url(#softBlur)"/>
<!-- Shading / Terminator -->
<path d="M 0 -150 A 150 150 0 0 1 150 0 A 150 150 0 0 1 0 150 A 150 150 0 0 0 -150 0 A 150 150 0 0 0 0 -150" fill="rgba(0,0,0,0.4)"/>
<path d="M 0 -150 A 150 150 0 0 1 150 0 A 150 150 0 0 1 0 150 Z" fill="rgba(0,0,0,0.6)"/>
</g>
<!-- Moon Surface -->
<path d="M0 620 Q 200 580 400 650 T 800 600 T 1200 680 L 1200 800 L 0 800 Z" fill="url(#moonGrad)"/>
<!-- Terrain Details / Craters -->
<g opacity="0.8">
<!-- Big crater -->
<ellipse cx="250" cy="700" rx="60" ry="20" fill="#14141c"/>
<ellipse cx="250" cy="695" rx="60" ry="20" fill="#2a2a38"/>
<!-- Medium crater -->
<ellipse cx="550" cy="660" rx="35" ry="12" fill="#14141c"/>
<ellipse cx="550" cy="657" rx="35" ry="12" fill="#2a2a38"/>
<!-- Far right crater -->
<ellipse cx="950" cy="730" rx="80" ry="25" fill="#14141c"/>
<ellipse cx="950" cy="723" rx="80" ry="25" fill="#2a2a38"/>
<!-- Small craters -->
<ellipse cx="100" cy="660" rx="15" ry="5" fill="#14141c"/>
<ellipse cx="100" cy="658" rx="15" ry="5" fill="#2a2a38"/>
<ellipse cx="750" cy="640" rx="20" ry="6" fill="#14141c"/>
<ellipse cx="750" cy="638" rx="20" ry="6" fill="#2a2a38"/>
<ellipse cx="1100" cy="650" rx="25" ry="8" fill="#14141c"/>
<ellipse cx="1100" cy="647" rx="25" ry="8" fill="#2a2a38"/>
<!-- Rocks -->
<path d="M 180 640 L 190 630 L 205 635 L 210 645 L 195 650 Z" fill="#1f1f29"/>
<path d="M 180 640 L 190 630 L 205 635 L 195 645 Z" fill="#343445"/>
<path d="M 650 680 L 665 670 L 680 680 L 670 695 Z" fill="#1f1f29"/>
<path d="M 650 680 L 665 670 L 680 680 L 665 685 Z" fill="#343445"/>
</g>
<!-- Skateboard and Cat Group -->
<g transform="translate(600, 480) rotate(-12)">
<!-- Shadow -->
<ellipse class="shadow" cx="0" cy="120" rx="130" ry="25" fill="rgba(0,0,0,0.6)" filter="url(#shadowBlur)"/>
<!-- Floating Dust / Debris -->
<g class="dust" fill="#ffffff" filter="url(#dustBlur)">
<circle cx="-80" cy="40" r="2.5" opacity="0.6" />
<circle cx="-50" cy="60" r="1.5" opacity="0.6" />
<circle cx="-20" cy="35" r="3" opacity="0.6" />
<circle cx="10" cy="70" r="2" opacity="0.6" />
<circle cx="40" cy="45" r="1.5" opacity="0.6" />
<circle cx="70" cy="65" r="2.5" opacity="0.6" />
<circle cx="100" cy="30" r="2" opacity="0.6" />
</g>
<!-- Hovering Board and Cat -->
<g class="hover-board">
<!-- Skateboard -->
<g id="skateboard">
<!-- Deck -->
<rect x="-130" y="0" width="260" height="14" rx="7" fill="url(#boardGrad)"/>
<rect x="-120" y="0" width="240" height="4" rx="2" fill="#ff768e"/>
<rect x="-120" y="10" width="240" height="4" rx="2" fill="rgba(0,0,0,0.3)"/>
<!-- Grip Tape / Paws -->
<g fill="#111" opacity="0.8">
<circle cx="-60" cy="7" r="2"/>
<circle cx="-65" cy="5" r="2"/>
<circle cx="-55" cy="5" r="2"/>
<line x1="-60" y1="5" x2="-60" y2="9"/>
<line x1="-65" y1="5" x2="-65" y2="9"/>
<line x1="-55" y1="5" x2="-55" y2="9"/>
<circle cx="60" cy="7" r="2"/>
<circle cx="65" cy="5" r="2"/>
<circle cx="55" cy="5" r="2"/>
<line x1="60" y1="5" x2="60" y2="9"/>
<line x1="65" y1="5" x2="65" y2="9"/>
<line x1="55" y1="5" x2="55" y2="9"/>
</g>
<!-- Wheels and Trucks -->
<!-- Back -->
<path d="M-90 14 L-80 28 L-70 28 L-60 14 Z" fill="#747d8c"/>
<path d="M-90 14 L-80 28 L-70 28 L-60 14 Z" fill="none" stroke="#374151" stroke-width="2"/>
<circle cx="-85" cy="28" r="14" fill="url(#wheelGlow)" filter="url(#glow)"/>
<circle cx="-65" cy="28" r="14" fill="url(#wheelGlow)" filter="url(#glow)"/>
<circle cx="-85" cy="28" r="7" fill="#fff" opacity="0.9"/>
<circle cx="-65" cy="28" r="7" fill="#fff" opacity="0.9"/>
<circle cx="-85" cy="28" r="3" fill="#57606f"/>
<circle cx="-65" cy="28" r="3" fill="#57606f"/>
<!-- Front -->
<path d="M60 14 L70 28 L80 28 L90 14 Z" fill="#747d8c"/>
<path d="M60 14 L70 28 L80 28 L90 14 Z" fill="none" stroke="#374151" stroke-width="2"/>
<circle cx="65" cy="28" r="14" fill="url(#wheelGlow)" filter="url(#glow)"/>
<circle cx="85" cy="28" r="14" fill="url(#wheelGlow)" filter="url(#glow)"/>
<circle cx="65" cy="28" r="7" fill="#fff" opacity="0.9"/>
<circle cx="85" cy="28" r="7" fill="#fff" opacity="0.9"/>
<circle cx="65" cy="28" r="3" fill="#57606f"/>
<circle cx="85" cy="28" r="3" fill="#57606f"/>
</g>
<!-- Cat Astronaut -->
<g id="cat-astronaut">
<!-- Tail inside a clear tube -->
<path d="M 15 40 Q 60 70 80 20 Q 95 -15 130 5" fill="none" stroke="rgba(255,255,255,0.3)" stroke-width="24" stroke-linecap="round"/>
<path d="M 15 40 Q 60 70 80 20 Q 95 -15 130 5" fill="none" stroke="rgba(255,255,255,0.1)" stroke-width="24" stroke-linecap="round"/>
<!-- Tail inside -->
<path d="M 15 40 Q 58 66 76 22 Q 90 -10 122 3" fill="none" stroke="#3742fa" stroke-width="14" stroke-linecap="round"/>
<!-- Backpack -->
<rect x="-45" y="-15" width="45" height="60" rx="8" fill="#2f3542" transform="rotate(-10)"/>
<rect x="-35" y="-5" width="25" height="15" rx="3" fill="#57606f" transform="rotate(-10)"/>
<circle cx="-22" cy="2" r="3" fill="#ffa502" filter="url(#glow)" transform="rotate(-10)"/>
<rect x="-35" y="25" width="25" height="10" rx="2" fill="#747d8c" transform="rotate(-10)"/>
<!-- Back / Left Arm -->
<path d="M -15 10 Q -60 -10 -90 30" fill="none" stroke="url(#suitGrad)" stroke-width="20" stroke-linecap="round"/>
<circle cx="-90" cy="30" r="11" fill="#ff4757"/> <!-- Glove -->
<path d="M -90 30 Q -110 20 -115 35 Q -100 45 -90 30" fill="#2f3542"/> <!-- Fingers/paws -->
<!-- Legs -->
<!-- Left / Back Leg -->
<path d="M -15 35 Q -40 45 -45 85" fill="none" stroke="url(#suitGrad)" stroke-width="24" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M -45 85 L -25 95 L -25 115 L -60 115 C -65 105 -65 95 -45 85 Z" fill="#2f3542"/>
<path d="M -45 85 L -25 95 L -25 105 L -50 105 Z" fill="rgba(255,255,255,0.2)"/>
<!-- Right / Front Leg -->
<path d="M 5 40 Q 30 50 60 75" fill="none" stroke="url(#suitGrad)" stroke-width="24" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 60 75 L 75 65 L 95 85 L 80 100 C 70 95 60 90 60 75 Z" fill="#2f3542"/>
<path d="M 60 75 L 75 65 L 85 75 L 70 85 Z" fill="rgba(255,255,255,0.2)"/>
<!-- Torso -->
<path d="M -20 -5 Q -35 25 -15 45 Q 10 50 20 35 Q 25 10 10 -10 Z" fill="url(#suitGrad)"/>
<!-- Suit stripes -->
<path d="M -25 15 Q 0 25 20 10" fill="none" stroke="#ff4757" stroke-width="4"/>
<path d="M -20 20 Q 0 30 22 15" fill="none" stroke="#3742fa" stroke-width="4"/>
<!-- Chest Control Panel -->
<rect x="-10" y="5" width="20" height="12" rx="2" fill="#2f3542"/>
<circle cx="-5" cy="11" r="2" fill="#1e90ff"/>
<circle cx="5" cy="11" r="2" fill="#ff4757"/>
<line x1="-8" y1="11" x2="-2" y2="11" stroke="#fff" stroke-width="1"/>
<!-- Front / Right Arm -->
<path d="M 10 10 Q 50 0 80 -40" fill="none" stroke="url(#suitGrad)" stroke-width="20" stroke-linecap="round"/>
<circle cx="80" cy="-40" r="11" fill="#ff4757"/> <!-- Glove -->
<path d="M 80 -40 Q 100 -50 110 -35 Q 90 -25 80 -40" fill="#2f3542"/> <!-- Fingers/paws -->
<!-- Collar Ring -->
<ellipse cx="-5" cy="-12" rx="22" ry="7" fill="#747d8c"/>
<ellipse cx="-5" cy="-14" rx="19" ry="5" fill="#a4b0be"/>
<!-- Helmet -->
<!-- Outer Ring -->
<circle cx="-5" cy="-65" r="45" fill="none" stroke="#a4b0be" stroke-width="4"/>
<!-- Glass -->
<circle cx="-5" cy="-65" r="45" fill="url(#helmetGlass)"/>
<circle cx="-5" cy="-65" r="45" fill="rgba(255,255,255,0.1)" filter="url(#glow)"/>
<!-- Cat Face inside Helmet -->
<g transform="translate(0, -10)">
<!-- Ears -->
<polygon points="-12,-45 -22,-65 -4,-55" fill="#2f3542"/>
<polygon points="-10,-47 -19,-60 -5,-55" fill="#ff6b81"/>
<polygon points="12,-45 22,-65 4,-55" fill="#2f3542"/>
<polygon points="10,-47 19,-60 5,-55" fill="#ff6b81"/>
<!-- Head base -->
<circle cx="0" cy="-45" r="22" fill="#333"/>
<!-- Eyes -->
<ellipse cx="-8" cy="-45" rx="6" ry="7" fill="#a3cbf0"/>
<ellipse cx="8" cy="-45" rx="6" ry="7" fill="#a3cbf0"/>
<ellipse cx="-8" cy="-45" rx="3" ry="5" fill="#111"/>
<ellipse cx="8" cy="-45" rx="3" ry="5" fill="#111"/>
<circle cx="-9" cy="-47" r="2" fill="#fff"/>
<circle cx="7" cy="-47" r="2" fill="#fff"/>
<!-- Nose -->
<polygon points="0,-35 -4,-40 4,-40" fill="#ff6b81"/>
<!-- Whiskers -->
<line x1="-15" y1="-38" x2="-30" y2="-40" stroke="#fff" stroke-width="1.5" opacity="0.8" stroke-linecap="round"/>
<line x1="-15" y1="-35" x2="-32" y2="-35" stroke="#fff" stroke-width="1.5" opacity="0.8" stroke-linecap="round"/>
<line x1="-15" y1="-32" x2="-30" y2="-30" stroke="#fff" stroke-width="1.5" opacity="0.8" stroke-linecap="round"/>
<line x1="15" y1="-38" x2="30" y2="-40" stroke="#fff" stroke-width="1.5" opacity="0.8" stroke-linecap="round"/>
<line x1="15" y1="-35" x2="32" y2="-35" stroke="#fff" stroke-width="1.5" opacity="0.8" stroke-linecap="round"/>
<line x1="15" y1="-32" x2="30" y2="-30" stroke="#fff" stroke-width="1.5" opacity="0.8" stroke-linecap="round"/>
</g>
<!-- Helmet Reflection -->
<path d="M -40 -85 A 35 35 0 0 1 10 -95 A 40 40 0 0 0 -45 -40 Z" fill="rgba(255,255,255,0.4)" filter="url(#softBlur)"/>
<path d="M 20 -45 A 40 40 0 0 0 35 -60 A 45 45 0 0 1 25 -40 Z" fill="rgba(255,255,255,0.3)" filter="url(#softBlur)"/>
<!-- Antenna -->
<line x1="-25" y1="-100" x2="-45" y2="-120" stroke="#747d8c" stroke-width="3" stroke-linecap="round"/>
<circle cx="-45" cy="-120" r="4" fill="#ff4757" filter="url(#glow)"/>
</g>
</g>
</g>
</svg>
</body>
</html>
```