/* ==========================================================================
   BRAND TOKENS — defined at :root, and they must stay here.

   ⚠ THESE USED TO BE DECLARED ONLY ON `.fp-shop`, `.page-id-21960` AND
   `.page-id-21630`, WHICH BROKE THE CHECKOUT.

   `cm_shop_body_class()` adds `.fp-shop` when `is_woocommerce()` is true — and
   is_woocommerce() is FALSE on the cart and checkout pages. So on the one page
   where a customer hands over their card details, every `var(--fp-navy)` and
   `var(--fp-yellow)` referred to a property that did not exist.

   An undefined custom property does NOT simply skip the declaration. It makes
   it invalid at computed-value time, and the property falls back to `inherit`.
   For `color` that meant the country dropdown inherited white text on a white
   field: you could open the list and pick a country, and the choice you had
   made was then invisible. Reported from a real order, 28 Aug 2026.

   Defining them at :root costs nothing — the scoped copies below still win on
   specificity and carry identical values — and it means a declaration can
   never silently evaporate because a body class was absent.
   ========================================================================== */

:root {
	--fp-yellow: #fdd215;
	--fp-navy:   #12506f;
}

/* ==========================================================================
   Critical Media overrides

   Deliberately short. Everything that used to be in this file was working
   around a broken foundation, not a genuine styling need.

   THE ROOT CAUSE, for the record
   The child theme carried stale copies of Salient's css/custom.php,
   css/colors.php, css/fonts.php and header.php. get_template_part() prefers
   the child theme, so the site generated ALL of its CSS from template code
   several Salient versions behind the installed theme. The header rendered as
   'left-header' regardless of the header_format setting, which is why the menu
   sat on one side and the dropdown had nothing to anchor to.

   Removing those copies fixed it at the source. The following then became
   settings changes rather than CSS fights, and now live in
   bin/apply-db-changes.sh so they survive the cutover import:

     - header background            #ffffff  -> #70bce5
     - dropdown panel background    #1F1F1F  -> #70bce5
     - dropdown link colour                  -> #fdd215
     - navigation line-height       1px      -> 1.4
     - header-bg-opacity            1        -> 100
     - megamenu restored on Your Visit / What's On (columns-2)

   Only add to this file when a setting genuinely cannot express the change.
   ========================================================================== */

/* --------------------------------------------------------------------------
   Nested megamenu links.

   Salient offers one colour for dropdown links, and the design needs two:
   the first level ("Times & Prices", "Useful Info") in brand yellow, and the
   items nested beneath a heading ("How to find us", "Vacancies") in white at
   a smaller size. The option covers the first level; this covers the second.
   -------------------------------------------------------------------------- */
#header-outer nav > ul > li.megamenu > ul > li > ul li > a,
#header-outer nav > ul > li.megamenu > ul > li > ul li > a .menu-title-text {
	color: #ffffff;
	font-weight: 400;
}

#header-outer nav > ul > li.megamenu > ul > li > ul li > a:hover,
#header-outer nav > ul > li.megamenu > ul > li > ul li > a:hover .menu-title-text {
	color: #fdd215;
}

/* ---------------------------------------------------------------------------
   Megamenu column flow.

   Salient lays .columns-2 out as a flex row where every top-level item is 50%
   wide, so seven items wrap two-per-row:

       Times & Prices      Annual Passes
       Birthday Parties    Schools & Groups
       Food and Drink      Accommodation
       Useful Information

   The mockup wants them to FLOW down the first column and only then move to
   the second, so "Useful Information" and its children own column two:

       Times & Prices      Useful Info
       Annual Passes         How to find us
       Birthday Parties      Vacancies
       Schools & Groups      ...
       Food & Drink
       Accommodation

   CSS multi-column does exactly that. break-inside: avoid keeps a heading
   welded to its own child list instead of splitting it across the gap.
   --------------------------------------------------------------------------- */
#header-outer nav > ul > li.megamenu.columns-2 > ul.sub-menu {
	display: block !important;
	column-count: 2;
	column-gap: 44px;
}

/* Salient makes these inline-block and 50% wide. Inside a multi-column
   container they have to be full-width blocks, or they shrink to their text
   and sit side by side. */
#header-outer nav > ul > li.megamenu.columns-2 > ul.sub-menu > li {
	display: block !important;
	float: none !important;
	width: 100% !important;
	break-inside: avoid;
	-webkit-column-break-inside: avoid;
}

/* ===========================================================================
   Dropdowns that stem from the menu bar.

   Dougal, repeatedly: "when there is no background, as in, onload, the drop
   down has nowhere to stem from so just sits on the banner"; "on mouse over,
   the background of the menu appears (and not just on scroll) so that the
   drop downs have something to drop from"; "I feel it should come from the
   menu, like all pop up menus".

   Two parts: give the transparent header a background on hover, and take the
   panel off Salient's full-width track so it hangs under its own word.
   Salient positions the panel from JS, which writes inline styles — a
   stylesheet !important is the one thing that outranks those, so the widths
   and offsets below are all marked.
   =========================================================================== */

/* 1. On hover the bar fills in, so there is something for the panel to hang
      from. Deliberately translucent (0.85) rather than matching the scrolled
      bar's solid fill: the mockup's top-of-page frame shows the hero read-
      able through the band, and only the scrolled frame is solid. */
#header-outer.transparent{
	transition: background-color .25s ease;
}
/* Salient holds the transparent header down with
       body #header-outer[data-transparent-header="true"].transparent
   at !important. That is one element-selector more specific than a plain
   #header-outer.transparent:hover, so it wins the tiebreak and the bar stays
   see-through. Match its shape to outrank it. */
body #header-outer[data-transparent-header="true"].transparent:hover,
body #header-outer[data-transparent-header="true"].transparent:focus-within,
body #header-outer.transparent:hover,
body #header-outer.transparent:focus-within{
	background-color: rgba(45, 162, 218, .85) !important;
}

/* 2. The panel hangs off its own menu item rather than the whole bar. */
#header-outer nav > ul > li.megamenu{
	position: relative !important;
}

/* CENTRED on its own item, not left-aligned to it. The mockup centres the
   panel under the word: with "Your Visit" at cx 330 and "What's On" at cx 446
   (1600px viewport), a centred 520px panel spans 70..590 and 186..706, and the
   centred logo starts at 745 — so neither one reaches under it. Left-aligned
   at 620px the panel ran 275..895 and buried 150px of the logo.

   The ceiling is 598px: What's On is the rightmost megamenu, so the panel's
   right edge is 446 + W/2 and that has to stay clear of the logo at 745.
   margin-left rather than translateX because Salient animates this panel with
   jQuery .animate(), which writes inline styles; a transform is one more thing
   for that to fight over, and a negative margin is not. */
#header-outer nav > ul > li.megamenu > ul.sub-menu{
	position: absolute !important;
	top: 100% !important;          /* flush to the bar — no gap to fall through */
	left: 50% !important;
	right: auto !important;
	width: 520px !important;
	max-width: 92vw !important;
	/* Centred on the word by default. js/nav-clamp.js overrides the variable
	   when centring would push the panel under the centred logo or off the
	   side of the screen — a clamp CSS cannot express on its own. */
	margin: 0 0 0 var(--fp-panel-shift, -260px) !important;
	padding: 26px 34px 30px !important;
	border-radius: 0 0 14px 14px !important;  /* square where it meets the bar, rounded below */
	box-shadow: 0 14px 34px rgba(0, 0, 0, .18);
	z-index: 3 !important;         /* above the hover tab and the menu word */
}

/* 3. Tighter rhythm — "really loose" was the complaint about the old spacing. */
#header-outer nav > ul > li.megamenu > ul.sub-menu > li > a{
	padding: 4px 0 !important;
}
#header-outer nav > ul > li.megamenu > ul.sub-menu > li > ul > li > a{
	padding: 3px 0 !important;
}
#header-outer nav > ul > li.megamenu > ul.sub-menu > li + li{
	margin-top: 2px !important;
}

/* ===========================================================================
   Bar height and type scale.

   "reduce the height of the blue background on hover"
   "I am happy for the blue bar to go under the logo"
   "increase the text on the nav and in the drop down ... it needs to fill the
    spaces much better - currently it's a little weak"
   =========================================================================== */

/* The bar is a band across the TOP of the header rather than the full 166px,
   so the logo overhangs its bottom edge as it does in the mockup. Painting it
   as a background-size band rather than shrinking the header matters: shrinking
   on hover moves the menu word out from under the pointer, which un-hovers it,
   which grows it back — a flicker loop. Nothing moves this way.

   The panel then starts at the band's bottom edge, not the header's, so there
   is still no gap for the dropdown to fall through. One variable keeps the two
   in step. */
#header-outer{
	--fp-bar-height: 118px;
}

body #header-outer[data-transparent-header="true"].transparent:hover,
body #header-outer[data-transparent-header="true"].transparent:focus-within,
body #header-outer.transparent:hover,
body #header-outer.transparent:focus-within{
	background-color: transparent !important;
	background-image: linear-gradient(rgba(45, 162, 218, .85), rgba(45, 162, 218, .85)) !important;
	background-repeat: no-repeat !important;
	background-position: top center !important;
	background-size: 100% var(--fp-bar-height) !important;
}

/* (Superseded: the panel now hangs off var(--fp-bar-height) in BOTH states,
   because the stuck bar is a band too. See the single rule further down.) */

/* --- Type scale ---------------------------------------------------------- */
/* Was 16px/600 with a 10px line-height on the nav, and 12px/400 throughout the
   panel — far too small for the space, and the tight leading clipped
   descenders. Sizes below are taken off the mockup at its own scale. */

body #header-outer #top nav > ul > li > a,
body #header-outer #top nav > ul > li > a .menu-title-text{
	font-size: 19px !important;
	font-weight: 600 !important;
	line-height: 1.4 !important;
}

body #header-outer nav > ul > li.megamenu > ul.sub-menu > li > a,
body #header-outer nav > ul > li.megamenu > ul.sub-menu > li > a .menu-title-text{
	font-size: 20px !important;
	font-weight: 700 !important;
	line-height: 1.35 !important;
}

body #header-outer nav > ul > li.megamenu > ul.sub-menu > li > ul > li > a,
body #header-outer nav > ul > li.megamenu > ul.sub-menu > li > ul > li > a .menu-title-text{
	font-size: 16px !important;
	font-weight: 500 !important;
	line-height: 1.5 !important;
}

/* Breathing room to match the larger type. Measured off the mockup: the first
   item's text starts ~28px in from the panel edge and ~26px down from its top,
   with a slightly deeper foot. 40px of side padding was sized for the old
   620px panel and leaves the two columns too narrow at 520px. */
#header-outer nav > ul > li.megamenu > ul.sub-menu{
	padding: 26px 30px 30px !important;
}
#header-outer nav > ul > li.megamenu > ul.sub-menu > li > a{
	padding: 6px 0 !important;
}
#header-outer nav > ul > li.megamenu > ul.sub-menu > li > ul > li > a{
	padding: 5px 0 !important;
}

/* ===========================================================================
   The hover tab.

   In the mockup the hovered word sits on a solid block of the panel's own
   blue, running the full height of the bar and butting straight onto the panel
   below it, so the two read as one shape. That is the part that removed the
   "grey area about how it works": the bar can stay translucent while the tab
   and panel stay solid, and the eye follows the solid shape down.

   Sampled off the mockup to be sure: the tab pixel and the panel pixel are the
   SAME colour, rgb(72,158,212) — the tab is not a lighter highlight, it is the
   panel extended upwards. So it takes the panel's #2da2da flat, not the bar's
   translucent version.

   Drawn as a pseudo-element on the li rather than a background on the <a>,
   because the <a> is only as tall as its own line box plus padding and the tab
   has to reach the full height of the band.
   =========================================================================== */

/* (The megamenu-only tab that used to live here is now covered by the
   li.menu-item rules further down, which give every link the same block.) */

/* ===========================================================================
   Panel indent and rhythm, measured against the mockup.

   The panel's own padding was set to 30px but the text was landing 63px in.
   Enumerating every rule that matched the item found the culprit rather than
   guessing at it: Salient's header-megamenu.css puts

       #header-outer nav > ul > .megamenu > ul > li { padding: 0 0 0 30px }

   on each top-level megamenu item, which is how it separates its own flex
   columns. We lay the panel out with CSS multi-column instead, where the gutter
   is column-gap, so that 30px is pure double-indent. Zero it and the text lands
   where the panel padding says it should.
   =========================================================================== */
#header-outer nav > ul > li.megamenu > ul.sub-menu > li{
	padding-left: 0 !important;
}

/* Flush with their heading, not stepped in.
   
   This carried a 12px indent, read off the mockup. Dougal: the words are
   plainly sub-items already, so the step earns nothing and just softens the
   left edge of the column. Zeroed, so every line in the panel starts on the
   same axis as "Useful Info" above it. */
#header-outer nav > ul > li.megamenu > ul.sub-menu > li > ul{
	padding-left: 0 !important;
}
#header-outer nav > ul > li.megamenu > ul.sub-menu > li > ul > li{
	padding-left: 0 !important;
}

/* Vertical rhythm. The mockup steps ~37px between headings and ~30px between
   children (at the 1600px scale it was drawn to); we were at 41px and 34px,
   which read loose next to it. Line-height carries most of the step, so this
   is a small trim to the padding rather than a squeeze on the leading. */
#header-outer nav > ul > li.megamenu > ul.sub-menu > li > a{
	padding: 4px 0 !important;
}
#header-outer nav > ul > li.megamenu > ul.sub-menu > li > ul > li > a{
	padding: 3px 0 !important;
}

/* ===========================================================================
   ONE BAR HEIGHT, BOTH STATES.

   "I like the way the main logo bleeds out of the blue bar on mouse over on
   the main menu — can you use that same affect on the sticky menu, pushing up
   the blue bar to be in the same place as the main menu mouse over bar."

   Measured rather than guessed. At the top of the page the header is 166px,
   the band is 118px and the logo runs 28..138 — so it hangs 20px below the
   band. Scrolled, the header is 121px and the logo runs 16..106, so the same
   20px overhang puts the band at 86px. The nav text sits at 47..74 when
   scrolled, which still clears an 86px band by 12px.

   The mockup already drew it this way: in the two scrolled frames the logo
   bottom sits below the bar, exactly as it does at the top of the page.

   So --fp-bar-height simply takes a second value when the header is stuck, and
   everything that hangs off the band — the band itself, the hover tab, the
   megamenu panel and the cart dropdown — follows it without knowing which
   state it is in.
   =========================================================================== */
#header-outer.small-nav{
	--fp-bar-height: 86px;
}

/* The stuck bar becomes a band across the top rather than a full-height fill.
   Same background-size technique as the hover bar, and for the same reason:
   nothing is allowed to change the header's HEIGHT on hover or the menu word
   moves out from under the pointer and flickers. */
body #header-outer.small-nav{
	background-color: transparent !important;
	/* SOLID here, unlike the 0.85 hover bar at the top of the page. There the
	   translucency shows the hero through the band, which the mockup wants; once
	   scrolled there is only body copy behind it and it just reads as ghosting. */
	background-image: linear-gradient(#2da2da, #2da2da) !important;
	background-repeat: no-repeat !important;
	background-position: top center !important;
	background-size: 100% var(--fp-bar-height) !important;
	box-shadow: none !important;   /* the shadow drew a line at 121px, below the band */
}

/* The panel now hangs off the band in BOTH states, so the two rules collapse
   into one. (This replaces the earlier .transparent-only override.) */
#header-outer nav > ul > li.megamenu > ul.sub-menu{
	top: var(--fp-bar-height) !important;
}

/* ===========================================================================
   A hover state on every menu item, not just the ones with dropdowns.

   "can we have some kind of mouse over affect on the nav generally, so that
   those links without drop downs, look like their being used."

   The tab already existed for the two megamenus; this gives the same block to
   Home, About Us, Shop and Contact so every item acknowledges the pointer.
   Scoped to li.menu-item on purpose — that is the six real links. The Book a
   Visit button, the basket and the search icon are NOT .menu-item, so they
   keep their own treatments and never get a blue block behind them.
   =========================================================================== */
#header-outer #top nav > ul > li.menu-item::before{
	content: "";
	position: absolute;
	top: 0;
	left: 0;
	right: 0;
	height: var(--fp-bar-height);
	background-color: #489ED4;
	opacity: 0;
	transition: opacity .18s ease;
	pointer-events: none;
	z-index: 1;
}

#header-outer #top nav > ul > li.menu-item{
	position: relative;
}

#header-outer #top nav > ul > li.menu-item:hover::before,
#header-outer #top nav > ul > li.menu-item:focus-within::before,
#header-outer #top nav > ul > li.menu-item.sfHover::before{
	opacity: 1;
}

#header-outer #top nav > ul > li.menu-item > a{
	position: relative;
	z-index: 2;
}

/* The hidden mobile-only duplicate would otherwise paint a stray block. */
#header-outer #top nav > ul > li.mobShow::before{
	display: none;
}

/* ===========================================================================
   The basket dropdown, attached to the bar.

   "when I mouse over the basket icon, the drop down showing whats in my basket
   is floating in the middle of the banner and is not attached to the blue menu
   bar."

   It was pinned at top: 166px — the full height of the header — while the blue
   band stops at 118px, so it hung 48px clear of the bar with the hero showing
   through the gap. Same fix as the megamenu: start at the band's bottom edge,
   which now also means it follows the band when the header is stuck.
   =========================================================================== */
/* Only the dropdown itself. .cart-menu is the 22x22 basket ICON — moving that
   pushes the icon out of the bar and leaves it floating on the page. */
#header-outer .widget_shopping_cart{
	top: var(--fp-bar-height) !important;
	margin-top: 0 !important;
}

/* ===========================================================================
   Footer weather. See includes/weather.php for why this is not a plugin.

   Sized to fill its footer column rather than sit in the corner of it: the
   place name up top so it is obvious the forecast is FOR the farm and not the
   visitor's own location, and five days ahead instead of three.
   =========================================================================== */
.fp-weather{
	font-family: inherit;
	color: #ffffff;
	width: 100%;
	max-width: 340px;
}

.fp-weather-place{
	margin: 0 0 6px;
	font-size: 17px;
	font-weight: 700;
	line-height: 1.2;
	color: #fdd215;
}

.fp-weather .fpw-i{
	width: 30px;
	height: 30px;
	flex: 0 0 auto;
	display: block;
}

.fp-weather-now{
	display: flex;
	align-items: center;
	gap: 14px;
	margin-bottom: 16px;
}

.fp-weather-now .fpw-i{
	width: 60px;
	height: 60px;
}

.fp-weather-now-t{
	display: flex;
	flex-direction: column;
	line-height: 1.05;
}

.fp-weather-temp{
	font-size: 40px;
	font-weight: 700;
}

.fp-weather-label{
	font-size: 14px;
	opacity: .85;
}

/* Five equal cells that share whatever width the column gives them, rather
   than a fixed gap that overflows the moment a fifth day is added. */
.fp-weather-days{
	display: flex;
	justify-content: space-between;
	gap: 4px;
	margin: 0;
	padding: 12px 0 0;
	border-top: 1px solid rgba(255, 255, 255, .22);
	list-style: none;
}

.fp-weather-days li{
	flex: 1 1 0;
	min-width: 0;
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: 4px;
	margin: 0;
	padding: 0;
	list-style: none;
}

.fp-weather-dow{
	font-size: 12px;
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: .04em;
	opacity: .85;
}

.fp-weather-hi{ font-size: 15px; font-weight: 700; }
.fp-weather-lo{ font-size: 12px; opacity: .7; }

/* ===========================================================================
   Breathing room inside the dropdown hover.

   "put some padding on the left of the mouse over in the menus."

   Salient paints a background on the dropdown link itself
   (header-dropdown-background-hover-color), and every horizontal padding on
   those links had been zeroed to kill Salient's own 30px indent — so the
   highlight started exactly where the letters did and the text sat welded to
   its left edge.

   The panel's own padding drops 30 -> 18px and the links take 12px back, so
   every word lands in exactly the same place as before and only the highlight
   grows outward. Nothing shifts:

       heading   18 + 12                = 30   (unchanged)
       child     18 + 12 (ul) + 12      = 42   (unchanged)

   Right padding too, so the block is not flush on that side either, and a
   small radius so it reads as a deliberate highlight rather than a bleed.
   =========================================================================== */
#header-outer nav > ul > li.megamenu > ul.sub-menu{
	padding: 26px 18px 30px !important;
}

#header-outer nav > ul > li.megamenu > ul.sub-menu > li > a,
#header-outer nav > ul > li.megamenu > ul.sub-menu > li > ul > li > a{
	padding-left: 12px !important;
	padding-right: 12px !important;
	border-radius: 4px;
}

/* The column gutter has to grow by the same 12px the links just gained, or the
   two columns lose the gap they had. */
#header-outer nav > ul > li.megamenu.columns-2 > ul.sub-menu{
	column-gap: 32px;
}

/* ===========================================================================
   Event listings. See includes/events-list.php for why these are not a plugin.

   Date-led on purpose: only one of the 23 events has a featured image, so a
   picture grid would be mostly empty boxes. Every event has a date.
   =========================================================================== */
.fp-events{
	list-style: none;
	margin: 0;
	padding: 0;
	display: grid;
	gap: 14px;
}

.fp-events--grid{
	grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
}

.fp-events li{
	list-style: none;
	margin: 0;
	padding: 0;
}

.fp-event-link{
	display: flex;
	align-items: center;
	gap: 16px;
	padding: 14px 18px;
	background: #ffffff;
	border-radius: 12px;
	box-shadow: 0 2px 10px rgba(0, 0, 0, .10);
	text-decoration: none;
	transition: box-shadow .18s ease, transform .18s ease;
}

.fp-event-link:hover{
	box-shadow: 0 8px 22px rgba(0, 0, 0, .18);
	transform: translateY(-2px);
}

/* The date block carries the listing, so it gets the brand colour. */
.fp-event-date{
	flex: 0 0 auto;
	width: 62px;
	padding: 8px 0;
	border-radius: 10px;
	background: #2da2da;
	color: #ffffff;
	text-align: center;
	line-height: 1.05;
}

.fp-event-d{
	display: block;
	font-size: 26px;
	font-weight: 900;
}

.fp-event-m{
	display: block;
	font-size: 12px;
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: .06em;
	color: #fdd215;
}

.fp-event-img{
	flex: 0 0 auto;
	width: 64px;
	height: 64px;
	border-radius: 10px;
	background-size: cover;
	background-position: center;
}

.fp-event-body{
	display: flex;
	flex-direction: column;
	gap: 3px;
	min-width: 0;
}

.fp-event-title{
	font-size: 18px;
	font-weight: 700;
	line-height: 1.2;
	color: #12506f;
}

.fp-event-when{
	font-size: 14px;
	color: #4a6b7c;
}

/* ===========================================================================
   Three fixes from Dougal, 2026-08-19.
   =========================================================================== */

/* --- 1. The thin white line above every dropdown -------------------------
   Not a positioning gap — measured, the panel sits at exactly 86px with a gap
   of 0. It is a real border: Salient gives the sub-menu
   `border-top: 1px solid #eeeeee` from its header-separator-color setting,
   which read as a hairline between the sticky bar and the panel. */
#header-outer nav > ul > li.megamenu > ul.sub-menu,
#header-outer .widget_shopping_cart{
	border-top: 0 !important;
}

/* --- 2. Rounded bottom corners, square top ------------------------------
   Square where the panel meets the bar so the two still read as one shape,
   rounded where it ends. The basket dropdown gets the same treatment. */
#header-outer .widget_shopping_cart{
	border-radius: 0 0 14px 14px !important;
	overflow: hidden;   /* so a child background cannot square the corners off */
}

/* --- 3. A dark glow on the nav when there is no bar behind it -------------
   "as there is a busy video behind, the white letters can go missing."

   Only while the header is transparent AND unhovered — which is exactly the
   state with no blue band. The moment the bar fills on hover, or the header
   sticks (.small-nav is not .transparent, so it is excluded automatically),
   the glow goes and the letters sit on flat colour as designed.

   Deliberately a soft halo rather than a hard drop shadow: it lifts the text
   off the video without reading as a shadow in its own right. Icons take the
   same treatment through a filter, since text-shadow does nothing to an SVG.  */
body #header-outer[data-transparent-header="true"].transparent:not(:hover):not(:focus-within) #top nav > ul > li > a,
body #header-outer[data-transparent-header="true"].transparent:not(:hover):not(:focus-within) #top nav > ul > li > a .menu-title-text,
body #header-outer.transparent:not(:hover):not(:focus-within) #top nav > ul > li > a,
body #header-outer.transparent:not(:hover):not(:focus-within) #top nav > ul > li > a .menu-title-text{
	text-shadow:
		0 0 14px rgba(0, 0, 0, .55),
		0 0 5px rgba(0, 0, 0, .45),
		0 1px 2px rgba(0, 0, 0, .35);
	transition: text-shadow .25s ease;
}

/* The basket and search are icons, not text. */
body #header-outer.transparent:not(:hover):not(:focus-within) #top .cart-menu-wrap,
body #header-outer.transparent:not(:hover):not(:focus-within) #top #search-btn{
	filter:
		drop-shadow(0 0 8px rgba(0, 0, 0, .55))
		drop-shadow(0 1px 2px rgba(0, 0, 0, .4));
	transition: filter .25s ease;
}

/* The yellow Book a Visit button already sits on its own solid colour, so it
   is left alone — a glow on it would just look like a printing error. */

/* ===========================================================================
   Contact form. Rebuilt in CF7 from the recovered Forminator definition —
   see includes/forminator-bridge.php.

   It sits on the green panel, where Salient's default field styling is a
   transparent box with a faint border: on that background the inputs were
   effectively invisible. These give the fields a solid surface of their own.
   =========================================================================== */
.fp-cf7{
	max-width: 560px;
}

.fp-cf7-row{
	margin: 0 0 16px;
}

.fp-cf7 label,
.fp-cf7-legend{
	display: block;
	margin-bottom: 6px;
	font-weight: 700;
	color: #ffffff;
}

.fp-cf7 .fp-req{
	color: #fdd215;
}

.fp-cf7 input[type="text"],
.fp-cf7 input[type="email"],
.fp-cf7 input[type="tel"],
.fp-cf7 textarea{
	width: 100% !important;
	max-width: 100% !important;
	padding: 12px 14px !important;
	background: #ffffff !important;
	border: 2px solid rgba(0, 0, 0, .08) !important;
	border-radius: 8px !important;
	color: #12506f !important;
	font-size: 16px !important;
	box-shadow: none !important;
	transition: border-color .15s ease;
}

.fp-cf7 input[type="text"]:focus,
.fp-cf7 input[type="email"]:focus,
.fp-cf7 input[type="tel"]:focus,
.fp-cf7 textarea:focus{
	border-color: #fdd215 !important;
	outline: none !important;
}

.fp-cf7 textarea{
	min-height: 150px;
	resize: vertical;
}

/* The six enquiry options. Salient hides the native box and draws its own,
   which does not survive on this background, so they are shown plainly and
   laid out as a wrapping two-column list rather than a ragged run-on line. */
.fp-cf7 .wpcf7-checkbox{
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
	gap: 6px 18px;
}

.fp-cf7 .wpcf7-list-item{
	margin: 0 !important;
}

.fp-cf7 .wpcf7-list-item label{
	display: flex;
	align-items: flex-start;
	gap: 9px;
	margin: 0;
	font-weight: 400;
	cursor: pointer;
}

.fp-cf7 input[type="checkbox"]{
	appearance: auto !important;
	-webkit-appearance: checkbox !important;
	opacity: 1 !important;
	position: static !important;
	width: 18px !important;
	height: 18px !important;
	margin: 2px 0 0 !important;
	accent-color: #fdd215;
	flex: 0 0 auto;
}

.fp-cf7-consent .wpcf7-list-item label{
	font-weight: 400;
}

.fp-cf7-consent{
	line-height: 1.45;
}

/* Brand submit button. */
.fp-cf7 input[type="submit"]{
	padding: 14px 34px !important;
	background: #fdd215 !important;
	border: 0 !important;
	border-radius: 8px !important;
	color: #12506f !important;
	font-size: 17px !important;
	font-weight: 700 !important;
	cursor: pointer;
	transition: transform .15s ease, box-shadow .15s ease;
}

.fp-cf7 input[type="submit"]:hover{
	transform: translateY(-2px);
	box-shadow: 0 6px 18px rgba(0, 0, 0, .22);
}

.fp-cf7 .wpcf7-not-valid-tip{
	color: #ffe9a8;
	font-size: 14px;
}

.fp-cf7 .wpcf7-response-output{
	margin: 14px 0 0 !important;
	padding: 12px 16px !important;
	border-radius: 8px;
	border-width: 2px !important;
	color: #ffffff;
}

/* ===========================================================================
   The animal / attractions banner slider.
   See includes/animal-slider.php for what it replaces and why.

   The photo is the point. Where the old plugin dropped a solid yellow panel
   across the middle of the picture, the caption here is a band along the
   bottom over a gradient, so the animals stay visible behind it.
   =========================================================================== */
.fp-animalslider{
	position: relative;
	overflow: hidden;
	border-radius: 14px;
	background: #eef4f7;
}

/* scroll-snap does the carousel; the JS only adds arrows and dots. */
.fp-animalslider-track{
	display: flex;
	overflow-x: auto;
	scroll-snap-type: x mandatory;
	scroll-behavior: smooth;
	scrollbar-width: none;
	-ms-overflow-style: none;
}

.fp-animalslider-track::-webkit-scrollbar{
	display: none;
}

.fp-animalslider-slide{
	position: relative;
	flex: 0 0 100%;
	scroll-snap-align: start;
	display: block;
	text-decoration: none;
	color: inherit;
}

/* The slide shape comes from the artwork, via --fp-slide-ratio set in
   animal-slider.php. See the long note there: the "Website Square Images" set
   carries a flat brand-yellow band across its top 42% — where the OLD plugin
   printed its title — so those are cropped to the 58% that is photograph and
   anchored to the bottom. The animal photographs have no band and keep their
   own proportions.

   NOTE THE SELECTOR. Salient's `.row .col img { height: auto }` carries two
   classes and an element, so it beat a plain `.fp-animalslider-img` and the
   height here never applied — the image rendered at its natural size, yellow
   band and all. This is the same specificity trap as the megamenu padding and
   the transparent header; enumerate what matches before trusting a rule. */
.fp-animalslider .fp-animalslider-img{
	display: block;
	width: 100%;
	height: auto;
	aspect-ratio: var(--fp-slide-ratio, 1920 / 742);
	object-fit: cover;
}

.fp-animalslider.is-banded .fp-animalslider-img{
	/* Crop from the top: the photograph is the bottom of the file. */
	object-position: center bottom;
}

/* With a shape of its own the slider no longer fills a stretched equal-height
   column, so centre it rather than leaving it stranded at the top. */
.vc_column-inner:has(> .wpb_wrapper > .fp-animalslider){
	align-items: center;
}

.fp-animalslider-cap{
	position: absolute;
	left: 0;
	right: 0;
	bottom: 0;
	display: block;
	padding: 44px 28px 20px;
	/* The gradient is what keeps the picture readable instead of a solid panel. */
	background: linear-gradient(to top, rgba(0, 0, 0, .78) 0%, rgba(0, 0, 0, .55) 45%, rgba(0, 0, 0, 0) 100%);
	pointer-events: none;
}

.fp-animalslider-title{
	display: block;
	font-size: clamp(22px, 2.4vw, 34px);
	font-weight: 900;
	line-height: 1.1;
	letter-spacing: -.01em;
	color: var(--fp-cap-accent, #fdd215);
	text-shadow: 0 2px 10px rgba(0, 0, 0, .5);
}

.fp-animalslider-text{
	display: block;
	margin-top: 5px;
	font-size: clamp(14px, 1.15vw, 17px);
	line-height: 1.35;
	color: var(--fp-cap-color, #ffffff);
	text-shadow: 0 1px 6px rgba(0, 0, 0, .55);
}

/* A link should say so. */
.fp-animalslider-slide[href] .fp-animalslider-img{
	transition: transform .5s ease;
}

.fp-animalslider-slide[href]:hover .fp-animalslider-img{
	transform: scale(1.03);
}

/* --- arrows --- */
.fp-animalslider-nav{
	position: absolute;
	top: 50%;
	transform: translateY(-50%);
	width: 46px;
	height: 46px;
	padding: 0;
	display: flex;
	align-items: center;
	justify-content: center;
	border: 0;
	border-radius: 50%;
	background: rgba(255, 255, 255, .92);
	color: #12506f;
	cursor: pointer;
	box-shadow: 0 3px 14px rgba(0, 0, 0, .28);
	transition: background .15s ease, transform .15s ease;
	z-index: 2;
}

.fp-animalslider-nav:hover{
	background: #fdd215;
	transform: translateY(-50%) scale(1.06);
}

.fp-animalslider-nav svg{
	width: 22px;
	height: 22px;
}

.fp-animalslider-prev{ left: 14px; }
.fp-animalslider-next{ right: 14px; }

/* --- dots --- */
.fp-animalslider-dots{
	position: absolute;
	left: 0;
	right: 0;
	bottom: 12px;
	display: flex;
	justify-content: center;
	gap: 8px;
	z-index: 2;
}

.fp-animalslider-dot{
	width: 9px;
	height: 9px;
	padding: 0;
	border: 0;
	border-radius: 50%;
	background: rgba(255, 255, 255, .55);
	cursor: pointer;
	transition: background .15s ease, transform .15s ease;
}

.fp-animalslider-dot.is-active{
	background: #fdd215;
	transform: scale(1.35);
}

.fp-animalslider.is-single .fp-animalslider-nav,
.fp-animalslider.is-single .fp-animalslider-dots{
	display: none;
}

@media (max-width: 690px){
	.fp-animalslider-cap{ padding: 34px 18px 26px; }
	.fp-animalslider-nav{ width: 38px; height: 38px; }
}

/* ===========================================================================
   Accordion and image toggle. See includes/cq-shortcodes.php.
   Both are <details>/<summary>, so the open/close behaviour is the browser's.
   =========================================================================== */
.fp-accordion{
	max-width: 900px;
}

.fp-accordion-item{
	border: 1px solid rgba(0, 0, 0, .10);
	border-radius: 10px;
	background: #ffffff;
	margin-bottom: 10px;
	overflow: hidden;
}

.fp-accordion-summary{
	display: flex;
	align-items: center;
	gap: 10px;
	padding: 14px 18px;
	font-size: 17px;
	font-weight: 700;
	color: #12506f;
	cursor: pointer;
	list-style: none;
	transition: background .15s ease;
}

.fp-accordion-summary::-webkit-details-marker{ display: none; }

.fp-accordion-summary:before{
	content: "";
	flex: 0 0 auto;
	width: 9px;
	height: 9px;
	border-right: 2.5px solid #2da2da;
	border-bottom: 2.5px solid #2da2da;
	transform: rotate(-45deg);
	transition: transform .2s ease;
}

.fp-accordion-item[open] > .fp-accordion-summary:before{
	transform: rotate(45deg);
}

.fp-accordion-summary:hover{
	background: #f2f8fb;
}

.fp-accordion-body{
	padding: 0 18px 16px 37px;
	color: #333333;
	line-height: 1.6;
}

/* --- image toggle: the "Explore the Park" panels ------------------------
   Dougal: "two white boxes that look horrible ... a heap of clickable bullet
   points ... really they're a mess (crashing into each other too) - get rid of
   the white, make more of the headlines and lay them out better."

   Everything wrong with them, measured:
     - the two cards sat at 78..700 and 700..1322 — touching exactly, no gutter
     - the links were #fdd215 yellow on white: 1.46:1, effectively unreadable
     - 17 links in one centred column, so one card ran three times the height
       of its neighbour with a sea of empty space beside it
     - blank list items left holes in the middle of the list

   Now brand yellow instead of white (navy on #fdd215 is 6.0:1), the heading
   given real weight, and the links laid out as a wrapping grid of chips rather
   than a single tall column — which is also what stops the two cards being
   wildly different heights. */
.fp-imagetoggle{
	margin: 0 12px 24px;
	border-radius: 16px;
	background: #fdd215;
	box-shadow: 0 6px 20px rgba(0, 0, 0, .16);
	overflow: hidden;
}

/* Icon on top, centred, with the title beneath it — the side-by-side version
   left the badge and a short word like "Attractions" stranded at opposite ends
   of a 600px card. Stacked, both are the same optical size and the card reads
   as one unit. */
.fp-imagetoggle-head{
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: 12px;
	padding: 26px 24px 6px;
	cursor: pointer;
	list-style: none;
	text-align: center;
}

.fp-imagetoggle-head::-webkit-details-marker{ display: none; }

.fp-imagetoggle .fp-imagetoggle-img{
	width: 116px !important;
	height: 116px !important;
	max-width: 116px !important;
	flex: 0 0 auto;
	border-radius: 50%;
	object-fit: contain;
	background: rgba(255, 255, 255, .6);
	padding: 10px;
}

.fp-imagetoggle-title{
	display: block;
	font-size: clamp(28px, 2.8vw, 40px);
	font-weight: 900;
	line-height: 1.05;
	color: #12506f;
}

.fp-imagetoggle-body{
	padding: 0 24px 26px;
	line-height: 1.5;
	text-align: left;
}

/* The "Find more about our attractions by clicking on them!" line sits under
   the centred header, so it is centred too — and given room to breathe. */
.fp-imagetoggle-body h3{
	margin: 4px 0 20px;
	font-size: 19px;
	font-weight: 700;
	line-height: 1.3;
	color: #12506f;
	text-align: center;
}

/* The links become a wrapping grid of chips. White on the yellow so each one
   reads as a target, navy text at 8.7:1. */
/* !important, and enumerated rather than assumed: the LEFT column carries
   Salient's `centered-text` class, so responsive.css sets
   `.col.centered-text ul { display: block !important }` — which beat a plain
   `display: grid` and left seventeen chips stacked in one narrow column beside
   an empty half-card, while the right-hand list (no `centered-text`) gridded
   correctly. Same reason for the text-align. */
.fp-imagetoggle-body ul{
	display: grid !important;
	grid-template-columns: repeat(auto-fill, minmax(178px, 1fr));
	gap: 8px;
	margin: 0;
	padding: 0;
	list-style: none !important;
	text-align: left !important;
}

.fp-imagetoggle-body li{
	margin: 0;
	padding: 0;
	list-style: none !important;
}

/* Several list items are empty — they were leaving holes mid-list. */
.fp-imagetoggle-body li:empty{
	display: none;
}

/* The chip is the LI, not the link. Several activities have no page of their
   own — "Goat Feeding", "Meet the Babies" and others are plain <strong> with no
   <a> — so styling only the anchor gave half the list a white plate and left
   the rest as bare text floating on the yellow. */
.fp-imagetoggle-body li{
	display: flex;
	border-radius: 10px;
	background: #ffffff;
	transition: background .15s ease, transform .15s ease;
}

.fp-imagetoggle-body li a,
.fp-imagetoggle-body li > strong,
.fp-imagetoggle-body li > b{
	display: flex;
	align-items: center;
	width: 100%;
	padding: 11px 15px;
	color: #12506f !important;
	font-size: 16px;
	font-weight: 700;
	line-height: 1.3;
	text-decoration: none !important;
}

/* Only the ones that actually go somewhere behave like buttons. */
.fp-imagetoggle-body li:has(a):hover{
	background: #12506f;
	transform: translateY(-2px);
}

.fp-imagetoggle-body li:has(a):hover a,
.fp-imagetoggle-body li:has(a):hover a b,
.fp-imagetoggle-body li:has(a):hover a strong{
	color: #ffffff !important;
}

/* Not a link: a quieter plate, so it does not promise a click it cannot keep. */
.fp-imagetoggle-body li:not(:has(a)){
	background: rgba(255, 255, 255, .55);
}

/* The bold/strong tags inside the links carry their own colour on this site. */
.fp-imagetoggle-body li a b,
.fp-imagetoggle-body li a strong{
	color: inherit !important;
	font-weight: 700;
}


/* ===========================================================================
   Carousel item fallback — see vc_templates/item.php.

   Matches how the Useful Information page already presents these same six
   destinations: the title above, then the purpose-made "Website Tile" image.
   No white card — Dougal, on the old version: "it also uses white which again
   jars with the rest of the site". The tiles ARE the design; they just were
   never wired up here.
   =========================================================================== */
.fp-carditem{
	display: block;
	height: 100%;
}

.fp-carditem-title{
	display: block;
	margin-bottom: 12px;
	font-size: clamp(19px, 1.7vw, 25px);
	font-weight: 900;
	line-height: 1.15;
	color: #ffffff;
	text-shadow: 0 2px 8px rgba(0, 0, 0, .22);
}

.fp-carditem-media{
	display: block;
	overflow: hidden;
	border-radius: 16px;
	/* No shadow: the card frame already carries one, and a second inside it
	   made the tile look like it was floating off the plate. */
	background: rgba(255, 255, 255, .16);
}

.fp-carditem .fp-carditem-img{
	display: block;
	width: 100% !important;
	height: auto !important;
	max-width: none !important;
	transition: transform .45s ease;
}

.cell:hover .fp-carditem-img{
	transform: scale(1.04);
}

/* Nothing to show: keep a readable plate rather than a bare word on green. */
.fp-carditem--noimg{
	padding: 22px 24px;
	border-radius: 16px;
	background: #fdd215;
	box-shadow: 0 6px 20px rgba(0, 0, 0, .18);
}

.fp-carditem--noimg .fp-carditem-title{
	margin: 0;
	color: #12506f;          /* 6.0:1 on the brand yellow */
	text-shadow: none;
}


/* ===========================================================================
   Terms & Conditions. See includes/terms.php.
   A 32-page legal document, so this is built for FINDING things: a sticky
   contents list, numbered anchors, and generous measure.
   =========================================================================== */
.fp-tc{
	display: grid;
	grid-template-columns: 270px minmax(0, 1fr);
	gap: 48px;
	align-items: start;
	max-width: 1180px;
	margin: 0 auto;
	padding: 32px 38px 44px;
	/* Not white — "too harsh and not used anywhere else on the site". A soft
	   tint of the brand yellow instead: navy on #fdf3cf is 7.9:1, better than
	   the white it replaces (8.7:1 is barely different to read) and it belongs
	   to the palette. Full #fdd215 across 32 pages of legal text would be
	   punishing to read, so the saturated yellow is kept for the header rule
	   and the accents. */
	background: #fdf3cf;
	border-radius: 14px;
	box-shadow: 0 4px 26px rgba(0, 0, 0, .14);
	color: #2b3a42;
	line-height: 1.65;
}

/* Every section is a direct child of .fp-tc otherwise, so the 2-column grid
   dealt them alternately left/right like newspaper columns. The body needs to
   be ONE grid item. */
.fp-tc-body{
	grid-column: 2;
	min-width: 0;
}

.fp-tc-head{
	grid-column: 1 / -1;
	padding-bottom: 22px;
	border-bottom: 3px solid #fdd215;
	margin-bottom: 8px;
}

.fp-tc-title{
	margin: 0 0 6px;
	font-size: clamp(30px, 4vw, 46px);
	line-height: 1.05;
	color: #12506f;
}

.fp-tc-meta{
	margin: 0 0 16px;
	font-size: 15px;
	color: #5d7079;
}

.fp-tc-downloads{
	display: flex;
	flex-wrap: wrap;
	gap: 10px;
	margin: 0;
}

.fp-tc-dl{
	display: inline-block;
	padding: 11px 20px;
	border-radius: 8px;
	background: #fdd215;
	color: #12506f !important;
	font-weight: 700;
	font-size: 15px;
	text-decoration: none !important;
	transition: transform .15s ease, box-shadow .15s ease;
}

.fp-tc-dl:hover{
	transform: translateY(-2px);
	box-shadow: 0 6px 16px rgba(0, 0, 0, .18);
}

.fp-tc-dl-alt{
	background: #fff6d4;
}

/* --- contents --- */
.fp-tc-toc{
	position: sticky;
	top: 150px;               /* clears the 118px header band */
	max-height: calc(100vh - 190px);
	overflow-y: auto;
	padding-right: 6px;
	font-size: 14px;
}

.fp-tc-toc-h{
	margin: 0 0 10px;
	font-size: 15px;
	text-transform: uppercase;
	letter-spacing: .06em;
	color: #5d7079;
}

.fp-tc-toc-list{
	list-style: none;
	margin: 0;
	padding: 0;
	counter-reset: none;
}

.fp-tc-toc-list li{
	margin: 0 0 2px;
	list-style: none;
}

.fp-tc-toc-list a{
	display: grid;
	grid-template-columns: 26px 1fr;
	gap: 6px;
	padding: 5px 8px;
	border-radius: 6px;
	color: #12506f !important;
	text-decoration: none !important;
	line-height: 1.35;
	transition: background .12s ease;
}

.fp-tc-toc-list a:hover{
	background: #fbe9a8;
}

.fp-tc-toc-n{
	color: #7d9aa8;
	font-variant-numeric: tabular-nums;
}

/* --- body --- */
.fp-tc-section{
	scroll-margin-top: 150px;   /* so an anchor does not land under the header */
	padding-bottom: 6px;
}

.fp-tc-h2{
	display: grid;
	grid-template-columns: 44px 1fr;
	align-items: baseline;
	gap: 4px;
	margin: 34px 0 12px;
	padding-top: 18px;
	border-top: 1px solid #e2ebef;
	font-size: clamp(20px, 2.2vw, 27px);
	line-height: 1.2;
	color: #12506f;
}

.fp-tc-num{
	color: #2da2da;
	font-variant-numeric: tabular-nums;
}

.fp-tc-sub{
	margin: 22px 0 8px;
	font-size: 18px;
	color: #12506f;
}

.fp-tc p{
	margin: 0 0 13px;
}

/* Salient resets list-style on lists inside content, which stripped the
   numbering off a numbered legal document — the points still have to be
   citable as "19.4". */
.fp-tc-list{
	margin: 0 0 16px;
	padding-left: 30px;
	list-style: decimal outside !important;
}

.fp-tc-list li{
	margin-bottom: 8px;
	padding-left: 4px;
	list-style: decimal outside !important;
}

/* A warm off-white against the cream rather than the cool blue tint it started
   as — on #fdf3cf that read as a different design system. The brand blue stays
   as the rule down the side. */
.fp-tc-defs{
	margin: 0 0 18px;
	padding: 18px 22px;
	background: #fffdf3;
	border-left: 4px solid #2da2da;
	border-radius: 0 8px 8px 0;
}

.fp-tc-defs dt{
	margin-top: 12px;
	font-weight: 700;
	color: #12506f;
}

.fp-tc-defs dt:first-child{
	margin-top: 0;
}

.fp-tc-defs dd{
	margin: 2px 0 0;
}

@media (max-width: 900px){
	.fp-tc{
		grid-template-columns: 1fr;
		gap: 24px;
		padding: 22px 20px 30px;
	}
	.fp-tc-body{ grid-column: 1; }
	.fp-tc-toc{
		position: static;
		max-height: none;
		padding: 16px 18px;
		background: #f4f9fb;
		border-radius: 10px;
	}
}

/* The clause numbers are in the MARKUP, not a CSS counter — the source restarts
   and skips numbers in places, and a clause has to keep the number it was
   signed off with. So the list itself carries no marker. */
.fp-tc-list,
.fp-tc-list li{
	list-style: none !important;
}

.fp-tc-list{
	margin: 0 0 16px;
	padding-left: 0;
}

.fp-tc-list li{
	display: grid;
	grid-template-columns: 34px minmax(0, 1fr);
	gap: 4px;
	margin-bottom: 9px;
	padding-left: 0;
}

.fp-tc-li-n{
	color: #2da2da;
	font-weight: 700;
	font-variant-numeric: tabular-nums;
}

/* ===========================================================================
   Nav adjustments, 2026-08-19.
   =========================================================================== */

/* --- 1. Home's hover tab had no left padding -----------------------------
   Measured rather than guessed: every nav link carries `margin: 0 15px`, so the
   word sits 15px inside its own box and the tab has even padding either side.
   Salient gives the FIRST item `margin: 0 15px 0 0` — no left margin — so
   Home's text sat flush against the left edge of its tab while every other item
   had a gap. Restore the missing 15px. */
#header-outer #top nav > ul > li.menu-item:first-child > a{
	margin-left: 15px !important;
}

/* --- 2. Bigger logo, only where there is no blue behind it ----------------
   "our navigation logo - the one shown without the blue background - is too
   small - needs to be at least 30% bigger - no need to change it anywhere
   else."

   110px -> 143px, exactly 30%. Scoped to .transparent, so the stuck header's
   90px logo is untouched. It still fits: the header is 166px tall, so a 143px
   logo centres at roughly 11..154 and simply overhangs the 118px band further,
   which is the effect Dougal already liked. */
/* Grown with a TRANSFORM, not by changing the height. Setting height:143px on
   the image made #logo 143px tall too, which pushed the whole header from 166px
   to 199px — and every measurement that hangs off it (the 118px band, the panel
   top, the tab) is calibrated to 166. A scale leaves the layout box at 110px
   and paints the logo 30% larger over it, so nothing else moves. #logo already
   has overflow:visible, so it is free to spill. */
body #header-outer.transparent #logo img,
body #header-outer[data-transparent-header="true"].transparent #logo img{
	/* 1.3 -> 1.56, i.e. another 20% on what was already there. Painted size
	   goes 179x143 to 215x172; the layout box stays 110px, so the header is
	   still 166px and nothing calibrated to it moves.
	   The .transparent state only — the sticky logo carries no transform at
	   all and is deliberately left alone. */
	/* translateY nudges it clear of the viewport's top edge: at 1.56 the logo
	   spilled above y=0 and the circle was clipped flat. 7px because the
	   breakpoint at 1280 gives the header 176px and scales the logo with it,
	   so 4px cleared 1920/1440 and still cut 1280 by 2. Transforms apply right
	   to left, so this scales first and then moves it down by a true 7px rather
	   than a scaled one. The bottom overhang is unaffected. */
	transform: translateY(7px) scale(1.56);
	transform-origin: center center;
}

/* Below 1200 the logo and the nav words run out of room. Measured at 1100:
   the two collide at EVERY scale, including the original 1.3 — the gap to
   "What's On" is already -17px there — so this is a pre-existing squeeze at
   that width, not something the enlargement introduced. It is left for Dougal
   to judge separately.
   
   What this does do is avoid making it worse: from 1199 down the logo returns
   to the size it was before today. Verified clear at 1200 and above, where
   1.56 leaves 11px to the left menu and 23px to the right. */
@media only screen and (max-width: 1199px) {
	body #header-outer.transparent #logo img,
	body #header-outer[data-transparent-header="true"].transparent #logo img{
		transform: translateY(4px) scale(1.3);
	}
}

/* --- 3. Bigger nav words, sitting closer to the logo ----------------------
   "slightly bigger and closer to the logo, not closer to the edges of the site."

   19 -> 21px, and both groups move inward. The left menu is left-anchored, so
   padding-left walks it toward the centre. The right group is RIGHT-anchored
   and ends with the Book a Visit button, basket and search, which should stay
   where they are — so rather than move the group, the button gets a left
   margin. The ul grows leftward from its fixed right edge, which carries Shop
   and Contact toward the logo and leaves the icons alone. */
body #header-outer #top nav > ul > li > a,
body #header-outer #top nav > ul > li > a .menu-title-text{
	font-size: 21px !important;
}

/* The shift has to be RESPONSIVE. Measured across widths: the 30% bigger logo
   eats ~20px either side, the 21px type widens both groups, and the inward
   shift closes the rest — together they overlapped the logo at every width
   below 1600px (at 1440 the gap was -4px, at 1200 it was -68px). So the full
   shift only applies where there is genuinely room for it, halves in the
   middle, and disappears on smaller laptops where the nav already fills the
   bar. !important on the right-hand one because Salient sets `margin: 0 14px`
   at a higher specificity — without it the group moved 12px, not 125. */
@media (min-width: 1600px){
	#header-outer #top nav > ul#menu-main-left-1{
		padding-left: 90px;
	}
	#header-outer #top nav > ul > li.nectar-header-text-content-wrap{
		margin-left: 125px !important;
	}
}

@media (min-width: 1400px) and (max-width: 1599px){
	#header-outer #top nav > ul#menu-main-left-1{
		padding-left: 45px;
	}
	#header-outer #top nav > ul > li.nectar-header-text-content-wrap{
		margin-left: 62px !important;
	}
}

/* A list item that is neither a link nor a bolded activity is a footnote, not
   an item — the Activities list ends with "*Activities change with seasons...".
   It was inheriting the page's white text on a pale chip with no padding, which
   made it both unreadable and pretending to be a button. Span the full grid,
   drop the plate, and set it as the aside it is. */
.fp-imagetoggle-body li:not(:has(a)):not(:has(strong)):not(:has(b)){
	grid-column: 1 / -1;
	display: block;
	background: none;
	padding: 4px 2px 0;
	color: #12506f;
	font-size: 14px;
	font-style: italic;
	line-height: 1.45;
}

/* ===========================================================================
   The Privacy page, given the same treatment as Terms.

   Its content is 20KB of WPBakery in a single text block and lives in the
   database, so it is dressed from the outside via the fp-legal-page body class
   rather than rebuilt — see includes/legal-pages.php.
   =========================================================================== */
.fp-legal-page .main-content .wpb_text_column{
	max-width: 1180px;
	margin: 0 auto;
	padding: 34px 40px 44px;
	background: #fdf3cf;
	border-radius: 14px;
	box-shadow: 0 4px 26px rgba(0, 0, 0, .14);
	color: #2b3a42;
	line-height: 1.65;
}

/* The Terms page renders through [fp_terms] and brings its own panel, so it
   must not get a second one wrapped around it. */
.fp-legal-page .main-content .wpb_text_column:has(.fp-tc){
	max-width: none;
	padding: 0;
	background: none;
	border-radius: 0;
	box-shadow: none;
}

.fp-legal-page .main-content .wpb_text_column h1,
.fp-legal-page .main-content .wpb_text_column h2,
.fp-legal-page .main-content .wpb_text_column h3,
.fp-legal-page .main-content .wpb_text_column h4{
	color: #12506f;
}

.fp-legal-page .main-content .wpb_text_column h2{
	margin-top: 30px;
	padding-top: 18px;
	border-top: 1px solid rgba(18, 80, 111, .16);
}

.fp-legal-page .main-content .wpb_text_column a{
	color: #12506f;
	text-decoration: underline;
}

.fp-legal-page .main-content .wpb_text_column ul,
.fp-legal-page .main-content .wpb_text_column ol{
	padding-left: 26px;
	margin-bottom: 16px;
}

.fp-legal-page .main-content .wpb_text_column li{
	margin-bottom: 7px;
	list-style: inherit;
}

/* ===========================================================================
   Leading on headings that wrap.

   Dougal: "the leading crashes the titles - see grab - can we add more space so
   that if a title goes over two lines, it doesn't crash into itself."

   THE ROOT CAUSE, and it is not one thing.
   Salient sets its heading leading in FIXED PIXELS, sized for its own default
   font-sizes — `h3 { font-size: 22px; line-height: 34px }`. WPBakery then sets
   font-size INLINE on every heading and leaves line-height alone. So an h3
   rendered at 42px keeps the 34px leading meant for 22px type: ratio 0.81, and
   the two lines physically overlap. Measured across the site, the worst was
   0.59 (75px type on 44px leading).

   A blanket `h1..h6 { line-height: 1.15 }` would be wrong — where Salient's
   fixed value is generous relative to the font-size (22px/34px = 1.55) it would
   TIGHTEN it. So this is scoped to the elements WPBakery sizes inline.

   No !important on purpose: an inline line-height still wins, which is what the
   headings fixed at source by apply-db-changes.sh step 17 carry.
   =========================================================================== */
.vc_custom_heading{
	line-height: 1.15;
}

/* Shop loop titles: 36px type on 23px leading, ratio 0.64. Both the product and
   the CATEGORY title class — the shop landing page uses the category one, which
   is what the sweep actually caught. */
.woocommerce ul.products li.product .woocommerce-loop-product__title,
.woocommerce-loop-product__title,
.woocommerce-loop-category__title{
	line-height: 1.25 !important;
}

/* Button labels, not headings — but they wrap and crash the same way. Salient
   gives .nectar-button a fixed 20px leading while the label renders at 24px
   (ratio 0.83), so a three-line button label overlaps itself. */
.nectar-button,
.nectar-button span{
	line-height: 1.3 !important;
}

/* Slider Revolution hero text. SR7 writes line-height inline in PIXELS equal to
   the font size — 180px type on 180px leading, ratio 1.00 — so a hero that wraps
   has the descenders of line one sitting on the capitals of line two. That is
   the case in Dougal's screenshot.

   1.1 rather than the 1.15 used elsewhere: these are 120-180px display sizes
   where a little leading goes a long way, and SR positions layers absolutely, so
   the smaller the change the less it disturbs a designed layout. !important is
   unavoidable — SR sets it inline. */
#header-outer ~ * sr7-txt,
sr7-txt.sr7-layer,
h1.sr7-layer,
h2.sr7-layer,
a.sr7-layer{
	line-height: 1.1 !important;
}

/* The tabbed-section headings on the map attraction pages: 48px type on 48px
   leading, wrapping to three lines. Last one caught by the sweep. */
h2.tab-nav-heading,
h2.tab-nav-heading a,
h2.tab-nav-heading span{
	line-height: 1.15 !important;
}

/* ===========================================================================
   Testimonials and rating badges — see includes/reviews.php.

   Cream cards on the brand green, navy text, yellow stars. Same family as the
   Terms panel and the Explore the Park cards: no white, nothing that jars.
   =========================================================================== */
.fp-reviews{
	max-width: 1240px;
	/* The shortcode usually sits at the very top of a page, directly under the
	   header band — without this the badges tuck under the overhanging logo. */
	margin: 0 auto;
	padding: 40px 20px 10px;
}

/* --- the two rating badges ------------------------------------------------ */
.fp-badges{
	display: flex;
	flex-wrap: wrap;
	justify-content: center;
	gap: 18px;
	margin-bottom: 34px;
}

.fp-badge{
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: 8px;
	flex: 0 1 300px;
	padding: 20px 26px;
	background: #fdf3cf;
	border-radius: 14px;
	box-shadow: 0 4px 18px rgba(0, 0, 0, .14);
	text-decoration: none !important;
	color: #12506f !important;
	transition: transform .15s ease, box-shadow .15s ease;
}

a.fp-badge:hover{
	transform: translateY(-3px);
	box-shadow: 0 10px 26px rgba(0, 0, 0, .2);
}

/* Sized by HEIGHT only, so every mark sits on the same optical baseline
   whatever its proportions — the official Tripadvisor wordmark is 561x86
   (about 6.5:1) while the drawn Google one is 3:1. A max-width tight enough to
   clip the wider one would letterbox it inside its own box. */
.fp-badge-mark{
	height: 24px;
	width: auto;
	max-width: 100%;
	display: block;
}

/* The Tripadvisor wordmark carries a lot of horizontal weight at the same
   height, so it is nudged down slightly to match Google's optical size. */
.fp-badge--tripadvisor .fp-badge-mark{
	height: 21px;
}

.fp-badge-score{
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: 3px;
}

.fp-badge-text{
	font-size: 14px;
	color: #4a6b7c;
}

.fp-badge-text strong{
	font-size: 17px;
	color: #12506f;
}

/* --- stars, with halves --------------------------------------------------- */
.fp-stars{
	display: inline-flex;
	gap: 2px;
	line-height: 1;
	font-size: 19px;
}

/* Each star is a grey glyph with a yellow one clipped over it, so 4.7 shows as
   four and a half rather than being rounded to five. */
.fp-star{
	position: relative;
	display: inline-block;
	color: rgba(18, 80, 111, .22);
}

.fp-star-on{
	position: absolute;
	left: 0;
	top: 0;
	overflow: hidden;
	white-space: nowrap;
	color: #f5b301;
}

/* --- carousel ------------------------------------------------------------- */
.fp-reviews-title{
	margin: 0 0 20px;
	text-align: center;
	font-size: clamp(26px, 3vw, 40px);
	font-weight: 900;
	line-height: 1.1;
	color: #ffffff;
	text-shadow: 0 2px 10px rgba(0, 0, 0, .22);
}

.fp-reviews-carousel{
	position: relative;
	padding: 0 46px;
}

/* Flex, not grid. `grid-auto-columns` with a percentage inside an overflowing
   scroll container resolved against the wrong box and packed all six cards into
   one view — which also made the pager think there was a single page. flex-basis
   on the item is unambiguous. */
.fp-reviews-track{
	display: flex;
	gap: 18px;
	overflow-x: auto;
	scroll-snap-type: x mandatory;
	scroll-behavior: smooth;
	scrollbar-width: none;
	padding-bottom: 4px;
}

.fp-reviews-track::-webkit-scrollbar{ display: none; }

.fp-review{
	flex: 0 0 calc(100% - 0px);
}

@media (min-width: 760px){
	.fp-review{ flex: 0 0 calc(50% - 9px); }
}
@media (min-width: 1080px){
	.fp-review{ flex: 0 0 calc(33.333% - 12px); }
}

.fp-review{
	display: flex;
	flex-direction: column;
	gap: 12px;
	margin: 0;
	padding: 24px 26px 22px;
	background: #fdf3cf;
	border-radius: 14px;
	box-shadow: 0 4px 18px rgba(0, 0, 0, .14);
	scroll-snap-align: start;
}

/* Salient styles every blockquote with a left rule and italics; inside a
   testimonial card that reads as a stray yellow bar down the text. Reset it
   here rather than avoiding <blockquote>, which is the correct element. */
.fp-reviews .fp-review-quote,
.fp-reviews blockquote.fp-review-quote{
	margin: 0 !important;
	padding: 0 !important;
	border: 0 !important;
	border-left: 0 !important;
	background: none !important;
	font-size: 16px !important;
	font-style: normal !important;
	line-height: 1.55 !important;
	color: #2b3a42;
	quotes: none;
}

.fp-reviews .fp-review-quote:before,
.fp-reviews .fp-review-quote:after{ content: none !important; }

.fp-review-quote p{ margin: 0 0 10px; }
.fp-review-quote p:last-child{ margin-bottom: 0; }

.fp-review-by{
	margin-top: auto;
	padding-top: 6px;
	border-top: 1px solid rgba(18, 80, 111, .14);
}

.fp-review-name{
	display: block;
	font-weight: 700;
	color: #12506f;
}

.fp-review-meta{
	display: block;
	font-size: 13px;
	color: #6b8492;
}

/* --- arrows and dots ------------------------------------------------------ */
.fp-reviews-nav{
	position: absolute;
	top: 50%;
	transform: translateY(-50%);
	width: 40px;
	height: 40px;
	padding: 0;
	display: flex;
	align-items: center;
	justify-content: center;
	border: 0;
	border-radius: 50%;
	background: #fdd215;
	color: #12506f;
	cursor: pointer;
	box-shadow: 0 3px 12px rgba(0, 0, 0, .25);
	transition: transform .15s ease;
	z-index: 2;
}

.fp-reviews-nav:hover{ transform: translateY(-50%) scale(1.08); }
.fp-reviews-nav svg{ width: 20px; height: 20px; }
.fp-reviews-prev{ left: 0; }
.fp-reviews-next{ right: 0; }

.fp-reviews-dots{
	display: flex;
	justify-content: center;
	gap: 8px;
	margin-top: 18px;
}

.fp-reviews-dot{
	width: 9px;
	height: 9px;
	padding: 0;
	border: 0;
	border-radius: 50%;
	background: rgba(255, 255, 255, .55);
	cursor: pointer;
	transition: background .15s ease, transform .15s ease;
}

.fp-reviews-dot.is-active{
	background: #fdd215;
	transform: scale(1.35);
}

/* Everything fits on one page: not a carousel. */
.fp-reviews-carousel.is-static .fp-reviews-nav,
.fp-reviews-carousel.is-static .fp-reviews-dots,
.fp-reviews.is-static .fp-reviews-nav{
	display: none;
}

@media (max-width: 700px){
	.fp-reviews-carousel{ padding: 0 8px; }
	.fp-reviews-nav{ display: none; }
}

/* "as of Aug '26" under each badge. Deliberately quiet — it qualifies the
   figure without competing with it. */
.fp-badge-asof{
	display: block;
	margin-top: 2px;
	font-size: 12px;
	color: #7d95a2;
}

/* ==========================================================================
   CONTACT PAGE  (page-id-21960)
   --------------------------------------------------------------------------
   Styling only. Page content lives in the DATABASE and the cutover imports a
   fresh copy of live, which would discard an editor change; a stylesheet
   change survives it.

   The structure this leans on, confirmed in the DOM rather than assumed:

       h5.vc_custom_heading  +  div.wpb_text_column      <- each info block
       .wpb_column.contactForm                            <- the form column

   The h5 becomes a card head and the text column after it becomes the body.
   CSS cannot wrap two siblings in one box, but styling them as a matched pair
   reads as one card.
   ========================================================================== */

.page-id-21960 {
	--fp-yellow: #fdd215;
	--fp-navy: #12506f;
	--fp-ink: #143d52;
}

/* --- The two intro headings were an H1 and an H2, so they set at different
       sizes side by side. Match them; they are peers on the page. ---------- */
.page-id-21960 .wpb_column > .vc_column-inner > .wpb_wrapper > h1.vc_custom_heading,
.page-id-21960 .wpb_column > .vc_column-inner > .wpb_wrapper > h2.vc_custom_heading {
	font-size: 52px !important;
	line-height: 1.1 !important;
	margin-bottom: 14px !important;
}

/* --- Info blocks as full-yellow cards.  Navy on #fdd215 is 6.0:1. --------- */
.page-id-21960 h5.vc_custom_heading:has(+ .wpb_text_column) {
	background: var(--fp-yellow);
	color: var(--fp-navy) !important;
	font-size: 23px !important;
	font-weight: 800 !important;
	line-height: 1.3 !important;
	margin: 24px 0 0 !important;
	padding: 20px 26px 0;
	border-radius: 16px 16px 0 0;
}

.page-id-21960 h5.vc_custom_heading + .wpb_text_column {
	background: var(--fp-yellow);
	margin: 0 0 6px !important;
	padding: 10px 26px 22px;
	border-radius: 0 0 16px 16px;
}

.page-id-21960 h5.vc_custom_heading + .wpb_text_column,
.page-id-21960 h5.vc_custom_heading + .wpb_text_column p {
	color: var(--fp-ink);
	font-size: 18px;
	line-height: 1.6;
}

.page-id-21960 h5.vc_custom_heading + .wpb_text_column p { margin-bottom: 10px; }
.page-id-21960 h5.vc_custom_heading + .wpb_text_column p:last-child { margin-bottom: 0; }

/* --- Links.  They were yellow text on green at 1.55:1 — barely legible and
       not obviously clickable. A yellow chip would now vanish into the yellow
       card, so they are navy pills with white text: 8.8:1.
       inline-block so a pill never breaks across lines mid-sentence. -------- */
.page-id-21960 .wpb_text_column a {
	display: inline-block;
	background: var(--fp-navy);
	color: #fff !important;
	font-weight: 700;
	font-size: 17px;
	text-decoration: none !important;
	padding: 5px 16px;
	border-radius: 999px;
	line-height: 1.4;
	transition: background-color .15s ease, transform .15s ease;
}

.page-id-21960 .wpb_text_column a:hover,
.page-id-21960 .wpb_text_column a:focus-visible {
	background: #1b6d95;
	transform: translateY(-1px);
}

.page-id-21960 .wpb_text_column a:focus-visible {
	outline: 3px solid #fff;
	outline-offset: 2px;
}

/* ==========================================================================
   The form — no panel, a chunky outline, white type on the page green
   ========================================================================== */

.page-id-21960 .contactForm .wpcf7 {
	background: transparent;
	/* 8px to match the carousel cards below the map — same frame, same page. */
	border: 8px solid var(--fp-yellow);
	border-radius: 20px;
	padding: 30px 30px 26px;
	margin-top: 6px;
}

/* CF7 wraps each field in a <label>, so the label IS the row. */
.page-id-21960 .contactForm .wpcf7-form label {
	display: block;
	color: #fff !important;
	font-size: 18px;
	font-weight: 700 !important;
	line-height: 1.4;
	margin-bottom: 18px;
}

.page-id-21960 .contactForm .wpcf7-form .wpcf7-form-control-wrap {
	display: block;
	margin-top: 8px;
}

.page-id-21960 .contactForm .wpcf7-form input[type="text"],
.page-id-21960 .contactForm .wpcf7-form input[type="email"],
.page-id-21960 .contactForm .wpcf7-form input[type="tel"],
.page-id-21960 .contactForm .wpcf7-form textarea {
	width: 100%;
	background: #fff !important;
	border: 2px solid rgba(18, 80, 111, .18) !important;
	border-radius: 12px !important;
	padding: 14px 16px !important;
	font-size: 17px !important;
	line-height: 1.4 !important;
	color: var(--fp-navy) !important;
	box-shadow: none !important;
	transition: border-color .15s ease, box-shadow .15s ease;
}

.page-id-21960 .contactForm .wpcf7-form input[type="text"],
.page-id-21960 .contactForm .wpcf7-form input[type="email"],
.page-id-21960 .contactForm .wpcf7-form input[type="tel"] {
	height: 58px !important;
}

.page-id-21960 .contactForm .wpcf7-form textarea {
	height: 190px !important;
	resize: vertical;
}

.page-id-21960 .contactForm .wpcf7-form input:focus,
.page-id-21960 .contactForm .wpcf7-form textarea:focus {
	border-color: var(--fp-yellow) !important;
	box-shadow: 0 0 0 4px rgba(253, 210, 21, .45) !important;
	outline: none;
}

/* The checkbox-group legend comes from our own CF7 rebuild. */
.page-id-21960 .contactForm .wpcf7-form .fp-cf7-legend {
	color: #fff !important;
	font-size: 20px !important;
	font-weight: 800 !important;
	display: block;
	margin: 6px 0 14px;
}

/* Required marker and errors: yellow reads on green where red does not. */
.page-id-21960 .contactForm .wpcf7-form .wpcf7-not-valid-tip {
	color: var(--fp-yellow);
	font-size: 15px;
	font-weight: 700;
	margin-top: 6px;
}

/* --- Checkboxes.  accent-color styles the native control, so the whole thing
       stays keyboard-accessible with no replacement markup. ---------------- */
.page-id-21960 .contactForm .wpcf7-form input[type="checkbox"] {
	accent-color: var(--fp-yellow);
	width: 22px;
	height: 22px;
	margin: 1px 12px 0 0;
	flex: 0 0 auto;
	cursor: pointer;
}

.page-id-21960 .contactForm .wpcf7-form .wpcf7-checkbox .wpcf7-list-item {
	display: block;
	margin: 0 0 12px;
}

.page-id-21960 .contactForm .wpcf7-form .wpcf7-list-item label {
	display: flex;
	align-items: flex-start;
	margin-bottom: 0;
	font-weight: 600 !important;
	cursor: pointer;
}

.page-id-21960 .contactForm .wpcf7-form .wpcf7-list-item-label {
	font-size: 17px;
	line-height: 1.45;
	color: #fff;
}

/* --- Submit ---------------------------------------------------------------- */
.page-id-21960 .contactForm .wpcf7-form input[type="submit"],
.page-id-21960 .contactForm .wpcf7-form button[type="submit"] {
	background: var(--fp-yellow) !important;
	color: var(--fp-navy) !important;
	border: none !important;
	border-radius: 999px !important;
	padding: 16px 46px !important;
	font-size: 19px !important;
	font-weight: 800 !important;
	cursor: pointer;
	box-shadow: 0 3px 0 rgba(18, 80, 111, .3);
	transition: background-color .15s ease, transform .15s ease;
}

.page-id-21960 .contactForm .wpcf7-form input[type="submit"]:hover,
.page-id-21960 .contactForm .wpcf7-form button[type="submit"]:hover {
	background: #ffe45e !important;
	transform: translateY(-1px);
}

.page-id-21960 .contactForm .wpcf7-response-output {
	border-radius: 12px !important;
	border-width: 3px !important;
	border-color: var(--fp-yellow) !important;
	padding: 14px 18px !important;
	margin: 18px 0 0 !important;
	font-weight: 700;
	color: #fff;
}

/* --- Narrow screens -------------------------------------------------------- */
@media only screen and (max-width: 690px) {
	.page-id-21960 .wpb_column > .vc_column-inner > .wpb_wrapper > h1.vc_custom_heading,
	.page-id-21960 .wpb_column > .vc_column-inner > .wpb_wrapper > h2.vc_custom_heading {
		font-size: 36px !important;
	}

	.page-id-21960 .contactForm .wpcf7 { padding: 20px 16px 18px; border-width: 6px; }
	.page-id-21960 h5.vc_custom_heading:has(+ .wpb_text_column) { padding: 16px 20px 0; font-size: 21px !important; }
	.page-id-21960 h5.vc_custom_heading + .wpb_text_column     { padding: 10px 20px 18px; }
}

/* ==========================================================================
   TRAVEL PANEL  —  Contact page, under the map
   See includes/travel-info.php. The copy is READ from the "How to find Farmer
   Palmer's" page at render time, so this is presentation only.
   ========================================================================== */

.fp-travel {
	padding: 44px 0 10px;
}

.fp-travel-inner {
	max-width: 1200px;
	margin: 0 auto;
	padding: 0 20px;
}

.fp-travel-head {
	color: #fff;
	font-size: 42px;
	font-weight: 800;
	line-height: 1.15;
	text-align: center;
	margin: 0 0 28px;
}

.fp-travel-grid {
	display: grid;
	grid-template-columns: repeat(4, 1fr);
	gap: 18px;
}

.fp-travel-card {
	background: #fdd215;
	border-radius: 16px;
	padding: 22px 22px 20px;
}

.fp-travel-badge {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 46px;
	height: 46px;
	border-radius: 50%;
	background: #12506f;
	color: #fdd215;
	margin-bottom: 12px;
}

.fp-travel-icon {
	width: 26px;
	height: 26px;
}

.fp-travel-title {
	color: #12506f;
	font-size: 21px;
	font-weight: 800;
	line-height: 1.25;
	margin: 0 0 8px;
}

.fp-travel-text {
	color: #143d52;
	font-size: 16px;
	line-height: 1.55;
	margin: 0;
}

/* Links inside a card. A yellow chip would vanish into the yellow, so navy. */
.fp-travel-text a {
	display: inline-block;
	background: #12506f;
	color: #fff !important;
	font-weight: 700;
	text-decoration: none !important;
	padding: 4px 14px;
	border-radius: 999px;
	margin-top: 4px;
	transition: background-color .15s ease, transform .15s ease;
}

.fp-travel-text a:hover,
.fp-travel-text a:focus-visible {
	background: #1b6d95;
	transform: translateY(-1px);
}

.fp-travel-text strong { font-weight: 800; }

/* --- Actions --------------------------------------------------------------- */
.fp-travel-actions {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 14px;
	margin-top: 26px;
	justify-content: center;
}

.fp-travel-btn {
	display: inline-block;
	border-radius: 999px;
	padding: 13px 30px;
	font-size: 17px;
	font-weight: 800;
	text-decoration: none !important;
	border: 3px solid #fdd215;
	color: #fff !important;
	transition: background-color .15s ease, color .15s ease, transform .15s ease;
}

.fp-travel-btn--primary {
	background: #fdd215;
	color: #12506f !important;
	box-shadow: 0 3px 0 rgba(18, 80, 111, .3);
}

.fp-travel-btn:hover,
.fp-travel-btn:focus-visible {
	background: #ffe45e;
	color: #12506f !important;
	transform: translateY(-1px);
}

.fp-travel-sat {
	color: #fff;
	font-size: 16px;
	opacity: .95;
}

.fp-travel-sat strong { font-weight: 800; letter-spacing: .5px; }

@media only screen and (max-width: 999px) {
	.fp-travel-grid { grid-template-columns: repeat(2, 1fr); }
	.fp-travel-head { font-size: 34px; }
}

@media only screen and (max-width: 690px) {
	.fp-travel-grid { grid-template-columns: 1fr; }
	.fp-travel-head { font-size: 30px; }
	.fp-travel-actions { flex-direction: column; align-items: stretch; text-align: center; }
}

/* --- Carousel cards, second pass -------------------------------------------
   The title sat hard against the top-left corner of the frame. Give the card
   interior real padding, and drop the translucent white plate behind the image
   now that the card itself is a solid green. See style.css for the frame. */
.graphicCara .fp-carditem {
	padding: 20px 22px 22px;
}

.graphicCara .fp-carditem-title {
	margin-bottom: 14px;
}

@media only screen and (max-width: 690px) {
	.graphicCara .fp-carditem { padding: 16px 16px 18px; }
}

/* ===========================================================================
   H4 leading
   ---------------------------------------------------------------------------
   Dougal: H4 text across the site is too cramped. Measured across seven
   pages, 75 H4s, and the problem is confined to WPBakery's headings:

       h4.vc_custom_heading    1.15 x 15   <- the complaint
                               1.40 x  3
                               2.00 x  1
       plain h4 (theme)        1.00 x  8   26-32px, single line
                               1.23 x 30
                               1.25 x  4
                               1.78 x 14   generous already

   So this is scoped to .vc_custom_heading. A blanket h4 rule would TIGHTEN
   the 14 sitting at 1.78, which is the same trap noted against the earlier
   heading sweep: where Salient's fixed px value is generous relative to its
   font-size, raising a ratio makes things worse, not better.

   NO !important, deliberately. Seven of the fifteen carry line-height inline
   from the page content, and an inline style wins — including the one
   legitimately set to 2.0, which !important here would crush. Those seven are
   fixed at source instead, in bin/apply-db-changes.sh step 19, so the change
   is replayed after the cutover import rather than fought in CSS.
   =========================================================================== */
h4.vc_custom_heading {
	line-height: 1.5;
}


/* --- Home page: the three cards did not line up ----------------------------
   Book a Visit and Attractions carry a WPBakery vc_custom_* class zeroing the
   heading's bottom margin. Events does not, so it fell back to the theme's
   10px and its image sat exactly 10px lower than the other two.

   Normalised here rather than in the content: it is presentation, and a theme
   rule survives the cutover import where an editor change would not. */
.home h2.vc_custom_heading:has(+ .img-with-aniamtion-wrap) {
	margin-bottom: 0 !important;
}

/* ===========================================================================
   Slider Revolution banner titles — centred everywhere
   ---------------------------------------------------------------------------
   The heroes were built inconsistently. Comparing the inline styles SR7 writes
   onto each text layer:

       centred (Contact)   text-align:center; white-space:normal; width ~full
       left    (About)     text-align:left;   white-space:nowrap; width auto

   Measured as the layer's centre against the module's centre, About was 543px
   off and Activities 45px off, while Contact was 0. That is per-slider design
   data in the database, so it cannot be fixed once in a setting.

   Overriding left/width/text-align is enough, and deliberately leaves `top`
   and `transform` alone: `top` is what positions each hero vertically, and SR7
   animates entrances with transform — overriding it would kill the animation.

   !important because SR7 writes these inline, and recomputes them on resize.
   =========================================================================== */
/* NOT just sr7-txt. The eyebrow is an <sr7-txt>, but the big headline under it
   is an <h1 class="sr7-layer"> — so the first version of this rule centred the
   small line and left the headline 118px off. Every text-bearing layer type is
   listed; sr7-bg and sr7-img also carry .sr7-layer and must NOT be touched, or
   the background image moves with the words. */
sr7-module sr7-slide > sr7-txt.sr7-layer,
sr7-module sr7-slide > h1.sr7-layer,
sr7-module sr7-slide > h2.sr7-layer,
sr7-module sr7-slide > h3.sr7-layer,
sr7-module sr7-slide > h4.sr7-layer,
sr7-module sr7-slide > h5.sr7-layer,
sr7-module sr7-slide > h6.sr7-layer,
sr7-module sr7-slide > p.sr7-layer {
	left: 0 !important;
	right: 0 !important;
	width: 100% !important;
	text-align: center !important;
	/* nowrap is what let the long left-aligned titles run off the edge. */
	white-space: normal !important;
}

/* ===========================================================================
   ABOUT PAGE  (page-id-21625)
   =========================================================================== */

/* --- Team portraits, all circular ------------------------------------------
   The team photos are a mix: some are 500x500 or 1000x1000 with a circle drawn
   into the artwork, the rest are portrait snaps (750x1000, 675x882) that
   rendered as plain rectangles. So half the row looked designed and half did
   not.

   Cropping to a square and rounding gives every one the same shape. On the
   ones that already carry a drawn circle the crop lands exactly on it, so they
   are unchanged; the photographs are centred slightly high, where a head
   usually sits.

   NOTE the selector weight: Salient's `.row .col img { height: auto }` carries
   two classes and an element, so a plain `.team-member img` loses to it — the
   same trap as the slider images. */
.page-id-21625 .team-member img {
	width: 100% !important;
	height: auto !important;
	aspect-ratio: 1 / 1;
	object-fit: cover;
	object-position: center 22%;
	border-radius: 50%;
	background: rgba(255, 255, 255, .12);
}

/* --- Mission and Values ----------------------------------------------------
   Three equal columns — mission text, a picture, then eight bullets — which
   left the middle column half empty and squeezed the values into a tall thin
   list. Dougal: "looks really poor... two strips can work here".

   Restructured with grid, on the markup as it stands. The row's own column
   wrapper becomes a two-column grid: mission and picture share the first
   strip, and values takes the full width of the second. No content moves, so
   the cutover import cannot undo it. */
.page-id-21625 .wpb_row .row_col_wrap_12:has(> .wpb_column:nth-child(3) ul) {
	display: grid;
	grid-template-columns: 1.05fr .95fr;
	gap: 10px 46px;
	align-items: center;
}

.page-id-21625 .wpb_row .row_col_wrap_12:has(> .wpb_column:nth-child(3) ul) > .wpb_column {
	width: 100%;
	float: none;
	padding: 0;
}

/* Mission text: left-aligned reads better than centred at this measure. */
.page-id-21625 .row_col_wrap_12:has(> .wpb_column:nth-child(3) ul) > .wpb_column:nth-child(1) * {
	text-align: left !important;
}

/* ...but About Our Values heads its own full-width strip, so it centres. */
.page-id-21625 .row_col_wrap_12:has(> .wpb_column:nth-child(3) ul) > .wpb_column:nth-child(3) > .vc_column-inner > .wpb_wrapper > h2 {
	text-align: center !important;
	margin-bottom: 26px !important;
}

/* Values spans both columns, underneath. */
.page-id-21625 .row_col_wrap_12:has(> .wpb_column:nth-child(3) ul) > .wpb_column:nth-child(3) {
	grid-column: 1 / -1;
	margin-top: 18px;
}

/* --- The values themselves, as lozenges ------------------------------------
   Eight bullets in a single column was the bulk of the problem. As pills they
   read as a set rather than a list to get through. */
.page-id-21625 .row_col_wrap_12 > .wpb_column:nth-child(3) ul {
	display: flex !important;   /* beats Salient's .col.centered-text ul { display:block !important } */
	flex-wrap: wrap;
	gap: 34px 16px;
	list-style: none !important;
	margin: 0 !important;
	padding: 0 !important;
}

.page-id-21625 .row_col_wrap_12 > .wpb_column:nth-child(3) ul li {
	flex: 1 1 clamp(240px, 30%, 380px);
	list-style: none !important;
	margin: 0 !important;
	/* Room at the top for the tick badge. */
	padding: 46px 26px 26px !important;
	background: #fdd215;
	color: #12506f !important;
	/* A pill is only a pill while it is one or two lines; past that the radius
	   reads as an accident, so these are rounded plates. */
	border-radius: 22px;
	font-size: 17px;
	font-weight: 700;
	line-height: 1.5;
	text-align: center !important;
	position: relative;
	box-shadow: 0 4px 0 rgba(18, 80, 111, .22);
}

/* The badge. A tick rather than a bullet: these are commitments, and eight
   identical yellow rectangles were, in Dougal's words, quite dull. Drawn with
   a pseudo-element so no markup is needed and the content stays untouched. */
.page-id-21625 .row_col_wrap_12 > .wpb_column:nth-child(3) ul li::before {
	content: "";
	position: absolute;
	top: -19px;
	left: 50%;
	width: 38px;
	height: 38px;
	transform: translateX(-50%);
	border-radius: 50%;
	background: #12506f url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23fdd215' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 12.5 9.5 18 20 7'/%3E%3C/svg%3E") center / 20px 20px no-repeat;
	box-shadow: 0 0 0 5px #91ba35;
}

.page-id-21625 .row_col_wrap_12 > .wpb_column:nth-child(3) ul li::marker {
	content: none;
}

/* The value text is wrapped in its own tags carrying white, set for the green
   background it used to sit on. White on #fdd215 is 1.5:1; navy is 6.0:1. */
.page-id-21625 .row_col_wrap_12 > .wpb_column:nth-child(3) ul li,
.page-id-21625 .row_col_wrap_12 > .wpb_column:nth-child(3) ul li * {
	color: #12506f !important;
}

@media only screen and (max-width: 999px) {
	.page-id-21625 .wpb_row .row_col_wrap_12:has(> .wpb_column:nth-child(3) ul) {
		grid-template-columns: 1fr;
	}
	.page-id-21625 .row_col_wrap_12 > .wpb_column:nth-child(3) ul li {
		flex: 1 1 100%;
	}
}

/* ===========================================================================
   "More Farmer Palmer's at home" — the downloads strip
   See includes/activities-cta.php. The four PDFs are read out of the column
   the new Meet the Animals card replaced, so there is still one list of them.
   =========================================================================== */

.fp-athome {
	/* Yellow ground, navy tiles — the reverse of the first attempt. Navy as a
	   full-width band appears nowhere else on the site; the yellow does. */
	background: #fdd215;
	padding: 56px 0 60px;
	margin-top: 10px;
	/* Break out of the content container to the full viewport width. 100vw
	   includes the scrollbar, so the left offset is derived from 50% of the
	   container rather than assuming they match. */
	width: 100vw;
	margin-left: calc(50% - 50vw);
	margin-right: calc(50% - 50vw);
}

.fp-athome-inner {
	max-width: 1200px;
	margin: 0 auto;
	padding: 0 24px;
	text-align: center;
}

.fp-athome-head {
	color: #12506f;
	font-size: 46px;
	font-weight: 800;
	line-height: 1.1;
	margin: 0 0 12px;
}

.fp-athome-sub {
	color: #143d52;
	font-size: 19px;
	line-height: 1.55;
	max-width: 720px;
	margin: 0 auto 34px;
}

.fp-athome-grid {
	display: grid;
	grid-template-columns: repeat(4, 1fr);
	gap: 18px;
}

.fp-athome-card {
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: 12px;
	background: #12506f;
	border-radius: 18px;
	padding: 28px 20px 24px;
	text-decoration: none !important;
	transition: transform .15s ease, box-shadow .15s ease;
	box-shadow: 0 4px 0 rgba(0, 0, 0, .18);
}

.fp-athome-card:hover,
.fp-athome-card:focus-visible {
	transform: translateY(-3px);
	box-shadow: 0 8px 0 rgba(0, 0, 0, .18);
	background: #1b6d95;
}

.fp-athome-card:focus-visible {
	outline: 3px solid #12506f;
	outline-offset: 3px;
}

.fp-athome-icon {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 56px;
	height: 56px;
	border-radius: 50%;
	background: #fdd215;
	color: #12506f;
}

.fp-athome-icon svg { width: 28px; height: 28px; }

.fp-athome-label {
	color: #fdd215;         /* 6.0:1 on the navy tile */
	font-size: 18px;
	font-weight: 800;
	line-height: 1.3;
}

.fp-athome-cta {
	color: #ffffff;
	font-size: 14px;
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: .6px;
	opacity: .8;
}

@media only screen and (max-width: 999px) {
	.fp-athome-grid { grid-template-columns: repeat(2, 1fr); }
	.fp-athome-head { font-size: 34px; }
}

@media only screen and (max-width: 690px) {
	.fp-athome-grid { grid-template-columns: 1fr; }
	.fp-athome-head { font-size: 29px; }
	.fp-athome { padding: 40px 0 44px; }
}

/* ===========================================================================
   Card images — one shape everywhere
   ---------------------------------------------------------------------------
   Dougal: every image in a row should be the same height and width, filled
   rather than letterboxed, and never distorted.

   The site's card artwork is mostly 16:9 (915x515 = 1.78) with the odd
   1439x677 (2.13) mixed in, so rows came out ragged — measured on the home
   page, one row had images at 190px next to images at 227px.

   aspect-ratio fixes the BOX and object-fit: cover fills it: a landscape image
   is sized to the box's height and cropped left/right, a portrait one is sized
   to its width and cropped top/bottom. Either way it fills, and neither is
   stretched — which is exactly the rule Dougal asked for.

   THREE THINGS THIS DELIBERATELY DOES NOT TOUCH:

   - .vc_col-sm-12 columns. A full-width image is a feature picture, not a
     card — the team group photo on About is 1408x1056 and cropping it to 16:9
     would cut the back row off.
   - SVGs AND PNGs. Both are used on this site for transparent artwork rather
     than photographs — the Mission illustration is an SVG, the "Don't Miss
     Out" tickets are a near-square PNG (849x777) that 16:9 sliced the top and
     bottom off. Surveyed across eleven pages: 28 JPEGs in card columns, all
     photographs, against 25 SVGs and exactly 1 PNG, all artwork. So the file
     type is a reliable proxy here for "is this a photo".
   - .team-member portraits, which are circles. They sit outside
     .img-with-aniamtion-wrap so the scope already excludes them.

   The [src$=".svg"] test also settles a specificity fight: Salient's
   `.row .col img { height: auto }` is two classes and an element, the same
   weight as a plain `.vc_col-sm-4 .img-with-aniamtion-wrap img`, so without
   the attribute selector this rule would tie and lose on source order.
   =========================================================================== */
:is(.vc_col-sm-3, .vc_col-sm-4, .vc_col-sm-6) .img-with-aniamtion-wrap img:not([src$=".svg"]):not([src$=".png"]) {
	width: 100%;
	height: auto;
	aspect-ratio: 16 / 9;
	object-fit: cover;
	border-radius: 20px;
}

/* The wrapper clips too, so a hover zoom cannot escape the rounded corner. */
:is(.vc_col-sm-3, .vc_col-sm-4, .vc_col-sm-6) .img-with-aniamtion-wrap:has(img:not([src$=".svg"]):not([src$=".png"])) .hover-wrap-inner {
	border-radius: 20px;
	overflow: hidden;
}

/* --- Blog cards ------------------------------------------------------------
   Salient's post grid already sizes these to a uniform box and fills it, so
   the only thing out of step with the rest of the site was the square corner.
   The image is sized inline by Salient's JS, so the radius goes on the frame
   around it rather than fighting that. */
.nectar-post-grid-item .nectar-post-grid-item-bg-wrap,
.nectar-post-grid-item .nectar-post-grid-item-bg-wrap-inner,
.nectar-post-grid-item .nectar-post-grid-item-bg {
	border-radius: 20px;
	overflow: hidden;
}

.nectar-post-grid-item-bg__media {
	object-fit: cover;
}

/* ===========================================================================
   Newsletter strip — drop its background
   ---------------------------------------------------------------------------
   The row carries `--row-bg-color: #8eb030` inline, which Salient paints via
   `.wpb_row.has-row-bg-color { background-color: var(--row-bg-color) }`.

   That green is a shade off the page's own #91ba35, so it read as a faintly
   different rectangle — and because it is opaque it also blocked the footer
   hills, which now tuck up behind the content. The result was a hard edge
   crashing into the illustration on every page the strip appears on.

   Transparent lets the page green through, which is the colour it was trying
   to be anyway.

   TWO ELEMENTS PAINT IT, and the first fix only got one. The row itself takes
   the colour from the var, but Salient ALSO renders a `.row-bg` layer inside
   `.row-bg-wrap` carrying the same colour — and that is the one actually on
   screen. The computed style on the row read transparent while the pixels had
   not moved at all; only sampling the rendered image and then hit-testing that
   point found the inner layer. Check the pixels, not the computed style.
   =========================================================================== */
.wpb_row.newsletterRow.has-row-bg-color {
	background-color: transparent;
}

.newsletterRow .row-bg.using-bg-color {
	background-color: transparent !important;
}

/* The grass cap that used to sit on TOP of that band.
 *
 * With the band gone it floats in mid-air, a 42px strip of grass across the
 * page attached to nothing. It is NOT inside .newsletterRow — it is a row of
 * its own immediately above, containing one image and nothing else (no text,
 * no links, 42px tall), which is why removing the background left it behind.
 *
 * SCOPED TIGHTLY, because Dougal is right that the graphic may be wanted
 * elsewhere. Two conditions, both required: the row must contain that image,
 * AND be immediately followed by the newsletter row. Checked across all the
 * pages that carry it — plan-your-visit, animals, annual passes, attractions,
 * times & prices — and on every one it is the newsletter cap. Anywhere it is
 * used for something else, this rule cannot match it.
 */
.wpb_row:has(img[src$="nlTop-01.svg"]):has(+ .newsletterRow) {
	display: none;
}

/* Keep the newsletter captcha usable — by not letting it collide at all.
 *
 * THE CAUSE IS NOT STACKING. Measured on plan-your-visit: .container-wrap ends
 * at 5596, but .newsletterRow — which is inside it — runs to 6096. That row
 * overflows its own container by 500px, and always has.
 *
 * It was harmless until the footer hills started tucking upwards: that pulls
 * the footer up 257px, straight into the overflow. So the captcha ended up
 * under the footer, where a click lands on the footer instead of the widget.
 *
 * Two earlier attempts were wrong. Raising the row above the footer traded the
 * problem for its mirror image — on mobile the form drew ON TOP of the phone
 * number, the legal links and the address. Padding it clear only worked on the
 * pages I had measured, and /newsletter/ defeated it by nesting the form in an
 * inner_row.
 *
 * So: on the ten pages carrying this form, the hills do not tuck. The footer
 * returns to its natural position, the overflow has somewhere to go again, and
 * nothing overlaps — no z-index, no padding, nothing to keep in step. Those
 * pages end with a tall form rather than a tight gap, so the tuck was buying
 * very little there anyway.
 */
body:has(.newsletterRow) .ftrHills {
	margin-top: 0;
}

/* AND THE ACTUAL CAUSE, which was mine.
 *
 * .newsletterRow carries margin-bottom: -500px. That is not arbitrary — the
 * hills used to be exactly 500px tall, and the row was pulled up by the same
 * amount so the sign-up form sits ON the illustration.
 *
 * When the hills became proportional (aspect-ratio 1920/622) that pairing
 * broke. The band is 467px at 1440 but only 126px at 390, while the row went
 * on pulling up a flat 500px — so on a phone it climbed straight through the
 * band and into the footer, drawing over the phone number, the legal links and
 * the address. Exactly what Dougal reported, and it is a consequence of my
 * hills change rather than anything to do with the captcha.
 *
 * A percentage margin resolves against the containing block's WIDTH, and the
 * hills' height is 32.396% of that same width. So one number keeps the two in
 * step at every viewport, with nothing to remember. */
.newsletterRow {
	margin-bottom: -32.396% !important;
}

/* Submit beside the captcha, not beneath it.
 *
 * Dougal's suggestion, and it is the better layout twice over: the captcha
 * leaves a wide empty gutter to its right, and stacking the button under it
 * added ~90px of height to the tallest thing on the page — the part that was
 * running into the footer in the first place. Side by side, the form is
 * shorter and the button cannot be the thing that overruns.
 *
 * The form is a legacy table layout, so the captcha (div.text) and the submit
 * are siblings inside td.body. Making that cell a flex row is enough; the
 * fields and the consent checkbox above keep full width, and the two controls
 * share the last line. flex-wrap means that on a narrow screen the button
 * drops back underneath by itself rather than being squeezed. */
/* KEYED ON THE FORM, NOT THE ROW. This was scoped to .newsletterRow, and the
   home page's sign-up sits in a row WITHOUT that class — so the button stayed
   stubbornly underneath there while every other page moved. Matching on the
   presence of the captcha catches the form wherever it is put, and cannot
   touch any other table-layout form that has no captcha in it. */
td.body:has(mc4wp-procaptcha) {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 16px 20px;
}

td.body:has(mc4wp-procaptcha) > * {
	flex: 1 1 100%;
	margin: 0;
}

td.body:has(mc4wp-procaptcha) > div.text,
td.body:has(mc4wp-procaptcha) > div:has(.infusion-submit) {
	flex: 0 1 auto;
}

td.body:has(mc4wp-procaptcha) .infusion-submit {
	margin: 0;
}

/* And the part that actually guarantees it: the hills and the grass strip are
   DECORATION. They have no text, no links and nothing to click, so they should
   never intercept a pointer — yet .ftrTopGraphic was swallowing clicks meant
   for the captcha wherever the two met.
 *
 * Clearance and stacking both depend on measuring every page at every width,
 * and the /newsletter/ page defeated both by nesting the form in an inner_row.
 * This does not depend on layout at all: whatever ends up on top, the widget
 * stays usable. */
.ftrHills,
.ftrTopGraphic {
	pointer-events: none;
}

/* ===========================================================================
   THE WORLD OF DINOSAUR ROAR! TRAIL           see includes/dinosaur-trail.php
   ---------------------------------------------------------------------------
   NO NEW COLOURS. Everything here is already on the site: sky #2da2da (the
   dropdown blue), page green #91ba35, brand yellow #fdd215, navy #12506f and
   the cream #fdf3cf used on Terms, Contact and the legal pages. Panels are
   cream rather than white, for the reason already on record — white jars
   against everything else here.

   BUTTONS ARE THE SITE'S OWN. The markup is Salient's
   `nectar-button small regular accent-color regular-button`, so they inherit
   the size, radius and colour every other button on the site has. There is no
   bespoke button CSS on this page.

   The only colours not from the palette are the seven character ring colours,
   sampled from the licensor's own artwork so each card matches its dinosaur.
   =========================================================================== */

.fp-dino {
	--sky:    #2da2da;
	--sky-lo: #57bce9;
	--green:  #91ba35;
	--yellow: #fdd215;
	--navy:   #12506f;
	--cream:  #fdf3cf;
}

.fp-dino-page .container-wrap { padding-top: 0 !important; padding-bottom: 0 !important; }
.fp-dino-page .container-wrap .row { padding: 0 !important; }
.fp-dino-page .container-wrap .col { padding: 0 !important; }

.fp-dino * { box-sizing: border-box; }

/* Full-bleed bands. !important because the trust strip is a <ul> and Salient's
   list margins beat a plain class selector. */
.fp-dino-hero,
.fp-dino-trust,
.fp-dino-band {
	width: 100vw;
	margin-left: calc(50% - 50vw) !important;
	margin-right: calc(50% - 50vw) !important;
}

.fp-dino-wrap { max-width: 1180px; margin: 0 auto; padding: 0 24px; }
.fp-dino-centre { text-align: center; }

/* --- Hero ------------------------------------------------------------------
   Two lines of copy lead, as they do on every other banner. The licensed
   lock-up sits at the FOOT of the banner with two characters either side. */
.fp-dino-hero {
	position: relative;
	overflow: hidden;
	/* Clears the floating header. It is 166px tall with the logo overhanging
	   its bottom edge, so anything less puts the first line behind the cow. */
	padding: clamp(150px, 14vw, 225px) 24px 0;
	text-align: center;
	color: #fff;
}

.fp-dino-hero-sky {
	position: absolute;
	inset: 0;
	background:
		url(/wp-content/uploads/scrollheadbg-01.svg) center bottom / cover no-repeat,
		linear-gradient(180deg, var(--sky) 0%, var(--sky-lo) 100%);
	z-index: 0;
}

.fp-dino-hero-inner { position: relative; z-index: 2; }

.fp-dino-eyebrow {
	font-size: clamp(18px, 2.2vw, 26px);
	font-weight: 700;
	line-height: 1.3;
	margin: 0 0 6px;
	color: #fff;
	text-shadow: 0 2px 10px rgba(0, 0, 0, .22);
}

.fp-dino-h1 {
	font-size: clamp(40px, 8vw, 96px) !important;
	font-weight: 900;
	line-height: 1.02 !important;
	letter-spacing: -1px;
	margin: 0 0 18px !important;
	color: #fff !important;
	text-shadow: 0 4px 18px rgba(0, 0, 0, .25);
}

.fp-dino-sub {
	font-size: clamp(17px, 1.7vw, 21px);
	line-height: 1.5;
	max-width: 620px;
	margin: 0 auto 24px;
	color: #fff;
	text-shadow: 0 2px 10px rgba(0, 0, 0, .2);
}

/* Lock-up centred, two characters either side, all standing on the bottom. */
.fp-dino-hero-art {
	position: relative;
	z-index: 1;
	display: flex;
	align-items: flex-end;
	justify-content: center;
	gap: clamp(4px, 1.4vw, 20px);
	max-width: 1240px;
	margin: clamp(6px, 1.2vw, 18px) auto 0;
}

.fp-dino-hero-dino { width: clamp(74px, 12vw, 168px); height: auto; flex: 0 0 auto; }
.fp-dino-hero-art .fp-dino-hero-dino:nth-child(2),
.fp-dino-hero-art .fp-dino-hero-dino:nth-child(4) { width: clamp(88px, 14.5vw, 200px); }

.fp-dino-lockup {
	width: clamp(190px, 30vw, 430px);
	height: auto;
	flex: 0 0 auto;
	margin-bottom: clamp(-14px, -1.5vw, -4px);
	filter: drop-shadow(0 6px 14px rgba(0, 0, 0, .22));
}

/* --- Trust strip ----------------------------------------------------------- */
.fp-dino-trust {
	list-style: none;
	margin-top: 0;
	margin-bottom: 0;
	padding: 18px 24px;
	background: var(--yellow);
	display: flex;
	flex-wrap: wrap;
	justify-content: center;
	gap: 10px 34px;
	font-weight: 700;
	color: var(--navy);
	font-size: 16px;
}
.fp-dino-trust li { display: flex; align-items: center; gap: 9px; }
.fp-dino-trust li::before {
	content: "";
	width: 20px; height: 20px; flex: 0 0 auto;
	border-radius: 50%;
	background: var(--navy) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23fdd215' stroke-width='3.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 12.5 9.5 18 20 7'/%3E%3C/svg%3E") center / 12px 12px no-repeat;
}

/* --- Bands -----------------------------------------------------------------
   The plain bands are TRANSPARENT, not green. They would only be repainting
   the page colour, and painting it opaquely blocked the footer hills — which
   tuck up behind the content — leaving a hard edge across the illustration.
   Exactly the fault the newsletter strip had. */
.fp-dino-band { padding: clamp(46px, 5.5vw, 80px) 0; background: transparent; }

/* Bold colours, not tints. The cream is reserved for ONE band — the map —
   where a pale ground is what lets a watercolour illustration read. Everywhere
   else that wanted a light panel gets the real brand yellow instead. */
.fp-dino-band--yellow { background: var(--yellow); }
.fp-dino-band--cream  { background: var(--cream); }
.fp-dino-band--blue   { background: var(--sky); }

.fp-dino-band h2 {
	font-size: clamp(30px, 4.2vw, 50px) !important;
	font-weight: 900;
	line-height: 1.1 !important;
	margin: 0 0 20px !important;
	color: #fff !important;
}
.fp-dino-band--cream h2,
.fp-dino-band--yellow h2 { color: var(--navy) !important; }

.fp-dino-band p { font-size: 18px; line-height: 1.62; color: #fff; }
.fp-dino-band--cream p,
.fp-dino-band--yellow p { color: var(--navy); }

.fp-dino-lede { font-size: 19px !important; max-width: 780px; margin-left: auto; margin-right: auto; }
.fp-dino-aside { font-size: 16px !important; opacity: .9; font-style: italic; }
.fp-dino-btnrow { margin-top: 30px !important; }

/* --- Split rows ------------------------------------------------------------ */
.fp-dino-split {
	max-width: 1180px;
	margin: 0 auto;
	padding: 0 24px;
	display: grid;
	grid-template-columns: 1.05fr .95fr;
	gap: clamp(28px, 4vw, 60px);
	align-items: center;
}
.fp-dino-split--flip .fp-dino-copy { order: 2; }
.fp-dino-copy h2 { text-align: left; }
.fp-dino-copy p + p { margin-top: 14px; }

.fp-dino-figure { margin: 0; }
.fp-dino-figure img {
	width: 100%;
	height: auto;
	aspect-ratio: 4 / 5;
	object-fit: cover;
	border-radius: 20px;
	box-shadow: 0 10px 26px rgba(0, 0, 0, .22);
}
.fp-dino-split--flip .fp-dino-figure img { aspect-ratio: 4 / 3; }
.fp-dino-figure--wide img { aspect-ratio: 16 / 10; margin-top: 8px; }

/* The pack shot is a photographed promo card — show it whole, not cropped. */
.fp-dino-packshot { max-width: 620px; margin: 0 auto 8px; }
.fp-dino-packshot img { aspect-ratio: auto; }

/* --- Activity pack --------------------------------------------------------- */
.fp-dino-pack {
	list-style: none;
	margin: 26px 0 8px;
	padding: 0;
	display: grid;
	grid-template-columns: repeat(2, 1fr);
	gap: 14px;
}
.fp-dino-pack li {
	background: var(--cream);
	border: 3px solid var(--navy);
	border-radius: 16px;
	padding: 18px 22px;
	color: var(--navy);
	font-size: 16px;
	line-height: 1.5;
}
.fp-dino-pack-t { display: block; font-weight: 800; color: var(--navy); font-size: 18px; margin-bottom: 3px; }

/* A yellow button on a yellow band is invisible. On those two bands it takes
   the navy treatment already used for links on the Contact page's yellow
   cards — same shape and size, still a site button, white on navy at 8.7:1.
   
   FOUR CLASSES, deliberately. The bespoke style.css carries
   `body.material[data-button-style="default"] .nectar-button` at !important —
   three class-level selectors and an element — so a two-class rule here lost
   even with !important of its own, and the button stayed yellow while its
   text went white. Enumerated rather than guessed, again. */
.fp-dino .fp-dino-band--yellow .nectar-button.accent-color,
.fp-dino .fp-dino-band--yellow .nectar-button.accent-color:hover {
	background-color: var(--navy) !important;
}
.fp-dino .fp-dino-band--yellow .nectar-button.accent-color span,
.fp-dino .fp-dino-band--yellow .nectar-button.accent-color:hover span { color: #fff !important; }

/* --- The setting, full width ------------------------------------------------
   A breathing space rather than another thing squeezed into a column. The
   photograph is the one the copy describes — path, ferns, bridge, and a
   dinosaur waiting up ahead — so it earns the full width and no text over it.
   Cropped to a wide strip: the interest is the path and the trees either side,
   not the sky. */
.fp-dino-strip {
	margin: 0;
	width: 100vw;
	margin-left: calc(50% - 50vw);
	margin-right: calc(50% - 50vw);
}

.fp-dino-strip img {
	display: block;
	width: 100%;
	height: auto;
	aspect-ratio: 21 / 9;
	object-fit: cover;
	object-position: center 62%;
}

@media only screen and (max-width: 690px) {
	/* Squarer on a phone, or the path becomes a letterbox slit. */
	.fp-dino-strip img { aspect-ratio: 4 / 3; }
}

/* --- Only here -------------------------------------------------------------
   Was a text-only band with a lot of empty space, so the Flap photograph goes
   here rather than into an already-busy row. Two columns, generous gap. */
.fp-dino-onlyhere {
	display: grid;
	grid-template-columns: 1.15fr .85fr;
	gap: clamp(28px, 4vw, 56px);
	align-items: center;
	text-align: left;
}

.fp-dino-onlyhere .fp-dino-copy h2 { text-align: left; }
.fp-dino-onlyhere p + p { margin-top: 14px; }
.fp-dino-onlyhere .fp-dino-figure img { aspect-ratio: 3 / 4; }

@media only screen and (max-width: 999px) {
	.fp-dino-onlyhere { grid-template-columns: 1fr; text-align: center; }
	.fp-dino-onlyhere .fp-dino-copy h2 { text-align: center; }
	.fp-dino-onlyhere .fp-dino-figure { max-width: 420px; margin: 0 auto; }
	.fp-dino-onlyhere .fp-dino-figure img { aspect-ratio: 4 / 3; }
}

/* --- Only here (flash badge) ------------------------------------------------ */
.fp-dino-flash {
	display: inline-block;
	background: var(--yellow);
	color: var(--navy);
	font-weight: 800;
	font-size: 14px !important;
	letter-spacing: .12em;
	text-transform: uppercase;
	padding: 8px 18px;
	border-radius: 999px;
	margin: 0 0 16px !important;
}

/* --- Character grid -------------------------------------------------------- */
.fp-dino-grid {
	display: grid;
	grid-template-columns: repeat(4, 1fr);
	gap: 20px;
	margin-top: 34px;
}

/* A full outline rather than a bar across the top. The bar was a style used
   nowhere else here; an 8px outline is exactly what the carousel cards and the
   contact form already carry, so the cards now match the site — each simply
   takes its own dinosaur's colour. */
.fp-dino-card {
	background: var(--cream);
	border-radius: 20px;
	padding: 22px 20px 24px;
	text-align: center;
	box-shadow: 0 8px 20px rgba(0, 0, 0, .16);
	border: 5px solid var(--ring, var(--yellow));
	display: flex;
	flex-direction: column;
}

.fp-dino-face { width: 132px; height: 132px; margin: 0 auto 10px; display: block; }

.fp-dino-name { font-size: 21px !important; font-weight: 900; color: var(--navy) !important; margin: 0 0 4px !important; line-height: 1.2 !important; }

.fp-dino-trait {
	display: inline-block;
	background: var(--ring, var(--navy));
	color: #fff !important;
	font-size: 13px !important;
	font-weight: 800;
	letter-spacing: .06em;
	text-transform: uppercase;
	padding: 4px 12px;
	border-radius: 999px;
	margin: 0 auto 12px !important;
}

.fp-dino-species { font-size: 15px !important; color: var(--navy) !important; margin: 0 0 10px !important; line-height: 1.45 !important; }
.fp-dino-say { font-size: 14px; color: #4a6b7a; }
.fp-dino-say strong { color: var(--navy); }
.fp-dino-blurb { font-size: 15px !important; color: var(--navy) !important; line-height: 1.55 !important; margin: 0 !important; }

/* The eighth tile: the feather fact, which was floating loose under a grid
   with a hole in it. Both feathered characters shown, overlapped. */
/* The fact tile is yellow, so a yellow outline would disappear — navy instead,
   which is also what its label already uses. */
.fp-dino-card--fact { --ring: var(--navy); background: var(--yellow); }
.fp-dino-card--fact .fp-dino-trait { background: var(--navy); }
.fp-dino-factpair { display: flex; justify-content: center; align-items: flex-end; margin: 0 0 10px; }
.fp-dino-factpair img { width: 104px; height: 104px; display: block; }
.fp-dino-factpair img:last-child { margin-left: -26px; }

/* --- Closing shots --------------------------------------------------------- */
.fp-dino-endshot {
	display: flex;
	justify-content: center;
	gap: 14px;
	margin: 0 0 30px;
}
.fp-dino-endshot img {
	width: clamp(110px, 20vw, 250px);
	height: clamp(150px, 26vw, 330px);
	object-fit: cover;
	border-radius: 20px;
	box-shadow: 0 10px 26px rgba(0, 0, 0, .3);
}

.fp-dino-actions { margin-top: 26px !important; }

/* --- FAQs ------------------------------------------------------------------ */
.fp-dino-faqwrap { max-width: 880px; }

/* Transparent so the footer hills run behind them, with the site's own chunky
   yellow outline — the same treatment as the contact form. Every FAQ carries
   it: the outline is the style, not a warning. */
.fp-dino-faq {
	background: transparent;
	border: 4px solid var(--yellow);
	border-radius: 14px;
	margin-bottom: 10px;
	overflow: hidden;
}
.fp-dino-faq summary {
	cursor: pointer;
	padding: 16px 22px;
	font-weight: 800;
	font-size: 17px;
	color: #fff;
	list-style: none;
	display: flex;
	justify-content: space-between;
	gap: 16px;
	align-items: center;
}
.fp-dino-faq summary::-webkit-details-marker { display: none; }
.fp-dino-faq summary::after { content: "+"; font-size: 24px; line-height: 1; color: var(--yellow); flex: 0 0 auto; }
.fp-dino-faq[open] summary::after { content: "\2212"; }
.fp-dino-faq summary:focus-visible { outline: 3px solid #fff; outline-offset: -6px; }
.fp-dino-faq-a { padding: 0 22px 18px; }
.fp-dino-faq-a p { font-size: 16px !important; color: #fff !important; margin: 0 !important; }

/* Dougal: outline them all, and remember which still need answers. So the
   unanswered ones no longer look different — but their ANSWER still says so in
   words, which is the part that stops a placeholder shipping unnoticed. */
.fp-dino-tbc strong { color: var(--yellow); }

.fp-dino-credit { margin-top: 26px !important; font-size: 13px !important; color: #fff; opacity: .85; text-align: center; }

/* --- Responsive ------------------------------------------------------------ */
@media only screen and (max-width: 1100px) {
	.fp-dino-grid { grid-template-columns: repeat(3, 1fr); }
}

@media only screen and (max-width: 999px) {
	.fp-dino-split { grid-template-columns: 1fr; }
	.fp-dino-split--flip .fp-dino-copy { order: 0; }
	.fp-dino-copy h2 { text-align: center; }
	.fp-dino-grid { grid-template-columns: repeat(2, 1fr); }
	.fp-dino-figure img, .fp-dino-split--flip .fp-dino-figure img { aspect-ratio: 4 / 3; }
}

@media only screen and (max-width: 690px) {
	.fp-dino-pack { grid-template-columns: 1fr; }
	.fp-dino-grid { grid-template-columns: 1fr; }
	.fp-dino-trust { gap: 8px 20px; font-size: 15px; }
	.fp-dino-endshot img:nth-child(3) { display: none; }
	/* Below this the lock-up cannot share a line with four characters. */
	.fp-dino-hero-art { flex-wrap: wrap; }
	.fp-dino-lockup { order: -1; width: 74vw; margin-bottom: 6px; }
}

/* --- Contact: centre the phone and email cards -----------------------------
   Both hold a single pill and nothing else, so centring reads as deliberate
   where the longer cards would not. They are the 2nd and 3rd h5 in the column
   — Address, Phone, Email, FAQ's, Charity, Pre-Book, Lost Property — so the
   pair is addressed by position. Confirmed against the rendered order rather
   than assumed, because a new block above them would shift it. */
.page-id-21960 h5.vc_custom_heading:nth-of-type(2),
.page-id-21960 h5.vc_custom_heading:nth-of-type(2) + .wpb_text_column,
.page-id-21960 h5.vc_custom_heading:nth-of-type(3),
.page-id-21960 h5.vc_custom_heading:nth-of-type(3) + .wpb_text_column {
	text-align: center;
}

/* ===========================================================================
   HOW TO FIND US  (page-id-21630)
   ---------------------------------------------------------------------------
   The same treatment as the Contact page: each h5 becomes a card head and the
   text block after it the body, so Address, Phone, By Bus, By Train and the
   rest read as discrete pieces of information rather than one narrow ribbon of
   text. Links become navy pills — they were brand yellow on the page green,
   which measures 1.55:1 and is effectively unreadable.
   =========================================================================== */

.page-id-21630 {
	--fp-yellow: #fdd215;
	--fp-navy: #12506f;
	--fp-ink: #143d52;
}

.page-id-21630 h5.vc_custom_heading:has(+ .wpb_text_column) {
	background: var(--fp-yellow);
	color: var(--fp-navy) !important;
	font-size: 21px !important;
	font-weight: 800 !important;
	line-height: 1.3 !important;
	margin: 18px 0 0 !important;
	padding: 16px 22px 0;
	border-radius: 16px 16px 0 0;
}

.page-id-21630 h5.vc_custom_heading + .wpb_text_column {
	background: var(--fp-yellow);
	margin: 0 0 6px !important;
	padding: 8px 22px 18px;
	border-radius: 0 0 16px 16px;
}

.page-id-21630 h5.vc_custom_heading + .wpb_text_column,
.page-id-21630 h5.vc_custom_heading + .wpb_text_column p {
	color: var(--fp-ink);
	font-size: 16px;
	line-height: 1.55;
}
.page-id-21630 h5.vc_custom_heading + .wpb_text_column p:last-child { margin-bottom: 0; }

/* Links: navy pill on the yellow card, 8.8:1. */
.page-id-21630 .wpb_text_column a {
	display: inline-block;
	background: var(--fp-navy);
	color: #fff !important;
	font-weight: 700;
	text-decoration: none !important;
	padding: 4px 14px;
	border-radius: 999px;
	line-height: 1.4;
	transition: background-color .15s ease, transform .15s ease;
}
.page-id-21630 .wpb_text_column a:hover,
.page-id-21630 .wpb_text_column a:focus-visible { background: #1b6d95; transform: translateY(-1px); }

/* The address is three SEPARATE links, one per line, so pilling them turned a
   postal address into three stacked buttons. An address is not a call to
   action — the first card keeps plain text. */
.page-id-21630 h5.vc_custom_heading:nth-of-type(1) + .wpb_text_column a {
	display: inline;
	background: none;
	color: var(--fp-ink) !important;
	font-weight: 400;
	padding: 0;
	border-radius: 0;
}
.page-id-21630 h5.vc_custom_heading:nth-of-type(1) + .wpb_text_column a:hover { background: none; transform: none; }

/* "Public Transport" was set at display size, dwarfing the section it heads.
   Bring it back to a section heading, and give the column some breathing room
   — it was a 280px ribbon beside a very wide map. */
.page-id-21630 h2.vc_custom_heading { font-size: 34px !important; margin-top: 26px !important; }

.page-id-21630 .wpb_row .row_col_wrap_12:has(.leaflet-container) {
	display: grid;
	grid-template-columns: 1fr 1.25fr;
	gap: 34px;
	align-items: start;
}
.page-id-21630 .wpb_row .row_col_wrap_12:has(.leaflet-container) > .wpb_column { width: 100%; float: none; padding: 0; }

/* The map was set to a flat 1000px, taller than the column of copy beside it,
   so the page ended on a long run of empty map. Capped and rounded. */
.page-id-21630 .leaflet-container {
	border-radius: 18px;
	height: clamp(420px, 46vw, 620px) !important;
}

/* The copy column is much taller than the map, so the map used to sit at the
   top with a long empty run beneath it. Sticky keeps it beside whichever card
   you are reading. 190px clears the header. */
@media only screen and (min-width: 1000px) {
	.page-id-21630 .row_col_wrap_12:has(.leaflet-container) > .wpb_column:has(.leaflet-container) {
		position: sticky;
		top: 190px;
	}
}

@media only screen and (max-width: 999px) {
	.page-id-21630 .wpb_row .row_col_wrap_12:has(.leaflet-container) { grid-template-columns: 1fr; }
}

/* ===========================================================================
   VACANCIES  (page-id-22603)
   ---------------------------------------------------------------------------
   Dougal: "bullet points on centred text, which never looks good."

   He is right, and it is worse than untidy — a centred bullet list has no
   common left edge, so the markers drift away from their own text and the eye
   has nothing to track down. The body copy and every list are left-aligned;
   headings stay centred, which is what the column was actually designed for.
   =========================================================================== */

.page-id-22603 .wpb_text_column,
.page-id-22603 .wpb_text_column p,
.page-id-22603 .wpb_text_column ul,
.page-id-22603 .wpb_text_column ol,
.page-id-22603 .wpb_text_column li {
	text-align: left !important;
}

.page-id-22603 .wpb_text_column ul,
.page-id-22603 .wpb_text_column ol {
	margin: 12px 0 16px !important;
	padding-left: 22px !important;
	list-style-position: outside !important;
}

.page-id-22603 .wpb_text_column li {
	margin-bottom: 7px !important;
	line-height: 1.55;
}

/* Equal top alignment, so the three columns start on one line rather than
   floating at different heights. */
.page-id-22603 .wpb_row .row_col_wrap_12 > .wpb_column > .vc_column-inner { padding-top: 0 !important; }

/* ===========================================================================
   DISABILITIES AND ACCESSIBILITY  (page-id-21352)
   Same two problems: drifting alignment and lists with no left edge.
   =========================================================================== */

.page-id-21352 .wpb_text_column,
.page-id-21352 .wpb_text_column p,
.page-id-21352 .wpb_text_column ul,
.page-id-21352 .wpb_text_column li {
	text-align: left !important;
}

.page-id-21352 .wpb_text_column ul {
	margin: 12px 0 16px !important;
	padding-left: 22px !important;
	list-style-position: outside !important;
}

.page-id-21352 .wpb_text_column li { margin-bottom: 7px !important; line-height: 1.55; }

/* Section heads were running at three different sizes down the page. */
.page-id-21352 h2.vc_custom_heading { font-size: 34px !important; }
.page-id-21352 h3.vc_custom_heading { font-size: 26px !important; }

/* Tighten the vertical rhythm. The page carries three empty spacer rows and a
   240px heading row between the banner and the first line of content, so you
   scrolled through roughly half a screen of green before reading anything. */
.page-id-21630 .wpb_row:not(:has(*:not(.row_col_wrap_12):not(.wpb_column):not(.vc_column-inner):not(.wpb_wrapper))) {
	min-height: 0;
}
.page-id-21630 .wpb_row { margin-bottom: 0 !important; }
.page-id-21630 .container-wrap .wpb_row:nth-child(2),
.page-id-21630 .container-wrap .wpb_row:nth-child(4) { display: none; }
.page-id-21630 .container-wrap .wpb_row:nth-child(3) { padding: 18px 0 6px !important; }

/* ===========================================================================
   WOOCOMMERCE — shop, category listings and the single product page
   ---------------------------------------------------------------------------
   Products sat straight on the page green with no card, images at whatever
   height they came out at, and titles and prices left ragged. Everything here
   is presentation: the shop sells real tickets, so nothing touches price,
   stock, variations or checkout.

   Palette is the site's own — cream #fdf3cf cards, navy #12506f type, brand
   yellow #fdd215 for anything clickable. No new colours.
   =========================================================================== */

.fp-shop {
	--fp-yellow: #fdd215;
	--fp-navy: #12506f;
	--fp-cream: #fdf3cf;
	--fp-ink: #143d52;
}

/* --- The grid --------------------------------------------------------------
   WooCommerce floats its list items, which is what left the last row hanging
   and the cards at unequal heights. Grid gives equal columns and equal rows. */
.fp-shop ul.products {
	display: grid !important;
	grid-template-columns: repeat(4, 1fr);
	gap: 26px;
	margin: 0 0 40px !important;
	padding: 0 !important;
	list-style: none !important;
}

.fp-shop ul.products::before,
.fp-shop ul.products::after { content: none !important; }

/* NOTE THE SELECTOR WEIGHT. Salient's woocommerce.css carries
   `body.woocommerce:not(.single-product) ul.products[data-n-desktop…] li.product
   { width: 23.49% !important }` — five class-level parts and three elements. A
   plain `.fp-shop ul.products li.product` loses to it, and because the
   percentage then resolves against the GRID TRACK rather than the container,
   every card came out 70px wide with one word per line. Two attribute
   selectors put this above it. Enumerated the matching rules to find it. */
body.woocommerce.fp-shop ul.products[class][data-n-desktop-columns] li.product,
.fp-shop ul.products li.product {
	width: 100% !important;
	margin: 0 !important;
	float: none !important;
	clear: none !important;
	display: flex;
	flex-direction: column;
	background: var(--fp-cream);
	border-radius: 20px;
	overflow: hidden;
	box-shadow: 0 8px 20px rgba(0, 0, 0, .16);
	transition: transform .15s ease, box-shadow .15s ease;
}

.fp-shop ul.products li.product:hover {
	transform: translateY(-3px);
	box-shadow: 0 12px 26px rgba(0, 0, 0, .22);
}

/* --- The image -------------------------------------------------------------
   One shape for every card. These are ticket artworks of assorted sizes, so
   without this the row heights are set by whichever image happens to be
   tallest. */
.fp-shop ul.products li.product img {
	width: 100% !important;
	height: auto !important;
	/* SQUARE. 16:10 was cutting the top and bottom off the ticket artwork —
	   these are portrait-ish designs with the date at the top, which is the
	   part you cannot afford to lose. */
	aspect-ratio: 1 / 1;
	object-fit: cover;
	margin: 0 !important;
	border-radius: 0 !important;
	display: block;
}

/* --- The text --------------------------------------------------------------
   Padded inside the card, and the button pushed to the bottom with margin-top
   auto so every button in a row lines up regardless of title length. */
/* NOTE ON THE :not() LIST. Specificity inside :not() is that of its most
   specific argument, so `:not(a.button)` contributes a whole class + element to
   this selector. That made this rule heavier than the later, more explicit
   `…li.product > a:first-child` and it silently kept a 20px inset on the shop
   root's picture. `a` is excluded here and its CONTENTS are padded instead, so
   the image can reach both edges of the card. */
.fp-shop ul.products li.product > *:not(img):not(a):not(.cm-cat-button) {
	padding-left: 20px !important;
	padding-right: 20px !important;
}

.fp-shop ul.products li.product > a:not(.button):not(.cm-cat-button) > *:not(img) {
	padding-left: 20px !important;
	padding-right: 20px !important;
}

.fp-shop ul.products li.product .woocommerce-loop-product__title,
.fp-shop ul.products li.product h2,
.fp-shop ul.products li.product h3 {
	font-size: 18px !important;
	font-weight: 800 !important;
	line-height: 1.3 !important;
	color: var(--fp-navy) !important;
	margin: 16px 0 8px !important;
	padding-left: 20px;
	padding-right: 20px;
}

.fp-shop ul.products li.product .price,
.fp-shop ul.products li.product .price * {
	color: var(--fp-ink) !important;
	font-size: 17px !important;
	font-weight: 700 !important;
}

.fp-shop ul.products li.product .price { margin: 0 0 16px !important; }

/* WooCommerce appends "Price range" / suffix text on variable products, which
   doubled the price line height and read as a stray fragment. */
.fp-shop ul.products li.product .price small,
.fp-shop ul.products li.product .price .woocommerce-price-suffix {
	display: block;
	font-size: 13px !important;
	font-weight: 400 !important;
	opacity: .75;
}

.fp-shop ul.products li.product p { color: var(--fp-ink); font-size: 15px; line-height: 1.5; }

/* --- The button ------------------------------------------------------------
   The site's own shape and colour: yellow pill, navy label, 6.0:1. Full width
   at the foot of the card so it reads as the card's action rather than a stray
   link. */
/* THE SITE'S ACTUAL BUTTON, sampled off a nectar-button on the home page
   rather than approximated: #fdd215 with BLACK text and a 30px radius, going to
   the site cyan #2da2d9 with WHITE text on hover, and no shadow. My first pass
   used navy text and a lighter-yellow hover, which matched nothing. */
.fp-shop ul.products li.product a.button,
.fp-shop ul.products li.product a.cm-cat-button {
	margin: auto 20px 20px !important;
	display: block;
	text-align: center;
	background: var(--fp-yellow) !important;
	color: #000 !important;
	font-weight: 800 !important;
	font-size: 17px !important;
	padding: 14px 22px !important;
	border-radius: 30px !important;
	border: none !important;
	box-shadow: none !important;
	transition: background-color .15s ease, color .15s ease;
}

.fp-shop ul.products li.product a.button:hover,
.fp-shop ul.products li.product a.button:focus-visible,
.fp-shop ul.products li.product a.cm-cat-button:hover,
.fp-shop ul.products li.product a.cm-cat-button:focus-visible {
	background: #2da2d9 !important;
	color: #fff !important;
	transform: none !important;
}

/* WooCommerce's "added to cart" tick link, which otherwise stacks a second
   full-width button under the first. */
.fp-shop ul.products li.product a.added_to_cart {
	margin: 0 20px 16px !important;
	color: var(--fp-navy) !important;
	font-weight: 700;
	font-size: 14px;
	text-align: center;
	display: block;
}

/* --- Listing furniture ------------------------------------------------------ */
.fp-shop .woocommerce-result-count,
.fp-shop .woocommerce-ordering select { color: #fff; }
.fp-shop .woocommerce-breadcrumb,
.fp-shop .woocommerce-breadcrumb a { color: #fff !important; }

.fp-shop .term-description,
.fp-shop .page-description { color: #fff; }

@media only screen and (max-width: 1200px) {
	.fp-shop ul.products { grid-template-columns: repeat(3, 1fr); }
}
@media only screen and (max-width: 999px) {
	.fp-shop ul.products { grid-template-columns: repeat(2, 1fr); }
}
@media only screen and (max-width: 600px) {
	.fp-shop ul.products { grid-template-columns: 1fr; }
}

/* ===========================================================================
   Single product
   ---------------------------------------------------------------------------
   The buying controls were the weakest part: a dark green select on green, a
   quantity stepper in near-black, and an olive "Add To Cart" that read as
   disabled. All of it now sits in one cream panel so the thing you came to do
   is unmistakable.
   =========================================================================== */

.fp-shop-single div.product .summary {
	/* The main brand yellow, not the tint. Dougal, on the tint: "I don't want
	   you to keep using this light yellow — if you need to use a yellow, use
	   the main yellow." The tint is kept for one thing only on this page, the
	   INACTIVE tab, which he named as the exception. Navy body copy on #fdd215
	   measures 6.0:1. */
	background: var(--fp-yellow);
	border-radius: 20px;
	padding: 28px 30px 30px;
}

.fp-shop-single div.product .summary,
.fp-shop-single div.product .summary p,
.fp-shop-single div.product .summary li,
.fp-shop-single div.product .summary label,
.fp-shop-single div.product .summary th { color: var(--fp-ink) !important; }

.fp-shop-single div.product .summary .product_title {
	color: var(--fp-navy) !important;
	font-size: 34px !important;
	line-height: 1.15 !important;
	margin-bottom: 10px !important;
}

.fp-shop-single div.product .summary .price,
.fp-shop-single div.product .summary .price * {
	color: var(--fp-navy) !important;
	font-weight: 800 !important;
}

.fp-shop-single div.product .summary h2,
.fp-shop-single div.product .summary h3,
.fp-shop-single div.product .summary strong { color: var(--fp-navy) !important; }

/* Product image: same rounding as the rest of the site. */
.fp-shop-single div.product .woocommerce-product-gallery img { border-radius: 18px; }

/* --- Form controls ---------------------------------------------------------- */
.fp-shop-single div.product .summary select,
.fp-shop-single div.product .summary input[type="number"],
.fp-shop-single div.product .summary input[type="text"] {
	background: #fff !important;
	color: var(--fp-navy) !important;
	border: 2px solid rgba(18, 80, 111, .18) !important;
	border-radius: 10px !important;
	height: 52px !important;
	padding: 0 14px !important;
	font-size: 16px !important;
	box-shadow: none !important;
}

.fp-shop-single div.product .summary select:focus,
.fp-shop-single div.product .summary input:focus {
	border-color: var(--fp-navy) !important;
	box-shadow: 0 0 0 3px rgba(18, 80, 111, .15) !important;
	outline: none;
}

/* Salient's round +/- steppers were dark green on green. */
.fp-shop-single div.product .quantity .minus,
.fp-shop-single div.product .quantity .plus {
	background: var(--fp-navy) !important;
	color: #fff !important;
	border: none !important;
}

/* --- Add to cart ------------------------------------------------------------ */
.fp-shop-single div.product button.single_add_to_cart_button,
.fp-shop-single div.product .single_add_to_cart_button {
	background: var(--fp-yellow) !important;
	color: #000 !important;
	border: none !important;
	border-radius: 30px !important;
	padding: 20px 40px !important;
	font-size: 20px !important;
	font-weight: 800 !important;
	box-shadow: none !important;
	transition: background-color .15s ease, color .15s ease;
}

/* The body classes are stacked deliberately. WooCommerce carries a hover rule
   — `.woocommerce button[type="submit"][name="calc_shipping"]:hover, …` — whose
   selector list includes a part generic enough to match this button, at
   `#333 !important`. Enumerating the cascade with CDP's forcePseudoState (a
   plain :hover cannot be read any other way) showed it sitting LAST in the
   matched list, i.e. winning. Stacking the body classes puts this above it. */
body.fp-shop.fp-shop-single.woocommerce-page div.product button.single_add_to_cart_button:hover:not(:disabled):not(.disabled),
body.fp-shop.fp-shop-single.woocommerce-page div.product button.single_add_to_cart_button:focus-visible {
	background: #2da2d9 !important;
	color: #fff !important;
	transform: none !important;
}

/* --- Meta ------------------------------------------------------------------
   The tag list ran to twenty-odd yellow links at low contrast and dominated the
   page. Kept for SEO, but made small and quiet, which is what it is worth. */
.fp-shop-single div.product .product_meta {
	margin-top: 22px;
	padding-top: 16px;
	border-top: 2px solid rgba(18, 80, 111, .12);
	font-size: 14px;
}

.fp-shop-single div.product .product_meta,
.fp-shop-single div.product .product_meta span { color: #5c7480 !important; }

.fp-shop-single div.product .product_meta a {
	color: var(--fp-navy) !important;
	text-decoration: underline;
	text-underline-offset: 2px;
}

.fp-shop-single div.product .product_meta .tagged_as { display: block; margin-top: 6px; line-height: 1.6; }

/* Tabs and related products sit outside the panel, on the page green. */
.fp-shop-single .woocommerce-tabs .panel { color: #fff; }
.fp-shop-single .related > h2,
.fp-shop-single .up-sells > h2 { color: #fff !important; }

@media only screen and (max-width: 690px) {
	.fp-shop-single div.product .summary { padding: 20px 18px 22px; }
	.fp-shop-single div.product .summary .product_title { font-size: 27px !important; }
}

/* --- Shop root: category tiles ---------------------------------------------
   These are product CATEGORIES, and WooCommerce wraps the whole tile in one
   anchor with the full category description inside it. Happy's Circus carries
   a long paragraph, which made that tile 1,210px tall on its own.

   The description is clamped to three lines rather than removed: it is useful
   at a glance, and the full text is on the category page where there is room.
   Clamping in CSS rather than trimming in PHP because the markup is one anchor
   with no wrapper to hook, and line-clamp adapts to the column width. */
.fp-shop ul.products li.product > a:first-child {
	display: flex;
	flex-direction: column;
	text-decoration: none !important;
}

.fp-shop ul.products li.product > a:first-child > *:not(img) {
	padding-left: 20px;
	padding-right: 20px;
}

.fp-shop ul.products li.product > a:first-child p {
	display: -webkit-box;
	-webkit-line-clamp: 3;
	-webkit-box-orient: vertical;
	overflow: hidden;
	margin: 0 0 16px !important;
	color: var(--fp-ink);
	font-size: 15px;
	line-height: 1.5;
}

/* --- Make the button part of the card, not a hover reveal -------------------
   Salient's "classic" product style positions the add-to-cart ABSOLUTELY and
   translates it 50px down, so it only appears on hover — measured
   position:absolute with transform matrix(1,0,0,1,0,50.5). On a listing of
   ticket dates that hides the one control people are looking for, and it is
   invisible entirely on touch. Put it back in the flow. */
.fp-shop ul.products li.product .product-add-to-cart,
.fp-shop ul.products li.product .product-wrap {
	position: static !important;
	opacity: 1 !important;
	transform: none !important;
	height: auto !important;
	overflow: visible !important;
}

/* The add-to-cart lives INSIDE .product-wrap, alongside the image, so simply
   un-hiding it left the button sitting between the picture and the title.
   display:contents dissolves that wrapper so the image, the button, the title
   and the price all become flex children of the card — then the button can be
   ordered last and pushed to the foot, which is what makes every button in a
   row line up regardless of how long the titles are. */
.fp-shop ul.products li.product .product-wrap { display: contents !important; }

.fp-shop ul.products li.product .product-add-to-cart {
	order: 99;
	margin: auto 0 0 !important;
	/* The inset lives here rather than on the button, so the button can be
	   full-width inside it and still clear the card's rounded corner. */
	padding: 0 20px 20px !important;
	width: 100%;
	box-sizing: border-box;
}

.fp-shop ul.products li.product .product-add-to-cart a.button {
	margin: 0 !important;
	width: 100%;
}

.fp-shop ul.products li.product a.button,
.fp-shop ul.products li.product a.cm-cat-button {
	position: static !important;
	transform: none !important;
	opacity: 1 !important;
}

.fp-shop ul.products li.product a.button:hover,
.fp-shop ul.products li.product a.cm-cat-button:hover {
	transform: translateY(-1px) !important;
}

/* The variation select stayed dark green on the cream panel. The bespoke
   style.css carries `.woocommerce div.product form.cart .variations select`
   with background-color !important — four class-level parts and three elements,
   which outweighs a plain `.summary select`. Matched with one more class.
   Enumerated the rules rather than adding !important and hoping. */
.fp-shop-single.woocommerce div.product form.cart .variations select {
	background-color: #fff !important;
	color: var(--fp-navy) !important;
	border: 2px solid rgba(18, 80, 111, .18) !important;
	border-radius: 10px !important;
	height: 52px !important;
	padding: 0 14px !important;
	font-size: 16px !important;
}

/* The variations table is a bare <table> with no styling of its own. */
.fp-shop-single div.product form.cart .variations th,
.fp-shop-single div.product form.cart .variations td {
	padding: 0 0 10px !important;
	border: none !important;
	background: none !important;
}

.fp-shop-single div.product form.cart .variations .label label {
	font-weight: 800;
	color: var(--fp-navy) !important;
	font-size: 16px;
}

/* "Clear" sits under the select and was an unstyled blue link. */
.fp-shop-single div.product .reset_variations {
	color: var(--fp-navy) !important;
	font-size: 14px;
	text-decoration: underline;
}

/* --- Shop root: make more of the category name -----------------------------
   These two tiles ARE the shop's front door, so the name should carry rather
   than sit at the same weight as a ticket date in a list of eight. */
.woocommerce-shop.fp-shop ul.products li.product .woocommerce-loop-product__title,
.woocommerce-shop.fp-shop ul.products li.product h2,
.woocommerce-shop.fp-shop ul.products li.product > a:first-child h2 {
	font-size: 26px !important;
	line-height: 1.2 !important;
	margin: 18px 0 10px !important;
}

/* --- Related products ------------------------------------------------------
   Salient lays these out with flex and its own widths, which overrode the grid
   and left them as bare images on the green while every other listing on the
   site had become a card. */
.fp-shop .related ul.products,
.fp-shop .up-sells ul.products,
.fp-shop .cross-sells ul.products {
	display: grid !important;
	grid-template-columns: repeat(4, 1fr);
	gap: 22px;
}

body.woocommerce.fp-shop .related ul.products li.product,
body.woocommerce.fp-shop .up-sells ul.products li.product {
	width: 100% !important;
	margin: 0 !important;
	float: none !important;
}

.fp-shop .related > h2,
.fp-shop .up-sells > h2 {
	font-size: 30px !important;
	margin-bottom: 22px !important;
}

@media only screen and (max-width: 1200px) {
	.fp-shop .related ul.products,
	.fp-shop .up-sells ul.products { grid-template-columns: repeat(3, 1fr); }
}
@media only screen and (max-width: 999px) {
	.fp-shop .related ul.products,
	.fp-shop .up-sells ul.products { grid-template-columns: repeat(2, 1fr); }
}
@media only screen and (max-width: 600px) {
	.fp-shop .related ul.products,
	.fp-shop .up-sells ul.products { grid-template-columns: 1fr; }
}

/* ===========================================================================
   Product tabs — Description / Additional information
   ---------------------------------------------------------------------------
   WooCommerce ships these as an unstyled list of links above a bare panel, so
   on the page green they read as two stray words with text underneath. Turned
   into real tabs: the selected one is the brand yellow and joins the panel
   below it, the other is a quieter cream.
   =========================================================================== */

.fp-shop-single .woocommerce-tabs {
	margin-top: 44px;
}

.fp-shop-single .woocommerce-tabs ul.tabs {
	display: flex !important;
	flex-wrap: wrap;
	gap: 8px;
	list-style: none !important;
	margin: 0 !important;
	padding: 0 !important;
	border: none !important;
}

.fp-shop-single .woocommerce-tabs ul.tabs::before,
.fp-shop-single .woocommerce-tabs ul.tabs::after { content: none !important; display: none !important; }

.fp-shop-single .woocommerce-tabs ul.tabs li {
	margin: 0 !important;
	padding: 0 !important;
	background: none !important;
	border: none !important;
	border-radius: 0 !important;
}

.fp-shop-single .woocommerce-tabs ul.tabs li::before,
.fp-shop-single .woocommerce-tabs ul.tabs li::after { content: none !important; display: none !important; }

/* The bespoke style.css sets font-size:46px !important on these tabs, so a
   plain rule left them at display size with no padding — two enormous words
   floating above the panel. Matched with more class-level parts. */
.fp-shop-single.woocommerce div.product .woocommerce-tabs ul.tabs li a,
.fp-shop-single .woocommerce-tabs ul.tabs li a {
	display: block;
	background: var(--fp-cream);
	color: var(--fp-navy) !important;
	font-weight: 800;
	font-size: 17px !important;
	line-height: 1.3 !important;
	padding: 14px 26px !important;
	border-radius: 14px 14px 0 0;
	text-decoration: none !important;
	opacity: .75;
	transition: background-color .15s ease, opacity .15s ease;
}

.fp-shop-single .woocommerce-tabs ul.tabs li a:hover { opacity: 1; }

.fp-shop-single .woocommerce-tabs ul.tabs li.active a {
	background: var(--fp-yellow);
	opacity: 1;
}

/* The panel picks up where the selected tab leaves off. */
.fp-shop-single .woocommerce-tabs .panel {
	/* The proper brand yellow, not the tint. Dougal: if a yellow is needed, use
	   the main one. Navy on #fdd215 is 6.0:1. */
	background: var(--fp-yellow);
	border-radius: 0 18px 18px 18px;
	padding: 30px 32px 32px !important;
	margin: 0 !important;
	color: var(--fp-ink) !important;
}

.fp-shop-single .woocommerce-tabs .panel,
.fp-shop-single .woocommerce-tabs .panel p,
.fp-shop-single .woocommerce-tabs .panel li,
.fp-shop-single .woocommerce-tabs .panel td,
.fp-shop-single .woocommerce-tabs .panel th { color: var(--fp-ink) !important; }

.fp-shop-single .woocommerce-tabs .panel h1,
.fp-shop-single .woocommerce-tabs .panel h2,
.fp-shop-single .woocommerce-tabs .panel h3,
.fp-shop-single .woocommerce-tabs .panel strong { color: var(--fp-navy) !important; }

/* Readable measure and rhythm — it was running the full width of the page. */
.fp-shop-single .woocommerce-tabs .panel > * { max-width: 74ch; }
.fp-shop-single .woocommerce-tabs .panel p { line-height: 1.65; margin-bottom: 14px; }
.fp-shop-single .woocommerce-tabs .panel ul { padding-left: 22px; margin: 12px 0 16px; }
.fp-shop-single .woocommerce-tabs .panel li { margin-bottom: 7px; line-height: 1.6; }

/* "Additional information" is a plain attributes table with no styling. */
.fp-shop-single .woocommerce-tabs .panel table.shop_attributes {
	width: 100%;
	max-width: 74ch;
	border-collapse: collapse;
}

.fp-shop-single .woocommerce-tabs .panel table.shop_attributes th,
.fp-shop-single .woocommerce-tabs .panel table.shop_attributes td {
	text-align: left;
	padding: 12px 14px !important;
	border: none !important;
	border-bottom: 2px solid rgba(18, 80, 111, .12) !important;
}

.fp-shop-single .woocommerce-tabs .panel table.shop_attributes th {
	font-weight: 800;
	color: var(--fp-navy) !important;
	width: 34%;
}

.fp-shop-single .woocommerce-tabs .panel table.shop_attributes p { margin: 0 !important; }

@media only screen and (max-width: 690px) {
	.fp-shop-single .woocommerce-tabs ul.tabs li a { padding: 12px 18px !important; font-size: 15px; }
	.fp-shop-single .woocommerce-tabs .panel { padding: 22px 18px 24px !important; border-radius: 0 14px 14px 14px; }
}

/* Salient toggles inside a product description.
   Their headings are white — set for the page green they normally sit on — so
   on the cream tab panel they were invisible: three accordions whose titles
   simply were not there. Navy, and the +/- marker with them. */
.fp-shop-single .woocommerce-tabs .panel .toggle > h3 > a,
.fp-shop-single .woocommerce-tabs .panel a.toggle-heading,
.fp-shop-single .woocommerce-tabs .panel .toggle-title a {
	color: var(--fp-navy) !important;
	font-weight: 800;
}

/* The marker is a ring with two bars drawn by ::before and ::after. Colouring
   the RING's background as well filled it in and turned a +/- into a solid
   dot — only the bars should take the colour. */
.fp-shop-single .woocommerce-tabs .panel .toggle > h3 > a i {
	border-color: var(--fp-navy) !important;
	background-color: transparent !important;
}

.fp-shop-single .woocommerce-tabs .panel .toggle > h3 > a i::before,
.fp-shop-single .woocommerce-tabs .panel .toggle > h3 > a i::after {
	background-color: var(--fp-navy) !important;
	border-color: var(--fp-navy) !important;
}

/* The rule under each toggle was a pale line for a dark ground. */
.fp-shop-single .woocommerce-tabs .panel .toggle,
.fp-shop-single .woocommerce-tabs .panel .toggle > h3 {
	border-color: rgba(18, 80, 111, .18) !important;
}

.fp-shop-single .woocommerce-tabs .panel .toggle .toggle-content,
.fp-shop-single .woocommerce-tabs .panel .toggle .toggle-content * {
	color: var(--fp-ink) !important;
}

/* --- Tabs, final specificity pass ------------------------------------------
   Salient's product-single.css carries
   `.woocommerce div.product .woocommerce-tabs .full-width-content[data-tab-style*=fullwidth] ul.tabs li a { padding: 0 !important }`
   — six class-level parts and five elements. Two earlier attempts lost to it,
   which is why the tabs kept rendering as bare words with no padding and the
   selected one never took the yellow.

   This stacks the classes that are genuinely on the body and the wrapper to get
   above it, rather than guessing at another !important. */
body.fp-shop.fp-shop-single.woocommerce.woocommerce-page div.product .woocommerce-tabs.wc-tabs-wrapper ul.tabs li a {
	padding: 14px 26px !important;
	background: var(--fp-cream) !important;
	border-radius: 14px 14px 0 0 !important;
	font-size: 17px !important;
	line-height: 1.3 !important;
	color: var(--fp-navy) !important;
	opacity: .75;
}

body.fp-shop.fp-shop-single.woocommerce.woocommerce-page div.product .woocommerce-tabs.wc-tabs-wrapper ul.tabs li.active a {
	background: var(--fp-yellow) !important;
	opacity: 1;
}

body.fp-shop.fp-shop-single.woocommerce.woocommerce-page div.product .woocommerce-tabs.wc-tabs-wrapper ul.tabs li a:hover {
	opacity: 1;
}

/* Add to cart, disabled.
   WooCommerce disables this until a variation is chosen, which is right — but
   the default left it a washed-out yellow that reads as a broken button rather
   than one waiting for you. Make the state deliberate. */

/* Hovering a button Woo has disabled must not turn it dark grey — see the note
   on the enabled hover above for why this needs the stacked body classes. */
body.fp-shop.fp-shop-single.woocommerce-page div.product button.single_add_to_cart_button.disabled:hover,
body.fp-shop.fp-shop-single.woocommerce-page div.product button.single_add_to_cart_button:disabled:hover {
	background: #fff !important;
	color: #7b7b74 !important;
	transform: none !important;
}

/* --- Tabs, matching the panel ----------------------------------------------
   Selected tab is the proper yellow so it reads as the front edge of the panel
   below it; the unselected one stays the light tint. The label needed real
   padding — Salient's product-single.css zeroes it, so this repeats the same
   heavy selector used above rather than hoping a lighter one wins. */
body.fp-shop.fp-shop-single.woocommerce.woocommerce-page div.product .woocommerce-tabs.wc-tabs-wrapper ul.tabs li a {
	padding: 16px 30px !important;
	background: var(--fp-cream) !important;
	color: var(--fp-navy) !important;
	border-radius: 14px 14px 0 0 !important;
	font-size: 17px !important;
	line-height: 1.3 !important;
	opacity: 1;
}

body.fp-shop.fp-shop-single.woocommerce.woocommerce-page div.product .woocommerce-tabs.wc-tabs-wrapper ul.tabs li.active a {
	background: var(--fp-yellow) !important;
}

body.fp-shop.fp-shop-single.woocommerce.woocommerce-page div.product .woocommerce-tabs.wc-tabs-wrapper ul.tabs li a:hover {
	background: #2da2d9 !important;
	color: #fff !important;
}

/* Panel contents sit on the proper yellow now. */
.fp-shop-single .woocommerce-tabs .panel,
.fp-shop-single .woocommerce-tabs .panel p,
.fp-shop-single .woocommerce-tabs .panel li,
.fp-shop-single .woocommerce-tabs .panel td,
.fp-shop-single .woocommerce-tabs .panel th,
.fp-shop-single .woocommerce-tabs .panel .toggle .toggle-content,
.fp-shop-single .woocommerce-tabs .panel .toggle .toggle-content * { color: #143d52 !important; }

.fp-shop-single .woocommerce-tabs .panel table.shop_attributes th,
.fp-shop-single .woocommerce-tabs .panel table.shop_attributes td {
	border-bottom-color: rgba(18, 80, 111, .22) !important;
}

.fp-shop-single .woocommerce-tabs .panel .toggle,
.fp-shop-single .woocommerce-tabs .panel .toggle > h3 {
	border-color: rgba(18, 80, 111, .28) !important;
}

/* Any other button in the shop — cart, checkout, continue shopping. */
.fp-shop .woocommerce a.button,
.fp-shop .woocommerce button.button,
.fp-shop .woocommerce input.button,
.fp-shop .woocommerce a.button.alt,
.fp-shop .woocommerce button.button.alt {
	background: var(--fp-yellow) !important;
	color: #000 !important;
	border-radius: 30px !important;
	font-weight: 800 !important;
	box-shadow: none !important;
	transition: background-color .15s ease, color .15s ease;
}

.fp-shop .woocommerce a.button:hover,
.fp-shop .woocommerce button.button:hover,
.fp-shop .woocommerce input.button:hover,
.fp-shop .woocommerce a.button.alt:hover,
.fp-shop .woocommerce button.button.alt:hover {
	background: #2da2d9 !important;
	color: #fff !important;
}

/* --- Shop root: image flush to the card ------------------------------------
   The category tile's picture carried its own rounding and shadow, so it sat
   as a framed object inside the card with the cream showing down both sides.
   It should be the top of the card, edge to edge, like the product cards. */
.woocommerce-shop.fp-shop ul.products li.product img {
	border-radius: 0 !important;
	box-shadow: none !important;
	width: 100% !important;
	max-width: none !important;
	aspect-ratio: 1 / 1;
	object-fit: cover;
	margin: 0 !important;
	padding: 0 !important;
}

.woocommerce-shop.fp-shop ul.products li.product > a:first-child > img,
.woocommerce-shop.fp-shop ul.products li.product .product-wrap img {
	padding-left: 0 !important;
	padding-right: 0 !important;
}

/* The frame either side of the shop-root picture was NOT on the image — it was
   `padding: 0 20px` on the <a> that wraps the whole category tile. Zeroing it
   on the anchor and putting the padding back on the text below is what makes
   the picture reach both edges, as it does on the product cards. */
.woocommerce-shop.fp-shop ul.products li.product > a:first-child {
	padding: 0 !important;
	display: block;
}

.woocommerce-shop.fp-shop ul.products li.product > a:first-child > h2,
.woocommerce-shop.fp-shop ul.products li.product > a:first-child > .cat-description {
	padding-left: 20px;
	padding-right: 20px;
}

/* The description is trimmed in PHP (includes/shop.php) rather than clamped
   here — see the note there for why a line-clamp cannot work on this markup. */
.woocommerce-shop.fp-shop ul.products li.product .cat-description {
	margin-bottom: 18px !important;
}

/* ===========================================================================
   DISABILITIES AND ACCESSIBILITY — the pictures
   Three faults, one treatment.

   1. The images were three different heights in one row (163/194/163), so the
      text beneath them started on three different lines.
   2. The middle one was `object-fit: cover` at a height its aspect ratio does
      not give, so it was CROPPED — which is why it looked like the one without
      a shadow. The shadow was there; the picture had simply been cut to the
      edge of it.
   3. The three "Accessibility & Disabilities" panels are 1414x1000 detail
      graphics rendered 345px wide. At that size the body text is about four
      pixels tall — unreadable, and cropped as well.

   The frame is the contact-page card, verbatim: 8px #fdd215, 20px radius,
   #8ab13e plate, the same shadow. `contain` on a green plate is what lets a
   short or transparent picture PAD rather than stretch or crop, which is what
   Dougal asked for.
   =========================================================================== */

.page-id-21352 .img-with-aniamtion-wrap {
	border-radius: 20px;
	border: 8px solid #fdd215;
	background: #8ab13e;
	box-shadow: 0 8px 13px 6px rgb(0 0 0 / 20%);
	overflow: hidden;
}

/* Salient's own 16px inset inside the wrap, plus its per-image shadow, both go:
   the frame now carries the edge and the shadow. */
.page-id-21352 .img-with-aniamtion-wrap .hover-wrap,
.page-id-21352 .img-with-aniamtion-wrap .inner { padding: 0 !important; }

.page-id-21352 .img-with-aniamtion-wrap img {
	display: block;
	width: 100% !important;
	max-width: none !important;
	box-shadow: none !important;
	border-radius: 0 !important;
	margin: 0 !important;
	background: #8ab13e;
}

/* The three tiles at the top of the page: one height, nothing cropped. Matched
   on the filename rather than on nth-child so re-ordering the page cannot move
   the rule onto the wrong row. */
.page-id-21352 .wpb_row:has(img[src*="Website-Tiles-Size"]) .img-with-aniamtion-wrap img {
	height: 190px;
	object-fit: contain;
	padding: 8px;
}

/* The infographics. Three across is the reason they cannot be read, so they go
   one across — at the full content width the 1414px artwork renders around
   1140px and the captions are legible. An unreadable picture on an
   accessibility page is worse than a tall one. */
.page-id-21352 .wpb_row:has(img[src*="Accessibility-and-Disability"]) .row_col_wrap_12 > .wpb_column {
	width: 100% !important;
	float: none !important;
	margin: 0 0 26px !important;
}

.page-id-21352 .wpb_row:has(img[src*="Accessibility-and-Disability"]) .img-with-aniamtion-wrap img {
	/* aspect-ratio:auto is the one that matters. A rule further up this file
	   puts 16/9 on every image in a sm-3/4/6 column, which held the box at
	   1215x684 while the artwork is 1414x1000 — so `contain` fitted to the
	   HEIGHT and left green bars down both sides. Releasing the ratio lets the
	   picture set its own height. */
	aspect-ratio: auto !important;
	height: auto !important;
	object-fit: contain;
	padding: 6px;
}

/* The video still is letterboxed in the source file, so `contain` would only
   add green to black bars. It keeps the frame and its own proportions. */
.page-id-21352 .img-with-aniamtion-wrap:has(a) img { height: auto; object-fit: contain; }

/* The description is authored as WPBakery, and a .wpb_row carries a max-width
   computed from the theme's own content column — 874px. Dropped into a 1256px
   tab panel that left about 380px of dead yellow down the right-hand side. The
   panel IS the container here, so the row fills it. */
.fp-shop-single .woocommerce-tabs .panel .wpb_row {
	max-width: none !important;
	margin-left: 0 !important;
	margin-right: 0 !important;
	padding-left: 0 !important;
	padding-right: 0 !important;
}

.fp-shop-single .woocommerce-tabs .panel .row_col_wrap_12 { margin-left: 0 !important; }

/* Tab labels in the site's weight — they were Salient's 400 against a page
   where every other label is 800. */
body.fp-shop.fp-shop-single.woocommerce.woocommerce-page div.product .woocommerce-tabs.wc-tabs-wrapper ul.tabs li a {
	font-weight: 800 !important;
	letter-spacing: 0 !important;
}

/* The three download buttons in the right-hand column were three different
   widths, one of them wrapping to two lines, which is most of why the column
   read as untidy. One width each, stacked. */
.page-id-21352 .nectar-button,
.page-id-21352 a.nectar-button {
	display: block !important;
	width: 100% !important;
	text-align: center !important;
	margin: 0 0 14px !important;
	box-sizing: border-box;
}

/* --- The stray "Slide Left & Right" banner ---------------------------------
   style.css line 953 hangs that hint off `.flickity-viewport:before` with no
   scope at all, so it appears above EVERY Flickity carousel on the site. On a
   product page that is a single, un-slideable image with a caption telling you
   to slide it. Same class of fault as the unscoped .flickity-viewport height
   rules already noted in CLAUDE.md, and the same file.

   Suppressed across WooCommerce only. It still reads correctly on the card
   carousels, which genuinely do scroll, so those are left alone — but the rule
   wants scoping properly at source once all 15 carousels can be checked in one
   sitting. */
.fp-shop .flickity-viewport::before { content: none !important; display: none !important; }

/* Form controls and the quantity stepper now sit on the main yellow, so they
   need their own ground to stay legible. */
.fp-shop-single div.product .summary select,
.fp-shop-single div.product .summary input[type="number"],
.fp-shop-single div.product .summary .quantity input {
	background: #fff !important;
	border: 2px solid rgba(18, 80, 111, .35) !important;
	color: var(--fp-navy) !important;
}

.fp-shop-single div.product .summary .reset_variations,
.fp-shop-single div.product .summary .woocommerce-variation-price,
.fp-shop-single div.product .summary .stock { color: var(--fp-navy) !important; }

/* Woo greys the button out until a variation is chosen. Keep that legible
   rather than a washed-out yellow on yellow — it has to read as "not yet". */
.fp-shop-single div.product button.single_add_to_cart_button:disabled,
.fp-shop-single div.product button.single_add_to_cart_button.disabled {
	/* Cream on yellow was all but invisible — the button read as bare text.
	   White with a navy hairline reads as a control that is present but not
	   yet available, which is what Woo means by it. */
	background: #fff !important;
	color: #7b7b74 !important;
	border: 2px solid rgba(18, 80, 111, .20) !important;
	opacity: 1 !important;
	cursor: not-allowed;
}

.fp-shop-single div.product button.single_add_to_cart_button.disabled {
	background: #fff !important;
	color: #7b7b74 !important;
	border: 2px solid rgba(18, 80, 111, .20) !important;
	opacity: 1 !important;
}

/* ===========================================================================
   ACCESSIBILITY CARDS  (includes/accessibility-cards.php)
   The three infographics as real markup. The frame is the contact-page card —
   8px #fdd215, 20px radius, the same shadow — so these belong to the family
   already on the site rather than introducing a fourth card style.

   THE BODY IS CREAM, NOT THE PAGE GREEN, AND THAT IS A CONTRAST DECISION.
   White on #8ab13e measures 2.9:1 and navy on it 3.6:1 — both under the 4.5:1
   body-copy threshold, and this is fifteen paragraphs of small type on the page
   that tells disabled visitors what we do for them, so it is the one place on
   the site where legibility has to win outright. Navy on #fdf3cf is 7.9:1. The
   saturated yellow stays where it always is: the frame, the rule and the
   headings.
   =========================================================================== */

.fp-ac { margin: 0 0 10px; }

.fp-ac-section + .fp-ac-section { margin-top: 54px; }

.fp-ac-head {
	color: #fff !important;
	font-size: 38px !important;
	line-height: 1.15 !important;
	font-weight: 800 !important;
	margin: 0 0 6px !important;
	letter-spacing: -1px;
}

.fp-ac-intro {
	color: #fff !important;
	font-size: 18px !important;
	line-height: 1.5 !important;
	margin: 0 0 40px !important;
	max-width: 60ch;
}

/* auto-fit rather than a fixed five, so the row that is five across on a wide
   screen becomes four, then three, then one, with no breakpoints to maintain. */
.fp-ac-grid {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(210px, 1fr));
	gap: 46px 22px;
	align-items: stretch;
}

.fp-ac-card {
	position: relative;
	display: flex;
	flex-direction: column;
	background: #fdf3cf;
	border: 8px solid #fdd215;
	border-radius: 20px;
	box-shadow: 0 8px 13px 6px rgb(0 0 0 / 20%);
	/* Top padding leaves room for the roundel, which hangs half out of the
	   card exactly as it does in the artwork. */
	padding: 46px 20px 22px;
	text-align: center;
}

/* The roundel. Centred on the card's own top edge with a translate rather than
   a negative margin, so it cannot affect the height the grid measures. */
.fp-ac-badge {
	position: absolute;
	top: 0;
	left: 50%;
	transform: translate(-50%, -50%);
	width: 74px;
	height: 74px;
	border-radius: 50%;
	display: flex;
	align-items: center;
	justify-content: center;
	color: #fff;
	border: 5px solid #fdf3cf;
	box-shadow: 0 0 0 3px #2f2f2f;
}

.fp-ac-icon { width: 40px; height: 40px; display: block; }

.fp-ac-title {
	color: #12506f !important;
	font-size: 19px !important;
	line-height: 1.25 !important;
	font-weight: 800 !important;
	margin: 0 0 12px !important;
	letter-spacing: 0 !important;
	/* Two lines' worth, so a one-line and a two-line title still start their
	   body copy on the same baseline across a row. */
	min-height: 2.5em;
	display: flex;
	align-items: center;
	justify-content: center;
}

.fp-ac-text { flex: 1 1 auto; }

.fp-ac-text p {
	color: #143d52 !important;
	font-size: 15px !important;
	line-height: 1.55 !important;
	margin: 0 0 12px !important;
}

.fp-ac-text p:last-child { margin-bottom: 0 !important; }

.fp-ac-text a {
	color: #12506f !important;
	font-weight: 700;
	text-decoration: underline;
	/* These are long addresses in a 210px column — let them break rather than
	   push the card wider than its track. */
	word-break: break-word;
}

/* The short coloured rule the artwork puts under each block of copy. */
.fp-ac-rule {
	display: block;
	width: 54px;
	height: 3px;
	border-radius: 2px;
	margin: 16px auto 0;
}

@media (max-width: 690px) {
	.fp-ac-head { font-size: 30px !important; }
	.fp-ac-grid { gap: 44px 16px; }
}

/* ===========================================================================
   SHOP — the pieces Dougal flagged on 2026-08-28
   =========================================================================== */

/* --- 1. The variations-table "Add all to cart" button -----------------------
   Two faults, one cause. It renders inside the product summary, which is the
   BRAND YELLOW — so the site's standard yellow button was yellow on yellow and
   stopped looking like a button at all the moment a quantity was entered. And
   before that it inherited the white "disabled" styling written for the single
   product button, because WPC Variations Table gives its button the class
   `single_add_to_cart_button` and ships it disabled until a quantity is set.

   The site already answers this: the Roar page puts NAVY buttons with white
   text wherever yellow would not read (sampled — rgb(18,80,111) on white).
   Same treatment here, hovering to the site cyan. Disabled is the same navy
   at low opacity, so it is visibly the same control rather than a different
   one.

   ⚠ THE SELECTOR IS LONG ON PURPOSE. The first attempt used
   `body.fp-shop-single .wpcvt_add_to_cart_button`, which scores (0,3,1) and
   LOST to the single-product rule further up this file,
   `.fp-shop-single div.product button.single_add_to_cart_button:disabled` at
   (0,4,2) — so the button carried on rendering white, then yellow. Matching
   that rule's shape and adding the wpcvt class is what makes this one win.
   Third time the cascade has caught us here; enumerate before assuming. */
body.fp-shop.fp-shop-single.woocommerce-page div.product button.single_add_to_cart_button.wpcvt_add_to_cart_button,
body.fp-shop.fp-shop-single.woocommerce-page div.product button.single_add_to_cart_button.wpcvt_add_to_cart_button:disabled,
body.fp-shop.fp-shop-single.woocommerce-page div.product button.single_add_to_cart_button.wpcvt_add_to_cart_button.wpcvt_atc_btn_disabled {
	background: var(--fp-navy) !important;
	background-color: var(--fp-navy) !important;
	color: #fff !important;
	border: none !important;
	border-radius: 30px !important;
	padding: 18px 40px !important;
	font-size: 19px !important;
	font-weight: 800 !important;
	box-shadow: none !important;
	transition: background-color .15s ease, opacity .15s ease;
}

body.fp-shop.fp-shop-single.woocommerce-page div.product button.single_add_to_cart_button.wpcvt_add_to_cart_button:disabled,
body.fp-shop.fp-shop-single.woocommerce-page div.product button.single_add_to_cart_button.wpcvt_add_to_cart_button.wpcvt_atc_btn_disabled {
	opacity: .4;
	cursor: not-allowed;
}

body.fp-shop.fp-shop-single.woocommerce-page div.product button.single_add_to_cart_button.wpcvt_add_to_cart_button:hover:not(:disabled):not(.wpcvt_atc_btn_disabled) {
	background: #2da2d9 !important;
	background-color: #2da2d9 !important;
	color: #fff !important;
}

/* --- 1b. Somewhere to go next ----------------------------------------------
   Dougal: "once I've added a pass, shouldn't a 'view basket' or 'checkout'
   button appear next to the 'add to cart' — there doesn't seem to be a natural
   next step." Quite right: the only route onward was the basket icon in the
   header, which is small, easy to miss, and does not read as the next step in
   a purchase. js/cart-feedback.js adds this button as soon as the basket has
   anything in it, and removes it when the basket is emptied. */
.fp-basket-next {
	display: inline-block;
	margin: 0 0 0 12px;
	padding: 18px 34px;
	border-radius: 30px;
	background: var(--fp-yellow);
	color: #000 !important;
	font-size: 19px;
	font-weight: 800;
	text-decoration: none !important;
	border: 3px solid var(--fp-navy);
	transition: background-color .15s ease, color .15s ease;
}

.fp-basket-next:hover {
	background: #2da2d9;
	color: #fff !important;
	border-color: #2da2d9;
}

@media (max-width: 600px) {
	.fp-basket-next { display: block; margin: 12px 0 0; text-align: center; }
}

/* The toast is now a link to the basket, so it is a route and not just news. */
a.fp-cart-toast { text-decoration: none !important; pointer-events: auto; cursor: pointer; }

/* --- 2. Proof that something went in the basket -----------------------------
   Adding from the variations table is an AJAX call with no visible result — the
   page simply sits there, so people press it twice. The header count is the
   honest indicator, so it is made to read as a badge and is hidden entirely
   while the basket is empty. `js/cart-feedback.js` adds the confirmation. */
#header-outer .cart-menu .cart-wrap span,
#header-outer .cart-contents-count,
.cart-menu .cart-wrap span {
	background: #e0393e !important;
	color: #fff !important;
	font-weight: 800 !important;
	border-radius: 999px !important;
	min-width: 19px;
	height: 19px;
	line-height: 19px !important;
	text-align: center;
	font-size: 11px !important;
	padding: 0 5px !important;
}

.fp-cart-toast {
	position: fixed;
	right: 22px;
	bottom: 22px;
	z-index: 100000;
	background: var(--fp-yellow);
	color: #000;
	font-weight: 800;
	font-size: 16px;
	padding: 14px 22px;
	border-radius: 30px;
	box-shadow: 0 8px 20px rgba(0, 0, 0, .22);
	opacity: 0;
	transform: translateY(10px);
	transition: opacity .2s ease, transform .2s ease;
	pointer-events: none;
}

.fp-cart-toast.is-in { opacity: 1; transform: translateY(0); }

/* --- 3. The basket dropdown's own buttons -----------------------------------
   Square, while every other button on the site is a 30px pill. */
.widget_shopping_cart a.button,
.widget_shopping_cart .buttons a,
.woocommerce-mini-cart__buttons a.button,
#header-outer .widget_shopping_cart a {
	border-radius: 30px !important;
	font-weight: 800 !important;
	padding: 12px 22px !important;
	background: var(--fp-yellow) !important;
	color: #000 !important;
	border: none !important;
	text-align: center;
}

.widget_shopping_cart a.button:hover,
.woocommerce-mini-cart__buttons a.button:hover,
#header-outer .widget_shopping_cart a:hover {
	background: #2da2d9 !important;
	color: #fff !important;
}

/* --- 4. The checkout form ---------------------------------------------------
   Stock WooCommerce fields: thin, small, square, and nothing like the contact
   form. Same treatment as the rest of the site — tall, rounded, readable. */
.woocommerce-checkout .woocommerce form .form-row input.input-text,
.woocommerce-checkout .woocommerce form .form-row textarea,
.woocommerce-checkout .woocommerce form .form-row select,
.woocommerce-checkout .select2-container .select2-selection--single,
.fp-shop .woocommerce form .form-row input.input-text,
.fp-shop .woocommerce form .form-row textarea,
.fp-shop .woocommerce form .form-row select {
	border-radius: 16px !important;
	border: 3px solid rgba(18, 80, 111, .25) !important;
	background: #fff !important;
	padding: 15px 18px !important;
	height: auto !important;
	min-height: 58px !important;
	font-size: 17px !important;
	line-height: 1.3 !important;
	color: var(--fp-navy) !important;
	box-shadow: none !important;
}

.woocommerce-checkout .woocommerce form .form-row input.input-text:focus,
.woocommerce-checkout .woocommerce form .form-row textarea:focus,
.woocommerce-checkout .woocommerce form .form-row select:focus {
	border-color: var(--fp-yellow) !important;
	outline: none !important;
}

.woocommerce-checkout .woocommerce form .form-row label {
	font-weight: 800 !important;
	font-size: 15px !important;
	color: var(--fp-navy) !important;
	margin-bottom: 7px !important;
}

/* Select2 (the country dropdown) has to be matched separately — it replaces the
   <select> with its own markup and ignores everything above. */
.woocommerce-checkout .select2-container--default .select2-selection--single {
	height: auto !important;
	min-height: 58px !important;
	border-radius: 16px !important;
	border: 3px solid rgba(18, 80, 111, .25) !important;
	padding: 11px 14px !important;
}

.woocommerce-checkout .select2-container--default .select2-selection--single .select2-selection__rendered {
	line-height: 1.4 !important;
	font-size: 17px !important;
	color: var(--fp-navy) !important;
	padding-left: 4px !important;
}

.woocommerce-checkout .select2-container--default .select2-selection--single .select2-selection__arrow {
	height: 56px !important;
}

.woocommerce-checkout #order_review,
.woocommerce-checkout .woocommerce-checkout-review-order {
	border-radius: 20px;
}

/* An empty basket should not wear a badge saying "0" — it reads as a count of
   something. Hidden until there is genuinely something in it, which is also
   what makes the badge appearing meaningful. */
#header-outer .cart-menu .cart-wrap span:empty,
.cart-menu .cart-wrap span:empty { display: none !important; }
