gradient-design
Skill4 starsChanged 51 days agoMITView on GitHub
Web and App implementation guide for Gradient Design. Trigger when user wants heavy gradient usage, vibrant transitions, and modern energetic feels.
In this repository144 other files it gives its agents.
- skills/composition-patterns/AGENTS.mdAGENTS.md
- skills/react-best-practices/AGENTS.mdAGENTS.md
- skills/react-native-skills/AGENTS.mdAGENTS.md
- antislop-codeSkill
- anti-slopSkill
- antislopSkill
- api-and-interface-designSkill
- api-endpoint-builderSkill
- astroSkill
- bddSkill
- brainstormSkill
- bring-me-ideasSkill
- brooks-lintSkill
- browser-testing-with-devtoolsSkill
- cavemanSkill
- ci-cd-and-automationSkill
- cloudflareSkill
- codebase-audit-pre-pushSkill
- codebase-designSkill
- code-review-and-qualitySkill
- code-simplificationSkill
- composition-patternsSkill
- constraint-driven-developmentSkill
- context7-mcpSkill
- context-engineeringSkill
- conventional-commitSkill
- conventional-commit-with-coauthorSkill
- credentialsSkill
- data-dummerSkill
- dddSkill
- debugging-and-error-recoverySkill
- deprecation-and-migrationSkill
- 3d-uiSkill
- ai-native-uiSkill
- aurora-uiSkill
- bento-uiSkill
- brutalismSkill
- brutalist-typographySkill
- card-based-designSkill
- claymorphismSkill
- color-blockingSkill
- command-center-uiSkill
- cyberpunk-uiSkill
- cyber-y2kSkill
- dark-modeSkill
- dashboard-designSkill
- data-dense-designSkill
- duotone-designSkill
- editorial-designSkill
- flat-design-2Skill
- flat-designSkill
- floating-uiSkill
- frutiger-aeroSkill
- glassmorphismSkill
- high-contrastSkill
- holographic-uiSkill
- isometric-designSkill
- layered-designSkill
- material-designSkill
- maximalismSkill
- The first 60 shown.
The file
We split this skill into the rules it gives an agent
5 rules. About 0 are common, 3 are distinctive, and 2 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈3
Distinctive · estimate
This author's own choices. Worth a look.
2
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 16
Use this sub-style when the user's request matches the aesthetic described above.
- Distinctive: line 26
Layout: Keep the UI structure minimal (glass panels or white/black cards) to let the gradients breathe.
- Very specific: line 127
Use .stroke(LinearGradient(...)) inside an .overlay to create gradient borders.
- Distinctive: line 304
DO: Use multi-stop gradients (3 or 4 colors) rather than just simple A-to-B gradients for a more modern, rich look.
- Distinctive: line 309
Ensure appropriate contrast ratios and responsive behaviors are verified separately.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Gradient Design
"Color in motion. Fluid transitions that add energy and depth to flat surfaces."
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
- Gradients are the Primary Visual: Backgrounds, buttons, text, and borders all use gradients instead of solid colors.
- Analogous or Complementary Blends: Gradients must be carefully chosen so the transition colors don't become muddy (e.g., blending red to green creates a muddy brown in the middle. Blend red to yellow to green instead).
- Subtle Animation: Background gradients should slowly shift and rotate.
Visual DNA
- Colors: Warm Tech (blues to oranges) or create custom vibrant pairs (e.g., Purple to Coral, Deep Blue to Cyan).
- Typography: Clean, heavy sans-serifs that can be easily masked with a gradient fill.
- Layout: Keep the UI structure minimal (glass panels or white/black cards) to let the gradients breathe.
Web Implementation
- CSS Example:
body {
/* Complex mesh-like animated gradient */
background: linear-gradient(-45deg, #ee7752, #e73c7e, #23a6d5, #23d5ab);
background-size: 400% 400%;
animation: gradientBG 15s ease infinite;
color: #fff;
}
@keyframes gradientBG {
0% { background-position: 0% 50%; }
50% { background-position: 100% 50%; }
100% { background-position: 0% 50%; }
}
.gradient-text {
background: linear-gradient(90deg, #F9D423 0%, #FF4E50 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
font-size: 4rem;
font-weight: 900;
}
.gradient-border-card {
background: #ffffff;
color: #333;
padding: 32px;
border-radius: 12px;
position: relative;
/* Use a pseudo-element for the gradient border */
}
.gradient-border-card::before {
content: '';
position: absolute;
top: -3px; left: -3px; right: -3px; bottom: -3px;
background: linear-gradient(90deg, #8A2387, #E94057, #F27121);
z-index: -1;
border-radius: 15px;
}App Implementation
SwiftUI
struct GradientDesignView: View {
@State private var animateGradient = false
var body: some View {
ZStack {
// Animated Background Gradient
LinearGradient(
colors: [Color(hex: "ee7752"), Color(hex: "e73c7e"), Color(hex: "23a6d5"), Color(hex: "23d5ab")],
startPoint: animateGradient ? .topLeading : .bottomLeading,
endPoint: animateGradient ? .bottomTrailing : .topTrailing
)
.ignoresSafeArea()
.onAppear {
withAnimation(.linear(duration: 5.0).repeatForever(autoreverses: true)) {
animateGradient.toggle()
}
}
VStack(spacing: 40) {
// Gradient Text
Text("VIBRANT")
.font(.system(size: 60, weight: .black))
.foregroundStyle(
LinearGradient(
colors: [Color(hex: "F9D423"), Color(hex: "FF4E50")],
startPoint: .leading,
endPoint: .trailing
)
)
// Gradient Border Card
Text("Gradient Border")
.padding()
.frame(width: 250, height: 150)
.background(Color.white)
.cornerRadius(12)
.overlay(
RoundedRectangle(cornerRadius: 12)
.stroke(
LinearGradient(
colors: [Color(hex: "8A2387"), Color(hex: "E94057"), Color(hex: "F27121")],
startPoint: .leading, endPoint: .trailing
),
lineWidth: 3
)
)
}
}
}
}.foregroundStyle(LinearGradient(...))makes gradient text incredibly easy in modern SwiftUI.- Use
.stroke(LinearGradient(...))inside an.overlayto create gradient borders.
Flutter
class GradientDesignScreen extends StatefulWidget {
@override
State<GradientDesignScreen> createState() => _GradientDesignScreenState();
}
class _GradientDesignScreenState extends State<GradientDesignScreen> with SingleTickerProviderStateMixin {
late AnimationController _controller;
late Animation<Alignment> _topAlignment;
late Animation<Alignment> _bottomAlignment;
@override
void initState() {
super.initState();
_controller = AnimationController(vsync: this, duration: const Duration(seconds: 5))..repeat(reverse: true);
_topAlignment = TweenSequence<Alignment>([
TweenSequenceItem(tween: AlignmentTween(begin: Alignment.topLeft, end: Alignment.topRight), weight: 1),
]).animate(_controller);
_bottomAlignment = TweenSequence<Alignment>([
TweenSequenceItem(tween: AlignmentTween(begin: Alignment.bottomRight, end: Alignment.bottomLeft), weight: 1),
]).animate(_controller);
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: AnimatedBuilder(
animation: _controller,
builder: (context, _) {
return Container(
width: double.infinity,
decoration: BoxDecoration(
// Animated Background Gradient
gradient: LinearGradient(
begin: _topAlignment.value,
end: _bottomAlignment.value,
colors: const [Color(0xFFee7752), Color(0xFFe73c7e), Color(0xFF23a6d5), Color(0xFF23d5ab)],
),
),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
// Gradient Text
ShaderMask(
blendMode: BlendMode.srcIn,
shaderCallback: (bounds) => const LinearGradient(
colors: [Color(0xFFF9D423), Color(0xFFFF4E50)],
).createShader(Rect.fromLTWH(0, 0, bounds.width, bounds.height)),
child: const Text('VIBRANT', style: TextStyle(fontSize: 60, fontWeight: FontWeight.w900, color: Colors.white)),
),
const SizedBox(height: 40),
// Gradient Border Card
Container(
width: 250, height: 150,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(15),
gradient: const LinearGradient(colors: [Color(0xFF8A2387), Color(0xFFE94057), Color(0xFFF27121)]),
),
padding: const EdgeInsets.all(3), // Border width
child: Container(
decoration: BoxDecoration(color: Colors.white, borderRadius: BorderRadius.circular(12)),
alignment: Alignment.center,
child: const Text('Gradient Border'),
),
),
],
),
);
},
),
);
}
}- Flutter text gradients require
ShaderMaskwithBlendMode.srcIn. - To animate a gradient background, animate the
Alignmentvalues of theLinearGradient.
React Native
// REQUIRES: expo-linear-gradient OR react-native-linear-gradient
import { LinearGradient } from 'expo-linear-gradient';
import MaskedView from '@react-native-masked-view/masked-view';
const GradientDesignScreen = () => {
return (
<LinearGradient
colors={['#ee7752', '#e73c7e', '#23a6d5', '#23d5ab']}
start={{ x: 0, y: 0 }} end={{ x: 1, y: 1 }}
style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}
>
{/* Gradient Text */}
<MaskedView
style={{ height: 80, width: '100%', flexDirection: 'row' }}
maskElement={
<View style={{ backgroundColor: 'transparent', flex: 1, justifyContent: 'center', alignItems: 'center' }}>
<Text style={{ fontSize: 60, fontWeight: '900', color: 'black' }}>VIBRANT</Text>
</View>
}
>
<LinearGradient
colors={['#F9D423', '#FF4E50']}
start={{ x: 0, y: 0 }} end={{ x: 1, y: 0 }}
style={{ flex: 1 }}
/>
</MaskedView>
<View style={{ marginTop: 40 }}>
{/* Gradient Border Card */}
<LinearGradient
colors={['#8A2387', '#E94057', '#F27121']}
start={{ x: 0, y: 0 }} end={{ x: 1, y: 0 }}
style={{ padding: 3, borderRadius: 15 }}
>
<View style={{ backgroundColor: '#FFF', width: 250, height: 150, borderRadius: 12, justifyContent: 'center', alignItems: 'center' }}>
<Text>Gradient Border</Text>
</View>
</LinearGradient>
</View>
</LinearGradient>
);
};- Gradient text in React Native is notoriously annoying. You must use
@react-native-masked-view/masked-viewto mask aLinearGradientwith a<Text>node. - Gradient borders are achieved by nesting a solid view inside a
LinearGradientwith a small padding (e.g.,padding: 3).
Jetpack Compose
@Composable
fun GradientDesignScreen() {
// Animated Background
val infiniteTransition = rememberInfiniteTransition()
val offset by infiniteTransition.animateFloat(
initialValue = 0f, targetValue = 1000f,
animationSpec = infiniteRepeatable(tween(5000, easing = LinearEasing), RepeatMode.Reverse)
)
val bgBrush = Brush.linearGradient(
colors = listOf(Color(0xFFee7752), Color(0xFFe73c7e), Color(0xFF23a6d5), Color(0xFF23d5ab)),
start = Offset(offset, 0f), end = Offset(offset + 500f, 1000f)
)
Box(
modifier = Modifier.fillMaxSize().background(bgBrush),
contentAlignment = Alignment.Center
) {
Column(horizontalAlignment = Alignment.CenterHorizontally) {
// Gradient Text
val textBrush = Brush.horizontalGradient(listOf(Color(0xFFF9D423), Color(0xFFFF4E50)))
Text(
text = "VIBRANT",
style = TextStyle(brush = textBrush, fontSize = 60.sp, fontWeight = FontWeight.Black)
)
Spacer(Modifier.height(40.dp))
// Gradient Border Card
val borderBrush = Brush.horizontalGradient(listOf(Color(0xFF8A2387), Color(0xFFE94057), Color(0xFFF27121)))
Box(
modifier = Modifier
.size(250.dp, 150.dp)
.border(3.dp, borderBrush, RoundedCornerShape(12.dp))
.background(Color.White, RoundedCornerShape(12.dp)),
contentAlignment = Alignment.Center
) {
Text("Gradient Border")
}
}
}
}- Compose handles gradients beautifully via
Brush. - You can pass a
Brushdirectly into aTextStylefor gradient text, or into aModifier.border()for gradient borders.
Do's and Don'ts
- DO: Use multi-stop gradients (3 or 4 colors) rather than just simple A-to-B gradients for a more modern, rich look.
- DON'T: Apply gradients to tiny text or thin icons, they will lose legibility immediately.
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.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

