/* =============================================================================
 * Location page hero ("WORQ {Location} Coworking Space") + "Plan Your Visit"
 * section — single-location.php.
 *
 * Ported from the approved prototype (single, locked design). Everything here
 * is namespaced under .loc-hero (Section 1: hero) and .visit (Section 2: Plan
 * Your Visit) so nothing leaks into the rest of scud-style.css.
 *
 * Loaded as a plain <link> tag with a filemtime cache-bust (see single-location.php)
 * because this template's header never calls wp_footer()/wp_head() in a way that
 * would print an enqueued stylesheet reliably for ad-hoc assets — same pattern as
 * hero-expand.css on the landing pages.
 *
 * Two colours are hardcoded rather than added as new CSS custom properties,
 * per design sign-off:
 *   #f7f5ef — cream hero band background
 *   #a25f01 — AA-safe burnt-orange accent (brand --worq-orange is only 2.37:1 on
 *             the cream band, which fails WCAG AA for the building-name text)
 * All other colours reference the existing --worq-* custom properties defined in
 * scud-style.css :root.
 *
 * Contract with location-hero.js (do not rename without updating the JS):
 *   #loc-hero-introwrap / #loc-hero-introtoggle   — hero intro copy collapse (mobile only)
 *   #visitmore / #visittoggle                     — Plan Your Visit column collapse (<=980px)
 *   .is-collapsible / .is-expanded                — state classes the JS toggles
 * With JS off, no state class is ever added, so both blocks render in full and
 * both toggle buttons stay hidden.
 * ========================================================================== */

/* ============ SECTION 1: HERO ============ */
/* Band background: scud-style.css sets `body { background: var(--white); }` and this
   template's <body> wraps the hero with no intervening container, so a plain
   single-class rule can lose a same-specificity tie depending on how the page's
   stylesheets get concatenated/reordered (W3TC minify runs on the live/preview site).
   Scope to body + add !important so the cream band always wins here. */
body .loc-hero,
.loc-hero {
	background: #f7f5ef !important;
}
.loc-hero-inner {
	max-width: 1380px;
	margin: 0 auto;
	padding: 36px 32px 44px;
	display: grid;
	grid-template-columns: minmax(0, 54fr) minmax(0, 46fr);
	gap: 48px;
	align-items: center;
}

/* --- media column --- */
.loc-hero-media { position: relative; border-radius: 18px; overflow: hidden; align-self: stretch; min-height: 380px; max-height: 560px; }
.loc-hero-media > img { width: 100%; height: 100%; object-fit: cover; }
.loc-hero-media-buttons { position: absolute; right: 16px; bottom: 16px; display: flex; gap: 10px; }
.loc-hero-pill {
	display: inline-flex; align-items: center; gap: 10px;
	padding: 9px 10px 9px 16px; border-radius: 999px;
	/* Media pills keep Montserrat like the theme's own buttons (.location-overview-button:
	   Montserrat, 600, 14px). */
	font-family: 'Montserrat', sans-serif; font-size: 14px; font-weight: 600;
	backdrop-filter: blur(6px);
	transition: transform .15s ease, box-shadow .15s ease;
	box-shadow: 0 4px 14px rgba(14, 19, 24, .18);
	text-decoration: none !important;
}
.loc-hero-pill:hover { transform: translateY(-2px); box-shadow: 0 8px 20px rgba(14, 19, 24, .24); }
.loc-hero-pill--light { background: rgba(255, 255, 255, .92); color: var(--worq-navy); }
.loc-hero-pill--dark { background: rgba(29, 45, 68, .88); color: #fff; }
.loc-hero-pill .pill-dot { width: 26px; height: 26px; border-radius: 50%; display: inline-flex; align-items: center; justify-content: center; }
.loc-hero-pill--light .pill-dot { background: var(--worq-navy); color: #fff; }
.loc-hero-pill--dark .pill-dot { background: #fff; color: var(--worq-navy); }
.loc-hero-pill .pill-dot svg { width: 12px; height: 12px; }

/* The gallery/3D-tour/video anchors also carry the sitewide popup-binding classes
   .location-hero-gallery-link / .location-hero-3d-link (js/scud-script.js hooks the
   click handlers to those exact class names — do not remove them). But scud-style.css
   already styles those same classes into a large blurred blob (fixed height up to
   10rem, translucent/white background, 2px border, huge right padding reserved for
   the old dot/arrow spans this markup no longer includes). Reset every legacy
   property those rules still contribute, scoped to this hero only so no other page
   that reuses .location-hero-gallery-link/.location-hero-3d-link is affected, then
   reassert the real pill look at the same (higher) specificity. !important guards
   against load-order/minify reshuffling on the live/preview site. */
.loc-hero-media .location-hero-gallery-link,
.loc-hero-media .location-hero-3d-link {
	height: auto !important;
	min-height: 0 !important;
	display: inline-flex !important;
	align-items: center !important;
	gap: 10px !important;
	padding: 9px 10px 9px 16px !important;
	border: none !important;
	border-radius: 999px !important;
	position: static !important;
	font-size: 14px !important;
	font-weight: 600 !important;
	backdrop-filter: blur(6px) !important;
	-webkit-backdrop-filter: blur(6px) !important;
	box-shadow: 0 4px 14px rgba(14, 19, 24, .18) !important;
}
.loc-hero-media .location-hero-gallery-link.loc-hero-pill--light {
	background: rgba(255, 255, 255, .92) !important;
	color: var(--worq-navy) !important;
}
.loc-hero-media .location-hero-3d-link.loc-hero-pill--dark {
	background: rgba(29, 45, 68, .88) !important;
	color: #fff !important;
}
@media (max-width: 767px) {
	.loc-hero-media .location-hero-gallery-link,
	.loc-hero-media .location-hero-3d-link {
		font-size: 12.5px !important;
		padding: 8px 8px 8px 14px !important;
	}
}

/* Badge is body-level copy — the theme's body text is "PT Sans Caption",
   Helvetica, Arial (scud-style.css), not Montserrat; inherit it. */
.loc-hero-photocount {
	position: absolute; left: 16px; bottom: 16px;
	background: rgba(14, 19, 24, .55); color: #fff;
	font-size: 12px; font-weight: 400;
	padding: 6px 12px; border-radius: 999px; backdrop-filter: blur(4px);
}

/* --- copy column --- */
.loc-hero-copy { display: flex; flex-direction: column; align-items: flex-start; }

/* Breadcrumb is body-level copy — inherit the theme's "PT Sans Caption" body
   font (scud-style.css) instead of Montserrat. */
.loc-hero-breadcrumb { font-size: 12px; color: var(--worq-grey); margin-bottom: 18px; }
.loc-hero-breadcrumb ol { list-style: none; display: flex; flex-wrap: wrap; gap: 6px; margin: 0; padding: 0; }
.loc-hero-breadcrumb a { color: var(--worq-grey); text-decoration: none; }
.loc-hero-breadcrumb a:hover { color: var(--worq-orange); }
.loc-hero-breadcrumb .sep { color: var(--worq-grey); opacity: .55; }
.loc-hero-breadcrumb .active { color: var(--worq-navy); font-weight: 400; }

.loc-hero-h1 {
	font-family: 'Montserrat', sans-serif;
	/* Match the theme's .location-title (scud-style.css): font-weight 600, no
	   letter-spacing tweak. Size stays responsive (the old rule is a flat
	   2.6rem/3.5rem/4.2rem/4.8rem/5.2rem per breakpoint) via a clamp anchored to
	   the same 2.6rem floor. */
	font-weight: 600; line-height: 1.14;
	/* Raised max vs. the previous clamp so longer location names still get the
	   presence of production's flat 52px .location-title at desktop widths. */
	font-size: clamp(2.6rem, 3vw, 4.2rem);
	color: var(--worq-navy); letter-spacing: normal;
	margin: 0;
	/* PHP already outputs a literal lowercase "at "; force it, in case any
	   heading-wide rule elsewhere applies text-transform. */
	text-transform: none !important;
}
/* Weight 500 matches .location-overview-title (scud-style.css) — the closest
   theme analogue for a secondary building-name line under a location h1. */
.loc-hero-h1 .building { display: block; margin-top: 8px; font-size: .52em; font-weight: 500; line-height: 1.3; color: #a25f01; letter-spacing: 0; text-transform: none !important; }

/* Address + chips are body-level copy — "PT Sans Caption" (scud-style.css),
   inherited, at 1.4rem to match .location-overview-address/-transport. */
.loc-hero-address {
	display: flex; align-items: flex-start; gap: 8px; margin-top: 14px;
	font-size: 1.4rem; font-weight: 400; line-height: 1.55;
	color: var(--worq-grey); max-width: 52ch;
}
.loc-hero-address svg { flex: none; width: 15px; height: 15px; margin-top: 3px; color: var(--worq-orange); }

.loc-hero-chips { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 12px; }
.loc-chip {
	display: inline-flex; align-items: center; gap: 7px;
	background: #fff; border: 1px solid #e6e0d2; border-radius: 999px; padding: 6px 13px;
	font-size: 1.4rem; font-weight: 400; color: var(--worq-navy);
}
.loc-chip svg { width: 13px; height: 13px; color: var(--worq-orange); flex: none; }
.loc-chip img { width: 13px; height: 13px; object-fit: contain; flex: none; }

/* Intro copy is body-level — "PT Sans Caption" (scud-style.css), inherited, at
   1.5rem to match .location-overview-subtitle (15px). */
.loc-hero-introwrap { position: relative; margin-top: 16px; }
.loc-hero-intro { font-size: 1.5rem; font-weight: 400; line-height: 1.65; color: var(--worq-grey); max-width: 58ch; margin: 0; }
/* collapsed state — JS adds .is-collapsible on mobile only; gradient mask fades the cut line */
.loc-hero-introwrap.is-collapsible:not(.is-expanded) .loc-hero-intro {
	display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 3; overflow: hidden;
}
.loc-hero-introwrap.is-collapsible:not(.is-expanded)::after {
	content: ""; position: absolute; left: 0; right: 0; bottom: 0; height: 2.2em;
	background: linear-gradient(to bottom, rgba(247, 245, 239, 0), #f7f5ef);
	pointer-events: none;
}
/* Toggle label is body-level copy, not a CTA/button — <button> gets its own
   font reset in scud-style.css (body, button, input... { font-family: "PT Sans
   Caption"... }), but state it explicitly since element resets can't be relied
   on to inherit. */
.loc-hero-expand-toggle {
	display: none; margin-top: 6px; background: none; border: none; cursor: pointer;
	font-family: "PT Sans Caption", Helvetica, Arial, sans-serif; font-size: 13px; font-weight: 400; color: var(--worq-navy);
	padding: 4px 0; align-items: center; gap: 6px;
}
.loc-hero-expand-toggle .arrow { transition: transform .2s ease; }
.loc-hero-expand-toggle.open .arrow,
.loc-hero-introwrap.is-expanded ~ .loc-hero-expand-toggle .arrow { transform: rotate(180deg); }

.loc-hero-ctas { display: flex; flex-wrap: wrap; align-items: center; gap: 14px 22px; margin-top: 24px; }
.loc-hero-ctas .cta-primary {
	/* Weight 600 matches the theme's own button rule, .location-overview-button
	   (scud-style.css: font-weight 600, Montserrat). */
	background: var(--worq-orange); color: #fff; font-family: 'Montserrat', sans-serif;
	font-weight: 600; font-size: 14px; padding: 13px 28px; border-radius: 999px;
	transition: background .15s ease; box-shadow: 0 6px 16px rgba(235, 137, 2, .35);
	text-decoration: none !important;
}
.loc-hero-ctas .cta-primary:hover { background: var(--worq-red); }
.loc-hero-ctas .cta-link {
	color: var(--worq-navy); font-family: 'Montserrat', sans-serif; font-weight: 600; font-size: 14px;
	border-bottom: 2px solid var(--worq-orange); padding-bottom: 2px; text-decoration: none !important;
}
.loc-hero-ctas .cta-link .arr { color: var(--worq-orange); }

/* "View Memberships" jumps to #products via a native anchor. The site header is
   position:fixed (~76-96px), so offset the anchor target to clear it, replacing
   the old .location-overview-button JS scroll offset that the redesign dropped. */
#products { scroll-margin-top: 96px; }

/* ============ SECTION 2: PLAN YOUR VISIT ============ */
.visit { max-width: 1380px; margin: 0 auto; padding: 56px 32px 30px; }

/* This section also carries the legacy .location-overview-container class (see
   single-location.php) so js/scud-script.js's floating quick-nav (.menu-for-location)
   can still offset()/scrollTop() to it for the "Overview" item — that script also
   dereferences .hero-product-bar-container/.location-map-container/.location-faqs-container,
   which are unaffected and still present exactly once each. scud-style.css styles
   .location-overview-container's own box model directly (max-width: 112rem;
   margin-bottom: 8rem/12rem; padding: 0 2rem/3rem), which would otherwise narrow
   and misalign this card. The compound selector below outranks that plain-class
   rule at every breakpoint scud-style.css sets it at, so .visit's own sizing wins. */
.visit.location-overview-container {
	max-width: 1380px;
	margin: 0 auto;
	padding: 56px 32px 30px;
}
.visit-head { margin-bottom: 26px; }
.visit-tag { font-family: 'Montserrat', sans-serif; font-size: 12px; font-weight: 600; letter-spacing: .1em; text-transform: uppercase; color: var(--worq-orange); }
.visit-title {
	/* Weight 600 matches the theme's .location-title, no letter-spacing tweak. */
	font-family: 'Montserrat', sans-serif; font-size: clamp(22px, 2.2vw, 30px); font-weight: 600;
	color: var(--worq-navy); margin: 6px 0 0;
	/* PHP already outputs the literal "Talk to the {Location} Team" copy; force it
	   in case any heading-wide rule elsewhere applies text-transform. */
	text-transform: none !important;
}
.visit-card {
	background: #f0ebd8 !important;
	background: var(--worq-yellow) !important;
	border-radius: 18px; padding: 34px 38px;
	display: grid; grid-template-columns: 1.05fr 1fr 1.15fr; gap: 0;
}
.visit-col { padding: 0 34px; border-left: 1px solid #ddd5bd; min-width: 0; }
.visit-col:first-child { padding-left: 0; border-left: none; }
.visit-col:last-child { padding-right: 0; }
/* Column labels: production computed style for "ACCESSIBILITY & PARKING"
   (.location-outlet-accessibility-title, scud-style.css) is "PT Sans Caption",
   13px/400, uppercase, grey — no letter-spacing added. */
.visit-col-title { font-family: "PT Sans Caption", Helvetica, Arial, sans-serif; font-size: 1.3rem; font-weight: 400; text-transform: uppercase; color: var(--worq-grey); margin-bottom: 14px; }
/* Blurb is body-level copy — "PT Sans Caption" (scud-style.css), inherited, at
   1.3rem to match .location-outlet-info-box p (13px). */
.visit-col p { font-size: 1.3rem; font-weight: 400; line-height: 1.6; color: var(--worq-grey); margin: 0; }
/* Phone/email rows: match .location-outlet-sales-number/-sales-email
   (scud-style.css) — PT Mono family (falls back to Helvetica/Arial; only
   Montserrat is loaded via Google Fonts, same as the existing theme), grey,
   400 weight, at 1.3rem (production's computed 13px). */
.visit-contact-row { display: flex; align-items: center; gap: 9px; margin-top: 12px; font-family: "PT Mono", Helvetica, Arial, sans-serif; font-size: 1.3rem; font-weight: 400; color: var(--worq-grey); }
.visit-contact-row a { color: inherit; text-decoration: none; }
.visit-contact-row svg { width: 15px; height: 15px; color: var(--worq-orange); flex: none; }
.visit-quote-btn {
	/* Weight 600 matches .location-outlet-quote-button, which shares
	   .location-overview-button's exact button rule in scud-style.css. */
	display: block; text-align: center; background: var(--worq-orange); color: #fff;
	font-family: 'Montserrat', sans-serif; font-weight: 600; font-size: 14px; padding: 12px 26px;
	border-radius: 999px; margin-top: 18px; box-shadow: 0 5px 14px rgba(235, 137, 2, .3);
	text-decoration: none !important;
}
.visit-quote-btn:hover { background: var(--worq-red); }
/* Hours line: match .location-outlet-site-hours (scud-style.css) — PT Mono, grey,
   1.3rem. The "Mon – Fri:" lead-in is a <strong> tag for a11y/visual grouping;
   the old rule has no bold portion at all, so weight 500 (not the browser's
   default 700 for <strong>) keeps it a mild emphasis instead of full bold. */
.visit-hours { font-family: "PT Mono", Helvetica, Arial, sans-serif; font-size: 1.3rem; color: var(--worq-grey); margin-bottom: 16px; }
.visit-hours strong { color: var(--worq-navy); font-weight: 500; }
.visit-manager { display: flex; align-items: center; gap: 14px; margin-top: 16px; background: #fff; border-radius: 14px; padding: 12px 16px; }
.visit-manager img { width: 56px; height: 56px; border-radius: 50%; object-fit: cover; }
/* "Outlet Manager" label: match .location-outlet-manager-title (scud-style.css) —
   PT Mono, grey, weight 400, 1.2rem (its first declaration says 1.3rem but a later
   rule in the same file overrides font-size to 1.2rem/weight 400 — that later,
   more specific-in-source-order rule is what actually renders). */
.visit-manager .role { font-family: "PT Mono", Helvetica, Arial, sans-serif; font-size: 1.2rem; font-weight: 400; letter-spacing: .06em; text-transform: uppercase; color: var(--worq-grey); }
/* Weight 500 + 1.8rem matches .location-outlet-manager-name's production
   computed style exactly (scud-style.css rule says 1.6rem, but the live page
   renders 18px — verified against production, not the static rule). Manager
   name is one of the elements the theme keeps in Montserrat. */
.visit-manager .name { font-family: 'Montserrat', sans-serif; font-size: 1.8rem; font-weight: 500; color: var(--worq-navy); margin: 1px 0 2px; }
/* Manager phone isn't the manager name and isn't a CTA/button/pill, so it's not
   one of the elements this pass keeps in Montserrat — body-level contact text,
   "PT Sans Caption" inherited, weight 400. Accent colour kept as designed. */
.visit-manager a { font-size: 13px; font-weight: 400; color: #a25f01; text-decoration: none; }
/* Fact list is body-level copy — "PT Sans Caption" (scud-style.css), inherited,
   at 1.3rem to match .location-outlet-accessibility-list (13px). */
.visit-facts { list-style: none; margin: 0; padding: 0; }
.visit-facts li { display: flex; gap: 10px; align-items: flex-start; font-size: 1.3rem; font-weight: 400; line-height: 1.5; color: var(--worq-grey); padding: 7px 0; border-bottom: 1px dashed #ddd5bd; }
.visit-facts li:last-child { border-bottom: none; }
.visit-facts svg { width: 16px; height: 16px; flex: none; margin-top: 1px; color: var(--worq-orange); }
.visit-facts img { width: 16px; height: 16px; object-fit: contain; flex: none; margin-top: 1px; }
/* The old .location-outlet-accessibility-list has no bold spans at all (plain
   text throughout); weight 500 keeps the fact-list emphasis mild rather than the
   700 an unstyled <strong> would render at. */
.visit-facts strong { color: var(--worq-navy); font-weight: 500; }
.visit-facts .info-tooltip { margin-left: 4px; }
.visit-find { display: inline-flex; align-items: center; gap: 6px; margin-top: 10px; font-family: 'Montserrat', sans-serif; font-size: 14px; font-weight: 600; color: var(--worq-navy); border-bottom: 2px solid var(--worq-orange); padding-bottom: 2px; text-decoration: none; }

/* .visit-more wraps the On-site Support + Accessibility columns. On desktop it
   must not break the 3-column grid, so it uses display:contents there. */
.visit-more { display: contents; }
.visit-more-toggle { display: none; }

@media (max-width: 980px) {
	.visit { padding: 40px 18px 20px; }
	/* Same override as the base .visit.location-overview-container rule above, at
	   the same compound specificity, so it wins here too instead of falling back
	   to the higher-specificity base rule's desktop padding. */
	.visit.location-overview-container { padding: 40px 18px 20px; }
	.visit-card { grid-template-columns: 1fr; padding: 24px 22px; gap: 22px; display: flex; flex-direction: column; }
	.visit-col { padding: 0; border-left: none; border-top: 1px solid #ddd5bd; padding-top: 22px; }
	.visit-col:first-child { border-top: none; padding-top: 0; }
	/* mobile collapse: cut just below the On-site Support heading so the fade
	   hints at the hidden content; gradient fades into the card colour */
	.visit-more { display: block; }
	.visit-more.is-collapsible:not(.is-expanded) { position: relative; max-height: 92px; overflow: hidden; }
	.visit-more.is-collapsible:not(.is-expanded)::after {
		content: ""; position: absolute; left: 0; right: 0; bottom: 0; height: 56px;
		background: linear-gradient(to bottom, rgba(240, 235, 216, 0), #f0ebd8);
		pointer-events: none;
	}
	.visit-more .visit-col { border-top: 1px solid #ddd5bd; padding-top: 22px; margin-top: 22px; }
	.visit-more .visit-col:first-child { border-top: 1px solid #ddd5bd; padding-top: 22px; margin-top: 0; }
	/* The second "Show-more toggle label" (see .loc-hero-expand-toggle above) —
	   body-level copy, explicit "PT Sans Caption" since <button> font resets
	   can't be relied on to inherit. */
	.visit-more-toggle {
		display: inline-flex; align-items: center; gap: 6px; align-self: flex-start;
		background: none; border: none; cursor: pointer; font-family: "PT Sans Caption", Helvetica, Arial, sans-serif;
		font-size: 13px; font-weight: 400; color: var(--worq-navy); padding: 2px 0 0;
	}
	.visit-more-toggle .arrow { transition: transform .2s ease; }
	.visit-more-toggle.open .arrow { transform: rotate(180deg); }
}

/* ============ MOBILE (hero) ============ */
@media (max-width: 767px) {
	.loc-hero-inner { display: flex; flex-direction: column; align-items: flex-start; gap: 0; padding: 20px 18px 30px; }
	.loc-hero-breadcrumb { order: 1; margin-bottom: 10px; width: 100%; }
	.loc-hero-breadcrumb ol { justify-content: flex-start; }
	.loc-hero-photocount { display: none; }
	.loc-hero-pill { font-size: 12.5px; padding: 8px 8px 8px 14px; }
	.loc-hero-copy { display: contents; } /* let children order against the media block */
	.loc-hero-h1 { order: 2; font-size: 26px; margin-bottom: 14px; }
	.loc-hero-media { order: 3; width: 100%; min-height: 0; max-height: none; height: 38vh; border-radius: 14px; }
	.loc-hero-address { order: 4; margin-top: 14px; }
	.loc-hero-chips { order: 5; }
	.loc-hero-introwrap { order: 6; }
	.loc-hero-expand-toggle { order: 7; align-self: flex-start; }
	.loc-hero-ctas { order: 8; margin-top: 18px; width: 100%; }
	.loc-hero-ctas .cta-primary { flex: 1 1 auto; text-align: center; }
}

/* ============ HEADER CONTAINMENT (location pages only) ============ */
/* scud-style.css fixes .header-container at 4rem/6rem, but its content (logo,
   Merdeka/call/contact pills) renders ~76px tall and bleeds past the box. On
   the old all-white pages the bleed was invisible; over the cream hero band it
   reads as the header overlapping the hero. body carries class "location" on
   this template only, so this scope changes no other page. The absolutely
   positioned .whatsapp-button is out of flow and doesn't affect auto height. */
body.location .header-container { height: auto; min-height: 6rem; }
