Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Web and App implementation guide for Editorial Design. Trigger when user wants a magazine-inspired layout, large headlines, and elegant typography pairing.
.claude/skills/lingxling-editorial-design/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 23% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 16% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 54% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 112% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 61% | 0% |
> "The digital magazine. Sophisticated typography pairings and deliberate, elegant pacing."
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.
Playfair Display, Merriweather, Bodoni.Lato, Open Sans, Source Sans Pro.cssbody { background-color: #F9F9F9; /* Paper white */ color: #121212; /* Ink black */ } /* Typography Pairing */ .editorial-headline { font-family: 'Playfair Display', serif; font-size: 4rem; font-weight: 700; font-style: italic; margin-bottom: 24px; border-bottom: 1px solid #121212; padding-bottom: 24px; } .editorial-body { font-family: 'Lato', sans-serif; font-size: 1.1rem; line-height: 1.8; column-count: 2; /* Magazine columns */ column-gap: 40px; } /* Drop Cap */ .editorial-body::first-letter { font-family: 'Playfair Display', serif; font-size: 4rem; float: left; line-height: 0.8; padding-right: 12px; color: var(--cta-highlight); } .pull-quote { font-family: 'Playfair Display', serif; font-size: 2rem; text-align: center; margin: 48px 0; padding: 24px 0; border-top: 2px solid #121212; border-bottom: 2px solid #121212; }
swiftstruct EditorialView: View { var body: some View { ScrollView { VStack(alignment: .leading, spacing: 24) { // Editorial Headline Text("The Digital\nMagazine") .font(.custom("Playfair Display", size: 48)) .fontWeight(.bold) .italic() .foregroundColor(Color(white: 0.05)) .padding(.bottom, 16) Divider().background(Color.black) // Drop Cap and Body HStack(alignment: .top, spacing: 8) { Text("I") .font(.custom("Playfair Display", size: 64)) .foregroundColor(Color(red: 0.7, green: 0.2, blue: 0.2)) // Negative padding to pull the body text tighter to the drop cap .padding(.top, -10) Text("n an era of sterile, flat interfaces, the return to elegant typography feels like a breath of fresh air. The interplay of serif and sans-serif...") .font(.custom("Lato", size: 16)) .lineSpacing(6) .foregroundColor(Color(white: 0.1)) } // Pull Quote VStack { Divider().background(Color.black) Text("“Sophistication is in the spacing.”") .font(.custom("Playfair Display", size: 28)) .italic() .multilineTextAlignment(.center) .padding(.vertical, 24) Divider().background(Color.black) } .padding(.vertical, 24) } .padding(24) } .background(Color(red: 0.98, green: 0.98, blue: 0.96)) // Warm paper white } }
.font(.custom()) is mandatory. System fonts look too app-like.Divider() to create the hairlines that are so common in print design.HStack aligning top.dartclass EditorialScreen extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( backgroundColor: const Color(0xFFF9F9F8), // Paper background body: SingleChildScrollView( padding: const EdgeInsets.all(24.0), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ const SizedBox(height: 40), const Text( 'The Digital\nMagazine', style: TextStyle(fontFamily: 'PlayfairDisplay', fontSize: 48, fontWeight: FontWeight.bold, fontStyle: FontStyle.italic, height: 1.1), ), const SizedBox(height: 24), const Divider(color: Colors.black, thickness: 1), const SizedBox(height: 24), // Body with Drop Cap simulation using RichText is complex, // a simpler Row approach works well enough for mobile. Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ const Text( 'I', style: TextStyle(fontFamily: 'PlayfairDisplay', fontSize: 72, height: 1.0, color: Color(0xFF8B0000)), ), const SizedBox(width: 8), Expanded( child: const Text( 'n an era of sterile, flat interfaces, the return to elegant typography feels like a breath of fresh air. The interplay of serif and sans-serif brings humanity back to the screen.', style: TextStyle(fontFamily: 'Lato', fontSize: 16, height: 1.6, color: Colors.black87), ), ), ], ), const SizedBox(height: 48), // Pull Quote const Divider(color: Colors.black, thickness: 2), const Padding( padding: EdgeInsets.symmetric(vertical: 32.0), child: Center( child: Text( '“Sophistication is in the spacing.”', textAlign: TextAlign.center, style: TextStyle(fontFamily: 'PlayfairDisplay', fontSize: 28, fontStyle: FontStyle.italic), ), ), ), const Divider(color: Colors.black, thickness: 2), ], ), ), ); } }
height parameters in TextStyle (line-height). 1.6 is a good editorial body height.Divider with thickness: 2 for the heavy rules around pull quotes.jsxconst EditorialScreen = () => { return ( <ScrollView style={{ flex: 1, backgroundColor: '#F9F9F8', padding: 24 }}> <Text style={{ fontFamily: 'PlayfairDisplay-BoldItalic', fontSize: 48, color: '#121212', lineHeight: 52, marginTop: 40, marginBottom: 24 }}> The Digital{'\n'}Magazine </Text> <View style={{ height: 1, backgroundColor: '#121212', marginBottom: 24 }} /> <View style={{ flexDirection: 'row' }}> <Text style={{ fontFamily: 'PlayfairDisplay-Bold', fontSize: 72, color: '#8B0000', lineHeight: 80, marginTop: -10, // Adjust alignment marginRight: 8 }}> I </Text> <Text style={{ flex: 1, fontFamily: 'Lato-Regular', fontSize: 16, lineHeight: 26, color: '#333' }}> n an era of sterile, flat interfaces, the return to elegant typography feels like a breath of fresh air. The interplay of serif and sans-serif brings humanity. </Text> </View> {/* Pull Quote */} <View style={{ borderTopWidth: 2, borderBottomWidth: 2, borderColor: '#121212', marginTop: 48, paddingVertical: 32 }}> <Text style={{ fontFamily: 'PlayfairDisplay-Italic', fontSize: 28, textAlign: 'center', color: '#121212' }}> “Sophistication is in the spacing.” </Text> </View> </ScrollView> ); };
borderTopWidth and borderBottomWidth on a container View to create the pull quote styling.kotlin@Composable fun EditorialScreen() { // Assuming Playfair and Lato are defined in FontFamily val playfair = FontFamily.Serif val lato = FontFamily.SansSerif Column( modifier = Modifier .fillMaxSize() .background(Color(0xFFF9F9F8)) .verticalScroll(rememberScrollState()) .padding(24.dp) ) { Spacer(Modifier.height(40.dp)) Text( text = "The Digital\nMagazine", fontFamily = playfair, fontSize = 48.sp, fontWeight = FontWeight.Bold, fontStyle = FontStyle.Italic, lineHeight = 52.sp, color = Color(0xFF121212) ) Spacer(Modifier.height(24.dp)) Divider(color = Color(0xFF121212), thickness = 1.dp) Spacer(Modifier.height(24.dp)) Row(verticalAlignment = Alignment.Top) { Text( text = "I", fontFamily = playfair, fontSize = 72.sp, color = Color(0xFF8B0000), modifier = Modifier.offset(y = (-10).dp).padding(end = 8.dp) ) Text( text = "n an era of sterile, flat interfaces, the return to elegant typography feels like a breath of fresh air. The interplay of serif and sans-serif.", fontFamily = lato, fontSize = 16.sp, lineHeight = 26.sp, color = Color(0xFF333333) ) } Spacer(Modifier.height(48.dp)) // Pull Quote Divider(color = Color(0xFF121212), thickness = 2.dp) Text( text = "“Sophistication is in the spacing.”", fontFamily = playfair, fontSize = 28.sp, fontStyle = FontStyle.Italic, textAlign = TextAlign.Center, modifier = Modifier.fillMaxWidth().padding(vertical = 32.dp) ) Divider(color = Color(0xFF121212), thickness = 2.dp) } }
26.sp) very elegantly.Divider() for the hairlines. Adjust thickness as needed for headers vs pull quotes.| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 36,772 | 44,044 | +20% | 1 | 1 | 0% | 7,337 | 8,999 | +23% | 0 | 0 | — |
case-02 | fail→pass | 44,736 | 31,384 | -30% | 1 | 1 | 0% | 6,939 | 8,024 | +16% | 0 | 0 | — |
case-03 | fail→fail | 36,882 | 23,095 | -37% | 1 | 1 | 0% | 5,351 | 7,745 | +45% | 0 | 0 | — |
case-04 | pass→pass | 17,960 | 24,327 | +35% | 1 | 1 | 0% | 3,060 | 6,461 | +111% | 0 | 0 | — |
case-05 | pass→pass | 19,009 | 15,982 | -16% | 1 | 1 | 0% | 3,137 | 6,071 | +94% | 0 | 0 | — |
case-06 | fail→fail | 18,836 | 13,856 | -26% | 1 | 1 | 0% | 2,861 | 5,489 | +92% | 0 | 0 | — |
case-07 | fail→fail | 18,051 | 16,354 | -9% | 1 | 1 | 0% | 3,440 | 6,059 | +76% | 0 | 0 | — |
case-08 | fail→pass | 24,576 | 20,520 | -17% | 1 | 1 | 0% | 4,465 | 6,874 | +54% | 0 | 0 | — |
case-09 | fail→fail | 35,964 | 32,187 | -11% | 1 | 1 | 0% | 5,759 | 9,006 | +56% | 0 | 0 | — |
case-10 | fail→pass | 17,302 | 14,248 | -18% | 1 | 1 | 0% | 2,705 | 5,736 | +112% | 0 | 0 | — |
case-11 | fail→pass | 20,765 | 16,793 | -19% | 1 | 1 | 0% | 3,480 | 5,599 | +61% | 0 | 0 | — |
case-12 | pass→pass | 16,072 | 23,349 | +45% | 1 | 1 | 0% | 2,782 | 6,636 | +139% | 0 | 0 | — |
case-13 | pass→pass | 16,803 | 17,322 | +3% | 1 | 1 | 0% | 2,363 | 5,573 | +136% | 0 | 0 | — |
case-14 | pass→fail | 14,938 | 10,305 | -31% | 1 | 1 | 0% | 2,488 | 4,836 | +94% | 0 | 0 | — |
case-15 | pass→pass | 13,357 | 9,649 | -28% | 1 | 1 | 0% | 2,233 | 4,940 | +121% | 0 | 0 | — |
case-16 | pass→pass | 19,085 | 18,692 | -2% | 1 | 1 | 0% | 2,816 | 6,003 | +113% | 0 | 0 | — |
case-17 | fail→pass | 19,491 | 18,872 | -3% | 1 | 1 | 0% | 3,599 | 5,941 | +65% | 0 | 0 | — |
case-18 | fail→pass | 17,295 | 29,062 | +68% | 1 | 1 | 0% | 2,585 | 7,726 | +199% | 0 | 0 | — |
case-19 | fail→pass | 15,045 | 16,749 | +11% | 1 | 1 | 0% | 2,557 | 5,653 | +121% | 0 | 0 | — |
case-20 | pass→pass | 17,451 | 11,351 | -35% | 1 | 1 | 0% | 2,588 | 4,791 | +85% | 0 | 0 | — |
case-21 | pass→pass | 51,242 | 46,965 | -8% | 1 | 1 | 0% | 8,251 | 11,320 | +37% | 0 | 0 | — |
case-22 | pass→pass | 33,039 | 30,910 | -6% | 1 | 1 | 0% | 5,033 | 9,388 | +87% | 0 | 0 | — |
case-23 | pass→pass | 28,493 | 24,406 | -14% | 1 | 1 | 0% | 5,957 | 8,205 | +38% | 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 +30 percentage points is the difference between those two pass rates over the 23 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
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.