25 CSS Glassmorphism Cards04 / 25
CSS Glassmorphism Checkout Card Design
The money screens: a frosted order-summary card with line items, a promo field and a sheen-on-hover pay button, plus a payment-method picker built from radio cards — the :checked one gets the glass ring, check dot and lifted tint. Both lean dark, calm and trust-forward.
Published
The code
<div class="glz-04-group">
<link href="https://fonts.googleapis.com/css2?family=Manrope:wght@300..800&display=swap" rel="stylesheet">
<section class="glz-04a" aria-label="Glassmorphism order summary checkout card">
<article class="glz-04a__card">
<h3 class="glz-04a__title">Order summary</h3>
<ul class="glz-04a__items">
<li><img src="https://images.unsplash.com/photo-1523275335684-37898b6baf30?q=80&w=240&auto=format&fit=crop" alt="" loading="lazy"><span class="glz-04a__n">Solstice Watch — 40mm<em>Qty 1</em></span><b>$289.00</b></li>
<li><img src="https://images.unsplash.com/photo-1505740420928-5e560c06d30e?q=80&w=240&auto=format&fit=crop" alt="" loading="lazy"><span class="glz-04a__n">Aria Studio ANC<em>Qty 1</em></span><b>$229.00</b></li>
</ul>
<form class="glz-04a__promo" onsubmit="return false"><label class="glz-04a__sr" for="glz-04a-code">Promo code</label><input id="glz-04a-code" type="text" placeholder="Promo code" autocomplete="off"><button type="submit">Apply</button></form>
<dl class="glz-04a__totals">
<div><dt>Subtotal</dt><dd>$518.00</dd></div>
<div><dt>Shipping</dt><dd>Free</dd></div>
<div><dt>Tax</dt><dd>$41.44</dd></div>
<div class="glz-04a__grand"><dt>Total</dt><dd>$559.44</dd></div>
</dl>
<button type="button" class="glz-04a__pay">Pay $559.44</button>
<p class="glz-04a__trust"><svg viewBox="0 0 24 24" aria-hidden="true"><path d="M7 10V8a5 5 0 0 1 10 0v2m-11 0h12v9H6z" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linejoin="round"/></svg>Encrypted checkout · 256-bit TLS</p>
</article>
</section>
<link href="https://fonts.googleapis.com/css2?family=Manrope:wght@300..800&display=swap" rel="stylesheet">
<section class="glz-04b" aria-label="Glassmorphism payment method picker">
<article class="glz-04b__card">
<header class="glz-04b__head"><h3>Payment method</h3><span>Step 2 of 3</span></header>
<div class="glz-04b__methods">
<label class="glz-04b__m"><input type="radio" name="glz-04b-pay" checked><span class="glz-04b__ic" aria-hidden="true">💳</span><span class="glz-04b__t">Card ending 4467<em>Visa · expires 09/29</em></span><i class="glz-04b__dot" aria-hidden="true"></i></label>
<label class="glz-04b__m"><input type="radio" name="glz-04b-pay"><span class="glz-04b__ic" aria-hidden="true"></span><span class="glz-04b__t"> Pay<em>Instant · Face ID</em></span><i class="glz-04b__dot" aria-hidden="true"></i></label>
<label class="glz-04b__m"><input type="radio" name="glz-04b-pay"><span class="glz-04b__ic" aria-hidden="true">🅿</span><span class="glz-04b__t">PayPal<em>b•••@studio.co</em></span><i class="glz-04b__dot" aria-hidden="true"></i></label>
</div>
<div class="glz-04b__foot"><span>Total due today</span><b>$559.44</b></div>
<button type="button" class="glz-04b__cta">Continue to review →</button>
</article>
</section>
</div><div class="glz-04-group">
<link href="https://fonts.googleapis.com/css2?family=Manrope:wght@300..800&display=swap" rel="stylesheet">
<section class="glz-04a" aria-label="Glassmorphism order summary checkout card">
<article class="glz-04a__card">
<h3 class="glz-04a__title">Order summary</h3>
<ul class="glz-04a__items">
<li><img src="https://images.unsplash.com/photo-1523275335684-37898b6baf30?q=80&w=240&auto=format&fit=crop" alt="" loading="lazy"><span class="glz-04a__n">Solstice Watch — 40mm<em>Qty 1</em></span><b>$289.00</b></li>
<li><img src="https://images.unsplash.com/photo-1505740420928-5e560c06d30e?q=80&w=240&auto=format&fit=crop" alt="" loading="lazy"><span class="glz-04a__n">Aria Studio ANC<em>Qty 1</em></span><b>$229.00</b></li>
</ul>
<form class="glz-04a__promo" onsubmit="return false"><label class="glz-04a__sr" for="glz-04a-code">Promo code</label><input id="glz-04a-code" type="text" placeholder="Promo code" autocomplete="off"><button type="submit">Apply</button></form>
<dl class="glz-04a__totals">
<div><dt>Subtotal</dt><dd>$518.00</dd></div>
<div><dt>Shipping</dt><dd>Free</dd></div>
<div><dt>Tax</dt><dd>$41.44</dd></div>
<div class="glz-04a__grand"><dt>Total</dt><dd>$559.44</dd></div>
</dl>
<button type="button" class="glz-04a__pay">Pay $559.44</button>
<p class="glz-04a__trust"><svg viewBox="0 0 24 24" aria-hidden="true"><path d="M7 10V8a5 5 0 0 1 10 0v2m-11 0h12v9H6z" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linejoin="round"/></svg>Encrypted checkout · 256-bit TLS</p>
</article>
</section>
<link href="https://fonts.googleapis.com/css2?family=Manrope:wght@300..800&display=swap" rel="stylesheet">
<section class="glz-04b" aria-label="Glassmorphism payment method picker">
<article class="glz-04b__card">
<header class="glz-04b__head"><h3>Payment method</h3><span>Step 2 of 3</span></header>
<div class="glz-04b__methods">
<label class="glz-04b__m"><input type="radio" name="glz-04b-pay" checked><span class="glz-04b__ic" aria-hidden="true">💳</span><span class="glz-04b__t">Card ending 4467<em>Visa · expires 09/29</em></span><i class="glz-04b__dot" aria-hidden="true"></i></label>
<label class="glz-04b__m"><input type="radio" name="glz-04b-pay"><span class="glz-04b__ic" aria-hidden="true"></span><span class="glz-04b__t"> Pay<em>Instant · Face ID</em></span><i class="glz-04b__dot" aria-hidden="true"></i></label>
<label class="glz-04b__m"><input type="radio" name="glz-04b-pay"><span class="glz-04b__ic" aria-hidden="true">🅿</span><span class="glz-04b__t">PayPal<em>b•••@studio.co</em></span><i class="glz-04b__dot" aria-hidden="true"></i></label>
</div>
<div class="glz-04b__foot"><span>Total due today</span><b>$559.44</b></div>
<button type="button" class="glz-04b__cta">Continue to review →</button>
</article>
</section>
</div>.glz-04-group {
display: flex;
flex-wrap: wrap;
align-items: stretch;
width: 100%;
}
.glz-04-group > section {
flex: 1 1 480px;
min-width: min(100%,360px);
}
.glz-04a,
.glz-04a *,
.glz-04a *::before,
.glz-04a *::after {
box-sizing: border-box;
margin: 0;
padding: 0;
}
.glz-04a {
--mint: oklch(0.82 0.15 165);
position: relative;
overflow: hidden;
width: 100%;
min-height: 100vh;
display: grid;
place-items: center;
padding: 48px 24px;
background: #0a1118;
font-family: 'Manrope',system-ui,sans-serif;
}
.glz-04a::before {
content: "";
position: absolute;
width: 56vmin;
height: 56vmin;
border-radius: 50%;
background: oklch(0.55 0.14 200);
filter: blur(90px);
opacity: .5;
top: -14%;
left: -6%;
}
.glz-04a::after {
content: "";
position: absolute;
width: 44vmin;
height: 44vmin;
border-radius: 50%;
background: oklch(0.6 0.17 160);
filter: blur(90px);
opacity: .4;
bottom: -12%;
right: -4%;
}
.glz-04a__card {
position: relative;
z-index: 1;
width: min(380px,100%);
padding: 28px;
border-radius: 24px;
color: #e8f1f2;
background: linear-gradient(160deg,rgba(255,255,255,.12),rgba(255,255,255,.04));
backdrop-filter: blur(22px) saturate(170%);
-webkit-backdrop-filter: blur(22px) saturate(170%);
border: 1px solid rgba(255,255,255,.18);
box-shadow: 0 30px 60px -24px rgba(0,0,0,.75),inset 0 1px 0 rgba(255,255,255,.2);
}
.glz-04a__title {
font-size: 17px;
font-weight: 800;
letter-spacing: -.01em;
}
.glz-04a__items {
list-style: none;
margin-top: 18px;
display: grid;
gap: 14px;
}
.glz-04a__items li {
display: flex;
align-items: center;
gap: 12px;
font-variant-numeric: tabular-nums;
}
.glz-04a__items img {
width: 46px;
height: 46px;
border-radius: 12px;
object-fit: cover;
border: 1px solid rgba(255,255,255,.2);
background: #1c2836;
}
.glz-04a__n {
flex: 1;
min-width: 0;
font-size: 13.5px;
font-weight: 600;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.glz-04a__n em {
display: block;
font-style: normal;
font-size: 11px;
font-weight: 500;
color: rgba(232,241,242,.5);
margin-top: 2px;
}
.glz-04a__items b {
font-size: 13.5px;
font-weight: 700;
}
.glz-04a__promo {
display: flex;
gap: 8px;
margin-top: 18px;
padding-top: 18px;
border-top: 1px dashed rgba(255,255,255,.18);
}
.glz-04a__promo input {
flex: 1;
min-width: 0;
padding: 11px 14px;
border-radius: 11px;
border: 1px solid rgba(255,255,255,.2);
background: rgba(255,255,255,.06);
color: #e8f1f2;
font: 600 13px 'Manrope',sans-serif;
transition: border-color .2s ease,background .2s ease;
}
.glz-04a__promo input::placeholder {
color: rgba(232,241,242,.4);
}
.glz-04a__promo input:focus-visible {
outline: none;
border-color: var(--mint);
background: rgba(255,255,255,.1);
}
.glz-04a__promo button {
padding: 11px 16px;
border-radius: 11px;
border: 1px solid rgba(255,255,255,.25);
background: transparent;
color: #e8f1f2;
font: 700 12.5px 'Manrope',sans-serif;
cursor: pointer;
transition: background .2s ease;
}
.glz-04a__promo button:hover {
background: rgba(255,255,255,.12);
}
.glz-04a__promo button:focus-visible {
outline: 2px solid var(--mint);
outline-offset: 2px;
}
.glz-04a__totals {
margin-top: 18px;
display: grid;
gap: 9px;
font-variant-numeric: tabular-nums;
}
.glz-04a__totals div {
display: flex;
justify-content: space-between;
font-size: 13px;
color: rgba(232,241,242,.65);
}
.glz-04a__totals dd {
font-weight: 600;
color: rgba(232,241,242,.85);
}
.glz-04a__grand {
padding-top: 12px;
border-top: 1px solid rgba(255,255,255,.16);
}
.glz-04a__grand dt {
font-weight: 800;
color: #fff!important;
}
.glz-04a__grand dd {
font-size: 17px;
font-weight: 800;
color: var(--mint)!important;
}
.glz-04a__pay {
position: relative;
overflow: hidden;
width: 100%;
margin-top: 20px;
padding: 15px;
border: none;
border-radius: 14px;
background: linear-gradient(120deg,oklch(0.78 0.15 165),oklch(0.72 0.14 200));
color: #04140e;
font: 800 15px 'Manrope',sans-serif;
cursor: pointer;
box-shadow: 0 16px 32px -12px oklch(0.78 0.15 165/.6);
transition: transform .2s ease;
}
.glz-04a__pay::after {
content: "";
position: absolute;
inset: 0;
background: linear-gradient(110deg,transparent 35%,rgba(255,255,255,.5) 50%,transparent 65%);
transform: translateX(-130%);
}
.glz-04a__pay:hover {
transform: translateY(-2px);
}
.glz-04a__pay:hover::after {
transform: translateX(130%);
transition: transform .7s ease;
}
.glz-04a__pay:focus-visible {
outline: 2px solid #fff;
outline-offset: 3px;
}
.glz-04a__trust {
display: flex;
align-items: center;
justify-content: center;
gap: 7px;
margin-top: 14px;
font-size: 11px;
letter-spacing: .06em;
color: rgba(232,241,242,.5);
}
.glz-04a__trust svg {
width: 14px;
height: 14px;
}
.glz-04a__sr {
position: absolute;
width: 1px;
height: 1px;
overflow: hidden;
clip-path: inset(50%);
}
@supports not ((backdrop-filter: blur(2px)) or (-webkit-backdrop-filter: blur(2px))) {
.glz-04a__card {
background: rgba(16,25,34,.94);
}
}
@media (prefers-reduced-motion: reduce) {
.glz-04a__pay,
.glz-04a__pay::after {
transition: none;
}
}
.glz-04b,
.glz-04b *,
.glz-04b *::before,
.glz-04b *::after {
box-sizing: border-box;
margin: 0;
padding: 0;
}
.glz-04b {
--mint: oklch(0.8 0.15 170);
width: 100%;
min-height: 100vh;
display: grid;
place-items: center;
padding: 48px 24px;
background: linear-gradient(200deg,#101726,#0b1f22 70%,#0c1420);
font-family: 'Manrope',system-ui,sans-serif;
position: relative;
overflow: hidden;
}
.glz-04b::before {
content: "";
position: absolute;
inset: 0;
background: radial-gradient(60% 50% at 70% 20%,oklch(0.5 0.13 185/.5),transparent 65%),radial-gradient(50% 45% at 15% 85%,oklch(0.5 0.15 300/.4),transparent 65%);
}
.glz-04b__card {
position: relative;
z-index: 1;
width: min(380px,100%);
padding: 26px;
border-radius: 24px;
color: #e9f2f1;
background: linear-gradient(160deg,rgba(255,255,255,.12),rgba(255,255,255,.04));
backdrop-filter: blur(22px) saturate(170%);
-webkit-backdrop-filter: blur(22px) saturate(170%);
border: 1px solid rgba(255,255,255,.18);
box-shadow: 0 30px 60px -24px rgba(0,0,0,.75),inset 0 1px 0 rgba(255,255,255,.2);
}
.glz-04b__head {
display: flex;
justify-content: space-between;
align-items: baseline;
}
.glz-04b__head h3 {
font-size: 17px;
font-weight: 800;
}
.glz-04b__head span {
font-size: 11px;
letter-spacing: .14em;
text-transform: uppercase;
color: rgba(233,242,241,.45);
}
.glz-04b__methods {
display: grid;
gap: 10px;
margin-top: 18px;
}
.glz-04b__m {
position: relative;
display: flex;
align-items: center;
gap: 13px;
padding: 14px 16px;
border-radius: 16px;
border: 1px solid rgba(255,255,255,.14);
background: rgba(255,255,255,.05);
cursor: pointer;
transition: border-color .25s ease,background .25s ease,transform .2s ease;
}
.glz-04b__m:hover {
transform: translateX(3px);
background: rgba(255,255,255,.09);
}
.glz-04b__m input {
position: absolute;
inset: 0;
opacity: 0;
cursor: pointer;
}
.glz-04b__ic {
width: 40px;
height: 40px;
display: grid;
place-items: center;
font-size: 17px;
border-radius: 12px;
background: rgba(255,255,255,.09);
border: 1px solid rgba(255,255,255,.14);
}
.glz-04b__t {
flex: 1;
font-size: 13.5px;
font-weight: 700;
}
.glz-04b__t em {
display: block;
font-style: normal;
font-size: 11px;
font-weight: 500;
color: rgba(233,242,241,.5);
margin-top: 2px;
}
.glz-04b__dot {
width: 19px;
height: 19px;
border-radius: 50%;
border: 2px solid rgba(255,255,255,.35);
display: grid;
place-items: center;
transition: border-color .25s ease;
}
.glz-04b__dot::after {
content: "";
width: 9px;
height: 9px;
border-radius: 50%;
background: var(--mint);
transform: scale(0);
transition: transform .25s cubic-bezier(.3,1.6,.4,1);
}
.glz-04b__m:has(input:checked) {
border-color: var(--mint);
background: linear-gradient(150deg,oklch(0.8 0.15 170/.16),rgba(255,255,255,.05));
}
.glz-04b__m:has(input:checked) .glz-04b__dot {
border-color: var(--mint);
}
.glz-04b__m:has(input:checked) .glz-04b__dot::after {
transform: scale(1);
}
.glz-04b__m:has(input:focus-visible) {
outline: 2px solid var(--mint);
outline-offset: 2px;
}
.glz-04b__foot {
display: flex;
justify-content: space-between;
align-items: baseline;
margin-top: 20px;
padding-top: 16px;
border-top: 1px solid rgba(255,255,255,.14);
font-size: 13px;
color: rgba(233,242,241,.6);
}
.glz-04b__foot b {
font-size: 19px;
font-weight: 800;
color: #fff;
font-variant-numeric: tabular-nums;
}
.glz-04b__cta {
width: 100%;
margin-top: 16px;
padding: 15px;
border: none;
border-radius: 14px;
background: #fff;
color: #0a1512;
font: 800 14.5px 'Manrope',sans-serif;
cursor: pointer;
transition: transform .2s ease,box-shadow .2s ease;
}
.glz-04b__cta:hover {
transform: translateY(-2px);
box-shadow: 0 16px 30px -12px rgba(255,255,255,.4);
}
.glz-04b__cta:focus-visible {
outline: 2px solid var(--mint);
outline-offset: 3px;
}
@supports not ((backdrop-filter: blur(2px)) or (-webkit-backdrop-filter: blur(2px))) {
.glz-04b__card {
background: rgba(17,26,36,.94);
}
}
@media (prefers-reduced-motion: reduce) {
.glz-04b__m,
.glz-04b__dot,
.glz-04b__dot::after,
.glz-04b__cta {
transition: none;
}
}.glz-04-group {
display: flex;
flex-wrap: wrap;
align-items: stretch;
width: 100%;
}
.glz-04-group > section {
flex: 1 1 480px;
min-width: min(100%,360px);
}
.glz-04a,
.glz-04a *,
.glz-04a *::before,
.glz-04a *::after {
box-sizing: border-box;
margin: 0;
padding: 0;
}
.glz-04a {
--mint: oklch(0.82 0.15 165);
position: relative;
overflow: hidden;
width: 100%;
min-height: 100vh;
display: grid;
place-items: center;
padding: 48px 24px;
background: #0a1118;
font-family: 'Manrope',system-ui,sans-serif;
}
.glz-04a::before {
content: "";
position: absolute;
width: 56vmin;
height: 56vmin;
border-radius: 50%;
background: oklch(0.55 0.14 200);
filter: blur(90px);
opacity: .5;
top: -14%;
left: -6%;
}
.glz-04a::after {
content: "";
position: absolute;
width: 44vmin;
height: 44vmin;
border-radius: 50%;
background: oklch(0.6 0.17 160);
filter: blur(90px);
opacity: .4;
bottom: -12%;
right: -4%;
}
.glz-04a__card {
position: relative;
z-index: 1;
width: min(380px,100%);
padding: 28px;
border-radius: 24px;
color: #e8f1f2;
background: linear-gradient(160deg,rgba(255,255,255,.12),rgba(255,255,255,.04));
backdrop-filter: blur(22px) saturate(170%);
-webkit-backdrop-filter: blur(22px) saturate(170%);
border: 1px solid rgba(255,255,255,.18);
box-shadow: 0 30px 60px -24px rgba(0,0,0,.75),inset 0 1px 0 rgba(255,255,255,.2);
}
.glz-04a__title {
font-size: 17px;
font-weight: 800;
letter-spacing: -.01em;
}
.glz-04a__items {
list-style: none;
margin-top: 18px;
display: grid;
gap: 14px;
}
.glz-04a__items li {
display: flex;
align-items: center;
gap: 12px;
font-variant-numeric: tabular-nums;
}
.glz-04a__items img {
width: 46px;
height: 46px;
border-radius: 12px;
object-fit: cover;
border: 1px solid rgba(255,255,255,.2);
background: #1c2836;
}
.glz-04a__n {
flex: 1;
min-width: 0;
font-size: 13.5px;
font-weight: 600;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.glz-04a__n em {
display: block;
font-style: normal;
font-size: 11px;
font-weight: 500;
color: rgba(232,241,242,.5);
margin-top: 2px;
}
.glz-04a__items b {
font-size: 13.5px;
font-weight: 700;
}
.glz-04a__promo {
display: flex;
gap: 8px;
margin-top: 18px;
padding-top: 18px;
border-top: 1px dashed rgba(255,255,255,.18);
}
.glz-04a__promo input {
flex: 1;
min-width: 0;
padding: 11px 14px;
border-radius: 11px;
border: 1px solid rgba(255,255,255,.2);
background: rgba(255,255,255,.06);
color: #e8f1f2;
font: 600 13px 'Manrope',sans-serif;
transition: border-color .2s ease,background .2s ease;
}
.glz-04a__promo input::placeholder {
color: rgba(232,241,242,.4);
}
.glz-04a__promo input:focus-visible {
outline: none;
border-color: var(--mint);
background: rgba(255,255,255,.1);
}
.glz-04a__promo button {
padding: 11px 16px;
border-radius: 11px;
border: 1px solid rgba(255,255,255,.25);
background: transparent;
color: #e8f1f2;
font: 700 12.5px 'Manrope',sans-serif;
cursor: pointer;
transition: background .2s ease;
}
.glz-04a__promo button:hover {
background: rgba(255,255,255,.12);
}
.glz-04a__promo button:focus-visible {
outline: 2px solid var(--mint);
outline-offset: 2px;
}
.glz-04a__totals {
margin-top: 18px;
display: grid;
gap: 9px;
font-variant-numeric: tabular-nums;
}
.glz-04a__totals div {
display: flex;
justify-content: space-between;
font-size: 13px;
color: rgba(232,241,242,.65);
}
.glz-04a__totals dd {
font-weight: 600;
color: rgba(232,241,242,.85);
}
.glz-04a__grand {
padding-top: 12px;
border-top: 1px solid rgba(255,255,255,.16);
}
.glz-04a__grand dt {
font-weight: 800;
color: #fff!important;
}
.glz-04a__grand dd {
font-size: 17px;
font-weight: 800;
color: var(--mint)!important;
}
.glz-04a__pay {
position: relative;
overflow: hidden;
width: 100%;
margin-top: 20px;
padding: 15px;
border: none;
border-radius: 14px;
background: linear-gradient(120deg,oklch(0.78 0.15 165),oklch(0.72 0.14 200));
color: #04140e;
font: 800 15px 'Manrope',sans-serif;
cursor: pointer;
box-shadow: 0 16px 32px -12px oklch(0.78 0.15 165/.6);
transition: transform .2s ease;
}
.glz-04a__pay::after {
content: "";
position: absolute;
inset: 0;
background: linear-gradient(110deg,transparent 35%,rgba(255,255,255,.5) 50%,transparent 65%);
transform: translateX(-130%);
}
.glz-04a__pay:hover {
transform: translateY(-2px);
}
.glz-04a__pay:hover::after {
transform: translateX(130%);
transition: transform .7s ease;
}
.glz-04a__pay:focus-visible {
outline: 2px solid #fff;
outline-offset: 3px;
}
.glz-04a__trust {
display: flex;
align-items: center;
justify-content: center;
gap: 7px;
margin-top: 14px;
font-size: 11px;
letter-spacing: .06em;
color: rgba(232,241,242,.5);
}
.glz-04a__trust svg {
width: 14px;
height: 14px;
}
.glz-04a__sr {
position: absolute;
width: 1px;
height: 1px;
overflow: hidden;
clip-path: inset(50%);
}
@supports not ((backdrop-filter: blur(2px)) or (-webkit-backdrop-filter: blur(2px))) {
.glz-04a__card {
background: rgba(16,25,34,.94);
}
}
@media (prefers-reduced-motion: reduce) {
.glz-04a__pay,
.glz-04a__pay::after {
transition: none;
}
}
.glz-04b,
.glz-04b *,
.glz-04b *::before,
.glz-04b *::after {
box-sizing: border-box;
margin: 0;
padding: 0;
}
.glz-04b {
--mint: oklch(0.8 0.15 170);
width: 100%;
min-height: 100vh;
display: grid;
place-items: center;
padding: 48px 24px;
background: linear-gradient(200deg,#101726,#0b1f22 70%,#0c1420);
font-family: 'Manrope',system-ui,sans-serif;
position: relative;
overflow: hidden;
}
.glz-04b::before {
content: "";
position: absolute;
inset: 0;
background: radial-gradient(60% 50% at 70% 20%,oklch(0.5 0.13 185/.5),transparent 65%),radial-gradient(50% 45% at 15% 85%,oklch(0.5 0.15 300/.4),transparent 65%);
}
.glz-04b__card {
position: relative;
z-index: 1;
width: min(380px,100%);
padding: 26px;
border-radius: 24px;
color: #e9f2f1;
background: linear-gradient(160deg,rgba(255,255,255,.12),rgba(255,255,255,.04));
backdrop-filter: blur(22px) saturate(170%);
-webkit-backdrop-filter: blur(22px) saturate(170%);
border: 1px solid rgba(255,255,255,.18);
box-shadow: 0 30px 60px -24px rgba(0,0,0,.75),inset 0 1px 0 rgba(255,255,255,.2);
}
.glz-04b__head {
display: flex;
justify-content: space-between;
align-items: baseline;
}
.glz-04b__head h3 {
font-size: 17px;
font-weight: 800;
}
.glz-04b__head span {
font-size: 11px;
letter-spacing: .14em;
text-transform: uppercase;
color: rgba(233,242,241,.45);
}
.glz-04b__methods {
display: grid;
gap: 10px;
margin-top: 18px;
}
.glz-04b__m {
position: relative;
display: flex;
align-items: center;
gap: 13px;
padding: 14px 16px;
border-radius: 16px;
border: 1px solid rgba(255,255,255,.14);
background: rgba(255,255,255,.05);
cursor: pointer;
transition: border-color .25s ease,background .25s ease,transform .2s ease;
}
.glz-04b__m:hover {
transform: translateX(3px);
background: rgba(255,255,255,.09);
}
.glz-04b__m input {
position: absolute;
inset: 0;
opacity: 0;
cursor: pointer;
}
.glz-04b__ic {
width: 40px;
height: 40px;
display: grid;
place-items: center;
font-size: 17px;
border-radius: 12px;
background: rgba(255,255,255,.09);
border: 1px solid rgba(255,255,255,.14);
}
.glz-04b__t {
flex: 1;
font-size: 13.5px;
font-weight: 700;
}
.glz-04b__t em {
display: block;
font-style: normal;
font-size: 11px;
font-weight: 500;
color: rgba(233,242,241,.5);
margin-top: 2px;
}
.glz-04b__dot {
width: 19px;
height: 19px;
border-radius: 50%;
border: 2px solid rgba(255,255,255,.35);
display: grid;
place-items: center;
transition: border-color .25s ease;
}
.glz-04b__dot::after {
content: "";
width: 9px;
height: 9px;
border-radius: 50%;
background: var(--mint);
transform: scale(0);
transition: transform .25s cubic-bezier(.3,1.6,.4,1);
}
.glz-04b__m:has(input:checked) {
border-color: var(--mint);
background: linear-gradient(150deg,oklch(0.8 0.15 170/.16),rgba(255,255,255,.05));
}
.glz-04b__m:has(input:checked) .glz-04b__dot {
border-color: var(--mint);
}
.glz-04b__m:has(input:checked) .glz-04b__dot::after {
transform: scale(1);
}
.glz-04b__m:has(input:focus-visible) {
outline: 2px solid var(--mint);
outline-offset: 2px;
}
.glz-04b__foot {
display: flex;
justify-content: space-between;
align-items: baseline;
margin-top: 20px;
padding-top: 16px;
border-top: 1px solid rgba(255,255,255,.14);
font-size: 13px;
color: rgba(233,242,241,.6);
}
.glz-04b__foot b {
font-size: 19px;
font-weight: 800;
color: #fff;
font-variant-numeric: tabular-nums;
}
.glz-04b__cta {
width: 100%;
margin-top: 16px;
padding: 15px;
border: none;
border-radius: 14px;
background: #fff;
color: #0a1512;
font: 800 14.5px 'Manrope',sans-serif;
cursor: pointer;
transition: transform .2s ease,box-shadow .2s ease;
}
.glz-04b__cta:hover {
transform: translateY(-2px);
box-shadow: 0 16px 30px -12px rgba(255,255,255,.4);
}
.glz-04b__cta:focus-visible {
outline: 2px solid var(--mint);
outline-offset: 3px;
}
@supports not ((backdrop-filter: blur(2px)) or (-webkit-backdrop-filter: blur(2px))) {
.glz-04b__card {
background: rgba(17,26,36,.94);
}
}
@media (prefers-reduced-motion: reduce) {
.glz-04b__m,
.glz-04b__dot,
.glz-04b__dot::after,
.glz-04b__cta {
transition: none;
}
}/* No JavaScript — layout rhythm + tabular-nums do the work; the pay button's sheen is a translated gradient on ::after. */ /* No JavaScript — each method is a label wrapping a hidden radio; :has(input:checked) draws the mint ring and springs the dot in. Arrow keys switch methods natively. */
/* No JavaScript — layout rhythm + tabular-nums do the work; the pay button's sheen is a translated gradient on ::after. */
/* No JavaScript — each method is a label wrapping a hidden radio; :has(input:checked) draws the mint ring and springs the dot in. Arrow keys switch methods natively. */Here's a working CSS Glassmorphism Card from CodeFronts. Use it as-is or adapt to your framework. All classes are scoped under a unique prefix so the code won't collide with your existing styles. MIT licensed.
Demo: CSS Glassmorphism Checkout Card Design
Source: https://codefronts.com/components/css-glassmorphism-cards/css-glassmorphism-checkout-card-design/
The money screens: a frosted order-summary card with line items, a promo field and a sheen-on-hover pay button, plus a payment-method picker built from radio cards — the :checked one gets the glass ring, check dot and lifted tint. Both lean dark, calm and trust-forward.
## HTML
```html
<div class="glz-04-group">
<link href="https://fonts.googleapis.com/css2?family=Manrope:wght@300..800&display=swap" rel="stylesheet">
<section class="glz-04a" aria-label="Glassmorphism order summary checkout card">
<article class="glz-04a__card">
<h3 class="glz-04a__title">Order summary</h3>
<ul class="glz-04a__items">
<li><img src="https://images.unsplash.com/photo-1523275335684-37898b6baf30?q=80&w=240&auto=format&fit=crop" alt="" loading="lazy"><span class="glz-04a__n">Solstice Watch — 40mm<em>Qty 1</em></span><b>$289.00</b></li>
<li><img src="https://images.unsplash.com/photo-1505740420928-5e560c06d30e?q=80&w=240&auto=format&fit=crop" alt="" loading="lazy"><span class="glz-04a__n">Aria Studio ANC<em>Qty 1</em></span><b>$229.00</b></li>
</ul>
<form class="glz-04a__promo" onsubmit="return false"><label class="glz-04a__sr" for="glz-04a-code">Promo code</label><input id="glz-04a-code" type="text" placeholder="Promo code" autocomplete="off"><button type="submit">Apply</button></form>
<dl class="glz-04a__totals">
<div><dt>Subtotal</dt><dd>$518.00</dd></div>
<div><dt>Shipping</dt><dd>Free</dd></div>
<div><dt>Tax</dt><dd>$41.44</dd></div>
<div class="glz-04a__grand"><dt>Total</dt><dd>$559.44</dd></div>
</dl>
<button type="button" class="glz-04a__pay">Pay $559.44</button>
<p class="glz-04a__trust"><svg viewBox="0 0 24 24" aria-hidden="true"><path d="M7 10V8a5 5 0 0 1 10 0v2m-11 0h12v9H6z" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linejoin="round"/></svg>Encrypted checkout · 256-bit TLS</p>
</article>
</section>
<link href="https://fonts.googleapis.com/css2?family=Manrope:wght@300..800&display=swap" rel="stylesheet">
<section class="glz-04b" aria-label="Glassmorphism payment method picker">
<article class="glz-04b__card">
<header class="glz-04b__head"><h3>Payment method</h3><span>Step 2 of 3</span></header>
<div class="glz-04b__methods">
<label class="glz-04b__m"><input type="radio" name="glz-04b-pay" checked><span class="glz-04b__ic" aria-hidden="true">💳</span><span class="glz-04b__t">Card ending 4467<em>Visa · expires 09/29</em></span><i class="glz-04b__dot" aria-hidden="true"></i></label>
<label class="glz-04b__m"><input type="radio" name="glz-04b-pay"><span class="glz-04b__ic" aria-hidden="true"></span><span class="glz-04b__t"> Pay<em>Instant · Face ID</em></span><i class="glz-04b__dot" aria-hidden="true"></i></label>
<label class="glz-04b__m"><input type="radio" name="glz-04b-pay"><span class="glz-04b__ic" aria-hidden="true">🅿</span><span class="glz-04b__t">PayPal<em>b•••@studio.co</em></span><i class="glz-04b__dot" aria-hidden="true"></i></label>
</div>
<div class="glz-04b__foot"><span>Total due today</span><b>$559.44</b></div>
<button type="button" class="glz-04b__cta">Continue to review →</button>
</article>
</section>
</div>
```
## CSS
```css
.glz-04-group {
display: flex;
flex-wrap: wrap;
align-items: stretch;
width: 100%;
}
.glz-04-group > section {
flex: 1 1 480px;
min-width: min(100%,360px);
}
.glz-04a,
.glz-04a *,
.glz-04a *::before,
.glz-04a *::after {
box-sizing: border-box;
margin: 0;
padding: 0;
}
.glz-04a {
--mint: oklch(0.82 0.15 165);
position: relative;
overflow: hidden;
width: 100%;
min-height: 100vh;
display: grid;
place-items: center;
padding: 48px 24px;
background: #0a1118;
font-family: 'Manrope',system-ui,sans-serif;
}
.glz-04a::before {
content: "";
position: absolute;
width: 56vmin;
height: 56vmin;
border-radius: 50%;
background: oklch(0.55 0.14 200);
filter: blur(90px);
opacity: .5;
top: -14%;
left: -6%;
}
.glz-04a::after {
content: "";
position: absolute;
width: 44vmin;
height: 44vmin;
border-radius: 50%;
background: oklch(0.6 0.17 160);
filter: blur(90px);
opacity: .4;
bottom: -12%;
right: -4%;
}
.glz-04a__card {
position: relative;
z-index: 1;
width: min(380px,100%);
padding: 28px;
border-radius: 24px;
color: #e8f1f2;
background: linear-gradient(160deg,rgba(255,255,255,.12),rgba(255,255,255,.04));
backdrop-filter: blur(22px) saturate(170%);
-webkit-backdrop-filter: blur(22px) saturate(170%);
border: 1px solid rgba(255,255,255,.18);
box-shadow: 0 30px 60px -24px rgba(0,0,0,.75),inset 0 1px 0 rgba(255,255,255,.2);
}
.glz-04a__title {
font-size: 17px;
font-weight: 800;
letter-spacing: -.01em;
}
.glz-04a__items {
list-style: none;
margin-top: 18px;
display: grid;
gap: 14px;
}
.glz-04a__items li {
display: flex;
align-items: center;
gap: 12px;
font-variant-numeric: tabular-nums;
}
.glz-04a__items img {
width: 46px;
height: 46px;
border-radius: 12px;
object-fit: cover;
border: 1px solid rgba(255,255,255,.2);
background: #1c2836;
}
.glz-04a__n {
flex: 1;
min-width: 0;
font-size: 13.5px;
font-weight: 600;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.glz-04a__n em {
display: block;
font-style: normal;
font-size: 11px;
font-weight: 500;
color: rgba(232,241,242,.5);
margin-top: 2px;
}
.glz-04a__items b {
font-size: 13.5px;
font-weight: 700;
}
.glz-04a__promo {
display: flex;
gap: 8px;
margin-top: 18px;
padding-top: 18px;
border-top: 1px dashed rgba(255,255,255,.18);
}
.glz-04a__promo input {
flex: 1;
min-width: 0;
padding: 11px 14px;
border-radius: 11px;
border: 1px solid rgba(255,255,255,.2);
background: rgba(255,255,255,.06);
color: #e8f1f2;
font: 600 13px 'Manrope',sans-serif;
transition: border-color .2s ease,background .2s ease;
}
.glz-04a__promo input::placeholder {
color: rgba(232,241,242,.4);
}
.glz-04a__promo input:focus-visible {
outline: none;
border-color: var(--mint);
background: rgba(255,255,255,.1);
}
.glz-04a__promo button {
padding: 11px 16px;
border-radius: 11px;
border: 1px solid rgba(255,255,255,.25);
background: transparent;
color: #e8f1f2;
font: 700 12.5px 'Manrope',sans-serif;
cursor: pointer;
transition: background .2s ease;
}
.glz-04a__promo button:hover {
background: rgba(255,255,255,.12);
}
.glz-04a__promo button:focus-visible {
outline: 2px solid var(--mint);
outline-offset: 2px;
}
.glz-04a__totals {
margin-top: 18px;
display: grid;
gap: 9px;
font-variant-numeric: tabular-nums;
}
.glz-04a__totals div {
display: flex;
justify-content: space-between;
font-size: 13px;
color: rgba(232,241,242,.65);
}
.glz-04a__totals dd {
font-weight: 600;
color: rgba(232,241,242,.85);
}
.glz-04a__grand {
padding-top: 12px;
border-top: 1px solid rgba(255,255,255,.16);
}
.glz-04a__grand dt {
font-weight: 800;
color: #fff!important;
}
.glz-04a__grand dd {
font-size: 17px;
font-weight: 800;
color: var(--mint)!important;
}
.glz-04a__pay {
position: relative;
overflow: hidden;
width: 100%;
margin-top: 20px;
padding: 15px;
border: none;
border-radius: 14px;
background: linear-gradient(120deg,oklch(0.78 0.15 165),oklch(0.72 0.14 200));
color: #04140e;
font: 800 15px 'Manrope',sans-serif;
cursor: pointer;
box-shadow: 0 16px 32px -12px oklch(0.78 0.15 165/.6);
transition: transform .2s ease;
}
.glz-04a__pay::after {
content: "";
position: absolute;
inset: 0;
background: linear-gradient(110deg,transparent 35%,rgba(255,255,255,.5) 50%,transparent 65%);
transform: translateX(-130%);
}
.glz-04a__pay:hover {
transform: translateY(-2px);
}
.glz-04a__pay:hover::after {
transform: translateX(130%);
transition: transform .7s ease;
}
.glz-04a__pay:focus-visible {
outline: 2px solid #fff;
outline-offset: 3px;
}
.glz-04a__trust {
display: flex;
align-items: center;
justify-content: center;
gap: 7px;
margin-top: 14px;
font-size: 11px;
letter-spacing: .06em;
color: rgba(232,241,242,.5);
}
.glz-04a__trust svg {
width: 14px;
height: 14px;
}
.glz-04a__sr {
position: absolute;
width: 1px;
height: 1px;
overflow: hidden;
clip-path: inset(50%);
}
@supports not ((backdrop-filter: blur(2px)) or (-webkit-backdrop-filter: blur(2px))) {
.glz-04a__card {
background: rgba(16,25,34,.94);
}
}
@media (prefers-reduced-motion: reduce) {
.glz-04a__pay,
.glz-04a__pay::after {
transition: none;
}
}
.glz-04b,
.glz-04b *,
.glz-04b *::before,
.glz-04b *::after {
box-sizing: border-box;
margin: 0;
padding: 0;
}
.glz-04b {
--mint: oklch(0.8 0.15 170);
width: 100%;
min-height: 100vh;
display: grid;
place-items: center;
padding: 48px 24px;
background: linear-gradient(200deg,#101726,#0b1f22 70%,#0c1420);
font-family: 'Manrope',system-ui,sans-serif;
position: relative;
overflow: hidden;
}
.glz-04b::before {
content: "";
position: absolute;
inset: 0;
background: radial-gradient(60% 50% at 70% 20%,oklch(0.5 0.13 185/.5),transparent 65%),radial-gradient(50% 45% at 15% 85%,oklch(0.5 0.15 300/.4),transparent 65%);
}
.glz-04b__card {
position: relative;
z-index: 1;
width: min(380px,100%);
padding: 26px;
border-radius: 24px;
color: #e9f2f1;
background: linear-gradient(160deg,rgba(255,255,255,.12),rgba(255,255,255,.04));
backdrop-filter: blur(22px) saturate(170%);
-webkit-backdrop-filter: blur(22px) saturate(170%);
border: 1px solid rgba(255,255,255,.18);
box-shadow: 0 30px 60px -24px rgba(0,0,0,.75),inset 0 1px 0 rgba(255,255,255,.2);
}
.glz-04b__head {
display: flex;
justify-content: space-between;
align-items: baseline;
}
.glz-04b__head h3 {
font-size: 17px;
font-weight: 800;
}
.glz-04b__head span {
font-size: 11px;
letter-spacing: .14em;
text-transform: uppercase;
color: rgba(233,242,241,.45);
}
.glz-04b__methods {
display: grid;
gap: 10px;
margin-top: 18px;
}
.glz-04b__m {
position: relative;
display: flex;
align-items: center;
gap: 13px;
padding: 14px 16px;
border-radius: 16px;
border: 1px solid rgba(255,255,255,.14);
background: rgba(255,255,255,.05);
cursor: pointer;
transition: border-color .25s ease,background .25s ease,transform .2s ease;
}
.glz-04b__m:hover {
transform: translateX(3px);
background: rgba(255,255,255,.09);
}
.glz-04b__m input {
position: absolute;
inset: 0;
opacity: 0;
cursor: pointer;
}
.glz-04b__ic {
width: 40px;
height: 40px;
display: grid;
place-items: center;
font-size: 17px;
border-radius: 12px;
background: rgba(255,255,255,.09);
border: 1px solid rgba(255,255,255,.14);
}
.glz-04b__t {
flex: 1;
font-size: 13.5px;
font-weight: 700;
}
.glz-04b__t em {
display: block;
font-style: normal;
font-size: 11px;
font-weight: 500;
color: rgba(233,242,241,.5);
margin-top: 2px;
}
.glz-04b__dot {
width: 19px;
height: 19px;
border-radius: 50%;
border: 2px solid rgba(255,255,255,.35);
display: grid;
place-items: center;
transition: border-color .25s ease;
}
.glz-04b__dot::after {
content: "";
width: 9px;
height: 9px;
border-radius: 50%;
background: var(--mint);
transform: scale(0);
transition: transform .25s cubic-bezier(.3,1.6,.4,1);
}
.glz-04b__m:has(input:checked) {
border-color: var(--mint);
background: linear-gradient(150deg,oklch(0.8 0.15 170/.16),rgba(255,255,255,.05));
}
.glz-04b__m:has(input:checked) .glz-04b__dot {
border-color: var(--mint);
}
.glz-04b__m:has(input:checked) .glz-04b__dot::after {
transform: scale(1);
}
.glz-04b__m:has(input:focus-visible) {
outline: 2px solid var(--mint);
outline-offset: 2px;
}
.glz-04b__foot {
display: flex;
justify-content: space-between;
align-items: baseline;
margin-top: 20px;
padding-top: 16px;
border-top: 1px solid rgba(255,255,255,.14);
font-size: 13px;
color: rgba(233,242,241,.6);
}
.glz-04b__foot b {
font-size: 19px;
font-weight: 800;
color: #fff;
font-variant-numeric: tabular-nums;
}
.glz-04b__cta {
width: 100%;
margin-top: 16px;
padding: 15px;
border: none;
border-radius: 14px;
background: #fff;
color: #0a1512;
font: 800 14.5px 'Manrope',sans-serif;
cursor: pointer;
transition: transform .2s ease,box-shadow .2s ease;
}
.glz-04b__cta:hover {
transform: translateY(-2px);
box-shadow: 0 16px 30px -12px rgba(255,255,255,.4);
}
.glz-04b__cta:focus-visible {
outline: 2px solid var(--mint);
outline-offset: 3px;
}
@supports not ((backdrop-filter: blur(2px)) or (-webkit-backdrop-filter: blur(2px))) {
.glz-04b__card {
background: rgba(17,26,36,.94);
}
}
@media (prefers-reduced-motion: reduce) {
.glz-04b__m,
.glz-04b__dot,
.glz-04b__dot::after,
.glz-04b__cta {
transition: none;
}
}
```
## JavaScript
```js
/* No JavaScript — layout rhythm + tabular-nums do the work; the pay button's sheen is a translated gradient on ::after. */
/* No JavaScript — each method is a label wrapping a hidden radio; :has(input:checked) draws the mint ring and springs the dot in. Arrow keys switch methods natively. */
```Here's a working CSS Glassmorphism Card from CodeFronts. Use it as-is or adapt to your framework. All classes are scoped under a unique prefix so the code won't collide with your existing styles. MIT licensed.
Demo: CSS Glassmorphism Checkout Card Design
Source: https://codefronts.com/components/css-glassmorphism-cards/css-glassmorphism-checkout-card-design/
The money screens: a frosted order-summary card with line items, a promo field and a sheen-on-hover pay button, plus a payment-method picker built from radio cards — the :checked one gets the glass ring, check dot and lifted tint. Both lean dark, calm and trust-forward.
## HTML
```html
<div class="glz-04-group">
<link href="https://fonts.googleapis.com/css2?family=Manrope:wght@300..800&display=swap" rel="stylesheet">
<section class="glz-04a" aria-label="Glassmorphism order summary checkout card">
<article class="glz-04a__card">
<h3 class="glz-04a__title">Order summary</h3>
<ul class="glz-04a__items">
<li><img src="https://images.unsplash.com/photo-1523275335684-37898b6baf30?q=80&w=240&auto=format&fit=crop" alt="" loading="lazy"><span class="glz-04a__n">Solstice Watch — 40mm<em>Qty 1</em></span><b>$289.00</b></li>
<li><img src="https://images.unsplash.com/photo-1505740420928-5e560c06d30e?q=80&w=240&auto=format&fit=crop" alt="" loading="lazy"><span class="glz-04a__n">Aria Studio ANC<em>Qty 1</em></span><b>$229.00</b></li>
</ul>
<form class="glz-04a__promo" onsubmit="return false"><label class="glz-04a__sr" for="glz-04a-code">Promo code</label><input id="glz-04a-code" type="text" placeholder="Promo code" autocomplete="off"><button type="submit">Apply</button></form>
<dl class="glz-04a__totals">
<div><dt>Subtotal</dt><dd>$518.00</dd></div>
<div><dt>Shipping</dt><dd>Free</dd></div>
<div><dt>Tax</dt><dd>$41.44</dd></div>
<div class="glz-04a__grand"><dt>Total</dt><dd>$559.44</dd></div>
</dl>
<button type="button" class="glz-04a__pay">Pay $559.44</button>
<p class="glz-04a__trust"><svg viewBox="0 0 24 24" aria-hidden="true"><path d="M7 10V8a5 5 0 0 1 10 0v2m-11 0h12v9H6z" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linejoin="round"/></svg>Encrypted checkout · 256-bit TLS</p>
</article>
</section>
<link href="https://fonts.googleapis.com/css2?family=Manrope:wght@300..800&display=swap" rel="stylesheet">
<section class="glz-04b" aria-label="Glassmorphism payment method picker">
<article class="glz-04b__card">
<header class="glz-04b__head"><h3>Payment method</h3><span>Step 2 of 3</span></header>
<div class="glz-04b__methods">
<label class="glz-04b__m"><input type="radio" name="glz-04b-pay" checked><span class="glz-04b__ic" aria-hidden="true">💳</span><span class="glz-04b__t">Card ending 4467<em>Visa · expires 09/29</em></span><i class="glz-04b__dot" aria-hidden="true"></i></label>
<label class="glz-04b__m"><input type="radio" name="glz-04b-pay"><span class="glz-04b__ic" aria-hidden="true"></span><span class="glz-04b__t"> Pay<em>Instant · Face ID</em></span><i class="glz-04b__dot" aria-hidden="true"></i></label>
<label class="glz-04b__m"><input type="radio" name="glz-04b-pay"><span class="glz-04b__ic" aria-hidden="true">🅿</span><span class="glz-04b__t">PayPal<em>b•••@studio.co</em></span><i class="glz-04b__dot" aria-hidden="true"></i></label>
</div>
<div class="glz-04b__foot"><span>Total due today</span><b>$559.44</b></div>
<button type="button" class="glz-04b__cta">Continue to review →</button>
</article>
</section>
</div>
```
## CSS
```css
.glz-04-group {
display: flex;
flex-wrap: wrap;
align-items: stretch;
width: 100%;
}
.glz-04-group > section {
flex: 1 1 480px;
min-width: min(100%,360px);
}
.glz-04a,
.glz-04a *,
.glz-04a *::before,
.glz-04a *::after {
box-sizing: border-box;
margin: 0;
padding: 0;
}
.glz-04a {
--mint: oklch(0.82 0.15 165);
position: relative;
overflow: hidden;
width: 100%;
min-height: 100vh;
display: grid;
place-items: center;
padding: 48px 24px;
background: #0a1118;
font-family: 'Manrope',system-ui,sans-serif;
}
.glz-04a::before {
content: "";
position: absolute;
width: 56vmin;
height: 56vmin;
border-radius: 50%;
background: oklch(0.55 0.14 200);
filter: blur(90px);
opacity: .5;
top: -14%;
left: -6%;
}
.glz-04a::after {
content: "";
position: absolute;
width: 44vmin;
height: 44vmin;
border-radius: 50%;
background: oklch(0.6 0.17 160);
filter: blur(90px);
opacity: .4;
bottom: -12%;
right: -4%;
}
.glz-04a__card {
position: relative;
z-index: 1;
width: min(380px,100%);
padding: 28px;
border-radius: 24px;
color: #e8f1f2;
background: linear-gradient(160deg,rgba(255,255,255,.12),rgba(255,255,255,.04));
backdrop-filter: blur(22px) saturate(170%);
-webkit-backdrop-filter: blur(22px) saturate(170%);
border: 1px solid rgba(255,255,255,.18);
box-shadow: 0 30px 60px -24px rgba(0,0,0,.75),inset 0 1px 0 rgba(255,255,255,.2);
}
.glz-04a__title {
font-size: 17px;
font-weight: 800;
letter-spacing: -.01em;
}
.glz-04a__items {
list-style: none;
margin-top: 18px;
display: grid;
gap: 14px;
}
.glz-04a__items li {
display: flex;
align-items: center;
gap: 12px;
font-variant-numeric: tabular-nums;
}
.glz-04a__items img {
width: 46px;
height: 46px;
border-radius: 12px;
object-fit: cover;
border: 1px solid rgba(255,255,255,.2);
background: #1c2836;
}
.glz-04a__n {
flex: 1;
min-width: 0;
font-size: 13.5px;
font-weight: 600;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.glz-04a__n em {
display: block;
font-style: normal;
font-size: 11px;
font-weight: 500;
color: rgba(232,241,242,.5);
margin-top: 2px;
}
.glz-04a__items b {
font-size: 13.5px;
font-weight: 700;
}
.glz-04a__promo {
display: flex;
gap: 8px;
margin-top: 18px;
padding-top: 18px;
border-top: 1px dashed rgba(255,255,255,.18);
}
.glz-04a__promo input {
flex: 1;
min-width: 0;
padding: 11px 14px;
border-radius: 11px;
border: 1px solid rgba(255,255,255,.2);
background: rgba(255,255,255,.06);
color: #e8f1f2;
font: 600 13px 'Manrope',sans-serif;
transition: border-color .2s ease,background .2s ease;
}
.glz-04a__promo input::placeholder {
color: rgba(232,241,242,.4);
}
.glz-04a__promo input:focus-visible {
outline: none;
border-color: var(--mint);
background: rgba(255,255,255,.1);
}
.glz-04a__promo button {
padding: 11px 16px;
border-radius: 11px;
border: 1px solid rgba(255,255,255,.25);
background: transparent;
color: #e8f1f2;
font: 700 12.5px 'Manrope',sans-serif;
cursor: pointer;
transition: background .2s ease;
}
.glz-04a__promo button:hover {
background: rgba(255,255,255,.12);
}
.glz-04a__promo button:focus-visible {
outline: 2px solid var(--mint);
outline-offset: 2px;
}
.glz-04a__totals {
margin-top: 18px;
display: grid;
gap: 9px;
font-variant-numeric: tabular-nums;
}
.glz-04a__totals div {
display: flex;
justify-content: space-between;
font-size: 13px;
color: rgba(232,241,242,.65);
}
.glz-04a__totals dd {
font-weight: 600;
color: rgba(232,241,242,.85);
}
.glz-04a__grand {
padding-top: 12px;
border-top: 1px solid rgba(255,255,255,.16);
}
.glz-04a__grand dt {
font-weight: 800;
color: #fff!important;
}
.glz-04a__grand dd {
font-size: 17px;
font-weight: 800;
color: var(--mint)!important;
}
.glz-04a__pay {
position: relative;
overflow: hidden;
width: 100%;
margin-top: 20px;
padding: 15px;
border: none;
border-radius: 14px;
background: linear-gradient(120deg,oklch(0.78 0.15 165),oklch(0.72 0.14 200));
color: #04140e;
font: 800 15px 'Manrope',sans-serif;
cursor: pointer;
box-shadow: 0 16px 32px -12px oklch(0.78 0.15 165/.6);
transition: transform .2s ease;
}
.glz-04a__pay::after {
content: "";
position: absolute;
inset: 0;
background: linear-gradient(110deg,transparent 35%,rgba(255,255,255,.5) 50%,transparent 65%);
transform: translateX(-130%);
}
.glz-04a__pay:hover {
transform: translateY(-2px);
}
.glz-04a__pay:hover::after {
transform: translateX(130%);
transition: transform .7s ease;
}
.glz-04a__pay:focus-visible {
outline: 2px solid #fff;
outline-offset: 3px;
}
.glz-04a__trust {
display: flex;
align-items: center;
justify-content: center;
gap: 7px;
margin-top: 14px;
font-size: 11px;
letter-spacing: .06em;
color: rgba(232,241,242,.5);
}
.glz-04a__trust svg {
width: 14px;
height: 14px;
}
.glz-04a__sr {
position: absolute;
width: 1px;
height: 1px;
overflow: hidden;
clip-path: inset(50%);
}
@supports not ((backdrop-filter: blur(2px)) or (-webkit-backdrop-filter: blur(2px))) {
.glz-04a__card {
background: rgba(16,25,34,.94);
}
}
@media (prefers-reduced-motion: reduce) {
.glz-04a__pay,
.glz-04a__pay::after {
transition: none;
}
}
.glz-04b,
.glz-04b *,
.glz-04b *::before,
.glz-04b *::after {
box-sizing: border-box;
margin: 0;
padding: 0;
}
.glz-04b {
--mint: oklch(0.8 0.15 170);
width: 100%;
min-height: 100vh;
display: grid;
place-items: center;
padding: 48px 24px;
background: linear-gradient(200deg,#101726,#0b1f22 70%,#0c1420);
font-family: 'Manrope',system-ui,sans-serif;
position: relative;
overflow: hidden;
}
.glz-04b::before {
content: "";
position: absolute;
inset: 0;
background: radial-gradient(60% 50% at 70% 20%,oklch(0.5 0.13 185/.5),transparent 65%),radial-gradient(50% 45% at 15% 85%,oklch(0.5 0.15 300/.4),transparent 65%);
}
.glz-04b__card {
position: relative;
z-index: 1;
width: min(380px,100%);
padding: 26px;
border-radius: 24px;
color: #e9f2f1;
background: linear-gradient(160deg,rgba(255,255,255,.12),rgba(255,255,255,.04));
backdrop-filter: blur(22px) saturate(170%);
-webkit-backdrop-filter: blur(22px) saturate(170%);
border: 1px solid rgba(255,255,255,.18);
box-shadow: 0 30px 60px -24px rgba(0,0,0,.75),inset 0 1px 0 rgba(255,255,255,.2);
}
.glz-04b__head {
display: flex;
justify-content: space-between;
align-items: baseline;
}
.glz-04b__head h3 {
font-size: 17px;
font-weight: 800;
}
.glz-04b__head span {
font-size: 11px;
letter-spacing: .14em;
text-transform: uppercase;
color: rgba(233,242,241,.45);
}
.glz-04b__methods {
display: grid;
gap: 10px;
margin-top: 18px;
}
.glz-04b__m {
position: relative;
display: flex;
align-items: center;
gap: 13px;
padding: 14px 16px;
border-radius: 16px;
border: 1px solid rgba(255,255,255,.14);
background: rgba(255,255,255,.05);
cursor: pointer;
transition: border-color .25s ease,background .25s ease,transform .2s ease;
}
.glz-04b__m:hover {
transform: translateX(3px);
background: rgba(255,255,255,.09);
}
.glz-04b__m input {
position: absolute;
inset: 0;
opacity: 0;
cursor: pointer;
}
.glz-04b__ic {
width: 40px;
height: 40px;
display: grid;
place-items: center;
font-size: 17px;
border-radius: 12px;
background: rgba(255,255,255,.09);
border: 1px solid rgba(255,255,255,.14);
}
.glz-04b__t {
flex: 1;
font-size: 13.5px;
font-weight: 700;
}
.glz-04b__t em {
display: block;
font-style: normal;
font-size: 11px;
font-weight: 500;
color: rgba(233,242,241,.5);
margin-top: 2px;
}
.glz-04b__dot {
width: 19px;
height: 19px;
border-radius: 50%;
border: 2px solid rgba(255,255,255,.35);
display: grid;
place-items: center;
transition: border-color .25s ease;
}
.glz-04b__dot::after {
content: "";
width: 9px;
height: 9px;
border-radius: 50%;
background: var(--mint);
transform: scale(0);
transition: transform .25s cubic-bezier(.3,1.6,.4,1);
}
.glz-04b__m:has(input:checked) {
border-color: var(--mint);
background: linear-gradient(150deg,oklch(0.8 0.15 170/.16),rgba(255,255,255,.05));
}
.glz-04b__m:has(input:checked) .glz-04b__dot {
border-color: var(--mint);
}
.glz-04b__m:has(input:checked) .glz-04b__dot::after {
transform: scale(1);
}
.glz-04b__m:has(input:focus-visible) {
outline: 2px solid var(--mint);
outline-offset: 2px;
}
.glz-04b__foot {
display: flex;
justify-content: space-between;
align-items: baseline;
margin-top: 20px;
padding-top: 16px;
border-top: 1px solid rgba(255,255,255,.14);
font-size: 13px;
color: rgba(233,242,241,.6);
}
.glz-04b__foot b {
font-size: 19px;
font-weight: 800;
color: #fff;
font-variant-numeric: tabular-nums;
}
.glz-04b__cta {
width: 100%;
margin-top: 16px;
padding: 15px;
border: none;
border-radius: 14px;
background: #fff;
color: #0a1512;
font: 800 14.5px 'Manrope',sans-serif;
cursor: pointer;
transition: transform .2s ease,box-shadow .2s ease;
}
.glz-04b__cta:hover {
transform: translateY(-2px);
box-shadow: 0 16px 30px -12px rgba(255,255,255,.4);
}
.glz-04b__cta:focus-visible {
outline: 2px solid var(--mint);
outline-offset: 3px;
}
@supports not ((backdrop-filter: blur(2px)) or (-webkit-backdrop-filter: blur(2px))) {
.glz-04b__card {
background: rgba(17,26,36,.94);
}
}
@media (prefers-reduced-motion: reduce) {
.glz-04b__m,
.glz-04b__dot,
.glz-04b__dot::after,
.glz-04b__cta {
transition: none;
}
}
```
## JavaScript
```js
/* No JavaScript — layout rhythm + tabular-nums do the work; the pay button's sheen is a translated gradient on ::after. */
/* No JavaScript — each method is a label wrapping a hidden radio; :has(input:checked) draws the mint ring and springs the dot in. Arrow keys switch methods natively. */
```How this works
The summary is a simple flex column; what makes it feel “engineered” is rhythm — one divider style, one row template, tabular numerals so prices align. The pay button carries its own mini light-sweep. The picker turns each payment method into a <label> wrapping a visually-hidden radio, so the whole card is clickable and arrow-key navigable for free:
.method input{position:absolute;opacity:0}
.method:has(input:checked){border-color:oklch(0.78 0.14 165);
background:linear-gradient(150deg,rgba(94,234,183,.16),rgba(255,255,255,.05))}
.method:has(input:focus-visible){outline:2px solid #fff}font-variant-numeric: tabular-nums keeps totals from wobbling when quantities change, and the “encrypted” footer row is text + an inline SVG lock — trust chrome that costs 40 bytes.
Make it yours
- Line items are plain list rows — bind them to your cart loop; the ellipsis style handles long names.
- Swap the mint accent (--mint) for your brand green/blue; it drives ring, dot, totals and button.
- Add Klarna/Afterpay as a fourth method card — the grid wraps automatically.
- Drop the promo row if your flow hides it; the divider rhythm holds.
Gotchas — read before shipping
- Never make the radio input display:none — it kills keyboard access; hide it with opacity:0 while keeping it in-flow.
- Tabular numerals need font support (most geometric sans do) — check your webfont or totals will jitter.
- Glass over glass (picker cards inside a glass panel) needs decreasing blur radii or edges turn to mush.
Browser support
| Chrome | Safari | Firefox | Edge |
|---|---|---|---|
| 111+ | 15.4+ | 121+ | 111+ |
Floor set by :has(), oklch(), backdrop-filter as this demo is written. The core technique itself goes back further — Chrome 105+.
:has() drives the selected-card styling; without it cards still work as radios, just without the ring. backdrop-filter per usual.