Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Web and App implementation guide for Data-Dense Design. Trigger when user wants professional tools, maximum information density, and expert interfaces (like Bloomberg terminals or IDEs).
.claude/skills/lingxling-data-dense-design/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-07 | ✗→✓ | ▲ Improved | 63% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 85% | 0% |
| case-13 | ✗→✓ | ▲ Improved | 83% | 0% |
| case-15 | ✗→✓ | ▲ Improved | 81% | 0% |
| case-21 | ✓→✗ | ▼ Worse | 153% | 0% |
> "Density is a feature. For expert users, reducing clicks is more important than whitespace."
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.
11px - 13px). Strict use of monospace fonts (Fira Code, JetBrains Mono) for data.1px borders (#333 or #e0e0e0) are used extensively to separate tiny cells of data.cssbody { background-color: #1e1e1e; /* IDE Dark */ color: #cccccc; font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; font-size: 12px; /* Very small */ margin: 0; } .dense-toolbar { display: flex; background-color: #2d2d2d; border-bottom: 1px solid #3c3c3c; padding: 2px 4px; } .dense-btn { background: transparent; color: #ccc; border: 1px solid transparent; padding: 2px 8px; border-radius: 2px; cursor: pointer; } .dense-btn:hover { background-color: #3c3c3c; border-color: #555; } /* Dense Data Table */ .data-table { width: 100%; border-collapse: collapse; font-family: 'JetBrains Mono', monospace; } .data-table th, .data-table td { padding: 4px 8px; border: 1px solid #3c3c3c; text-align: right; /* Numbers align right */ } .data-table tr:nth-child(even) { background-color: #252526; } .data-table tr:hover { background-color: #094771; color: #fff; } /* Selection highlight */
swiftstruct DataDenseView: View { var body: some View { ScrollView([.horizontal, .vertical]) { Grid(horizontalSpacing: 0, verticalSpacing: 0) { // Header Row GridRow { HeaderCell("SYM") HeaderCell("BID") HeaderCell("ASK") HeaderCell("CHG") } // Data Rows DataRow(sym: "AAPL", bid: "173.40", ask: "173.45", chg: "+0.12", isPos: true) DataRow(sym: "MSFT", bid: "320.10", ask: "320.15", chg: "-0.45", isPos: false) DataRow(sym: "GOOG", bid: "135.20", ask: "135.30", chg: "+0.02", isPos: true) } .border(Color.gray.opacity(0.3), width: 1) } .background(Color(white: 0.12)) // Dark IDE background } } struct HeaderCell: View { let text: String init(_ text: String) { self.text = text } var body: some View { Text(text) .font(.system(size: 11, weight: .bold, design: .monospaced)) .foregroundColor(.gray) .padding(4) .frame(minWidth: 60, alignment: .leading) .border(Color.gray.opacity(0.3), width: 0.5) .background(Color(white: 0.18)) } } struct DataRow: View { let sym, bid, ask, chg: String let isPos: Bool var body: some View { GridRow { Cell(sym, color: .white) Cell(bid, color: .white, align: .trailing) Cell(ask, color: .white, align: .trailing) Cell(chg, color: isPos ? .green : .red, align: .trailing) } } } struct Cell: View { let text: String let color: Color let align: Alignment init(_ text: String, color: Color, align: Alignment = .leading) { self.text = text; self.color = color; self.align = align } var body: some View { Text(text) .font(.system(size: 12, design: .monospaced)) .foregroundColor(color) .padding(4) .frame(minWidth: 60, alignment: align) .border(Color.gray.opacity(0.3), width: 0.5) } }
Grid with 0 spacing..system(..., design: .monospaced)..border() with 0.5 width on every single cell to recreate the dense spreadsheet look.dartclass DataDenseScreen extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( backgroundColor: const Color(0xFF1E1E1E), body: SingleChildScrollView( scrollDirection: Axis.vertical, child: SingleChildScrollView( scrollDirection: Axis.horizontal, child: Theme( // Override theme specifically to make the table hyper-dense data: Theme.of(context).copyWith( dividerColor: Colors.grey[800], ), child: DataTable( headingRowHeight: 28, // Extremely dense dataRowMinHeight: 24, dataRowMaxHeight: 24, // Extremely dense columnSpacing: 16, border: TableBorder.all(color: Colors.grey[800]!, width: 1), columns: const [ DataColumn(label: Text('SYM', style: TextStyle(color: Colors.grey, fontSize: 11, fontFamily: 'RobotoMono'))), DataColumn(label: Text('BID', style: TextStyle(color: Colors.grey, fontSize: 11, fontFamily: 'RobotoMono')), numeric: true), DataColumn(label: Text('ASK', style: TextStyle(color: Colors.grey, fontSize: 11, fontFamily: 'RobotoMono')), numeric: true), ], rows: [ _buildRow('AAPL', '173.40', '173.45'), _buildRow('MSFT', '320.10', '320.15'), _buildRow('GOOG', '135.20', '135.30'), ], ), ), ), ), ); } DataRow _buildRow(String sym, String bid, String ask) { const style = TextStyle(color: Colors.white, fontSize: 12, fontFamily: 'RobotoMono'); return DataRow( cells: [ DataCell(Text(sym, style: style)), DataCell(Text(bid, style: style)), DataCell(Text(ask, style: style)), ], ); } }
DataTable is perfect, but you must manually crush the headingRowHeight and dataRowHeight down from their Material defaults (which are huge).SingleChildScrollView to allow panning around large data sets.jsxconst DataDenseScreen = () => { return ( <ScrollView style={{ backgroundColor: '#1E1E1E', flex: 1 }}> <ScrollView horizontal> <View style={{ borderWidth: 1, borderColor: '#333' }}> {/* Header */} <View style={{ flexDirection: 'row', backgroundColor: '#2D2D2D' }}> <HeaderCell text="SYM" width={60} /> <HeaderCell text="BID" width={80} align="right" /> <HeaderCell text="ASK" width={80} align="right" /> <HeaderCell text="CHG" width={60} align="right" /> </View> {/* Rows */} <DataRow sym="AAPL" bid="173.40" ask="173.45" chg="+0.12" isPos={true} /> <DataRow sym="MSFT" bid="320.10" ask="320.15" chg="-0.45" isPos={false} /> </View> </ScrollView> </ScrollView> ); }; const HeaderCell = ({ text, width, align = 'left' }) => ( <View style={{ width, padding: 4, borderWidth: 0.5, borderColor: '#333' }}> <Text style={{ color: '#999', fontSize: 11, fontFamily: 'monospace', textAlign: align, fontWeight: 'bold' }}> {text} </Text> </View> ); const DataRow = ({ sym, bid, ask, chg, isPos }) => ( <View style={{ flexDirection: 'row' }}> <Cell text={sym} width={60} /> <Cell text={bid} width={80} align="right" /> <Cell text={ask} width={80} align="right" /> <Cell text={chg} width={60} align="right" color={isPos ? '#4CAF50' : '#F44336'} /> </View> ); const Cell = ({ text, width, align = 'left', color = '#CCC' }) => ( <View style={{ width, padding: 4, borderWidth: 0.5, borderColor: '#333' }}> <Text style={{ color, fontSize: 12, fontFamily: 'monospace', textAlign: align }}> {text} </Text> </View> );
flexDirection: 'row' and strict width properties on cells.kotlin@Composable fun DataDenseScreen() { val scrollStateHorizontal = rememberScrollState() val scrollStateVertical = rememberScrollState() Box( modifier = Modifier .fillMaxSize() .background(Color(0xFF1E1E1E)) .verticalScroll(scrollStateVertical) .horizontalScroll(scrollStateHorizontal) .padding(8.dp) ) { Column(modifier = Modifier.border(1.dp, Color(0xFF333333))) { // Header Row(modifier = Modifier.background(Color(0xFF2D2D2D))) { Cell("SYM", 60.dp, Color.Gray, true) Cell("BID", 80.dp, Color.Gray, true, TextAlign.End) Cell("ASK", 80.dp, Color.Gray, true, TextAlign.End) } // Rows DataRow("AAPL", "173.40", "173.45") DataRow("MSFT", "320.10", "320.15") } } } @Composable fun DataRow(sym: String, bid: String, ask: String) { Row { Cell(sym, 60.dp, Color.White, false) Cell(bid, 80.dp, Color.White, false, TextAlign.End) Cell(ask, 80.dp, Color.White, false, TextAlign.End) } } @Composable fun Cell(text: String, width: Dp, color: Color, isHeader: Boolean, align: TextAlign = TextAlign.Start) { Text( text = text, color = color, fontSize = if (isHeader) 11.sp else 12.sp, fontWeight = if (isHeader) FontWeight.Bold else FontWeight.Normal, fontFamily = FontFamily.Monospace, textAlign = align, modifier = Modifier .width(width) .border(0.5.dp, Color(0xFF333333)) .padding(4.dp) ) }
.verticalScroll() and .horizontalScroll() on the root Box..border() directly on Text modifiers, making spreadsheet grids very clean to implement without wrapping everything in Boxes.| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 27,900 | 37,098 | +33% | 1 | 1 | 0% | 4,621 | 8,764 | +90% | 0 | 0 | — |
case-02 | fail→fail | 36,566 | 25,893 | -29% | 1 | 1 | 0% | 5,943 | 9,048 | +52% | 0 | 0 | — |
case-09 | fail→fail | 24,111 | 18,735 | -22% | 1 | 1 | 0% | 3,809 | 6,309 | +66% | 0 | 0 | — |
case-10 | fail→fail | 22,673 | 18,367 | -19% | 1 | 1 | 0% | 4,394 | 7,016 | +60% | 0 | 0 | — |
case-03 | fail→fail | 46,691 | 37,001 | -21% | 1 | 1 | 0% | 7,621 | 11,555 | +52% | 0 | 0 | — |
case-04 | fail→fail | 47,729 | 32,591 | -32% | 1 | 1 | 0% | 8,231 | 10,208 | +24% | 0 | 0 | — |
case-05 | fail→fail | 39,567 | 27,861 | -30% | 1 | 1 | 0% | 4,344 | 9,518 | +119% | 0 | 0 | — |
case-06 | fail→fail | 30,511 | 25,568 | -16% | 1 | 1 | 0% | 5,541 | 8,219 | +48% | 0 | 0 | — |
case-07 | fail→pass | 26,326 | 23,269 | -12% | 1 | 1 | 0% | 4,390 | 7,153 | +63% | 0 | 0 | — |
case-08 | fail→fail | 51,031 | 37,241 | -27% | 1 | 1 | 0% | 6,390 | 11,536 | +81% | 0 | 0 | — |
case-11 | fail→fail | 23,563 | 24,478 | +4% | 1 | 1 | 0% | 4,640 | 8,237 | +78% | 0 | 0 | — |
case-12 | fail→pass | 17,933 | 18,386 | +3% | 1 | 1 | 0% | 3,514 | 6,516 | +85% | 0 | 0 | — |
case-13 | fail→pass | 20,954 | 13,045 | -38% | 1 | 1 | 0% | 3,393 | 6,213 | +83% | 0 | 0 | — |
case-14 | fail→fail | 20,793 | 48,759 | +134% | 1 | 1 | 0% | 4,398 | 11,544 | +162% | 0 | 0 | — |
case-15 | fail→pass | 21,330 | 26,175 | +23% | 1 | 1 | 0% | 4,332 | 7,849 | +81% | 0 | 0 | — |
case-16 | fail→fail | 20,290 | 13,580 | -33% | 1 | 1 | 0% | 3,112 | 5,794 | +86% | 0 | 0 | — |
case-17 | fail→fail | 31,477 | 19,920 | -37% | 1 | 1 | 0% | 4,866 | 7,620 | +57% | 0 | 0 | — |
case-18 | fail→fail | 32,581 | 26,450 | -19% | 1 | 1 | 0% | 5,044 | 8,847 | +75% | 0 | 0 | — |
case-19 | fail→fail | 19,245 | 12,548 | -35% | 1 | 1 | 0% | 2,730 | 5,255 | +92% | 0 | 0 | — |
case-20 | fail→fail | 27,478 | 23,061 | -16% | 1 | 1 | 0% | 4,192 | 8,475 | +102% | 0 | 0 | — |
case-21 | pass→fail | 21,786 | 44,520 | +104% | 1 | 1 | 0% | 4,176 | 10,546 | +153% | 0 | 0 | — |
case-22 | pass→fail | 37,225 | 39,645 | +7% | 1 | 1 | 0% | 6,007 | 11,541 | +92% | 0 | 0 | — |
case-23 | pass→fail | 32,267 | 50,925 | +58% | 1 | 1 | 0% | 6,695 | 11,540 | +72% | 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 0 percentage points is the difference between those two pass rates over the 23 comparable cases. 7 cases got worse with the skill loaded, and they are 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.