/* ============================================================
   NAVIGATED OVERSEAS — "ACETERNITY-STYLE" COMPONENT LIBRARY
   Original vanilla recreations of popular animated UI effects.
   Pairs with js/aceternity.js. Builds on tokens in style.css.
   Components: Spotlight · Flip Words · Sparkles · Animated Tooltip
   · Bento Grid · Infinite Moving Cards · Tracing Beam · Lamp ·
   Glowing Gradient Border · Hover Border Gradient · Background Beams
   ============================================================ */

/* ---------- 1. SPOTLIGHT (sweeping conic light) ---------- */
.spotlight{position:absolute;top:-30%;left:50%;width:140%;height:160%;transform:translateX(-50%);pointer-events:none;z-index:2;
  background:conic-gradient(from 180deg at 50% 0,rgba(200,169,106,.10) 0deg,transparent 60deg,transparent 300deg,rgba(40,90,150,.10) 360deg);
  -webkit-mask-image:radial-gradient(ellipse 60% 50% at 50% 0,#000,transparent 75%);mask-image:radial-gradient(ellipse 60% 50% at 50% 0,#000,transparent 75%);
  animation:spotlightSweep 14s ease-in-out infinite alternate}
@keyframes spotlightSweep{0%{transform:translateX(-54%) rotate(-6deg)}100%{transform:translateX(-46%) rotate(6deg)}}

/* ---------- 2. FLIP WORDS (rotating word in a headline) ---------- */
.flip-words{display:inline-block;position:relative;color:var(--clr-gold);font-style:italic}
.flip-words__w{display:inline-block;animation:flipWordIn .5s var(--ease-smooth)}
@keyframes flipWordIn{0%{opacity:0;transform:translateY(14px) rotateX(-40deg)}100%{opacity:1;transform:translateY(0) rotateX(0)}}

/* ---------- 3. SPARKLES (canvas behind a heading) ---------- */
.sparkles-wrap{position:relative}
.sparkles-canvas{position:absolute;inset:-10% -5%;width:110%;height:120%;pointer-events:none;z-index:0}
.sparkles-wrap > :not(.sparkles-canvas){position:relative;z-index:1}

/* ---------- 4. ANIMATED TOOLTIP (avatar row) ---------- */
.avatars{display:inline-flex;align-items:center}
.avatars__item{position:relative;width:46px;height:46px;border-radius:50%;margin-left:-12px;border:2px solid var(--clr-navy);background:var(--clr-navy-mid);overflow:visible;transition:transform var(--dur-fast) var(--ease-smooth)}
.avatars__item:first-child{margin-left:0}
.avatars__item img{width:100%;height:100%;border-radius:50%;object-fit:cover}
.avatars__item:hover{transform:translateY(-6px) scale(1.08);z-index:5}
.avatars__tip{position:absolute;bottom:120%;left:50%;transform:translateX(-50%) translateY(8px);background:var(--clr-navy-dark);border:1px solid rgba(200,169,106,.3);color:#fff;font-family:var(--ff-heading);font-size:var(--fs-caption);font-weight:var(--fw-semibold);padding:6px 12px;border-radius:8px;white-space:nowrap;opacity:0;pointer-events:none;transition:opacity var(--dur-fast),transform var(--dur-fast);box-shadow:var(--shadow-lg)}
.avatars__tip small{display:block;font-weight:var(--fw-regular);color:var(--clr-gold-light);font-size:.66rem}
.avatars__item:hover .avatars__tip{opacity:1;transform:translateX(-50%) translateY(0)}
.avatars__more{display:inline-flex;align-items:center;justify-content:center;width:46px;height:46px;border-radius:50%;margin-left:-12px;border:2px solid var(--clr-navy);background:var(--clr-gold);color:var(--clr-navy);font-family:var(--ff-heading);font-weight:var(--fw-bold);font-size:.78rem}

/* ---------- 5. BENTO GRID ---------- */
.bento{display:grid;grid-template-columns:repeat(3,1fr);grid-auto-rows:minmax(150px,auto);gap:var(--sp-4)}
.bento-card{position:relative;overflow:hidden;border-radius:var(--radius-lg);padding:var(--sp-6);background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.09);transition:transform var(--dur-normal) var(--ease-smooth),border-color var(--dur-normal),background var(--dur-normal)}
.bento-card:hover{transform:translateY(-4px);border-color:rgba(200,169,106,.32);background:rgba(255,255,255,.06)}
.bento-card--lg{grid-column:span 2}
.bento-card--tall{grid-row:span 2}
.bento-card__icon{width:46px;height:46px;border-radius:12px;background:linear-gradient(135deg,rgba(200,169,106,.2),rgba(200,169,106,.05));display:flex;align-items:center;justify-content:center;margin-bottom:var(--sp-4)}
.bento-card__icon svg{width:24px;height:24px;stroke:var(--clr-gold);fill:none;stroke-width:1.7}
.bento-card h4{color:#fff;margin-bottom:var(--sp-2)}
.bento-card p{font-size:var(--fs-body-sm);color:rgba(248,250,252,.6);line-height:1.7}
.bento-card__big{font-family:var(--ff-display);font-weight:600;font-size:clamp(2.2rem,5vw,3.4rem);color:var(--clr-gold);line-height:1}
.bento-card__glow{position:absolute;width:200px;height:200px;background:radial-gradient(circle,rgba(200,169,106,.18),transparent 70%);border-radius:50%;opacity:0;transition:opacity var(--dur-normal);pointer-events:none;transform:translate(-50%,-50%)}
.bento-card:hover .bento-card__glow{opacity:1}

/* ---------- 6. INFINITE MOVING CARDS ---------- */
.moving-cards{overflow:hidden;-webkit-mask-image:linear-gradient(90deg,transparent,#000 8%,#000 92%,transparent);mask-image:linear-gradient(90deg,transparent,#000 8%,#000 92%,transparent)}
.moving-cards__track{display:flex;gap:var(--sp-5);width:max-content;animation:moveCards 48s linear infinite}
.moving-cards:hover .moving-cards__track{animation-play-state:paused}
@keyframes moveCards{to{transform:translateX(-50%)}}
.mcard{flex:0 0 auto;width:360px;max-width:80vw;background:var(--clr-white-pure);border:1px solid rgba(10,26,47,.08);border-radius:var(--radius-lg);padding:var(--sp-6);box-shadow:var(--shadow-card)}
.mcard__stars{color:var(--clr-gold);letter-spacing:2px;margin-bottom:var(--sp-3)}
.mcard__quote{font-size:var(--fs-body-sm);font-style:italic;color:var(--clr-grey-darker);line-height:1.8;margin-bottom:var(--sp-4)}
.mcard__who{display:flex;align-items:center;gap:10px}
.mcard__avatar{width:40px;height:40px;border-radius:50%;background:linear-gradient(135deg,var(--clr-gold),var(--clr-gold-dark));color:var(--clr-navy);display:flex;align-items:center;justify-content:center;font-family:var(--ff-heading);font-weight:var(--fw-bold)}
.mcard__name{font-family:var(--ff-heading);font-weight:var(--fw-semibold);color:var(--clr-near-black);font-size:var(--fs-body-sm)}
.mcard__uni{font-size:var(--fs-caption);color:var(--clr-gold-dark)}

/* ---------- 7. TRACING BEAM (scroll-linked vertical beam) ---------- */
.tracing{position:relative;padding-left:var(--sp-7)}
.tracing__rail{position:absolute;left:14px;top:0;bottom:0;width:2px;background:rgba(200,169,106,.15);border-radius:2px}
.tracing__beam{position:absolute;left:0;top:0;width:100%;height:0;background:linear-gradient(180deg,var(--clr-gold),var(--clr-red));border-radius:2px;box-shadow:0 0 10px rgba(200,169,106,.6)}
.tracing__dot{position:absolute;left:9px;width:12px;height:12px;border-radius:50%;background:var(--clr-gold);box-shadow:0 0 0 4px rgba(200,169,106,.18);transition:top .1s linear}

/* ---------- 8. LAMP EFFECT (glow that lights a heading) ---------- */
.lamp{position:relative;isolation:isolate;padding-top:var(--sp-9)}
.lamp__line{position:absolute;top:0;left:50%;transform:translateX(-50%);width:min(60%,520px);height:2px;background:linear-gradient(90deg,transparent,var(--clr-gold),transparent)}
.lamp__glow{position:absolute;top:-60px;left:50%;transform:translateX(-50%);width:min(70%,640px);height:170px;background:radial-gradient(ellipse at 50% 0,rgba(200,169,106,.30),transparent 70%);filter:blur(14px);pointer-events:none;z-index:-1;animation:lampPulse 5s ease-in-out infinite}
@keyframes lampPulse{0%,100%{opacity:.7;width:min(70%,640px)}50%{opacity:1;width:min(78%,700px)}}

/* ---------- 9. GLOWING GRADIENT BORDER (animated border) ---------- */
.glow-border{position:relative;border-radius:var(--radius-xl);z-index:0}
.glow-border::before{content:'';position:absolute;inset:-1.5px;border-radius:inherit;background:conic-gradient(from var(--ang,0deg),transparent 0%,var(--clr-gold) 12%,transparent 30%,transparent 70%,var(--clr-red) 84%,transparent 100%);z-index:-1;animation:glowSpin 6s linear infinite;opacity:.0;transition:opacity var(--dur-normal)}
.glow-border:hover::before{opacity:.9}
@property --ang{syntax:'<angle>';initial-value:0deg;inherits:false}
@keyframes glowSpin{to{--ang:360deg}}

/* ---------- 10. HOVER BORDER GRADIENT (button) ---------- */
.hbg{position:relative;display:inline-flex;align-items:center;gap:var(--sp-2);padding:14px 30px;border-radius:var(--radius-full);background:var(--clr-navy);color:#fff;font-family:var(--ff-heading);font-weight:var(--fw-semibold);overflow:hidden;z-index:0;border:1px solid rgba(255,255,255,.12)}
.hbg::before{content:'';position:absolute;inset:0;border-radius:inherit;padding:1.5px;background:conic-gradient(from var(--ang,0deg),transparent,var(--clr-gold),transparent 30%);-webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);-webkit-mask-composite:xor;mask-composite:exclude;animation:glowSpin 4s linear infinite;z-index:-1}
.hbg:hover{background:var(--clr-navy-mid)}

/* ---------- 11. BACKGROUND BEAMS (animated vertical beams) ---------- */
.beams{position:absolute;inset:0;overflow:hidden;pointer-events:none;z-index:0}
.beam{position:absolute;top:-30%;width:1px;height:60%;background:linear-gradient(180deg,transparent,rgba(200,169,106,.5),transparent);animation:beamDrop linear infinite}
@keyframes beamDrop{0%{transform:translateY(0);opacity:0}10%{opacity:1}90%{opacity:1}100%{transform:translateY(280%);opacity:0}}

/* Reduced-motion: calm everything */
@media(prefers-reduced-motion:reduce){
  .spotlight,.lamp__glow,.glow-border::before,.hbg::before,.moving-cards__track,.beam{animation:none!important}
  .moving-cards__track{transform:none}
}

/* ---------- 12. 3D GLOBE (cobe) ---------- */
.cobe-wrap{position:relative;width:100%;max-width:480px;margin:0 auto;aspect-ratio:1/1}
.cobe-canvas{width:100%;height:100%;display:block;cursor:grab;touch-action:pan-y}
.cobe-hint{position:absolute;left:0;right:0;bottom:-26px;text-align:center;font-family:var(--ff-heading);font-size:var(--fs-caption);color:rgba(248,250,252,.4);letter-spacing:.04em}
/* globe.gl container */
.gl-wrap{position:relative;width:100%;max-width:560px;margin:0 auto;display:flex;flex-direction:column;align-items:center}
#glGlobe{width:100%;display:flex;justify-content:center;align-items:center}
#glGlobe canvas{display:block;max-width:100%;height:auto!important;cursor:grab}
.gl-wrap .cobe-hint{position:static;margin-top:var(--sp-3)}

/* ---------- 13. SPLIT-FLAP / DEPARTURE BOARD ---------- */
.flap-section{position:relative;overflow:hidden;background:var(--clr-navy-dark);color:#fff;padding-block:var(--sp-11)}
.flap-section .container{position:relative;z-index:2}
.flapboard{display:flex;justify-content:center;gap:6px;flex-wrap:wrap;margin-top:var(--sp-5)}
.flap{width:clamp(30px,5.4vw,52px);height:clamp(46px,8vw,72px);border-radius:8px;background:linear-gradient(180deg,#0b1626,#060e1a);border:1px solid rgba(255,255,255,.08);position:relative;display:flex;align-items:center;justify-content:center;font-family:var(--ff-heading);font-weight:var(--fw-bold);font-size:clamp(1.1rem,3vw,2rem);color:var(--clr-gold-light);box-shadow:inset 0 1px 0 rgba(255,255,255,.05),0 6px 16px rgba(0,0,0,.4);overflow:hidden}
.flap::after{content:'';position:absolute;left:0;right:0;top:50%;height:1px;background:rgba(0,0,0,.55);z-index:2}
.flap.is-flipping{animation:flapTick .12s linear}
@keyframes flapTick{0%{transform:translateY(-2px) scaleY(.96)}100%{transform:translateY(0) scaleY(1)}}
.flap--space{background:transparent;border:none;box-shadow:none}
.flap--space::after{display:none}

/* ---------- 14. SHADER-STYLE animated gradient background ---------- */
.shader-canvas{position:absolute;inset:0;width:100%;height:100%;z-index:0;opacity:.85;pointer-events:none}
[data-shader]{position:relative}
[data-shader] > :not(.shader-canvas){position:relative;z-index:1}

/* ---------- 15. ANIMATED HEADER ---------- */
.navbar.scrolled::after{content:'';position:absolute;left:0;right:0;bottom:0;height:1.5px;background:linear-gradient(90deg,transparent,var(--clr-gold),var(--clr-red),var(--clr-gold),transparent);background-size:200% 100%;animation:navLine 6s linear infinite;opacity:.8}
@keyframes navLine{to{background-position:200% 0}}
@keyframes navShine{0%,72%{left:-60%}86%,100%{left:130%}}
.navbar__link{transition:color var(--dur-fast) var(--ease-out),transform var(--dur-fast)}
.navbar__link:hover{transform:translateY(-1px)}
.navbar__cta{position:relative;overflow:hidden}
.navbar__cta::after{content:'';position:absolute;top:0;left:-70%;width:45%;height:100%;background:linear-gradient(100deg,transparent,rgba(255,255,255,.5),transparent);transform:skewX(-18deg);animation:navShine 4.5s ease-in-out infinite 1s}
/* nav links subtle stagger-in on load */
.navbar__links .navbar__link{animation:navLinkIn .5s var(--ease-smooth) backwards}
.navbar__links .navbar__link:nth-child(1){animation-delay:.05s}
.navbar__links .navbar__link:nth-child(2){animation-delay:.1s}
.navbar__links .navbar__link:nth-child(3){animation-delay:.15s}
.navbar__links .navbar__link:nth-child(4){animation-delay:.2s}
.navbar__links .navbar__link:nth-child(5){animation-delay:.25s}
.navbar__links .navbar__link:nth-child(6){animation-delay:.3s}
.navbar__links .navbar__link:nth-child(7){animation-delay:.35s}
@keyframes navLinkIn{from{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}

@media(prefers-reduced-motion:reduce){
  .navbar.scrolled::after,.navbar__logo::after,.navbar__cta::after,.navbar__links .navbar__link,.flap.is-flipping{animation:none!important}
}

/* Responsive */
@media(max-width:860px){.bento{grid-template-columns:1fr 1fr}.bento-card--lg{grid-column:span 2}.bento-card--tall{grid-row:span 1}}
@media(max-width:560px){.bento{grid-template-columns:1fr}.bento-card--lg{grid-column:span 1}}
