Untitled
unknown
html
a day ago
11 kB
36
No Index
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Interactive Dashboard</title> <!-- Fonts --> <link rel="preconnect" href="https://fonts.googleapis.com" /> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin /> <link href="https://fonts.googleapis.com/css2?family=DM+Sans:[email protected]&family=Inter:[email protected]&display=swap" rel="stylesheet" /> <!-- Iconify --> <script src="https://code.iconify.design/iconify-icon/3.0.0/iconify-icon.min.js"></script> <style> :root { /* Base Variables from Snippets */ --background: #f5f7fa; --font-family-body: 'Inter', sans-serif; } * { box-sizing: border-box; margin: 0; padding: 0; } body { display: flex; align-items: center; justify-content: center; min-height: 100vh; background: #e5e5e5; /* Neutral background for the canvas presentation */ font-family: var(--font-family-body); -webkit-font-smoothing: antialiased; } /* 1:1 Canvas Wrapper */ .export-wrapper { width: 375px; height: 812px; position: relative; background-color: var(--background); border-radius: 40px; /* Optional: giving it an app-like feel */ box-shadow: 0 24px 80px rgba(0, 0, 0, 0.1); overflow: hidden; } /* Main App Layout */ .main-wrapper { width: 100%; height: 100%; background: linear-gradient( 180deg, #021855 0%, #073ea6 15%, #2081eb 32%, #78c4fd 50%, #d4ebfd 65%, #f4f6f9 80%, #f4f6f9 100% ); display: flex; flex-direction: column; position: relative; } /* Status & Header */ .status-bar { height: 54px; display: flex; justify-content: space-between; align-items: center; padding: 14px 28px 0 28px; color: white; font-size: 15px; font-weight: 600; } .header { display: flex; justify-content: space-between; align-items: flex-start; padding: 12px 24px 24px 24px; } .header-title { margin: 0; font-size: 32px; font-weight: 700; color: white; letter-spacing: 0.5px; } .header-subtitle { margin: 4px 0 0 0; font-size: 14px; font-weight: 500; color: rgba(255, 255, 255, 0.7); } .grid-btn { width: 40px; height: 40px; border-radius: 20px; background: rgba(255, 255, 255, 0.1); backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px); display: flex; align-items: center; justify-content: center; cursor: pointer; box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.1); } /* Content Cards */ .cards-container { flex: 1; padding: 0 24px 180px 24px; /* Extra padding at bottom for the floating nav */ display: flex; gap: 16px; overflow-y: auto; scrollbar-width: none; } .cards-container::-webkit-scrollbar { display: none; } .cards-col { display: flex; flex-direction: column; gap: 16px; flex: 1; } .glass-card { background: linear-gradient( 135deg, rgba(255, 255, 255, 0.2) 0%, rgba(255, 255, 255, 0.02) 100% ); border: 1px solid rgba(255, 255, 255, 0.2); border-radius: 28px; box-shadow: 0 10px 40px rgba(0, 0, 0, 0.05); backdrop-filter: blur(24px); -webkit-backdrop-filter: blur(24px); } /* === NEW FLOATING NAVIGATION WIDGET === */ .floating-nav { position: absolute; bottom: 32px; left: 12.5px; /* Center 350px widget in 375px container */ width: 350px; background: #f0f2f6; border-radius: 36px; padding: 12px; box-shadow: inset 1px 1px 2px rgba(255, 255, 255, 0.9), 0 12px 36px rgba(19, 27, 43, 0.08); display: flex; flex-direction: column; z-index: 100; } /* Sub Menu (Top Row) */ .sub-nav { display: flex; height: 48px; /* Fixed height for animation */ margin-bottom: 8px; overflow: hidden; opacity: 1; transition: all 0.35s cubic-bezier(0.25, 1, 0.5, 1); /* Smooth snap transition */ } .sub-nav.hidden { height: 0; margin-bottom: 0; opacity: 0; pointer-events: none; } .sub-tab { flex: 1; display: flex; align-items: center; justify-content: center; font-size: 15px; font-weight: 500; color: #5e6a7d; border-radius: 24px; cursor: pointer; transition: all 0.2s ease; } .sub-tab.active { background: #e6e8ed; color: #131b2b; box-shadow: -2px -2px 6px #ffffff, 2px 2px 6px rgba(19, 27, 43, 0.08); } /* Main Menu (Bottom Row) */ .main-nav { background: #ffffff; border-radius: 32px; display: flex; height: 84px; padding: 6px; } .nav-tab { flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 6px; border-radius: 26px; color: #131b2b; cursor: pointer; transition: all 0.2s ease; } .nav-tab.active { background: #f2f4f7; } .nav-tab span { font-size: 13px; font-weight: 600; } .icon-box { width: 28px; height: 28px; display: flex; align-items: center; justify-content: center; position: relative; } /* Dot element inside grid button */ .grid-dot { width: 4px; height: 4px; background: white; border-radius: 50%; } </style> </head> <body> <div class="export-wrapper"> <div class="main-wrapper"> <!-- Status bar --> <div class="status-bar"> <span>9:41</span> <div style="display: flex; gap: 6px; align-items: center"> <iconify-icon icon="lucide:signal" style="font-size: 16px"></iconify-icon> <iconify-icon icon="lucide:wifi" style="font-size: 16px"></iconify-icon> <iconify-icon icon="lucide:battery-full" style="font-size: 18px"></iconify-icon> </div> </div> <!-- Header --> <div class="header"> <div> <h1 class="header-title">Explore</h1> <p class="header-subtitle">San Francisco, CA</p> </div> <div class="grid-btn"> <div style="display: grid; grid-template-columns: 1fr 1fr; gap: 3px"> <div class="grid-dot"></div><div class="grid-dot"></div> <div class="grid-dot"></div><div class="grid-dot"></div> </div> </div> </div> <!-- Cards Grid --> <div class="cards-container"> <!-- Left Column --> <div class="cards-col"> <div class="glass-card" style="height: 230px"></div> <div class="glass-card" style="flex: 1; min-height: 200px"></div> </div> <!-- Right Column --> <div class="cards-col"> <div class="glass-card" style="height: 107px"></div> <div class="glass-card" style="height: 107px"></div> <div class="glass-card" style="flex: 1; min-height: 200px"></div> </div> </div> <!-- Floating Navigation Widget --> <div class="floating-nav"> <!-- Secondary Menu (Toggleable) --> <div class="sub-nav" id="sub-menu"> <div class="sub-tab active">Rooms</div> <div class="sub-tab">Inspiration</div> <div class="sub-tab">Profiles</div> </div> <!-- Primary Menu --> <div class="main-nav"> <div class="nav-tab active" data-tab="explore"> <div class="icon-box"> <iconify-icon icon="lucide:globe" style="font-size: 24px; stroke-width: 2.5px"></iconify-icon> <iconify-icon icon="lucide:mouse-pointer-2" style="font-size: 13px; position: absolute; bottom: -2px; right: -4px; fill: #131b2b; background: #f2f4f7; border-radius: 4px; padding: 2px;"></iconify-icon> </div> <span>Explore</span> </div> <div class="nav-tab" data-tab="assistant"> <div class="icon-box"> <iconify-icon icon="lucide:wand-2" style="font-size: 24px; stroke-width: 2.5px"></iconify-icon> </div> <span>Assistant</span> </div> <div class="nav-tab" data-tab="configs"> <div class="icon-box"> <iconify-icon icon="lucide:settings" style="font-size: 24px; stroke-width: 2.5px"></iconify-icon> </div> <span>Configs</span> </div> </div> </div> </div> </div> <script> document.addEventListener('DOMContentLoaded', () => { // Elements const mainTabs = document.querySelectorAll('.nav-tab'); const subTabs = document.querySelectorAll('.sub-tab'); const subMenu = document.getElementById('sub-menu'); const headerTitle = document.querySelector('.header-title'); // Main Menu Interaction mainTabs.forEach(tab => { tab.addEventListener('click', () => { // 1. Reset all main tabs mainTabs.forEach(t => t.classList.remove('active')); // 2. Set active class to clicked tab tab.classList.add('active'); // 3. Check which tab is clicked const tabName = tab.getAttribute('data-tab'); // Update title just for a nice effect headerTitle.innerText = tabName.charAt(0).toUpperCase() + tabName.slice(1); // 4. Toggle Sub Menu visibility if (tabName === 'explore') { subMenu.classList.remove('hidden'); } else { subMenu.classList.add('hidden'); } }); }); // Sub Menu Interaction subTabs.forEach(tab => { tab.addEventListener('click', () => { // Reset all sub tabs subTabs.forEach(t => t.classList.remove('active')); // Set active to clicked sub tab tab.classList.add('active'); }); }); }); </script> </body> </html>
Editor is loading...
Leave a Comment