/* ------------------------------------------------------------------
   FRESH DIGITAL — cookie consent banner
   Ported from Core Comms 26 Aug 2026, but RESTYLED, not copied. The
   original is Core Comms' brand: Montserrat, 1rem radii, soft blurred
   shadows, #009fe3. House rule cuts both ways — never bleed one brand
   into another — so this is rebuilt in Fresh Digital's own language:
   2px ink borders, hard offset shadows, zero radius, the five-colour
   palette, and the site's own type (inherited, so it follows the
   Elementor kit like everything else).
   ------------------------------------------------------------------ */

.fd-consent {
  position: fixed;
  inset-block-end: 0; inset-inline-start: 0; inset-inline-end: 0;
  z-index: 99999;
  display: flex; justify-content: center;
  padding: 18px;
  pointer-events: none;               /* only the card is interactive */
}
.fd-consent[hidden] { display: none; }

.fd-consent__card {
  pointer-events: auto;
  width: min(560px, 100%);
  background: var(--fd-paper, #fff);
  color: var(--fd-ink, #000);
  border: var(--fd-border, 2px solid #000);
  border-radius: 0;
  box-shadow: 7px 7px 0 var(--fd-pink, #fd2eb3);
  font-size: 14px;
  line-height: 1.5;
}
.fd-consent__body { padding: 22px 22px 18px; }

.fd-consent__h2 {
  margin: 0 0 8px;
  font-size: 20px; line-height: 1.15; font-weight: 400;
  letter-spacing: -0.02em;
}
.fd-consent__p { margin: 0 0 14px; color: var(--fd-text-2, #555); font-size: 14px; }
.fd-consent__link {
  color: var(--fd-pink-deep, #8f005f);
  text-decoration: underline; text-underline-offset: 3px;
}
.fd-consent__link:hover { color: var(--fd-pink, #fd2eb3); }

/* Preference toggles ------------------------------------------------ */
.fd-consent__prefs {
  display: flex; flex-wrap: wrap; gap: 10px 18px;
  padding: 14px 0 4px;
  border-block-start: 1px solid #e6e6e6;
}
.fd-consent__toggle {
  display: inline-flex; align-items: center; gap: 9px;
  background: none; border: 0; padding: 0; margin: 0;
  font: inherit; font-size: 13px; color: var(--fd-ink, #000);
  cursor: pointer; border-radius: 0; box-shadow: none;
}
.fd-consent__toggle.is-locked { cursor: default; opacity: .65; }

/* Hard-edged switch: a bordered track with a square knob. No pills. */
.fd-consent__switch {
  position: relative; display: inline-block;
  inline-size: 40px; block-size: 22px;
  background: #ffffff;
  border: var(--fd-border, 2px solid #000);
  border-radius: 0;
  transition: background-color .14s ease;
}
.fd-consent__knob {
  position: absolute; inset-block-start: 2px; inset-inline-start: 2px;
  inline-size: 14px; block-size: 14px;
  background: var(--fd-ink, #000);
  border-radius: 0;
  transition: transform .14s ease;
}
.fd-consent__toggle[aria-checked="true"] .fd-consent__switch { background: var(--fd-mint, #61d4b3); }
.fd-consent__toggle[aria-checked="true"] .fd-consent__knob   { transform: translateX(18px); }
.fd-consent__toggle:focus-visible .fd-consent__switch {
  outline: 2px solid var(--fd-blue, #31c6f4); outline-offset: 2px;
}
.fd-consent__toggle-label { white-space: nowrap; }

/* Actions ----------------------------------------------------------- */
.fd-consent__actions {
  display: flex; flex-wrap: wrap; gap: 10px;
  padding: 16px 22px 20px;
  border-block-start: 1px solid #e6e6e6;
}
.fd-consent__btn {
  font: inherit; font-size: 14px; line-height: 1.2;
  padding: 12px 18px;
  border: var(--fd-border, 2px solid #000);
  border-radius: 0;
  background: var(--fd-paper, #fff);
  color: var(--fd-ink, #000);
  cursor: pointer;
  transition: transform .12s ease, box-shadow .12s ease, background-color .12s ease;
}
.fd-consent__btn:hover { transform: translate(-2px, -2px); box-shadow: 4px 4px 0 var(--fd-ink, #000); }
.fd-consent__btn:focus-visible { outline: 2px solid var(--fd-blue, #31c6f4); outline-offset: 2px; }

/* Accept carries the site's primary button treatment. Reject is given equal
   visual weight on purpose: a reject that is harder to find than an accept is
   not a free choice, which is the point of the banner. */
/* ---------------------------------------------------------------------------
   BUTTON COLOURS - every state declared, and here is why it has to be.

   hello-elementor/reset.css paints EVERY bare <button> on the site:
       button:hover, button:focus { background-color:#c36; color:#fff }     (0,1,1)
   Our own `.fd-consent__btn { color: ... }` is only (0,1,0), so it LOSES that
   tie-break and Hello repaints the text white the moment you hover. Measured on
   the live banner, 27 Aug 2026:
     - "Reject all"      white text on white          1.00:1  (invisible)
     - "Save my choices" #8f005f text on #c36 pink    1.81:1
   against a 4.5:1 AA floor. Only "Accept all" escaped, and only by luck: its
   hover rule happened to set a background, though its text still went white.

   So: colour and text-decoration are pinned for ALL states at (0,2,0)/(0,3,0),
   and each variant pins its own background for its own states at the same
   weight. Never rely on the base rule alone to survive a :hover - a bare
   element+pseudo selector outranks a single class.
   --------------------------------------------------------------------------- */
.fd-consent .fd-consent__btn,
.fd-consent .fd-consent__btn:hover,
.fd-consent .fd-consent__btn:focus,
.fd-consent .fd-consent__btn:focus-visible {
  color: var(--fd-ink, #000);
  text-decoration: none;
  border-color: var(--fd-ink, #000);
}

/* Reject is given equal visual weight to Accept on purpose: a reject that is
   harder to find than an accept is not a free choice, which is the point. */
.fd-consent .fd-consent__btn--reject,
.fd-consent .fd-consent__btn--reject:hover,
.fd-consent .fd-consent__btn--reject:focus { background: var(--fd-paper, #fff); }

/* Mint marks the confirm action apart from Reject's white without competing
   with Accept's primary orange. Black on mint measures 11.58:1. */
.fd-consent .fd-consent__btn--select,
.fd-consent .fd-consent__btn--select:hover,
.fd-consent .fd-consent__btn--select:focus {
  background: var(--fd-mint, #61d4b3);
  border: var(--fd-border, 2px solid #000);
  border-radius: 0;
}

.fd-consent .fd-consent__btn--accept {
  background: var(--fd-orange, #fb8d62);
  box-shadow: 4px 4px 0 var(--fd-ink, #000);
  margin-inline-start: auto;
}
.fd-consent .fd-consent__btn--accept:hover,
.fd-consent .fd-consent__btn--accept:focus { background: var(--fd-yellow, #fdd365); }

/* The reopen tab, so a choice can always be changed ------------------ */
.fd-consent-tab {
  position: fixed; inset-block-end: 14px; inset-inline-start: 14px;
  z-index: 99998;
  display: inline-flex; align-items: center; gap: 7px;
  padding: 9px 13px;
  font: inherit; font-size: 12px;
  background: var(--fd-paper, #fff);
  color: var(--fd-ink, #000);
  border: var(--fd-border, 2px solid #000);
  border-radius: 0;
  box-shadow: 3px 3px 0 var(--fd-blue, #31c6f4);
  cursor: pointer;
}
.fd-consent-tab:hover { transform: translate(-2px, -2px); box-shadow: 5px 5px 0 var(--fd-blue, #31c6f4); }
/* Same reset trap as the action buttons: these are bare <button>s, so
   `button:hover {background:#c36;color:#fff}` (0,1,1) outranks a single class and would
   turn the reopen tab and the toggles pink on hover. Pinned at (0,2,0)+. */
.fd-consent-tab,
.fd-consent-tab:hover,
.fd-consent-tab:focus,
.fd-consent-tab:focus-visible {
  background: var(--fd-paper, #fff);
  color: var(--fd-ink, #000);
  border-color: var(--fd-ink, #000);
}
.fd-consent .fd-consent__toggle,
.fd-consent .fd-consent__toggle:hover,
.fd-consent .fd-consent__toggle:focus,
.fd-consent .fd-consent__toggle:focus-visible {
  background: transparent;
  color: var(--fd-ink, #000);
}
.fd-consent-tab[hidden] { display: none; }

@media (max-width: 600px) {
  .fd-consent { padding: 10px; }
  .fd-consent__card { box-shadow: 5px 5px 0 var(--fd-pink, #fd2eb3); }
  .fd-consent__body { padding: 18px 16px 14px; }
  .fd-consent__actions { padding: 14px 16px 16px; }
  .fd-consent__btn { flex: 1 1 auto; text-align: center; }
  .fd-consent__btn--accept { margin-inline-start: 0; }
}

/* Respect a user who has asked for less motion. */
@media (prefers-reduced-motion: reduce) {
  .fd-consent__btn, .fd-consent-tab, .fd-consent__knob, .fd-consent__switch { transition: none; }
  .fd-consent__btn:hover, .fd-consent-tab:hover { transform: none; }
}

/* The reopen tab is printed BEFORE the dialog in the markup, so it cannot be
   reached with a sibling combinator. While the banner is open the two overlap
   in the bottom-left corner, so the tab is suppressed for the duration. */
body:has(.fd-consent:not([hidden])) .fd-consent-tab { display: none; }
