card-based-design — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited card-based-design (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
"Bite-sized consumption. Encapsulating discrete pieces of information into distinct visual containers."
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.
border-radius: 8px and a medium drop shadow.auto-fit or a Masonry layout.body {
background-color: #f0f2f5; /* Standard app background */
padding: 40px;
}
.card-grid {
display: grid;
/* Auto-responsive magic */
grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
gap: 24px;
}
.card {
background: #ffffff;
border-radius: 12px;
overflow: hidden; /* Keep images inside the rounded corners */
box-shadow: 0 4px 12px rgba(0,0,0,0.08);
transition: transform 0.2s, box-shadow 0.2s;
display: flex;
flex-direction: column;
}
.card:hover {
transform: translateY(-4px);
box-shadow: 0 8px 24px rgba(0,0,0,0.12);
}
.card-image {
width: 100%;
height: 200px;
object-fit: cover;
border-bottom: 1px solid #eee;
}
.card-content {
padding: 20px;
flex-grow: 1; /* Pushes footer to the bottom */
}
.card-footer {
padding: 16px 20px;
border-top: 1px solid #eee;
display: flex;
justify-content: space-between;
}struct ContentCard: View {
var body: some View {
VStack(alignment: .leading, spacing: 0) {
// Image Area
Rectangle()
.fill(Color.gray.opacity(0.2))
.frame(height: 160)
// Content Area
VStack(alignment: .leading, spacing: 8) {
Text("Card Title")
.font(.headline)
Text("A brief description of the content inside this discrete card container.")
.font(.subheadline)
.foregroundColor(.secondary)
.lineLimit(2)
}
.padding(16)
}
.background(Color.white)
.cornerRadius(12)
// Clean, subtle drop shadow
.shadow(color: Color.black.opacity(0.08), radius: 12, x: 0, y: 4)
}
}
// In your view:
// LazyVGrid(columns: [GridItem(.adaptive(minimum: 160), spacing: 16)]) { ... }VStack inside a background with .cornerRadius and .shadow is the standard.LazyVGrid with .adaptive(minimum: 160) to automatically create a multi-column card grid that flows perfectly on iPad or iPhone.class ContentCard extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Card(
elevation: 4, // Handles shadow natively
shadowColor: Colors.black.withOpacity(0.4),
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12)),
clipBehavior: Clip.antiAlias, // Critical: stops images from bleeding over corners
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
// Image Area
Container(
height: 160,
color: Colors.grey[300],
width: double.infinity,
),
// Content Area
Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: const [
Text('Card Title', style: TextStyle(fontWeight: FontWeight.bold, fontSize: 18)),
SizedBox(height: 8),
Text(
'A brief description of the content inside this discrete card container.',
style: TextStyle(color: Colors.black54),
maxLines: 2,
overflow: TextOverflow.ellipsis,
),
],
),
),
],
),
);
}
}
// In your view: Use GridView.builder for the layoutCard widget does almost all the heavy lifting.clipBehavior: Clip.antiAlias on the Card, otherwise the top corners of your images will peek outside the border radius.const ContentCard = () => {
return (
<View style={styles.card}>
<View style={s~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.