/* ---------- tokens ---------- */
:root {
  --navy: #1d3a6b;
  --navy-deep: #0f2548;
  --aqua: #4aa8c4;
  --sky: #7ec9e5;
  --sky-light: #c5e8f3;
  --sand: #f5e0b5;
  --sand-light: #faf0d6;
  --coral: #ff8c42;
  --white: #ffffff;
  --shadow: 0 12px 40px rgba(15, 37, 72, 0.18);
  --shadow-lg: 0 24px 60px rgba(15, 37, 72, 0.25);
}

* { box-sizing: border-box; margin: 0; padding: 0; }

/* hidden attribute must win even on elements with display:inline-flex (.btn etc.) */
[hidden] { display: none !important; }

html { scroll-behavior: smooth; }

body {
  font-family: 'Nunito', system-ui, -apple-system, sans-serif;
  color: var(--navy-deep);
  background: linear-gradient(180deg, var(--sky-light) 0%, var(--sky) 60%, var(--aqua) 100%);
  min-height: 100vh;
  overflow-x: hidden;
  line-height: 1.5;
  position: relative;
  transition: background 2.5s ease;
}

/* DAWN — soft sunrise pinks and peach */
body.dawn {
  background: linear-gradient(180deg, #ffd9a3 0%, #ffb3a0 50%, #ff9a8a 100%);
}

/* DUSK — tropical sunset oranges into purple */
body.dusk {
  background: linear-gradient(180deg, #ffa766 0%, #ff6b8a 50%, #5b3380 100%);
}

/* NIGHT — deep navy sky with stars */
body.night {
  background: linear-gradient(180deg, #0a1530 0%, #14264f 60%, #1d3a6b 100%);
  color: #e0e6ee;
}

/* sun → soft pink at dawn */
body.dawn .sun {
  background: radial-gradient(circle at center,
    rgba(255, 220, 180, 0.85) 0%,
    rgba(255, 180, 130, 0.45) 30%,
    rgba(255, 140, 100, 0) 70%);
}

/* sun → fiery sunset orb at dusk */
body.dusk .sun {
  background: radial-gradient(circle at center,
    rgba(255, 200, 130, 0.95) 0%,
    rgba(255, 130, 90, 0.65) 30%,
    rgba(200, 80, 110, 0) 70%);
}

/* sun → silver moon at night */
body.night .sun {
  background: radial-gradient(circle at center,
    rgba(240, 245, 255, 0.95) 0%,
    rgba(200, 215, 240, 0.55) 32%,
    rgba(150, 175, 220, 0.18) 55%,
    rgba(120, 140, 180, 0) 75%);
  box-shadow: 0 0 60px 20px rgba(220, 230, 250, 0.2);
}

/* stars — only visible at night, scattered across the upper half of the sky */
.ocean-bg::after {
  content: "";
  position: absolute;
  inset: 0;
  pointer-events: none;
  opacity: 0;
  transition: opacity 2s;
  background-image:
    radial-gradient(1.4px 1.4px at 3%  6%,  #fff, transparent),
    radial-gradient(1.2px 1.2px at 8%  14%, #fff, transparent),
    radial-gradient(1.6px 1.6px at 14% 4%,  #fff, transparent),
    radial-gradient(1.0px 1.0px at 17% 18%, #fff, transparent),
    radial-gradient(1.5px 1.5px at 22% 9%,  #fff, transparent),
    radial-gradient(1.2px 1.2px at 26% 22%, #fff, transparent),
    radial-gradient(1.4px 1.4px at 30% 5%,  #fff, transparent),
    radial-gradient(1.0px 1.0px at 33% 16%, #fff, transparent),
    radial-gradient(1.6px 1.6px at 37% 11%, #fff, transparent),
    radial-gradient(1.2px 1.2px at 41% 24%, #fff, transparent),
    radial-gradient(1.4px 1.4px at 45% 7%,  #fff, transparent),
    radial-gradient(1.0px 1.0px at 49% 19%, #fff, transparent),
    radial-gradient(1.5px 1.5px at 53% 3%,  #fff, transparent),
    radial-gradient(1.2px 1.2px at 57% 14%, #fff, transparent),
    radial-gradient(1.6px 1.6px at 61% 26%, #fff, transparent),
    radial-gradient(1.0px 1.0px at 65% 9%,  #fff, transparent),
    radial-gradient(1.4px 1.4px at 69% 17%, #fff, transparent),
    radial-gradient(1.2px 1.2px at 73% 5%,  #fff, transparent),
    radial-gradient(1.5px 1.5px at 77% 20%, #fff, transparent),
    radial-gradient(1.0px 1.0px at 81% 11%, #fff, transparent),
    radial-gradient(1.6px 1.6px at 85% 23%, #fff, transparent),
    radial-gradient(1.2px 1.2px at 88% 7%,  #fff, transparent),
    radial-gradient(1.4px 1.4px at 92% 16%, #fff, transparent),
    radial-gradient(1.0px 1.0px at 96% 4%,  #fff, transparent),
    radial-gradient(1.2px 1.2px at 99% 19%, #fff, transparent),
    radial-gradient(1.5px 1.5px at 5%  30%, #fff, transparent),
    radial-gradient(1.0px 1.0px at 12% 36%, #fff, transparent),
    radial-gradient(1.4px 1.4px at 19% 28%, #fff, transparent),
    radial-gradient(1.2px 1.2px at 27% 33%, #fff, transparent),
    radial-gradient(1.0px 1.0px at 35% 38%, #fff, transparent),
    radial-gradient(1.6px 1.6px at 43% 30%, #fff, transparent),
    radial-gradient(1.2px 1.2px at 51% 35%, #fff, transparent),
    radial-gradient(1.4px 1.4px at 59% 28%, #fff, transparent),
    radial-gradient(1.0px 1.0px at 67% 33%, #fff, transparent),
    radial-gradient(1.5px 1.5px at 75% 39%, #fff, transparent),
    radial-gradient(1.2px 1.2px at 83% 31%, #fff, transparent),
    radial-gradient(1.4px 1.4px at 91% 36%, #fff, transparent),
    radial-gradient(1.0px 1.0px at 98% 28%, #fff, transparent),
    radial-gradient(1.2px 1.2px at 11% 42%, #fff, transparent),
    radial-gradient(1.4px 1.4px at 38% 45%, #fff, transparent),
    radial-gradient(1.0px 1.0px at 64% 43%, #fff, transparent),
    radial-gradient(1.5px 1.5px at 87% 47%, #fff, transparent);
  background-size: 100% 100%;
  z-index: 0;
}

body.night .ocean-bg::after { opacity: 0.85; }

/* shooting star — periodic streak across the night sky */
.shooting-star {
  position: absolute;
  top: 6%;
  left: -100px;
  width: 90px;
  height: 16px;
  z-index: 1;
  opacity: 0;
  pointer-events: none;
  filter: drop-shadow(0 0 6px rgba(255, 248, 214, 0.9));
}

body.night .shooting-star {
  animation: shootingStar 55s linear infinite;
  animation-delay: 18s;
}

@keyframes shootingStar {
  0%   { transform: translate(0,    0)    rotate(22deg); opacity: 0; }
  2%   { opacity: 1; }
  4%   { transform: translate(60vw, 30vh) rotate(22deg); opacity: 1; }
  5.5% { transform: translate(80vw, 40vh) rotate(22deg); opacity: 0; }
  100% { transform: translate(80vw, 40vh) rotate(22deg); opacity: 0; }
}

@media (prefers-reduced-motion: reduce) {
  .shooting-star { animation: none !important; opacity: 0; }
}

/* lighthouse beacon — bigger, warmer at night */
body.night .lighthouse-beacon {
  fill: rgba(255, 230, 150, 0.95);
}

/* slightly tinted canopy hue at dusk and night */
body.dusk .island, body.night .island { filter: drop-shadow(0 8px 18px rgba(15, 37, 72, 0.35)) brightness(0.85); }
body.night .island { filter: drop-shadow(0 8px 18px rgba(15, 37, 72, 0.35)) brightness(0.55) hue-rotate(-10deg); }

.visually-hidden {
  position: absolute;
  width: 1px; height: 1px;
  padding: 0; margin: -1px;
  overflow: hidden;
  clip: rect(0,0,0,0);
  white-space: nowrap;
  border: 0;
}

/* ---------- nav: jungle canopy ---------- */
.nav {
  position: sticky;
  top: 0;
  z-index: 50;
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 38px 44px 38px;   /* extra top/bottom so bamboo doesn't clip text */
  background:
    radial-gradient(ellipse 70% 100% at 50% 50%, rgba(15, 50, 30, 0.55), rgba(15, 50, 30, 0.3) 60%, transparent 100%),
    linear-gradient(180deg, #1f5a35 0%, #2a6a42 50%, #1a4a2e 100%);
  backdrop-filter: blur(8px);
  -webkit-backdrop-filter: blur(8px);
  box-shadow: 0 4px 18px rgba(15, 37, 72, 0.25);
  overflow: hidden;
}

/* dense banana leaf wallpaper — cartoon overlapping leaves as a CSS background */
.nav-jungle {
  position: absolute;
  inset: 0;
  pointer-events: none;
  z-index: 0;
  overflow: hidden;
  background-color: #1a4a2e;
  background-image:
    url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1200 180' preserveAspectRatio='xMidYMid slice'><rect width='1200' height='180' fill='%231a4a2e'/><g stroke='%230f3a22' stroke-width='2'><g transform='translate(-80,40) rotate(-26)' fill='%23246b3e'><path d='M0,30 Q160,2 320,28 Q160,56 0,30 Z'/><path d='M4,30 Q160,32 316,28' stroke='%230f3a22' stroke-width='1.4' fill='none'/></g><g transform='translate(160,-30) rotate(28)' fill='%23246b3e'><path d='M0,30 Q160,4 320,28 Q160,56 0,30 Z'/><path d='M4,30 Q160,32 316,28' stroke='%230f3a22' stroke-width='1.4' fill='none'/></g><g transform='translate(380,40) rotate(-18)' fill='%23246b3e'><path d='M0,30 Q170,2 340,28 Q170,56 0,30 Z'/></g><g transform='translate(640,-20) rotate(22)' fill='%23246b3e'><path d='M0,30 Q160,4 320,28 Q160,56 0,30 Z'/><path d='M4,30 Q160,32 316,28' stroke='%230f3a22' stroke-width='1.4' fill='none'/></g><g transform='translate(880,30) rotate(-22)' fill='%23246b3e'><path d='M0,30 Q170,2 340,28 Q170,56 0,30 Z'/></g><g transform='translate(1080,-20) rotate(20)' fill='%23246b3e'><path d='M0,30 Q160,4 320,28 Q160,56 0,30 Z'/><path d='M4,30 Q160,32 316,28' stroke='%230f3a22' stroke-width='1.4' fill='none'/></g></g><g stroke='%231a4a2e' stroke-width='2'><g transform='translate(-100,80) rotate(-32)' fill='%233a8a55'><path d='M0,30 Q150,4 300,26 Q150,54 0,30 Z'/><path d='M4,30 Q150,32 296,26' stroke='%231a4a2e' stroke-width='1.3' fill='none'/></g><g transform='translate(80,100) rotate(14)' fill='%233a8a55'><path d='M0,30 Q160,4 320,28 Q160,56 0,30 Z'/><path d='M4,30 Q160,32 316,28' stroke='%231a4a2e' stroke-width='1.3' fill='none'/></g><g transform='translate(280,80) rotate(-12)' fill='%233a8a55'><path d='M0,30 Q150,4 300,26 Q150,54 0,30 Z'/><path d='M4,30 Q150,32 296,26' stroke='%231a4a2e' stroke-width='1.3' fill='none'/></g><g transform='translate(480,100) rotate(20)' fill='%233a8a55'><path d='M0,30 Q160,4 320,28 Q160,56 0,30 Z'/></g><g transform='translate(680,80) rotate(-15)' fill='%233a8a55'><path d='M0,30 Q150,4 300,26 Q150,54 0,30 Z'/><path d='M4,30 Q150,32 296,26' stroke='%231a4a2e' stroke-width='1.3' fill='none'/></g><g transform='translate(880,110) rotate(18)' fill='%233a8a55'><path d='M0,30 Q160,4 320,28 Q160,56 0,30 Z'/></g><g transform='translate(1080,80) rotate(-22)' fill='%233a8a55'><path d='M0,30 Q150,4 300,26 Q150,54 0,30 Z'/><path d='M4,30 Q150,32 296,26' stroke='%231a4a2e' stroke-width='1.3' fill='none'/></g></g><g stroke='%23246b3e' stroke-width='1.6'><g transform='translate(40,140) rotate(8)' fill='%2362a87a'><path d='M0,30 Q100,8 200,28 Q100,48 0,30 Z'/></g><g transform='translate(280,150) rotate(-12)' fill='%2362a87a'><path d='M0,30 Q100,8 200,28 Q100,48 0,30 Z'/></g><g transform='translate(520,140) rotate(14)' fill='%2362a87a'><path d='M0,30 Q100,8 200,28 Q100,48 0,30 Z'/></g><g transform='translate(760,150) rotate(-10)' fill='%2362a87a'><path d='M0,30 Q100,8 200,28 Q100,48 0,30 Z'/></g><g transform='translate(1000,140) rotate(12)' fill='%2362a87a'><path d='M0,30 Q100,8 200,28 Q100,48 0,30 Z'/></g></g></svg>");
  background-size: cover;
  background-repeat: no-repeat;
  background-position: center;
}

/* darken the wallpaper slightly for text legibility */
.nav-jungle::after {
  content: "";
  position: absolute;
  inset: 0;
  background:
    radial-gradient(ellipse 50% 100% at 30% 50%, rgba(15, 50, 30, 0.45), transparent 70%),
    radial-gradient(ellipse 50% 100% at 80% 50%, rgba(15, 50, 30, 0.3),  transparent 70%);
}

/* bamboo frame around the nav — weathered, with color variation, wear, and irregular knuckles */
.nav-bamboo {
  position: absolute;
  left: 0;
  right: 0;
  height: 22px;
  z-index: 4;
  pointer-events: none;
  background-image:
    url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 800 22' preserveAspectRatio='none'><defs><linearGradient id='b' x1='0' y1='0' x2='0' y2='1'><stop offset='0' stop-color='%237a4a2a'/><stop offset='0.12' stop-color='%23c8843a'/><stop offset='0.32' stop-color='%23f0c878'/><stop offset='0.5' stop-color='%23f5d090'/><stop offset='0.7' stop-color='%23d4a263'/><stop offset='0.92' stop-color='%238e5a2a'/><stop offset='1' stop-color='%235a3818'/></linearGradient></defs><rect width='800' height='22' fill='url(%23b)'/><ellipse cx='90' cy='11' rx='52' ry='11' fill='%23ffffff' opacity='0.10'/><ellipse cx='240' cy='11' rx='42' ry='10' fill='%235a3818' opacity='0.13'/><ellipse cx='420' cy='11' rx='58' ry='11' fill='%23ffffff' opacity='0.07'/><ellipse cx='560' cy='11' rx='38' ry='10' fill='%235a3818' opacity='0.11'/><ellipse cx='720' cy='11' rx='44' ry='9' fill='%23ffffff' opacity='0.08'/><ellipse cx='62' cy='14' rx='7' ry='2' fill='%233a1c08' opacity='0.55'/><ellipse cx='208' cy='8' rx='9' ry='2' fill='%233a1c08' opacity='0.5'/><ellipse cx='266' cy='16' rx='5' ry='1.5' fill='%233a1c08' opacity='0.45'/><ellipse cx='382' cy='14' rx='6' ry='2' fill='%233a1c08' opacity='0.55'/><ellipse cx='450' cy='9' rx='8' ry='2' fill='%233a1c08' opacity='0.45'/><ellipse cx='544' cy='15' rx='5' ry='1.5' fill='%233a1c08' opacity='0.5'/><ellipse cx='600' cy='8' rx='7' ry='2' fill='%233a1c08' opacity='0.5'/><ellipse cx='704' cy='13' rx='6' ry='2' fill='%233a1c08' opacity='0.5'/><ellipse cx='764' cy='8' rx='6' ry='2' fill='%233a1c08' opacity='0.45'/><line x1='128' y1='4' x2='138' y2='18' stroke='%233a1c08' stroke-width='0.5' opacity='0.5'/><line x1='292' y1='6' x2='298' y2='17' stroke='%233a1c08' stroke-width='0.4' opacity='0.4'/><line x1='358' y1='3' x2='364' y2='19' stroke='%233a1c08' stroke-width='0.5' opacity='0.5'/><line x1='498' y1='5' x2='507' y2='17' stroke='%233a1c08' stroke-width='0.4' opacity='0.45'/><line x1='628' y1='4' x2='636' y2='18' stroke='%233a1c08' stroke-width='0.5' opacity='0.5'/><line x1='742' y1='7' x2='748' y2='16' stroke='%233a1c08' stroke-width='0.3' opacity='0.4'/><g fill='%237a4a2a'><rect x='154' y='-1' width='8' height='24'/><rect x='318' y='-1' width='8' height='24'/><rect x='488' y='-1' width='8' height='24'/><rect x='670' y='-1' width='8' height='24'/></g><g fill='%235a3818'><rect x='156' y='-1' width='4' height='24'/><rect x='320' y='-1' width='4' height='24'/><rect x='490' y='-1' width='4' height='24'/><rect x='672' y='-1' width='4' height='24'/></g><g fill='%235a3818' opacity='0.75'><ellipse cx='158' cy='1' rx='8' ry='4'/><ellipse cx='158' cy='21' rx='8' ry='4'/><ellipse cx='322' cy='1' rx='8' ry='4'/><ellipse cx='322' cy='21' rx='8' ry='4'/><ellipse cx='492' cy='1' rx='8' ry='4'/><ellipse cx='492' cy='21' rx='8' ry='4'/><ellipse cx='674' cy='1' rx='8' ry='4'/><ellipse cx='674' cy='21' rx='8' ry='4'/></g><g stroke='%23fff8e0' stroke-width='0.5' opacity='0.4' fill='none'><path d='M150,3 Q158,5 164,3'/><path d='M314,3 Q322,5 328,3'/><path d='M484,3 Q492,5 498,3'/><path d='M666,3 Q674,5 680,3'/></g><line x1='0' y1='1.6' x2='800' y2='1.6' stroke='%23fff8e0' stroke-width='0.8' opacity='0.45'/><line x1='0' y1='20.6' x2='800' y2='20.6' stroke='%233a1c08' stroke-width='0.9' opacity='0.65'/></svg>");
  background-size: 800px 100%;
  background-repeat: repeat-x;
  box-shadow: 0 3px 10px rgba(0, 0, 0, 0.4), inset 0 1px 0 rgba(255, 240, 200, 0.4);
  border-top:    1px solid rgba(58, 28, 6, 0.6);
  border-bottom: 1px solid rgba(58, 28, 6, 0.6);
}

.nav-bamboo-top    { top:    0; }
.nav-bamboo-bottom { bottom: 0; }

/* hanging monkey on the branch — gentle pendulum swing */
.hanging-monkey {
  transform-origin: center top;
  transform-box: fill-box;
  animation: monkeyHang 4.5s ease-in-out infinite;
}

@keyframes monkeyHang {
  0%, 100% { transform: rotate(-7deg); }
  50%      { transform: rotate(7deg);  }
}

/* On-brand nav decoration: tropical motifs (hibiscus, monstera, lime, pineapple)
   drift slowly across the nav with subtle bobbing and rotation */
.nav-lava {
  position: absolute;
  inset: 0;
  pointer-events: none;
  z-index: 0;
  overflow: hidden;
}

.nav-deco {
  position: absolute;
  display: block;
  will-change: transform;
  filter: drop-shadow(0 2px 6px rgba(15, 37, 72, 0.12));
}

/* ---- Branch hanging across the nav with a chameleon ---- */
.nav-branch {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  pointer-events: none;
  filter: drop-shadow(0 4px 10px rgba(0, 0, 0, 0.4));
}

.chameleon {
  transform-origin: center;
  animation: chameleonWalk 36s linear infinite;
}

/* chameleon walks along the slope of the branch (path goes from upper-left to lower-right).
   Linear easing + closely spaced keyframes = smooth steady walk, no racing. */
@keyframes chameleonWalk {
  0%   { transform: translate(80px,  21px)  scaleX(1);  }
  10%  { transform: translate(280px, 38px)  scaleX(1);  }
  20%  { transform: translate(480px, 64px)  scaleX(1);  }
  30%  { transform: translate(700px, 96px)  scaleX(1);  }
  40%  { transform: translate(900px, 114px) scaleX(1);  }
  46%  { transform: translate(900px, 114px) scaleX(1);  }
  47%  { transform: translate(900px, 114px) scaleX(-1); }
  53%  { transform: translate(900px, 114px) scaleX(-1); }
  63%  { transform: translate(700px, 96px)  scaleX(-1); }
  73%  { transform: translate(480px, 64px)  scaleX(-1); }
  83%  { transform: translate(280px, 38px)  scaleX(-1); }
  93%  { transform: translate(80px,  21px)  scaleX(-1); }
  98%  { transform: translate(80px,  21px)  scaleX(-1); }
  99%  { transform: translate(80px,  21px)  scaleX(1);  }
  100% { transform: translate(80px,  21px)  scaleX(1);  }
}

.chameleon-tongue {
  transform-origin: 34px -3px;
  animation: tongueFlick 9s ease-in-out infinite;
  opacity: 0;
}

/* chameleon legs step in alternating pairs as it walks */
.cham-leg {
  transform-box: fill-box;
  transform-origin: top center;
  animation: chamLegStep 0.6s ease-in-out infinite alternate;
}

.cham-leg.cham-mid { animation-delay: -0.3s; }   /* opposite phase */
.cham-leg.cham-back { animation-delay: 0s; }     /* in phase with front */

@keyframes chamLegStep {
  0%   { transform: translateY(0)    rotate(0deg);  }
  100% { transform: translateY(-2px) rotate(-6deg); }
}

/* caterpillar feet ripple in a peristaltic wave (back to front) */
.cat-foot {
  animation: catFootStep 0.7s ease-in-out infinite;
  transform-box: fill-box;
  transform-origin: top center;
}
.cat-foot.f1 { animation-delay:    0s; }
.cat-foot.f2 { animation-delay: -0.14s; }
.cat-foot.f3 { animation-delay: -0.28s; }
.cat-foot.f4 { animation-delay: -0.42s; }
.cat-foot.f5 { animation-delay: -0.56s; }

@keyframes catFootStep {
  0%, 60%, 100% { transform: translateY(0); }
  30%           { transform: translateY(-1.8px); }
}

/* caterpillar inches along the branch slowly, opposite direction from the chameleon */
.caterpillar {
  transform-origin: center;
  animation: caterpillarCrawl 60s linear infinite;
}

@keyframes caterpillarCrawl {
  0%   { transform: translate(960px, 124px) scaleX(-1); }
  18%  { transform: translate(740px, 102px) scaleX(-1); }
  36%  { transform: translate(520px, 70px)  scaleX(-1); }
  54%  { transform: translate(280px, 42px)  scaleX(-1); }
  70%  { transform: translate(120px, 26px)  scaleX(-1); }
  72%  { transform: translate(120px, 26px)  scaleX(1);  }
  86%  { transform: translate(280px, 42px)  scaleX(1);  }
  100% { transform: translate(520px, 70px)  scaleX(1);  }
}

@keyframes tongueFlick {
  0%, 88%, 100% { transform: scaleX(0.2); opacity: 0; }
  90%           { transform: scaleX(1.6); opacity: 0.95; }
  92%           { transform: scaleX(0.2); opacity: 0; }
}

/* ---- ANIMALS (sparse, brief appearances) ---- */
.nav-animal {
  filter: drop-shadow(0 3px 8px rgba(0, 0, 0, 0.35));
}

.nav-deco.toucan {
  width: 80px; height: 56px;
  top: 6px; left: -160px;
  opacity: 0;
  animation: navAnimalFly 200s linear infinite;
  animation-delay: 40s;
}

.nav-deco.parrot {
  width: 72px; height: 60px;
  top: 30px; left: -160px;
  opacity: 0;
  animation: navAnimalFly 280s linear infinite;
  animation-delay: 150s;
}

.nav-deco.butterfly { display: none; }

.nav-deco.monkey {
  width: 60px; height: 80px;
  top: -86px; left: 64%;
  opacity: 0;
  animation: monkeyDrop 360s ease-in-out infinite;
  animation-delay: 220s;
  transform-origin: 30px 0;
}


/* fly across nav — ~14% of cycle visible */
@keyframes navAnimalFly {
  0%   { transform: translate(0,    0)    rotate(0deg); opacity: 0;    }
  3%   {                                                  opacity: 0.95; }
  6%   { transform: translate(30vw, -6px) rotate(2deg);  }
  9%   { transform: translate(60vw,  6px) rotate(-3deg); }
  12%  { transform: translate(95vw, -4px) rotate(2deg);  opacity: 0.95; }
  14%  { transform: translate(115vw, 0);                  opacity: 0;    }
  100% { transform: translate(115vw, 0);                  opacity: 0;    }
}

/* keep jet ski in the LEFT half of the screen so it never crosses the island */
.jetski { animation-name: jetskiZipLeft; }

@keyframes jetskiZipLeft {
  0%   { transform: translate(0,    0)    rotate(-2deg); opacity: 0;    }
  4%   {                                                  opacity: 1;    }
  10%  { transform: translate(8vw,  -3px) rotate(-3deg);                 }
  20%  { transform: translate(20vw,  1px) rotate( 1deg);                 }
  30%  { transform: translate(35vw, -2px) rotate(-2deg);                 }
  38%  { transform: translate(50vw, 0)    rotate(0deg);  opacity: 1;    }
  40%  { transform: translate(55vw, 0);                  opacity: 0;    }
  100% { transform: translate(55vw, 0);                  opacity: 0;    }
}

/* butterfly: meandering wandering path */
@keyframes butterflyFlutter {
  0%   { transform: translate(0,     0)   rotate(0deg);  opacity: 0;    }
  4%   {                                                   opacity: 0.95; }
  8%   { transform: translate(15vw, -10px) rotate(-12deg); }
  14%  { transform: translate(35vw,  8px)  rotate(10deg);  }
  20%  { transform: translate(55vw, -8px)  rotate(-8deg);  }
  26%  { transform: translate(75vw,  6px)  rotate(12deg);  }
  30%  { transform: translate(95vw, -4px)  rotate(0deg);   opacity: 0.95; }
  33%  { transform: translate(115vw, 0);                    opacity: 0;    }
  100% { transform: translate(115vw, 0);                    opacity: 0;    }
}

/* monkey drops down on a vine, peeks around, then climbs back up */
@keyframes monkeyDrop {
  0%   { transform: translateY(0);     opacity: 0;    }
  2%   {                                  opacity: 0.95; }
  5%   { transform: translateY(120px); opacity: 0.95; }
  6%   { transform: translateY(112px) rotate(-3deg); }
  7%   { transform: translateY(120px) rotate( 3deg); }
  8%   { transform: translateY(112px) rotate(-3deg); }
  9%   { transform: translateY(120px) rotate( 0deg); }
  12%  { transform: translateY(120px) rotate( 0deg); opacity: 0.95; }
  16%  { transform: translateY(0)     rotate( 0deg); opacity: 0;    }
  100% { transform: translateY(0)     rotate( 0deg); opacity: 0;    }
}

/* butterfly wing flap */
.butterfly-wings {
  transform-origin: 25px 20px;
  animation: butterflyWings 0.18s ease-in-out infinite alternate;
}

@keyframes butterflyWings {
  0%   { transform: scaleX(1);    }
  100% { transform: scaleX(0.55); }
}

/* bird wing flap (toucan + parrot) */
.bird-wing {
  transform-box: fill-box;
  transform-origin: 0% 80%;
  animation: birdFlap 0.28s ease-in-out infinite alternate;
}

@keyframes birdFlap {
  0%   { transform: rotate(-8deg)  scaleY(1);   }
  100% { transform: rotate(20deg) scaleY(0.7); }
}

.nav-brand, .nav-links { position: relative; z-index: 1; }

.nav-brand {
  display: flex;
  align-items: center;
  gap: 14px;
  text-decoration: none;
  font-family: 'Lobster', cursive;
  font-weight: 400;
  font-size: 2.6rem;
  letter-spacing: 0.005em;
  line-height: 1;
  text-transform: none;
  transition: transform 0.25s ease;
  padding-top: 4px;
}

.nav-brand span {
  position: relative;
  color: #ff6b35;
  text-shadow:
    1px 2px 0 rgba(0, 0, 0, 0.35),
    0 4px 8px rgba(0, 0, 0, 0.35);
}

/* light-blue wavy underline beneath the wordmark, like the reference */
.nav-brand span::after {
  content: "";
  position: absolute;
  left: 6%;
  right: 6%;
  bottom: -6px;
  height: 8px;
  background-image:
    url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 80 8' preserveAspectRatio='none'><path d='M2,4 Q10,1 20,4 T40,4 T60,4 T78,4' stroke='%237ec9e5' stroke-width='2' fill='none' stroke-linecap='round'/></svg>");
  background-repeat: no-repeat;
  background-size: 100% 100%;
  opacity: 0.95;
}

@keyframes brandGradientFlow {
  0%, 100% { background-position:   0% 50%; }
  50%      { background-position: 100% 50%; }
}

.nav-brand:hover { transform: translateY(-1px) rotate(-1.5deg); }
.nav-brand:hover img { animation: brandWobble 0.6s cubic-bezier(0.36, 0.07, 0.19, 0.97); }

@keyframes brandWobble {
  0%, 100% { transform: rotate(0deg);  }
  25%      { transform: rotate(-8deg); }
  50%      { transform: rotate( 6deg); }
  75%      { transform: rotate(-3deg); }
}

.nav-brand img {
  height: 124px;
  width: auto;
  filter: drop-shadow(0 4px 10px rgba(15, 37, 72, 0.22));
}

.nav-links {
  display: flex;
  align-items: center;
  gap: 10px;
}

.nav-link {
  position: relative;
  font-family: 'Fredoka', sans-serif;
  font-weight: 600;
  font-size: 1.35rem;
  color: #fef0c5;
  text-decoration: none;
  padding: 10px 20px;
  transition: color 0.25s, transform 0.15s;
  text-shadow: 0 1px 4px rgba(0, 0, 0, 0.55);
}

/* vertical pipe separator after every nav-link except the last (which is the CTA) */
.nav-link + .nav-link::before {
  content: "";
  position: absolute;
  left: -1px;
  top: 22%;
  bottom: 22%;
  width: 1px;
  background: rgba(255, 248, 214, 0.35);
}

/* coral underline that grows in on hover/active */
.nav-link::after {
  content: "";
  position: absolute;
  left: 20px;
  right: 20px;
  bottom: 2px;
  height: 3px;
  border-radius: 999px;
  background: var(--coral);
  transform: scaleX(0);
  transform-origin: center;
  transition: transform 0.3s cubic-bezier(0.34, 1.56, 0.64, 1);
}

.nav-link:hover {
  color: #ffffff;
  transform: translateY(-1px);
}

.nav-link:hover::after { transform: scaleX(1); }

.nav-link.active {
  color: #ffffff;
  font-weight: 700;
}
.nav-link.active::after { transform: scaleX(1); }

.nav-cta {
  font-family: 'Fredoka', sans-serif;
  font-weight: 700;
  font-size: 1.35rem;
  color: var(--white);
  background: var(--coral);
  text-decoration: none;
  padding: 14px 30px;
  border-radius: 999px;
  margin-left: 10px;
  box-shadow: 0 5px 14px rgba(255, 140, 66, 0.4);
  transition: transform 0.15s, box-shadow 0.2s;
}

.nav-cta:hover {
  transform: translateY(-1px);
  box-shadow: 0 8px 20px rgba(255, 140, 66, 0.5);
}

@media (max-width: 900px) {
  .nav { padding: 32px 22px; }
  .nav-brand { font-size: 2.05rem; gap: 12px; }
  .nav-brand img { height: 92px; }
  .nav-link { padding: 10px 16px; font-size: 1.1rem; }
  .nav-cta { padding: 11px 22px; font-size: 1.1rem; }
  .nav-bamboo { height: 16px; }
}

@media (max-width: 540px) {
  .nav { padding: 26px 14px; }
  .nav-brand span { display: none; }
  .nav-brand img { height: 76px; }
  .nav-link { padding: 8px 12px; font-size: 1rem; }
  .nav-cta { padding: 9px 18px; font-size: 1rem; }
  .nav-bamboo { height: 14px; }
}

@media (max-width: 540px) {
  .nav-link-story { display: none; }
}

@media (max-width: 420px) {
  .nav-link[href="#hours"] { display: none; }
}

/* ---------- ocean background ---------- */
/* ocean scene confined to the hero area — scrolls away naturally instead of
   ghost-floating across every section below */
.ocean-bg {
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  height: 100vh;
  z-index: 0;
  pointer-events: none;
  overflow: hidden;
}

/* horizon line — subtle band where sky meets distant sea, behind everything */
.horizon {
  position: absolute;
  left: 0;
  right: 0;
  bottom: 200px;
  height: 30px;
  background: linear-gradient(180deg,
    rgba(150, 200, 220, 0)   0%,
    rgba(120, 180, 210, 0.35) 60%,
    rgba(100, 160, 200, 0.5)  100%);
  z-index: 0;
  pointer-events: none;
}

/* sun glow */
.sun {
  position: absolute;
  top: 8%;
  right: 12%;
  width: 280px;
  height: 280px;
  border-radius: 50%;
  background: radial-gradient(circle at center,
    rgba(255, 230, 160, 0.7) 0%,
    rgba(255, 200, 120, 0.35) 30%,
    rgba(255, 180, 90, 0) 70%);
  filter: blur(2px);
}

/* island silhouette — pulled back into the distance, sits above the wave line */
.island {
  position: absolute;
  bottom: 150px;
  right: 60px;
  width: 540px;
  max-width: 55vw;
  height: auto;
  opacity: 1;
  z-index: 5;
  filter: drop-shadow(0 8px 18px rgba(15, 37, 72, 0.22));
}

/* palms are clickable for the coconut easter egg */
.island g.palm {
  pointer-events: auto;
  cursor: pointer;
}

/* shells on the beach — clickable, kicked into the water on tap */
.island g.shell {
  pointer-events: auto;
  cursor: pointer;
  transition: filter 0.2s;
}

.island g.shell:hover {
  filter: brightness(1.15) drop-shadow(0 1px 2px rgba(0,0,0,0.4));
}

.island g.shell.kicked {
  animation: shellKick 1.6s cubic-bezier(0.5, 0.05, 0.7, 0.85) forwards;
  pointer-events: none;
}

@keyframes shellKick {
  0%   { transform: translate(0, 0)     rotate(0deg);   opacity: 1; }
  18%  { transform: translate(2px, -4px) rotate(60deg);  opacity: 1; }   /* small hop */
  45%  { transform: translate(8px, 8px)  rotate(220deg); opacity: 1; }   /* tumbling */
  70%  { transform: translate(14px, 22px) rotate(420deg); opacity: 0.85; } /* hits water */
  100% { transform: translate(20px, 40px) rotate(540deg); opacity: 0; }    /* sinks under */
}

/* tiny splash that pops out when a shell hits the water */
.shell-splash {
  position: absolute;
  pointer-events: none;
  width: 0; height: 0;
  border-radius: 50%;
  background: radial-gradient(circle, rgba(255,255,255,0.85) 0%, rgba(255,255,255,0.4) 50%, transparent 70%);
  transform: translate(-50%, -50%);
  animation: splashPop 0.7s ease-out forwards;
  z-index: 7;
}

@keyframes splashPop {
  0%   { width: 0;    height: 0;    opacity: 0.95; }
  100% { width: 36px; height: 36px; opacity: 0;    }
}

/* coconuts: regrow gradually when not fallen */
.coconut {
  transform-box: fill-box;
  transform-origin: center;
  transition: opacity 60s ease-in;   /* slow regrow over a minute when class clears */
}

/* falling coconut — drops, rotates, lands, fades */
.coconut.fallen {
  animation: coconutFall 1.6s cubic-bezier(0.55, 0.06, 0.7, 0.85) forwards;
}

@keyframes coconutFall {
  0%    { transform: translate(0, 0)     rotate(0deg);   opacity: 1; }
  70%   { transform: translate(2px, 95px) rotate(540deg); opacity: 1; }
  78%   { transform: translate(5px, 88px) rotate(560deg); opacity: 1; }   /* tiny bounce */
  86%   { transform: translate(2px, 95px) rotate(580deg); opacity: 1; }
  100%  { transform: translate(2px, 95px) rotate(580deg); opacity: 0; }
}

/* hidden state after falling — kept off-screen until cycle resets */
.coconut.hidden {
  opacity: 0;
  pointer-events: none;
}

/* lighthouse beacon — only active at dusk/night/dawn, dark during the day */
.lighthouse-beacon {
  transform-origin: center;
  transform-box: fill-box;
  opacity: 0;            /* default: off (daytime) */
  transition: opacity 1.5s ease;
}

/* dawn/dusk: dim warming-up pulse */
body.dawn .lighthouse-beacon,
body.dusk .lighthouse-beacon {
  animation: beaconPulseDim 5s ease-in-out infinite;
}

/* night: full bright pulse */
body.night .lighthouse-beacon {
  animation: beaconPulse 4.5s ease-in-out infinite;
}

@keyframes beaconPulse {
  0%, 100% { opacity: 0.4;  transform: scale(0.9);  }
  50%      { opacity: 1;    transform: scale(1.15); }
}

@keyframes beaconPulseDim {
  0%, 100% { opacity: 0.15; transform: scale(0.92); }
  50%      { opacity: 0.55; transform: scale(1.06); }
}

/* cruise ship — drifts slowly across the LEFT half only; doesn't approach the island */
.cruise {
  position: absolute;
  bottom: 175px;
  left: -240px;
  width: 220px;
  height: auto;
  z-index: 0;
  opacity: 0;
  filter: drop-shadow(0 4px 8px rgba(15, 37, 72, 0.22));
  animation: cruiseDrift 300s linear infinite;
  animation-delay: 75s;
}

@keyframes cruiseDrift {
  0%   { transform: translateX(0);     opacity: 0;   }
  6%   {                                opacity: 0.95; }
  44%  { transform: translateX(45vw);  opacity: 0.95; }
  50%  { transform: translateX(50vw);  opacity: 0;   }
  100% { transform: translateX(50vw);  opacity: 0;   }
}

/* airplane with banner — rare flyover, fully across the top */
.plane {
  position: absolute;
  top: 12%;
  left: -360px;
  width: 280px;
  height: auto;
  z-index: 4;
  opacity: 0;
  filter: drop-shadow(0 3px 6px rgba(15, 37, 72, 0.2));
  animation: planeFly 300s linear infinite;
  animation-delay: 200s;
}

@keyframes planeFly {
  0%   { transform: translateX(0);      opacity: 0;   }
  1%   {                                 opacity: 1;   }
  10%  { transform: translateX(80vw);   opacity: 1;   }
  11%  { transform: translateX(110vw);  opacity: 0;   }
  100% { transform: translateX(110vw);  opacity: 0;   }
}

/* pelican — Sanibel's iconic seabird, distant on the horizon */
.pelican {
  position: absolute;
  bottom: 280px;
  left: -100px;
  width: 56px;
  height: auto;
  z-index: 3;            /* in front of horizon, behind island */
  opacity: 0;
  filter: drop-shadow(0 3px 6px rgba(15, 37, 72, 0.22));
  animation: pelicanGlide 180s linear infinite;
  animation-delay: 60s;
}

.pelican-wing {
  transform-origin: 48px 22px;
  animation: pelicanFlap 1.1s ease-in-out infinite alternate;
}

@keyframes pelicanFlap {
  0%   { transform: rotate(0deg)    scaleY(1);   }
  100% { transform: rotate(-12deg) scaleY(0.85); }
}

@keyframes pelicanGlide {
  0%   { transform: translate(0,    0)    rotate(-2deg); opacity: 0;    }
  3%   {                                                  opacity: 0.95; }
  20%  { transform: translate(40vw, -8px) rotate(2deg);                  }
  40%  { transform: translate(80vw, 4px)  rotate(-1deg);                 }
  48%  { transform: translate(110vw, 0)   rotate(0deg);  opacity: 0.95; }
  50%  { transform: translate(115vw, 0);                  opacity: 0;    }
  100% { transform: translate(115vw, 0);                  opacity: 0;    }
}

/* sea turtle — Sanibel signature, swims slowly across the foreground water */
.seaturtle { display: none; }
.seaturtle-disabled-orig {
  position: absolute;
  bottom: 38px;
  left: -80px;
  width: 32px;
  height: auto;
  z-index: 6;
  opacity: 0;
  filter: drop-shadow(0 4px 6px rgba(15, 37, 72, 0.25));
  animation: turtleSwim 270s linear infinite;
  animation-delay: 135s;
}

/* turtle stays in the LEFT third of the screen — never near the island */
@keyframes turtleSwim {
  0%   { transform: translate(0,    0)   rotate(-2deg); opacity: 0;   }
  4%   {                                                  opacity: 0.85; }
  20%  { transform: translate(7vw,  3px) rotate(1deg);                  }
  35%  { transform: translate(14vw, -2px) rotate(-2deg);                }
  50%  { transform: translate(21vw, 3px)  rotate(2deg);                 }
  56%  { transform: translate(25vw, 0)    rotate(0deg);  opacity: 0;   }
  100% { transform: translate(25vw, 0)    rotate(0deg);  opacity: 0;   }
}

/* crab — disabled per user feedback */
.crab { display: none; }
.crab-disabled-orig {
  position: absolute;
  bottom: 92px;
  left: 6vw;
  width: 28px;
  height: auto;
  z-index: 6;
  opacity: 0;
  filter: drop-shadow(0 2px 4px rgba(15, 37, 72, 0.3));
  animation: crabSidle 180s ease-in-out infinite;
  animation-delay: 155s;
}

@keyframes crabSidle {
  0%   { transform: translateX(0);     opacity: 0;    }
  3%   {                                opacity: 0.95; }
  10%  { transform: translateX(28px);                   }
  20%  { transform: translateX(64px);                   }
  30%  { transform: translateX(100px);                  }
  35%  { transform: translateX(100px); opacity: 0.95; }
  38%  { transform: translateX(100px); opacity: 0;    }
  100% { transform: translateX(100px); opacity: 0;    }
}

/* parasailer — drifts slowly across the sky on the horizon, BEHIND the island */
.parasail { display: none; }
.parasail-disabled-orig {
  position: absolute;
  bottom: 230px;
  left: -100px;
  width: 70px;
  height: auto;
  z-index: 0;
  opacity: 0;
  filter: drop-shadow(0 4px 8px rgba(15, 37, 72, 0.15));
  animation: parasailDrift 300s linear infinite;
  animation-delay: 175s;
}

@keyframes parasailDrift {
  0%   { transform: translate(0,    0)    rotate(-2deg); opacity: 0;    }
  4%   {                                                  opacity: 0.85; }
  46%  { transform: translate(50vw, -8px)  rotate(2deg);  opacity: 0.85; }
  50%  { transform: translate(60vw, -4px)  rotate(0deg);  opacity: 0;    }
  100% { transform: translate(60vw, -4px)  rotate(0deg);  opacity: 0;    }
}

/* message in a bottle — small, bobs in the water surface, half-submerged look */
.bottle {
  position: absolute;
  bottom: 72px;          /* sits down at wave-1 surface */
  left: -60px;
  width: 36px;           /* smaller — it's a bottle */
  height: auto;
  z-index: 6;            /* foreground, in front of island */
  opacity: 0;
  filter: drop-shadow(0 2px 4px rgba(15, 37, 72, 0.3));
  animation: bottleDrift 280s linear infinite;
  animation-delay: 230s;
  /* clip the lower portion so it looks half-submerged */
  -webkit-mask-image: linear-gradient(180deg, #000 65%, rgba(0,0,0,0.7) 80%, rgba(0,0,0,0.4) 100%);
          mask-image: linear-gradient(180deg, #000 65%, rgba(0,0,0,0.7) 80%, rgba(0,0,0,0.4) 100%);
}

@keyframes bottleDrift {
  0%   { transform: translate(0,    0)    rotate(-6deg); opacity: 0;    }
  4%   {                                                   opacity: 0.95; }
  10%  { transform: translate(15vw, -2px) rotate(5deg);                   }
  18%  { transform: translate(35vw, 1px)  rotate(-4deg);                  }
  26%  { transform: translate(55vw, -2px) rotate(6deg);                   }
  34%  { transform: translate(80vw, 1px)  rotate(-3deg);                  }
  40%  { transform: translate(110vw, 0)   rotate(0deg);  opacity: 0.95; }
  42%  { transform: translate(120vw, 0);                   opacity: 0;    }
  100% { transform: translate(120vw, 0);                   opacity: 0;    }
}

/* jet ski — zips across foreground water, IN FRONT of island */
.jetski {
  position: absolute;
  bottom: 95px;
  left: -120px;
  width: 95px;
  height: auto;
  z-index: 6;            /* in front of island (z-index 5) */
  opacity: 0;
  filter: drop-shadow(0 4px 8px rgba(15, 37, 72, 0.3));
  animation: jetskiZip 180s linear infinite;
  animation-delay: 90s;
}

@keyframes jetskiZip {
  0%   { transform: translate(0,    0)    rotate(-2deg); opacity: 0;    }
  4%   {                                                  opacity: 1;    }
  10%  { transform: translate(20vw, -3px) rotate(-3deg);                 }
  20%  { transform: translate(45vw, 1px)  rotate( 1deg);                 }
  30%  { transform: translate(75vw, -2px) rotate(-2deg);                 }
  38%  { transform: translate(110vw, 0)   rotate(0deg);   opacity: 1;    }
  40%  { transform: translate(120vw, 0);                  opacity: 0;    }
  100% { transform: translate(120vw, 0);                  opacity: 0;    }
}

/* hot air balloon — extremely rare, drifts diagonally on the left half */
.balloon {
  position: absolute;
  bottom: 200px;
  left: -80px;
  width: 60px;
  height: auto;
  z-index: 1;
  opacity: 0;
  filter: drop-shadow(0 4px 8px rgba(15, 37, 72, 0.18));
  animation: balloonRise 480s ease-in-out infinite;
  animation-delay: 180s;
}

@keyframes balloonRise {
  0%   { transform: translate(0,    0)    rotate(-1deg); opacity: 0;   }
  2%   {                                                  opacity: 0.9; }
  10%  { transform: translate(30vw, -18vh) rotate(2deg); opacity: 0.9; }
  12%  { transform: translate(40vw, -12vh) rotate(0deg); opacity: 0;   }
  100% { transform: translate(40vw, -12vh) rotate(0deg); opacity: 0;   }
}

/* sailboat — appears occasionally, crosses behind the island, then leaves the scene */
.sailboat {
  position: absolute;
  bottom: 95px;
  left: -120px;
  width: 110px;          /* smaller — reads as more distant relative to island */
  height: auto;
  z-index: 2;            /* behind island (z-index 5), in front of cruise/horizon */
  opacity: 0;
  filter: drop-shadow(0 6px 14px rgba(15, 37, 72, 0.3));
  animation: sail 240s ease-in-out infinite;
  animation-delay: 12s;
  pointer-events: auto;  /* clickable for easter egg */
  cursor: pointer;
}

/* easter egg: 10 clicks → sailboat tips and sinks */
.sailboat.sinking {
  animation: sailSink 7s cubic-bezier(0.6, 0.05, 0.7, 0.95) forwards;
  pointer-events: none;
}

@keyframes sailSink {
  0%   { transform: rotate(0deg)   translate(0, 0);    opacity: 1; }
  10%  { transform: rotate(-18deg) translate(0, 0);    opacity: 1; }
  22%  { transform: rotate(22deg)  translate(0, 0);    opacity: 1; }
  35%  { transform: rotate(-12deg) translate(0, 0);    opacity: 1; }
  50%  { transform: rotate(45deg)  translate(0, 24px); opacity: 1; }
  70%  { transform: rotate(72deg)  translate(0, 70px); opacity: 0.85; }
  88%  { transform: rotate(95deg)  translate(0, 120px); opacity: 0.4; }
  100% { transform: rotate(105deg) translate(0, 170px); opacity: 0;   }
}

/* bubbles erupting above the sinking sailboat */
.sail-bubble {
  position: absolute;
  border-radius: 50%;
  background: radial-gradient(circle at 30% 30%, #ffffff, rgba(255,255,255,0.4) 60%, rgba(255,255,255,0));
  pointer-events: none;
  z-index: 3;
  opacity: 0;
  animation: bubbleRise 2.4s ease-out forwards;
}

@keyframes bubbleRise {
  0%   { transform: translate(0, 0)            scale(0.4); opacity: 0;    }
  10%  {                                                     opacity: 0.95; }
  100% { transform: translate(var(--bx, 0), -90px) scale(1.2); opacity: 0; }
}

@keyframes sail {
  0%   { transform: translateX(0)    translateY(0)   rotate(-1deg); opacity: 0; }
  4%   {                                                              opacity: 1; }
  10%  { transform: translateX(25vw) translateY(-4px) rotate(1deg);  }
  18%  { transform: translateX(55vw) translateY(0)    rotate(-1deg); }
  26%  { transform: translateX(85vw) translateY(-3px) rotate(1deg);  }
  32%  { transform: translateX(115vw) translateY(0)   rotate(-1deg); opacity: 1; }
  34%  { transform: translateX(125vw) translateY(0);                 opacity: 0; }
  100% { transform: translateX(125vw) translateY(0);                 opacity: 0; }
}

/* dolphins — sparse leaps; swim across LEFT half only, entering off-screen left */
.dolphin {
  position: absolute;
  width: 130px;
  height: auto;
  bottom: 110px;
  z-index: 7;
  opacity: 0;
  filter: drop-shadow(0 4px 10px rgba(15, 37, 72, 0.3));
}

.dolphin-1 {
  left: -160px;
  animation: dolphinSwim 120s linear infinite;
  animation-delay: 42s;
}

.dolphin-2 {
  left: -160px;
  width: 100px;
  bottom: 130px;
  animation: dolphinSwim 150s linear infinite;
  animation-delay: 110s;
}

/* dolphin enters from off-screen left, leaps once, exits — smooth parabolic arc */
@keyframes dolphinSwim {
  0%    { opacity: 0; transform: translate(0,    16px) rotate(-12deg); }
  2%    { opacity: 0.4; transform: translate(5vw,   8px) rotate(-18deg); }
  3%    { opacity: 1; transform: translate(8vw,    0px) rotate(-22deg); }
  4%    { opacity: 1; transform: translate(11vw, -16px) rotate(-20deg); }
  5%    { opacity: 1; transform: translate(14vw, -34px) rotate(-14deg); }
  6%    { opacity: 1; transform: translate(17vw, -50px) rotate(-6deg); }
  7%    { opacity: 1; transform: translate(20vw, -58px) rotate(2deg); }
  8%    { opacity: 1; transform: translate(23vw, -56px) rotate(10deg); }
  9%    { opacity: 1; transform: translate(26vw, -44px) rotate(16deg); }
  10%   { opacity: 1; transform: translate(29vw, -24px) rotate(22deg); }
  11%   { opacity: 1; transform: translate(33vw,  -6px) rotate(28deg); }
  12%   { opacity: 0.4; transform: translate(36vw, 10px) rotate(32deg); }
  13%   { opacity: 0; transform: translate(38vw, 18px)  rotate(34deg); }
  100%  { opacity: 0; transform: translate(38vw, 18px)  rotate(34deg); }
}

/* jumping fish — sparse, swim/leap across left half from off-screen */
.fish {
  position: absolute;
  width: 32px;
  height: auto;
  bottom: 130px;
  left: -60px;
  z-index: 7;
  opacity: 0;
  filter: drop-shadow(0 2px 5px rgba(15, 37, 72, 0.25));
}

.fish-1 {
  animation: fishSwim 90s linear infinite;
  animation-delay: 28s;
}
.fish-2 { display: none; }
.fish-3 { display: none; }

/* fish leap — smooth small arc */
@keyframes fishSwim {
  0%    { opacity: 0;   transform: translate(0,     8px) rotate(-18deg); }
  1.5%  { opacity: 0.6; transform: translate(4vw,   2px) rotate(-22deg); }
  2.5%  { opacity: 1;   transform: translate(8vw,  -8px) rotate(-15deg); }
  3.5%  { opacity: 1;   transform: translate(12vw, -18px) rotate(-6deg); }
  4.5%  { opacity: 1;   transform: translate(16vw, -22px) rotate(2deg); }
  5.5%  { opacity: 1;   transform: translate(20vw, -18px) rotate(12deg); }
  6.5%  { opacity: 1;   transform: translate(24vw, -8px)  rotate(20deg); }
  7.5%  { opacity: 0.6; transform: translate(27vw, 2px)   rotate(26deg); }
  8.5%  { opacity: 0;   transform: translate(29vw, 9px)   rotate(28deg); }
  100%  { opacity: 0;   transform: translate(29vw, 9px)   rotate(28deg); }
}

/* birds — distant seagulls, very small */
.bird {
  position: absolute;
  width: 14px;
  height: auto;
  opacity: 0.55;
  animation: fly 36s linear infinite;
}

.bird-1 { top: 9%;  left: -10%; width: 14px; animation-delay: 8s;  opacity: 0.55; }
.bird-2 { top: 13%; left: -10%; width: 11px; animation-delay: 22s; opacity: 0.42; }
.bird-3 { top: 7%;  left: -10%; width: 12px; animation-delay: 38s; opacity: 0.48; }
.bird-4 { display: none; }

@keyframes fly {
  0%   { transform: translateX(0) translateY(0); }
  25%  { transform: translateX(35vw) translateY(-12px); }
  50%  { transform: translateX(70vw) translateY(6px); }
  75%  { transform: translateX(95vw) translateY(-8px); }
  100% { transform: translateX(120vw) translateY(0); }
}

@media (max-width: 600px) {
  .sun { width: 200px; height: 200px; top: 5%; right: 5%; }
  .island { width: 480px; max-width: 95vw; right: 0; bottom: 80px; }
  .sailboat { width: 90px; bottom: 60px; }
  .cruise { width: 140px; bottom: 130px; }
  .plane { width: 200px; }
  .plane text { font-size: 11px; }
  .balloon { width: 44px; }
  .dolphin { width: 90px; bottom: 90px; }
  .dolphin-2 { width: 70px; }
  .fish { width: 24px; bottom: 105px; }
}

@media (prefers-reduced-motion: reduce) {
  .sailboat, .cruise, .plane, .balloon, .parasail, .jetski, .bottle, .pelican, .pelican-wing,
  .seaturtle, .crab, .dolphin, .fish, .bird, .logo,
  .wave-1, .wave-2, .wave-3,
  .nav-deco, .butterfly-wings, .lighthouse-beacon,
  .logo-wrap::before, .logo-wrap::after { animation: none; }
  .dolphin, .fish, .cruise, .plane, .balloon, .parasail, .jetski, .bottle, .pelican,
  .seaturtle, .crab, .nav-animal { opacity: 0; }
}

.wave {
  position: absolute;
  bottom: 0;
  left: 0;
  width: 100%;
  height: 220px;
  background-repeat: repeat-x;
  background-size: 1200px 220px;
  opacity: 0.55;
  z-index: 8;            /* foreground water, in front of distant island */
}

.wave-1 {
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1200 220'><path d='M0,120 C300,40 600,200 900,120 C1050,80 1150,100 1200,120 L1200,220 L0,220 Z' fill='%234aa8c4'/></svg>");
  bottom: 0;
  height: 200px;
  animation: waveSlide 18s linear infinite;
}

.wave-2 {
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1200 220'><path d='M0,140 C300,80 600,180 900,140 C1050,120 1150,130 1200,140 L1200,220 L0,220 Z' fill='%231d3a6b'/></svg>");
  bottom: -10px;
  height: 180px;
  opacity: 0.4;
  animation: waveSlideReverse 24s linear infinite;
}

.wave-3 {
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1200 220'><path d='M0,160 C300,120 600,200 900,160 C1050,140 1150,150 1200,160 L1200,220 L0,220 Z' fill='%23f5e0b5'/></svg>");
  bottom: -30px;
  height: 160px;
  opacity: 0.7;
  animation: waveSlide 32s linear infinite;
}

@keyframes waveSlide {
  from { background-position-x: 0; }
  to   { background-position-x: -1200px; }
}

@keyframes waveSlideReverse {
  from { background-position-x: 0; }
  to   { background-position-x: 1200px; }
}

/* ---------- hero ---------- */
.hero {
  position: relative;
  z-index: 1;
  min-height: calc(100vh - 72px);
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  padding: 36px 24px 72px;
  gap: 12px;
}

html { scroll-padding-top: 80px; }

.hero-inner {
  max-width: 720px;
  width: 100%;
  text-align: center;
  background: rgba(255, 255, 255, 0.78);
  backdrop-filter: blur(14px);
  -webkit-backdrop-filter: blur(14px);
  border: 1px solid rgba(255, 255, 255, 0.6);
  border-radius: 28px;
  padding: 40px 40px 48px;
  box-shadow: var(--shadow-lg);
}

.logo-wrap {
  position: relative;
  padding: 50px;
  width: 840px;
  max-width: 98vw;
  box-sizing: border-box;
  animation: float 5s ease-in-out infinite;
  cursor: pointer;
  perspective: 900px;
  -webkit-tap-highlight-color: transparent;
  user-select: none;
  -webkit-user-select: none;
  outline: none;
}

.logo-wrap img {
  -webkit-user-drag: none;
  user-select: none;
  -webkit-user-select: none;
}

/* Soft warm sun-glow halo behind the logo */
.logo-wrap::before {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: 50%;
  background: radial-gradient(circle at center,
    rgba(255, 240, 195, 0.7) 0%,
    rgba(255, 215, 140, 0.45) 28%,
    rgba(255, 190, 100, 0.18) 52%,
    rgba(255, 180, 90, 0) 75%);
  z-index: -1;
  animation: haloPulse 4.5s ease-in-out infinite;
}

.logo {
  width: 100%;
  height: auto;
  display: block;
  position: relative;
  filter: drop-shadow(0 14px 30px rgba(15, 37, 72, 0.35))
          drop-shadow(0 4px 10px rgba(255, 140, 66, 0.35));
  pointer-events: none;
  transform: rotateX(var(--tilt-x, 0deg)) rotateY(var(--tilt-y, 0deg));
  transform-origin: center;
  transition: transform 0.18s ease-out;
  will-change: transform;
}

/* ---------- easter egg: 5 clicks → solar aura ---------- */
.logo-wrap.logo-activated::before {
  inset: -18%;
  background:
    radial-gradient(ellipse 70% 85% at 42% 40%, rgba(255, 252, 230, 0.85) 0%, transparent 60%),
    radial-gradient(ellipse 85% 75% at 58% 55%, rgba(255, 215, 130, 0.70) 0%, transparent 66%),
    radial-gradient(ellipse 75% 90% at 48% 50%, rgba(255, 170,  85, 0.50) 0%, transparent 72%),
    radial-gradient(ellipse 100% 95% at 52% 55%, rgba(255, 130,  85, 0.28) 0%, transparent 82%);
  filter: blur(22px);
  animation: haloDrift 7s ease-in-out infinite;
}

@keyframes haloDrift {
  0%, 100% { opacity: 0.95; transform: scale(1.05) rotate(0deg);   }
  33%      { opacity: 1;    transform: scale(1.15) rotate(2deg);   }
  66%      { opacity: 0.92; transform: scale(1.10) rotate(-2deg);  }
}

.logo-wrap.logo-activated .logo {
  animation: logoSunTint 8s ease-in-out infinite;
}

@keyframes haloPulseLoud {
  0%, 100% { opacity: 0.95; transform: scale(1.08); }
  50%      { opacity: 1;    transform: scale(1.18); }
}

@keyframes logoSunTint {
  0%, 100% { filter: drop-shadow(0 14px 30px rgba(15, 37, 72, 0.35))
                     drop-shadow(0 4px 18px rgba(255, 200, 90, 0.65)); }
  50%      { filter: drop-shadow(0 14px 30px rgba(15, 37, 72, 0.35))
                     drop-shadow(0 4px 26px rgba(255, 220, 130, 0.85))
                     drop-shadow(0 0 14px rgba(255, 235, 170, 0.6)); }
}

/* one-shot sun-aura — soft asymmetric ellipses, heavily blurred so it
   reads as a living glow instead of a bullseye */
.aura-burst {
  position: fixed;
  top: 50%; left: 50%;
  width: 180vmax; height: 180vmax;
  margin: -90vmax 0 0 -90vmax;
  border-radius: 50%;
  background:
    radial-gradient(ellipse 65% 80% at 42% 38%, rgba(255, 252, 230, 0.72) 0%, transparent 62%),
    radial-gradient(ellipse 85% 70% at 60% 55%, rgba(255, 215, 130, 0.62) 0%, transparent 68%),
    radial-gradient(ellipse 75% 90% at 48% 50%, rgba(255, 170,  85, 0.48) 0%, transparent 72%),
    radial-gradient(ellipse 95% 75% at 52% 56%, rgba(255, 130,  85, 0.32) 0%, transparent 78%),
    radial-gradient(ellipse 100% 100% at 50% 50%, rgba(220,  95, 110, 0.18) 0%, transparent 88%);
  filter: blur(60px);
  opacity: 0;
  pointer-events: none;
  z-index: 50;
  transform: scale(0.05);
  mix-blend-mode: screen;
}

.aura-burst.burst {
  animation: auraBurst 2.6s cubic-bezier(0.33, 1, 0.68, 1);
}

@keyframes auraBurst {
  0%   { transform: scale(0.05); opacity: 0;    }
  18%  { opacity: 1;                            }
  50%  { transform: scale(1);    opacity: 0.85; }
  100% { transform: scale(0.05); opacity: 0;    }
}

/* small click ripple for taps that DON'T trigger the easter egg */
.logo-ripple {
  position: absolute;
  pointer-events: none;
  width: 0; height: 0;
  border-radius: 50%;
  background: radial-gradient(circle, rgba(255, 235, 170, 0.7) 0%, rgba(255, 200, 100, 0.4) 45%, transparent 70%);
  transform: translate(-50%, -50%);
  animation: ripplePop 0.7s ease-out forwards;
  z-index: 1;
}

@keyframes ripplePop {
  0%   { width: 0;     height: 0;     opacity: 0.95; }
  100% { width: 260px; height: 260px; opacity: 0;    }
}

/* hover sparkle hint — shows the logo is clickable */
.logo-sparkle {
  position: absolute;
  pointer-events: none;
  width: 14px; height: 14px;
  background: radial-gradient(circle, #fff8d6 0%, #ffd97a 35%, rgba(255, 200, 100, 0) 70%);
  border-radius: 50%;
  opacity: 0;
  animation: sparklePop 1.1s ease-out forwards;
  z-index: 2;
}

@keyframes sparklePop {
  0%   { transform: scale(0.2) rotate(0deg);   opacity: 0;   }
  20%  { transform: scale(1)   rotate(45deg);  opacity: 1;   }
  60%  { transform: scale(1.2) rotate(120deg); opacity: 0.9; }
  100% { transform: scale(0.2) rotate(180deg); opacity: 0;   }
}

@media (prefers-reduced-motion: reduce) {
  .logo-wrap { transition: none; transform: none !important; }
  .aura-burst.burst,
  .logo-wrap.logo-activated::before,
  .logo-wrap.logo-activated .logo,
  .logo-ripple, .logo-sparkle { animation: none; }
}

@keyframes haloPulse {
  0%, 100% { opacity: 0.85; transform: scale(1); }
  50%      { opacity: 1;    transform: scale(1.06); }
}

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

.eyebrow {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  font-family: 'Fredoka', sans-serif;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.18em;
  font-size: 0.8rem;
  color: var(--white);
  background: linear-gradient(135deg, #2a9d4a, #3fc167);
  padding: 7px 18px 7px 14px;
  border-radius: 999px;
  margin-bottom: 18px;
  box-shadow: 0 4px 14px rgba(63, 193, 103, 0.45);
}

.eyebrow .dot {
  display: inline-block;
  width: 8px;
  height: 8px;
  background: var(--white);
  border-radius: 50%;
  box-shadow: 0 0 0 0 rgba(255, 255, 255, 0.7);
  animation: pulse 1.8s infinite;
}

@keyframes pulse {
  0%   { box-shadow: 0 0 0 0 rgba(255, 255, 255, 0.7); }
  70%  { box-shadow: 0 0 0 8px rgba(255, 255, 255, 0); }
  100% { box-shadow: 0 0 0 0 rgba(255, 255, 255, 0); }
}

.headline {
  font-family: 'Fredoka', sans-serif;
  font-weight: 700;
  font-size: clamp(1.75rem, 4.5vw, 2.75rem);
  color: var(--navy);
  line-height: 1.15;
  margin-bottom: 14px;
  letter-spacing: -0.01em;
}

.subhead {
  font-size: clamp(1rem, 2.2vw, 1.15rem);
  color: var(--navy-deep);
  opacity: 0.8;
  margin-bottom: 18px;
}

/* trust line — credibility cues under the hero subhead */
.trust-line {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 12px 20px;
  list-style: none;
  margin: 0 auto 28px;
  padding: 0;
  font-family: 'Fredoka', sans-serif;
  font-size: 0.92rem;
  font-weight: 600;
  color: var(--navy-deep);
}

.trust-line li {
  display: inline-flex;
  align-items: center;
  gap: 6px;
}

.trust-dot {
  display: inline-block;
  width: 6px;
  height: 6px;
  background: var(--coral);
  border-radius: 50%;
}

/* ---------- CTA buttons ---------- */
.cta-row {
  display: flex;
  gap: 12px;
  justify-content: center;
  flex-wrap: wrap;
  margin-bottom: 28px;
}

.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-family: 'Fredoka', sans-serif;
  font-weight: 600;
  font-size: 1rem;
  padding: 13px 26px;
  border-radius: 999px;
  text-decoration: none;
  transition: transform 0.15s, box-shadow 0.2s, background 0.2s;
  cursor: pointer;
  border: 2px solid transparent;
  min-width: 160px;
}

.btn-primary {
  background: linear-gradient(180deg, var(--coral) 0%, var(--coral-deep) 100%);
  color: var(--white);
  font-weight: 700;
  box-shadow:
    0 8px 22px rgba(255, 107, 53, 0.42),
    inset 0 1px 0 rgba(255, 255, 255, 0.4),
    inset 0 -2px 0 rgba(122, 38, 8, 0.18);
  text-shadow: 0 1px 0 rgba(122, 38, 8, 0.32);
  letter-spacing: 0.005em;
}
.btn-primary:hover {
  transform: translateY(-2px);
  box-shadow:
    0 14px 30px rgba(255, 107, 53, 0.55),
    inset 0 1px 0 rgba(255, 255, 255, 0.5),
    inset 0 -2px 0 rgba(122, 38, 8, 0.22);
  background: linear-gradient(180deg, #ff9a4f 0%, #ff5a1f 100%);
}

.btn-secondary {
  background: var(--white);
  color: var(--navy);
  border-color: var(--navy);
}
.btn-secondary:hover {
  background: var(--navy);
  color: var(--white);
  transform: translateY(-2px);
}

.btn-tertiary {
  background: var(--navy);
  color: var(--white);
  box-shadow: 0 6px 18px rgba(15, 37, 72, 0.25);
}
.btn-tertiary:hover {
  background: var(--navy-deep);
  transform: translateY(-2px);
  box-shadow: 0 10px 24px rgba(15, 37, 72, 0.35);
}

/* ---------- signup ---------- */
.signup {
  display: flex;
  gap: 8px;
  max-width: 460px;
  margin: 0 auto 10px;
  background: var(--white);
  border-radius: 999px;
  padding: 6px;
  box-shadow: var(--shadow);
}

.signup input {
  flex: 1;
  border: none;
  background: transparent;
  padding: 12px 18px;
  font-family: inherit;
  font-size: 1rem;
  color: var(--navy-deep);
  outline: none;
  min-width: 0;
}

.signup input::placeholder {
  color: rgba(15, 37, 72, 0.4);
}

.signup button {
  border: none;
  background: var(--navy);
  color: var(--white);
  font-family: 'Fredoka', sans-serif;
  font-weight: 600;
  font-size: 0.95rem;
  padding: 12px 22px;
  border-radius: 999px;
  cursor: pointer;
  transition: transform 0.15s, background 0.2s;
  white-space: nowrap;
}

.signup button:hover {
  background: var(--navy-deep);
  transform: translateY(-1px);
}

.signup button:active { transform: translateY(0); }

.signup-note {
  font-size: 0.875rem;
  color: var(--navy-deep);
  opacity: 0.7;
  margin-bottom: 36px;
  transition: color 0.2s;
}

.signup-note.error { color: #c0392b; opacity: 1; }
.signup-note.success { color: #2a7a4a; opacity: 1; font-weight: 700; }

/* ---------- meta block ---------- */
.meta {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 24px;
  margin-bottom: 28px;
  flex-wrap: wrap;
}

.meta-item {
  display: flex;
  flex-direction: column;
  align-items: center;
  min-width: 110px;
}

.meta-label {
  font-family: 'Fredoka', sans-serif;
  font-size: 0.7rem;
  text-transform: uppercase;
  letter-spacing: 0.16em;
  color: var(--aqua);
  font-weight: 600;
  margin-bottom: 4px;
}

.meta-value {
  font-family: 'Fredoka', sans-serif;
  font-size: 1.05rem;
  font-weight: 600;
  color: var(--navy);
}

.meta-value a {
  color: inherit;
  text-decoration: none;
  border-bottom: 1px dashed rgba(29, 58, 107, 0.3);
}

.meta-value a:hover { border-bottom-color: var(--navy); }

.meta-divider {
  width: 1px;
  height: 32px;
  background: rgba(29, 58, 107, 0.2);
}

/* ---------- socials ---------- */
.socials {
  display: flex;
  gap: 12px;
  justify-content: center;
}

.social-link {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 44px;
  height: 44px;
  border-radius: 50%;
  background: var(--navy);
  color: var(--white);
  text-decoration: none;
  transition: transform 0.15s, background 0.2s;
}

.social-link:hover {
  background: var(--coral);
  transform: translateY(-2px);
}

/* ---------- sticky mobile CTA bar ---------- */
.mobile-cta {
  display: none;
  position: fixed;
  left: 0;
  right: 0;
  bottom: 0;
  z-index: 60;
  padding: 8px 10px calc(8px + env(safe-area-inset-bottom, 0px));
  background: rgba(255, 255, 255, 0.96);
  backdrop-filter: blur(14px);
  -webkit-backdrop-filter: blur(14px);
  border-top: 1px solid rgba(29, 58, 107, 0.12);
  box-shadow: 0 -6px 18px rgba(15, 37, 72, 0.18);
  grid-template-columns: 1fr 1fr 1fr;
  gap: 8px;
}

.mobile-cta-btn {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 4px;
  padding: 10px 6px;
  font-family: 'Fredoka', sans-serif;
  font-weight: 600;
  font-size: 0.88rem;
  text-decoration: none;
  color: var(--navy);
  background: rgba(29, 58, 107, 0.05);
  border-radius: 14px;
  transition: background 0.2s, color 0.2s, transform 0.15s;
}

.mobile-cta-btn:active {
  transform: scale(0.96);
  background: rgba(255, 140, 66, 0.18);
}

/* primary call action visually emphasized */
.mobile-cta-btn.mobile-cta-accent {
  background: var(--coral);
  color: var(--white);
  box-shadow: 0 4px 12px rgba(255, 140, 66, 0.35);
}

@media (max-width: 760px) {
  .mobile-cta { display: grid; }
  body { padding-bottom: calc(74px + env(safe-area-inset-bottom, 0px)); }
}

/* ============================================================
   ONLINE ORDERING (Toast)
   Order Online buttons stay hidden until ORDER_URL is set in the
   page script. When it is, the page script adds body.ordering-live,
   the buttons appear, and the Order CTAs take the lead over Call.
   ============================================================ */

/* On light backgrounds: once ordering is live, the Call button steps
   back from primary to a ghost so Order Online reads as THE action. */
body.ordering-live .js-call-cta {
  background: rgba(255, 255, 255, 0.92);
  color: #14213d;
  border-color: rgba(20, 33, 61, 0.35);
  box-shadow: 0 6px 16px rgba(15, 37, 72, 0.12),
              inset 0 0 0 1px rgba(255, 255, 255, 0.4);
  text-shadow: none;
}
/* the CTA banner sits on coral — keep the demoted Call button readable there */
body.ordering-live .cta-banner .js-call-cta {
  background: rgba(255, 255, 255, 0.16);
  color: var(--white);
  border-color: rgba(255, 255, 255, 0.7);
}

/* mobile bottom bar gains a 4th cell for Order when live */
body.ordering-live .mobile-cta { grid-template-columns: 1fr 1fr 1fr 1fr; }
body.ordering-live .mobile-cta-btn[data-order-link] {
  background: var(--coral);
  color: var(--white);
  box-shadow: 0 4px 12px rgba(255, 140, 66, 0.35);
}
/* …and the Call button gives up the coral accent so Order owns it */
body.ordering-live .mobile-cta-btn.mobile-cta-accent {
  background: rgba(29, 58, 107, 0.05);
  color: var(--navy);
  box-shadow: none;
}

/* menu hero Order Online button spacing */
.menu-hero-cta { margin-top: 22px; }

/* hero service-modes line — notates ordering / pickup / delivery */
.hero-services {
  margin: -8px 0 22px;
  font-family: 'Fredoka', sans-serif;
  font-weight: 600;
  font-size: 0.95rem;
  color: var(--navy);
  letter-spacing: 0.01em;
}
.hero-services strong { color: var(--coral-deep); font-weight: 700; }

/* ===================== REVIEWS (social proof) ===================== */
.reviews-section {
  position: relative;
  z-index: 1;
  padding: 58px 24px 66px;
  text-align: center;
  background:
    radial-gradient(ellipse 80% 60% at 50% 0%, rgba(255, 235, 200, 0.7) 0%, transparent 70%),
    linear-gradient(180deg, var(--cream) 0%, #fff1de 100%);
}
.reviews-inner { max-width: 1080px; margin: 0 auto; }
.reviews-section .section-title--display { color: var(--navy); }

.reviews-badge {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  margin: 6px 0 38px;
  padding: 9px 18px;
  background: rgba(255, 255, 255, 0.95);
  border: 1px solid rgba(255, 140, 66, 0.3);
  border-radius: 999px;
  text-decoration: none;
  box-shadow: 0 6px 16px rgba(15, 37, 72, 0.1);
  transition: transform 0.15s, box-shadow 0.2s;
}
.reviews-badge:hover { transform: translateY(-2px); box-shadow: 0 10px 22px rgba(15, 37, 72, 0.16); }
.reviews-stars { color: #ffb02e; font-size: 1.05rem; letter-spacing: 2px; }
.reviews-badge-text { font-family: 'Fredoka', sans-serif; font-weight: 600; color: var(--navy); font-size: 0.98rem; }
.reviews-badge-text strong { color: var(--coral-deep); }

.reviews-grid {
  list-style: none;
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 18px;
  margin: 0 0 34px;
}
.review-card {
  background: rgba(255, 255, 255, 0.96);
  border: 1px solid rgba(255, 255, 255, 0.7);
  border-radius: 20px;
  padding: 26px 24px;
  text-align: left;
  box-shadow: 0 10px 28px rgba(15, 37, 72, 0.1);
  display: flex;
  flex-direction: column;
  gap: 12px;
}
.review-stars { color: #ffb02e; font-size: 1rem; letter-spacing: 2px; }
.review-quote {
  font-family: 'Nunito', sans-serif;
  font-size: 1.02rem;
  line-height: 1.5;
  color: #2a3550;
  flex: 1;
  margin: 0;
}
.review-author {
  font-family: 'Fredoka', sans-serif;
  font-weight: 600;
  color: var(--coral-deep);
  font-size: 0.95rem;
  margin: 0;
}
.review-author::before { content: "\2014\00a0"; color: rgba(29, 58, 107, 0.5); }
.reviews-cta { display: inline-flex; }

@media (max-width: 860px) {
  .reviews-grid { grid-template-columns: 1fr; max-width: 460px; margin-inline: auto; }
  .reviews-section { padding: 46px 20px 52px; }
}

/* ---------- footer ---------- */
.site-footer {
  position: relative;
  z-index: 1;
  text-align: center;
  padding: 22px 24px 28px;
  font-size: 0.85rem;
  color: rgba(255, 255, 255, 0.85);
  background: var(--navy-deep);
}

/* ---------- shared section styles ---------- */
.section-inner {
  max-width: 1100px;
  margin: 0 auto;
  padding: 72px 24px;
  text-align: center;
}

.kicker {
  display: inline-block;
  font-family: 'Fredoka', sans-serif;
  font-size: 1.05rem;
  text-transform: uppercase;
  letter-spacing: 0.18em;
  color: var(--white);
  background: linear-gradient(135deg, var(--coral), #ff6b35);
  font-weight: 700;
  padding: 7px 18px;
  border-radius: 999px;
  margin-bottom: 14px;
  box-shadow: 0 4px 14px rgba(255, 140, 66, 0.35);
}

.section-title {
  font-family: 'Fredoka', sans-serif;
  font-weight: 700;
  font-size: clamp(1.6rem, 3.5vw, 2.25rem);
  color: var(--white);
  text-shadow: 0 2px 14px rgba(15, 37, 72, 0.35);
  margin-bottom: 36px;
  line-height: 1.2;
}

/* ---------- featured menu (top conversion section) ---------- */
.featured-menu {
  position: relative;
  z-index: 1;
}

.featured-grid {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  align-items: stretch;
  gap: 24px;
  text-align: left;
  margin-bottom: 32px;
  max-width: 880px;
  margin-left: auto;
  margin-right: auto;
}

.featured-card {
  background: var(--white);
  border-radius: 22px;
  overflow: hidden;
  box-shadow: 0 12px 32px rgba(15, 37, 72, 0.14);
  text-decoration: none;
  color: var(--navy-deep);
  transition: transform 0.25s, box-shadow 0.25s;
  display: flex;
  flex-direction: column;
}

.featured-card:hover {
  transform: translateY(-4px);
  box-shadow: 0 18px 40px rgba(15, 37, 72, 0.22);
}

.featured-card-hero:not(.dummy) {
  border: 3px solid var(--coral);
  box-shadow: 0 18px 40px rgba(255, 140, 66, 0.32);
}

.featured-img {
  width: 100%;
  aspect-ratio: 4 / 3;
  background-size: cover;
  background-position: center;
}

.featured-body {
  padding: 20px 22px 24px;
  display: flex;
  flex-direction: column;
  flex: 1;
}

.featured-tag {
  display: inline-block;
  font-family: 'Fredoka', sans-serif;
  font-size: 0.72rem;
  font-weight: 600;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--aqua);
  margin-bottom: 8px;
}

.featured-tag-flag {
  color: var(--white);
  background: var(--coral);
  padding: 4px 12px;
  border-radius: 999px;
  align-self: flex-start;
}

.featured-card h3 {
  font-family: 'Fredoka', sans-serif;
  font-weight: 700;
  font-size: 1.35rem;
  color: var(--navy);
  margin-bottom: 10px;
  line-height: 1.2;
}

.featured-card p {
  color: var(--navy-deep);
  opacity: 0.78;
  font-size: 0.96rem;
  line-height: 1.55;
  margin-bottom: 14px;
  flex: 1;
}

.featured-price {
  font-family: 'Fredoka', sans-serif;
  font-weight: 700;
  font-size: 1.4rem;
  color: var(--coral);
}

.featured-price::before { content: "$"; font-size: 0.8em; opacity: 0.7; margin-right: 1px; }

.featured-cta {
  text-align: center;
}

.btn-lg {
  font-size: 1.15rem;
  padding: 16px 36px;
  min-width: 200px;
}

@media (max-width: 540px) {
  .featured-grid { grid-template-columns: 1fr; }
}

/* ---------- mid-page CTA banner ---------- */
.cta-banner {
  position: relative;
  z-index: 1;
  margin: 0 auto;
  padding: 16px 24px 56px;
  max-width: 1100px;
}

.cta-banner-inner {
  background: linear-gradient(135deg, var(--coral) 0%, #ff6b35 50%, #ff5577 100%);
  border-radius: 28px;
  padding: 44px 36px 48px;
  text-align: center;
  color: var(--white);
  box-shadow: 0 20px 50px rgba(255, 140, 66, 0.35);
}

.cta-banner-title {
  font-family: 'Fredoka', sans-serif;
  font-weight: 700;
  font-size: clamp(1.7rem, 3.5vw, 2.4rem);
  color: var(--white);
  margin-bottom: 10px;
  line-height: 1.15;
  text-shadow: 0 2px 8px rgba(0, 0, 0, 0.18);
}

.cta-banner-sub {
  color: rgba(255, 255, 255, 0.92);
  font-size: 1.05rem;
  margin-bottom: 24px;
}

.cta-banner .btn-primary {
  background: var(--white);
  color: var(--coral);
  box-shadow: 0 6px 18px rgba(0, 0, 0, 0.18);
}

.cta-banner .btn-primary:hover {
  background: #fff8e0;
  color: #d65a1a;
}

.cta-banner .btn-secondary {
  background: transparent;
  color: var(--white);
  border-color: var(--white);
}

.cta-banner .btn-secondary:hover {
  background: var(--white);
  color: var(--navy);
}

@media (max-width: 540px) {
  .cta-banner { padding: 8px 14px 40px; }
  .cta-banner-inner { padding: 32px 22px 36px; border-radius: 22px; }
}

/* ---------- gallery (masonry, no cropping) ---------- */
.gallery-section { position: relative; z-index: 1; }

.gallery {
  column-count: 3;
  column-gap: 16px;
}

.gallery-item {
  display: block;
  break-inside: avoid;
  margin-bottom: 16px;
  border-radius: 18px;
  overflow: hidden;
  box-shadow: var(--shadow);
  position: relative;
  transition: transform 0.25s, box-shadow 0.25s;
  background: var(--white);
}

.gallery-item:hover {
  transform: translateY(-3px);
  box-shadow: var(--shadow-lg);
}

.gallery-item img {
  display: block;
  width: 100%;
  height: auto;
  transition: transform 0.4s;
}

.gallery-item:hover img { transform: scale(1.04); }

/* feature label for the food hero shot */
.gallery-item.feature::after {
  content: "Fresh Daily";
  position: absolute;
  top: 14px;
  left: 14px;
  font-family: 'Fredoka', sans-serif;
  font-size: 0.72rem;
  font-weight: 600;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--white);
  background: var(--coral);
  padding: 6px 12px;
  border-radius: 999px;
  box-shadow: 0 4px 12px rgba(255, 140, 66, 0.4);
}

@media (max-width: 880px) {
  .gallery { column-count: 2; }
}

@media (max-width: 480px) {
  .gallery { column-count: 1; column-gap: 12px; }
  .gallery-item { margin-bottom: 12px; }
}

/* ---------- story ---------- */
.story-section {
  position: relative;
  z-index: 1;
}

.section-inner.narrow { max-width: 760px; }

.section-title.dark {
  color: var(--navy);
  text-shadow: none;
}

/* lift dark headlines so they're readable on dawn/dusk/night skies */
body.dawn .section-title.dark,
body.dusk .section-title.dark {
  color: #ffffff;
  text-shadow: 0 2px 10px rgba(0, 0, 0, 0.5);
}

body.night .section-title.dark {
  color: #fef0c5;
  text-shadow: 0 2px 12px rgba(0, 0, 0, 0.7);
}

.story-card {
  background: rgba(255, 255, 255, 0.85);
  backdrop-filter: blur(14px);
  -webkit-backdrop-filter: blur(14px);
  border: 1px solid rgba(255, 255, 255, 0.6);
  border-radius: 24px;
  padding: 36px 40px;
  box-shadow: var(--shadow);
  text-align: left;
}

.story-card p {
  color: var(--navy-deep);
  font-size: 1.05rem;
  line-height: 1.7;
  margin-bottom: 16px;
}

.story-card p:last-child { margin-bottom: 0; }

.story-tagline {
  font-family: 'Fredoka', sans-serif;
  font-weight: 600;
  font-size: 1.15rem !important;
  color: var(--coral);
  text-align: center;
  margin-top: 8px !important;
  letter-spacing: 0.02em;
}

@media (max-width: 600px) {
  .story-card { padding: 26px 22px; border-radius: 20px; }
  .story-card p { font-size: 1rem; }
}

/* contact card merged with story */
.contact-card {
  margin-top: 28px;
  background: rgba(255, 255, 255, 0.85);
  backdrop-filter: blur(14px);
  -webkit-backdrop-filter: blur(14px);
  border: 1px solid rgba(255, 255, 255, 0.6);
  border-radius: 24px;
  padding: 28px 32px 32px;
  box-shadow: var(--shadow);
}

.contact-title {
  font-family: 'Fredoka', sans-serif;
  font-weight: 700;
  font-size: 1.25rem;
  color: var(--navy);
  text-align: center;
  margin-bottom: 18px;
}

.contact-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 14px;
}

.contact-tile {
  display: flex;
  flex-direction: column;
  align-items: center;
  text-align: center;
  text-decoration: none;
  background: rgba(255, 255, 255, 0.6);
  border: 1px solid rgba(29, 58, 107, 0.12);
  border-radius: 16px;
  padding: 18px 14px;
  color: var(--navy-deep);
  transition: transform 0.15s, box-shadow 0.2s, background 0.2s;
}

.contact-tile:hover {
  transform: translateY(-2px);
  background: var(--white);
  box-shadow: var(--shadow);
}

.contact-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 44px;
  height: 44px;
  border-radius: 50%;
  background: var(--coral);
  color: var(--white);
  margin-bottom: 10px;
}

.contact-label {
  font-family: 'Fredoka', sans-serif;
  font-size: 0.78rem;
  text-transform: uppercase;
  letter-spacing: 0.16em;
  color: var(--aqua);
  font-weight: 600;
  margin-bottom: 4px;
}

.contact-value {
  font-family: 'Fredoka', sans-serif;
  font-size: 1rem;
  font-weight: 600;
  color: var(--navy);
  line-height: 1.4;
}

@media (max-width: 600px) {
  .contact-grid { grid-template-columns: 1fr; }
  .contact-card { padding: 22px; }
}

/* ---------- hours ---------- */
.hours-section {
  position: relative;
  z-index: 1;
  background: rgba(15, 37, 72, 0.85);
  backdrop-filter: blur(8px);
  -webkit-backdrop-filter: blur(8px);
}

.hours-section .section-inner { padding: 64px 24px 100px; }
/* hours-section keeps the coral pill kicker (good contrast on the navy background) */
.hours-section .section-title { color: var(--white); }

.hours-visit {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 1.1fr);
  gap: 28px;
  align-items: stretch;
  max-width: 940px;
  margin: 0 auto;
  text-align: left;
}

@media (max-width: 760px) {
  .hours-visit { grid-template-columns: 1fr; gap: 20px; }
}

.hours-list {
  list-style: none;
  margin: 0;
  background: rgba(255, 255, 255, 0.07);
  border: 1px solid rgba(255, 255, 255, 0.15);
  border-radius: 20px;
  padding: 8px;
  align-self: start;
}

.hours-list li {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 14px 22px;
  font-size: 1.05rem;
  color: var(--white);
  border-radius: 14px;
  transition: background 0.2s;
}

.hours-list li + li {
  border-top: 1px solid rgba(255, 255, 255, 0.08);
}

.hours-list li.today {
  background: var(--coral);
  border-top-color: transparent;
  box-shadow: 0 6px 18px rgba(255, 140, 66, 0.35);
  font-weight: 700;
}

.hours-list li.today + li { border-top-color: transparent; }

.hours-list .day {
  font-family: 'Fredoka', sans-serif;
  font-weight: 600;
}

.hours-list .time { opacity: 0.92; }

/* ---------- map ---------- */
.map-card {
  display: flex;
  flex-direction: column;
  border-radius: 20px;
  overflow: hidden;
  background: rgba(255, 255, 255, 0.07);
  border: 1px solid rgba(255, 255, 255, 0.15);
  box-shadow: 0 12px 30px rgba(15, 37, 72, 0.35);
  min-height: 320px;
}

.map-card iframe {
  flex: 1 1 auto;
  width: 100%;
  min-height: 280px;
  border: 0;
  display: block;
  background: #cce6f1;
}

.map-directions {
  display: block;
  text-align: center;
  font-family: 'Fredoka', sans-serif;
  font-weight: 600;
  font-size: 0.95rem;
  color: var(--white);
  background: var(--coral);
  padding: 12px 16px;
  text-decoration: none;
  transition: background 0.2s;
}

.map-directions:hover { background: #ff7a26; }

@media (max-width: 760px) {
  .map-card { min-height: 260px; }
  .map-card iframe { min-height: 240px; }
}

/* ---------- closed state for badge ---------- */
.eyebrow.closed {
  background: linear-gradient(135deg, #6c7a8d, #94a3b5);
  box-shadow: 0 4px 14px rgba(108, 122, 141, 0.45);
}

.eyebrow.closed .dot { animation: none; opacity: 0.85; }

/* ---------- menu page ---------- */
/* Menu shares the homepage's ocean-bg AND the body's day/dawn/dusk/night
   gradient. No menu-specific background overrides — same world. */

.menu-hero {
  position: relative;
  z-index: 1;
  text-align: center;
  padding: 56px 24px 32px;
  max-width: 900px;
  margin: 0 auto;
}

.menu-hero-inner h1 {
  font-family: 'Fredoka', sans-serif;
  font-weight: 700;
  font-size: clamp(1.6rem, 4vw, 2.4rem);
  color: var(--navy);
  line-height: 1.15;
  margin: 6px 0 14px;
}

.menu-hero .lede {
  font-size: 1.05rem;
  color: var(--navy-deep);
  opacity: 0.85;
  margin-bottom: 24px;
}

.menu-hero .lede a {
  color: var(--coral);
  font-weight: 700;
  text-decoration: none;
}

.menu-hero .lede a:hover { text-decoration: underline; }

.menu-hero .kicker {
  display: inline-block;
  margin-bottom: 0;
}

.menu-jump {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 8px;
  margin-top: 8px;
}

.menu-jump a {
  font-family: 'Fredoka', sans-serif;
  font-size: 0.88rem;
  font-weight: 500;
  color: var(--navy);
  background: var(--white);
  padding: 8px 14px;
  border-radius: 999px;
  text-decoration: none;
  border: 1px solid rgba(29, 58, 107, 0.12);
  transition: background 0.2s, color 0.2s, transform 0.15s;
}

.menu-jump a:hover {
  background: var(--navy);
  color: var(--white);
  transform: translateY(-1px);
}

/* ---- menu sections ---- */
.menu-main {
  max-width: 880px;
  margin: 0 auto;
  padding: 16px 24px 60px;
}

.menu-section {
  background: var(--white);
  border-radius: 24px;
  padding: 36px 36px 28px;
  margin-bottom: 24px;
  box-shadow: 0 8px 28px rgba(15, 37, 72, 0.08);
  scroll-margin-top: 80px;
}

.menu-section.feature {
  background: linear-gradient(135deg, #fff8ee, #fceedd);
  border: 2px solid rgba(255, 140, 66, 0.2);
}

.menu-h2 {
  font-family: 'Fredoka', sans-serif;
  font-weight: 700;
  font-size: clamp(1.4rem, 2.6vw, 1.75rem);
  color: var(--navy);
  margin-bottom: 14px;
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 12px;
  flex-wrap: wrap;
}

.menu-h2-price {
  font-size: 1.1rem;
  color: var(--coral);
  font-weight: 600;
  background: rgba(255, 140, 66, 0.1);
  padding: 4px 14px;
  border-radius: 999px;
}

.menu-blurb {
  color: var(--navy-deep);
  opacity: 0.78;
  margin-bottom: 18px;
  font-size: 0.98rem;
  line-height: 1.55;
}

/* ---- menu list rows ---- */
.menu-list {
  list-style: none;
  display: flex;
  flex-direction: column;
}

.menu-list li {
  display: flex;
  align-items: baseline;
  gap: 10px;
  padding: 12px 0;
  border-bottom: 1px dashed rgba(29, 58, 107, 0.12);
}

.menu-list li:last-child { border-bottom: none; }

.menu-list li.featured {
  background: rgba(255, 140, 66, 0.08);
  border-radius: 14px;
  padding: 16px 18px;
  margin-bottom: 6px;
  border-bottom: 1px dashed rgba(255, 140, 66, 0.3);
}

.m-name {
  font-family: 'Fredoka', sans-serif;
  font-weight: 600;
  color: var(--navy-deep);
  font-size: 1.02rem;
  flex: 0 1 auto;
  max-width: calc(100% - 60px);
}

.m-note {
  font-family: 'Nunito', sans-serif;
  font-style: normal;
  font-weight: 400;
  color: var(--navy-deep);
  opacity: 0.7;
  font-size: 0.9rem;
  display: block;
  margin-top: 3px;
  line-height: 1.5;
}

.m-dots {
  flex: 1 1 auto;
  border-bottom: 2px dotted rgba(29, 58, 107, 0.2);
  align-self: center;
  margin-bottom: 4px;
  min-width: 20px;
}

.m-price {
  font-family: 'Fredoka', sans-serif;
  font-weight: 700;
  color: var(--coral);
  font-size: 1.1rem;
}

.m-price::before { content: "$"; font-size: 0.85em; opacity: 0.7; margin-right: 1px; }

.m-flag {
  display: inline-block;
  font-family: 'Fredoka', sans-serif;
  font-size: 0.65rem;
  font-weight: 600;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--white);
  background: var(--coral);
  padding: 3px 9px;
  border-radius: 999px;
  margin-right: 8px;
  vertical-align: 2px;
}

/* ---- chip rows for poke options ---- */
.chip-row {
  margin-top: 14px;
}

.chip-label {
  font-family: 'Fredoka', sans-serif;
  font-size: 0.78rem;
  text-transform: uppercase;
  letter-spacing: 0.16em;
  color: var(--aqua);
  font-weight: 600;
  margin-bottom: 8px;
}

.chip-list {
  list-style: none;
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
}

.chip-list li {
  font-family: 'Fredoka', sans-serif;
  font-weight: 500;
  font-size: 0.92rem;
  color: var(--navy);
  background: var(--white);
  padding: 7px 14px;
  border-radius: 999px;
  border: 1px solid rgba(29, 58, 107, 0.15);
}

/* ---- disclaimer ---- */
.menu-disclaimer {
  font-size: 0.78rem;
  color: var(--navy-deep);
  opacity: 0.62;
  text-align: center;
  max-width: 720px;
  margin: 32px auto 0;
  padding: 0 12px;
  line-height: 1.6;
}

@media (max-width: 600px) {
  .menu-section { padding: 26px 20px 20px; border-radius: 20px; }
  .menu-list li { padding: 10px 0; }
  .m-name { font-size: 0.98rem; max-width: calc(100% - 50px); }
  .menu-hero { padding: 32px 20px 16px; }
}

/* ---------- responsive ---------- */
@media (max-width: 540px) {
  .hero { padding: 32px 16px 200px; }
  .hero-inner { padding: 36px 22px 36px; border-radius: 22px; }
  .logo-wrap { padding: 28px; }
  .logo { width: 100%; }
  .signup { flex-direction: column; border-radius: 22px; padding: 10px; gap: 10px; }
  .signup input { text-align: center; padding: 10px; }
  .signup button { padding: 12px; }
  .meta { gap: 16px; }
  .meta-divider { display: none; }
}

@media (prefers-reduced-motion: reduce) {
  .logo, .wave-1, .wave-2, .wave-3 { animation: none; }
}

/* ==========================================================================
   V2 REDESIGN — "Sun-warmed boutique sushi-ya at golden hour"
   Premium editorial composition, food-forward hero, alternating section
   density. Layered atop the original CSS so menu.html stays intact.
   ========================================================================== */

:root {
  --sand-warm:   #fdf3df;
  --sand-deep:   #f5e4bb;
  --cream:       #fffaf0;
  --coral-deep:  #ff6b35;
  --coral-glow:  rgba(255, 140, 66, 0.65);
  --ink:         #14213d;
  --ink-soft:    #2a3b5f;
  --shadow-warm: 0 18px 50px rgba(255, 140, 66, 0.18);
  --shadow-cold: 0 22px 60px rgba(15, 37, 72, 0.20);
  --radius-card: 22px;
  --radius-lg:   28px;
}

/* font feature settings for a more refined display read */
.hero-v2,
.featured-menu-v2,
.story-section-v2,
.cta-banner-v2,
.hours-section-v2 {
  font-feature-settings: "ss01", "cv11";
}

/* ---------- nav shrink-on-scroll ---------- */
.nav {
  transition: padding 0.32s ease, box-shadow 0.32s ease;
}
.nav.nav--shrunk {
  padding: 20px 44px;
  box-shadow: 0 10px 28px rgba(15, 37, 72, 0.35);
}
.nav-brand img {
  transition: height 0.32s ease;
}
.nav.nav--shrunk .nav-brand img { height: 78px; }
.nav.nav--shrunk .nav-brand     { font-size: 2rem; }

@media (max-width: 900px) {
  .nav.nav--shrunk { padding: 18px 22px; }
  .nav.nav--shrunk .nav-brand img { height: 64px; }
  .nav.nav--shrunk .nav-brand     { font-size: 1.6rem; }
}

/* ---------- typography scale-up ---------- */
.section-title--display {
  font-family: 'Fredoka', sans-serif;
  font-weight: 700;
  font-size: clamp(2.1rem, 5.6vw, 3.7rem);
  line-height: 1.04;
  letter-spacing: -0.025em;
  margin-bottom: 14px;
}
.section-title--display em {
  font-family: 'Lobster', cursive;
  font-style: normal;
  font-weight: 400;
  color: var(--coral);
  letter-spacing: 0.005em;
  display: inline-block;
  transform: translateY(2px);
}
.section-title--dark { color: var(--ink); text-shadow: none; }
body.dawn .section-title--dark,
body.dusk .section-title--dark { color: #1d2a4a; }
body.night .section-title--dark { color: #fef0c5; }

.kicker--dark {
  background: linear-gradient(135deg, var(--ink), var(--ink-soft));
  color: var(--sand-warm);
  box-shadow: 0 4px 14px rgba(20, 33, 61, 0.3);
}

.section-head {
  margin: 0 auto 36px;
  max-width: 760px;
}
.section-head--center { text-align: center; }

.section-lede {
  font-size: clamp(1.02rem, 1.5vw, 1.18rem);
  color: var(--ink-soft);
  line-height: 1.6;
  max-width: 620px;
  margin: 12px auto 0;
  opacity: 0.88;
}
.section-lede--light { color: rgba(255, 255, 255, 0.85); }

/* ---------- reveal animation (DISABLED — content always visible) ---------- */
/* Kept the data-reveal hooks in markup for future use, but no longer hides
   content. Was causing flickers/invisibility during programmatic scroll. */
[data-reveal] { opacity: 1; transform: none; }

/* ==========================================================================
   HERO V2 — asymmetric grid, food-forward, glassmorphic chip
   ========================================================================== */

.hero-v2 {
  position: relative;
  z-index: 1;
  min-height: auto;
  display: block;
  padding: 28px 0 0;
  /* override the centered flex layout from .hero base */
}

.hero-grid {
  position: relative;
  display: grid;
  grid-template-columns: minmax(0, 1.05fr) minmax(0, 1fr);
  gap: 56px;
  align-items: center;
  max-width: 1240px;
  margin: 0 auto;
  padding: 20px 40px 110px;
}

.hero-text {
  position: relative;
  z-index: 2;
  max-width: 600px;
}

.hero-v2 .eyebrow {
  margin-bottom: 26px;
}

.hero-headline {
  font-family: 'Fredoka', sans-serif;
  font-weight: 700;
  color: var(--ink);
  margin: 0 0 22px;
  line-height: 1;
  letter-spacing: -0.028em;
  text-wrap: balance;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-rendering: optimizeLegibility;
}

.hero-headline-eyebrow {
  display: block;
  font-family: 'Fredoka', sans-serif;
  font-size: clamp(0.82rem, 1.05vw, 0.96rem);
  font-weight: 700;
  letter-spacing: 0.32em;
  text-transform: uppercase;
  color: var(--coral-deep);
  margin-bottom: 18px;
  text-shadow: 0 1px 0 rgba(255, 255, 255, 0.55);
}

.hero-headline-main {
  display: block;
  font-size: clamp(2.5rem, 6.1vw, 4.4rem);
  line-height: 1.02;
  font-weight: 800;
  color: #091532;
  margin-bottom: 4px;
  text-shadow: 0 1px 0 rgba(255, 255, 255, 0.55);
}

.hero-headline-script {
  display: block;
  font-family: 'Lobster', cursive;
  font-weight: 400;
  font-size: clamp(2.5rem, 6.6vw, 4.6rem);
  letter-spacing: 0.01em;
  line-height: 1;
  color: #c84512;
  text-shadow:
    0 1px 0 rgba(255, 255, 255, 0.5),
    0 2px 0 rgba(122, 38, 8, 0.22);
}

body.dawn .hero-headline-main,
body.dusk .hero-headline-main { color: #1d2a4a; }
body.night .hero-headline-eyebrow { color: #ffba7e; text-shadow: 0 2px 12px rgba(0,0,0,0.6); }
body.night .hero-headline-main    { color: #fef0c5; text-shadow: 0 2px 14px rgba(0,0,0,0.65); }
body.night .hero-headline-script  { color: #ffb37a; text-shadow: 0 2px 14px rgba(0,0,0,0.65); }

.hero-subhead {
  font-size: clamp(1.05rem, 1.4vw, 1.18rem);
  line-height: 1.55;
  color: #1c2a45;
  max-width: 480px;
  margin: 0 0 30px;
  opacity: 1;
  font-weight: 500;
  -webkit-font-smoothing: antialiased;
  text-shadow: 0 1px 0 rgba(255, 255, 255, 0.35);
}
body.night .hero-subhead { color: #e9eef9; opacity: 1; text-shadow: 0 1px 4px rgba(0,0,0,0.4); }

.hero-cta-row {
  display: flex;
  flex-wrap: wrap;
  gap: 14px;
  margin: 0 0 26px;
  align-items: center;
}

/* ghost button on light bg — outline pill that elevates on hover */
.btn-ghost-light {
  background: rgba(255, 255, 255, 0.92);
  color: #14213d;
  border-color: rgba(20, 33, 61, 0.35);
  font-weight: 700;
  box-shadow: 0 6px 16px rgba(15, 37, 72, 0.12),
              inset 0 0 0 1px rgba(255, 255, 255, 0.4);
}
.btn-ghost-light:hover {
  background: var(--white);
  color: var(--coral-deep);
  border-color: var(--coral-deep);
  transform: translateY(-2px);
  box-shadow: 0 12px 28px rgba(15, 37, 72, 0.2);
}

.hero-meta-strip {
  display: inline-flex;
  align-items: center;
  gap: 18px;
  flex-wrap: wrap;
  padding: 12px 22px;
  background: rgba(255, 255, 255, 0.55);
  border: 1px solid rgba(255, 255, 255, 0.65);
  border-radius: 999px;
  backdrop-filter: blur(14px);
  -webkit-backdrop-filter: blur(14px);
  box-shadow: 0 8px 24px rgba(15, 37, 72, 0.12);
}

.hero-meta-link {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  font-family: 'Fredoka', sans-serif;
  font-weight: 600;
  font-size: 0.96rem;
  color: var(--ink);
  text-decoration: none;
  transition: color 0.2s;
}
.hero-meta-link:hover { color: var(--coral-deep); }
.hero-meta-link svg { color: var(--coral); flex-shrink: 0; }

.hero-meta-sep {
  width: 1px;
  align-self: stretch;
  background: rgba(20, 33, 61, 0.18);
}

/* --- hero visual: layered food composition with sun-glow halo + panda mascot --- */
.hero-visual {
  position: relative;
  width: 100%;
  aspect-ratio: 1 / 1;
  max-width: 560px;
  margin-left: auto;
  z-index: 2;
}

.hero-visual-halo {
  position: absolute;
  inset: 6%;
  border-radius: 50%;
  background: radial-gradient(circle at 55% 50%,
    rgba(255, 230, 185, 0.4) 0%,
    rgba(255, 200, 130, 0.22) 35%,
    rgba(255, 160, 100, 0.08) 62%,
    rgba(255, 130, 80, 0) 80%);
  filter: none;
  z-index: 0;
  animation: heroHaloPulse 8s ease-in-out infinite;
}

@keyframes heroHaloPulse {
  0%, 100% { transform: scale(1);    opacity: 0.95; }
  50%      { transform: scale(1.04); opacity: 1;    }
}

body.night .hero-visual-halo {
  background: radial-gradient(circle at 50% 45%,
    rgba(255, 220, 180, 0.32) 0%,
    rgba(255, 180, 130, 0.18) 30%,
    transparent 70%);
}

.hero-visual-stack {
  position: absolute;
  inset: 0;
  z-index: 1;
}

.hero-visual-card {
  position: absolute;
  border-radius: 24px;
  overflow: hidden;
  box-shadow:
    0 24px 60px rgba(15, 37, 72, 0.30),
    0 4px 14px rgba(15, 37, 72, 0.20),
    inset 0 0 0 1px rgba(255, 255, 255, 0.5);
  background: var(--white);
  transition: transform 0.5s cubic-bezier(0.22, 1, 0.36, 1),
              box-shadow 0.5s ease;
}

.hero-visual-card img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.hero-visual-card--back {
  top: 4%;
  left: 8%;
  width: 56%;
  aspect-ratio: 4 / 3;
  transform: rotate(-6deg);
  z-index: 1;
  animation: heroFloatA 7.5s ease-in-out infinite;
}

.hero-visual-card--front {
  bottom: 6%;
  right: 4%;
  width: 62%;
  aspect-ratio: 3 / 4;
  transform: rotate(4deg);
  z-index: 3;
  animation: heroFloatB 8s ease-in-out infinite;
}

@keyframes heroFloatA {
  0%, 100% { transform: rotate(-6deg) translateY(0); }
  50%      { transform: rotate(-5deg) translateY(-8px); }
}
@keyframes heroFloatB {
  0%, 100% { transform: rotate(4deg)  translateY(0); }
  50%      { transform: rotate(5deg)  translateY(8px); }
}

@media (prefers-reduced-motion: reduce) {
  .hero-visual-halo,
  .hero-visual-card--back,
  .hero-visual-card--front { animation: none; }
}

.hero-visual-card:hover {
  transform: scale(1.025) rotate(0deg);
  box-shadow:
    0 30px 80px rgba(255, 140, 66, 0.35),
    0 6px 18px rgba(15, 37, 72, 0.20),
    inset 0 0 0 1px rgba(255, 255, 255, 0.6);
  z-index: 5;
}

.hero-visual-tag {
  position: absolute;
  top: 14px;
  left: 14px;
  font-family: 'Fredoka', sans-serif;
  font-size: 0.72rem;
  font-weight: 700;
  letter-spacing: 0.15em;
  text-transform: uppercase;
  color: var(--ink);
  background: rgba(255, 255, 255, 0.9);
  padding: 6px 14px;
  border-radius: 999px;
  box-shadow: 0 4px 12px rgba(15, 37, 72, 0.18);
  backdrop-filter: blur(8px);
}
.hero-visual-tag--accent {
  color: var(--white);
  background: linear-gradient(135deg, var(--coral), var(--coral-deep));
  box-shadow: 0 4px 12px rgba(255, 140, 66, 0.5);
}

/* the panda logo lives as a small mascot tucked between the two food cards */
.hero-visual-mascot {
  position: absolute;
  top: -4%;
  right: -6%;
  width: 30%;
  z-index: 4;
  cursor: pointer;
  filter: drop-shadow(0 10px 22px rgba(15, 37, 72, 0.35))
          drop-shadow(0 4px 8px rgba(255, 140, 66, 0.25));
  animation: float 5.5s ease-in-out infinite;
  perspective: 900px;
  -webkit-tap-highlight-color: transparent;
}

.hero-visual-mascot .logo {
  width: 100%;
  height: auto;
  display: block;
  transform: rotateX(var(--tilt-x, 0deg)) rotateY(var(--tilt-y, 0deg));
  transition: transform 0.2s ease-out;
  will-change: transform;
}

.hero-visual-mascot::before {
  content: "";
  position: absolute;
  inset: -22%;
  border-radius: 50%;
  background: radial-gradient(circle at center,
    rgba(255, 240, 195, 0.65) 0%,
    rgba(255, 215, 140, 0.35) 28%,
    rgba(255, 190, 100, 0.12) 52%,
    rgba(255, 180, 90, 0) 75%);
  z-index: -1;
  animation: haloPulse 4.5s ease-in-out infinite;
}

.hero-visual-mascot.logo-activated::before {
  inset: -45%;
  background:
    radial-gradient(ellipse 70% 85% at 42% 40%, rgba(255, 252, 230, 0.85) 0%, transparent 60%),
    radial-gradient(ellipse 85% 75% at 58% 55%, rgba(255, 215, 130, 0.70) 0%, transparent 66%),
    radial-gradient(ellipse 75% 90% at 48% 50%, rgba(255, 170,  85, 0.50) 0%, transparent 72%);
  filter: blur(22px);
  animation: haloDrift 7s ease-in-out infinite;
}
.hero-visual-mascot.logo-activated .logo { animation: logoSunTint 8s ease-in-out infinite; }

/* leafy decorations behind the food stack */
.hero-visual-leaf {
  position: absolute;
  pointer-events: none;
  z-index: 0;
  filter: drop-shadow(0 6px 14px rgba(15, 50, 30, 0.25));
}
.hero-visual-leaf--1 { top: -2%; left: -10%; width: 50%; transform: rotate(-12deg); }
.hero-visual-leaf--2 { bottom: -4%; right: -6%; width: 42%; transform: rotate(18deg); z-index: 4; }

/* wave divider transitioning out of hero into the cream featured section */
.hero-wave {
  position: relative;
  z-index: 1;
  display: block;
  width: 100%;
  height: 110px;
  margin-top: -50px;
  margin-bottom: -1px;
}


@media (max-width: 980px) {
  .hero-grid {
    grid-template-columns: 1fr;
    gap: 28px;
    padding: 16px 22px 80px;
  }
  .hero-text { order: 2; max-width: 100%; text-align: center; }
  .hero-text .eyebrow,
  .hero-text .hero-meta-strip { justify-content: center; }
  .hero-text .hero-cta-row    { justify-content: center; }
  .hero-text .hero-subhead    { margin-left: auto; margin-right: auto; }
  .hero-visual { order: 1; max-width: 440px; margin: 0 auto; }
  .hero-wave { height: 70px; margin-top: -30px; }
}

@media (max-width: 540px) {
  .hero-v2 { padding-top: 16px; }
  .hero-grid { padding: 12px 18px 60px; gap: 22px; }
  .hero-visual { max-width: 340px; }
  .hero-headline-eyebrow { font-size: 0.74rem; letter-spacing: 0.28em; margin-bottom: 12px; }
  .hero-headline-main    { font-size: clamp(2rem, 9vw, 2.8rem); }
  .hero-headline-script  { font-size: clamp(2rem, 9.4vw, 2.9rem); }
  .hero-subhead          { font-size: 1rem; }
  .hero-meta-strip       { padding: 10px 18px; gap: 12px; }
  .hero-meta-sep         { display: none; }
  .hero-cta-row          { gap: 10px; }
  .hero-cta-row .btn     { min-width: 0; flex: 1 1 auto; }
  .hero-visual-tag       { font-size: 0.62rem; padding: 5px 11px; }
}

/* belt-and-suspenders: ensure the old centered hero treatment doesn't fight the v2 layout */
.hero-v2 .hero-inner,
.hero-v2 > .logo-wrap { display: none; }

/* ==========================================================================
   FEATURED MENU V2 — cream anchor section, larger premium cards
   ========================================================================== */

.featured-menu-v2 {
  background:
    radial-gradient(ellipse 80% 60% at 50% 0%, rgba(255, 235, 200, 0.7) 0%, transparent 70%),
    linear-gradient(180deg, var(--sand-warm) 0%, var(--cream) 100%);
  margin-top: 0;
  padding: 16px 0 64px;
  position: relative;
  z-index: 1;
  overflow: hidden;
}

.featured-menu-v2::before {
  content: "";
  position: absolute;
  inset: 0;
  background-image:
    radial-gradient(circle at 10% 30%, rgba(255, 140, 66, 0.08) 0%, transparent 35%),
    radial-gradient(circle at 90% 70%, rgba(126, 201, 229, 0.08) 0%, transparent 35%);
  pointer-events: none;
}

.featured-menu-v2 .section-inner {
  position: relative;
  padding: 36px 32px 20px;
  max-width: 1180px;
}

.featured-grid--v2 {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 28px;
  max-width: 1080px;
  margin: 0 auto 32px;
  align-items: stretch;
}

.featured-card--v2 {
  background: var(--white);
  border-radius: var(--radius-lg);
  overflow: hidden;
  text-decoration: none;
  color: var(--ink);
  display: flex;
  flex-direction: column;
  box-shadow:
    0 14px 32px rgba(15, 37, 72, 0.08),
    0 2px 6px rgba(15, 37, 72, 0.05);
  border: 1px solid rgba(255, 235, 200, 0.7);
  transition: transform 0.35s cubic-bezier(0.22, 1, 0.36, 1),
              box-shadow 0.35s ease;
  position: relative;
}

.featured-card--v2:hover {
  transform: translateY(-6px);
  box-shadow:
    0 24px 48px rgba(255, 140, 66, 0.16),
    0 4px 12px rgba(15, 37, 72, 0.08);
}

.featured-card--hero {
  outline: 2px solid var(--coral);
  outline-offset: -2px;
}

.featured-img-wrap {
  position: relative;
  overflow: hidden;
}

.featured-img-wrap .featured-img {
  aspect-ratio: 4 / 3;
  background-size: cover;
  background-position: center;
  transition: transform 0.7s cubic-bezier(0.22, 1, 0.36, 1);
}

.featured-card--v2:hover .featured-img-wrap .featured-img {
  transform: scale(1.06);
}

.featured-img-wrap .featured-tag-flag {
  position: absolute;
  top: 18px;
  left: 18px;
  font-family: 'Fredoka', sans-serif;
  font-size: 0.74rem;
  font-weight: 700;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--white);
  background: rgba(20, 33, 61, 0.9);
  padding: 7px 14px;
  border-radius: 999px;
  box-shadow: 0 4px 12px rgba(20, 33, 61, 0.35);
  backdrop-filter: blur(8px);
}

.featured-tag-flag--accent {
  background: linear-gradient(135deg, var(--coral), var(--coral-deep)) !important;
  box-shadow: 0 4px 16px rgba(255, 107, 53, 0.5) !important;
}

.featured-card--v2 .featured-body {
  padding: 28px 28px 26px;
  display: flex;
  flex-direction: column;
  flex: 1;
}

.featured-eyebrow {
  font-family: 'Fredoka', sans-serif;
  font-size: 0.74rem;
  font-weight: 600;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--coral-deep);
  margin: 0 0 10px;
}

.featured-card--v2 h3 {
  font-family: 'Fredoka', sans-serif;
  font-weight: 700;
  font-size: clamp(1.5rem, 2.2vw, 1.85rem);
  color: var(--ink);
  line-height: 1.1;
  letter-spacing: -0.015em;
  margin: 0 0 12px;
}

.featured-card--v2 p {
  color: var(--ink-soft);
  opacity: 0.88;
  font-size: 1rem;
  line-height: 1.6;
  margin: 0 0 22px;
  flex: 1;
}

.featured-foot {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 14px;
  padding-top: 16px;
  border-top: 1px dashed rgba(20, 33, 61, 0.18);
}

.featured-card--v2 .featured-price {
  font-family: 'Fredoka', sans-serif;
  font-weight: 700;
  font-size: 1.9rem;
  color: var(--coral-deep);
  line-height: 1;
}
.featured-card--v2 .featured-price::before {
  content: "$";
  font-size: 0.55em;
  vertical-align: top;
  position: relative;
  top: 0.3em;
  margin-right: 2px;
  opacity: 0.75;
}

.featured-link {
  font-family: 'Fredoka', sans-serif;
  font-weight: 600;
  font-size: 0.95rem;
  color: var(--ink);
  transition: transform 0.25s, color 0.2s;
}
.featured-card--v2:hover .featured-link {
  color: var(--coral-deep);
  transform: translateX(4px);
}

.featured-cta {
  display: flex;
  flex-direction: column;
  gap: 8px;
  align-items: center;
  margin-top: 0;
}

.btn-text-link {
  font-family: 'Fredoka', sans-serif;
  font-size: 0.92rem;
  color: var(--ink-soft);
  text-decoration: none;
  border-bottom: 1px dashed currentColor;
  padding-bottom: 1px;
  transition: color 0.2s;
}
.btn-text-link:hover { color: var(--coral-deep); }

@media (max-width: 880px) {
  .featured-grid--v2 { grid-template-columns: 1fr; gap: 24px; }
  .featured-menu-v2 .section-inner { padding: 36px 22px 16px; }
}

@media (max-width: 540px) {
  .featured-menu-v2 { padding: 8px 0 64px; }
  .featured-card--v2 .featured-body { padding: 22px 22px 22px; }
  .featured-card--v2 h3 { font-size: 1.4rem; }
  .featured-card--v2 .featured-price { font-size: 1.6rem; }
}

/* ==========================================================================
   STORY V2 — 2-col with overlapping photos, badge, and contact tiles
   ========================================================================== */

.story-section-v2 {
  position: relative;
  padding: 40px 0 52px;
  z-index: 1;
  background:
    linear-gradient(180deg, transparent 0%, rgba(255, 235, 200, 0.18) 60%, transparent 100%);
}

.story-section-v2 .section-inner {
  max-width: 1180px;
  padding: 28px 32px;
}

.story-grid {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 1.05fr);
  gap: 48px;
  align-items: center;
}

.story-visual {
  position: relative;
  aspect-ratio: 5 / 6;
  max-width: 540px;
  margin: 0 auto;
  width: 100%;
  padding: 18px 30px 30px;
}

/* a soft sun-glow halo behind the photo stack so it reads as one composition */
.story-visual::before {
  content: "";
  position: absolute;
  inset: 8% 4%;
  border-radius: 50%;
  background: radial-gradient(circle at 60% 40%,
    rgba(255, 215, 140, 0.5) 0%,
    rgba(255, 180, 100, 0.25) 35%,
    transparent 70%);
  filter: blur(28px);
  z-index: 0;
  pointer-events: none;
}

.story-visual-main,
.story-visual-overlay {
  position: absolute;
  margin: 0;
  border-radius: 22px;
  overflow: hidden;
  box-shadow:
    0 18px 42px rgba(15, 37, 72, 0.18),
    0 4px 12px rgba(15, 37, 72, 0.10);
  background: var(--white);
}

.story-visual-main {
  top: 2%;
  left: 6%;
  width: 80%;
  height: 72%;
  transform: rotate(-2.5deg);
  z-index: 1;
  border: 8px solid var(--cream);
}

.story-visual-overlay {
  bottom: 2%;
  right: 0%;
  width: 56%;
  height: 50%;
  transform: rotate(4deg);
  border: 8px solid var(--cream);
  z-index: 2;
}

.story-visual-main img,
.story-visual-overlay img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}

/* .story-visual-badge removed — authenticity > faux badge */

.story-copy {
  max-width: 540px;
}

.story-copy .kicker { margin-bottom: 18px; }

.story-copy .section-title--display { text-align: left; }

.story-lede {
  font-size: clamp(1.08rem, 1.4vw, 1.22rem);
  line-height: 1.5;
  color: var(--ink);
  margin: 10px 0 14px;
  font-weight: 600;
  text-wrap: balance;
}

.story-body {
  font-size: 1.02rem;
  line-height: 1.65;
  color: var(--ink-soft);
  margin: 0 0 22px;
}

body.dawn .story-lede,
body.dusk .story-lede { color: #1d2a4a; }
body.night .story-lede { color: #f7eccf; }
body.night .story-body { color: #cbd5e8; }

.story-tagline-v2 {
  display: flex;
  gap: 18px;
  flex-wrap: wrap;
  margin: 0 0 32px;
  padding: 14px 0 6px;
  border-top: 2px dashed rgba(255, 140, 66, 0.4);
}

.story-tagline-v2 span {
  font-family: 'Lobster', cursive;
  font-size: 1.3rem;
  color: var(--coral-deep);
  letter-spacing: 0.01em;
}
.story-tagline-v2 span + span::before {
  content: "·";
  margin-right: 18px;
  color: rgba(255, 140, 66, 0.55);
}

.story-contact {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 12px;
}

.story-contact-tile {
  display: flex;
  align-items: center;
  gap: 14px;
  padding: 14px 18px;
  background: rgba(255, 255, 255, 0.75);
  border: 1px solid rgba(20, 33, 61, 0.1);
  border-radius: 14px;
  text-decoration: none;
  color: var(--ink);
  transition: background 0.2s, transform 0.2s, box-shadow 0.2s, border-color 0.2s;
  backdrop-filter: blur(8px);
}
.story-contact-tile:hover {
  background: var(--white);
  border-color: rgba(255, 140, 66, 0.4);
  transform: translateY(-2px);
  box-shadow: 0 14px 30px rgba(15, 37, 72, 0.12);
}

.story-contact-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 40px;
  height: 40px;
  border-radius: 50%;
  background: linear-gradient(135deg, var(--coral), var(--coral-deep));
  color: var(--white);
  flex-shrink: 0;
  box-shadow: 0 6px 14px rgba(255, 140, 66, 0.35);
}

.story-contact-text {
  display: flex;
  flex-direction: column;
  gap: 2px;
  min-width: 0;
}
.story-contact-label {
  font-family: 'Fredoka', sans-serif;
  font-size: 0.7rem;
  font-weight: 600;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--coral-deep);
}
.story-contact-value {
  font-family: 'Fredoka', sans-serif;
  font-size: 1rem;
  font-weight: 600;
  color: var(--ink);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

@media (max-width: 980px) {
  .story-grid { grid-template-columns: 1fr; gap: 56px; }
  .story-copy .section-title--display { text-align: center; }
  .story-copy { max-width: 640px; margin: 0 auto; text-align: center; }
  .story-tagline-v2 { justify-content: center; }
  .story-section-v2 .section-inner { padding: 28px 22px; }
}

@media (max-width: 540px) {
  .story-section-v2 { padding: 32px 0; }
  .story-visual { max-width: 360px; }
  .story-contact { grid-template-columns: 1fr; }
  .story-tagline-v2 span { font-size: 1.15rem; }
  .story-lede { font-size: 1.05rem; }
}

/* ==========================================================================
   CTA BANNER V2 — sunset-glow, big confident headline, food corner accents
   ========================================================================== */

.cta-banner-v2 {
  padding: 8px 24px 52px;
  max-width: 1240px;
  margin: 0 auto;
}

.cta-banner-inner--v2 {
  position: relative;
  overflow: hidden;
  background:
    radial-gradient(ellipse 50% 80% at 22% 28%, rgba(255, 205, 140, 0.35) 0%, transparent 60%),
    radial-gradient(ellipse 60% 80% at 78% 72%, rgba(220, 70, 100, 0.28) 0%, transparent 65%),
    linear-gradient(135deg, var(--coral) 0%, var(--coral-deep) 55%, #c63a68 100%);
  border-radius: 36px;
  padding: 72px 60px;
  text-align: center;
  color: var(--white);
  box-shadow:
    0 24px 60px rgba(214, 70, 30, 0.4),
    inset 0 1px 0 rgba(255, 255, 255, 0.22);
}

.cta-banner-glow {
  position: absolute;
  pointer-events: none;
  border-radius: 50%;
  filter: blur(14px);
  opacity: 0.35;
}
.cta-banner-glow--a {
  top: -16%; left: -6%;
  width: 220px; height: 220px;
  background: radial-gradient(circle, #ffd680 0%, transparent 65%);
  animation: ctaGlowDrift 14s ease-in-out infinite;
}
.cta-banner-glow--b {
  bottom: -18%; right: -4%;
  width: 260px; height: 260px;
  background: radial-gradient(circle, #ff5577 0%, transparent 65%);
  animation: ctaGlowDrift 16s ease-in-out infinite reverse;
  animation-delay: -3s;
}
@keyframes ctaGlowDrift {
  0%, 100% { transform: translate(0, 0)      scale(1);    }
  50%      { transform: translate(20px, -10px) scale(1.06); }
}
@media (prefers-reduced-motion: reduce) {
  .cta-banner-glow { animation: none !important; }
}

.cta-banner-deco {
  position: absolute;
  width: 200px;
  aspect-ratio: 1 / 1;
  border-radius: 50%;
  object-fit: cover;
  box-shadow:
    0 18px 40px rgba(0, 0, 0, 0.35),
    inset 0 0 0 5px rgba(255, 255, 255, 0.4);
  opacity: 1;
  pointer-events: none;
}
.cta-banner-deco--left {
  top: 50%; left: -54px;
  transform: translateY(-50%) rotate(-10deg);
}
.cta-banner-deco--right {
  top: 50%; right: -54px;
  transform: translateY(-50%) rotate(12deg);
}

.cta-banner-content {
  position: relative;
  z-index: 2;
  max-width: 720px;
  margin: 0 auto;
}

.cta-banner-kicker {
  display: inline-block;
  font-family: 'Fredoka', sans-serif;
  font-size: 0.82rem;
  font-weight: 700;
  letter-spacing: 0.32em;
  text-transform: uppercase;
  color: rgba(255, 255, 255, 0.95);
  padding: 8px 18px;
  border: 1px solid rgba(255, 255, 255, 0.4);
  border-radius: 999px;
  margin-bottom: 22px;
  backdrop-filter: blur(6px);
}

.cta-banner-title--big {
  font-family: 'Fredoka', sans-serif;
  font-weight: 800;
  font-size: clamp(2.2rem, 6vw, 4rem);
  color: var(--white);
  line-height: 1.05;
  letter-spacing: -0.025em;
  text-shadow: 0 2px 1px rgba(122, 38, 8, 0.35);
  margin-bottom: 18px;
  -webkit-font-smoothing: antialiased;
}
.cta-banner-title--big em {
  font-family: 'Lobster', cursive;
  font-style: normal;
  font-weight: 400;
  color: #fff4d6;
  display: inline-block;
  transform: translateY(2px);
  text-shadow: 0 2px 1px rgba(122, 38, 8, 0.4);
}

.cta-banner-v2 .cta-banner-sub {
  font-size: clamp(1.04rem, 1.4vw, 1.2rem);
  color: #ffffff;
  line-height: 1.55;
  max-width: 580px;
  margin: 0 auto 32px;
  font-weight: 500;
  text-shadow: 0 1px 1px rgba(122, 38, 8, 0.25);
  opacity: 0.96;
}

.cta-row--banner {
  display: flex;
  justify-content: center;
  gap: 14px;
  flex-wrap: wrap;
}

/* white-on-coral primary in CTA banner */
.btn-primary-on-coral {
  background: var(--white);
  color: #c33a14;
  font-weight: 700;
  box-shadow:
    0 10px 22px rgba(0, 0, 0, 0.25),
    inset 0 -2px 0 rgba(195, 58, 20, 0.1);
}
.btn-primary-on-coral:hover {
  background: #fff8e0;
  color: #a82e0d;
  transform: translateY(-2px);
  box-shadow:
    0 16px 32px rgba(0, 0, 0, 0.32),
    inset 0 -2px 0 rgba(195, 58, 20, 0.15);
}

.cta-banner-v2 .btn-ghost-light {
  background: rgba(255, 255, 255, 0.08);
  color: var(--white);
  border-color: rgba(255, 255, 255, 0.7);
  border-width: 2px;
  font-weight: 700;
  box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.15);
}
.cta-banner-v2 .btn-ghost-light:hover {
  background: var(--white);
  color: #c33a14;
  border-color: var(--white);
}

@media (max-width: 860px) {
  .cta-banner-inner--v2 {
    padding: 64px 36px;
    border-radius: 28px;
  }
  .cta-banner-deco { display: none; }
}

@media (max-width: 540px) {
  .cta-banner-v2 { padding: 8px 16px 48px; }
  .cta-banner-inner--v2 { padding: 48px 22px; border-radius: 24px; }
  .cta-banner-kicker { font-size: 0.74rem; letter-spacing: 0.26em; padding: 6px 14px; }
}

/* ==========================================================================
   HOURS V2 — better composition, "Visit Us on Sanibel" anchor
   ========================================================================== */

.hours-section-v2 {
  position: relative;
  padding: 80px 0 0;
  background:
    radial-gradient(ellipse 100% 60% at 50% 0%, rgba(214, 84, 32, 0.16) 0%, transparent 60%),
    linear-gradient(180deg,
      #382148 0%,
      #251c44 10%,
      #14264f 28%,
      #0e1c3a 60%,
      #050d1e 100%);
  color: var(--white);
}

.hours-section-glow {
  position: absolute;
  top: -10%;
  left: 50%;
  transform: translateX(-50%);
  width: 60%;
  height: 35%;
  background: radial-gradient(ellipse, rgba(255, 200, 130, 0.08) 0%, transparent 70%);
  filter: blur(18px);
  pointer-events: none;
}

.hours-section-v2 .section-inner {
  position: relative;
  padding: 64px 32px 100px;
  max-width: 1180px;
}

.hours-section-v2 .section-title--display { color: #fef0c5; }
.hours-section-v2 .section-title--display em { color: #ffba7e; }

.hours-section-v2 .kicker {
  background: rgba(255, 255, 255, 0.13);
  color: #ffd9a3;
  border: 1px solid rgba(255, 140, 66, 0.35);
  box-shadow: none;
}

.hours-visit--v2 {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 1.25fr);
  gap: 32px;
  align-items: stretch;
  max-width: 1080px;
  margin: 0 auto;
}

.hours-card {
  background: rgba(255, 255, 255, 0.045);
  border: 1px solid rgba(255, 255, 255, 0.12);
  border-radius: 24px;
  padding: 28px 28px 24px;
  display: flex;
  flex-direction: column;
  gap: 18px;
  backdrop-filter: blur(6px);
}

.hours-card-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding-bottom: 14px;
  border-bottom: 1px solid rgba(255, 255, 255, 0.1);
}

.hours-card-eyebrow {
  font-family: 'Fredoka', sans-serif;
  font-size: 0.84rem;
  font-weight: 700;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: #ffd9a3;
}

.hours-card-tz {
  font-family: 'Fredoka', sans-serif;
  font-size: 0.78rem;
  color: rgba(255, 255, 255, 0.6);
  letter-spacing: 0.08em;
}

.hours-section-v2 .hours-list {
  background: transparent;
  border: 0;
  padding: 0;
}

.hours-section-v2 .hours-list li {
  padding: 11px 4px;
  border-radius: 10px;
  font-size: 1.02rem;
}
.hours-section-v2 .hours-list li.today {
  background: linear-gradient(135deg, var(--coral) 0%, var(--coral-deep) 100%);
  padding: 12px 14px;
  box-shadow: 0 8px 20px rgba(255, 107, 53, 0.4);
  font-weight: 700;
}

.hours-card-foot {
  margin-top: auto;
  padding-top: 18px;
  border-top: 1px solid rgba(255, 255, 255, 0.1);
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 14px;
  flex-wrap: wrap;
}

.hours-address {
  display: flex;
  flex-direction: column;
  gap: 2px;
}
.hours-address-label {
  font-family: 'Fredoka', sans-serif;
  font-size: 0.72rem;
  font-weight: 600;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: #ffba7e;
}
.hours-address-value {
  font-family: 'Fredoka', sans-serif;
  font-size: 0.98rem;
  font-weight: 600;
  color: var(--white);
  line-height: 1.35;
}

.btn-sm {
  font-size: 0.92rem;
  padding: 10px 18px;
  min-width: 0;
}

.map-card--v2 {
  position: relative;
  border-radius: 24px;
  overflow: hidden;
  border: 1px solid rgba(255, 255, 255, 0.15);
  box-shadow: 0 24px 60px rgba(0, 0, 0, 0.45);
  min-height: 380px;
  background: #1d3a6b;
  display: flex;
  flex-direction: column;
}
.map-card--v2 iframe {
  flex: 1 1 auto;
  width: 100%;
  min-height: 320px;
  border: 0;
  filter: saturate(0.95) contrast(1.02);
}

.map-directions--v2 {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  font-family: 'Fredoka', sans-serif;
  font-weight: 700;
  font-size: 1rem;
  color: var(--white);
  background: linear-gradient(135deg, var(--coral) 0%, var(--coral-deep) 100%);
  padding: 16px 24px;
  text-decoration: none;
  transition: filter 0.2s, transform 0.15s;
  letter-spacing: 0.02em;
}
.map-directions--v2:hover {
  filter: brightness(1.08);
  transform: translateY(-1px);
}
.map-directions--v2 svg { transition: transform 0.25s; }
.map-directions--v2:hover svg { transform: translateX(3px); }

@media (max-width: 860px) {
  .hours-visit--v2 { grid-template-columns: 1fr; gap: 22px; }
  .hours-section-v2 .section-inner { padding: 48px 22px 80px; }
}

@media (max-width: 540px) {
  .hours-card { padding: 22px 20px; }
  .hours-card-foot { flex-direction: column; align-items: stretch; gap: 16px; }
  .hours-card-foot .btn { width: 100%; }
  .map-card--v2 { min-height: 320px; }
  .map-card--v2 iframe { min-height: 260px; }
}

/* lighter touch on the body gradient under the lighter sections so the
   sand-toned featured-menu and the warmth of the story section don't
   compete with the sky behind them */
body { background-attachment: fixed; }

/* keep the ocean-bg locked behind, but trim it so distant illustrations
   don't ghost into the featured section */
.ocean-bg { z-index: 0; }

/* on mobile, scale back the ocean-bg height so the island/lighthouse
   illustrations don't fight with the hero text below the food stack */
@media (max-width: 760px) {
  .ocean-bg { height: 60vh; }
  .ocean-bg .island { opacity: 0.55; }
}
@media (max-width: 540px) {
  .ocean-bg { height: 56vh; }
}

/* ==========================================================================
   GALLERY V2 — sand continuation, editorial mosaic, polished frames
   ========================================================================== */

.gallery-section-v2 {
  position: relative;
  background:
    radial-gradient(ellipse 90% 50% at 50% 0%, rgba(255, 220, 170, 0.55) 0%, transparent 70%),
    linear-gradient(180deg, var(--cream) 0%, #fff7e8 50%, var(--sand-warm) 100%);
  padding: 0 0 32px;
}

.gallery-section-v2::before {
  content: "";
  position: absolute;
  inset: 0;
  pointer-events: none;
  background-image:
    radial-gradient(circle at 6% 10%,  rgba(255, 140, 66, 0.07) 0%, transparent 35%),
    radial-gradient(circle at 95% 80%, rgba(126, 201, 229, 0.08) 0%, transparent 35%);
}

.gallery-section-v2 .section-inner {
  position: relative;
  padding: 20px 32px 12px;
  max-width: 1180px;
}

/* Editorial mosaic grid — deliberate placement instead of CSS column masonry.
   Two of the photos span vertically; the rest fill the remaining cells. */
.gallery-section-v2 .gallery {
  display: grid;
  grid-template-columns: repeat(12, 1fr);
  grid-auto-rows: 110px;
  gap: 14px;
  max-width: 1080px;
  margin: 0 auto;
  column-count: initial;
}

.gallery-section-v2 .gallery-item {
  display: block;
  border-radius: 16px;
  box-shadow:
    0 10px 24px rgba(15, 37, 72, 0.10),
    0 2px 6px rgba(15, 37, 72, 0.06);
  border: 5px solid var(--white);
  background: var(--white);
  margin: 0;
  overflow: hidden;
  position: relative;
  transition: transform 0.4s cubic-bezier(0.22, 1, 0.36, 1),
              box-shadow 0.35s ease;
}

.gallery-section-v2 .gallery-item:hover {
  transform: translateY(-4px) rotate(-0.4deg);
  box-shadow:
    0 24px 50px rgba(255, 140, 66, 0.25),
    0 6px 14px rgba(15, 37, 72, 0.12);
}

.gallery-section-v2 .gallery-item img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}

/* Editorial layout — cells now match each photo's natural orientation
   so faces and subjects aren't cropped to fit rigid geometry. */
/* 1: poke-bowl (portrait/squarish food) — taller cell */
.gallery-section-v2 .gallery-item:nth-child(1) { grid-column: span 5; grid-row: span 4; }
/* 2: team (landscape group shot) — wide cell, top row */
.gallery-section-v2 .gallery-item:nth-child(2) { grid-column: span 4; grid-row: span 2; }
/* 3: customer-sushi-boat (landscape) — wide cell, top row */
.gallery-section-v2 .gallery-item:nth-child(3) { grid-column: span 3; grid-row: span 2; }
/* 4: staff-poke (portrait, person holding bowl) — TALL cell so head + bowl both fit */
.gallery-section-v2 .gallery-item:nth-child(4) { grid-column: span 4; grid-row: span 4; }
/* 5: sushi-platter (landscape food) — wide cell */
.gallery-section-v2 .gallery-item:nth-child(5) { grid-column: span 3; grid-row: span 4; transform: rotate(-0.3deg); }
/* 6: interior-merch (landscape with people) — wide cell, bottom */
.gallery-section-v2 .gallery-item:nth-child(6) { grid-column: span 5; grid-row: span 2; transform: rotate(0.4deg); }

/* Object-position: bias toward the upper portion of human photos so heads
   and faces stay in frame. Food shots stay center-center. */
.gallery-section-v2 .gallery-item:nth-child(1) img { object-position: center 40%; }
.gallery-section-v2 .gallery-item:nth-child(2) img { object-position: center 32%; }
.gallery-section-v2 .gallery-item:nth-child(3) img { object-position: center 28%; }
.gallery-section-v2 .gallery-item:nth-child(4) img { object-position: center 22%; }
.gallery-section-v2 .gallery-item:nth-child(5) img { object-position: center 50%; }
.gallery-section-v2 .gallery-item:nth-child(6) img { object-position: center 38%; }

.gallery-section-v2 .gallery-item:nth-child(5):hover,
.gallery-section-v2 .gallery-item:nth-child(6):hover { transform: translateY(-4px); }

.gallery-section-v2 .gallery-item.feature::after {
  background: linear-gradient(135deg, var(--coral), var(--coral-deep));
  box-shadow: 0 6px 16px rgba(255, 107, 53, 0.5);
  top: 18px;
  left: 18px;
}

@media (max-width: 880px) {
  .gallery-section-v2 .gallery {
    grid-template-columns: repeat(6, 1fr);
    grid-auto-rows: 90px;
    gap: 12px;
  }
  .gallery-section-v2 .gallery-item:nth-child(1) { grid-column: span 6; grid-row: span 3; }
  .gallery-section-v2 .gallery-item:nth-child(2) { grid-column: span 3; grid-row: span 2; }
  .gallery-section-v2 .gallery-item:nth-child(3) { grid-column: span 3; grid-row: span 2; }
  .gallery-section-v2 .gallery-item:nth-child(4) { grid-column: span 3; grid-row: span 2; }
  .gallery-section-v2 .gallery-item:nth-child(5) { grid-column: span 3; grid-row: span 2; }
  .gallery-section-v2 .gallery-item:nth-child(6) { grid-column: span 6; grid-row: span 2; }
  .gallery-section-v2 .section-inner { padding: 16px 22px 8px; }
  .gallery-section-v2 .gallery-item { border-width: 4px; }
}
@media (max-width: 540px) {
  .gallery-section-v2 .gallery {
    grid-template-columns: 1fr;
    grid-auto-rows: 200px;
  }
  .gallery-section-v2 .gallery-item:nth-child(n) { grid-column: span 1; grid-row: span 1; transform: none; }
}

/* ==========================================================================
   FIX: story section now sits cleanly between gallery (sand) and CTA (coral),
   add a soft top wave to bridge gallery → story
   ========================================================================== */

.story-section-v2 {
  background:
    linear-gradient(180deg, var(--sand-warm) 0%, #fff7e8 40%, #fff3d8 100%);
  margin-top: -2px;
}

/* ==========================================================================
   ENVIRONMENTAL STORYTELLING LAYER
   Refined coastal silhouettes, shoreline wave dividers, and a cinematic
   Sanibel lighthouse moment in the hours section. Reintroduces the island
   sense of place lost in the v2 redesign — but as atmosphere, not clip art.
   ========================================================================== */

/* shared frame for ensuring section can host the decorative SVGs cleanly */
.featured-menu-v2,
.gallery-section-v2,
.story-section-v2,
.cta-banner-v2,
.hours-section-v2 {
  isolation: isolate;
}

/* ----- lock text colors inside cream-zone sections regardless of body
   day/night class. These sections have their OWN cream backgrounds, so
   the body.night rule that turns headlines cream would make them
   invisible on a cream bg. ----- */
body.dawn .featured-menu-v2 .section-title--dark,
body.dawn .gallery-section-v2 .section-title--dark,
body.dawn .story-section-v2 .section-title--dark,
body.dusk .featured-menu-v2 .section-title--dark,
body.dusk .gallery-section-v2 .section-title--dark,
body.dusk .story-section-v2 .section-title--dark,
body.night .featured-menu-v2 .section-title--dark,
body.night .gallery-section-v2 .section-title--dark,
body.night .story-section-v2 .section-title--dark {
  color: var(--ink);
  text-shadow: none;
}

body.night .featured-menu-v2 .section-lede,
body.night .gallery-section-v2 .section-lede,
body.night .story-section-v2 .section-lede,
body.dusk  .featured-menu-v2 .section-lede,
body.dusk  .gallery-section-v2 .section-lede,
body.dusk  .story-section-v2 .section-lede,
body.dawn  .featured-menu-v2 .section-lede,
body.dawn  .gallery-section-v2 .section-lede,
body.dawn  .story-section-v2 .section-lede,
body.night .story-section-v2 .story-lede,
body.night .story-section-v2 .story-body,
body.dusk  .story-section-v2 .story-lede,
body.dusk  .story-section-v2 .story-body,
body.dawn  .story-section-v2 .story-lede,
body.dawn  .story-section-v2 .story-body {
  color: var(--ink-soft);
}

body.night .story-section-v2 .story-lede,
body.dusk  .story-section-v2 .story-lede,
body.dawn  .story-section-v2 .story-lede {
  color: var(--ink);
}

/* featured card body copy on cream sections */
body.night .featured-card--v2 p,
body.dusk  .featured-card--v2 p,
body.dawn  .featured-card--v2 p {
  color: var(--ink-soft);
}
body.night .featured-card--v2 h3,
body.dusk  .featured-card--v2 h3,
body.dawn  .featured-card--v2 h3 {
  color: var(--ink);
}
body.night .featured-card--v2,
body.dusk  .featured-card--v2,
body.dawn  .featured-card--v2 {
  color: var(--ink);
}

/* contact tile values on cream sections stay dark */
body.night .story-contact-tile .story-contact-value,
body.dusk  .story-contact-tile .story-contact-value,
body.dawn  .story-contact-tile .story-contact-value {
  color: var(--ink);
}

/* ----- inter-section wave / shoreline dividers ----- */

.env-divider {
  position: relative;
  z-index: 1;
  display: block;
  width: 100%;
  height: 60px;
  line-height: 0;
  margin: -1px 0 -1px;   /* sit flush against adjacent sections */
  pointer-events: none;
}
.env-divider svg {
  display: block;
  width: 100%;
  height: 100%;
}

.env-divider--cream { height: 56px; margin-top: -36px; }
.env-divider--shore { height: 70px; margin-top: -40px; }
.env-divider--gold  { height: 70px; margin-top: -34px; }
.env-divider--into-navy {
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  height: 96px;
  margin: 0;
  z-index: 2;
  pointer-events: none;
}
.env-divider--into-navy svg { height: 96px; }
@media (max-width: 720px) { .env-divider--into-navy, .env-divider--into-navy svg { height: 64px; } }

/* ----- decorative coastal silhouettes (cream zone) ----- */

.env-frond {
  position: absolute;
  pointer-events: none;
  z-index: 0;
}

.env-frond--featured {
  bottom: 0;
  right: 0;
  width: 320px;
  height: auto;
  max-width: 30%;
  opacity: 0.92;
}

.env-frond--featured-l {
  position: absolute;
  bottom: 0;
  left: 0;
  width: 300px;
  height: auto;
  max-width: 28%;
  opacity: 0.92;
  pointer-events: none;
  z-index: 0;
}

.env-island {
  position: absolute;
  pointer-events: none;
  z-index: 0;
}

.env-island--gallery {
  bottom: 0;
  left: 0;
  width: 380px;
  max-width: 32%;
  height: auto;
}

.env-island--gallery-r {
  position: absolute;
  bottom: 0;
  right: 0;
  width: 380px;
  max-width: 32%;
  height: auto;
  pointer-events: none;
  z-index: 0;
}

.env-tropics {
  position: absolute;
  pointer-events: none;
  z-index: 0;
}

.env-tropics--story {
  bottom: 0;
  right: 0;
  width: 460px;
  max-width: 38%;
  height: auto;
}

/* ----- cinematic lighthouse + horizon for the hours section ----- */

.env-horizon {
  position: absolute;
  pointer-events: none;
  z-index: 0;
}

.env-horizon--hours {
  bottom: 0;
  left: 0;
  right: 0;
  width: 100%;
  height: 540px;
  opacity: 1;
}
.hours-section-v2 { padding-bottom: 60px; }
.hours-section-v2 .section-inner { padding-bottom: 220px; }
@media (max-width: 720px) { .env-horizon--hours { height: 360px; } .hours-section-v2 .section-inner { padding-bottom: 160px; } }

/* warm beacon pulse — slow, calm, cinematic */
.env-lighthouse-beacon {
  transform-origin: center;
  transform-box: fill-box;
  animation: envBeaconPulse 5.5s ease-in-out infinite;
}
@keyframes envBeaconPulse {
  0%, 100% { opacity: 0.55; transform: scale(0.85); }
  50%      { opacity: 1;    transform: scale(1.15); }
}

@media (prefers-reduced-motion: reduce) {
  .env-lighthouse-beacon { animation: none; }
}

/* keep hero ocean-bg accessible alongside these but make sure they layer cleanly */
.env-horizon--hours,
.env-tropics--story,
.env-island--gallery,
.env-frond--featured {
  filter: drop-shadow(0 4px 18px rgba(0,0,0,0.05));
}

/* the env-horizon and the section-inner content must coexist —
   section-inner gets a higher stack to remain interactive */
.hours-section-v2 .section-inner { position: relative; z-index: 2; }
.story-section-v2 .section-inner { position: relative; z-index: 2; }
.gallery-section-v2 .section-inner { position: relative; z-index: 2; }
.featured-menu-v2 .section-inner { position: relative; z-index: 2; }

/* mobile: gentler, smaller silhouettes so they don't dominate */
@media (max-width: 720px) {
  .env-frond--featured   { width: 220px; opacity: 0.7; }
  .env-frond--featured-l { width: 200px; opacity: 0.6; }
  .env-island--gallery   { width: 260px; opacity: 0.85; }
  .env-island--gallery-r { width: 240px; opacity: 0.7; }
  .env-tropics--story    { width: 280px; opacity: 0.8; }
  .env-horizon--hours    { height: 65%; }
  .env-divider, .env-divider--cream, .env-divider--shore, .env-divider--gold { height: 40px; margin-top: -22px; }
  .env-divider--into-navy { height: 30px; }
}

/* ==========================================================================
   COASTAL ZONE — calm restrained wrapper for the CTA banner + hours
   section. No palms, no big sun, no fantasy sky. Just a soft warm-to-navy
   bridge that lets the CTA banner sit on warm dusk and the hours section
   rest on a quiet navy ocean. Subtle distant horizon at the very bottom.
   ========================================================================== */

.coastal-zone {
  position: relative;
  isolation: isolate;
  background: linear-gradient(180deg,
    #fff3d8 0%,        /* meet the cream story bg flush at top */
    #f5d4a8 3%,
    #e8b08a 7%,        /* gentle warm tone behind the CTA banner */
    #2a3258 26%,       /* dusk fade */
    #14264f 48%,
    #0e1c3a 72%,
    #050d1e 100%);
  margin-top: -1px;
  z-index: 1;
}

/* stars are drawn inside the env-horizon SVG directly — see HTML. The CSS
   pseudo-element approach was unreliable across browsers. */
.env-h-star { animation: envStarTwinkle 4s ease-in-out infinite; transform-origin: center; transform-box: fill-box; }
.env-h-star.s2 { animation-delay: -1.2s; }
.env-h-star.s3 { animation-delay: -2.6s; }
.env-h-star.s4 { animation-delay: -3.8s; }
@keyframes envStarTwinkle {
  0%, 100% { opacity: 0.45; }
  50%      { opacity: 1;    }
}
@media (prefers-reduced-motion: reduce) {
  .env-h-star { animation: none; }
}

@media (prefers-reduced-motion: reduce) {
  .coastal-zone::before { animation: none; }
}

@media (max-width: 720px) {
  .coastal-zone::before { top: 32%; bottom: 70px; opacity: 0.5; }
}

/* CTA banner sits on the warm dusk band, looks like a coral sign on a soft sky */
.coastal-zone .cta-banner-v2 {
  position: relative;
  z-index: 2;
  padding-top: 32px;
  padding-bottom: 32px;
}
.coastal-zone .cta-banner-inner--v2 {
  box-shadow:
    0 22px 50px rgba(20, 12, 40, 0.35),
    0 6px 16px rgba(0, 0, 0, 0.22),
    inset 0 1px 0 rgba(255, 255, 255, 0.22);
}

/* hours section sits on the quiet navy ocean half */
.coastal-zone .hours-section-v2 {
  background: transparent;
  padding-top: 20px;
  padding-bottom: 680px;   /* tall room for the continuous horizon scene */
  margin-top: 0;
  position: static;        /* let env-horizon anchor to the coastal-zone */
}
.coastal-zone .hours-section-v2 .section-inner { padding-bottom: 30px; }
@media (max-width: 720px) {
  .coastal-zone .hours-section-v2 { padding-bottom: 440px; }
}

/* drop the old hard divider + spotlight glow — both made the scene feel artificial */
.coastal-zone .env-divider--into-navy { display: none; }
.coastal-zone .hours-section-glow      { display: none; }

/* hours card & map: softer translucency so the ocean shows behind without
   making them feel like floating UI on alien terrain */
.coastal-zone .hours-card {
  background: rgba(10, 22, 46, 0.78);
  border-color: rgba(255, 255, 255, 0.08);
  backdrop-filter: blur(8px);
  -webkit-backdrop-filter: blur(8px);
  box-shadow:
    0 18px 36px rgba(0, 0, 0, 0.4),
    inset 0 1px 0 rgba(255, 255, 255, 0.04);
}

.coastal-zone .map-card--v2 {
  background: rgba(10, 22, 46, 0.65);
  border-color: rgba(255, 255, 255, 0.08);
  box-shadow:
    0 18px 36px rgba(0, 0, 0, 0.45),
    inset 0 1px 0 rgba(255, 255, 255, 0.04);
}

/* The horizon SVG is a TALL background layer that bleeds past both the top
   AND the bottom of its container. Top is masked into transparent so the
   stars/atmosphere fade naturally into the navy sky above. Bottom bleeds
   into the footer. Net result: no visible scene boundary. */
.coastal-zone .env-horizon--hours {
  position: absolute;
  bottom: -60px;
  left: 0;
  right: 0;
  width: 100%;
  height: 820px;
  z-index: 1;
  pointer-events: none;
  opacity: 1;
  /* fade the top 18% of the SVG so its stars+atmosphere emerge from the
     navy sky without a visible boundary line */
  -webkit-mask-image: linear-gradient(180deg, transparent 0%, rgba(0,0,0,0.5) 8%, #000 18%, #000 100%);
          mask-image: linear-gradient(180deg, transparent 0%, rgba(0,0,0,0.5) 8%, #000 18%, #000 100%);
}
@media (max-width: 720px) {
  .coastal-zone .env-horizon--hours { height: 540px; bottom: -40px; }
}

/* coastal-zone overflows hidden by default elsewhere; allow our horizon
   art to bleed down through the section→footer boundary */
.coastal-zone { overflow: visible; }

/* match the footer to the coastal-zone's bottom tone so the SVG's deepest
   wave color flows into the footer with no visible seam */
.site-footer {
  background: #050d1e;
  color: rgba(255, 255, 255, 0.78);
  border-top: 1px solid rgba(255, 255, 255, 0.04);
}
.site-footer a {
  color: rgba(255, 200, 130, 0.92);
  text-decoration: none;
  border-bottom: 1px dotted rgba(255, 200, 130, 0.4);
  transition: color 0.2s, border-color 0.2s;
}
.site-footer a:hover {
  color: #ffd690;
  border-bottom-color: rgba(255, 200, 130, 0.7);
}

/* utility — keep wrapped tokens together (phone numbers, brand names) */
.nowrap { white-space: nowrap; }

/* ==========================================================================
   "Online ordering coming soon" — subtle reassurance, not a banner
   ========================================================================== */

.featured-cta-note {
  font-family: 'Fredoka', sans-serif;
  font-size: 0.82rem;
  font-weight: 600;
  letter-spacing: 0.04em;
  color: var(--ink-soft);
  opacity: 0.7;
  margin: 6px 0 0;
  display: inline-flex;
  align-items: center;
  gap: 8px;
}
.featured-cta-dot {
  display: inline-block;
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: var(--coral);
  box-shadow: 0 0 0 0 rgba(255, 140, 66, 0.55);
  animation: ctaNotePulse 2.2s ease-out infinite;
}
@keyframes ctaNotePulse {
  0%   { box-shadow: 0 0 0 0 rgba(255, 140, 66, 0.55); }
  70%  { box-shadow: 0 0 0 8px rgba(255, 140, 66, 0); }
  100% { box-shadow: 0 0 0 0 rgba(255, 140, 66, 0); }
}

.cta-banner-soft {
  display: inline-block;
  margin-left: 4px;
  opacity: 0.75;
  font-weight: 500;
  font-style: italic;
}

/* ==========================================================================
   MOBILE — disable ambient moving objects/animals.
   Keep subtle pulses (beacon, hero halo, logo float) — kill anything that
   travels across the screen on a phone, where it's noisy and battery-eating.
   ========================================================================== */
@media (max-width: 760px) {
  /* hero ocean wildlife & moving objects */
  .bird-1, .bird-2, .bird-3, .bird-4,
  .shooting-star,
  .cruise, .cruise-pre,
  .sailboat,
  .pelican,
  .seaturtle,
  .crab,
  .parasail,
  .bottle,
  .jetski,
  .plane,
  .balloon,
  .dolphin, .dolphin-1, .dolphin-2,
  .fish, .fish-1, .fish-2, .fish-3 {
    display: none !important;
  }

  /* nav ambient critters (chameleon, caterpillar, monkey, toucan, butterfly, parrot) */
  .chameleon,
  .caterpillar,
  .hanging-monkey,
  .nav-deco.toucan,
  .nav-deco.parrot,
  .nav-deco.butterfly,
  .nav-deco.monkey {
    display: none !important;
  }

  /* keep waves but freeze their motion */
  .wave-1, .wave-2, .wave-3 { animation: none !important; }

  /* keep palm trees but disable any animation on them */
  .island g.palm { pointer-events: none; }
  .coconut { animation: none !important; transition: none !important; }
  .island g.shell { pointer-events: none; }

  /* keep beacon pulse, hero halo, logo float, sun pulse — they're subtle and
     do not move across the screen */
}

/* keep content above the small horizon hint */
.coastal-zone .hours-section-v2 .section-inner { position: relative; z-index: 2; }
.coastal-zone .hours-section-v2 .section-head { position: relative; z-index: 2; }
.coastal-zone .hours-section-v2 .hours-visit { position: relative; z-index: 2; }

/* lock the coastal-zone palette regardless of body time-of-day so the
   colors stay calm and deliberate */
body.night .coastal-zone,
body.dusk  .coastal-zone,
body.dawn  .coastal-zone {
  background: linear-gradient(180deg,
    #fff3d8 0%,
    #f5d4a8 3%,
    #e8b08a 7%,
    #2a3258 26%,
    #14264f 48%,
    #0e1c3a 72%,
    #050d1e 100%);
}

/* ==========================================================================
   MENU PAGE — reuses the homepage's ocean-bg + body phase gradients verbatim.
   No custom atmosphere, no separate scene. Just lift the menu content above
   the ocean-bg (z:0) and let the time-of-day system flow through unchanged.
   ========================================================================== */

/* Lift body-level menu content above the homepage's ocean-bg (z:0).
   NOTE: header.nav is intentionally NOT included — it already has its own
   position:sticky/z-index:50, and adding position:relative here breaks the
   sticky behavior and causes the bamboo header to scroll away with the page. */
body.menu-page main,
body.menu-page .menu-hero,
body.menu-page footer.site-footer { position: relative; z-index: 1; }

/* ----- menu hero typography on the cream tile: dark text, phase-stable ----- */
body.menu-page .menu-hero h1 { color: #091532; }
body.menu-page .menu-hero .lede { color: #1c2a45; }
body.menu-page .menu-hero .lede a { color: var(--coral-deep); font-weight: 700; }
body.menu-page .menu-hero .lede a:hover { color: var(--coral); }

/* wider container so the menu doesn't feel like it's floating in a void */
.menu-main {
  max-width: 1080px;
  padding: 28px 28px 96px;
}
/* menu hero gets the same cream-tile treatment as the menu sections below,
   so the entire page reads as cream tiles floating on the ocean-bg */
.menu-hero {
  max-width: 1080px;
  margin: 28px auto 0;
  padding: 44px 48px 36px;
  background: #fffaf0;
  border-radius: 28px;
  border: 1px solid rgba(255, 255, 255, 0.08);
  box-shadow:
    0 1px 0 rgba(255, 255, 255, 0.8) inset,
    0 24px 60px rgba(0, 0, 0, 0.32),
    0 6px 18px rgba(0, 0, 0, 0.22);
}

/* hero kicker matches the homepage v2 kicker style */
.menu-hero .kicker {
  font-size: 0.9rem;
  letter-spacing: 0.22em;
  padding: 7px 18px;
}
.menu-hero h1 {
  font-size: clamp(2rem, 5.2vw, 3.4rem);
  line-height: 1.05;
  letter-spacing: -0.018em;
  margin: 16px 0 18px;
}
.menu-hero .lede {
  font-size: clamp(1.02rem, 1.4vw, 1.16rem);
  max-width: 640px;
  margin: 0 auto 6px;
  line-height: 1.55;
}

/* ----- sticky category nav ----- */
.menu-jump-sticky {
  position: sticky;
  /* --nav-h is set live by JS so the bar always sits just under the nav */
  top: var(--nav-h, 0px);
  z-index: 30;
  padding: 14px 16px;
  margin: 8px 0 0;
  transition: padding 0.25s ease, background 0.25s ease, box-shadow 0.25s ease, backdrop-filter 0.25s ease;
}
.menu-jump-inner {
  max-width: 1080px;
  margin: 0 auto;
  display: flex;
  flex-wrap: nowrap;
  overflow-x: auto;
  gap: 8px;
  justify-content: center;
  scrollbar-width: none;
  padding: 4px;
}
.menu-jump-inner::-webkit-scrollbar { display: none; }

.menu-jump-sticky a {
  font-family: 'Fredoka', sans-serif;
  font-size: 0.92rem;
  font-weight: 600;
  color: var(--ink);
  background: rgba(255, 255, 255, 0.85);
  padding: 9px 18px;
  border-radius: 999px;
  text-decoration: none;
  border: 1px solid rgba(29, 58, 107, 0.12);
  white-space: nowrap;
  transition: background 0.2s, color 0.2s, transform 0.15s, border-color 0.2s, box-shadow 0.25s;
  flex: 0 0 auto;
}
.menu-jump-sticky a:hover {
  background: var(--coral);
  color: var(--white);
  border-color: var(--coral);
  transform: translateY(-1px);
  box-shadow: 0 6px 18px rgba(255, 140, 66, 0.35);
}
.menu-jump-sticky a.active {
  background: var(--coral);
  color: var(--white);
  border-color: var(--coral);
  box-shadow: 0 6px 18px rgba(255, 140, 66, 0.4);
}

/* when scrolled into the sticky position, get a blurred panel backdrop.
   Phase-aware so the pills stay legible across day → night transitions. */
.menu-jump-sticky.is-pinned {
  padding: 10px 14px;
  background: rgba(255, 250, 240, 0.78);
  backdrop-filter: blur(14px) saturate(140%);
  -webkit-backdrop-filter: blur(14px) saturate(140%);
  box-shadow: 0 10px 28px rgba(15, 37, 72, 0.12), 0 1px 0 rgba(15, 37, 72, 0.06) inset;
  border-bottom: 1px solid rgba(15, 37, 72, 0.06);
}
body.dawn .menu-jump-sticky.is-pinned { background: rgba(255, 220, 200, 0.72); }
body.dusk .menu-jump-sticky.is-pinned { background: rgba(80, 30, 70, 0.55); border-bottom-color: rgba(255, 255, 255, 0.06); }
body.dusk .menu-jump-sticky.is-pinned a { background: rgba(255, 255, 255, 0.18); color: #fcefe5; border-color: rgba(255, 255, 255, 0.18); }
body.dusk .menu-jump-sticky.is-pinned a:hover,
body.dusk .menu-jump-sticky.is-pinned a.active { background: var(--coral); color: #fff; border-color: var(--coral); }
body.night .menu-jump-sticky.is-pinned { background: rgba(15, 25, 50, 0.65); border-bottom-color: rgba(255, 255, 255, 0.06); }
body.night .menu-jump-sticky.is-pinned a { background: rgba(255, 255, 255, 0.06); color: #e6ecf5; border-color: rgba(255, 255, 255, 0.12); }
body.night .menu-jump-sticky.is-pinned a:hover,
body.night .menu-jump-sticky.is-pinned a.active { background: var(--coral); color: #fff; border-color: var(--coral); }

/* ----- premium menu cards — light-on-dark, no per-phase swap ----- */
.menu-section {
  background: #fffaf0;
  border-radius: 28px;
  padding: 44px 48px 36px;
  margin-bottom: 28px;
  box-shadow:
    0 1px 0 rgba(255, 255, 255, 0.8) inset,
    0 24px 60px rgba(0, 0, 0, 0.32),
    0 6px 18px rgba(0, 0, 0, 0.22);
  border: 1px solid rgba(255, 255, 255, 0.08);
  /* land just below sticky nav + sticky category bar */
  scroll-margin-top: calc(var(--nav-h, 80px) + 80px);
  transition: transform 0.4s ease, box-shadow 0.4s ease;
}

/* feature section keeps its warm glow, stronger lift */
.menu-section.feature {
  background: linear-gradient(135deg, #fffaf0, #fceedd 70%, #fce0b8);
  border: 1px solid rgba(255, 140, 66, 0.35);
  box-shadow:
    0 1px 0 rgba(255, 255, 255, 0.8) inset,
    0 28px 64px rgba(0, 0, 0, 0.36),
    0 0 0 1px rgba(255, 140, 66, 0.20),
    0 8px 22px rgba(255, 140, 66, 0.18);
}

/* small kicker eyebrow above each h2 */
.menu-section-kicker {
  display: inline-block;
  font-family: 'Fredoka', sans-serif;
  font-size: 0.74rem;
  font-weight: 600;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--coral);
  background: rgba(255, 140, 66, 0.10);
  padding: 6px 14px;
  border-radius: 999px;
  margin-bottom: 14px;
}

.menu-h2 {
  font-size: clamp(1.6rem, 3vw, 2.05rem);
  letter-spacing: -0.012em;
  margin-bottom: 18px;
}

.menu-h2-price {
  font-size: 1.02rem;
  background: linear-gradient(135deg, var(--coral), var(--coral-deep));
  color: var(--white);
  padding: 5px 14px;
  border-radius: 999px;
  box-shadow: 0 6px 16px rgba(255, 140, 66, 0.35);
}

.menu-list li {
  padding: 14px 0;
  gap: 14px;
}

.menu-list li.featured {
  background: linear-gradient(135deg, rgba(255, 140, 66, 0.12), rgba(255, 200, 130, 0.08));
  border-radius: 16px;
  padding: 18px 22px;
  margin: 4px 0 6px;
  border: 1px solid rgba(255, 140, 66, 0.20);
}

.m-name { font-size: 1.06rem; }
.m-price { font-size: 1.18rem; }

.m-flag {
  background: linear-gradient(135deg, var(--coral), var(--coral-deep));
  box-shadow: 0 4px 10px rgba(255, 140, 66, 0.35);
}

.chip-list li {
  background: rgba(255, 255, 255, 0.78);
  font-weight: 600;
  transition: background 0.2s, transform 0.15s, border-color 0.2s;
}
.chip-list li:hover {
  background: var(--coral);
  color: var(--white);
  border-color: var(--coral);
  transform: translateY(-1px);
}

/* ----- subtle inter-section divider — very thin warm glint on the dark bg ----- */
.menu-section + .menu-section { position: relative; }
.menu-section + .menu-section::before {
  content: "";
  position: absolute;
  top: -18px;
  left: 18%;
  right: 18%;
  height: 3px;
  background: radial-gradient(ellipse at center, rgba(255, 186, 126, 0.22), transparent 70%);
  border-radius: 50%;
  pointer-events: none;
}

/* ----- disclaimer — phase-aware so it reads on every sky ----- */
.menu-disclaimer {
  font-size: 0.82rem;
  margin-top: 40px;
  color: rgba(15, 37, 72, 0.62);
  text-align: center;
  max-width: 720px;
  margin-left: auto;
  margin-right: auto;
  line-height: 1.6;
}
body.night.menu-page .menu-disclaimer { color: rgba(230, 236, 245, 0.55); }

/* ----- responsive ----- */
@media (max-width: 760px) {
  .menu-main { padding: 22px 18px 64px; }
  .menu-hero { padding: 40px 20px 18px; }
  .menu-section { padding: 30px 22px 24px; border-radius: 22px; margin-bottom: 22px; }
  .menu-section.feature { padding: 30px 22px 26px; }
  .menu-jump-sticky { padding: 10px 8px; }
  .menu-jump-sticky a { font-size: 0.85rem; padding: 8px 14px; }
  .menu-jump-inner { justify-content: flex-start; }
}
