/* =====================================================================
   OSVI v2 footer — shared by every page (markup: include/partials/footer.tpl,
   copied into pages by tools/build-pages.mjs). Self-contained: it does not
   rely on body.v2, so it also works on the blog articles (body.v2-shell).
   ===================================================================== */
/* The web fonts, served from include/fonts/ (copies of the Google Fonts files, SIL Open Font License:
   include/fonts/OFL-*.txt). Plus Jakarta Sans is one variable file for all weights. Each page preloads
   the latin files (tools/build-pages.mjs); latin-ext is only fetched on pages that use its characters (₹). */
@font-face { font-family: 'Plus Jakarta Sans'; font-style: normal; font-weight: 400 800; font-display: swap; src: url(../fonts/plus-jakarta-sans-latin.woff2) format('woff2'); unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; }
@font-face { font-family: 'Plus Jakarta Sans'; font-style: normal; font-weight: 400 800; font-display: swap; src: url(../fonts/plus-jakarta-sans-latin-ext.woff2) format('woff2'); unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF; }
@font-face { font-family: 'Instrument Serif'; font-style: italic; font-weight: 400; font-display: swap; src: url(../fonts/instrument-serif-italic-latin.woff2) format('woff2'); unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; }
@font-face { font-family: 'Instrument Serif'; font-style: italic; font-weight: 400; font-display: swap; src: url(../fonts/instrument-serif-italic-latin-ext.woff2) format('woff2'); unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF; }
/* Size-matched fallbacks: text keeps (almost) the same line breaks when the
   web fonts arrive, so the page does not jump. Ratios measured against
   Plus Jakarta Sans / Instrument Serif glyph widths (re-measured 14 Oct 2026 on the
   hero texts of the generated pages: tools/pages/content/*.json). */
@font-face { font-family: 'Plus Jakarta Sans Fallback'; src: local('Arial'), local('ArialMT'); font-weight: 400; size-adjust: 105.3%; }
@font-face { font-family: 'Plus Jakarta Sans Fallback'; src: local('Arial'), local('ArialMT'); font-weight: 500; size-adjust: 106.6%; }
@font-face { font-family: 'Plus Jakarta Sans Fallback'; src: local('Arial Bold'), local('Arial-BoldMT'); font-weight: 600; size-adjust: 100.4%; }
@font-face { font-family: 'Plus Jakarta Sans Fallback'; src: local('Arial Bold'), local('Arial-BoldMT'); font-weight: 700; size-adjust: 101.5%; }
@font-face { font-family: 'Plus Jakarta Sans Fallback'; src: local('Arial Bold'), local('Arial-BoldMT'); font-weight: 800; size-adjust: 102.0%; }
@font-face { font-family: 'Instrument Serif Fallback'; src: local('Georgia Italic'), local('Georgia-Italic'); font-style: italic; size-adjust: 77.2%; }

.v2-footer, .v2-footer *, .v2-footer *::before, .v2-footer *::after { box-sizing: border-box; }
#footer.v2-footer, .v2-footer {
  background: #2B1029; color: #fff;
  padding: 72px clamp(16px, 4vw, 48px) calc(32px + var(--v2-sos-h, 0px));
  font-family: 'Plus Jakarta Sans', 'Plus Jakarta Sans Fallback', system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif;
  font-size: 16px; line-height: 1.5; text-align: left; margin: 0;
  -webkit-font-smoothing: antialiased;
}
.v2-footer p { margin: 0; }
.v2-footer a { text-decoration: none; }
#footer.v2-footer a:hover { text-decoration: none; }
#footer.v2-footer .v2-footer__grid a:hover { color: #F3C6EF; }
#footer.v2-footer .v2-footer__social a:hover, #footer.v2-footer .v2-footer__bottom a:hover { color: #fff; }
.v2-footer a:focus-visible { outline: 3px solid #F3C6EF; outline-offset: 3px; border-radius: 6px; }
.v2-footer__grid { max-width: 1280px; margin: 0 auto; display: grid; grid-template-columns: repeat(auto-fit, minmax(210px, 1fr)); gap: 40px; }
.v2-footer .v2-footer__grid a { color: #fff; }
.v2-footer .v2-footer__grid a:hover { color: #F3C6EF; }
.v2-footer .v2-footer__brand { display: inline-block; }
/* OSVI logo, version for the dark background (white text) */
.v2-footer .v2-footer__logo { display: block; width: auto; height: auto; max-width: 100%; max-height: 60px; }   /* keeps its shape in a narrow column */
.v2-footer .v2-footer__about { text-align: left; font-size: 14px; color: #D6C4D4; line-height: 1.65; margin: 16px 0 0; max-width: 300px; }
.v2-footer__social { display: flex; gap: 10px; margin-top: 20px; }
.v2-footer .v2-footer__social a { width: 44px; height: 44px; border-radius: 50%; background: rgba(255,255,255,.08); display: flex; align-items: center; justify-content: center; color: #fff; }
.v2-footer .v2-footer__social a:hover { background: rgba(255,255,255,.16); color: #fff; }
.v2-footer__social svg { display: block; }
.v2-footer__col { display: flex; flex-direction: column; gap: 4px; font-size: 14px; align-items: flex-start; }
.v2-footer__col a { min-height: 32px; display: inline-flex; align-items: center; }
.v2-footer .v2-footer__head { font-family: inherit; font-size: 12px; font-weight: 800; letter-spacing: .1em; line-height: 1.5; text-transform: uppercase; color: #B9A3B6; margin: 0 0 8px; padding: 0; }
.v2-footer .v2-footer__head::before, .v2-footer .v2-footer__head::after { content: none; }
.v2-footer .v2-footer__phone { font-weight: 800; font-size: 18px; }
/* Get in Touch: phone, email and office address, each behind a small round icon */
.v2-footer .v2-footer__ci { display: inline-flex; align-items: center; gap: 12px; }
.v2-footer__ico { flex: none; width: 32px; height: 32px; border-radius: 50%; display: inline-flex; align-items: center; justify-content: center; background: rgba(229,139,222,.14); color: #F3C6EF; transition: background .2s ease, color .2s ease; }
.v2-footer__ico svg { display: block; }
.v2-footer .v2-footer__address { margin: 6px 0 2px; padding: 0; max-width: 300px; align-items: flex-start; font-style: normal; line-height: 1.55; color: #D6C4D4; }
.v2-footer .v2-footer__address .v2-footer__ci-text { padding-top: 5px; }
/* "Serving Pan India": highlighted chip with a flowing brand-gradient border and a shine across the text */
.v2-footer__pan { display: inline-flex; align-items: center; gap: 8px; margin-top: 10px; padding: 7px 14px 7px 10px; border: 1.5px solid transparent; border-radius: 999px; font-weight: 800; color: #fff;
  background: linear-gradient(#3A1637, #3A1637) padding-box, linear-gradient(90deg, #8C3688, #E58BDE, #F48745, #E58BDE, #8C3688) 0 0 / 200% 100% border-box;
  box-shadow: 0 6px 22px rgba(229,139,222,.16); animation: v2f-pan 3s ease-in-out infinite alternate; }
.v2-footer__pan-ico { flex: none; display: block; color: #F9B88C; }
@supports ((-webkit-background-clip: text) or (background-clip: text)) {
  .v2-footer__pan-text { background: linear-gradient(100deg, #fff 36%, #F9B88C 44%, #E58BDE 50%, #F9B88C 56%, #fff 64%) 0 0 / 300% 100%; -webkit-background-clip: text; background-clip: text; color: transparent; animation: v2f-shine 3.6s ease-in-out infinite; }
}
@keyframes v2f-pan { to { background-position: 0 0, 100% 0; } }
@keyframes v2f-shine { 0% { background-position: 100% 0; } 60%, 100% { background-position: 0 0; } }
.v2-footer__pill { display: inline-flex; align-items: center; gap: 8px; background: rgba(255,255,255,.08); padding: 8px 12px; border-radius: 999px; font-weight: 700; margin-top: 6px; }
.v2-footer .v2-dot { display: inline-block; width: 8px; height: 8px; border-radius: 50%; flex: none; background: #3DD68C; }
.v2-footer__bottom { max-width: 1280px; margin: 56px auto 0; padding-top: 24px; border-top: 1px solid rgba(255,255,255,.12); display: flex; justify-content: space-between; gap: 16px; flex-wrap: wrap; font-size: 13px; color: #B9A3B6; }
.v2-footer .v2-footer__bottom a { color: #B9A3B6; }
.v2-footer .v2-footer__bottom a:hover { color: #fff; }

/* ---------------- animations ---------------- */
.v2-footer { position: relative; overflow: hidden; }
/* flowing brand-colour line along the top edge */
.v2-footer::before { content: ""; position: absolute; left: 0; top: 0; width: 600%; height: 4px; background: linear-gradient(90deg, #8C3688, #E58BDE, #F48745, #8C3688) 0 0 / 50% 100% repeat-x; animation: v2f-flow 8s linear infinite; will-change: transform; }
/* soft glow drifting behind the columns */
.v2-footer::after { content: ""; position: absolute; width: 560px; height: 560px; right: -180px; top: -240px; border-radius: 50%; background: radial-gradient(circle, rgba(229,139,222,.16), transparent 65%); animation: v2f-glow 14s ease-in-out infinite alternate; pointer-events: none; }
.v2-footer__grid, .v2-footer__bottom { position: relative; z-index: 1; }
/* moved with transform (no repaint per frame): the strip holds the gradient twice, shifting by one copy loops seamlessly */
@keyframes v2f-flow { from { transform: translateX(-50%); } to { transform: translateX(0); } }
@keyframes v2f-glow { to { transform: translate(-120px, 80px) scale(1.15); } }

/* columns rise in one after another when the footer scrolls into view
   (js-anim is added by the footer's own script, so without JS nothing is hidden) */
.v2-footer.js-anim .v2-footer__grid > *, .v2-footer.js-anim .v2-footer__bottom { opacity: 0; transform: translateY(24px); transition: opacity .6s ease, transform .6s ease; }
.v2-footer.js-anim.is-in .v2-footer__grid > *, .v2-footer.js-anim.is-in .v2-footer__bottom { opacity: 1; transform: none; }
.v2-footer.js-anim .v2-footer__grid > :nth-child(2) { transition-delay: .1s; }
.v2-footer.js-anim .v2-footer__grid > :nth-child(3) { transition-delay: .2s; }
.v2-footer.js-anim .v2-footer__grid > :nth-child(4) { transition-delay: .3s; }
.v2-footer.js-anim .v2-footer__bottom { transition-delay: .4s; }

/* links: slide a little and grow an underline */
.v2-footer .v2-footer__col a { background: linear-gradient(currentColor, currentColor) 0 calc(100% - 4px) / 0 1px no-repeat; transition: color .2s ease, transform .2s ease, background-size .25s ease; }
.v2-footer .v2-footer__col a:hover { transform: translateX(4px); background-size: 100% 1px; }
/* contact links: the underline sits under the text only, and the icon fills with brand colour */
.v2-footer .v2-footer__col a.v2-footer__ci { background: none; }
.v2-footer .v2-footer__ci-text { background: linear-gradient(currentColor, currentColor) 0 100% / 0 1px no-repeat; transition: background-size .25s ease; }
.v2-footer .v2-footer__col a.v2-footer__ci:hover .v2-footer__ci-text { background-size: 100% 1px; }
.v2-footer a.v2-footer__ci:hover .v2-footer__ico { background: linear-gradient(135deg, #8C3688, #E58BDE); color: #fff; }

/* social icons lift and take their brand colour */
.v2-footer .v2-footer__social a { transition: transform .2s ease, background .2s ease, box-shadow .2s ease; }
.v2-footer .v2-footer__social a:hover { transform: translateY(-3px); box-shadow: 0 10px 22px rgba(0,0,0,.25); }
#footer.v2-footer .v2-footer__social a[aria-label*="Instagram"]:hover { background: linear-gradient(45deg, #FDCB5C, #FD1D1D 45%, #C13584 75%, #833AB4); }
#footer.v2-footer .v2-footer__social a[aria-label*="LinkedIn"]:hover { background: #0A66C2; }
#footer.v2-footer .v2-footer__social a[aria-label*="WhatsApp"]:hover { background: #1F7A47; }

/* the logo lifts slightly on hover; the 24x7 dot pulses */
.v2-footer .v2-footer__logo { transition: transform .3s ease; }
.v2-footer .v2-footer__brand:hover .v2-footer__logo { transform: translateY(-2px) scale(1.03); }
/* pulse = a fading ring scaled with transform/opacity (no repaint per frame) */
.v2-footer .v2-dot { position: relative; }
.v2-footer .v2-dot::after { content: ""; position: absolute; inset: 0; border-radius: 50%; background: #3DD68C; animation: v2f-pulse 2s ease-out infinite; }
@keyframes v2f-pulse { 0% { transform: scale(1); opacity: .6; } 70%, 100% { transform: scale(3); opacity: 0; } }
/* the footer's animations only run while it is on screen (is-live is set by the footer's script) */
.v2-footer.js-anim:not(.is-live)::before, .v2-footer.js-anim:not(.is-live)::after, .v2-footer.js-anim:not(.is-live) .v2-dot::after,
.v2-footer.js-anim:not(.is-live) .v2-footer__pan, .v2-footer.js-anim:not(.is-live) .v2-footer__pan-text { animation-play-state: paused; }

@media (prefers-reduced-motion: reduce) {
  .v2-footer::before, .v2-footer::after, .v2-footer .v2-dot::after, .v2-footer__pan, .v2-footer__pan-text { animation: none; }
  .v2-footer__ico, .v2-footer .v2-footer__ci-text { transition: none; }
  .v2-footer.js-anim .v2-footer__grid > *, .v2-footer.js-anim .v2-footer__bottom { opacity: 1; transform: none; transition: none; }
  .v2-footer .v2-footer__col a, .v2-footer .v2-footer__social a, .v2-footer .v2-footer__logo { transition: none; }
  .v2-footer .v2-footer__col a:hover, .v2-footer .v2-footer__social a:hover, .v2-footer .v2-footer__brand:hover .v2-footer__logo { transform: none; }
}
