Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Web and App implementation guide for Gradient Design. Trigger when user wants heavy gradient usage, vibrant transitions, and modern energetic feels.
.claude/skills/lingxling-gradient-design/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-03 | ✗→✓ | ▲ Improved | 209% | 0% |
| case-15 | ✗→✓ | ▲ Improved | 149% | 0% |
| case-01 | ✓→✓ | = Same ✓ | 20% | 0% |
| case-02 | ✓→✓ | = Same ✓ | 149% | 0% |
| case-04 | ✓→✓ | = Same ✓ | 121% | 0% |
> "Color in motion. Fluid transitions that add energy and depth to flat surfaces."
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.
cssbody { /* 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; }
swiftstruct 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..stroke(LinearGradient(...)) inside an .overlay to create gradient borders.dartclass 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'), ), ), ], ), ); }, ), ); } }
ShaderMask with BlendMode.srcIn.Alignment values of the LinearGradient.jsx// 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> ); };
@react-native-masked-view/masked-view to mask a LinearGradient with a <Text> node.LinearGradient with a small padding (e.g., padding: 3).kotlin@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") } } } }
Brush.Brush directly into a TextStyle for gradient text, or into a Modifier.border() for gradient borders.| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | pass→pass | 21,148 | 17,599 | -17% | 1 | 1 | 0% | 4,438 | 5,306 | +20% | 0 | 0 | — |
case-02 | pass→pass | 11,687 | 8,743 | -25% | 1 | 1 | 0% | 1,772 | 4,412 | +149% | 0 | 0 | — |
case-03 | fail→pass | 11,521 | 11,643 | +1% | 1 | 1 | 0% | 1,709 | 5,289 | +209% | 0 | 0 | — |
case-04 | pass→pass | 15,486 | 16,099 | +4% | 1 | 1 | 0% | 2,461 | 5,446 | +121% | 0 | 0 | — |
case-05 | pass→pass | 14,677 | 11,480 | -22% | 1 | 1 | 0% | 2,300 | 5,014 | +118% | 0 | 0 | — |
case-06 | pass→pass | 14,303 | 13,513 | -6% | 1 | 1 | 0% | 2,219 | 4,882 | +120% | 0 | 0 | — |
case-07 | pass→pass | 8,803 | 10,792 | +23% | 1 | 1 | 0% | 1,565 | 4,738 | +203% | 0 | 0 | — |
case-08 | pass→pass | 11,798 | 10,021 | -15% | 1 | 1 | 0% | 1,770 | 5,121 | +189% | 0 | 0 | — |
case-09 | pass→pass | 14,060 | 14,258 | +1% | 1 | 1 | 0% | 2,203 | 5,851 | +166% | 0 | 0 | — |
case-10 | pass→pass | 11,656 | 6,139 | -47% | 1 | 1 | 0% | 1,740 | 4,340 | +149% | 0 | 0 | — |
case-11 | pass→pass | 11,117 | 13,102 | +18% | 1 | 1 | 0% | 1,970 | 4,964 | +152% | 0 | 0 | — |
case-12 | pass→pass | 19,195 | 15,619 | -19% | 1 | 1 | 0% | 2,816 | 5,456 | +94% | 0 | 0 | — |
case-13 | pass→pass | 11,084 | 9,750 | -12% | 1 | 1 | 0% | 2,181 | 5,065 | +132% | 0 | 0 | — |
case-14 | pass→pass | 8,695 | 5,952 | -32% | 1 | 1 | 0% | 1,314 | 4,261 | +224% | 0 | 0 | — |
case-15 | fail→pass | 12,209 | 11,623 | -5% | 1 | 1 | 0% | 2,002 | 4,991 | +149% | 0 | 0 | — |
case-16 | pass→pass | 17,283 | 13,169 | -24% | 1 | 1 | 0% | 3,105 | 5,692 | +83% | 0 | 0 | — |
case-17 | pass→pass | 15,561 | 7,124 | -54% | 1 | 1 | 0% | 2,104 | 4,182 | +99% | 0 | 0 | — |
case-18 | pass→pass | 20,362 | 14,283 | -30% | 1 | 1 | 0% | 2,816 | 5,182 | +84% | 0 | 0 | — |
case-19 | pass→pass | 13,379 | 6,654 | -50% | 1 | 1 | 0% | 2,025 | 4,029 | +99% | 0 | 0 | — |
case-20 | pass→pass | 14,409 | 15,945 | +11% | 1 | 1 | 0% | 2,809 | 5,694 | +103% | 0 | 0 | — |
case-21 | fail→fail | 26,612 | 29,569 | +11% | 1 | 1 | 0% | 4,612 | 8,020 | +74% | 0 | 0 | — |
case-22 | fail→fail | 15,619 | 33,505 | +115% | 1 | 1 | 0% | 2,845 | 9,224 | +224% | 0 | 0 | — |
case-23 | pass→pass | 20,701 | 20,993 | +1% | 1 | 1 | 0% | 2,561 | 6,599 | +158% | 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 +9 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.