<div class="wallet-dashboard">
<div class="header-text">
<h2>Digital Vault</h2>
<p>Tap the stack to expand your wallets.</p>
</div>
<div class="deck-container" id="card-deck">
<!-- Card 1: Bitcoin -->
<div class="crypto-card btc-card pos-1">
<div class="card-glow"></div>
<div class="card-inner">
<div class="card-top">
<span class="coin-name">Bitcoin</span>
<!-- Accurate BTC Icon -->
<svg viewBox="0 0 24 24" width="28" height="28" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M9 8h6a3 3 0 0 1 0 6H9"></path>
<path d="M9 14h7a3 3 0 0 1 0 6H9"></path>
<path d="M9 8v12"></path>
<path d="M11 6v2"></path>
<path d="M15 6v2"></path>
<path d="M11 20v2"></path>
<path d="M15 20v2"></path>
</svg>
</div>
<div class="card-middle">
<div class="balance">1.245 BTC</div>
<div class="fiat">$82,450.00</div>
</div>
<div class="card-bottom">
<span class="card-number">**** 3921</span>
<span class="card-exp">12/28</span>
</div>
</div>
</div>
<!-- Card 2: Ethereum -->
<div class="crypto-card eth-card pos-2">
<div class="card-glow"></div>
<div class="card-inner">
<div class="card-top">
<span class="coin-name">Ethereum</span>
<!-- Accurate ETH Icon -->
<svg viewBox="0 0 24 24" width="28" height="28" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<polygon points="12 2 7 12 12 16 17 12"></polygon>
<polygon points="12 22 7 14 12 17 17 14"></polygon>
</svg>
</div>
<div class="card-middle">
<div class="balance">8.450 ETH</div>
<div class="fiat">$29,320.00</div>
</div>
<div class="card-bottom">
<span class="card-number">**** 8402</span>
<span class="card-exp">09/27</span>
</div>
</div>
</div>
<!-- Card 3: Solana -->
<div class="crypto-card sol-card pos-3">
<div class="card-glow"></div>
<div class="card-inner">
<div class="card-top">
<span class="coin-name">Solana</span>
<!-- Accurate SOL Icon -->
<svg viewBox="0 0 24 24" width="28" height="28" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<polygon points="5 8 9 4 19 4 15 8"></polygon>
<polygon points="19 12 15 16 5 16 9 12"></polygon>
<polygon points="5 20 9 16 19 16 15 20"></polygon>
</svg>
</div>
<div class="card-middle">
<div class="balance">142.00 SOL</div>
<div class="fiat">$18,460.00</div>
</div>
<div class="card-bottom">
<span class="card-number">**** 5519</span>
<span class="card-exp">04/29</span>
</div>
</div>
</div>
</div>
</div>*, *::before, *::after {
box-sizing: border-box;
}
body {
font-family: system-ui, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
margin: 0;
background: #020617;
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh;
/* Allow scrolling when cards expand */
overflow-y: auto;
padding: 40px 20px;
}
.wallet-dashboard {
display: flex;
flex-direction: column;
align-items: center;
width: 100%;
}
.header-text {
text-align: center;
margin-bottom: 50px;
color: #f8fafc;
}
.header-text h2 {
font-size: 2.5rem;
margin: 0 0 10px 0;
letter-spacing: -1px;
}
.header-text p {
color: #94a3b8;
margin: 0;
font-size: 1.125rem;
}
.deck-container {
position: relative;
width: 320px;
/* Height when closed, adjusts via JS when opened */
height: 250px;
cursor: pointer;
transition: height 0.5s cubic-bezier(0.34, 1.56, 0.64, 1);
}
.crypto-card {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 200px;
border-radius: 24px;
padding: 2px;
transition: transform 0.5s cubic-bezier(0.34, 1.56, 0.64, 1), box-shadow 0.5s ease, opacity 0.5s ease;
will-change: transform;
}
.card-inner {
background: rgba(15, 23, 42, 0.9);
backdrop-filter: blur(20px);
width: 100%;
height: 100%;
border-radius: 22px;
padding: 24px;
display: flex;
flex-direction: column;
justify-content: space-between;
color: #ffffff;
z-index: 2;
position: relative;
}
.card-glow {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
border-radius: 24px;
z-index: 1;
opacity: 0.8;
}
.btc-card .card-glow { background: linear-gradient(135deg, #f59e0b, #ea580c); }
.eth-card .card-glow { background: linear-gradient(135deg, #8b5cf6, #4f46e5); }
.sol-card .card-glow { background: linear-gradient(135deg, #10b981, #0ea5e9); }
.card-top {
display: flex;
justify-content: space-between;
align-items: center;
}
.coin-name {
font-size: 1.25rem;
font-weight: 600;
letter-spacing: 1px;
}
.card-middle {
margin: 20px 0;
}
.balance {
font-size: 2rem;
font-weight: 800;
margin-bottom: 4px;
letter-spacing: -0.5px;
}
.fiat {
font-size: 1rem;
color: #94a3b8;
font-weight: 500;
}
.card-bottom {
display: flex;
justify-content: space-between;
align-items: center;
font-family: "Courier New", Courier, monospace;
font-size: 1.1rem;
color: #cbd5e1;
letter-spacing: 2px;
}
/* Base Stacked State */
.pos-1 { z-index: 3; transform: translateY(0) scale(1); box-shadow: 0 10px 30px rgba(0,0,0,0.5); }
.pos-2 { z-index: 2; transform: translateY(16px) scale(0.95); opacity: 0.9; }
.pos-3 { z-index: 1; transform: translateY(32px) scale(0.9); opacity: 0.8; }
/* Expanded List State - 100% Visibility */
.deck-container.is-open .crypto-card {
opacity: 1;
box-shadow: 0 15px 35px rgba(0,0,0,0.4);
}
/* Card 1 stays at top */
.deck-container.is-open .pos-1 {
transform: translateY(0) scale(1);
}
/* Card 2 drops down (200px height + 20px gap) */
.deck-container.is-open .pos-2 {
transform: translateY(220px) scale(1);
}
/* Card 3 drops further down (440px total) */
.deck-container.is-open .pos-3 {
transform: translateY(440px) scale(1);
}const deck = document.getElementById("card-deck");
deck.addEventListener("click", function() {
deck.classList.toggle("is-open");
if (deck.classList.contains("is-open")) {
/* Expand container height to fit all 3 cards (200px each + 20px gaps) */
deck.style.height = "680px";
} else {
/* Collapse container height back to original */
deck.style.height = "250px";
}
});Nothing to show yetType HTML, CSS or JavaScript and your page appears here.
Click any element to find its code Esc
Check this code before you run it
It came from a shared link. It runs with fewer permissions, so it cannot open pop-ups, submit forms or start downloads.
0.00s / 0.00s
Nothing has animated yet. Hover, click or type in the preview and each CSS animation, transition or
element.animate() call shows up here as it plays.