@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600;700&display=swap'); body { font-family: 'Poppins', sans-serif; background: linear-gradient(135deg, #1a2a6c, #b21f1f, #fdbb2d); min-height: 100vh; overflow-x: hidden; } .staff-container { position: relative; height: 220px; background: #f8f0d7; border-radius: 12px; box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3); overflow: hidden; } .staff-line { position: absolute; width: 100%; height: 2px; background: #000; left: 0; } .note { position: absolute; width: 60px; height: 100px; z-index: 10; cursor: pointer; } .note-img { width: 100%; height: 100%; object-fit: contain; transition: transform 0.2s; } .note:hover .note-img { transform: scale(1.1); } .clef { position: absolute; font-size: 160px; left: 10px; top: 54%; transform: translateY(-50%); z-index: 1; line-height: 0.8; } .game-card { background: rgba(255, 255, 255, 0.92); border-radius: 20px; backdrop-filter: blur(10px); box-shadow: 0 15px 35px rgba(0, 0, 0, 0.2); transition: transform 0.3s ease; } .game-card:hover { transform: translateY(-5px); } .btn-note { transition: all 0.2s ease; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); } .btn-note:hover { transform: translateY(-3px); box-shadow: 0 6px 8px rgba(0, 0, 0, 0.15); } .btn-note:active { transform: translateY(1px); } .pulse { animation: pulse 1.5s infinite; } @keyframes pulse { 0% { transform: scale(1); } 50% { transform: scale(1.05); } 100% { transform: scale(1); } } .progress-bar { height: 10px; border-radius: 5px; transition: width 0.5s ease; } .note-animation { animation: noteSlide 0.8s ease-out forwards; } @keyframes noteSlide { 0% { opacity: 0; transform: translateX(-50px); } 100% { opacity: 1; transform: translateX(0); } } .correct { background: #48bb78 !important; animation: correctBlink 0.5s; } /* Checkmark animation */ .checkmark-circle { width: 150px; height: 150px; position: relative; display: inline-block; } .checkmark-circle-bg { fill: #4CAF50; opacity: 0; animation: fadeIn 0.3s ease-out forwards; } .checkmark { width: 150px; height: 150px; border-radius: 50%; display: block; stroke-width: 5; stroke: #4CAF50; stroke-miterlimit: 10; animation: fill .3s ease-out .3s forwards, scale .2s ease-out .6s both; } .checkmark-check { transform-origin: 50% 50%; stroke-dasharray: 48; stroke-dashoffset: 48; animation: stroke .3s cubic-bezier(0.65, 0, 0.45, 1) .8s forwards; } @keyframes fadeIn { 100% { opacity: 0.2; } } @keyframes stroke { 100% { stroke-dashoffset: 0; } } @keyframes scale { 0%, 100% { transform: none; } 50% { transform: scale3d(1.1, 1.1, 1); } } @keyframes fill { 100% { box-shadow: inset 0px 0px 0px 30px #4CAF50; } } /* Stars popup */ .stars-popup { background: rgba(0,0,0,0.8); border-radius: 20px; padding: 2rem; text-align: center; max-width: 500px; width: 90%; border: 2px solid rgba(255, 215, 0, 0.5); box-shadow: 0 0 30px rgba(255, 215, 0, 0.5); } .stars-container { position: relative; width: 300px; height: 300px; margin: 0 auto; perspective: 1000px; } .star { position: absolute; background: url('https://www.freepnglogos.com/uploads/star-png/star-vector-png-transparent-image-pngpix-21.png') no-repeat center center; background-size: contain; width: 100%; height: 100%; opacity: 0; filter: drop-shadow(0 0 15px gold); } .star-1 { animation: starGlow 0.8s 0.1s forwards, float 3s 0.1s ease-in-out infinite; } .star-2 { animation: starGlow 0.8s 0.2s forwards, float 3.5s 0.2s ease-in-out infinite; } .star-3 { animation: starGlow 0.8s 0.3s forwards, float 4s 0.3s ease-in-out infinite; } .star-4 { animation: starGlow 0.8s 0.4s forwards, float 3.2s 0.4s ease-in-out infinite; } .star-5 { animation: starGlow 0.8s 0.5s forwards, float 3.7s 0.5s ease-in-out infinite; } @keyframes starGlow { 0% { transform: scale(0); opacity: 0; filter: drop-shadow(0 0 0 gold); } 50% { transform: scale(1.5); opacity: 1; filter: drop-shadow(0 0 30px gold); } 100% { transform: scale(1); opacity: 1; filter: drop-shadow(0 0 15px gold); } } @keyframes float { 0%, 100% { transform: translateY(0) rotate(0deg); } 50% { transform: translateY(-20px) rotate(10deg); } } @keyframes rotate { 100% { transform: rotateY(360deg); } } @keyframes animate-popIn { 0% { transform: scale(0.5); opacity: 0; } 100% { transform: scale(1); opacity: 1; } } .incorrect { background: #e53e3e !important; animation: shake 0.5s; } .clicked-once { background: #8b5cf6 !important; animation: pulse 0.5s; } .clicked-twice { background: #7c3aed !important; animation: pulse 0.5s; } @keyframes correctBlink { 0%, 100% { background: #48bb78; } 50% { background: #68d391; } } @keyframes shake { 0%, 100% { transform: translateX(0); } 25% { transform: translateX(-10px); } 75% { transform: translateX(10px); } } .level-indicator { transition: all 0.4s cubic-bezier(0.68, -0.55, 0.265, 1.55); position: relative; overflow: hidden; border: 2px solid rgba(255,255,255,0.1); filter: brightness(0.7); opacity: 0.8; } .level-indicator::before { content: ''; position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: linear-gradient(45deg, rgba(255,255,255,0.2), transparent); z-index: 1; opacity: 0; transition: all 0.4s ease; } .level-indicator::after { content: ''; position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: linear-gradient(135deg, rgba(255,255,255,0.3), transparent); z-index: 1; opacity: 0; transition: all 0.4s ease; } .level-indicator.active { transform: scale(1.05); box-shadow: 0 10px 25px rgba(0,0,0,0.3); z-index: 10; filter: brightness(1); opacity: 1; border-color: rgba(255,255,255,0.3); } .level-indicator.active::before, .level-indicator.active::after { opacity: 1; } .level-indicator.unlocked { animation: unlockPulse 1s ease forwards; filter: brightness(1); opacity: 1; } .level-indicator.active .level-badge { transform: scale(1.2); box-shadow: 0 4px 15px rgba(0,0,0,0.3); background: rgba(255,255,255,0.3) !important; } @keyframes unlockPulse { 0% { transform: scale(1); box-shadow: 0 0 0 rgba(255,255,255,0); } 50% { transform: scale(1.1); box-shadow: 0 0 20px rgba(255,255,255,0.8); } 100% { transform: scale(1); box-shadow: 0 0 0 rgba(255,255,255,0); } } .level-badge { transition: all 0.4s cubic-bezier(0.68, -0.55, 0.265, 1.55); } @keyframes levelTransition { 0% { transform: translateY(0) scale(1); opacity: 1; } 50% { transform: translateY(-20px) scale(1.2); opacity: 0; } 100% { transform: translateY(0) scale(1); opacity: 1; } } .music-key { width: 40px; height: 40px; border-radius: 8px; display: flex; align-items: center; justify-content: center; font-weight: bold; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); } .current-note { filter: drop-shadow(0 0 8px gold) brightness(1.2); animation: noteGlow 1.5s infinite alternate; } @keyframes noteGlow { 0% { filter: drop-shadow(0 0 5px gold) brightness(1.1); } 100% { filter: drop-shadow(0 0 15px gold) brightness(1.3); } } /* Ledger lines */ .ledger-line { position: absolute; width: 60px; height: 2px; background: #000; z-index: 5; } /* High note positions */ .high-note { position: absolute; width: 60px; height: 100px; z-index: 10; }