Open demo

CSS code

HTML
<div class="g-dash" data-scene="light">
<div class="g-scene" aria-hidden="true"><i></i><i></i><i></i><i></i></div>
<div class="g-dash-grid">
<nav class="g-glass g-side g-dash-side" aria-label="Main">
  <a class="g-brand" href="#home"><svg viewBox="0 0 28 28" aria-hidden="true"><rect width="28" height="28" rx="8"/><path d="M8 19.5 14 8.5l6 11z" fill="#fff"/></svg>Lumen</a>
  <ul>
    <li><a href="#overview" aria-current="page"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linejoin="round" aria-hidden="true"><rect x="3.5" y="3.5" width="7" height="7" rx="1.5"/><rect x="13.5" y="3.5" width="7" height="7" rx="1.5"/><rect x="3.5" y="13.5" width="7" height="7" rx="1.5"/><rect x="13.5" y="13.5" width="7" height="7" rx="1.5"/></svg>Overview</a></li>
    <li><a href="#revenue"><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 20V10M10 20V4M16 20v-7M22 20H2"/></svg>Revenue</a></li>
    <li><a href="#customers"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="9" cy="8" r="3.5"/><path d="M2.5 20a6.5 6.5 0 0 1 13 0M16 4.5a3.5 3.5 0 0 1 0 7M18 14a6.5 6.5 0 0 1 3.5 6"/></svg>Customers<span class="g-count">3<span class="sr-only"> new</span></span></a></li>
    <li><a href="#sprints"><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 6h16M4 12h10M4 18h6"/></svg>Sprints</a></li>
    <li><a href="#settings"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true"><path d="M4 7h10M18 7h2M4 17h4M12 17h8"/><circle cx="16" cy="7" r="2"/><circle cx="10" cy="17" r="2"/></svg>Settings</a></li>
  </ul>
  <div class="g-side-user"><span class="g-initials" aria-hidden="true">RS</span><div><b>Rafael Santos</b><span>Head of growth</span></div></div>
</nav>
<main class="g-main">
  <header class="g-glass g-topbar">
    <div><h1>Good morning, Rafael</h1><p>Friday 16 October · 3 things need your review</p></div>
    <div class="g-with-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true"><circle cx="11" cy="11" r="7"/><path d="M20 20l-3.5-3.5"/></svg><input class="g-input" type="search" placeholder="Search customers" aria-label="Search customers"></div>
    <label class="g-switch">Dark scene<input type="checkbox" role="switch" data-scene-switch></label>
  </header>
  <div class="g-kpis">
    <article class="g-glass g-card"><div class="g-stat-top"><h2 class="g-kpi-h">Revenue this month</h2></div><p class="g-value">$48,210</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>12.4%</b>vs September</p></article>
    <article class="g-glass g-card"><div class="g-stat-top"><h2 class="g-kpi-h">Active customers</h2></div><p class="g-value">3,912</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>5.1%</b>vs September</p></article>
    <article class="g-glass g-card"><div class="g-stat-top"><h2 class="g-kpi-h">Monthly churn</h2></div><p class="g-value">1.8%</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 5v14M6 13l6 6 6-6"/></svg>0.3 pts</b>lower is better</p></article>
  </div>
  <div class="g-dash-row">
    <section class="g-glass g-widget" aria-labelledby="rev-title">
      <div class="g-widget-head"><div><h2 class="g-kpi-h" id="rev-title">Revenue by day</h2><p>Last 7 days, in US dollars</p></div><a class="g-btn g-btn--sm" href="#report">Full report</a></div>
      <ol class="g-bars" aria-label="Revenue per day">
        <li><b>3.2k</b><i style="--h:51%" aria-hidden="true"></i>Fri</li>
        <li><b>4.1k</b><i style="--h:65%" aria-hidden="true"></i>Sat</li>
        <li><b>3.8k</b><i style="--h:60%" aria-hidden="true"></i>Sun</li>
        <li><b>5.6k</b><i style="--h:89%" aria-hidden="true"></i>Mon</li>
        <li><b>4.9k</b><i style="--h:78%" aria-hidden="true"></i>Tue</li>
        <li><b>6.3k</b><i style="--h:100%" aria-hidden="true"></i>Wed</li>
        <li><b>5.2k</b><i style="--h:83%" aria-hidden="true"></i>Thu</li>
      </ol>
    </section>
    <section class="g-glass g-widget" aria-labelledby="sprint-title">
      <h2 class="g-kpi-h" id="sprint-title">Sprint 42</h2>
      <div class="g-ring-wrap">
        <div class="g-ring" aria-hidden="true"><svg viewBox="0 0 120 120"><circle class="g-ring-track" cx="60" cy="60" r="50"/><circle class="g-ring-bar" cx="60" cy="60" r="50" pathLength="100" stroke-dasharray="64 100"/></svg><b>64%</b></div>
        <ul class="g-legend"><li>Done<span>16 of 25 tasks</span></li><li>Ends<span>Wed 21 Oct</span></li></ul>
      </div>
    </section>
  </div>
  <section class="g-glass g-widget" aria-labelledby="feed-title">
    <h2 class="g-kpi-h" id="feed-title">Recent activity</h2>
    <ul class="g-feed">
      <li><span class="g-initials" aria-hidden="true">AO</span><p><b>Amara Okafor</b> upgraded Halden & Co. to the Studio plan</p><time datetime="2026-10-16T09:48">12 min ago</time></li>
      <li><span class="g-initials" aria-hidden="true">TL</span><p><b>Theo Laurent</b> closed 4 support tickets</p><time datetime="2026-10-16T09:15">45 min ago</time></li>
      <li><span class="g-initials" aria-hidden="true">MK</span><p><b>Maya Kobayashi</b> shipped the new onboarding emails</p><time datetime="2026-10-16T08:02">2 h ago</time></li>
    </ul>
  </section>
</main>
</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}}
/* media and widgets */
.g-widget{display:grid;gap:14px;align-content:start;padding:20px}
.g-widget h3{font-size:1.02rem;line-height:1.3}
/* music player */
.g-player-top{display:flex;align-items:center;gap:14px}
.g-cover{display:grid;place-items:center;flex:none;width:64px;height:64px;border-radius:14px;background:var(--scene-1);color:#fff}
.g-cover svg{width:30px;height:30px}
.g-track{min-width:0;flex:1}
.g-track p{font-size:.85rem;color:var(--glass-ink-soft)}
.g-times{display:flex;justify-content:space-between;margin-top:-6px;font-size:.78rem;font-variant-numeric:tabular-nums;color:var(--glass-ink-soft)}
.g-controls{display:flex;align-items:center;justify-content:center;gap:16px}
.g-icon-btn--sm{width:36px;height:36px}
.g-icon-btn--sm svg{width:16px;height:16px}
/* weather */
.g-wx-top{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}
.g-wx-top p{font-size:.85rem;color:var(--glass-ink-soft)}
.g-wx-now{display:flex;align-items:center;gap:14px}
.g-temp{font-size:3.4rem;font-weight:800;line-height:1;letter-spacing:-.04em}
.g-wx-now p:not(.g-temp){font-size:.9rem;color:var(--glass-ink-soft)}
.g-wx-now b{display:block;font-size:1rem;color:var(--glass-ink)}
.g-wx-big{width:56px;height:56px;flex:none}
.g-wx-big .g-cloud{fill:#fff;stroke:var(--glass-ink-soft);stroke-width:2}
.g-hours{display:grid;grid-template-columns:repeat(5,1fr);gap:6px;margin:0;padding:0;list-style:none}
.g-hours li{display:grid;justify-items:center;gap:4px;padding:10px 2px;border:1px solid var(--glass-border);border-radius:14px;background:var(--glass-bg-control);font-size:.8rem}
.g-hours li:first-child{border-color:transparent;background:var(--glass-accent-bg);color:var(--glass-on-accent)}
.g-hours span{color:inherit}
.g-hours b{font-size:.92rem}
.g-hours svg{width:22px;height:22px}
.g-wx-meta{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin:0;font-size:.8rem;text-align:center}
.g-wx-meta div{display:flex;flex-direction:column-reverse}
.g-wx-meta dt{color:var(--glass-ink-soft)}
.g-wx-meta dd{margin:0;font-weight:700;font-size:.92rem}
/* mini calendar */
.g-cal-head{display:flex;align-items:center;justify-content:space-between;gap:10px}
.g-cal-head div{display:flex;gap:6px}
.g-cal table{width:100%;border-collapse:collapse;text-align:center;font-size:.85rem;font-variant-numeric:tabular-nums}
.g-cal th{padding:0 0 6px;font-size:.72rem;font-weight:700;color:var(--glass-ink-soft)}
.g-cal abbr{text-decoration:none}
.g-cal td{padding:2px 0}
.g-cal td>span{position:relative;display:inline-grid;place-items:center;width:32px;height:32px;border-radius:10px}
.g-cal .g-ev>span::after{content:"";position:absolute;bottom:3px;left:50%;width:5px;height:5px;margin-left:-2.5px;border-radius:50%;background:var(--glass-accent)}
.g-cal [aria-current="date"]>span{background:var(--glass-accent-bg);color:var(--glass-on-accent);font-weight:700}
.g-cal [aria-current="date"]>span::after{background:var(--glass-on-accent)}
.g-next{display:flex;align-items:center;gap:10px;padding:10px 12px;border:1px solid var(--glass-border);border-radius:14px;background:var(--glass-bg-control);font-size:.85rem}
.g-next i{flex:none;width:8px;height:8px;border-radius:50%;background:var(--glass-accent)}
.g-next span{color:var(--glass-ink-soft)}
/* progress rings */
.g-rings{display:grid;grid-template-columns:1fr 1fr;gap:12px;text-align:center}
.g-ring{position:relative;width:min(100%,128px);aspect-ratio:1;margin:0 auto 8px}
.g-ring svg{display:block;width:100%;height:100%;transform:rotate(-90deg)}
.g-ring circle{fill:none;stroke-width:11}
.g-ring .g-ring-track{stroke:var(--glass-edge);stroke-opacity:.14}
.g-ring .g-ring-bar{stroke:var(--glass-accent);stroke-linecap:round;animation:g-fill 1s ease-out}
.g-ring--good .g-ring-bar{stroke:var(--glass-good)}
@keyframes g-fill{from{stroke-dasharray:0 100}}
.g-ring b{position:absolute;inset:0;display:grid;place-items:center;font-size:1.6rem;font-weight:800;letter-spacing:-.02em}
.g-rings h3{font-size:.92rem}
.g-rings p{font-size:.82rem;color:var(--glass-ink-soft)}
@media (prefers-reduced-motion:reduce){.g-ring .g-ring-bar{animation:none}}
/* dashboard layout: a [data-scene] host, so the switch in the top bar can turn the whole scene dark with :has() */
.g-dash-grid{display:grid;grid-template-columns:240px minmax(0,1fr);gap:24px;max-width:1240px;margin:0 auto;padding:24px}
.g-dash-side{position:sticky;top:24px;align-self:start}
.g-dash-side .g-brand{margin:4px 12px 10px}
.g-kpi-h{font-size:1.02rem;font-weight:700;line-height:1.3}
.g-stat-top .g-kpi-h{font-size:.9rem;font-weight:600;color:var(--glass-ink-soft)}
.g-main{display:grid;gap:24px;min-width:0}
.g-topbar{display:flex;flex-wrap:wrap;align-items:center;gap:14px 18px;padding:14px 18px}
.g-topbar h1{font-size:1.3rem;line-height:1.2;letter-spacing:-.01em}
.g-topbar p{font-size:.85rem;color:var(--glass-ink-soft)}
.g-topbar .g-with-icon{flex:1 1 200px;max-width:300px;margin-left:auto}
.g-topbar .g-switch{gap:10px;font-size:.88rem;font-weight:600}
.g-kpis{display:grid;gap:24px;grid-template-columns:repeat(3,minmax(0,1fr))}
.g-dash-row{display:grid;gap:24px;grid-template-columns:minmax(0,7fr) minmax(0,5fr)}
.g-widget-head{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px}
.g-widget-head p{font-size:.85rem;color:var(--glass-ink-soft)}
.g-bars{display:grid;grid-template-columns:repeat(7,1fr);align-items:end;gap:10px;height:190px;margin:0;padding:0;list-style:none}
.g-bars li{display:flex;flex-direction:column;align-items:center;justify-content:flex-end;gap:6px;height:100%;font-size:.75rem;color:var(--glass-ink-soft)}
.g-bars i{display:block;width:100%;max-width:36px;height:var(--h);border-radius:9px 9px 4px 4px;background:var(--glass-accent-bg)}
.g-bars b{font-size:.72rem;color:var(--glass-ink)}
.g-ring-wrap{display:grid;justify-items:center;gap:6px;text-align:center}
.g-ring-wrap .g-ring{width:132px;margin:4px auto}
.g-legend{display:grid;gap:8px;width:100%;margin:0;padding:0;list-style:none;font-size:.85rem;text-align:left}
.g-legend li{display:flex;justify-content:space-between;gap:10px;padding:8px 12px;border:1px solid var(--glass-border);border-radius:12px;background:var(--glass-bg-control)}
.g-legend span{color:var(--glass-ink-soft)}
.g-feed{display:grid;margin:0;padding:0;list-style:none}
.g-feed li{display:flex;align-items:center;gap:12px;padding:12px 0}
.g-feed li+li{border-top:1px solid var(--glass-border)}
.g-feed p{flex:1;min-width:0;font-size:.9rem}
.g-feed time{flex:none;font-size:.78rem;color:var(--glass-ink-soft)}
@media (max-width:991.98px){.g-dash-grid{grid-template-columns:1fr;padding:16px}.g-dash-side{position:static}.g-dash-row{grid-template-columns:1fr}}
@media (max-width:767.98px){.g-kpis{grid-template-columns:1fr}}

Bootstrap 5 code

Requires: Bootstrap 5.3.8 CSS

HTML
<div class="g-dash" data-scene="light">
<div class="g-scene" aria-hidden="true"><i></i><i></i><i></i><i></i></div>
<div class="g-dash-grid">
<nav class="g-glass g-side-wrap g-dash-side" aria-label="Main">
  <a class="g-brand" href="#home"><svg viewBox="0 0 28 28" aria-hidden="true"><rect width="28" height="28" rx="8"/><path d="M8 19.5 14 8.5l6 11z" fill="#fff"/></svg>Lumen</a>
  <ul class="nav nav-pills flex-column g-pills g-side">
    <li class="nav-item"><a class="nav-link active" href="#overview" aria-current="page"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linejoin="round" aria-hidden="true"><rect x="3.5" y="3.5" width="7" height="7" rx="1.5"/><rect x="13.5" y="3.5" width="7" height="7" rx="1.5"/><rect x="3.5" y="13.5" width="7" height="7" rx="1.5"/><rect x="13.5" y="13.5" width="7" height="7" rx="1.5"/></svg>Overview</a></li>
    <li class="nav-item"><a class="nav-link" href="#revenue"><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 20V10M10 20V4M16 20v-7M22 20H2"/></svg>Revenue</a></li>
    <li class="nav-item"><a class="nav-link" href="#customers"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="9" cy="8" r="3.5"/><path d="M2.5 20a6.5 6.5 0 0 1 13 0M16 4.5a3.5 3.5 0 0 1 0 7M18 14a6.5 6.5 0 0 1 3.5 6"/></svg>Customers<span class="badge g-count">3<span class="visually-hidden"> new</span></span></a></li>
    <li class="nav-item"><a class="nav-link" href="#sprints"><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 6h16M4 12h10M4 18h6"/></svg>Sprints</a></li>
    <li class="nav-item"><a class="nav-link" href="#settings"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true"><path d="M4 7h10M18 7h2M4 17h4M12 17h8"/><circle cx="16" cy="7" r="2"/><circle cx="10" cy="17" r="2"/></svg>Settings</a></li>
  </ul>
  <div class="g-side-user"><span class="g-initials" aria-hidden="true">RS</span><div><b>Rafael Santos</b><span>Head of growth</span></div></div>
</nav>
<main class="g-main">
  <header class="g-glass g-topbar g-form">
    <div><h1>Good morning, Rafael</h1><p>Friday 16 October · 3 things need your review</p></div>
    <div class="position-relative"><svg class="g-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true"><circle cx="11" cy="11" r="7"/><path d="M20 20l-3.5-3.5"/></svg><input class="form-control" type="search" placeholder="Search customers" aria-label="Search customers"></div>
    <div class="form-check form-switch g-switch"><label class="form-check-label" for="scene-switch">Dark scene</label><input class="form-check-input" type="checkbox" role="switch" id="scene-switch" data-scene-switch></div>
  </header>
  <div class="row g-4">
    <div class="col-md-4"><article class="card g-glass h-100"><div class="card-body g-card"><div class="g-stat-top"><h2 class="g-kpi-h">Revenue this month</h2></div><p class="g-value">$48,210</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>12.4%</b>vs September</p></div></article></div>
    <div class="col-md-4"><article class="card g-glass h-100"><div class="card-body g-card"><div class="g-stat-top"><h2 class="g-kpi-h">Active customers</h2></div><p class="g-value">3,912</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>5.1%</b>vs September</p></div></article></div>
    <div class="col-md-4"><article class="card g-glass h-100"><div class="card-body g-card"><div class="g-stat-top"><h2 class="g-kpi-h">Monthly churn</h2></div><p class="g-value">1.8%</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 5v14M6 13l6 6 6-6"/></svg>0.3 pts</b>lower is better</p></div></article></div>
  </div>
  <div class="row g-4">
    <div class="col-lg-7"><section class="card g-glass h-100" aria-labelledby="rev-title"><div class="card-body g-widget">
      <div class="g-widget-head"><div><h2 class="g-kpi-h" id="rev-title">Revenue by day</h2><p>Last 7 days, in US dollars</p></div><a class="btn btn-glass btn-sm" href="#report">Full report</a></div>
      <ol class="list-unstyled g-bars" aria-label="Revenue per day">
        <li><b>3.2k</b><i style="--h:51%" aria-hidden="true"></i>Fri</li>
        <li><b>4.1k</b><i style="--h:65%" aria-hidden="true"></i>Sat</li>
        <li><b>3.8k</b><i style="--h:60%" aria-hidden="true"></i>Sun</li>
        <li><b>5.6k</b><i style="--h:89%" aria-hidden="true"></i>Mon</li>
        <li><b>4.9k</b><i style="--h:78%" aria-hidden="true"></i>Tue</li>
        <li><b>6.3k</b><i style="--h:100%" aria-hidden="true"></i>Wed</li>
        <li><b>5.2k</b><i style="--h:83%" aria-hidden="true"></i>Thu</li>
      </ol>
    </div></section></div>
    <div class="col-lg-5"><section class="card g-glass h-100" aria-labelledby="sprint-title"><div class="card-body g-widget">
      <h2 class="g-kpi-h" id="sprint-title">Sprint 42</h2>
      <div class="g-ring-wrap">
        <div class="g-ring" aria-hidden="true"><svg viewBox="0 0 120 120"><circle class="g-ring-track" cx="60" cy="60" r="50"/><circle class="g-ring-bar" cx="60" cy="60" r="50" pathLength="100" stroke-dasharray="64 100"/></svg><b>64%</b></div>
        <ul class="list-unstyled g-legend"><li>Done<span>16 of 25 tasks</span></li><li>Ends<span>Wed 21 Oct</span></li></ul>
      </div>
    </div></section></div>
  </div>
  <section class="card g-glass" aria-labelledby="feed-title"><div class="card-body g-widget">
    <h2 class="g-kpi-h" id="feed-title">Recent activity</h2>
    <ul class="list-group list-group-flush g-activity">
      <li class="list-group-item"><span class="g-initials" aria-hidden="true">AO</span><p><b>Amara Okafor</b> upgraded Halden & Co. to the Studio plan</p><time datetime="2026-10-16T09:48">12 min ago</time></li>
      <li class="list-group-item"><span class="g-initials" aria-hidden="true">TL</span><p><b>Theo Laurent</b> closed 4 support tickets</p><time datetime="2026-10-16T09:15">45 min ago</time></li>
      <li class="list-group-item"><span class="g-initials" aria-hidden="true">MK</span><p><b>Maya Kobayashi</b> shipped the new onboarding emails</p><time datetime="2026-10-16T08:02">2 h ago</time></li>
    </ul>
  </div></section>
</main>
</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}}
/* media and widgets */
.g-widget{display:grid;gap:14px;align-content:start;padding:20px}
.g-widget h3{font-size:1.02rem;line-height:1.3}
/* music player */
.g-player-top{display:flex;align-items:center;gap:14px}
.g-cover{display:grid;place-items:center;flex:none;width:64px;height:64px;border-radius:14px;background:var(--scene-1);color:#fff}
.g-cover svg{width:30px;height:30px}
.g-track{min-width:0;flex:1}
.g-track p{font-size:.85rem;color:var(--glass-ink-soft)}
.g-times{display:flex;justify-content:space-between;margin-top:-6px;font-size:.78rem;font-variant-numeric:tabular-nums;color:var(--glass-ink-soft)}
.g-controls{display:flex;align-items:center;justify-content:center;gap:16px}
.g-icon-btn--sm{width:36px;height:36px}
.g-icon-btn--sm svg{width:16px;height:16px}
/* weather */
.g-wx-top{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}
.g-wx-top p{font-size:.85rem;color:var(--glass-ink-soft)}
.g-wx-now{display:flex;align-items:center;gap:14px}
.g-temp{font-size:3.4rem;font-weight:800;line-height:1;letter-spacing:-.04em}
.g-wx-now p:not(.g-temp){font-size:.9rem;color:var(--glass-ink-soft)}
.g-wx-now b{display:block;font-size:1rem;color:var(--glass-ink)}
.g-wx-big{width:56px;height:56px;flex:none}
.g-wx-big .g-cloud{fill:#fff;stroke:var(--glass-ink-soft);stroke-width:2}
.g-hours{display:grid;grid-template-columns:repeat(5,1fr);gap:6px;margin:0;padding:0;list-style:none}
.g-hours li{display:grid;justify-items:center;gap:4px;padding:10px 2px;border:1px solid var(--glass-border);border-radius:14px;background:var(--glass-bg-control);font-size:.8rem}
.g-hours li:first-child{border-color:transparent;background:var(--glass-accent-bg);color:var(--glass-on-accent)}
.g-hours span{color:inherit}
.g-hours b{font-size:.92rem}
.g-hours svg{width:22px;height:22px}
.g-wx-meta{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin:0;font-size:.8rem;text-align:center}
.g-wx-meta div{display:flex;flex-direction:column-reverse}
.g-wx-meta dt{color:var(--glass-ink-soft)}
.g-wx-meta dd{margin:0;font-weight:700;font-size:.92rem}
/* mini calendar */
.g-cal-head{display:flex;align-items:center;justify-content:space-between;gap:10px}
.g-cal-head div{display:flex;gap:6px}
.g-cal table{width:100%;border-collapse:collapse;text-align:center;font-size:.85rem;font-variant-numeric:tabular-nums}
.g-cal th{padding:0 0 6px;font-size:.72rem;font-weight:700;color:var(--glass-ink-soft)}
.g-cal abbr{text-decoration:none}
.g-cal td{padding:2px 0}
.g-cal td>span{position:relative;display:inline-grid;place-items:center;width:32px;height:32px;border-radius:10px}
.g-cal .g-ev>span::after{content:"";position:absolute;bottom:3px;left:50%;width:5px;height:5px;margin-left:-2.5px;border-radius:50%;background:var(--glass-accent)}
.g-cal [aria-current="date"]>span{background:var(--glass-accent-bg);color:var(--glass-on-accent);font-weight:700}
.g-cal [aria-current="date"]>span::after{background:var(--glass-on-accent)}
.g-next{display:flex;align-items:center;gap:10px;padding:10px 12px;border:1px solid var(--glass-border);border-radius:14px;background:var(--glass-bg-control);font-size:.85rem}
.g-next i{flex:none;width:8px;height:8px;border-radius:50%;background:var(--glass-accent)}
.g-next span{color:var(--glass-ink-soft)}
/* progress rings */
.g-rings{display:grid;grid-template-columns:1fr 1fr;gap:12px;text-align:center}
.g-ring{position:relative;width:min(100%,128px);aspect-ratio:1;margin:0 auto 8px}
.g-ring svg{display:block;width:100%;height:100%;transform:rotate(-90deg)}
.g-ring circle{fill:none;stroke-width:11}
.g-ring .g-ring-track{stroke:var(--glass-edge);stroke-opacity:.14}
.g-ring .g-ring-bar{stroke:var(--glass-accent);stroke-linecap:round;animation:g-fill 1s ease-out}
.g-ring--good .g-ring-bar{stroke:var(--glass-good)}
@keyframes g-fill{from{stroke-dasharray:0 100}}
.g-ring b{position:absolute;inset:0;display:grid;place-items:center;font-size:1.6rem;font-weight:800;letter-spacing:-.02em}
.g-rings h3{font-size:.92rem}
.g-rings p{font-size:.82rem;color:var(--glass-ink-soft)}
@media (prefers-reduced-motion:reduce){.g-ring .g-ring-bar{animation:none}}
/* Bootstrap: .card-body carries .g-widget; reset Bootstrap's text margins inside */
.card-body.g-widget{padding:20px}
.g-widget :is(h3,p,dl,dd,ol,table){margin-bottom:0}
.g-widget dt{font-weight:400}
.g-widget h3{font-weight:700}
.g-cal .table{--bs-table-bg:transparent;--bs-table-color:var(--glass-ink);--bs-table-border-color:transparent}
.g-cal .table>:not(caption)>*>*{padding:2px 0}
.g-cal .table th{padding-bottom:6px}
/* dashboard layout: a [data-scene] host, so the switch in the top bar can turn the whole scene dark with :has() */
.g-dash-grid{display:grid;grid-template-columns:240px minmax(0,1fr);gap:24px;max-width:1240px;margin:0 auto;padding:24px}
.g-dash-side{position:sticky;top:24px;align-self:start}
.g-dash-side .g-brand{margin:4px 12px 10px}
.g-kpi-h{font-size:1.02rem;font-weight:700;line-height:1.3}
.g-stat-top .g-kpi-h{font-size:.9rem;font-weight:600;color:var(--glass-ink-soft)}
.g-main{display:grid;gap:24px;min-width:0}
.g-topbar{display:flex;flex-wrap:wrap;align-items:center;gap:14px 18px;padding:14px 18px}
.g-topbar h1{font-size:1.3rem;line-height:1.2;letter-spacing:-.01em}
.g-topbar p{font-size:.85rem;color:var(--glass-ink-soft)}
.g-topbar .g-with-icon{flex:1 1 200px;max-width:300px;margin-left:auto}
.g-topbar .g-switch{gap:10px;font-size:.88rem;font-weight:600}
.g-kpis{display:grid;gap:24px;grid-template-columns:repeat(3,minmax(0,1fr))}
.g-dash-row{display:grid;gap:24px;grid-template-columns:minmax(0,7fr) minmax(0,5fr)}
.g-widget-head{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px}
.g-widget-head p{font-size:.85rem;color:var(--glass-ink-soft)}
.g-bars{display:grid;grid-template-columns:repeat(7,1fr);align-items:end;gap:10px;height:190px;margin:0;padding:0;list-style:none}
.g-bars li{display:flex;flex-direction:column;align-items:center;justify-content:flex-end;gap:6px;height:100%;font-size:.75rem;color:var(--glass-ink-soft)}
.g-bars i{display:block;width:100%;max-width:36px;height:var(--h);border-radius:9px 9px 4px 4px;background:var(--glass-accent-bg)}
.g-bars b{font-size:.72rem;color:var(--glass-ink)}
.g-ring-wrap{display:grid;justify-items:center;gap:6px;text-align:center}
.g-ring-wrap .g-ring{width:132px;margin:4px auto}
.g-legend{display:grid;gap:8px;width:100%;margin:0;padding:0;list-style:none;font-size:.85rem;text-align:left}
.g-legend li{display:flex;justify-content:space-between;gap:10px;padding:8px 12px;border:1px solid var(--glass-border);border-radius:12px;background:var(--glass-bg-control)}
.g-legend span{color:var(--glass-ink-soft)}
.g-feed{display:grid;margin:0;padding:0;list-style:none}
.g-feed li{display:flex;align-items:center;gap:12px;padding:12px 0}
.g-feed li+li{border-top:1px solid var(--glass-border)}
.g-feed p{flex:1;min-width:0;font-size:.9rem}
.g-feed time{flex:none;font-size:.78rem;color:var(--glass-ink-soft)}
@media (max-width:991.98px){.g-dash-grid{grid-template-columns:1fr;padding:16px}.g-dash-side{position:static}.g-dash-row{grid-template-columns:1fr}}
@media (max-width:767.98px){.g-kpis{grid-template-columns:1fr}}
/* Bootstrap mapping for the dashboard */
.g-brand{display:inline-flex;align-items:center;gap:10px;margin:4px 12px 10px;border-radius:8px;color:var(--glass-ink);font-size:1.05rem;font-weight:800;text-decoration:none}
.g-brand:hover{color:var(--glass-ink)}
.g-brand svg{width:28px;height:28px}
.g-brand rect{fill:var(--glass-accent-bg)}
.g-brand:focus-visible{outline:3px solid var(--glass-focus);outline-offset:2px}
.g-dash :is(h1,h2,p){margin-bottom:0}
.g-topbar .g-switch .form-check-label{font-size:.88rem;font-weight:600}
.g-topbar .position-relative{flex:1 1 200px;max-width:300px;margin-left:auto}
.g-activity.list-group{--bs-list-group-bg:transparent;--bs-list-group-color:var(--glass-ink);--bs-list-group-border-color:var(--glass-border);
  --bs-list-group-item-padding-x:0;--bs-list-group-item-padding-y:12px}
.g-activity .list-group-item{display:flex;align-items:center;gap:12px}
.g-activity p{flex:1;min-width:0;font-size:.9rem}
.g-activity time{flex:none;font-size:.78rem;color:var(--glass-ink-soft)}

Tailwind 4 code

Requires: Tailwind CSS 4

HTML
<div data-scene="light" 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 grid max-w-[1240px] gap-6 p-4 lg:grid-cols-[240px_minmax(0,1fr)] lg:p-6">
<nav class="border border-glass-border bg-glass text-ink shadow-glass inset-shadow-glass backdrop-blur-glass backdrop-saturate-150 rounded-glass flex flex-col gap-1 self-start p-3.5 lg:sticky lg:top-6" aria-label="Main">
  <a class="mx-3 mt-1 mb-2.5 inline-flex items-center gap-2.5 self-start rounded-lg text-[1.05rem] font-extrabold text-ink focus-visible:outline-3 focus-visible:outline-offset-3 focus-visible:outline-focus" href="#home"><svg class="size-7" viewBox="0 0 28 28" aria-hidden="true"><rect class="fill-accent-glass" width="28" height="28" rx="8"/><path d="M8 19.5 14 8.5l6 11z" fill="#fff"/></svg>Lumen</a>
  <ul class="grid gap-0.5">
    <li><a class="flex items-center gap-3 rounded-xl px-3 py-2.5 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"><svg class="size-5 flex-none" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linejoin="round" aria-hidden="true"><rect x="3.5" y="3.5" width="7" height="7" rx="1.5"/><rect x="13.5" y="3.5" width="7" height="7" rx="1.5"/><rect x="3.5" y="13.5" width="7" height="7" rx="1.5"/><rect x="13.5" y="13.5" width="7" height="7" rx="1.5"/></svg>Overview</a></li>
    <li><a class="flex items-center gap-3 rounded-xl px-3 py-2.5 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="#revenue"><svg class="size-5 flex-none" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 20V10M10 20V4M16 20v-7M22 20H2"/></svg>Revenue</a></li>
    <li><a class="flex items-center gap-3 rounded-xl px-3 py-2.5 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="#customers"><svg class="size-5 flex-none" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="9" cy="8" r="3.5"/><path d="M2.5 20a6.5 6.5 0 0 1 13 0M16 4.5a3.5 3.5 0 0 1 0 7M18 14a6.5 6.5 0 0 1 3.5 6"/></svg>Customers<span class="min-w-[22px] rounded-full bg-glass-strong px-[7px] py-px text-center text-[.75rem] font-bold text-ink ml-auto">3<span class="sr-only"> new</span></span></a></li>
    <li><a class="flex items-center gap-3 rounded-xl px-3 py-2.5 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="#sprints"><svg class="size-5 flex-none" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 6h16M4 12h10M4 18h6"/></svg>Sprints</a></li>
    <li><a class="flex items-center gap-3 rounded-xl px-3 py-2.5 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="#settings"><svg class="size-5 flex-none" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true"><path d="M4 7h10M18 7h2M4 17h4M12 17h8"/><circle cx="16" cy="7" r="2"/><circle cx="10" cy="17" r="2"/></svg>Settings</a></li>
  </ul>
  <div class="mt-2.5 flex items-center gap-2.5 border-t border-glass-border p-3 text-[.85rem]"><span class="grid size-9 flex-none place-items-center rounded-full bg-(image:--scene-1) text-[.8rem] font-bold text-white" aria-hidden="true">RS</span><div><b class="block text-[.9rem]">Rafael Santos</b><span class="text-ink-soft">Head of growth</span></div></div>
</nav>
<main class="grid min-w-0 gap-6">
  <header class="border border-glass-border bg-glass text-ink shadow-glass inset-shadow-glass backdrop-blur-glass backdrop-saturate-150 rounded-glass flex flex-wrap items-center gap-x-[18px] gap-y-3.5 px-[18px] py-3.5">
    <div><h1 class="text-[1.3rem] leading-[1.2] font-bold tracking-[-.01em]">Good morning, Rafael</h1><p class="text-[.85rem] text-ink-soft">Friday 16 October · 3 things need your review</p></div>
    <div class="relative ml-auto max-w-[300px] flex-[1_1_200px]"><svg class="pointer-events-none absolute top-1/2 left-[14px] size-[18px] -translate-y-1/2 text-ink-soft" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true"><circle cx="11" cy="11" r="7"/><path d="M20 20l-3.5-3.5"/></svg><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 pl-[42px]" type="search" placeholder="Search customers" aria-label="Search customers"></div>
    <label class="flex cursor-pointer items-center gap-2.5 text-[.88rem] font-semibold">Dark scene<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" data-scene-switch></label>
  </header>
  <div class="grid gap-6 md:grid-cols-3">
    <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"><h2 class="text-[.9rem] font-semibold text-ink-soft">Revenue this month</h2><p class="text-[2.1rem] leading-[1.1] font-extrabold tracking-[-.02em]">$48,210</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>12.4%</b>vs September</p></article>
    <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"><h2 class="text-[.9rem] font-semibold text-ink-soft">Active customers</h2><p class="text-[2.1rem] leading-[1.1] font-extrabold tracking-[-.02em]">3,912</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>5.1%</b>vs September</p></article>
    <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"><h2 class="text-[.9rem] font-semibold text-ink-soft">Monthly churn</h2><p class="text-[2.1rem] leading-[1.1] font-extrabold tracking-[-.02em]">1.8%</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 5v14M6 13l6 6 6-6"/></svg>0.3 pts</b>lower is better</p></article>
  </div>
  <div class="grid gap-6 lg:grid-cols-[minmax(0,7fr)_minmax(0,5fr)]">
    <section class="border border-glass-border bg-glass text-ink shadow-glass inset-shadow-glass backdrop-blur-glass backdrop-saturate-150 rounded-glass grid content-start gap-3.5 p-5" aria-labelledby="rev-title">
      <div class="flex flex-wrap items-center justify-between gap-2.5"><div><h2 class="text-[1.02rem] leading-[1.3] font-bold" id="rev-title">Revenue by day</h2><p class="text-[.85rem] text-ink-soft">Last 7 days, in US dollars</p></div><a 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-9 px-[14px] text-[.85rem]" href="#report">Full report</a></div>
      <ol class="grid h-[190px] grid-cols-7 items-end gap-2.5 text-[.75rem] text-ink-soft [&>li]:flex [&>li]:h-full [&>li]:flex-col [&>li]:items-center [&>li]:justify-end [&>li]:gap-1.5 [&_b]:text-[.72rem] [&_b]:text-ink [&_i]:block [&_i]:w-full [&_i]:max-w-9 [&_i]:rounded-t-[9px] [&_i]:rounded-b-[4px] [&_i]:bg-accent-glass" aria-label="Revenue per day">
        <li><b>3.2k</b><i class="h-[51%]" aria-hidden="true"></i>Fri</li>
        <li><b>4.1k</b><i class="h-[65%]" aria-hidden="true"></i>Sat</li>
        <li><b>3.8k</b><i class="h-[60%]" aria-hidden="true"></i>Sun</li>
        <li><b>5.6k</b><i class="h-[89%]" aria-hidden="true"></i>Mon</li>
        <li><b>4.9k</b><i class="h-[78%]" aria-hidden="true"></i>Tue</li>
        <li><b>6.3k</b><i class="h-full" aria-hidden="true"></i>Wed</li>
        <li><b>5.2k</b><i class="h-[83%]" aria-hidden="true"></i>Thu</li>
      </ol>
    </section>
    <section class="border border-glass-border bg-glass text-ink shadow-glass inset-shadow-glass backdrop-blur-glass backdrop-saturate-150 rounded-glass grid content-start gap-3.5 p-5" aria-labelledby="sprint-title">
      <h2 class="text-[1.02rem] leading-[1.3] font-bold" id="sprint-title">Sprint 42</h2>
      <div class="grid justify-items-center gap-1.5 text-center">
        <div class="relative mx-auto my-1 aspect-square w-[132px]" aria-hidden="true"><svg class="block size-full -rotate-90 fill-none stroke-[11]" viewBox="0 0 120 120"><circle class="stroke-glass-edge [stroke-opacity:.14]" cx="60" cy="60" r="50"/><circle class="stroke-accent motion-safe:animate-fill" stroke-linecap="round" cx="60" cy="60" r="50" pathLength="100" stroke-dasharray="64 100"/></svg><b class="absolute inset-0 grid place-items-center text-[1.6rem] font-extrabold tracking-[-.02em]">64%</b></div>
        <ul class="grid w-full gap-2 text-left text-[.85rem] [&>li]:flex [&>li]:justify-between [&>li]:gap-2.5 [&>li]:rounded-xl [&>li]:border [&>li]:border-glass-border [&>li]:bg-glass-control [&>li]:px-3 [&>li]:py-2 [&_span]:text-ink-soft"><li>Done<span>16 of 25 tasks</span></li><li>Ends<span>Wed 21 Oct</span></li></ul>
      </div>
    </section>
  </div>
  <section class="border border-glass-border bg-glass text-ink shadow-glass inset-shadow-glass backdrop-blur-glass backdrop-saturate-150 rounded-glass grid content-start gap-3.5 p-5" aria-labelledby="feed-title">
    <h2 class="text-[1.02rem] leading-[1.3] font-bold" id="feed-title">Recent activity</h2>
    <ul class="grid divide-y divide-glass-border [&>li]:flex [&>li]:items-center [&>li]:gap-3 [&>li]:py-3 [&_p]:min-w-0 [&_p]:flex-1 [&_p]:text-[.9rem] [&_time]:flex-none [&_time]:text-[.78rem] [&_time]:text-ink-soft">
      <li><span class="grid size-9 flex-none place-items-center rounded-full bg-(image:--scene-1) text-[.8rem] font-bold text-white" aria-hidden="true">AO</span><p><b>Amara Okafor</b> upgraded Halden & Co. to the Studio plan</p><time datetime="2026-10-16T09:48">12 min ago</time></li>
      <li><span class="grid size-9 flex-none place-items-center rounded-full bg-(image:--scene-1) text-[.8rem] font-bold text-white" aria-hidden="true">TL</span><p><b>Theo Laurent</b> closed 4 support tickets</p><time datetime="2026-10-16T09:15">45 min ago</time></li>
      <li><span class="grid size-9 flex-none place-items-center rounded-full bg-(image:--scene-1) text-[.8rem] font-bold text-white" aria-hidden="true">MK</span><p><b>Maya Kobayashi</b> shipped the new onboarding emails</p><time datetime="2026-10-16T08:02">2 h ago</time></li>
    </ul>
  </section>
</main>
</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); } }
@theme { --animate-fill: g-fill 1s ease-out; }
@keyframes g-fill { from { stroke-dasharray: 0 100; } }

About this set

A complete glass dashboard built from the components of the uiCookies glassmorphism UI kit, with a switch that turns the whole scene from light to dark. The sticky sidebar has the logo, five links with the current page marked, a new-customers count and the signed-in user. The top bar greets the user, holds a search field and the Dark scene switch. Below are three KPI tiles for revenue, active customers and churn, a revenue-by-day bar chart with the value printed above every bar, a sprint progress ring with its task count and end date, and a recent activity feed with times. The scene switch needs no JavaScript. It is a checkbox with data-scene-switch inside the data-scene wrapper, and the token block contains one selector, [data-scene]:has([data-scene-switch]:checked), that applies the dark values, so every glass surface, text colour and edge changes at once. The bar chart is an ordered list of real text with bars drawn by height, so the numbers stay readable and copyable. On tablets the sidebar moves above the content, and on phones the KPI tiles stack. 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

  • Light and dark scenes switched by a checkbox and :has(), no JavaScript
  • Sticky glass sidebar, top bar with search, KPI tiles and activity feed
  • Bar chart as an ordered list with values written as text
  • Sprint progress ring and legend
  • Bootstrap version built from .row, .card, .nav-pills, .form-switch and .list-group

Accessibility

The page has nav and main landmarks, the current link uses aria-current, the scene switch is a labelled checkbox with role="switch", and the search field has an aria-label. Chart values and ring figures are text, and decorative bars, icons and avatars are hidden from assistive technology. All text was checked at 4.5:1 and edges at 3:1 in both the light and the dark scene, focus shows a 3px outline, and animations stop under prefers-reduced-motion.

Customise it

Retheme both scenes in the token block; the dark values sit under [data-scene="dark"] and the :has() selector. Change the bar heights through --h in CSS and Bootstrap or the h-[n%] utilities in Tailwind. Remove data-scene-switch from the checkbox to fix the dashboard to one scene.