/* ==========================================================================
   NTV Modules – styles (loaded by the NTV Modules plugin)
   Brand colours, buttons and module layout. Mostly "ntv-" classes, plus site-wide fixes
   for the accordion title colour, theme button weight and listing card alignment.
   ========================================================================== */

:root {
  --ntv-darkgreen: #1C2212;
  --ntv-olive: #716B4E;
  --ntv-warmgrey: #94927F;
  --ntv-stone: #C4BAAD;
  --ntv-cream: #F1EDE0;
  --ntv-cream50: #F7F5EF;
  --ntv-sage: #BFCDA7;
  --ntv-pink: #DC5070;
  --ntv-burgundy: #83383A;
  --ntv-yellow: #F4B840;
  --ntv-notice: var(--ntv-yellow); /* Important Notice bar – palette yellow */
  --ntv-terracotta: #B77F5E;
  --ntv-khaki: #C2B888;
  --ntv-green: #809C53;
  --ntv-lightblue: #78AADE;
  --ntv-navy: #102D68;
  --ntv-purple: #6750A4;
  --ntv-white: #FFFFFF;
  --ntv-black: #000000;
  --ntv-annotation: #FF07B9;
  --ntv-radius: 8px;
}

/* --------------------------------------------------------------------------
   1. Background colour swaps with accessible text (WCAG AA, 4.5:1+)
   --ntv-fg = body text, --ntv-hd = headings
   -------------------------------------------------------------------------- */
.ntv-bg-darkgreen  { --ntv-bg: var(--ntv-darkgreen);  --ntv-fg: var(--ntv-white);     --ntv-hd: var(--ntv-yellow); }
.ntv-bg-olive      { --ntv-bg: var(--ntv-olive);      --ntv-fg: var(--ntv-white);     --ntv-hd: var(--ntv-white); }
.ntv-bg-warmgrey   { --ntv-bg: var(--ntv-warmgrey);   --ntv-fg: var(--ntv-darkgreen); --ntv-hd: var(--ntv-darkgreen); }
.ntv-bg-stone      { --ntv-bg: var(--ntv-stone);      --ntv-fg: var(--ntv-darkgreen); --ntv-hd: var(--ntv-darkgreen); }
.ntv-bg-cream      { --ntv-bg: var(--ntv-cream);      --ntv-fg: var(--ntv-darkgreen); --ntv-hd: var(--ntv-darkgreen); }
.ntv-bg-cream50    { --ntv-bg: var(--ntv-cream50);    --ntv-fg: var(--ntv-darkgreen); --ntv-hd: var(--ntv-darkgreen); }
.ntv-bg-sage       { --ntv-bg: var(--ntv-sage);       --ntv-fg: var(--ntv-darkgreen); --ntv-hd: var(--ntv-darkgreen); }
.ntv-bg-pink       { --ntv-bg: var(--ntv-pink);       --ntv-fg: var(--ntv-black);     --ntv-hd: var(--ntv-black); }
.ntv-bg-burgundy   { --ntv-bg: var(--ntv-burgundy);   --ntv-fg: var(--ntv-white);     --ntv-hd: var(--ntv-white); }
.ntv-bg-notice     { --ntv-bg: var(--ntv-notice);     --ntv-fg: var(--ntv-darkgreen); --ntv-hd: var(--ntv-darkgreen); }
.ntv-bg-yellow     { --ntv-bg: var(--ntv-yellow);     --ntv-fg: var(--ntv-darkgreen); --ntv-hd: var(--ntv-darkgreen); }
.ntv-bg-terracotta { --ntv-bg: var(--ntv-terracotta); --ntv-fg: var(--ntv-darkgreen); --ntv-hd: var(--ntv-darkgreen); }
.ntv-bg-khaki      { --ntv-bg: var(--ntv-khaki);      --ntv-fg: var(--ntv-darkgreen); --ntv-hd: var(--ntv-darkgreen); }
.ntv-bg-green      { --ntv-bg: var(--ntv-green);      --ntv-fg: var(--ntv-darkgreen); --ntv-hd: var(--ntv-darkgreen); }
.ntv-bg-lightblue  { --ntv-bg: var(--ntv-lightblue);  --ntv-fg: var(--ntv-darkgreen); --ntv-hd: var(--ntv-darkgreen); }
.ntv-bg-navy       { --ntv-bg: var(--ntv-navy);       --ntv-fg: var(--ntv-white);     --ntv-hd: var(--ntv-yellow); }
.ntv-bg-purple     { --ntv-bg: var(--ntv-purple);     --ntv-fg: var(--ntv-white);     --ntv-hd: var(--ntv-white); }
.ntv-bg-white      { --ntv-bg: var(--ntv-white);      --ntv-fg: var(--ntv-darkgreen); --ntv-hd: var(--ntv-darkgreen); }
.ntv-bg-none       { --ntv-bg: transparent;           --ntv-fg: var(--ntv-darkgreen); --ntv-hd: var(--ntv-darkgreen); }

[class*="ntv-bg-"] {
  background-color: var(--ntv-bg) !important;
  color: var(--ntv-fg) !important;
}
/* Columns: colour the inner box so padding/gutters behave */
.vc_column_container[class*="ntv-bg-"] { background-color: transparent !important; }
.vc_column_container[class*="ntv-bg-"] > .vc_column-inner { background-color: var(--ntv-bg); }

[class*="ntv-bg-"] p,
[class*="ntv-bg-"] li,
[class*="ntv-bg-"] td,
[class*="ntv-bg-"] small,
[class*="ntv-bg-"] a:not(.btn):not([class*="btn-"]):not([class*="color-"]) { color: var(--ntv-fg) !important; }

[class*="ntv-bg-"] h1, [class*="ntv-bg-"] h2, [class*="ntv-bg-"] h3,
[class*="ntv-bg-"] h4, [class*="ntv-bg-"] h5, [class*="ntv-bg-"] h6 { color: var(--ntv-hd) !important; }

/* Sub title on dark banners follows the heading colour (as per Figma hero) */
.ntv-landing-banner.ntv-bg-darkgreen .sub-title,
.ntv-landing-banner.ntv-bg-navy .sub-title { color: var(--ntv-hd) !important; }

/* --------------------------------------------------------------------------
   2. Editor labels on the template page (pink = Figma annotation colour)
   -------------------------------------------------------------------------- */
.ntv-module-label { margin-top: 48px !important; margin-bottom: 12px !important; }
.ntv-module-label .wpb_text_column {
  border: 2px dashed var(--ntv-annotation);
  border-radius: var(--ntv-radius);
  padding: 10px 16px;
  margin: 0 !important;
  font-family: monospace;
  font-size: 14px;
  line-height: 1.5;
  color: var(--ntv-darkgreen);
}
.ntv-module-label strong { color: var(--ntv-annotation); }
.ntv-module-label p { margin: 0 0 6px; }
.ntv-module-label p:last-child { margin-bottom: 0; }

/* --------------------------------------------------------------------------
   3. Shared helpers
   -------------------------------------------------------------------------- */
/* Text colour swap for titles (use in title_class) */
.ntv-text-darkgreen, .ntv-text-darkgreen * { color: var(--ntv-darkgreen) !important; }
.ntv-text-olive, .ntv-text-olive * { color: var(--ntv-olive) !important; }
.ntv-text-warmgrey, .ntv-text-warmgrey * { color: var(--ntv-warmgrey) !important; }
.ntv-text-stone, .ntv-text-stone * { color: var(--ntv-stone) !important; }
.ntv-text-cream, .ntv-text-cream * { color: var(--ntv-cream) !important; }
.ntv-text-sage, .ntv-text-sage * { color: var(--ntv-sage) !important; }
.ntv-text-pink, .ntv-text-pink * { color: var(--ntv-pink) !important; }
.ntv-text-burgundy, .ntv-text-burgundy * { color: var(--ntv-burgundy) !important; }
.ntv-text-yellow, .ntv-text-yellow * { color: var(--ntv-yellow) !important; }
.ntv-text-terracotta, .ntv-text-terracotta * { color: var(--ntv-terracotta) !important; }
.ntv-text-khaki, .ntv-text-khaki * { color: var(--ntv-khaki) !important; }
.ntv-text-green, .ntv-text-green * { color: var(--ntv-green) !important; }
.ntv-text-lightblue, .ntv-text-lightblue * { color: var(--ntv-lightblue) !important; }
.ntv-text-navy, .ntv-text-navy * { color: var(--ntv-navy) !important; }
.ntv-text-purple, .ntv-text-purple * { color: var(--ntv-purple) !important; }
.ntv-text-white, .ntv-text-white * { color: var(--ntv-white) !important; }

.ntv-align-left { text-align: left; }
.ntv-align-center { text-align: center; }
.ntv-align-right { text-align: right; }
.ntv-small, .ntv-small * { font-size: 14px; line-height: 1.4; }
.ntv-eyebrow { text-transform: uppercase; font-family: "Paragraf", serif; font-size: 14px; letter-spacing: .04em; margin-bottom: 8px; }
/* Buttons typed into text blocks. Own class so the theme's ".btn" text-link styling can't reach them. */
a.ntv-btn,
a.ntv-btn:visited {
  display: inline-block;
  padding: 10px 24px !important;
  border: 1px solid transparent !important;
  border-radius: 999px;
  font-size: 16px !important;
  font-weight: 400 !important;
  line-height: 1.5 !important;
  letter-spacing: normal !important;
  text-transform: none !important;
  text-decoration: none !important;
  text-align: center;
  white-space: nowrap;
  box-shadow: none !important;
  transition: background-color .15s ease, color .15s ease, border-color .15s ease;
}
a.ntv-btn:hover, a.ntv-btn:focus { text-decoration: none !important; }
a.ntv-btn:focus-visible { outline: 2px solid currentColor; outline-offset: 3px; }
a.ntv-btn-darkgreen, a.ntv-btn-darkgreen:visited { background: var(--ntv-darkgreen) !important; color: var(--ntv-white) !important; }
a.ntv-btn-olive, a.ntv-btn-olive:visited { background: var(--ntv-olive) !important; color: var(--ntv-white) !important; }
a.ntv-btn-warmgrey, a.ntv-btn-warmgrey:visited { background: var(--ntv-warmgrey) !important; color: var(--ntv-darkgreen) !important; }
a.ntv-btn-stone, a.ntv-btn-stone:visited { background: var(--ntv-stone) !important; color: var(--ntv-darkgreen) !important; }
a.ntv-btn-cream, a.ntv-btn-cream:visited { background: var(--ntv-cream) !important; color: var(--ntv-darkgreen) !important; }
a.ntv-btn-sage, a.ntv-btn-sage:visited { background: var(--ntv-sage) !important; color: var(--ntv-darkgreen) !important; }
a.ntv-btn-pink, a.ntv-btn-pink:visited { background: var(--ntv-pink) !important; color: var(--ntv-black) !important; }
a.ntv-btn-burgundy, a.ntv-btn-burgundy:visited { background: var(--ntv-burgundy) !important; color: var(--ntv-white) !important; }
a.ntv-btn-yellow, a.ntv-btn-yellow:visited { background: var(--ntv-yellow) !important; color: var(--ntv-darkgreen) !important; }
a.ntv-btn-terracotta, a.ntv-btn-terracotta:visited { background: var(--ntv-terracotta) !important; color: var(--ntv-darkgreen) !important; }
a.ntv-btn-khaki, a.ntv-btn-khaki:visited { background: var(--ntv-khaki) !important; color: var(--ntv-darkgreen) !important; }
a.ntv-btn-green, a.ntv-btn-green:visited { background: var(--ntv-green) !important; color: var(--ntv-darkgreen) !important; }
a.ntv-btn-lightblue, a.ntv-btn-lightblue:visited { background: var(--ntv-lightblue) !important; color: var(--ntv-darkgreen) !important; }
a.ntv-btn-navy, a.ntv-btn-navy:visited { background: var(--ntv-navy) !important; color: var(--ntv-white) !important; }
a.ntv-btn-purple, a.ntv-btn-purple:visited { background: var(--ntv-purple) !important; color: var(--ntv-white) !important; }
a.ntv-btn-white, a.ntv-btn-white:visited { background: var(--ntv-white) !important; color: var(--ntv-darkgreen) !important; }
a.ntv-btn:hover, a.ntv-btn:focus { filter: brightness(0.9); }
a.ntv-btn-darkgreen:hover, a.ntv-btn-darkgreen:focus { filter: none; background: var(--ntv-olive) !important; }
a.ntv-btn-white:hover, a.ntv-btn-white:focus, a.ntv-btn-cream:hover, a.ntv-btn-cream:focus { filter: none; background: var(--ntv-stone) !important; }
@media (max-width: 767px) { a.ntv-btn { white-space: normal; } }

.ntv-btn-group { display: flex; flex-wrap: wrap; align-items: center; gap: 12px 16px; margin-top: 24px; }
.ntv-content-870 > .wpb_column > .vc_column-inner > .wpb_wrapper { max-width: 870px; }

/* Full-width colour band for a row that stays aligned with the page content */
.ntv-full-bleed { box-shadow: 0 0 0 100vmax var(--ntv-bg); clip-path: inset(0 -100vmax); }

/* Feature paragraph (Text Panel) */
h2.ntv-feature-para { font-size: 32px !important; line-height: 1.3 !important; margin-bottom: 32px; }
@media (max-width: 767px) { h2.ntv-feature-para { font-size: 24px !important; } }

/* Theme buttons: match the agreed button design (regular weight, not bold) */
a.btn,
a[class*="btn-white-on-"], a[class*="btn-darkgreen-on-"], a[class*="btn-black-on-"], a[class*="btn-darkgrey-on-"],
a.color-ten, a.color-purple-reverse,
button[class*="btn-"], input[type="submit"][class*="btn-"] {
  font-weight: 400 !important;
  letter-spacing: normal !important;
}

/* Feature panel / Section banners: black NTV monogram turns white on dark colours */
.welcome-nta-block.ntv-bg-darkgreen img,
.welcome-nta-block.ntv-bg-olive img,
.welcome-nta-block.ntv-bg-burgundy img,
.welcome-nta-block.ntv-bg-navy img,
.welcome-nta-block.ntv-bg-purple img { filter: invert(1) brightness(2); }

/* --------------------------------------------------------------------------
   4. Modules
   -------------------------------------------------------------------------- */

/* 02 Landing Page Banner 1 – full image, 2400 x 600 (4:1) */
.ntv-banner-full { margin-bottom: 0 !important; }
.ntv-banner-full,
.ntv-banner-full .wpb_wrapper,
.ntv-banner-full figure,
.ntv-banner-full .vc_figure,
.ntv-banner-full .vc_single_image-wrapper,
.ntv-banner-full img { display: block !important; width: 100% !important; max-width: none !important; margin: 0 !important; }
.ntv-banner-full img { aspect-ratio: 4 / 1; height: auto; max-height: 600px; object-fit: cover; display: block; }
@media (max-width: 767px) { .ntv-banner-full img { aspect-ratio: 16 / 9; } }

/* 11 CTA Panel 2 – one column inside the page container (lines up with other content); colour runs full width */
.ntv-cta-panel-2 { padding: 40px 0 !important; margin-bottom: 0 !important; }
.ntv-cta-panel-2 .wpb_text_column, .ntv-cta-panel-2 .wpb_content_element { margin-bottom: 0 !important; }
.ntv-cta2 { display: flex; align-items: center; justify-content: space-between; gap: 24px 40px; flex-wrap: wrap; }
.ntv-cta2-text { flex: 1 1 420px; }
.ntv-cta2-text h3 { margin: 0 0 12px; }
.ntv-cta2-text p { margin: 0; }
.ntv-cta2-btn { flex: 0 0 auto; margin: 0 !important; }

/* 15 People cards (ntv_person_cards) – name and role use the news card fonts:
   name = Haffer like the news title, role = Paragraf like the news date. Applies site-wide. */
.ntv-person-card [class*="ntv-pc-name"],
.ntv-person-card :is(h2, h3, h4, h5) {
  font-family: "Haffer", "Helvetica Neue", Arial, sans-serif !important;
  font-size: 24px !important;
  font-weight: 400 !important;
  line-height: 1.25 !important;
  letter-spacing: normal !important;
  text-transform: none !important;
}
.ntv-person-card [class*="ntv-pc-role"] {
  font-family: "Paragraf", Georgia, serif !important;
  font-size: 18px !important;
  font-weight: 400 !important;
  line-height: 1.35 !important;
  color: #3B3B3B !important;
  text-transform: none !important;
}
.ntv-person-card :is(a, button) { font-weight: 400 !important; }

/* 18/19/33 Text only cards */
.ntv-text-card { border-radius: var(--ntv-radius); padding: 28px 26px; height: 100%; }
.ntv-text-card.ntv-bg-white { border: 1px solid #C9C9C0; }   /* standalone white card on a white page */
.ntv-info-panel .ntv-text-card { border: 0; }                  /* inside a coloured info panel */
/* Small text cards (generic list items) – card colour from additional_article_class */
.ntv-info-small article[class*="ntv-bg-"] { border-radius: var(--ntv-radius); height: 100%; }
.ntv-info-panel-small { padding: 40px 0 !important; }
.ntv-text-card-small { padding: 28px 36px; }
.ntv-text-card-large > * > p:first-of-type,
.ntv-text-card-large .ntv-small { font-size: 14px !important; line-height: 1.45; }
.ntv-info-panel { padding: 40px 0 !important; margin-bottom: 0 !important; }
.ntv-info-panel > .wpb_column > .vc_column-inner > .wpb_wrapper { height: 100%; }
.ntv-info-panel .wpb_column { margin-bottom: 0; }
@media (max-width: 767px) { .ntv-info-panel .wpb_column + .wpb_column { margin-top: 24px; } }

/* Text cards fill their column; buttons sit on the bottom line; a button with no text is hidden */
.ntv-info-panel .wpb_column > .vc_column-inner,
.ntv-info-panel .wpb_column > .vc_column-inner > .wpb_wrapper { display: flex; flex-direction: column; flex: 1 1 auto; height: 100%; }
.ntv-text-card { display: flex; flex-direction: column; flex: 1 1 auto; }
.ntv-text-card div:has(a[class*="btn"]) { display: flex; flex-direction: column; flex: 1 1 auto; }
.ntv-text-card :is(div, p, ul):has(> a[class*="btn"], > li > a[class*="btn"]) { flex-direction: row; flex-wrap: wrap; align-items: center; gap: 12px; margin-top: auto !important; padding-top: 16px; list-style: none; padding-left: 0; }
/* Unused buttons hide themselves: no link (cta_link left empty) or no text */
.ntv-text-card a[class*="btn"]:is([href=""], [href="#!"], :not([href]), :empty),
.ntv-text-card :is(li, span):has(> a[class*="btn"]:is([href=""], [href="#!"], :not([href]), :empty)) { display: none !important; }

/* Price table: no outline, divider lines between rows only */
.ntv-price-table,
.ntv-price-table tbody,
.ntv-price-table tr,
.ntv-price-table td { border: 0 !important; background: transparent !important; box-shadow: none !important; }
.ntv-price-table { width: 100%; border-collapse: collapse; margin: 20px 0 16px !important; }
.ntv-price-table td { padding: 12px 0 14px !important; vertical-align: top; font-size: 17px; line-height: 1.4; }
.ntv-price-table td:last-child { text-align: right; padding-left: 16px !important; }
.ntv-price-table tr:not(:last-child) td { border-bottom: 1px solid var(--ntv-darkgreen) !important; }
.ntv-price-table small { display: block; font-size: 13px; line-height: 1.35; max-width: 130px; margin-top: 2px; }


/* All card templates: card fills the row height and its buttons sit on the bottom line, so they line up across a row */
:is(.global-card-style1, .homepage-events, .homepage-blogs, .card-style) :is(article, li.custom-post-item, [class*="col-sm-"]):has(a:is(.btn, [class*="btn-"], .color-ten, .color-purple-reverse, .color-gold, .ntv-btn)) { display: flex; flex-direction: column; }
:is(.global-card-style1, .homepage-events, .homepage-blogs, .card-style) :is(article, li.custom-post-item, [class*="col-sm-"]) :is(div, article, section):has(a:is(.btn, [class*="btn-"], .color-ten, .color-purple-reverse, .color-gold, .ntv-btn)) { display: flex; flex-direction: column; flex: 1 1 auto; min-width: 0; }
:is(.global-card-style1, .homepage-events, .homepage-blogs, .card-style) :is(article, li.custom-post-item, [class*="col-sm-"]) :is(div, p):has(> a:is(.btn, [class*="btn-"], .color-ten, .color-purple-reverse, .color-gold, .ntv-btn), > span > a:is(.btn, [class*="btn-"], .color-ten, .color-purple-reverse, .color-gold, .ntv-btn)) { flex-direction: row; flex-wrap: wrap; justify-content: flex-end; align-items: center; gap: 8px; margin-top: auto !important; }
:is(.global-card-style1, .homepage-events, .homepage-blogs, .card-style) :is(article, li.custom-post-item, [class*="col-sm-"]) img { max-width: 100%; }

/* Listing cards (education, places, events, venue hire – theme "global-card-style1"):
   equal-height cards, info block fills the card, "Learn More" sits on the bottom line */
.global-card-style1 { display: flex !important; flex-wrap: wrap; align-items: stretch !important; }
.global-card-style1 > li,
.global-card-style1 > [class*="col-sm-"] { display: flex !important; flex-direction: column; float: none; }
.global-card-style1 > li > .article,
.global-card-style1 > [class*="col-sm-"] > .article { display: flex !important; flex-direction: column; flex: 1 1 auto; width: 100%; }
.global-card-style1 .item-info { display: flex !important; flex-direction: column; flex: 1 1 auto; }
.global-card-style1 .item-continue-reading { margin-top: auto !important; padding-top: 16px; }

/* Education cards: white card with border and rounded corners (Figma card treatment 5) */
.global-card-style1 .educational-post-wrapper { background: var(--ntv-white); border: 1px solid #C9C9C0; border-radius: var(--ntv-radius); overflow: hidden; }

/* 21 Content Panel 2 rows */
.vc_row.ntv-bg-cream, .vc_row.ntv-bg-green { padding: 0; }

/* 25 Accordion – title colour fix (gold -> dark green), site-wide */
.vc_tta-accordion .vc_tta-panel-title > a,
.vc_tta-accordion .vc_tta-panel-title > a span,
.vc_tta-accordion .vc_tta-panel.vc_active .vc_tta-panel-title > a,
.vc_tta-accordion .vc_tta-panel-title > a:hover { color: var(--ntv-darkgreen) !important; }
.vc_tta-accordion .vc_tta-controls-icon::before,
.vc_tta-accordion .vc_tta-controls-icon::after { border-color: var(--ntv-darkgreen) !important; }
.ntv-accordion .vc_tta-panel { border-bottom: 1px solid var(--ntv-sage); }
.ntv-accordion .vc_tta-panel-heading { background: transparent !important; border: 0 !important; }
/* Accordion / FAQ module */
.ntv-accordion-module { margin-left: auto; margin-right: auto; margin-bottom: 48px; }
.ntv-accordion-module .ntv-accordion-heading { color: var(--ntv-darkgreen); margin: 0 0 16px; }
.ntv-accordion-module .vc_tta-panel-body p:last-child { margin-bottom: 0; }

/* 27/28A Place side panel – stacked buttons need a gap (one button per block) */
.property-page-place-details a[class*="btn-"] { display: inline-block; margin: 0 0 12px !important; }
.property-page-place-details .vc_column-inner > .wpb_wrapper > *:last-child a[class*="btn-"] { margin-bottom: 0 !important; }

/* 27/28A Place side panel – layout comes from the theme's property-page-place-details.
   Optional colour swap: add an ntv-bg- class to the box (inner row). */
.property-page-place-details[class*="ntv-bg-"] > .vc_column > .vc_column-inner,
.property-page-place-details[class*="ntv-bg-"] .vc_column-inner { background-color: transparent !important; }

/* 28B Event details strip */

/* 34 Info panel small */
.ntv-info-small article { height: 100%; }

/* 35 Partners logo grid */
.ntv-partners { padding: 48px 0; }
.ntv-logo-grid img { max-height: 90px; width: auto !important; object-fit: contain; margin: 0 auto; filter: none; }

/* 36 Important notice – used by the module library AND the place template (50px side padding, FA icon from evc_icon_with_text) */
.ntv-notice { margin-top: 0 !important; margin-bottom: 0 !important; }
.ntv-notice .ntv-notice-inner > .vc_column-inner { padding: 20px 50px 12px !important; }
.ntv-notice .wpb_text_column { margin-bottom: 8px !important; }
.ntv-notice p { margin: 0; }
.ntv-notice i, .ntv-notice .evc-iwt-icon * { color: var(--ntv-fg) !important; }
@media (max-width: 767px) { .ntv-notice .ntv-notice-inner > .vc_column-inner { padding: 20px 16px 12px !important; } }


/* ==========================================================================
   5. NTV Modules plugin elements
   ========================================================================== */

/* Full-width modules: run edge to edge from inside any row */
body { overflow-x: clip; }
.ntv-breakout { position: relative !important; width: 100vw !important; max-width: none !important; left: 50% !important; right: auto !important; margin-left: -50vw !important; margin-right: 0 !important; }
.wpb_wrapper > .ntv-breakout:last-child { margin-bottom: 0; }
/* Landing Page 1 – Introductory paragraph: centred title + intro under the full image banner */
.ntv-landing-intro { max-width: 870px; margin: 0 auto; padding: 64px 0 48px; text-align: center; }
.ntv-landing-intro .ntv-landing-intro-title { margin: 0 0 24px; text-align: center; }
.ntv-landing-intro .ntv-landing-intro-text, .ntv-landing-intro .ntv-landing-intro-text p { text-align: center; }
.ntv-landing-intro .ntv-landing-intro-text p:last-child { margin-bottom: 0; }
.ntv-landing-intro .ntv-btn-group, .ntv-btn-group.ntv-align-center { justify-content: center; }
/* Left-aligned version (Landing Page 2/3 – Introductory paragraph): lines up with the page content on the left */
.ntv-landing-intro.ntv-intro-left { margin-left: 0; margin-right: auto; text-align: left; padding-top: 40px; padding-bottom: 40px; }
.ntv-landing-intro.ntv-intro-left .ntv-landing-intro-title,
.ntv-landing-intro.ntv-intro-left .ntv-landing-intro-text,
.ntv-landing-intro.ntv-intro-left .ntv-landing-intro-text p { text-align: left; }
.ntv-landing-intro.ntv-intro-left .ntv-btn-group { justify-content: flex-start; }
@media (max-width: 767px) { .ntv-landing-intro { padding: 40px 0 32px; } .ntv-landing-intro.ntv-intro-left { padding: 32px 0 24px; } }
/* Panel background: full-width colour band behind card / listing modules */
.ntv-panel-bg { background-color: var(--ntv-bg); padding: 56px 0; margin-bottom: 48px; }
.ntv-panel-bg + .ntv-footer-gap, .wpb_wrapper > .ntv-panel-bg:last-child { margin-bottom: 0; }
.ntv-panel-bg .ntv-panel-bg-inner > :last-child { margin-bottom: 0 !important; }
.ntv-panel-bg .ntv-breakout { position: static !important; width: auto !important; left: auto !important; margin-left: 0 !important; }
.ntv-panel-bg .container .container { width: auto; max-width: none; padding-left: 0; padding-right: 0; }
@media (max-width: 767px) { .ntv-panel-bg { padding: 40px 0; } }
/* Sub-page menu: full-width bar, no gap under it */
.ntv-subpage-menu > .subpage-menus, .ntv-subpage-menu .subpage-menus { width: 100%; max-width: none; margin-bottom: 0; }
/* Line the links up with the header / breadcrumb container (same width, 15px gutters, no extra row/column offsets) */
.ntv-subpage-menu .subpage-menus > .container,
.ntv-subpage-menu .subpage-menus .container { padding-left: 15px !important; padding-right: 15px !important; margin-left: auto !important; margin-right: auto !important; }
.ntv-subpage-menu .subpage-menus .row { margin-left: 0 !important; margin-right: 0 !important; }
.ntv-subpage-menu .subpage-menus .row > [class*="col-"] { padding-left: 0 !important; }
.ntv-subpage-menu .subpage-menus ul, .ntv-subpage-menu .subpage-menus li:first-child,
.ntv-subpage-menu .subpage-menus li:first-child a { margin-left: 0 !important; padding-left: 0 !important; }

/* Title */
.ntv-uppercase { text-transform: uppercase; }

/* Single button */
.ntv-single-button { margin: 0 0 32px; }

/* Important notice */
.ntv-notice .ntv-notice-inner-wrap { padding: 20px 50px 12px; }
.ntv-notice .ntv-notice-text p { margin: 0 0 8px; }
@media (max-width: 767px) { .ntv-notice .ntv-notice-inner-wrap { padding: 16px; } }

/* Info panel (container) */
.ntv-info-panel-module { padding: 48px 0 !important; }
.ntv-info-panel-heading { margin: 0 0 32px; }
.ntv-info-grid { display: grid; gap: 24px; align-items: stretch; }
.ntv-info-grid.ntv-cols-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.ntv-info-grid.ntv-cols-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
@media (max-width: 991px) { .ntv-info-grid.ntv-cols-3 { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 767px) { .ntv-info-grid.ntv-cols-2, .ntv-info-grid.ntv-cols-3 { grid-template-columns: 1fr; } }
.ntv-info-grid > .ntv-text-card-wrap,
.ntv-info-grid > .vc_element { display: flex; flex-direction: column; }
.ntv-text-card-wrap > *, .ntv-text-card-wrap .ntv-text-card { flex: 1 1 auto; height: 100%; margin-bottom: 0 !important; }
.ntv-info-panel-module .ntv-text-card { border: 0; }
.ntv-text-card-wrap-small .card-with-border,
.ntv-text-card-wrap-small .ntv-info-small { margin-bottom: 0; }

/* Plan your visit – map fills its half, black and white */
.ntv-plan-visit-module { margin: 0 0 48px !important; }
.ntv-plan-visit-module > .wpb_column > .vc_column-inner { height: 100%; }
.ntv-plan-visit-map > .vc_column-inner { padding: 0 !important; }
.ntv-plan-visit-map .wpb_wrapper,
.ntv-plan-visit-map .wpb_gmaps_widget,
.ntv-plan-visit-map .wpb_map_wraper { height: 100%; margin: 0 !important; padding: 0 !important; background: none; }
.ntv-plan-visit-map iframe { display: block; width: 100% !important; height: 100% !important; min-height: 440px; filter: grayscale(100%); }
.ntv-offers { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0 24px; }
@media (max-width: 767px) { .ntv-offers { grid-template-columns: 1fr; } }

/* Side panel / More information box */
.ntv-side-box { margin-bottom: 24px !important; }

/* Event details strip */
.ntv-event-detail-text p { margin: 10px 0 0; font-size: 15px; }

/* Partner logos */
.ntv-partners { display: flex; flex-wrap: wrap; align-items: center; gap: 32px 48px; padding: 48px 0; }
.ntv-partners-intro { flex: 1 1 260px; max-width: 360px; }
.ntv-partners-intro h3 { margin-top: 0; }
.ntv-logo-list { flex: 2 1 480px; display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 32px; align-items: center; list-style: none; margin: 0; padding: 0; }
.ntv-logo-list li { margin: 0; text-align: center; }
.ntv-logo-list img { max-height: 90px; width: auto; max-width: 100%; object-fit: contain; }
@media (max-width: 767px) { .ntv-logo-list { grid-template-columns: repeat(2, minmax(0, 1fr)); } }

/* Listings on a colour band */
.ntv-education-listing[class*="ntv-bg-"]:not(.ntv-bg-none):not(.ntv-bg-white) { padding: 48px 0; }

/* Info Panel – small cards: content starts at the top of every card, so headings line up across a row */
.ntv-info-small article,
.ntv-info-small article > div,
.ntv-info-small .item-info,
.ntv-info-small .item-info-inner {
  align-items: flex-start !important;
  align-content: flex-start !important;
  justify-content: flex-start !important;
  vertical-align: top !important;
}
.ntv-info-small article { height: 100%; }
.ntv-info-small .item-info,
.ntv-info-small .item-title,
.ntv-info-small h4 { margin-top: 0 !important; padding-top: 0 !important; align-self: flex-start !important; }
.ntv-info-small .item-info { width: 100%; }

/* Editor-only prompt when a module still needs a setting (shown to logged-in editors only) */
.ntv-editor-note { padding: 16px 20px; border: 2px dashed #FF07B9; border-radius: 8px; font-family: monospace; font-size: 14px; }


/* ---- Fixes after first test (20 Oct) ---- */

/* Listing cards (places, education, events, venue hire): same image height, buttons on the bottom line */
.global-card-style1 > li > .article,
.global-card-style1 > [class*="col-sm-"] > .article { flex-direction: column !important; flex: 1 1 auto !important; }
.global-card-style1 .img-wrap { flex: 0 0 auto !important; width: 100%; overflow: hidden; }
.global-card-style1 .img-wrap img { display: block; width: 100% !important; height: auto !important; aspect-ratio: 16 / 10; object-fit: cover; }
.global-card-style1 .item-info { flex-direction: column !important; flex-wrap: nowrap !important; flex: 1 1 auto !important; align-items: stretch !important; justify-content: flex-start !important; }
.global-card-style1 .item-continue-reading { margin-top: auto !important; align-self: stretch !important; }

/* Small text card: border and background on the same box; fixed width when used on its own */
/* The coloured box (whichever element carries the ntv-bg- class) also carries the border;
   inner boxes lose their own border, margin and background so the two always line up */
.ntv-info-small [class*="ntv-bg-"] {
  border: 1px solid var(--ntv-khaki) !important;
  border-radius: var(--ntv-radius) !important;
  overflow: hidden;
  box-shadow: none !important;
}
.ntv-info-small [class*="ntv-bg-"] > *,
.ntv-info-small [class*="ntv-bg-"] article,
.ntv-info-small [class*="ntv-bg-"] [class*="inner"] {
  border: 0 !important;
  margin: 0 !important;
  background-color: transparent !important;
  box-shadow: none !important;
  border-radius: 0 !important;
}
.ntv-info-small [class*="ntv-bg-"] *:not(a):not(button) { border-color: transparent !important; background-color: transparent !important; }
.ntv-text-card-wrap-small { width: 100%; max-width: 380px; }
.ntv-text-card-wrap-small .ntv-single-card,
.ntv-text-card-wrap-small .ntv-single-card article,
.ntv-text-card-wrap-small .ntv-single-card li { width: 100% !important; max-width: none !important; flex: 1 1 100% !important; margin-left: 0 !important; margin-right: 0 !important; }
.ntv-info-grid > .ntv-text-card-wrap-small { max-width: none; }

/* Content panel gallery: same 870px width as the text */
.ntv-gallery-wrap { max-width: 870px; }

/* Image boxes (plugin): every tile the same size */
.ntv-image-tiles .tile-hover-opacity img { display: block; width: 100% !important; height: 100% !important; aspect-ratio: 5 / 4; object-fit: cover; }
.ntv-image-tiles .tile-hover-opacity article { overflow: hidden; }
/* Image Boxes – text tile: solid brand colour, text + button always showing, left aligned */
.ntv-image-tiles article.ntv-colour-tile img { visibility: hidden; }
.ntv-image-tiles article.ntv-colour-tile,
.ntv-image-tiles article.ntv-colour-tile h3,
.ntv-image-tiles article.ntv-colour-tile p,
.ntv-image-tiles article.ntv-colour-tile div { text-align: left !important; }
.ntv-image-tiles article.ntv-colour-tile a[class*="btn"] { margin-left: 0 !important; margin-right: auto !important; }
/* Image boxes: brand colour + centred title/text shown on hover (colour comes from the box's ntv-bg-* class) */
.ntv-image-tiles article.ntv-image-box h3,
.ntv-image-tiles article.ntv-image-box p,
.ntv-image-tiles article.ntv-image-box div { text-align: center !important; }
.ntv-image-tiles article.ntv-image-box [class*="ntv-bg-"] { background-color: var(--ntv-bg) !important; }
/* Space between the Image Boxes band and the next section */
.wpb_wrapper > .ntv-breakout.ntv-image-tiles, .wpb_wrapper > .ntv-breakout.ntv-image-tiles:last-child { margin-bottom: 56px !important; }

/* Image / text banners and panels on phones: colour the text panel only, so the image
   (which the theme places behind the module on mobile) stays visible */
@media (max-width: 991px) {
  .side-by-side-v3[class*="ntv-bg-"],
  .side-by-side[class*="ntv-bg-"],
  .ntv-image-text[class*="ntv-bg-"] {
    background-color: transparent !important;
  }
  .side-by-side-v3[class*="ntv-bg-"] > *,
  .side-by-side[class*="ntv-bg-"] > * {
    background-color: var(--ntv-bg);
  }
  .side-by-side-v3[class*="ntv-bg-"] img,
  .side-by-side[class*="ntv-bg-"] img {
    position: relative;
    z-index: 1;
    display: block;
  }
}

/* Event details strip on phones: icon, heading and text stay together; columns stack with a gap */
@media (max-width: 767px) {
  .event-more-info-wrapper > .wpb_column { margin-bottom: 24px; }
  .event-more-info-wrapper .vc_empty_space { display: none; }
}

/* Embedded form (Jotform / Beacon) */
.ntv-embed-form { max-width: 870px; margin: 0 0 48px; padding-bottom: 8px; overflow: visible !important; height: auto !important; }
.ntv-embed-form.ntv-embed-wide { max-width: none; }

/* Jotform: let Jotform's script set the iframe height (no fixed or capped height), and use its
   recommended width rule so phones (iOS Safari) don't crop the bottom of the form */
.ntv-embed-jotform iframe {
  display: block;
  width: 1px !important;
  min-width: 100% !important;
  max-width: 100% !important;
  max-height: none !important;
  border: 0;
  overflow: hidden;
}

/* Beacon: the form is drawn into the page, so stop theme styles stretching its fields and buttons */
.ntv-embed-beacon { overflow: visible !important; }
.ntv-embed-beacon *, .ntv-embed-beacon *::before, .ntv-embed-beacon *::after { box-sizing: border-box; }
.ntv-embed-beacon input, .ntv-embed-beacon select, .ntv-embed-beacon textarea, .ntv-embed-beacon button, .ntv-embed-beacon iframe { max-width: 100%; }
.ntv-embed-beacon iframe { width: 100% !important; border: 0; max-height: none !important; }

@media (max-width: 767px) {
  .ntv-embed-form { margin-bottom: 32px; padding-bottom: 16px; }
  .ntv-embed-beacon button, .ntv-embed-beacon [type="submit"] { white-space: normal; height: auto; }
}

/* Title module: centre / left alignment (overrides any theme centring) */
.ntv-title.ntv-title-left, .ntv-title.ntv-title-left h1, .ntv-title.ntv-title-left h2, .ntv-title.ntv-title-left h3,
.ntv-title.ntv-title-left [class*="header"] { text-align: left !important; margin-left: 0 !important; }
.ntv-title.ntv-title-center, .ntv-title.ntv-title-center h1, .ntv-title.ntv-title-center h2, .ntv-title.ntv-title-center h3 { text-align: center !important; }
