/* ====================================================================
   Disney Parks — park & land page blocks. Source of truth:
   #view-magic-kingdom in mockups/disney-parks-microsite.html. Scoped under
   .mmdp-park, same token block + anchor/button armour as the hub.
   ==================================================================== */

.mmdp-park{
	--bg:#0C0E13;--surface:#14171F;--surface-2:#1A1E28;--surface-3:#222736;
	--line:rgba(255,255,255,0.08);--line-2:rgba(255,255,255,0.14);
	--text:var(--mmdp-text,#F5F5F7);--muted:#A6AAB4;--dim:#7E8695; /* --dim lifted from #6B7080 for AA at micro sizes (design-system contrast floor, July 2026 audit) */
	--ok:var(--mmdp-success,#34D399);--closed:var(--mmdp-error,#F87171);
	--ac:var(--mmdp-brand,#3EB5F5);--ac-glow:rgba(62,181,245,0.30);
	--park-mk:var(--mmdp-accent-magic-kingdom,#5BA3E6);--park-ep:var(--mmdp-accent-epcot,#A78BFA);
	--park-hs:var(--mmdp-accent-hollywood-studios,#EF8354);--park-ak:var(--mmdp-accent-animal-kingdom,#34D399);
	--w-lo:#34D399;--w-md:#FBBF24;--w-hi:#FB923C;--w-pk:#EF4444;
	--f-ui:'Poppins',system-ui,sans-serif;--f-display:'Schibsted Grotesk','Helvetica Neue',Arial,sans-serif;
	--f-body:'Inter',system-ui,sans-serif;--f-mono:'JetBrains Mono',ui-monospace,monospace;
	--radius:14px;--radius-sm:10px;--maxw:1280px;
	font-family:var(--f-body);color:var(--text)
}
.mmdp-park *,.mmdp-park *::before,.mmdp-park *::after{box-sizing:border-box}
/* anchor + button armour (Elementor/theme override defence — all states,
   including :visited and :active so a theme a:visited rule can't recolour
   card titles for returning visitors — R1) */
div.mmdp-park a,header.mmdp-park a,section.mmdp-park a,div.mmdp-park a:hover,section.mmdp-park a:hover,header.mmdp-park a:hover,
div.mmdp-park a:focus,section.mmdp-park a:focus,header.mmdp-park a:focus,
div.mmdp-park a:active,section.mmdp-park a:active,header.mmdp-park a:active,
div.mmdp-park a:visited,section.mmdp-park a:visited,header.mmdp-park a:visited{font:inherit;letter-spacing:inherit;text-transform:none;color:inherit;text-decoration:none}
.mmdp-park button,.mmdp-park button:hover,.mmdp-park button:focus,.mmdp-park button:active{
	-webkit-appearance:none;appearance:none;background:none;border:0;border-radius:0;box-shadow:none;text-shadow:none;outline:none;color:inherit;font:inherit;padding:0;margin:0;white-space:normal}
.mmdp-park h1,.mmdp-park h2,.mmdp-park h3{margin:0}
.mmdp-park .pk-wrap{max-width:var(--mmdp-maxw,1280px);margin:0 auto;padding:0 24px}
.mmdp-park.pk-block{display:block;padding:28px 0}
/* section rhythm (v0.27): chapter breaks breathe — the uniform 28px rhythm read
   flat (audit polish item). Feature band, map and FAQ mark the page's chapters. */
.mmdp-park.pk-block.pk-feature-band,
.mmdp-park.pk-block:has(.pk-map-wrap),
.mmdp-park.pk-block:has(.pk-faq){padding:48px 0}
/* banded sections tint from the PARK accent (--pc, emitted by the shortcode),
   not a hardcoded MK blue — EPCOT/AK inherit the right hue for free (R2) */
.mmdp-park.pk-block.pk-band-accent{background:color-mix(in srgb,var(--pc,var(--ac)) 4.5%,transparent);border-top:1px solid color-mix(in srgb,var(--pc,var(--ac)) 14%,transparent);border-bottom:1px solid color-mix(in srgb,var(--pc,var(--ac)) 5%,transparent)}
.mmdp-park.pk-block.pk-band-green{background:rgba(52,211,153,.04);border-top:1px solid rgba(52,211,153,.13);border-bottom:1px solid rgba(52,211,153,.045)}
.mmdp-park.pk-feature-band.pk-band-accent::before,.mmdp-park.pk-feature-band.pk-band-green::before{display:none}

/* FAQ accordion */
.mmdp-park .pk-faq{max-width:820px}
.mmdp-park .pk-faq-item{border-bottom:1px solid var(--line)}
.mmdp-park .pk-faq-item summary{list-style:none;cursor:pointer;display:flex;justify-content:space-between;align-items:center;gap:16px;padding:16px 0;font-family:var(--f-ui);font-weight:600;font-size:16px;color:var(--text)}
.mmdp-park .pk-faq-item summary::-webkit-details-marker{display:none}
.mmdp-park .pk-faq-item summary::after{content:"\002B";font-family:var(--f-mono);font-size:20px;line-height:1;color:var(--ac);flex:none}
.mmdp-park .pk-faq-item[open] summary::after{content:"\2212"}
.mmdp-park .pk-faq-a{padding:0 0 18px}
.mmdp-park .pk-faq-a p{font-family:var(--f-body);font-size:15px;line-height:1.7;color:var(--muted);margin:0 0 12px;max-width:70ch}
.mmdp-park .pk-faq-a p:last-child{margin-bottom:0}
.mmdp-park .pk-faq-a a,.mmdp-park .pk-faq-a a:link,.mmdp-park .pk-faq-a a:visited{color:var(--text)!important;font-weight:600!important;text-decoration:underline!important;text-decoration-color:var(--ac)!important;text-underline-offset:2px!important;text-decoration-thickness:2px!important}
.mmdp-park .pk-faq-a a:hover,.mmdp-park .pk-faq-a a:focus{color:var(--ac)!important}
.mmdp-park .pk-faq-a ul,.mmdp-park .pk-faq-a ol{margin:0 0 12px;padding-left:22px;color:var(--muted);font-size:15px;line-height:1.7}
.mmdp-park .pk-faq-a strong{color:var(--text)}
/* FAQ animated open (R4 fold): interpolate-size progressive enhancement.
   Supporting browsers ease the answer open; everyone else keeps the instant
   native <details> snap. Zero JS, zero markup change. */
@supports (interpolate-size:allow-keywords){
	.mmdp-park .pk-faq-item{interpolate-size:allow-keywords}
	.mmdp-park .pk-faq-item::details-content{block-size:0;overflow-y:clip;transition:block-size .28s cubic-bezier(.2,.7,.2,1),content-visibility .28s allow-discrete}
	.mmdp-park .pk-faq-item[open]::details-content{block-size:auto}
	@media(prefers-reduced-motion:reduce){.mmdp-park .pk-faq-item::details-content{transition:none}}
}

/* section heads */
.mmdp-park .pk-sec-head{display:flex;align-items:baseline;justify-content:space-between;gap:8px 16px;margin-bottom:24px;flex-wrap:wrap}
.mmdp-park .pk-sec-head h2{font-family:var(--f-display);font-weight:600;font-size:clamp(24px,3vw,32px);letter-spacing:-.015em}
/* The live dot pulses via a box-shadow that expands to an 8px spread. Laid
   out inline with a single space beside it, that halo washed straight over
   the first word (George, 14 Aug). A real flex gap gives it room — box-shadow
   never affects layout, so the space has to be reserved deliberately. */
.mmdp-park .pk-sec-sub{display:flex;align-items:center;gap:12px;font-family:var(--f-body);font-size:13.5px;color:var(--muted);margin-top:4px}
/* text links (e.g. "Magic Kingdom attractions →") — full Elementor armour so the theme can't recolour/resize/underline them on hover */
.mmdp-park .pk-sec-link,.mmdp-park .pk-sec-link:hover,.mmdp-park .pk-sec-link:focus,.mmdp-park .pk-sec-link:active{font:500 13px/1.2 var(--f-ui)!important;color:var(--ac)!important;white-space:nowrap;text-decoration:none!important;text-transform:none!important;letter-spacing:normal!important;transform:none!important;box-shadow:none!important;background:none!important}
.mmdp-park .pk-sec-link:hover{color:#5BC4F7!important}
.mmdp-park .pk-eyebrow{font-family:var(--f-mono);font-size:11px;font-weight:600;letter-spacing:.12em;text-transform:uppercase;color:var(--ac);margin-bottom:8px;display:block}

/* button — named transition properties (transition:all invites jank, R3);
   hover lift gated to real hover devices; :active gives touch a press ack */
.mmdp-park .pk-btn{font-family:var(--f-ui);font-weight:600;font-size:14.5px;padding:13px 26px;border-radius:999px;background:var(--ac);color:#06121c;white-space:nowrap;transition:filter .2s,transform .2s;display:inline-block}
@media(hover:hover){.mmdp-park .pk-btn:hover{filter:brightness(1.08);transform:translateY(-1px);color:#06121c}}
.mmdp-park .pk-btn:active{transform:scale(.98);filter:brightness(.96)}

/* live dot */
.mmdp-park .live-dot{display:inline-block;width:8px;height:8px;border-radius:50%;background:var(--ok);box-shadow:0 0 0 0 rgba(52,211,153,.6);animation:mmdpPulse 2.2s infinite;flex:none}
@keyframes mmdpPulse{70%{box-shadow:0 0 0 8px rgba(52,211,153,0)}100%{box-shadow:0 0 0 0 rgba(52,211,153,0)}}
@media(prefers-reduced-motion:reduce){.mmdp-park .live-dot{animation:none}}

/* Entrance animation is pure CSS with fill-mode `both`, so every element ENDS
   visible no matter what — no JS, no flags. v0.27 adds an IntersectionObserver
   layer ON TOP (park.js): below-fold elements get .io-wait added by JS just
   before observing, then .io-in when they enter the viewport — so no-JS
   readers, crawlers and the Elementor editor only ever see the load entrance
   and nothing is ever left hidden (the editor-safe pattern, spec-mandated).
   Rise is 14px per the motion grammar (subtle settle, not a flight). */
@keyframes mmdpRise{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}
.mmdp-park .reveal{animation:mmdpRise .6s cubic-bezier(.2,.7,.2,1) both}
.mmdp-park .stagger>*{animation:mmdpRise .55s cubic-bezier(.2,.7,.2,1) both}
.mmdp-park .stagger>*:nth-child(2){animation-delay:.07s}
.mmdp-park .stagger>*:nth-child(3){animation-delay:.14s}
.mmdp-park .stagger>*:nth-child(4){animation-delay:.21s}
.mmdp-park .stagger>*:nth-child(5){animation-delay:.28s}
.mmdp-park .stagger>*:nth-child(6){animation-delay:.35s}
.mmdp-park .stagger>*:nth-child(7){animation-delay:.42s}
.mmdp-park .stagger>*:nth-child(8){animation-delay:.49s}
.mmdp-park .stagger>*:nth-child(9){animation-delay:.56s}
.mmdp-park .stagger>*:nth-child(10){animation-delay:.63s} /* rails hold up to 8–10 items; delays must cover them all or later items animate first (R2) */
/* v0.27 IO reveals: .io-wait pauses + hides (JS-added only), .io-in settles the
   element in on scroll. nth-child delays above still stagger the .io-in run. */
.mmdp-park .reveal.io-wait{animation:none;opacity:0}
.mmdp-park .stagger.io-wait>*{animation:none;opacity:0}
.mmdp-park .reveal.io-in{animation:mmdpRise .55s cubic-bezier(.2,.7,.2,1) both}
.mmdp-park .stagger.io-in>*{animation:mmdpRise .55s cubic-bezier(.2,.7,.2,1) both}
@media(prefers-reduced-motion:reduce){
	.mmdp-park .reveal,.mmdp-park .stagger>*,.mmdp-park .reveal.io-in,.mmdp-park .stagger.io-in>*{animation:none}
	.mmdp-park .reveal.io-wait,.mmdp-park .stagger.io-wait>*{opacity:1} /* belt & braces — JS also skips under reduced motion */
}

/* swim-lane (horizontal scroll rails) */
.mmdp-park .swim{position:relative}
/* swim edge-fades — match the article carousels elsewhere on the site:
   ~72px, fading from the section background to transparent, shown only on the
   side that can still scroll (subtle, doesn't darken cards in view).
   R3: these were display:none dead code — the base box styles are restored so
   the can-left/can-right classes park.js toggles finally render something. */
.mmdp-park .swim-fade{position:absolute;top:0;bottom:0;width:72px;pointer-events:none;z-index:3;opacity:0;transition:opacity .25s}
.mmdp-park .swim-fade.l{left:0;background:linear-gradient(to right,var(--swim-c,var(--bg)),transparent)}
.mmdp-park .swim-fade.r{right:0;background:linear-gradient(to left,var(--swim-c,var(--bg)),transparent)}
.mmdp-park .swim.can-left .swim-fade.l{opacity:1}
.mmdp-park .swim.can-right .swim-fade.r{opacity:1}
.mmdp-park .swim-hint{display:none;margin-top:12px;text-align:right;font-family:var(--f-mono);font-size:11px;letter-spacing:.08em;color:var(--dim)}
.mmdp-park .swim.can-right + .swim-hint{display:block}
/* rail nav (R3): desktop rails get arrows + an X-of-N counter — without them,
   cards past the fold were unreachable-looking (no scrollbar, no affordance).
   Injected by park.js only when the rail actually scrolls. Mobile keeps the
   swipe hint; desktop swaps the hint for the nav. */
.mmdp-park .pk-rail-nav{display:flex;align-items:center;justify-content:flex-end;gap:10px;margin-top:12px}
.mmdp-park .pk-rail-count{font-family:var(--f-mono);font-size:11px;letter-spacing:.08em;color:var(--dim)}
/* full armour across states (standing rule) — hover only recolours, press dims */
.mmdp-park .pk-rail-btn,.mmdp-park .pk-rail-btn:hover,.mmdp-park .pk-rail-btn:focus,.mmdp-park .pk-rail-btn:active{
	font:600 14px/1 var(--f-ui)!important;width:32px!important;height:32px!important;min-height:0!important;padding:0!important;margin:0!important;
	display:inline-flex;align-items:center;justify-content:center;color:var(--muted)!important;background:var(--surface)!important;
	border:1px solid var(--line-2)!important;border-radius:50%!important;box-shadow:none!important;text-shadow:none!important;transform:none!important;
	letter-spacing:normal!important;text-transform:none!important;text-decoration:none!important;white-space:nowrap!important;
	transition:color .15s,background .15s,border-color .15s,opacity .15s!important;-webkit-appearance:none;appearance:none;cursor:pointer}
@media(hover:hover){.mmdp-park .pk-rail-btn:hover:not(:disabled){color:var(--text)!important;border-color:var(--text)!important}}
.mmdp-park .pk-rail-btn:active:not(:disabled){background:var(--surface-2)!important}
.mmdp-park .pk-rail-btn:disabled{opacity:.35!important;cursor:default!important}
@media(min-width:761px){.mmdp-park .swim-hint{display:none!important}}
@media(max-width:760px){.mmdp-park .pk-rail-nav{display:none!important}}

/* breadcrumb + image-rights flag */
.mmdp-park .pk-crumb{font-family:var(--f-mono);font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:rgba(255,255,255,.72);text-shadow:0 1px 8px rgba(0,0,0,.6)}
/* breadcrumb link matches the rest of the crumb — uppercase, muted, not an obvious blue link (George, 15 June) */
.mmdp-park .pk-crumb a,.mmdp-park .pk-crumb a:hover,.mmdp-park .pk-crumb a:focus{color:rgba(255,255,255,.72)!important;text-transform:uppercase!important;letter-spacing:.1em;text-shadow:0 1px 8px rgba(0,0,0,.6)}
.mmdp-park .pk-crumb a:hover{color:#fff!important}
.mmdp-park .img-flag{font-family:var(--f-mono);font-size:10.5px;letter-spacing:.04em;color:var(--dim);margin-top:14px;border-left:2px solid var(--line-2);padding-left:10px}

/* ---------------- HERO ---------------- */
.mmdp-park.pk-hero{position:relative;min-height:480px;display:flex;flex-direction:column;justify-content:flex-end;overflow:hidden;border-bottom:1px solid var(--line);padding:0}
/* full-width edge-to-edge info bar at the very bottom of the hero (local time + weather) */
.mmdp-park .pk-hero-bar{position:relative;z-index:2;width:100%;background:rgba(8,9,13,.5);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-top:1px solid var(--line-2)}
.mmdp-park .pk-hero-bar-in{display:flex;align-items:center;gap:16px;flex-wrap:wrap;padding-top:11px;padding-bottom:11px}
.mmdp-park .pk-hero-imgs{position:absolute;inset:0;z-index:0}
.mmdp-park .pk-hero-img{position:absolute;inset:0;background-size:cover;background-position:center;opacity:0;transition:opacity .5s}
.mmdp-park .pk-hero-img.on{opacity:1}
.mmdp-park .pk-hero-img img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block;border:0}
/* --lhr (v0.30.0) is a per-land hue offset emitted by [mm_land_hero], so two lands in
   the same park never render an identical gradient hero. Bounded to ±24deg in PHP, so
   every land stays unmistakably in its park's colour. Scoped to .is-grad, which the
   renderer only adds when there is NO image, so a real photo is never hue-shifted.
   Park heroes emit no --lhr and fall back to 0deg, keeping the pure park accent. */
.mmdp-park .pk-hero-img.is-grad{background:radial-gradient(120% 90% at 30% 8%,var(--pc,#2f73bd),#0c1830 65%);filter:hue-rotate(var(--lhr,0deg))}
.mmdp-park .pk-hero-img.night.is-grad{background:linear-gradient(120deg,#10141f,#1a1330)}
.mmdp-park .pk-hero-img.aerial.is-grad{background:repeating-linear-gradient(45deg,#161b27,#161b27 12px,#1c2230 12px,#1c2230 24px)}
.mmdp-park .pk-hero-scrim{position:absolute;inset:0;z-index:1;background:linear-gradient(180deg,rgba(8,10,16,.15) 0%,rgba(8,10,16,.5) 52%,rgba(8,10,16,.93) 100%)}
.mmdp-park .pk-toggle{position:absolute;top:16px;right:16px;z-index:3;display:flex;gap:6px;background:rgba(8,10,14,.6);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border:1px solid var(--line-2);border-radius:999px;padding:4px}
/* full armour: pin font + box across every state so Elementor can't resize/recolour the hero toggle mid-interaction (R1) */
.mmdp-park .pk-toggle button,.mmdp-park .pk-toggle button:hover,.mmdp-park .pk-toggle button:focus,.mmdp-park .pk-toggle button:active{
	font:400 10px/1.2 var(--f-mono)!important;letter-spacing:.06em!important;text-transform:uppercase!important;text-decoration:none!important;
	color:var(--muted)!important;background:transparent!important;border:0!important;border-radius:999px!important;padding:6px 12px!important;margin:0!important;
	box-shadow:none!important;text-shadow:none!important;transform:none!important;white-space:nowrap!important;min-height:0!important;height:auto!important;-webkit-appearance:none;appearance:none;cursor:pointer}
.mmdp-park .pk-toggle button.on,.mmdp-park .pk-toggle button.on:hover,.mmdp-park .pk-toggle button.on:focus{background:var(--ac)!important;color:#06243a!important}
.mmdp-park .pk-hero-inner{position:relative;z-index:2;width:100%;padding-top:120px;padding-bottom:20px}
.mmdp-park .pk-hero-inner .pk-crumb{margin-bottom:14px}
.mmdp-park .pk-hero-title{font-family:var(--f-display);font-weight:600;font-size:clamp(40px,6.5vw,80px);line-height:.96;letter-spacing:-.02em;color:#fff}
.mmdp-park .pk-hero-intro{font-family:var(--f-body);font-size:clamp(15px,2vw,18px);color:#e7e9ee;max-width:60ch;margin-top:12px;text-shadow:0 1px 14px rgba(0,0,0,.55)}
.mmdp-park .pk-hero-stats{display:flex;flex-wrap:wrap;gap:8px;margin-top:22px}
.mmdp-park .pstat{background:rgba(8,9,13,.5);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border:1px solid var(--line-2);border-radius:11px;padding:8px 14px;display:flex;flex-direction:column;gap:2px}
.mmdp-park .pstat .k{font-family:var(--f-mono);font-size:9px;letter-spacing:.1em;text-transform:uppercase;color:var(--muted)}
.mmdp-park .pstat .v{font-family:var(--f-mono);font-size:14.5px;font-weight:600;color:var(--text);white-space:nowrap}
.mmdp-park .pstat .v.live{display:flex;align-items:center;gap:7px;color:var(--ok)}
.mmdp-park .pstat .v.closed{color:var(--closed)}
/* top pill: local time + weather — one clean line, divider between items */
.mmdp-park .pk-hero-pill{display:inline-flex;align-items:center;gap:14px;max-width:100%;background:rgba(8,9,13,.55);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border:1px solid var(--line-2);border-radius:999px;padding:8px 16px;margin-bottom:16px}
.mmdp-park .pk-pill-i{display:inline-flex;align-items:center;gap:7px}
.mmdp-park .pk-pill-i + .pk-pill-i{padding-left:14px;border-left:1px solid var(--line-2)}
.mmdp-park .pk-pill-i .lab{font-family:var(--f-mono);font-size:9px;letter-spacing:.1em;text-transform:uppercase;color:var(--muted)}
.mmdp-park .pk-pill-i .val{font-family:var(--f-mono);font-size:13px;font-weight:600;color:#fff;white-space:nowrap}

/* ---------------- INTRO prose ---------------- */
.mmdp-park .pk-prose{max-width:70ch}
.mmdp-park .pk-prose h2{font-family:var(--f-display);font-weight:600;font-size:clamp(24px,3vw,32px);color:var(--text);margin:0 0 14px;letter-spacing:-.015em}
.mmdp-park .pk-prose h3{font-family:var(--f-ui);font-weight:600;font-size:20px;color:var(--text);margin:24px 0 10px}
.mmdp-park .pk-prose p{font-family:var(--f-body);font-size:16px;line-height:1.7;color:var(--muted);margin:0 0 16px}
.mmdp-park .pk-prose p:last-child{margin-bottom:0}
.mmdp-park .pk-prose a,.mmdp-park .pk-prose a:link,.mmdp-park .pk-prose a:visited{color:var(--text)!important;font-weight:600!important;text-decoration:underline!important;text-decoration-color:var(--ac)!important;text-underline-offset:2px!important;text-decoration-thickness:2px!important}
.mmdp-park .pk-prose a:hover,.mmdp-park .pk-prose a:focus{color:var(--ac)!important;text-decoration-color:var(--ac)!important}
.mmdp-park .pk-prose strong{color:var(--text);font-weight:600}
.mmdp-park .pk-prose ul,.mmdp-park .pk-prose ol{margin:0 0 16px;padding-left:22px}
.mmdp-park .pk-prose li{font-size:16px;line-height:1.65;margin-bottom:6px}

/* ---------------- cards (lands, latest) ---------------- */
.mmdp-park .pk-rail{display:flex;flex-wrap:nowrap;overflow-x:auto;scroll-snap-type:x proximity;-webkit-overflow-scrolling:touch;scrollbar-width:none;gap:16px;padding:7px 1px}
.mmdp-park .pk-rail::-webkit-scrollbar{display:none}
.mmdp-park .pk-lands-rail{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}
.mmdp-park .pk-attr-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}
.mmdp-park .pk-attr-grid.pk-cols-4{grid-template-columns:repeat(4,1fr)}
.mmdp-park .pk-attr-grid .pk-card{min-width:0}
@media(max-width:1024px){.mmdp-park .pk-attr-grid,.mmdp-park .pk-attr-grid.pk-cols-4{grid-template-columns:repeat(2,1fr)}}
@media(max-width:767px){.mmdp-park .pk-attr-grid,.mmdp-park .pk-attr-grid.pk-cols-4{grid-template-columns:1fr}}
.mmdp-park .pk-card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;transition:transform .25s,border-color .25s,background .25s;display:flex;flex-direction:column}
/* hover lift gated (@media hover) — cards used to stick in their hover state after iOS taps (R3) */
@media(hover:hover){.mmdp-park .pk-card:hover{transform:translateY(-3px)!important;border-color:var(--line-2);background:var(--surface-2)}}
.mmdp-park .pk-card:active{transform:scale(.99)!important;background:var(--surface-2)}
.mmdp-park .pk-thumb{height:142px;position:relative;background:linear-gradient(135deg,var(--pc,#1a2030),#0a0e16);overflow:hidden}
.mmdp-park .pk-thumb img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block;border:0}
.mmdp-park .pk-card.no-thumb .pk-cbody{padding-top:20px} /* no image area — give the text card a little more top room */
.mmdp-park .pk-cbody{padding:15px 16px 18px;display:flex;flex-direction:column;gap:8px;flex:1}
.mmdp-park .pk-fmt{font-family:var(--f-mono);font-size:10px;letter-spacing:.13em;text-transform:uppercase;color:var(--cc,var(--ac))}
.mmdp-park .pk-card h3{font-family:var(--f-ui);font-weight:600;font-size:16.5px;line-height:1.25;color:var(--text)}
.mmdp-park .pk-card.mk{--cc:var(--park-mk);--pc:var(--park-mk)}.mmdp-park .pk-card.ep{--cc:var(--park-ep);--pc:var(--park-ep)}.mmdp-park .pk-card.hs{--cc:var(--park-hs);--pc:var(--park-hs)}.mmdp-park .pk-card.ak{--cc:var(--park-ak);--pc:var(--park-ak)}
.mmdp-park .pk-lands-rail .pk-card,.mmdp-park .pk-rail .pk-card{min-width:0}

/* ---------------- headliners (featured band) ---------------- */
.mmdp-park .pk-feature-band{background:linear-gradient(180deg,var(--surface),rgba(20,23,31,0));border-top:1px solid var(--line);position:relative}
/* glow follows the park accent, not brand blue — matches the card hovers beside it (R2) */
.mmdp-park .pk-feature-band::before{content:"";position:absolute;inset:0;background:radial-gradient(120% 80% at 50% 0%,color-mix(in srgb,var(--pc,var(--ac)) 30%,transparent),transparent 60%);opacity:.5;pointer-events:none}
.mmdp-park .pk-feature-band>.pk-wrap{position:relative}
.mmdp-park .pk-feature-band .swim{--swim-c:#14171F}
.mmdp-park .pk-hl-row{display:grid;grid-template-columns:repeat(4,1fr);gap:16px}
.mmdp-park .pk-hl-card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;color:var(--text);display:flex;flex-direction:column;transition:transform .2s,border-color .2s}
@media(hover:hover){.mmdp-park .pk-hl-card:hover{transform:translateY(-3px)!important;border-color:var(--pc,var(--ac))}}
.mmdp-park .pk-hl-card:active{transform:scale(.99)!important;border-color:var(--pc,var(--ac))}
.mmdp-park .pk-hl-thumb{aspect-ratio:16/10;background:var(--surface-3);position:relative;overflow:hidden}
.mmdp-park .pk-hl-thumb img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block;border:0}
.mmdp-park .pk-hl-wait{position:absolute;top:9px;right:9px;font-family:var(--f-mono);font-size:11px;background:rgba(8,10,14,.7);border:1px solid var(--line-2);border-radius:7px;padding:4px 8px;display:flex;align-items:center;gap:6px;color:#fff}
.mmdp-park .pk-hl-wait.closed{color:var(--closed)}
.mmdp-park .pk-hl-wait .d{width:6px;height:6px;border-radius:50%;background:var(--ok)}
.mmdp-park .pk-hl-wait.closed .d{background:var(--closed)}
.mmdp-park .pk-hl-body{padding:14px 16px;display:flex;flex-direction:column;gap:5px}
.mmdp-park .pk-hl-body .pk-fmt{color:var(--pc,var(--ac))}
.mmdp-park .pk-hl-body h3{font-family:var(--f-ui);font-weight:600;font-size:16px;line-height:1.2;color:var(--text)}
.mmdp-park .pk-hl-body .pk-meta{font-family:var(--f-mono);font-size:11px;color:var(--dim)}
/* v0.27.1 — no photo → no image area, on EVERY card type (the land-card rule,
   applied everywhere): the media span isn't rendered, the card goes text-first,
   and any wait pill sits statically in the body instead of floating on a
   gradient shell. */
.mmdp-park .pk-hl-card.no-thumb .pk-hl-body{padding-top:18px}
.mmdp-park .pk-hl-card.no-thumb .pk-hl-wait,
.mmdp-park .pk-card.no-thumb .pk-hl-wait{position:static;align-self:flex-start;margin-top:2px}
.mmdp-park .pk-fav-cta{margin-top:24px;display:flex;flex-direction:column;align-items:flex-start;gap:14px}
.mmdp-park .pk-fav-cta p{color:var(--muted);font-size:15px;max-width:66ch;margin:0}

/* ---------------- Top attractions — ranked ladder ---------------- */
/* rendered as an <ol> so screen readers hear a ranking, not an anchor pile (R1) */
.mmdp-park .pk-tl{position:relative;padding-left:48px;list-style:none;margin:0}
.mmdp-park .pk-tl>li{display:block;margin:0;padding:0}
/* line starts at the #1 node and ends at the last node (no overshoot), colour follows the medals → blue, fading out */
.mmdp-park .pk-tl:before{content:"";position:absolute;left:17px;top:31px;bottom:31px;width:2px;background:linear-gradient(180deg,#F4C95D 6%,#cfd6e3 24%,#d9a878 42%,var(--pc,var(--ac)) 68%,var(--line) 100%)}
.mmdp-park .pk-tl-rung{position:relative;display:flex;align-items:center;gap:18px;padding:13px 18px;color:var(--text);text-decoration:none;border-radius:12px;transition:background .18s}
@media(hover:hover){.mmdp-park .pk-tl-rung:hover{background:rgba(255,255,255,.04)}}
.mmdp-park .pk-tl-rung:active{background:rgba(255,255,255,.07)}
.mmdp-park .pk-tl-node{position:absolute;left:-48px;width:36px;height:36px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-family:var(--f-display);font-weight:700;font-size:16px;background:var(--surface-2,#222);border:2px solid var(--line);color:var(--text);z-index:1}
.mmdp-park .pk-tl-rung.t1 .pk-tl-node{background:var(--gold,#F4C95D);color:#3a2c00;border-color:var(--gold,#F4C95D)}
.mmdp-park .pk-tl-rung.t2 .pk-tl-node{background:#cfd6e3;color:#23262e;border-color:#cfd6e3}
.mmdp-park .pk-tl-rung.t3 .pk-tl-node{background:#d9a878;color:#2e1c0c;border-color:#d9a878}
.mmdp-park .pk-tl-body{flex:1;min-width:0;display:flex;align-items:baseline;gap:14px;flex-wrap:wrap}
.mmdp-park .pk-tl-name{font-family:var(--f-ui);font-weight:600;font-size:16.5px;line-height:1.25;color:var(--text);transition:color .15s}
.mmdp-park .pk-tl-rung:hover .pk-tl-name{color:var(--pc,var(--ac))}
.mmdp-park .pk-tl-ld{font-family:var(--f-mono);font-size:11px;letter-spacing:.04em;color:var(--dim)}
.mmdp-park .pk-tl-wait{flex:none;margin-left:auto;font-family:var(--f-mono);font-size:11px;background:rgba(8,10,14,.7);border:1px solid var(--line-2);border-radius:7px;padding:4px 9px;display:inline-flex;align-items:center;gap:6px;color:#fff;white-space:nowrap}
.mmdp-park .pk-tl-wait .d{width:6px;height:6px;border-radius:50%;background:var(--ok)}
.mmdp-park .pk-tl-wait.closed{color:var(--closed)}
.mmdp-park .pk-tl-wait.closed .d{background:var(--closed)}
@media(max-width:640px){
	.mmdp-park .pk-tl{padding-left:44px}
	.mmdp-park .pk-tl:before{left:15px;top:28px;bottom:28px}
	.mmdp-park .pk-tl-rung{gap:14px;align-items:center;padding:12px 14px}
	.mmdp-park .pk-tl-node{left:-44px;width:32px;height:32px;font-size:14px}
	.mmdp-park .pk-tl-body{flex:1;flex-direction:column;align-items:flex-start;gap:3px}
	.mmdp-park .pk-tl-name{font-size:15.5px;width:100%}
}

/* ---------------- recommended-now waits board ---------------- */
.mmdp-park .pk-mkw-board{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}
.mmdp-park .pk-mkw{display:flex;align-items:center;justify-content:space-between;gap:12px;background:var(--surface);border:1px solid var(--line);border-radius:12px;padding:13px 16px}
.mmdp-park .pk-mkw.is-link{text-decoration:none;color:inherit;transition:transform .18s,border-color .18s}
@media(hover:hover){
	.mmdp-park .pk-mkw.is-link:hover{transform:translateY(-2px);border-color:var(--ac)}
	.mmdp-park .pk-mkw.is-link:hover .nm{color:var(--ac)}
}
.mmdp-park .pk-mkw.is-link .nm{transition:color .15s}
.mmdp-park .pk-mkw.is-link:active{transform:scale(.99);border-color:var(--ac)}
.mmdp-park .pk-mkw .nm{font-family:var(--f-ui);font-weight:500;font-size:14.5px;color:var(--text);min-width:0;overflow-wrap:anywhere}
.mmdp-park .pk-mkw .w{font-family:var(--f-mono);font-weight:600;font-size:14px;white-space:nowrap;flex:none}
.mmdp-park .pk-mkw .w.lo{color:var(--w-lo)}.mmdp-park .pk-mkw .w.md{color:var(--w-md)}.mmdp-park .pk-mkw .w.hi{color:var(--w-hi)}.mmdp-park .pk-mkw .w.pk{color:var(--w-pk)}
.mmdp-park .pk-waits-empty{color:var(--muted);font-size:14px}

/* ---------------- gallery (day / night) ---------------- */
.mmdp-park .pk-gal-toggle{display:inline-flex;border:1px solid var(--line-2);border-radius:999px;overflow:hidden}
/* full armour across states (matches the hero toggle treatment — R1) */
.mmdp-park .pk-gal-toggle button,.mmdp-park .pk-gal-toggle button:hover,.mmdp-park .pk-gal-toggle button:focus,.mmdp-park .pk-gal-toggle button:active{
	font:500 13px/1.3 var(--f-ui)!important;letter-spacing:normal!important;text-transform:none!important;text-decoration:none!important;
	color:var(--muted)!important;background:transparent!important;border:0!important;padding:8px 18px!important;margin:0!important;
	box-shadow:none!important;text-shadow:none!important;transform:none!important;white-space:nowrap!important;min-height:0!important;height:auto!important;-webkit-appearance:none;appearance:none;cursor:pointer;transition:color .15s,background .15s!important}
.mmdp-park .pk-gal-toggle button.on,.mmdp-park .pk-gal-toggle button.on:hover,.mmdp-park .pk-gal-toggle button.on:focus{background:var(--ac)!important;color:#06121f!important}
.mmdp-park .pk-gallery{display:grid;grid-template-columns:repeat(4,1fr);grid-auto-rows:150px;gap:12px;margin-top:4px;grid-auto-flow:dense}
.mmdp-park .pk-gal-cell{border-radius:12px;overflow:hidden;position:relative;border:1px solid var(--line);background:linear-gradient(135deg,#1a2030,#0a0e16)}
.mmdp-park .pk-gal-cell.tall{grid-row:span 2}
.mmdp-park .pk-gal-cell.wide{grid-column:span 2}
.mmdp-park .pk-gal-cell img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block;border:0}
.mmdp-park .pk-gallery[data-show="day"] .gal-night{display:none}
.mmdp-park .pk-gallery[data-show="night"] .gal-day{display:none}
.mmdp-park .pk-gal-cap{position:absolute;left:10px;bottom:8px;font-family:var(--f-mono);font-size:9px;letter-spacing:.06em;color:rgba(255,255,255,.82);text-transform:uppercase;z-index:1;text-shadow:0 1px 6px rgba(0,0,0,.7)}

/* ---------------- [mm_prose] free-placement copy ---------------- */
.mmdp-park.pk-prose-block{padding:24px 0}
.mmdp-park .mmdp-prose{max-width:70ch;font-family:var(--f-body);color:var(--muted)}
.mmdp-park .mmdp-prose h2{font-family:var(--f-display);font-weight:600;font-size:clamp(24px,3vw,32px);color:var(--text);margin:0 0 14px;letter-spacing:-.015em}
.mmdp-park .mmdp-prose h3{font-family:var(--f-ui);font-weight:600;font-size:20px;color:var(--text);margin:24px 0 10px}
.mmdp-park .mmdp-prose p{font-size:16px;line-height:1.7;margin:0 0 16px}
.mmdp-park .mmdp-prose p:last-child{margin-bottom:0}
.mmdp-park .mmdp-prose a,.mmdp-park .mmdp-prose a:link,.mmdp-park .mmdp-prose a:visited{color:var(--text)!important;font-weight:600!important;text-decoration:underline!important;text-decoration-color:var(--ac)!important;text-underline-offset:2px!important;text-decoration-thickness:2px!important;background:none!important;background-image:none!important;box-shadow:none!important;border:0!important}
.mmdp-park .mmdp-prose a:hover,.mmdp-park .mmdp-prose a:focus{color:var(--ac)!important;text-decoration-color:var(--ac)!important}
.mmdp-park .mmdp-prose strong{color:var(--text);font-weight:600}
.mmdp-park .mmdp-prose ul,.mmdp-park .mmdp-prose ol{margin:0 0 16px;padding-left:22px}
.mmdp-park .mmdp-prose li{font-size:16px;line-height:1.65;margin-bottom:6px}
.mmdp-park .mmdp-prose blockquote{margin:0 0 16px;padding:8px 0 8px 18px;border-left:3px solid var(--ac);color:var(--text);font-style:italic}

/* ---------------- updates / "what's coming" ---------------- */
.mmdp-park .pk-chg-filters{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:16px}
/* Elementor armour: lock size/shape across all states so hover ONLY changes colour (no movement). */
.mmdp-park .pk-chg-filters button,
.mmdp-park .pk-chg-filters button:hover,
.mmdp-park .pk-chg-filters button:focus,
.mmdp-park .pk-chg-filters button:active{
	font:600 11px/1.2 var(--f-mono)!important;letter-spacing:.04em!important;text-transform:none!important;text-decoration:none!important;
	border:1px solid var(--line)!important;border-radius:999px!important;padding:7px 14px!important;margin:0!important;
	box-shadow:none!important;transform:none!important;transition:color .15s,background .15s,border-color .15s!important;
	white-space:nowrap!important;cursor:pointer!important;outline:none!important;-webkit-tap-highlight-color:transparent;min-height:0!important;line-height:1.2!important;
	color:var(--muted)!important;background:var(--surface)!important;
}
.mmdp-park .pk-chg-filters button:hover{color:var(--text)!important;border-color:var(--line-2)!important}
.mmdp-park .pk-chg-filters button.on{color:var(--ac)!important;background:color-mix(in srgb,var(--ac) 16%,transparent)!important;border-color:color-mix(in srgb,var(--ac) 55%,var(--line))!important}
.mmdp-park .pk-chg-filters button:focus-visible{box-shadow:0 0 0 2px color-mix(in srgb,var(--ac) 70%,transparent)!important}
/* "Show all" — armoured against Elementor link/button styling. */
.mmdp-park .pk-chg-more,
.mmdp-park .pk-chg-more:hover,
.mmdp-park .pk-chg-more:focus,
.mmdp-park .pk-chg-more:active{
	font:600 13.5px/1.3 var(--f-ui)!important;letter-spacing:normal!important;text-transform:none!important;
	color:var(--ac)!important;background:none!important;border:0!important;box-shadow:none!important;transform:none!important;
	padding:8px 2px!important;margin:14px 0 0!important;cursor:pointer!important;outline:none!important;-webkit-tap-highlight-color:transparent;text-decoration:none!important;display:inline-block;
}
.mmdp-park .pk-chg-more:hover{color:var(--text)!important}
.mmdp-park .pk-chg-list{display:flex;flex-direction:column;gap:12px}
/* fixed-width tag column so the text left-aligns regardless of tag length (George, 15 June) */
.mmdp-park .pk-chg{display:grid;grid-template-columns:150px 1fr;gap:16px;align-items:start;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:15px 18px}
.mmdp-park .pk-chg-meta{display:flex;flex-direction:column;gap:7px;align-items:flex-start}
.mmdp-park .pk-chg-date{font-family:var(--f-mono);font-size:11px;letter-spacing:.04em;color:var(--dim);padding-left:2px}
.mmdp-park .pk-chg-tag{justify-self:start;font-family:var(--f-mono);font-size:10px;letter-spacing:.08em;text-transform:uppercase;font-weight:600;padding:5px 10px;border-radius:999px;white-space:nowrap}
.mmdp-park .pk-chg-tag.soon{color:#FBBF24;background:rgba(251,191,36,.12)}
.mmdp-park .pk-chg-tag.dev{color:var(--pc,var(--ac));background:color-mix(in srgb,var(--pc,var(--ac)) 12%,transparent)} /* park accent, not MK blue (R2) */
.mmdp-park .pk-chg-tag.refurb{color:#FB923C;background:rgba(251,146,60,.12)}
.mmdp-park .pk-chg-tag.new{color:var(--ok);background:rgba(52,211,153,.12)}
.mmdp-park .pk-chg-tag.closed{color:var(--closed);background:rgba(248,113,113,.12)}
.mmdp-park .pk-chg-b h3{font-family:var(--f-display);font-weight:600;font-size:17px;color:var(--text)}
.mmdp-park .pk-chg-b p{font-size:14px;color:var(--muted);margin:4px 0 0;max-width:70ch}
.mmdp-park .pk-chg-b .pk-sec-link{display:inline-block;margin-top:8px}

/* ---------------- interactive map ---------------- */
.mmdp-park .pk-map-wrap{position:relative;border:1px solid var(--line);border-radius:var(--radius);overflow:hidden}
.mmdp-park .pk-map{height:460px;width:100%;background:#0b0d12;z-index:1;position:relative}
/* Basemap treatment (v0.30.0) — REPLACES the v0.28.0 canvas filter, which was the
   wrong tool: a CSS filter cannot distinguish Mapbox's basemap from OUR OWN symbol
   layers, so desaturating the grass also crushed the wait-tier colours under each
   ride name. Desaturation now happens inside Mapbox via basemap theme "monochrome"
   (see applyStyle() in park-map.js), which only touches the basemap. Our land labels,
   ride labels and wait colours are separate layers and render at full strength.
   The hook below stays as a no-op escape hatch: set --map-filter on .mmdp-park if a
   page ever needs a nudge, e.g. filter:brightness(.9). Default is none — no filter,
   no compositing layer, no cost. */
.mmdp-park{--map-filter:none}
.mmdp-park .mapboxgl-canvas,.mmdp-park .maplibregl-canvas{filter:var(--map-filter)}
/* "Loading map…" hint until Mapbox fires load (R3) — a ::before on the container
   (never a marker element), so Mapbox's canvas simply paints over it */
.mmdp-park.pk-map-wrap:not(.pk-map-ready) .pk-map::before{content:"Loading map…";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font:500 11px/1 var(--f-mono);letter-spacing:.1em;text-transform:uppercase;color:var(--muted);pointer-events:none;z-index:1}
/* boot-failure fallback (R3): map + live-looking controls hidden, the rendered
   attraction list (side panel) shown instead, message on top */
.mmdp-park.pk-map-wrap.pk-map-failed .pk-map,
.mmdp-park.pk-map-wrap.pk-map-failed .pk-map-legend,
.mmdp-park.pk-map-wrap.pk-map-failed .pk-ctrls,
.mmdp-park.pk-map-wrap.pk-map-failed .pk-map-fs{display:none!important}
.mmdp-park.pk-map-wrap.pk-map-failed .pk-side{display:flex;border-right:0;max-height:420px}
.mmdp-park .pk-map-fail{font:400 13px/1.5 var(--f-body);color:var(--muted);background:var(--surface);border-bottom:1px solid var(--line);padding:14px 16px}
.mmdp-park .pk-map-bar{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:10px 14px;background:var(--surface);border-top:1px solid var(--line);flex-wrap:wrap}
.mmdp-park .pk-ctrls{display:flex;gap:10px;flex-wrap:wrap}
.mmdp-park .pk-seg{display:inline-flex;border:1px solid var(--line-2);border-radius:999px;overflow:hidden}
.mmdp-park .pk-seg button{font-family:var(--f-ui);font-size:12px;font-weight:500;color:var(--muted);padding:7px 14px;cursor:pointer;transition:color .2s,background .2s}
.mmdp-park .pk-seg button.on{background:var(--ac);color:#06121f}
.mmdp-park .pk-map-fs{font-family:var(--f-mono);font-size:11px;color:var(--ac);border:1px solid var(--line-2);border-radius:8px;padding:6px 11px;cursor:pointer;white-space:nowrap}
.mmdp-park .pk-map-filter{display:inline-flex;align-items:center;gap:7px;font-family:var(--f-ui);font-size:12px;font-weight:500;color:var(--muted);background:transparent;border:1px solid var(--line-2);border-radius:999px;padding:6px 13px;cursor:pointer;transition:color .2s,background .2s,border-color .2s;white-space:nowrap}
.mmdp-park .pk-map-filter .pk-mf-dot{width:8px;height:8px;border-radius:50%;background:var(--line-2);transition:background .2s;flex:0 0 auto}
.mmdp-park .pk-map-filter.on{color:#06121f;background:var(--ac);border-color:var(--ac)}
.mmdp-park .pk-map-filter.on .pk-mf-dot{background:#06121f}
/* side panel (fullscreen explorer) */
.mmdp-park .pk-side{display:none;flex-direction:column;background:var(--surface);border-right:1px solid var(--line-2);min-height:0}
.mmdp-park .pk-side-h{font-family:var(--f-mono);font-size:10px;letter-spacing:.14em;text-transform:uppercase;color:var(--dim);padding:14px 14px 8px}
.mmdp-park .pk-side-track{display:flex;flex-direction:column;gap:5px;overflow-y:auto;padding:0 14px 14px;flex:1;min-height:0}
.mmdp-park .pk-side-i{display:flex;align-items:center;gap:11px;width:100%;text-align:left;border:1px solid transparent;border-radius:10px;padding:8px;cursor:pointer;transition:background .15s}
@media(hover:hover){.mmdp-park .pk-side-i:hover{background:var(--surface-2)}}
.mmdp-park .pk-side-th{position:relative;width:54px;height:40px;border-radius:7px;flex:none;background:var(--surface-3) center/cover}
.mmdp-park .pk-side-t{display:flex;flex-direction:column;gap:2px;min-width:0}
.mmdp-park .pk-side-n{font-family:var(--f-ui);font-weight:500;font-size:13px;color:var(--text);white-space:normal;overflow-wrap:anywhere;max-width:200px;line-height:1.2}
.mmdp-park .pk-side-star{position:absolute;top:2px;left:4px;color:#FFD23F;font-size:11px;line-height:1;text-shadow:0 1px 3px rgba(0,0,0,.85)}
.mmdp-park .pk-side-w{font-family:var(--f-mono);font-size:11px;color:var(--ok)}
/* wait heat ramp on side rows (R3) — placed after the armour blocks below via the
   tier overrides at the end of the map section */
/* fullscreen (wrap is reparented to <body>, keeps .mmdp-park for tokens).
   Desktop: side list left + map right + bar. Mobile: map on top, attractions as
   a horizontal swipe strip, bar last — mirrors the microsite mock. */
.mmdp-park.pk-map-wrap.fs,.mmdp-park .pk-map-wrap.fs{position:fixed;inset:0;z-index:2147483000;border-radius:0;border:0;background:var(--bg);display:grid;grid-template-columns:300px 1fr;grid-template-rows:1fr auto}
.pk-map-wrap.fs .pk-side{display:flex;grid-column:1;grid-row:1;min-height:0;overflow:hidden}
.pk-map-wrap.fs .pk-map{grid-column:2;grid-row:1;height:auto!important;min-height:0}
.pk-map-wrap.fs .pk-map-bar{grid-column:1 / -1;grid-row:2}
@media(min-width:761px){.pk-map-wrap.fs .pk-map-legend{left:312px}}
@media(max-width:760px){
	.mmdp-park.pk-map-wrap.fs,.mmdp-park .pk-map-wrap.fs{grid-template-columns:1fr;grid-template-rows:1fr auto auto}
	.pk-map-wrap.fs .pk-map{grid-column:1;grid-row:1}
	.pk-map-wrap.fs .pk-side{grid-column:1;grid-row:2;border-right:0;border-top:1px solid var(--line-2);max-height:112px;overflow:hidden}
	.pk-map-wrap.fs .pk-side .pk-side-h{padding:8px 12px 4px}
	.pk-map-wrap.fs .pk-side-track{flex-direction:row;overflow-x:auto;overflow-y:hidden;gap:8px;padding:0 12px 10px}
	.pk-map-wrap.fs .pk-side-i{flex:0 0 auto;width:auto}
	.pk-map-wrap.fs .pk-side-n{max-width:150px}
	.pk-map-wrap.fs .pk-map-bar{grid-column:1;grid-row:3}
}
/* legend — overlay chip on the map (top-left), reads as a key. Selector must
   match the wrap itself (which carries .mmdp-park) so it still pins in fullscreen. */
.mmdp-park .pk-map-legend{position:absolute;top:12px;left:12px;z-index:3;display:inline-flex;align-items:center;gap:7px;font-family:var(--f-mono);font-size:11px;letter-spacing:.04em;color:#fff;background:rgba(8,10,14,.62);border:1px solid var(--line-2);border-radius:999px;padding:7px 13px;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}
/* retail view shows no favourites — a stale "★ Our favourites" key reads as broken (R3) */
.mmdp-park.pk-map-wrap.mmdp-retail-mode .pk-map-legend{display:none}
.mmdp-park .pk-map-legend .lg-star{display:inline-flex;align-items:center;color:#FFD23F;font-size:14px;line-height:1;transform:translateY(-1px)}
.mmdp-park .pk-map-legend .lg-txt{display:inline-flex;align-items:center;line-height:1}
/* inline-SVG teardrop pins — no CSS transform (Mapbox owns the marker transform); shadow/scale on the SVG only */
.mmdp-park .mmdp-pin{cursor:pointer;line-height:0}
/* 44px hit extender (Apple floor, R1) — a bigger tap target only. CRITICAL:
   no position property on the pin/cluster themselves — Mapbox positions the
   marker element via .mapboxgl-marker{position:absolute}, and overriding that
   (v0.25.0 regression) dumps every pin out of the map's coordinate space.
   The marker element is already position:absolute, so it IS the containing
   block for this ::after — no extra positioning needed. */
.mmdp-park .mmdp-pin::after,.mmdp-park .mmdp-cluster::after{content:"";position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:44px;height:44px;border-radius:50%}
.mmdp-park.pk-map-wrap:not(.mmdp-retail-mode) .mmdp-extra{display:none!important}
.mmdp-park.pk-map-wrap.mmdp-retail-mode .mmdp-pin:not(.mmdp-extra),.mmdp-park.pk-map-wrap.mmdp-retail-mode .mmdp-cluster{display:none!important}
.mmdp-park .mmdp-pin svg{display:block;filter:drop-shadow(0 3px 5px rgba(0,0,0,.5));transition:filter .15s,transform .12s;transform-origin:bottom center}
/* pin hover gated to hover devices — taps were leaving pins stuck at 1.05 scale (R3) */
@media(hover:hover){.mmdp-park .mmdp-pin:hover svg{filter:drop-shadow(0 5px 10px rgba(0,0,0,.7));transform:scale(1.05)}}
/* ride names are a Mapbox symbol layer (mmdp-pin-label) on the basemap — never inside the marker, so they can't shift the pins */
.mmdp-park .mmdp-pin.is-fav{z-index:2}
/* soft entrance when pins/clusters (re)appear on cluster/split — smoother than a hard snap */
@keyframes mmdpMkPop{from{opacity:0;transform:scale(.5)}to{opacity:1;transform:scale(1)}}
@keyframes mmdpMkFade{from{opacity:0}to{opacity:1}}
.mmdp-park .mmdp-pin svg{animation:mmdpMkPop .2s cubic-bezier(.2,.8,.3,1.2)}
/* marker + popup entrances gated for reduced motion (R3) */
@media(prefers-reduced-motion:reduce){
	.mmdp-park .mmdp-pin svg,.mmdp-park .mmdp-cluster{animation:none}
	.mmdp-park .mapboxgl-popup-content,.mmdp-park .maplibregl-popup-content{animation:none}
}
/* cluster bubble (crowded pins group into a count; click → ride list) —
   dark ink, not white: white sat ≈1.9:1 on the AK green bubble (R3, same ink
   as the seg .on state) */
.mmdp-park .mmdp-cluster{border-radius:50%;background:var(--pin,#3EB5F5);color:#06121f;border:2px solid #fff;display:flex;align-items:center;justify-content:center;font-family:var(--f-ui);font-weight:600;font-size:13px;cursor:pointer;box-shadow:0 3px 8px rgba(0,0,0,.5);animation:mmdpMkFade .2s ease-out}
.mmdp-park .mmdp-cluster.has-fav{box-shadow:0 0 0 3px rgba(255,210,63,.65),0 3px 8px rgba(0,0,0,.5)}
/* cluster ride-list (inside a popup) — like the Explore-attractions panel */
.mmdp-park .pk-cl{width:240px}
.mmdp-park .pk-cl-h{font-family:var(--f-mono);font-size:10px;letter-spacing:.12em;text-transform:uppercase;color:var(--dim);padding:13px 14px 7px}
.mmdp-park .pk-cl-list{display:flex;flex-direction:column;gap:3px;max-height:248px;overflow-y:auto;padding:0 10px 12px}
/* no hover effect on the cluster ride-list rows (consistent with Explore-attractions) */
.mmdp-park .pk-cl-i,.mmdp-park .pk-cl-i:hover,.mmdp-park .pk-cl-i:focus,.mmdp-park .pk-cl-i:active{display:flex;align-items:center;gap:10px;width:100%;text-align:left;background:transparent!important;border:0!important;border-radius:8px;padding:7px;cursor:pointer;box-shadow:none!important;transform:none!important}
.mmdp-park .pk-cl-th{position:relative;width:46px;height:34px;border-radius:6px;flex:none;background:var(--surface-3) center/cover}
.mmdp-park .pk-cl-star{position:absolute;top:2px;left:3px;color:#FFD23F;font-size:10px;line-height:1;text-shadow:0 1px 3px rgba(0,0,0,.85)}
.mmdp-park .pk-cl-t{display:flex;flex-direction:column;gap:1px;min-width:0}
.mmdp-park .pk-cl-n{font:500 13px/1.2 var(--f-ui)!important;color:var(--text)!important;text-transform:none!important;letter-spacing:normal!important}
.mmdp-park .pk-cl-w{font:400 11px/1 var(--f-mono)!important;color:var(--ok)!important}
/* ELEMENTOR ARMOUR — pin font + box on every map control across all states so the theme/Elementor can't resize or recolour them on hover */
.mmdp-park .pk-seg button,.mmdp-park .pk-seg button:hover,.mmdp-park .pk-seg button:focus,.mmdp-park .pk-seg button:focus-visible,.mmdp-park .pk-seg button:active{
	font:500 12px/1 var(--f-ui)!important;padding:7px 14px!important;color:var(--muted)!important;background:transparent!important;border:0!important;
	box-shadow:none!important;text-shadow:none!important;text-decoration:none!important;outline:none!important;transform:none!important;letter-spacing:normal!important;text-transform:none!important;height:auto!important;min-height:0!important;-webkit-appearance:none;appearance:none;cursor:pointer}
.mmdp-park .pk-seg button.on,.mmdp-park .pk-seg button.on:hover,.mmdp-park .pk-seg button.on:focus{background:var(--ac)!important;color:#06121f!important}
.mmdp-park .pk-map-filter,.mmdp-park .pk-map-filter:hover,.mmdp-park .pk-map-filter:focus,.mmdp-park .pk-map-filter:focus-visible,.mmdp-park .pk-map-filter:active{text-decoration:none!important;box-shadow:none!important;transform:none!important;white-space:nowrap!important}
.mmdp-park .pk-map-filter.on,.mmdp-park .pk-map-filter.on:hover,.mmdp-park .pk-map-filter.on:focus{background:var(--ac)!important;color:#06121f!important;border-color:var(--ac)!important}
.mmdp-park .pk-map-fs,.mmdp-park .pk-map-fs:hover,.mmdp-park .pk-map-fs:focus,.mmdp-park .pk-map-fs:focus-visible,.mmdp-park .pk-map-fs:active{
	font:600 11px/1 var(--f-mono)!important;padding:6px 11px!important;color:var(--ac)!important;background:transparent!important;border:1px solid var(--line-2)!important;border-radius:8px!important;
	box-shadow:none!important;text-shadow:none!important;text-decoration:none!important;outline:none!important;transform:none!important;letter-spacing:normal!important;text-transform:none!important;height:auto!important;min-height:0!important;-webkit-appearance:none;appearance:none;cursor:pointer}
.mmdp-park .pk-side-i,.mmdp-park .pk-side-i:hover,.mmdp-park .pk-side-i:focus,.mmdp-park .pk-side-i:active{
	background:transparent!important;border:1px solid transparent!important;box-shadow:none!important;text-shadow:none!important;outline:none!important;transform:none!important;text-decoration:none!important;border-radius:10px!important;-webkit-appearance:none;appearance:none}
/* George: NO hover effect at all on the Explore-attractions list items — pin every state so Elementor can't shift/scale them */
.mmdp-park .pk-side-i:hover,.mmdp-park .pk-side-i:focus,.mmdp-park .pk-side-i:focus-visible,.mmdp-park .pk-side-i:active{background:transparent!important;border-color:transparent!important;transform:none!important;translate:none!important;scale:none!important;margin:0!important;padding:8px!important;inset:auto!important;box-shadow:none!important;filter:none!important}
.mmdp-park .pk-side-n{font:500 13px/1.2 var(--f-ui)!important;color:var(--text)!important;text-transform:none!important;letter-spacing:normal!important;white-space:normal!important}
.mmdp-park .pk-side-w{font:400 11px/1 var(--f-mono)!important;color:var(--ok)!important;text-transform:none!important}
.mmdp-park .mapboxgl-ctrl-group button,.mmdp-park .mapboxgl-ctrl-group button:hover,.mmdp-park .mapboxgl-ctrl-group button:focus,.mmdp-park .mapboxgl-ctrl-group button:active,.mmdp-park .maplibregl-ctrl-group button,.mmdp-park .maplibregl-ctrl-group button:hover,.mmdp-park .maplibregl-ctrl-group button:focus,.mmdp-park .maplibregl-ctrl-group button:active{
	background:transparent!important;box-shadow:none!important;transform:none!important;border-radius:0!important;width:29px!important;height:29px!important}
/* attribution — dark to match; kill the Elementor/theme button styling (orange box on desktop, white box on mobile compact) */
.mmdp-park .mapboxgl-ctrl-attrib,.mmdp-park .mapboxgl-ctrl-attrib *,.mmdp-park .maplibregl-ctrl-attrib,.mmdp-park .maplibregl-ctrl-attrib *{box-shadow:none!important;text-shadow:none!important;border-radius:0!important;transform:none!important}
.mmdp-park .mapboxgl-ctrl-attrib,.mmdp-park .mapboxgl-ctrl-attrib.mapboxgl-compact,.mmdp-park .mapboxgl-ctrl-bottom-right .mapboxgl-ctrl-attrib,.mmdp-park .maplibregl-ctrl-attrib,.mmdp-park .maplibregl-ctrl-attrib.maplibregl-compact,.mmdp-park .maplibregl-ctrl-bottom-right .maplibregl-ctrl-attrib{background:rgba(8,10,14,.72)!important;border-radius:6px 0 0 0!important;padding:0 6px!important}
.mmdp-park .mapboxgl-ctrl-attrib a,.mmdp-park .mapboxgl-ctrl-attrib a:hover,.mmdp-park .mapboxgl-ctrl-attrib a:focus,.mmdp-park .maplibregl-ctrl-attrib a,.mmdp-park .maplibregl-ctrl-attrib a:hover,.mmdp-park .maplibregl-ctrl-attrib a:focus{background:none!important;color:rgba(255,255,255,.6)!important;text-decoration:none!important;font:400 11px/1.6 var(--f-ui)!important;padding:0!important}
.mmdp-park .mapboxgl-ctrl-attrib-button,.mmdp-park .mapboxgl-ctrl-attrib-button:hover,.mmdp-park .maplibregl-ctrl-attrib-button,.mmdp-park .maplibregl-ctrl-attrib-button:hover{background:rgba(8,10,14,.62)!important;filter:invert(1) brightness(1.3);border-radius:50%!important}
/* popup — force it above the markers (pins were drawing in front) */
.mmdp-park .mapboxgl-popup,.mmdp-park .maplibregl-popup{z-index:99999!important}
.mmdp-park .mapboxgl-popup-content,.mmdp-park .maplibregl-popup-content{background:var(--surface-2);color:var(--text);border:1px solid var(--line-2);border-radius:12px;padding:0;overflow:hidden;box-shadow:0 14px 40px rgba(0,0,0,.5);animation:mmdpPopIn .18s cubic-bezier(.2,.7,.3,1)}
/* popup entrance — used to snap in with no motion (R3); reduced-motion gated above */
@keyframes mmdpPopIn{from{opacity:0;transform:translateY(4px) scale(.98)}to{opacity:1;transform:none}}
.mmdp-park .mapboxgl-popup-tip,.mmdp-park .maplibregl-popup-tip{border-top-color:var(--surface-2)!important;border-bottom-color:var(--surface-2)!important}
/* close: 32px (was 24 — below the touch floor, R1) */
.mmdp-park .mapboxgl-popup-close-button,.mmdp-park .mapboxgl-popup-close-button:hover,.mmdp-park .mapboxgl-popup-close-button:focus,.mmdp-park .mapboxgl-popup-close-button:active,.mmdp-park .maplibregl-popup-close-button,.mmdp-park .maplibregl-popup-close-button:hover,.mmdp-park .maplibregl-popup-close-button:focus,.mmdp-park .maplibregl-popup-close-button:active{position:absolute!important;top:6px!important;right:6px!important;z-index:2;display:flex!important;align-items:center;justify-content:center;width:32px!important;height:32px!important;min-width:0!important;min-height:0!important;padding:0!important;margin:0!important;font:600 17px/1 var(--f-ui)!important;color:#fff!important;background:rgba(8,10,14,.6)!important;border-radius:50%!important;box-shadow:none!important;text-shadow:none!important;border:0!important;outline:none!important;-webkit-appearance:none;appearance:none;transform:none!important;cursor:pointer}
.mmdp-park .mapboxgl-ctrl-group,.mmdp-park .maplibregl-ctrl-group{background:var(--surface-2);border:1px solid var(--line-2);box-shadow:none}
.mmdp-park .mapboxgl-ctrl-group button+button,.mmdp-park .maplibregl-ctrl-group button+button{border-top:1px solid var(--line-2)}
.mmdp-park .mapboxgl-ctrl-group .mapboxgl-ctrl-icon,.mmdp-park .maplibregl-ctrl-group .maplibregl-ctrl-icon{filter:invert(1) brightness(1.4)}
.mmdp-park .pk-pop{display:flex;flex-direction:column;width:240px}
.mmdp-park .pk-pop-img{height:104px;background:linear-gradient(135deg,#1a2030,#0a0e16) center/cover}
.mmdp-park .pk-pop-b{padding:12px 14px}
.mmdp-park .pk-pop-b strong{font-family:var(--f-ui);font-weight:600;font-size:14.5px;color:var(--text);display:block}
.mmdp-park .pk-pop-meta{font-family:var(--f-mono);font-size:11px;color:var(--muted);margin:4px 0 8px}
.mmdp-park .pk-pop-meta .wt{color:var(--ok);font-weight:600}
.mmdp-park .pk-pop-meta .wt.closed{color:var(--closed)}
.mmdp-park .pk-pop-b a,.mmdp-park .pk-pop-b a:hover{font-family:var(--f-ui);font-size:13px;font-weight:600;color:var(--ac)!important}
/* "Guide coming soon" was ≈3.4:1 on the popup surface (R3) */
.mmdp-park .pk-pop-b .soon-txt{font-family:var(--f-ui);font-size:12.5px;color:var(--muted)}
/* ---- wait heat ramp (R3): popups + side rows + cluster rows match the waits
   board's lo/md/hi/pk instead of all-green. Placed after the armour blocks so
   the equal-!important tier colour wins on the armoured rows. ---- */
.mmdp-park .pk-pop-meta .wt.lo{color:var(--w-lo)}.mmdp-park .pk-pop-meta .wt.md{color:var(--w-md)}.mmdp-park .pk-pop-meta .wt.hi{color:var(--w-hi)}.mmdp-park .pk-pop-meta .wt.pk{color:var(--w-pk)}
.mmdp-park .pk-side-w.lo{color:var(--w-lo)!important}.mmdp-park .pk-side-w.md{color:var(--w-md)!important}.mmdp-park .pk-side-w.hi{color:var(--w-hi)!important}.mmdp-park .pk-side-w.pk{color:var(--w-pk)!important}
.mmdp-park .pk-cl-w.lo{color:var(--w-lo)!important}.mmdp-park .pk-cl-w.md{color:var(--w-md)!important}.mmdp-park .pk-cl-w.hi{color:var(--w-hi)!important}.mmdp-park .pk-cl-w.pk{color:var(--w-pk)!important}

/* ---------------- responsive ---------------- */
@media(max-width:760px){
	.mmdp-park .pk-chg{grid-template-columns:1fr;gap:8px;padding:13px 15px}
	.mmdp-park .pk-chg-meta{flex-direction:row;align-items:center;gap:10px}
	.mmdp-park .pk-chg-b h3{font-size:15.5px}
	.mmdp-park .pk-chg-b p{font-size:13.5px}
	.mmdp-park .pk-map{height:380px}
	.mmdp-park.pk-hero{min-height:340px}
	.mmdp-park .pk-hero-inner{padding-top:84px;padding-bottom:58px}
	.mmdp-park .pk-hero-bar{position:absolute;left:0;right:0;bottom:0}
	/* stats on mobile: clean borderless label/value pairs that wrap — no chunky
	   boxes, no horizontal scroll, keeps the hero short and tidy */
	.mmdp-park .pk-hero-stats{flex-wrap:wrap;gap:6px 18px;margin-top:16px;padding:12px 0 0;border-top:1px solid var(--line-2)}
	.mmdp-park .pk-hero-stats .pstat{flex:0 0 auto;background:none!important;border:0!important;border-radius:0;padding:0;-webkit-backdrop-filter:none;backdrop-filter:none}
	.mmdp-park .pk-hero-stats .pstat .k{font-size:8.5px}
	.mmdp-park .pk-hero-stats .pstat .v{font-size:14px}
	.mmdp-park .swim-fade{width:34px}
	.mmdp-park .pk-sec-head h2,.mmdp-park .mmdp-prose h2{font-size:23px}
	.mmdp-park.pk-block{padding:20px 0}
	/* chapter breaks scale down with the tighter mobile rhythm (v0.27) */
	.mmdp-park.pk-block.pk-feature-band,
	.mmdp-park.pk-block:has(.pk-map-wrap),
	.mmdp-park.pk-block:has(.pk-faq){padding:32px 0}
	/* lands + headliners become swipe carousels on phones */
	.mmdp-park .pk-lands-rail.pk-has-img{display:flex;overflow-x:auto;gap:12px;padding:7px 1px;scroll-snap-type:x proximity;-webkit-overflow-scrolling:touch;scrollbar-width:none}
		.mmdp-park .pk-lands-rail:not(.pk-has-img){grid-template-columns:1fr}
	.mmdp-park .pk-lands-rail.pk-has-img::-webkit-scrollbar{display:none}
	.mmdp-park .pk-lands-rail.pk-has-img>.pk-card{flex:0 0 78%;scroll-snap-align:start}
	.mmdp-park .pk-hl-row{display:flex;overflow-x:auto;gap:12px;padding:7px 1px;scroll-snap-type:x proximity;-webkit-overflow-scrolling:touch;scrollbar-width:none}
	.mmdp-park .pk-hl-row::-webkit-scrollbar{display:none}
	.mmdp-park .pk-hl-row>.pk-hl-card{flex:0 0 82%;scroll-snap-align:start}
	.mmdp-park .pk-rail>.pk-card{flex:0 0 78%}
	/* waits: mobile rethink — a clean full-width stacked list, not a squeezed board or a hidden horizontal scroller */
	.mmdp-park .pk-mkw-board{grid-template-columns:1fr;gap:8px}
	.mmdp-park .pk-mkw{padding:14px 16px}
	/* gallery: horizontal swim-lane on phones (saves vertical space) */
	.mmdp-park .pk-gallery{display:flex;overflow-x:auto;gap:12px;scroll-snap-type:x proximity;-webkit-overflow-scrolling:touch;scrollbar-width:none;grid-auto-flow:initial}
	.mmdp-park .pk-gallery::-webkit-scrollbar{display:none}
	.mmdp-park .pk-gal-cell{flex:0 0 78%;height:210px;scroll-snap-align:start}
	.mmdp-park .pk-gal-cell.wide,.mmdp-park .pk-gal-cell.tall{grid-column:auto;grid-row:auto}
}
@media(max-width:1009px) and (min-width:761px){
	.mmdp-park .pk-gallery{grid-template-columns:repeat(2,1fr)}
	.mmdp-park .pk-hl-row{grid-template-columns:repeat(2,1fr)}
	.mmdp-park .pk-lands-rail{grid-template-columns:repeat(2,1fr)}
	.mmdp-park .pk-mkw-board{grid-template-columns:repeat(2,1fr)}
}

/* ---------------- section note + places grid ----------------
   Consolidated from the PHP-inline mmdp_attr_grid_css() block (R2) — this
   file is now the single source of truth; the inline copy had already
   diverged from the attr-grid rules above. */
.mmdp-park .pk-sec-note{margin:6px 0 0;font-size:13px;line-height:1.5;font-style:italic;color:var(--muted);font-family:var(--f-body)}
.mmdp-park .pk-places-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}
.mmdp-park .pk-places-grid.pk-cols-4{grid-template-columns:repeat(4,1fr)}
.mmdp-park .pk-places-grid .pk-card{min-width:0}
@media(max-width:1024px){.mmdp-park .pk-places-grid,.mmdp-park .pk-places-grid.pk-cols-4{grid-template-columns:repeat(2,1fr)}}
@media(max-width:767px){
	/* shows/dining: horizontal swipe carousel on phones (unlike the attractions grid, which stacks) */
	.mmdp-park .pk-places-grid,.mmdp-park .pk-places-grid.pk-cols-4{display:flex;grid-template-columns:none;overflow-x:auto;-webkit-overflow-scrolling:touch;scroll-snap-type:x proximity;gap:12px;padding-bottom:6px;scrollbar-width:none}
	.mmdp-park .pk-places-grid::-webkit-scrollbar{display:none}
	.mmdp-park .pk-places-grid>.pk-card{flex:0 0 72%;scroll-snap-align:start}
}

/* ---------------- press states (R3) ----------------
   Tap acknowledgement inside the armour: the armour pins background + transform
   across every state, so before this NOTHING on the page reacted to a press.
   These land after the armour blocks at equal-or-higher specificity — press
   feedback is a background tint (transform stays pinned, nothing moves). */
.mmdp-park .pk-chg-filters button:active{background:var(--surface-2)!important}
.mmdp-park .pk-toggle button:active:not(.on){background:rgba(255,255,255,.1)!important}
.mmdp-park .pk-gal-toggle button:active:not(.on){background:rgba(255,255,255,.08)!important}
.mmdp-park .pk-seg button:active:not(.on){background:rgba(255,255,255,.08)!important}
.mmdp-park .pk-map-filter:active:not(.on){background:var(--surface-2)!important}
.mmdp-park .pk-map-fs:active{background:var(--surface-2)!important}
.mmdp-park .pk-chg-more:active{color:var(--text)!important}
.mmdp-park .pk-sec-link:active{color:#5BC4F7!important}

/* ---------------- keyboard focus (R1 — the one true critical) ----------------
   Ports the .pk-chg-filters chip ring to every interactive control. box-shadow
   ring (design-system focus standard) survives the Elementor armour; the
   armoured components are listed explicitly so this rule lands LATER at equal
   specificity and beats their box-shadow:none!important. Zero change for
   mouse users (:focus-visible only). */
.mmdp-park a:focus-visible,
.mmdp-park button:focus-visible,
.mmdp-park summary:focus-visible,
.mmdp-park .pk-sec-link:focus-visible,
.mmdp-park .pk-chg-more:focus-visible,
.mmdp-park .pk-toggle button:focus-visible,
.mmdp-park .pk-gal-toggle button:focus-visible,
.mmdp-park .pk-seg button:focus-visible,
.mmdp-park .pk-map-fs:focus-visible,
.mmdp-park .pk-map-filter:focus-visible,
.mmdp-park .pk-side-i:focus-visible,
.mmdp-park .pk-cl-i:focus-visible,
.mmdp-park .pk-prose a:focus-visible,
.mmdp-park .pk-faq-a a:focus-visible,
.mmdp-park .mmdp-prose a:focus-visible,
.mmdp-park .pk-rail-btn:focus-visible,
.mmdp-park .mmdp-pin:focus-visible,
.mmdp-park .mmdp-cluster:focus-visible,
.mmdp-park .mapboxgl-popup-close-button:focus-visible,
.mmdp-park .mapboxgl-ctrl-group button:focus-visible,
.mmdp-park .maplibregl-popup-close-button:focus-visible,
.mmdp-park .maplibregl-ctrl-group button:focus-visible{
	outline:none!important;
	box-shadow:0 0 0 2px color-mix(in srgb,var(--pc,var(--ac)) 70%,transparent)!important}

/* ---------------- touch-target floor (R1) ----------------
   pointer:coarse only — desktop pixels untouched. Overrides sit after the
   armour blocks so equal-specificity !important resolves to these. */
@media(pointer:coarse){
	.mmdp-park .pk-toggle button,.mmdp-park .pk-toggle button:hover,.mmdp-park .pk-toggle button:focus,.mmdp-park .pk-toggle button:active{padding:11px 14px!important}
	.mmdp-park .pk-gal-toggle button,.mmdp-park .pk-gal-toggle button:hover,.mmdp-park .pk-gal-toggle button:focus,.mmdp-park .pk-gal-toggle button:active{padding:12px 18px!important}
	.mmdp-park .pk-chg-filters button,.mmdp-park .pk-chg-filters button:hover,.mmdp-park .pk-chg-filters button:focus,.mmdp-park .pk-chg-filters button:active{padding:11px 16px!important}
	.mmdp-park .pk-seg button,.mmdp-park .pk-seg button:hover,.mmdp-park .pk-seg button:focus,.mmdp-park .pk-seg button:active{padding:12px 16px!important}
	.mmdp-park .pk-map-fs,.mmdp-park .pk-map-fs:hover,.mmdp-park .pk-map-fs:focus,.mmdp-park .pk-map-fs:active{padding:11px 13px!important}
	.mmdp-park .pk-map-filter{padding:11px 15px}
}

/* ====================================================================
   HOVER MOTION STANDARD (v0.30.0)
   An audit of every :hover rule in this file found a set that change colour,
   background or border with NO transition declared, so those properties
   snapped instantly while neighbouring properties animated. That mismatch is
   what reads as "jolty". One curve, two durations, applied consistently.
   Colour-only changes get the fast duration; anything that moves gets the
   standard one. These sit last in the file so they win on cascade order at
   equal specificity, which is deliberate — do not re-order.
   ==================================================================== */
.mmdp-park{--mm-ease:cubic-bezier(.22,.7,.28,1);--mm-t:.22s;--mm-t-fast:.13s}

/* colour-only: links, breadcrumbs, prose, ranking names */
.mmdp-park .pk-sec-link,
.mmdp-park .pk-crumb a,
.mmdp-park .pk-prose a,
.mmdp-park .mmdp-prose a,
.mmdp-park .pk-faq-a a,
.mmdp-park .pk-chg-more,
.mmdp-park .pk-tl-name,
.mmdp-park .pk-pop-b a{
	transition:color var(--mm-t-fast) var(--mm-ease),text-decoration-color var(--mm-t-fast) var(--mm-ease)}

/* controls: toggles, segmented buttons, map chrome */
.mmdp-park .pk-toggle button,
.mmdp-park .pk-gal-toggle button,
.mmdp-park .pk-seg button,
.mmdp-park .pk-map-filter,
.mmdp-park .pk-map-fs,
.mmdp-park .pk-cl-i,
.mmdp-park .pk-rail-btn,
.mmdp-park .mapboxgl-ctrl-group button,
.mmdp-park .maplibregl-ctrl-group button{
	transition:background var(--mm-t-fast) var(--mm-ease),color var(--mm-t-fast) var(--mm-ease),border-color var(--mm-t-fast) var(--mm-ease),box-shadow var(--mm-t-fast) var(--mm-ease)}

/* things that move: named properties + a real ease-out, replacing the default `ease` */
.mmdp-park .pk-card,
.mmdp-park .pk-hl-card,
.mmdp-park .pk-tl-rung,
.mmdp-park .pk-mkw.is-link,
.mmdp-park .pk-side-i,
.mmdp-park .pk-btn{
	transition:transform var(--mm-t) var(--mm-ease),border-color var(--mm-t) var(--mm-ease),background var(--mm-t) var(--mm-ease),box-shadow var(--mm-t) var(--mm-ease),color var(--mm-t-fast) var(--mm-ease)}

@media (prefers-reduced-motion:reduce){
	.mmdp-park .pk-card,.mmdp-park .pk-hl-card,.mmdp-park .pk-tl-rung,.mmdp-park .pk-mkw.is-link,.mmdp-park .pk-side-i,.mmdp-park .pk-btn{
		transition:border-color var(--mm-t-fast) linear,background var(--mm-t-fast) linear,color var(--mm-t-fast) linear}
	/* the lifts are !important in their own rules, so cancelling needs to be too */
	.mmdp-park .pk-card:hover,.mmdp-park .pk-hl-card:hover,.mmdp-park .pk-btn:hover,.mmdp-park .pk-side-i:hover{transform:none!important}
}

/* ====================================================================
   RATINGS (v0.35.0)

   Stars, not a /10 — film and TV on this site score out of 10 and the two
   scales must not read as comparable numbers.

   Two identical star rows, the gold one clipped by width. That renders any
   fraction without a half-star glyph, survives a font that has no ★, and if
   this stylesheet never loads you get five plain outlines rather than a
   broken layout.
   ==================================================================== */
/* Every token this section uses, declared on the components themselves.

   The rest of this stylesheet scopes its tokens to .mmdp-park, which is right
   for blocks that only ever render inside a park block. These three do not:
   [mm_ride_rating] and [mm_freshness] are meant to be dropped straight onto a
   ride guide, and mmdp_stars() is a helper anything can call. Inheriting from a
   wrapper that may not be there would have given a transparent panel and
   unstyled type — the failure mode where it looks fine on the page you tested
   and broken on the one you didn't.

   The values match the .mmdp-park block exactly, so redeclaring them inside a
   park scope is a no-op rather than a divergence. */
.mm-rating,.mm-rate-panel,.mm-fresh{
	--surface:var(--mmdp-surface,#14171F);
	--line:var(--mmdp-line,rgba(255,255,255,0.08));
	--line-2:var(--mmdp-line-2,rgba(255,255,255,0.14));
	--text:var(--mmdp-text,#F5F5F7);--muted:#A6AAB4;--dim:#7E8695;
	--ok:var(--mmdp-success,#34D399);--closed:var(--mmdp-error,#F87171);
	--warn:#FBBF24;--star:#F5C451;
	--f-ui:'Poppins',system-ui,sans-serif;--f-body:'Inter',system-ui,sans-serif;
	--f-mono:'JetBrains Mono',ui-monospace,monospace;
	--radius:14px}
.mm-rate-panel *,.mm-fresh *,.mm-rating *{box-sizing:border-box}

.mm-rating{display:inline-flex;align-items:center;gap:7px;vertical-align:middle;line-height:1}
.mm-stars{position:relative;display:inline-block;line-height:0;flex:none}
.mm-stars svg{width:1em;height:1em;display:inline-block;vertical-align:top}
.mm-stars-row{display:block;white-space:nowrap;color:var(--line-2,#3a3f4a)}
.mm-stars-fill{
	position:absolute;inset:0 auto 0 0;display:block;white-space:nowrap;
	overflow:hidden;color:var(--star,#F5C451)}
.mm-stars-row svg,.mm-stars-fill svg{fill:currentColor}
.mm-stars.is-sm{font-size:12px}
.mm-stars.is-md{font-size:15px}
.mm-stars.is-lg{font-size:22px}
.mm-stars-n{
	font-family:var(--f-mono);font-weight:600;letter-spacing:.02em;color:var(--muted);
	font-size:.78em}
/* the number scales with its own row, not the page */
.mm-rating:has(.is-sm) .mm-stars-n{font-size:10.5px}
.mm-rating:has(.is-md) .mm-stars-n{font-size:12px}
.mm-rating:has(.is-lg) .mm-stars-n{font-size:15px}

/* the panel on a ride guide */
.mmdp-park .mm-rate-panel,
.mm-rate-panel{
	background:var(--surface);border:1px solid var(--line);border-radius:var(--radius,14px);
	padding:18px 20px;margin:22px 0}
.mm-rate-head{display:flex;align-items:center;gap:14px;flex-wrap:wrap}
.mm-rate-eyebrow{
	font-family:var(--f-mono);font-size:10px;font-weight:600;letter-spacing:.12em;
	text-transform:uppercase;color:var(--dim)}
.mm-rate-note{
	font-family:var(--f-body);font-size:15px;line-height:1.6;color:var(--muted);
	margin:12px 0 0;max-width:60ch}
.mm-rate-rows{list-style:none;margin:16px 0 0;padding:14px 0 0;border-top:1px solid var(--line);
	display:grid;grid-template-columns:repeat(2,1fr);gap:10px 26px}
.mm-rate-rows li{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:0}
.mm-rt-k{font-family:var(--f-ui);font-size:13.5px;color:var(--muted)}
@media(max-width:640px){.mm-rate-rows{grid-template-columns:1fr}}

/* Compact form — the number, then one star. Used in directory rows, map
   popups and dense cards, where five 12px stars beside a coloured wait pill
   is more gold than the row can carry. See mmdp_stars_compact(). */
.mm-rating.is-compact{gap:4px}
.mm-rating.is-compact .mm-stars-n{
	font-family:var(--f-mono);font-size:11.5px;font-weight:600;color:var(--text);letter-spacing:0}
.mm-stars.is-one{font-size:11px;position:relative;display:inline-block;line-height:0}
.mm-stars.is-one .mm-stars-fill{position:static;color:var(--star,#F5C451)}

/* stars on a card */
.mmdp-park .pk-card .mm-rating{margin-top:7px}

/* ====================================================================
   FRESHNESS BAR (v0.35.0)

   Quiet by default and loud only when the page is genuinely old. A bar that
   shouts on every article teaches readers to stop seeing it, which is the
   opposite of what an E-E-A-T signal is for.
   ==================================================================== */
.mm-fresh{
	display:flex;align-items:flex-start;gap:11px;margin:18px 0;
	padding:11px 15px;border-radius:12px;
	background:var(--surface);border:1px solid var(--line);
	border-left:3px solid var(--line-2)}
.mm-fresh-i{flex:none;display:flex;width:17px;height:17px;margin-top:1px;color:var(--dim)}
.mm-fresh-i svg{width:100%;height:100%}
.mm-fresh-t{display:flex;flex-direction:column;gap:3px;min-width:0}
.mm-fresh-t strong{
	font-family:var(--f-ui);font-size:13.5px;font-weight:600;color:var(--text)}
.mm-fresh-note{
	font-family:var(--f-body);font-size:13px;line-height:1.5;color:var(--dim)}
.mm-fresh.is-fresh{border-left-color:var(--ok,#34D399)}
.mm-fresh.is-fresh .mm-fresh-i{color:var(--ok,#34D399)}
.mm-fresh.is-ok{border-left-color:var(--line-2)}
.mm-fresh.is-ageing{border-left-color:var(--warn,#FBBF24)}
.mm-fresh.is-ageing .mm-fresh-i{color:var(--warn,#FBBF24)}
.mm-fresh.is-stale{border-left-color:var(--closed,#F87171)}
.mm-fresh.is-stale .mm-fresh-i{color:var(--closed,#F87171)}

/* ====================================================================
   CARDS FOR RECORDS WITH NO GUIDE YET (v0.35.0)

   The index lists what is IN the park, which is true whether or not we have
   written the guide. A record with no published page is rendered as a card
   that is plainly not a link — same information, no dead click, and it
   becomes a link the moment the guide is published with nothing to update
   (George, 14 Aug).

   mmdp_card_tag() emits a <div> rather than an <a>, so the hover lift and
   pointer have to be cancelled explicitly — inheriting them would promise a
   click that never comes.
   ==================================================================== */
.mmdp-park div.pk-card.is-unwritten{cursor:default;opacity:.74}
@media(hover:hover){
	.mmdp-park div.pk-card.is-unwritten:hover{
		transform:none!important;border-color:var(--line);background:var(--surface)}
}
.mmdp-park div.pk-card.is-unwritten:active{transform:none!important;background:var(--surface)}
.mmdp-park .pk-card.is-unwritten .pk-thumb img{filter:saturate(.55)}

/* Card meta line — where the compact rating sits on cards (v0.36.0). */
.mmdp-park .pk-cmeta{display:flex;align-items:center;gap:10px;margin-top:7px;flex-wrap:wrap}
/* Top 5 rung: the full star row, right-aligned before the wait pill. */
.mmdp-park .pk-tl-rung .mm-rating{flex:none;margin-left:auto}
.mmdp-park .pk-tl-rung .mm-stars{color:var(--star,#F5C451)}
/* Map popup rating — inline with the wait and land, so it inherits their size. */
.pk-pop-rate{font-family:var(--f-mono,ui-monospace,monospace);font-weight:600;color:#F5C451}
.pk-pop-rate .s{margin-left:2px}

/* v0.51 — map credit: one short line, bottom right, linked to the licences. */
.mmdp-attrib{position:absolute;right:8px;bottom:6px;z-index:2;padding:2px 8px;border-radius:6px;background:rgba(8,10,14,.6);font:400 11px/1.6 var(--mm-font-body,Inter,system-ui,sans-serif);color:rgba(255,255,255,.6);pointer-events:auto}
.mmdp-attrib a,.mmdp-attrib a:visited,.mmdp-attrib a:hover{color:rgba(255,255,255,.6)!important;text-decoration:none!important;background:none!important;font:inherit!important;padding:0!important;border:0!important}
.mmdp-attrib a:hover{color:#fff!important}
