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-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-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-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-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-download" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M12 4v11M7.5 10.5 12 15l4.5-4.5M4.5 19.5h15"/></symbol>
</svg>
<div class="nb-dash" data-nb>
<aside class="nb-dash__side">
<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>
<nav aria-label="Studio"><ul class="nb-side__list">
<li><a class="nb-side__link" href="#" aria-current="page"><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="#"><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>
<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>
</ul></nav>
<div class="nb-promo"><p>Studio members get 20% off every print run.</p><a class="nb-btn nb-btn--sm nb-btn--lemon" href="#">Go Studio</a></div>
</aside>
<main class="nb-dash__main">
<header class="nb-dash__top"><div><p class="nb-dash__date">Friday 16 October</p><h1 class="nb-dash__title nb-display">Morning, Mira</h1></div>
<div class="nb-dash__actions"><label class="nb-switch nb-theme"><input class="nb-sr nb-theme-input" type="checkbox" role="switch"><span class="nb-switch__text">Dark mode</span><span class="nb-switch__state" aria-hidden="true"></span><span class="nb-switch__track" aria-hidden="true"></span></label>
<a class="nb-btn nb-btn--lemon" href="#"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-plus"/></svg>New post</a></div></header>
<section class="nb-dash__stats" aria-label="This month">
<article class="nb-card nb-card--lemon nb-stat"><div class="nb-stat__top"><h2 class="nb-stat__label">Subscribers</h2><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"><h2 class="nb-stat__label">Revenue</h2><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"><h2 class="nb-stat__label">Open rate</h2><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>
</section>
<div class="nb-dash__row">
<section class="nb-card" aria-labelledby="h-earn"><div class="nb-panel__head"><h2 class="nb-panel__title nb-display" id="h-earn">Earnings this week</h2><span class="nb-sticker nb-sticker--lime">$3,372 total</span></div>
<ol class="nb-chart" aria-labelledby="h-earn">
<li><span class="nb-sr">Monday: </span>$412<span class="nb-chart__bar" style="--h:57%"></span></li>
<li><span class="nb-sr">Tuesday: </span>$380<span class="nb-chart__bar" style="--h:53%"></span></li>
<li><span class="nb-sr">Wednesday: </span>$520<span class="nb-chart__bar" style="--h:72%"></span></li>
<li><span class="nb-sr">Thursday: </span>$465<span class="nb-chart__bar" style="--h:65%"></span></li>
<li class="is-top"><span class="nb-sr">Friday, the top day: </span>$690<span class="nb-chart__bar" style="--h:96%"></span></li>
<li><span class="nb-sr">Saturday: </span>$610<span class="nb-chart__bar" style="--h:85%"></span></li>
<li><span class="nb-sr">Sunday: </span>$295<span class="nb-chart__bar" style="--h:41%"></span></li>
</ol>
<p class="nb-chart-days" aria-hidden="true"><span>Mon</span><span>Tue</span><span>Wed</span><span>Thu</span><span>Fri</span><span>Sat</span><span>Sun</span></p></section>
<section class="nb-card" aria-labelledby="h-next"><div class="nb-panel__head"><h2 class="nb-panel__title nb-display" id="h-next">Coming up</h2></div><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--pink">Drop</span></li>
<li><span>Live Q&A with members<small>Tue 3 Nov, 19:30</small></span><span class="nb-badge nb-badge--lemon">Live</span></li>
</ul></section>
</div>
<div class="nb-dash__row">
<section class="nb-card" aria-labelledby="h-posts"><div class="nb-panel__head"><h2 class="nb-panel__title nb-display" id="h-posts">Recent posts</h2><a class="nb-link" href="#">All posts</a></div><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></section>
<section class="nb-card nb-card--lemon nb-payout" aria-labelledby="h-pay"><div class="nb-panel__head"><h2 class="nb-panel__title nb-display" id="h-pay">Payout</h2><span class="nb-sticker nb-sticker--pink nb-sticker--right">Fri 23 Oct</span></div>
<p class="nb-stat__label">Available to withdraw</p><p class="nb-payout__amount nb-display">$1,284.50</p>
<div class="nb-progress"><div class="nb-progress__top"><span id="pr-pay">Monthly goal</span><span>$4,920 of $6,000</span></div><div class="nb-bar nb-bar--pink" role="progressbar" aria-labelledby="pr-pay" aria-valuenow="4920" aria-valuemin="0" aria-valuemax="6000" aria-valuetext="$4,920 of $6,000"><span class="nb-bar__fill" style="--p:82%"></span></div></div>
<div class="nb-actions"><a class="nb-btn nb-btn--ink" href="#"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-download"/></svg>Withdraw</a><a class="nb-btn" href="#">History</a></div></section>
</div>
</main>
</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}
/* Switches: a checkbox with role="switch". On = the square knob slides right, the track fills lime and the label says On */
.nb-switch{position:relative;display:flex;align-items:center;gap:.8rem;cursor:pointer}
.nb-switch__text{flex:1;min-width:0;font-weight:800;line-height:1.3}
.nb-switch__text small{display:block;margin-top:.1rem;font-size:.85rem;font-weight:500;color:var(--nb-muted)}
.nb-switch__state{min-width:2.2em;font-size:.75rem;font-weight:800;letter-spacing:.08em;text-align:right;text-transform:uppercase}
.nb-switch__state::after{content:"Off"}
.nb-switch__track{position:relative;flex:none;width:70px;height:36px;border:var(--nb-border);border-radius:var(--nb-radius-sm);background:var(--nb-paper);
  box-shadow:var(--nb-shadow-sm);transition:background-color .12s}
.nb-switch__track::before{content:"";position:absolute;top:3px;left:3px;width:24px;height:24px;border:var(--nb-border);border-radius:4px;background:var(--nb-surface);transition:translate .15s}
.nb-switch input:checked~.nb-switch__track{background:var(--nb-lime)}
.nb-switch input:checked~.nb-switch__track::before{translate:34px 0;border-color:var(--nb-on-fill);background:var(--nb-on-fill)}
.nb-switch input:checked~.nb-switch__state::after{content:"On"}
.nb-switch input:focus-visible~.nb-switch__track{outline:3px dashed var(--nb-focus);outline-offset:4px}
/* 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}
/* 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}}
/* 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}
/* 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)}
/* Progress: labelled bars with a hatched fill and the value written out */
.nb-progress{display:grid;gap:.45rem}
.nb-progress__top{display:flex;justify-content:space-between;gap:1rem;font-weight:800}
.nb-progress__top span{font-variant-numeric:tabular-nums}
.nb-bar{height:24px;border:var(--nb-border);border-radius:999px;background:var(--nb-surface);overflow:hidden}
.nb-bar__fill{display:block;width:var(--p);height:100%;border-right:var(--nb-border);background:repeating-linear-gradient(-45deg,transparent 0 8px,rgba(17,17,17,.22) 8px 11px),var(--nb-tone,var(--nb-lime))}
.nb-bar--pink{--nb-tone:var(--nb-pink)}.nb-bar--cyan{--nb-tone:var(--nb-cyan)}.nb-bar--lemon{--nb-tone:var(--nb-lemon)}
.nb-steps{display:grid;grid-template-columns:repeat(4,1fr);gap:6px;margin:0;padding:0;list-style:none;counter-reset:nb-step}
.nb-steps li{display:grid;gap:.35rem;font-size:.8rem;font-weight:800}
.nb-steps li::before{content:"";height:14px;border:var(--nb-border);border-radius:4px;background:var(--nb-surface)}
.nb-steps li.is-done::before{background:var(--nb-lime)}
.nb-steps li[aria-current="step"]::before{background:repeating-linear-gradient(-45deg,var(--nb-lemon) 0 6px,var(--nb-surface) 6px 10px)}
/* 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}
/* Creator dashboard: sidebar + main grid; the theme switch is a checkbox and :has() swaps every token */
.nb-dash{display:grid;grid-template-columns:250px minmax(0,1fr);border:var(--nb-border);border-radius:var(--nb-radius);overflow:hidden;box-shadow:var(--nb-shadow-lg);font-family:var(--nb-font)}
.nb-dash__side{display:flex;flex-direction:column;gap:1.4rem;padding:1.25rem;border-right:var(--nb-border);background:var(--nb-surface)}
.nb-dash__main{display:grid;gap:28px;align-content:start;min-width:0;padding:1.6rem}
.nb-dash__top{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:1rem 1.5rem}
.nb-dash__date{margin:0;font-weight:700;color:var(--nb-muted)}
.nb-dash__title{margin:.15rem 0 0;font-size:2.2rem}
.nb-dash__actions{display:flex;flex-wrap:wrap;align-items:center;gap:1.2rem}
.nb-dash__stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,190px),1fr));gap:22px}
.nb-dash__row{display:grid;grid-template-columns:minmax(0,1.35fr) minmax(0,1fr);gap:28px;align-items:start}
.nb-panel__head{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:.5rem 1rem;margin-bottom:1rem}
.nb-panel__title{margin:0;font-size:1.25rem}
.nb-promo{margin-top:auto;padding:1rem;border:var(--nb-border);border-radius:var(--nb-radius-sm);background:var(--nb-pink);color:var(--nb-on-fill);box-shadow:var(--nb-shadow)}
.nb-promo p{margin:0 0 .75rem;font-weight:700;line-height:1.35}
.nb-theme{gap:.6rem}
.nb-theme .nb-switch__text{flex:none}
.nb-chart{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));align-items:end;gap:10px;height:190px;margin:0;padding:0;border-bottom:var(--nb-border);list-style:none}
.nb-chart li{display:flex;flex-direction:column;justify-content:flex-end;align-items:center;gap:.3rem;height:100%;font-size:.75rem;font-weight:800;font-variant-numeric:tabular-nums}
.nb-chart__bar{width:100%;height:var(--h);border:var(--nb-border);border-bottom:0;border-radius:6px 6px 0 0;background:var(--nb-lime)}
.nb-chart .is-top .nb-chart__bar{background:var(--nb-pink)}
.nb-chart-days{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:10px;margin:.4rem 0 0;font-size:.75rem;font-weight:800;text-align:center;color:var(--nb-muted)}
.nb-payout__amount{margin:.2rem 0 1rem!important;font-size:2.4rem}
.nb-payout .nb-actions{justify-content:flex-start;margin-top:1.1rem}
@media (max-width:1000px){.nb-dash__row{grid-template-columns:minmax(0,1fr)}}
@media (max-width:900px){.nb-dash{grid-template-columns:minmax(0,1fr)}.nb-dash__side{border-right:0;border-bottom:var(--nb-border)}
  .nb-dash__side .nb-side__list{display:flex;flex-wrap:wrap}.nb-promo{display:none}}
@media (max-width:600px){.nb-dash__main{padding:1.1rem}.nb-dash__title{font-size:1.8rem}.nb-chart,.nb-chart-days{gap:5px}}
@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-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-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-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-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-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-download" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M12 4v11M7.5 10.5 12 15l4.5-4.5M4.5 19.5h15"/></symbol>
</svg>
<div class="nb-dash" data-nb>
<aside class="nb-dash__side">
<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>
<nav class="nb-side-nav" aria-label="Studio"><ul class="nav flex-column">
<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-grid"/></svg>Dashboard</a></li>
<li class="nav-item"><a class="nav-link" href="#"><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>
<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>
</ul></nav>
<div class="nb-promo"><p>Studio members get 20% off every print run.</p><a class="btn btn-nb btn-sm btn-nb-lemon" href="#">Go Studio</a></div>
</aside>
<main class="nb-dash__main">
<header class="nb-dash__top"><div><p class="nb-dash__date">Friday 16 October</p><h1 class="nb-dash__title nb-display">Morning, Mira</h1></div>
<div class="nb-dash__actions"><div class="form-check form-switch nb-switch nb-theme"><input class="form-check-input nb-theme-input" type="checkbox" role="switch" id="theme-dark"><label class="form-check-label" for="theme-dark">Dark mode</label><span class="nb-switch-state" aria-hidden="true"></span></div>
<a class="btn btn-nb btn-nb-lemon" href="#"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-plus"/></svg>New post</a></div></header>
<section class="nb-dash__stats" aria-label="This month">
<article class="card nb-card nb-card-lemon"><div class="card-body nb-stat"><div class="nb-stat__top"><h2 class="nb-stat__label">Subscribers</h2><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"><h2 class="nb-stat__label">Revenue</h2><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"><h2 class="nb-stat__label">Open rate</h2><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>
</section>
<div class="nb-dash__row">
<section class="card nb-card" aria-labelledby="h-earn"><div class="card-body"><div class="nb-panel__head"><h2 class="nb-panel__title nb-display" id="h-earn">Earnings this week</h2><span class="badge nb-sticker nb-sticker-lime">$3,372 total</span></div>
<ol class="nb-chart" aria-labelledby="h-earn">
<li><span class="visually-hidden">Monday: </span>$412<span class="nb-chart__bar" style="--h:57%"></span></li>
<li><span class="visually-hidden">Tuesday: </span>$380<span class="nb-chart__bar" style="--h:53%"></span></li>
<li><span class="visually-hidden">Wednesday: </span>$520<span class="nb-chart__bar" style="--h:72%"></span></li>
<li><span class="visually-hidden">Thursday: </span>$465<span class="nb-chart__bar" style="--h:65%"></span></li>
<li class="is-top"><span class="visually-hidden">Friday, the top day: </span>$690<span class="nb-chart__bar" style="--h:96%"></span></li>
<li><span class="visually-hidden">Saturday: </span>$610<span class="nb-chart__bar" style="--h:85%"></span></li>
<li><span class="visually-hidden">Sunday: </span>$295<span class="nb-chart__bar" style="--h:41%"></span></li>
</ol>
<p class="nb-chart-days" aria-hidden="true"><span>Mon</span><span>Tue</span><span>Wed</span><span>Thu</span><span>Fri</span><span>Sat</span><span>Sun</span></p></div></section>
<section class="card nb-card" aria-labelledby="h-next"><div class="card-body"><div class="nb-panel__head"><h2 class="nb-panel__title nb-display" id="h-next">Coming up</h2></div><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-pink">Drop</span></li>
<li><span>Live Q&A with members<small>Tue 3 Nov, 19:30</small></span><span class="badge nb-badge nb-badge-lemon">Live</span></li>
</ul></div></section>
</div>
<div class="nb-dash__row">
<section class="card nb-card" aria-labelledby="h-posts"><div class="card-body"><div class="nb-panel__head"><h2 class="nb-panel__title nb-display" id="h-posts">Recent posts</h2><a class="nb-link" href="#">All posts</a></div><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></section>
<section class="card nb-card nb-card-lemon" aria-labelledby="h-pay"><div class="card-body nb-payout"><div class="nb-panel__head"><h2 class="nb-panel__title nb-display" id="h-pay">Payout</h2><span class="badge nb-sticker nb-sticker-pink nb-sticker-right">Fri 23 Oct</span></div>
<p class="nb-stat__label m-0">Available to withdraw</p><p class="nb-payout__amount nb-display">$1,284.50</p>
<div class="nb-progress"><div class="nb-progress__top"><span id="pr-pay">Monthly goal</span><span>$4,920 of $6,000</span></div><div class="progress nb-bar nb-bar-pink" role="progressbar" aria-labelledby="pr-pay" aria-valuenow="4920" aria-valuemin="0" aria-valuemax="6000" aria-valuetext="$4,920 of $6,000"><div class="progress-bar" style="width:82%"></div></div></div>
<div class="nb-actions"><a class="btn btn-nb btn-nb-ink" href="#"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-download"/></svg>Withdraw</a><a class="btn btn-nb" href="#">History</a></div></div></section>
</div>
</main>
</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}
/* Switches: Bootstrap .form-check.form-switch. The square knob is two token-coloured gradients, so it follows the dark theme */
.nb-switch{display:flex;align-items:center;gap:.8rem;min-height:0;margin:0;padding:0}
.nb-switch .form-check-label{flex:1;min-width:0;font-weight:800;line-height:1.3;cursor:pointer}
.nb-switch .form-check-label small{display:block;margin-top:.1rem;font-size:.85rem;font-weight:500;color:var(--nb-muted)}
.nb-switch .nb-switch-state{min-width:2.2em;font-size:.75rem;font-weight:800;letter-spacing:.08em;text-align:right;text-transform:uppercase}
.nb-switch .nb-switch-state::after{content:"Off"}
.nb-switch.form-switch .form-check-input{--nb-knob:var(--nb-surface);--nb-knob-edge:var(--nb-line);--nb-knob-x:3px;
  order:3;flex:none;float:none;width:70px;height:36px;margin:0;border:var(--nb-border);border-radius:var(--nb-radius-sm);cursor:pointer;
  background:linear-gradient(var(--nb-knob),var(--nb-knob)) calc(var(--nb-knob-x) + 3px) 6px/18px 18px no-repeat,
    linear-gradient(var(--nb-knob-edge),var(--nb-knob-edge)) var(--nb-knob-x) 3px/24px 24px no-repeat,var(--nb-paper);
  box-shadow:var(--nb-shadow-sm);transition:background-position .15s,background-color .12s}
.nb-switch.form-switch .form-check-input:checked{--nb-knob:var(--nb-on-fill);--nb-knob-edge:var(--nb-on-fill);--nb-knob-x:37px;background-color:var(--nb-lime);border-color:var(--nb-line)}
.nb-switch.form-switch .form-check-input:focus{border-color:var(--nb-line);box-shadow:var(--nb-shadow-sm)}
.nb-switch.form-switch .form-check-input:focus-visible{outline:3px dashed var(--nb-focus);outline-offset:4px}
.nb-switch .form-check-input:checked~.nb-switch-state::after{content:"On"}
/* 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}
.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}}
/* 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}
/* 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)}
/* Progress: Bootstrap .progress with a hatched .progress-bar and the value written out */
.nb-progress{display:grid;gap:.45rem}
.nb-progress__top{display:flex;justify-content:space-between;gap:1rem;font-weight:800}
.nb-progress__top span{font-variant-numeric:tabular-nums}
.progress.nb-bar{--bs-progress-height:24px;--bs-progress-bg:var(--nb-surface);--bs-progress-border-radius:999px;--bs-progress-bar-bg:var(--nb-tone,var(--nb-lime));border:var(--nb-border)}
.nb-bar .progress-bar{border-right:var(--nb-border);background-image:repeating-linear-gradient(-45deg,transparent 0 8px,rgba(17,17,17,.22) 8px 11px)}
.nb-bar-pink{--nb-tone:var(--nb-pink)}.nb-bar-cyan{--nb-tone:var(--nb-cyan)}.nb-bar-lemon{--nb-tone:var(--nb-lemon)}
.nb-steps{display:grid;grid-template-columns:repeat(4,1fr);gap:6px;margin:0;padding:0;list-style:none}
.nb-steps li{display:grid;gap:.35rem;font-size:.8rem;font-weight:800}
.nb-steps li::before{content:"";height:14px;border:var(--nb-border);border-radius:4px;background:var(--nb-surface)}
.nb-steps li.is-done::before{background:var(--nb-lime)}
.nb-steps li[aria-current="step"]::before{background:repeating-linear-gradient(-45deg,var(--nb-lemon) 0 6px,var(--nb-surface) 6px 10px)}
/* 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}
/* Creator dashboard: sidebar + main grid; the theme switch is a checkbox and :has() swaps every token */
.nb-dash{display:grid;grid-template-columns:250px minmax(0,1fr);border:var(--nb-border);border-radius:var(--nb-radius);overflow:hidden;box-shadow:var(--nb-shadow-lg);font-family:var(--nb-font)}
.nb-dash__side{display:flex;flex-direction:column;gap:1.4rem;padding:1.25rem;border-right:var(--nb-border);background:var(--nb-surface)}
.nb-dash__main{display:grid;gap:28px;align-content:start;min-width:0;padding:1.6rem}
.nb-dash__top{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:1rem 1.5rem}
.nb-dash__date{margin:0;font-weight:700;color:var(--nb-muted)}
.nb-dash__title{margin:.15rem 0 0;font-size:2.2rem}
.nb-dash__actions{display:flex;flex-wrap:wrap;align-items:center;gap:1.2rem}
.nb-dash__stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,190px),1fr));gap:22px}
.nb-dash__row{display:grid;grid-template-columns:minmax(0,1.35fr) minmax(0,1fr);gap:28px;align-items:start}
.nb-panel__head{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:.5rem 1rem;margin-bottom:1rem}
.nb-panel__title{margin:0;font-size:1.25rem}
.nb-promo{margin-top:auto;padding:1rem;border:var(--nb-border);border-radius:var(--nb-radius-sm);background:var(--nb-pink);color:var(--nb-on-fill);box-shadow:var(--nb-shadow)}
.nb-promo p{margin:0 0 .75rem;font-weight:700;line-height:1.35}
.nb-theme{gap:.6rem}
.nb-theme .nb-switch__text,.nb-theme .form-check-label{flex:none}
.nb-chart{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));align-items:end;gap:10px;height:190px;margin:0;padding:0;border-bottom:var(--nb-border);list-style:none}
.nb-chart li{display:flex;flex-direction:column;justify-content:flex-end;align-items:center;gap:.3rem;height:100%;font-size:.75rem;font-weight:800;font-variant-numeric:tabular-nums}
.nb-chart__bar{width:100%;height:var(--h);border:var(--nb-border);border-bottom:0;border-radius:6px 6px 0 0;background:var(--nb-lime)}
.nb-chart .is-top .nb-chart__bar{background:var(--nb-pink)}
.nb-chart-days{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:10px;margin:.4rem 0 0;font-size:.75rem;font-weight:800;text-align:center;color:var(--nb-muted)}
.nb-payout__amount{margin:.2rem 0 1rem!important;font-size:2.4rem}
.nb-payout .nb-actions{justify-content:flex-start;margin-top:1.1rem}
.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:hover{color:var(--nb-ink)}
.nb-brand:focus-visible{outline:3px dashed var(--nb-focus);outline-offset:4px;border-radius:4px}
.nb-dash .nb-stat__label{font-size:.8rem}
@media (max-width:1000px){.nb-dash__row{grid-template-columns:minmax(0,1fr)}}
@media (max-width:900px){.nb-dash{grid-template-columns:minmax(0,1fr)}.nb-dash__side{border-right:0;border-bottom:var(--nb-border)}
  .nb-dash__side .nav{flex-direction:row!important;flex-wrap:wrap}.nb-promo{display:none}}
@media (max-width:600px){.nb-dash__main{padding:1.1rem}.nb-dash__title{font-size:1.8rem}.nb-chart,.nb-chart-days{gap:5px}}
@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-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-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-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-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-download" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M12 4v11M7.5 10.5 12 15l4.5-4.5M4.5 19.5h15"/></symbol>
</svg>
<div class="grid grid-cols-1 overflow-hidden border-(length:--nb-bw) border-nb-line rounded-nb font-nb shadow-nb-lg min-[901px]:grid-cols-[250px_minmax(0,1fr)]" data-nb>
<aside class="flex flex-col gap-[1.4rem] border-b-(length:--nb-bw) border-nb-line bg-nb-surface p-5 min-[901px]:border-r-(length:--nb-bw) min-[901px]:border-b-0">
<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>
<nav aria-label="Studio"><ul class="m-0 flex list-none flex-wrap gap-[.3rem] p-0 min-[901px]:grid"><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-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="#"><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><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></ul></nav>
<div class="mt-auto hidden border-(length:--nb-bw) border-nb-line rounded-nb-sm bg-nb-pink p-4 text-nb-on-fill shadow-nb min-[901px]:block"><p class="m-0 mb-3 leading-[1.35] font-bold">Studio members get 20% off every print run.</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="#">Go Studio</a></div>
</aside>
<main class="grid min-w-0 content-start gap-7 p-[1.1rem] min-[601px]:p-[1.6rem]">
<header class="flex flex-wrap items-center justify-between gap-x-6 gap-y-4"><div><p class="m-0 font-bold text-nb-muted">Friday 16 October</p><h1 class="m-0 mt-[.15rem] text-[1.8rem] min-[601px]:text-[2.2rem] font-nb-display font-black tracking-[-.01em] leading-[1.05]">Morning, Mira</h1></div>
<div class="flex flex-wrap items-center gap-5"><label class="group relative flex cursor-pointer items-center gap-[.8rem]"><input class="peer sr-only nb-theme-input" type="checkbox" role="switch"><span class="leading-[1.3] font-extrabold">Dark mode</span><span class="min-w-[2.2em] text-right text-[.75rem] font-extrabold tracking-[.08em] uppercase after:content-['Off'] peer-checked:after:content-['On']" aria-hidden="true"></span><span class="relative h-9 w-[70px] flex-none border-(length:--nb-bw) border-nb-line rounded-nb-sm bg-nb-paper shadow-nb-sm transition-colors duration-[120ms] motion-reduce:transition-none before:absolute before:top-[3px] before:left-[3px] before:size-6 before:rounded-[4px] before:border-(length:--nb-bw) before:border-nb-line before:bg-nb-surface before:content-[''] before:transition-[translate] before:duration-150 motion-reduce:before:transition-none peer-checked:bg-nb-lime peer-checked:before:translate-x-[34px] peer-checked:before:border-nb-on-fill peer-checked:before:bg-nb-on-fill peer-focus-visible:outline-3 peer-focus-visible:outline-dashed peer-focus-visible:outline-offset-[4px] peer-focus-visible:outline-nb-focus" aria-hidden="true"></span></label>
<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-lemon text-nb-on-fill" href="#"><svg class="size-5 shrink-0" aria-hidden="true" focusable="false"><use href="#nb-i-plus"/></svg>New post</a></div></header>
<section class="grid grid-cols-[repeat(auto-fit,minmax(min(100%,190px),1fr))] gap-[22px]" aria-label="This month">
<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"><h2 class="m-0 text-[.8rem] font-extrabold tracking-[.08em] uppercase">Subscribers</h2><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"><h2 class="m-0 text-[.8rem] font-extrabold tracking-[.08em] uppercase">Revenue</h2><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"><h2 class="m-0 text-[.8rem] font-extrabold tracking-[.08em] uppercase">Open rate</h2><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>
</section>
<div class="grid grid-cols-1 items-start gap-7 min-[1001px]:grid-cols-[minmax(0,1.35fr)_minmax(0,1fr)]">
<section 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" aria-labelledby="h-earn"><div class="mb-4 flex flex-wrap items-center justify-between gap-x-4 gap-y-2"><h2 class="m-0 text-[1.25rem] font-nb-display font-black tracking-[-.01em] leading-[1.05]" id="h-earn">Earnings this week</h2><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-lime">$3,372 total</span></div>
<ol class="m-0 grid h-[190px] list-none grid-cols-7 items-end gap-[5px] border-b-(length:--nb-bw) border-nb-line p-0 min-[601px]:gap-2.5" aria-labelledby="h-earn"><li class="flex h-full flex-col items-center justify-end gap-[.3rem] text-[.75rem] font-extrabold tabular-nums"><span class="sr-only">Monday: </span>$412<span class="w-full rounded-t-md border-(length:--nb-bw) border-b-0 border-nb-line bg-nb-lime h-[57%]"></span></li><li class="flex h-full flex-col items-center justify-end gap-[.3rem] text-[.75rem] font-extrabold tabular-nums"><span class="sr-only">Tuesday: </span>$380<span class="w-full rounded-t-md border-(length:--nb-bw) border-b-0 border-nb-line bg-nb-lime h-[53%]"></span></li><li class="flex h-full flex-col items-center justify-end gap-[.3rem] text-[.75rem] font-extrabold tabular-nums"><span class="sr-only">Wednesday: </span>$520<span class="w-full rounded-t-md border-(length:--nb-bw) border-b-0 border-nb-line bg-nb-lime h-[72%]"></span></li><li class="flex h-full flex-col items-center justify-end gap-[.3rem] text-[.75rem] font-extrabold tabular-nums"><span class="sr-only">Thursday: </span>$465<span class="w-full rounded-t-md border-(length:--nb-bw) border-b-0 border-nb-line bg-nb-lime h-[65%]"></span></li><li class="flex h-full flex-col items-center justify-end gap-[.3rem] text-[.75rem] font-extrabold tabular-nums"><span class="sr-only">Friday, the top day: </span>$690<span class="w-full rounded-t-md border-(length:--nb-bw) border-b-0 border-nb-line bg-nb-pink h-[96%]"></span></li><li class="flex h-full flex-col items-center justify-end gap-[.3rem] text-[.75rem] font-extrabold tabular-nums"><span class="sr-only">Saturday: </span>$610<span class="w-full rounded-t-md border-(length:--nb-bw) border-b-0 border-nb-line bg-nb-lime h-[85%]"></span></li><li class="flex h-full flex-col items-center justify-end gap-[.3rem] text-[.75rem] font-extrabold tabular-nums"><span class="sr-only">Sunday: </span>$295<span class="w-full rounded-t-md border-(length:--nb-bw) border-b-0 border-nb-line bg-nb-lime h-[41%]"></span></li></ol>
<p class="m-0 mt-[.4rem] grid grid-cols-7 gap-[5px] text-center text-[.75rem] font-extrabold text-nb-muted min-[601px]:gap-2.5" aria-hidden="true"><span>Mon</span><span>Tue</span><span>Wed</span><span>Thu</span><span>Fri</span><span>Sat</span><span>Sun</span></p></section>
<section 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" aria-labelledby="h-next"><div class="mb-4 flex flex-wrap items-center justify-between gap-x-4 gap-y-2"><h2 class="m-0 text-[1.25rem] font-nb-display font-black tracking-[-.01em] leading-[1.05]" id="h-next">Coming up</h2></div><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-pink">Drop</span></li><li class="flex items-center justify-between gap-4 border-t-2 border-nb-line py-3 font-bold"><span>Live Q&A with members<small class="block text-[.875em] font-medium text-nb-muted">Tue 3 Nov, 19:30</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">Live</span></li></ul></section>
</div>
<div class="grid grid-cols-1 items-start gap-7 min-[1001px]:grid-cols-[minmax(0,1.35fr)_minmax(0,1fr)]">
<section 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" aria-labelledby="h-posts"><div class="mb-4 flex flex-wrap items-center justify-between gap-x-4 gap-y-2"><h2 class="m-0 text-[1.25rem] font-nb-display font-black tracking-[-.01em] leading-[1.05]" id="h-posts">Recent posts</h2><a class="font-bold text-inherit underline decoration-2 underline-offset-[3px] hover:decoration-4 focus-visible:rounded-[2px] focus-visible:outline-3 focus-visible:outline-dashed focus-visible:outline-offset-[3px] focus-visible:outline-nb-focus" href="#">All posts</a></div><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></section>
<section 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" aria-labelledby="h-pay"><div class="mb-4 flex flex-wrap items-center justify-between gap-x-4 gap-y-2"><h2 class="m-0 text-[1.25rem] font-nb-display font-black tracking-[-.01em] leading-[1.05]" id="h-pay">Payout</h2><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">Fri 23 Oct</span></div>
<p class="m-0 text-[.8rem] font-extrabold tracking-[.08em] uppercase">Available to withdraw</p><p class="m-0 mt-[.2rem] mb-4 text-[2.4rem] font-nb-display font-black tracking-[-.01em] leading-[1.05]">$1,284.50</p>
<div class="grid gap-[.45rem]"><div class="flex justify-between gap-4 font-extrabold [&_span]:tabular-nums"><span id="pr-pay">Monthly goal</span><span>$4,920 of $6,000</span></div><div class="h-6 overflow-hidden rounded-full border-(length:--nb-bw) border-nb-line bg-nb-surface" role="progressbar" aria-labelledby="pr-pay" aria-valuenow="4920" aria-valuemin="0" aria-valuemax="6000" aria-valuetext="$4,920 of $6,000"><span class="block h-full border-r-(length:--nb-bw) border-nb-line bg-[repeating-linear-gradient(-45deg,transparent_0_8px,rgba(17,17,17,.22)_8px_11px)] w-[82%] bg-nb-pink"></span></div></div>
<div class="mt-[1.1rem] flex flex-wrap gap-3.5"><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" href="#"><svg class="size-5 shrink-0" aria-hidden="true" focusable="false"><use href="#nb-i-download"/></svg>Withdraw</a><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" href="#">History</a></div></section>
</div>
</main>
</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%);
}

About this set

A full creator dashboard assembled from the kit, with a light and dark switch that needs no JavaScript. A sidebar with the logo, six links, a members count and a pink promo card sits beside a greeting, three stat cards for subscribers, revenue and open rate, a bar chart of the week’s earnings with the top day in pink, a coming up list of scheduled episodes and drops, a recent posts list with Public and Members badges, and a lemon payout card with the amount to withdraw, a progress bar toward the monthly goal and Withdraw and History buttons. The dark mode switch is a checkbox with the class nb-theme-input; the token block’s [data-nb]:has(.nb-theme-input:checked) rule swaps every token to the dark set, so the whole dashboard changes theme in CSS alone and the fills keep their dark text. The chart is an ordered list whose items read as Monday: $412, with the day labels hidden from screen readers. Use it as a starting point for a creator, newsletter or shop admin. Under 900 pixels the sidebar moves above the content and its links wrap, and the panels stack.

What’s included

  • Light and dark theme switch built on :has(), no JavaScript
  • Sidebar, stat cards, bar chart, lists, payout card and promo
  • Uses the same tokens and components as the rest of the kit
  • Bar chart as a readable ordered list
  • Bootstrap version on .card, .nav, .form-switch, .badge and .progress

Accessibility

The page has a labelled navigation with aria-current, one h1 and an h2 for each panel, and every panel is a section named by its heading. The theme switch is a native checkbox with role="switch" and a visible On or Off word, the chart reads each day with its amount, and the payout bar is a labelled progressbar. Focus shows a dashed outline in both themes, and transitions stop under prefers-reduced-motion.

Customise it

Change the --nb-* tokens on :root for the light theme and in the [data-nb] dark rule for the dark one. Column widths come from .nb-dash and .nb-dash__row; in Tailwind edit the min-[901px]:grid-cols-[250px_minmax(0,1fr)] utility on the root.