12 CSS Retro UI Designs04 / 12
Neo Brutalist UI Components Examples
A neo-brutalist component board: 3px black strokes, blunt offset hard-shadows that grow on hover, clashing primaries, an inset-shadow text field, a stepped checkbox-hack toggle, badges, stat tiles and a punch-down CTA. Archivo Black + Space Grotesk on a dotted cream grid — deliberately anti-minimal.
Published
The code
<div class="ret-04">
<div class="ret-04__grid">
<div class="ret-04__card c-hello">
<span class="ret-04__eyebrow">Neo-Brutalism · 2026</span>
<h1>Raw edges.<br><mark>Hard shadows.</mark><br>No apologies.</h1>
<p class="ret-04__sub">Thick black strokes, blunt offset shadows and clashing primaries — the anti-minimalist system that refuses to whisper.</p>
</div>
<div class="ret-04__card c-tag">
<h3>Components</h3>
<div class="ret-04__chips">
<span class="ret-04__chip">BUTTONS</span>
<span class="ret-04__chip">TOGGLES</span>
<span class="ret-04__chip">INPUTS</span>
<span class="ret-04__chip">CARDS</span>
<span class="ret-04__chip">BADGES</span>
</div>
</div>
<div class="ret-04__card c-toggle">
<b>Brutal Switch</b>
<input type="checkbox" id="ret-04-sw" class="ret-04__sw" checked>
<label class="ret-04__track" for="ret-04-sw"><span class="ret-04__knob"></span></label>
<div class="ret-04__state">Status: </div>
</div>
<div class="ret-04__card c-input">
<label class="ret-04__field" for="ret-04-name">Your loud opinion</label>
<input type="text" id="ret-04-name" placeholder="TYPE SOMETHING UNHINGED…">
</div>
<div class="ret-04__card c-stat"><b>99%</b><span>Less Gradient</span></div>
<div class="ret-04__card c-stat2"><b>0px</b><span>Border Radius</span></div>
<div class="ret-04__card c-cta">
<h3>Ship it loud.</h3>
<span class="ret-04__btn">Grab the kit →</span>
</div>
</div>
</div><div class="ret-04">
<div class="ret-04__grid">
<div class="ret-04__card c-hello">
<span class="ret-04__eyebrow">Neo-Brutalism · 2026</span>
<h1>Raw edges.<br><mark>Hard shadows.</mark><br>No apologies.</h1>
<p class="ret-04__sub">Thick black strokes, blunt offset shadows and clashing primaries — the anti-minimalist system that refuses to whisper.</p>
</div>
<div class="ret-04__card c-tag">
<h3>Components</h3>
<div class="ret-04__chips">
<span class="ret-04__chip">BUTTONS</span>
<span class="ret-04__chip">TOGGLES</span>
<span class="ret-04__chip">INPUTS</span>
<span class="ret-04__chip">CARDS</span>
<span class="ret-04__chip">BADGES</span>
</div>
</div>
<div class="ret-04__card c-toggle">
<b>Brutal Switch</b>
<input type="checkbox" id="ret-04-sw" class="ret-04__sw" checked>
<label class="ret-04__track" for="ret-04-sw"><span class="ret-04__knob"></span></label>
<div class="ret-04__state">Status: </div>
</div>
<div class="ret-04__card c-input">
<label class="ret-04__field" for="ret-04-name">Your loud opinion</label>
<input type="text" id="ret-04-name" placeholder="TYPE SOMETHING UNHINGED…">
</div>
<div class="ret-04__card c-stat"><b>99%</b><span>Less Gradient</span></div>
<div class="ret-04__card c-stat2"><b>0px</b><span>Border Radius</span></div>
<div class="ret-04__card c-cta">
<h3>Ship it loud.</h3>
<span class="ret-04__btn">Grab the kit →</span>
</div>
</div>
</div>@import url('https://fonts.googleapis.com/css2?family=Archivo+Black&family=Space+Grotesk:wght@400;500;700&display=swap');
.ret-04,
.ret-04 *,
.ret-04 *::before,
.ret-04 *::after {
box-sizing: border-box;
margin: 0;
padding: 0;
}
.ret-04 ::selection {
background: #ff4d00;
color: #fff;
}
.ret-04 ::-moz-selection {
background: #ff4d00;
color: #fff;
}
.ret-04 {
--paper: #fef0d9;
--ink: #0d0d0d;
--orange: #ff4d00;
--lime: #c4f000;
--blue: #2b50ff;
--pink: #ff2e88;
--cyan: #16e0e0;
--shadow: 6px 6px 0 var(--ink);
--shadow-lg: 10px 10px 0 var(--ink);
font-family: 'Space Grotesk',sans-serif;
background: var(--paper);
background-image: radial-gradient(var(--ink) 1.4px,transparent 1.4px);
background-size: 26px 26px;
color: var(--ink);
min-height: 100vh;
padding: clamp(18px,4vw,52px);
}
.ret-04__grid {
max-width: 980px;
margin: 0 auto;
display: grid;
grid-template-columns: repeat(12,1fr);
gap: 18px;
}
.ret-04__card {
background: #fff;
border: 3px solid var(--ink);
box-shadow: var(--shadow);
padding: 22px;
transition: transform .12s cubic-bezier(.7,0,.2,1),box-shadow .12s;
}
.ret-04__card:hover {
transform: translate(-3px,-3px);
box-shadow: var(--shadow-lg);
}
.ret-04 .c-hello {
grid-column: span 7;
background: var(--lime);
}
.ret-04 .c-tag {
grid-column: span 5;
background: var(--blue);
color: #fff;
}
.ret-04 .c-toggle {
grid-column: span 4;
}
.ret-04 .c-input {
grid-column: span 8;
}
.ret-04 .c-stat {
grid-column: span 3;
background: var(--pink);
color: #fff;
}
.ret-04 .c-stat2 {
grid-column: span 3;
background: var(--cyan);
}
.ret-04 .c-cta {
grid-column: span 6;
background: var(--orange);
color: #fff;
}
@media (max-width: 720px) {
.ret-04 .c-hello,
.ret-04 .c-tag,
.ret-04 .c-input,
.ret-04 .c-cta {
grid-column: 1/-1;
}
.ret-04 .c-toggle,
.ret-04 .c-stat,
.ret-04 .c-stat2 {
grid-column: span 6;
}
}
.ret-04__eyebrow {
display: inline-block;
background: var(--ink);
color: var(--paper);
font-weight: 700;
font-size: .72rem;
letter-spacing: .12em;
text-transform: uppercase;
padding: 5px 12px;
border: 2px solid var(--ink);
margin-bottom: 16px;
}
.ret-04 h1 {
font-family: 'Archivo Black';
font-size: clamp(2rem,6vw,3.6rem);
line-height: .92;
letter-spacing: -.02em;
text-transform: uppercase;
}
.ret-04 h1 mark {
background: var(--orange);
color: #fff;
padding: 0 6px;
box-decoration-break: clone;
}
.ret-04__sub {
font-weight: 500;
margin-top: 14px;
font-size: 1.02rem;
line-height: 1.45;
max-width: 42ch;
}
.ret-04 .c-tag h3 {
font-family: 'Archivo Black';
font-size: 1.3rem;
text-transform: uppercase;
}
.ret-04__chips {
display: flex;
flex-wrap: wrap;
gap: 10px;
margin-top: 16px;
}
.ret-04__chip {
background: #fff;
color: var(--ink);
border: 2px solid var(--ink);
box-shadow: 3px 3px 0 var(--ink);
padding: 6px 12px;
font-weight: 700;
font-size: .82rem;
}
.ret-04 label.ret-04__field {
display: block;
font-weight: 700;
font-size: .78rem;
letter-spacing: .1em;
text-transform: uppercase;
margin-bottom: 8px;
}
.ret-04 input[type=text] {
width: 100%;
font-family: 'Space Grotesk';
font-size: 1rem;
font-weight: 500;
padding: 13px 14px;
border: 3px solid var(--ink);
background: var(--paper);
box-shadow: inset 4px 4px 0 rgba(0,0,0,.08);
outline: none;
}
.ret-04 input[type=text]:focus {
background: #fff;
box-shadow: inset 4px 4px 0 var(--lime);
}
/* toggle switch — checkbox hack */
.ret-04__sw {
position: absolute;
opacity: 0;
pointer-events: none;
}
.ret-04 .c-toggle b {
font-family: 'Archivo Black';
text-transform: uppercase;
font-size: .9rem;
display: block;
margin-bottom: 14px;
}
.ret-04__track {
display: inline-flex;
align-items: center;
width: 88px;
height: 42px;
border: 3px solid var(--ink);
background: #fff;
box-shadow: var(--shadow);
cursor: pointer;
padding: 4px;
position: relative;
}
.ret-04__knob {
width: 30px;
height: 30px;
background: var(--ink);
transition: transform .14s steps(3);
}
.ret-04__sw:checked ~ .ret-04__track {
background: var(--lime);
}
.ret-04__sw:checked ~ .ret-04__track .ret-04__knob {
transform: translateX(46px);
background: var(--orange);
}
.ret-04__state {
font-weight: 700;
margin-top: 12px;
font-size: .82rem;
}
.ret-04__state::after {
content: 'OFF';
}
.ret-04__sw:checked ~ .ret-04__state::after {
content: 'ON';
}
.ret-04 .c-stat b,
.ret-04 .c-stat2 b {
font-family: 'Archivo Black';
font-size: 2.4rem;
line-height: 1;
display: block;
}
.ret-04 .c-stat span,
.ret-04 .c-stat2 span {
font-weight: 700;
font-size: .74rem;
letter-spacing: .08em;
text-transform: uppercase;
}
.ret-04 .c-cta {
display: flex;
flex-direction: column;
justify-content: space-between;
gap: 18px;
}
.ret-04 .c-cta h3 {
font-family: 'Archivo Black';
font-size: 1.5rem;
text-transform: uppercase;
line-height: 1;
}
.ret-04__btn {
align-self: flex-start;
background: #fff;
color: var(--ink);
border: 3px solid var(--ink);
box-shadow: 5px 5px 0 var(--ink);
font-family: 'Archivo Black';
text-transform: uppercase;
font-size: .95rem;
padding: 13px 24px;
cursor: pointer;
transition: transform .1s,box-shadow .1s;
}
.ret-04__btn:hover {
transform: translate(-2px,-2px);
box-shadow: 8px 8px 0 var(--ink);
}
.ret-04__btn:active {
transform: translate(5px,5px);
box-shadow: 0 0 0 var(--ink);
}
@media (prefers-reduced-motion: reduce) {
.ret-04 * {
transition: none !important;
}
}@import url('https://fonts.googleapis.com/css2?family=Archivo+Black&family=Space+Grotesk:wght@400;500;700&display=swap');
.ret-04,
.ret-04 *,
.ret-04 *::before,
.ret-04 *::after {
box-sizing: border-box;
margin: 0;
padding: 0;
}
.ret-04 ::selection {
background: #ff4d00;
color: #fff;
}
.ret-04 ::-moz-selection {
background: #ff4d00;
color: #fff;
}
.ret-04 {
--paper: #fef0d9;
--ink: #0d0d0d;
--orange: #ff4d00;
--lime: #c4f000;
--blue: #2b50ff;
--pink: #ff2e88;
--cyan: #16e0e0;
--shadow: 6px 6px 0 var(--ink);
--shadow-lg: 10px 10px 0 var(--ink);
font-family: 'Space Grotesk',sans-serif;
background: var(--paper);
background-image: radial-gradient(var(--ink) 1.4px,transparent 1.4px);
background-size: 26px 26px;
color: var(--ink);
min-height: 100vh;
padding: clamp(18px,4vw,52px);
}
.ret-04__grid {
max-width: 980px;
margin: 0 auto;
display: grid;
grid-template-columns: repeat(12,1fr);
gap: 18px;
}
.ret-04__card {
background: #fff;
border: 3px solid var(--ink);
box-shadow: var(--shadow);
padding: 22px;
transition: transform .12s cubic-bezier(.7,0,.2,1),box-shadow .12s;
}
.ret-04__card:hover {
transform: translate(-3px,-3px);
box-shadow: var(--shadow-lg);
}
.ret-04 .c-hello {
grid-column: span 7;
background: var(--lime);
}
.ret-04 .c-tag {
grid-column: span 5;
background: var(--blue);
color: #fff;
}
.ret-04 .c-toggle {
grid-column: span 4;
}
.ret-04 .c-input {
grid-column: span 8;
}
.ret-04 .c-stat {
grid-column: span 3;
background: var(--pink);
color: #fff;
}
.ret-04 .c-stat2 {
grid-column: span 3;
background: var(--cyan);
}
.ret-04 .c-cta {
grid-column: span 6;
background: var(--orange);
color: #fff;
}
@media (max-width: 720px) {
.ret-04 .c-hello,
.ret-04 .c-tag,
.ret-04 .c-input,
.ret-04 .c-cta {
grid-column: 1/-1;
}
.ret-04 .c-toggle,
.ret-04 .c-stat,
.ret-04 .c-stat2 {
grid-column: span 6;
}
}
.ret-04__eyebrow {
display: inline-block;
background: var(--ink);
color: var(--paper);
font-weight: 700;
font-size: .72rem;
letter-spacing: .12em;
text-transform: uppercase;
padding: 5px 12px;
border: 2px solid var(--ink);
margin-bottom: 16px;
}
.ret-04 h1 {
font-family: 'Archivo Black';
font-size: clamp(2rem,6vw,3.6rem);
line-height: .92;
letter-spacing: -.02em;
text-transform: uppercase;
}
.ret-04 h1 mark {
background: var(--orange);
color: #fff;
padding: 0 6px;
box-decoration-break: clone;
}
.ret-04__sub {
font-weight: 500;
margin-top: 14px;
font-size: 1.02rem;
line-height: 1.45;
max-width: 42ch;
}
.ret-04 .c-tag h3 {
font-family: 'Archivo Black';
font-size: 1.3rem;
text-transform: uppercase;
}
.ret-04__chips {
display: flex;
flex-wrap: wrap;
gap: 10px;
margin-top: 16px;
}
.ret-04__chip {
background: #fff;
color: var(--ink);
border: 2px solid var(--ink);
box-shadow: 3px 3px 0 var(--ink);
padding: 6px 12px;
font-weight: 700;
font-size: .82rem;
}
.ret-04 label.ret-04__field {
display: block;
font-weight: 700;
font-size: .78rem;
letter-spacing: .1em;
text-transform: uppercase;
margin-bottom: 8px;
}
.ret-04 input[type=text] {
width: 100%;
font-family: 'Space Grotesk';
font-size: 1rem;
font-weight: 500;
padding: 13px 14px;
border: 3px solid var(--ink);
background: var(--paper);
box-shadow: inset 4px 4px 0 rgba(0,0,0,.08);
outline: none;
}
.ret-04 input[type=text]:focus {
background: #fff;
box-shadow: inset 4px 4px 0 var(--lime);
}
/* toggle switch — checkbox hack */
.ret-04__sw {
position: absolute;
opacity: 0;
pointer-events: none;
}
.ret-04 .c-toggle b {
font-family: 'Archivo Black';
text-transform: uppercase;
font-size: .9rem;
display: block;
margin-bottom: 14px;
}
.ret-04__track {
display: inline-flex;
align-items: center;
width: 88px;
height: 42px;
border: 3px solid var(--ink);
background: #fff;
box-shadow: var(--shadow);
cursor: pointer;
padding: 4px;
position: relative;
}
.ret-04__knob {
width: 30px;
height: 30px;
background: var(--ink);
transition: transform .14s steps(3);
}
.ret-04__sw:checked ~ .ret-04__track {
background: var(--lime);
}
.ret-04__sw:checked ~ .ret-04__track .ret-04__knob {
transform: translateX(46px);
background: var(--orange);
}
.ret-04__state {
font-weight: 700;
margin-top: 12px;
font-size: .82rem;
}
.ret-04__state::after {
content: 'OFF';
}
.ret-04__sw:checked ~ .ret-04__state::after {
content: 'ON';
}
.ret-04 .c-stat b,
.ret-04 .c-stat2 b {
font-family: 'Archivo Black';
font-size: 2.4rem;
line-height: 1;
display: block;
}
.ret-04 .c-stat span,
.ret-04 .c-stat2 span {
font-weight: 700;
font-size: .74rem;
letter-spacing: .08em;
text-transform: uppercase;
}
.ret-04 .c-cta {
display: flex;
flex-direction: column;
justify-content: space-between;
gap: 18px;
}
.ret-04 .c-cta h3 {
font-family: 'Archivo Black';
font-size: 1.5rem;
text-transform: uppercase;
line-height: 1;
}
.ret-04__btn {
align-self: flex-start;
background: #fff;
color: var(--ink);
border: 3px solid var(--ink);
box-shadow: 5px 5px 0 var(--ink);
font-family: 'Archivo Black';
text-transform: uppercase;
font-size: .95rem;
padding: 13px 24px;
cursor: pointer;
transition: transform .1s,box-shadow .1s;
}
.ret-04__btn:hover {
transform: translate(-2px,-2px);
box-shadow: 8px 8px 0 var(--ink);
}
.ret-04__btn:active {
transform: translate(5px,5px);
box-shadow: 0 0 0 var(--ink);
}
@media (prefers-reduced-motion: reduce) {
.ret-04 * {
transition: none !important;
}
}Here's a working CSS Retro UI Design from CodeFronts. Use it as-is or adapt to your framework. All classes are scoped under a unique prefix so the code won't collide with your existing styles. MIT licensed.
Demo: Neo Brutalist UI Components Examples
Source: https://codefronts.com/design-styles/css-retro-designs/neo-brutalist-ui-components-examples/
A neo-brutalist component board: 3px black strokes, blunt offset hard-shadows that grow on hover, clashing primaries, an inset-shadow text field, a stepped checkbox-hack toggle, badges, stat tiles and a punch-down CTA. Archivo Black + Space Grotesk on a dotted cream grid — deliberately anti-minimal.
## HTML
```html
<div class="ret-04">
<div class="ret-04__grid">
<div class="ret-04__card c-hello">
<span class="ret-04__eyebrow">Neo-Brutalism · 2026</span>
<h1>Raw edges.<br><mark>Hard shadows.</mark><br>No apologies.</h1>
<p class="ret-04__sub">Thick black strokes, blunt offset shadows and clashing primaries — the anti-minimalist system that refuses to whisper.</p>
</div>
<div class="ret-04__card c-tag">
<h3>Components</h3>
<div class="ret-04__chips">
<span class="ret-04__chip">BUTTONS</span>
<span class="ret-04__chip">TOGGLES</span>
<span class="ret-04__chip">INPUTS</span>
<span class="ret-04__chip">CARDS</span>
<span class="ret-04__chip">BADGES</span>
</div>
</div>
<div class="ret-04__card c-toggle">
<b>Brutal Switch</b>
<input type="checkbox" id="ret-04-sw" class="ret-04__sw" checked>
<label class="ret-04__track" for="ret-04-sw"><span class="ret-04__knob"></span></label>
<div class="ret-04__state">Status: </div>
</div>
<div class="ret-04__card c-input">
<label class="ret-04__field" for="ret-04-name">Your loud opinion</label>
<input type="text" id="ret-04-name" placeholder="TYPE SOMETHING UNHINGED…">
</div>
<div class="ret-04__card c-stat"><b>99%</b><span>Less Gradient</span></div>
<div class="ret-04__card c-stat2"><b>0px</b><span>Border Radius</span></div>
<div class="ret-04__card c-cta">
<h3>Ship it loud.</h3>
<span class="ret-04__btn">Grab the kit →</span>
</div>
</div>
</div>
```
## CSS
```css
@import url('https://fonts.googleapis.com/css2?family=Archivo+Black&family=Space+Grotesk:wght@400;500;700&display=swap');
.ret-04,
.ret-04 *,
.ret-04 *::before,
.ret-04 *::after {
box-sizing: border-box;
margin: 0;
padding: 0;
}
.ret-04 ::selection {
background: #ff4d00;
color: #fff;
}
.ret-04 ::-moz-selection {
background: #ff4d00;
color: #fff;
}
.ret-04 {
--paper: #fef0d9;
--ink: #0d0d0d;
--orange: #ff4d00;
--lime: #c4f000;
--blue: #2b50ff;
--pink: #ff2e88;
--cyan: #16e0e0;
--shadow: 6px 6px 0 var(--ink);
--shadow-lg: 10px 10px 0 var(--ink);
font-family: 'Space Grotesk',sans-serif;
background: var(--paper);
background-image: radial-gradient(var(--ink) 1.4px,transparent 1.4px);
background-size: 26px 26px;
color: var(--ink);
min-height: 100vh;
padding: clamp(18px,4vw,52px);
}
.ret-04__grid {
max-width: 980px;
margin: 0 auto;
display: grid;
grid-template-columns: repeat(12,1fr);
gap: 18px;
}
.ret-04__card {
background: #fff;
border: 3px solid var(--ink);
box-shadow: var(--shadow);
padding: 22px;
transition: transform .12s cubic-bezier(.7,0,.2,1),box-shadow .12s;
}
.ret-04__card:hover {
transform: translate(-3px,-3px);
box-shadow: var(--shadow-lg);
}
.ret-04 .c-hello {
grid-column: span 7;
background: var(--lime);
}
.ret-04 .c-tag {
grid-column: span 5;
background: var(--blue);
color: #fff;
}
.ret-04 .c-toggle {
grid-column: span 4;
}
.ret-04 .c-input {
grid-column: span 8;
}
.ret-04 .c-stat {
grid-column: span 3;
background: var(--pink);
color: #fff;
}
.ret-04 .c-stat2 {
grid-column: span 3;
background: var(--cyan);
}
.ret-04 .c-cta {
grid-column: span 6;
background: var(--orange);
color: #fff;
}
@media (max-width: 720px) {
.ret-04 .c-hello,
.ret-04 .c-tag,
.ret-04 .c-input,
.ret-04 .c-cta {
grid-column: 1/-1;
}
.ret-04 .c-toggle,
.ret-04 .c-stat,
.ret-04 .c-stat2 {
grid-column: span 6;
}
}
.ret-04__eyebrow {
display: inline-block;
background: var(--ink);
color: var(--paper);
font-weight: 700;
font-size: .72rem;
letter-spacing: .12em;
text-transform: uppercase;
padding: 5px 12px;
border: 2px solid var(--ink);
margin-bottom: 16px;
}
.ret-04 h1 {
font-family: 'Archivo Black';
font-size: clamp(2rem,6vw,3.6rem);
line-height: .92;
letter-spacing: -.02em;
text-transform: uppercase;
}
.ret-04 h1 mark {
background: var(--orange);
color: #fff;
padding: 0 6px;
box-decoration-break: clone;
}
.ret-04__sub {
font-weight: 500;
margin-top: 14px;
font-size: 1.02rem;
line-height: 1.45;
max-width: 42ch;
}
.ret-04 .c-tag h3 {
font-family: 'Archivo Black';
font-size: 1.3rem;
text-transform: uppercase;
}
.ret-04__chips {
display: flex;
flex-wrap: wrap;
gap: 10px;
margin-top: 16px;
}
.ret-04__chip {
background: #fff;
color: var(--ink);
border: 2px solid var(--ink);
box-shadow: 3px 3px 0 var(--ink);
padding: 6px 12px;
font-weight: 700;
font-size: .82rem;
}
.ret-04 label.ret-04__field {
display: block;
font-weight: 700;
font-size: .78rem;
letter-spacing: .1em;
text-transform: uppercase;
margin-bottom: 8px;
}
.ret-04 input[type=text] {
width: 100%;
font-family: 'Space Grotesk';
font-size: 1rem;
font-weight: 500;
padding: 13px 14px;
border: 3px solid var(--ink);
background: var(--paper);
box-shadow: inset 4px 4px 0 rgba(0,0,0,.08);
outline: none;
}
.ret-04 input[type=text]:focus {
background: #fff;
box-shadow: inset 4px 4px 0 var(--lime);
}
/* toggle switch — checkbox hack */
.ret-04__sw {
position: absolute;
opacity: 0;
pointer-events: none;
}
.ret-04 .c-toggle b {
font-family: 'Archivo Black';
text-transform: uppercase;
font-size: .9rem;
display: block;
margin-bottom: 14px;
}
.ret-04__track {
display: inline-flex;
align-items: center;
width: 88px;
height: 42px;
border: 3px solid var(--ink);
background: #fff;
box-shadow: var(--shadow);
cursor: pointer;
padding: 4px;
position: relative;
}
.ret-04__knob {
width: 30px;
height: 30px;
background: var(--ink);
transition: transform .14s steps(3);
}
.ret-04__sw:checked ~ .ret-04__track {
background: var(--lime);
}
.ret-04__sw:checked ~ .ret-04__track .ret-04__knob {
transform: translateX(46px);
background: var(--orange);
}
.ret-04__state {
font-weight: 700;
margin-top: 12px;
font-size: .82rem;
}
.ret-04__state::after {
content: 'OFF';
}
.ret-04__sw:checked ~ .ret-04__state::after {
content: 'ON';
}
.ret-04 .c-stat b,
.ret-04 .c-stat2 b {
font-family: 'Archivo Black';
font-size: 2.4rem;
line-height: 1;
display: block;
}
.ret-04 .c-stat span,
.ret-04 .c-stat2 span {
font-weight: 700;
font-size: .74rem;
letter-spacing: .08em;
text-transform: uppercase;
}
.ret-04 .c-cta {
display: flex;
flex-direction: column;
justify-content: space-between;
gap: 18px;
}
.ret-04 .c-cta h3 {
font-family: 'Archivo Black';
font-size: 1.5rem;
text-transform: uppercase;
line-height: 1;
}
.ret-04__btn {
align-self: flex-start;
background: #fff;
color: var(--ink);
border: 3px solid var(--ink);
box-shadow: 5px 5px 0 var(--ink);
font-family: 'Archivo Black';
text-transform: uppercase;
font-size: .95rem;
padding: 13px 24px;
cursor: pointer;
transition: transform .1s,box-shadow .1s;
}
.ret-04__btn:hover {
transform: translate(-2px,-2px);
box-shadow: 8px 8px 0 var(--ink);
}
.ret-04__btn:active {
transform: translate(5px,5px);
box-shadow: 0 0 0 var(--ink);
}
@media (prefers-reduced-motion: reduce) {
.ret-04 * {
transition: none !important;
}
}
```Paste this into ChatGPT, Claude, Cursor, or any coding assistant. The block below is pre-framed with everything the AI needs to integrate this demo into your project — markup, styles, scoping notes, and the source URL. Hit Copy and paste straight into your chat.
Here's a working CSS Retro UI Design from CodeFronts. Use it as-is or adapt to your framework. All classes are scoped under a unique prefix so the code won't collide with your existing styles. MIT licensed.
Demo: Neo Brutalist UI Components Examples
Source: https://codefronts.com/design-styles/css-retro-designs/neo-brutalist-ui-components-examples/
A neo-brutalist component board: 3px black strokes, blunt offset hard-shadows that grow on hover, clashing primaries, an inset-shadow text field, a stepped checkbox-hack toggle, badges, stat tiles and a punch-down CTA. Archivo Black + Space Grotesk on a dotted cream grid — deliberately anti-minimal.
## HTML
```html
<div class="ret-04">
<div class="ret-04__grid">
<div class="ret-04__card c-hello">
<span class="ret-04__eyebrow">Neo-Brutalism · 2026</span>
<h1>Raw edges.<br><mark>Hard shadows.</mark><br>No apologies.</h1>
<p class="ret-04__sub">Thick black strokes, blunt offset shadows and clashing primaries — the anti-minimalist system that refuses to whisper.</p>
</div>
<div class="ret-04__card c-tag">
<h3>Components</h3>
<div class="ret-04__chips">
<span class="ret-04__chip">BUTTONS</span>
<span class="ret-04__chip">TOGGLES</span>
<span class="ret-04__chip">INPUTS</span>
<span class="ret-04__chip">CARDS</span>
<span class="ret-04__chip">BADGES</span>
</div>
</div>
<div class="ret-04__card c-toggle">
<b>Brutal Switch</b>
<input type="checkbox" id="ret-04-sw" class="ret-04__sw" checked>
<label class="ret-04__track" for="ret-04-sw"><span class="ret-04__knob"></span></label>
<div class="ret-04__state">Status: </div>
</div>
<div class="ret-04__card c-input">
<label class="ret-04__field" for="ret-04-name">Your loud opinion</label>
<input type="text" id="ret-04-name" placeholder="TYPE SOMETHING UNHINGED…">
</div>
<div class="ret-04__card c-stat"><b>99%</b><span>Less Gradient</span></div>
<div class="ret-04__card c-stat2"><b>0px</b><span>Border Radius</span></div>
<div class="ret-04__card c-cta">
<h3>Ship it loud.</h3>
<span class="ret-04__btn">Grab the kit →</span>
</div>
</div>
</div>
```
## CSS
```css
@import url('https://fonts.googleapis.com/css2?family=Archivo+Black&family=Space+Grotesk:wght@400;500;700&display=swap');
.ret-04,
.ret-04 *,
.ret-04 *::before,
.ret-04 *::after {
box-sizing: border-box;
margin: 0;
padding: 0;
}
.ret-04 ::selection {
background: #ff4d00;
color: #fff;
}
.ret-04 ::-moz-selection {
background: #ff4d00;
color: #fff;
}
.ret-04 {
--paper: #fef0d9;
--ink: #0d0d0d;
--orange: #ff4d00;
--lime: #c4f000;
--blue: #2b50ff;
--pink: #ff2e88;
--cyan: #16e0e0;
--shadow: 6px 6px 0 var(--ink);
--shadow-lg: 10px 10px 0 var(--ink);
font-family: 'Space Grotesk',sans-serif;
background: var(--paper);
background-image: radial-gradient(var(--ink) 1.4px,transparent 1.4px);
background-size: 26px 26px;
color: var(--ink);
min-height: 100vh;
padding: clamp(18px,4vw,52px);
}
.ret-04__grid {
max-width: 980px;
margin: 0 auto;
display: grid;
grid-template-columns: repeat(12,1fr);
gap: 18px;
}
.ret-04__card {
background: #fff;
border: 3px solid var(--ink);
box-shadow: var(--shadow);
padding: 22px;
transition: transform .12s cubic-bezier(.7,0,.2,1),box-shadow .12s;
}
.ret-04__card:hover {
transform: translate(-3px,-3px);
box-shadow: var(--shadow-lg);
}
.ret-04 .c-hello {
grid-column: span 7;
background: var(--lime);
}
.ret-04 .c-tag {
grid-column: span 5;
background: var(--blue);
color: #fff;
}
.ret-04 .c-toggle {
grid-column: span 4;
}
.ret-04 .c-input {
grid-column: span 8;
}
.ret-04 .c-stat {
grid-column: span 3;
background: var(--pink);
color: #fff;
}
.ret-04 .c-stat2 {
grid-column: span 3;
background: var(--cyan);
}
.ret-04 .c-cta {
grid-column: span 6;
background: var(--orange);
color: #fff;
}
@media (max-width: 720px) {
.ret-04 .c-hello,
.ret-04 .c-tag,
.ret-04 .c-input,
.ret-04 .c-cta {
grid-column: 1/-1;
}
.ret-04 .c-toggle,
.ret-04 .c-stat,
.ret-04 .c-stat2 {
grid-column: span 6;
}
}
.ret-04__eyebrow {
display: inline-block;
background: var(--ink);
color: var(--paper);
font-weight: 700;
font-size: .72rem;
letter-spacing: .12em;
text-transform: uppercase;
padding: 5px 12px;
border: 2px solid var(--ink);
margin-bottom: 16px;
}
.ret-04 h1 {
font-family: 'Archivo Black';
font-size: clamp(2rem,6vw,3.6rem);
line-height: .92;
letter-spacing: -.02em;
text-transform: uppercase;
}
.ret-04 h1 mark {
background: var(--orange);
color: #fff;
padding: 0 6px;
box-decoration-break: clone;
}
.ret-04__sub {
font-weight: 500;
margin-top: 14px;
font-size: 1.02rem;
line-height: 1.45;
max-width: 42ch;
}
.ret-04 .c-tag h3 {
font-family: 'Archivo Black';
font-size: 1.3rem;
text-transform: uppercase;
}
.ret-04__chips {
display: flex;
flex-wrap: wrap;
gap: 10px;
margin-top: 16px;
}
.ret-04__chip {
background: #fff;
color: var(--ink);
border: 2px solid var(--ink);
box-shadow: 3px 3px 0 var(--ink);
padding: 6px 12px;
font-weight: 700;
font-size: .82rem;
}
.ret-04 label.ret-04__field {
display: block;
font-weight: 700;
font-size: .78rem;
letter-spacing: .1em;
text-transform: uppercase;
margin-bottom: 8px;
}
.ret-04 input[type=text] {
width: 100%;
font-family: 'Space Grotesk';
font-size: 1rem;
font-weight: 500;
padding: 13px 14px;
border: 3px solid var(--ink);
background: var(--paper);
box-shadow: inset 4px 4px 0 rgba(0,0,0,.08);
outline: none;
}
.ret-04 input[type=text]:focus {
background: #fff;
box-shadow: inset 4px 4px 0 var(--lime);
}
/* toggle switch — checkbox hack */
.ret-04__sw {
position: absolute;
opacity: 0;
pointer-events: none;
}
.ret-04 .c-toggle b {
font-family: 'Archivo Black';
text-transform: uppercase;
font-size: .9rem;
display: block;
margin-bottom: 14px;
}
.ret-04__track {
display: inline-flex;
align-items: center;
width: 88px;
height: 42px;
border: 3px solid var(--ink);
background: #fff;
box-shadow: var(--shadow);
cursor: pointer;
padding: 4px;
position: relative;
}
.ret-04__knob {
width: 30px;
height: 30px;
background: var(--ink);
transition: transform .14s steps(3);
}
.ret-04__sw:checked ~ .ret-04__track {
background: var(--lime);
}
.ret-04__sw:checked ~ .ret-04__track .ret-04__knob {
transform: translateX(46px);
background: var(--orange);
}
.ret-04__state {
font-weight: 700;
margin-top: 12px;
font-size: .82rem;
}
.ret-04__state::after {
content: 'OFF';
}
.ret-04__sw:checked ~ .ret-04__state::after {
content: 'ON';
}
.ret-04 .c-stat b,
.ret-04 .c-stat2 b {
font-family: 'Archivo Black';
font-size: 2.4rem;
line-height: 1;
display: block;
}
.ret-04 .c-stat span,
.ret-04 .c-stat2 span {
font-weight: 700;
font-size: .74rem;
letter-spacing: .08em;
text-transform: uppercase;
}
.ret-04 .c-cta {
display: flex;
flex-direction: column;
justify-content: space-between;
gap: 18px;
}
.ret-04 .c-cta h3 {
font-family: 'Archivo Black';
font-size: 1.5rem;
text-transform: uppercase;
line-height: 1;
}
.ret-04__btn {
align-self: flex-start;
background: #fff;
color: var(--ink);
border: 3px solid var(--ink);
box-shadow: 5px 5px 0 var(--ink);
font-family: 'Archivo Black';
text-transform: uppercase;
font-size: .95rem;
padding: 13px 24px;
cursor: pointer;
transition: transform .1s,box-shadow .1s;
}
.ret-04__btn:hover {
transform: translate(-2px,-2px);
box-shadow: 8px 8px 0 var(--ink);
}
.ret-04__btn:active {
transform: translate(5px,5px);
box-shadow: 0 0 0 var(--ink);
}
@media (prefers-reduced-motion: reduce) {
.ret-04 * {
transition: none !important;
}
}
```