<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";
}
});