@keyframes float-1{0%,to{transform:translateY(0) rotate(0)}50%{transform:translateY(-20px) rotate(10deg)}}@keyframes float-2{0%,to{transform:translateY(0) rotate(0)}50%{transform:translateY(-30px) rotate(-10deg)}}@keyframes float-3{0%,to{transform:translateY(0) rotate(0)}50%{transform:translateY(-15px) rotate(15deg)}}@keyframes shimmer{0%{transform:translate(-100%)}to{transform:translate(100%)}}@keyframes wiggle{0%,to{transform:rotate(-5deg)}50%{transform:rotate(5deg)}}@keyframes bounce-slow{0%,to{transform:translateY(0)}50%{transform:translateY(-10px)}}@keyframes spin-slow{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes pop-in{0%{transform:scale(0);opacity:0}70%{transform:scale(1.1)}to{transform:scale(1);opacity:1}}.animate-float-1{animation:float-1 4s ease-in-out infinite}.animate-float-2{animation:float-2 5s ease-in-out infinite}.animate-float-3{animation:float-3 3.5s ease-in-out infinite}.animate-shimmer{animation:shimmer 2s infinite}.animate-wiggle{animation:wiggle 1s ease-in-out infinite}.animate-bounce-slow{animation:bounce-slow 2s ease-in-out infinite}.animate-spin-slow{animation:spin-slow 8s linear infinite}.vinyl-spin{animation:spin-slow 3s linear infinite}.animate-pop-in{animation:pop-in .35s cubic-bezier(.4,0,.2,1)}@media (prefers-reduced-motion: reduce){.animate-float-1,.animate-float-2,.animate-float-3,.animate-shimmer,.animate-wiggle,.animate-bounce-slow,.animate-spin-slow,.vinyl-spin,.animate-pop-in{animation:none}}.perspective-1000{perspective:1000px}.transform-style-3d{transform-style:preserve-3d}.backface-hidden{backface-visibility:hidden}.rotate-y-180{transform:rotateY(180deg)}.line-clamp-2{display:-webkit-box;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}:root{--lesson-chrome-height: 160px}.lesson-container{height:calc(100vh - var(--lesson-chrome-height));height:calc(100dvh - var(--lesson-chrome-height));max-height:calc(100vh - var(--lesson-chrome-height));max-height:calc(100dvh - var(--lesson-chrome-height));display:flex;flex-direction:column;overflow:hidden;transition:padding .3s cubic-bezier(.4,0,.2,1),border-radius .3s cubic-bezier(.4,0,.2,1)}.lesson-card{flex:1;display:flex;flex-direction:column;max-height:100%;overflow:hidden}.lesson-header{flex-shrink:0}.lesson-body{flex:1;overflow-y:auto;overflow-x:hidden;-webkit-overflow-scrolling:touch;min-height:0}.lesson-footer{flex-shrink:0;background:#fff;border-top:1px solid #e5e7eb;padding-bottom:env(safe-area-inset-bottom,0)}.lesson-fullscreen{--lesson-chrome-height: 0px}.lesson-container.lesson-fullscreen,.lesson-fullscreen{position:fixed!important;top:0!important;right:0!important;bottom:0!important;left:0!important;width:100vw!important;height:100vh!important;height:100dvh!important;max-height:100vh!important;max-height:100dvh!important;z-index:9999!important;margin:0!important;padding:0!important;max-width:none!important;overflow:hidden!important;background:#fff}.lesson-fullscreen .lesson-card{height:100vh!important;height:100dvh!important;max-height:100vh!important;max-height:100dvh!important;border-radius:0!important}.memory-grid{--memory-cols: 4;--memory-gap: .5rem;display:flex;flex-wrap:wrap;justify-content:center;gap:var(--memory-gap)}.memory-grid>*{flex:0 0 calc((100% - (var(--memory-cols) - 1) * var(--memory-gap)) / var(--memory-cols))}@media (min-width: 640px){.memory-grid{--memory-gap: .625rem}}.lesson-body::-webkit-scrollbar{width:6px}.lesson-body::-webkit-scrollbar-track{background:#f1f5f9;border-radius:3px}.lesson-body::-webkit-scrollbar-thumb{background:#cbd5e1;border-radius:3px}.lesson-body::-webkit-scrollbar-thumb:hover{background:#94a3b8}@media (max-width: 640px){:root{--lesson-chrome-height: 130px}main:has(>.lesson-container){padding-left:0;padding-right:0;padding-top:0}.lesson-footer button,.lesson-body button:not(.lesson-inline-action){min-height:44px}}.karaoke-word{transition:color .2s ease,opacity .2s ease,text-shadow .2s ease}.karaoke-word--pending{color:#ffffff8c}.karaoke-word--sung{color:#fff;text-shadow:0 0 12px rgba(236,72,153,.75)}.karaoke-defilement{scroll-behavior:auto}@media (prefers-reduced-motion: reduce){.karaoke-word{transition:none}}
