<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>THE STAGE TEN - 特設サイト</title> <script src="https://cdn.tailwindcss.com"></script> <style> .bg-main { background-image: linear-gradient(rgba(0, 0, 0, 0.75), rgba(0, 0, 0, 0.85)), url('https://images.unsplash.com/photo-1514525253161-7a46d19cd819?q=80&w=1000&auto=format&fit=crop'); background-size: cover; background-position: center; } .neon-red { box-shadow: 0 0 15px rgba(220, 38, 38, 0.6); } .neon-gold { box-shadow: 0 0 8px rgba(251, 191, 36, 0.8); } </style> </head> <body class="bg-black text-white antialiased relative bg-main min-h-screen flex flex-col justify-between"> <div id="video-popup" class="fixed inset-0 bg-black/95 z-50 flex items-center justify-center p-4 hidden opacity-0 transition-opacity duration-300"> <div class="bg-zinc-950 border border-zinc-800 rounded-2xl p-6 max-w-xs w-full flex flex-col items-center space-y-5 text-center shadow-2xl"> <div> <h4 class="text-lg font-bold text-red-500 tracking-widest animate-pulse">✨ 目標達成!動画解放 ✨</h4> <p class="text-xs text-zinc-400 mt-2">次の舞のショート映像が届きました!</p> </div> <a href="https://www.youtube.com/@SAYAKAworks" target="_blank" rel="noopener noreferrer" class="w-full py-4 bg-red-600 hover:bg-red-500 rounded-xl flex items-center justify-center font-bold tracking-wider active:scale-95 transition text-sm text-white neon-red"> 🔴 YouTubeで映像を見る </a> <button onclick="closePopup()" class="w-full py-2 bg-zinc-900 hover:bg-zinc-800 border border-zinc-800 rounded-lg text-xs tracking-wider font-medium text-zinc-400 transition"> 閉じる </button> </div> </div> <header class="p-6 text-center bg-gradient-to-b from-black/80 to-transparent"> <h1 class="text-3xl font-serif tracking-widest font-bold text-transparent bg-clip-text bg-gradient-to-b from-white to-zinc-400">THE STAGE TEN</h1> <p class="text-xs tracking-widest text-red-500 font-medium mt-1">━ 繋がる軌跡 ━</p> <p class="text-[10px] tracking-wider text-zinc-400 font-light mt-0.5">A Decade of Creation</p> </header> <main class="p-4 space-y-4 max-w-md mx-auto w-full"> <div class="bg-black/80 backdrop-blur-md border border-zinc-800 rounded-2xl p-5 space-y-4"> <div class="flex justify-between items-end"> <div> <p class="text-[11px] text-zinc-400 tracking-wider">総販売数</p> <div class="flex items-baseline gap-1 mt-1"> <span id="total-sold" class="text-5xl font-light font-mono text-red-500">114</span> <span class="text-xs text-zinc-500">/ 555 席</span> </div> </div> <div class="text-right"> <p class="text-[11px] text-zinc-400">次の動画解放まで</p> <p class="text-xl font-mono text-amber-400 mt-1">あと <span id="next-dance" class="text-2xl font-bold">38</span> 席</p> </div> </div> <div class="w-full bg-zinc-900 rounded-full h-2 overflow-hidden border border-zinc-800"> <div id="progress-bar" class="bg-gradient-to-r from-red-600 to-amber-500 h-full transition-all duration-500" style="width: 20.5%"></div> </div> <div class="flex gap-3 pt-2"> <div class="flex items-center bg-zinc-950 border border-zinc-800 rounded-xl overflow-hidden justify-between px-2 w-1/3"> <button onclick="changeInput(-1)" class="w-8 h-10 text-zinc-400 font-bold">-</button> <span id="input-display" class="font-bold font-mono text-sm">5</span> <button onclick="changeInput(1)" class="w-8 h-10 text-zinc-400 font-bold">+</button> </div> <button onclick="addLights()" class="bg-gradient-to-r from-red-700 to-red-600 text-white font-bold py-3 rounded-xl neon-red active:scale-95 transition text-xs tracking-widest flex-1"> 灯を追加する </button> </div> </div> <div class="bg-black/80 backdrop-blur-md border border-zinc-800 rounded-2xl p-4"> <p class="text-[11px] text-zinc-400 tracking-wider mb-2 text-center">座席点灯グラフ</p> <div id="light-grid" class="grid grid-cols-10 gap-1.5 p-1"></div> </div> </main> <footer class="p-4 text-center text-[10px] text-zinc-600 bg-gradient-to-t from-black to-transparent"> © THE STAGE TEN All Rights Reserved. </footer> <script> let totalSold = 114; let inputCount = 5; const maxSeats = 555; let nextThreshold = 152; function changeInput(val) { inputCount = Math.max(1, inputCount + val); document.getElementById('input-display').innerText = inputCount; } function addLights() { if (totalSold + inputCount <= maxSeats) { totalSold += inputCount; if (totalSold >= nextThreshold) { triggerPopupGimmick(); nextThreshold += 38; } updateDashboard(); } } function triggerPopupGimmick() { const popup = document.getElementById('video-popup'); popup.classList.remove('hidden'); setTimeout(() => popup.classList.remove('opacity-0'), 10); } function closePopup() { const popup = document.getElementById('video-popup'); popup.classList.add('opacity-0'); setTimeout(() => popup.classList.add('hidden'), 300); } function updateDashboard() { document.getElementById('total-sold').innerText = totalSold; document.getElementById('next-dance').innerText = Math.max(0, nextThreshold - totalSold); const percent = (totalSold / maxSeats) * 100; document.getElementById('progress-bar').style.width = `${percent}%`; // グリッドの更新 const grid = document.getElementById('light-grid'); grid.innerHTML = ''; const totalBlocks = 40; const activeBlocks = Math.floor((totalSold / maxSeats) * totalBlocks); for(let i = 0; i < totalBlocks; i++) { const block = document.createElement('div'); block.className = `h-3 rounded-sm transition-all duration-300 ${i < activeBlocks ? 'bg-amber-400 neon-gold' : 'bg-zinc-900 border border-zinc-800'}`; grid.appendChild(block); } } updateDashboard(); </script> </body> </html>
✨ 目標達成!動画解放 ✨
次の舞のショート映像が届きました!
THE STAGE TEN
━ 繋がる軌跡 ━
A Decade of Creation