.opening-s-container{width:100vw;height:100vh;background:radial-gradient(circle at center,#0a0020,#000);display:flex;flex-direction:column;align-items:center;justify-content:center;touch-action:none;-webkit-user-select:none;user-select:none;position:relative;overflow:hidden}.pattern-hint{font-family:Cinzel Decorative,serif;color:#b882ff;font-size:1.5rem;margin-bottom:50px;text-align:center;letter-spacing:.1em;text-shadow:0 0 15px rgba(184,130,255,.5)}.dots-grid{position:relative;display:grid;grid-template-columns:repeat(3,100px);grid-template-rows:repeat(3,100px);gap:30px;z-index:2}.dot{width:100px;height:100px;display:flex;align-items:center;justify-content:center;position:relative}.dot-inner{width:12px;height:12px;background:#ffffff4d;border-radius:50%;transition:all .3s ease;box-shadow:0 0 10px #b882ff33}.dot.active .dot-inner{background:#fff;transform:scale(1.5);box-shadow:0 0 20px #b882ff,0 0 40px #b882ff80}.pattern-lines{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}.draw-line{stroke:#fff;stroke-width:4;stroke-linecap:round;filter:drop-shadow(0 0 8px #b882ff);stroke-dasharray:1000;stroke-dashoffset:0;opacity:.8}.mobile-hint{position:absolute;bottom:40px;color:#ffffff4d;font-family:Lato,sans-serif;font-size:.9rem;letter-spacing:.1em}.opening-s-container.success .dot-inner{background:#00ffc8;box-shadow:0 0 20px #00ffc8}.opening-s-container.success .draw-line{stroke:#00ffc8;filter:drop-shadow(0 0 10px #00ffc8)}.opening-s-container.success .pattern-hint{color:#00ffc8;text-shadow:0 0 20px rgba(0,255,200,.6)}.opening-s-container.error .dot-inner{background:#ff4b2b;box-shadow:0 0 20px #ff4b2b}.opening-s-container.error .pattern-hint{color:#ff4b2b;text-shadow:0 0 20px rgba(255,75,43,.6)}.opening-s-container.error .draw-line{stroke:#ff4b2b;filter:drop-shadow(0 0 10px #ff4b2b)}.terminal-scene{width:100vw;height:100vh;background:#000;display:flex;flex-direction:column;align-items:center;justify-content:center;font-family:Courier New,Courier,monospace;position:relative;overflow:hidden}.terminal-overlay{position:absolute;top:0;left:0;width:100%;height:100%;background:linear-gradient(#12101000 50%,#00000040 50%),linear-gradient(90deg,#ff00000f,#00ff0005,#00009b0f);background-size:100% 2px,3px 100%;pointer-events:none;z-index:5}.terminal-content{width:90%;max-width:800px;background:#0a0a0ae6;border:1px solid #1a1a1a;padding:40px;border-radius:4px;box-shadow:0 0 50px #00ffc80d;min-height:400px;display:flex;flex-direction:column;gap:12px;z-index:2}.terminal-line{font-size:clamp(1rem,2.5vw,1.4rem);line-height:1.6;white-space:pre-wrap;word-break:break-all}.cursor{font-size:1.6rem;color:#00ffc8;font-weight:700}.terminal-scene:after{content:" ";display:block;position:absolute;top:0;left:0;bottom:0;right:0;background:#1210101a;opacity:0;z-index:2;pointer-events:none}.terminal-scene:before{content:" ";display:block;position:absolute;top:0;left:0;bottom:0;right:0;background:linear-gradient(#12101000 50%,#0003 50%),linear-gradient(90deg,#ff00000f,#00ff0005,#00009b0f);z-index:2;background-size:100% 2px,3px 100%;pointer-events:none}.star-name-bg{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1;display:flex;justify-content:center;align-items:center;padding:50px;gap:30px;pointer-events:none;opacity:.8}.constellation-letter{position:relative;width:80px;height:120px}.bg-constellation-star{position:absolute;width:5px;height:5px;background:#fff;border-radius:50%;box-shadow:0 0 15px #fff}@media (max-width: 768px){.star-name-bg{gap:10px;padding:20px;flex-wrap:wrap;justify-content:center}.constellation-letter{width:30px;height:50px}}.finale-scene{position:absolute;top:0;right:0;bottom:0;left:0;background:radial-gradient(ellipse at center,#0e0030,#000010);display:flex;flex-direction:column;align-items:center;justify-content:flex-start;overflow-y:auto;overflow-x:hidden;padding:20px 16px 40px}@media (min-width: 1024px){.finale-scene{justify-content:flex-start;padding-top:5vh}.hero-image-container{width:min(35%,320px);margin-bottom:15px}.birthday-msg{margin-bottom:25px}.photo-gallery-masonry{column-count:6;max-width:1400px}}.confetti-canvas{position:fixed;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:10}.star-bg{position:fixed;top:0;right:0;bottom:0;left:0;pointer-events:none;z-index:0}.f-star{position:absolute;background:#fff;border-radius:50%;animation:twinkle2 3s ease-in-out infinite alternate}@keyframes twinkle2{0%{opacity:.05}to{opacity:.7}}.finale-content{position:relative;z-index:2;display:flex;flex-direction:column;align-items:center;text-align:center;width:100%;max-width:1200px}.birthday-badge{font-size:clamp(2rem,5vw,4rem);margin-bottom:5px;filter:drop-shadow(0 0 20px rgba(255,200,0,.7))}.birthday-heading{font-family:Lato,sans-serif;font-weight:300;font-size:clamp(1rem,2vw,1.5rem);letter-spacing:.3em;color:#dcb4ffcc;text-transform:uppercase;margin-bottom:4px}.birthday-name{font-family:Cinzel Decorative,Georgia,serif;font-size:clamp(1.8rem,6vw,3.5rem);color:#e0b0ff;background:linear-gradient(135deg,#e0b0ff,#fff,#ffd6f0,#b882ff);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;margin-bottom:15px;filter:drop-shadow(0 0 15px rgba(180,130,255,.6));z-index:5;position:relative}.birthday-msg{font-family:Lato,sans-serif;font-weight:300;font-size:clamp(1rem,2.5vw,1.2rem);color:#dcc8ffe6;line-height:1.6;max-width:650px;margin:0 auto 20px;padding:0 10px}.hero-image-container{position:relative;width:min(85%,400px);margin:0 auto 20px;border-radius:15px;overflow:hidden;box-shadow:0 0 25px #b882ff4d;border:1px solid rgba(255,255,255,.1)}.hero-image{width:100%;height:auto;display:block}.hero-image-glow{position:absolute;top:0;right:0;bottom:0;left:0;box-shadow:inset 0 0 40px #b882ff33;pointer-events:none}.photo-gallery-masonry{column-count:3;column-gap:12px;width:100%;max-width:1000px;margin:0 auto}@media (max-width: 768px){.photo-gallery-masonry{column-count:2}}@media (max-width: 480px){.photo-gallery-masonry{column-count:1}}.photo-item{display:inline-block;width:100%;margin-bottom:12px;background:#fff;padding:5px;border-radius:4px;box-shadow:0 8px 25px #0006;transition:all .4s cubic-bezier(.175,.885,.32,1.275);cursor:pointer;break-inside:avoid}.photo-wrapper{position:relative;overflow:hidden;border-radius:2px;background:#000;display:flex;align-items:center;justify-content:center}.photo-item img{width:100%;height:auto;display:block;object-fit:scale-down;transition:transform .5s ease;max-height:180px}.photo-overlay-shimmer{position:absolute;top:0;right:0;bottom:0;left:0;background:linear-gradient(135deg,rgba(255,255,255,.05) 0%,transparent 50%);pointer-events:none}.photo-item:hover{transform:translateY(-8px) scale(1.03) rotate(0)!important;box-shadow:0 15px 40px #0009,0 0 25px #b882ff4d}.photo-item:hover img{transform:scale(1.05)}.from-msg{margin-top:25px;font-family:Cinzel Decorative,serif;font-size:1rem;color:#b882ff;letter-spacing:.1em;text-shadow:0 0 10px rgba(184,130,255,.4)}.app-shell{width:100vw;height:100vh;background:#000010;overflow:hidden;position:relative}*,*:before,*:after{margin:0;padding:0;box-sizing:border-box}html,body,#root{width:100%;height:100%;overflow:hidden;background:#000}body{font-family:Lato,sans-serif;color:#fff;cursor:default}
