Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Web and App implementation guide for Spatial Design. Trigger when user wants environment-aware layouts, Apple Vision Pro inspiration, and mixed reality aesthetics.
.claude/skills/lingxling-spatial-design/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-06 | ✗→✓ | ▲ Improved | 94% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 73% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 67% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 63% | 0% |
| case-15 | ✗→✓ | ▲ Improved | 103% | 0% |
> "UI that belongs in the room with you. Transparent, glass-like panels that react to the lighting of the physical space."
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.
rgba() white or black. The actual color comes entirely from the background environment.SF Pro is the gold standard here.cssbody { /* Needs a complex background to look right */ background: url('room-environment.jpg') cover; } .spatial-panel { /* The core material */ background: rgba(255, 255, 255, 0.2); /* Very sheer */ backdrop-filter: blur(40px) saturate(150%); -webkit-backdrop-filter: blur(40px) saturate(150%); border-radius: 32px; padding: 40px; /* The specular rim light */ box-shadow: inset 0 1px 1px rgba(255,255,255,0.6), inset 0 0 1px 1px rgba(255,255,255,0.2), 0 24px 48px rgba(0,0,0,0.1); } .spatial-btn { background: rgba(0,0,0,0.1); color: white; border-radius: 20px; padding: 12px 24px; backdrop-filter: blur(10px); transition: all 0.2s; } .spatial-btn:hover { background: rgba(255,255,255,0.2); /* Highlight effect */ box-shadow: inset 0 0 20px rgba(255,255,255,0.4); }
swiftstruct SpatialDesignView: View { var body: some View { ZStack { // Environment background Image("room-environment") .resizable() .aspectRatio(contentMode: .fill) .ignoresSafeArea() // Spatial Panel VStack(spacing: 24) { Text("Environmental UI") .font(.title).fontWeight(.bold) .foregroundColor(.white) Button(action: {}) { Text("Interact") .foregroundColor(.white) .padding(.horizontal, 32) .padding(.vertical, 16) } .background(.ultraThinMaterial) .clipShape(Capsule()) .overlay(Capsule().stroke(Color.white.opacity(0.3), lineWidth: 1)) } .padding(40) .background(.ultraThinMaterial) // The core spatial material .cornerRadius(32) // Specular rim light .overlay( RoundedRectangle(cornerRadius: 32) .stroke( LinearGradient( colors: [.white.opacity(0.6), .white.opacity(0.1)], startPoint: .topLeading, endPoint: .bottomTrailing ), lineWidth: 1 ) ) // Very soft, diffuse shadow .shadow(color: .black.opacity(0.1), radius: 40, y: 20) } } }
.background(.ultraThinMaterial) is exactly what Apple uses for this aesthetic..overlay with a LinearGradient stroke to simulate a light source hitting the top-left edge of the glass.dartimport 'dart:ui'; class SpatialDesignScreen extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( body: Stack( fit: StackFit.expand, children: [ Image.asset('assets/room-environment.jpg', fit: BoxFit.cover), Center( child: ClipRRect( borderRadius: BorderRadius.circular(32), child: BackdropFilter( filter: ImageFilter.blur(sigmaX: 30.0, sigmaY: 30.0), child: Container( width: 350, padding: const EdgeInsets.all(40), decoration: BoxDecoration( color: Colors.white.withOpacity(0.1), borderRadius: BorderRadius.circular(32), // Specular rim light border: Border.all(color: Colors.white.withOpacity(0.4), width: 1), ), child: Column( mainAxisSize: MainAxisSize.min, children: [ const Text('Environmental UI', style: TextStyle(color: Colors.white, fontSize: 28, fontWeight: FontWeight.bold)), const SizedBox(height: 32), // Spatial Button ClipRRect( borderRadius: BorderRadius.circular(50), child: BackdropFilter( filter: ImageFilter.blur(sigmaX: 10.0, sigmaY: 10.0), child: Container( padding: const EdgeInsets.symmetric(horizontal: 32, vertical: 16), decoration: BoxDecoration( color: Colors.black.withOpacity(0.1), border: Border.all(color: Colors.white.withOpacity(0.2)), borderRadius: BorderRadius.circular(50), ), child: const Text('Interact', style: TextStyle(color: Colors.white)), ), ), ) ], ), ), ), ), ), ], ), ); } }
BackdropFilter is required to blur the background.BackdropFilter. This creates nested glass, which is a hallmark of Spatial Design.jsx// REQUIRES: @react-native-community/blur import { BlurView } from '@react-native-community/blur'; const SpatialDesignScreen = () => { return ( <ImageBackground source={{uri: 'room_bg'}} style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}> <View style={{ width: '85%', shadowColor: '#000', shadowOffset: { width: 0, height: 20 }, shadowOpacity: 0.1, shadowRadius: 40, elevation: 10 }}> <BlurView style={{ borderRadius: 32, borderWidth: 1, borderColor: 'rgba(255,255,255,0.4)', padding: 40, alignItems: 'center' }} blurType="light" blurAmount={20} > <Text style={{ color: '#FFF', fontSize: 28, fontWeight: 'bold', marginBottom: 32 }}> Environmental UI </Text> <View style={{ borderRadius: 50, overflow: 'hidden' }}> <BlurView blurType="dark" blurAmount={10} style={{ paddingVertical: 16, paddingHorizontal: 32, borderWidth: 1, borderColor: 'rgba(255,255,255,0.2)' }}> <Text style={{ color: '#FFF', fontSize: 16 }}>Interact</Text> </BlurView> </View> </BlurView> </View> </ImageBackground> ); };
BlurView from @react-native-community/blur is the only way to achieve this.blurType="light" for the main panel and blurType="dark" for the buttons to create contrast between the glass layers.kotlin@Composable fun SpatialDesignScreen() { Box(modifier = Modifier.fillMaxSize()) { Image(painterResource(R.drawable.room_environment), null, contentScale = ContentScale.Crop, modifier = Modifier.fillMaxSize()) Box( modifier = Modifier .align(Alignment.Center) .width(350.dp) // Shadow goes on the outside .shadow(20.dp, RoundedCornerShape(32.dp), spotColor = Color.Black.copy(alpha = 0.1f)) // Android 12+ Blur .graphicsLayer { renderEffect = RenderEffect.createBlurEffect(30f, 30f, Shader.TileMode.DECAL).asComposeRenderEffect() clip = true shape = RoundedCornerShape(32.dp) } .background(Color.White.copy(alpha = 0.1f)) .border(1.dp, Brush.linearGradient(listOf(Color.White.copy(alpha = 0.6f), Color.Transparent)), RoundedCornerShape(32.dp)) .padding(40.dp), contentAlignment = Alignment.Center ) { Column(horizontalAlignment = Alignment.CenterHorizontally) { Text("Environmental UI", color = Color.White, fontSize = 28.sp, fontWeight = FontWeight.Bold) Spacer(Modifier.height(32.dp)) // Button Box( modifier = Modifier .background(Color.Black.copy(alpha = 0.1f), CircleShape) .border(1.dp, Color.White.copy(alpha = 0.2f), CircleShape) .padding(horizontal = 32.dp, vertical = 16.dp) ) { Text("Interact", color = Color.White) } } } } }
Brush.linearGradient applied to the Modifier.border perfectly simulates the top-down rim light hitting a thick pane of glass.saturate() filter on the backdrop blur to make the background colors pop through the glass.| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | pass→pass | 18,364 | 18,479 | +1% | 1 | 1 | 0% | 3,698 | 5,234 | +42% | 0 | 0 | — |
case-02 | pass→pass | 16,180 | 16,480 | +2% | 1 | 1 | 0% | 3,155 | 5,396 | +71% | 0 | 0 | — |
case-03 | pass→pass | 33,083 | 50,600 | +53% | 1 | 1 | 0% | 4,997 | 7,658 | +53% | 0 | 0 | — |
case-04 | pass→pass | 18,388 | 12,505 | -32% | 1 | 1 | 0% | 2,795 | 5,153 | +84% | 0 | 0 | — |
case-05 | pass→pass | 20,372 | 20,261 | -1% | 1 | 1 | 0% | 3,787 | 5,951 | +57% | 0 | 0 | — |
case-06 | fail→pass | 21,889 | 20,917 | -4% | 1 | 1 | 0% | 3,287 | 6,362 | +94% | 0 | 0 | — |
case-07 | fail→fail | 19,844 | 27,271 | +37% | 1 | 1 | 0% | 3,887 | 7,129 | +83% | 0 | 0 | — |
case-08 | fail→pass | 19,040 | 18,117 | -5% | 1 | 1 | 0% | 3,734 | 6,454 | +73% | 0 | 0 | — |
case-09 | fail→pass | 21,473 | 29,243 | +36% | 1 | 1 | 0% | 4,232 | 7,081 | +67% | 0 | 0 | — |
case-10 | pass→pass | 16,753 | 17,620 | +5% | 1 | 1 | 0% | 3,301 | 5,345 | +62% | 0 | 0 | — |
case-11 | fail→pass | 23,555 | 18,772 | -20% | 1 | 1 | 0% | 3,449 | 5,616 | +63% | 0 | 0 | — |
case-12 | pass→pass | 16,675 | 11,679 | -30% | 1 | 1 | 0% | 3,237 | 4,910 | +52% | 0 | 0 | — |
case-13 | pass→pass | 12,249 | 6,102 | -50% | 1 | 1 | 0% | 1,909 | 3,765 | +97% | 0 | 0 | — |
case-14 | pass→pass | 13,362 | 6,504 | -51% | 1 | 1 | 0% | 2,276 | 3,612 | +59% | 0 | 0 | — |
case-15 | fail→pass | 17,278 | 13,028 | -25% | 1 | 1 | 0% | 2,456 | 4,992 | +103% | 0 | 0 | — |
case-16 | pass→pass | 12,191 | 11,220 | -8% | 1 | 1 | 0% | 2,239 | 4,291 | +92% | 0 | 0 | — |
case-17 | pass→pass | 15,347 | 7,599 | -50% | 1 | 1 | 0% | 2,317 | 4,204 | +81% | 0 | 0 | — |
case-18 | pass→pass | 15,425 | 16,544 | +7% | 1 | 1 | 0% | 2,916 | 5,241 | +80% | 0 | 0 | — |
case-19 | pass→pass | 12,354 | 10,579 | -14% | 1 | 1 | 0% | 2,391 | 4,679 | +96% | 0 | 0 | — |
case-20 | pass→pass | 13,190 | 10,537 | -20% | 1 | 1 | 0% | 2,214 | 4,326 | +95% | 0 | 0 | — |
case-21 | pass→pass | 11,094 | 11,659 | +5% | 1 | 1 | 0% | 2,073 | 4,955 | +139% | 0 | 0 | — |
case-22 | pass→pass | 38,193 | 48,302 | +26% | 1 | 1 | 0% | 6,327 | 10,863 | +72% | 0 | 0 | — |
case-23 | pass→pass | 16,517 | 17,438 | +6% | 1 | 1 | 0% | 2,340 | 5,607 | +140% | 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. 23 cases were attempted. The headline lift of +22 percentage points is the difference between those two pass rates over the 23 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.