Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Web and App implementation guide for Retro Design (60s-80s). Trigger when user wants vintage aesthetics, warm muted colors, and nostalgic layouts.
.claude/skills/lingxling-retro-design/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-07 | ✗→✓ | ▲ Improved | 112% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 92% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 143% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 62% | 0% |
| case-18 | ✗→✓ | ▲ Improved | 61% | 0% |
> "A warm, analog feeling. Nostalgia through muted tones, grain, and classic typography."
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.
Cooper Black, Garamond, or Courier.cssbody { background-color: #F4E8D1; /* Aged paper */ color: #3E2723; /* Deep brown ink */ font-family: 'Georgia', serif; /* Apply a subtle noise overlay using a pseudo-element or background image */ background-image: url('noise-texture.png'); background-blend-mode: multiply; } .retro-header { font-family: 'Cooper Black', serif; font-size: 4rem; color: #D35400; /* Burnt orange */ text-shadow: 2px 2px 0px #F1C40F; /* Mustard yellow drop shadow */ letter-spacing: -1px; } .retro-card { background-color: #FFF3E0; border: 2px solid #3E2723; border-radius: 12px; padding: 24px; /* Vintage offset shadow */ box-shadow: 8px 8px 0px #795548; } .retro-badge { display: inline-block; background-color: #E74C3C; color: #F4E8D1; font-family: monospace; font-weight: bold; padding: 8px 16px; border-radius: 50%; /* Make it look like a sticker */ transform: rotate(-10deg); }
swiftstruct RetroCard: View { let paperColor = Color(red: 0.96, green: 0.91, blue: 0.82) // #F4E8D1 let inkColor = Color(red: 0.24, green: 0.15, blue: 0.14) // #3E2723 var body: some View { ZStack { paperColor.ignoresSafeArea() // Optional: Noise texture Image("film_grain") .resizable() .blendMode(.multiply) .opacity(0.3) .ignoresSafeArea() VStack(alignment: .leading, spacing: 24) { Text("RETRO DESIGN") .font(.custom("Cooper Black", size: 36)) .foregroundColor(Color(red: 0.83, green: 0.33, blue: 0.0)) // #D35400 .shadow(color: Color(red: 0.95, green: 0.77, blue: 0.06), radius: 0, x: 2, y: 2) Text("Analog warmth and classic typography.") .font(.custom("Georgia", size: 18)) .foregroundColor(inkColor) } .padding(32) .background(Color(red: 1.0, green: 0.95, blue: 0.88)) .cornerRadius(12) .overlay( RoundedRectangle(cornerRadius: 12) .stroke(inkColor, lineWidth: 2) ) // Vintage solid offset shadow .shadow(color: Color(red: 0.47, green: 0.33, blue: 0.28), radius: 0, x: 8, y: 8) } } }
.blendMode(.multiply). Be aware of memory usage with full-screen textures..shadow(radius: 0) to create the hard offset shadows typical of 70s print media.dartclass RetroCard extends StatelessWidget { final Color paperColor = const Color(0xFFF4E8D1); final Color inkColor = const Color(0xFF3E2723); @override Widget build(BuildContext context) { return Container( color: paperColor, child: Stack( fit: StackFit.expand, children: [ // Noise texture Opacity( opacity: 0.3, child: Image.asset('assets/film_grain.png', fit: BoxFit.cover, colorBlendMode: BlendMode.multiply), ), Center( child: Container( padding: const EdgeInsets.all(32), decoration: BoxDecoration( color: const Color(0xFFFFF3E0), borderRadius: BorderRadius.circular(12), border: Border.all(color: inkColor, width: 2), boxShadow: const [ BoxShadow( color: Color(0xFF795548), blurRadius: 0, // Hard offset shadow offset: Offset(8, 8), ), ], ), child: Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, children: [ const Text('RETRO DESIGN', style: TextStyle( fontFamily: 'Cooper', fontSize: 36, color: Color(0xFFD35400), shadows: [Shadow(color: Color(0xFFF1C40F), offset: Offset(2, 2))], )), const SizedBox(height: 24), Text('Analog warmth and classic typography.', style: TextStyle(fontFamily: 'Georgia', fontSize: 18, color: inkColor)), ], ), ), ), ], ), ); } }
Stack to place a semi-transparent film grain asset over the solid color.blurRadius: 0 to emulate offset misregistered ink prints.jsxconst RetroCard = () => { return ( <ImageBackground source={require('./film_grain.png')} style={{ flex: 1, backgroundColor: '#F4E8D1', padding: 24, justifyContent: 'center' }} imageStyle={{ opacity: 0.3, tintColor: '#3E2723' }} > <View style={{ backgroundColor: '#FFF3E0', padding: 32, borderRadius: 12, borderWidth: 2, borderColor: '#3E2723', // Hard drop shadow shadowColor: '#795548', shadowOffset: { width: 8, height: 8 }, shadowOpacity: 1, shadowRadius: 0, elevation: 8, // Fallback for Android, though it blurs }}> <Text style={{ fontFamily: 'CooperBlack', fontSize: 36, color: '#D35400', textShadowColor: '#F1C40F', textShadowOffset: { width: 2, height: 2 }, textShadowRadius: 0, marginBottom: 24 }}> RETRO DESIGN </Text> <Text style={{ fontFamily: 'Georgia', fontSize: 18, color: '#3E2723' }}> Analog warmth and classic typography. </Text> </View> </ImageBackground> ); };
ImageBackground on the root view for the grain.elevation cannot do unblurred offset shadows natively. Use react-native-drop-shadow for perfect retro shadows on Android.kotlin@Composable fun RetroCard() { val inkColor = Color(0xFF3E2723) Box(modifier = Modifier.fillMaxSize().background(Color(0xFFF4E8D1))) { // Noise Texture Overlay Image( painter = painterResource(id = R.drawable.film_grain), contentDescription = null, contentScale = ContentScale.Crop, modifier = Modifier.matchParentSize().alpha(0.3f), colorFilter = ColorFilter.tint(Color.Black, BlendMode.Multiply) ) Box( modifier = Modifier .align(Alignment.Center) .padding(24.dp) // Fake hard shadow in compose by drawing behind .drawBehind { drawRoundRect( color = Color(0xFF795548), topLeft = Offset(8.dp.toPx(), 8.dp.toPx()), size = size, cornerRadius = CornerRadius(12.dp.toPx()) ) } .background(Color(0xFFFFF3E0), RoundedCornerShape(12.dp)) .border(2.dp, inkColor, RoundedCornerShape(12.dp)) .padding(32.dp) ) { Column { Text("RETRO DESIGN", fontFamily = FontFamily(Font(R.font.cooper_black)), fontSize = 36.sp, color = Color(0xFFD35400), style = TextStyle(shadow = Shadow(Color(0xFFF1C40F), Offset(4f, 4f), 0f)) ) Spacer(Modifier.height(24.dp)) Text("Analog warmth and classic typography.", fontFamily = FontFamily.Serif, fontSize = 18.sp, color = inkColor) } } } }
Modifier.shadow creates soft blurs. Use Modifier.drawBehind to draw an offset drawRoundRect for the hard retro shadow block.Shadow(color, offset, blurRadius = 0f).#FFFFFF to simulate aged paper.| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 42,289 | 31,649 | -25% | 1 | 1 | 0% | 6,770 | 7,246 | +7% | 0 | 0 | — |
case-02 | pass→pass | 23,373 | 14,077 | -40% | 1 | 1 | 0% | 3,457 | 5,653 | +64% | 0 | 0 | — |
case-03 | fail→fail | 30,815 | 18,634 | -40% | 1 | 1 | 0% | 4,873 | 6,469 | +33% | 0 | 0 | — |
case-04 | fail→fail | 27,694 | 18,326 | -34% | 1 | 1 | 0% | 4,068 | 6,363 | +56% | 0 | 0 | — |
case-05 | fail→fail | 19,413 | 17,289 | -11% | 1 | 1 | 0% | 3,715 | 5,452 | +47% | 0 | 0 | — |
case-06 | pass→pass | 26,753 | 29,578 | +11% | 1 | 1 | 0% | 4,804 | 7,235 | +51% | 0 | 0 | — |
case-07 | fail→pass | 17,327 | 15,308 | -12% | 1 | 1 | 0% | 2,657 | 5,622 | +112% | 0 | 0 | — |
case-08 | pass→pass | 13,553 | 10,338 | -24% | 1 | 1 | 0% | 2,244 | 4,571 | +104% | 0 | 0 | — |
case-09 | fail→pass | 17,829 | 14,994 | -16% | 1 | 1 | 0% | 2,626 | 5,050 | +92% | 0 | 0 | — |
case-10 | fail→pass | 11,020 | 9,267 | -16% | 1 | 1 | 0% | 1,728 | 4,195 | +143% | 0 | 0 | — |
case-11 | fail→fail | 18,269 | 8,249 | -55% | 1 | 1 | 0% | 2,698 | 4,112 | +52% | 0 | 0 | — |
case-12 | fail→pass | 17,458 | 7,533 | -57% | 1 | 1 | 0% | 2,504 | 4,053 | +62% | 0 | 0 | — |
case-13 | pass→pass | 18,752 | 14,160 | -24% | 1 | 1 | 0% | 2,631 | 5,320 | +102% | 0 | 0 | — |
case-14 | pass→pass | 18,755 | 21,845 | +16% | 1 | 1 | 0% | 3,426 | 7,161 | +109% | 0 | 0 | — |
case-15 | fail→fail | 15,645 | 7,361 | -53% | 1 | 1 | 0% | 2,112 | 4,006 | +90% | 0 | 0 | — |
case-16 | fail→fail | 20,613 | 14,730 | -29% | 1 | 1 | 0% | 3,116 | 5,323 | +71% | 0 | 0 | — |
case-17 | fail→fail | 15,739 | 12,166 | -23% | 1 | 1 | 0% | 2,448 | 4,469 | +83% | 0 | 0 | — |
case-18 | fail→pass | 18,021 | 9,785 | -46% | 1 | 1 | 0% | 2,799 | 4,513 | +61% | 0 | 0 | — |
case-19 | fail→fail | 13,924 | 19,839 | +42% | 1 | 1 | 0% | 2,821 | 5,982 | +112% | 0 | 0 | — |
case-20 | pass→pass | 17,523 | 25,895 | +48% | 1 | 1 | 0% | 3,915 | 7,136 | +82% | 0 | 0 | — |
case-21 | pass→pass | 28,055 | 25,233 | -10% | 1 | 1 | 0% | 4,748 | 8,276 | +74% | 0 | 0 | — |
case-22 | pass→pass | 14,475 | 21,360 | +48% | 1 | 1 | 0% | 2,813 | 6,364 | +126% | 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. 22 cases were attempted. The headline lift of +23 percentage points is the difference between those two pass rates over the 22 comparable cases.
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.