/* IK "flight" motion system for public pages: scroll journey, split-flap departures, boarding-pass batch cards, arrival stamps + count-ups.
   Behaviour: /js/ik-flight.js. Tokens mirror index.html :root (with fallbacks so other pages can load this too).
   Everything is opt-in markup/attributes; all motion respects prefers-reduced-motion (final state shown, nothing animates). */
:root{--ikf-gold:var(--gold,#b08d57);--ikf-gold-hi:var(--gold-hi,#cba76f);--ikf-maroon:var(--maroon,#8A2432);--ikf-ink:var(--ink,#111114)}

/* ================= 1. scroll journey ================= */
.ikf-rail{position:fixed;left:16px;top:50%;transform:translateY(-50%);height:min(58vh,440px);width:30px;z-index:60;pointer-events:none;opacity:0;transition:opacity .45s}
.ikf-rail.on{opacity:1}
.ikf-rail::before{content:"";position:absolute;left:14px;top:0;bottom:0;border-left:2px dotted rgba(150,140,120,.6)}
.ikf-fill{position:absolute;left:14px;top:0;width:2px;background:var(--ikf-gold);height:0;margin-left:-1px}
.ikf-g{position:absolute;left:15px;width:9px;height:9px;margin:-4.5px 0 0 -4.5px;border-radius:50%;background:var(--ikf-ink);border:2px solid #8a7a58;box-sizing:content-box;transition:background .3s,border-color .3s,box-shadow .3s}
.ikf-g.on{background:var(--ikf-gold);border-color:var(--ikf-gold-hi);box-shadow:0 0 10px rgba(203,167,111,.8)}
.ikf-jet{position:absolute;left:15px;width:22px;height:22px;margin:-11px 0 0 -11px;color:var(--ikf-gold-hi);transform:rotate(135deg);filter:drop-shadow(0 0 6px rgba(203,167,111,.85)) drop-shadow(0 0 1px rgba(0,0,0,.6));will-change:top}
.ikf-jet svg{display:block;width:100%;height:100%}
.ikf-lab{position:absolute;left:36px;transform:translateY(-50%);white-space:nowrap;font-family:var(--fbn,'Hind Siliguri',sans-serif);font-weight:700;font-size:12.5px;line-height:1;color:var(--ikf-gold-hi);background:var(--ikf-ink);padding:6px 10px;border:1px solid rgba(176,141,87,.45);opacity:0;transition:opacity .25s}
.ikf-lab.on{opacity:1}
.ikf-lab small{font-weight:400;color:#B7B7C0;margin-left:7px;font-size:11.5px}
.ikf-bar{position:fixed;left:0;top:0;height:3px;width:100%;z-index:9990;pointer-events:none;display:none}
.ikf-bar i{display:block;height:100%;width:0;background:var(--ikf-gold-hi);box-shadow:0 0 8px rgba(203,167,111,.8)}
.ikf-bar b{position:absolute;top:-6px;left:0;width:14px;height:14px;margin-left:-7px;color:var(--ikf-gold-hi);transform:rotate(45deg);filter:drop-shadow(0 0 4px rgba(203,167,111,.9))}
.ikf-bar b svg{display:block;width:100%;height:100%}
@media (max-width:1179px){.ikf-rail{display:none}.ikf-bar{display:block}}
/* the name label needs a wide gutter or it sits on top of page text */
@media (max-width:1499px){.ikf-lab{display:none}}

/* ================= 2. split-flap departures ================= */
.ikf-fw{display:flex;flex-wrap:wrap;gap:3px 12px}
.ikf-wd{display:inline-flex;gap:2px}
.ikf-c{font-style:normal;letter-spacing:0;display:inline-flex;align-items:center;justify-content:center;min-width:.66em;height:1.2em;padding:0 .05em;background:#1d171a;border-radius:3px;position:relative;overflow:hidden;line-height:1;color:#f1e3c3}
.ikf-c::after{content:"";position:absolute;left:0;right:0;top:50%;height:1px;background:#0b080a;opacity:.85}
.ikf-c.sc{color:var(--ikf-gold-hi)}
a.departure-card{text-decoration:none;color:inherit;transition:background .2s}
a.departure-card:hover{background:#171114}
a.departure-card:focus-visible{outline:2px solid var(--ikf-gold-hi);outline-offset:-2px}
.departure-band{color:var(--ikf-gold-hi);font-weight:700;white-space:nowrap}

@media (max-width:640px){.departure-card .departure-country{font-size:17px}.ikf-wd{gap:1px}.ikf-fw{gap:3px 8px}.ikf-c{min-width:.6em;border-radius:2px}}

/* ================= 3. boarding-pass batch cards ================= */
.ikf-pass{--py:58px;position:relative;display:flex;flex-direction:column;background:var(--surface,#fff);border:1px solid var(--linelt,#E7E7EB);box-shadow:0 10px 26px rgba(24,24,27,.09);transition:transform .3s,box-shadow .3s;
  -webkit-mask:radial-gradient(circle 9px at 0 calc(100% - var(--py) + 1px),#0000 97%,#000) left/51% 100% no-repeat,radial-gradient(circle 9px at 100% calc(100% - var(--py) + 1px),#0000 97%,#000) right/51% 100% no-repeat;
  mask:radial-gradient(circle 9px at 0 calc(100% - var(--py) + 1px),#0000 97%,#000) left/51% 100% no-repeat,radial-gradient(circle 9px at 100% calc(100% - var(--py) + 1px),#0000 97%,#000) right/51% 100% no-repeat}
.ikf-pass:hover{transform:translateY(-5px) rotate(-.4deg);box-shadow:0 18px 34px rgba(24,24,27,.15)}
.ikf-pass-bar{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:9px 16px;background:linear-gradient(100deg,#6e1a28,var(--ikf-maroon) 55%,#7a1f2d);color:#f0d9a2}
.ikf-pass-type{font-family:var(--fdisp,'Bebas Neue',sans-serif);font-size:15px;letter-spacing:.16em}
.ikf-pass-st{font-family:var(--fbn,'Hind Siliguri',sans-serif);font-size:11.5px;font-weight:700;letter-spacing:.03em;color:#fff;opacity:.9}
.ikf-pass-body{padding:14px 16px 14px;flex:1;border-bottom:2px dashed #cfc4a4}
.ikf-pass-name{font-family:var(--fbn,'Hind Siliguri',sans-serif);font-weight:700;font-size:18px;line-height:1.2;color:var(--dk,#18181B)}
.ikf-pass-meta{font-size:13px;color:var(--dk2,#5b5b63);margin-top:4px;line-height:1.4}
.ikf-seats{display:grid;gap:3px;margin:14px 0 8px}
.ikf-seats i{height:9px;border-radius:2px;background:#d8d2c4}
.ikf-seats i.t{background:var(--ikf-maroon)}
.ikf-seats i.l{background:#1f7a52}
.ikf-pass.is-urgent .ikf-seats i.l{animation:ikf-blink 1.6s infinite}
.ikf-pass-left{font-family:var(--fbn,'Hind Siliguri',sans-serif);font-size:13px;color:var(--dk2,#5b5b63)}
.ikf-pass-left strong{font-family:var(--fdisp,'Bebas Neue',sans-serif);font-weight:400;font-size:26px;line-height:1;color:var(--ikf-maroon);margin-right:6px;vertical-align:-2px;font-variant-numeric:tabular-nums}
.ikf-pass.is-urgent .ikf-pass-left strong{color:#b45309}
#hne-grid{grid-template-columns:repeat(auto-fill,minmax(270px,380px));justify-content:start}
.ikf-pass-cta{display:flex;align-items:center;justify-content:center;height:calc(var(--py) - 2px);font-family:var(--fbn,'Hind Siliguri',sans-serif);font-weight:700;font-size:15px;color:#fff;background:var(--ikf-maroon);text-decoration:none;transition:background .2s}
.ikf-pass-cta:hover{background:var(--maroon-hi,#A02A3A);color:#fff}
.ikf-pass-cta:focus-visible{outline:2px solid var(--ikf-gold-hi);outline-offset:-4px}
/* entrance (only when JS has marked the card pending) */
.ikf-pass.pend{opacity:0;transform:translateY(-14px)}
.ikf-pass.pend .ikf-seats i.t{background:#d8d2c4}
.ikf-pass.in{animation:ikf-print .8s cubic-bezier(.3,.7,.2,1) backwards;animation-delay:calc(var(--n,0)*130ms)}
.ikf-pass.in .ikf-seats i.t{animation:ikf-seat .35s ease-out backwards;animation-delay:calc(var(--n,0)*130ms + 500ms + var(--i,0)*35ms)}
@keyframes ikf-print{from{opacity:0;transform:translateY(-14px);clip-path:inset(0 0 100% 0)}to{opacity:1;transform:none;clip-path:inset(0 0 0 0)}}
@keyframes ikf-seat{from{background:#d8d2c4}to{background:var(--ikf-maroon)}}
@keyframes ikf-blink{50%{opacity:.35}}

/* ================= 4. arrival stamps + counts ================= */
.ikf-stamp{position:absolute;right:14px;bottom:14px;z-index:2;pointer-events:none;mix-blend-mode:multiply;opacity:0;transform:rotate(-9deg);-webkit-filter:url(#ikf-rough);filter:url(#ikf-rough)}
.ikf-stamp span{display:block;border:2px double #1f7a52;color:#1f7a52;padding:3px 10px 4px;text-align:center;font-family:var(--fdisp,'Bebas Neue',sans-serif);font-size:17px;letter-spacing:.14em;line-height:1.1;background:rgba(255,255,255,.2);white-space:nowrap}
.ikf-stamp.in{animation:ikf-slam .5s cubic-bezier(.2,.8,.3,1) both}
@keyframes ikf-slam{0%{opacity:0;transform:rotate(-9deg) scale(2.5)}60%{opacity:.95;transform:rotate(-9deg) scale(.92)}100%{opacity:.88;transform:rotate(-9deg) scale(1)}}
.ikf-stamp.amber span{border-color:#b45309;color:#b45309}
/* solid cream stamp: stays readable on photos (the default stamp multiplies into the background) */
.ikf-stamp.paper{mix-blend-mode:normal}
.ikf-stamp.paper span{background:#f4eddd;border-color:#1f7a52;color:#1f7a52;box-shadow:0 6px 16px rgba(0,0,0,.4)}
.ikf-stamp.tr{top:8px;bottom:auto;right:12px}
.sel-result.ikf-stamped,.seasonal-card.ikf-stamped{padding-top:46px}
.result-featured{position:relative}

/* ================= 5. staggered print-in ================= */
.ikf-rv.pend{opacity:0;transform:translateY(22px)}
.ikf-rv.in{animation:ikf-rise .7s cubic-bezier(.25,.8,.25,1) backwards;animation-delay:calc(var(--n,0)*110ms)}
@keyframes ikf-rise{from{opacity:0;transform:translateY(22px)}to{opacity:1;transform:none}}
[data-ikf-count]{font-variant-numeric:tabular-nums}

/* ================= 5b. visa cards (content.js renders them; used on success-stories + homepage) ================= */
.visa-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:22px}
.visa-card{margin:0;background:#111114;border:1px solid rgba(176,141,87,.38);transition:transform .25s,box-shadow .25s}
.visa-card:hover{transform:translateY(-5px);box-shadow:0 18px 38px rgba(24,24,27,.22)}
.visa-bar{display:flex;justify-content:space-between;align-items:center;padding:8px 14px;background:linear-gradient(100deg,#6e1a28,var(--ikf-maroon) 55%,#7a1f2d);font-family:var(--fdisp,'Bebas Neue',sans-serif);font-size:14px;letter-spacing:.18em;color:#f0d9a2}
.visa-bar span:last-child{color:rgba(240,217,162,.7)}
.visa-photo{position:relative;background:#1c1c22}
.visa-photo::after{content:"";position:absolute;left:0;right:0;bottom:0;height:34%;background:linear-gradient(to top,rgba(17,17,20,.72),transparent);pointer-events:none}
.visa-open{display:block;width:100%;padding:0;border:0;background:none;cursor:zoom-in;line-height:0}
.visa-open:focus-visible{outline:3px solid var(--ikf-gold-hi);outline-offset:-3px}
.visa-open img{display:block;width:100%;height:auto;aspect-ratio:4/5;object-fit:cover}
.visa-photo .ikf-stamp{z-index:3}
.visa-band{position:absolute;left:10px;top:10px;z-index:2;font-family:var(--fdisp,'Bebas Neue',sans-serif);font-size:15px;letter-spacing:.12em;color:#1a1305;background:linear-gradient(145deg,#e7cd93,#b08d57);padding:3px 9px;line-height:1.2}
.visa-ph{position:relative;aspect-ratio:4/5;display:grid;place-items:center;background:radial-gradient(120% 90% at 50% 0%,#3a1620,#17171c 70%);color:rgba(203,167,111,.16);overflow:hidden}
.visa-ph svg{position:absolute;width:78%;height:78%;left:11%;top:11%;transform:rotate(12deg)}
.visa-ph b{position:relative;font-family:var(--fdisp,'Bebas Neue',sans-serif);font-weight:400;font-size:clamp(64px,9vw,92px);letter-spacing:.06em;color:var(--ikf-gold-hi)}
.visa-card figcaption{padding:13px 16px 16px;border-top:3px solid var(--ikf-maroon)}
.visa-card figcaption strong{display:block;font-family:var(--fbn,'Hind Siliguri',sans-serif);font-weight:700;font-size:18px;line-height:1.2;color:#fff}
.visa-card figcaption span{display:block;font-family:var(--fbn,'Hind Siliguri',sans-serif);font-size:14px;color:var(--ikf-gold-hi);margin-top:4px}
.visa-card figcaption small{display:block;font-size:12px;line-height:1.35;color:#d8c08a;margin-top:7px}
.visa-card figcaption em{display:block;font-style:normal;font-size:12px;letter-spacing:.06em;color:#B7B7C0;margin-top:2px}
/* homepage: one swipeable row instead of a tall grid */
.visa-railwrap{position:relative;margin:0 0 28px}
.visa-rail{display:flex;gap:16px;overflow-x:auto;scroll-snap-type:x proximity;-webkit-overflow-scrolling:touch;padding:4px 2px 14px;scrollbar-width:none}
.visa-rail::-webkit-scrollbar{display:none}
.visa-rail .visa-card{flex:0 0 clamp(210px,22vw,248px);scroll-snap-align:start}
.visa-nav{position:absolute;top:42%;z-index:5;width:42px;height:42px;border-radius:50%;border:1px solid rgba(176,141,87,.6);background:rgba(17,17,20,.88);color:#f0d9a2;font-size:22px;line-height:1;cursor:pointer;display:none;place-items:center}
.visa-nav:hover{background:var(--ikf-maroon);color:#fff}
.visa-nav:focus-visible{outline:2px solid var(--ikf-gold-hi);outline-offset:2px}
.visa-nav.p{left:-14px}.visa-nav.n{right:-14px}
.visa-railwrap.can-l .visa-nav.p,.visa-railwrap.can-r .visa-nav.n{display:grid}
@media (hover:none){.visa-nav{display:none!important}}

/* ================= 6. lightbox (js/ik-lightbox.js) ================= */
.ikl{position:fixed;inset:0;z-index:100000;display:flex;align-items:center;justify-content:center;background:rgba(10,10,13,.92);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);opacity:0;transition:opacity .25s}
.ikl.on{opacity:1}
.ikl figure{margin:0;max-width:min(92vw,820px);max-height:92vh;display:flex;flex-direction:column;align-items:center;transform:scale(.94);transition:transform .3s cubic-bezier(.2,.9,.3,1)}
.ikl.on figure{transform:none}
.ikl img{display:block;max-width:100%;max-height:78vh;width:auto;height:auto;background:#fff;box-shadow:0 30px 80px rgba(0,0,0,.6)}
.ikl figcaption{margin-top:12px;font-family:var(--fbn,'Hind Siliguri',sans-serif);font-size:14px;color:#d8d8e0;text-align:center}
.ikl button{position:absolute;display:grid;place-items:center;width:44px;height:44px;border-radius:50%;border:1px solid #4a4a56;background:rgba(20,20,26,.8);color:#f7f7f8;font-size:22px;line-height:1;cursor:pointer}
.ikl button:hover{border-color:var(--ikf-gold-hi);color:var(--ikf-gold-hi)}
.ikl button:focus-visible{outline:2px solid var(--ikf-gold-hi);outline-offset:2px}
.ikl .x{top:16px;right:16px}
.ikl .p{left:14px;top:50%;margin-top:-22px}
.ikl .n{right:14px;top:50%;margin-top:-22px}
@media (max-width:640px){.ikl .p,.ikl .n{top:auto;bottom:18px;margin:0}.ikl .p{left:calc(50% - 56px)}.ikl .n{right:calc(50% - 56px)}}

@media (prefers-reduced-motion:reduce){
  .ikl,.ikl figure{transition:none}
  .ikf-rv.pend{opacity:1;transform:none}
  .ikf-rv.in{animation:none}
  .ikf-pass.pend{opacity:1;transform:none}
  .ikf-pass.pend .ikf-seats i.t{background:var(--ikf-maroon)}
  .ikf-pass.in,.ikf-pass.in .ikf-seats i.t,.ikf-stamp.in{animation:none}
  .ikf-stamp{opacity:.88}
  .ikf-pass.is-urgent .ikf-seats i.l{animation:none}
  .ikf-pass:hover{transform:none}
}
