Generate Aurora-style UI with animated glassmorphic effects
Design-style skill for Aurora UI: blurred, drifting color orbs behind glassmorphic foreground content, like Northern Lights.
Why it matters
Implement ethereal, Northern Lights-inspired user interfaces with animated color orbs, glassmorphism overlays, and fluid motion across web and mobile platforms.
Outcomes
What it gets done
Render blurred, animated color orbs that drift and scale in the background
Apply glassmorphic semi-transparent overlays to foreground UI elements
Generate platform-specific code for CSS, SwiftUI, Flutter, React Native, and Jetpack Compose
Configure dark backgrounds with vibrant luminous accents and elegant typography
Install
Add it to your toolbox
Run in your project directory:
curl -fsSL https://spark.entire.vc/get/ag-aurora-ui | bash Overview
Aurora UI
A design-style skill for Aurora UI - blurred, drifting color orbs behind glassmorphic foreground content - with matching Web CSS and SwiftUI implementations. Use it for hero sections, landing pages, or app backgrounds that should feel atmospheric and premium, with minimal foreground UI so the drifting background stays the visual focus.
What it does
Aurora UI is a design-style child skill ('ethereal, shifting lights, like the Northern Lights trapped beneath a pane of frosted glass'), part of the design-it family and not meant to be triggered directly. Three core principles: Blurred Color Orbs (large, out-of-focus, highly saturated color blobs floating in the background), Glassy Overlays (foreground elements are semi-transparent, using glassmorphism, so the aurora effect shines through), and Fluid Motion (background orbs slowly drift, expand, and contract rather than sitting static).
When to use - and when NOT to
Use it when the user's request matches this ethereal, glowing-background aesthetic - hero sections, landing pages, or app backgrounds meant to feel atmospheric and premium rather than flat-colored. As a design sub-style, it's selected by the parent design-it skill's routing rather than invoked on its own.
Inputs and outputs
Visual DNA requires dark, deep backgrounds with vibrant luminous accents - Midnight Luxury or a dark-mode-modified Yacht Club palette work well, injecting bright cyan, magenta, or lime green as the glowing orbs - paired with thin, elegant sans-serifs or sophisticated serifs in high-contrast white text, and a minimal foreground so the background stays the visual star. The web implementation places absolute-positioned, heavily blurred divs behind the main content: a radial-gradient orb (background: radial-gradient(circle, rgba(...) 0%, rgba(...) 0) 70%), filter: blur(80px)) animated with a float keyframe that translates and scales the orb across a 20-second loop, with multiple orbs staggered via negative animation-delay. Foreground content uses glassmorphic styling on top - background: rgba(255,255,255,0.03), backdrop-filter: blur(20px), a faint border - so the aurora glow reads through it.
.aurora-blob {
position: absolute; width: 400px; height: 400px;
background: radial-gradient(circle, rgba(181,154,95,0.8) 0%, rgba(181,154,95,0) 70%);
filter: blur(80px);
animation: float 20s infinite ease-in-out alternate;
}
Integrations
SwiftUI reproduces the same layering with a ZStack: a black background, two blurred Circle shapes with matching palette colors offset via animated state and looped with .repeatForever(autoreverses: true) over a 10-second ease-in-out duration, and glassy foreground content using the native .ultraThinMaterial background - the direct SwiftUI equivalent of the web's backdrop-filter: blur.
Flutter reproduces the loop with an AnimationController bound to SingleTickerProviderStateMixin, repeating in reverse over a 10-second duration to drive the same drift-and-blur behavior with dart:ui's blur filters.
Who it's for
Designers and developers building a premium, atmospheric hero section, landing page, or app background who want a drifting, glowing aurora effect behind glassmorphic content instead of a flat or static gradient.
Source README
Aurora UI
"Ethereal, shifting lights. Like the Northern Lights trapped beneath a pane of frosted glass."
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
- Blurred Color Orbs: Large, out-of-focus, highly saturated color blobs floating in the background.
- Glassy Overlays: Foreground elements are often semi-transparent (glassmorphism) to let the aurora effect shine through.
- Fluid Motion: The background color orbs should slowly drift, expand, and contract.
Visual DNA
- Colors: Requires dark, deep backgrounds with vibrant, luminous accents. Midnight Luxury or Yacht Club (modified to dark mode) work well, injecting bright cyan, magenta, or lime green as the glowing orbs.
- Typography: Thin, elegant sans-serifs or sophisticated serif fonts. High contrast white text.
- Layout: Keep foreground UI elements minimal to let the background remain the star.
Web Implementation
- Best achieved with absolute-positioned, heavily blurred
divs behind the main content. - CSS Example:
body {
background-color: #0A0A0A;
overflow-x: hidden;
position: relative;
}
/* The Glowing Orb */
.aurora-blob {
position: absolute;
width: 400px;
height: 400px;
background: radial-gradient(circle, rgba(181,154,95,0.8) 0%, rgba(181,154,95,0) 70%);
border-radius: 50%;
filter: blur(80px);
z-index: -1;
animation: float 20s infinite ease-in-out alternate;
}
.aurora-blob.blue {
background: radial-gradient(circle, rgba(92,107,115,0.8) 0%, rgba(0,0,0,0) 70%);
top: 20%;
left: 60%;
animation-delay: -5s;
}
@keyframes float {
0% { transform: translate(0, 0) scale(1); }
50% { transform: translate(-50px, 100px) scale(1.2); }
100% { transform: translate(100px, -50px) scale(0.9); }
}
/* Foreground content should be glassmorphic */
.aurora-card {
background: rgba(255,255,255,0.03);
backdrop-filter: blur(20px);
border: 1px solid rgba(255,255,255,0.05);
border-radius: 24px;
}
App Implementation
SwiftUI
struct AuroraView: View {
@State private var animate = false
var body: some View {
ZStack {
// Dark background
Color.black.ignoresSafeArea()
// Animated Orbs
Circle()
.fill(Color(red: 0.71, green: 0.60, blue: 0.37)) // #B59A5F
.blur(radius: 80)
.frame(width: 300, height: 300)
.offset(x: animate ? -50 : 50, y: animate ? -100 : 0)
Circle()
.fill(Color(red: 0.36, green: 0.42, blue: 0.45)) // #5C6B73
.blur(radius: 80)
.frame(width: 300, height: 300)
.offset(x: animate ? 100 : -50, y: animate ? 100 : -50)
// Glassy Foreground content
VStack {
Text("Aurora Interface")
.font(.largeTitle.bold())
.foregroundColor(.white)
}
.frame(maxWidth: .infinity, maxHeight: .infinity)
.background(.ultraThinMaterial)
}
.onAppear {
withAnimation(.easeInOut(duration: 10).repeatForever(autoreverses: true)) {
animate = true
}
}
}
}
- Use
Circle().blur(radius: 80...120)in aZStackunderneath the main content. - Animate the
.offset()with a very longduration (10-20 seconds). - Use
.background(.ultraThinMaterial)on foreground containers to let the colored light bleed through nicely.
Flutter
import 'dart:ui';
class AuroraView extends StatefulWidget {
@override
State<AuroraView> createState() => _AuroraViewState();
}
class _AuroraViewState extends State<AuroraView> with SingleTickerProviderStateMixin {
late AnimationController _controller;
@override
void initState() {
super.initState();
_controller = AnimationController(vsync: this, duration: const Duration(seconds: 10))..repeat(reverse: true);
}
@override
void dispose() {
_controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.black,
body: Stack(
children: [
// Animated orb
AnimatedBuilder(
animation: _controller,
builder: (context, child) {
return Positioned(
top: 100 + (_controller.value * 100),
left: -50 + (_controller.value * 100),
child: Container(
width: 300,
height: 300,
decoration: const BoxDecoration(
shape: BoxShape.circle,
color: Color(0xFFB59A5F),
),
),
);
},
),
// Massive blur layer over the orbs
Positioned.fill(
child: BackdropFilter(
filter: ImageFilter.blur(sigmaX: 80, sigmaY: 80),
child: Container(color: Colors.transparent),
),
),
// Glassy Foreground
Center(
child: ClipRRect(
borderRadius: BorderRadius.circular(24),
child: BackdropFilter(
filter: ImageFilter.blur(sigmaX: 16, sigmaY: 16),
child: Container(
padding: const EdgeInsets.all(32),
color: Colors.white.withOpacity(0.05),
child: const Text('Aurora Interface',
style: TextStyle(color: Colors.white, fontSize: 24, fontWeight: FontWeight.bold)),
),
),
),
),
],
),
);
}
}
- A massive full-screen
BackdropFilterover moving solid circles is often more performant than blurring each circle individually. - Layer a second, weaker
BackdropFilterfor the actual foreground glassmorphism panels.
React Native
// Requires @react-native-community/blur
import { BlurView } from '@react-native-community/blur';
const AuroraView = () => {
const anim = useRef(new Animated.Value(0)).current;
useEffect(() => {
Animated.loop(
Animated.sequence([
Animated.timing(anim, { toValue: 1, duration: 10000, useNativeDriver: true }),
Animated.timing(anim, { toValue: 0, duration: 10000, useNativeDriver: true }),
])
).start();
}, []);
const translateY = anim.interpolate({ inputRange: [0, 1], outputRange: [0, 100] });
return (
<View style={{ flex: 1, backgroundColor: '#000' }}>
{/* Orb โ note: React Native struggles with massive live blurs,
so pre-rendered blurred PNGs are highly recommended for production */}
<Animated.Image
source={require('./blurred_orb_cyan.png')}
style={{
position: 'absolute',
top: -50, left: -50,
width: 400, height: 400,
opacity: 0.8,
transform: [{ translateY }]
}}
/>
{/* Glass Foreground */}
<View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
<BlurView blurType="dark" blurAmount={20} style={{ padding: 32, borderRadius: 24 }}>
<Text style={{ color: '#FFF', fontSize: 24, fontWeight: '700' }}>
Aurora Interface
</Text>
</BlurView>
</View>
</View>
);
};
- Performance Warning: Do NOT use
BlurViewwith huge amounts for moving background orbs on React Native - it will lag terribly, especially on Android. - Best Practice: Create large, already-blurred PNG images in Figma/Photoshop and animate those using
Animated.Image.
Jetpack Compose
@Composable
fun AuroraView() {
val infiniteTransition = rememberInfiniteTransition()
val offsetY by infiniteTransition.animateFloat(
initialValue = -50f,
targetValue = 100f,
animationSpec = infiniteRepeatable(
animation = tween(10000, easing = LinearEasing),
repeatMode = RepeatMode.Reverse
)
)
Box(modifier = Modifier
.fillMaxSize()
.background(Color.Black)) {
// Blurred Orb
Box(
modifier = Modifier
.offset(x = (-50).dp, y = offsetY.dp)
.size(300.dp)
.blur(80.dp) // API 31+ only!
.background(Color(0xFFB59A5F), CircleShape)
)
// Pre-API 31 fallback: use a radial gradient instead of blur
Box(
modifier = Modifier
.offset(x = 150.dp, y = (offsetY * -1).dp)
.size(300.dp)
.background(
Brush.radialGradient(
colors = listOf(Color(0xFF5C6B73).copy(alpha = 0.8f), Color.Transparent)
)
)
)
// Glass panel
Card(
modifier = Modifier.align(Alignment.Center).padding(32.dp),
colors = CardDefaults.cardColors(containerColor = Color.White.copy(alpha = 0.05f)),
shape = RoundedCornerShape(24.dp),
) {
Text("Aurora Interface",
color = Color.White, fontSize = 24.sp, fontWeight = FontWeight.Bold,
modifier = Modifier.padding(32.dp))
}
}
}
Modifier.blur()is only fully supported on Android 12 (API 31+).- Critical Fallback: For older devices, use
Brush.radialGradientfading from color toColor.Transparentto fake the glowing orb effect without needing expensive blur calculations.
Do's and Don'ts
- DO: Ensure the foreground text remains legible. If a bright orb floats behind white text, the text will vanish. Use glassy panels to guarantee contrast.
- DON'T: Use sharp gradients. Everything in the background must be heavily blurred and diffuse.
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.
FAQ
Common questions
Discussion
Questions & comments ยท 0
Sign In Sign in to leave a comment.