Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Web and App implementation guide for Spatial Computing UI. Trigger when user wants floating elements, environmental awareness, and Apple Vision Pro style.
.claude/skills/lingxling-spatial-computing-ui/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-02 | ✗→✓ | ▲ Improved | 66% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 63% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 25% | 0% |
| case-14 | ✗→✓ | ▲ Improved | 13% | 0% |
| case-15 | ✗→✓ | ▲ Improved | 109% | 0% |
> "A step beyond Spatial Design. Fully 3D windows floating in augmented reality."
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(255,255,255,0.x)) and blacks. SF Pro. Heavy use of varied font weights (Regular, Semibold, Bold) to create hierarchy.24px-32px). Everything is a rounded rectangle or a perfect circle.cssbody { /* Simulate the physical room */ background: url('living-room.jpg') center/cover; perspective: 1200px; display: flex; justify-content: center; align-items: center; height: 100vh; } .spatial-window { width: 800px; height: 600px; border-radius: 32px; /* The Glass Material */ background: rgba(255, 255, 255, 0.15); backdrop-filter: blur(50px) saturate(200%); -webkit-backdrop-filter: blur(50px) saturate(200%); /* Specular Highlights */ border: 1px solid rgba(255, 255, 255, 0.4); box-shadow: inset 0 1px 2px rgba(255, 255, 255, 0.8), 0 30px 60px rgba(0, 0, 0, 0.3); /* 3D Positioning */ transform: translateZ(-100px); transform-style: preserve-3d; } .spatial-modal { /* Floating in front of the main window */ position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%) translateZ(50px); background: rgba(255, 255, 255, 0.6); /* More opaque */ backdrop-filter: blur(30px); border-radius: 24px; padding: 30px; box-shadow: 0 20px 40px rgba(0, 0, 0, 0.2); } .spatial-btn { /* Gaze/Hover interaction */ background: rgba(0,0,0,0.05); transition: all 0.2s cubic-bezier(0.2, 0.8, 0.2, 1); } .spatial-btn:hover { background: rgba(255,255,255,0.4); transform: translateZ(10px) scale(1.05); box-shadow: 0 10px 20px rgba(0,0,0,0.1); }
swiftstruct SpatialComputingView: View { var body: some View { ZStack { // Simulated room environment Image("living-room") .resizable() .aspectRatio(contentMode: .fill) .ignoresSafeArea() // Spatial Window VStack(spacing: 24) { Text("Spatial Window") .font(.title).fontWeight(.bold) .foregroundColor(.white) // Gaze-reactive button Button(action: {}) { Text("Focus Me") .fontWeight(.semibold) .foregroundColor(.white) .padding(.horizontal, 32) .padding(.vertical, 16) // .hoverEffect() is magic on visionOS/iPadOS // .hoverEffect(.highlight) } .background(Color.black.opacity(0.2)) .clipShape(Capsule()) } .padding(60) // The magic glass material .background(.ultraThinMaterial) .cornerRadius(32) // Specular edge highlight .overlay( RoundedRectangle(cornerRadius: 32) .stroke(Color.white.opacity(0.4), lineWidth: 1) ) // Environmental shadow .shadow(color: .black.opacity(0.3), radius: 40, y: 30) // Z-Space Modal simulation (if on iOS) // On visionOS, this would be a separate window volume Text("Floating Modal") .foregroundColor(.white) .padding(30) .background(.thinMaterial) .cornerRadius(24) .shadow(color: .black.opacity(0.4), radius: 30, y: 20) .offset(x: 100, y: 100) } } }
.ultraThinMaterial for the base windows and .thinMaterial for floating popovers so they feel more opaque as they get closer to the eye..hoverEffect() extensively if targeting iPadOS or visionOS.dartimport 'dart:ui'; class SpatialComputingScreen extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( body: Stack( fit: StackFit.expand, children: [ // Simulated Environment Image.asset('assets/living-room.jpg', fit: BoxFit.cover), Center( child: ClipRRect( borderRadius: BorderRadius.circular(32), child: BackdropFilter( filter: ImageFilter.blur(sigmaX: 40.0, sigmaY: 40.0), // Heavy blur child: Container( width: 600, height: 400, decoration: BoxDecoration( color: Colors.white.withOpacity(0.15), // Glass tint borderRadius: BorderRadius.circular(32), border: Border.all(color: Colors.white.withOpacity(0.4), width: 1), // Specular highlight // Note: BoxShadow won't render under BackdropFilter nicely unless wrapped in a separate PhysicalModel ), child: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ const Text('Spatial Window', style: TextStyle(color: Colors.white, fontSize: 32, fontWeight: FontWeight.bold)), const SizedBox(height: 32), // Simulated Gaze Button InkWell( onTap: () {}, borderRadius: BorderRadius.circular(50), hoverColor: Colors.white.withOpacity(0.4), // Reacts to mouse/gaze child: Container( padding: const EdgeInsets.symmetric(horizontal: 32, vertical: 16), decoration: BoxDecoration(color: Colors.black.withOpacity(0.2), borderRadius: BorderRadius.circular(50)), child: const Text('Focus Me', style: TextStyle(color: Colors.white, fontSize: 18)), ), ) ], ), ), ), ), ), ), ], ), ); } }
BackdropFilter inside a ClipRRect to give the blurred glass rounded corners.hoverColor on InkWell simulates the gaze-highlighting.jsx// REQUIRES: @react-native-community/blur import { BlurView } from '@react-native-community/blur'; const SpatialComputingScreen = () => { return ( <ImageBackground source={{uri: 'room_bg'}} style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}> {/* Spatial Window */} <View style={{ width: '90%', height: 400, shadowColor: '#000', shadowOffset: { width: 0, height: 30 }, shadowOpacity: 0.3, shadowRadius: 40, elevation: 20 }}> <BlurView style={{ flex: 1, borderRadius: 32, borderWidth: 1, borderColor: 'rgba(255,255,255,0.4)', padding: 40, justifyContent: 'center', alignItems: 'center' }} blurType="light" blurAmount={30} reducedTransparencyFallbackColor="gray" > <Text style={{ color: '#FFF', fontSize: 32, fontWeight: 'bold', marginBottom: 32 }}> Spatial Window </Text> {/* Touchable simulating Gaze */} <TouchableOpacity style={{ backgroundColor: 'rgba(0,0,0,0.2)', paddingVertical: 16, paddingHorizontal: 32, borderRadius: 50 }}> <Text style={{ color: '#FFF', fontSize: 18, fontWeight: '600' }}>Focus Me</Text> </TouchableOpacity> </BlurView> </View> </ImageBackground> ); };
@react-native-community/blur.View, and put the BlurView inside it with borderRadius and borderWidth.kotlin@Composable fun SpatialComputingScreen() { Box(modifier = Modifier.fillMaxSize()) { // Environment Image(painterResource(R.drawable.living_room), contentDescription = null, contentScale = ContentScale.Crop, modifier = Modifier.fillMaxSize()) // Spatial Window Box( modifier = Modifier .align(Alignment.Center) .size(600.dp, 400.dp) // Note: Native Android background blur requires Android 12+ (RenderEffect) .graphicsLayer { renderEffect = RenderEffect.createBlurEffect(40f, 40f, Shader.TileMode.DECAL).asComposeRenderEffect() clip = true shape = RoundedCornerShape(32.dp) } .background(Color.White.copy(alpha = 0.15f)) .border(1.dp, Color.White.copy(alpha = 0.4f), RoundedCornerShape(32.dp)) .padding(40.dp), contentAlignment = Alignment.Center ) { Column(horizontalAlignment = Alignment.CenterHorizontally) { Text("Spatial Window", color = Color.White, fontSize = 32.sp, fontWeight = FontWeight.Bold) Spacer(Modifier.height(32.dp)) // Button Box( modifier = Modifier .background(Color.Black.copy(alpha = 0.2f), CircleShape) .clickable { } .padding(horizontal = 32.dp, vertical = 16.dp) ) { Text("Focus Me", color = Color.White, fontSize = 18.sp, fontWeight = FontWeight.SemiBold) } } } } }
RenderEffect.createBlurEffect applied to the graphicsLayer to blur the UI behind the compose element.border modifier applies the bright specular rim-light crucial to glass effects.| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-02 | fail→pass | 20,836 | 10,633 | -49% | 1 | 1 | 0% | 2,788 | 4,640 | +66% | 0 | 0 | — |
case-03 | pass→pass | 17,865 | 17,205 | -4% | 1 | 1 | 0% | 3,274 | 6,437 | +97% | 0 | 0 | — |
case-01 | fail→fail | 24,997 | 22,873 | -8% | 1 | 1 | 0% | 5,356 | 7,459 | +39% | 0 | 0 | — |
case-04 | pass→pass | 12,861 | 5,824 | -55% | 1 | 1 | 0% | 2,259 | 4,141 | +83% | 0 | 0 | — |
case-05 | fail→pass | 21,887 | 23,027 | +5% | 1 | 1 | 0% | 3,227 | 5,261 | +63% | 0 | 0 | — |
case-06 | pass→pass | 19,634 | 19,489 | -1% | 1 | 1 | 0% | 3,145 | 5,758 | +83% | 0 | 0 | — |
case-07 | fail→pass | 18,370 | 7,574 | -59% | 1 | 1 | 0% | 3,420 | 4,265 | +25% | 0 | 0 | — |
case-08 | pass→pass | 19,842 | 19,279 | -3% | 1 | 1 | 0% | 3,159 | 5,840 | +85% | 0 | 0 | — |
case-09 | pass→pass | 21,128 | 18,760 | -11% | 1 | 1 | 0% | 3,418 | 6,653 | +95% | 0 | 0 | — |
case-10 | pass→pass | 23,574 | 5,595 | -76% | 1 | 1 | 0% | 3,462 | 3,886 | +12% | 0 | 0 | — |
case-11 | pass→pass | 12,998 | 4,860 | -63% | 1 | 1 | 0% | 2,221 | 4,020 | +81% | 0 | 0 | — |
case-12 | pass→pass | 8,382 | 6,525 | -22% | 1 | 1 | 0% | 1,235 | 3,742 | +203% | 0 | 0 | — |
case-13 | fail→fail | 18,485 | 16,660 | -10% | 1 | 1 | 0% | 2,636 | 6,166 | +134% | 0 | 0 | — |
case-14 | fail→pass | 25,049 | 8,990 | -64% | 1 | 1 | 0% | 3,835 | 4,331 | +13% | 0 | 0 | — |
case-15 | fail→pass | 17,593 | 12,844 | -27% | 1 | 1 | 0% | 2,624 | 5,494 | +109% | 0 | 0 | — |
case-16 | pass→pass | 12,671 | 6,388 | -50% | 1 | 1 | 0% | 2,181 | 4,032 | +85% | 0 | 0 | — |
case-17 | pass→pass | 18,854 | 13,201 | -30% | 1 | 1 | 0% | 3,286 | 5,283 | +61% | 0 | 0 | — |
case-18 | pass→pass | 15,052 | 17,315 | +15% | 1 | 1 | 0% | 2,618 | 5,502 | +110% | 0 | 0 | — |
case-19 | pass→pass | 8,588 | 5,543 | -35% | 1 | 1 | 0% | 1,279 | 3,769 | +195% | 0 | 0 | — |
case-20 | pass→pass | 11,311 | 3,862 | -66% | 1 | 1 | 0% | 1,822 | 3,441 | +89% | 0 | 0 | — |
case-21 | fail→pass | 14,675 | 3,727 | -75% | 1 | 1 | 0% | 2,337 | 3,408 | +46% | 0 | 0 | — |
case-22 | pass→pass | 15,894 | 12,070 | -24% | 1 | 1 | 0% | 2,185 | 4,752 | +117% | 0 | 0 | — |
case-23 | pass→pass | 14,636 | 10,949 | -25% | 1 | 1 | 0% | 2,041 | 4,818 | +136% | 0 | 0 | — |
case-24 | pass→pass | 15,122 | 16,372 | +8% | 1 | 1 | 0% | 3,194 | 6,253 | +96% | 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 +25 percentage points is the difference between those two pass rates over the 24 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.