Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Web and App implementation guide for Glassmorphism. Trigger when user wants a frosted glass effect, blurred backgrounds, transparency, or a sleek MacOS-like feel.
.claude/skills/lingxling-glassmorphism/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-22 | ✗→✓ | ▲ Improved | 80% | 0% |
| case-01 | ✓→✓ | = Same ✓ | 110% | 0% |
| case-02 | ✓→✓ | = Same ✓ | 120% | 0% |
| case-03 | ✓→✓ | = Same ✓ | 63% | 0% |
| case-04 | ✓→✓ | = Same ✓ | 213% | 0% |
> "Looking through a frosted window. Interfaces that blend seamlessly with vibrant backgrounds."
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.
backdrop-filter: blur().cssbody { /* Requires a complex background to see the glass effect */ background: url('abstract-mesh.jpg') cover; } .glass-panel { background: rgba(255, 255, 255, 0.15); /* Light glass */ /* OR background: rgba(0, 0, 0, 0.25); for Dark glass */ backdrop-filter: blur(16px); -webkit-backdrop-filter: blur(16px); border: 1px solid rgba(255, 255, 255, 0.3); /* The glass edge */ border-radius: 16px; box-shadow: 0 4px 30px rgba(0, 0, 0, 0.1); padding: 32px; }
swiftstruct GlassCard: View { var body: some View { ZStack { // Vibrant background required for glass to show LinearGradient( colors: [.purple, .blue, .cyan], startPoint: .topLeading, endPoint: .bottomTrailing ) .ignoresSafeArea() // Glass panel VStack(alignment: .leading, spacing: 16) { Text("Glass Panel") .font(.system(size: 22, weight: .semibold)) .foregroundColor(.white) Text("Content floating on frosted glass.") .font(.system(size: 15)) .foregroundColor(.white.opacity(0.8)) Button(action: {}) { Text("Continue") .font(.system(size: 15, weight: .semibold)) .foregroundColor(.white) .padding(.horizontal, 24) .padding(.vertical, 12) .background(.ultraThinMaterial) .cornerRadius(8) } } .padding(24) .background(.ultraThinMaterial) // Built-in frosted glass .cornerRadius(16) .overlay( RoundedRectangle(cornerRadius: 16) .stroke(.white.opacity(0.3), lineWidth: 1) // Glass edge highlight ) .shadow(color: .black.opacity(0.1), radius: 20, x: 0, y: 10) .padding(24) } } }
.ultraThinMaterial, .thinMaterial, .regularMaterial, .thickMaterial — Apple built glassmorphism natively..overlay(RoundedRectangle().stroke(.white.opacity(0.3))) for the light edge catch.dartclass GlassCard extends StatelessWidget { @override Widget build(BuildContext context) { return Stack( children: [ // Vibrant background Container( decoration: const BoxDecoration( gradient: LinearGradient( colors: [Colors.purple, Colors.blue, Colors.cyan], begin: Alignment.topLeft, end: Alignment.bottomRight, ), ), ), // Glass panel Center( child: ClipRRect( borderRadius: BorderRadius.circular(16), child: BackdropFilter( filter: ImageFilter.blur(sigmaX: 16, sigmaY: 16), child: Container( padding: const EdgeInsets.all(24), decoration: BoxDecoration( color: Colors.white.withOpacity(0.15), borderRadius: BorderRadius.circular(16), border: Border.all( color: Colors.white.withOpacity(0.3), width: 1, ), boxShadow: [ BoxShadow( color: Colors.black.withOpacity(0.1), blurRadius: 20, offset: const Offset(0, 10), ), ], ), child: Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, children: [ const Text('Glass Panel', style: TextStyle(fontSize: 22, fontWeight: FontWeight.w600, color: Colors.white)), const SizedBox(height: 16), Text('Content floating on frosted glass.', style: TextStyle(fontSize: 15, color: Colors.white.withOpacity(0.8))), ], ), ), ), ), ), ], ); } }
BackdropFilter MUST be wrapped in ClipRRect — without clipping, the blur applies to the entire screen.ImageFilter.blur(sigmaX: 10...20, sigmaY: 10...20) for the frosted effect.Colors.white.withOpacity(0.1...0.2) — too opaque kills the glass look.jsximport { BlurView } from '@react-native-community/blur'; const GlassCard = () => ( <View style={{ flex: 1 }}> {/* Vibrant background */} <LinearGradient colors={['#9B59B6', '#3498DB', '#1ABC9C']} style={StyleSheet.absoluteFill} /> {/* Glass panel */} <View style={{ margin: 24, borderRadius: 16, overflow: 'hidden', // Required for blur clipping }}> <BlurView blurType="light" blurAmount={16} style={{ padding: 24 }} > <View style={{ // Glass border overlay borderRadius: 16, borderWidth: 1, borderColor: 'rgba(255,255,255,0.3)', }}> <Text style={{ fontSize: 22, fontWeight: '600', color: '#FFF', marginBottom: 16, }}> Glass Panel </Text> <Text style={{ fontSize: 15, color: 'rgba(255,255,255,0.8)', }}> Content floating on frosted glass. </Text> </View> </BlurView> </View> </View> );
@react-native-community/blur — React Native has NO native blur support.BlurView parent in a View with overflow: 'hidden' and borderRadius to clip the blur.blurType: 'light' for light glass, 'dark' for dark glass, 'chromeMaterial' for iOS Chrome effect.BlurView performance varies on Android. Test thoroughly.kotlin@Composable fun GlassCard() { Box(modifier = Modifier.fillMaxSize()) { // Vibrant background Box(modifier = Modifier .fillMaxSize() .background(Brush.linearGradient( colors = listOf(Color(0xFF9B59B6), Color(0xFF3498DB), Color(0xFF1ABC9C)), start = Offset.Zero, end = Offset.Infinite, )) ) // Glass panel — Compose lacks native backdrop-filter, // so use a semi-transparent surface with blur via Modifier.blur() Card( modifier = Modifier .padding(24.dp) .align(Alignment.Center), shape = RoundedCornerShape(16.dp), colors = CardDefaults.cardColors( containerColor = Color.White.copy(alpha = 0.15f), ), border = BorderStroke(1.dp, Color.White.copy(alpha = 0.3f)), elevation = CardDefaults.cardElevation(defaultElevation = 0.dp), ) { Column(modifier = Modifier.padding(24.dp)) { Text("Glass Panel", fontSize = 22.sp, fontWeight = FontWeight.SemiBold, color = Color.White) Spacer(Modifier.height(16.dp)) Text("Content floating on frosted glass.", fontSize = 15.sp, color = Color.White.copy(alpha = 0.8f)) } } } }
backdrop-filter blur doesn't exist natively. Use Modifier.blur() (API 31+) on the background, or use RenderEffect.createBlurEffect() for lower APIs.haze library (dev.chrisbanes.haze) for proper glassmorphism in Compose — it provides Modifier.haze() and Modifier.hazeChild().Color.White.copy(alpha = 0.15f) with a strong border to simulate the glass edge.| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | pass→pass | 15,461 | 44,449 | +187% | 1 | 1 | 0% | 2,324 | 4,884 | +110% | 0 | 0 | — |
case-02 | pass→pass | 11,658 | 7,600 | -35% | 1 | 1 | 0% | 1,845 | 4,068 | +120% | 0 | 0 | — |
case-03 | pass→pass | 12,053 | 5,676 | -53% | 1 | 1 | 0% | 2,219 | 3,625 | +63% | 0 | 0 | — |
case-04 | pass→pass | 7,988 | 4,198 | -47% | 1 | 1 | 0% | 1,062 | 3,327 | +213% | 0 | 0 | — |
case-05 | pass→pass | 11,410 | 8,004 | -30% | 1 | 1 | 0% | 1,786 | 3,772 | +111% | 0 | 0 | — |
case-06 | pass→pass | 7,245 | 4,764 | -34% | 1 | 1 | 0% | 1,052 | 3,362 | +220% | 0 | 0 | — |
case-07 | pass→pass | 3,968 | 3,374 | -15% | 1 | 1 | 0% | 524 | 3,101 | +492% | 0 | 0 | — |
case-08 | pass→pass | 10,486 | 3,817 | -64% | 1 | 1 | 0% | 1,800 | 3,158 | +75% | 0 | 0 | — |
case-09 | pass→pass | 12,360 | 8,429 | -32% | 1 | 1 | 0% | 2,216 | 4,212 | +90% | 0 | 0 | — |
case-10 | pass→pass | 6,189 | 3,615 | -42% | 1 | 1 | 0% | 930 | 3,057 | +229% | 0 | 0 | — |
case-11 | pass→pass | 5,426 | 3,419 | -37% | 1 | 1 | 0% | 848 | 3,009 | +255% | 0 | 0 | — |
case-12 | pass→pass | 14,416 | 13,750 | -5% | 1 | 1 | 0% | 2,632 | 4,544 | +73% | 0 | 0 | — |
case-13 | pass→pass | 19,394 | 19,604 | +1% | 1 | 1 | 0% | 2,679 | 5,690 | +112% | 0 | 0 | — |
case-14 | pass→pass | 6,913 | 7,182 | +4% | 1 | 1 | 0% | 1,048 | 3,487 | +233% | 0 | 0 | — |
case-15 | pass→pass | 13,002 | 7,310 | -44% | 1 | 1 | 0% | 2,307 | 3,606 | +56% | 0 | 0 | — |
case-16 | pass→pass | 3,722 | 2,817 | -24% | 1 | 1 | 0% | 647 | 2,953 | +356% | 0 | 0 | — |
case-17 | pass→pass | 14,082 | 14,921 | +6% | 1 | 1 | 0% | 2,424 | 4,583 | +89% | 0 | 0 | — |
case-18 | pass→pass | 5,040 | 5,006 | -1% | 1 | 1 | 0% | 688 | 3,232 | +370% | 0 | 0 | — |
case-19 | pass→pass | 5,333 | 2,461 | -54% | 1 | 1 | 0% | 862 | 2,946 | +242% | 0 | 0 | — |
case-20 | pass→pass | 5,665 | 11,072 | +95% | 1 | 1 | 0% | 1,055 | 4,272 | +305% | 0 | 0 | — |
case-21 | pass→pass | 10,410 | 10,165 | -2% | 1 | 1 | 0% | 1,905 | 4,701 | +147% | 0 | 0 | — |
case-22 | fail→pass | 16,123 | 22,118 | +37% | 1 | 1 | 0% | 3,339 | 5,996 | +80% | 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 +5 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.