Open demo

CSS code

HTML
<svg width="0" height="0" style="position:absolute" aria-hidden="true" focusable="false">
  <symbol id="nb-i-bolt" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M13 2.5 4.5 13.5H11L10 21.5l8.5-11H12z"/></symbol>
  <symbol id="nb-i-search" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><circle cx="10.5" cy="10.5" r="6"/><path d="m15 15 5.5 5.5"/></symbol>
  <symbol id="nb-i-grid" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><rect x="4" y="4" width="6.5" height="6.5"/><rect x="13.5" y="4" width="6.5" height="6.5"/><rect x="4" y="13.5" width="6.5" height="6.5"/><rect x="13.5" y="13.5" width="6.5" height="6.5"/></symbol>
  <symbol id="nb-i-file" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M6 3.5h8l4.5 4.5v12.5H6z"/><path d="M14 3.5V8h4.5M9 13h6M9 16.5h6"/></symbol>
  <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-shop" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M4 8.5 5.5 4h13L20 8.5M4 8.5h16M5 8.5V20h14V8.5M9.5 20v-6h5v6"/></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-settings" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="3"/><path d="M12 2.5v3M12 18.5v3M21.5 12h-3M5.5 12h-3M18.7 5.3l-2.1 2.1M7.4 16.6l-2.1 2.1M18.7 18.7l-2.1-2.1M7.4 7.4 5.3 5.3"/></symbol>
  <symbol id="nb-i-logout" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M14 4.5H5v15h9M10 12h10.5M17 8.5l3.5 3.5-3.5 3.5"/></symbol>
  <symbol id="nb-i-arrow-left" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M19.5 12h-14M11 6.5 5.5 12l5.5 5.5"/></symbol>
  <symbol id="nb-i-arrow-right" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M4.5 12h14M13 6.5l5.5 5.5-5.5 5.5"/></symbol>
</svg>
<section><span class="lbl">Navbar · the current page is filled, outlined and lifted</span>
<nav class="nb-navbar" aria-label="Main"><a class="nb-brand" href="#"><span class="nb-brand__mark"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-bolt"/></svg></span>Loudhaus</a>
<ul class="nb-navbar__links"><li><a class="nb-navlink" href="#">Discover</a></li><li><a class="nb-navlink" href="#" aria-current="page">Creators</a></li><li><a class="nb-navlink" href="#">Shop</a></li><li><a class="nb-navlink" href="#">Pricing</a></li></ul>
<div class="nb-navbar__end"><button class="nb-btn nb-btn--icon nb-btn--icon-sm" type="button" aria-label="Search"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-search"/></svg></button><a class="nb-btn nb-btn--sm nb-btn--lemon" href="#">Start free</a></div></nav></section>
<section><span class="lbl">Breadcrumb</span><nav class="nb-crumbs" aria-label="Breadcrumb"><ol><li><a href="#">Home</a></li><li><a href="#">Creators</a></li><li><span aria-current="page">Mira Okafor</span></li></ol></nav></section>
<div class="cols">
<section><span class="lbl">Sidebar</span><nav class="nb-side" aria-label="Studio">
<div class="nb-side__group"><h3 class="nb-side__heading">Studio</h3><ul class="nb-side__list">
<li><a class="nb-side__link" href="#"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-grid"/></svg>Dashboard</a></li>
<li><a class="nb-side__link" href="#" aria-current="page"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-file"/></svg>Posts</a></li>
<li><a class="nb-side__link" href="#"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-users"/></svg>Members<span class="nb-count">12<span class="nb-sr"> new</span></span></a></li>
<li><a class="nb-side__link" href="#"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-shop"/></svg>Shop</a></li></ul></div>
<div class="nb-side__group"><h3 class="nb-side__heading">Account</h3><ul class="nb-side__list">
<li><a class="nb-side__link" href="#"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-dollar"/></svg>Payouts</a></li>
<li><a class="nb-side__link" href="#"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-settings"/></svg>Settings</a></li>
<li><a class="nb-side__link" href="#"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-logout"/></svg>Log out</a></li></ul></div>
</nav></section>
<div class="nb-stack">
<section><span class="lbl">Tabs · arrow keys move between tabs</span>
<div class="nb-tablist" role="tablist" aria-label="Posts">
<button class="nb-tab" type="button" role="tab" id="tab-pub" aria-selected="true" aria-controls="panel-pub">Published <span class="nb-tab__count">24</span></button>
<button class="nb-tab" type="button" role="tab" id="tab-drafts" aria-selected="false" aria-controls="panel-drafts" tabindex="-1">Drafts <span class="nb-tab__count">3</span></button>
<button class="nb-tab" type="button" role="tab" id="tab-sched" aria-selected="false" aria-controls="panel-sched" tabindex="-1">Scheduled <span class="nb-tab__count">2</span></button>
</div>
<div class="nb-card nb-tabpanel" role="tabpanel" id="panel-pub" aria-labelledby="tab-pub" tabindex="0"><ul class="nb-list">
<li><span>How we print 500 zines in a weekend<small>2 Oct · 1,204 reads</small></span><span class="nb-badge">Public</span></li>
<li><span>Riso colour cheat sheet<small>24 Sep · 860 reads</small></span><span class="nb-badge nb-badge--pink">Members</span></li>
<li><span>Studio tour: the new flat files<small>11 Sep · 2,310 reads</small></span><span class="nb-badge">Public</span></li></ul></div>
<div class="nb-card nb-tabpanel" role="tabpanel" id="panel-drafts" aria-labelledby="tab-drafts" tabindex="0" hidden><ul class="nb-list">
<li><span>Interview with Ola Brandt<small>Edited 2 hours ago</small></span><span class="nb-badge nb-badge--lemon">Draft</span></li>
<li><span>Autumn print drop notes<small>Edited yesterday</small></span><span class="nb-badge nb-badge--lemon">Draft</span></li>
<li><span>Paper suppliers we trust<small>Edited 4 Oct</small></span><span class="nb-badge nb-badge--lemon">Draft</span></li></ul></div>
<div class="nb-card nb-tabpanel" role="tabpanel" id="panel-sched" aria-labelledby="tab-sched" tabindex="0" hidden><ul class="nb-list">
<li><span>Episode 43: Fanzines in 1994<small>Fri 23 Oct, 9:00</small></span><span class="nb-badge nb-badge--cyan">Scheduled</span></li>
<li><span>October print drop<small>Fri 30 Oct, 18:00</small></span><span class="nb-badge nb-badge--cyan">Scheduled</span></li></ul></div>
</section>
<section><span class="lbl">Pagination</span><nav aria-label="Posts pages"><ul class="nb-pager">
<li><a href="#" aria-label="Previous page"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-arrow-left"/></svg>Prev</a></li>
<li><a href="#" aria-label="Page 1">1</a></li>
<li><a href="#" aria-label="Page 2">2</a></li>
<li><a href="#" aria-label="Page 3" aria-current="page">3</a></li>
<li><a href="#" aria-label="Page 4">4</a></li>
<li class="nb-pager__gap" aria-hidden="true">…</li>
<li><a href="#" aria-label="Page 12">12</a></li>
<li><a href="#" aria-label="Next page">Next<svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-arrow-right"/></svg></a></li>
</ul></nav></section>
</div>
</div>
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)}
/* 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}
/* Navbar: the current link is filled, outlined and lifted on a small shadow, with aria-current */
.nb-navbar{display:flex;flex-wrap:wrap;align-items:center;gap:.75rem 1.25rem;padding:.75rem 1rem;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-brand{display:inline-flex;align-items:center;gap:.55rem;color:var(--nb-ink);font:900 1.25rem/1 var(--nb-font-display);text-decoration:none}
.nb-brand__mark{display:grid;place-items:center;width:38px;height:38px;border:var(--nb-border);border-radius:8px;background:var(--nb-lemon);color:var(--nb-on-fill);box-shadow:var(--nb-shadow-sm);rotate:-6deg}
.nb-brand:focus-visible{outline:3px dashed var(--nb-focus);outline-offset:4px;border-radius:4px}
.nb-navbar__links{display:flex;flex-wrap:wrap;gap:.35rem;margin:0 auto 0 0;padding:0;list-style:none}
.nb-navlink{display:block;padding:.45rem .8rem;border:var(--nb-bw) solid transparent;border-radius:var(--nb-radius-sm);color:var(--nb-ink);font-weight:700;text-decoration:none}
.nb-navlink:hover{border-color:var(--nb-line)}
.nb-navlink[aria-current="page"]{border-color:var(--nb-line);background:var(--nb-lemon);color:var(--nb-on-fill);box-shadow:var(--nb-shadow-sm)}
.nb-navlink:focus-visible{outline:3px dashed var(--nb-focus);outline-offset:3px}
.nb-navbar__end{display:flex;align-items:center;gap:12px}
@media (max-width:680px){.nb-navbar__links{order:3;width:100%;margin:0}}
/* Breadcrumb */
.nb-crumbs ol{display:flex;flex-wrap:wrap;align-items:center;gap:.45rem;margin:0;padding:0;list-style:none;font-weight:700}
.nb-crumbs li+li::before{content:"/";margin-right:.45rem;color:var(--nb-muted)}
.nb-crumbs a{color:var(--nb-ink);text-decoration:underline;text-decoration-thickness:2px;text-underline-offset:3px}
.nb-crumbs a:focus-visible{outline:3px dashed var(--nb-focus);outline-offset:3px}
.nb-crumbs [aria-current="page"]{padding:.15rem .55rem;border:2px solid var(--nb-line);border-radius:5px;background:var(--nb-lime);color:var(--nb-on-fill)}
/* Sidebar: grouped links; the current one is cyan, outlined and marked with an arrow */
.nb-side{width:100%;max-width:300px;padding:1rem;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-side__group+.nb-side__group{margin-top:1rem;padding-top:1rem;border-top:var(--nb-border)}
.nb-side__heading{margin:0 0 .45rem;padding:0 .65rem;font-size:.75rem;font-weight:800;letter-spacing:.1em;text-transform:uppercase;color:var(--nb-muted)}
.nb-side__list{display:grid;gap:.3rem;margin:0;padding:0;list-style:none}
.nb-side__link{display:flex;align-items:center;gap:.7rem;padding:.55rem .65rem;border:var(--nb-bw) solid transparent;border-radius:var(--nb-radius-sm);color:var(--nb-ink);font-weight:700;text-decoration:none}
.nb-side__link:hover{border-color:var(--nb-line)}
.nb-side__link[aria-current="page"]{border-color:var(--nb-line);background:var(--nb-cyan);color:var(--nb-on-fill);box-shadow:var(--nb-shadow-sm)}
.nb-side__link[aria-current="page"]::after{content:"";margin-left:auto;border-style:solid;border-width:6px 0 6px 9px;border-color:transparent currentColor}
.nb-side__link:focus-visible{outline:3px dashed var(--nb-focus);outline-offset:3px}
.nb-count{margin-left:auto;min-width:1.7rem;padding:.05rem .4rem;border:2px solid var(--nb-line);border-radius:999px;background:var(--nb-pink);color:var(--nb-on-fill);font-size:.75rem;font-weight:800;text-align:center}
/* Tabs: the selected tab is pushed into its shadow, filled lemon and marked with a square; ARIA tabs with arrow keys */
.nb-tablist{display:flex;flex-wrap:wrap;gap:.6rem;margin-bottom:1.1rem}
.nb-tab{display:inline-flex;align-items:center;gap:.45rem;min-height:44px;padding:.5rem 1rem;border:var(--nb-border);border-radius:var(--nb-radius-sm);background:var(--nb-surface);color:var(--nb-ink);
  font:700 .95rem/1.2 var(--nb-font);box-shadow:var(--nb-shadow);cursor:pointer;transition:translate .12s,box-shadow .12s}
.nb-tab[aria-selected="true"]{translate:var(--nb-press);box-shadow:none;background:var(--nb-lemon);color:var(--nb-on-fill)}
.nb-tab[aria-selected="true"]::before{content:"";width:9px;height:9px;background:currentColor}
.nb-tab:focus-visible{outline:3px dashed var(--nb-focus);outline-offset:5px}
.nb-tab__count{padding:0 .4rem;border:2px solid currentColor;border-radius:999px;font-size:.75rem;font-weight:800}
.nb-tabpanel:focus-visible{outline:3px dashed var(--nb-focus);outline-offset:4px}
.nb-list{display:grid;margin:0;padding:0;list-style:none}
.nb-list li{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:.75rem 0;font-weight:700}
.nb-list li+li{border-top:2px solid var(--nb-line)}
.nb-list small{display:block;font-weight:500;color:var(--nb-muted)}
.nb-badge{flex:none;padding:.1rem .5rem;border:2px solid var(--nb-line);border-radius:5px;background:var(--nb-lime);color:var(--nb-on-fill);font-size:.75rem;font-weight:800;letter-spacing:.04em;text-transform:uppercase}
.nb-badge--lemon{background:var(--nb-lemon)}.nb-badge--cyan{background:var(--nb-cyan)}.nb-badge--pink{background:var(--nb-pink)}.nb-badge--paper{background:var(--nb-paper);color:var(--nb-ink)}
/* Pagination: square buttons; the current page is ink, pressed into its shadow, with aria-current */
.nb-pager{display:flex;flex-wrap:wrap;align-items:center;gap:.55rem;margin:0;padding:0;list-style:none}
.nb-pager a{display:inline-flex;align-items:center;justify-content:center;gap:.35rem;min-width:44px;height:44px;padding:0 .75rem;border:var(--nb-border);border-radius:var(--nb-radius-sm);
  background:var(--nb-surface);color:var(--nb-ink);font:800 .95rem/1 var(--nb-font);text-decoration:none;box-shadow:var(--nb-shadow-sm);transition:translate .12s,box-shadow .12s}
.nb-pager a:hover{translate:-1px -1px;box-shadow:var(--nb-shadow)}
.nb-pager a:active{translate:var(--nb-press-sm);box-shadow:none}
.nb-pager a[aria-current="page"]{translate:var(--nb-press-sm);box-shadow:none;background:var(--nb-ink);color:var(--nb-paper);text-decoration:underline;text-decoration-thickness:2px;text-underline-offset:4px}
.nb-pager a:focus-visible{outline:3px dashed var(--nb-focus);outline-offset:4px}
.nb-pager__gap{padding:0 .2rem;font-weight:800}
@media (prefers-reduced-motion:reduce){[class*="nb-"],[class*="nb-"]::before,[class*="nb-"]::after{transition:none!important;animation:none!important}}
JavaScript
// Tabs: click or arrow keys / Home / End select a tab; only the selected tab is in the Tab order
document.querySelectorAll('[role="tablist"]').forEach(function (list) {
  var tabs = Array.prototype.slice.call(list.querySelectorAll('[role="tab"]'));
  function select(tab, focus) {
    tabs.forEach(function (t) {
      var on = t === tab;
      t.setAttribute('aria-selected', on);
      t.tabIndex = on ? 0 : -1;
      document.getElementById(t.getAttribute('aria-controls')).hidden = !on;
    });
    if (focus) tab.focus();
  }
  tabs.forEach(function (t, i) {
    t.addEventListener('click', function () { select(t); });
    t.addEventListener('keydown', function (e) {
      var n = { ArrowRight: i + 1, ArrowLeft: i - 1, Home: 0, End: tabs.length - 1 }[e.key];
      if (n === undefined) return;
      e.preventDefault();
      select(tabs[(n + tabs.length) % tabs.length], true);
    });
  });
});

Bootstrap 5 code

Requires: Bootstrap 5.3.8 CSS, Bootstrap 5.3.8 JS bundle

HTML
<svg width="0" height="0" style="position:absolute" aria-hidden="true" focusable="false">
  <symbol id="nb-i-bolt" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M13 2.5 4.5 13.5H11L10 21.5l8.5-11H12z"/></symbol>
  <symbol id="nb-i-search" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><circle cx="10.5" cy="10.5" r="6"/><path d="m15 15 5.5 5.5"/></symbol>
  <symbol id="nb-i-grid" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><rect x="4" y="4" width="6.5" height="6.5"/><rect x="13.5" y="4" width="6.5" height="6.5"/><rect x="4" y="13.5" width="6.5" height="6.5"/><rect x="13.5" y="13.5" width="6.5" height="6.5"/></symbol>
  <symbol id="nb-i-file" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M6 3.5h8l4.5 4.5v12.5H6z"/><path d="M14 3.5V8h4.5M9 13h6M9 16.5h6"/></symbol>
  <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-shop" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M4 8.5 5.5 4h13L20 8.5M4 8.5h16M5 8.5V20h14V8.5M9.5 20v-6h5v6"/></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-settings" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="3"/><path d="M12 2.5v3M12 18.5v3M21.5 12h-3M5.5 12h-3M18.7 5.3l-2.1 2.1M7.4 16.6l-2.1 2.1M18.7 18.7l-2.1-2.1M7.4 7.4 5.3 5.3"/></symbol>
  <symbol id="nb-i-logout" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M14 4.5H5v15h9M10 12h10.5M17 8.5l3.5 3.5-3.5 3.5"/></symbol>
  <symbol id="nb-i-arrow-left" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M19.5 12h-14M11 6.5 5.5 12l5.5 5.5"/></symbol>
  <symbol id="nb-i-arrow-right" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M4.5 12h14M13 6.5l5.5 5.5-5.5 5.5"/></symbol>
</svg>
<section><span class="lbl">Navbar · the current page is filled, outlined and lifted</span>
<nav class="navbar navbar-expand nb-navbar" aria-label="Main"><a class="navbar-brand" href="#"><span class="nb-brand__mark"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-bolt"/></svg></span>Loudhaus</a>
<ul class="navbar-nav"><li class="nav-item"><a class="nav-link" href="#">Discover</a></li><li class="nav-item"><a class="nav-link" href="#" aria-current="page">Creators</a></li><li class="nav-item"><a class="nav-link" href="#">Shop</a></li><li class="nav-item"><a class="nav-link" href="#">Pricing</a></li></ul>
<div class="nb-navbar__end"><button class="btn btn-nb btn-nb-icon btn-nb-icon-sm" type="button" aria-label="Search"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-search"/></svg></button><a class="btn btn-nb btn-nb-lemon btn-sm" href="#">Start free</a></div></nav></section>
<section><span class="lbl">Breadcrumb</span><nav class="nb-crumbs" aria-label="Breadcrumb"><ol class="breadcrumb"><li class="breadcrumb-item"><a href="#">Home</a></li><li class="breadcrumb-item"><a href="#">Creators</a></li><li class="breadcrumb-item active"><span aria-current="page">Mira Okafor</span></li></ol></nav></section>
<div class="cols">
<section><span class="lbl">Sidebar</span><nav class="nb-side" aria-label="Studio">
<div class="nb-side__group"><h3 class="nb-side__heading">Studio</h3><ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="#"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-grid"/></svg>Dashboard</a></li>
<li class="nav-item"><a class="nav-link" href="#" aria-current="page"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-file"/></svg>Posts</a></li>
<li class="nav-item"><a class="nav-link" href="#"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-users"/></svg>Members<span class="nb-count">12<span class="visually-hidden"> new</span></span></a></li>
<li class="nav-item"><a class="nav-link" href="#"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-shop"/></svg>Shop</a></li></ul></div>
<div class="nb-side__group"><h3 class="nb-side__heading">Account</h3><ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="#"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-dollar"/></svg>Payouts</a></li>
<li class="nav-item"><a class="nav-link" href="#"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-settings"/></svg>Settings</a></li>
<li class="nav-item"><a class="nav-link" href="#"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-logout"/></svg>Log out</a></li></ul></div>
</nav></section>
<div class="nb-stack">
<section><span class="lbl">Tabs · arrow keys move between tabs</span>
<div class="nav nb-tablist" role="tablist" aria-label="Posts">
<button class="nav-link active" type="button" role="tab" id="tab-pub" data-bs-toggle="tab" data-bs-target="#panel-pub" aria-selected="true" aria-controls="panel-pub">Published <span class="nb-tab__count">24</span></button>
<button class="nav-link" type="button" role="tab" id="tab-drafts" data-bs-toggle="tab" data-bs-target="#panel-drafts" aria-selected="false" aria-controls="panel-drafts" tabindex="-1">Drafts <span class="nb-tab__count">3</span></button>
<button class="nav-link" type="button" role="tab" id="tab-sched" data-bs-toggle="tab" data-bs-target="#panel-sched" aria-selected="false" aria-controls="panel-sched" tabindex="-1">Scheduled <span class="nb-tab__count">2</span></button>
</div>
<div class="tab-content">
<div class="tab-pane active card nb-card card-body nb-tabpanel" role="tabpanel" id="panel-pub" aria-labelledby="tab-pub" tabindex="0"><ul class="nb-list">
<li><span>How we print 500 zines in a weekend<small>2 Oct · 1,204 reads</small></span><span class="badge nb-badge">Public</span></li>
<li><span>Riso colour cheat sheet<small>24 Sep · 860 reads</small></span><span class="badge nb-badge nb-badge-pink">Members</span></li>
<li><span>Studio tour: the new flat files<small>11 Sep · 2,310 reads</small></span><span class="badge nb-badge">Public</span></li></ul></div>
<div class="tab-pane card nb-card card-body nb-tabpanel" role="tabpanel" id="panel-drafts" aria-labelledby="tab-drafts" tabindex="0"><ul class="nb-list">
<li><span>Interview with Ola Brandt<small>Edited 2 hours ago</small></span><span class="badge nb-badge nb-badge-lemon">Draft</span></li>
<li><span>Autumn print drop notes<small>Edited yesterday</small></span><span class="badge nb-badge nb-badge-lemon">Draft</span></li>
<li><span>Paper suppliers we trust<small>Edited 4 Oct</small></span><span class="badge nb-badge nb-badge-lemon">Draft</span></li></ul></div>
<div class="tab-pane card nb-card card-body nb-tabpanel" role="tabpanel" id="panel-sched" aria-labelledby="tab-sched" tabindex="0"><ul class="nb-list">
<li><span>Episode 43: Fanzines in 1994<small>Fri 23 Oct, 9:00</small></span><span class="badge nb-badge nb-badge-cyan">Scheduled</span></li>
<li><span>October print drop<small>Fri 30 Oct, 18:00</small></span><span class="badge nb-badge nb-badge-cyan">Scheduled</span></li></ul></div>
</div>
</section>
<section><span class="lbl">Pagination</span><nav aria-label="Posts pages"><ul class="pagination nb-pager">
<li class="page-item"><a class="page-link" href="#" aria-label="Previous page"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-arrow-left"/></svg>Prev</a></li>
<li class="page-item"><a class="page-link" href="#" aria-label="Page 1">1</a></li>
<li class="page-item"><a class="page-link" href="#" aria-label="Page 2">2</a></li>
<li class="page-item active"><a class="page-link" href="#" aria-label="Page 3" aria-current="page">3</a></li>
<li class="page-item"><a class="page-link" href="#" aria-label="Page 4">4</a></li>
<li class="nb-pager__gap" aria-hidden="true">…</li>
<li class="page-item"><a class="page-link" href="#" aria-label="Page 12">12</a></li>
<li class="page-item"><a class="page-link" href="#" aria-label="Next page">Next<svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-arrow-right"/></svg></a></li>
</ul></nav></section>
</div>
</div>
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)}
.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}
/* Navbar: Bootstrap .navbar; the current link is filled, outlined and lifted on a small shadow, with aria-current */
.navbar.nb-navbar{--bs-navbar-padding-x:1rem;--bs-navbar-padding-y:.75rem;--bs-navbar-color:var(--nb-ink);--bs-navbar-hover-color:var(--nb-ink);--bs-navbar-active-color:var(--nb-on-fill);
  --bs-navbar-brand-color:var(--nb-ink);--bs-navbar-brand-hover-color:var(--nb-ink);--bs-navbar-brand-padding-y:0;--bs-navbar-brand-margin-end:0;--bs-navbar-nav-link-padding-x:.8rem;--bs-nav-link-padding-y:.45rem;--bs-nav-link-font-weight:700;
  flex-wrap:wrap;gap:.75rem 1.25rem;border:var(--nb-border);border-radius:var(--nb-radius);background:var(--nb-surface);box-shadow:var(--nb-shadow-lg);font-family:var(--nb-font)}
.nb-navbar .navbar-brand{display:inline-flex;align-items:center;gap:.55rem;font:900 1.25rem/1 var(--nb-font-display)}
.nb-brand__mark{display:grid;place-items:center;width:38px;height:38px;border:var(--nb-border);border-radius:8px;background:var(--nb-lemon);color:var(--nb-on-fill);box-shadow:var(--nb-shadow-sm);rotate:-6deg}
.nb-navbar .navbar-brand:focus-visible{outline:3px dashed var(--nb-focus);outline-offset:4px;border-radius:4px}
.nb-navbar .navbar-nav{flex-wrap:wrap;gap:.35rem;margin-right:auto}
.nb-navbar .nav-link{padding:.45rem .8rem;border:var(--nb-bw) solid transparent;border-radius:var(--nb-radius-sm);color:var(--nb-ink);font-weight:700}
.nb-navbar .nav-link:hover{border-color:var(--nb-line)}
.nb-navbar .nav-link[aria-current="page"]{border-color:var(--nb-line);background:var(--nb-lemon);color:var(--nb-on-fill);box-shadow:var(--nb-shadow-sm)}
.nb-navbar .nav-link:focus-visible{outline:3px dashed var(--nb-focus);outline-offset:3px;box-shadow:none}
.nb-navbar .nav-link[aria-current="page"]:focus-visible{box-shadow:var(--nb-shadow-sm)}
.nb-navbar__end{display:flex;align-items:center;gap:12px}
@media (max-width:680px){.nb-navbar .navbar-nav{order:3;width:100%;margin:0}}
/* Breadcrumb: Bootstrap .breadcrumb */
.nb-crumbs .breadcrumb{--bs-breadcrumb-margin-bottom:0;--bs-breadcrumb-item-padding-x:.45rem;--bs-breadcrumb-divider-color:var(--nb-muted);--bs-breadcrumb-item-active-color:var(--nb-on-fill);align-items:center;row-gap:.45rem;font-weight:700}
.nb-crumbs .breadcrumb-item+.breadcrumb-item::before{content:"/"}
.nb-crumbs a{color:var(--nb-ink);text-decoration:underline;text-decoration-thickness:2px;text-underline-offset:3px}
.nb-crumbs a:focus-visible{outline:3px dashed var(--nb-focus);outline-offset:3px}
.nb-crumbs .active span{padding:.15rem .55rem;border:2px solid var(--nb-line);border-radius:5px;background:var(--nb-lime);color:var(--nb-on-fill)}
/* Sidebar: Bootstrap .nav.flex-column; the current link is cyan, outlined and marked with an arrow */
.nb-side{width:100%;max-width:300px;padding:1rem;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-side__group+.nb-side__group{margin-top:1rem;padding-top:1rem;border-top:var(--nb-border)}
.nb-side__heading{margin:0 0 .45rem;padding:0 .65rem;font-size:.75rem;font-weight:800;letter-spacing:.1em;line-height:1.5;text-transform:uppercase;color:var(--nb-muted)}
:is(.nb-side,.nb-side-nav) .nav{gap:.3rem}
:is(.nb-side,.nb-side-nav) .nav-link{display:flex;align-items:center;gap:.7rem;padding:.55rem .65rem;border:var(--nb-bw) solid transparent;border-radius:var(--nb-radius-sm);color:var(--nb-ink);font-weight:700}
:is(.nb-side,.nb-side-nav) .nav-link:hover{border-color:var(--nb-line);color:var(--nb-ink)}
:is(.nb-side,.nb-side-nav) .nav-link[aria-current="page"]{border-color:var(--nb-line);background:var(--nb-cyan);color:var(--nb-on-fill);box-shadow:var(--nb-shadow-sm)}
:is(.nb-side,.nb-side-nav) .nav-link[aria-current="page"]::after{content:"";margin-left:auto;border-style:solid;border-width:6px 0 6px 9px;border-color:transparent currentColor}
:is(.nb-side,.nb-side-nav) .nav-link:focus-visible{outline:3px dashed var(--nb-focus);outline-offset:3px;box-shadow:none}
:is(.nb-side,.nb-side-nav) .nav-link[aria-current="page"]:focus-visible{box-shadow:var(--nb-shadow-sm)}
.nb-count{margin-left:auto;min-width:1.7rem;padding:.05rem .4rem;border:2px solid var(--nb-line);border-radius:999px;background:var(--nb-pink);color:var(--nb-on-fill);font-size:.75rem;font-weight:800;text-align:center}
/* Tabs: Bootstrap .nav with the tab plugin. The selected tab is pushed into its shadow, filled lemon and marked with a square */
.nb-tablist{display:flex;flex-wrap:wrap;gap:.6rem;margin-bottom:1.1rem}
.nb-tablist .nav-link{display:inline-flex;align-items:center;gap:.45rem;min-height:44px;padding:.5rem 1rem;border:var(--nb-border);border-radius:var(--nb-radius-sm);background:var(--nb-surface);color:var(--nb-ink);
  font:700 .95rem/1.2 var(--nb-font);box-shadow:var(--nb-shadow);transition:translate .12s,box-shadow .12s}
.nb-tablist .nav-link.active{translate:var(--nb-press);box-shadow:none;background:var(--nb-lemon);color:var(--nb-on-fill)}
.nb-tablist .nav-link.active::before{content:"";width:9px;height:9px;background:currentColor}
.nb-tablist .nav-link:focus-visible{outline:3px dashed var(--nb-focus);outline-offset:5px}
.nb-tab__count{padding:0 .4rem;border:2px solid currentColor;border-radius:999px;font-size:.75rem;font-weight:800}
.nb-tabpanel:focus-visible{outline:3px dashed var(--nb-focus);outline-offset:4px}
.nb-list{display:grid;margin:0;padding:0;list-style:none}
.nb-list li{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:.75rem 0;font-weight:700}
.nb-list li+li{border-top:2px solid var(--nb-line)}
.nb-list small{display:block;font-size:.875em;font-weight:500;color:var(--nb-muted)}
.badge.nb-badge{--bs-badge-padding-x:.5rem;--bs-badge-padding-y:.1rem;--bs-badge-font-size:.75rem;--bs-badge-font-weight:800;--bs-badge-color:var(--nb-on-fill);--bs-badge-border-radius:5px;
  flex:none;border:2px solid var(--nb-line);background:var(--nb-lime);line-height:1.5;letter-spacing:.04em;text-transform:uppercase}
.badge.nb-badge-lemon{background:var(--nb-lemon)}.badge.nb-badge-cyan{background:var(--nb-cyan)}.badge.nb-badge-pink{background:var(--nb-pink)}.badge.nb-badge-paper{background:var(--nb-paper);--bs-badge-color:var(--nb-ink)}
/* Pagination: Bootstrap .pagination; the current page is ink, pressed into its shadow, with aria-current */
.nb-pager{--bs-pagination-padding-x:.75rem;--bs-pagination-padding-y:0;--bs-pagination-font-size:.95rem;--bs-pagination-color:var(--nb-ink);--bs-pagination-bg:var(--nb-surface);
  --bs-pagination-border-width:var(--nb-bw);--bs-pagination-border-color:var(--nb-line);--bs-pagination-border-radius:var(--nb-radius-sm);
  --bs-pagination-hover-color:var(--nb-ink);--bs-pagination-hover-bg:var(--nb-surface);--bs-pagination-hover-border-color:var(--nb-line);
  --bs-pagination-focus-color:var(--nb-ink);--bs-pagination-focus-bg:var(--nb-surface);--bs-pagination-focus-box-shadow:var(--nb-shadow-sm);
  --bs-pagination-active-color:var(--nb-paper);--bs-pagination-active-bg:var(--nb-ink);--bs-pagination-active-border-color:var(--nb-line);
  flex-wrap:wrap;align-items:center;gap:.55rem;margin:0}
.nb-pager .page-link{display:inline-flex;align-items:center;justify-content:center;gap:.35rem;min-width:44px;height:44px;margin:0!important;border-radius:var(--nb-radius-sm)!important;
  font:800 .95rem/1 var(--nb-font);box-shadow:var(--nb-shadow-sm);transition:translate .12s,box-shadow .12s}
.nb-pager .page-link:hover{translate:-1px -1px;box-shadow:var(--nb-shadow)}
.nb-pager .page-link:active{translate:var(--nb-press-sm);box-shadow:none}
.nb-pager .active>.page-link{translate:var(--nb-press-sm);box-shadow:none;text-decoration:underline;text-decoration-thickness:2px;text-underline-offset:4px}
.nb-pager .page-link:focus{box-shadow:var(--nb-shadow-sm)}
.nb-pager .page-link:focus-visible{outline:3px dashed var(--nb-focus);outline-offset:4px}
.nb-pager .active>.page-link:focus-visible{box-shadow:none}
.nb-pager__gap{padding:0 .2rem;font-weight:800}
@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-bolt" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M13 2.5 4.5 13.5H11L10 21.5l8.5-11H12z"/></symbol>
  <symbol id="nb-i-search" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><circle cx="10.5" cy="10.5" r="6"/><path d="m15 15 5.5 5.5"/></symbol>
  <symbol id="nb-i-grid" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><rect x="4" y="4" width="6.5" height="6.5"/><rect x="13.5" y="4" width="6.5" height="6.5"/><rect x="4" y="13.5" width="6.5" height="6.5"/><rect x="13.5" y="13.5" width="6.5" height="6.5"/></symbol>
  <symbol id="nb-i-file" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M6 3.5h8l4.5 4.5v12.5H6z"/><path d="M14 3.5V8h4.5M9 13h6M9 16.5h6"/></symbol>
  <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-shop" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M4 8.5 5.5 4h13L20 8.5M4 8.5h16M5 8.5V20h14V8.5M9.5 20v-6h5v6"/></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-settings" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="3"/><path d="M12 2.5v3M12 18.5v3M21.5 12h-3M5.5 12h-3M18.7 5.3l-2.1 2.1M7.4 16.6l-2.1 2.1M18.7 18.7l-2.1-2.1M7.4 7.4 5.3 5.3"/></symbol>
  <symbol id="nb-i-logout" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M14 4.5H5v15h9M10 12h10.5M17 8.5l3.5 3.5-3.5 3.5"/></symbol>
  <symbol id="nb-i-arrow-left" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M19.5 12h-14M11 6.5 5.5 12l5.5 5.5"/></symbol>
  <symbol id="nb-i-arrow-right" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M4.5 12h14M13 6.5l5.5 5.5-5.5 5.5"/></symbol>
</svg>
<section><span class="mb-[18px] block text-[.72rem] font-extrabold tracking-[.12em] text-nb-muted uppercase">Navbar · the current page is filled, outlined and lifted</span>
<nav class="flex flex-wrap items-center gap-x-5 gap-y-3 border-(length:--nb-bw) border-nb-line rounded-nb bg-nb-surface px-4 py-3 font-nb text-nb-ink shadow-nb-lg" aria-label="Main"><a class="inline-flex items-center gap-[.55rem] font-nb-display text-[1.25rem] leading-none font-black text-nb-ink no-underline focus-visible:rounded-[4px] focus-visible:outline-3 focus-visible:outline-dashed focus-visible:outline-offset-4 focus-visible:outline-nb-focus" href="#"><span class="grid size-[38px] -rotate-6 place-items-center border-(length:--nb-bw) border-nb-line rounded-lg bg-nb-lemon text-nb-on-fill shadow-nb-sm"><svg class="size-5 shrink-0" aria-hidden="true" focusable="false"><use href="#nb-i-bolt"/></svg></span>Loudhaus</a>
<ul class="m-0 mr-auto flex list-none flex-wrap gap-[.35rem] p-0 max-[680px]:order-3 max-[680px]:m-0 max-[680px]:w-full"><li><a class="block rounded-nb-sm border-(length:--nb-bw) border-transparent px-[.8rem] py-[.45rem] font-bold text-nb-ink no-underline hover:border-nb-line aria-[current=page]:border-nb-line aria-[current=page]:bg-nb-lemon aria-[current=page]:text-nb-on-fill aria-[current=page]:shadow-nb-sm focus-visible:outline-3 focus-visible:outline-dashed focus-visible:outline-offset-[3px] focus-visible:outline-nb-focus" href="#">Discover</a></li><li><a class="block rounded-nb-sm border-(length:--nb-bw) border-transparent px-[.8rem] py-[.45rem] font-bold text-nb-ink no-underline hover:border-nb-line aria-[current=page]:border-nb-line aria-[current=page]:bg-nb-lemon aria-[current=page]:text-nb-on-fill aria-[current=page]:shadow-nb-sm focus-visible:outline-3 focus-visible:outline-dashed focus-visible:outline-offset-[3px] focus-visible:outline-nb-focus" href="#" aria-current="page">Creators</a></li><li><a class="block rounded-nb-sm border-(length:--nb-bw) border-transparent px-[.8rem] py-[.45rem] font-bold text-nb-ink no-underline hover:border-nb-line aria-[current=page]:border-nb-line aria-[current=page]:bg-nb-lemon aria-[current=page]:text-nb-on-fill aria-[current=page]:shadow-nb-sm focus-visible:outline-3 focus-visible:outline-dashed focus-visible:outline-offset-[3px] focus-visible:outline-nb-focus" href="#">Shop</a></li><li><a class="block rounded-nb-sm border-(length:--nb-bw) border-transparent px-[.8rem] py-[.45rem] font-bold text-nb-ink no-underline hover:border-nb-line aria-[current=page]:border-nb-line aria-[current=page]:bg-nb-lemon aria-[current=page]:text-nb-on-fill aria-[current=page]:shadow-nb-sm focus-visible:outline-3 focus-visible:outline-dashed focus-visible:outline-offset-[3px] focus-visible:outline-nb-focus" href="#">Pricing</a></li></ul>
<div class="flex items-center gap-3"><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] size-[38px] rounded-nb-sm shadow-nb-sm transition-[translate,box-shadow] duration-[120ms] motion-reduce:transition-none hover:[translate:-2px_-2px] hover:shadow-nb active:[translate:var(--nb-press-sm)] active:shadow-none bg-nb-surface text-nb-ink" type="button" aria-label="Search"><svg class="size-5 shrink-0" aria-hidden="true" focusable="false"><use href="#nb-i-search"/></svg></button><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="#">Start free</a></div></nav></section>
<section><span class="mb-[18px] block text-[.72rem] font-extrabold tracking-[.12em] text-nb-muted uppercase">Breadcrumb</span><nav aria-label="Breadcrumb"><ol class="m-0 flex list-none flex-wrap items-center gap-[.45rem] p-0 font-bold"><li><a class="text-nb-ink underline decoration-2 underline-offset-[3px] focus-visible:outline-3 focus-visible:outline-dashed focus-visible:outline-offset-[3px] focus-visible:outline-nb-focus" href="#">Home</a></li><li class="before:mr-[.45rem] before:text-nb-muted before:content-['/']"><a class="text-nb-ink underline decoration-2 underline-offset-[3px] focus-visible:outline-3 focus-visible:outline-dashed focus-visible:outline-offset-[3px] focus-visible:outline-nb-focus" href="#">Creators</a></li><li class="before:mr-[.45rem] before:text-nb-muted before:content-['/']"><span class="rounded-[5px] border-2 border-nb-line bg-nb-lime px-[.55rem] py-[.15rem] text-nb-on-fill" aria-current="page">Mira Okafor</span></li></ol></nav></section>
<div class="grid grid-cols-1 gap-14 md:grid-cols-[minmax(0,300px)_minmax(0,1fr)]">
<section><span class="mb-[18px] block text-[.72rem] font-extrabold tracking-[.12em] text-nb-muted uppercase">Sidebar</span><nav class="w-full max-w-[300px] border-(length:--nb-bw) border-nb-line rounded-nb bg-nb-surface p-4 font-nb text-nb-ink shadow-nb-lg" aria-label="Studio">
<div><h3 class="m-0 mb-[.45rem] px-[.65rem] text-[.75rem] font-extrabold tracking-[.1em] text-nb-muted uppercase">Studio</h3><ul class="m-0 grid list-none gap-[.3rem] p-0">
<li><a class="flex items-center gap-[.7rem] rounded-nb-sm border-(length:--nb-bw) border-transparent px-[.65rem] py-[.55rem] font-bold text-nb-ink no-underline hover:border-nb-line aria-[current=page]:border-nb-line aria-[current=page]:bg-nb-cyan aria-[current=page]:text-nb-on-fill aria-[current=page]:shadow-nb-sm aria-[current=page]:after:ml-auto aria-[current=page]:after:border-y-[6px] aria-[current=page]:after:border-r-0 aria-[current=page]:after:border-l-[9px] aria-[current=page]:after:border-y-transparent aria-[current=page]:after:border-l-current aria-[current=page]:after:content-[''] focus-visible:outline-3 focus-visible:outline-dashed focus-visible:outline-offset-[3px] focus-visible:outline-nb-focus" href="#"><svg class="size-5 shrink-0" aria-hidden="true" focusable="false"><use href="#nb-i-grid"/></svg>Dashboard</a></li>
<li><a class="flex items-center gap-[.7rem] rounded-nb-sm border-(length:--nb-bw) border-transparent px-[.65rem] py-[.55rem] font-bold text-nb-ink no-underline hover:border-nb-line aria-[current=page]:border-nb-line aria-[current=page]:bg-nb-cyan aria-[current=page]:text-nb-on-fill aria-[current=page]:shadow-nb-sm aria-[current=page]:after:ml-auto aria-[current=page]:after:border-y-[6px] aria-[current=page]:after:border-r-0 aria-[current=page]:after:border-l-[9px] aria-[current=page]:after:border-y-transparent aria-[current=page]:after:border-l-current aria-[current=page]:after:content-[''] focus-visible:outline-3 focus-visible:outline-dashed focus-visible:outline-offset-[3px] focus-visible:outline-nb-focus" href="#" aria-current="page"><svg class="size-5 shrink-0" aria-hidden="true" focusable="false"><use href="#nb-i-file"/></svg>Posts</a></li>
<li><a class="flex items-center gap-[.7rem] rounded-nb-sm border-(length:--nb-bw) border-transparent px-[.65rem] py-[.55rem] font-bold text-nb-ink no-underline hover:border-nb-line aria-[current=page]:border-nb-line aria-[current=page]:bg-nb-cyan aria-[current=page]:text-nb-on-fill aria-[current=page]:shadow-nb-sm aria-[current=page]:after:ml-auto aria-[current=page]:after:border-y-[6px] aria-[current=page]:after:border-r-0 aria-[current=page]:after:border-l-[9px] aria-[current=page]:after:border-y-transparent aria-[current=page]:after:border-l-current aria-[current=page]:after:content-[''] focus-visible:outline-3 focus-visible:outline-dashed focus-visible:outline-offset-[3px] focus-visible:outline-nb-focus" href="#"><svg class="size-5 shrink-0" aria-hidden="true" focusable="false"><use href="#nb-i-users"/></svg>Members<span class="ml-auto min-w-[1.7rem] rounded-full border-2 border-nb-line bg-nb-pink px-[.4rem] py-[.05rem] text-center text-[.75rem] font-extrabold text-nb-on-fill">12<span class="sr-only"> new</span></span></a></li>
<li><a class="flex items-center gap-[.7rem] rounded-nb-sm border-(length:--nb-bw) border-transparent px-[.65rem] py-[.55rem] font-bold text-nb-ink no-underline hover:border-nb-line aria-[current=page]:border-nb-line aria-[current=page]:bg-nb-cyan aria-[current=page]:text-nb-on-fill aria-[current=page]:shadow-nb-sm aria-[current=page]:after:ml-auto aria-[current=page]:after:border-y-[6px] aria-[current=page]:after:border-r-0 aria-[current=page]:after:border-l-[9px] aria-[current=page]:after:border-y-transparent aria-[current=page]:after:border-l-current aria-[current=page]:after:content-[''] focus-visible:outline-3 focus-visible:outline-dashed focus-visible:outline-offset-[3px] focus-visible:outline-nb-focus" href="#"><svg class="size-5 shrink-0" aria-hidden="true" focusable="false"><use href="#nb-i-shop"/></svg>Shop</a></li></ul></div>
<div class="mt-4 border-t-(length:--nb-bw) border-nb-line pt-4"><h3 class="m-0 mb-[.45rem] px-[.65rem] text-[.75rem] font-extrabold tracking-[.1em] text-nb-muted uppercase">Account</h3><ul class="m-0 grid list-none gap-[.3rem] p-0">
<li><a class="flex items-center gap-[.7rem] rounded-nb-sm border-(length:--nb-bw) border-transparent px-[.65rem] py-[.55rem] font-bold text-nb-ink no-underline hover:border-nb-line aria-[current=page]:border-nb-line aria-[current=page]:bg-nb-cyan aria-[current=page]:text-nb-on-fill aria-[current=page]:shadow-nb-sm aria-[current=page]:after:ml-auto aria-[current=page]:after:border-y-[6px] aria-[current=page]:after:border-r-0 aria-[current=page]:after:border-l-[9px] aria-[current=page]:after:border-y-transparent aria-[current=page]:after:border-l-current aria-[current=page]:after:content-[''] focus-visible:outline-3 focus-visible:outline-dashed focus-visible:outline-offset-[3px] focus-visible:outline-nb-focus" href="#"><svg class="size-5 shrink-0" aria-hidden="true" focusable="false"><use href="#nb-i-dollar"/></svg>Payouts</a></li>
<li><a class="flex items-center gap-[.7rem] rounded-nb-sm border-(length:--nb-bw) border-transparent px-[.65rem] py-[.55rem] font-bold text-nb-ink no-underline hover:border-nb-line aria-[current=page]:border-nb-line aria-[current=page]:bg-nb-cyan aria-[current=page]:text-nb-on-fill aria-[current=page]:shadow-nb-sm aria-[current=page]:after:ml-auto aria-[current=page]:after:border-y-[6px] aria-[current=page]:after:border-r-0 aria-[current=page]:after:border-l-[9px] aria-[current=page]:after:border-y-transparent aria-[current=page]:after:border-l-current aria-[current=page]:after:content-[''] focus-visible:outline-3 focus-visible:outline-dashed focus-visible:outline-offset-[3px] focus-visible:outline-nb-focus" href="#"><svg class="size-5 shrink-0" aria-hidden="true" focusable="false"><use href="#nb-i-settings"/></svg>Settings</a></li>
<li><a class="flex items-center gap-[.7rem] rounded-nb-sm border-(length:--nb-bw) border-transparent px-[.65rem] py-[.55rem] font-bold text-nb-ink no-underline hover:border-nb-line aria-[current=page]:border-nb-line aria-[current=page]:bg-nb-cyan aria-[current=page]:text-nb-on-fill aria-[current=page]:shadow-nb-sm aria-[current=page]:after:ml-auto aria-[current=page]:after:border-y-[6px] aria-[current=page]:after:border-r-0 aria-[current=page]:after:border-l-[9px] aria-[current=page]:after:border-y-transparent aria-[current=page]:after:border-l-current aria-[current=page]:after:content-[''] focus-visible:outline-3 focus-visible:outline-dashed focus-visible:outline-offset-[3px] focus-visible:outline-nb-focus" href="#"><svg class="size-5 shrink-0" aria-hidden="true" focusable="false"><use href="#nb-i-logout"/></svg>Log out</a></li></ul></div>
</nav></section>
<div class="grid gap-5">
<section><span class="mb-[18px] block text-[.72rem] font-extrabold tracking-[.12em] text-nb-muted uppercase">Tabs · arrow keys move between tabs</span>
<div class="mb-[1.1rem] flex flex-wrap gap-[.6rem]" role="tablist" aria-label="Posts">
<button class="inline-flex min-h-11 cursor-pointer items-center gap-[.45rem] border-(length:--nb-bw) border-nb-line rounded-nb-sm bg-nb-surface px-4 py-2 font-nb text-[.95rem] leading-[1.2] font-bold text-nb-ink shadow-nb transition-[translate,box-shadow] duration-[120ms] motion-reduce:transition-none aria-selected:[translate:var(--nb-press)] aria-selected:bg-nb-lemon aria-selected:text-nb-on-fill aria-selected:shadow-none aria-selected:before:size-[9px] aria-selected:before:bg-current aria-selected:before:content-[''] focus-visible:outline-3 focus-visible:outline-dashed focus-visible:outline-offset-[5px] focus-visible:outline-nb-focus" type="button" role="tab" id="tab-pub" aria-selected="true" aria-controls="panel-pub">Published <span class="rounded-full border-2 border-current px-[.4rem] text-[.75rem] font-extrabold">24</span></button>
<button class="inline-flex min-h-11 cursor-pointer items-center gap-[.45rem] border-(length:--nb-bw) border-nb-line rounded-nb-sm bg-nb-surface px-4 py-2 font-nb text-[.95rem] leading-[1.2] font-bold text-nb-ink shadow-nb transition-[translate,box-shadow] duration-[120ms] motion-reduce:transition-none aria-selected:[translate:var(--nb-press)] aria-selected:bg-nb-lemon aria-selected:text-nb-on-fill aria-selected:shadow-none aria-selected:before:size-[9px] aria-selected:before:bg-current aria-selected:before:content-[''] focus-visible:outline-3 focus-visible:outline-dashed focus-visible:outline-offset-[5px] focus-visible:outline-nb-focus" type="button" role="tab" id="tab-drafts" aria-selected="false" aria-controls="panel-drafts" tabindex="-1">Drafts <span class="rounded-full border-2 border-current px-[.4rem] text-[.75rem] font-extrabold">3</span></button>
<button class="inline-flex min-h-11 cursor-pointer items-center gap-[.45rem] border-(length:--nb-bw) border-nb-line rounded-nb-sm bg-nb-surface px-4 py-2 font-nb text-[.95rem] leading-[1.2] font-bold text-nb-ink shadow-nb transition-[translate,box-shadow] duration-[120ms] motion-reduce:transition-none aria-selected:[translate:var(--nb-press)] aria-selected:bg-nb-lemon aria-selected:text-nb-on-fill aria-selected:shadow-none aria-selected:before:size-[9px] aria-selected:before:bg-current aria-selected:before:content-[''] focus-visible:outline-3 focus-visible:outline-dashed focus-visible:outline-offset-[5px] focus-visible:outline-nb-focus" type="button" role="tab" id="tab-sched" aria-selected="false" aria-controls="panel-sched" tabindex="-1">Scheduled <span class="rounded-full border-2 border-current px-[.4rem] text-[.75rem] font-extrabold">2</span></button>
</div>
<div 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 focus-visible:outline-3 focus-visible:outline-dashed focus-visible:outline-offset-4 focus-visible:outline-nb-focus" role="tabpanel" id="panel-pub" aria-labelledby="tab-pub" tabindex="0"><ul class="m-0 grid list-none p-0">
<li class="flex items-center justify-between gap-4 py-3 font-bold"><span>How we print 500 zines in a weekend<small class="block text-[.875em] font-medium text-nb-muted">2 Oct · 1,204 reads</small></span><span class="flex-none rounded-[5px] border-2 border-nb-line px-2 py-[.1rem] text-[.75rem] font-extrabold tracking-[.04em] text-nb-on-fill uppercase bg-nb-lime">Public</span></li>
<li class="flex items-center justify-between gap-4 border-t-2 border-nb-line py-3 font-bold"><span>Riso colour cheat sheet<small class="block text-[.875em] font-medium text-nb-muted">24 Sep · 860 reads</small></span><span class="flex-none rounded-[5px] border-2 border-nb-line px-2 py-[.1rem] text-[.75rem] font-extrabold tracking-[.04em] text-nb-on-fill uppercase bg-nb-pink">Members</span></li>
<li class="flex items-center justify-between gap-4 border-t-2 border-nb-line py-3 font-bold"><span>Studio tour: the new flat files<small class="block text-[.875em] font-medium text-nb-muted">11 Sep · 2,310 reads</small></span><span class="flex-none rounded-[5px] border-2 border-nb-line px-2 py-[.1rem] text-[.75rem] font-extrabold tracking-[.04em] text-nb-on-fill uppercase bg-nb-lime">Public</span></li></ul></div>
<div 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 focus-visible:outline-3 focus-visible:outline-dashed focus-visible:outline-offset-4 focus-visible:outline-nb-focus" role="tabpanel" id="panel-drafts" aria-labelledby="tab-drafts" tabindex="0" hidden><ul class="m-0 grid list-none p-0">
<li class="flex items-center justify-between gap-4 py-3 font-bold"><span>Interview with Ola Brandt<small class="block text-[.875em] font-medium text-nb-muted">Edited 2 hours ago</small></span><span class="flex-none rounded-[5px] border-2 border-nb-line px-2 py-[.1rem] text-[.75rem] font-extrabold tracking-[.04em] text-nb-on-fill uppercase bg-nb-lemon">Draft</span></li>
<li class="flex items-center justify-between gap-4 border-t-2 border-nb-line py-3 font-bold"><span>Autumn print drop notes<small class="block text-[.875em] font-medium text-nb-muted">Edited yesterday</small></span><span class="flex-none rounded-[5px] border-2 border-nb-line px-2 py-[.1rem] text-[.75rem] font-extrabold tracking-[.04em] text-nb-on-fill uppercase bg-nb-lemon">Draft</span></li>
<li class="flex items-center justify-between gap-4 border-t-2 border-nb-line py-3 font-bold"><span>Paper suppliers we trust<small class="block text-[.875em] font-medium text-nb-muted">Edited 4 Oct</small></span><span class="flex-none rounded-[5px] border-2 border-nb-line px-2 py-[.1rem] text-[.75rem] font-extrabold tracking-[.04em] text-nb-on-fill uppercase bg-nb-lemon">Draft</span></li></ul></div>
<div 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 focus-visible:outline-3 focus-visible:outline-dashed focus-visible:outline-offset-4 focus-visible:outline-nb-focus" role="tabpanel" id="panel-sched" aria-labelledby="tab-sched" tabindex="0" hidden><ul class="m-0 grid list-none p-0">
<li class="flex items-center justify-between gap-4 py-3 font-bold"><span>Episode 43: Fanzines in 1994<small class="block text-[.875em] font-medium text-nb-muted">Fri 23 Oct, 9:00</small></span><span class="flex-none rounded-[5px] border-2 border-nb-line px-2 py-[.1rem] text-[.75rem] font-extrabold tracking-[.04em] text-nb-on-fill uppercase bg-nb-cyan">Scheduled</span></li>
<li class="flex items-center justify-between gap-4 border-t-2 border-nb-line py-3 font-bold"><span>October print drop<small class="block text-[.875em] font-medium text-nb-muted">Fri 30 Oct, 18:00</small></span><span class="flex-none rounded-[5px] border-2 border-nb-line px-2 py-[.1rem] text-[.75rem] font-extrabold tracking-[.04em] text-nb-on-fill uppercase bg-nb-cyan">Scheduled</span></li></ul></div>
</section>
<section><span class="mb-[18px] block text-[.72rem] font-extrabold tracking-[.12em] text-nb-muted uppercase">Pagination</span><nav aria-label="Posts pages"><ul class="m-0 flex list-none flex-wrap items-center gap-[.55rem] p-0">
<li><a class="inline-flex h-11 min-w-11 items-center justify-center gap-[.35rem] border-(length:--nb-bw) border-nb-line rounded-nb-sm bg-nb-surface px-3 font-nb text-[.95rem] leading-none font-extrabold text-nb-ink no-underline shadow-nb-sm transition-[translate,box-shadow] duration-[120ms] motion-reduce:transition-none hover:[translate:-1px_-1px] hover:shadow-nb active:[translate:var(--nb-press-sm)] active:shadow-none aria-[current=page]:[translate:var(--nb-press-sm)] aria-[current=page]:bg-nb-ink aria-[current=page]:text-nb-paper aria-[current=page]:underline aria-[current=page]:decoration-2 aria-[current=page]:underline-offset-4 aria-[current=page]:shadow-none focus-visible:outline-3 focus-visible:outline-dashed focus-visible:outline-offset-4 focus-visible:outline-nb-focus" href="#" aria-label="Previous page"><svg class="size-5 shrink-0" aria-hidden="true" focusable="false"><use href="#nb-i-arrow-left"/></svg>Prev</a></li>
<li><a class="inline-flex h-11 min-w-11 items-center justify-center gap-[.35rem] border-(length:--nb-bw) border-nb-line rounded-nb-sm bg-nb-surface px-3 font-nb text-[.95rem] leading-none font-extrabold text-nb-ink no-underline shadow-nb-sm transition-[translate,box-shadow] duration-[120ms] motion-reduce:transition-none hover:[translate:-1px_-1px] hover:shadow-nb active:[translate:var(--nb-press-sm)] active:shadow-none aria-[current=page]:[translate:var(--nb-press-sm)] aria-[current=page]:bg-nb-ink aria-[current=page]:text-nb-paper aria-[current=page]:underline aria-[current=page]:decoration-2 aria-[current=page]:underline-offset-4 aria-[current=page]:shadow-none focus-visible:outline-3 focus-visible:outline-dashed focus-visible:outline-offset-4 focus-visible:outline-nb-focus" href="#" aria-label="Page 1">1</a></li>
<li><a class="inline-flex h-11 min-w-11 items-center justify-center gap-[.35rem] border-(length:--nb-bw) border-nb-line rounded-nb-sm bg-nb-surface px-3 font-nb text-[.95rem] leading-none font-extrabold text-nb-ink no-underline shadow-nb-sm transition-[translate,box-shadow] duration-[120ms] motion-reduce:transition-none hover:[translate:-1px_-1px] hover:shadow-nb active:[translate:var(--nb-press-sm)] active:shadow-none aria-[current=page]:[translate:var(--nb-press-sm)] aria-[current=page]:bg-nb-ink aria-[current=page]:text-nb-paper aria-[current=page]:underline aria-[current=page]:decoration-2 aria-[current=page]:underline-offset-4 aria-[current=page]:shadow-none focus-visible:outline-3 focus-visible:outline-dashed focus-visible:outline-offset-4 focus-visible:outline-nb-focus" href="#" aria-label="Page 2">2</a></li>
<li><a class="inline-flex h-11 min-w-11 items-center justify-center gap-[.35rem] border-(length:--nb-bw) border-nb-line rounded-nb-sm bg-nb-surface px-3 font-nb text-[.95rem] leading-none font-extrabold text-nb-ink no-underline shadow-nb-sm transition-[translate,box-shadow] duration-[120ms] motion-reduce:transition-none hover:[translate:-1px_-1px] hover:shadow-nb active:[translate:var(--nb-press-sm)] active:shadow-none aria-[current=page]:[translate:var(--nb-press-sm)] aria-[current=page]:bg-nb-ink aria-[current=page]:text-nb-paper aria-[current=page]:underline aria-[current=page]:decoration-2 aria-[current=page]:underline-offset-4 aria-[current=page]:shadow-none focus-visible:outline-3 focus-visible:outline-dashed focus-visible:outline-offset-4 focus-visible:outline-nb-focus" href="#" aria-label="Page 3" aria-current="page">3</a></li>
<li><a class="inline-flex h-11 min-w-11 items-center justify-center gap-[.35rem] border-(length:--nb-bw) border-nb-line rounded-nb-sm bg-nb-surface px-3 font-nb text-[.95rem] leading-none font-extrabold text-nb-ink no-underline shadow-nb-sm transition-[translate,box-shadow] duration-[120ms] motion-reduce:transition-none hover:[translate:-1px_-1px] hover:shadow-nb active:[translate:var(--nb-press-sm)] active:shadow-none aria-[current=page]:[translate:var(--nb-press-sm)] aria-[current=page]:bg-nb-ink aria-[current=page]:text-nb-paper aria-[current=page]:underline aria-[current=page]:decoration-2 aria-[current=page]:underline-offset-4 aria-[current=page]:shadow-none focus-visible:outline-3 focus-visible:outline-dashed focus-visible:outline-offset-4 focus-visible:outline-nb-focus" href="#" aria-label="Page 4">4</a></li>
<li class="px-[.2rem] font-extrabold" aria-hidden="true">…</li>
<li><a class="inline-flex h-11 min-w-11 items-center justify-center gap-[.35rem] border-(length:--nb-bw) border-nb-line rounded-nb-sm bg-nb-surface px-3 font-nb text-[.95rem] leading-none font-extrabold text-nb-ink no-underline shadow-nb-sm transition-[translate,box-shadow] duration-[120ms] motion-reduce:transition-none hover:[translate:-1px_-1px] hover:shadow-nb active:[translate:var(--nb-press-sm)] active:shadow-none aria-[current=page]:[translate:var(--nb-press-sm)] aria-[current=page]:bg-nb-ink aria-[current=page]:text-nb-paper aria-[current=page]:underline aria-[current=page]:decoration-2 aria-[current=page]:underline-offset-4 aria-[current=page]:shadow-none focus-visible:outline-3 focus-visible:outline-dashed focus-visible:outline-offset-4 focus-visible:outline-nb-focus" href="#" aria-label="Page 12">12</a></li>
<li><a class="inline-flex h-11 min-w-11 items-center justify-center gap-[.35rem] border-(length:--nb-bw) border-nb-line rounded-nb-sm bg-nb-surface px-3 font-nb text-[.95rem] leading-none font-extrabold text-nb-ink no-underline shadow-nb-sm transition-[translate,box-shadow] duration-[120ms] motion-reduce:transition-none hover:[translate:-1px_-1px] hover:shadow-nb active:[translate:var(--nb-press-sm)] active:shadow-none aria-[current=page]:[translate:var(--nb-press-sm)] aria-[current=page]:bg-nb-ink aria-[current=page]:text-nb-paper aria-[current=page]:underline aria-[current=page]:decoration-2 aria-[current=page]:underline-offset-4 aria-[current=page]:shadow-none focus-visible:outline-3 focus-visible:outline-dashed focus-visible:outline-offset-4 focus-visible:outline-nb-focus" href="#" aria-label="Next page">Next<svg class="size-5 shrink-0" aria-hidden="true" focusable="false"><use href="#nb-i-arrow-right"/></svg></a></li>
</ul></nav></section>
</div>
</div>
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%);
}
JavaScript
// Tabs: click or arrow keys / Home / End select a tab; only the selected tab is in the Tab order
document.querySelectorAll('[role="tablist"]').forEach(function (list) {
  var tabs = Array.prototype.slice.call(list.querySelectorAll('[role="tab"]'));
  function select(tab, focus) {
    tabs.forEach(function (t) {
      var on = t === tab;
      t.setAttribute('aria-selected', on);
      t.tabIndex = on ? 0 : -1;
      document.getElementById(t.getAttribute('aria-controls')).hidden = !on;
    });
    if (focus) tab.focus();
  }
  tabs.forEach(function (t, i) {
    t.addEventListener('click', function () { select(t); });
    t.addEventListener('keydown', function (e) {
      var n = { ArrowRight: i + 1, ArrowLeft: i - 1, Home: 0, End: tabs.length - 1 }[e.key];
      if (n === undefined) return;
      e.preventDefault();
      select(tabs[(n + tabs.length) % tabs.length], true);
    });
  });
});

About this set

A navbar, a breadcrumb, a sidebar, tabs and pagination that share one rule for where you are: the current item gains a border and a fill, and either lifts onto a small shadow or is pushed into it, so it never relies on colour alone. The navbar carries a tilted logo mark, four links with a lemon current page, a search icon button and a Start free button, and moves its links onto their own row on narrow screens. The breadcrumb underlines its links and boxes the current page in lime. The sidebar groups studio and account links, marks the current one in cyan with an arrow, and shows an unread count as text. The tabs switch between published, draft and scheduled posts; the selected tab is pushed into its shadow, filled lemon and marked with a square, and the ARIA tabs pattern lets arrow keys, Home and End move between them. Pagination uses square page buttons, an ink current page with an underline, and named previous and next links. The plain and Tailwind tabs use about twenty lines of vanilla JavaScript; the Bootstrap version uses Bootstrap’s own tab plugin.

What’s included

  • Current item shown by a border, a fill and a change of shadow
  • aria-current on the navbar, breadcrumb, sidebar and pagination
  • ARIA tabs with arrow key, Home and End support
  • Pagination with named previous, next and page links
  • Bootstrap version on .navbar, .breadcrumb, .nav, .pagination and the tab plugin

Accessibility

Each navigation region is a nav element with its own label, the current page is marked with aria-current="page", and page links read as Page 3 rather than a bare number. Tabs use role="tablist", "tab" and "tabpanel" with aria-selected, aria-controls and a roving tabindex. Every link, tab and panel shows a 3px dashed focus outline, and transitions stop under prefers-reduced-motion.

Customise it

Edit the --nb-* tokens for colour, border and shadow. In Bootstrap the rules set --bs-navbar-*, --bs-breadcrumb-* and --bs-pagination-* from the tokens; in Tailwind the current state uses aria-[current=page]: and aria-selected: variants with bg-nb-lemon, shadow-nb-sm and [translate:var(--nb-press)].