Open demo

CSS code

HTML
<svg width="0" height="0" style="position:absolute" aria-hidden="true" focusable="false">
  <symbol id="nb-i-send" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M20.5 3.5 3.5 10.5l7 3 3 7z"/><path d="m10.5 13.5 4-4"/></symbol>
  <symbol id="nb-i-video" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="6" width="13" height="12" rx="1.5"/><path d="m16 10.5 5-3v9l-5-3z"/></symbol>
  <symbol id="nb-i-calendar" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><rect x="3.5" y="5" width="17" height="15.5" rx="1.5"/><path d="M3.5 10h17M8 3v4M16 3v4"/></symbol>
  <symbol id="nb-i-eye" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M2.5 12S6 5.5 12 5.5 21.5 12 21.5 12 18 18.5 12 18.5 2.5 12 2.5 12z"/><circle cx="12" cy="12" r="3"/></symbol>
  <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-link" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M10 14a4.5 4.5 0 0 0 6.4 0l3-3a4.5 4.5 0 0 0-6.4-6.4l-1.2 1.2M14 10a4.5 4.5 0 0 0-6.4 0l-3 3a4.5 4.5 0 0 0 6.4 6.4l1.2-1.2"/></symbol>
  <symbol id="nb-i-share" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M12 15V4M7.5 8.5 12 4l4.5 4.5M5 13v6.5h14V13"/></symbol>
  <symbol id="nb-i-heart" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M12 20s-8-4.8-8-10.5A4.5 4.5 0 0 1 12 7a4.5 4.5 0 0 1 8 2.5C20 15.2 12 20 12 20z"/></symbol>
  <symbol id="nb-i-heart-fill" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path fill="currentColor" d="M12 20s-8-4.8-8-10.5A4.5 4.5 0 0 1 12 7a4.5 4.5 0 0 1 8 2.5C20 15.2 12 20 12 20z"/></symbol>
  <symbol id="nb-i-inbox" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M3.5 13.5 6 4.5h12l2.5 9V19.5h-17zM3.5 13.5h5l1 2.5h5l1-2.5h5"/></symbol>
  <symbol id="nb-i-bell" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M6 16.5V11a6 6 0 0 1 12 0v5.5l1.5 2h-15zM10 21h4"/></symbol>
  <symbol id="nb-i-moon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M20 14.5A8 8 0 0 1 9.5 4a8 8 0 1 0 10.5 10.5z"/></symbol>
  <symbol id="nb-i-search" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><circle cx="10.5" cy="10.5" r="6"/><path d="m15 15 5.5 5.5"/></symbol>
  <symbol id="nb-i-check" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="m4.5 12.5 5 5L19.5 7"/></symbol>
  <symbol id="nb-i-users" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><circle cx="9" cy="8.5" r="3.5"/><path d="M2.5 20a6.5 6.5 0 0 1 13 0M15.5 5.2a3.5 3.5 0 0 1 0 6.6M17.5 14.2a6.5 6.5 0 0 1 4 5.8"/></symbol>
  <symbol id="nb-i-arrow-up" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M12 19.5v-14M6.5 11 12 5.5l5.5 5.5"/></symbol>
  <symbol id="nb-i-dollar" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M12 2.5v19M16.5 6.5H10a3 3 0 0 0 0 6h4a3 3 0 0 1 0 6H7"/></symbol>
  <symbol id="nb-i-mail" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="5.5" width="18" height="13" rx="1.5"/><path d="m3.5 6.5 8.5 7 8.5-7"/></symbol>
  <symbol id="nb-i-arrow-down" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M12 4.5v14M6.5 13l5.5 5.5 5.5-5.5"/></symbol>
  <symbol id="nb-i-alert" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M12 3.5 2.5 20h19z"/><path d="M12 10v4.5M12 17.5h.01"/></symbol>
  <symbol id="nb-i-play" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path fill="currentColor" d="M7.5 4.5v15l12-7.5z"/></symbol>
  <symbol id="nb-i-pause" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path fill="currentColor" d="M6.5 4.5h4v15h-4zM13.5 4.5h4v15h-4z"/></symbol>
</svg>
<div class="nb-dark" data-nb="dark">
<section><span class="lbl">Buttons · cream borders and shadows, fills keep dark text</span><div class="nb-cluster">
<button class="nb-btn nb-btn--lemon" type="button"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-send"/></svg>Publish post</button>
<button class="nb-btn nb-btn--pink" type="button"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-video"/></svg>Go live</button>
<button class="nb-btn nb-btn--cyan" type="button"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-calendar"/></svg>Schedule</button>
<button class="nb-btn" type="button"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-eye"/></svg>Preview</button>
<button class="nb-btn nb-btn--ink" type="button"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-bolt"/></svg>Upgrade plan</button>
<button class="nb-btn nb-btn--blue" type="button"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-link"/></svg>Copy link</button>
<button class="nb-btn nb-btn--icon nb-btn--round" type="button" aria-label="Share"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-share"/></svg></button>
<label class="nb-itoggle"><input class="nb-sr" type="checkbox" aria-label="Favourite" checked><span class="nb-itoggle__face"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-heart"/></svg><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-heart-fill"/></svg></span></label>
</div></section>
<section><span class="lbl">Toggle buttons</span><div class="nb-tiles">
<label class="nb-toggle"><input class="nb-sr" type="checkbox" checked><span class="nb-toggle__face"><span class="nb-toggle__icon"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-inbox"/></svg></span><span class="nb-toggle__name">Comments</span><span class="nb-toggle__state" aria-hidden="true"></span></span></label>
<label class="nb-toggle"><input class="nb-sr" type="checkbox"><span class="nb-toggle__face"><span class="nb-toggle__icon"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-send"/></svg></span><span class="nb-toggle__name">Auto-post</span><span class="nb-toggle__state" aria-hidden="true"></span></span></label>
<label class="nb-toggle"><input class="nb-sr" type="checkbox" checked><span class="nb-toggle__face"><span class="nb-toggle__icon"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-bell"/></svg></span><span class="nb-toggle__name">Notify fans</span><span class="nb-toggle__state" aria-hidden="true"></span></span></label>
<label class="nb-toggle"><input class="nb-sr" type="checkbox"><span class="nb-toggle__face"><span class="nb-toggle__icon"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-moon"/></svg></span><span class="nb-toggle__name">Night mode</span><span class="nb-toggle__state" aria-hidden="true"></span></span></label>
</div></section>
<div class="cols">
<section><span class="lbl">Switches</span><div class="nb-card"><div class="nb-stack">
<label class="nb-switch"><input class="nb-sr" type="checkbox" role="switch" checked><span class="nb-switch__text">Public profile<small>Anyone can find your page</small></span><span class="nb-switch__state" aria-hidden="true"></span><span class="nb-switch__track" aria-hidden="true"></span></label>
<label class="nb-switch"><input class="nb-sr" type="checkbox" role="switch"><span class="nb-switch__text">Tip jar<small>Fans can send one-off tips</small></span><span class="nb-switch__state" aria-hidden="true"></span><span class="nb-switch__track" aria-hidden="true"></span></label>
</div></div></section>
<section><span class="lbl">Field, checkbox and segmented control</span><div class="nb-stack">
<div class="nb-field"><label class="nb-label" for="d-search">Search</label><div class="nb-control"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-search"/></svg><input class="nb-input" id="d-search" type="search" placeholder="Posts, tags or fans"></div></div>
<label class="nb-check"><input class="nb-sr" type="checkbox" checked><span class="nb-check__box"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-check"/></svg></span>Email me about new subscribers</label>
<fieldset class="nb-seg"><legend class="nb-seg__legend">Post visibility</legend><div class="nb-seg__opts"><label class="nb-seg__opt"><input class="nb-sr" type="radio" name="d-vis" value="public" checked><span>Public</span></label><label class="nb-seg__opt"><input class="nb-sr" type="radio" name="d-vis" value="members"><span>Members</span></label><label class="nb-seg__opt"><input class="nb-sr" type="radio" name="d-vis" value="draft"><span>Draft</span></label></div></fieldset>
</div></section>
</div>
<section><span class="lbl">Stat cards</span><div class="nb-grid">
<article class="nb-card nb-card--lemon nb-stat"><div class="nb-stat__top"><h3 class="nb-stat__label">Subscribers</h3><span class="nb-stat__icon"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-users"/></svg></span></div><p class="nb-stat__value nb-display">12,480</p><p class="nb-stat__delta"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-arrow-up"/></svg>Up 8.2% this month</p></article>
<article class="nb-card nb-card--pink nb-stat"><div class="nb-stat__top"><h3 class="nb-stat__label">Revenue</h3><span class="nb-stat__icon"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-dollar"/></svg></span></div><p class="nb-stat__value nb-display">$4,920</p><p class="nb-stat__delta"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-arrow-up"/></svg>Up $610 on September</p></article>
<article class="nb-card nb-stat"><div class="nb-stat__top"><h3 class="nb-stat__label">Open rate</h3><span class="nb-stat__icon"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-mail"/></svg></span></div><p class="nb-stat__value nb-display">61%</p><p class="nb-stat__delta"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-arrow-down"/></svg>Down 3 points on last issue</p></article>
</div></section>
<div class="cols">
<section><span class="lbl">Alert</span><div class="nb-alert nb-alert--warning" role="note"><span class="nb-alert__icon"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-alert"/></svg></span><div class="nb-alert__body"><p class="nb-alert__title"><span class="nb-sr">Warning: </span>Storage almost full</p><p>You have used 9.2 GB of 10 GB. New episodes may fail to upload.</p></div></div></section>
<section><span class="lbl">Now playing</span><div class="nb-card nb-np"><span class="nb-np__art"><svg viewBox="0 0 340 190" preserveAspectRatio="xMidYMid slice" aria-hidden="true" focusable="false"><rect width="340" height="190" style="fill:var(--nb-violet)"/><path d="M0 150l28-22 28 22 28-22 28 22 28-22 28 22 28-22 28 22 28-22 28 22 28-22 28 22v40H0z" stroke-width="3" style="fill:var(--nb-pink);stroke:var(--nb-line)"/><circle cx="170" cy="86" r="66" stroke-width="3" style="fill:#111;stroke:var(--nb-line)"/><circle cx="170" cy="86" r="50" fill="none" stroke="#3a3a3a" stroke-width="2"/><circle cx="170" cy="86" r="36" fill="none" stroke="#3a3a3a" stroke-width="2"/><circle cx="170" cy="86" r="22" stroke-width="3" style="fill:var(--nb-lemon);stroke:#111"/><circle cx="170" cy="86" r="4" fill="#111"/><path d="M262 34l8 16 18 2-13 12 4 18-17-9-16 9 3-18-13-12 18-2z" stroke-width="3" style="fill:var(--nb-lime);stroke:var(--nb-line)"/></svg></span>
<div><p class="nb-np__title">Neon Laundromat</p><p class="nb-np__artist">The Paper Cuts</p><div class="nb-bar nb-bar--pink" role="progressbar" aria-label="Track position" aria-valuenow="102" aria-valuemin="0" aria-valuemax="238" aria-valuetext="1:42 of 3:58"><span class="nb-bar__fill" style="--p:43%"></span></div></div>
<label class="nb-itoggle nb-play"><input class="nb-sr" type="checkbox" aria-label="Play" checked><span class="nb-itoggle__face"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-play"/></svg><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-pause"/></svg></span></label></div></section>
</div>
</div>
CSS
/* ── Neobrutalism UI kit tokens (uiCookies) — identical in every set ─────────────
   Thick ink borders, hard offset shadows and flat saturated fills on cream paper.
   Change a token and the whole kit follows; the border and shadow recipes below are built from them. */
:root{
  --nb-paper:#fff6e0;        /* page background, cream */
  --nb-surface:#ffffff;      /* card, field and button faces */
  --nb-ink:#111111;          /* text, 17.5:1 on paper */
  --nb-muted:#454036;        /* secondary text, 9.6:1 on paper */
  --nb-line:#111111;         /* border colour */
  --nb-bw:3px;               /* border width */
  --nb-shadow-x:4px;         /* hard shadow offset; pressed controls move this far into it */
  --nb-shadow-y:4px;
  --nb-shadow-color:#111111;
  --nb-radius:12px;          /* cards and panels */
  --nb-radius-sm:8px;        /* buttons and fields */
  --nb-focus:#1d4ed8;        /* dashed focus outline, 6.2:1 on paper, never the shadow */
  --nb-on-fill:#111111;      /* text on every palette fill below, 6.8:1 or more */
  --nb-on-fill-muted:#2b2822;/* secondary text on fills, 5.2:1 or more */
  --nb-lemon:#ffe14d;--nb-pink:#ff90d0;--nb-cyan:#62e2e8;--nb-lime:#b6f36a;
  --nb-orange:#ffa94d;--nb-violet:#b9a3ff;--nb-red:#ff6b6b;
  --nb-blue:#2448e0;--nb-on-blue:#ffffff; /* the only fill that takes white text, 6.8:1 */
  --nb-danger:#b42318;       /* destructive text, 6.1:1 on paper */
  --nb-font:"Space Grotesk","Archivo","Helvetica Neue",Arial,system-ui,sans-serif;
  --nb-font-display:"Archivo Black","Arial Black","Helvetica Neue",Arial,sans-serif;
}
/* Dark brutalism: data-nb="dark" on any wrapper, or a checked .nb-theme-input inside a [data-nb] element.
   :is() is a forgiving list, so browsers without :has() still apply data-nb="dark". Fills keep dark text. */
[data-nb]:is([data-nb="dark"],:has(.nb-theme-input:checked)){
  --nb-paper:#17150f;--nb-surface:#25221b;--nb-ink:#fbf3dc;--nb-muted:#d6ccb2;--nb-line:#fbf3dc;
  --nb-shadow-color:#fbf3dc;--nb-focus:#8db4ff;--nb-danger:#ff9b8f;color-scheme:dark}
/* More contrast requested: secondary text turns full ink */
@media (prefers-contrast:more){:root,[data-nb]:is([data-nb],:has(.nb-theme-input:checked)){--nb-muted:var(--nb-ink);--nb-on-fill-muted:var(--nb-on-fill)}}
:root,[data-nb]{
  --nb-border:var(--nb-bw) solid var(--nb-line);
  --nb-shadow:var(--nb-shadow-x) var(--nb-shadow-y) 0 0 var(--nb-shadow-color);
  --nb-shadow-sm:calc(var(--nb-shadow-x)*.5) calc(var(--nb-shadow-y)*.5) 0 0 var(--nb-shadow-color);
  --nb-shadow-lg:calc(var(--nb-shadow-x)*1.75) calc(var(--nb-shadow-y)*1.75) 0 0 var(--nb-shadow-color);
  --nb-shadow-hover:calc(var(--nb-shadow-x) + 2px) calc(var(--nb-shadow-y) + 2px) 0 0 var(--nb-shadow-color);
  --nb-press:var(--nb-shadow-x) var(--nb-shadow-y);                       /* translate for a pressed control */
  --nb-press-sm:calc(var(--nb-shadow-x)*.5) calc(var(--nb-shadow-y)*.5);  /* …for one with the small shadow */
}
[data-nb]{background:var(--nb-paper);color:var(--nb-ink);font-family:var(--nb-font)}
/* Components */
:where([class*="nb-"]),:where([class*="nb-"])::before,:where([class*="nb-"])::after{box-sizing:border-box}
.nb-sr{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.nb-ico{width:20px;height:20px;flex:none}
.nb-display{font-family:var(--nb-font-display);font-weight:900;letter-spacing:-.01em;line-height:1.05}
.nb-link{color:inherit;font-weight:700;text-decoration:underline;text-decoration-thickness:2px;text-underline-offset:3px}
.nb-link:hover{text-decoration-thickness:4px}
.nb-link:focus-visible{outline:3px dashed var(--nb-focus);outline-offset:3px;border-radius:2px}
/* Buttons: a face, a thick border and a hard shadow. Hover lifts it, pressing moves it into its shadow */
.nb-btn{--nb-fill:var(--nb-surface);--nb-text:var(--nb-ink);
  display:inline-flex;align-items:center;justify-content:center;gap:.5rem;min-height:46px;padding:.6rem 1.2rem;
  border:var(--nb-border);border-radius:var(--nb-radius-sm);background:var(--nb-fill);color:var(--nb-text);
  font:700 1rem/1.2 var(--nb-font);text-decoration:none;cursor:pointer;box-shadow:var(--nb-shadow);
  transition:translate .12s,box-shadow .12s}
.nb-btn:hover{translate:-2px -2px;box-shadow:var(--nb-shadow-hover)}
.nb-btn:active{translate:var(--nb-press);box-shadow:none}
.nb-btn:focus-visible{outline:3px dashed var(--nb-focus);outline-offset:5px}
.nb-btn--lemon{--nb-fill:var(--nb-lemon);--nb-text:var(--nb-on-fill)}
.nb-btn--pink{--nb-fill:var(--nb-pink);--nb-text:var(--nb-on-fill)}
.nb-btn--cyan{--nb-fill:var(--nb-cyan);--nb-text:var(--nb-on-fill)}
.nb-btn--lime{--nb-fill:var(--nb-lime);--nb-text:var(--nb-on-fill)}
.nb-btn--red{--nb-fill:var(--nb-red);--nb-text:var(--nb-on-fill)}
.nb-btn--blue{--nb-fill:var(--nb-blue);--nb-text:var(--nb-on-blue)}
.nb-btn--ink{--nb-fill:var(--nb-ink);--nb-text:var(--nb-paper)}
.nb-btn--sm{min-height:38px;padding:.4rem .85rem;font-size:.875rem}
.nb-btn--lg{min-height:56px;padding:.8rem 1.6rem;font-size:1.15rem}
.nb-btn--block{width:100%}
.nb-btn--icon{width:48px;height:48px;min-height:0;padding:0}
.nb-btn--icon-sm{width:38px;height:38px;box-shadow:var(--nb-shadow-sm)}
.nb-btn--icon-sm:hover{box-shadow:var(--nb-shadow)}
.nb-btn--icon-sm:active{translate:var(--nb-press-sm)}
.nb-btn--round{border-radius:50%}
.nb-btn:disabled{--nb-fill:var(--nb-paper);--nb-text:var(--nb-muted);border-style:dashed;box-shadow:none;translate:none;cursor:not-allowed}
/* Icon toggle: a checkbox behind a round face. On = pressed into its shadow, pink, and the outline icon turns solid */
.nb-itoggle{position:relative;display:inline-flex}
.nb-itoggle__face{display:grid;place-items:center;width:48px;height:48px;border:var(--nb-border);border-radius:50%;background:var(--nb-surface);color:var(--nb-ink);
  box-shadow:var(--nb-shadow);cursor:pointer;transition:translate .12s,box-shadow .12s}
.nb-itoggle__face .nb-ico{width:22px;height:22px}
.nb-itoggle__face .nb-ico+.nb-ico,.nb-itoggle input:checked+.nb-itoggle__face .nb-ico:first-child{display:none}
.nb-itoggle input:checked+.nb-itoggle__face{translate:var(--nb-press);box-shadow:none;background:var(--nb-pink);color:var(--nb-on-fill)}
.nb-itoggle input:checked+.nb-itoggle__face .nb-ico+.nb-ico{display:block}
.nb-itoggle input:focus-visible+.nb-itoggle__face{outline:3px dashed var(--nb-focus);outline-offset:5px}
/* Toggle tiles: a visually hidden checkbox and a face. On = pushed into the shadow, lime fill, a check and the word On */
.nb-toggle{position:relative;display:flex}
.nb-toggle__face{display:flex;flex-direction:column;align-items:flex-start;gap:.45rem;width:100%;min-width:140px;padding:1rem;
  border:var(--nb-border);border-radius:var(--nb-radius);background:var(--nb-surface);color:var(--nb-ink);box-shadow:var(--nb-shadow);
  cursor:pointer;transition:translate .12s,box-shadow .12s}
.nb-toggle__icon{display:grid;place-items:center;width:42px;height:42px;margin-bottom:.2rem;border:var(--nb-border);border-radius:50%;background:var(--nb-paper)}
.nb-toggle__name{font-weight:800;line-height:1.25}
.nb-toggle__state{display:inline-flex;align-items:center;gap:.3rem;padding:.12rem .5rem;border:2px solid currentColor;border-radius:999px;
  font-size:.72rem;font-weight:800;letter-spacing:.08em;text-transform:uppercase}
.nb-toggle__state::before{content:"";width:8px;height:8px;border:2px solid currentColor;border-radius:50%}
.nb-toggle__state::after{content:"Off"}
.nb-toggle input:checked+.nb-toggle__face{translate:var(--nb-press);box-shadow:none;background:var(--nb-lime);color:var(--nb-on-fill)}
.nb-toggle input:checked+.nb-toggle__face .nb-toggle__icon{border-color:var(--nb-on-fill);background:var(--nb-on-fill);color:var(--nb-lime)}
.nb-toggle input:checked+.nb-toggle__face .nb-toggle__state::before{width:10px;height:6px;border-width:0 0 2px 2px;border-radius:0;rotate:-45deg;translate:0 -1px}
.nb-toggle input:checked+.nb-toggle__face .nb-toggle__state::after{content:"On"}
.nb-toggle input:focus-visible+.nb-toggle__face{outline:3px dashed var(--nb-focus);outline-offset:5px}
/* 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}
/* Segmented control: radios in a fieldset. The chosen option fills lemon and gains a check */
.nb-seg{min-width:0;margin:0;padding:0;border:0}
.nb-seg__legend{margin-bottom:.55rem;padding:0;font-weight:800}
.nb-seg__opts{display:flex;flex-wrap:wrap;width:fit-content;max-width:100%;border:var(--nb-border);border-radius:var(--nb-radius-sm);background:var(--nb-surface);box-shadow:var(--nb-shadow);overflow:hidden}
.nb-seg__opt{position:relative;flex:1 1 auto}
.nb-seg__opt+.nb-seg__opt{border-left:var(--nb-border)}
.nb-seg__opt span{display:flex;align-items:center;justify-content:center;gap:.4rem;min-height:44px;padding:.45rem 1rem;color:var(--nb-ink);font-weight:700;cursor:pointer}
.nb-seg__opt input:checked+span{background:var(--nb-lemon);color:var(--nb-on-fill)}
.nb-seg__opt input:checked+span::before{content:"";width:12px;height:7px;border:solid currentColor;border-width:0 0 3px 3px;rotate:-45deg;translate:0 -2px}
.nb-seg__opt input:focus-visible+span{outline:3px dashed var(--nb-focus);outline-offset:-7px}
/* 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}
/* Fields: a white well with the thick border and a small shadow; focus adds a dashed outline */
.nb-field{display:grid;gap:.4rem;min-width:0}
.nb-label{font-weight:800;font-size:.95rem}
.nb-input,.nb-select,.nb-textarea{width:100%;min-height:48px;padding:.65rem .9rem;border:var(--nb-border);border-radius:var(--nb-radius-sm);background:var(--nb-surface);color:var(--nb-ink);
  font:500 1rem/1.4 var(--nb-font);box-shadow:var(--nb-shadow-sm);transition:box-shadow .12s}
.nb-textarea{min-height:110px;resize:vertical}
.nb-input::placeholder,.nb-textarea::placeholder{color:var(--nb-muted);opacity:1}
.nb-input:focus,.nb-select:focus,.nb-textarea:focus{outline:3px dashed var(--nb-focus);outline-offset:4px;box-shadow:var(--nb-shadow)}
.nb-hint{font-size:.85rem;color:var(--nb-muted)}
.nb-row{display:flex;justify-content:space-between;align-items:baseline;gap:1rem}
.nb-control{position:relative}
.nb-control>.nb-ico{position:absolute;top:50%;left:14px;translate:0 -50%;pointer-events:none}
.nb-control>.nb-ico~.nb-input{padding-left:2.75rem}
.nb-select{appearance:none;padding-right:2.75rem;cursor:pointer}
.nb-control--select::after{content:"";position:absolute;top:50%;right:18px;width:10px;height:10px;border:solid var(--nb-ink);border-width:0 3px 3px 0;translate:0 -70%;rotate:45deg;pointer-events:none}
.nb-input[aria-invalid="true"]{box-shadow:var(--nb-shadow-x) var(--nb-shadow-y) 0 0 var(--nb-red)}
.nb-error{display:flex;align-items:center;gap:.45rem;width:fit-content;max-width:100%;padding:.3rem .65rem;border:2px solid var(--nb-line);border-radius:6px;background:var(--nb-red);color:var(--nb-on-fill);font-size:.85rem;font-weight:700}
.nb-error .nb-ico{width:16px;height:16px}
/* Checkboxes and radios: a hidden native input and a box that is pushed into its shadow and filled when chosen */
.nb-fieldset{min-width:0;margin:0;padding:0;border:0}
.nb-fieldset legend{margin-bottom:.6rem;padding:0;font-weight:800}
.nb-choices{display:grid;gap:.8rem}
.nb-check{position:relative;display:flex;align-items:center;gap:.75rem;font-weight:600;cursor:pointer}
.nb-check__box{display:grid;place-items:center;flex:none;width:28px;height:28px;border:var(--nb-border);border-radius:6px;background:var(--nb-surface);color:transparent;
  box-shadow:var(--nb-shadow-sm);transition:translate .12s,box-shadow .12s}
.nb-check__box .nb-ico{width:18px;height:18px}
.nb-check--radio .nb-check__box{border-radius:50%}
.nb-check--radio .nb-check__box::after{content:"";width:12px;height:12px;border-radius:50%;background:transparent}
.nb-check input:checked+.nb-check__box{translate:var(--nb-press-sm);box-shadow:none;background:var(--nb-lemon);color:var(--nb-on-fill)}
.nb-check--radio input:checked+.nb-check__box::after{background:var(--nb-on-fill)}
.nb-check input:focus-visible+.nb-check__box{outline:3px dashed var(--nb-focus);outline-offset:4px}
/* 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}
/* Alerts: the type is named by an icon, a bold title and hidden text, never by colour alone */
.nb-alert{display:flex;align-items:flex-start;gap:.85rem;padding:1rem 1.1rem;border:var(--nb-border);border-radius:var(--nb-radius);background:var(--nb-tone,var(--nb-cyan));color:var(--nb-on-fill);box-shadow:var(--nb-shadow);font-family:var(--nb-font)}
.nb-alert--success{--nb-tone:var(--nb-lime)}.nb-alert--warning{--nb-tone:var(--nb-lemon)}.nb-alert--error{--nb-tone:var(--nb-red)}
.nb-alert__icon{display:grid;place-items:center;flex:none;width:38px;height:38px;border-radius:50%;background:var(--nb-on-fill);color:var(--nb-tone,var(--nb-cyan))}
.nb-alert__body{flex:1;min-width:0}
.nb-alert__title{margin:0;font-weight:800}
.nb-alert__body p+p{margin:.15rem 0 0}
.nb-alert a{color:inherit;font-weight:800;text-decoration:underline;text-decoration-thickness:2px;text-underline-offset:3px}
.nb-alert a:focus-visible{outline:3px dashed var(--nb-on-fill);outline-offset:3px}
/* 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)}
/* Music player: a range seek bar, a checkbox play/pause, and shuffle and repeat toggles that press in and gain a dot */
.nb-player{max-width:380px}
.nb-player__art{position:relative;height:190px;margin-bottom:1.1rem;border:var(--nb-border);border-radius:var(--nb-radius-sm);overflow:hidden;background:var(--nb-violet)}
.nb-player__art svg{display:block;width:100%;height:100%}
.nb-player__art .nb-sticker{position:absolute;right:12px;bottom:12px}
.nb-player__title{font-size:1.4rem}
.nb-player__artist{margin-top:.2rem!important;font-weight:600;color:var(--nb-muted)}
.nb-times{display:flex;justify-content:space-between;margin-top:.15rem;font-size:.85rem;font-weight:700;font-variant-numeric:tabular-nums}
.nb-seek{margin-top:1rem}
.nb-controls{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:1rem}
.nb-play .nb-itoggle__face{width:62px;height:62px;background:var(--nb-lemon);color:var(--nb-on-fill)}
.nb-play .nb-itoggle__face .nb-ico{width:26px;height:26px}
.nb-play input:checked+.nb-itoggle__face{background:var(--nb-lemon)}
.nb-mini{position:relative;display:inline-flex}
.nb-mini__face{position:relative;display:grid;place-items:center;width:42px;height:42px;border:var(--nb-bw) solid transparent;border-radius:var(--nb-radius-sm);color:var(--nb-ink);cursor:pointer}
.nb-mini__face:hover{border-color:var(--nb-line)}
.nb-mini input:checked+.nb-mini__face{border-color:var(--nb-line);background:var(--nb-cyan);color:var(--nb-on-fill)}
.nb-mini input:checked+.nb-mini__face::after{content:"";position:absolute;bottom:3px;width:5px;height:5px;border-radius:50%;background:currentColor}
.nb-mini input:focus-visible+.nb-mini__face{outline:3px dashed var(--nb-focus);outline-offset:3px}
/* Now playing bar: small art, the track, a thin progress bar and the play toggle */
.nb-np{display:grid;grid-template-columns:72px minmax(0,1fr) auto;align-items:center;gap:1rem}
.nb-np__art{width:72px;height:72px;border:var(--nb-border);border-radius:var(--nb-radius-sm);overflow:hidden;background:var(--nb-violet)}
.nb-np__art svg{display:block;width:100%;height:100%}
.nb-np__title{font-weight:800;line-height:1.25}
.nb-np__artist{font-size:.88rem;color:var(--nb-muted)}
.nb-np .nb-bar{height:14px;margin-top:.5rem}
.nb-np .nb-play .nb-itoggle__face{width:54px;height:54px}
@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-send" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M20.5 3.5 3.5 10.5l7 3 3 7z"/><path d="m10.5 13.5 4-4"/></symbol>
  <symbol id="nb-i-video" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="6" width="13" height="12" rx="1.5"/><path d="m16 10.5 5-3v9l-5-3z"/></symbol>
  <symbol id="nb-i-calendar" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><rect x="3.5" y="5" width="17" height="15.5" rx="1.5"/><path d="M3.5 10h17M8 3v4M16 3v4"/></symbol>
  <symbol id="nb-i-eye" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M2.5 12S6 5.5 12 5.5 21.5 12 21.5 12 18 18.5 12 18.5 2.5 12 2.5 12z"/><circle cx="12" cy="12" r="3"/></symbol>
  <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-link" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M10 14a4.5 4.5 0 0 0 6.4 0l3-3a4.5 4.5 0 0 0-6.4-6.4l-1.2 1.2M14 10a4.5 4.5 0 0 0-6.4 0l-3 3a4.5 4.5 0 0 0 6.4 6.4l1.2-1.2"/></symbol>
  <symbol id="nb-i-share" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M12 15V4M7.5 8.5 12 4l4.5 4.5M5 13v6.5h14V13"/></symbol>
  <symbol id="nb-i-heart" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M12 20s-8-4.8-8-10.5A4.5 4.5 0 0 1 12 7a4.5 4.5 0 0 1 8 2.5C20 15.2 12 20 12 20z"/></symbol>
  <symbol id="nb-i-heart-fill" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path fill="currentColor" d="M12 20s-8-4.8-8-10.5A4.5 4.5 0 0 1 12 7a4.5 4.5 0 0 1 8 2.5C20 15.2 12 20 12 20z"/></symbol>
  <symbol id="nb-i-inbox" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M3.5 13.5 6 4.5h12l2.5 9V19.5h-17zM3.5 13.5h5l1 2.5h5l1-2.5h5"/></symbol>
  <symbol id="nb-i-bell" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M6 16.5V11a6 6 0 0 1 12 0v5.5l1.5 2h-15zM10 21h4"/></symbol>
  <symbol id="nb-i-moon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M20 14.5A8 8 0 0 1 9.5 4a8 8 0 1 0 10.5 10.5z"/></symbol>
  <symbol id="nb-i-search" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><circle cx="10.5" cy="10.5" r="6"/><path d="m15 15 5.5 5.5"/></symbol>
  <symbol id="nb-i-users" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><circle cx="9" cy="8.5" r="3.5"/><path d="M2.5 20a6.5 6.5 0 0 1 13 0M15.5 5.2a3.5 3.5 0 0 1 0 6.6M17.5 14.2a6.5 6.5 0 0 1 4 5.8"/></symbol>
  <symbol id="nb-i-arrow-up" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M12 19.5v-14M6.5 11 12 5.5l5.5 5.5"/></symbol>
  <symbol id="nb-i-dollar" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M12 2.5v19M16.5 6.5H10a3 3 0 0 0 0 6h4a3 3 0 0 1 0 6H7"/></symbol>
  <symbol id="nb-i-mail" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="5.5" width="18" height="13" rx="1.5"/><path d="m3.5 6.5 8.5 7 8.5-7"/></symbol>
  <symbol id="nb-i-arrow-down" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M12 4.5v14M6.5 13l5.5 5.5 5.5-5.5"/></symbol>
  <symbol id="nb-i-alert" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M12 3.5 2.5 20h19z"/><path d="M12 10v4.5M12 17.5h.01"/></symbol>
  <symbol id="nb-i-play" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path fill="currentColor" d="M7.5 4.5v15l12-7.5z"/></symbol>
  <symbol id="nb-i-pause" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path fill="currentColor" d="M6.5 4.5h4v15h-4zM13.5 4.5h4v15h-4z"/></symbol>
</svg>
<div class="nb-dark nb-form" data-nb="dark" data-bs-theme="dark">
<section><span class="lbl">Buttons · cream borders and shadows, fills keep dark text</span><div class="nb-cluster">
<button class="btn btn-nb btn-nb-lemon" type="button"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-send"/></svg>Publish post</button>
<button class="btn btn-nb btn-nb-pink" type="button"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-video"/></svg>Go live</button>
<button class="btn btn-nb btn-nb-cyan" type="button"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-calendar"/></svg>Schedule</button>
<button class="btn btn-nb" type="button"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-eye"/></svg>Preview</button>
<button class="btn btn-nb btn-nb-ink" type="button"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-bolt"/></svg>Upgrade plan</button>
<button class="btn btn-nb btn-nb-blue" type="button"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-link"/></svg>Copy link</button>
<button class="btn btn-nb btn-nb-icon rounded-circle" type="button" aria-label="Share"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-share"/></svg></button>
<input class="btn-check" type="checkbox" id="dit7" aria-label="Favourite" checked autocomplete="off"><label class="btn btn-nb btn-nb-icon rounded-circle" for="dit7"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-heart"/></svg><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-heart-fill"/></svg></label>
</div></section>
<section><span class="lbl">Toggle buttons</span><div class="nb-tiles">
<div><input class="btn-check" type="checkbox" id="dtg1" checked autocomplete="off"><label class="btn btn-nb btn-nb-tile" for="dtg1"><span class="nb-tile-icon"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-inbox"/></svg></span>Comments<span class="nb-tile-state" aria-hidden="true"></span></label></div>
<div><input class="btn-check" type="checkbox" id="dtg2"None autocomplete="off"><label class="btn btn-nb btn-nb-tile" for="dtg2"><span class="nb-tile-icon"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-send"/></svg></span>Auto-post<span class="nb-tile-state" aria-hidden="true"></span></label></div>
<div><input class="btn-check" type="checkbox" id="dtg3" checked autocomplete="off"><label class="btn btn-nb btn-nb-tile" for="dtg3"><span class="nb-tile-icon"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-bell"/></svg></span>Notify fans<span class="nb-tile-state" aria-hidden="true"></span></label></div>
<div><input class="btn-check" type="checkbox" id="dtg4"None autocomplete="off"><label class="btn btn-nb btn-nb-tile" for="dtg4"><span class="nb-tile-icon"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-moon"/></svg></span>Night mode<span class="nb-tile-state" aria-hidden="true"></span></label></div>
</div></section>
<div class="cols">
<section><span class="lbl">Switches</span><div class="card nb-card"><div class="card-body nb-stack">
<div class="form-check form-switch nb-switch"><input class="form-check-input" type="checkbox" role="switch" id="dsw5" checked><label class="form-check-label" for="dsw5">Public profile<small>Anyone can find your page</small></label><span class="nb-switch-state" aria-hidden="true"></span></div>
<div class="form-check form-switch nb-switch"><input class="form-check-input" type="checkbox" role="switch" id="dsw6"><label class="form-check-label" for="dsw6">Tip jar<small>Fans can send one-off tips</small></label><span class="nb-switch-state" aria-hidden="true"></span></div>
</div></div></section>
<section><span class="lbl">Field, checkbox and segmented control</span><div class="nb-stack">
<div><label class="form-label" for="d-search">Search</label><div class="nb-control"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-search"/></svg><input class="form-control" id="d-search" type="search" placeholder="Posts, tags or fans"></div></div>
<div class="form-check nb-check"><input class="form-check-input" type="checkbox" id="dck12" checked><label class="form-check-label" for="dck12">Email me about new subscribers</label></div>
<fieldset class="nb-seg"><legend>Post visibility</legend><div class="btn-group"><input class="btn-check" type="radio" name="d-vis" id="dsg9" value="public" checked autocomplete="off"><label class="btn" for="dsg9">Public</label><input class="btn-check" type="radio" name="d-vis" id="dsg10" value="members" autocomplete="off"><label class="btn" for="dsg10">Members</label><input class="btn-check" type="radio" name="d-vis" id="dsg11" value="draft" autocomplete="off"><label class="btn" for="dsg11">Draft</label></div></fieldset>
</div></section>
</div>
<section><span class="lbl">Stat cards</span><div class="nb-grid">
<article class="card nb-card nb-card-lemon"><div class="card-body nb-stat"><div class="nb-stat__top"><h3 class="nb-stat__label">Subscribers</h3><span class="nb-stat__icon"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-users"/></svg></span></div><p class="nb-stat__value nb-display">12,480</p><p class="nb-stat__delta"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-arrow-up"/></svg>Up 8.2% this month</p></div></article>
<article class="card nb-card nb-card-pink"><div class="card-body nb-stat"><div class="nb-stat__top"><h3 class="nb-stat__label">Revenue</h3><span class="nb-stat__icon"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-dollar"/></svg></span></div><p class="nb-stat__value nb-display">$4,920</p><p class="nb-stat__delta"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-arrow-up"/></svg>Up $610 on September</p></div></article>
<article class="card nb-card"><div class="card-body nb-stat"><div class="nb-stat__top"><h3 class="nb-stat__label">Open rate</h3><span class="nb-stat__icon"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-mail"/></svg></span></div><p class="nb-stat__value nb-display">61%</p><p class="nb-stat__delta"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-arrow-down"/></svg>Down 3 points on last issue</p></div></article>
</div></section>
<div class="cols">
<section><span class="lbl">Alert</span><div class="alert nb-alert nb-alert-warning" role="note"><span class="nb-alert__icon"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-alert"/></svg></span><div class="nb-alert__body"><p class="nb-alert__title"><span class="visually-hidden">Warning: </span>Storage almost full</p><p>You have used 9.2 GB of 10 GB. New episodes may fail to upload.</p></div></div></section>
<section><span class="lbl">Now playing</span><div class="card nb-card"><div class="card-body nb-np"><span class="nb-np__art"><svg viewBox="0 0 340 190" preserveAspectRatio="xMidYMid slice" aria-hidden="true" focusable="false"><rect width="340" height="190" style="fill:var(--nb-violet)"/><path d="M0 150l28-22 28 22 28-22 28 22 28-22 28 22 28-22 28 22 28-22 28 22 28-22 28 22v40H0z" stroke-width="3" style="fill:var(--nb-pink);stroke:var(--nb-line)"/><circle cx="170" cy="86" r="66" stroke-width="3" style="fill:#111;stroke:var(--nb-line)"/><circle cx="170" cy="86" r="50" fill="none" stroke="#3a3a3a" stroke-width="2"/><circle cx="170" cy="86" r="36" fill="none" stroke="#3a3a3a" stroke-width="2"/><circle cx="170" cy="86" r="22" stroke-width="3" style="fill:var(--nb-lemon);stroke:#111"/><circle cx="170" cy="86" r="4" fill="#111"/><path d="M262 34l8 16 18 2-13 12 4 18-17-9-16 9 3-18-13-12 18-2z" stroke-width="3" style="fill:var(--nb-lime);stroke:var(--nb-line)"/></svg></span>
<div><p class="nb-np__title">Neon Laundromat</p><p class="nb-np__artist">The Paper Cuts</p><div class="progress nb-bar nb-bar-pink" role="progressbar" aria-label="Track position" aria-valuenow="102" aria-valuemin="0" aria-valuemax="238" aria-valuetext="1:42 of 3:58"><div class="progress-bar" style="width:43%"></div></div></div>
<input class="btn-check" type="checkbox" id="dit8" aria-label="Play" checked autocomplete="off"><label class="btn btn-nb btn-nb-icon rounded-circle nb-play" for="dit8"><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-play"/></svg><svg class="nb-ico" aria-hidden="true" focusable="false"><use href="#nb-i-pause"/></svg></label></div></div></section>
</div>
</div>
CSS
/* ── Neobrutalism UI kit tokens (uiCookies) — identical in every set ─────────────
   Thick ink borders, hard offset shadows and flat saturated fills on cream paper.
   Change a token and the whole kit follows; the border and shadow recipes below are built from them. */
:root{
  --nb-paper:#fff6e0;        /* page background, cream */
  --nb-surface:#ffffff;      /* card, field and button faces */
  --nb-ink:#111111;          /* text, 17.5:1 on paper */
  --nb-muted:#454036;        /* secondary text, 9.6:1 on paper */
  --nb-line:#111111;         /* border colour */
  --nb-bw:3px;               /* border width */
  --nb-shadow-x:4px;         /* hard shadow offset; pressed controls move this far into it */
  --nb-shadow-y:4px;
  --nb-shadow-color:#111111;
  --nb-radius:12px;          /* cards and panels */
  --nb-radius-sm:8px;        /* buttons and fields */
  --nb-focus:#1d4ed8;        /* dashed focus outline, 6.2:1 on paper, never the shadow */
  --nb-on-fill:#111111;      /* text on every palette fill below, 6.8:1 or more */
  --nb-on-fill-muted:#2b2822;/* secondary text on fills, 5.2:1 or more */
  --nb-lemon:#ffe14d;--nb-pink:#ff90d0;--nb-cyan:#62e2e8;--nb-lime:#b6f36a;
  --nb-orange:#ffa94d;--nb-violet:#b9a3ff;--nb-red:#ff6b6b;
  --nb-blue:#2448e0;--nb-on-blue:#ffffff; /* the only fill that takes white text, 6.8:1 */
  --nb-danger:#b42318;       /* destructive text, 6.1:1 on paper */
  --nb-font:"Space Grotesk","Archivo","Helvetica Neue",Arial,system-ui,sans-serif;
  --nb-font-display:"Archivo Black","Arial Black","Helvetica Neue",Arial,sans-serif;
}
/* Dark brutalism: data-nb="dark" on any wrapper, or a checked .nb-theme-input inside a [data-nb] element.
   :is() is a forgiving list, so browsers without :has() still apply data-nb="dark". Fills keep dark text. */
[data-nb]:is([data-nb="dark"],:has(.nb-theme-input:checked)){
  --nb-paper:#17150f;--nb-surface:#25221b;--nb-ink:#fbf3dc;--nb-muted:#d6ccb2;--nb-line:#fbf3dc;
  --nb-shadow-color:#fbf3dc;--nb-focus:#8db4ff;--nb-danger:#ff9b8f;color-scheme:dark}
/* More contrast requested: secondary text turns full ink */
@media (prefers-contrast:more){:root,[data-nb]:is([data-nb],:has(.nb-theme-input:checked)){--nb-muted:var(--nb-ink);--nb-on-fill-muted:var(--nb-on-fill)}}
:root,[data-nb]{
  --nb-border:var(--nb-bw) solid var(--nb-line);
  --nb-shadow:var(--nb-shadow-x) var(--nb-shadow-y) 0 0 var(--nb-shadow-color);
  --nb-shadow-sm:calc(var(--nb-shadow-x)*.5) calc(var(--nb-shadow-y)*.5) 0 0 var(--nb-shadow-color);
  --nb-shadow-lg:calc(var(--nb-shadow-x)*1.75) calc(var(--nb-shadow-y)*1.75) 0 0 var(--nb-shadow-color);
  --nb-shadow-hover:calc(var(--nb-shadow-x) + 2px) calc(var(--nb-shadow-y) + 2px) 0 0 var(--nb-shadow-color);
  --nb-press:var(--nb-shadow-x) var(--nb-shadow-y);                       /* translate for a pressed control */
  --nb-press-sm:calc(var(--nb-shadow-x)*.5) calc(var(--nb-shadow-y)*.5);  /* …for one with the small shadow */
}
[data-nb]{background:var(--nb-paper);color:var(--nb-ink);font-family:var(--nb-font)}
/* Bootstrap's own variables mapped onto the kit tokens */
:root,[data-nb]{--bs-body-bg:var(--nb-paper);--bs-body-color:var(--nb-ink);--bs-body-font-family:var(--nb-font);--bs-emphasis-color:var(--nb-ink);
  --bs-heading-color:var(--nb-ink);--bs-secondary-color:var(--nb-muted);--bs-tertiary-color:var(--nb-muted);
  --bs-border-color:var(--nb-line);--bs-border-width:var(--nb-bw);--bs-border-radius:var(--nb-radius-sm);--bs-border-radius-lg:var(--nb-radius);
  --bs-focus-ring-color:var(--nb-focus)}
/* Components */
.nb-ico{width:20px;height:20px;flex:none}
.nb-display{font-family:var(--nb-font-display);font-weight:900;letter-spacing:-.01em;line-height:1.05}
.nb-link{color:inherit;font-weight:700;text-decoration:underline;text-decoration-thickness:2px;text-underline-offset:3px}
.nb-link:hover{color:inherit;text-decoration-thickness:4px}
.nb-link:focus-visible{outline:3px dashed var(--nb-focus);outline-offset:3px;border-radius:2px}
/* Buttons: Bootstrap .btn with a .btn-nb variant set through --bs-btn-* variables.
   Hover lifts it, pressing (or a checked .btn-check) moves it into its shadow */
.btn-nb{--nb-fill:var(--nb-surface);--nb-text:var(--nb-ink);--nb-btn-shadow:var(--nb-shadow);
  --bs-btn-padding-x:1.2rem;--bs-btn-padding-y:.6rem;--bs-btn-font-family:var(--nb-font);--bs-btn-font-size:1rem;--bs-btn-font-weight:700;--bs-btn-line-height:1.2;
  --bs-btn-border-width:var(--nb-bw);--bs-btn-border-radius:var(--nb-radius-sm);
  --bs-btn-bg:var(--nb-fill);--bs-btn-color:var(--nb-text);--bs-btn-border-color:var(--nb-line);
  --bs-btn-hover-bg:var(--nb-fill);--bs-btn-hover-color:var(--nb-text);--bs-btn-hover-border-color:var(--nb-line);
  --bs-btn-active-bg:var(--nb-fill);--bs-btn-active-color:var(--nb-text);--bs-btn-active-border-color:var(--nb-line);
  --bs-btn-disabled-bg:var(--nb-paper);--bs-btn-disabled-color:var(--nb-muted);--bs-btn-disabled-border-color:var(--nb-line);--bs-btn-disabled-opacity:1;
  --bs-btn-focus-box-shadow:var(--nb-btn-shadow);
  display:inline-flex;align-items:center;justify-content:center;gap:.5rem;min-height:46px;box-shadow:var(--nb-btn-shadow);transition:translate .12s,box-shadow .12s}
.btn-nb:hover{translate:-2px -2px;--nb-btn-shadow:var(--nb-shadow-hover)}
.btn-nb:active{translate:var(--nb-press);--nb-btn-shadow:none}
.btn-nb:focus-visible,.btn-check:focus-visible+.btn-nb{outline:3px dashed var(--nb-focus);outline-offset:5px;box-shadow:var(--nb-btn-shadow)}
.btn-nb-lemon{--nb-fill:var(--nb-lemon);--nb-text:var(--nb-on-fill)}
.btn-nb-pink{--nb-fill:var(--nb-pink);--nb-text:var(--nb-on-fill)}
.btn-nb-cyan{--nb-fill:var(--nb-cyan);--nb-text:var(--nb-on-fill)}
.btn-nb-lime{--nb-fill:var(--nb-lime);--nb-text:var(--nb-on-fill)}
.btn-nb-red{--nb-fill:var(--nb-red);--nb-text:var(--nb-on-fill)}
.btn-nb-blue{--nb-fill:var(--nb-blue);--nb-text:var(--nb-on-blue)}
.btn-nb-ink{--nb-fill:var(--nb-ink);--nb-text:var(--nb-paper)}
.btn-nb.btn-sm{--bs-btn-padding-x:.85rem;--bs-btn-padding-y:.4rem;--bs-btn-font-size:.875rem;--bs-btn-border-radius:var(--nb-radius-sm);min-height:38px}
.btn-nb.btn-lg{--bs-btn-padding-x:1.6rem;--bs-btn-padding-y:.8rem;--bs-btn-font-size:1.15rem;--bs-btn-border-radius:var(--nb-radius-sm);min-height:56px}
.btn-nb-icon{--bs-btn-padding-x:0;--bs-btn-padding-y:0;width:48px;height:48px;min-height:0}
.btn-nb-icon-sm{width:38px;height:38px;--nb-btn-shadow:var(--nb-shadow-sm)}
.btn-nb-icon-sm:hover{--nb-btn-shadow:var(--nb-shadow)}
.btn-nb-icon-sm:active{translate:var(--nb-press-sm)}
.btn-nb.rounded-circle{border-radius:50%}
.btn-nb:disabled{border-style:dashed;--nb-btn-shadow:none;translate:none}
/* Icon toggle: .btn-check + a round .btn. On = pressed into its shadow, pink, and the outline icon turns solid */
.btn-check+.btn-nb-icon .nb-ico{width:22px;height:22px}
.btn-check+.btn-nb-icon .nb-ico+.nb-ico,.btn-check:checked+.btn-nb-icon .nb-ico:first-child{display:none}
.btn-check:checked+.btn-nb-icon .nb-ico+.nb-ico{display:block}
.btn-check:checked+.btn-nb-icon{--nb-fill:var(--nb-pink);--nb-text:var(--nb-on-fill);translate:var(--nb-press);--nb-btn-shadow:none}
/* Toggle tiles: Bootstrap .btn-check + .btn. On = pushed into the shadow, lime fill, a check and the word On */
.btn-nb-tile{--bs-btn-padding-x:1rem;--bs-btn-padding-y:1rem;--bs-btn-border-radius:var(--nb-radius);--bs-btn-font-weight:800;--bs-btn-line-height:1.25;
  flex-direction:column;align-items:flex-start;gap:.45rem;width:100%;min-width:140px;text-align:start}
.btn-check:checked+.btn-nb-tile{--nb-fill:var(--nb-lime);--nb-text:var(--nb-on-fill);translate:var(--nb-press);--nb-btn-shadow:none}
.btn-nb-tile .nb-tile-icon{display:grid;place-items:center;width:42px;height:42px;margin-bottom:.2rem;border:var(--nb-border);border-radius:50%;background:var(--nb-paper);color:var(--nb-ink)}
.btn-nb-tile .nb-tile-state{display:inline-flex;align-items:center;gap:.3rem;padding:.12rem .5rem;border:2px solid currentColor;border-radius:999px;
  font-size:.72rem;font-weight:800;letter-spacing:.08em;line-height:1.5;text-transform:uppercase}
.btn-nb-tile .nb-tile-state::before{content:"";width:8px;height:8px;border:2px solid currentColor;border-radius:50%}
.btn-nb-tile .nb-tile-state::after{content:"Off"}
.btn-check:checked+.btn-nb-tile .nb-tile-icon{border-color:var(--nb-on-fill);background:var(--nb-on-fill);color:var(--nb-lime)}
.btn-check:checked+.btn-nb-tile .nb-tile-state::before{width:10px;height:6px;border-width:0 0 2px 2px;border-radius:0;rotate:-45deg;translate:0 -1px}
.btn-check:checked+.btn-nb-tile .nb-tile-state::after{content:"On"}
/* 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"}
/* Segmented control: a .btn-group of .btn-check radios. The chosen option fills lemon and gains a check */
.nb-seg{min-width:0;margin:0;padding:0;border:0}
.nb-seg legend{float:none;width:auto;margin-bottom:.55rem;padding:0;font-size:1rem;font-weight:800}
.nb-seg .btn-group{display:flex;flex-wrap:wrap;width:fit-content;max-width:100%;border:var(--nb-border);border-radius:var(--nb-radius-sm);background:var(--nb-surface);box-shadow:var(--nb-shadow);overflow:hidden}
.nb-seg .btn{--bs-btn-padding-x:1rem;--bs-btn-padding-y:.45rem;--bs-btn-font-family:var(--nb-font);--bs-btn-font-weight:700;--bs-btn-color:var(--nb-ink);--bs-btn-border-width:0;
  --bs-btn-hover-color:var(--nb-ink);--bs-btn-active-color:var(--nb-on-fill);--bs-btn-active-bg:var(--nb-lemon);
  flex:1 1 auto;display:flex;align-items:center;justify-content:center;gap:.4rem;min-height:44px;border-radius:0!important;margin:0!important}
.nb-seg .btn-check+.btn~.btn-check+.btn{border-left:var(--nb-border)}
.nb-seg .btn-check:checked+.btn::before{content:"";width:12px;height:7px;border:solid currentColor;border-width:0 0 3px 3px;rotate:-45deg;translate:0 -2px}
.nb-seg .btn-check:focus-visible+.btn{outline:3px dashed var(--nb-focus);outline-offset:-7px;box-shadow:none}
/* Card: Bootstrap .card restyled through --bs-card-*; fill variants keep dark text */
.card.nb-card{--bs-card-bg:var(--nb-surface);--bs-card-color:var(--nb-ink);--bs-card-border-color:var(--nb-line);--bs-card-border-width:var(--nb-bw);
  --bs-card-border-radius:var(--nb-radius);--bs-card-inner-border-radius:calc(var(--nb-radius) - var(--nb-bw));--bs-card-spacer-x:1.4rem;--bs-card-spacer-y:1.4rem;
  --bs-card-cap-bg:transparent;box-shadow:var(--nb-shadow-lg);font-family:var(--nb-font)}
.nb-card h2,.nb-card h3,.nb-card p{margin:0}
.card.nb-card-lemon,.card.nb-card-pink,.card.nb-card-cyan,.card.nb-card-lime,.card.nb-card-orange,.card.nb-card-violet{--nb-muted:var(--nb-on-fill-muted);--bs-card-color:var(--nb-on-fill);--bs-heading-color:var(--nb-on-fill)}
.card.nb-card-lemon{--bs-card-bg:var(--nb-lemon)}.card.nb-card-pink{--bs-card-bg:var(--nb-pink)}.card.nb-card-cyan{--bs-card-bg:var(--nb-cyan)}
.card.nb-card-lime{--bs-card-bg:var(--nb-lime)}.card.nb-card-orange{--bs-card-bg:var(--nb-orange)}.card.nb-card-violet{--bs-card-bg:var(--nb-violet)}
/* Stickers: tilted .badge labels that sit on or over a card */
.badge.nb-sticker{--bs-badge-padding-x:.7rem;--bs-badge-padding-y:.3rem;--bs-badge-font-size:.75rem;--bs-badge-font-weight:800;--bs-badge-color:var(--nb-on-fill);--bs-badge-border-radius:999px;
  display:inline-flex;align-items:center;gap:.35rem;width:max-content;border:var(--nb-border);background:var(--nb-lemon);font-family:var(--nb-font);line-height:1.1;letter-spacing:.06em;text-transform:uppercase;box-shadow:var(--nb-shadow-sm);rotate:-4deg}
.nb-sticker .nb-ico{width:14px;height:14px}
.badge.nb-sticker-pink{background:var(--nb-pink)}.badge.nb-sticker-cyan{background:var(--nb-cyan)}.badge.nb-sticker-lime{background:var(--nb-lime)}
.badge.nb-sticker-orange{background:var(--nb-orange)}.badge.nb-sticker-violet{background:var(--nb-violet)}
.nb-sticker-right{rotate:5deg}
.nb-sticker-corner{position:absolute;top:-16px;right:14px;z-index:2}
.badge.nb-sticker-square{--bs-badge-border-radius:4px}
.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}
/* Fields: Bootstrap .form-control and .form-select with the thick border and a small shadow; focus adds a dashed outline */
.nb-form .form-label{margin-bottom:.4rem;font-weight:800;font-size:.95rem}
.nb-form .form-text{margin-top:.4rem;font-size:.85rem;color:var(--nb-muted)}
.nb-form .form-control,.nb-form .form-select{min-height:48px;padding:.65rem .9rem;border:var(--nb-border);border-radius:var(--nb-radius-sm);background-color:var(--nb-surface);color:var(--nb-ink);
  font:500 1rem/1.4 var(--nb-font);box-shadow:var(--nb-shadow-sm);transition:box-shadow .12s}
.nb-form textarea.form-control{min-height:110px}
.nb-form .form-control::placeholder{color:var(--nb-muted);opacity:1}
.nb-form .form-control:focus,.nb-form .form-select:focus{border-color:var(--nb-line);outline:3px dashed var(--nb-focus);outline-offset:4px;box-shadow:var(--nb-shadow)}
.nb-form .form-select{--bs-form-select-bg-img:none;padding-right:2.75rem;cursor:pointer}
.nb-control{position:relative}
.nb-control>.nb-ico{position:absolute;top:50%;left:14px;z-index:1;translate:0 -50%;pointer-events:none}
.nb-form .nb-control>.nb-ico~.form-control{padding-left:2.75rem}
.nb-control-select::after{content:"";position:absolute;top:50%;right:18px;width:10px;height:10px;border:solid var(--nb-ink);border-width:0 3px 3px 0;translate:0 -70%;rotate:45deg;pointer-events:none}
.nb-row{display:flex;justify-content:space-between;align-items:baseline;gap:1rem}
.nb-row .form-label{margin:0}
.nb-form .form-control.is-invalid{border-color:var(--nb-line);background-image:none;padding-right:.9rem;box-shadow:var(--nb-shadow-x) var(--nb-shadow-y) 0 0 var(--nb-red)}
.nb-form .form-control.is-invalid:focus{box-shadow:var(--nb-shadow-x) var(--nb-shadow-y) 0 0 var(--nb-red)}
.nb-form .invalid-feedback{display:flex;align-items:center;gap:.45rem;width:fit-content;max-width:100%;margin-top:.5rem;padding:.3rem .65rem;border:2px solid var(--nb-line);border-radius:6px;background:var(--nb-red);color:var(--nb-on-fill);font-size:.85rem;font-weight:700}
.nb-form .invalid-feedback .nb-ico{width:16px;height:16px}
/* Checkboxes and radios: Bootstrap .form-check-input, pushed into its shadow and filled lemon when chosen */
.nb-form fieldset legend{float:none;width:auto;margin-bottom:.6rem;padding:0;font-size:1rem;font-weight:800}
.nb-choices{display:grid;gap:.8rem}
.nb-check{display:flex;align-items:center;gap:.75rem;min-height:0;margin:0;padding:0}
.nb-check .form-check-label{font-weight:600;cursor:pointer}
.nb-check .form-check-input{--bs-form-check-bg:var(--nb-surface);flex:none;float:none;width:28px;height:28px;margin:0;border:var(--nb-border);border-radius:6px;cursor:pointer;
  background-size:18px 18px;box-shadow:var(--nb-shadow-sm);transition:translate .12s,box-shadow .12s}
.nb-check .form-check-input[type=radio]{border-radius:50%}
.nb-check .form-check-input:checked{translate:var(--nb-press-sm);border-color:var(--nb-line);background-color:var(--nb-lemon);box-shadow:none}
.nb-check .form-check-input:checked[type=checkbox]{--bs-form-check-bg-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3e%3cpath fill='none' stroke='%23111' stroke-width='2.8' stroke-linecap='round' stroke-linejoin='round' d='m4.5 12.5 5 5L19.5 7'/%3e%3c/svg%3e")}
.nb-check .form-check-input:checked[type=radio]{--bs-form-check-bg-image:radial-gradient(circle,var(--nb-on-fill) 0 6px,transparent 6.5px);background-size:auto}
.nb-check .form-check-input:focus{border-color:var(--nb-line);box-shadow:var(--nb-shadow-sm)}
.nb-check .form-check-input:checked:focus{box-shadow:none}
.nb-check .form-check-input:focus-visible{outline:3px dashed var(--nb-focus);outline-offset:4px}
/* 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}
/* Alerts: Bootstrap .alert; the type is named by an icon, a bold title and hidden text, never by colour alone */
.alert.nb-alert{--bs-alert-bg:var(--nb-tone,var(--nb-cyan));--bs-alert-color:var(--nb-on-fill);--bs-alert-border-color:var(--nb-line);--bs-alert-border:var(--nb-border);
  --bs-alert-border-radius:var(--nb-radius);--bs-alert-padding-x:1.1rem;--bs-alert-padding-y:1rem;--bs-alert-margin-bottom:0;--bs-alert-link-color:var(--nb-on-fill);
  display:flex;align-items:flex-start;gap:.85rem;box-shadow:var(--nb-shadow);font-family:var(--nb-font)}
.nb-alert-success{--nb-tone:var(--nb-lime)}.nb-alert-warning{--nb-tone:var(--nb-lemon)}.nb-alert-error{--nb-tone:var(--nb-red)}
.nb-alert__icon{display:grid;place-items:center;flex:none;width:38px;height:38px;border-radius:50%;background:var(--nb-on-fill);color:var(--nb-tone,var(--nb-cyan))}
.nb-alert__body{flex:1;min-width:0}
.nb-alert__title{margin:0;font-weight:800}
.nb-alert__body p+p{margin:.15rem 0 0}
.nb-alert .alert-link{font-weight:800;text-decoration:underline;text-decoration-thickness:2px;text-underline-offset:3px}
.nb-alert .alert-link:focus-visible{outline:3px dashed var(--nb-on-fill);outline-offset:3px}
/* 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)}
/* Music player: a .form-range seek bar, a .btn-check play/pause, and shuffle and repeat toggles that press in and gain a dot */
.nb-player{max-width:380px}
.nb-player__art{position:relative;height:190px;margin-bottom:1.1rem;border:var(--nb-border);border-radius:var(--nb-radius-sm);overflow:hidden;background:var(--nb-violet)}
.nb-player__art svg{display:block;width:100%;height:100%}
.nb-player__art .nb-sticker{position:absolute;right:12px;bottom:12px}
.nb-player__title{font-size:1.4rem}
.nb-player__artist{margin-top:.2rem!important;font-weight:600;color:var(--nb-muted)}
.nb-times{display:flex;justify-content:space-between;margin-top:.15rem;font-size:.85rem;font-weight:700;font-variant-numeric:tabular-nums}
.nb-seek{margin-top:1rem}
.nb-controls{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:1rem}
.btn-nb-icon.nb-play{--nb-fill:var(--nb-lemon);--nb-text:var(--nb-on-fill);width:62px;height:62px}
.btn-check:checked+.btn-nb-icon.nb-play{--nb-fill:var(--nb-lemon)}
.btn-nb-icon.nb-play .nb-ico{width:26px;height:26px}
.nb-mini{position:relative;display:grid;place-items:center;width:42px;height:42px;border:var(--nb-bw) solid transparent;border-radius:var(--nb-radius-sm);color:var(--nb-ink);cursor:pointer}
.nb-mini:hover{border-color:var(--nb-line)}
.btn-check:checked+.nb-mini{border-color:var(--nb-line);background:var(--nb-cyan);color:var(--nb-on-fill)}
.btn-check:checked+.nb-mini::after{content:"";position:absolute;bottom:3px;width:5px;height:5px;border-radius:50%;background:currentColor}
.btn-check:focus-visible+.nb-mini{outline:3px dashed var(--nb-focus);outline-offset:3px}
/* Now playing bar: small art, the track, a thin progress bar and the play toggle */
.nb-np{display:grid;grid-template-columns:72px minmax(0,1fr) auto;align-items:center;gap:1rem}
.nb-np__art{width:72px;height:72px;border:var(--nb-border);border-radius:var(--nb-radius-sm);overflow:hidden;background:var(--nb-violet)}
.nb-np__art svg{display:block;width:100%;height:100%}
.nb-np__title{font-weight:800;line-height:1.25}
.nb-np__artist{font-size:.88rem;color:var(--nb-muted)}
.nb-np .nb-bar{height:14px;margin-top:.5rem}
.nb-np .btn-nb-icon.nb-play{width:54px;height:54px}
@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-send" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M20.5 3.5 3.5 10.5l7 3 3 7z"/><path d="m10.5 13.5 4-4"/></symbol>
  <symbol id="nb-i-video" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="6" width="13" height="12" rx="1.5"/><path d="m16 10.5 5-3v9l-5-3z"/></symbol>
  <symbol id="nb-i-calendar" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><rect x="3.5" y="5" width="17" height="15.5" rx="1.5"/><path d="M3.5 10h17M8 3v4M16 3v4"/></symbol>
  <symbol id="nb-i-eye" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M2.5 12S6 5.5 12 5.5 21.5 12 21.5 12 18 18.5 12 18.5 2.5 12 2.5 12z"/><circle cx="12" cy="12" r="3"/></symbol>
  <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-link" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M10 14a4.5 4.5 0 0 0 6.4 0l3-3a4.5 4.5 0 0 0-6.4-6.4l-1.2 1.2M14 10a4.5 4.5 0 0 0-6.4 0l-3 3a4.5 4.5 0 0 0 6.4 6.4l1.2-1.2"/></symbol>
  <symbol id="nb-i-share" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M12 15V4M7.5 8.5 12 4l4.5 4.5M5 13v6.5h14V13"/></symbol>
  <symbol id="nb-i-heart" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M12 20s-8-4.8-8-10.5A4.5 4.5 0 0 1 12 7a4.5 4.5 0 0 1 8 2.5C20 15.2 12 20 12 20z"/></symbol>
  <symbol id="nb-i-heart-fill" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path fill="currentColor" d="M12 20s-8-4.8-8-10.5A4.5 4.5 0 0 1 12 7a4.5 4.5 0 0 1 8 2.5C20 15.2 12 20 12 20z"/></symbol>
  <symbol id="nb-i-inbox" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M3.5 13.5 6 4.5h12l2.5 9V19.5h-17zM3.5 13.5h5l1 2.5h5l1-2.5h5"/></symbol>
  <symbol id="nb-i-bell" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M6 16.5V11a6 6 0 0 1 12 0v5.5l1.5 2h-15zM10 21h4"/></symbol>
  <symbol id="nb-i-moon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M20 14.5A8 8 0 0 1 9.5 4a8 8 0 1 0 10.5 10.5z"/></symbol>
  <symbol id="nb-i-search" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><circle cx="10.5" cy="10.5" r="6"/><path d="m15 15 5.5 5.5"/></symbol>
  <symbol id="nb-i-check" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="m4.5 12.5 5 5L19.5 7"/></symbol>
  <symbol id="nb-i-users" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><circle cx="9" cy="8.5" r="3.5"/><path d="M2.5 20a6.5 6.5 0 0 1 13 0M15.5 5.2a3.5 3.5 0 0 1 0 6.6M17.5 14.2a6.5 6.5 0 0 1 4 5.8"/></symbol>
  <symbol id="nb-i-arrow-up" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M12 19.5v-14M6.5 11 12 5.5l5.5 5.5"/></symbol>
  <symbol id="nb-i-dollar" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M12 2.5v19M16.5 6.5H10a3 3 0 0 0 0 6h4a3 3 0 0 1 0 6H7"/></symbol>
  <symbol id="nb-i-mail" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="5.5" width="18" height="13" rx="1.5"/><path d="m3.5 6.5 8.5 7 8.5-7"/></symbol>
  <symbol id="nb-i-arrow-down" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M12 4.5v14M6.5 13l5.5 5.5 5.5-5.5"/></symbol>
  <symbol id="nb-i-alert" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M12 3.5 2.5 20h19z"/><path d="M12 10v4.5M12 17.5h.01"/></symbol>
  <symbol id="nb-i-play" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path fill="currentColor" d="M7.5 4.5v15l12-7.5z"/></symbol>
  <symbol id="nb-i-pause" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path fill="currentColor" d="M6.5 4.5h4v15h-4zM13.5 4.5h4v15h-4z"/></symbol>
</svg>
<div class="flex flex-col gap-14 bg-transparent" data-nb="dark">
<section><span class="mb-[18px] block text-[.72rem] font-extrabold tracking-[.12em] text-nb-muted uppercase">Buttons · cream borders and shadows, fills keep dark text</span><div class="flex flex-wrap items-center gap-[18px]">
<button class="inline-flex items-center justify-center gap-2 border-(length:--nb-bw) border-nb-line font-nb font-bold leading-[1.2] no-underline cursor-pointer focus-visible:outline-3 focus-visible:outline-dashed focus-visible:outline-offset-[5px] focus-visible:outline-nb-focus disabled:cursor-not-allowed disabled:border-dashed disabled:bg-nb-paper disabled:text-nb-muted disabled:shadow-none disabled:[translate:none] shadow-nb transition-[translate,box-shadow] duration-[120ms] hover:[translate:-2px_-2px] hover:shadow-nb-hover active:[translate:var(--nb-press)] active:shadow-none motion-reduce:transition-none rounded-nb-sm min-h-[46px] px-[1.2rem] py-[.6rem] text-base bg-nb-lemon text-nb-on-fill" type="button"><svg class="size-5 shrink-0" aria-hidden="true" focusable="false"><use href="#nb-i-send"/></svg>Publish post</button>
<button class="inline-flex items-center justify-center gap-2 border-(length:--nb-bw) border-nb-line font-nb font-bold leading-[1.2] no-underline cursor-pointer focus-visible:outline-3 focus-visible:outline-dashed focus-visible:outline-offset-[5px] focus-visible:outline-nb-focus disabled:cursor-not-allowed disabled:border-dashed disabled:bg-nb-paper disabled:text-nb-muted disabled:shadow-none disabled:[translate:none] shadow-nb transition-[translate,box-shadow] duration-[120ms] hover:[translate:-2px_-2px] hover:shadow-nb-hover active:[translate:var(--nb-press)] active:shadow-none motion-reduce:transition-none rounded-nb-sm min-h-[46px] px-[1.2rem] py-[.6rem] text-base bg-nb-pink text-nb-on-fill" type="button"><svg class="size-5 shrink-0" aria-hidden="true" focusable="false"><use href="#nb-i-video"/></svg>Go live</button>
<button class="inline-flex items-center justify-center gap-2 border-(length:--nb-bw) border-nb-line font-nb font-bold leading-[1.2] no-underline cursor-pointer focus-visible:outline-3 focus-visible:outline-dashed focus-visible:outline-offset-[5px] focus-visible:outline-nb-focus disabled:cursor-not-allowed disabled:border-dashed disabled:bg-nb-paper disabled:text-nb-muted disabled:shadow-none disabled:[translate:none] shadow-nb transition-[translate,box-shadow] duration-[120ms] hover:[translate:-2px_-2px] hover:shadow-nb-hover active:[translate:var(--nb-press)] active:shadow-none motion-reduce:transition-none rounded-nb-sm min-h-[46px] px-[1.2rem] py-[.6rem] text-base bg-nb-cyan text-nb-on-fill" type="button"><svg class="size-5 shrink-0" aria-hidden="true" focusable="false"><use href="#nb-i-calendar"/></svg>Schedule</button>
<button class="inline-flex items-center justify-center gap-2 border-(length:--nb-bw) border-nb-line font-nb font-bold leading-[1.2] no-underline cursor-pointer focus-visible:outline-3 focus-visible:outline-dashed focus-visible:outline-offset-[5px] focus-visible:outline-nb-focus disabled:cursor-not-allowed disabled:border-dashed disabled:bg-nb-paper disabled:text-nb-muted disabled:shadow-none disabled:[translate:none] shadow-nb transition-[translate,box-shadow] duration-[120ms] hover:[translate:-2px_-2px] hover:shadow-nb-hover active:[translate:var(--nb-press)] active:shadow-none motion-reduce:transition-none rounded-nb-sm min-h-[46px] px-[1.2rem] py-[.6rem] text-base bg-nb-surface text-nb-ink" type="button"><svg class="size-5 shrink-0" aria-hidden="true" focusable="false"><use href="#nb-i-eye"/></svg>Preview</button>
<button class="inline-flex items-center justify-center gap-2 border-(length:--nb-bw) border-nb-line font-nb font-bold leading-[1.2] no-underline cursor-pointer focus-visible:outline-3 focus-visible:outline-dashed focus-visible:outline-offset-[5px] focus-visible:outline-nb-focus disabled:cursor-not-allowed disabled:border-dashed disabled:bg-nb-paper disabled:text-nb-muted disabled:shadow-none disabled:[translate:none] shadow-nb transition-[translate,box-shadow] duration-[120ms] hover:[translate:-2px_-2px] hover:shadow-nb-hover active:[translate:var(--nb-press)] active:shadow-none motion-reduce:transition-none rounded-nb-sm min-h-[46px] px-[1.2rem] py-[.6rem] text-base bg-nb-ink text-nb-paper" type="button"><svg class="size-5 shrink-0" aria-hidden="true" focusable="false"><use href="#nb-i-bolt"/></svg>Upgrade plan</button>
<button class="inline-flex items-center justify-center gap-2 border-(length:--nb-bw) border-nb-line font-nb font-bold leading-[1.2] no-underline cursor-pointer focus-visible:outline-3 focus-visible:outline-dashed focus-visible:outline-offset-[5px] focus-visible:outline-nb-focus disabled:cursor-not-allowed disabled:border-dashed disabled:bg-nb-paper disabled:text-nb-muted disabled:shadow-none disabled:[translate:none] shadow-nb transition-[translate,box-shadow] duration-[120ms] hover:[translate:-2px_-2px] hover:shadow-nb-hover active:[translate:var(--nb-press)] active:shadow-none motion-reduce:transition-none rounded-nb-sm min-h-[46px] px-[1.2rem] py-[.6rem] text-base bg-nb-blue text-nb-on-blue" type="button"><svg class="size-5 shrink-0" aria-hidden="true" focusable="false"><use href="#nb-i-link"/></svg>Copy link</button>
<button class="inline-flex items-center justify-center gap-2 border-(length:--nb-bw) border-nb-line font-nb font-bold leading-[1.2] no-underline cursor-pointer focus-visible:outline-3 focus-visible:outline-dashed focus-visible:outline-offset-[5px] focus-visible:outline-nb-focus disabled:cursor-not-allowed disabled:border-dashed disabled:bg-nb-paper disabled:text-nb-muted disabled:shadow-none disabled:[translate:none] shadow-nb transition-[translate,box-shadow] duration-[120ms] hover:[translate:-2px_-2px] hover:shadow-nb-hover active:[translate:var(--nb-press)] active:shadow-none motion-reduce:transition-none size-12 rounded-full bg-nb-surface text-nb-ink" type="button" aria-label="Share"><svg class="size-5 shrink-0" aria-hidden="true" focusable="false"><use href="#nb-i-share"/></svg></button>
<label class="group relative inline-flex"><input class="peer sr-only" type="checkbox" aria-label="Favourite" checked><span class="grid size-12 cursor-pointer place-items-center rounded-full border-(length:--nb-bw) border-nb-line bg-nb-surface text-nb-ink shadow-nb transition-[translate,box-shadow] duration-[120ms] motion-reduce:transition-none peer-checked:[translate:var(--nb-press)] peer-checked:shadow-none peer-checked:bg-nb-pink peer-checked:text-nb-on-fill peer-focus-visible:outline-3 peer-focus-visible:outline-dashed peer-focus-visible:outline-offset-[5px] peer-focus-visible:outline-nb-focus"><svg class="size-[22px] shrink-0 group-has-checked:hidden" aria-hidden="true" focusable="false"><use href="#nb-i-heart"/></svg><svg class="hidden size-[22px] shrink-0 group-has-checked:block" aria-hidden="true" focusable="false"><use href="#nb-i-heart-fill"/></svg></span></label>
</div></section>
<section><span class="mb-[18px] block text-[.72rem] font-extrabold tracking-[.12em] text-nb-muted uppercase">Toggle buttons</span><div class="grid grid-cols-[repeat(auto-fit,minmax(150px,1fr))] gap-5">
<label class="group relative flex"><input class="peer sr-only" type="checkbox" checked><span class="flex w-full min-w-[140px] cursor-pointer flex-col items-start gap-[.45rem] p-4 border-(length:--nb-bw) border-nb-line rounded-nb bg-nb-surface text-nb-ink shadow-nb transition-[translate,box-shadow] duration-[120ms] motion-reduce:transition-none peer-checked:[translate:var(--nb-press)] peer-checked:shadow-none peer-checked:bg-nb-lime peer-checked:text-nb-on-fill peer-focus-visible:outline-3 peer-focus-visible:outline-dashed peer-focus-visible:outline-offset-[5px] peer-focus-visible:outline-nb-focus"><span class="mb-[.2rem] grid size-[42px] place-items-center rounded-full border-(length:--nb-bw) border-nb-line bg-nb-paper group-has-checked:border-nb-on-fill group-has-checked:bg-nb-on-fill group-has-checked:text-nb-lime"><svg class="size-5 shrink-0" aria-hidden="true" focusable="false"><use href="#nb-i-inbox"/></svg></span><span class="leading-[1.25] font-extrabold">Comments</span><span class="inline-flex items-center gap-[.3rem] rounded-full border-2 border-current px-2 py-[.12rem] text-[.72rem] leading-normal font-extrabold tracking-[.08em] uppercase" aria-hidden="true"><span class="size-2 rounded-full border-2 border-current group-has-checked:h-1.5 group-has-checked:w-2.5 group-has-checked:-translate-y-px group-has-checked:-rotate-45 group-has-checked:rounded-none group-has-checked:border-t-0 group-has-checked:border-r-0"></span><span class="group-has-checked:hidden">Off</span><span class="hidden group-has-checked:inline">On</span></span></span></label>
<label class="group relative flex"><input class="peer sr-only" type="checkbox"><span class="flex w-full min-w-[140px] cursor-pointer flex-col items-start gap-[.45rem] p-4 border-(length:--nb-bw) border-nb-line rounded-nb bg-nb-surface text-nb-ink shadow-nb transition-[translate,box-shadow] duration-[120ms] motion-reduce:transition-none peer-checked:[translate:var(--nb-press)] peer-checked:shadow-none peer-checked:bg-nb-lime peer-checked:text-nb-on-fill peer-focus-visible:outline-3 peer-focus-visible:outline-dashed peer-focus-visible:outline-offset-[5px] peer-focus-visible:outline-nb-focus"><span class="mb-[.2rem] grid size-[42px] place-items-center rounded-full border-(length:--nb-bw) border-nb-line bg-nb-paper group-has-checked:border-nb-on-fill group-has-checked:bg-nb-on-fill group-has-checked:text-nb-lime"><svg class="size-5 shrink-0" aria-hidden="true" focusable="false"><use href="#nb-i-send"/></svg></span><span class="leading-[1.25] font-extrabold">Auto-post</span><span class="inline-flex items-center gap-[.3rem] rounded-full border-2 border-current px-2 py-[.12rem] text-[.72rem] leading-normal font-extrabold tracking-[.08em] uppercase" aria-hidden="true"><span class="size-2 rounded-full border-2 border-current group-has-checked:h-1.5 group-has-checked:w-2.5 group-has-checked:-translate-y-px group-has-checked:-rotate-45 group-has-checked:rounded-none group-has-checked:border-t-0 group-has-checked:border-r-0"></span><span class="group-has-checked:hidden">Off</span><span class="hidden group-has-checked:inline">On</span></span></span></label>
<label class="group relative flex"><input class="peer sr-only" type="checkbox" checked><span class="flex w-full min-w-[140px] cursor-pointer flex-col items-start gap-[.45rem] p-4 border-(length:--nb-bw) border-nb-line rounded-nb bg-nb-surface text-nb-ink shadow-nb transition-[translate,box-shadow] duration-[120ms] motion-reduce:transition-none peer-checked:[translate:var(--nb-press)] peer-checked:shadow-none peer-checked:bg-nb-lime peer-checked:text-nb-on-fill peer-focus-visible:outline-3 peer-focus-visible:outline-dashed peer-focus-visible:outline-offset-[5px] peer-focus-visible:outline-nb-focus"><span class="mb-[.2rem] grid size-[42px] place-items-center rounded-full border-(length:--nb-bw) border-nb-line bg-nb-paper group-has-checked:border-nb-on-fill group-has-checked:bg-nb-on-fill group-has-checked:text-nb-lime"><svg class="size-5 shrink-0" aria-hidden="true" focusable="false"><use href="#nb-i-bell"/></svg></span><span class="leading-[1.25] font-extrabold">Notify fans</span><span class="inline-flex items-center gap-[.3rem] rounded-full border-2 border-current px-2 py-[.12rem] text-[.72rem] leading-normal font-extrabold tracking-[.08em] uppercase" aria-hidden="true"><span class="size-2 rounded-full border-2 border-current group-has-checked:h-1.5 group-has-checked:w-2.5 group-has-checked:-translate-y-px group-has-checked:-rotate-45 group-has-checked:rounded-none group-has-checked:border-t-0 group-has-checked:border-r-0"></span><span class="group-has-checked:hidden">Off</span><span class="hidden group-has-checked:inline">On</span></span></span></label>
<label class="group relative flex"><input class="peer sr-only" type="checkbox"><span class="flex w-full min-w-[140px] cursor-pointer flex-col items-start gap-[.45rem] p-4 border-(length:--nb-bw) border-nb-line rounded-nb bg-nb-surface text-nb-ink shadow-nb transition-[translate,box-shadow] duration-[120ms] motion-reduce:transition-none peer-checked:[translate:var(--nb-press)] peer-checked:shadow-none peer-checked:bg-nb-lime peer-checked:text-nb-on-fill peer-focus-visible:outline-3 peer-focus-visible:outline-dashed peer-focus-visible:outline-offset-[5px] peer-focus-visible:outline-nb-focus"><span class="mb-[.2rem] grid size-[42px] place-items-center rounded-full border-(length:--nb-bw) border-nb-line bg-nb-paper group-has-checked:border-nb-on-fill group-has-checked:bg-nb-on-fill group-has-checked:text-nb-lime"><svg class="size-5 shrink-0" aria-hidden="true" focusable="false"><use href="#nb-i-moon"/></svg></span><span class="leading-[1.25] font-extrabold">Night mode</span><span class="inline-flex items-center gap-[.3rem] rounded-full border-2 border-current px-2 py-[.12rem] text-[.72rem] leading-normal font-extrabold tracking-[.08em] uppercase" aria-hidden="true"><span class="size-2 rounded-full border-2 border-current group-has-checked:h-1.5 group-has-checked:w-2.5 group-has-checked:-translate-y-px group-has-checked:-rotate-45 group-has-checked:rounded-none group-has-checked:border-t-0 group-has-checked:border-r-0"></span><span class="group-has-checked:hidden">Off</span><span class="hidden group-has-checked:inline">On</span></span></span></label>
</div></section>
<div class="grid grid-cols-1 gap-14 md:grid-cols-2">
<section><span class="mb-[18px] block text-[.72rem] font-extrabold tracking-[.12em] text-nb-muted uppercase">Switches</span><div class="relative border-(length:--nb-bw) border-nb-line rounded-nb p-[1.4rem] font-nb shadow-nb-lg bg-nb-surface text-nb-ink"><div class="grid gap-5">
<label class="group relative flex cursor-pointer items-center gap-[.8rem]"><input class="peer sr-only" type="checkbox" role="switch" checked><span class="min-w-0 flex-1 leading-[1.3] font-extrabold">Public profile<small class="mt-[.1rem] block text-[.85rem] font-medium text-nb-muted">Anyone can find your page</small></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>
<label class="group relative flex cursor-pointer items-center gap-[.8rem]"><input class="peer sr-only" type="checkbox" role="switch"><span class="min-w-0 flex-1 leading-[1.3] font-extrabold">Tip jar<small class="mt-[.1rem] block text-[.85rem] font-medium text-nb-muted">Fans can send one-off tips</small></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>
</div></div></section>
<section><span class="mb-[18px] block text-[.72rem] font-extrabold tracking-[.12em] text-nb-muted uppercase">Field, checkbox and segmented control</span><div class="grid gap-5">
<div class="grid min-w-0 gap-[.4rem]"><label class="text-[.95rem] font-extrabold" for="d-search">Search</label><div class="relative"><svg class="pointer-events-none absolute top-1/2 left-3.5 size-5 shrink-0 -translate-y-1/2" aria-hidden="true" focusable="false"><use href="#nb-i-search"/></svg><input class="min-h-12 w-full px-[.9rem] py-[.65rem] border-(length:--nb-bw) border-nb-line rounded-nb-sm bg-nb-surface font-nb text-base leading-[1.4] font-medium text-nb-ink shadow-nb-sm transition-shadow duration-[120ms] motion-reduce:transition-none placeholder:text-nb-muted placeholder:opacity-100 focus:outline-3 focus:outline-dashed focus:outline-offset-4 focus:outline-nb-focus focus:shadow-nb pl-11" id="d-search" type="search" placeholder="Posts, tags or fans"></div></div>
<label class="group relative flex cursor-pointer items-center gap-3 font-semibold"><input class="peer sr-only" type="checkbox" checked><span class="grid size-7 flex-none place-items-center border-(length:--nb-bw) border-nb-line rounded-md bg-nb-surface text-transparent shadow-nb-sm transition-[translate,box-shadow] duration-[120ms] motion-reduce:transition-none peer-checked:[translate:var(--nb-press-sm)] peer-checked:shadow-none peer-checked:bg-nb-lemon peer-checked:text-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"><svg class="size-[18px] shrink-0" aria-hidden="true" focusable="false"><use href="#nb-i-check"/></svg></span>Email me about new subscribers</label>
<fieldset class="m-0 min-w-0 border-0 p-0"><legend class="mb-[.55rem] p-0 font-extrabold">Post visibility</legend><div class="flex w-fit max-w-full flex-wrap overflow-hidden border-(length:--nb-bw) border-nb-line rounded-nb-sm bg-nb-surface shadow-nb"><label class="relative flex-auto"><input class="peer sr-only" type="radio" name="d-vis" value="public" checked><span class="flex min-h-11 cursor-pointer items-center justify-center gap-[.4rem] px-4 py-[.45rem] font-bold text-nb-ink peer-checked:bg-nb-lemon peer-checked:text-nb-on-fill peer-checked:before:h-[7px] peer-checked:before:w-3 peer-checked:before:-translate-y-0.5 peer-checked:before:-rotate-45 peer-checked:before:border-b-3 peer-checked:before:border-l-3 peer-checked:before:border-current peer-checked:before:content-[''] peer-focus-visible:outline-3 peer-focus-visible:outline-dashed peer-focus-visible:outline-offset-[-7px] peer-focus-visible:outline-nb-focus">Public</span></label><label class="relative flex-auto border-l-(length:--nb-bw) border-nb-line"><input class="peer sr-only" type="radio" name="d-vis" value="members"><span class="flex min-h-11 cursor-pointer items-center justify-center gap-[.4rem] px-4 py-[.45rem] font-bold text-nb-ink peer-checked:bg-nb-lemon peer-checked:text-nb-on-fill peer-checked:before:h-[7px] peer-checked:before:w-3 peer-checked:before:-translate-y-0.5 peer-checked:before:-rotate-45 peer-checked:before:border-b-3 peer-checked:before:border-l-3 peer-checked:before:border-current peer-checked:before:content-[''] peer-focus-visible:outline-3 peer-focus-visible:outline-dashed peer-focus-visible:outline-offset-[-7px] peer-focus-visible:outline-nb-focus">Members</span></label><label class="relative flex-auto border-l-(length:--nb-bw) border-nb-line"><input class="peer sr-only" type="radio" name="d-vis" value="draft"><span class="flex min-h-11 cursor-pointer items-center justify-center gap-[.4rem] px-4 py-[.45rem] font-bold text-nb-ink peer-checked:bg-nb-lemon peer-checked:text-nb-on-fill peer-checked:before:h-[7px] peer-checked:before:w-3 peer-checked:before:-translate-y-0.5 peer-checked:before:-rotate-45 peer-checked:before:border-b-3 peer-checked:before:border-l-3 peer-checked:before:border-current peer-checked:before:content-[''] peer-focus-visible:outline-3 peer-focus-visible:outline-dashed peer-focus-visible:outline-offset-[-7px] peer-focus-visible:outline-nb-focus">Draft</span></label></div></fieldset>
</div></section>
</div>
<section><span class="mb-[18px] block text-[.72rem] font-extrabold tracking-[.12em] text-nb-muted uppercase">Stat cards</span><div class="grid grid-cols-[repeat(auto-fit,minmax(min(100%,260px),1fr))] items-start gap-7">
<article class="relative border-(length:--nb-bw) border-nb-line rounded-nb p-[1.4rem] font-nb shadow-nb-lg bg-nb-lemon [--nb-muted:var(--nb-on-fill-muted)] text-nb-on-fill grid gap-[.35rem]"><div class="flex items-center justify-between gap-3"><h3 class="m-0 text-[.8rem] font-extrabold tracking-[.08em] uppercase">Subscribers</h3><span class="grid size-10 place-items-center rounded-full border-(length:--nb-bw) border-current"><svg class="size-5 shrink-0" aria-hidden="true" focusable="false"><use href="#nb-i-users"/></svg></span></div><p class="m-0 text-[2.3rem] font-nb-display font-black tracking-[-.01em] leading-[1.05]">12,480</p><p class="m-0 flex items-center gap-[.35rem] text-[.88rem] font-bold text-nb-muted"><svg class="size-4 shrink-0" aria-hidden="true" focusable="false"><use href="#nb-i-arrow-up"/></svg>Up 8.2% this month</p></article>
<article class="relative border-(length:--nb-bw) border-nb-line rounded-nb p-[1.4rem] font-nb shadow-nb-lg bg-nb-pink [--nb-muted:var(--nb-on-fill-muted)] text-nb-on-fill grid gap-[.35rem]"><div class="flex items-center justify-between gap-3"><h3 class="m-0 text-[.8rem] font-extrabold tracking-[.08em] uppercase">Revenue</h3><span class="grid size-10 place-items-center rounded-full border-(length:--nb-bw) border-current"><svg class="size-5 shrink-0" aria-hidden="true" focusable="false"><use href="#nb-i-dollar"/></svg></span></div><p class="m-0 text-[2.3rem] font-nb-display font-black tracking-[-.01em] leading-[1.05]">$4,920</p><p class="m-0 flex items-center gap-[.35rem] text-[.88rem] font-bold text-nb-muted"><svg class="size-4 shrink-0" aria-hidden="true" focusable="false"><use href="#nb-i-arrow-up"/></svg>Up $610 on September</p></article>
<article class="relative border-(length:--nb-bw) border-nb-line rounded-nb p-[1.4rem] font-nb shadow-nb-lg bg-nb-surface text-nb-ink grid gap-[.35rem]"><div class="flex items-center justify-between gap-3"><h3 class="m-0 text-[.8rem] font-extrabold tracking-[.08em] uppercase">Open rate</h3><span class="grid size-10 place-items-center rounded-full border-(length:--nb-bw) border-current"><svg class="size-5 shrink-0" aria-hidden="true" focusable="false"><use href="#nb-i-mail"/></svg></span></div><p class="m-0 text-[2.3rem] font-nb-display font-black tracking-[-.01em] leading-[1.05]">61%</p><p class="m-0 flex items-center gap-[.35rem] text-[.88rem] font-bold text-nb-muted"><svg class="size-4 shrink-0" aria-hidden="true" focusable="false"><use href="#nb-i-arrow-down"/></svg>Down 3 points on last issue</p></article>
</div></section>
<div class="grid grid-cols-1 gap-14 md:grid-cols-2">
<section><span class="mb-[18px] block text-[.72rem] font-extrabold tracking-[.12em] text-nb-muted uppercase">Alert</span><div class="flex items-start gap-[.85rem] border-(length:--nb-bw) border-nb-line rounded-nb px-[1.1rem] py-4 font-nb text-nb-on-fill shadow-nb bg-nb-lemon" role="note"><span class="grid size-[38px] flex-none place-items-center rounded-full bg-nb-on-fill text-nb-lemon"><svg class="size-5 shrink-0" aria-hidden="true" focusable="false"><use href="#nb-i-alert"/></svg></span><div class="min-w-0 flex-1"><p class="m-0 font-extrabold"><span class="sr-only">Warning: </span>Storage almost full</p><p class="m-0 mt-[.15rem]">You have used 9.2 GB of 10 GB. New episodes may fail to upload.</p></div></div></section>
<section><span class="mb-[18px] block text-[.72rem] font-extrabold tracking-[.12em] text-nb-muted uppercase">Now playing</span><div class="relative border-(length:--nb-bw) border-nb-line rounded-nb p-[1.4rem] font-nb shadow-nb-lg bg-nb-surface text-nb-ink grid grid-cols-[72px_minmax(0,1fr)_auto] items-center gap-4"><span class="size-[72px] overflow-hidden border-(length:--nb-bw) border-nb-line rounded-nb-sm bg-nb-violet [&>svg]:block [&>svg]:size-full"><svg viewBox="0 0 340 190" preserveAspectRatio="xMidYMid slice" aria-hidden="true" focusable="false"><rect width="340" height="190" style="fill:var(--nb-violet)"/><path d="M0 150l28-22 28 22 28-22 28 22 28-22 28 22 28-22 28 22 28-22 28 22 28-22 28 22v40H0z" stroke-width="3" style="fill:var(--nb-pink);stroke:var(--nb-line)"/><circle cx="170" cy="86" r="66" stroke-width="3" style="fill:#111;stroke:var(--nb-line)"/><circle cx="170" cy="86" r="50" fill="none" stroke="#3a3a3a" stroke-width="2"/><circle cx="170" cy="86" r="36" fill="none" stroke="#3a3a3a" stroke-width="2"/><circle cx="170" cy="86" r="22" stroke-width="3" style="fill:var(--nb-lemon);stroke:#111"/><circle cx="170" cy="86" r="4" fill="#111"/><path d="M262 34l8 16 18 2-13 12 4 18-17-9-16 9 3-18-13-12 18-2z" stroke-width="3" style="fill:var(--nb-lime);stroke:var(--nb-line)"/></svg></span>
<div><p class="m-0 leading-[1.25] font-extrabold">Neon Laundromat</p><p class="m-0 text-[.88rem] text-nb-muted">The Paper Cuts</p><div class="overflow-hidden rounded-full border-(length:--nb-bw) border-nb-line bg-nb-surface mt-2 h-3.5" role="progressbar" aria-label="Track position" aria-valuenow="102" aria-valuemin="0" aria-valuemax="238" aria-valuetext="1:42 of 3:58"><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-[43%] bg-nb-pink"></span></div></div>
<label class="group relative inline-flex"><input class="peer sr-only" type="checkbox" aria-label="Play" checked><span class="grid size-[62px] cursor-pointer place-items-center rounded-full border-(length:--nb-bw) border-nb-line bg-nb-lemon text-nb-on-fill shadow-nb transition-[translate,box-shadow] duration-[120ms] motion-reduce:transition-none peer-checked:[translate:var(--nb-press)] peer-checked:shadow-none peer-focus-visible:outline-3 peer-focus-visible:outline-dashed peer-focus-visible:outline-offset-[5px] peer-focus-visible:outline-nb-focus size-[54px]"><svg class="size-[26px] shrink-0 group-has-checked:hidden" aria-hidden="true" focusable="false"><use href="#nb-i-play"/></svg><svg class="hidden size-[26px] shrink-0 group-has-checked:block" aria-hidden="true" focusable="false"><use href="#nb-i-pause"/></svg></span></label></div></section>
</div>
</div>
CSS
/* ── Neobrutalism UI kit tokens (uiCookies) — identical in every set ─────────────
   Thick ink borders, hard offset shadows and flat saturated fills on cream paper.
   Change a token and the whole kit follows; the border and shadow recipes below are built from them. */
:root{
  --nb-paper:#fff6e0;        /* page background, cream */
  --nb-surface:#ffffff;      /* card, field and button faces */
  --nb-ink:#111111;          /* text, 17.5:1 on paper */
  --nb-muted:#454036;        /* secondary text, 9.6:1 on paper */
  --nb-line:#111111;         /* border colour */
  --nb-bw:3px;               /* border width */
  --nb-shadow-x:4px;         /* hard shadow offset; pressed controls move this far into it */
  --nb-shadow-y:4px;
  --nb-shadow-color:#111111;
  --nb-radius:12px;          /* cards and panels */
  --nb-radius-sm:8px;        /* buttons and fields */
  --nb-focus:#1d4ed8;        /* dashed focus outline, 6.2:1 on paper, never the shadow */
  --nb-on-fill:#111111;      /* text on every palette fill below, 6.8:1 or more */
  --nb-on-fill-muted:#2b2822;/* secondary text on fills, 5.2:1 or more */
  --nb-lemon:#ffe14d;--nb-pink:#ff90d0;--nb-cyan:#62e2e8;--nb-lime:#b6f36a;
  --nb-orange:#ffa94d;--nb-violet:#b9a3ff;--nb-red:#ff6b6b;
  --nb-blue:#2448e0;--nb-on-blue:#ffffff; /* the only fill that takes white text, 6.8:1 */
  --nb-danger:#b42318;       /* destructive text, 6.1:1 on paper */
  --nb-font:"Space Grotesk","Archivo","Helvetica Neue",Arial,system-ui,sans-serif;
  --nb-font-display:"Archivo Black","Arial Black","Helvetica Neue",Arial,sans-serif;
}
/* Dark brutalism: data-nb="dark" on any wrapper, or a checked .nb-theme-input inside a [data-nb] element.
   :is() is a forgiving list, so browsers without :has() still apply data-nb="dark". Fills keep dark text. */
[data-nb]:is([data-nb="dark"],:has(.nb-theme-input:checked)){
  --nb-paper:#17150f;--nb-surface:#25221b;--nb-ink:#fbf3dc;--nb-muted:#d6ccb2;--nb-line:#fbf3dc;
  --nb-shadow-color:#fbf3dc;--nb-focus:#8db4ff;--nb-danger:#ff9b8f;color-scheme:dark}
/* More contrast requested: secondary text turns full ink */
@media (prefers-contrast:more){:root,[data-nb]:is([data-nb],:has(.nb-theme-input:checked)){--nb-muted:var(--nb-ink);--nb-on-fill-muted:var(--nb-on-fill)}}
:root,[data-nb]{
  --nb-border:var(--nb-bw) solid var(--nb-line);
  --nb-shadow:var(--nb-shadow-x) var(--nb-shadow-y) 0 0 var(--nb-shadow-color);
  --nb-shadow-sm:calc(var(--nb-shadow-x)*.5) calc(var(--nb-shadow-y)*.5) 0 0 var(--nb-shadow-color);
  --nb-shadow-lg:calc(var(--nb-shadow-x)*1.75) calc(var(--nb-shadow-y)*1.75) 0 0 var(--nb-shadow-color);
  --nb-shadow-hover:calc(var(--nb-shadow-x) + 2px) calc(var(--nb-shadow-y) + 2px) 0 0 var(--nb-shadow-color);
  --nb-press:var(--nb-shadow-x) var(--nb-shadow-y);                       /* translate for a pressed control */
  --nb-press-sm:calc(var(--nb-shadow-x)*.5) calc(var(--nb-shadow-y)*.5);  /* …for one with the small shadow */
}
[data-nb]{background:var(--nb-paper);color:var(--nb-ink);font-family:var(--nb-font)}
/* The tokens above, exposed as Tailwind utilities: bg-nb-paper, bg-nb-lemon, text-nb-ink, border-nb-line,
   shadow-nb, shadow-nb-sm, shadow-nb-lg, rounded-nb, rounded-nb-sm, font-nb, font-nb-display, outline-nb-focus… */
@theme inline {
  --color-nb-paper: var(--nb-paper); --color-nb-surface: var(--nb-surface); --color-nb-ink: var(--nb-ink);
  --color-nb-muted: var(--nb-muted); --color-nb-line: var(--nb-line); --color-nb-focus: var(--nb-focus);
  --color-nb-on-fill: var(--nb-on-fill); --color-nb-on-fill-muted: var(--nb-on-fill-muted);
  --color-nb-lemon: var(--nb-lemon); --color-nb-pink: var(--nb-pink); --color-nb-cyan: var(--nb-cyan); --color-nb-lime: var(--nb-lime);
  --color-nb-orange: var(--nb-orange); --color-nb-violet: var(--nb-violet); --color-nb-red: var(--nb-red);
  --color-nb-blue: var(--nb-blue); --color-nb-on-blue: var(--nb-on-blue); --color-nb-danger: var(--nb-danger);
  --shadow-nb: var(--nb-shadow); --shadow-nb-sm: var(--nb-shadow-sm); --shadow-nb-lg: var(--nb-shadow-lg); --shadow-nb-hover: var(--nb-shadow-hover);
  --radius-nb: var(--nb-radius); --radius-nb-sm: var(--nb-radius-sm);
  --font-nb: var(--nb-font); --font-nb-display: var(--nb-font-display);
}
/* Starburst sticker outline (Tailwind has no clip-path utility) */
@utility clip-nb-burst {
  clip-path: polygon(50% 0%,59.1% 16.1%,75% 6.7%,74.8% 25.2%,93.3% 25%,83.9% 40.9%,100% 50%,83.9% 59.1%,93.3% 75%,74.8% 74.8%,75% 93.3%,59.1% 83.9%,50% 100%,40.9% 83.9%,25% 93.3%,25.2% 74.8%,6.7% 75%,16.1% 59.1%,0% 50%,16.1% 40.9%,6.7% 25%,25.2% 25.2%,25% 6.7%,40.9% 16.1%);
}

About this set

The same kit on a dark background, switched by one attribute. Put data-nb=”dark” on any wrapper and the shared tokens change to near-black paper, a dark surface, cream text, cream borders and cream offset shadows, with a lighter blue for the dashed focus outline, so every component follows without its own dark rules. The saturated fills stay the same and keep dark text, which is what gives dark brutalism its punch. This set shows the buttons, an icon button and favourite toggle, toggle tiles, switch rows, a search field, a checkbox, a segmented control, three stat cards, a warning alert and a now playing bar with a progress bar and a play toggle. Text keeps at least 4.5:1 on the dark paper and surface, borders and shadows are cream against near-black, and the focus outline uses its own light blue so it never blends with the shadow. Use it for night modes, media apps and dashboards. Bootstrap adds data-bs-theme=”dark” next to data-nb so its own components match, and Tailwind needs no dark: classes because the utilities read the tokens.

What’s included

  • One attribute, data-nb="dark", re-themes every component
  • Cream borders and shadows on near-black paper
  • Fills keep dark text for contrast
  • Buttons, toggles, switches, field, segmented control, stat cards, alert and player
  • Works with Bootstrap's data-bs-theme="dark"

Accessibility

Every control keeps its native semantics and name from the light kit, and on states are still shown by position, a check or a word as well as colour. The focus outline switches to a lighter blue that reaches more than 7:1 on the dark surfaces, and the play control is a named checkbox beside a labelled progressbar. Transitions stop under prefers-reduced-motion.

Customise it

Edit the [data-nb] dark token rule in the block at the top; the light values are on :root. Bootstrap reads the same tokens through the --bs-* mapping, and Tailwind's bg-nb-paper, text-nb-ink and shadow-nb utilities change with them.