--- name: sci-fi-interface description: Web and App implementation guide for Sci-Fi Interface Design. Trigger when user wants HUDs, spacecraft dashboards, or tactical military readouts. date_added: "2026-06-17" risk: safe source: self source_type: self --- # Sci-Fi Interface Design (HUD) > "Heads-Up Display. Tactical, precise, and highly analytical." ## When to Use 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. ## Core Principles 1. **Wireframe and Outlines**: Interfaces are built almost entirely out of thin strokes rather than solid filled boxes. 2. **Circular Arrays & Radars**: Heavy use of concentric circles, radar sweeps, and curved progress bars. 3. **Monochrome + Warning**: Often entirely monochromatic (just blue, or just green) with a secondary color (red) used exclusively for alerts. ## Visual DNA - **Colors**: Midnight background. UI is pure Cyan, Emerald Green, or Amber (like classic monochrome monitors). **Minimalist Slate** works if made dark. - **Typography**: Strict, technical monospace fonts (`Share Tech Mono`, `VT323`, `Space Mono`). All caps. - **Styling**: Tiny UI chroming details (target brackets `[ ]`, framing lines, precise pixel coordinates). ## Web Implementation - Heavy use of SVG for circular dials, and CSS borders for the layout. - **CSS Example**: ```css body { background-color: #000b18; /* Deep space navy */ color: #4df; /* Holographic cyan */ font-family: 'Share Tech Mono', monospace; text-transform: uppercase; } /* The HUD Frame */ .hud-container { border: 1px solid rgba(68, 221, 255, 0.3); position: relative; padding: 30px; } /* Corner brackets */ .hud-container::before { content: ''; position: absolute; top: -2px; left: -2px; width: 20px; height: 20px; border-top: 2px solid #4df; border-left: 2px solid #4df; } .hud-container::after { content: ''; position: absolute; bottom: -2px; right: -2px; width: 20px; height: 20px; border-bottom: 2px solid #4df; border-right: 2px solid #4df; } .hud-value { font-size: 3rem; text-shadow: 0 0 10px rgba(68, 221, 255, 0.8); } .hud-warning { color: #ff3333; text-shadow: 0 0 10px rgba(255, 51, 51, 0.8); animation: blink 1s step-end infinite; } @keyframes blink { 50% { opacity: 0; } } ``` ## App Implementation ### SwiftUI ```swift struct SciFiHUDView: View { @State private var bootUp = false var body: some View { ZStack { Color(hex: "000b18").ignoresSafeArea() // Deep space navy VStack { // Circular Radar/Dial ZStack { Circle() .stroke(Color(hex: "4df").opacity(0.3), lineWidth: 1) Circle() .trim(from: 0.0, to: bootUp ? 0.75 : 0.0) .stroke(Color(hex: "4df"), style: StrokeStyle(lineWidth: 4, lineCap: .round)) .rotationEffect(.degrees(-90)) Text("SYS.OK") .font(.custom("Space Mono", size: 24)) .foregroundColor(Color(hex: "4df")) .shadow(color: Color(hex: "4df"), radius: 5) } .frame(width: 200, height: 200) .padding(.bottom, 40) // HUD Data Frame HStack { Text("COORD: 45.22, 12.8") Spacer() Text("[ LOCK ]") } .font(.custom("Space Mono", size: 16)) .foregroundColor(Color(hex: "4df")) .padding() .border(Color(hex: "4df").opacity(0.5), width: 1) .overlay( // Corner bracket accents Path { path in path.move(to: CGPoint(x: 0, y: 15)); path.addLine(to: CGPoint(x: 0, y: 0)); path.addLine(to: CGPoint(x: 15, y: 0)) path.move(to: CGPoint(x: 300, y: 15)); path.addLine(to: CGPoint(x: 300, y: 0)); path.addLine(to: CGPoint(x: 285, y: 0)) } .stroke(Color(hex: "4df"), lineWidth: 2) ) } .padding() } .onAppear { withAnimation(.easeInOut(duration: 2.0)) { bootUp = true } } } } ``` - SwiftUI is uniquely fantastic for Sci-Fi HUDs. `Circle().trim(from: to:)` lets you build complex sweeping circular progress rings. - Use `Path` overlays to draw the exact 90-degree corner brackets (`[ ]`) that define the HUD look. ### Flutter ```dart class SciFiHUDScreen extends StatefulWidget { @override State createState() => _SciFiHUDScreenState(); } class _SciFiHUDScreenState extends State with SingleTickerProviderStateMixin { late AnimationController _ctrl; @override void initState() { super.initState(); _ctrl = AnimationController(vsync: this, duration: const Duration(seconds: 2))..forward(); } @override Widget build(BuildContext context) { return Scaffold( backgroundColor: const Color(0xFF000B18), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ // Circular Radar SizedBox( width: 200, height: 200, child: Stack( fit: StackFit.expand, children: [ CircularProgressIndicator(value: 1.0, strokeWidth: 1, color: const Color(0xFF44DDFF).withOpacity(0.3)), AnimatedBuilder( animation: _ctrl, builder: (context, _) => CircularProgressIndicator( value: _ctrl.value * 0.75, // 75% full strokeWidth: 4, color: const Color(0xFF44DDFF), ), ), const Center( child: Text('SYS.OK', style: TextStyle(fontFamily: 'SpaceMono', color: Color(0xFF44DDFF), fontSize: 24, shadows: [Shadow(color: Color(0xFF44DDFF), blurRadius: 5)])), ) ], ), ), const SizedBox(height: 40), // HUD Data Frame (requires CustomPaint for true corner brackets) Container( width: 300, padding: const EdgeInsets.all(16), decoration: BoxDecoration(border: Border.all(color: const Color(0xFF44DDFF).withOpacity(0.5))), child: const Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text('COORD: 45.22, 12.8', style: TextStyle(fontFamily: 'SpaceMono', color: Color(0xFF44DDFF))), Text('[ LOCK ]', style: TextStyle(fontFamily: 'SpaceMono', color: Color(0xFF44DDFF))), ], ), ) ], ), ), ); } } ``` - `CircularProgressIndicator` is an easy hack for circular HUD rings, but for true Sci-Fi interfaces in Flutter, you should build a `CustomPainter` to draw concentric stroked circles and arcs. - Heavy use of monospace fonts and pure cyan (`#44DDFF`). ### React Native ```jsx // Requires react-native-svg import Svg, { Circle, Path } from 'react-native-svg'; const SciFiHUDScreen = () => { return ( {/* Circular Radar */} SYS.OK {/* HUD Frame */} COORD: 45.22, 12.8 [ LOCK ] {/* Pseudo Corner Brackets using absolute views */} ); }; ``` - You absolutely must use `react-native-svg` to draw circular HUD dials. Use `strokeDasharray` and `strokeDashoffset` on the `` to draw arcs. - The corner brackets are built easily by absolutely positioning small `View`s with 2 active borders over the corners of a container. ### Jetpack Compose ```kotlin @Composable fun SciFiHUDScreen() { // Animation for boot up val transition = rememberInfiniteTransition() val sweep by transition.animateFloat(initialValue = 0f, targetValue = 270f, animationSpec = infiniteRepeatable(tween(2000), RepeatMode.Restart)) Column( modifier = Modifier.fillMaxSize().background(Color(0xFF000B18)), horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.Center ) { // Circular Radar Box(contentAlignment = Alignment.Center, modifier = Modifier.size(200.dp)) { Canvas(modifier = Modifier.fillMaxSize()) { drawCircle(color = Color(0xFF44DDFF).copy(alpha = 0.3f), style = Stroke(width = 2f)) drawArc( color = Color(0xFF44DDFF), startAngle = -90f, sweepAngle = sweep, useCenter = false, style = Stroke(width = 8f, cap = StrokeCap.Round) ) } Text("SYS.OK", color = Color(0xFF44DDFF), fontFamily = FontFamily.Monospace, fontSize = 24.sp) } Spacer(Modifier.height(40.dp)) // HUD Frame Box(modifier = Modifier.width(300.dp)) { Row( modifier = Modifier.fillMaxWidth().border(1.dp, Color(0xFF44DDFF).copy(alpha = 0.5f)).padding(16.dp), horizontalArrangement = Arrangement.SpaceBetween ) { Text("COORD: 45.22, 12.8", color = Color(0xFF44DDFF), fontFamily = FontFamily.Monospace) Text("[ LOCK ]", color = Color(0xFF44DDFF), fontFamily = FontFamily.Monospace) } // Corner brackets via Canvas Canvas(modifier = Modifier.fillMaxSize()) { val path = Path().apply { moveTo(0f, 40f); lineTo(0f, 0f); lineTo(40f, 0f) // Top Left moveTo(size.width, size.height - 40f); lineTo(size.width, size.height); lineTo(size.width - 40f, size.height) // Bottom Right } drawPath(path, color = Color(0xFF44DDFF), style = Stroke(width = 4f)) } } } } ``` - Jetpack Compose's `Canvas` is incredibly powerful here. Use `drawArc` for the circular HUD rings. - Draw the corner brackets on a `Canvas` overlaying the Box using `Path().apply { moveTo... lineTo... }`. ## Do's and Don'ts - **DO**: Animate elements entering the screen as if they are 'booting up' or 'calibrating' (drawing lines from 0 to 100%). - **DON'T**: Use drop shadows. Light in a HUD is emitted, not blocked. Use `text-shadow` for glows instead. ## Limitations - This is a styling reference and does not replace environment-specific validation, accessibility testing, or expert review. - Ensure appropriate contrast ratios and responsive behaviors are verified separately.