/* ═══════════════════════════════════════════════════════════════
   AURORA — Advanced Animation System for Yatri AI
   High-performance, GPU-accelerated animations
   ═══════════════════════════════════════════════════════════════ */

/* ─── ANIMATION TOKENS ─── */
:root {
  --spring-bounce: cubic-bezier(0.34, 1.56, 0.64, 1);
  --spring-smooth: cubic-bezier(0.16, 1, 0.3, 1);
  --spring-snap: cubic-bezier(0.68, -0.6, 0.32, 1.6);
  --ease-out-expo: cubic-bezier(0.19, 1, 0.22, 1);
  --ease-out-quint: cubic-bezier(0.22, 1, 0.36, 1);
  --ease-in-out-circ: cubic-bezier(0.85, 0, 0.15, 1);
  --ease-elastic: cubic-bezier(0.68, -0.55, 0.265, 1.55);

  --dur-fast: 0.2s;
  --dur-normal: 0.4s;
  --dur-slow: 0.6s;
  --dur-slower: 0.8s;
  --dur-slowest: 1.2s;

  --stagger-base: 60ms;
}

/* ─── GPU HINTS ─── */
.aurora-gpu {
  will-change: transform, opacity;
  backface-visibility: hidden;
  -webkit-backface-visibility: hidden;
  transform: translateZ(0);
}

/* ═══════════════════════════════════════════════════════════════
   SCROLL-TRIGGERED REVEAL ANIMATIONS
   Elements start invisible, animate in when scrolled into view
   ═══════════════════════════════════════════════════════════════ */

/* Base: elements waiting to be revealed */
[data-reveal] {
  opacity: 0;
  will-change: transform, opacity;
  transition: none;
}

[data-reveal].revealed {
  animation-fill-mode: forwards;
  animation-timing-function: var(--spring-smooth);
}

/* Reveal: fade up */
[data-reveal="up"].revealed {
  animation: auroraRevealUp var(--dur-slow) var(--spring-smooth) forwards;
}
@keyframes auroraRevealUp {
  from { opacity: 0; transform: translateY(60px) scale(0.97); }
  to   { opacity: 1; transform: translateY(0) scale(1); }
}

/* Reveal: fade down */
[data-reveal="down"].revealed {
  animation: auroraRevealDown var(--dur-slow) var(--spring-smooth) forwards;
}
@keyframes auroraRevealDown {
  from { opacity: 0; transform: translateY(-40px) scale(0.97); }
  to   { opacity: 1; transform: translateY(0) scale(1); }
}

/* Reveal: slide left */
[data-reveal="left"].revealed {
  animation: auroraRevealLeft var(--dur-slow) var(--spring-smooth) forwards;
}
@keyframes auroraRevealLeft {
  from { opacity: 0; transform: translateX(-60px) rotate(-2deg); }
  to   { opacity: 1; transform: translateX(0) rotate(0deg); }
}

/* Reveal: slide right */
[data-reveal="right"].revealed {
  animation: auroraRevealRight var(--dur-slow) var(--spring-smooth) forwards;
}
@keyframes auroraRevealRight {
  from { opacity: 0; transform: translateX(60px) rotate(2deg); }
  to   { opacity: 1; transform: translateX(0) rotate(0deg); }
}

/* Reveal: scale up (zoom in) */
[data-reveal="scale"].revealed {
  animation: auroraRevealScale var(--dur-slow) var(--spring-bounce) forwards;
}
@keyframes auroraRevealScale {
  from { opacity: 0; transform: scale(0.7); }
  to   { opacity: 1; transform: scale(1); }
}

/* Reveal: flip in */
[data-reveal="flip"].revealed {
  animation: auroraRevealFlip var(--dur-slower) var(--spring-smooth) forwards;
  perspective: 800px;
}
@keyframes auroraRevealFlip {
  from { opacity: 0; transform: perspective(800px) rotateY(-30deg) translateX(-30px); }
  to   { opacity: 1; transform: perspective(800px) rotateY(0deg) translateX(0); }
}

/* Reveal: rotate in */
[data-reveal="rotate"].revealed {
  animation: auroraRevealRotate var(--dur-slower) var(--spring-bounce) forwards;
}
@keyframes auroraRevealRotate {
  from { opacity: 0; transform: rotate(-12deg) scale(0.8); }
  60%  { opacity: 1; transform: rotate(3deg) scale(1.02); }
  to   { opacity: 1; transform: rotate(0deg) scale(1); }
}

/* Reveal: blur in */
[data-reveal="blur"].revealed {
  animation: auroraRevealBlur var(--dur-slower) var(--ease-out-expo) forwards;
}
@keyframes auroraRevealBlur {
  from { opacity: 0; filter: blur(12px); transform: scale(1.1); }
  to   { opacity: 1; filter: blur(0px); transform: scale(1); }
}

/* Reveal: spring bounce */
[data-reveal="spring"].revealed {
  animation: auroraRevealSpring var(--dur-slowest) var(--spring-bounce) forwards;
}
@keyframes auroraRevealSpring {
  0%   { opacity: 0; transform: translateY(80px) scale(0.9); }
  40%  { opacity: 1; transform: translateY(-10px) scale(1.02); }
  70%  { transform: translateY(4px) scale(0.99); }
  100% { opacity: 1; transform: translateY(0) scale(1); }
}

/* Stagger delays (applied via data-reveal-delay or auto-stagger) */
[data-reveal-delay="1"], [data-reveal-stagger] > *:nth-child(1)  { animation-delay: calc(var(--stagger-base) * 1) !important; }
[data-reveal-delay="2"], [data-reveal-stagger] > *:nth-child(2)  { animation-delay: calc(var(--stagger-base) * 2) !important; }
[data-reveal-delay="3"], [data-reveal-stagger] > *:nth-child(3)  { animation-delay: calc(var(--stagger-base) * 3) !important; }
[data-reveal-delay="4"], [data-reveal-stagger] > *:nth-child(4)  { animation-delay: calc(var(--stagger-base) * 4) !important; }
[data-reveal-delay="5"], [data-reveal-stagger] > *:nth-child(5)  { animation-delay: calc(var(--stagger-base) * 5) !important; }
[data-reveal-delay="6"], [data-reveal-stagger] > *:nth-child(6)  { animation-delay: calc(var(--stagger-base) * 6) !important; }
[data-reveal-delay="7"], [data-reveal-stagger] > *:nth-child(7)  { animation-delay: calc(var(--stagger-base) * 7) !important; }
[data-reveal-delay="8"], [data-reveal-stagger] > *:nth-child(8)  { animation-delay: calc(var(--stagger-base) * 8) !important; }
[data-reveal-delay="9"], [data-reveal-stagger] > *:nth-child(9)  { animation-delay: calc(var(--stagger-base) * 9) !important; }
[data-reveal-delay="10"], [data-reveal-stagger] > *:nth-child(10) { animation-delay: calc(var(--stagger-base) * 10) !important; }
[data-reveal-delay="11"], [data-reveal-stagger] > *:nth-child(11) { animation-delay: calc(var(--stagger-base) * 11) !important; }
[data-reveal-delay="12"], [data-reveal-stagger] > *:nth-child(12) { animation-delay: calc(var(--stagger-base) * 12) !important; }


/* ═══════════════════════════════════════════════════════════════
   PAGE TRANSITIONS
   Smooth morphing between SPA pages
   ═══════════════════════════════════════════════════════════════ */

.page {
  transition: none;
}

.page.page-entering {
  animation: pageEnter 0.5s var(--ease-out-expo) forwards;
}
.page.page-leaving {
  animation: pageLeave 0.3s var(--ease-in-out-circ) forwards;
  pointer-events: none;
}

@keyframes pageEnter {
  from { opacity: 0; transform: translateY(16px) scale(0.99); filter: blur(4px); }
  to   { opacity: 1; transform: translateY(0) scale(1); filter: blur(0px); }
}
@keyframes pageLeave {
  from { opacity: 1; transform: translateY(0) scale(1); }
  to   { opacity: 0; transform: translateY(-8px) scale(0.99); }
}

/* Page-specific enter animations */
#page-home.page-entering .hero { animation: heroEnter 0.8s var(--ease-out-expo) forwards; }
@keyframes heroEnter {
  from { opacity: 0; transform: scale(1.03); }
  to   { opacity: 1; transform: scale(1); }
}

#page-assistant.page-entering .chat-page { animation: chatEnter 0.4s var(--ease-out-expo) forwards; }
@keyframes chatEnter {
  from { opacity: 0; transform: translateX(20px); }
  to   { opacity: 1; transform: translateX(0); }
}

#page-explore.page-entering .explore-header { animation: exploreHeaderEnter 0.5s var(--ease-out-expo) forwards; }
@keyframes exploreHeaderEnter {
  from { opacity: 0; transform: translateY(-20px); }
  to   { opacity: 1; transform: translateY(0); }
}


/* ═══════════════════════════════════════════════════════════════
   3D CARD TILT EFFECT
   Cards respond to mouse movement with perspective
   ═══════════════════════════════════════════════════════════════ */

[data-tilt] {
  transform-style: preserve-3d;
  perspective: 1000px;
  transition: transform 0.1s linear;
}

[data-tilt] .tilt-shine {
  position: absolute;
  inset: 0;
  border-radius: inherit;
  background: linear-gradient(
    135deg,
    rgba(255, 255, 255, 0.25) 0%,
    rgba(255, 255, 255, 0) 60%
  );
  opacity: 0;
  transition: opacity 0.3s ease;
  pointer-events: none;
  z-index: 2;
}

[data-tilt]:hover .tilt-shine {
  opacity: 1;
}


/* ═══════════════════════════════════════════════════════════════
   MAGNETIC BUTTON EFFECT
   Buttons subtly attract toward cursor on hover
   ═══════════════════════════════════════════════════════════════ */

[data-magnetic] {
  transition: transform 0.3s var(--spring-smooth);
}


/* ═══════════════════════════════════════════════════════════════
   RIPPLE EFFECT
   Material-style ripple on click for all interactive elements
   ═══════════════════════════════════════════════════════════════ */

.ripple-container {
  position: relative;
  overflow: hidden;
}

.ripple-wave {
  position: absolute;
  border-radius: 50%;
  background: radial-gradient(circle, rgba(232, 101, 43, 0.3) 0%, rgba(232, 101, 43, 0) 70%);
  transform: scale(0);
  animation: rippleExpand 0.6s var(--ease-out-expo) forwards;
  pointer-events: none;
  z-index: 1;
}

.ripple-wave.ripple-light {
  background: radial-gradient(circle, rgba(255, 255, 255, 0.35) 0%, rgba(255, 255, 255, 0) 70%);
}

@keyframes rippleExpand {
  0%   { transform: scale(0); opacity: 1; }
  100% { transform: scale(4); opacity: 0; }
}


/* ═══════════════════════════════════════════════════════════════
   LIQUID GRADIENT BACKGROUND
   Animated morphing gradient blobs
   ═══════════════════════════════════════════════════════════════ */

.liquid-bg {
  position: absolute;
  inset: 0;
  overflow: hidden;
  z-index: 0;
}

.liquid-blob {
  position: absolute;
  border-radius: 50%;
  filter: blur(80px);
  opacity: 0.5;
  animation: blobFloat 12s ease-in-out infinite alternate;
  will-change: transform;
}

.liquid-blob:nth-child(1) {
  width: 500px; height: 500px;
  background: radial-gradient(circle, rgba(232, 101, 43, 0.4), transparent 70%);
  top: -20%; left: -10%;
  animation-duration: 14s;
}
.liquid-blob:nth-child(2) {
  width: 400px; height: 400px;
  background: radial-gradient(circle, rgba(212, 160, 23, 0.35), transparent 70%);
  top: 20%; right: -15%;
  animation-duration: 11s;
  animation-delay: -3s;
}
.liquid-blob:nth-child(3) {
  width: 350px; height: 350px;
  background: radial-gradient(circle, rgba(107, 15, 26, 0.25), transparent 70%);
  bottom: -10%; left: 30%;
  animation-duration: 16s;
  animation-delay: -7s;
}

@keyframes blobFloat {
  0%   { transform: translate(0, 0) scale(1) rotate(0deg); }
  33%  { transform: translate(30px, -40px) scale(1.1) rotate(60deg); }
  66%  { transform: translate(-20px, 20px) scale(0.95) rotate(180deg); }
  100% { transform: translate(15px, -25px) scale(1.05) rotate(360deg); }
}


/* ═══════════════════════════════════════════════════════════════
   ENHANCED HERO SECTION
   ═══════════════════════════════════════════════════════════════ */

/* Particle canvas overlay */
.hero-particles {
  position: absolute;
  inset: 0;
  z-index: 1;
  pointer-events: none;
}

/* Hero badge pulse */
.hero-badge {
  animation: fadeIn 0.8s ease, badgePulse 3s ease-in-out 1s infinite;
}
@keyframes badgePulse {
  0%, 100% { box-shadow: 0 0 0 0 rgba(255, 255, 255, 0.2); }
  50%      { box-shadow: 0 0 0 8px rgba(255, 255, 255, 0); }
}

/* Hero text character reveal */
.hero-char {
  display: inline-block;
  opacity: 0;
  transform: translateY(30px) rotate(5deg);
  animation: charReveal 0.5s var(--spring-smooth) forwards;
}
@keyframes charReveal {
  to { opacity: 1; transform: translateY(0) rotate(0deg); }
}

/* Hero floating icons enhanced */
.hero-float {
  transition: transform 0.5s ease;
  animation: floatEnhanced 6s ease-in-out infinite !important;
}
@keyframes floatEnhanced {
  0%   { transform: translateY(0) rotate(0deg) scale(1); }
  25%  { transform: translateY(-12px) rotate(3deg) scale(1.05); }
  50%  { transform: translateY(-6px) rotate(-2deg) scale(0.98); }
  75%  { transform: translateY(-14px) rotate(1deg) scale(1.03); }
  100% { transform: translateY(0) rotate(0deg) scale(1); }
}

/* Wave divider enhanced */
.wave-divider svg path {
  animation: waveMorph 8s ease-in-out infinite;
}
@keyframes waveMorph {
  0%, 100% { d: path("M0,60 C150,100 350,0 600,60 C850,120 1050,20 1200,60 L1200,120 L0,120 Z"); }
  50%      { d: path("M0,70 C200,30 400,100 600,50 C800,0 1000,90 1200,50 L1200,120 L0,120 Z"); }
}


/* ═══════════════════════════════════════════════════════════════
   ENHANCED ACTION CARDS
   ═══════════════════════════════════════════════════════════════ */

.action-card {
  position: relative;
  overflow: hidden;
  transform-style: preserve-3d;
  transition: transform 0.4s var(--spring-bounce), box-shadow 0.4s ease !important;
}

.action-card::before {
  content: '';
  position: absolute;
  top: -50%;
  left: -50%;
  width: 200%;
  height: 200%;
  background: conic-gradient(
    from 0deg,
    transparent 0deg,
    rgba(232, 101, 43, 0.05) 60deg,
    transparent 120deg
  );
  animation: cardShine 6s linear infinite;
  opacity: 0;
  transition: opacity 0.3s ease;
}

.action-card:hover::before {
  opacity: 1;
}

@keyframes cardShine {
  from { transform: rotate(0deg); }
  to   { transform: rotate(360deg); }
}

.action-icon {
  transition: transform 0.4s var(--spring-bounce), box-shadow 0.3s ease;
}

.action-card:hover .action-icon {
  transform: scale(1.15) rotate(-5deg);
  box-shadow: 0 8px 25px rgba(0, 0, 0, 0.15);
}

.action-card:active {
  transform: scale(0.93) !important;
  transition-duration: 0.1s !important;
}


/* ═══════════════════════════════════════════════════════════════
   ENHANCED CHAT MESSAGES
   ═══════════════════════════════════════════════════════════════ */

.msg {
  animation: none !important; /* Override inline animations — JS handles reveal */
  opacity: 1;
}

.msg.msg-animate {
  opacity: 0;
}

.msg.msg-animate.msg-user {
  animation: msgEnterUser 0.45s var(--spring-smooth) forwards !important;
}
.msg.msg-animate.msg-bot {
  animation: msgEnterBot 0.45s var(--spring-smooth) forwards !important;
}

@keyframes msgEnterUser {
  from { opacity: 0; transform: translateX(30px) translateY(10px) scale(0.95); }
  to   { opacity: 1; transform: translateX(0) translateY(0) scale(1); }
}

@keyframes msgEnterBot {
  from { opacity: 0; transform: translateX(-30px) translateY(10px) scale(0.95); }
  to   { opacity: 1; transform: translateX(0) translateY(0) scale(1); }
}

/* Typing indicator enhanced */
.typing-indicator {
  animation: typingEnter 0.3s var(--spring-smooth) forwards;
}
@keyframes typingEnter {
  from { opacity: 0; transform: translateY(10px) scale(0.9); }
  to   { opacity: 1; transform: translateY(0) scale(1); }
}

.typing-dots span {
  animation: typingDotBounce 1.4s var(--spring-bounce) infinite !important;
}
@keyframes typingDotBounce {
  0%, 60%, 100% { transform: translateY(0) scale(1); opacity: 0.4; }
  30%           { transform: translateY(-10px) scale(1.2); opacity: 1; }
}


/* ═══════════════════════════════════════════════════════════════
   ENHANCED PLACE CARDS
   ═══════════════════════════════════════════════════════════════ */

.place-card {
  transition: transform 0.4s var(--spring-bounce), box-shadow 0.4s ease !important;
  animation: none !important;
  transform-style: preserve-3d;
}

.place-card:hover {
  transform: translateY(-6px) !important;
  box-shadow: 0 16px 48px rgba(0, 0, 0, 0.12), 0 4px 12px rgba(0, 0, 0, 0.08) !important;
}

.place-card .place-card-img {
  transition: transform 0.8s var(--ease-out-expo) !important;
}

.place-card:hover .place-card-img {
  transform: scale(1.08) !important;
}

/* Place detail expand animation */
.place-detail.open {
  animation: detailExpand 0.4s var(--spring-smooth) forwards !important;
}
@keyframes detailExpand {
  from { opacity: 0; max-height: 0; transform: translateY(-10px); }
  to   { opacity: 1; max-height: 600px; transform: translateY(0); }
}


/* ═══════════════════════════════════════════════════════════════
   ENHANCED SOS CARDS
   ═══════════════════════════════════════════════════════════════ */

.sos-card {
  transition: transform 0.3s var(--spring-bounce), box-shadow 0.3s ease, border-color 0.3s ease !important;
}

.sos-card:hover {
  transform: translateY(-4px) scale(1.02) !important;
  box-shadow: 0 12px 32px rgba(220, 38, 38, 0.15) !important;
}

.sos-card:hover .sos-icon {
  animation: sosIconPulse 0.4s var(--spring-bounce);
}
@keyframes sosIconPulse {
  0%   { transform: scale(1); }
  50%  { transform: scale(1.15) rotate(-5deg); }
  100% { transform: scale(1); }
}

.sos-card:active {
  transform: scale(0.92) !important;
  transition-duration: 0.1s !important;
}


/* ═══════════════════════════════════════════════════════════════
   ENHANCED BUTTONS & INPUTS
   ═══════════════════════════════════════════════════════════════ */

/* Hero CTA button glow */
.hero-cta {
  position: relative;
  overflow: hidden;
  transition: transform 0.3s var(--spring-bounce), box-shadow 0.3s ease !important;
}

.hero-cta::after {
  content: '';
  position: absolute;
  top: -50%;
  left: -50%;
  width: 200%;
  height: 200%;
  background: linear-gradient(
    45deg,
    transparent 30%,
    rgba(255, 255, 255, 0.3) 50%,
    transparent 70%
  );
  transform: translateX(-100%);
  transition: none;
}

.hero-cta:hover::after {
  animation: ctaSheen 0.8s ease forwards;
}

@keyframes ctaSheen {
  from { transform: translateX(-100%); }
  to   { transform: translateX(100%); }
}

/* Mic button recording enhanced */
.btn-mic.recording {
  animation: micRecordPulse 1.2s ease-in-out infinite !important;
}
@keyframes micRecordPulse {
  0%   { box-shadow: 0 0 0 0 rgba(239, 68, 68, 0.5), 0 6px 24px rgba(239, 68, 68, 0.4); }
  50%  { box-shadow: 0 0 0 14px rgba(239, 68, 68, 0), 0 6px 24px rgba(239, 68, 68, 0.4); }
  100% { box-shadow: 0 0 0 0 rgba(239, 68, 68, 0.5), 0 6px 24px rgba(239, 68, 68, 0.4); }
}

/* Send button entrance */
.btn-send.ready {
  animation: sendBtnPop 0.3s var(--spring-bounce);
}
@keyframes sendBtnPop {
  from { transform: scale(0.5) rotate(-90deg); }
  to   { transform: scale(1) rotate(0deg); }
}

/* Input focus glow */
.chat-input:focus {
  box-shadow: 0 0 0 4px rgba(232, 101, 43, 0.08), 0 0 20px rgba(232, 101, 43, 0.05) !important;
  animation: inputFocusGlow 2s ease-in-out infinite;
}
@keyframes inputFocusGlow {
  0%, 100% { box-shadow: 0 0 0 4px rgba(232, 101, 43, 0.08), 0 0 20px rgba(232, 101, 43, 0.05); }
  50%      { box-shadow: 0 0 0 6px rgba(232, 101, 43, 0.12), 0 0 30px rgba(232, 101, 43, 0.08); }
}


/* ═══════════════════════════════════════════════════════════════
   ENHANCED NAVIGATION
   ═══════════════════════════════════════════════════════════════ */

/* Navbar entrance */
.navbar {
  animation: navbarSlideDown 0.6s var(--ease-out-expo) forwards;
}
@keyframes navbarSlideDown {
  from { transform: translateY(-100%); opacity: 0; }
  to   { transform: translateY(0); opacity: 1; }
}

/* Nav link hover effect */
.nav-link {
  position: relative;
  overflow: hidden;
}

.nav-link::before {
  content: '';
  position: absolute;
  bottom: 0;
  left: 50%;
  width: 0;
  height: 2px;
  background: rgba(255, 255, 255, 0.5);
  transition: width 0.3s var(--spring-smooth), left 0.3s var(--spring-smooth);
  border-radius: 1px;
}

.nav-link:hover::before, .nav-link.active::before {
  width: 60%;
  left: 20%;
}

/* Mobile bottom nav */
.mobile-nav {
  animation: mobileNavSlideUp 0.4s var(--ease-out-expo) 0.3s both;
}
@keyframes mobileNavSlideUp {
  from { transform: translateY(100%); }
  to   { transform: translateY(0); }
}

.mobile-nav button {
  transition: transform 0.2s var(--spring-bounce), color 0.2s ease !important;
}

.mobile-nav button:active {
  transform: scale(0.85) !important;
}

.mobile-nav button.active i {
  animation: navIconBounce 0.4s var(--spring-bounce);
}
@keyframes navIconBounce {
  0%   { transform: scale(0.6) translateY(4px); }
  50%  { transform: scale(1.2) translateY(-2px); }
  100% { transform: scale(1) translateY(0); }
}


/* ═══════════════════════════════════════════════════════════════
   MODALS & OVERLAYS
   ═══════════════════════════════════════════════════════════════ */

.loc-picker-overlay.open,
.chat-sidebar-overlay.open {
  animation: overlayFadeIn 0.3s ease forwards;
}
@keyframes overlayFadeIn {
  from { opacity: 0; }
  to   { opacity: 1; }
}

.loc-picker-sheet {
  animation: sheetSlideUp 0.45s var(--spring-smooth) forwards !important;
}
@keyframes sheetSlideUp {
  from { transform: translateY(100%); opacity: 0; }
  to   { transform: translateY(0); opacity: 1; }
}

.chat-sidebar.open {
  animation: sidebarSlideIn 0.35s var(--spring-smooth) forwards;
}
@keyframes sidebarSlideIn {
  from { transform: translateX(-100%); }
  to   { transform: translateX(0); }
}


/* ═══════════════════════════════════════════════════════════════
   TOAST ENHANCED
   ═══════════════════════════════════════════════════════════════ */

#toast {
  transition: all 0.4s var(--spring-bounce) !important;
}

#toast[style*="opacity: 1"],
#toast[style*="opacity:1"] {
  animation: toastBounceIn 0.5s var(--spring-bounce);
}
@keyframes toastBounceIn {
  0%   { transform: translateX(-50%) translateY(-30px) scale(0.8); opacity: 0; }
  60%  { transform: translateX(-50%) translateY(4px) scale(1.02); opacity: 1; }
  100% { transform: translateX(-50%) translateY(0) scale(1); opacity: 1; }
}


/* ═══════════════════════════════════════════════════════════════
   SKELETON LOADING ENHANCED
   ═══════════════════════════════════════════════════════════════ */

.skeleton {
  position: relative;
  overflow: hidden;
  background: linear-gradient(90deg, #f0ece6 0%, #f0ece6 100%) !important;
}

.skeleton::after {
  content: '';
  position: absolute;
  inset: 0;
  background: linear-gradient(
    90deg,
    transparent 0%,
    rgba(255, 255, 255, 0.6) 50%,
    transparent 100%
  );
  animation: skeletonWave 1.8s ease-in-out infinite;
}

@keyframes skeletonWave {
  0%   { transform: translateX(-100%); }
  100% { transform: translateX(100%); }
}


/* ═══════════════════════════════════════════════════════════════
   AUTH PAGES ENHANCED
   ═══════════════════════════════════════════════════════════════ */

.auth-card {
  animation: authCardEnter 0.6s var(--spring-smooth) forwards !important;
}
@keyframes authCardEnter {
  from { opacity: 0; transform: translateY(40px) scale(0.95); filter: blur(4px); }
  to   { opacity: 1; transform: translateY(0) scale(1); filter: blur(0px); }
}

.auth-field {
  animation: authFieldSlide 0.5s var(--spring-smooth) forwards;
  opacity: 0;
}
.auth-field:nth-child(1) { animation-delay: 0.15s; }
.auth-field:nth-child(2) { animation-delay: 0.25s; }
.auth-field:nth-child(3) { animation-delay: 0.35s; }
.auth-field:nth-child(4) { animation-delay: 0.45s; }
@keyframes authFieldSlide {
  from { opacity: 0; transform: translateX(-20px); }
  to   { opacity: 1; transform: translateX(0); }
}

.auth-btn {
  position: relative;
  overflow: hidden;
  transition: transform 0.3s var(--spring-bounce), box-shadow 0.3s ease !important;
}

.auth-btn:hover:not(:disabled) {
  transform: translateY(-2px) !important;
  box-shadow: 0 8px 25px rgba(232, 101, 43, 0.3) !important;
}

.auth-btn:active:not(:disabled) {
  transform: translateY(0) scale(0.98) !important;
}


/* ═══════════════════════════════════════════════════════════════
   PROFILE PAGE ENHANCED
   ═══════════════════════════════════════════════════════════════ */

.profile-avatar {
  animation: avatarFloat 4s ease-in-out infinite;
  transition: transform 0.3s var(--spring-bounce) !important;
}

.profile-avatar:hover {
  transform: scale(1.1) !important;
}

@keyframes avatarFloat {
  0%, 100% { transform: translateY(0); box-shadow: 0 4px 20px rgba(232, 101, 43, 0.3); }
  50%      { transform: translateY(-6px); box-shadow: 0 12px 30px rgba(232, 101, 43, 0.2); }
}

.profile-stat {
  transition: transform 0.3s var(--spring-bounce), box-shadow 0.3s ease;
}

.profile-stat:hover {
  transform: translateY(-3px);
  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.08);
}

/* Animated counter */
.profile-stat .num {
  transition: transform 0.3s var(--spring-bounce);
}

.profile-stat:hover .num {
  transform: scale(1.15);
}


/* ═══════════════════════════════════════════════════════════════
   MAP ENHANCEMENTS
   ═══════════════════════════════════════════════════════════════ */

.map-place-card.show {
  animation: mapCardSlideUp 0.45s var(--spring-smooth) forwards !important;
}
@keyframes mapCardSlideUp {
  from { opacity: 0; transform: translateY(100%); }
  to   { opacity: 1; transform: translateY(0); }
}

.route-panel.open {
  animation: routePanelEnter 0.4s var(--spring-smooth) forwards !important;
}
@keyframes routePanelEnter {
  from { opacity: 0; transform: translateX(-30px) scale(0.95); }
  to   { opacity: 1; transform: translateX(0) scale(1); }
}

.map-btn {
  transition: transform 0.2s var(--spring-bounce), color 0.2s ease, box-shadow 0.2s ease !important;
}

.map-btn:hover {
  transform: scale(1.1) !important;
}

.map-btn:active {
  transform: scale(0.9) !important;
}


/* ═══════════════════════════════════════════════════════════════
   FILTER CHIPS ENHANCED
   ═══════════════════════════════════════════════════════════════ */

.filter-chip, .lang-chip, .map-filter-chip {
  transition: transform 0.2s var(--spring-bounce), border-color 0.2s ease,
              background 0.2s ease, color 0.2s ease, box-shadow 0.2s ease !important;
}

.filter-chip:active, .lang-chip:active, .map-filter-chip:active {
  transform: scale(0.9) !important;
}

.filter-chip.active, .lang-chip.active, .map-filter-chip.active {
  animation: chipActivate 0.3s var(--spring-bounce);
}
@keyframes chipActivate {
  0%   { transform: scale(0.85); }
  60%  { transform: scale(1.08); }
  100% { transform: scale(1); }
}


/* ═══════════════════════════════════════════════════════════════
   CHAT SIDEBAR ENHANCED
   ═══════════════════════════════════════════════════════════════ */

.chat-sidebar-item {
  transition: transform 0.2s var(--spring-bounce), background 0.2s ease !important;
}

.chat-sidebar-item:hover {
  transform: translateX(4px);
}

.chat-sidebar-item:active {
  transform: scale(0.97);
}


/* ═══════════════════════════════════════════════════════════════
   CHAT WELCOME ENHANCED
   ═══════════════════════════════════════════════════════════════ */

.chat-welcome-icon {
  animation: welcomeIconFloat 4s ease-in-out infinite, welcomeIconEnter 0.6s var(--spring-bounce) !important;
}
@keyframes welcomeIconEnter {
  from { opacity: 0; transform: scale(0.3) rotate(-15deg); }
  to   { opacity: 1; transform: scale(1) rotate(0deg); }
}

.chat-welcome-chip {
  transition: transform 0.25s var(--spring-bounce), border-color 0.2s ease,
              box-shadow 0.2s ease, color 0.2s ease !important;
}

.chat-welcome-chip:hover {
  transform: translateY(-3px) scale(1.03) !important;
  box-shadow: 0 6px 16px rgba(0, 0, 0, 0.08) !important;
}

.chat-welcome-chip:active {
  transform: scale(0.93) !important;
}


/* ═══════════════════════════════════════════════════════════════
   HELPLINE ITEMS ENHANCED
   ═══════════════════════════════════════════════════════════════ */

.helpline-item {
  transition: transform 0.2s var(--spring-bounce), background 0.2s ease,
              box-shadow 0.2s ease !important;
}

.helpline-item:hover {
  transform: translateX(6px) !important;
  box-shadow: 0 4px 16px rgba(220, 38, 38, 0.1) !important;
}

.helpline-item:active {
  transform: scale(0.97) !important;
}

.helpline-call {
  transition: transform 0.2s var(--spring-bounce), background 0.2s ease !important;
}

.helpline-call:hover {
  transform: scale(1.1);
}


/* ═══════════════════════════════════════════════════════════════
   SCROLLBAR ENHANCED
   ═══════════════════════════════════════════════════════════════ */

::-webkit-scrollbar {
  width: 6px;
}

::-webkit-scrollbar-track {
  background: transparent;
}

::-webkit-scrollbar-thumb {
  background: linear-gradient(180deg, var(--saffron-light), var(--saffron));
  border-radius: 3px;
  transition: background 0.3s ease;
}

::-webkit-scrollbar-thumb:hover {
  background: linear-gradient(180deg, var(--saffron), var(--saffron-dark));
}


/* ═══════════════════════════════════════════════════════════════
   CONTINUOUS ANIMATIONS
   ═══════════════════════════════════════════════════════════════ */

/* Gradient shift for hero */
.hero {
  background-size: 300% 300% !important;
  animation: heroGradientShift 10s ease infinite !important;
}
@keyframes heroGradientShift {
  0%   { background-position: 0% 0%; }
  25%  { background-position: 100% 0%; }
  50%  { background-position: 100% 100%; }
  75%  { background-position: 0% 100%; }
  100% { background-position: 0% 0%; }
}

/* Status dot pulse */
.status-dot.online {
  animation: statusPulse 2s ease-in-out infinite !important;
}
@keyframes statusPulse {
  0%, 100% { box-shadow: 0 0 0 0 rgba(74, 222, 128, 0.6); }
  50%      { box-shadow: 0 0 0 6px rgba(74, 222, 128, 0); }
}


/* ═══════════════════════════════════════════════════════════════
   HOVER INTERACTION PATTERNS
   ═══════════════════════════════════════════════════════════════ */

/* Universal button hover lift */
button:not(.mobile-nav button):not(.nav-link):not(.chat-sidebar-toggle):not(.mpc-close) {
  transition: transform 0.2s var(--spring-bounce), box-shadow 0.2s ease,
              background 0.2s ease, color 0.2s ease, border-color 0.2s ease,
              opacity 0.2s ease !important;
}

/* Info banner shimmer */
.info-banner {
  position: relative;
  overflow: hidden;
}

.info-banner::before {
  content: '';
  position: absolute;
  top: 0;
  left: -100%;
  width: 50%;
  height: 100%;
  background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.3), transparent);
  animation: bannerShimmer 6s ease-in-out infinite;
}
@keyframes bannerShimmer {
  0%, 80%, 100% { left: -100%; }
  40%           { left: 150%; }
}


/* ═══════════════════════════════════════════════════════════════
   ACCESSIBILITY — REDUCED MOTION
   ═══════════════════════════════════════════════════════════════ */

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
  }

  [data-reveal] {
    opacity: 1 !important;
    transform: none !important;
    filter: none !important;
  }

  .liquid-blob {
    animation: none !important;
  }

  .hero {
    animation: none !important;
    background-size: 100% 100% !important;
  }
}


/* ═══════════════════════════════════════════════════════════════
   MOBILE-SPECIFIC ENHANCEMENTS
   ═══════════════════════════════════════════════════════════════ */

@media (max-width: 768px) {
  /* Faster animations on mobile for snappier feel */
  :root {
    --dur-fast: 0.15s;
    --dur-normal: 0.3s;
    --dur-slow: 0.4s;
    --dur-slower: 0.6s;
    --stagger-base: 40ms;
  }

  /* Disable heavy effects on mobile for performance */
  .liquid-blob {
    filter: blur(50px);
  }

  [data-tilt] {
    transform: none !important;
  }

  /* Swipe indicator */
  .swipe-indicator {
    position: fixed;
    top: 50%;
    transform: translateY(-50%);
    width: 4px;
    height: 60px;
    background: rgba(232, 101, 43, 0.3);
    border-radius: 2px;
    z-index: 999;
    opacity: 0;
    transition: opacity 0.2s ease;
    pointer-events: none;
  }

  .swipe-indicator.left { left: 0; }
  .swipe-indicator.right { right: 0; }
  .swipe-indicator.active { opacity: 1; }
}
