Open demo

CSS code

HTML
<svg width="0" height="0" style="position:absolute" aria-hidden="true" focusable="false">
  <symbol id="nb-i-users" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><circle cx="9" cy="8.5" r="3.5"/><path d="M2.5 20a6.5 6.5 0 0 1 13 0M15.5 5.2a3.5 3.5 0 0 1 0 6.6M17.5 14.2a6.5 6.5 0 0 1 4 5.8"/></symbol>
  <symbol id="nb-i-arrow-up" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M12 19.5v-14M6.5 11 12 5.5l5.5 5.5"/></symbol>
  <symbol id="nb-i-dollar" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M12 2.5v19M16.5 6.5H10a3 3 0 0 0 0 6h4a3 3 0 0 1 0 6H7"/></symbol>
  <symbol id="nb-i-mail" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="5.5" width="18" height="13" rx="1.5"/><path d="m3.5 6.5 8.5 7 8.5-7"/></symbol>
  <symbol id="nb-i-arrow-down" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M12 4.5v14M6.5 13l5.5 5.5 5.5-5.5"/></symbol>
  <symbol id="nb-i-play" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path fill="currentColor" d="M7.5 4.5v15l12-7.5z"/></symbol>
  <symbol id="nb-i-star" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="m12 3.5 2.6 5.6 6.1.7-4.5 4.2 1.2 6L12 17l-5.4 3 1.2-6-4.5-4.2 6.1-.7z"/></symbol>
  <symbol id="nb-i-plus" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M12 4.5v15M4.5 12h15"/></symbol>
  <symbol id="nb-i-send" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M20.5 3.5 3.5 10.5l7 3 3 7z"/><path d="m10.5 13.5 4-4"/></symbol>
  <symbol id="nb-i-check" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="m4.5 12.5 5 5L19.5 7"/></symbol>
  <symbol id="nb-i-x" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M6 6l12 12M18 6 6 18"/></symbol>
  <symbol id="nb-i-sparkle" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M12 3c.8 4.6 2.4 6.2 7 7-4.6.8-6.2 2.4-7 7-.8-4.6-2.4-6.2-7-7 4.6-.8 6.2-2.4 7-7zM19 16.5c.3 1.6.9 2.2 2.5 2.5-1.6.3-2.2.9-2.5 2.5-.3-1.6-.9-2.2-2.5-2.5 1.6-.3 2.2-.9 2.5-2.5z"/></symbol>
  <symbol id="nb-i-flame" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M12 21a6.5 6.5 0 0 0 6.5-6.5c0-4.5-4-6.5-4.5-11-3 2-4.5 4.5-4.5 7.5-1.2-.6-2-1.8-2.2-3C5.9 10 5.5 12 5.5 14.5A6.5 6.5 0 0 0 12 21z"/></symbol>
</svg>
<section><span class="lbl">Stat cards · the change is written in words</span><div class="nb-grid">
<article class="nb-card nb-card--lemon nb-stat"><div class="nb-stat__top"><h3 class="nb-stat__label">Subscribers</h3><span class="nb-stat__icon"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-users"/></svg></span></div><p class="nb-stat__value nb-display">12,480</p><p class="nb-stat__delta"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-arrow-up"/></svg>Up 8.2% this month</p></article>
<article class="nb-card nb-card--pink nb-stat"><div class="nb-stat__top"><h3 class="nb-stat__label">Revenue</h3><span class="nb-stat__icon"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-dollar"/></svg></span></div><p class="nb-stat__value nb-display">$4,920</p><p class="nb-stat__delta"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-arrow-up"/></svg>Up $610 on September</p></article>
<article class="nb-card nb-card--cyan nb-stat"><div class="nb-stat__top"><h3 class="nb-stat__label">Open rate</h3><span class="nb-stat__icon"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-mail"/></svg></span></div><p class="nb-stat__value nb-display">61%</p><p class="nb-stat__delta"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-arrow-down"/></svg>Down 3 points on last issue</p></article>
</div></section>
<section><span class="lbl">Content card and profile card</span><div class="nb-grid">
<article class="nb-card"><span class="nb-cover"><svg viewBox="0 0 320 160" preserveAspectRatio="xMidYMid slice" aria-hidden="true" focusable="false"><rect width="320" height="160" style="fill:var(--nb-cyan)"/><circle cx="252" cy="42" r="54" stroke-width="3" style="fill:var(--nb-lemon);stroke:var(--nb-line)"/><rect x="34" y="62" width="112" height="80" rx="6" stroke-width="3" transform="rotate(-6 90 102)" style="fill:#fff;stroke:var(--nb-line)"/><g transform="rotate(5 116 88)"><rect x="60" y="48" width="112" height="80" rx="6" stroke-width="3" style="fill:var(--nb-pink);stroke:var(--nb-line)"/><path d="M78 72h70M78 88h52M78 104h62" stroke-width="5" stroke-linecap="round" style="stroke:var(--nb-line)"/></g><path d="M196 132c14-20 28 20 42 0s28 20 42 0" fill="none" stroke-width="5" stroke-linecap="round" style="stroke:var(--nb-line)"/></svg></span><span class="nb-sticker nb-sticker--corner nb-sticker--right">Episode 42</span>
<h3 class="nb-card__title nb-display">How we print 500 zines in a weekend</h3>
<p class="nb-card__text">Our risograph setup, the paper we buy, and the three mistakes we stopped making.</p>
<p class="nb-meta"><span>18 min listen</span><span>2 Oct 2026</span></p>
<a class="nb-btn nb-btn--sm nb-btn--lemon" href="#"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-play"/></svg>Listen now<span class="nb-sr">: How we print 500 zines in a weekend</span></a></article>
<article class="nb-card nb-profile"><span class="nb-sticker nb-sticker--lime nb-sticker--corner"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-star"/></svg>Top creator</span>
<span class="nb-avatar" aria-hidden="true">MO</span>
<h3 class="nb-card__title nb-display">Mira Okafor</h3><p class="nb-profile__handle">@paperplane · Lisbon</p>
<p class="nb-profile__bio">Zine maker and radio host. Risograph prints every second Friday.</p>
<dl class="nb-dl"><div><dt>Posts</dt><dd>214</dd></div><div><dt>Fans</dt><dd>12.4k</dd></div><div><dt>Prints</dt><dd>38</dd></div></dl>
<div class="nb-actions"><button class="nb-btn nb-btn--lemon" type="button"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-plus"/></svg>Follow</button><button class="nb-btn nb-btn--icon" type="button" aria-label="Message Mira"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-send"/></svg></button></div></article>
</div></section>
<section><span class="lbl">Pricing cards · each line says Included or Not included</span><div class="nb-grid">
<article class="nb-card"><h3 class="nb-price__name">Free</h3><p class="nb-price__amount nb-display">$0 <small>forever</small></p><p class="nb-price__note">For fans who want to follow along.</p>
<ul class="nb-feats"><li><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-check"/></svg><span class="nb-sr">Included: </span>Public posts</li><li><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-check"/></svg><span class="nb-sr">Included: </span>Monthly newsletter</li><li class="is-off"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-x"/></svg><span class="nb-sr">Not included: </span>Members-only episodes</li><li class="is-off"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-x"/></svg><span class="nb-sr">Not included: </span>Print discounts</li></ul>
<a class="nb-btn nb-btn--block" href="#">Join free</a></article>
<article class="nb-card nb-card--lemon"><span class="nb-sticker nb-sticker--pink nb-sticker--corner nb-sticker--right">Most popular</span><h3 class="nb-price__name">Supporter</h3><p class="nb-price__amount nb-display">$8 <small>a month</small></p><p class="nb-price__note">Everything, plus the back catalogue.</p>
<ul class="nb-feats"><li><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-check"/></svg><span class="nb-sr">Included: </span>Public posts</li><li><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-check"/></svg><span class="nb-sr">Included: </span>Monthly newsletter</li><li><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-check"/></svg><span class="nb-sr">Included: </span>Members-only episodes</li><li class="is-off"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-x"/></svg><span class="nb-sr">Not included: </span>Print discounts</li></ul>
<a class="nb-btn nb-btn--ink nb-btn--block" href="#">Become a supporter</a></article>
<article class="nb-card"><h3 class="nb-price__name">Studio</h3><p class="nb-price__amount nb-display">$24 <small>a month</small></p><p class="nb-price__note">For collectors who want every print.</p>
<ul class="nb-feats"><li><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-check"/></svg><span class="nb-sr">Included: </span>Public posts</li><li><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-check"/></svg><span class="nb-sr">Included: </span>Monthly newsletter</li><li><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-check"/></svg><span class="nb-sr">Included: </span>Members-only episodes</li><li><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-check"/></svg><span class="nb-sr">Included: </span>20% off every print</li></ul>
<a class="nb-btn nb-btn--block" href="#">Go Studio</a></article>
</div></section>
<section><span class="lbl">Stickers</span><div class="nb-cluster">
<span class="nb-sticker"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-sparkle"/></svg>New drop</span>
<span class="nb-sticker nb-sticker--pink nb-sticker--right">Members only</span>
<span class="nb-sticker nb-sticker--cyan"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-flame"/></svg>Live now</span>
<span class="nb-sticker nb-sticker--lime nb-sticker--right nb-sticker--square">Hand printed</span>
<span class="nb-sticker nb-sticker--violet">Limited run</span>
<span class="nb-burst"><span>50% off</span></span>
<span class="nb-burst nb-burst--pink"><span>Free shipping</span></span>
</div></section>
CSS
/* ── Neobrutalism UI kit tokens (uiCookies) — identical in every set ─────────────
   Thick ink borders, hard offset shadows and flat saturated fills on cream paper.
   Change a token and the whole kit follows; the border and shadow recipes below are built from them. */
:root{
  --nb-paper:#fff6e0;        /* page background, cream */
  --nb-surface:#ffffff;      /* card, field and button faces */
  --nb-ink:#111111;          /* text, 17.5:1 on paper */
  --nb-muted:#454036;        /* secondary text, 9.6:1 on paper */
  --nb-line:#111111;         /* border colour */
  --nb-bw:3px;               /* border width */
  --nb-shadow-x:4px;         /* hard shadow offset; pressed controls move this far into it */
  --nb-shadow-y:4px;
  --nb-shadow-color:#111111;
  --nb-radius:12px;          /* cards and panels */
  --nb-radius-sm:8px;        /* buttons and fields */
  --nb-focus:#1d4ed8;        /* dashed focus outline, 6.2:1 on paper, never the shadow */
  --nb-on-fill:#111111;      /* text on every palette fill below, 6.8:1 or more */
  --nb-on-fill-muted:#2b2822;/* secondary text on fills, 5.2:1 or more */
  --nb-lemon:#ffe14d;--nb-pink:#ff90d0;--nb-cyan:#62e2e8;--nb-lime:#b6f36a;
  --nb-orange:#ffa94d;--nb-violet:#b9a3ff;--nb-red:#ff6b6b;
  --nb-blue:#2448e0;--nb-on-blue:#ffffff; /* the only fill that takes white text, 6.8:1 */
  --nb-danger:#b42318;       /* destructive text, 6.1:1 on paper */
  --nb-font:"Space Grotesk","Archivo","Helvetica Neue",Arial,system-ui,sans-serif;
  --nb-font-display:"Archivo Black","Arial Black","Helvetica Neue",Arial,sans-serif;
}
/* Dark brutalism: data-nb="dark" on any wrapper, or a checked .nb-theme-input inside a [data-nb] element.
   :is() is a forgiving list, so browsers without :has() still apply data-nb="dark". Fills keep dark text. */
[data-nb]:is([data-nb="dark"],:has(.nb-theme-input:checked)){
  --nb-paper:#17150f;--nb-surface:#25221b;--nb-ink:#fbf3dc;--nb-muted:#d6ccb2;--nb-line:#fbf3dc;
  --nb-shadow-color:#fbf3dc;--nb-focus:#8db4ff;--nb-danger:#ff9b8f;color-scheme:dark}
/* More contrast requested: secondary text turns full ink */
@media (prefers-contrast:more){:root,[data-nb]:is([data-nb],:has(.nb-theme-input:checked)){--nb-muted:var(--nb-ink);--nb-on-fill-muted:var(--nb-on-fill)}}
:root,[data-nb]{
  --nb-border:var(--nb-bw) solid var(--nb-line);
  --nb-shadow:var(--nb-shadow-x) var(--nb-shadow-y) 0 0 var(--nb-shadow-color);
  --nb-shadow-sm:calc(var(--nb-shadow-x)*.5) calc(var(--nb-shadow-y)*.5) 0 0 var(--nb-shadow-color);
  --nb-shadow-lg:calc(var(--nb-shadow-x)*1.75) calc(var(--nb-shadow-y)*1.75) 0 0 var(--nb-shadow-color);
  --nb-shadow-hover:calc(var(--nb-shadow-x) + 2px) calc(var(--nb-shadow-y) + 2px) 0 0 var(--nb-shadow-color);
  --nb-press:var(--nb-shadow-x) var(--nb-shadow-y);                       /* translate for a pressed control */
  --nb-press-sm:calc(var(--nb-shadow-x)*.5) calc(var(--nb-shadow-y)*.5);  /* …for one with the small shadow */
}
[data-nb]{background:var(--nb-paper);color:var(--nb-ink);font-family:var(--nb-font)}
/* Components */
:where([class*="nb-"]),:where([class*="nb-"])::before,:where([class*="nb-"])::after{box-sizing:border-box}
.nb-sr{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.nb-ico{width:20px;height:20px;flex:none}
.nb-display{font-family:var(--nb-font-display);font-weight:900;letter-spacing:-.01em;line-height:1.05}
.nb-link{color:inherit;font-weight:700;text-decoration:underline;text-decoration-thickness:2px;text-underline-offset:3px}
.nb-link:hover{text-decoration-thickness:4px}
.nb-link:focus-visible{outline:3px dashed var(--nb-focus);outline-offset:3px;border-radius:2px}
/* Buttons: a face, a thick border and a hard shadow. Hover lifts it, pressing moves it into its shadow */
.nb-btn{--nb-fill:var(--nb-surface);--nb-text:var(--nb-ink);
  display:inline-flex;align-items:center;justify-content:center;gap:.5rem;min-height:46px;padding:.6rem 1.2rem;
  border:var(--nb-border);border-radius:var(--nb-radius-sm);background:var(--nb-fill);color:var(--nb-text);
  font:700 1rem/1.2 var(--nb-font);text-decoration:none;cursor:pointer;box-shadow:var(--nb-shadow);
  transition:translate .12s,box-shadow .12s}
.nb-btn:hover{translate:-2px -2px;box-shadow:var(--nb-shadow-hover)}
.nb-btn:active{translate:var(--nb-press);box-shadow:none}
.nb-btn:focus-visible{outline:3px dashed var(--nb-focus);outline-offset:5px}
.nb-btn--lemon{--nb-fill:var(--nb-lemon);--nb-text:var(--nb-on-fill)}
.nb-btn--pink{--nb-fill:var(--nb-pink);--nb-text:var(--nb-on-fill)}
.nb-btn--cyan{--nb-fill:var(--nb-cyan);--nb-text:var(--nb-on-fill)}
.nb-btn--lime{--nb-fill:var(--nb-lime);--nb-text:var(--nb-on-fill)}
.nb-btn--red{--nb-fill:var(--nb-red);--nb-text:var(--nb-on-fill)}
.nb-btn--blue{--nb-fill:var(--nb-blue);--nb-text:var(--nb-on-blue)}
.nb-btn--ink{--nb-fill:var(--nb-ink);--nb-text:var(--nb-paper)}
.nb-btn--sm{min-height:38px;padding:.4rem .85rem;font-size:.875rem}
.nb-btn--lg{min-height:56px;padding:.8rem 1.6rem;font-size:1.15rem}
.nb-btn--block{width:100%}
.nb-btn--icon{width:48px;height:48px;min-height:0;padding:0}
.nb-btn--icon-sm{width:38px;height:38px;box-shadow:var(--nb-shadow-sm)}
.nb-btn--icon-sm:hover{box-shadow:var(--nb-shadow)}
.nb-btn--icon-sm:active{translate:var(--nb-press-sm)}
.nb-btn--round{border-radius:50%}
.nb-btn:disabled{--nb-fill:var(--nb-paper);--nb-text:var(--nb-muted);border-style:dashed;box-shadow:none;translate:none;cursor:not-allowed}
/* Card: a white panel, the thick border and the large hard shadow. Fill variants keep dark text */
.nb-card{position:relative;padding:1.4rem;border:var(--nb-border);border-radius:var(--nb-radius);background:var(--nb-surface);color:var(--nb-ink);box-shadow:var(--nb-shadow-lg);font-family:var(--nb-font)}
.nb-card h2,.nb-card h3,.nb-card p{margin:0}
.nb-card--lemon,.nb-card--pink,.nb-card--cyan,.nb-card--lime,.nb-card--orange,.nb-card--violet{--nb-muted:var(--nb-on-fill-muted);color:var(--nb-on-fill)}
.nb-card--lemon{background:var(--nb-lemon)}.nb-card--pink{background:var(--nb-pink)}.nb-card--cyan{background:var(--nb-cyan)}
.nb-card--lime{background:var(--nb-lime)}.nb-card--orange{background:var(--nb-orange)}.nb-card--violet{background:var(--nb-violet)}
/* Stickers: tilted labels that sit on or over a card */
.nb-sticker{display:inline-flex;align-items:center;gap:.35rem;width:max-content;padding:.3rem .7rem;border:var(--nb-border);border-radius:999px;
  background:var(--nb-lemon);color:var(--nb-on-fill);font:800 .75rem/1.1 var(--nb-font);letter-spacing:.06em;text-transform:uppercase;box-shadow:var(--nb-shadow-sm);rotate:-4deg}
.nb-sticker .nb-ico{width:14px;height:14px}
.nb-sticker--pink{background:var(--nb-pink)}.nb-sticker--cyan{background:var(--nb-cyan)}.nb-sticker--lime{background:var(--nb-lime)}
.nb-sticker--orange{background:var(--nb-orange)}.nb-sticker--violet{background:var(--nb-violet)}
.nb-sticker--right{rotate:5deg}
.nb-sticker--corner{position:absolute;top:-16px;right:14px;z-index:2}
.nb-sticker--square{border-radius:4px}
/* Starburst sticker: two clipped layers, ink behind and colour on top */
.nb-burst{position:relative;display:grid;place-items:center;width:104px;aspect-ratio:1;padding:18px;color:var(--nb-on-fill);text-align:center;
  font:900 .78rem/1.05 var(--nb-font);letter-spacing:.02em;text-transform:uppercase;rotate:12deg}
.nb-burst::before,.nb-burst::after{content:"";position:absolute;clip-path:polygon(50% 0%,59.1% 16.1%,75% 6.7%,74.8% 25.2%,93.3% 25%,83.9% 40.9%,100% 50%,83.9% 59.1%,93.3% 75%,74.8% 74.8%,75% 93.3%,59.1% 83.9%,50% 100%,40.9% 83.9%,25% 93.3%,25.2% 74.8%,6.7% 75%,16.1% 59.1%,0% 50%,16.1% 40.9%,6.7% 25%,25.2% 25.2%,25% 6.7%,40.9% 16.1%)}
.nb-burst::before{inset:0;background:var(--nb-line)}
.nb-burst::after{inset:5px;background:var(--nb-burst,var(--nb-lemon))}
.nb-burst--pink{--nb-burst:var(--nb-pink)}.nb-burst--cyan{--nb-burst:var(--nb-cyan)}.nb-burst--lime{--nb-burst:var(--nb-lime)}
.nb-burst>span{position:relative;z-index:1}
/* Layout helpers */
.nb-cluster{display:flex;flex-wrap:wrap;align-items:center;gap:18px}
.nb-tiles{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:20px}
.nb-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,260px),1fr));gap:28px;align-items:start}
.nb-stack{display:grid;gap:1.25rem}
/* Content card: cover art, a sticker, a title and a named link */
.nb-cover{position:relative;display:block;height:160px;margin:-1.4rem -1.4rem 1.2rem;border-bottom:var(--nb-border);border-radius:calc(var(--nb-radius) - var(--nb-bw)) calc(var(--nb-radius) - var(--nb-bw)) 0 0;overflow:hidden;background:var(--nb-cyan)}
.nb-cover svg{display:block;width:100%;height:100%}
.nb-meta{display:flex;flex-wrap:wrap;gap:.35rem 1rem;margin:.9rem 0 1.1rem!important;font-size:.85rem;font-weight:600;color:var(--nb-muted)}
.nb-card__title{font-size:1.35rem;line-height:1.2}
.nb-card__text{margin-top:.55rem!important;color:var(--nb-muted)}
/* Stat cards: a label, a big figure, and the change written in words beside its arrow */
.nb-stat{display:grid;gap:.35rem}
.nb-stat__top{display:flex;align-items:center;justify-content:space-between;gap:.75rem}
.nb-stat__label{font-size:.8rem;font-weight:800;letter-spacing:.08em;text-transform:uppercase}
.nb-stat__icon{display:grid;place-items:center;width:40px;height:40px;border:var(--nb-bw) solid currentColor;border-radius:50%}
.nb-stat__value{font-size:2.3rem}
.nb-stat__delta{display:flex;align-items:center;gap:.35rem;font-size:.88rem;font-weight:700;color:var(--nb-muted)}
.nb-stat__delta .nb-ico{width:16px;height:16px}
/* Profile card */
.nb-profile{text-align:center}
.nb-avatar{display:grid;place-items:center;width:88px;height:88px;margin:0 auto .9rem;border:var(--nb-border);border-radius:50%;background:var(--nb-pink);color:var(--nb-on-fill);
  font:900 1.8rem/1 var(--nb-font-display);box-shadow:var(--nb-shadow)}
.nb-profile__handle{margin-top:.15rem!important;font-weight:600;color:var(--nb-muted)}
.nb-profile__bio{margin:.8rem 0 1rem!important}
.nb-dl{display:grid;grid-template-columns:repeat(3,1fr);margin:0 0 1.2rem;border:var(--nb-border);border-radius:var(--nb-radius-sm);overflow:hidden}
.nb-dl div{padding:.6rem .3rem;background:var(--nb-paper)}
.nb-dl div+div{border-left:var(--nb-border)}
.nb-dl dt{font-size:.72rem;font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:var(--nb-muted)}
.nb-dl dd{margin:0;font:900 1.2rem/1.2 var(--nb-font-display)}
.nb-actions{display:flex;flex-wrap:wrap;justify-content:center;gap:14px}
/* Pricing cards: the featured plan is lemon with a sticker; each line says Included or Not included */
.nb-price__name{font-size:.85rem;font-weight:800;letter-spacing:.1em;text-transform:uppercase}
.nb-price__amount{margin:.4rem 0 .2rem!important;font-size:2.8rem}
.nb-price__amount small{font:700 1rem/1 var(--nb-font);letter-spacing:0}
.nb-price__note{color:var(--nb-muted)}
.nb-feats{display:grid;gap:.6rem;margin:1.2rem 0 1.4rem;padding:1rem 0 0;border-top:var(--nb-border);list-style:none}
.nb-feats li{display:flex;align-items:flex-start;gap:.6rem;font-weight:600}
.nb-feats .nb-ico{width:22px;height:22px;padding:2px;border:2px solid var(--nb-line);border-radius:50%;background:var(--nb-lime);color:var(--nb-on-fill)}
.nb-feats .is-off{color:var(--nb-muted);text-decoration:line-through}
.nb-feats .is-off .nb-ico{background:var(--nb-paper);color:var(--nb-ink)}
@media (prefers-reduced-motion:reduce){[class*="nb-"],[class*="nb-"]::before,[class*="nb-"]::after{transition:none!important;animation:none!important}}

Bootstrap 5 code

Requires: Bootstrap 5.3.8 CSS

HTML
<svg width="0" height="0" style="position:absolute" aria-hidden="true" focusable="false">
  <symbol id="nb-i-users" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><circle cx="9" cy="8.5" r="3.5"/><path d="M2.5 20a6.5 6.5 0 0 1 13 0M15.5 5.2a3.5 3.5 0 0 1 0 6.6M17.5 14.2a6.5 6.5 0 0 1 4 5.8"/></symbol>
  <symbol id="nb-i-arrow-up" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M12 19.5v-14M6.5 11 12 5.5l5.5 5.5"/></symbol>
  <symbol id="nb-i-dollar" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M12 2.5v19M16.5 6.5H10a3 3 0 0 0 0 6h4a3 3 0 0 1 0 6H7"/></symbol>
  <symbol id="nb-i-mail" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="5.5" width="18" height="13" rx="1.5"/><path d="m3.5 6.5 8.5 7 8.5-7"/></symbol>
  <symbol id="nb-i-arrow-down" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M12 4.5v14M6.5 13l5.5 5.5 5.5-5.5"/></symbol>
  <symbol id="nb-i-play" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path fill="currentColor" d="M7.5 4.5v15l12-7.5z"/></symbol>
  <symbol id="nb-i-star" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="m12 3.5 2.6 5.6 6.1.7-4.5 4.2 1.2 6L12 17l-5.4 3 1.2-6-4.5-4.2 6.1-.7z"/></symbol>
  <symbol id="nb-i-plus" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M12 4.5v15M4.5 12h15"/></symbol>
  <symbol id="nb-i-send" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M20.5 3.5 3.5 10.5l7 3 3 7z"/><path d="m10.5 13.5 4-4"/></symbol>
  <symbol id="nb-i-check" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="m4.5 12.5 5 5L19.5 7"/></symbol>
  <symbol id="nb-i-x" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M6 6l12 12M18 6 6 18"/></symbol>
  <symbol id="nb-i-sparkle" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M12 3c.8 4.6 2.4 6.2 7 7-4.6.8-6.2 2.4-7 7-.8-4.6-2.4-6.2-7-7 4.6-.8 6.2-2.4 7-7zM19 16.5c.3 1.6.9 2.2 2.5 2.5-1.6.3-2.2.9-2.5 2.5-.3-1.6-.9-2.2-2.5-2.5 1.6-.3 2.2-.9 2.5-2.5z"/></symbol>
  <symbol id="nb-i-flame" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M12 21a6.5 6.5 0 0 0 6.5-6.5c0-4.5-4-6.5-4.5-11-3 2-4.5 4.5-4.5 7.5-1.2-.6-2-1.8-2.2-3C5.9 10 5.5 12 5.5 14.5A6.5 6.5 0 0 0 12 21z"/></symbol>
</svg>
<section><span class="lbl">Stat cards · the change is written in words</span><div class="nb-grid">
<article class="card nb-card nb-card-lemon"><div class="card-body nb-stat"><div class="nb-stat__top"><h3 class="nb-stat__label">Subscribers</h3><span class="nb-stat__icon"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-users"/></svg></span></div><p class="nb-stat__value nb-display">12,480</p><p class="nb-stat__delta"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-arrow-up"/></svg>Up 8.2% this month</p></div></article>
<article class="card nb-card nb-card-pink"><div class="card-body nb-stat"><div class="nb-stat__top"><h3 class="nb-stat__label">Revenue</h3><span class="nb-stat__icon"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-dollar"/></svg></span></div><p class="nb-stat__value nb-display">$4,920</p><p class="nb-stat__delta"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-arrow-up"/></svg>Up $610 on September</p></div></article>
<article class="card nb-card nb-card-cyan"><div class="card-body nb-stat"><div class="nb-stat__top"><h3 class="nb-stat__label">Open rate</h3><span class="nb-stat__icon"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-mail"/></svg></span></div><p class="nb-stat__value nb-display">61%</p><p class="nb-stat__delta"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-arrow-down"/></svg>Down 3 points on last issue</p></div></article>
</div></section>
<section><span class="lbl">Content card and profile card</span><div class="nb-grid">
<article class="card nb-card"><span class="badge nb-sticker nb-sticker-corner nb-sticker-right">Episode 42</span><div class="card-body"><span class="nb-cover"><svg viewBox="0 0 320 160" preserveAspectRatio="xMidYMid slice" aria-hidden="true" focusable="false"><rect width="320" height="160" style="fill:var(--nb-cyan)"/><circle cx="252" cy="42" r="54" stroke-width="3" style="fill:var(--nb-lemon);stroke:var(--nb-line)"/><rect x="34" y="62" width="112" height="80" rx="6" stroke-width="3" transform="rotate(-6 90 102)" style="fill:#fff;stroke:var(--nb-line)"/><g transform="rotate(5 116 88)"><rect x="60" y="48" width="112" height="80" rx="6" stroke-width="3" style="fill:var(--nb-pink);stroke:var(--nb-line)"/><path d="M78 72h70M78 88h52M78 104h62" stroke-width="5" stroke-linecap="round" style="stroke:var(--nb-line)"/></g><path d="M196 132c14-20 28 20 42 0s28 20 42 0" fill="none" stroke-width="5" stroke-linecap="round" style="stroke:var(--nb-line)"/></svg></span>
<h3 class="nb-card__title nb-display">How we print 500 zines in a weekend</h3>
<p class="nb-card__text">Our risograph setup, the paper we buy, and the three mistakes we stopped making.</p>
<p class="nb-meta"><span>18 min listen</span><span>2 Oct 2026</span></p>
<a class="btn btn-nb btn-nb-lemon btn-sm" href="#"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-play"/></svg>Listen now<span class="visually-hidden">: How we print 500 zines in a weekend</span></a></div></article>
<article class="card nb-card"><span class="badge nb-sticker nb-sticker-lime nb-sticker-corner"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-star"/></svg>Top creator</span><div class="card-body nb-profile">
<span class="nb-avatar" aria-hidden="true">MO</span>
<h3 class="nb-card__title nb-display">Mira Okafor</h3><p class="nb-profile__handle">@paperplane · Lisbon</p>
<p class="nb-profile__bio">Zine maker and radio host. Risograph prints every second Friday.</p>
<dl class="nb-dl"><div><dt>Posts</dt><dd>214</dd></div><div><dt>Fans</dt><dd>12.4k</dd></div><div><dt>Prints</dt><dd>38</dd></div></dl>
<div class="nb-actions"><button class="btn btn-nb btn-nb-lemon" type="button"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-plus"/></svg>Follow</button><button class="btn btn-nb btn-nb-icon" type="button" aria-label="Message Mira"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-send"/></svg></button></div></div></article>
</div></section>
<section><span class="lbl">Pricing cards · each line says Included or Not included</span><div class="nb-grid">
<article class="card nb-card"><div class="card-body"><h3 class="nb-price__name">Free</h3><p class="nb-price__amount nb-display">$0 <small>forever</small></p><p class="nb-price__note">For fans who want to follow along.</p>
<ul class="nb-feats list-unstyled"><li><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-check"/></svg><span class="visually-hidden">Included: </span>Public posts</li><li><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-check"/></svg><span class="visually-hidden">Included: </span>Monthly newsletter</li><li class="is-off"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-x"/></svg><span class="visually-hidden">Not included: </span>Members-only episodes</li><li class="is-off"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-x"/></svg><span class="visually-hidden">Not included: </span>Print discounts</li></ul>
<a class="btn btn-nb w-100" href="#">Join free</a></div></article>
<article class="card nb-card nb-card-lemon"><span class="badge nb-sticker nb-sticker-pink nb-sticker-corner nb-sticker-right">Most popular</span><div class="card-body"><h3 class="nb-price__name">Supporter</h3><p class="nb-price__amount nb-display">$8 <small>a month</small></p><p class="nb-price__note">Everything, plus the back catalogue.</p>
<ul class="nb-feats list-unstyled"><li><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-check"/></svg><span class="visually-hidden">Included: </span>Public posts</li><li><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-check"/></svg><span class="visually-hidden">Included: </span>Monthly newsletter</li><li><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-check"/></svg><span class="visually-hidden">Included: </span>Members-only episodes</li><li class="is-off"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-x"/></svg><span class="visually-hidden">Not included: </span>Print discounts</li></ul>
<a class="btn btn-nb btn-nb-ink w-100" href="#">Become a supporter</a></div></article>
<article class="card nb-card"><div class="card-body"><h3 class="nb-price__name">Studio</h3><p class="nb-price__amount nb-display">$24 <small>a month</small></p><p class="nb-price__note">For collectors who want every print.</p>
<ul class="nb-feats list-unstyled"><li><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-check"/></svg><span class="visually-hidden">Included: </span>Public posts</li><li><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-check"/></svg><span class="visually-hidden">Included: </span>Monthly newsletter</li><li><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-check"/></svg><span class="visually-hidden">Included: </span>Members-only episodes</li><li><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-check"/></svg><span class="visually-hidden">Included: </span>20% off every print</li></ul>
<a class="btn btn-nb w-100" href="#">Go Studio</a></div></article>
</div></section>
<section><span class="lbl">Stickers</span><div class="nb-cluster">
<span class="badge nb-sticker"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-sparkle"/></svg>New drop</span>
<span class="badge nb-sticker nb-sticker-pink nb-sticker-right">Members only</span>
<span class="badge nb-sticker nb-sticker-cyan"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-flame"/></svg>Live now</span>
<span class="badge nb-sticker nb-sticker-lime nb-sticker-right nb-sticker-square">Hand printed</span>
<span class="badge nb-sticker nb-sticker-violet">Limited run</span>
<span class="nb-burst"><span>50% off</span></span>
<span class="nb-burst nb-burst-pink"><span>Free shipping</span></span>
</div></section>
CSS
/* ── Neobrutalism UI kit tokens (uiCookies) — identical in every set ─────────────
   Thick ink borders, hard offset shadows and flat saturated fills on cream paper.
   Change a token and the whole kit follows; the border and shadow recipes below are built from them. */
:root{
  --nb-paper:#fff6e0;        /* page background, cream */
  --nb-surface:#ffffff;      /* card, field and button faces */
  --nb-ink:#111111;          /* text, 17.5:1 on paper */
  --nb-muted:#454036;        /* secondary text, 9.6:1 on paper */
  --nb-line:#111111;         /* border colour */
  --nb-bw:3px;               /* border width */
  --nb-shadow-x:4px;         /* hard shadow offset; pressed controls move this far into it */
  --nb-shadow-y:4px;
  --nb-shadow-color:#111111;
  --nb-radius:12px;          /* cards and panels */
  --nb-radius-sm:8px;        /* buttons and fields */
  --nb-focus:#1d4ed8;        /* dashed focus outline, 6.2:1 on paper, never the shadow */
  --nb-on-fill:#111111;      /* text on every palette fill below, 6.8:1 or more */
  --nb-on-fill-muted:#2b2822;/* secondary text on fills, 5.2:1 or more */
  --nb-lemon:#ffe14d;--nb-pink:#ff90d0;--nb-cyan:#62e2e8;--nb-lime:#b6f36a;
  --nb-orange:#ffa94d;--nb-violet:#b9a3ff;--nb-red:#ff6b6b;
  --nb-blue:#2448e0;--nb-on-blue:#ffffff; /* the only fill that takes white text, 6.8:1 */
  --nb-danger:#b42318;       /* destructive text, 6.1:1 on paper */
  --nb-font:"Space Grotesk","Archivo","Helvetica Neue",Arial,system-ui,sans-serif;
  --nb-font-display:"Archivo Black","Arial Black","Helvetica Neue",Arial,sans-serif;
}
/* Dark brutalism: data-nb="dark" on any wrapper, or a checked .nb-theme-input inside a [data-nb] element.
   :is() is a forgiving list, so browsers without :has() still apply data-nb="dark". Fills keep dark text. */
[data-nb]:is([data-nb="dark"],:has(.nb-theme-input:checked)){
  --nb-paper:#17150f;--nb-surface:#25221b;--nb-ink:#fbf3dc;--nb-muted:#d6ccb2;--nb-line:#fbf3dc;
  --nb-shadow-color:#fbf3dc;--nb-focus:#8db4ff;--nb-danger:#ff9b8f;color-scheme:dark}
/* More contrast requested: secondary text turns full ink */
@media (prefers-contrast:more){:root,[data-nb]:is([data-nb],:has(.nb-theme-input:checked)){--nb-muted:var(--nb-ink);--nb-on-fill-muted:var(--nb-on-fill)}}
:root,[data-nb]{
  --nb-border:var(--nb-bw) solid var(--nb-line);
  --nb-shadow:var(--nb-shadow-x) var(--nb-shadow-y) 0 0 var(--nb-shadow-color);
  --nb-shadow-sm:calc(var(--nb-shadow-x)*.5) calc(var(--nb-shadow-y)*.5) 0 0 var(--nb-shadow-color);
  --nb-shadow-lg:calc(var(--nb-shadow-x)*1.75) calc(var(--nb-shadow-y)*1.75) 0 0 var(--nb-shadow-color);
  --nb-shadow-hover:calc(var(--nb-shadow-x) + 2px) calc(var(--nb-shadow-y) + 2px) 0 0 var(--nb-shadow-color);
  --nb-press:var(--nb-shadow-x) var(--nb-shadow-y);                       /* translate for a pressed control */
  --nb-press-sm:calc(var(--nb-shadow-x)*.5) calc(var(--nb-shadow-y)*.5);  /* …for one with the small shadow */
}
[data-nb]{background:var(--nb-paper);color:var(--nb-ink);font-family:var(--nb-font)}
/* Bootstrap's own variables mapped onto the kit tokens */
:root,[data-nb]{--bs-body-bg:var(--nb-paper);--bs-body-color:var(--nb-ink);--bs-body-font-family:var(--nb-font);--bs-emphasis-color:var(--nb-ink);
  --bs-heading-color:var(--nb-ink);--bs-secondary-color:var(--nb-muted);--bs-tertiary-color:var(--nb-muted);
  --bs-border-color:var(--nb-line);--bs-border-width:var(--nb-bw);--bs-border-radius:var(--nb-radius-sm);--bs-border-radius-lg:var(--nb-radius);
  --bs-focus-ring-color:var(--nb-focus)}
/* Components */
.nb-ico{width:20px;height:20px;flex:none}
.nb-display{font-family:var(--nb-font-display);font-weight:900;letter-spacing:-.01em;line-height:1.05}
.nb-link{color:inherit;font-weight:700;text-decoration:underline;text-decoration-thickness:2px;text-underline-offset:3px}
.nb-link:hover{color:inherit;text-decoration-thickness:4px}
.nb-link:focus-visible{outline:3px dashed var(--nb-focus);outline-offset:3px;border-radius:2px}
/* Buttons: Bootstrap .btn with a .btn-nb variant set through --bs-btn-* variables.
   Hover lifts it, pressing (or a checked .btn-check) moves it into its shadow */
.btn-nb{--nb-fill:var(--nb-surface);--nb-text:var(--nb-ink);--nb-btn-shadow:var(--nb-shadow);
  --bs-btn-padding-x:1.2rem;--bs-btn-padding-y:.6rem;--bs-btn-font-family:var(--nb-font);--bs-btn-font-size:1rem;--bs-btn-font-weight:700;--bs-btn-line-height:1.2;
  --bs-btn-border-width:var(--nb-bw);--bs-btn-border-radius:var(--nb-radius-sm);
  --bs-btn-bg:var(--nb-fill);--bs-btn-color:var(--nb-text);--bs-btn-border-color:var(--nb-line);
  --bs-btn-hover-bg:var(--nb-fill);--bs-btn-hover-color:var(--nb-text);--bs-btn-hover-border-color:var(--nb-line);
  --bs-btn-active-bg:var(--nb-fill);--bs-btn-active-color:var(--nb-text);--bs-btn-active-border-color:var(--nb-line);
  --bs-btn-disabled-bg:var(--nb-paper);--bs-btn-disabled-color:var(--nb-muted);--bs-btn-disabled-border-color:var(--nb-line);--bs-btn-disabled-opacity:1;
  --bs-btn-focus-box-shadow:var(--nb-btn-shadow);
  display:inline-flex;align-items:center;justify-content:center;gap:.5rem;min-height:46px;box-shadow:var(--nb-btn-shadow);transition:translate .12s,box-shadow .12s}
.btn-nb:hover{translate:-2px -2px;--nb-btn-shadow:var(--nb-shadow-hover)}
.btn-nb:active{translate:var(--nb-press);--nb-btn-shadow:none}
.btn-nb:focus-visible,.btn-check:focus-visible+.btn-nb{outline:3px dashed var(--nb-focus);outline-offset:5px;box-shadow:var(--nb-btn-shadow)}
.btn-nb-lemon{--nb-fill:var(--nb-lemon);--nb-text:var(--nb-on-fill)}
.btn-nb-pink{--nb-fill:var(--nb-pink);--nb-text:var(--nb-on-fill)}
.btn-nb-cyan{--nb-fill:var(--nb-cyan);--nb-text:var(--nb-on-fill)}
.btn-nb-lime{--nb-fill:var(--nb-lime);--nb-text:var(--nb-on-fill)}
.btn-nb-red{--nb-fill:var(--nb-red);--nb-text:var(--nb-on-fill)}
.btn-nb-blue{--nb-fill:var(--nb-blue);--nb-text:var(--nb-on-blue)}
.btn-nb-ink{--nb-fill:var(--nb-ink);--nb-text:var(--nb-paper)}
.btn-nb.btn-sm{--bs-btn-padding-x:.85rem;--bs-btn-padding-y:.4rem;--bs-btn-font-size:.875rem;--bs-btn-border-radius:var(--nb-radius-sm);min-height:38px}
.btn-nb.btn-lg{--bs-btn-padding-x:1.6rem;--bs-btn-padding-y:.8rem;--bs-btn-font-size:1.15rem;--bs-btn-border-radius:var(--nb-radius-sm);min-height:56px}
.btn-nb-icon{--bs-btn-padding-x:0;--bs-btn-padding-y:0;width:48px;height:48px;min-height:0}
.btn-nb-icon-sm{width:38px;height:38px;--nb-btn-shadow:var(--nb-shadow-sm)}
.btn-nb-icon-sm:hover{--nb-btn-shadow:var(--nb-shadow)}
.btn-nb-icon-sm:active{translate:var(--nb-press-sm)}
.btn-nb.rounded-circle{border-radius:50%}
.btn-nb:disabled{border-style:dashed;--nb-btn-shadow:none;translate:none}
/* Card: Bootstrap .card restyled through --bs-card-*; fill variants keep dark text */
.card.nb-card{--bs-card-bg:var(--nb-surface);--bs-card-color:var(--nb-ink);--bs-card-border-color:var(--nb-line);--bs-card-border-width:var(--nb-bw);
  --bs-card-border-radius:var(--nb-radius);--bs-card-inner-border-radius:calc(var(--nb-radius) - var(--nb-bw));--bs-card-spacer-x:1.4rem;--bs-card-spacer-y:1.4rem;
  --bs-card-cap-bg:transparent;box-shadow:var(--nb-shadow-lg);font-family:var(--nb-font)}
.nb-card h2,.nb-card h3,.nb-card p{margin:0}
.card.nb-card-lemon,.card.nb-card-pink,.card.nb-card-cyan,.card.nb-card-lime,.card.nb-card-orange,.card.nb-card-violet{--nb-muted:var(--nb-on-fill-muted);--bs-card-color:var(--nb-on-fill);--bs-heading-color:var(--nb-on-fill)}
.card.nb-card-lemon{--bs-card-bg:var(--nb-lemon)}.card.nb-card-pink{--bs-card-bg:var(--nb-pink)}.card.nb-card-cyan{--bs-card-bg:var(--nb-cyan)}
.card.nb-card-lime{--bs-card-bg:var(--nb-lime)}.card.nb-card-orange{--bs-card-bg:var(--nb-orange)}.card.nb-card-violet{--bs-card-bg:var(--nb-violet)}
/* Stickers: tilted .badge labels that sit on or over a card */
.badge.nb-sticker{--bs-badge-padding-x:.7rem;--bs-badge-padding-y:.3rem;--bs-badge-font-size:.75rem;--bs-badge-font-weight:800;--bs-badge-color:var(--nb-on-fill);--bs-badge-border-radius:999px;
  display:inline-flex;align-items:center;gap:.35rem;width:max-content;border:var(--nb-border);background:var(--nb-lemon);font-family:var(--nb-font);line-height:1.1;letter-spacing:.06em;text-transform:uppercase;box-shadow:var(--nb-shadow-sm);rotate:-4deg}
.nb-sticker .nb-ico{width:14px;height:14px}
.badge.nb-sticker-pink{background:var(--nb-pink)}.badge.nb-sticker-cyan{background:var(--nb-cyan)}.badge.nb-sticker-lime{background:var(--nb-lime)}
.badge.nb-sticker-orange{background:var(--nb-orange)}.badge.nb-sticker-violet{background:var(--nb-violet)}
.nb-sticker-right{rotate:5deg}
.nb-sticker-corner{position:absolute;top:-16px;right:14px;z-index:2}
.badge.nb-sticker-square{--bs-badge-border-radius:4px}
/* Starburst sticker: two clipped layers, ink behind and colour on top */
.nb-burst{position:relative;display:grid;place-items:center;width:104px;aspect-ratio:1;padding:18px;color:var(--nb-on-fill);text-align:center;
  font:900 .78rem/1.05 var(--nb-font);letter-spacing:.02em;text-transform:uppercase;rotate:12deg}
.nb-burst::before,.nb-burst::after{content:"";position:absolute;clip-path:polygon(50% 0%,59.1% 16.1%,75% 6.7%,74.8% 25.2%,93.3% 25%,83.9% 40.9%,100% 50%,83.9% 59.1%,93.3% 75%,74.8% 74.8%,75% 93.3%,59.1% 83.9%,50% 100%,40.9% 83.9%,25% 93.3%,25.2% 74.8%,6.7% 75%,16.1% 59.1%,0% 50%,16.1% 40.9%,6.7% 25%,25.2% 25.2%,25% 6.7%,40.9% 16.1%)}
.nb-burst::before{inset:0;background:var(--nb-line)}
.nb-burst::after{inset:5px;background:var(--nb-burst,var(--nb-lemon))}
.nb-burst-pink{--nb-burst:var(--nb-pink)}.nb-burst-cyan{--nb-burst:var(--nb-cyan)}.nb-burst-lime{--nb-burst:var(--nb-lime)}
.nb-burst>span{position:relative;z-index:1}
.nb-cluster{display:flex;flex-wrap:wrap;align-items:center;gap:18px}
.nb-tiles{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:20px}
.nb-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,260px),1fr));gap:28px;align-items:start}
.nb-stack{display:grid;gap:1.25rem}
/* Content card: cover art, a sticker, a title and a named link */
.nb-cover{position:relative;display:block;height:160px;margin:-1.4rem -1.4rem 1.2rem;border-bottom:var(--nb-border);border-radius:calc(var(--nb-radius) - var(--nb-bw)) calc(var(--nb-radius) - var(--nb-bw)) 0 0;overflow:hidden;background:var(--nb-cyan)}
.nb-cover svg{display:block;width:100%;height:100%}
.nb-meta{display:flex;flex-wrap:wrap;gap:.35rem 1rem;margin:.9rem 0 1.1rem!important;font-size:.85rem;font-weight:600;color:var(--nb-muted)}
.nb-card__title{font-size:1.35rem;line-height:1.2}
.nb-card__text{margin-top:.55rem!important;color:var(--nb-muted)}
/* Stat cards: a label, a big figure, and the change written in words beside its arrow */
.nb-stat{display:grid;gap:.35rem}
.nb-stat__top{display:flex;align-items:center;justify-content:space-between;gap:.75rem}
.nb-stat__label{font-size:.8rem;font-weight:800;letter-spacing:.08em;text-transform:uppercase}
.nb-stat__icon{display:grid;place-items:center;width:40px;height:40px;border:var(--nb-bw) solid currentColor;border-radius:50%}
.nb-stat__value{font-size:2.3rem}
.nb-stat__delta{display:flex;align-items:center;gap:.35rem;font-size:.88rem;font-weight:700;color:var(--nb-muted)}
.nb-stat__delta .nb-ico{width:16px;height:16px}
/* Profile card */
.nb-profile{text-align:center}
.nb-avatar{display:grid;place-items:center;width:88px;height:88px;margin:0 auto .9rem;border:var(--nb-border);border-radius:50%;background:var(--nb-pink);color:var(--nb-on-fill);
  font:900 1.8rem/1 var(--nb-font-display);box-shadow:var(--nb-shadow)}
.nb-profile__handle{margin-top:.15rem!important;font-weight:600;color:var(--nb-muted)}
.nb-profile__bio{margin:.8rem 0 1rem!important}
.nb-dl{display:grid;grid-template-columns:repeat(3,1fr);margin:0 0 1.2rem;border:var(--nb-border);border-radius:var(--nb-radius-sm);overflow:hidden}
.nb-dl div{padding:.6rem .3rem;background:var(--nb-paper)}
.nb-dl div+div{border-left:var(--nb-border)}
.nb-dl dt{font-size:.72rem;font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:var(--nb-muted)}
.nb-dl dd{margin:0;font:900 1.2rem/1.2 var(--nb-font-display)}
.nb-actions{display:flex;flex-wrap:wrap;justify-content:center;gap:14px}
/* Pricing cards: the featured plan is lemon with a sticker; each line says Included or Not included */
.nb-price__name{font-size:.85rem;font-weight:800;letter-spacing:.1em;text-transform:uppercase}
.nb-price__amount{margin:.4rem 0 .2rem!important;font-size:2.8rem}
.nb-price__amount small{font:700 1rem/1 var(--nb-font);letter-spacing:0}
.nb-price__note{color:var(--nb-muted)}
.nb-feats{display:grid;gap:.6rem;margin:1.2rem 0 1.4rem;padding:1rem 0 0;border-top:var(--nb-border);list-style:none}
.nb-feats li{display:flex;align-items:flex-start;gap:.6rem;font-weight:600}
.nb-feats .nb-ico{width:22px;height:22px;padding:2px;border:2px solid var(--nb-line);border-radius:50%;background:var(--nb-lime);color:var(--nb-on-fill)}
.nb-feats .is-off{color:var(--nb-muted);text-decoration:line-through}
.nb-feats .is-off .nb-ico{background:var(--nb-paper);color:var(--nb-ink)}
@media (prefers-reduced-motion:reduce){[class*="nb-"],[class*="nb-"]::before,[class*="nb-"]::after{transition:none!important;animation:none!important}}

Tailwind 4 code

Requires: Tailwind CSS 4

HTML
<svg width="0" height="0" style="position:absolute" aria-hidden="true" focusable="false">
  <symbol id="nb-i-users" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><circle cx="9" cy="8.5" r="3.5"/><path d="M2.5 20a6.5 6.5 0 0 1 13 0M15.5 5.2a3.5 3.5 0 0 1 0 6.6M17.5 14.2a6.5 6.5 0 0 1 4 5.8"/></symbol>
  <symbol id="nb-i-arrow-up" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M12 19.5v-14M6.5 11 12 5.5l5.5 5.5"/></symbol>
  <symbol id="nb-i-dollar" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M12 2.5v19M16.5 6.5H10a3 3 0 0 0 0 6h4a3 3 0 0 1 0 6H7"/></symbol>
  <symbol id="nb-i-mail" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="5.5" width="18" height="13" rx="1.5"/><path d="m3.5 6.5 8.5 7 8.5-7"/></symbol>
  <symbol id="nb-i-arrow-down" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M12 4.5v14M6.5 13l5.5 5.5 5.5-5.5"/></symbol>
  <symbol id="nb-i-play" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path fill="currentColor" d="M7.5 4.5v15l12-7.5z"/></symbol>
  <symbol id="nb-i-star" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="m12 3.5 2.6 5.6 6.1.7-4.5 4.2 1.2 6L12 17l-5.4 3 1.2-6-4.5-4.2 6.1-.7z"/></symbol>
  <symbol id="nb-i-plus" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M12 4.5v15M4.5 12h15"/></symbol>
  <symbol id="nb-i-send" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M20.5 3.5 3.5 10.5l7 3 3 7z"/><path d="m10.5 13.5 4-4"/></symbol>
  <symbol id="nb-i-check" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="m4.5 12.5 5 5L19.5 7"/></symbol>
  <symbol id="nb-i-x" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M6 6l12 12M18 6 6 18"/></symbol>
  <symbol id="nb-i-sparkle" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M12 3c.8 4.6 2.4 6.2 7 7-4.6.8-6.2 2.4-7 7-.8-4.6-2.4-6.2-7-7 4.6-.8 6.2-2.4 7-7zM19 16.5c.3 1.6.9 2.2 2.5 2.5-1.6.3-2.2.9-2.5 2.5-.3-1.6-.9-2.2-2.5-2.5 1.6-.3 2.2-.9 2.5-2.5z"/></symbol>
  <symbol id="nb-i-flame" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M12 21a6.5 6.5 0 0 0 6.5-6.5c0-4.5-4-6.5-4.5-11-3 2-4.5 4.5-4.5 7.5-1.2-.6-2-1.8-2.2-3C5.9 10 5.5 12 5.5 14.5A6.5 6.5 0 0 0 12 21z"/></symbol>
</svg>
<section><span class="mb-[18px] block text-[.72rem] font-extrabold tracking-[.12em] text-nb-muted uppercase">Stat cards · the change is written in words</span><div class="grid grid-cols-[repeat(auto-fit,minmax(min(100%,260px),1fr))] items-start gap-7">
<article class="relative border-(length:--nb-bw) border-nb-line rounded-nb p-[1.4rem] font-nb shadow-nb-lg bg-nb-lemon [--nb-muted:var(--nb-on-fill-muted)] text-nb-on-fill grid gap-[.35rem]"><div class="flex items-center justify-between gap-3"><h3 class="m-0 text-[.8rem] font-extrabold tracking-[.08em] uppercase">Subscribers</h3><span class="grid size-10 place-items-center rounded-full border-(length:--nb-bw) border-current"><svg class="size-5 shrink-0" aria-hidden="true" focusable="false"><use href="#nb-i-users"/></svg></span></div><p class="m-0 text-[2.3rem] font-nb-display font-black tracking-[-.01em] leading-[1.05]">12,480</p><p class="m-0 flex items-center gap-[.35rem] text-[.88rem] font-bold text-nb-muted"><svg class="size-4 shrink-0" aria-hidden="true" focusable="false"><use href="#nb-i-arrow-up"/></svg>Up 8.2% this month</p></article>
<article class="relative border-(length:--nb-bw) border-nb-line rounded-nb p-[1.4rem] font-nb shadow-nb-lg bg-nb-pink [--nb-muted:var(--nb-on-fill-muted)] text-nb-on-fill grid gap-[.35rem]"><div class="flex items-center justify-between gap-3"><h3 class="m-0 text-[.8rem] font-extrabold tracking-[.08em] uppercase">Revenue</h3><span class="grid size-10 place-items-center rounded-full border-(length:--nb-bw) border-current"><svg class="size-5 shrink-0" aria-hidden="true" focusable="false"><use href="#nb-i-dollar"/></svg></span></div><p class="m-0 text-[2.3rem] font-nb-display font-black tracking-[-.01em] leading-[1.05]">$4,920</p><p class="m-0 flex items-center gap-[.35rem] text-[.88rem] font-bold text-nb-muted"><svg class="size-4 shrink-0" aria-hidden="true" focusable="false"><use href="#nb-i-arrow-up"/></svg>Up $610 on September</p></article>
<article class="relative border-(length:--nb-bw) border-nb-line rounded-nb p-[1.4rem] font-nb shadow-nb-lg bg-nb-cyan [--nb-muted:var(--nb-on-fill-muted)] text-nb-on-fill grid gap-[.35rem]"><div class="flex items-center justify-between gap-3"><h3 class="m-0 text-[.8rem] font-extrabold tracking-[.08em] uppercase">Open rate</h3><span class="grid size-10 place-items-center rounded-full border-(length:--nb-bw) border-current"><svg class="size-5 shrink-0" aria-hidden="true" focusable="false"><use href="#nb-i-mail"/></svg></span></div><p class="m-0 text-[2.3rem] font-nb-display font-black tracking-[-.01em] leading-[1.05]">61%</p><p class="m-0 flex items-center gap-[.35rem] text-[.88rem] font-bold text-nb-muted"><svg class="size-4 shrink-0" aria-hidden="true" focusable="false"><use href="#nb-i-arrow-down"/></svg>Down 3 points on last issue</p></article>
</div></section>
<section><span class="mb-[18px] block text-[.72rem] font-extrabold tracking-[.12em] text-nb-muted uppercase">Content card and profile card</span><div class="grid grid-cols-[repeat(auto-fit,minmax(min(100%,260px),1fr))] items-start gap-7">
<article class="relative border-(length:--nb-bw) border-nb-line rounded-nb p-[1.4rem] font-nb shadow-nb-lg bg-nb-surface text-nb-ink"><span class="relative -mx-[1.4rem] -mt-[1.4rem] mb-[1.2rem] block h-40 overflow-hidden rounded-t-[calc(var(--nb-radius)-var(--nb-bw))] border-b-(length:--nb-bw) border-nb-line bg-nb-cyan [&>svg]:block [&>svg]:size-full"><svg viewBox="0 0 320 160" preserveAspectRatio="xMidYMid slice" aria-hidden="true" focusable="false"><rect width="320" height="160" style="fill:var(--nb-cyan)"/><circle cx="252" cy="42" r="54" stroke-width="3" style="fill:var(--nb-lemon);stroke:var(--nb-line)"/><rect x="34" y="62" width="112" height="80" rx="6" stroke-width="3" transform="rotate(-6 90 102)" style="fill:#fff;stroke:var(--nb-line)"/><g transform="rotate(5 116 88)"><rect x="60" y="48" width="112" height="80" rx="6" stroke-width="3" style="fill:var(--nb-pink);stroke:var(--nb-line)"/><path d="M78 72h70M78 88h52M78 104h62" stroke-width="5" stroke-linecap="round" style="stroke:var(--nb-line)"/></g><path d="M196 132c14-20 28 20 42 0s28 20 42 0" fill="none" stroke-width="5" stroke-linecap="round" style="stroke:var(--nb-line)"/></svg></span><span class="rounded-full inline-flex w-max items-center gap-[.35rem] border-(length:--nb-bw) border-nb-line px-[.7rem] py-[.3rem] font-nb text-[.75rem] leading-[1.1] font-extrabold tracking-[.06em] text-nb-on-fill uppercase shadow-nb-sm absolute -top-4 right-3.5 z-2 rotate-[5deg] bg-nb-lemon">Episode 42</span>
<h3 class="m-0 text-[1.35rem] font-nb-display font-black tracking-[-.01em] leading-[1.05]">How we print 500 zines in a weekend</h3>
<p class="m-0 mt-[.55rem] text-nb-muted">Our risograph setup, the paper we buy, and the three mistakes we stopped making.</p>
<p class="mt-[.9rem] mb-[1.1rem] flex flex-wrap gap-x-4 gap-y-[.35rem] text-[.85rem] font-semibold text-nb-muted"><span>18 min listen</span><span>2 Oct 2026</span></p>
<a class="inline-flex items-center justify-center gap-2 border-(length:--nb-bw) border-nb-line font-nb font-bold leading-[1.2] no-underline cursor-pointer focus-visible:outline-3 focus-visible:outline-dashed focus-visible:outline-offset-[5px] focus-visible:outline-nb-focus disabled:cursor-not-allowed disabled:border-dashed disabled:bg-nb-paper disabled:text-nb-muted disabled:shadow-none disabled:[translate:none] shadow-nb transition-[translate,box-shadow] duration-[120ms] hover:[translate:-2px_-2px] hover:shadow-nb-hover active:[translate:var(--nb-press)] active:shadow-none motion-reduce:transition-none rounded-nb-sm min-h-[38px] px-[.85rem] py-[.4rem] text-[.875rem] bg-nb-lemon text-nb-on-fill" href="#"><svg class="size-5 shrink-0" aria-hidden="true" focusable="false"><use href="#nb-i-play"/></svg>Listen now<span class="sr-only">: How we print 500 zines in a weekend</span></a></article>
<article class="relative border-(length:--nb-bw) border-nb-line rounded-nb p-[1.4rem] font-nb shadow-nb-lg bg-nb-surface text-nb-ink text-center"><span class="rounded-full inline-flex w-max items-center gap-[.35rem] border-(length:--nb-bw) border-nb-line px-[.7rem] py-[.3rem] font-nb text-[.75rem] leading-[1.1] font-extrabold tracking-[.06em] text-nb-on-fill uppercase shadow-nb-sm absolute -top-4 right-3.5 z-2 -rotate-4 bg-nb-lime"><svg class="size-3.5 shrink-0" aria-hidden="true" focusable="false"><use href="#nb-i-star"/></svg>Top creator</span>
<span class="mx-auto mb-[.9rem] grid size-[88px] place-items-center rounded-full border-(length:--nb-bw) border-nb-line bg-nb-pink font-nb-display text-[1.8rem] leading-none font-black text-nb-on-fill shadow-nb" aria-hidden="true">MO</span>
<h3 class="m-0 text-[1.35rem] font-nb-display font-black tracking-[-.01em] leading-[1.05]">Mira Okafor</h3><p class="m-0 mt-[.15rem] font-semibold text-nb-muted">@paperplane · Lisbon</p>
<p class="mx-0 mt-[.8rem] mb-4">Zine maker and radio host. Risograph prints every second Friday.</p>
<dl class="m-0 mb-[1.2rem] grid grid-cols-3 overflow-hidden border-(length:--nb-bw) border-nb-line rounded-nb-sm"><div class="bg-nb-paper px-[.3rem] py-[.6rem]"><dt class="text-[.72rem] font-extrabold tracking-[.08em] text-nb-muted uppercase">Posts</dt><dd class="m-0 font-nb-display text-[1.2rem] leading-[1.2] font-black">214</dd></div><div class="border-l-(length:--nb-bw) border-nb-line bg-nb-paper px-[.3rem] py-[.6rem]"><dt class="text-[.72rem] font-extrabold tracking-[.08em] text-nb-muted uppercase">Fans</dt><dd class="m-0 font-nb-display text-[1.2rem] leading-[1.2] font-black">12.4k</dd></div><div class="border-l-(length:--nb-bw) border-nb-line bg-nb-paper px-[.3rem] py-[.6rem]"><dt class="text-[.72rem] font-extrabold tracking-[.08em] text-nb-muted uppercase">Prints</dt><dd class="m-0 font-nb-display text-[1.2rem] leading-[1.2] font-black">38</dd></div></dl>
<div class="flex flex-wrap justify-center gap-3.5"><button class="inline-flex items-center justify-center gap-2 border-(length:--nb-bw) border-nb-line font-nb font-bold leading-[1.2] no-underline cursor-pointer focus-visible:outline-3 focus-visible:outline-dashed focus-visible:outline-offset-[5px] focus-visible:outline-nb-focus disabled:cursor-not-allowed disabled:border-dashed disabled:bg-nb-paper disabled:text-nb-muted disabled:shadow-none disabled:[translate:none] shadow-nb transition-[translate,box-shadow] duration-[120ms] hover:[translate:-2px_-2px] hover:shadow-nb-hover active:[translate:var(--nb-press)] active:shadow-none motion-reduce:transition-none rounded-nb-sm min-h-[46px] px-[1.2rem] py-[.6rem] text-base bg-nb-lemon text-nb-on-fill" type="button"><svg class="size-5 shrink-0" aria-hidden="true" focusable="false"><use href="#nb-i-plus"/></svg>Follow</button><button class="inline-flex items-center justify-center gap-2 border-(length:--nb-bw) border-nb-line font-nb font-bold leading-[1.2] no-underline cursor-pointer focus-visible:outline-3 focus-visible:outline-dashed focus-visible:outline-offset-[5px] focus-visible:outline-nb-focus disabled:cursor-not-allowed disabled:border-dashed disabled:bg-nb-paper disabled:text-nb-muted disabled:shadow-none disabled:[translate:none] shadow-nb transition-[translate,box-shadow] duration-[120ms] hover:[translate:-2px_-2px] hover:shadow-nb-hover active:[translate:var(--nb-press)] active:shadow-none motion-reduce:transition-none size-12 rounded-nb-sm bg-nb-surface text-nb-ink" type="button" aria-label="Message Mira"><svg class="size-5 shrink-0" aria-hidden="true" focusable="false"><use href="#nb-i-send"/></svg></button></div></article>
</div></section>
<section><span class="mb-[18px] block text-[.72rem] font-extrabold tracking-[.12em] text-nb-muted uppercase">Pricing cards · each line says Included or Not included</span><div class="grid grid-cols-[repeat(auto-fit,minmax(min(100%,260px),1fr))] items-start gap-7">
<article class="relative border-(length:--nb-bw) border-nb-line rounded-nb p-[1.4rem] font-nb shadow-nb-lg bg-nb-surface text-nb-ink"><h3 class="m-0 text-[.85rem] font-extrabold tracking-[.1em] uppercase">Free</h3><p class="mt-[.4rem] mb-[.2rem] text-[2.8rem] font-nb-display font-black tracking-[-.01em] leading-[1.05]">$0 <small class="font-nb text-base leading-none font-bold tracking-normal">forever</small></p><p class="m-0 text-nb-muted">For fans who want to follow along.</p>
<ul class="my-[1.2rem] mb-[1.4rem] grid list-none gap-[.6rem] border-t-(length:--nb-bw) border-nb-line p-0 pt-4"><li class="flex items-start gap-[.6rem] font-semibold"><svg class="size-[22px] shrink-0 rounded-full border-2 border-nb-line bg-nb-lime p-[2px] text-nb-on-fill" aria-hidden="true" focusable="false"><use href="#nb-i-check"/></svg><span class="sr-only">Included: </span>Public posts</li><li class="flex items-start gap-[.6rem] font-semibold"><svg class="size-[22px] shrink-0 rounded-full border-2 border-nb-line bg-nb-lime p-[2px] text-nb-on-fill" aria-hidden="true" focusable="false"><use href="#nb-i-check"/></svg><span class="sr-only">Included: </span>Monthly newsletter</li><li class="flex items-start gap-[.6rem] font-semibold text-nb-muted line-through"><svg class="size-[22px] shrink-0 rounded-full border-2 border-nb-line bg-nb-paper p-[2px] text-nb-ink" aria-hidden="true" focusable="false"><use href="#nb-i-x"/></svg><span class="sr-only">Not included: </span>Members-only episodes</li><li class="flex items-start gap-[.6rem] font-semibold text-nb-muted line-through"><svg class="size-[22px] shrink-0 rounded-full border-2 border-nb-line bg-nb-paper p-[2px] text-nb-ink" aria-hidden="true" focusable="false"><use href="#nb-i-x"/></svg><span class="sr-only">Not included: </span>Print discounts</li></ul>
<a class="inline-flex items-center justify-center gap-2 border-(length:--nb-bw) border-nb-line font-nb font-bold leading-[1.2] no-underline cursor-pointer focus-visible:outline-3 focus-visible:outline-dashed focus-visible:outline-offset-[5px] focus-visible:outline-nb-focus disabled:cursor-not-allowed disabled:border-dashed disabled:bg-nb-paper disabled:text-nb-muted disabled:shadow-none disabled:[translate:none] shadow-nb transition-[translate,box-shadow] duration-[120ms] hover:[translate:-2px_-2px] hover:shadow-nb-hover active:[translate:var(--nb-press)] active:shadow-none motion-reduce:transition-none rounded-nb-sm min-h-[46px] px-[1.2rem] py-[.6rem] text-base bg-nb-surface text-nb-ink w-full" href="#">Join free</a></article>
<article class="relative border-(length:--nb-bw) border-nb-line rounded-nb p-[1.4rem] font-nb shadow-nb-lg bg-nb-lemon [--nb-muted:var(--nb-on-fill-muted)] text-nb-on-fill"><span class="rounded-full inline-flex w-max items-center gap-[.35rem] border-(length:--nb-bw) border-nb-line px-[.7rem] py-[.3rem] font-nb text-[.75rem] leading-[1.1] font-extrabold tracking-[.06em] text-nb-on-fill uppercase shadow-nb-sm absolute -top-4 right-3.5 z-2 rotate-[5deg] bg-nb-pink">Most popular</span><h3 class="m-0 text-[.85rem] font-extrabold tracking-[.1em] uppercase">Supporter</h3><p class="mt-[.4rem] mb-[.2rem] text-[2.8rem] font-nb-display font-black tracking-[-.01em] leading-[1.05]">$8 <small class="font-nb text-base leading-none font-bold tracking-normal">a month</small></p><p class="m-0 text-nb-muted">Everything, plus the back catalogue.</p>
<ul class="my-[1.2rem] mb-[1.4rem] grid list-none gap-[.6rem] border-t-(length:--nb-bw) border-nb-line p-0 pt-4"><li class="flex items-start gap-[.6rem] font-semibold"><svg class="size-[22px] shrink-0 rounded-full border-2 border-nb-line bg-nb-lime p-[2px] text-nb-on-fill" aria-hidden="true" focusable="false"><use href="#nb-i-check"/></svg><span class="sr-only">Included: </span>Public posts</li><li class="flex items-start gap-[.6rem] font-semibold"><svg class="size-[22px] shrink-0 rounded-full border-2 border-nb-line bg-nb-lime p-[2px] text-nb-on-fill" aria-hidden="true" focusable="false"><use href="#nb-i-check"/></svg><span class="sr-only">Included: </span>Monthly newsletter</li><li class="flex items-start gap-[.6rem] font-semibold"><svg class="size-[22px] shrink-0 rounded-full border-2 border-nb-line bg-nb-lime p-[2px] text-nb-on-fill" aria-hidden="true" focusable="false"><use href="#nb-i-check"/></svg><span class="sr-only">Included: </span>Members-only episodes</li><li class="flex items-start gap-[.6rem] font-semibold text-nb-muted line-through"><svg class="size-[22px] shrink-0 rounded-full border-2 border-nb-line bg-nb-paper p-[2px] text-nb-ink" aria-hidden="true" focusable="false"><use href="#nb-i-x"/></svg><span class="sr-only">Not included: </span>Print discounts</li></ul>
<a class="inline-flex items-center justify-center gap-2 border-(length:--nb-bw) border-nb-line font-nb font-bold leading-[1.2] no-underline cursor-pointer focus-visible:outline-3 focus-visible:outline-dashed focus-visible:outline-offset-[5px] focus-visible:outline-nb-focus disabled:cursor-not-allowed disabled:border-dashed disabled:bg-nb-paper disabled:text-nb-muted disabled:shadow-none disabled:[translate:none] shadow-nb transition-[translate,box-shadow] duration-[120ms] hover:[translate:-2px_-2px] hover:shadow-nb-hover active:[translate:var(--nb-press)] active:shadow-none motion-reduce:transition-none rounded-nb-sm min-h-[46px] px-[1.2rem] py-[.6rem] text-base bg-nb-ink text-nb-paper w-full" href="#">Become a supporter</a></article>
<article class="relative border-(length:--nb-bw) border-nb-line rounded-nb p-[1.4rem] font-nb shadow-nb-lg bg-nb-surface text-nb-ink"><h3 class="m-0 text-[.85rem] font-extrabold tracking-[.1em] uppercase">Studio</h3><p class="mt-[.4rem] mb-[.2rem] text-[2.8rem] font-nb-display font-black tracking-[-.01em] leading-[1.05]">$24 <small class="font-nb text-base leading-none font-bold tracking-normal">a month</small></p><p class="m-0 text-nb-muted">For collectors who want every print.</p>
<ul class="my-[1.2rem] mb-[1.4rem] grid list-none gap-[.6rem] border-t-(length:--nb-bw) border-nb-line p-0 pt-4"><li class="flex items-start gap-[.6rem] font-semibold"><svg class="size-[22px] shrink-0 rounded-full border-2 border-nb-line bg-nb-lime p-[2px] text-nb-on-fill" aria-hidden="true" focusable="false"><use href="#nb-i-check"/></svg><span class="sr-only">Included: </span>Public posts</li><li class="flex items-start gap-[.6rem] font-semibold"><svg class="size-[22px] shrink-0 rounded-full border-2 border-nb-line bg-nb-lime p-[2px] text-nb-on-fill" aria-hidden="true" focusable="false"><use href="#nb-i-check"/></svg><span class="sr-only">Included: </span>Monthly newsletter</li><li class="flex items-start gap-[.6rem] font-semibold"><svg class="size-[22px] shrink-0 rounded-full border-2 border-nb-line bg-nb-lime p-[2px] text-nb-on-fill" aria-hidden="true" focusable="false"><use href="#nb-i-check"/></svg><span class="sr-only">Included: </span>Members-only episodes</li><li class="flex items-start gap-[.6rem] font-semibold"><svg class="size-[22px] shrink-0 rounded-full border-2 border-nb-line bg-nb-lime p-[2px] text-nb-on-fill" aria-hidden="true" focusable="false"><use href="#nb-i-check"/></svg><span class="sr-only">Included: </span>20% off every print</li></ul>
<a class="inline-flex items-center justify-center gap-2 border-(length:--nb-bw) border-nb-line font-nb font-bold leading-[1.2] no-underline cursor-pointer focus-visible:outline-3 focus-visible:outline-dashed focus-visible:outline-offset-[5px] focus-visible:outline-nb-focus disabled:cursor-not-allowed disabled:border-dashed disabled:bg-nb-paper disabled:text-nb-muted disabled:shadow-none disabled:[translate:none] shadow-nb transition-[translate,box-shadow] duration-[120ms] hover:[translate:-2px_-2px] hover:shadow-nb-hover active:[translate:var(--nb-press)] active:shadow-none motion-reduce:transition-none rounded-nb-sm min-h-[46px] px-[1.2rem] py-[.6rem] text-base bg-nb-surface text-nb-ink w-full" href="#">Go Studio</a></article>
</div></section>
<section><span class="mb-[18px] block text-[.72rem] font-extrabold tracking-[.12em] text-nb-muted uppercase">Stickers</span><div class="flex flex-wrap items-center gap-[18px]">
<span class="rounded-full inline-flex w-max items-center gap-[.35rem] border-(length:--nb-bw) border-nb-line px-[.7rem] py-[.3rem] font-nb text-[.75rem] leading-[1.1] font-extrabold tracking-[.06em] text-nb-on-fill uppercase shadow-nb-sm -rotate-4 bg-nb-lemon"><svg class="size-3.5 shrink-0" aria-hidden="true" focusable="false"><use href="#nb-i-sparkle"/></svg>New drop</span>
<span class="rounded-full inline-flex w-max items-center gap-[.35rem] border-(length:--nb-bw) border-nb-line px-[.7rem] py-[.3rem] font-nb text-[.75rem] leading-[1.1] font-extrabold tracking-[.06em] text-nb-on-fill uppercase shadow-nb-sm rotate-[5deg] bg-nb-pink">Members only</span>
<span class="rounded-full inline-flex w-max items-center gap-[.35rem] border-(length:--nb-bw) border-nb-line px-[.7rem] py-[.3rem] font-nb text-[.75rem] leading-[1.1] font-extrabold tracking-[.06em] text-nb-on-fill uppercase shadow-nb-sm -rotate-4 bg-nb-cyan"><svg class="size-3.5 shrink-0" aria-hidden="true" focusable="false"><use href="#nb-i-flame"/></svg>Live now</span>
<span class="rounded-[4px] inline-flex w-max items-center gap-[.35rem] border-(length:--nb-bw) border-nb-line px-[.7rem] py-[.3rem] font-nb text-[.75rem] leading-[1.1] font-extrabold tracking-[.06em] text-nb-on-fill uppercase shadow-nb-sm rotate-[5deg] bg-nb-lime">Hand printed</span>
<span class="rounded-full inline-flex w-max items-center gap-[.35rem] border-(length:--nb-bw) border-nb-line px-[.7rem] py-[.3rem] font-nb text-[.75rem] leading-[1.1] font-extrabold tracking-[.06em] text-nb-on-fill uppercase shadow-nb-sm -rotate-4 bg-nb-violet">Limited run</span>
<span class="relative grid aspect-square w-[104px] rotate-12 place-items-center p-[18px] text-center font-nb text-[.78rem] leading-[1.05] font-black tracking-[.02em] text-nb-on-fill uppercase"><span class="absolute inset-0 bg-nb-line clip-nb-burst"></span><span class="absolute inset-[5px] bg-nb-lemon clip-nb-burst"></span><span class="relative">50% off</span></span>
<span class="relative grid aspect-square w-[104px] rotate-12 place-items-center p-[18px] text-center font-nb text-[.78rem] leading-[1.05] font-black tracking-[.02em] text-nb-on-fill uppercase"><span class="absolute inset-0 bg-nb-line clip-nb-burst"></span><span class="absolute inset-[5px] bg-nb-pink clip-nb-burst"></span><span class="relative">Free shipping</span></span>
</div></section>
CSS
/* ── Neobrutalism UI kit tokens (uiCookies) — identical in every set ─────────────
   Thick ink borders, hard offset shadows and flat saturated fills on cream paper.
   Change a token and the whole kit follows; the border and shadow recipes below are built from them. */
:root{
  --nb-paper:#fff6e0;        /* page background, cream */
  --nb-surface:#ffffff;      /* card, field and button faces */
  --nb-ink:#111111;          /* text, 17.5:1 on paper */
  --nb-muted:#454036;        /* secondary text, 9.6:1 on paper */
  --nb-line:#111111;         /* border colour */
  --nb-bw:3px;               /* border width */
  --nb-shadow-x:4px;         /* hard shadow offset; pressed controls move this far into it */
  --nb-shadow-y:4px;
  --nb-shadow-color:#111111;
  --nb-radius:12px;          /* cards and panels */
  --nb-radius-sm:8px;        /* buttons and fields */
  --nb-focus:#1d4ed8;        /* dashed focus outline, 6.2:1 on paper, never the shadow */
  --nb-on-fill:#111111;      /* text on every palette fill below, 6.8:1 or more */
  --nb-on-fill-muted:#2b2822;/* secondary text on fills, 5.2:1 or more */
  --nb-lemon:#ffe14d;--nb-pink:#ff90d0;--nb-cyan:#62e2e8;--nb-lime:#b6f36a;
  --nb-orange:#ffa94d;--nb-violet:#b9a3ff;--nb-red:#ff6b6b;
  --nb-blue:#2448e0;--nb-on-blue:#ffffff; /* the only fill that takes white text, 6.8:1 */
  --nb-danger:#b42318;       /* destructive text, 6.1:1 on paper */
  --nb-font:"Space Grotesk","Archivo","Helvetica Neue",Arial,system-ui,sans-serif;
  --nb-font-display:"Archivo Black","Arial Black","Helvetica Neue",Arial,sans-serif;
}
/* Dark brutalism: data-nb="dark" on any wrapper, or a checked .nb-theme-input inside a [data-nb] element.
   :is() is a forgiving list, so browsers without :has() still apply data-nb="dark". Fills keep dark text. */
[data-nb]:is([data-nb="dark"],:has(.nb-theme-input:checked)){
  --nb-paper:#17150f;--nb-surface:#25221b;--nb-ink:#fbf3dc;--nb-muted:#d6ccb2;--nb-line:#fbf3dc;
  --nb-shadow-color:#fbf3dc;--nb-focus:#8db4ff;--nb-danger:#ff9b8f;color-scheme:dark}
/* More contrast requested: secondary text turns full ink */
@media (prefers-contrast:more){:root,[data-nb]:is([data-nb],:has(.nb-theme-input:checked)){--nb-muted:var(--nb-ink);--nb-on-fill-muted:var(--nb-on-fill)}}
:root,[data-nb]{
  --nb-border:var(--nb-bw) solid var(--nb-line);
  --nb-shadow:var(--nb-shadow-x) var(--nb-shadow-y) 0 0 var(--nb-shadow-color);
  --nb-shadow-sm:calc(var(--nb-shadow-x)*.5) calc(var(--nb-shadow-y)*.5) 0 0 var(--nb-shadow-color);
  --nb-shadow-lg:calc(var(--nb-shadow-x)*1.75) calc(var(--nb-shadow-y)*1.75) 0 0 var(--nb-shadow-color);
  --nb-shadow-hover:calc(var(--nb-shadow-x) + 2px) calc(var(--nb-shadow-y) + 2px) 0 0 var(--nb-shadow-color);
  --nb-press:var(--nb-shadow-x) var(--nb-shadow-y);                       /* translate for a pressed control */
  --nb-press-sm:calc(var(--nb-shadow-x)*.5) calc(var(--nb-shadow-y)*.5);  /* …for one with the small shadow */
}
[data-nb]{background:var(--nb-paper);color:var(--nb-ink);font-family:var(--nb-font)}
/* The tokens above, exposed as Tailwind utilities: bg-nb-paper, bg-nb-lemon, text-nb-ink, border-nb-line,
   shadow-nb, shadow-nb-sm, shadow-nb-lg, rounded-nb, rounded-nb-sm, font-nb, font-nb-display, outline-nb-focus… */
@theme inline {
  --color-nb-paper: var(--nb-paper); --color-nb-surface: var(--nb-surface); --color-nb-ink: var(--nb-ink);
  --color-nb-muted: var(--nb-muted); --color-nb-line: var(--nb-line); --color-nb-focus: var(--nb-focus);
  --color-nb-on-fill: var(--nb-on-fill); --color-nb-on-fill-muted: var(--nb-on-fill-muted);
  --color-nb-lemon: var(--nb-lemon); --color-nb-pink: var(--nb-pink); --color-nb-cyan: var(--nb-cyan); --color-nb-lime: var(--nb-lime);
  --color-nb-orange: var(--nb-orange); --color-nb-violet: var(--nb-violet); --color-nb-red: var(--nb-red);
  --color-nb-blue: var(--nb-blue); --color-nb-on-blue: var(--nb-on-blue); --color-nb-danger: var(--nb-danger);
  --shadow-nb: var(--nb-shadow); --shadow-nb-sm: var(--nb-shadow-sm); --shadow-nb-lg: var(--nb-shadow-lg); --shadow-nb-hover: var(--nb-shadow-hover);
  --radius-nb: var(--nb-radius); --radius-nb-sm: var(--nb-radius-sm);
  --font-nb: var(--nb-font); --font-nb-display: var(--nb-font-display);
}
/* Starburst sticker outline (Tailwind has no clip-path utility) */
@utility clip-nb-burst {
  clip-path: polygon(50% 0%,59.1% 16.1%,75% 6.7%,74.8% 25.2%,93.3% 25%,83.9% 40.9%,100% 50%,83.9% 59.1%,93.3% 75%,74.8% 74.8%,75% 93.3%,59.1% 83.9%,50% 100%,40.9% 83.9%,25% 93.3%,25.2% 74.8%,6.7% 75%,16.1% 59.1%,0% 50%,16.1% 40.9%,6.7% 25%,25.2% 25.2%,25% 6.7%,40.9% 16.1%);
}

About this set

Four kinds of card and a sheet of stickers in one loud style. Stat cards fill lemon, pink and cyan and show subscribers, revenue and open rate with a big black figure and a change written in words beside its arrow, such as Up 8.2% this month. A content card sets geometric cover art drawn in inline SVG above a tilted Episode 42 sticker, a title, an excerpt, the listening time and date, and a Listen now button whose hidden text names the episode. A profile card has initials in a round avatar with its own shadow, a Top creator sticker, a short bio, three stats in a boxed description list and Follow and Message actions. Three pricing cards compare free, supporter and studio plans; the featured plan is lemon with a Most popular sticker and each feature line says Included or Not included to screen readers. Last comes a row of pill and square stickers and two starburst badges cut with clip-path. Use the stat cards on dashboards, the content card for articles or episodes, and the pricing cards on an upgrade page. Every card shares the border, the large hard shadow and the radius from the –nb-* tokens.

What’s included

  • Stat cards whose change is written in words
  • Content card with inline SVG cover art and a named link
  • Profile card with stats as a description list
  • Pricing cards with a sticker and Included or Not included labels
  • Pill, square and starburst stickers

Accessibility

Headings, lists and a description list give the cards structure. The cover art and avatar are decorative and hidden from screen readers, the Listen now link includes the episode title in hidden text, and the icon-only message button has an aria-label. Buttons and links show a 3px dashed focus outline. Dark text on every fill reaches 6.8:1 or more, and transitions stop under prefers-reduced-motion.

Customise it

Change the --nb-* tokens for the border, shadow, radius and palette. In Bootstrap the cards are .card.nb-card with --bs-card-* mapped to the tokens and fill classes such as .nb-card-lemon; in Tailwind use bg-nb-lemon, shadow-nb-lg and rounded-nb, and the clip-nb-burst utility for the starburst.