Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Web and App implementation guide for Color Blocking. Trigger when user wants large color sections, striking layout divisions, and Mondrian-style grids.
.claude/skills/lingxling-color-blocking/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-06 | ✗→✓ | ▲ Improved | 88% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 44% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 117% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 100% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 57% | 0% |
> "The grid made visible. Large, solid swaths of contrasting color defining the layout."
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.
2px solid #000) between blocks to emphasize the grid, reminiscent of Mondrian paintings.cssbody { margin: 0; font-family: 'Space Grotesk', sans-serif; color: #000; } .color-block-grid { display: grid; grid-template-columns: 1fr 2fr 1fr; grid-template-rows: 60vh 40vh; /* Thick black lines between blocks */ gap: 4px; background-color: #000; border: 4px solid #000; min-height: 100vh; } .block { padding: 40px; display: flex; flex-direction: column; justify-content: space-between; } .block-yellow { background-color: #FACC15; } .block-white { background-color: #FFFFFF; } .block-blue { background-color: #2563EB; color: #FFF; } .block-red { background-color: #EF4444; } .block-title { font-size: 3rem; font-weight: 900; text-transform: uppercase; margin: 0; }
swiftstruct ColorBlockingView: View { let gridSpacing: CGFloat = 4 // Thickness of the black lines var body: some View { // Black background acts as the grid lines between blocks VStack(spacing: gridSpacing) { // Top Row HStack(spacing: gridSpacing) { ColorBlock(color: .yellow, text: "CREATE", textColor: .black) ColorBlock(color: .blue, text: "VISION", textColor: .white) } .frame(height: 300) // Bottom Row HStack(spacing: gridSpacing) { ColorBlock(color: .red, text: "BOLD", textColor: .white) .frame(width: 120) // Fixed narrow block ColorBlock(color: .white, text: "MINIMAL", textColor: .black) } } .background(Color.black) // The grid lines .border(Color.black, width: gridSpacing) // Outer border .ignoresSafeArea() } } struct ColorBlock: View { let color: Color let text: String let textColor: Color var body: some View { color .overlay( Text(text) .font(.system(size: 32, weight: .black)) .foregroundColor(textColor) .padding(), alignment: .bottomLeading ) } }
.background(Color.black) on the parent stack and use spacing: 4. The background peeks through the gaps..ignoresSafeArea() allows the blocks to bleed to the edge of the physical device.dartclass ColorBlockingScreen extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( // Black background creates the grid lines backgroundColor: Colors.black, body: SafeArea( bottom: false, child: Column( children: [ // Top Row Expanded( flex: 3, // 3/5 of vertical space child: Row( children: [ Expanded(flex: 1, child: ColorBlock(color: const Color(0xFFFACC15), text: 'CREATE', textColor: Colors.black)), const SizedBox(width: 4), // Grid line Expanded(flex: 2, child: ColorBlock(color: const Color(0xFF2563EB), text: 'VISION', textColor: Colors.white)), ], ), ), const SizedBox(height: 4), // Horizontal grid line // Bottom Row Expanded( flex: 2, // 2/5 of vertical space child: Row( children: [ Expanded(flex: 1, child: ColorBlock(color: const Color(0xFFEF4444), text: 'BOLD', textColor: Colors.white)), const SizedBox(width: 4), Expanded(flex: 2, child: ColorBlock(color: Colors.white, text: 'MINIMAL', textColor: Colors.black)), ], ), ), ], ), ), ); } } class ColorBlock extends StatelessWidget { final Color color; final String text; final Color textColor; const ColorBlock({required this.color, required this.text, required this.textColor}); @override Widget build(BuildContext context) { return Container( color: color, padding: const EdgeInsets.all(24), alignment: Alignment.bottomLeft, child: Text(text, style: TextStyle(fontSize: 32, fontWeight: FontWeight.w900, color: textColor)), ); } }
Expanded with varying flex factors to divide the screen geometrically.SizedBox(width: 4) or height: 4 between rows and columns to expose the black Scaffold background, creating the grid lines.jsxconst ColorBlockingScreen = () => { return ( <View style={{ flex: 1, backgroundColor: '#000', gap: 4 }}> {/* Top Row */} <View style={{ flex: 3, flexDirection: 'row', gap: 4 }}> <View style={[styles.block, { flex: 1, backgroundColor: '#FACC15' }]}> <Text style={[styles.text, { color: '#000' }]}>CREATE</Text> </View> <View style={[styles.block, { flex: 2, backgroundColor: '#2563EB' }]}> <Text style={[styles.text, { color: '#FFF' }]}>VISION</Text> </View> </View> {/* Bottom Row */} <View style={{ flex: 2, flexDirection: 'row', gap: 4 }}> <View style={[styles.block, { flex: 1, backgroundColor: '#EF4444' }]}> <Text style={[styles.text, { color: '#FFF' }]}>BOLD</Text> </View> <View style={[styles.block, { flex: 2, backgroundColor: '#FFF' }]}> <Text style={[styles.text, { color: '#000' }]}>MINIMAL</Text> </View> </View> </View> ); }; const styles = StyleSheet.create({ block: { justifyContent: 'flex-end', padding: 24, }, text: { fontSize: 32, fontWeight: '900', fontFamily: 'SpaceGrotesk-Bold', } });
gap property in React Native flexbox makes this trivial. Set a black background on the parent, set gap: 4, and the children automatically space out, revealing the thick black lines.flex: 1, flex: 2 etc. to determine block proportions.kotlin@Composable fun ColorBlockingScreen() { val gridSpacing = 4.dp Column( modifier = Modifier .fillMaxSize() .background(Color.Black) // Grid lines ) { // Top Row Row( modifier = Modifier.weight(3f), horizontalArrangement = Arrangement.spacedBy(gridSpacing) ) { ColorBlock(Color(0xFFFACC15), "CREATE", Color.Black, Modifier.weight(1f)) ColorBlock(Color(0xFF2563EB), "VISION", Color.White, Modifier.weight(2f)) } Spacer(Modifier.height(gridSpacing)) // Bottom Row Row( modifier = Modifier.weight(2f), horizontalArrangement = Arrangement.spacedBy(gridSpacing) ) { ColorBlock(Color(0xFFEF4444), "BOLD", Color.White, Modifier.weight(1f)) ColorBlock(Color.White, "MINIMAL", Color.Black, Modifier.weight(2f)) } } } @Composable fun ColorBlock(color: Color, text: String, textColor: Color, modifier: Modifier = Modifier) { Box( modifier = modifier .fillMaxHeight() .background(color) .padding(24.dp), contentAlignment = Alignment.BottomStart ) { Text(text, fontSize = 32.sp, fontWeight = FontWeight.Black, color = textColor) } }
Modifier.background(Color.Black) combined with Arrangement.spacedBy(4.dp) perfectly creates the Mondrian grid.Modifier.weight(Xf) to mathematically divide the screen real estate.| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-06 | fail→pass | 12,393 | 14,838 | +20% | 1 | 1 | 0% | 2,660 | 5,010 | +88% | 0 | 0 | — |
case-01 | pass→pass | 18,113 | 18,870 | +4% | 1 | 1 | 0% | 3,035 | 6,178 | +104% | 0 | 0 | — |
case-02 | pass→pass | 22,046 | 19,260 | -13% | 1 | 1 | 0% | 3,437 | 6,605 | +92% | 0 | 0 | — |
case-03 | pass→pass | 35,015 | 16,486 | -53% | 1 | 1 | 0% | 5,537 | 5,295 | -4% | 0 | 0 | — |
case-04 | fail→pass | 22,610 | 13,743 | -39% | 1 | 1 | 0% | 3,661 | 5,254 | +44% | 0 | 0 | — |
case-05 | pass→pass | 14,399 | 21,261 | +48% | 1 | 1 | 0% | 2,966 | 6,023 | +103% | 0 | 0 | — |
case-07 | fail→pass | 15,305 | 12,011 | -22% | 1 | 1 | 0% | 2,176 | 4,729 | +117% | 0 | 0 | — |
case-08 | fail→pass | 15,331 | 11,099 | -28% | 1 | 1 | 0% | 2,033 | 4,057 | +100% | 0 | 0 | — |
case-09 | fail→pass | 20,719 | 11,468 | -45% | 1 | 1 | 0% | 3,161 | 4,960 | +57% | 0 | 0 | — |
case-10 | pass→pass | 11,401 | 7,135 | -37% | 1 | 1 | 0% | 1,660 | 3,618 | +118% | 0 | 0 | — |
case-11 | fail→pass | 25,847 | 18,605 | -28% | 1 | 1 | 0% | 3,200 | 5,069 | +58% | 0 | 0 | — |
case-12 | fail→pass | 11,493 | 7,890 | -31% | 1 | 1 | 0% | 1,873 | 3,672 | +96% | 0 | 0 | — |
case-13 | pass→pass | 16,411 | 10,992 | -33% | 1 | 1 | 0% | 2,425 | 4,327 | +78% | 0 | 0 | — |
case-14 | pass→pass | 14,259 | 14,903 | +5% | 1 | 1 | 0% | 2,537 | 5,303 | +109% | 0 | 0 | — |
case-15 | fail→pass | 11,423 | 12,433 | +9% | 1 | 1 | 0% | 2,047 | 4,152 | +103% | 0 | 0 | — |
case-16 | fail→pass | 15,650 | 14,569 | -7% | 1 | 1 | 0% | 2,837 | 4,925 | +74% | 0 | 0 | — |
case-17 | fail→pass | 7,096 | 3,486 | -51% | 1 | 1 | 0% | 912 | 3,095 | +239% | 0 | 0 | — |
case-18 | pass→pass | 13,522 | 7,063 | -48% | 1 | 1 | 0% | 1,951 | 3,552 | +82% | 0 | 0 | — |
case-19 | fail→pass | 15,467 | 9,332 | -40% | 1 | 1 | 0% | 2,109 | 3,922 | +86% | 0 | 0 | — |
case-20 | pass→pass | 10,593 | 6,538 | -38% | 1 | 1 | 0% | 1,659 | 3,700 | +123% | 0 | 0 | — |
case-21 | pass→pass | 22,129 | 19,023 | -14% | 1 | 1 | 0% | 2,801 | 5,707 | +104% | 0 | 0 | — |
case-22 | pass→pass | 30,771 | 15,952 | -48% | 1 | 1 | 0% | 5,786 | 5,626 | -3% | 0 | 0 | — |
case-23 | pass→pass | 50,328 | 39,883 | -21% | 1 | 1 | 0% | 8,219 | 10,800 | +31% | 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 +48 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.