bundled-skills/design-it/data-dense-design/SKILL.md
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).
npx skillsauth add FrancoStino/opencode-skills-antigravity data-dense-designInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
"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.body {
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 */
struct 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.class 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.const 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.@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.tools
Authorized security assessment of LLM applications and AI agents: prompt injection, tool abuse, RAG exposure, memory poisoning, system-prompt extraction, and agent-compliance engineering per OWASP LLM/ASI Top 10.
development
Builds two parameterized UI modes—流光溢彩白 (iridescent white) and 五彩斑斓黑 (colorful black)—with OKLCH, WebGL/CSS fallback, vision gating, screenshot QA, and total/per-color intensity reports. Use when a UI request names either mode or needs measured color parameters.
tools
Delegate coding tasks to the Kimi Code CLI (`kimi`) only when the user explicitly requests it, while the orchestrator retains review and landing responsibility.
development
Front-end JavaScript reverse engineering: locate signature chains, analyze encrypted request parameters, sample runtime behavior, and reproduce logic locally in Node for evidence-based output.