
Flat Design 2.0
FreeImplement semi-flat design with subtle shadows for better usability.
Free · Opens the source repo
What Flat Design 2.0 does
Flat Design 2.0 (Semi-Flat) is a design implementation guide that focuses on achieving a modern aesthetic while enhancing usability through subtle visual cues. This skill is ideal for developers and designers looking to create web and app interfaces that maintain a primarily flat appearance but incorporate gentle shadows and micro-gradients to suggest depth and interactivity. By following the principles outlined in this guide, users can achieve a balance between minimalism and functionality, ensuring that their designs are not only visually appealing but also user-friendly.
The core principles of this design style emphasize a mostly flat aesthetic, where solid colors dominate, but with the addition of soft shadows to indicate interactive elements like buttons and modals. This approach helps users intuitively understand which parts of the interface are clickable or actionable. The use of micro-gradients adds a subtle layer of visual interest, preventing large areas from appearing too stark or lifeless.
For web implementation, the skill provides clear CSS examples that demonstrate how to create semi-flat components, such as cards and buttons, with appropriately styled shadows and hover effects. Similarly, for mobile applications, it includes SwiftUI, Flutter, and React Native code snippets, allowing developers to easily integrate this design approach into their projects. Each example emphasizes the importance of using tinted shadows and gentle animations to enhance the user experience without overwhelming the visual design.
This skill is particularly suited for those working in UI/UX design or front-end development who want to adopt a contemporary design language that resonates with users while adhering to modern usability standards. By leveraging the principles and examples provided, designers and developers can create cohesive and engaging interfaces that effectively communicate interactivity and depth.
When to use it
Use this skill when you want to implement a semi-flat design aesthetic that enhances usability through subtle visual cues, particularly in web and mobile applications.
When not to use it
This skill may not be suitable for projects requiring a fully three-dimensional design approach or where a more traditional, heavily textured aesthetic is preferred.
What you can build with it
Web Application Design
Use this skill to create a modern web application interface that communicates interactivity through subtle shadows and flat elements.
Mobile App Development
Implement semi-flat design principles in your mobile apps to enhance user experience while maintaining a clean aesthetic.
UI/UX Prototyping
Utilize the guidelines to prototype user interfaces that balance minimalism with usability, ensuring an engaging user experience.
How to install Flat Design 2.0
View source1. Install with the skills CLI
npx skills add sickn33/agentic-awesome-skills/flat-design-2 --agent claude-code2. Or install it manually
Download the skill folder and drop it into ~/.claude/skills/ for all projects, or .claude/skills/ to scope it to one repo. Restart Claude Code so it picks up the new skill.
Anthropic's agentic coding CLI, and the reference implementation of Agent Skills. Drop a skill folder into ~/.claude/skills and Claude Code loads it automatically whenever a task matches the skill's description. Claude Code docs
Inside SKILL.md
Written by sickn33Flat Design 2.0 (Semi-Flat)
"Flat aesthetics, but with subtle hints of physics to communicate interactability."
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
- Mostly Flat: The primary aesthetic remains 2D and solid.
- Subtle Elevation: Use extremely soft, large-spread shadows strictly to indicate interactable elements (buttons, floating action buttons) or layers (modals).
- Micro-Gradients: Occasional, barely noticeable linear gradients to prevent large surfaces from feeling dead.
Visual DNA
- Colors: Pairs well with Warm Tech or Earth-Grounded Elegance.
- Typography: Clean, readable sans-serifs.
- Shadows: Shadows must be low opacity, high blur, and usually tinted with the background color, not pure black.
Web Implementation
- CSS Example:
:root {
--shadow-color: rgba(43, 48, 58, 0.08); /* Tinted shadow */
}
.flat2-card {
background-color: var(--bg-primary);
border-radius: 8px;
padding: 32px;
/* Very subtle, diffuse shadow */
box-shadow: 0 10px 30px var(--shadow-color);
transition: transform 0.3s ease, box-shadow 0.3s ease;
}
.flat2-card:hover {
transform: translateY(-4px);
box-shadow: 0 20px 40px rgba(43, 48, 58, 0.12);
}
.flat2-btn {
background: var(--cta-highlight);
border-radius: 4px;
padding: 12px 24px;
color: white;
border: none;
box-shadow: 0 4px 12px rgba(0,0,0,0.1);
}
App Implementation
SwiftUI
struct SemiFlatCard: View {
@State private var isPressed = false
var body: some View {
VStack(alignment: .leading, spacing: 16) {
Text("Semi-Flat Card")
.font(.system(size: 18, weight: .semibold))
Text("Flat aesthetic with just enough depth to hint at interactivity.")
.font(.system(size: 15))
.foregroundColor(.secondary)
}
.padding(24)
.background(Color(.systemBackground))
.cornerRadius(8)
// The key: very soft, tinted shadow — NOT harsh black
.shadow(color: Color.black.opacity(0.06), radius: 12, x: 0, y: 4)
.scaleEffect(isPressed ? 0.98 : 1.0)
.animation(.easeOut(duration: 0.2), value: isPressed)
.onLongPressGesture(minimumDuration: .infinity, pressing: { pressing in
isPressed = pressing
}, perform: {})
}
}
struct SemiFlatButton: View {
var body: some View {
Button(action: {}) {
Text("Continue")
.font(.system(size: 15, weight: .semibold))
.foregroundColor(.white)
.padding(.horizontal, 24)
.padding(.vertical, 12)
.background(Color.accentColor)
.cornerRadius(4)
// Subtle button shadow
.shadow(color: Color.accentColor.opacity(0.25), radius: 8, x: 0, y: 4)
}
.buttonStyle(.plain)
}
}
- Shadow color should be tinted (e.g.,
Color.accentColor.opacity(0.15)), never pure black. - Use
radius: 10...16withopacity: 0.05...0.08— if you can immediately see the shadow, it's too heavy. - Add subtle
scaleEffecton press to hint at physical feedback.
Flutter
class SemiFlatCard extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Container(
padding: const EdgeInsets.all(24),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(8),
// Very soft, tinted shadow
boxShadow: [
BoxShadow(
color: const Color(0xFF2B303A).withOpacity(0.08),
blurRadius: 24,
offset: const Offset(0, 8),
spreadRadius: 0,
),
],
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const Text('Semi-Flat Card',
style: TextStyle(fontSize: 18, fontWeight: FontWeight.w600)),
const SizedBox(height: 16),
const Text('Flat aesthetic with just enough depth to hint at interactivity.',
style: TextStyle(fontSize: 15, color: Colors.black54)),
const SizedBox(height: 20),
ElevatedButton(
onPressed: () {},
style: ElevatedButton.styleFrom(
elevation: 2, // Very low — just enough to feel clickable
shadowColor: Theme.of(context).primaryColor.withOpacity(0.3),
backgroundColor: Theme.of(context).primaryColor,
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(4)),
padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 12),
),
child: const Text('Continue', style: TextStyle(fontWeight: FontWeight.w600)),
),
],
),
);
}
}
- Use
elevation: 1toelevation: 4max. Never exceedelevation: 6. - Tint the
shadowColorto match the card's background or the brand color. - Use
InkWellfor ripple effects and a slightTransform.translateanimation on press.
React Native
const SemiFlatCard = () => (
<View style={{
padding: 24,
backgroundColor: '#FFFFFF',
borderRadius: 8,
// Very subtle, diffuse shadow
shadowColor: '#2B303A',
shadowOffset: { width: 0, height: 8 },
shadowOpacity: 0.08,
shadowRadius: 24,
// Android
elevation: 3,
}}>
<Text style={{ fontSize: 18, fontWeight: '600', marginBottom: 16 }}>
Semi-Flat Card
</Text>
<Text style={{ fontSize: 15, color: '#666', marginBottom: 20 }}>
Flat aesthetic with just enough depth to hint at interactivity.
</Text>
<Pressable
style={({ pressed }) => ({
backgroundColor: '#4A90D9',
paddingHorizontal: 24,
paddingVertical: 12,
borderRadius: 4,
alignSelf: 'flex-start',
transform: [{ scale: pressed ? 0.97 : 1 }],
shadowColor: '#4A90D9',
shadowOffset: { width: 0, height: 4 },
shadowOpacity: 0.25,
shadowRadius: 8,
})}
>
<Text style={{ color: '#FFF', fontWeight: '600' }}>Continue</Text>
</Pressable>
</View>
);
- On iOS use
shadowOpacity: 0.05...0.10withshadowRadius: 16...24for a diffuse spread. - On Android,
elevation: 2...4is equivalent. Avoid going aboveelevation: 6. - Use
Pressablewith({ pressed })style callback for animated press states.
Jetpack Compose
@Composable
fun SemiFlatCard() {
Card(
modifier = Modifier.fillMaxWidth(),
shape = RoundedCornerShape(8.dp),
elevation = CardDefaults.cardElevation(defaultElevation = 2.dp),
colors = CardDefaults.cardColors(containerColor = Color.White),
) {
Column(modifier = Modifier.padding(24.dp)) {
Text("Semi-Flat Card", fontSize = 18.sp, fontWeight = FontWeight.SemiBold)
Spacer(Modifier.height(16.dp))
Text("Flat aesthetic with just enough depth to hint at interactivity.",
fontSize = 15.sp, color = Color(0xFF666666))
Spacer(Modifier.height(20.dp))
Button(
onClick = {},
shape = RoundedCornerShape(4.dp),
elevation = ButtonDefaults.buttonElevation(defaultElevation = 2.dp),
contentPadding = PaddingValues(horizontal = 24.dp, vertical = 12.dp),
) {
Text("Continue", fontWeight = FontWeight.SemiBold)
}
}
}
}
- Use
CardDefaults.cardElevation(defaultElevation = 2.dp)— keep it under 4dp. - On hover/press:
hoveredElevation = 4.dp, pressedElevation = 1.dpfor subtle physics. - Tint shadows by using
Modifier.shadow(elevation, shape, ambientColor, spotColor)with custom tinted colors.
Do's and Don'ts
- DO: Keep shadows incredibly subtle. If you immediately notice the shadow, it's too dark.
- DON'T: Use inner shadows, heavy gradients, or skeuomorphic textures.
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.
Frequently asked questions about Flat Design 2.0
Similar skills
Penpot UI/UX Design
Create professional UI/UX designs in Penpot with ease.
UX Theming
Streamline your VS Code theming process with best practices.
Wireframe
Create low-fidelity UI wireframes in SVG format.
Waitlist Page
Create a clean, focused pre-launch landing page.
Hallmark
Design skill for creating unique, structured UIs.
UI Styling
Create beautiful, accessible user interfaces effortlessly.
