/* ============================================================
   VOXILYTICS LTD — GLOBAL STYLESHEET
   css/global.css
   Built: G2
   All brand styles, utilities, components, and animations
   live in this single file. Section order:
     01. CSS Custom Properties (:root)
     02. CSS Reset
     03. Base Typography
     04. Accessibility & Focus
     05. Skip Link
     06. Scrollbar & Selection
     07. Utility Classes
     08. Button Styles
     09. Tag Pills
     10. Card Components
     11. Section Heading (teal underline)
     12. Grid Utilities
     13. Visual Motif Utilities
     14. Navbar Component (G3)
     15. Footer Component (G4)
     16. Cookie Banner (G5)
     17. Newsletter Section (G6)
     18. Chat Widget (G7)
     19. Animations & Keyframes
     20. Print Media Query
   ============================================================ */


/* ============================================================
   01. CSS CUSTOM PROPERTIES
   ============================================================ */

:root {

  /* ── Colour Palette ─────────────────────────────────────── */
  --color-navy:        #0A1628;
  --color-slate:       #1E2D45;
  --color-teal:        #00C9A7;
  --color-blue:        #1565C8;
  --color-cloud:       #F5F8FF;
  --color-mint:        #E8F4F0;
  --color-white:       #FFFFFF;
  --color-dark-text:   #1A2A3A;
  --color-muted:       #7A9CC0;
  --color-muted-light: #5A7A9A;
  --color-border:      rgba(0, 201, 167, 0.2);
  --color-border-dark: rgba(255, 255, 255, 0.08);
  --color-deeper-navy: #060E1A;
  --color-error:       #FF6B6B;
  --color-success:     #00C9A7;

  /* ── Typography ─────────────────────────────────────────── */
  --font-heading: 'Inter', sans-serif;
  --font-body:    'DM Sans', sans-serif;
  --font-label:   'Space Grotesk', sans-serif;

  --fs-h1:    clamp(36px, 5vw, 72px);
  --fs-h2:    clamp(28px, 3.5vw, 48px);
  --fs-h3:    clamp(20px, 2.5vw, 28px);
  --fs-h4:    20px;
  --fs-body:  16px;
  --fs-small: 14px;
  --fs-label: 12px;

  --lh-heading: 1.15;
  --lh-body:    1.7;

  /* ── Spacing ────────────────────────────────────────────── */
  --space-xs:   8px;
  --space-sm:   16px;
  --space-md:   24px;
  --space-lg:   48px;
  --space-xl:   80px;
  --space-2xl:  100px;

  /* ── Layout ─────────────────────────────────────────────── */
  --container-max:   1200px;
  --container-pad:   24px;
  --section-pad-v:   80px;
  --navbar-h:        70px;

  /* ── Borders & Radius ───────────────────────────────────── */
  --radius-sm:   6px;
  --radius-md:   12px;
  --radius-lg:   16px;
  --radius-full: 999px;

  /* ── Shadows ────────────────────────────────────────────── */
  --shadow-card:  0 4px 24px rgba(10, 22, 40, 0.12);
  --shadow-teal:  0 4px 20px rgba(0, 201, 167, 0.25);
  --shadow-float: 0 8px 32px rgba(10, 22, 40, 0.18);

  /* ── Transitions ────────────────────────────────────────── */
  --transition-fast:   0.2s ease;
  --transition-base:   0.3s ease;
  --transition-slow:   0.5s ease;

  /* ── Breakpoints (reference only — use in media queries) ── */
  /* --bp-sm: 480px   --bp-md: 768px   --bp-lg: 1024px        */
  /* --bp-xl: 1280px  --bp-2xl: 1440px                        */
}


/* ============================================================
   02. CSS RESET
   ============================================================ */

*,
*::before,
*::after {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
}

html {
  font-size: 16px;
  scroll-behavior: smooth;
  -webkit-text-size-adjust: 100%;
  text-size-adjust: 100%;
  overflow-x: hidden;   /* NEW — stops any oversized child from widening the layout viewport */
  width: 100%;          /* NEW — locks <html> to the real device width */
}

body {
  font-family: var(--font-body);
  font-size: var(--fs-body);
  line-height: var(--lh-body);
  color: var(--color-dark-text);
  background-color: var(--color-white);
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  overflow-x: hidden;
  width: 100%;          /* NEW */
  position: relative;   /* NEW — gives body a stable containing block */
}
ul, ol {
  list-style: none;
}

a {
  color: inherit;
  text-decoration: none;
}

img, video, svg {
  display: block;
  max-width: 100%;
  height: auto;
}

input, textarea, select, button {
  font-family: inherit;
  font-size: inherit;
}

button {
  cursor: pointer;
  border: none;
  background: none;
}

fieldset {
  border: none;
}

table {
  border-collapse: collapse;
  width: 100%;
}

/* ============================================================
   03. BASE TYPOGRAPHY
   ============================================================ */

h1, h2, h3, h4, h5, h6 {
  font-family: var(--font-heading);
  line-height: var(--lh-heading);
  font-weight: 700;
  color: inherit;
}

h1 { font-size: var(--fs-h1); }
h2 { font-size: var(--fs-h2); }
h3 { font-size: var(--fs-h3); font-weight: 500; }
h4 { font-size: var(--fs-h4); font-weight: 500; }
h5 { font-size: 18px;          font-weight: 500; }
h6 { font-size: var(--fs-body); font-weight: 500; }

p {
  font-family: var(--font-body);
  font-size: var(--fs-body);
  line-height: var(--lh-body);
  color: inherit;
  max-width: 72ch;
}

/* Paragraphs inside centred containers stretch full width */
.text-center p {
  margin-left: auto;
  margin-right: auto;
}

strong { font-weight: 700; }
em     { font-style: italic; }

small {
  font-size: var(--fs-small);
  line-height: 1.5;
}

blockquote {
  border-left: 4px solid var(--color-teal);
  padding-left: var(--space-md);
  font-style: italic;
  color: var(--color-muted);
}

label {
  font-family: var(--font-label);
  font-size: var(--fs-label);
  letter-spacing: 0.06em;
  font-weight: 500;
}


/* ============================================================
   04. ACCESSIBILITY & FOCUS
   ============================================================ */

/* Universal focus ring — teal, 2px offset */
:focus-visible {
  outline: 2px solid var(--color-teal);
  outline-offset: 3px;
  border-radius: 2px;
}

/* Remove default outline for mouse users — only show for keyboard */
:focus:not(:focus-visible) {
  outline: none;
}

/* Minimum touch target size for all interactive elements */
button,
a,
input,
select,
textarea,
[role="button"] {
  min-height: 44px;
}
/* ============================================================
   DECORATIVE ELEMENTS — NEVER BLOCK CLICKS
   aria-hidden elements are purely visual and should never
   intercept pointer events on any page.
   ============================================================ */

[aria-hidden="true"] {
  pointer-events: none;
}

/* Reduce motion for users who prefer it */
@media (prefers-reduced-motion: reduce) {
  *,
  *::before,
  *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }
}


/* ============================================================
   05. SKIP LINK
   ============================================================ */

.skip-link {
  position: absolute;
  top: -100%;
  left: var(--space-md);
  z-index: 9999;
  background: var(--color-teal);
  color: var(--color-navy);
  font-family: var(--font-heading);
  font-weight: 700;
  font-size: var(--fs-small);
  padding: 10px 20px;
  border-radius: 0 0 var(--radius-sm) var(--radius-sm);
  transition: top var(--transition-fast);
  white-space: nowrap;
}

.skip-link:focus {
  top: 0;
  outline: 2px solid var(--color-navy);
  outline-offset: 2px;
}


/* ============================================================
   06. SCROLLBAR & SELECTION
   ============================================================ */

/* Scrollbar — webkit browsers */
::-webkit-scrollbar {
  width: 8px;
  height: 8px;
}
::-webkit-scrollbar-track {
  background: var(--color-navy);
}
::-webkit-scrollbar-thumb {
  background: var(--color-teal);
  border-radius: var(--radius-full);
}
::-webkit-scrollbar-thumb:hover {
  background: #00b393;
}

/* Text selection */
::selection {
  background-color: var(--color-teal);
  color: var(--color-navy);
}
::-moz-selection {
  background-color: var(--color-teal);
  color: var(--color-navy);
}


/* ============================================================
   07. UTILITY CLASSES
   ============================================================ */

/* ── Layout ─────────────────────────────────────────────── */

.container {
  max-width: var(--container-max);
  margin-left: auto;
  margin-right: auto;
  padding-left: var(--container-pad);
  padding-right: var(--container-pad);
}

.section-padding {
  padding-top: var(--section-pad-v);
  padding-bottom: var(--section-pad-v);
}

@media (max-width: 768px) {
  .section-padding {
    padding-top: 56px;
    padding-bottom: 56px;
  }
}

@media (max-width: 480px) {
  .section-padding {
    padding-top: 40px;
    padding-bottom: 40px;
  }
}

/* ── Section Backgrounds ─────────────────────────────────── */

.section-dark {
  background-color: var(--color-navy);
  color: var(--color-white);
}

.section-dark p,
.section-dark li,
.section-dark small {
  color: var(--color-muted);
}

.section-dark h1,
.section-dark h2,
.section-dark h3,
.section-dark h4,
.section-dark h5,
.section-dark h6 {
  color: var(--color-white);
}

.section-light {
  background-color: var(--color-cloud);
  color: var(--color-dark-text);
}

.section-teal {
  background-color: var(--color-teal);
  color: var(--color-navy);
}

.section-teal p,
.section-teal h1,
.section-teal h2,
.section-teal h3,
.section-teal h4 {
  color: var(--color-navy);
}

.section-deeper {
  background-color: var(--color-deeper-navy);
  color: var(--color-white);
}

/* ── Text Utilities ──────────────────────────────────────── */

.text-center  { text-align: center; }
.text-left    { text-align: left; }
.text-right   { text-align: right; }

.text-teal    { color: var(--color-teal); }
.text-blue    { color: var(--color-blue); }
.text-muted   { color: var(--color-muted); }
.text-muted-light { color: var(--color-muted-light); }
.text-white   { color: var(--color-white); }
.text-navy    { color: var(--color-navy); }

.text-label {
  font-family: var(--font-label);
  font-size: var(--fs-label);
  letter-spacing: 0.08em;
  text-transform: uppercase;
  font-weight: 500;
}

.font-heading { font-family: var(--font-heading); }
.font-body    { font-family: var(--font-body); }
.font-label   { font-family: var(--font-label); }

/* ── Spacing Utilities ───────────────────────────────────── */

.mt-xs  { margin-top: var(--space-xs); }
.mt-sm  { margin-top: var(--space-sm); }
.mt-md  { margin-top: var(--space-md); }
.mt-lg  { margin-top: var(--space-lg); }

.mb-xs  { margin-bottom: var(--space-xs); }
.mb-sm  { margin-bottom: var(--space-sm); }
.mb-md  { margin-bottom: var(--space-md); }
.mb-lg  { margin-bottom: var(--space-lg); }

.gap-sm { gap: var(--space-sm); }
.gap-md { gap: var(--space-md); }
.gap-lg { gap: var(--space-lg); }

/* ── Display Utilities ───────────────────────────────────── */

.d-flex        { display: flex; }
.align-center  { align-items: center; }
.justify-center{ justify-content: center; }
.flex-wrap     { flex-wrap: wrap; }
.flex-col      { flex-direction: column; }

.hidden        { display: none !important; }
.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;
}

/* ── Fade-in-up Animation Class ──────────────────────────── */

.fade-in-up {
  opacity: 0;
  transform: translateY(30px);
  transition: opacity 0.6s ease, transform 0.6s ease;
}

.fade-in-up.is-visible {
  opacity: 1;
  transform: translateY(0);
}


/* ============================================================
   08. BUTTON STYLES
   ============================================================ */

/* ── Shared Button Base ──────────────────────────────────── */

.btn-primary,
.btn-secondary,
.btn-dark {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  font-family: var(--font-heading);
  font-weight: 500;
  font-size: var(--fs-body);
  padding: 14px 28px;
  border-radius: var(--radius-sm);
  border: 2px solid transparent;
  cursor: pointer;
  text-decoration: none;
  white-space: nowrap;
  transition: background-color var(--transition-fast),
              color var(--transition-fast),
              border-color var(--transition-fast),
              box-shadow var(--transition-fast),
              transform var(--transition-fast);
  min-height: 48px;
  line-height: 1;
}

.btn-primary:hover,
.btn-secondary:hover,
.btn-dark:hover {
  transform: translateY(-1px);
}

.btn-primary:active,
.btn-secondary:active,
.btn-dark:active {
  transform: translateY(0);
}

/* ── Primary — Filled Teal ───────────────────────────────── */

.btn-primary {
  background-color: var(--color-teal);
  color: var(--color-navy);
  border-color: var(--color-teal);
}

.btn-primary:hover {
  background-color: #00b393;
  border-color: #00b393;
  box-shadow: var(--shadow-teal);
}

/* ── Secondary — Outline Teal ────────────────────────────── */

.btn-secondary {
  background-color: transparent;
  color: var(--color-teal);
  border-color: var(--color-teal);
}

.btn-secondary:hover {
  background-color: var(--color-teal);
  color: var(--color-navy);
  box-shadow: var(--shadow-teal);
}

/* ── Dark — Filled Navy ──────────────────────────────────── */

.btn-dark {
  background-color: var(--color-navy);
  color: var(--color-white);
  border-color: var(--color-teal);
}

.btn-dark:hover {
  background-color: var(--color-slate);
  box-shadow: var(--shadow-teal);
}

/* ── Small Button Modifier ───────────────────────────────── */

.btn--sm {
  padding: 9px 18px;
  font-size: var(--fs-small);
  min-height: 38px;
}

/* ── Full-width Button Modifier ──────────────────────────── */

.btn--full {
  width: 100%;
}

/* ── Disabled State ──────────────────────────────────────── */

.btn-primary:disabled,
.btn-secondary:disabled,
.btn-dark:disabled {
  opacity: 0.55;
  cursor: not-allowed;
  transform: none;
  box-shadow: none;
}


/* ============================================================
   09. TAG PILLS
   ============================================================ */

.tag-pill {
  display: inline-block;
  font-family: var(--font-label);
  font-size: var(--fs-label);
  font-weight: 500;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  background-color: var(--color-mint);
  color: var(--color-teal);
  padding: 5px 14px;
  border-radius: var(--radius-full);
  line-height: 1.4;
  white-space: nowrap;
}

/* Inverted pill — navy bg, teal text (used on teal sections) */
.tag-pill--inverted {
  background-color: var(--color-navy);
  color: var(--color-teal);
}

/* Dark variant — slate bg for use on dark sections */
.tag-pill--dark {
  background-color: rgba(0, 201, 167, 0.12);
  color: var(--color-teal);
  border: 1px solid var(--color-border);
}


/* ============================================================
   10. CARD COMPONENTS
   ============================================================ */

/* ── Dark Card (for dark section backgrounds) ────────────── */

.card {
  background-color: var(--color-slate);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  padding: 28px;
  transition: transform var(--transition-base),
              border-color var(--transition-base),
              box-shadow var(--transition-base);
}

.card:hover {
  transform: translateY(-4px);
  border-color: var(--color-teal);
  box-shadow: var(--shadow-teal);
}

/* ── Light Card (for light section backgrounds) ──────────── */

.card-light {
  background-color: var(--color-white);
  border: 1px solid rgba(0, 0, 0, 0.08);
  border-radius: var(--radius-md);
  padding: 28px;
  transition: transform var(--transition-base),
              border-color var(--transition-base),
              box-shadow var(--transition-base);
}

.card-light:hover {
  transform: translateY(-4px);
  border-color: var(--color-teal);
  box-shadow: var(--shadow-card);
}

/* ── Teal Left-Border Accent Card ────────────────────────── */

.card-accent {
  border-left: 4px solid var(--color-teal);
}


/* ============================================================
   11. SECTION HEADING WITH TEAL UNDERLINE
   ============================================================ */

.section-heading {
  position: relative;
  display: inline-block;
  margin-bottom: var(--space-md);
}

/* Teal underline bar — 60px wide, 3px tall */
.section-heading::after {
  content: '';
  display: block;
  width: 60px;
  height: 3px;
  background-color: var(--color-teal);
  margin-top: 12px;
  border-radius: 2px;
}

/* Centre the underline when heading is centred */
.text-center .section-heading::after {
  margin-left: auto;
  margin-right: auto;
}


/* ============================================================
   12. GRID UTILITIES
   ============================================================ */

.grid-2 {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: var(--space-md);
}

.grid-3 {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: var(--space-md);
}

.grid-4 {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: var(--space-md);
}

/* Tablet breakpoints */
@media (max-width: 1024px) {
  .grid-4 {
    grid-template-columns: repeat(2, 1fr);
  }
}

@media (max-width: 768px) {
  .grid-2 {
    grid-template-columns: 1fr;
  }
  .grid-3 {
    grid-template-columns: repeat(2, 1fr);
  }
  .grid-4 {
    grid-template-columns: repeat(2, 1fr);
  }
}

@media (max-width: 480px) {
  .grid-3,
  .grid-4 {
    grid-template-columns: 1fr;
  }
}


/* ============================================================
   13. VISUAL MOTIF UTILITIES
   ============================================================ */

/* ── Dot Grid Background Texture ─────────────────────────── */

.dot-grid-bg {
  background-image: radial-gradient(
    circle,
    rgba(0, 201, 167, 0.12) 1px,
    transparent 1px
  );
  background-size: 28px 28px;
}

/* ── Waveform SVG Container ──────────────────────────────── */

.waveform-container {
  position: absolute;
  bottom: 0;
  left: 0;
  width: 200%;
  height: 80px;
  overflow: hidden;
  pointer-events: none;
}

.waveform-container svg {
  width: 100%;
  height: 100%;
  animation: waveMove 12s linear infinite;
}

/* ── Data Node Scatter (decorative circles) ──────────────── */

.data-node {
  position: absolute;
  border-radius: 50%;
  background-color: var(--color-teal);
  opacity: 0.25;
  pointer-events: none;
  animation: floatUp 6s ease-in-out infinite;
}

.data-node--blue {
  background-color: var(--color-blue);
}

/* ── Teal Left Border on info boxes ──────────────────────── */

.border-teal-left {
  border-left: 4px solid var(--color-teal);
  padding-left: var(--space-md);
}


/* ============================================================
   14. NAVBAR COMPONENT — G3
   ============================================================ */

.navbar {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  width: 100%;       /* NEW — belt-and-braces alongside left/right:0 */
  max-width: 100vw;  /* NEW — caps it even if a parent's containing block got stretched */
  z-index: 1000;
  background-color: var(--color-navy);
  border-bottom: 1px solid var(--color-border);
  height: var(--navbar-h);
  transition: height var(--transition-base),
              box-shadow var(--transition-base),
              border-color var(--transition-base);
}

.navbar--scrolled {
  height: 56px;
  border-bottom-color: var(--color-teal);
  box-shadow: 0 0 20px rgba(0, 201, 167, 0.12);
}

.navbar__inner {
  display: flex;
  align-items: center;
  justify-content: space-between;
  height: 100%;
}

/* ── Logo ────────────────────────────────────────────────── */

.logo {
  display: flex;
  align-items: center;
  gap: 12px;
  text-decoration: none;
  flex-shrink: 0;
}

.logo__icon {
  width: 44px;
  height: 44px;
  border-radius: 50%;
  background-color: var(--color-navy);
  border: 2px solid var(--color-teal);
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
}

.logo__text {
  display: flex;
  align-items: baseline;
}

.logo__vox {
  color: var(--color-white);
  font-family: var(--font-heading);
  font-weight: 700;
  font-size: 22px;
  line-height: 1;
}

.logo__ilytics {
  color: var(--color-teal);
  font-family: var(--font-heading);
  font-weight: 700;
  font-size: 22px;
  line-height: 1;
}

/* ── Nav Menu ────────────────────────────────────────────── */

.navbar__menu {
  display: flex;
  align-items: center;
  gap: var(--space-lg);
}

.navbar__links {
  display: flex;
  align-items: center;
  gap: 4px;
}

.navbar__links li a {
  font-family: var(--font-body);
  font-size: 15px;
  font-weight: 500;
  color: var(--color-muted);
  padding: 8px 12px;
  border-radius: var(--radius-sm);
  position: relative;
  transition: color var(--transition-fast);
  white-space: nowrap;
}

.navbar__links li a:hover,
.navbar__links li a.active {
  color: var(--color-teal);
}

/* Active indicator dot */
.navbar__links li a.active::after {
  content: '';
  position: absolute;
  bottom: 2px;
  left: 50%;
  transform: translateX(-50%);
  width: 4px;
  height: 4px;
  background-color: var(--color-teal);
  border-radius: 50%;
}

/* CTA button in navbar */
.navbar__cta {
  padding: 10px 20px;
  min-height: 40px;
  font-size: 14px;
}

/* ── Hamburger Button ────────────────────────────────────── */

.navbar__hamburger {
  display: none;
  flex-direction: column;
  justify-content: center;
  align-items: center;
  gap: 5px;
  width: 44px;
  height: 44px;
  background: transparent;
  border: none;
  cursor: pointer;
  padding: 8px;
  border-radius: var(--radius-sm);
  flex-shrink: 0;
}

.navbar__hamburger span {
  display: block;
  width: 24px;
  height: 2px;
  background-color: var(--color-white);
  border-radius: 2px;
  transition: transform var(--transition-base),
              opacity var(--transition-base);
  transform-origin: center;
}

/* Hamburger → X animation */
.navbar__hamburger.is-active span:nth-child(1) {
  transform: translateY(7px) rotate(45deg);
}
.navbar__hamburger.is-active span:nth-child(2) {
  opacity: 0;
  transform: scaleX(0);
}
.navbar__hamburger.is-active span:nth-child(3) {
  transform: translateY(-7px) rotate(-45deg);
}


/* ── Breadcrumb ──────────────────────────────────────────── */

.breadcrumb__list {
  display: flex;
  align-items: center;
  flex-direction: row;
  flex-wrap: nowrap;
  gap: 8px;
  padding: 0;
  margin: 0;
}

.breadcrumb__link {
  display: flex;
  align-items: center;
  gap: 6px;
  font-family: var(--font-label);
  font-size: 12px;
  font-weight: 500;
  letter-spacing: 0.05em;
  text-transform: uppercase;
  color: var(--color-muted);
  transition: color var(--transition-fast);
}

.breadcrumb__link:hover {
  color: var(--color-teal);
}

.breadcrumb__sep {
  color: var(--color-muted);
  font-size: 12px;
  opacity: 0.5;
}

.breadcrumb__current {
  font-family: var(--font-label);
  font-size: 12px;
  font-weight: 500;
  letter-spacing: 0.05em;
  text-transform: uppercase;
  color: var(--color-teal);
}

/* ── Mobile Nav ──────────────────────────────────────────── */

/* ── Mobile Nav ──────────────────────────────────────────── */

@media (max-width: 1024px) {

  :root { --navbar-h: 60px; }

  .navbar__hamburger {
    display: flex;
  }

  /* Hide logo text on tablet/mobile */
  .logo__text {
    display: none;
  }

  .navbar__menu {
    position: absolute;
    top: var(--navbar-h);
    left: 0;
    right: 0;
    flex-direction: column;
    align-items: stretch;
    background-color: var(--color-navy);
    border-top: 1px solid var(--color-border);
    border-bottom: 1px solid var(--color-border);
    gap: 0;
    max-height: 0;
    overflow: hidden;
    transition: max-height 0.4s ease;
    padding: 0;
  }

  .navbar__menu.is-open {
    max-height: 520px;  /* bumped — more links may need space */
    padding: var(--space-sm) 0;
  }

  .navbar__links {
    flex-direction: column;
    align-items: stretch;
    gap: 0;
    padding: 0 var(--space-md);
  }

  .navbar__links li a {
    display: block;
    padding: 13px 8px;
    border-bottom: 1px solid var(--color-border-dark);
    font-size: 15px;
  }

  .navbar__links li:last-child a {
    border-bottom: none;
  }

  .navbar__cta {
    margin: var(--space-sm) var(--space-md);
    text-align: center;
    justify-content: center;
  }
}

/* ── Show logo text between 420px and 1024px ─────────────── */
/* ── Show logo text between 360px and 1024px ─────────────── */
@media (min-width: 360px) and (max-width: 1024px) {
  .logo__text {
    display: flex;
  }

  .logo__vox,
  .logo__ilytics {
    font-size: 18px; /* slightly smaller to avoid squeeze on tablet */
  }
}

/* ── Tighten wordmark further on the narrowest phones ────── */
@media (min-width: 360px) and (max-width: 479px) {
  .logo__vox,
  .logo__ilytics {
    font-size: 15px; /* logo icon + hamburger eat ~100px at 360px, keep text compact */
  }
}

/* ── Restore full logo size on desktop ───────────────────── */
@media (min-width: 1025px) {
  .logo__vox,
  .logo__ilytics {
    font-size: 22px;
  }
}

/* Navbar spacer — pushes page content below fixed navbar */
.navbar-spacer {
  height: var(--navbar-h);
  flex-shrink: 0;
}


/* ============================================================
   15. FOOTER COMPONENT — G4
   ============================================================ */

/* ============================================================
   FOOTER COMPONENT — G4
   ============================================================ */

/* ── Core footer — sticky bottom + override stacking ─────── */

.footer {
  background-color: var(--color-navy);
  position: relative;
  z-index: 100;            /* sits above stray page elements */
  /* overflow: hidden REMOVED — wave clipping is handled by
     .footer__wave { overflow: hidden } below; keeping it here
     would clip the ::after pseudo-element that extends downward */
  flex-shrink: 0;          /* works with flex body for sticky footer */
  margin-top: auto;        /* pushes footer down on short pages */
}

/* ── Covers anything that bleeds BELOW the footer ────────── */
/*
   KEY LOGIC:
   - position: absolute  → anchored to .footer (its nearest positioned ancestor)
   - top: 100%           → starts at the exact bottom edge of the footer
   - height: 100vh       → extends one full viewport-height downward
   - z-index: 1          → within footer's stacking context (footer is z-index:100
                           in parent), so effectively overrides any sibling elements
                           that appear after <footer> in the DOM
   - pointer-events: none → lets mouse events pass through to the page
*/
.footer::after {
  content: '';
  position: absolute;
  top: 100%;               /* starts right below footer's bottom edge */
  left: 0;
  right: 0;
  height: 100vh;           /* covers entire viewport height below footer */
  background-color: var(--color-navy);
  z-index: 1;              /* sits on top of elements below footer */
  pointer-events: none;
}



/* ── Wave decoration ─────────────────────────────────────── */

.footer__wave {
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  height: 60px;
  overflow: hidden;        /* clips the wave SVG — this is why footer
                              itself no longer needs overflow: hidden */
  pointer-events: none;
}

/* ── Footer top section ──────────────────────────────────── */

.footer__top {
  padding: 72px 0 48px;
  position: relative;
}

/* ── 4-column grid (desktop) ─────────────────────────────── */

.footer__grid {
  display: grid;
  grid-template-columns: 1.4fr 1fr 1fr 1.2fr;
  gap: 48px;
}

/* ── Column wrapper ──────────────────────────────────────── */

.footer__col {
  min-width: 0; /* prevents grid blowout on long link text */
}

/* ── Column headings ─────────────────────────────────────── */

.footer__heading {
  font-family: var(--font-label);
  font-size: var(--fs-label);
  font-weight: 500;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--color-teal);
  margin-bottom: var(--space-md);
  display: block;
}

/* ── Brand column ────────────────────────────────────────── */

.footer__brand .logo {
  margin-bottom: var(--space-sm);
}

.footer__tagline {
  font-family: var(--font-body);
  font-size: var(--fs-small);
  color: var(--color-muted);
  line-height: 1.6;
  margin-bottom: var(--space-sm);
  max-width: 28ch;
}

.footer__desc {
  font-size: 13px;
  color: var(--color-muted);
  line-height: 1.65;
  max-width: 30ch;
  margin-bottom: var(--space-md);
}

/* ── Social icons ────────────────────────────────────────── */

.footer__social {
  display: flex;
  gap: 12px;
}

.footer__social a {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 38px;
  height: 38px;
  border-radius: 50%;
  border: 1px solid var(--color-border);
  color: var(--color-muted);
  font-size: 15px;
  transition: color var(--transition-fast),
              border-color var(--transition-fast),
              background-color var(--transition-fast);
}

.footer__social a:hover {
  color: var(--color-navy);
  background-color: var(--color-teal);
  border-color: var(--color-teal);
}

/* ── Links ───────────────────────────────────────────────── */

.footer__links {
  display: flex;
  flex-direction: column;
  gap: 10px;
}

.footer__links a {
  font-family: var(--font-body);
  font-size: var(--fs-small);
  color: var(--color-muted);
  transition: color var(--transition-fast);
  line-height: 1.4;
}

.footer__links a:hover {
  color: var(--color-teal);
}

/* ── Contact items ───────────────────────────────────────── */

.footer__contact-item {
  display: flex;
  align-items: flex-start;
  gap: 10px;
  margin-bottom: 12px;
  font-size: var(--fs-small);
  color: var(--color-muted);
  line-height: 1.5;
}

.footer__contact-item i {
  color: var(--color-teal);
  margin-top: 2px;
  flex-shrink: 0;
  width: 16px;
}

.footer__contact-item a {
  color: var(--color-muted);
  transition: color var(--transition-fast);
}

.footer__contact-item a:hover {
  color: var(--color-teal);
}

/* ── Bottom bar ──────────────────────────────────────────── */

.footer__bottom {
  background-color: var(--color-deeper-navy);
  border-top: 1px solid var(--color-teal);
  padding: 20px 0;
  position: relative;
  z-index: 1;
}

.footer__bottom-inner {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-md);
  flex-wrap: wrap;
}

.footer__copy {
  font-size: 13px;
  color: var(--color-muted-light);
  line-height: 1.5;
}

.footer__legal {
  display: flex;
  gap: var(--space-md);
}

.footer__legal a {
  font-size: 13px;
  color: var(--color-muted-light);
  transition: color var(--transition-fast);
}

.footer__legal a:hover {
  color: var(--color-teal);
}

/* ── Responsive — 1024px: 4col → 2col ───────────────────── */

@media (max-width: 1024px) {
  .footer__grid {
    grid-template-columns: 1fr 1fr;
    gap: 36px;
  }
}

/* ── Responsive — 900px: tighten gap ────────────────────── */

@media (max-width: 900px) {
  .footer__grid {
    gap: 28px;
  }
}

/* ── Responsive — 600px: stay 2col, shrink text ─────────── */

@media (max-width: 600px) {
  .footer__grid {
    grid-template-columns: 1fr 1fr; /* stays 2 columns */
    gap: 20px;
  }

  .footer__top {
    padding: 40px 0 28px;
  }

  .footer__heading {
    font-size: 10px;
    letter-spacing: 0.06em;
    margin-bottom: 12px;
  }

  .footer__tagline,
  .footer__desc {
    font-size: 12px;
    max-width: 100%;
  }

  .footer__links a {
    font-size: 12px;
  }

  .footer__contact-item {
    font-size: 12px;
  }

  .footer__copy,
  .footer__legal a {
    font-size: 11px;
  }

  .footer__social a {
    width: 32px;
    height: 32px;
    font-size: 13px;
  }

  .footer__bottom-inner {
    flex-direction: row;
    align-items: center;
    flex-wrap: wrap;
    gap: 8px;
  }

  .footer__legal {
    gap: var(--space-sm);
    flex-wrap: wrap;
  }
}

/* ── Responsive — 380px: 2col but text shrinks further ───── */

@media (max-width: 380px) {
  .footer__grid {
    grid-template-columns: 1fr 1fr; /* never collapses to 1col */
    gap: 12px;
  }

  .footer__heading {
    font-size: 9px;
    letter-spacing: 0.04em;
    margin-bottom: 10px;
  }

  .footer__tagline,
  .footer__desc,
  .footer__links a,
  .footer__contact-item {
    font-size: 11px;
  }

  .footer__copy,
  .footer__legal a {
    font-size: 10px;
  }

  .footer__social a {
    width: 28px;
    height: 28px;
    font-size: 11px;
  }

  .footer__bottom-inner {
    flex-direction: column;
    align-items: flex-start;
    gap: 6px;
  }
}

/* ============================================================
   16. COOKIE CONSENT BANNER — G5
   ============================================================ */

.cookie-banner {
  position: fixed;
  bottom: 0;
  left: 0;
  right: 0;
  z-index: 999;
  background-color: var(--color-slate);
  border-top: 2px solid var(--color-teal);
  transform: translateY(100%);
  transition: transform 0.4s ease;
  display: none;
}

.cookie-banner.is-visible {
  display: block;
  transform: translateY(0);
}

.cookie-banner.is-hiding {
  transform: translateY(100%);
}

.cookie-banner__inner {
  max-width: var(--container-max);
  margin: 0 auto;
  padding: 16px var(--container-pad);
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-md);
  flex-wrap: wrap;
}

.cookie-banner__text {
  display: flex;
  align-items: center;
  gap: 12px;
  flex: 1;
  min-width: 240px;
}

.cookie-banner__text i {
  color: var(--color-teal);
  font-size: 20px;
  flex-shrink: 0;
}

.cookie-banner__text p {
  font-size: var(--fs-small);
  color: var(--color-muted);
  line-height: 1.55;
  margin: 0;
  max-width: none;
}

.cookie-banner__text a {
  color: var(--color-teal);
  text-decoration: underline;
  text-underline-offset: 2px;
}

.cookie-banner__actions {
  display: flex;
  gap: 10px;
  flex-shrink: 0;
}

/* ── Cookie banner slide-in animation ───────────────────── */

@keyframes cookieSlideIn {
  from {
    transform: translateY(100%);
    opacity: 0;
  }
  to {
    transform: translateY(0);
    opacity: 1;
  }
}

@keyframes cookieSlideOut {
  from {
    transform: translateY(0);
    opacity: 1;
  }
  to {
    transform: translateY(100%);
    opacity: 0;
  }
}

/* Visible state — triggered by JS adding .is-visible */
.cookie-banner.is-visible {
  display: block;
  animation: cookieSlideIn 0.45s cubic-bezier(0.22, 1, 0.36, 1) forwards;
}

/* Hiding state — JS adds .is-hiding before removing from view */
.cookie-banner.is-hiding {
  animation: cookieSlideOut 0.35s ease forwards;
}

/* ── Cookie banner link styling ──────────────────────────── */

.cookie-banner__text a {
  color: var(--color-teal);
  text-decoration: underline;
  text-underline-offset: 2px;
  transition: opacity var(--transition-fast);
}

.cookie-banner__text a:hover {
  opacity: 0.8;
}

/* ── Cookie banner responsive ────────────────────────────── */

@media (max-width: 640px) {
  .cookie-banner__inner {
    flex-direction: column;
    align-items: flex-start;
    gap: 14px;
    padding: 14px var(--space-sm);
  }

  .cookie-banner__text {
    align-items: flex-start;
  }

  .cookie-banner__text i {
    margin-top: 2px;
  }

  .cookie-banner__actions {
    width: 100%;
    display: flex;
    gap: 10px;
  }

  .cookie-banner__actions .btn--sm {
    flex: 1;
    justify-content: center;
  }
}

/* ============================================================
   17. NEWSLETTER SECTION — G6
   ============================================================ */

.newsletter {
  position: relative;
  overflow: hidden;
}

.newsletter__inner {
  display: flex;
  align-items: center;
  gap: 48px;
}

.newsletter__content {
  flex: 1;
  max-width: 480px;
}

.newsletter__content .tag-pill {
  margin-bottom: var(--space-sm);
}

.newsletter__content h2 {
  margin-bottom: var(--space-sm);
}

.newsletter__content p {
  font-size: var(--fs-small);
  color: var(--color-muted);
  max-width: none;
}

.newsletter__form {
  flex: 1;
}

.newsletter__input-group {
  display: flex;
  width: 100%;
}

.newsletter__input-group input[type="email"] {
  flex: 1;
  height: 52px;
  background-color: var(--color-slate);
  border: 1px solid var(--color-border);
  border-right: none;
  color: var(--color-white);
  font-family: var(--font-body);
  font-size: var(--fs-body);
  padding: 0 16px;
  border-radius: var(--radius-sm) 0 0 var(--radius-sm);
  outline: none;
  transition: border-color var(--transition-fast);
}

.newsletter__input-group input[type="email"]::placeholder {
  color: var(--color-muted);
}

.newsletter__input-group input[type="email"]:focus {
  border-color: var(--color-teal);
}

.newsletter__input-group .btn-primary {
  border-radius: 0 var(--radius-sm) var(--radius-sm) 0;
  height: 52px;
  min-height: 52px;
  padding: 0 24px;
  white-space: nowrap;
}

.newsletter__message {
  font-size: 13px;
  margin-top: 8px;
  min-height: 20px;
  font-family: var(--font-body);
}

.newsletter__message.success { color: var(--color-success); }
.newsletter__message.error   { color: var(--color-error); }

@media (max-width: 900px) {
  .newsletter__inner {
    flex-direction: column;
    gap: var(--space-md);
    align-items: flex-start;
  }
  .newsletter__content {
    max-width: 100%;
  }
  .newsletter__form {
    width: 100%;
  }
}

@media (max-width: 480px) {
  .newsletter__input-group {
    flex-direction: column;
  }
  .newsletter__input-group input[type="email"] {
    border-right: 1px solid var(--color-border);
    border-bottom: none;
    border-radius: var(--radius-sm) var(--radius-sm) 0 0;
  }
  .newsletter__input-group .btn-primary {
    border-radius: 0 0 var(--radius-sm) var(--radius-sm);
    height: 48px;
    min-height: 48px;
  }
}

/* ── Newsletter label ────────────────────────────────────── */

.newsletter__label {
  display: block;
  font-family: var(--font-label);
  font-size: var(--fs-label);
  font-weight: 500;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--color-muted);
  margin-bottom: 10px;
}

/* ── Newsletter trust signals list ───────────────────────── */

.newsletter__trust {
  display: flex;
  flex-direction: column;
  gap: 8px;
  margin-top: var(--space-md);
}

.newsletter__trust li {
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: var(--fs-small);
  color: var(--color-muted);
  line-height: 1.4;
}

.newsletter__trust li i {
  color: var(--color-teal);
  font-size: 13px;
  flex-shrink: 0;
}

/* ── Newsletter form wrap ────────────────────────────────── */

.newsletter__form-wrap {
  flex: 1;
  min-width: 0;
}

/* ── Newsletter input group refinements ──────────────────── */

.newsletter__input-group {
  margin-bottom: 0;
}

/* Loading spinner inside button */
.nl-btn-loading {
  font-size: 15px;
}

/* ── Newsletter message states ───────────────────────────── */

.newsletter__message {
  min-height: 22px;
  font-size: 13px;
  margin-top: 10px;
  line-height: 1.5;
  font-family: var(--font-body);
  transition: opacity var(--transition-fast);
}

.newsletter__message:empty {
  display: none;
}

.newsletter__message.success {
  color: var(--color-teal);
}

.newsletter__message.error {
  color: var(--color-error);
}

/* ── Newsletter success card ─────────────────────────────── */

.newsletter__success {
  background-color: rgba(0, 201, 167, 0.08);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  padding: 24px;
  animation: fadeInUp 0.4s ease forwards;
}

.newsletter__success-inner {
  display: flex;
  align-items: flex-start;
  gap: 14px;
}

.newsletter__success-icon {
  color: var(--color-teal);
  font-size: 26px;
  flex-shrink: 0;
  margin-top: 2px;
}

.newsletter__success-title {
  font-family: var(--font-heading);
  font-weight: 700;
  font-size: 17px;
  color: var(--color-white);
  margin-bottom: 6px;
  max-width: none;
}

.newsletter__success-body {
  font-size: var(--fs-small);
  color: var(--color-muted);
  line-height: 1.6;
  max-width: none;
}

/* ── Newsletter section heading override ─────────────────── */
/* Section heading on dark bg needs white colour */

.newsletter .section-heading {
  color: var(--color-white);
}

/* ── Newsletter responsive ───────────────────────────────── */

@media (max-width: 900px) {
  .newsletter__content {
    max-width: 100%;
  }
}

@media (max-width: 480px) {
  .newsletter__trust {
    gap: 6px;
  }

  .newsletter__success-inner {
    flex-direction: column;
    gap: 10px;
  }
}


/* ============================================================
   18. CHAT WIDGET — G7
   ============================================================ */

.chat-widget {
  position: fixed;
  bottom: 24px;
  right: 24px;
  z-index: 9999;
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  gap: 12px;
}

/* ── Toggle Button ───────────────────────────────────────── */

.chat-widget__toggle {
  width: 56px;
  height: 56px;
  border-radius: 50%;
  background-color: var(--color-teal);
  border: none;
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 22px;
  color: var(--color-navy);
  box-shadow: var(--shadow-teal), 0 4px 12px rgba(0, 201, 167, 0.35);
  transition: transform var(--transition-fast),
              background-color var(--transition-fast);
  flex-shrink: 0;
}

.chat-widget__toggle:hover {
  transform: scale(1.06);
  background-color: #00b393;
}

.chat-widget__icon-close { display: none; }

.chat-widget.is-open .chat-widget__icon-open  { display: none; }
.chat-widget.is-open .chat-widget__icon-close { display: block; }

/* ── Chat Panel ──────────────────────────────────────────── */

.chat-widget__panel {
  width: 340px;
  height: 440px;
  background-color: var(--color-slate);
  border-radius: var(--radius-lg);
  border: 1px solid var(--color-border);
  box-shadow: var(--shadow-float);
  display: flex;
  flex-direction: column;
  overflow: hidden;
  transform: scale(0.85) translateY(8px);
  opacity: 0;
  pointer-events: none;
  transition: transform 0.25s ease,
              opacity 0.25s ease;
  transform-origin: bottom right;
}

.chat-widget__panel[aria-hidden="false"] {
  transform: scale(1) translateY(0);
  opacity: 1;
  pointer-events: auto;
}

/* ── Panel Header ────────────────────────────────────────── */

.chat-widget__header {
  background-color: var(--color-navy);
  padding: 14px 16px;
  display: flex;
  align-items: center;
  gap: 12px;
  border-radius: var(--radius-lg) var(--radius-lg) 0 0;
  flex-shrink: 0;
}

.chat-widget__avatar {
  width: 40px;
  height: 40px;
  border-radius: 50%;
  background-color: var(--color-teal);
  display: flex;
  align-items: center;
  justify-content: center;
  font-family: var(--font-heading);
  font-weight: 700;
  font-size: 14px;
  color: var(--color-navy);
  flex-shrink: 0;
}

.chat-widget__name {
  font-family: var(--font-heading);
  font-weight: 500;
  font-size: 14px;
  color: var(--color-white);
  line-height: 1.2;
  margin: 0;
  max-width: none;
}

.chat-widget__status {
  font-size: 12px;
  color: var(--color-muted);
  margin: 2px 0 0;
  max-width: none;
}

.chat-widget__dot {
  display: inline-block;
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background-color: #22C55E;
  margin-right: 4px;
  vertical-align: middle;
}

.chat-widget__close {
  margin-left: auto;
  color: var(--color-muted);
  font-size: 16px;
  padding: 4px;
  min-height: auto;
  cursor: pointer;
  transition: color var(--transition-fast);
}

.chat-widget__close:hover {
  color: var(--color-white);
}

/* ── Messages Area ───────────────────────────────────────── */

.chat-widget__messages {
  flex: 1;
  overflow-y: auto;
  padding: 14px;
  display: flex;
  flex-direction: column;
  gap: 10px;
  scrollbar-width: thin;
  scrollbar-color: var(--color-teal) var(--color-navy);
}

.chat-widget__msg {
  max-width: 85%;
}

.chat-widget__msg p {
  font-size: 13px;
  line-height: 1.5;
  margin: 0;
  max-width: none;
}

.chat-widget__time {
  font-size: 11px;
  color: var(--color-muted);
  margin-top: 4px;
  display: block;
}

/* Bot message */
.chat-widget__msg--bot {
  align-self: flex-start;
}

.chat-widget__msg--bot p {
  background-color: var(--color-navy);
  color: var(--color-white);
  padding: 10px 14px;
  border-radius: 0 12px 12px 12px;
  display: inline-block;
}

/* User message */
.chat-widget__msg--user {
  align-self: flex-end;
}

.chat-widget__msg--user p {
  background-color: var(--color-teal);
  color: var(--color-navy);
  padding: 10px 14px;
  border-radius: 12px 0 12px 12px;
  display: inline-block;
}

/* Quick reply buttons */
.chat-widget__quick-replies {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
}

.chat-widget__quick-replies button {
  font-size: 12px;
  font-family: var(--font-body);
  color: var(--color-teal);
  border: 1px solid var(--color-teal);
  background: transparent;
  border-radius: var(--radius-full);
  padding: 5px 12px;
  cursor: pointer;
  min-height: 30px;
  transition: background-color var(--transition-fast),
              color var(--transition-fast);
}

.chat-widget__quick-replies button:hover {
  background-color: var(--color-teal);
  color: var(--color-navy);
}

/* ── Chat Form ───────────────────────────────────────────── */

.chat-widget__form {
  padding: 10px 12px;
  border-top: 1px solid var(--color-border);
  flex-shrink: 0;
}

.chat-widget__form input[type="text"] {
  width: 100%;
  background-color: var(--color-navy);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-sm);
  color: var(--color-white);
  font-size: 13px;
  padding: 0 10px;
  height: 36px;
  min-height: 36px;
  margin-bottom: 6px;
  outline: none;
  transition: border-color var(--transition-fast);
}

.chat-widget__form input[type="text"]::placeholder {
  color: var(--color-muted);
}

.chat-widget__form input[type="text"]:focus {
  border-color: var(--color-teal);
}

.chat-widget__input-row {
  display: flex;
  gap: 6px;
}

.chat-widget__input-row input {
  flex: 1;
  margin-bottom: 0;
}

.chat-widget__input-row button[type="submit"] {
  width: 36px;
  height: 36px;
  min-height: 36px;
  background-color: var(--color-teal);
  color: var(--color-navy);
  border-radius: var(--radius-sm);
  font-size: 14px;
  display: flex;
  align-items: center;
  justify-content: center;
  transition: background-color var(--transition-fast);
  flex-shrink: 0;
}

.chat-widget__input-row button[type="submit"]:hover {
  background-color: #00b393;
}

/* ── Mobile Chat ─────────────────────────────────────────── */

@media (max-width: 480px) {
  .chat-widget {
    bottom: 16px;
    right: 16px;
  }
  .chat-widget__panel {
    width: 300px;
    height: 380px;
  }
}

/* ── Chat widget notification badge ─────────────────────── */
/*
   Small red dot on the toggle button before the chat is opened.
   JS removes it once the panel has been opened for the first time.
*/

.chat-widget__badge {
  position: absolute;
  top: 0;
  right: 0;
  width: 12px;
  height: 12px;
  background-color: #EF4444;
  border-radius: 50%;
  border: 2px solid var(--color-white);
  pointer-events: none;
  animation: badgePulse 2s ease-in-out infinite;
}

@keyframes badgePulse {
  0%, 100% { transform: scale(1);    opacity: 1; }
  50%       { transform: scale(1.15); opacity: 0.85; }
}

/* Toggle button must be relative for badge positioning */
.chat-widget__toggle {
  position: relative;
}

/* ── Chat widget header info block ───────────────────────── */

.chat-widget__header-info {
  flex: 1;
  min-width: 0;
}

/* ── Typing indicator ────────────────────────────────────── */

.chat-widget__typing {
  display: flex;
  align-items: center;
  gap: 4px;
  padding: 10px 14px;
  background-color: var(--color-navy);
  border-radius: 0 12px 12px 12px;
  width: fit-content;
}

.chat-widget__typing span {
  display: block;
  width: 7px;
  height: 7px;
  background-color: var(--color-muted);
  border-radius: 50%;
  animation: typingBounce 1.2s ease-in-out infinite;
}

.chat-widget__typing span:nth-child(2) {
  animation-delay: 0.2s;
}

.chat-widget__typing span:nth-child(3) {
  animation-delay: 0.4s;
}

@keyframes typingBounce {
  0%, 60%, 100% { transform: translateY(0); }
  30%           { transform: translateY(-6px); }
}

/* ── Chat timestamp ──────────────────────────────────────── */

.chat-widget__time {
  font-size: 11px;
  color: var(--color-muted);
  margin-top: 4px;
  display: block;
  font-family: var(--font-body);
}

/* ── Chat error state on empty message ───────────────────── */

.chat-widget__form input.input-error {
  border-color: var(--color-error) !important;
}

/* ── Panel open state — widget container ─────────────────── */

.chat-widget.is-open .chat-widget__toggle {
  background-color: var(--color-slate);
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.25);
}

/* ── Unread indicator animation ──────────────────────────── */

@keyframes widgetBounceIn {
  0%   { transform: scale(0.5); opacity: 0; }
  70%  { transform: scale(1.08); }
  100% { transform: scale(1); opacity: 1; }
}

.chat-widget__toggle {
  animation: widgetBounceIn 0.5s cubic-bezier(0.34, 1.56, 0.64, 1) 2s both;
}

/* ── Scrollbar inside messages panel ────────────────────── */

.chat-widget__messages::-webkit-scrollbar {
  width: 4px;
}

.chat-widget__messages::-webkit-scrollbar-track {
  background: transparent;
}

.chat-widget__messages::-webkit-scrollbar-thumb {
  background: var(--color-border);
  border-radius: 4px;
}


/* ============================================================
   19. ANIMATIONS & KEYFRAMES
   ============================================================ */

/* Waveform SVG horizontal drift */
@keyframes waveMove {
  from { transform: translateX(0); }
  to   { transform: translateX(-50%); }
}

/* Gentle float — decorative elements */
@keyframes floatUp {
  0%,  100% { transform: translateY(0px); }
  50%        { transform: translateY(-12px); }
}

/* Count-up — triggers via JS IntersectionObserver */
@keyframes countUp {
  from { opacity: 0; transform: translateY(10px); }
  to   { opacity: 1; transform: translateY(0); }
}

/* Ripple pulse — used for map location dot */
@keyframes ripple {
  0%   { transform: scale(1);   opacity: 0.6; }
  100% { transform: scale(2.8); opacity: 0; }
}

/* Fade in up — element entrance */
@keyframes fadeInUp {
  from {
    opacity: 0;
    transform: translateY(30px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

/* Fade in — simple opacity entrance */
@keyframes fadeIn {
  from { opacity: 0; }
  to   { opacity: 1; }
}

/* Slide down — cookie banner, dropdowns */
@keyframes slideDown {
  from { transform: translateY(-10px); opacity: 0; }
  to   { transform: translateY(0);     opacity: 1; }
}

/* Spin — loading states */
@keyframes spin {
  to { transform: rotate(360deg); }


}

/* Icon pulse — fires once when tile enters viewport (H4) */
@keyframes iconPulse {
  0%   { transform: scale(1); }
  40%  { transform: scale(1.22); box-shadow: 0 0 0 6px rgba(0,201,167,0.15); }
  70%  { transform: scale(0.96); }
  100% { transform: scale(1); box-shadow: none; }
}

.icon-pulse {
  animation: iconPulse 0.55s cubic-bezier(0.34, 1.56, 0.64, 1) forwards;
}

/* Pill pop-in — benefit pills in intern banner (H6) */
@keyframes pillPopIn {
  0%   { transform: scale(0.75); opacity: 0; }
  65%  { transform: scale(1.08); opacity: 1; }
  100% { transform: scale(1);    opacity: 1; }
}

/* Slow spin — decorative SVG orbital rings (H6) */
@keyframes slowSpin {
  from { transform: rotate(0deg); }
  to   { transform: rotate(360deg); }
}

/* Node ripple — timeline active node (A3) */
@keyframes nodeRipple {
  0%   { opacity: 0.6; transform: translate(-50%, calc(-50% + 22px)) scale(1); }
  100% { opacity: 0;   transform: translate(-50%, calc(-50% + 22px)) scale(2.2); }
}


/* Flag wave — international team cards (A5) */
@keyframes flagWave {
  0%   { transform: rotate(0deg)   scale(1);    }
  25%  { transform: rotate(-15deg) scale(1.2);  }
  50%  { transform: rotate(12deg)  scale(1.15); }
  75%  { transform: rotate(-8deg)  scale(1.1);  }
  100% { transform: rotate(0deg)   scale(1);    }
}


/* Map ripple — expanding rings around Leeds dot (A6) */
@keyframes mapRipple {
  0%   {
    r: 7;
    opacity: 0.7;
  }
  100% {
    r: 28;
    opacity: 0;
  }
}

/* Info card pulse dot — live indicator (A6) */
@keyframes infoPulse {
  0%,  100% { transform: scale(1);    opacity: 1;   }
  50%        { transform: scale(1.35); opacity: 0.7; }
}


/* Active pill state — set by scroll observer (S1) */
.svc-icon-pill.is-active {
  background-color: rgba(0, 201, 167, 0.08);
}

.svc-icon-pill.is-active .svc-icon-pill__icon {
  background-color: var(--color-teal);
  border-color: var(--color-teal);
}

.svc-icon-pill.is-active .svc-icon-pill__icon i {
  color: var(--color-navy);
}

.svc-icon-pill.is-active span {
  color: var(--color-teal);
}


/* CTA button click ripple — services CTA (S5) */
@keyframes ctaRipple {
  0%   { transform: scale(0); opacity: 1; }
  100% { transform: scale(1); opacity: 0; }
}

/* Marquee scroll — internship hero ticker strip (I1) */
@keyframes marqueeScroll {
  from { transform: translateX(0); }
  to   { transform: translateX(-50%); }
}

/* Item icon bounce — who can apply checklist items (I3) */
@keyframes itemIconBounce {
  0%   { transform: scale(0.7) translateY(4px); opacity: 0.4; }
  60%  { transform: scale(1.15) translateY(-2px); opacity: 1; }
  80%  { transform: scale(0.95) translateY(1px); }
  100% { transform: scale(1) translateY(0); opacity: 1; }
}






/* ── Search / filter widget — injected by JS (S4) ───────── */

.tools-tech__search {
  position: relative;
  display: flex;
  align-items: center;
  max-width: 520px;
  margin: 24px auto 0;
  background-color: var(--color-white);
  border: 1px solid rgba(0, 0, 0, 0.1);
  border-radius: var(--radius-full);
  overflow: hidden;
  box-shadow: 0 2px 12px rgba(10, 22, 40, 0.06);
  transition: border-color var(--transition-fast),
              box-shadow var(--transition-fast);
}

.tools-tech__search:focus-within {
  border-color: var(--color-teal);
  box-shadow: 0 0 0 3px rgba(0, 201, 167, 0.12);
}

.tools-tech__search-icon {
  padding: 0 14px 0 18px;
  color: var(--color-muted-light);
  font-size: 14px;
  pointer-events: none;
  flex-shrink: 0;
}

.tools-tech__search-input {
  flex: 1;
  height: 48px;
  min-height: 48px;
  border: none;
  outline: none;
  font-family: var(--font-body);
  font-size: 14px;
  color: var(--color-dark-text);
  background: transparent;
  padding: 0;
}

.tools-tech__search-input::placeholder {
  color: var(--color-muted-light);
}

.tools-tech__search-clear {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 36px;
  height: 36px;
  min-height: auto;
  border-radius: 50%;
  border: none;
  background: transparent;
  color: var(--color-muted-light);
  cursor: pointer;
  margin-right: 6px;
  flex-shrink: 0;
  transition: background-color var(--transition-fast),
              color var(--transition-fast);
  font-size: 13px;
}

.tools-tech__search-clear:hover {
  background-color: rgba(0, 0, 0, 0.06);
  color: var(--color-dark-text);
}

.tools-tech__search-count {
  font-family: var(--font-label);
  font-size: 11px;
  letter-spacing: 0.05em;
  color: var(--color-teal);
  text-transform: uppercase;
  text-align: center;
  margin-top: 10px;
  min-height: 18px;
  max-width: none;
}

/* Pill transition override when filter is active */
.tools-tech__pill {
  transition: background-color var(--transition-fast),
              color var(--transition-fast),
              border-color var(--transition-fast),
              transform 0.25s ease,
              opacity 0.25s ease,
              box-shadow var(--transition-fast),
              filter 0.25s ease;
}

@media (max-width: 768px) {
  .tools-tech__search {
    max-width: 100%;
  }

  .tools-tech__search-input {
    font-size: 13px;
  }
}
/* ============================================================
   20. PRINT MEDIA QUERY
   ============================================================ */

@media print {

  /* Hide all chrome */
  .navbar,
  .footer,
  .cookie-banner,
  .chat-widget,
  .newsletter,
  .btn-primary,
  .btn-secondary,
  .btn-dark {
    display: none !important;
  }

  /* Expand content to full width */
  body {
    font-size: 12pt;
    color: #000;
    background: #fff;
  }

  main {
    margin: 0;
    padding: 0;
    max-width: 100%;
  }

  .container {
    max-width: 100%;
    padding: 0;
  }

  /* Ensure dark section text is readable */
  .section-dark,
  .section-dark h1,
  .section-dark h2,
  .section-dark h3,
  .section-dark p {
    background: #fff !important;
    color: #000 !important;
  }

  /* Show link URLs */
  a[href]::after {
    content: " (" attr(href) ")";
    font-size: 10pt;
    color: #555;
  }

  /* Avoid page breaks mid-card */
  .card, .card-light {
    break-inside: avoid;
    border: 1px solid #ccc;
    box-shadow: none;
  }

  /* Remove animations */
  * {
    animation: none !important;
    transition: none !important;
  }
}


.legal-table {
  width: 100%;
  border-collapse: collapse;
  margin: 1rem 0 1.5rem;
  font-family: 'DM Sans', sans-serif;
  font-size: 0.95rem;
}

.legal-table th,
.legal-table td {
  text-align: left;
  padding: 0.6rem 0.75rem;
  border-bottom: 1px solid rgba(30, 45, 69, 0.15);
}

.legal-table th {
  font-family: 'Space Grotesk', sans-serif;
  font-size: 0.8rem;
  text-transform: uppercase;
  letter-spacing: 0.03em;
  color: var(--navy, #0A1628);
}

.legal-table code {
  background: rgba(0, 201, 167, 0.1);
  padding: 0.15rem 0.4rem;
  border-radius: 4px;
  font-size: 0.85rem;
}