Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Web and App implementation guide for Synthwave. Trigger when user wants 80s-inspired neon, dark backgrounds, outrun grids, and Miami Vice aesthetics.
.claude/skills/lingxling-synthwave/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-16 | ✗→✓ | ▲ Improved | 102% | 0% |
| case-15 | ✗→✓ | ▲ Improved | 85% | 0% |
| case-21 | ✓→✗ | ▼ Worse | 90% | 0% |
| case-11 | ✓→✗ | ▼ Worse | 104% | 0% |
| case-01 | ✓→✓ | = Same ✓ | 80% | 0% |
> "Driving a Ferrari through a neon-lit digital grid at midnight."
Use this sub-style when the user's request matches the aesthetic described above. This is a child reference of the design-it skill and is not meant to be triggered directly.
box-shadow and text-shadow for glow effects.#0B0C10, #110022). Glowing neon accents: Cyan (#00FFFF), Hot Pink (#FF00FF), Electric Yellow (#FFFF00).text-shadow for neon signs and 3D transforms for the floor grid.cssbody { background-color: #090014; color: #fff; font-family: 'Montserrat', sans-serif; overflow-x: hidden; } /* Neon Text Glow */ .synth-neon-text { font-family: 'Mr Dafoe', cursive; /* A classic 80s script */ font-size: 4rem; color: #fff; text-shadow: 0 0 5px #fff, 0 0 10px #fff, 0 0 20px #FF00FF, 0 0 40px #FF00FF, 0 0 80px #FF00FF; } /* The Perspective Grid Floor */ .synth-grid { position: absolute; bottom: 0; left: -50%; width: 200%; height: 50vh; background-image: linear-gradient(rgba(0, 255, 255, 0.8) 2px, transparent 2px), linear-gradient(90deg, rgba(0, 255, 255, 0.8) 2px, transparent 2px); background-size: 50px 50px; /* Create the 3D horizon effect */ transform: perspective(500px) rotateX(60deg); transform-origin: top center; /* Fade out towards the horizon */ mask-image: linear-gradient(to bottom, transparent 0%, black 100%); -webkit-mask-image: linear-gradient(to bottom, transparent 0%, black 100%); }
swiftstruct NeonText: View { let text: String var body: some View { Text(text) .font(.custom("Mr Dafoe", size: 64)) .foregroundColor(.white) // Layering shadows to create a glowing bloom .shadow(color: .white, radius: 2) .shadow(color: .pink, radius: 5) .shadow(color: .pink, radius: 10) .shadow(color: .pink, radius: 20) } } struct SynthwaveScreen: View { var body: some View { ZStack { Color(red: 0.03, green: 0.0, blue: 0.08).ignoresSafeArea() // #090014 VStack { NeonText(text: "Outrun") Spacer() } // Note: A 3D perspective grid requires SceneKit or a pre-rendered image // Native SwiftUI 3D transforms apply to the view, but won't draw an infinite floor grid easily. Image("synth_grid") .resizable() .scaledToFill() .frame(height: 300) .offset(y: 200) } } }
.shadow(color:radius:) modifiers directly on the text to create a vibrant neon bloom effect.dartclass NeonText extends StatelessWidget { final String text; const NeonText(this.text); @override Widget build(BuildContext context) { return Text( text, style: const TextStyle( fontFamily: 'Mr Dafoe', // Or any cursive 80s font fontSize: 64, color: Colors.white, shadows: [ Shadow(color: Colors.white, blurRadius: 2), Shadow(color: Colors.pinkAccent, blurRadius: 5), Shadow(color: Colors.pinkAccent, blurRadius: 15), Shadow(color: Colors.pinkAccent, blurRadius: 30), ], ), ); } } class SynthwaveScreen extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( backgroundColor: const Color(0xFF090014), body: Stack( children: [ // Background grid asset Positioned( bottom: 0, left: 0, right: 0, height: 300, child: Image.asset('assets/synth_grid.png', fit: BoxFit.cover), ), // Foreground UI const Center(child: NeonText('Outrun')), ], ), ); } }
TextStyle accepts a list of Shadow objects. Stack them with exponentially increasing blurRadius values (e.g., 2, 5, 15, 30) to simulate light dispersal.CustomPaint unless you want to do the 3D math manually. Use an asset.jsx// React Native only supports ONE textShadow per Text element natively. // To create a true neon glow, you must stack identical Text components. const NeonText = ({ text }) => { const baseStyle = { fontFamily: 'MrDafoe', fontSize: 64, color: '#FFF', position: 'absolute', }; return ( <View style={{ alignItems: 'center', height: 80 }}> {/* Outer Glow */} <Text style={[baseStyle, { textShadowColor: '#FF00FF', textShadowRadius: 30 }]}>{text}</Text> {/* Mid Glow */} <Text style={[baseStyle, { textShadowColor: '#FF00FF', textShadowRadius: 15 }]}>{text}</Text> {/* Core Glow */} <Text style={[baseStyle, { textShadowColor: '#FFF', textShadowRadius: 5 }]}>{text}</Text> {/* Crisp White Core */} <Text style={baseStyle}>{text}</Text> </View> ); }; const SynthwaveScreen = () => ( <View style={{ flex: 1, backgroundColor: '#090014', justifyContent: 'center' }}> <NeonText text="Outrun" /> <Image source={require('./synth_grid.png')} style={{ position: 'absolute', bottom: 0, width: '100%', height: 300, resizeMode: 'cover' }} /> </View> );
textShadow.<Text> component 3-4 times on top of each other using position: 'absolute', each with a different textShadowRadius to build the bloom.kotlin@Composable fun NeonText(text: String) { Text( text = text, fontSize = 64.sp, color = Color.White, fontFamily = FontFamily.Cursive, // Compose only supports a single Shadow natively on TextStyle style = TextStyle( shadow = Shadow( color = Color(0xFFFF00FF), offset = Offset.Zero, blurRadius = 30f // Single large blur as fallback ) ), // To get stacked blurs, we use Modifier.drawBehind to draw the text repeatedly ) } // Advanced stacked glow approach @Composable fun AdvancedNeonText(text: String) { Box(contentAlignment = Alignment.Center) { // Render layers of text to build the glow val blurs = listOf(30f, 15f, 5f) blurs.forEach { blur -> Text( text = text, color = Color.Transparent, style = TextStyle( shadow = Shadow(Color(0xFFFF00FF), Offset.Zero, blur) ) ) } // Top solid layer Text(text = text, color = Color.White) } }
TextStyle only accepts a single Shadow.Text composables inside a Box, each casting a shadow of varying size, topped by the solid white core text.| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-21 | pass→fail | 27,974 | 35,022 | +25% | 1 | 1 | 0% | 4,466 | 8,468 | +90% | 0 | 0 | — |
case-01 | pass→pass | 13,865 | 40,680 | +193% | 1 | 1 | 0% | 2,473 | 4,460 | +80% | 0 | 0 | — |
case-02 | pass→pass | 16,114 | 11,087 | -31% | 1 | 1 | 0% | 2,884 | 4,540 | +57% | 0 | 0 | — |
case-03 | pass→pass | 17,128 | 14,669 | -14% | 1 | 1 | 0% | 2,582 | 5,104 | +98% | 0 | 0 | — |
case-04 | pass→pass | 17,113 | 10,283 | -40% | 1 | 1 | 0% | 3,280 | 4,303 | +31% | 0 | 0 | — |
case-05 | pass→pass | 23,962 | 21,226 | -11% | 1 | 1 | 0% | 4,098 | 5,983 | +46% | 0 | 0 | — |
case-06 | pass→pass | 15,662 | 14,565 | -7% | 1 | 1 | 0% | 2,826 | 5,270 | +86% | 0 | 0 | — |
case-16 | fail→pass | 9,437 | 8,334 | -12% | 1 | 1 | 0% | 1,758 | 3,546 | +102% | 0 | 0 | — |
case-07 | fail→fail | 22,274 | 22,455 | +1% | 1 | 1 | 0% | 3,985 | 7,041 | +77% | 0 | 0 | — |
case-08 | fail→fail | 24,039 | 26,047 | +8% | 1 | 1 | 0% | 3,804 | 7,197 | +89% | 0 | 0 | — |
case-09 | fail→fail | 22,520 | 31,465 | +40% | 1 | 1 | 0% | 4,231 | 7,174 | +70% | 0 | 0 | — |
case-10 | fail→fail | 22,247 | 19,138 | -14% | 1 | 1 | 0% | 3,155 | 6,000 | +90% | 0 | 0 | — |
case-11 | pass→fail | 14,528 | 14,819 | +2% | 1 | 1 | 0% | 2,286 | 4,671 | +104% | 0 | 0 | — |
case-12 | pass→pass | 16,293 | 16,735 | +3% | 1 | 1 | 0% | 2,481 | 5,177 | +109% | 0 | 0 | — |
case-13 | pass→pass | 16,834 | 14,707 | -13% | 1 | 1 | 0% | 3,011 | 5,251 | +74% | 0 | 0 | — |
case-14 | pass→pass | 16,063 | 18,677 | +16% | 1 | 1 | 0% | 3,022 | 4,540 | +50% | 0 | 0 | — |
case-15 | fail→pass | 12,412 | 9,732 | -22% | 1 | 1 | 0% | 2,116 | 3,912 | +85% | 0 | 0 | — |
case-17 | pass→pass | 14,131 | 5,877 | -58% | 1 | 1 | 0% | 2,130 | 3,518 | +65% | 0 | 0 | — |
case-18 | pass→pass | 21,303 | 14,401 | -32% | 1 | 1 | 0% | 3,082 | 5,084 | +65% | 0 | 0 | — |
case-19 | fail→fail | 15,987 | 15,628 | -2% | 1 | 1 | 0% | 2,626 | 4,735 | +80% | 0 | 0 | — |
case-20 | pass→pass | 12,607 | 7,844 | -38% | 1 | 1 | 0% | 2,004 | 3,787 | +89% | 0 | 0 | — |
case-22 | pass→pass | 19,231 | 17,992 | -6% | 1 | 1 | 0% | 3,159 | 5,483 | +74% | 0 | 0 | — |
case-23 | pass→pass | 21,176 | 16,393 | -23% | 1 | 1 | 0% | 3,875 | 5,398 | +39% | 0 | 0 | — |
case-24 | pass→pass | 20,391 | 18,360 | -10% | 1 | 1 | 0% | 3,213 | 5,317 | +65% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 24 cases were attempted. The headline lift of 0 percentage points is the difference between those two pass rates over the 24 comparable cases. 2 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.