Open demo

CSS code

HTML
<div data-scene="dark">
<div class="g-scene" aria-hidden="true"><i></i><i></i><i></i><i></i></div>
<div class="wrap"><div class="two">
<div class="col">
<section class="g-glass g-panel" aria-labelledby="d1"><span class="lbl" id="d1">Buttons and switches</span>
  <div class="g-row">
    <button type="button" class="g-btn g-btn--accent">Deploy to production</button>
    <button type="button" class="g-btn">View logs</button>
    <button type="button" class="g-btn g-btn--quiet">Cancel</button>
  </div>
  <div class="g-row">
    <button type="button" class="g-icon-btn g-icon-btn--accent" aria-label="Play"><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M8 5.5v13l10.5-6.5z"/></svg></button>
    <button type="button" class="g-icon-btn" aria-label="Share"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 13v6a1 1 0 0 0 1 1h14a1 1 0 0 0 1-1v-6M12 3v12M7 8l5-5 5 5"/></svg></button>
    <button type="button" class="g-icon-btn" aria-label="More options"><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><circle cx="5" cy="12" r="2"/><circle cx="12" cy="12" r="2"/><circle cx="19" cy="12" r="2"/></svg></button>
  </div>
  <ul class="g-list">
    <li><label class="g-switch"><span>Auto-scaling<small>Up to 12 instances</small></span><input type="checkbox" role="switch" checked></label></li>
    <li><label class="g-switch"><span>Maintenance mode<small>Shows a holding page to visitors</small></span><input type="checkbox" role="switch"></label></li>
  </ul>
</section>
<section class="g-glass g-panel" aria-labelledby="d2"><span class="lbl" id="d2">Form controls</span>
  <div class="form-stack">
    <div class="g-field"><label class="g-label" for="d-domain">Custom domain</label><input class="g-input" id="d-domain" type="text" placeholder="app.example.com" aria-describedby="d-domain-hint"><span class="g-hint" id="d-domain-hint">Point a CNAME record at edge.northwind.dev.</span></div>
    <div class="g-field"><label class="g-label" for="d-region">Region</label><div class="g-select"><select class="g-input" id="d-region"><option>Frankfurt (eu-central)</option><option>Dublin (eu-west)</option><option>Virginia (us-east)</option></select></div></div>
    <div class="checks"><label class="g-check"><input type="checkbox" checked>Enable HTTPS</label><label class="g-check"><input type="checkbox">Preview branches</label></div>
  </div>
</section>
</div>
<div class="col">
<article class="g-glass g-card" aria-labelledby="d3">
  <span class="lbl" id="d3">Stat tile</span>
  <div class="g-stat-top"><h3>Requests today</h3><span class="g-badge-icon" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 12h4l3-8 4 16 3-8h4"/></svg></span></div>
  <p class="g-value">1.84M</p>
  <p class="g-delta"><b><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 19V5M6 11l6-6 6 6"/></svg>4.1%</b>vs yesterday</p>
  <svg class="g-spark" viewBox="0 0 200 56" preserveAspectRatio="none" aria-hidden="true"><path d="M0 40 20 44l20-8 20 4 20-14 20 6 20-12 20 8 20-16 20 4 20-10v54H0Z" fill="currentColor" fill-opacity=".18"/><path d="M0 40 20 44l20-8 20 4 20-14 20 6 20-12 20 8 20-16 20 4 20-10" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linejoin="round" vector-effect="non-scaling-stroke"/></svg>
  <p class="sr-only">Traffic rose through the day, peaking this evening.</p>
</article>
<section class="g-glass g-panel" aria-labelledby="d4"><span class="lbl" id="d4">Tabs and pagination</span>
  <nav class="g-tabs" aria-label="Service sections">
    <a href="#overview" aria-current="page">Overview</a>
    <a href="#deployments">Deployments<span class="g-count">8</span></a>
    <a href="#metrics">Metrics</a>
  </nav>
  <nav aria-label="Pagination" class="g-pager"><ul class="g-pages">
    <li><a href="#p1" aria-label="Previous page"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M15 5l-7 7 7 7"/></svg></a></li>
    <li><a href="#p1" aria-label="Page 1">1</a></li>
    <li><a href="#p2" aria-label="Page 2" aria-current="page">2</a></li>
    <li><a href="#p3" aria-label="Page 3">3</a></li>
    <li><a href="#p3" aria-label="Next page"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M9 5l7 7-7 7"/></svg></a></li>
  </ul></nav>
</section>
<div class="g-strong g-toast" role="status"><span class="g-toast-icon" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M5 12.5l4.5 4.5L19 7.5"/></svg></span>
  <p class="g-toast-text"><b>Deploy finished</b>Build 1482 is live in Frankfurt.</p></div>
</div>
</div></div>
</div>
CSS
/* ===== uiCookies Glassmorphism kit: design tokens (identical in every set) =====
   Retheme the whole kit here. Light scene on :root, dark scene on [data-scene="dark"]
   (or any [data-scene] holding a checked [data-scene-switch]). Selectors use :where()
   so the fallbacks below always win. */
:where(:root,[data-scene="light"]){
  color-scheme:light;
  /* background scene: the colour the glass frosts */
  --scene-base:linear-gradient(155deg,#eceffe 0%,#fbeef7 52%,#e6f6fb 100%);
  --scene-1:linear-gradient(140deg,#7c3aed,#c026d3);
  --scene-2:linear-gradient(140deg,#fb7185,#f97316);
  --scene-3:linear-gradient(140deg,#22d3ee,#3b82f6);
  --scene-4:linear-gradient(140deg,#fde047,#fb923c);
  /* glass */
  --glass-tint:255 255 255;
  --glass-border:rgb(255 255 255 / .8);
  --glass-edge:rgb(36 32 88 / .9);
  --glass-highlight:inset 0 1px 0 rgb(255 255 255 / .85);
  --glass-shadow:0 18px 40px -18px rgb(37 30 102 / .45);
  --glass-ink:#16133a;
  --glass-ink-soft:#3b3862;
  --glass-accent:#4338ca;
  --glass-accent-bg:rgb(67 56 202 / .92);
  --glass-on-accent:#fff;
  --glass-check-icon:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M3.5 8.5l3 3 6-7' fill='none' stroke='%23fff' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
  --glass-focus:#1e1b4b;
  --glass-good:#14532d;--glass-good-bg:rgb(220 252 231 / .9);
  --glass-bad:#991b1b;--glass-bad-bg:rgb(254 226 226 / .9);
  --glass-warn:#7c2d12;--glass-warn-bg:rgb(254 243 199 / .9);
  --glass-scrim:rgb(22 19 58 / .3);
}
:where([data-scene="dark"]),:where([data-scene]:has([data-scene-switch]:checked)){
  color-scheme:dark;
  --scene-base:linear-gradient(155deg,#0a0c22 0%,#170c2c 52%,#06171f 100%);
  --scene-1:linear-gradient(140deg,#6d28d9,#a21caf);
  --scene-2:linear-gradient(140deg,#e11d48,#ea580c);
  --scene-3:linear-gradient(140deg,#0891b2,#2563eb);
  --scene-4:linear-gradient(140deg,#ca8a04,#c2410c);
  --glass-tint:16 18 44;
  --glass-border:rgb(255 255 255 / .2);
  --glass-edge:rgb(214 220 255 / .72);
  --glass-highlight:inset 0 1px 0 rgb(255 255 255 / .16);
  --glass-shadow:0 18px 40px -18px rgb(0 0 0 / .75);
  --glass-ink:#f5f6ff;
  --glass-ink-soft:#d0d3ee;
  --glass-accent:#a5b4fc;
  --glass-accent-bg:rgb(165 180 252 / .96);
  --glass-on-accent:#14123a;
  --glass-check-icon:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M3.5 8.5l3 3 6-7' fill='none' stroke='%2314123a' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
  --glass-focus:#c7d2fe;
  --glass-good:#bbf7d0;--glass-good-bg:rgb(20 83 45 / .7);
  --glass-bad:#fecaca;--glass-bad-bg:rgb(127 29 29 / .7);
  --glass-warn:#fde68a;--glass-warn-bg:rgb(120 53 15 / .7);
  --glass-scrim:rgb(0 0 0 / .5);
}
:where(:root){
  --glass-alpha:.6;          /* panels and cards */
  --glass-alpha-strong:.82;  /* menus, dialogs, toasts: they cover unknown content */
  --glass-alpha-control:.5;  /* buttons and fields sitting on a panel */
  --glass-blur:18px;
  --glass-saturate:150%;
  --glass-radius:20px;
}
/* derived: recomputed inside every scene so a dark scene gets dark glass */
:where(:root,[data-scene]){
  --glass-bg:rgb(var(--glass-tint) / var(--glass-alpha));
  --glass-bg-strong:rgb(var(--glass-tint) / var(--glass-alpha-strong));
  --glass-bg-control:rgb(var(--glass-tint) / var(--glass-alpha-control));
}
/* no backdrop-filter: frosting can't happen, so the glass turns nearly solid */
@supports not ((backdrop-filter:blur(1px)) or (-webkit-backdrop-filter:blur(1px))){
  :where(:root){--glass-alpha:.94;--glass-alpha-strong:.97;--glass-alpha-control:.9}
}
@media (prefers-reduced-transparency:reduce){
  :where(:root){--glass-alpha:.93;--glass-alpha-strong:.97;--glass-alpha-control:.9;--glass-blur:8px}
}
@media (prefers-contrast:more){
  :where(:root){--glass-alpha:.96;--glass-alpha-strong:.98;--glass-alpha-control:.96}
  :where(:root,[data-scene]){--glass-border:var(--glass-ink);--glass-edge:var(--glass-ink)}
}
/* ===== end of tokens ===== */
/* scene: fixed page background of four gradient orbs (decorative, aria-hidden) */
:where([data-scene]){color:var(--glass-ink)}
.g-scene{position:fixed;inset:0;z-index:-1;overflow:hidden;pointer-events:none;background:var(--scene-base)}
.g-scene i{position:absolute;aspect-ratio:1;border-radius:50%;animation:g-drift 32s ease-in-out infinite alternate}
.g-scene i:nth-child(1){width:clamp(240px,40vw,520px);left:-7%;top:-9%;background:var(--scene-1)}
.g-scene i:nth-child(2){width:clamp(170px,26vw,360px);right:-5%;top:18%;background:var(--scene-2);animation-delay:-9s}
.g-scene i:nth-child(3){width:clamp(220px,34vw,460px);left:28%;bottom:-16%;background:var(--scene-3);animation-delay:-17s}
.g-scene i:nth-child(4){width:clamp(90px,13vw,180px);left:54%;top:7%;background:var(--scene-4);animation-delay:-4s}
@keyframes g-drift{to{transform:translate3d(3vw,4vh,0) scale(1.06)}}
/* glass surface */
.g-glass{background:var(--glass-bg);-webkit-backdrop-filter:blur(var(--glass-blur)) saturate(var(--glass-saturate));
  backdrop-filter:blur(var(--glass-blur)) saturate(var(--glass-saturate));border:1px solid var(--glass-border);
  border-radius:var(--glass-radius);box-shadow:var(--glass-highlight),var(--glass-shadow);color:var(--glass-ink)}
.g-glass--strong{background:var(--glass-bg-strong)}
.g-panel{padding:24px}
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.g-muted{color:var(--glass-ink-soft)}
@media (prefers-reduced-motion:reduce){.g-scene i{animation:none}}
/* buttons: glass control, tinted accent glass, quiet text button, round icon button */
.g-row{display:flex;flex-wrap:wrap;align-items:center;gap:12px}
.g-row+.g-row{margin-top:14px}
.g-btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:44px;padding:0 20px;
  border:1px solid var(--glass-edge);border-radius:999px;background:var(--glass-bg-control);
  -webkit-backdrop-filter:blur(var(--glass-blur));backdrop-filter:blur(var(--glass-blur));box-shadow:var(--glass-highlight);
  color:var(--glass-ink);font:inherit;font-size:.95rem;font-weight:600;line-height:1;text-decoration:none;cursor:pointer;
  transition:background-color .2s,transform .2s}
.g-btn:hover{background:var(--glass-bg-strong)}
.g-btn:active{transform:translateY(1px)}
.g-btn:focus-visible,.g-icon-btn:focus-visible{outline:3px solid var(--glass-focus);outline-offset:3px}
.g-btn svg,.g-icon-btn svg{width:18px;height:18px;flex:none}
.g-btn--accent{border-color:transparent;background:var(--glass-accent-bg);color:var(--glass-on-accent);
  box-shadow:var(--glass-highlight)}
.g-btn--accent:hover{background:var(--glass-accent-bg);filter:brightness(1.08)}
.g-btn--quiet{border-color:transparent;background:transparent;-webkit-backdrop-filter:none;backdrop-filter:none;box-shadow:none;
  text-decoration:underline;text-underline-offset:4px;text-decoration-thickness:1px}
.g-btn--quiet:hover{background:var(--glass-bg-control)}
.g-btn--strong{background:var(--glass-bg-strong)} /* for buttons placed straight on the scene */
.g-btn--sm{min-height:36px;padding:0 14px;font-size:.85rem}
.g-btn--lg{min-height:54px;padding:0 28px;font-size:1.05rem}
.g-btn:disabled{opacity:.5;cursor:not-allowed;transform:none}
.g-icon-btn{display:inline-grid;place-items:center;width:44px;height:44px;padding:0;border:1px solid var(--glass-edge);border-radius:50%;
  background:var(--glass-bg-control);-webkit-backdrop-filter:blur(var(--glass-blur));backdrop-filter:blur(var(--glass-blur));
  box-shadow:var(--glass-highlight);color:var(--glass-ink);cursor:pointer;transition:background-color .2s,transform .2s}
.g-icon-btn:hover{background:var(--glass-bg-strong)}
.g-icon-btn:active{transform:scale(.96)}
.g-icon-btn--accent{border-color:transparent;background:var(--glass-accent-bg);color:var(--glass-on-accent)}
.g-icon-btn--accent:hover{background:var(--glass-accent-bg);filter:brightness(1.08)}
.g-icon-btn--lg{width:56px;height:56px}
.g-icon-btn--lg svg{width:22px;height:22px}
@media (prefers-reduced-motion:reduce){.g-btn,.g-icon-btn{transition:none}.g-btn:active,.g-icon-btn:active{transform:none}}
/* switch: the checkbox itself is restyled (appearance:none); the knob is a background gradient, dark when off, white when on */
.g-switch{display:flex;align-items:center;justify-content:space-between;gap:16px;cursor:pointer}
.g-switch small{display:block;font-size:.8rem;color:var(--glass-ink-soft)}
.g-switch input{-webkit-appearance:none;appearance:none;flex:none;width:52px;height:30px;margin:0;border:1px solid var(--glass-edge);
  border-radius:999px;cursor:pointer;
  background:radial-gradient(circle closest-side,var(--glass-ink-soft) 0 82%,transparent 88%) 3px 50% / 22px 22px no-repeat,var(--glass-bg-control);
  box-shadow:inset 0 1px 3px rgb(0 0 0 / .14);transition:background-position .2s,background-color .2s}
.g-switch input:checked{border-color:transparent;
  background:radial-gradient(circle closest-side,var(--glass-on-accent) 0 88%,transparent 94%) calc(100% - 3px) 50% / 24px 24px no-repeat,var(--glass-accent-bg)}
.g-switch input:focus-visible{outline:3px solid var(--glass-focus);outline-offset:3px}
/* segmented control: a radio group */
.g-seg{display:inline-flex;margin:0;padding:4px;border:1px solid var(--glass-edge);border-radius:999px;background:var(--glass-bg-control);
  -webkit-backdrop-filter:blur(var(--glass-blur));backdrop-filter:blur(var(--glass-blur))}
.g-seg legend{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0)}
.g-seg label{position:relative;cursor:pointer}
.g-seg input{position:absolute;inset:0;opacity:0;margin:0;cursor:pointer}
.g-seg span{display:block;padding:8px 18px;border-radius:999px;font-size:.9rem;font-weight:600;color:var(--glass-ink);transition:background-color .2s,color .2s}
.g-seg input:checked+span{background:var(--glass-accent-bg);color:var(--glass-on-accent)}
.g-seg input:focus-visible+span{outline:3px solid var(--glass-focus);outline-offset:2px}
@media (prefers-reduced-motion:reduce){.g-switch input,.g-seg span{transition:none}}
/* form controls: every field has a 3:1 --glass-edge boundary and turns more opaque on focus */
.g-field{display:grid;gap:6px;align-content:start}
.g-label{font-size:.88rem;font-weight:600;color:var(--glass-ink)}
.g-label-row{display:flex;align-items:baseline;justify-content:space-between;gap:12px}
.g-input{width:100%;min-height:46px;padding:10px 14px;border:1px solid var(--glass-edge);border-radius:12px;background:var(--glass-bg-control);
  box-shadow:var(--glass-highlight);color:var(--glass-ink);font:inherit;font-size:.95rem;transition:background-color .2s}
.g-input::placeholder{color:var(--glass-ink-soft);opacity:1}
.g-input:hover,.g-input:focus{background:var(--glass-bg-strong)}
.g-input:focus-visible{outline:3px solid var(--glass-focus);outline-offset:2px}
.g-hint{font-size:.8rem;color:var(--glass-ink-soft)}
.g-with-icon{position:relative}
.g-with-icon svg{position:absolute;left:14px;top:50%;width:18px;height:18px;transform:translateY(-50%);color:var(--glass-ink-soft);pointer-events:none}
.g-with-icon .g-input{padding-left:42px}
.g-select{position:relative}
.g-select select{-webkit-appearance:none;appearance:none;padding-right:42px;cursor:pointer}
.g-select::after{content:"";position:absolute;right:18px;top:50%;width:8px;height:8px;border-right:2px solid var(--glass-ink);border-bottom:2px solid var(--glass-ink);
  transform:translateY(-70%) rotate(45deg);pointer-events:none}
.g-group{display:grid;gap:10px;margin:0;padding:0;border:0}
.g-group legend{margin-bottom:10px;padding:0}
.g-check{display:flex;align-items:center;gap:10px;cursor:pointer;font-size:.95rem}
.g-check input{-webkit-appearance:none;appearance:none;flex:none;width:22px;height:22px;margin:0;border:1.5px solid var(--glass-edge);border-radius:7px;
  background:var(--glass-bg-control) 50% / 14px no-repeat;cursor:pointer;transition:background-color .15s}
.g-check input[type=radio]{border-radius:50%}
.g-check input:checked{border-color:transparent;background-color:var(--glass-accent-bg);
  background-image:var(--glass-check-icon)}
.g-check input[type=radio]:checked{background-image:radial-gradient(circle,var(--glass-on-accent) 0 4px,transparent 4.5px);background-size:auto}
.g-check input:focus-visible{outline:3px solid var(--glass-focus);outline-offset:2px}
/* range slider: 3:1 track edge, accent thumb with a white ring */
.g-range{-webkit-appearance:none;appearance:none;display:block;width:100%;height:28px;margin:0;background:transparent;cursor:pointer}
.g-range::-webkit-slider-runnable-track{height:10px;border:1px solid var(--glass-edge);border-radius:999px;background:var(--glass-bg-control)}
.g-range::-moz-range-track{height:8px;border:1px solid var(--glass-edge);border-radius:999px;background:var(--glass-bg-control)}
.g-range::-webkit-slider-thumb{-webkit-appearance:none;width:24px;height:24px;margin-top:-8px;border:3px solid #fff;border-radius:50%;
  background:var(--glass-accent-bg);box-shadow:0 0 0 1px var(--glass-edge),0 2px 6px rgb(0 0 0 / .25)}
.g-range::-moz-range-thumb{width:18px;height:18px;border:3px solid #fff;border-radius:50%;background:var(--glass-accent-bg);
  box-shadow:0 0 0 1px var(--glass-edge),0 2px 6px rgb(0 0 0 / .25)}
.g-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px var(--glass-edge),0 2px 6px rgb(0 0 0 / .25)}
.g-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px var(--glass-edge),0 2px 6px rgb(0 0 0 / .25)}
.g-range:focus-visible{outline:3px solid var(--glass-focus);outline-offset:4px;border-radius:999px}
.g-scale{display:flex;justify-content:space-between;font-size:.8rem;color:var(--glass-ink-soft)}
.g-link{color:var(--glass-ink);font-weight:600;text-decoration:underline;text-underline-offset:3px}
.g-link:hover{text-decoration-thickness:2px}
.g-link:focus-visible{outline:3px solid var(--glass-focus);outline-offset:2px;border-radius:4px}
@media (prefers-reduced-motion:reduce){.g-input,.g-check input{transition:none}}
/* cards: content, stat tile, profile, pricing. All sit on .g-glass */
.g-card{display:flex;flex-direction:column;gap:12px;padding:22px}
:where(.g-card) h3{font-size:1.08rem;line-height:1.3}
:where(.g-card) p{font-size:.92rem}
.g-media{height:132px;margin:-12px -12px 4px;border-radius:calc(var(--glass-radius) - 8px);overflow:hidden;background:var(--scene-3)}
.g-media svg{display:block;width:100%;height:100%}
.g-chip{align-self:flex-start;display:inline-flex;align-items:center;gap:6px;padding:4px 10px;border-radius:999px;background:var(--glass-bg-strong);
  border:1px solid var(--glass-border);font-size:.75rem;font-weight:700;color:var(--glass-ink)}
.g-chip--accent{border-color:transparent;background:var(--glass-accent-bg);color:var(--glass-on-accent)}
.g-title-link{color:inherit;text-decoration:none;border-radius:4px}
.g-title-link:hover{text-decoration:underline;text-underline-offset:3px}
.g-title-link:focus-visible{outline:3px solid var(--glass-focus);outline-offset:2px}
.g-meta{margin-top:auto;font-size:.82rem;color:var(--glass-ink-soft)}
.g-stat-top{display:flex;align-items:center;justify-content:space-between;gap:12px}
.g-stat-top h3{font-size:.9rem;font-weight:600;color:var(--glass-ink-soft)}
.g-badge-icon{display:grid;place-items:center;width:38px;height:38px;border-radius:12px;background:var(--glass-accent-bg);color:var(--glass-on-accent)}
.g-badge-icon svg{width:20px;height:20px}
.g-value{font-size:2.1rem;font-weight:800;letter-spacing:-.02em;line-height:1.1}
.g-delta{display:flex;align-items:center;flex-wrap:wrap;gap:8px;font-size:.85rem;color:var(--glass-ink-soft)}
.g-delta b{display:inline-flex;align-items:center;gap:3px;padding:3px 8px;border-radius:999px;background:var(--glass-good-bg);color:var(--glass-good);font-weight:700}
.g-delta b svg{width:14px;height:14px}
.g-minis{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin:2px 0 0}
.g-minis div{display:flex;flex-direction:column-reverse;padding:8px 10px;border:1px solid var(--glass-border);border-radius:12px;background:var(--glass-bg-control)}
.g-minis dt{font-size:.75rem;color:var(--glass-ink-soft)}
.g-minis dd{margin:0;font-weight:700}
.g-spark{display:block;width:100%;height:56px;margin-top:auto;color:var(--glass-accent)}
.g-profile{align-items:center;text-align:center}
.g-avatar{display:grid;place-items:center;width:76px;height:76px;border-radius:50%;background:var(--scene-1);color:#fff;font-size:1.5rem;font-weight:700;
  border:3px solid var(--glass-border);box-shadow:0 8px 20px -10px rgb(0 0 0 / .45)}
.g-stats{display:grid;grid-template-columns:repeat(3,1fr);width:100%;margin:4px 0;padding:12px 0;border-block:1px solid var(--glass-border)}
.g-stats div{display:flex;flex-direction:column-reverse}
.g-stats dt{font-size:.75rem;color:var(--glass-ink-soft)}
.g-stats dd{margin:0;font-size:1.05rem;font-weight:700}
.g-profile .g-row{justify-content:center}
.g-price-head{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap}
.g-amount{display:flex;align-items:baseline;gap:6px}
.g-amount b{font-size:2.4rem;font-weight:800;letter-spacing:-.03em;line-height:1}
.g-amount span{font-size:.9rem;color:var(--glass-ink-soft)}
.g-ticks{list-style:none;display:grid;gap:9px;margin:4px 0 6px;padding:0;font-size:.92rem}
.g-ticks li{display:flex;gap:10px;align-items:flex-start}
.g-ticks svg{flex:none;width:18px;height:18px;margin-top:2px;color:var(--glass-accent)}
.g-card .g-btn{margin-top:auto}
/* navigation: every current item is marked with aria-current and a 3:1 indicator, not colour alone */
.g-navbar{display:flex;flex-wrap:wrap;align-items:center;gap:10px 18px;padding:10px 12px 10px 18px}
.g-brand{display:inline-flex;align-items:center;gap:10px;border-radius:8px;color:var(--glass-ink);font-size:1.05rem;font-weight:800;text-decoration:none}
.g-brand svg{width:28px;height:28px}
.g-brand rect{fill:var(--glass-accent-bg)}
.g-navbar>nav{margin:0 auto 0 8px}
.g-navlinks{display:flex;flex-wrap:wrap;gap:4px;margin:0;padding:0;list-style:none}
.g-navlinks a,.g-tabs a,.g-side ul a{color:var(--glass-ink);font-size:.92rem;font-weight:600;text-decoration:none;transition:background-color .2s}
.g-navlinks a{display:block;padding:8px 14px;border-radius:999px}
.g-navlinks a:hover,.g-tabs a:hover,.g-side ul a:hover{background:var(--glass-bg-control)}
.g-navlinks a[aria-current="page"]{background:var(--glass-bg-strong);box-shadow:inset 0 0 0 1px var(--glass-edge)}
.g-nav-actions{display:flex;align-items:center;gap:8px}
@media (max-width:760px){.g-navbar{justify-content:space-between;column-gap:10px}.g-navbar>nav{order:3;width:100%;margin:0}.g-navlinks{gap:2px}.g-navlinks a{padding:7px 8px;font-size:.88rem}}
.g-tabs{display:flex;flex-wrap:wrap;gap:4px;padding:5px;border-radius:16px}
.g-tabs a{display:inline-flex;align-items:center;gap:8px;padding:9px 16px;border-radius:12px}
.g-tabs a[aria-current="page"],.g-side ul a[aria-current="page"]{background:var(--glass-accent-bg);color:var(--glass-on-accent)}
.g-count{min-width:22px;padding:1px 7px;border-radius:999px;background:var(--glass-bg-strong);color:var(--glass-ink);font-size:.75rem;font-weight:700;text-align:center}
.g-side{display:flex;flex-direction:column;gap:4px;padding:14px}
.g-side h2{margin:12px 12px 6px;font-size:.72rem;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--glass-ink-soft)}
.g-side h2:first-child{margin-top:4px}
.g-side ul{display:grid;gap:2px;margin:0;padding:0;list-style:none}
.g-side ul a{display:flex;align-items:center;gap:12px;padding:10px 12px;border-radius:12px}
.g-side ul a svg{flex:none;width:20px;height:20px}
.g-side .g-count{margin-left:auto}
.g-side-user{display:flex;align-items:center;gap:10px;margin-top:10px;padding:12px;border-top:1px solid var(--glass-border);font-size:.85rem}
.g-side-user b{display:block;font-size:.9rem}
.g-side-user span{color:var(--glass-ink-soft)}
.g-initials{display:grid;place-items:center;flex:none;width:36px;height:36px;border-radius:50%;background:var(--scene-1);color:#fff;font-size:.8rem;font-weight:700}
.g-crumbs{display:flex;flex-wrap:wrap;width:fit-content;max-width:100%;align-items:center;gap:6px;margin:0;padding:10px 18px;list-style:none;border-radius:999px;font-size:.9rem}
.g-crumbs li{display:flex;align-items:center;gap:6px}
.g-crumbs li+li::before{content:"";width:6px;height:6px;margin-right:4px;border-top:1.5px solid var(--glass-ink-soft);border-right:1.5px solid var(--glass-ink-soft);transform:rotate(45deg)}
.g-crumbs a{border-radius:4px;color:var(--glass-ink-soft);text-decoration:underline;text-underline-offset:3px}
.g-crumbs a:hover{color:var(--glass-ink)}
.g-crumbs [aria-current]{font-weight:700;color:var(--glass-ink)}
.g-pages{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin:0;padding:0;list-style:none}
.g-pages a{display:grid;place-items:center;min-width:42px;height:42px;padding:0 12px;border:1px solid var(--glass-edge);border-radius:12px;
  background:var(--glass-bg-control);-webkit-backdrop-filter:blur(var(--glass-blur));backdrop-filter:blur(var(--glass-blur));
  color:var(--glass-ink);font-weight:600;text-decoration:none;transition:background-color .2s}
.g-pages a:hover{background:var(--glass-bg-strong)}
.g-pages a[aria-current="page"]{border-color:transparent;background:var(--glass-accent-bg);color:var(--glass-on-accent)}
.g-pages svg{width:18px;height:18px}
.g-pages .g-gap{min-width:20px;text-align:center;color:var(--glass-ink-soft)}
@media (max-width:420px){.g-pages{gap:4px}.g-pages a{min-width:36px;height:40px;padding:0 8px}}
:is(.g-brand,.g-navlinks a,.g-tabs a,.g-side ul a,.g-crumbs a,.g-pages a):focus-visible{outline:3px solid var(--glass-focus);outline-offset:2px}
@media (prefers-reduced-motion:reduce){.g-navlinks a,.g-tabs a,.g-side ul a,.g-pages a{transition:none}}
/* overlays sit on unknown content, so they use the more opaque --glass-bg-strong */
.g-strong{background:var(--glass-bg-strong);-webkit-backdrop-filter:blur(var(--glass-blur)) saturate(var(--glass-saturate));
  backdrop-filter:blur(var(--glass-blur)) saturate(var(--glass-saturate));border:1px solid var(--glass-border);box-shadow:var(--glass-highlight),var(--glass-shadow);color:var(--glass-ink)}
/* dialog: native <dialog>, opened with showModal() so focus is trapped and Escape closes it */
.g-modal{width:min(440px,calc(100vw - 32px));max-width:none;padding:0;border-radius:var(--glass-radius)}
.g-modal::backdrop{background:var(--glass-scrim);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}
.g-modal[open]{animation:g-pop .22s ease-out}
@keyframes g-pop{from{opacity:0;transform:translateY(10px) scale(.98)}}
.g-modal-body{display:grid;gap:10px;padding:26px 26px 22px}
.g-modal h2{font-size:1.2rem;line-height:1.3}
.g-modal p{color:var(--glass-ink-soft);font-size:.95rem}
.g-modal-icon{display:grid;place-items:center;width:44px;height:44px;margin-bottom:4px;border-radius:14px;background:var(--glass-warn-bg);color:var(--glass-warn)}
.g-modal-icon svg{width:22px;height:22px}
.g-modal-actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:10px;margin:0;padding:16px 26px 22px;border-top:1px solid var(--glass-border)}
/* toasts */
.g-toasts{display:grid;gap:10px}
.g-toast{display:flex;align-items:flex-start;gap:12px;padding:14px;border-radius:16px}
.g-toast-icon{display:grid;place-items:center;flex:none;width:34px;height:34px;border-radius:11px;background:var(--glass-good-bg);color:var(--glass-good)}
.g-toast-icon svg{width:18px;height:18px}
.g-toast--bad .g-toast-icon{background:var(--glass-bad-bg);color:var(--glass-bad)}
.g-toast--info .g-toast-icon{background:var(--glass-accent-bg);color:var(--glass-on-accent)}
.g-toast-text{flex:1;min-width:0;font-size:.85rem;color:var(--glass-ink-soft)}
.g-toast-text b{display:block;font-size:.92rem;color:var(--glass-ink)}
.g-x{display:grid;place-items:center;flex:none;width:32px;height:32px;margin:-4px -4px 0 0;padding:0;border:0;border-radius:10px;background:transparent;color:var(--glass-ink);cursor:pointer}
.g-x:hover{background:var(--glass-bg-control)}
.g-x svg{width:16px;height:16px}
/* alert */
.g-alert{display:flex;align-items:flex-start;gap:12px;padding:16px;border:1px solid var(--glass-border);border-radius:16px;background:var(--glass-warn-bg);
  -webkit-backdrop-filter:blur(var(--glass-blur));backdrop-filter:blur(var(--glass-blur));color:var(--glass-ink);font-size:.9rem}
.g-alert svg{flex:none;width:22px;height:22px;color:var(--glass-warn)}
.g-alert b{display:block;color:var(--glass-warn)}
.g-alert a{color:inherit;font-weight:700;text-underline-offset:3px;border-radius:4px}
/* tooltip: shown on hover and keyboard focus, hidden again with Escape (data-dismissed) */
.g-tip-wrap{position:relative;display:inline-flex}
.g-tip{position:absolute;bottom:calc(100% + 10px);left:50%;z-index:5;width:max-content;max-width:220px;padding:7px 11px;border-radius:10px;
  background:color-mix(in srgb,var(--glass-ink) 90%,transparent);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);
  color:rgb(var(--glass-tint));font-size:.82rem;font-weight:600;line-height:1.35;
  opacity:0;visibility:hidden;transform:translate(-50%,4px);transition:opacity .15s,transform .15s,visibility .15s}
.g-tip::after{content:"";position:absolute;top:100%;left:50%;margin-left:-6px;border:6px solid transparent;border-top-color:color-mix(in srgb,var(--glass-ink) 90%,transparent)}
.g-tip::before{content:"";position:absolute;left:0;right:0;top:100%;height:12px}
.g-tip-wrap:hover .g-tip,.g-tip-wrap:focus-within .g-tip,.g-tip-wrap[data-open] .g-tip{opacity:1;visibility:visible;transform:translate(-50%,0)}
.g-tip-wrap[data-dismissed] .g-tip{opacity:0;visibility:hidden}
/* dropdown menu: <details> keeps it working without JavaScript */
.g-dd{position:relative;display:inline-block}
.g-dd>summary{list-style:none}
.g-dd>summary::-webkit-details-marker{display:none}
.g-dd>summary .g-chev{width:16px;height:16px;transition:transform .2s}
.g-dd[open]>summary .g-chev{transform:rotate(180deg)}
.g-menu{position:absolute;top:calc(100% + 8px);left:0;z-index:10;min-width:230px;margin:0;padding:6px;list-style:none;border-radius:16px}
.g-menu button{display:flex;align-items:center;gap:10px;width:100%;padding:9px 12px;border:0;border-radius:10px;background:transparent;
  color:var(--glass-ink);font:inherit;font-size:.92rem;text-align:left;cursor:pointer}
.g-menu button:hover{background:var(--glass-bg-control)}
.g-menu svg{flex:none;width:18px;height:18px}
.g-menu kbd{margin-left:auto;font:inherit;font-size:.78rem;color:var(--glass-ink-soft)}
.g-menu .g-sep{margin-top:6px;padding-top:6px;border-top:1px solid var(--glass-border)}
.g-menu .g-danger{color:var(--glass-bad);font-weight:600}
:is(.g-x,.g-alert a,.g-menu button):focus-visible{outline:3px solid var(--glass-focus);outline-offset:-1px}
.g-alert a:focus-visible{outline-offset:2px}
@media (prefers-reduced-motion:reduce){.g-modal[open]{animation:none}.g-tip,.g-dd>summary .g-chev{transition:none}}

Bootstrap 5 code

Requires: Bootstrap 5.3.8 CSS

HTML
<div data-scene="dark" data-bs-theme="dark">
<div class="g-scene" aria-hidden="true"><i></i><i></i><i></i><i></i></div>
<div class="wrap"><div class="row g-4 align-items-start">
<div class="col-lg-6 d-flex flex-column gap-4">
<section class="card g-glass" aria-labelledby="d1"><div class="card-body"><span class="lbl" id="d1">Buttons and switches</span>
  <div class="g-row">
    <button type="button" class="btn btn-glass btn-glass-accent">Deploy to production</button>
    <button type="button" class="btn btn-glass">View logs</button>
    <button type="button" class="btn btn-glass btn-glass-quiet">Cancel</button>
  </div>
  <div class="g-row mt-3">
    <button type="button" class="btn btn-glass btn-glass-accent btn-icon rounded-circle" aria-label="Play"><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M8 5.5v13l10.5-6.5z"/></svg></button>
    <button type="button" class="btn btn-glass btn-icon rounded-circle" aria-label="Share"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 13v6a1 1 0 0 0 1 1h14a1 1 0 0 0 1-1v-6M12 3v12M7 8l5-5 5 5"/></svg></button>
    <button type="button" class="btn btn-glass btn-icon rounded-circle" aria-label="More options"><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><circle cx="5" cy="12" r="2"/><circle cx="12" cy="12" r="2"/><circle cx="19" cy="12" r="2"/></svg></button>
  </div>
  <ul class="list-unstyled g-list mt-3 mb-0">
    <li><div class="form-check form-switch g-switch"><label class="form-check-label" for="dsw1">Auto-scaling<small>Up to 12 instances</small></label><input class="form-check-input" type="checkbox" role="switch" id="dsw1" checked></div></li>
    <li><div class="form-check form-switch g-switch"><label class="form-check-label" for="dsw2">Maintenance mode<small>Shows a holding page to visitors</small></label><input class="form-check-input" type="checkbox" role="switch" id="dsw2"></div></li>
  </ul>
</div></section>
<section class="card g-glass g-form" aria-labelledby="d2"><div class="card-body"><span class="lbl" id="d2">Form controls</span>
  <div class="d-grid gap-3">
    <div><label class="form-label" for="d-domain">Custom domain</label><input class="form-control" id="d-domain" type="text" placeholder="app.example.com" aria-describedby="d-domain-hint"><div class="form-text" id="d-domain-hint">Point a CNAME record at edge.northwind.dev.</div></div>
    <div><label class="form-label" for="d-region">Region</label><select class="form-select" id="d-region"><option>Frankfurt (eu-central)</option><option>Dublin (eu-west)</option><option>Virginia (us-east)</option></select></div>
    <div class="d-flex flex-wrap column-gap-4 row-gap-2">
      <div class="form-check"><input class="form-check-input" type="checkbox" id="d-https" checked><label class="form-check-label" for="d-https">Enable HTTPS</label></div>
      <div class="form-check"><input class="form-check-input" type="checkbox" id="d-prev"><label class="form-check-label" for="d-prev">Preview branches</label></div>
    </div>
  </div>
</div></section>
</div>
<div class="col-lg-6 d-flex flex-column gap-4">
<article class="card g-glass" aria-labelledby="d3"><div class="card-body g-card">
  <span class="lbl" id="d3">Stat tile</span>
  <div class="g-stat-top"><h3 class="card-title">Requests today</h3><span class="g-badge-icon" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 12h4l3-8 4 16 3-8h4"/></svg></span></div>
  <p class="g-value">1.84M</p>
  <p class="g-delta"><b><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 19V5M6 11l6-6 6 6"/></svg>4.1%</b>vs yesterday</p>
  <svg class="g-spark" viewBox="0 0 200 56" preserveAspectRatio="none" aria-hidden="true"><path d="M0 40 20 44l20-8 20 4 20-14 20 6 20-12 20 8 20-16 20 4 20-10v54H0Z" fill="currentColor" fill-opacity=".18"/><path d="M0 40 20 44l20-8 20 4 20-14 20 6 20-12 20 8 20-16 20 4 20-10" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linejoin="round" vector-effect="non-scaling-stroke"/></svg>
  <p class="visually-hidden">Traffic rose through the day, peaking this evening.</p>
</div></article>
<section class="card g-glass" aria-labelledby="d4"><div class="card-body"><span class="lbl" id="d4">Tabs and pagination</span>
  <nav aria-label="Service sections"><ul class="nav nav-pills g-pills g-tabs p-0">
    <li class="nav-item"><a class="nav-link active" href="#overview" aria-current="page">Overview</a></li>
    <li class="nav-item"><a class="nav-link" href="#deployments">Deployments<span class="badge g-count">8</span></a></li>
    <li class="nav-item"><a class="nav-link" href="#metrics">Metrics</a></li>
  </ul></nav>
  <nav aria-label="Pagination" class="mt-3"><ul class="pagination g-pages">
    <li class="page-item"><a class="page-link" href="#p1" aria-label="Previous page"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M15 5l-7 7 7 7"/></svg></a></li>
    <li class="page-item"><a class="page-link" href="#p1" aria-label="Page 1">1</a></li>
    <li class="page-item active"><a class="page-link" href="#p2" aria-label="Page 2" aria-current="page">2</a></li>
    <li class="page-item"><a class="page-link" href="#p3" aria-label="Page 3">3</a></li>
    <li class="page-item"><a class="page-link" href="#p3" aria-label="Next page"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M9 5l7 7-7 7"/></svg></a></li>
  </ul></nav>
</div></section>
<div class="toast show g-toast" role="status"><span class="g-toast-icon" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M5 12.5l4.5 4.5L19 7.5"/></svg></span>
  <div class="toast-body"><b>Deploy finished</b>Build 1482 is live in Frankfurt.</div></div>
</div>
</div></div>
</div>
CSS
/* ===== uiCookies Glassmorphism kit: design tokens (identical in every set) =====
   Retheme the whole kit here. Light scene on :root, dark scene on [data-scene="dark"]
   (or any [data-scene] holding a checked [data-scene-switch]). Selectors use :where()
   so the fallbacks below always win. */
:where(:root,[data-scene="light"]){
  color-scheme:light;
  /* background scene: the colour the glass frosts */
  --scene-base:linear-gradient(155deg,#eceffe 0%,#fbeef7 52%,#e6f6fb 100%);
  --scene-1:linear-gradient(140deg,#7c3aed,#c026d3);
  --scene-2:linear-gradient(140deg,#fb7185,#f97316);
  --scene-3:linear-gradient(140deg,#22d3ee,#3b82f6);
  --scene-4:linear-gradient(140deg,#fde047,#fb923c);
  /* glass */
  --glass-tint:255 255 255;
  --glass-border:rgb(255 255 255 / .8);
  --glass-edge:rgb(36 32 88 / .9);
  --glass-highlight:inset 0 1px 0 rgb(255 255 255 / .85);
  --glass-shadow:0 18px 40px -18px rgb(37 30 102 / .45);
  --glass-ink:#16133a;
  --glass-ink-soft:#3b3862;
  --glass-accent:#4338ca;
  --glass-accent-bg:rgb(67 56 202 / .92);
  --glass-on-accent:#fff;
  --glass-check-icon:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M3.5 8.5l3 3 6-7' fill='none' stroke='%23fff' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
  --glass-focus:#1e1b4b;
  --glass-good:#14532d;--glass-good-bg:rgb(220 252 231 / .9);
  --glass-bad:#991b1b;--glass-bad-bg:rgb(254 226 226 / .9);
  --glass-warn:#7c2d12;--glass-warn-bg:rgb(254 243 199 / .9);
  --glass-scrim:rgb(22 19 58 / .3);
}
:where([data-scene="dark"]),:where([data-scene]:has([data-scene-switch]:checked)){
  color-scheme:dark;
  --scene-base:linear-gradient(155deg,#0a0c22 0%,#170c2c 52%,#06171f 100%);
  --scene-1:linear-gradient(140deg,#6d28d9,#a21caf);
  --scene-2:linear-gradient(140deg,#e11d48,#ea580c);
  --scene-3:linear-gradient(140deg,#0891b2,#2563eb);
  --scene-4:linear-gradient(140deg,#ca8a04,#c2410c);
  --glass-tint:16 18 44;
  --glass-border:rgb(255 255 255 / .2);
  --glass-edge:rgb(214 220 255 / .72);
  --glass-highlight:inset 0 1px 0 rgb(255 255 255 / .16);
  --glass-shadow:0 18px 40px -18px rgb(0 0 0 / .75);
  --glass-ink:#f5f6ff;
  --glass-ink-soft:#d0d3ee;
  --glass-accent:#a5b4fc;
  --glass-accent-bg:rgb(165 180 252 / .96);
  --glass-on-accent:#14123a;
  --glass-check-icon:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M3.5 8.5l3 3 6-7' fill='none' stroke='%2314123a' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
  --glass-focus:#c7d2fe;
  --glass-good:#bbf7d0;--glass-good-bg:rgb(20 83 45 / .7);
  --glass-bad:#fecaca;--glass-bad-bg:rgb(127 29 29 / .7);
  --glass-warn:#fde68a;--glass-warn-bg:rgb(120 53 15 / .7);
  --glass-scrim:rgb(0 0 0 / .5);
}
:where(:root){
  --glass-alpha:.6;          /* panels and cards */
  --glass-alpha-strong:.82;  /* menus, dialogs, toasts: they cover unknown content */
  --glass-alpha-control:.5;  /* buttons and fields sitting on a panel */
  --glass-blur:18px;
  --glass-saturate:150%;
  --glass-radius:20px;
}
/* derived: recomputed inside every scene so a dark scene gets dark glass */
:where(:root,[data-scene]){
  --glass-bg:rgb(var(--glass-tint) / var(--glass-alpha));
  --glass-bg-strong:rgb(var(--glass-tint) / var(--glass-alpha-strong));
  --glass-bg-control:rgb(var(--glass-tint) / var(--glass-alpha-control));
}
/* no backdrop-filter: frosting can't happen, so the glass turns nearly solid */
@supports not ((backdrop-filter:blur(1px)) or (-webkit-backdrop-filter:blur(1px))){
  :where(:root){--glass-alpha:.94;--glass-alpha-strong:.97;--glass-alpha-control:.9}
}
@media (prefers-reduced-transparency:reduce){
  :where(:root){--glass-alpha:.93;--glass-alpha-strong:.97;--glass-alpha-control:.9;--glass-blur:8px}
}
@media (prefers-contrast:more){
  :where(:root){--glass-alpha:.96;--glass-alpha-strong:.98;--glass-alpha-control:.96}
  :where(:root,[data-scene]){--glass-border:var(--glass-ink);--glass-edge:var(--glass-ink)}
}
/* ===== end of tokens ===== */
/* scene: fixed page background of four gradient orbs (decorative, aria-hidden) */
:where([data-scene]){color:var(--glass-ink)}
.g-scene{position:fixed;inset:0;z-index:-1;overflow:hidden;pointer-events:none;background:var(--scene-base)}
.g-scene i{position:absolute;aspect-ratio:1;border-radius:50%;animation:g-drift 32s ease-in-out infinite alternate}
.g-scene i:nth-child(1){width:clamp(240px,40vw,520px);left:-7%;top:-9%;background:var(--scene-1)}
.g-scene i:nth-child(2){width:clamp(170px,26vw,360px);right:-5%;top:18%;background:var(--scene-2);animation-delay:-9s}
.g-scene i:nth-child(3){width:clamp(220px,34vw,460px);left:28%;bottom:-16%;background:var(--scene-3);animation-delay:-17s}
.g-scene i:nth-child(4){width:clamp(90px,13vw,180px);left:54%;top:7%;background:var(--scene-4);animation-delay:-4s}
@keyframes g-drift{to{transform:translate3d(3vw,4vh,0) scale(1.06)}}
/* glass surface */
.g-glass{background:var(--glass-bg);-webkit-backdrop-filter:blur(var(--glass-blur)) saturate(var(--glass-saturate));
  backdrop-filter:blur(var(--glass-blur)) saturate(var(--glass-saturate));border:1px solid var(--glass-border);
  border-radius:var(--glass-radius);box-shadow:var(--glass-highlight),var(--glass-shadow);color:var(--glass-ink)}
.g-glass--strong{background:var(--glass-bg-strong)}
.g-panel{padding:24px}
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.g-muted{color:var(--glass-ink-soft)}
@media (prefers-reduced-motion:reduce){.g-scene i{animation:none}}
/* Bootstrap: the glass tokens feed Bootstrap's own component variables */
.card.g-glass{--bs-card-bg:var(--glass-bg);--bs-card-border-color:var(--glass-border);--bs-card-border-radius:var(--glass-radius);
  --bs-card-inner-border-radius:calc(var(--glass-radius) - 1px);--bs-card-color:var(--glass-ink);--bs-card-spacer-x:24px;--bs-card-spacer-y:24px;
  --bs-card-title-color:var(--glass-ink);--bs-card-subtitle-color:var(--glass-ink-soft)}
:where([data-scene]){--bs-body-color:var(--glass-ink);--bs-secondary-color:var(--glass-ink-soft);--bs-border-color:var(--glass-edge);;--bs-emphasis-color:var(--glass-ink)}
.g-row{display:flex;flex-wrap:wrap;align-items:center;gap:12px}
.btn-glass{--bs-btn-padding-x:20px;--bs-btn-padding-y:0;--bs-btn-font-size:.95rem;--bs-btn-font-weight:600;--bs-btn-line-height:1;--bs-btn-border-radius:999px;
  --bs-btn-color:var(--glass-ink);--bs-btn-bg:var(--glass-bg-control);--bs-btn-border-color:var(--glass-edge);
  --bs-btn-hover-color:var(--glass-ink);--bs-btn-hover-bg:var(--glass-bg-strong);--bs-btn-hover-border-color:var(--glass-edge);
  --bs-btn-active-color:var(--glass-ink);--bs-btn-active-bg:var(--glass-bg-strong);--bs-btn-active-border-color:var(--glass-edge);
  --bs-btn-disabled-color:var(--glass-ink);--bs-btn-disabled-bg:var(--glass-bg-control);--bs-btn-disabled-border-color:var(--glass-edge);--bs-btn-disabled-opacity:.5;
  --bs-btn-focus-box-shadow:var(--glass-highlight);
  display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:44px;
  -webkit-backdrop-filter:blur(var(--glass-blur));backdrop-filter:blur(var(--glass-blur));box-shadow:var(--glass-highlight);
  transition:background-color .2s,transform .2s}
.btn-glass:active{transform:translateY(1px)}
.btn-glass:focus-visible,.btn-check:focus-visible+.btn-glass{outline:3px solid var(--glass-focus);outline-offset:3px}
.btn-glass svg{width:18px;height:18px;flex:none}
.btn-glass-accent{--bs-btn-color:var(--glass-on-accent);--bs-btn-bg:var(--glass-accent-bg);--bs-btn-border-color:transparent;
  --bs-btn-hover-color:var(--glass-on-accent);--bs-btn-hover-bg:var(--glass-accent-bg);--bs-btn-hover-border-color:transparent;
  --bs-btn-active-color:var(--glass-on-accent);--bs-btn-active-bg:var(--glass-accent-bg);--bs-btn-active-border-color:transparent}
.btn-glass-accent:hover{filter:brightness(1.08)}
.btn-glass-quiet{--bs-btn-bg:transparent;--bs-btn-border-color:transparent;--bs-btn-hover-border-color:transparent;--bs-btn-hover-bg:var(--glass-bg-control);
  -webkit-backdrop-filter:none;backdrop-filter:none;box-shadow:none;text-decoration:underline;text-underline-offset:4px}
.btn-glass-strong{--bs-btn-bg:var(--glass-bg-strong)} /* for buttons placed straight on the scene */
.btn-glass.btn-sm{--bs-btn-padding-x:14px;--bs-btn-font-size:.85rem;min-height:36px}
.btn-glass.btn-lg{--bs-btn-padding-x:28px;--bs-btn-font-size:1.05rem;min-height:54px}
.btn-glass.btn-icon{width:44px;height:44px;min-height:0;padding:0}
.btn-glass.btn-icon.btn-sm{width:36px;height:36px}
.btn-glass.btn-icon.btn-sm svg{width:16px;height:16px}
.btn-glass.btn-icon.btn-lg{width:56px;height:56px}
.btn-glass.btn-icon.btn-lg svg{width:22px;height:22px}
@media (prefers-reduced-motion:reduce){.btn-glass{transition:none}.btn-glass:active{transform:none}}
/* .form-switch: Bootstrap's knob image (--bs-form-switch-bg) becomes a gradient so it can follow the tokens */
.g-switch{display:flex;align-items:center;justify-content:space-between;gap:16px;min-height:0;margin:0;padding:0}
.g-switch .form-check-label{cursor:pointer}
.g-switch small{display:block;font-size:.8rem;color:var(--glass-ink-soft)}
.g-switch .form-check-input{flex:none;float:none;width:52px;height:30px;margin:0;border:1px solid var(--glass-edge);cursor:pointer;
  --bs-form-switch-bg:radial-gradient(circle closest-side,var(--glass-ink-soft) 0 82%,transparent 88%);
  background-color:var(--glass-bg-control);background-size:22px 22px;background-position:3px 50%;box-shadow:inset 0 1px 3px rgb(0 0 0 / .14);
  transition:background-position .2s,background-color .2s}
.g-switch .form-check-input:focus,.g-switch.form-switch .form-check-input:not(:checked):not(:focus){--bs-form-switch-bg:radial-gradient(circle closest-side,var(--glass-ink-soft) 0 82%,transparent 88%);
  border-color:var(--glass-edge);box-shadow:inset 0 1px 3px rgb(0 0 0 / .14)}
.g-switch .form-check-input:checked{--bs-form-switch-bg:radial-gradient(circle closest-side,var(--glass-on-accent) 0 88%,transparent 94%);
  border-color:transparent;background-color:var(--glass-accent-bg);background-size:24px 24px;background-position:calc(100% - 3px) 50%}
.g-switch .form-check-input:focus-visible{outline:3px solid var(--glass-focus);outline-offset:3px}
/* segmented control: .btn-check radios */
.g-seg{display:inline-flex;margin:0;padding:4px;border:1px solid var(--glass-edge);border-radius:999px;background:var(--glass-bg-control);
  -webkit-backdrop-filter:blur(var(--glass-blur));backdrop-filter:blur(var(--glass-blur))}
.g-seg .btn{--bs-btn-padding-x:18px;--bs-btn-padding-y:8px;--bs-btn-font-size:.9rem;--bs-btn-font-weight:600;--bs-btn-border-radius:999px;
  --bs-btn-color:var(--glass-ink);--bs-btn-border-width:0;--bs-btn-hover-color:var(--glass-ink);--bs-btn-hover-bg:transparent;
  --bs-btn-active-color:var(--glass-on-accent);--bs-btn-active-bg:var(--glass-accent-bg);--bs-btn-focus-box-shadow:none;transition:background-color .2s,color .2s}
.g-seg .btn-check:focus-visible+.btn{outline:3px solid var(--glass-focus);outline-offset:2px}
@media (prefers-reduced-motion:reduce){.g-switch .form-check-input,.g-seg .btn{transition:none}}
/* forms: .form-control, .form-select, .form-check-input and .form-range read Bootstrap variables set from the tokens */
.g-form{--bs-body-bg:var(--glass-bg-control);--bs-body-color:var(--glass-ink);--bs-border-color:var(--glass-edge);--bs-border-radius:12px;
  --bs-secondary-color:var(--glass-ink-soft);--bs-secondary-bg:var(--glass-bg-control);--bs-tertiary-bg:var(--glass-bg-control)}
.g-form .form-label{margin-bottom:6px;font-size:.88rem;font-weight:600;color:var(--glass-ink)}
.g-form .form-control,.g-form .form-select{min-height:46px;padding:10px 14px;font-size:.95rem;box-shadow:var(--glass-highlight);transition:background-color .2s}
.g-form .form-select{padding-right:42px;background-position:right 14px center;cursor:pointer}
.g-form .form-control::placeholder{color:var(--glass-ink-soft);opacity:1}
.g-form .form-control:hover,.g-form .form-select:hover,
.g-form .form-control:focus,.g-form .form-select:focus{background-color:var(--glass-bg-strong);border-color:var(--glass-edge);box-shadow:var(--glass-highlight)}
.g-form .form-control:focus-visible,.g-form .form-select:focus-visible{outline:3px solid var(--glass-focus);outline-offset:2px}
.g-form .form-text{margin-top:6px;font-size:.8rem;color:var(--glass-ink-soft)}
.g-form .g-icon{position:absolute;left:14px;top:50%;width:18px;height:18px;transform:translateY(-50%);color:var(--glass-ink-soft);pointer-events:none}
.g-form .g-icon+.form-control{padding-left:42px}
.g-form .form-check{display:flex;align-items:center;gap:10px;min-height:0;margin:0;padding:0;font-size:.95rem}
.g-form .form-check-input:not([role=switch]){flex:none;float:none;width:22px;height:22px;margin:0;border:1.5px solid var(--glass-edge);border-radius:7px;cursor:pointer;
  background-color:var(--glass-bg-control);background-size:14px}
.g-form .form-check-input[type=radio]{border-radius:50%;background-size:auto}
.g-form .form-check-input:not([role=switch]):focus{border-color:var(--glass-edge);box-shadow:none}
.g-form .form-check-input:not([role=switch]):checked{--bs-form-check-bg-image:var(--glass-check-icon);border-color:transparent;background-color:var(--glass-accent-bg)}
.g-form .form-check-input[type=radio]:not([role=switch]):checked{--bs-form-check-bg-image:radial-gradient(circle,var(--glass-on-accent) 0 4px,transparent 4.5px)}
.g-form .form-check-input:focus-visible{outline:3px solid var(--glass-focus);outline-offset:2px}
.g-form .form-check-label{cursor:pointer}
.g-form .form-range{height:28px}
.g-form .form-range::-webkit-slider-runnable-track{height:10px;border:1px solid var(--glass-edge);border-radius:999px;background:var(--glass-bg-control)}
.g-form .form-range::-moz-range-track{height:8px;border:1px solid var(--glass-edge);border-radius:999px;background:var(--glass-bg-control)}
.g-form .form-range::-webkit-slider-thumb{width:24px;height:24px;margin-top:-8px;border:3px solid #fff;border-radius:50%;background:var(--glass-accent-bg);
  box-shadow:0 0 0 1px var(--glass-edge),0 2px 6px rgb(0 0 0 / .25)}
.g-form .form-range::-moz-range-thumb{width:18px;height:18px;border:3px solid #fff;border-radius:50%;background:var(--glass-accent-bg);
  box-shadow:0 0 0 1px var(--glass-edge),0 2px 6px rgb(0 0 0 / .25)}
.g-form .form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px var(--glass-edge),0 2px 6px rgb(0 0 0 / .25)}
.g-form .form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px var(--glass-edge),0 2px 6px rgb(0 0 0 / .25)}
.g-form .form-range:focus-visible{outline:3px solid var(--glass-focus);outline-offset:4px;border-radius:999px}
.g-scale{display:flex;justify-content:space-between;font-size:.8rem;color:var(--glass-ink-soft)}
.g-link{color:var(--glass-ink);font-weight:600;text-decoration:underline;text-underline-offset:3px}
.g-link:hover{color:var(--glass-ink);text-decoration-thickness:2px}
.g-link:focus-visible{outline:3px solid var(--glass-focus);outline-offset:2px;border-radius:4px}
@media (prefers-reduced-motion:reduce){.g-form .form-control,.g-form .form-select{transition:none}}
/* cards: content, stat tile, profile, pricing. All sit on .g-glass */
.g-card{display:flex;flex-direction:column;gap:12px;padding:22px}
:where(.g-card) h3{font-size:1.08rem;line-height:1.3}
:where(.g-card) p{font-size:.92rem}
.g-media{height:132px;margin:-12px -12px 4px;border-radius:calc(var(--glass-radius) - 8px);overflow:hidden;background:var(--scene-3)}
.g-media svg{display:block;width:100%;height:100%}
.g-chip{align-self:flex-start;display:inline-flex;align-items:center;gap:6px;padding:4px 10px;border-radius:999px;background:var(--glass-bg-strong);
  border:1px solid var(--glass-border);font-size:.75rem;font-weight:700;color:var(--glass-ink)}
.g-chip--accent{border-color:transparent;background:var(--glass-accent-bg);color:var(--glass-on-accent)}
.g-title-link{color:inherit;text-decoration:none;border-radius:4px}
.g-title-link:hover{text-decoration:underline;text-underline-offset:3px}
.g-title-link:focus-visible{outline:3px solid var(--glass-focus);outline-offset:2px}
.g-meta{margin-top:auto;font-size:.82rem;color:var(--glass-ink-soft)}
.g-stat-top{display:flex;align-items:center;justify-content:space-between;gap:12px}
.g-stat-top h3{font-size:.9rem;font-weight:600;color:var(--glass-ink-soft)}
.g-badge-icon{display:grid;place-items:center;width:38px;height:38px;border-radius:12px;background:var(--glass-accent-bg);color:var(--glass-on-accent)}
.g-badge-icon svg{width:20px;height:20px}
.g-value{font-size:2.1rem;font-weight:800;letter-spacing:-.02em;line-height:1.1}
.g-delta{display:flex;align-items:center;flex-wrap:wrap;gap:8px;font-size:.85rem;color:var(--glass-ink-soft)}
.g-delta b{display:inline-flex;align-items:center;gap:3px;padding:3px 8px;border-radius:999px;background:var(--glass-good-bg);color:var(--glass-good);font-weight:700}
.g-delta b svg{width:14px;height:14px}
.g-minis{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin:2px 0 0}
.g-minis div{display:flex;flex-direction:column-reverse;padding:8px 10px;border:1px solid var(--glass-border);border-radius:12px;background:var(--glass-bg-control)}
.g-minis dt{font-size:.75rem;color:var(--glass-ink-soft)}
.g-minis dd{margin:0;font-weight:700}
.g-spark{display:block;width:100%;height:56px;margin-top:auto;color:var(--glass-accent)}
.g-profile{align-items:center;text-align:center}
.g-avatar{display:grid;place-items:center;width:76px;height:76px;border-radius:50%;background:var(--scene-1);color:#fff;font-size:1.5rem;font-weight:700;
  border:3px solid var(--glass-border);box-shadow:0 8px 20px -10px rgb(0 0 0 / .45)}
.g-stats{display:grid;grid-template-columns:repeat(3,1fr);width:100%;margin:4px 0;padding:12px 0;border-block:1px solid var(--glass-border)}
.g-stats div{display:flex;flex-direction:column-reverse}
.g-stats dt{font-size:.75rem;color:var(--glass-ink-soft)}
.g-stats dd{margin:0;font-size:1.05rem;font-weight:700}
.g-profile .g-row{justify-content:center}
.g-price-head{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap}
.g-amount{display:flex;align-items:baseline;gap:6px}
.g-amount b{font-size:2.4rem;font-weight:800;letter-spacing:-.03em;line-height:1}
.g-amount span{font-size:.9rem;color:var(--glass-ink-soft)}
.g-ticks{list-style:none;display:grid;gap:9px;margin:4px 0 6px;padding:0;font-size:.92rem}
.g-ticks li{display:flex;gap:10px;align-items:flex-start}
.g-ticks svg{flex:none;width:18px;height:18px;margin-top:2px;color:var(--glass-accent)}
.g-card .g-btn{margin-top:auto}
/* Bootstrap cards: .card-body carries .g-card, .badge carries .g-chip; reset Bootstrap's text margins inside */
.card-body.g-card{padding:22px}
.g-card :is(h3,p,dl,dd,ul){margin-bottom:0}
.g-card dt{font-weight:400}
.g-card .badge.g-chip{--bs-badge-padding-x:10px;--bs-badge-padding-y:4px;--bs-badge-font-size:.75rem;--bs-badge-font-weight:700;--bs-badge-color:var(--glass-ink);
  --bs-badge-border-radius:999px;line-height:1.45}
.g-card .badge.g-chip--accent{--bs-badge-color:var(--glass-on-accent)}
.g-card .card-title{font-weight:700}
.g-card .btn-glass{margin-top:auto}
/* .navbar, .nav-pills, .breadcrumb and .pagination recoloured through their Bootstrap variables */
.g-navbar.navbar{--bs-navbar-padding-x:0;--bs-navbar-padding-y:0;--bs-navbar-color:var(--glass-ink);--bs-navbar-hover-color:var(--glass-ink);
  --bs-navbar-active-color:var(--glass-ink);--bs-navbar-brand-color:var(--glass-ink);--bs-navbar-brand-hover-color:var(--glass-ink);
  --bs-navbar-brand-padding-y:0;--bs-navbar-brand-margin-end:0;--bs-navbar-brand-font-size:1.05rem;--bs-navbar-nav-link-padding-x:14px;
  flex-wrap:wrap;justify-content:flex-start;gap:10px 18px;padding:10px 12px 10px 18px}
.g-navbar .navbar-brand{display:inline-flex;align-items:center;gap:10px;border-radius:8px;font-weight:800}
.g-navbar .navbar-brand svg{width:28px;height:28px}
.g-navbar .navbar-brand rect{fill:var(--glass-accent-bg)}
.g-navbar .navbar-nav{--bs-nav-link-padding-y:8px;--bs-nav-link-font-weight:600;--bs-nav-link-font-size:.92rem;flex-wrap:wrap;gap:4px}
.g-navbar>nav{margin:0 auto 0 8px}
.g-navbar .nav-link{border-radius:999px;transition:background-color .2s}
.g-navbar .nav-link:hover{background:var(--glass-bg-control)}
.g-navbar .nav-link.active{background:var(--glass-bg-strong);box-shadow:inset 0 0 0 1px var(--glass-edge)}
@media (max-width:760px){.g-navbar.navbar{justify-content:space-between;column-gap:10px;--bs-navbar-nav-link-padding-x:8px}
  .g-navbar .navbar-nav{--bs-nav-link-padding-y:7px;--bs-nav-link-font-size:.88rem;gap:2px}.g-navbar>nav{order:3;width:100%;margin:0}}
.g-pills.nav-pills{--bs-nav-link-color:var(--glass-ink);--bs-nav-link-hover-color:var(--glass-ink);--bs-nav-link-font-weight:600;--bs-nav-link-font-size:.92rem;
  --bs-nav-pills-border-radius:12px;--bs-nav-pills-link-active-color:var(--glass-on-accent);--bs-nav-pills-link-active-bg:var(--glass-accent-bg)}
.g-pills .nav-link{display:flex;align-items:center;gap:8px;transition:background-color .2s}
.g-pills .nav-link:not(.active):hover{background:var(--glass-bg-control)}
.g-tabs.nav-pills{--bs-nav-link-padding-x:16px;--bs-nav-link-padding-y:9px;gap:4px;padding:5px;border-radius:16px}
.g-side.nav-pills{--bs-nav-link-padding-x:12px;--bs-nav-link-padding-y:10px;gap:2px}
.g-side .nav-link{gap:12px}
.g-side .nav-link svg{flex:none;width:20px;height:20px}
.g-side .badge{margin-left:auto}
.g-count.badge{--bs-badge-padding-x:7px;--bs-badge-padding-y:2px;--bs-badge-font-size:.75rem;--bs-badge-color:var(--glass-ink);--bs-badge-border-radius:999px;
  min-width:22px;background:var(--glass-bg-strong)}
.g-side-wrap{display:flex;flex-direction:column;gap:4px;padding:14px}
.g-side-wrap h2{margin:12px 12px 6px;font-size:.72rem;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--glass-ink-soft)}
.g-side-wrap h2:first-child{margin-top:4px}
.g-side-user{display:flex;align-items:center;gap:10px;margin-top:10px;padding:12px;border-top:1px solid var(--glass-border);font-size:.85rem}
.g-side-user b{display:block;font-size:.9rem}
.g-side-user span{color:var(--glass-ink-soft)}
.g-initials{display:grid;place-items:center;flex:none;width:36px;height:36px;border-radius:50%;background:var(--scene-1);color:#fff;font-size:.8rem;font-weight:700}
.g-crumbs.breadcrumb{--bs-breadcrumb-margin-bottom:0;--bs-breadcrumb-padding-x:18px;--bs-breadcrumb-padding-y:10px;--bs-breadcrumb-font-size:.9rem;
  --bs-breadcrumb-item-padding-x:10px;--bs-breadcrumb-item-active-color:var(--glass-ink);--bs-breadcrumb-border-radius:999px;
  width:fit-content;max-width:100%;align-items:center;row-gap:6px}
.g-crumbs .breadcrumb-item{display:flex;align-items:center}
.g-crumbs .breadcrumb-item+.breadcrumb-item::before{content:"";float:none;width:6px;height:6px;margin-right:10px;padding:0;
  border-top:1.5px solid var(--glass-ink-soft);border-right:1.5px solid var(--glass-ink-soft);transform:rotate(45deg)}
.g-crumbs a{border-radius:4px;color:var(--glass-ink-soft);text-underline-offset:3px}
.g-crumbs a:hover{color:var(--glass-ink)}
.g-crumbs .active{font-weight:700}
.g-pages.pagination{--bs-pagination-padding-x:12px;--bs-pagination-padding-y:0;--bs-pagination-color:var(--glass-ink);--bs-pagination-bg:var(--glass-bg-control);
  --bs-pagination-border-color:var(--glass-edge);--bs-pagination-border-radius:12px;--bs-pagination-hover-color:var(--glass-ink);
  --bs-pagination-hover-bg:var(--glass-bg-strong);--bs-pagination-hover-border-color:var(--glass-edge);--bs-pagination-focus-color:var(--glass-ink);
  --bs-pagination-focus-bg:var(--glass-bg-strong);--bs-pagination-focus-box-shadow:none;--bs-pagination-active-color:var(--glass-on-accent);
  --bs-pagination-active-bg:var(--glass-accent-bg);--bs-pagination-active-border-color:transparent;--bs-pagination-disabled-color:var(--glass-ink-soft);
  --bs-pagination-disabled-bg:transparent;--bs-pagination-disabled-border-color:transparent;
  flex-wrap:wrap;align-items:center;gap:6px;margin:0}
.g-pages .page-item .page-link{display:grid;place-items:center;min-width:42px;height:42px;margin:0;border-radius:12px;font-weight:600;
  -webkit-backdrop-filter:blur(var(--glass-blur));backdrop-filter:blur(var(--glass-blur))}
.g-pages .page-link svg{width:18px;height:18px}
.g-pages .g-gap{min-width:20px;text-align:center;color:var(--glass-ink-soft)}
@media (max-width:420px){.g-pages.pagination{gap:4px}.g-pages .page-item .page-link{min-width:36px;height:40px;padding:0 8px}}
:is(.g-navbar .navbar-brand,.g-navbar .nav-link,.g-pills .nav-link,.g-crumbs a,.g-pages .page-link):focus-visible{outline:3px solid var(--glass-focus);outline-offset:2px;box-shadow:none}
@media (prefers-reduced-motion:reduce){.g-navbar .nav-link,.g-pills .nav-link,.g-pages .page-link{transition:none}}
/* overlays sit on unknown content, so they use the more opaque --glass-bg-strong */
.g-strong{background:var(--glass-bg-strong);-webkit-backdrop-filter:blur(var(--glass-blur)) saturate(var(--glass-saturate));
  backdrop-filter:blur(var(--glass-blur)) saturate(var(--glass-saturate));border:1px solid var(--glass-border);box-shadow:var(--glass-highlight),var(--glass-shadow);color:var(--glass-ink)}
/* dialog: native <dialog>, opened with showModal() so focus is trapped and Escape closes it */
.g-modal{width:min(440px,calc(100vw - 32px));max-width:none;padding:0;border-radius:var(--glass-radius)}
.g-modal::backdrop{background:var(--glass-scrim);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}
.g-modal[open]{animation:g-pop .22s ease-out}
@keyframes g-pop{from{opacity:0;transform:translateY(10px) scale(.98)}}
.g-modal-icon{display:grid;place-items:center;width:44px;height:44px;margin-bottom:4px;border-radius:14px;background:var(--glass-warn-bg);color:var(--glass-warn)}
.g-modal-icon svg{width:22px;height:22px}
/* toasts */
.g-toasts{display:grid;gap:10px}
.g-toast{display:flex;align-items:flex-start;gap:12px;padding:14px;border-radius:16px}
.g-toast-icon{display:grid;place-items:center;flex:none;width:34px;height:34px;border-radius:11px;background:var(--glass-good-bg);color:var(--glass-good)}
.g-toast-icon svg{width:18px;height:18px}
.g-toast--bad .g-toast-icon{background:var(--glass-bad-bg);color:var(--glass-bad)}
.g-toast--info .g-toast-icon{background:var(--glass-accent-bg);color:var(--glass-on-accent)}
/* alert */
.g-alert{align-items:flex-start;gap:12px;-webkit-backdrop-filter:blur(var(--glass-blur));backdrop-filter:blur(var(--glass-blur));font-size:.9rem}
.g-alert svg{flex:none;width:22px;height:22px;color:var(--glass-warn)}
.g-alert b{display:block;color:var(--glass-warn)}
/* tooltip: shown on hover and keyboard focus, hidden again with Escape (data-dismissed) */
.g-tip-wrap{position:relative;display:inline-flex}
/* dropdown menu: <details> keeps it working without JavaScript */
.g-dd{position:relative;display:inline-block}
.g-dd>summary{list-style:none}
.g-dd>summary::-webkit-details-marker{display:none}
.g-dd>summary .g-chev{width:16px;height:16px;transition:transform .2s}
.g-dd[open]>summary .g-chev{transform:rotate(180deg)}
.g-menu svg{flex:none;width:18px;height:18px}
.g-menu kbd{margin-left:auto;font:inherit;font-size:.78rem;color:var(--glass-ink-soft)}
.g-menu .g-sep{margin-top:6px;padding-top:6px;border-top:1px solid var(--glass-border)}

/* Bootstrap mapping: .modal-content/.modal-body/.modal-footer, .toast, .alert, .tooltip, .dropdown-menu */
.g-modal{--bs-modal-bg:transparent;--bs-modal-color:var(--glass-ink);--bs-modal-border-width:0;--bs-modal-border-radius:var(--glass-radius);
  --bs-modal-inner-border-radius:var(--glass-radius);--bs-modal-padding:26px;--bs-modal-footer-gap:10px;--bs-modal-footer-bg:transparent;
  --bs-modal-footer-border-color:var(--glass-border);--bs-modal-footer-border-width:1px}
.g-modal .modal-body{display:grid;gap:10px;padding:26px 26px 22px}
.g-modal .modal-title{margin:0;font-size:1.2rem;font-weight:700;line-height:1.3}
.g-modal .modal-body p{margin:0}
.g-modal .modal-footer{padding:11px 21px 17px}
.g-toast.toast{--bs-toast-max-width:none;--bs-toast-bg:var(--glass-bg-strong);--bs-toast-border-color:var(--glass-border);--bs-toast-border-radius:16px;
  --bs-toast-color:var(--glass-ink);--bs-toast-font-size:.85rem;--bs-toast-box-shadow:var(--glass-highlight),var(--glass-shadow);width:auto}
.g-toast .toast-body{flex:1;min-width:0;padding:0;color:var(--glass-ink-soft)}
.g-toast .toast-body b{display:block;font-size:.92rem;color:var(--glass-ink)}
.g-toast .btn-close{--bs-btn-close-opacity:1;--bs-btn-close-hover-opacity:1;--bs-btn-close-focus-shadow:none;
  --bs-btn-close-bg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M6 6l12 12M18 6 6 18' fill='none' stroke='%2316133a' stroke-width='2.4' stroke-linecap='round'/%3E%3C/svg%3E");
  flex:none;width:32px;height:32px;margin:-4px -4px 0 0;padding:0;border-radius:10px;background-size:16px}
.g-toast .btn-close:hover{background-color:var(--glass-bg-control)}
.g-toast .btn-close:focus-visible{outline:3px solid var(--glass-focus);outline-offset:-1px}
.g-alert.alert{--bs-alert-bg:var(--glass-warn-bg);--bs-alert-color:var(--glass-ink);--bs-alert-border-color:var(--glass-border);--bs-alert-link-color:var(--glass-ink);
  --bs-alert-padding-x:16px;--bs-alert-padding-y:16px;--bs-alert-margin-bottom:0;--bs-alert-border-radius:16px}
.g-alert .alert-link{text-decoration:underline;text-underline-offset:3px}
.g-tip-wrap .tooltip{--bs-tooltip-bg:color-mix(in srgb,var(--glass-ink) 90%,transparent);--bs-tooltip-color:rgb(var(--glass-tint));--bs-tooltip-opacity:1;
  --bs-tooltip-font-size:.82rem;--bs-tooltip-border-radius:10px;--bs-tooltip-padding-x:11px;--bs-tooltip-padding-y:7px;--bs-tooltip-max-width:220px;--bs-tooltip-margin:0;
  position:absolute;bottom:calc(100% + 10px);left:50%;width:max-content;font-weight:600;line-height:1.35;visibility:hidden;transform:translate(-50%,4px);transition:opacity .15s,transform .15s,visibility .15s}
.g-tip-wrap .tooltip-arrow{position:absolute;left:50%;margin-left:-.4rem}
.g-tip-wrap .tooltip-inner{display:block;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}
.g-tip-wrap:hover .tooltip,.g-tip-wrap:focus-within .tooltip,.g-tip-wrap[data-open] .tooltip{opacity:1;visibility:visible;transform:translate(-50%,0)}
.g-tip-wrap[data-dismissed] .tooltip{opacity:0;visibility:hidden}
.g-menu.dropdown-menu{--bs-dropdown-bg:var(--glass-bg-strong);--bs-dropdown-border-color:var(--glass-border);--bs-dropdown-border-radius:16px;
  --bs-dropdown-padding-x:6px;--bs-dropdown-padding-y:6px;--bs-dropdown-link-color:var(--glass-ink);--bs-dropdown-link-hover-color:var(--glass-ink);
  --bs-dropdown-link-hover-bg:var(--glass-bg-control);--bs-dropdown-link-active-color:var(--glass-ink);--bs-dropdown-link-active-bg:var(--glass-bg-control);
  --bs-dropdown-item-padding-x:12px;--bs-dropdown-item-padding-y:9px;--bs-dropdown-item-border-radius:10px;--bs-dropdown-font-size:.92rem;--bs-dropdown-min-width:230px;
  top:calc(100% + 8px);left:0}
.g-menu .dropdown-item{display:flex;align-items:center;gap:10px}
.g-menu .dropdown-item.g-danger{color:var(--glass-bad)}
.g-menu .dropdown-item:focus-visible{outline:3px solid var(--glass-focus);outline-offset:-1px}
@media (prefers-reduced-motion:reduce){.g-modal[open]{animation:none}.g-tip-wrap .tooltip,.g-dd>summary .g-chev{transition:none}}
.g-menu kbd{padding:0;background:none;border-radius:0}

Tailwind 4 code

Requires: Tailwind CSS 4

HTML
<div data-scene="dark" class="text-ink">
<div aria-hidden="true" class="pointer-events-none fixed inset-0 -z-10 overflow-hidden bg-(image:--scene-base)">
  <i class="absolute -top-[9%] -left-[7%] aspect-square w-[clamp(240px,40vw,520px)] rounded-full bg-(image:--scene-1) motion-safe:animate-drift"></i>
  <i class="absolute top-[18%] -right-[5%] aspect-square w-[clamp(170px,26vw,360px)] rounded-full bg-(image:--scene-2) [animation-delay:-9s] motion-safe:animate-drift"></i>
  <i class="absolute -bottom-[16%] left-[28%] aspect-square w-[clamp(220px,34vw,460px)] rounded-full bg-(image:--scene-3) [animation-delay:-17s] motion-safe:animate-drift"></i>
  <i class="absolute top-[7%] left-[54%] aspect-square w-[clamp(90px,13vw,180px)] rounded-full bg-(image:--scene-4) [animation-delay:-4s] motion-safe:animate-drift"></i>
</div>
<div class="mx-auto flex max-w-[980px] flex-col gap-[26px]"><div class="grid grid-cols-[repeat(auto-fit,minmax(min(100%,400px),1fr))] items-start gap-[26px]">
<div class="flex flex-col gap-[26px]">
<section class="border border-glass-border bg-glass text-ink shadow-glass inset-shadow-glass backdrop-blur-glass backdrop-saturate-150 rounded-glass p-6" aria-labelledby="d1"><span class="mb-4 block text-[.72rem] font-bold tracking-[.12em] text-ink-soft uppercase" id="d1">Buttons and switches</span>
  <div class="flex flex-wrap items-center gap-3">
    <button type="button" class="inline-flex cursor-pointer items-center justify-center gap-2 rounded-full border border-transparent bg-accent-glass leading-none font-semibold text-on-accent no-underline inset-shadow-glass backdrop-blur-glass transition-[filter,translate] duration-200 hover:brightness-[1.08] active:translate-y-px focus-visible:outline-3 focus-visible:outline-offset-3 focus-visible:outline-focus motion-reduce:transition-none motion-reduce:active:translate-y-0 min-h-11 px-5 text-[.95rem]">Deploy to production</button>
    <button type="button" class="inline-flex cursor-pointer items-center justify-center gap-2 rounded-full border border-glass-edge bg-glass-control leading-none font-semibold text-ink no-underline inset-shadow-glass backdrop-blur-glass transition-[background-color,translate] duration-200 hover:bg-glass-strong active:translate-y-px disabled:cursor-not-allowed disabled:opacity-50 focus-visible:outline-3 focus-visible:outline-offset-3 focus-visible:outline-focus motion-reduce:transition-none motion-reduce:active:translate-y-0 min-h-11 px-5 text-[.95rem]">View logs</button>
    <button type="button" class="inline-flex cursor-pointer items-center justify-center gap-2 rounded-full border border-transparent bg-transparent leading-none font-semibold text-ink underline decoration-1 underline-offset-4 transition-[background-color] duration-200 hover:bg-glass-control focus-visible:outline-3 focus-visible:outline-offset-3 focus-visible:outline-focus motion-reduce:transition-none min-h-11 px-5 text-[.95rem]">Cancel</button>
  </div>
  <div class="mt-[14px] flex flex-wrap items-center gap-3">
    <button type="button" class="inline-grid cursor-pointer place-items-center rounded-full border border-transparent bg-accent-glass p-0 text-on-accent inset-shadow-glass backdrop-blur-glass transition-[filter,scale] duration-200 hover:brightness-[1.08] active:scale-96 focus-visible:outline-3 focus-visible:outline-offset-3 focus-visible:outline-focus motion-reduce:transition-none motion-reduce:active:scale-100 size-11" aria-label="Play"><svg class="size-[18px]" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M8 5.5v13l10.5-6.5z"/></svg></button>
    <button type="button" class="inline-grid cursor-pointer place-items-center rounded-full border border-glass-edge bg-glass-control p-0 text-ink inset-shadow-glass backdrop-blur-glass transition-[background-color,scale] duration-200 hover:bg-glass-strong active:scale-96 focus-visible:outline-3 focus-visible:outline-offset-3 focus-visible:outline-focus motion-reduce:transition-none motion-reduce:active:scale-100 size-11" aria-label="Share"><svg class="size-[18px]" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 13v6a1 1 0 0 0 1 1h14a1 1 0 0 0 1-1v-6M12 3v12M7 8l5-5 5 5"/></svg></button>
    <button type="button" class="inline-grid cursor-pointer place-items-center rounded-full border border-glass-edge bg-glass-control p-0 text-ink inset-shadow-glass backdrop-blur-glass transition-[background-color,scale] duration-200 hover:bg-glass-strong active:scale-96 focus-visible:outline-3 focus-visible:outline-offset-3 focus-visible:outline-focus motion-reduce:transition-none motion-reduce:active:scale-100 size-11" aria-label="More options"><svg class="size-[18px]" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><circle cx="5" cy="12" r="2"/><circle cx="12" cy="12" r="2"/><circle cx="19" cy="12" r="2"/></svg></button>
  </div>
  <ul class="mt-[18px] grid gap-1 [&>li+li]:mt-2 [&>li+li]:border-t [&>li+li]:border-glass-border [&>li+li]:pt-3">
    <li><label class="flex cursor-pointer items-center justify-between gap-4"><span>Auto-scaling<small class="block text-[.8rem] text-ink-soft">Up to 12 instances</small></span><input type="checkbox" role="switch" class="h-[30px] w-[52px] flex-none cursor-pointer appearance-none rounded-full border border-glass-edge bg-glass-control bg-[radial-gradient(circle_closest-side,var(--glass-ink-soft)_0_82%,transparent_88%)] bg-size-[22px_22px] bg-position-[3px_50%] bg-no-repeat shadow-[inset_0_1px_3px_rgb(0_0_0/.14)] transition-[background-position,background-color] duration-200 checked:border-transparent checked:bg-accent-glass checked:bg-[radial-gradient(circle_closest-side,var(--glass-on-accent)_0_88%,transparent_94%)] checked:bg-size-[24px_24px] checked:bg-position-[calc(100%_-_3px)_50%] focus-visible:outline-3 focus-visible:outline-offset-3 focus-visible:outline-focus motion-reduce:transition-none" checked></label></li>
    <li><label class="flex cursor-pointer items-center justify-between gap-4"><span>Maintenance mode<small class="block text-[.8rem] text-ink-soft">Shows a holding page to visitors</small></span><input type="checkbox" role="switch" class="h-[30px] w-[52px] flex-none cursor-pointer appearance-none rounded-full border border-glass-edge bg-glass-control bg-[radial-gradient(circle_closest-side,var(--glass-ink-soft)_0_82%,transparent_88%)] bg-size-[22px_22px] bg-position-[3px_50%] bg-no-repeat shadow-[inset_0_1px_3px_rgb(0_0_0/.14)] transition-[background-position,background-color] duration-200 checked:border-transparent checked:bg-accent-glass checked:bg-[radial-gradient(circle_closest-side,var(--glass-on-accent)_0_88%,transparent_94%)] checked:bg-size-[24px_24px] checked:bg-position-[calc(100%_-_3px)_50%] focus-visible:outline-3 focus-visible:outline-offset-3 focus-visible:outline-focus motion-reduce:transition-none"></label></li>
  </ul>
</section>
<section class="border border-glass-border bg-glass text-ink shadow-glass inset-shadow-glass backdrop-blur-glass backdrop-saturate-150 rounded-glass p-6" aria-labelledby="d2"><span class="mb-4 block text-[.72rem] font-bold tracking-[.12em] text-ink-soft uppercase" id="d2">Form controls</span>
  <div class="grid gap-4">
    <div class="grid gap-1.5"><label class="text-[.88rem] font-semibold text-ink" for="d-domain">Custom domain</label><input class="min-h-[46px] w-full rounded-xl border border-glass-edge bg-glass-control px-[14px] py-[10px] text-[.95rem] text-ink inset-shadow-glass transition-colors duration-200 placeholder:text-ink-soft hover:bg-glass-strong focus:bg-glass-strong focus-visible:outline-3 focus-visible:outline-offset-2 focus-visible:outline-focus motion-reduce:transition-none" id="d-domain" type="text" placeholder="app.example.com" aria-describedby="d-domain-hint"><span class="text-[.8rem] text-ink-soft" id="d-domain-hint">Point a CNAME record at edge.northwind.dev.</span></div>
    <div class="grid gap-1.5"><label class="text-[.88rem] font-semibold text-ink" for="d-region">Region</label><div class="relative after:pointer-events-none after:absolute after:top-1/2 after:right-[18px] after:size-2 after:-translate-y-[70%] after:rotate-45 after:border-r-2 after:border-b-2 after:border-ink after:content-['']"><select class="min-h-[46px] w-full rounded-xl border border-glass-edge bg-glass-control px-[14px] py-[10px] text-[.95rem] text-ink inset-shadow-glass transition-colors duration-200 placeholder:text-ink-soft hover:bg-glass-strong focus:bg-glass-strong focus-visible:outline-3 focus-visible:outline-offset-2 focus-visible:outline-focus motion-reduce:transition-none cursor-pointer appearance-none pr-[42px]" id="d-region"><option>Frankfurt (eu-central)</option><option>Dublin (eu-west)</option><option>Virginia (us-east)</option></select></div></div>
    <div class="flex flex-wrap gap-x-[22px] gap-y-2.5"><label class="flex cursor-pointer items-center gap-2.5 text-[.95rem]"><input type="checkbox" class="size-[22px] flex-none cursor-pointer appearance-none rounded-[7px] border-[1.5px] border-glass-edge bg-glass-control bg-size-[14px] bg-center bg-no-repeat transition-colors duration-150 checked:border-transparent checked:bg-accent-glass checked:bg-(image:--glass-check-icon) focus-visible:outline-3 focus-visible:outline-offset-2 focus-visible:outline-focus motion-reduce:transition-none" checked>Enable HTTPS</label><label class="flex cursor-pointer items-center gap-2.5 text-[.95rem]"><input type="checkbox" class="size-[22px] flex-none cursor-pointer appearance-none rounded-[7px] border-[1.5px] border-glass-edge bg-glass-control bg-size-[14px] bg-center bg-no-repeat transition-colors duration-150 checked:border-transparent checked:bg-accent-glass checked:bg-(image:--glass-check-icon) focus-visible:outline-3 focus-visible:outline-offset-2 focus-visible:outline-focus motion-reduce:transition-none">Preview branches</label></div>
  </div>
</section>
</div>
<div class="flex flex-col gap-[26px]">
<article class="flex flex-1 flex-col gap-3 p-[22px] border border-glass-border bg-glass text-ink shadow-glass inset-shadow-glass backdrop-blur-glass backdrop-saturate-150 rounded-glass" aria-labelledby="d3">
  <span class="mb-4 block text-[.72rem] font-bold tracking-[.12em] text-ink-soft uppercase" id="d3">Stat tile</span>
  <div class="flex items-center justify-between gap-3"><h3 class="text-[.9rem] font-semibold text-ink-soft">Requests today</h3><span class="grid size-[38px] place-items-center rounded-xl bg-accent-glass text-on-accent" aria-hidden="true"><svg class="size-5" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 12h4l3-8 4 16 3-8h4"/></svg></span></div>
  <p class="text-[2.1rem] leading-[1.1] font-extrabold tracking-[-.02em]">1.84M</p>
  <p class="flex flex-wrap items-center gap-2 text-[.85rem] text-ink-soft"><b class="inline-flex items-center gap-[3px] rounded-full bg-good-glass px-2 py-[3px] font-bold text-good"><svg class="size-3.5" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 19V5M6 11l6-6 6 6"/></svg>4.1%</b>vs yesterday</p>
  <svg class="mt-auto block h-14 w-full text-accent" viewBox="0 0 200 56" preserveAspectRatio="none" aria-hidden="true"><path d="M0 40 20 44l20-8 20 4 20-14 20 6 20-12 20 8 20-16 20 4 20-10v54H0Z" fill="currentColor" fill-opacity=".18"/><path d="M0 40 20 44l20-8 20 4 20-14 20 6 20-12 20 8 20-16 20 4 20-10" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linejoin="round" vector-effect="non-scaling-stroke"/></svg>
  <p class="sr-only">Traffic rose through the day, peaking this evening.</p>
</article>
<section class="border border-glass-border bg-glass text-ink shadow-glass inset-shadow-glass backdrop-blur-glass backdrop-saturate-150 rounded-glass p-6" aria-labelledby="d4"><span class="mb-4 block text-[.72rem] font-bold tracking-[.12em] text-ink-soft uppercase" id="d4">Tabs and pagination</span>
  <nav class="flex flex-wrap gap-1" aria-label="Service sections">
    <a class="inline-flex items-center gap-2 rounded-xl px-4 py-[9px] text-[.92rem] font-semibold text-ink transition-colors duration-200 hover:bg-glass-control aria-[current=page]:bg-accent-glass aria-[current=page]:text-on-accent focus-visible:outline-3 focus-visible:outline-offset-2 focus-visible:outline-focus motion-reduce:transition-none" href="#overview" aria-current="page">Overview</a>
    <a class="inline-flex items-center gap-2 rounded-xl px-4 py-[9px] text-[.92rem] font-semibold text-ink transition-colors duration-200 hover:bg-glass-control aria-[current=page]:bg-accent-glass aria-[current=page]:text-on-accent focus-visible:outline-3 focus-visible:outline-offset-2 focus-visible:outline-focus motion-reduce:transition-none" href="#deployments">Deployments<span class="min-w-[22px] rounded-full bg-glass-strong px-[7px] py-px text-center text-[.75rem] font-bold text-ink">8</span></a>
    <a class="inline-flex items-center gap-2 rounded-xl px-4 py-[9px] text-[.92rem] font-semibold text-ink transition-colors duration-200 hover:bg-glass-control aria-[current=page]:bg-accent-glass aria-[current=page]:text-on-accent focus-visible:outline-3 focus-visible:outline-offset-2 focus-visible:outline-focus motion-reduce:transition-none" href="#metrics">Metrics</a>
  </nav>
  <nav aria-label="Pagination" class="mt-[18px]"><ul class="flex flex-wrap items-center gap-1.5">
    <li><a class="grid h-[42px] min-w-[42px] place-items-center rounded-xl border border-glass-edge bg-glass-control px-3 font-semibold text-ink backdrop-blur-glass transition-colors duration-200 hover:bg-glass-strong aria-[current=page]:border-transparent aria-[current=page]:bg-accent-glass aria-[current=page]:text-on-accent max-[420px]:h-10 max-[420px]:min-w-9 max-[420px]:px-2 focus-visible:outline-3 focus-visible:outline-offset-2 focus-visible:outline-focus motion-reduce:transition-none" href="#p1" aria-label="Previous page"><svg class="size-[18px]" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M15 5l-7 7 7 7"/></svg></a></li>
    <li><a class="grid h-[42px] min-w-[42px] place-items-center rounded-xl border border-glass-edge bg-glass-control px-3 font-semibold text-ink backdrop-blur-glass transition-colors duration-200 hover:bg-glass-strong aria-[current=page]:border-transparent aria-[current=page]:bg-accent-glass aria-[current=page]:text-on-accent max-[420px]:h-10 max-[420px]:min-w-9 max-[420px]:px-2 focus-visible:outline-3 focus-visible:outline-offset-2 focus-visible:outline-focus motion-reduce:transition-none" href="#p1" aria-label="Page 1">1</a></li>
    <li><a class="grid h-[42px] min-w-[42px] place-items-center rounded-xl border border-glass-edge bg-glass-control px-3 font-semibold text-ink backdrop-blur-glass transition-colors duration-200 hover:bg-glass-strong aria-[current=page]:border-transparent aria-[current=page]:bg-accent-glass aria-[current=page]:text-on-accent max-[420px]:h-10 max-[420px]:min-w-9 max-[420px]:px-2 focus-visible:outline-3 focus-visible:outline-offset-2 focus-visible:outline-focus motion-reduce:transition-none" href="#p2" aria-label="Page 2" aria-current="page">2</a></li>
    <li><a class="grid h-[42px] min-w-[42px] place-items-center rounded-xl border border-glass-edge bg-glass-control px-3 font-semibold text-ink backdrop-blur-glass transition-colors duration-200 hover:bg-glass-strong aria-[current=page]:border-transparent aria-[current=page]:bg-accent-glass aria-[current=page]:text-on-accent max-[420px]:h-10 max-[420px]:min-w-9 max-[420px]:px-2 focus-visible:outline-3 focus-visible:outline-offset-2 focus-visible:outline-focus motion-reduce:transition-none" href="#p3" aria-label="Page 3">3</a></li>
    <li><a class="grid h-[42px] min-w-[42px] place-items-center rounded-xl border border-glass-edge bg-glass-control px-3 font-semibold text-ink backdrop-blur-glass transition-colors duration-200 hover:bg-glass-strong aria-[current=page]:border-transparent aria-[current=page]:bg-accent-glass aria-[current=page]:text-on-accent max-[420px]:h-10 max-[420px]:min-w-9 max-[420px]:px-2 focus-visible:outline-3 focus-visible:outline-offset-2 focus-visible:outline-focus motion-reduce:transition-none" href="#p3" aria-label="Next page"><svg class="size-[18px]" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M9 5l7 7-7 7"/></svg></a></li>
  </ul></nav>
</section>
<div class="border border-glass-border bg-glass-strong text-ink shadow-glass inset-shadow-glass backdrop-blur-glass backdrop-saturate-150 flex items-start gap-3 rounded-2xl p-3.5" role="status"><span class="grid size-[34px] flex-none place-items-center rounded-[11px] bg-good-glass text-good" aria-hidden="true"><svg class="size-[18px]" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M5 12.5l4.5 4.5L19 7.5"/></svg></span>
  <p class="min-w-0 flex-1 text-[.85rem] text-ink-soft"><b class="block text-[.92rem] text-ink">Deploy finished</b>Build 1482 is live in Frankfurt.</p></div>
</div>
</div></div>
</div>
CSS
/* ===== uiCookies Glassmorphism kit: design tokens (identical in every set) =====
   Retheme the whole kit here. Light scene on :root, dark scene on [data-scene="dark"]
   (or any [data-scene] holding a checked [data-scene-switch]). Selectors use :where()
   so the fallbacks below always win. */
:where(:root,[data-scene="light"]){
  color-scheme:light;
  /* background scene: the colour the glass frosts */
  --scene-base:linear-gradient(155deg,#eceffe 0%,#fbeef7 52%,#e6f6fb 100%);
  --scene-1:linear-gradient(140deg,#7c3aed,#c026d3);
  --scene-2:linear-gradient(140deg,#fb7185,#f97316);
  --scene-3:linear-gradient(140deg,#22d3ee,#3b82f6);
  --scene-4:linear-gradient(140deg,#fde047,#fb923c);
  /* glass */
  --glass-tint:255 255 255;
  --glass-border:rgb(255 255 255 / .8);
  --glass-edge:rgb(36 32 88 / .9);
  --glass-highlight:inset 0 1px 0 rgb(255 255 255 / .85);
  --glass-shadow:0 18px 40px -18px rgb(37 30 102 / .45);
  --glass-ink:#16133a;
  --glass-ink-soft:#3b3862;
  --glass-accent:#4338ca;
  --glass-accent-bg:rgb(67 56 202 / .92);
  --glass-on-accent:#fff;
  --glass-check-icon:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M3.5 8.5l3 3 6-7' fill='none' stroke='%23fff' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
  --glass-focus:#1e1b4b;
  --glass-good:#14532d;--glass-good-bg:rgb(220 252 231 / .9);
  --glass-bad:#991b1b;--glass-bad-bg:rgb(254 226 226 / .9);
  --glass-warn:#7c2d12;--glass-warn-bg:rgb(254 243 199 / .9);
  --glass-scrim:rgb(22 19 58 / .3);
}
:where([data-scene="dark"]),:where([data-scene]:has([data-scene-switch]:checked)){
  color-scheme:dark;
  --scene-base:linear-gradient(155deg,#0a0c22 0%,#170c2c 52%,#06171f 100%);
  --scene-1:linear-gradient(140deg,#6d28d9,#a21caf);
  --scene-2:linear-gradient(140deg,#e11d48,#ea580c);
  --scene-3:linear-gradient(140deg,#0891b2,#2563eb);
  --scene-4:linear-gradient(140deg,#ca8a04,#c2410c);
  --glass-tint:16 18 44;
  --glass-border:rgb(255 255 255 / .2);
  --glass-edge:rgb(214 220 255 / .72);
  --glass-highlight:inset 0 1px 0 rgb(255 255 255 / .16);
  --glass-shadow:0 18px 40px -18px rgb(0 0 0 / .75);
  --glass-ink:#f5f6ff;
  --glass-ink-soft:#d0d3ee;
  --glass-accent:#a5b4fc;
  --glass-accent-bg:rgb(165 180 252 / .96);
  --glass-on-accent:#14123a;
  --glass-check-icon:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M3.5 8.5l3 3 6-7' fill='none' stroke='%2314123a' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
  --glass-focus:#c7d2fe;
  --glass-good:#bbf7d0;--glass-good-bg:rgb(20 83 45 / .7);
  --glass-bad:#fecaca;--glass-bad-bg:rgb(127 29 29 / .7);
  --glass-warn:#fde68a;--glass-warn-bg:rgb(120 53 15 / .7);
  --glass-scrim:rgb(0 0 0 / .5);
}
:where(:root){
  --glass-alpha:.6;          /* panels and cards */
  --glass-alpha-strong:.82;  /* menus, dialogs, toasts: they cover unknown content */
  --glass-alpha-control:.5;  /* buttons and fields sitting on a panel */
  --glass-blur:18px;
  --glass-saturate:150%;
  --glass-radius:20px;
}
/* derived: recomputed inside every scene so a dark scene gets dark glass */
:where(:root,[data-scene]){
  --glass-bg:rgb(var(--glass-tint) / var(--glass-alpha));
  --glass-bg-strong:rgb(var(--glass-tint) / var(--glass-alpha-strong));
  --glass-bg-control:rgb(var(--glass-tint) / var(--glass-alpha-control));
}
/* no backdrop-filter: frosting can't happen, so the glass turns nearly solid */
@supports not ((backdrop-filter:blur(1px)) or (-webkit-backdrop-filter:blur(1px))){
  :where(:root){--glass-alpha:.94;--glass-alpha-strong:.97;--glass-alpha-control:.9}
}
@media (prefers-reduced-transparency:reduce){
  :where(:root){--glass-alpha:.93;--glass-alpha-strong:.97;--glass-alpha-control:.9;--glass-blur:8px}
}
@media (prefers-contrast:more){
  :where(:root){--glass-alpha:.96;--glass-alpha-strong:.98;--glass-alpha-control:.96}
  :where(:root,[data-scene]){--glass-border:var(--glass-ink);--glass-edge:var(--glass-ink)}
}
/* ===== end of tokens ===== */
/* Tailwind theme: utilities such as bg-glass, border-glass-edge, backdrop-blur-glass and text-ink read the tokens above */
@theme inline {
  --color-glass: var(--glass-bg);
  --color-glass-strong: var(--glass-bg-strong);
  --color-glass-control: var(--glass-bg-control);
  --color-glass-border: var(--glass-border);
  --color-glass-edge: var(--glass-edge);
  --color-ink: var(--glass-ink);
  --color-ink-soft: var(--glass-ink-soft);
  --color-accent: var(--glass-accent);
  --color-accent-glass: var(--glass-accent-bg);
  --color-on-accent: var(--glass-on-accent);
  --color-focus: var(--glass-focus);
  --color-good: var(--glass-good);
  --color-good-glass: var(--glass-good-bg);
  --color-bad: var(--glass-bad);
  --color-bad-glass: var(--glass-bad-bg);
  --color-warn: var(--glass-warn);
  --color-warn-glass: var(--glass-warn-bg);
  --color-scrim: var(--glass-scrim);
  --blur-glass: var(--glass-blur);
  --radius-glass: var(--glass-radius);
  --shadow-glass: var(--glass-shadow);
  --inset-shadow-glass: var(--glass-highlight);
  --animate-drift: g-drift 32s ease-in-out infinite alternate;
}
@keyframes g-drift { to { transform: translate3d(3vw,4vh,0) scale(1.06); } }

About this set

The core components of the uiCookies glassmorphism UI kit on the dark scene: buttons, icon buttons and switches, form controls, a stat tile, tabs and pagination, and a toast. Nothing in the markup changes except one attribute: data-scene=”dark” on the wrapper swaps the token values, so the same classes give deeper orbs, a dark navy tint, light text and lighter edges. Dark glass fails in a different place from light glass. The risk is a bright orb, such as amber, showing through and washing out light text, and a dark accent colour disappearing against dark glass. So the dark tokens raise the edge to a light 72 percent tint, switch the accent to a pale lavender with dark text on it, and swap the checkbox tick to a dark stroke through a token. Every text run and control edge was measured against the brightest and darkest dark-scene colours, not just the average. The same fallbacks apply: nearly opaque glass without backdrop-filter or under prefers-reduced-transparency, and solid borders under prefers-contrast: more. The Bootstrap version also sets data-bs-theme=”dark” so Bootstrap’s own select chevron follows. The Bootstrap version feeds the tokens into Bootstrap’s own component variables, and the Tailwind version maps them to theme utilities such as bg-glass, border-glass-edge, backdrop-blur-glass and text-ink.

What’s included

  • One attribute, data-scene="dark", switches every token
  • Pale lavender accent with dark text for 3:1 boundaries on dark glass
  • Buttons, switches, fields, stat tile, tabs, pagination and toast
  • color-scheme: dark so native select popups match
  • Same markup and classes as the light sets

Accessibility

Text was measured at 4.5:1 and control edges at 3:1 against every dark-scene colour, including the amber orb that washes out most dark glass designs. Switches are checkboxes with role="switch", fields have labels and hints, the current tab and page use aria-current, and the toast sits in a role="status" region. The focus outline turns light on the dark scene, and transitions stop under prefers-reduced-motion.

Customise it

Edit the [data-scene="dark"] block in the tokens: --glass-tint for the glass colour, --glass-edge for boundaries and --glass-accent-bg with --glass-on-accent for the accent. In Bootstrap keep data-bs-theme="dark" on the same wrapper; in Tailwind the same utilities read the dark values automatically.