Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Web and App implementation guide for Holographic UI. Trigger when user wants light-based appearance, projected interfaces, and transparent floating elements.
.claude/skills/lingxling-holographic-ui/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 77% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 72% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 72% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 36% | 0% |
| case-20 | ✓→✓ | = Same ✓ | 81% | 0% |
> "Made of light. Interfaces projected into thin air, visible but completely translucent."
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.
text-shadow.rgba(), mix-blend-mode: screen or add, and CSS filters.cssbody { background-color: #020202; /* Must be dark for holograms to show */ background-image: url('dark-lab-background.jpg'); background-size: cover; color: #88ffff; } .hologram-panel { background: rgba(0, 200, 255, 0.05); /* Extremely sheer */ border: 1px solid rgba(136, 255, 255, 0.5); border-radius: 4px; padding: 30px; /* The glowing edge */ box-shadow: inset 0 0 20px rgba(0, 200, 255, 0.2), 0 0 15px rgba(0, 200, 255, 0.3); /* Scanline effect */ background-image: linear-gradient( rgba(136, 255, 255, 0.1) 1px, transparent 1px ); background-size: 100% 4px; } .holo-text { font-family: 'Rajdhani', sans-serif; text-transform: uppercase; text-shadow: 0 0 8px rgba(136, 255, 255, 0.8); mix-blend-mode: screen; } /* Subtle flicker */ .holo-flicker { animation: hologramFlicker 4s infinite; } @keyframes hologramFlicker { 0%, 100% { opacity: 1; } 92% { opacity: 1; } 93% { opacity: 0.4; } 94% { opacity: 0.9; } 96% { opacity: 0.2; } 98% { opacity: 1; } }
swiftstruct HolographicUIView: View { @State private var isFlickering = false var body: some View { ZStack { Color.black.ignoresSafeArea() VStack { Text("HOLOGRAM ACTIVE") .font(.custom("Courier", size: 24)) .foregroundColor(Color(hex: "88FFFF")) .shadow(color: Color(hex: "88FFFF"), radius: 10) .blendMode(.screen) // Critical for light UI Spacer().frame(height: 40) VStack { Text("SYSTEM DIAGNOSTICS") .foregroundColor(Color(hex: "88FFFF")) } .padding(30) .frame(maxWidth: .infinity) .background(Color(hex: "88FFFF").opacity(0.05)) .border(Color(hex: "88FFFF").opacity(0.5), width: 1) // The glowing edge effect .shadow(color: Color(hex: "88FFFF").opacity(0.5), radius: 15) .blendMode(.screen) .opacity(isFlickering ? 0.4 : 1.0) } .padding() // Scanline Overlay LinearGradient( stops: [ .init(color: Color(hex: "88FFFF").opacity(0.1), location: 0), .init(color: .clear, location: 0.5) ], startPoint: .top, endPoint: .bottom ) .frame(height: 4) .background(Color.clear) // You would tile this in a real app using an Image or custom shape .blendMode(.screen) } .onAppear { // Simulate flicker Timer.scheduledTimer(withTimeInterval: 0.1, repeats: true) { _ in if Int.random(in: 1...100) > 95 { isFlickering.toggle() DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { isFlickering = false } } } } } }
.blendMode(.screen) is absolutely critical. It makes elements act like projected light..shadow() modifiers to create a bloom effect around text and borders.dartclass HolographicScreen extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( backgroundColor: Colors.black, // Dark lab background body: Stack( children: [ Padding( padding: const EdgeInsets.all(24.0), child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ // Glowing Text const Text( 'HOLOGRAM ACTIVE', style: TextStyle( fontFamily: 'Courier', fontSize: 24, color: Color(0xFF88FFFF), shadows: [Shadow(color: Color(0xFF88FFFF), blurRadius: 10)], ), ), const SizedBox(height: 40), // Hologram Panel Container( width: double.infinity, padding: const EdgeInsets.all(30), decoration: BoxDecoration( color: const Color(0xFF88FFFF).withOpacity(0.05), border: Border.all(color: const Color(0xFF88FFFF).withOpacity(0.5)), boxShadow: [ BoxShadow(color: const Color(0xFF88FFFF).withOpacity(0.2), blurRadius: 15, spreadRadius: 5), ], ), child: const Text( 'SYSTEM DIAGNOSTICS', textAlign: TextAlign.center, style: TextStyle(color: Color(0xFF88FFFF)), ), ), ], ), ), // Scanlines (IgnorePointer so it doesn't block taps) IgnorePointer( child: ShaderMask( blendMode: BlendMode.screen, // Makes it act like light shaderCallback: (bounds) => const LinearGradient( begin: Alignment.topCenter, end: Alignment.bottomCenter, stops: [0.0, 0.5, 0.5, 1.0], colors: [Colors.black12, Colors.black12, Colors.transparent, Colors.transparent], ).createShader(bounds), // To actually tile in Flutter, you often need a CustomPainter. // Here we simulate the blend mode. child: Container(color: const Color(0xFF88FFFF).withOpacity(0.1)), ), ), ], ), ); } }
Shadow array inside TextStyle creates the glowing text.BoxShadow with spreadRadius creates the glowing panel border.ShaderMask with BlendMode.screen layered over the UI gives it that light-projection quality.jsxconst HolographicScreen = () => { return ( <View style={{ flex: 1, backgroundColor: '#020202', padding: 24, justifyContent: 'center' }}> <Text style={{ fontFamily: 'monospace', fontSize: 24, textAlign: 'center', color: '#88FFFF', textShadowColor: '#88FFFF', textShadowRadius: 10, marginBottom: 40 }}> HOLOGRAM ACTIVE </Text> <View style={{ backgroundColor: 'rgba(0, 200, 255, 0.05)', borderWidth: 1, borderColor: 'rgba(136, 255, 255, 0.5)', padding: 30, borderRadius: 4, // The glowing edge shadowColor: '#88FFFF', shadowOffset: { width: 0, height: 0 }, shadowOpacity: 0.5, shadowRadius: 15, elevation: 10 }}> <Text style={{ color: '#88FFFF', textAlign: 'center', fontFamily: 'monospace' }}> SYSTEM DIAGNOSTICS </Text> </View> {/* Pseudo-scanlines overlay. In a real app, use an repeating Image background. */} <View pointerEvents="none" style={{ position: 'absolute', top: 0, left: 0, right: 0, bottom: 0, backgroundColor: 'rgba(136, 255, 255, 0.03)', }} /> </View> ); };
mix-blend-mode out of the box, so you must rely heavily on low-opacity backgrounds and intense textShadow / shadowRadius.pointerEvents="none" on scanline overlays so they don't block user interactions.kotlin@Composable fun HolographicScreen() { Box(modifier = Modifier.fillMaxSize().background(Color(0xFF020202))) { Column( modifier = Modifier.fillMaxSize().padding(24.dp), verticalArrangement = Arrangement.Center, horizontalAlignment = Alignment.CenterHorizontally ) { // Glowing Text Text( text = "HOLOGRAM ACTIVE", fontFamily = FontFamily.Monospace, fontSize = 24.sp, color = Color(0xFF88FFFF), style = TextStyle( shadow = Shadow(color = Color(0xFF88FFFF), blurRadius = 10f) ), modifier = Modifier.graphicsLayer { blendMode = BlendMode.Screen } ) Spacer(Modifier.height(40.dp)) // Glowing Panel Box( modifier = Modifier .fillMaxWidth() .graphicsLayer { blendMode = BlendMode.Screen } .shadow(15.dp, ambientColor = Color(0xFF88FFFF), spotColor = Color(0xFF88FFFF)) .background(Color(0xFF88FFFF).copy(alpha = 0.05f)) .border(1.dp, Color(0xFF88FFFF).copy(alpha = 0.5f)) .padding(30.dp), contentAlignment = Alignment.Center ) { Text("SYSTEM DIAGNOSTICS", color = Color(0xFF88FFFF), fontFamily = FontFamily.Monospace) } } // Simulating scanlines overlay Box( modifier = Modifier .fillMaxSize() .background(Color(0xFF88FFFF).copy(alpha = 0.03f)) ) } }
Modifier.graphicsLayer { blendMode = BlendMode.Screen } is exactly what you need in Compose to make elements act like projected light.shadow modifier with ambientColor and spotColor set to cyan to make the panels emit light.mix-blend-mode: screen (web) or additive blending so overlapping holographic panels get brighter where they intersect.| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-20 | pass→pass | 21,161 | 22,726 | +7% | 1 | 1 | 0% | 4,529 | 8,200 | +81% | 0 | 0 | — |
case-21 | pass→pass | 18,597 | 17,781 | -4% | 1 | 1 | 0% | 3,328 | 6,260 | +88% | 0 | 0 | — |
case-01 | fail→pass | 28,830 | 24,651 | -14% | 1 | 1 | 0% | 4,682 | 8,293 | +77% | 0 | 0 | — |
case-02 | fail→pass | 28,664 | 34,527 | +20% | 1 | 1 | 0% | 5,982 | 10,301 | +72% | 0 | 0 | — |
case-03 | pass→pass | 32,068 | 32,669 | +2% | 1 | 1 | 0% | 5,206 | 8,346 | +60% | 0 | 0 | — |
case-04 | fail→pass | 34,689 | 30,777 | -11% | 1 | 1 | 0% | 5,330 | 9,177 | +72% | 0 | 0 | — |
case-05 | fail→fail | 28,463 | 36,097 | +27% | 1 | 1 | 0% | 5,289 | 10,340 | +96% | 0 | 0 | — |
case-06 | pass→pass | 48,891 | 35,310 | -28% | 1 | 1 | 0% | 8,233 | 10,811 | +31% | 0 | 0 | — |
case-07 | fail→pass | 29,975 | 31,251 | +4% | 1 | 1 | 0% | 5,924 | 8,033 | +36% | 0 | 0 | — |
case-08 | pass→pass | 23,972 | 16,652 | -31% | 1 | 1 | 0% | 4,495 | 6,615 | +47% | 0 | 0 | — |
case-09 | pass→pass | 17,490 | 19,915 | +14% | 1 | 1 | 0% | 3,393 | 5,993 | +77% | 0 | 0 | — |
case-10 | pass→pass | 22,852 | 15,776 | -31% | 1 | 1 | 0% | 3,404 | 5,477 | +61% | 0 | 0 | — |
case-11 | pass→pass | 30,221 | 36,326 | +20% | 1 | 1 | 0% | 6,048 | 9,090 | +50% | 0 | 0 | — |
case-12 | pass→pass | 23,508 | 27,863 | +19% | 1 | 1 | 0% | 4,714 | 8,821 | +87% | 0 | 0 | — |
case-13 | pass→pass | 27,753 | 24,467 | -12% | 1 | 1 | 0% | 5,700 | 8,200 | +44% | 0 | 0 | — |
case-14 | pass→pass | 34,708 | 21,570 | -38% | 1 | 1 | 0% | 5,376 | 7,571 | +41% | 0 | 0 | — |
case-15 | pass→pass | 27,350 | 21,650 | -21% | 1 | 1 | 0% | 4,606 | 6,657 | +45% | 0 | 0 | — |
case-16 | pass→pass | 10,792 | 8,572 | -21% | 1 | 1 | 0% | 2,019 | 4,127 | +104% | 0 | 0 | — |
case-17 | pass→pass | 25,223 | 28,497 | +13% | 1 | 1 | 0% | 4,068 | 7,629 | +88% | 0 | 0 | — |
case-18 | pass→pass | 12,588 | 8,045 | -36% | 1 | 1 | 0% | 1,913 | 4,503 | +135% | 0 | 0 | — |
case-19 | pass→pass | 22,703 | 12,079 | -47% | 1 | 1 | 0% | 4,289 | 5,407 | +26% | 0 | 0 | — |
case-22 | pass→pass | 25,207 | 14,609 | -42% | 1 | 1 | 0% | 4,915 | 5,795 | +18% | 0 | 0 | — |
case-23 | pass→pass | 20,599 | 23,719 | +15% | 1 | 1 | 0% | 3,058 | 7,036 | +130% | 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 +17 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.