*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html,body,#root{height:100%;width:100%;overflow:hidden}body{font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;background-color:#faf9f6;color:#1b2a4a;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;overscroll-behavior:none}.app-shell{display:flex;flex-direction:column;height:100%;height:100dvh;max-width:600px;margin:0 auto;position:relative;background:#faf9f6;box-shadow:0 0 40px #1b2a4a14}.tab-content{flex:1;overflow-y:auto;overflow-x:hidden;-webkit-overflow-scrolling:touch;overscroll-behavior-y:contain;padding-bottom:calc(72px + env(safe-area-inset-bottom))}.tab-bar{position:absolute;bottom:0;left:0;right:0;height:calc(64px + env(safe-area-inset-bottom));background:#faf9f6;border-top:1px solid #E2E8F0;display:flex;align-items:flex-start;padding-top:8px;padding-bottom:env(safe-area-inset-bottom);z-index:100}.tab-item{flex:1;display:flex;flex-direction:column;align-items:center;gap:3px;cursor:pointer;border:none;background:none;padding:4px 0;-webkit-tap-highlight-color:transparent;touch-action:manipulation}.tab-label{font-size:10px;font-weight:600;letter-spacing:.3px}.tab-content::-webkit-scrollbar{display:none}.tab-content{scrollbar-width:none}@keyframes confettiRise{0%{transform:translateY(0) rotate(0) scale(1);opacity:1}60%{opacity:1}to{transform:translateY(-140px) rotate(540deg) scale(.6);opacity:0}}.confetti-piece{position:absolute;width:8px;height:8px;border-radius:2px;animation:confettiRise .8s ease-out forwards;pointer-events:none}@keyframes spinOnce{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.spin-once{animation:spinOnce .5s ease-in-out}@keyframes fadeSlideIn{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}.fade-slide-in{animation:fadeSlideIn .3s ease-out forwards}@keyframes checkBounce{0%{transform:scale(1)}40%{transform:scale(.82)}70%{transform:scale(1.12)}to{transform:scale(1)}}.check-bounce{animation:checkBounce .3s ease-out}.progress-fill{transition:width .4s cubic-bezier(.4,0,.2,1)}@keyframes nowPulse{0%,to{opacity:1}50%{opacity:.6}}.now-pulse{animation:nowPulse 2s ease-in-out infinite}button:active{opacity:.8}
