bundled-skills/design-it/neo-brutalism/SKILL.md
Web and App implementation guide for Neo-Brutalism. Trigger when user wants thick borders, hard shadows, bright colors, and a playful yet structured look.
npx skillsauth add FrancoStino/opencode-skills-antigravity neo-brutalismInstall 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.
"Brutalism, but make it pop. Hard lines, stark shadows, and vibrant, unashamed colors."
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.
#FDF8F5), add stark black borders #000000, and use saturated accents like lemon yellow, bright cyan, or coral.Space Grotesk, Archivo Black, Inter Black).box-shadow with 0 blur.:root {
--neo-border: 3px solid #000000;
--neo-shadow: 6px 6px 0px #000000;
--neo-bg: #F4F4F0;
--neo-accent: #FF3366;
}
body {
background-color: var(--neo-bg);
font-family: 'Space Grotesk', sans-serif;
}
.neo-card {
background-color: #ffffff;
border: var(--neo-border);
box-shadow: var(--neo-shadow);
border-radius: 8px; /* Optional, sharp is fine too */
padding: 32px;
transition: transform 0.1s, box-shadow 0.1s;
}
.neo-btn {
background-color: var(--neo-accent);
color: #000;
font-weight: 800;
text-transform: uppercase;
border: var(--neo-border);
box-shadow: 4px 4px 0px #000000;
padding: 16px 32px;
cursor: pointer;
transition: all 0.1s ease;
}
.neo-btn:active {
/* The "press" effect is removing the shadow and moving it down */
transform: translate(4px, 4px);
box-shadow: 0px 0px 0px #000000;
}
struct NeoCard: View {
@State private var isPressed = false
let neoBorder: CGFloat = 3
let neoShadow: CGFloat = 6
var body: some View {
Button(action: {}) {
VStack(alignment: .leading, spacing: 16) {
Text("NEO-BRUTALISM")
.font(.system(size: 24, weight: .black, design: .default))
.foregroundColor(.black)
Text("Stark shadows, bright colors.")
.font(.system(size: 16, weight: .bold))
.foregroundColor(.black)
}
.padding(24)
.frame(maxWidth: .infinity, alignment: .leading)
.background(Color(red: 1.0, green: 0.2, blue: 0.4)) // Bright Coral
// Neo-brutalist solid outline
.overlay(
Rectangle()
.stroke(Color.black, lineWidth: neoBorder)
)
}
.buttonStyle(.plain)
// Hard drop shadow (0 blur)
.shadow(color: .black, radius: 0, x: isPressed ? 0 : neoShadow, y: isPressed ? 0 : neoShadow)
// Translate the button physically when pressed to cover the shadow
.offset(x: isPressed ? neoShadow : 0, y: isPressed ? neoShadow : 0)
.simultaneousGesture(
DragGesture(minimumDistance: 0)
.onChanged { _ in isPressed = true }
.onEnded { _ in isPressed = false }
)
// Instant pop, no smooth animation
.animation(.none, value: isPressed)
}
}
.shadow(radius: 0) is the secret. Set an offset (e.g. x: 6, y: 6)..offset()..animation(.none) — Neo-brutalism interactions should be instant, snapping like physical switches.class NeoCard extends StatefulWidget {
@override
State<NeoCard> createState() => _NeoCardState();
}
class _NeoCardState extends State<NeoCard> {
bool _isPressed = false;
final double neoOffset = 6.0;
@override
Widget build(BuildContext context) {
return GestureDetector(
onTapDown: (_) => setState(() => _isPressed = true),
onTapUp: (_) => setState(() => _isPressed = false),
onTapCancel: () => setState(() => _isPressed = false),
child: Transform.translate(
// Move the container when pressed
offset: Offset(_isPressed ? neoOffset : 0, _isPressed ? neoOffset : 0),
child: Container(
padding: const EdgeInsets.all(24),
decoration: BoxDecoration(
color: const Color(0xFFFF3366), // Bright coral
border: Border.all(color: Colors.black, width: 3),
// Sharp shadow disappears on press
boxShadow: _isPressed ? [] : [
BoxShadow(
color: Colors.black,
blurRadius: 0, // Critical: 0 blur
spreadRadius: 0,
offset: Offset(neoOffset, neoOffset),
),
],
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: const [
Text('NEO-BRUTALISM',
style: TextStyle(fontSize: 24, fontWeight: FontWeight.w900, color: Colors.black)),
SizedBox(height: 16),
Text('Stark shadows, bright colors.',
style: TextStyle(fontSize: 16, fontWeight: FontWeight.bold, color: Colors.black)),
],
),
),
),
);
}
}
blurRadius: 0 inside BoxShadow creates the solid block color._isPressed is true, and simultaneously use Transform.translate to shift the widget down-right.const NeoCard = () => {
const [pressed, setPressed] = useState(false);
const offset = 6;
return (
<Pressable
onPressIn={() => setPressed(true)}
onPressOut={() => setPressed(false)}
style={{
backgroundColor: '#FF3366',
padding: 24,
borderWidth: 3,
borderColor: '#000',
transform: [
{ translateX: pressed ? offset : 0 },
{ translateY: pressed ? offset : 0 }
],
// iOS Hard Shadow
shadowColor: '#000',
shadowOffset: { width: pressed ? 0 : offset, height: pressed ? 0 : offset },
shadowOpacity: pressed ? 0 : 1,
shadowRadius: 0,
// Android elevation cannot do 0-blur offset shadows natively
// elevation: 0
}}
>
<Text style={{ fontSize: 24, fontWeight: '900', color: '#000' }}>
NEO-BRUTALISM
</Text>
</Pressable>
);
};
elevation CANNOT create an unblurred, offset drop shadow.react-native-drop-shadow library or fake it by rendering an identical black <View> absolutely positioned directly behind the main card.@Composable
fun NeoCard() {
var isPressed by remember { mutableStateOf(false) }
val neoOffset = 6.dp
// Compose Modifier.shadow() always blurs.
// To get a solid hard shadow, we use Modifier.drawBehind.
Box(
modifier = Modifier
.padding(16.dp)
.offset(
x = if (isPressed) neoOffset else 0.dp,
y = if (isPressed) neoOffset else 0.dp
)
.drawBehind {
if (!isPressed) {
drawRect(
color = Color.Black,
topLeft = Offset(neoOffset.toPx(), neoOffset.toPx()),
size = size
)
}
}
.background(Color(0xFFFF3366))
.border(3.dp, Color.Black)
.pointerInput(Unit) {
detectTapGestures(
onPress = {
isPressed = true
tryAwaitRelease()
isPressed = false
}
)
}
.padding(24.dp)
) {
Column {
Text("NEO-BRUTALISM",
fontSize = 24.sp, fontWeight = FontWeight.Black, color = Color.Black)
Spacer(Modifier.height(16.dp))
Text("Stark shadows, bright colors.",
fontSize = 16.sp, fontWeight = FontWeight.Bold, color = Color.Black)
}
}
}
Modifier.shadow() applies ambient blur which breaks the neo-brutalist aesthetic.Modifier.drawBehind { drawRect(...) } with an offset to manually draw the solid shadow block behind the container.Modifier.offset on press, while hiding the shadow layer.data-ai
Snapshot a site's SEO state and detect ranking, indexation, metadata, canonical, robots, schema, and on-page regressions over time.
development
Coordinate focused subagents on substantial work, keep their ownership non-overlapping, and integrate verified results. Use for large-scope Codex tasks; keep trivial work with the coordinator.
data-ai
Use when an owner asks to find a cofounder or project partner. Assess only that agent's own owner and rank only approved profiles other agents posted for their own owners.
devops
Install, configure, verify, repair, update, and uninstall Hyprland on Fedora Linux with GPU-aware detection (NVIDIA/AMD/Intel).