/* ============================================
   GRAND GELATO — Animations & Transitions
   ============================================ */

/* --- Fade Up (default scroll animation) --- */
.fade-up {
  opacity: 0;
  transform: translateY(40px);
  transition: opacity 0.7s ease, transform 0.7s ease;
}

.fade-up.visible {
  opacity: 1;
  transform: translateY(0);
}

/* --- Fade In --- */
.fade-in {
  opacity: 0;
  transition: opacity 0.8s ease;
}

.fade-in.visible {
  opacity: 1;
}

/* --- Fade Left --- */
.fade-left {
  opacity: 0;
  transform: translateX(-40px);
  transition: opacity 0.7s ease, transform 0.7s ease;
}

.fade-left.visible {
  opacity: 1;
  transform: translateX(0);
}

/* --- Fade Right --- */
.fade-right {
  opacity: 0;
  transform: translateX(40px);
  transition: opacity 0.7s ease, transform 0.7s ease;
}

.fade-right.visible {
  opacity: 1;
  transform: translateX(0);
}

/* --- Scale Up --- */
.scale-up {
  opacity: 0;
  transform: scale(0.92);
  transition: opacity 0.7s ease, transform 0.7s ease;
}

.scale-up.visible {
  opacity: 1;
  transform: scale(1);
}

/* --- Stagger delays για children --- */
.stagger > *:nth-child(1) { transition-delay: 0s; }
.stagger > *:nth-child(2) { transition-delay: 0.1s; }
.stagger > *:nth-child(3) { transition-delay: 0.2s; }
.stagger > *:nth-child(4) { transition-delay: 0.3s; }
.stagger > *:nth-child(5) { transition-delay: 0.4s; }
.stagger > *:nth-child(6) { transition-delay: 0.5s; }
.stagger > *:nth-child(7) { transition-delay: 0.6s; }
.stagger > *:nth-child(8) { transition-delay: 0.7s; }

/* --- Parallax Image --- */
.parallax-wrap {
  /* overflow kept on parent, not here */
}

.parallax-img {
  transform: scale(1.12);
  transition: transform 0.1s linear;
  will-change: transform;
}

/* --- Underline Draw (για links / headings) --- */
.underline-draw {
  position: relative;
  display: inline-block;
}

.underline-draw::after {
  content: '';
  position: absolute;
  bottom: -3px;
  left: 0;
  width: 0;
  height: 1px;
  background: var(--pink-orchid);
  transition: width 0.5s ease;
}

.underline-draw:hover::after,
.underline-draw.visible::after {
  width: 100%;
}

/* --- Counter (numbers που μετράνε) --- */
.counter {
  display: inline-block;
  transition: none;
}

/* --- Image Reveal --- */
.img-reveal {
  position: relative;
  overflow: hidden;
}

.img-reveal::after {
  content: '';
  position: absolute;
  inset: 0;
  background: var(--mint-cream);
  transform: scaleX(1);
  transform-origin: right;
  transition: transform 0.9s cubic-bezier(0.77, 0, 0.175, 1);
}

.img-reveal.visible::after {
  transform: scaleX(0);
}

.img-reveal img {
  transform: scale(1.08);
  transition: transform 0.9s cubic-bezier(0.77, 0, 0.175, 1);
}

.img-reveal.visible img {
  transform: scale(1);
}

/* --- Line Draw (για decorative lines) --- */
.line-draw {
  width: 0;
  height: 1px;
  background: var(--pink-orchid);
  transition: width 0.8s ease;
}

.line-draw.visible {
  width: 48px;
}

.line-draw.full.visible {
  width: 100%;
}

/* --- Hover Scale (για cards, images) --- */
.hover-scale {
  transition: transform var(--transition);
}

.hover-scale:hover {
  transform: scale(1.03);
}

/* --- Hover Lift (για cards) --- */
.hover-lift {
  transition: transform var(--transition), box-shadow var(--transition);
}

.hover-lift:hover {
  transform: translateY(-6px);
  box-shadow: var(--shadow-md);
}

/* --- Marquee (infinite scroll text) --- */
.marquee-wrap {
  overflow: hidden;
  white-space: nowrap;
}

.marquee-track {
  display: inline-flex;
  gap: 3rem;
  animation: marquee 18s linear infinite;
}

.marquee-track:hover {
  animation-play-state: paused;
}

.marquee-item {
  font-family: var(--font-display);
  font-style: italic;
  font-size: 1.2rem;
  color: var(--rosy-granite);
  display: flex;
  align-items: center;
  gap: 1.5rem;
  flex-shrink: 0;
}

.marquee-item::after {
  content: '·';
  color: var(--pink-orchid);
  font-size: 1.5rem;
}

@keyframes marquee {
  from { transform: translateX(0); }
  to   { transform: translateX(-50%); }
}

/* --- Floating animation (για hero elements) --- */
.float {
  animation: floatAnim 4s ease-in-out infinite;
}

@keyframes floatAnim {
  0%, 100% { transform: translateY(0); }
  50%       { transform: translateY(-12px); }
}

/* --- Spin slow (για badge/stamp elements) --- */
.spin-slow {
  animation: spinSlow 12s linear infinite;
}

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

/* --- Page transition overlay --- */
.page-transition {
  position: fixed;
  inset: 0;
  background: var(--chocolate-plum);
  z-index: 99998;
  transform: translateY(100%);
  pointer-events: none;
}

.page-transition.enter {
  animation: pageEnter 0.5s cubic-bezier(0.77, 0, 0.175, 1) forwards;
}

.page-transition.exit {
  animation: pageExit 0.5s cubic-bezier(0.77, 0, 0.175, 1) forwards;
}

@keyframes pageEnter {
  from { transform: translateY(100%); }
  to   { transform: translateY(0%); }
}

@keyframes pageExit {
  from { transform: translateY(0%); }
  to   { transform: translateY(-100%); }
}

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

  .fade-up,
  .fade-in,
  .fade-left,
  .fade-right,
  .scale-up {
    opacity: 1;
    transform: none;
  }

  .img-reveal::after {
    display: none;
  }

  .img-reveal img {
    transform: none;
  }
}

/* Stats sections — πάντα ορατά */
.stats-bar .fade-up,
section[style*="chocolate-plum"] .fade-up {
  opacity: 1 !important;
  transform: none !important;
}


/* ============================================
   HERO ENTRANCE ANIMATIONS
   ============================================ */

/* Αρχική κατάσταση — όλα κρυφά */
.page-hero-content .overline,
.hero-content .overline,
.page-hero-content .line-draw,
.hero-content .line-draw,
.page-hero-content h1,
.hero-content h1,
.page-hero-content .lead,
.hero-content .lead,
.page-hero-content .btn,
.hero-content .btn,
.page-hero-content a,
.hero-content a {
  opacity: 0;
  transform: translateY(24px);
}

/* Animations ξεκινούν ΜΕΤΑ τον preloader */
body.hero-ready .page-hero-content .overline,
body.hero-ready .hero-content .overline {
  animation: heroFadeUp 0.9s ease forwards;
  animation-delay: 0.1s;
}

body.hero-ready .page-hero-content .line-draw,
body.hero-ready .hero-content .line-draw {
  animation: heroFadeUp 0.7s ease forwards;
  animation-delay: 0.25s;
}

body.hero-ready .page-hero-content h1,
body.hero-ready .hero-content h1 {
  animation: heroFadeUp 1s cubic-bezier(0.16, 1, 0.3, 1) forwards;
  animation-delay: 0.2s;
}

body.hero-ready .page-hero-content .lead,
body.hero-ready .hero-content .lead {
  animation: heroFadeUp 0.9s ease forwards;
  animation-delay: 0.4s;
}

body.hero-ready .page-hero-content .btn,
body.hero-ready .hero-content .btn,
body.hero-ready .page-hero-content a,
body.hero-ready .hero-content a {
  animation: heroFadeUp 0.8s ease forwards;
  animation-delay: 0.55s;
}

body.hero-ready .hero-content .flex .btn:nth-child(2) {
  animation-delay: 0.7s;
}

/* Stats bar */
.stats-bar .fade-up,
.stats-bar > div {
  opacity: 0;
  transform: translateY(20px);
}

body.hero-ready .stats-bar > div:nth-child(1) { animation: heroFadeUp 0.6s ease forwards; animation-delay: 0.7s; }
body.hero-ready .stats-bar > div:nth-child(2) { animation: heroFadeUp 0.6s ease forwards; animation-delay: 0.8s; }
body.hero-ready .stats-bar > div:nth-child(3) { animation: heroFadeUp 0.6s ease forwards; animation-delay: 0.9s; }
body.hero-ready .stats-bar > div:nth-child(4) { animation: heroFadeUp 0.6s ease forwards; animation-delay: 1.0s; }

@keyframes heroFadeUp {
  from {
    opacity: 0;
    transform: translateY(24px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

/* Reduced motion */
@media (prefers-reduced-motion: reduce) {
  .page-hero-content *,
  .hero-content * {
    animation: none !important;
    opacity: 1 !important;
    transform: none !important;
  }
}
