@import url('https://fonts.googleapis.com/css2?family=Cormorant+Garamond:ital,wght@0,600;0,700;1,600;1,700&family=Cinzel:wght@400;500;600;700&family=Montserrat:wght@400;500;600;700&display=swap');
/* ---------- reset ----------
   Etch injected its own reset; deactivating the plugin took it with it. This
   CSS was written assuming border-box, and without it every element with an
   explicit width plus padding overflows — the reviews rail pushed the mobile
   layout viewport from 390 to 417. Kept deliberately small: box-sizing, the
   body margin, and media. Buttons/inputs are left alone so Fluent Forms keeps
   styling its own controls. */
*,*::before,*::after{ box-sizing:border-box; }
html{ -webkit-text-size-adjust:100%; }
body{ margin:0; }
img,video{ max-width:100%; height:auto; }

/* ================= PSV2 FOUNDATION — tokens + primitives (mockup-exact) ============ */
:root{
  --psv2-bg:#111111; --psv2-bg-deep:#0c0c0c; --psv2-band:#181818;
  --psv2-surface:#1e1e1e; --psv2-surface-2:#222222; --psv2-surface-3:#1a1a1a;
  --psv2-hairline:#3a3530; --psv2-hairline-soft:#262626; --psv2-hairline-warm:#2b2820;
  --psv2-warm-a:#1b1a15; --psv2-warm-b:#171612;
  --psv2-gold:#c6af75; --psv2-gold-border:#cbb479; --psv2-gold-eyebrow:#d4b96a;
  --psv2-gold-em:#d9c187; --psv2-gold-bright:#e8d9a8; --psv2-gold-hover:#e0d5ba;
  --psv2-grad-gold:linear-gradient(180deg,#eedca8,#c6a352);
  --psv2-grad-tag:linear-gradient(180deg,#e8d089,#c9a94f);
  --psv2-grad-btn:linear-gradient(180deg,#1e2114,#0f1108);
  --psv2-glow:radial-gradient(ellipse 70% 220% at 78% 50%, rgba(203,169,84,.32) 0%, rgba(26,26,26,0) 62%);
  --psv2-text-hero:#fdfaf2; --psv2-text-head:#f5f1e4; --psv2-text-bright:#faf7ee;
  --psv2-text:#e7e2d4; --psv2-text-soft:#dad4c5; --psv2-text-muted:#948c7e;
  --psv2-ink:#111111; --psv2-green-ink:#122a1c;
  --psv2-display:'Cormorant Garamond',Georgia,serif;
  --psv2-caps:'Cinzel',serif;
  --psv2-body:'Montserrat','Helvetica Neue',sans-serif;
  --psv2-h1:clamp(2.5rem,7vw,4.25rem);
  --psv2-h2:clamp(1.75rem,3.6vw,2.75rem);
  --psv2-h3:1.35rem;
  --psv2-lg:1.125rem; --psv2-md:1rem; --psv2-sm:.9375rem; --psv2-xs:.8125rem;
  --psv2-radius:6px; --psv2-container:1200px; --psv2-slim:820px;
  --psv2-gap:14px; --psv2-pad-x:20px; --psv2-tap:44px;
  --psv2-t:.35s cubic-bezier(.25,.46,.45,.94);
}
@media (min-width: 56.25rem){ :root{ --psv2-pad-x:48px; } }

/* ---------- primitives ---------- */
body{ background:var(--psv2-bg); color:var(--psv2-text); font-family:var(--psv2-body); }
main,.site-main,#main-content{ background:var(--psv2-bg); }
img{ max-width:100%; height:auto; }
/* Section rhythm, ported 1:1 from the mockups. The INNER pages are top-weighted
   (56/8 is by far the most common); the HOME page runs bottom-weighted from the
   tech section down. Modifiers below are literal mockup values, not a scale —
   each one is used by a named section, listed in the comment. */
.psv2-section{ padding:56px var(--psv2-pad-x) 8px; }
.psv2-section--flush  { padding-block:0 56px; }   /* home: Technology, PuttView */
.psv2-section--diff   { padding-block:48px 0; }   /* home: Differentiator */
.psv2-section--steps  { padding-block:8px 56px; } /* home: How it works */
.psv2-section--club   { padding-block:0 64px; }   /* home: Membership upsell */
.psv2-section--t32    { padding-block:32px 8px; } /* rates: Promo module */
.psv2-section--t40    { padding-block:40px 8px; } /* contact: Info cards */
.psv2-section--t48    { padding-block:48px 8px; } /* rates: Hourly · memberships: Booking window */
.psv2-section--t64    { padding-block:64px 8px; } /* rates: Memberships/Events/FAQ · lounge: all */
.psv2-section--close  { padding-block:56px 24px; }/* rates: Policies · memberships: Closing CTA */
.psv2-section--close48{ padding-block:48px 24px; }/* contact: Form + quick answers */
.psv2-section--close64{ padding-block:64px 24px; }/* lounge: Reviews + close */
/* lounge splits the mockup's single "Reviews + close" section in two: the reviews
   card carries the 64px top, the CTA below it closes at 24px. */
.psv2-section--closeflush{ padding-block:18px 24px; }

/* /rates/ Policies block. The mockup renders these as one 16px/2 paragraph of
   "Label: text" lines, not as stacked FAQ items — same markup, inline layout. */
.psv2-policies .psv2-faq__item{ display:block; margin:0; padding:0; border:0;
  background:none; font-size:16px; line-height:2; color:var(--psv2-text-soft);
  & .psv2-faq__q{ display:inline; margin:0; font-family:var(--psv2-body);
    font-size:16px; font-weight:700; color:var(--psv2-text-head);
    /* trailing space matters: the converted markup has no whitespace between
       the label and the text, so the colon would butt against it */
    &::after{ content:": "; white-space:pre; } }
  & .psv2-faq__a{ display:inline; margin:0; font-size:16px; line-height:2; }
}
.psv2-section--last{ padding-bottom:56px; }
.psv2-section--tight{ padding-block:8px 56px; }
.psv2-container{ width:100%; max-width:var(--psv2-container); margin-inline:auto; }
.psv2-container--narrow{ max-width:1100px; }   /* rates / memberships / lounge / contact */
.psv2-container--slim{ max-width:var(--psv2-slim); }

/* The mockup has NO full-bleed bands. Sections that read as "banded" are really a
   CARD sitting on the page background, inside the normal 1200px container. */
.psv2-cardsec > .psv2-container{ border:1px solid var(--psv2-hairline);
  border-radius:var(--psv2-radius); }
.psv2-cardsec--diff > .psv2-container{ background:var(--psv2-surface-3);
  padding:36px 26px; text-align:center;
  & .psv2-lede{ max-width:66ch; margin-inline:auto; }
}
.psv2-cardsec--club > .psv2-container{ background:var(--psv2-surface-2); padding:32px 24px;
  & .psv2-lede{ max-width:64ch; }
}

.psv2-eyebrow{ display:flex; align-items:center; gap:12px; margin:0 0 18px;
  font-family:var(--psv2-caps); font-size:15px; font-weight:500; letter-spacing:2.5px;
  text-transform:uppercase; color:var(--psv2-gold-eyebrow);
  &::before{ content:""; display:block; width:32px; height:1px; background:var(--psv2-gold); flex:none; }
}
.psv2-eyebrow--center{ justify-content:center;
  &::after{ content:""; display:block; width:32px; height:1px; background:var(--psv2-gold); flex:none; }
}

.psv2-h2{ margin:0 0 24px; font-family:var(--psv2-display); font-size:clamp(30px,7vw,48px);
  font-weight:700; line-height:1.05; color:var(--psv2-text-head);
  & em{ font-style:italic; color:var(--psv2-gold); }
}
/* Mockup body copy is 17px/1.75 with a 22px trailing gap (paragraphs stack). */
.psv2-lede{ margin:0 0 22px; font-size:17px; line-height:1.75; color:var(--psv2-text-soft);
  &:last-child{ margin-bottom:0; }
  & strong{ color:var(--psv2-text-head); }
}
.psv2-lede--sm{ font-size:var(--psv2-sm); color:var(--psv2-text-muted); }

/* ---------- buttons ---------- */
.psv2-btn{ display:inline-flex; align-items:center; justify-content:center;
  min-height:var(--psv2-tap); padding:13px 26px; border-radius:var(--psv2-radius);
  font-family:var(--psv2-caps); font-size:.82rem; font-weight:600; letter-spacing:2px;
  text-transform:uppercase; text-decoration:none; cursor:pointer;
  border:1px solid transparent; transition:color var(--psv2-t),border-color var(--psv2-t),background var(--psv2-t);
}
.psv2-btn--brand{ color:var(--psv2-gold-em); background:var(--psv2-grad-btn);
  border-color:var(--psv2-gold-border);
  box-shadow:inset 0 0 0 3px rgba(17,17,17,0), inset 0 0 0 4px rgba(198,175,117,.28);
  &:hover{ color:var(--psv2-gold-bright); border-color:var(--psv2-gold-bright); }
}
/* Mockup ghost button: GOLD hairline over a dark fill — not a grey outline.
   Four of the five ghost buttons in the mockups use #c6af75; only the home
   hero's "Memberships" uses the grey #3a3530 hairline (--ghost-soft below). */
.psv2-btn--ghost{ color:var(--psv2-gold); background:rgba(17,17,17,.5);
  border-color:var(--psv2-gold);
  &:hover{ background:rgba(198,175,117,.12); }
}
.psv2-btn--ghost-soft{ border-color:var(--psv2-hairline); }
/* A CTA sitting straight after a grid/split inside a container gets the
   mockup's 18px lift; without it the button crowds the cards above. */
.psv2-container > :is(.psv2-grid,.psv2-split,.psv2-chiprow) + .psv2-btn,
.psv2-container--1100 > :is(.psv2-grid,.psv2-split,.psv2-chiprow) + .psv2-btn{
  margin-top:18px;
}
.psv2-btn--gold{ color:var(--psv2-ink); background:var(--psv2-grad-gold);
  border-color:var(--psv2-gold-border); font-family:var(--psv2-body); letter-spacing:.5px;
  text-transform:none; font-size:.95rem; box-shadow:0 6px 30px rgba(198,160,80,.35);
  &:hover{ filter:brightness(1.05); }
}
.psv2-btn--full{ width:100%; }

/* ---------- chips / tags ---------- */
/* Body chip — plain outline, no fill (mockup: 16px / #e7e2d4 / 8px 14px). */
.psv2-chip{ display:inline-flex; align-items:center; gap:6px; padding:8px 14px;
  font-family:var(--psv2-body); font-size:16px; color:var(--psv2-text);
  border:1px solid var(--psv2-hairline); border-radius:var(--psv2-radius);
}
/* Hero chip — the "glass pill" variant: brighter text, gold-tinted edge, blur. */
.psv2-chip--glass{ font-weight:500; color:var(--psv2-text-bright);
  border-color:rgba(198,175,117,.45); background:rgba(17,17,17,.55);
  backdrop-filter:blur(6px); white-space:nowrap;
}
.psv2-chiprow{ display:flex; flex-wrap:wrap; gap:8px; }
.psv2-tag{ display:inline-flex; align-items:center; padding:4px 10px;
  font-family:var(--psv2-caps); font-size:.68rem; font-weight:700; letter-spacing:1.2px;
  text-transform:uppercase; color:var(--psv2-ink); background:var(--psv2-grad-tag);
  border-radius:var(--psv2-radius);
}
.psv2-badge{ display:inline-flex; align-items:center; padding:8px 16px;
  font-family:var(--psv2-caps); font-size:.82rem; font-weight:600; letter-spacing:1px;
  color:var(--psv2-green-ink); background:var(--psv2-text-head); border-radius:var(--psv2-radius);
}
.psv2-mediatag{ display:inline-flex; align-items:center; padding:5px 10px;
  font-family:var(--psv2-caps); font-size:.68rem; font-weight:600; letter-spacing:1.4px;
  text-transform:uppercase; color:var(--psv2-gold-eyebrow);
  background:rgba(17,17,17,.75); border:1px solid var(--psv2-hairline); border-radius:var(--psv2-radius);
}

/* ---------- grids ---------- */
.psv2-grid{ display:grid; gap:20px;
  grid-template-columns:repeat(auto-fit,minmax(min(100%,300px),1fr)); }
.psv2-grid--steps{ gap:14px; grid-template-columns:repeat(auto-fit,minmax(min(100%,220px),1fr)); }
/* Mockup: column by default, row at >=900px (data-desk-row). Copy gets flex:1.1 and
   centres itself; media gets flex:1 and STRETCHES to the row height. */
.psv2-split{ display:flex; flex-direction:column; gap:28px; }
@media (min-width: 56.25rem){
  .psv2-split{ flex-direction:row; align-items:stretch; }
  .psv2-split > .psv2-split__copy{ flex:1.1; }
  .psv2-split > .psv2-media{ flex:1; }
}
.psv2-split__copy{ display:flex; flex-direction:column; justify-content:center;
  /* column children stretch by default; the mockup pins the CTA to the start edge */
  & > .psv2-btn{ align-self:flex-start; }
}

/* Framed media block with an overlaid caption chip (Technology / PuttView). */
.psv2-media{ position:relative; min-height:280px; overflow:hidden;
  border:1px solid var(--psv2-hairline); border-radius:var(--psv2-radius);
  & img,& video{ position:absolute; inset:0; width:100%; height:100%;
    object-fit:cover; display:block; }
}
.psv2-media--tall{ min-height:340px; }
.psv2-media__chip{ position:absolute; top:12px; left:12px; z-index:1;
  font-family:var(--psv2-caps); font-size:12px; letter-spacing:2px;
  color:var(--psv2-gold-eyebrow); background:rgba(17,17,17,.75);
  border:1px solid var(--psv2-hairline); border-radius:var(--psv2-radius);
  padding:4px 10px; }

/* ---------- site header / nav ---------- */
.psv2-header{ position:sticky; top:0; z-index:100; background:rgba(17,17,17,.94);
  border-bottom:1px solid var(--psv2-hairline); backdrop-filter:blur(8px); }
.psv2-nav{ display:flex; align-items:center; justify-content:space-between; gap:20px;
  max-width:var(--psv2-container); margin-inline:auto; padding:12px var(--psv2-pad-x); }
.psv2-nav__logo{ display:flex; align-items:center; flex:none; text-decoration:none;
  & img{ height:56px; width:auto; max-width:none; object-fit:contain; display:block; } }
.psv2-nav__menu{ display:none; align-items:center; gap:28px; list-style:none; margin:0; padding:0; }
/* .74rem (11.8px) read as too small; .85rem was still tight — uppercase Cinzel with 2px of
   letterspacing needs more size than a lowercase sans would. Bumped to .85rem
   (13.6px) in all three places that set it (this base rule and both desktop
   queries) so the cascade cannot disagree with itself. The desktop nav only
   renders at >=1100px, where there is width to spare. The sticky-bar button
   below also uses .74rem and is deliberately left alone — different element. */
.psv2-nav__link{ font-family:var(--psv2-caps); font-size:.95rem; font-weight:600; letter-spacing:2px;
  text-transform:uppercase; color:var(--psv2-text-soft); text-decoration:none;
  &:hover{ color:var(--psv2-gold); }
  &[aria-current="page"]{ color:var(--psv2-gold); } }
/* Header CTA, sized against the nav beside it. .psv2-btn is .82rem globally
   and stays that way everywhere else; once the menu went to .95rem the button
   was the smallest text in the header, so navigation was out-shouting the one
   thing the header is there to sell. Scoped to the header button only. */
.psv2-nav > .psv2-btn{ font-size:.9rem; }

.psv2-nav__burger{ display:inline-flex; flex-direction:column; gap:5px; background:none;
  border:0; cursor:pointer; padding:10px; min-height:var(--psv2-tap);
  & span{ width:24px; height:2px; background:var(--psv2-gold); display:block; } }

/* ---------- rate table ---------- */
/* Hourly rate table (component 324 — shared, so this styles every placement).
   The mockup renders it as a CARD: #1e1e1e surface, 6px radius, and prices in
   the BODY font at near-white. We had them in the gold display serif at 18px,
   which is what made them thin and hard to scan. Nick's call (2026-08-14):
   keep the mockup's card, take the border gold, push readability further.
   border-collapse MUST be `separate` or the radius cannot render at all. */
.psv2-rates{ width:100%; border-collapse:separate; border-spacing:0; font-size:16px;
  background:var(--psv2-surface); border:1px solid var(--psv2-gold-border);
  border-radius:var(--psv2-radius); overflow:hidden;
  & caption{ caption-side:top; text-align:left; padding:0 0 12px;
    font-family:var(--psv2-caps); font-size:.7rem; letter-spacing:1.6px;
    text-transform:uppercase; color:var(--psv2-gold-eyebrow); }
  & th,& td{ padding:14px 16px; text-align:left; border-bottom:1px solid var(--psv2-hairline-soft); }
  & thead th{ background:var(--psv2-surface-2); color:var(--psv2-text-head);
    font-family:var(--psv2-display); font-size:1.05rem; font-weight:700; }
  /* corner cell labels the row column — quieter than the two suite headings
     so it reads as a label, not a third column of equal weight */
  & thead th:first-child{ font-family:var(--psv2-caps); font-size:.7rem;
    font-weight:500; letter-spacing:1.6px; text-transform:uppercase;
    color:var(--psv2-text-muted); }
  & tbody th{ font-weight:500; color:var(--psv2-text-soft); font-family:var(--psv2-body); }
  /* prices: body font, brighter, heavier — legibility beats flourish here */
  & td{ color:var(--psv2-text-bright); font-family:var(--psv2-body);
    font-size:17px; font-weight:600; letter-spacing:.2px; }
  /* the spec rows are supporting detail, not prices — keep them quieter */
  & td.psv2-featv{ color:var(--psv2-text-soft); font-weight:400; font-size:16px;
    letter-spacing:0; }
  & td s{ color:var(--psv2-text-muted); font-weight:400; font-size:15px;
    letter-spacing:0; margin-right:8px; }
  & tbody tr:last-child th,& tbody tr:last-child td{ border-bottom:0; }
}
/* Mockup runs this meta line at 16px in the soft text colour, 16px under the
   table — not as 13px muted fine print. The CTA below it needs its own gap;
   without one the button sits straight on the line. */
.psv2-rates__note{ margin:16px 0 0; font-size:16px; color:var(--psv2-text-soft); }
.psv2-rates__note + .psv2-btn{ margin-top:20px; }

/* ---------- FAQ ---------- */
/* Mockup FAQ row: top rule only (no closing rule), 20px block padding,
   24px display question over 16px/1.7 answer. */
.psv2-faq__item{ padding-block:20px; border-top:1px solid var(--psv2-hairline); }
.psv2-faq__q{ margin:0 0 8px; font-family:var(--psv2-display); font-size:24px;
  font-weight:700; color:var(--psv2-text-head); }
.psv2-faq__a{ margin:0; font-size:16px; line-height:1.7; color:var(--psv2-text-soft); }

/* ---------- mobile drawer ----------
   .psv2-header carries `backdrop-filter`, which makes it a CONTAINING BLOCK for
   fixed-position descendants. So this drawer does NOT resolve against the
   viewport — `inset: navh 0 0 0` measured against the 81px header gave it a
   height of 0 (a 25px sliver once padding was added) and the hero showed
   through, which reads as a z-index bug but is not one.
   Anchor to the header instead: top:100% puts it directly beneath, and the
   height is stated explicitly rather than inferred from a bottom offset. */
.psv2-nav__menu{ position:fixed; top:100%; left:0; right:0; bottom:auto; z-index:99;
  height:calc(100svh - var(--psv2-navh,64px));
  flex-direction:column; align-items:stretch; justify-content:flex-start; gap:0;
  padding:12px var(--psv2-pad-x); background:var(--psv2-bg);
  border-top:1px solid var(--psv2-hairline); overflow-y:auto; }
.psv2-nav__menu[data-open="true"]{ display:flex; }
.psv2-nav__menu li{ border-bottom:1px solid var(--psv2-hairline-soft); }
.psv2-nav__menu .psv2-nav__link{ display:block; padding:16px 0; font-size:.95rem; }
body[data-nav-open="true"]{ overflow:hidden; }
@media (min-width: 68.75rem){
  .psv2-nav__menu{ position:static; inset:auto; height:auto; flex-direction:row; align-items:center;
    gap:28px; padding:0; background:none; border-top:0; overflow:visible; }
  .psv2-nav__menu li{ border-bottom:0; }
  .psv2-nav__menu .psv2-nav__link{ display:inline; padding:0; font-size:.95rem; }
}

/* ---------- sticky book bar (mobile) ---------- */
.psv2-sticky{ position:fixed; left:0; right:0; bottom:0; z-index:98; display:none;
  gap:1px; background:var(--psv2-gold-border);
  padding-bottom:env(safe-area-inset-bottom);
  border-top:1px solid var(--psv2-gold-border);
  transform:translateY(100%); transition:transform var(--psv2-t); }
.psv2-sticky[data-show="true"]{ transform:translateY(0); }
.psv2-sticky__btn{ flex:1; display:inline-flex; align-items:center; justify-content:center;
  min-height:56px; text-decoration:none; font-family:var(--psv2-caps); font-size:.74rem;
  font-weight:600; letter-spacing:1.6px; text-transform:uppercase; }
.psv2-sticky__btn--primary{ background:linear-gradient(180deg,#2a5a42,#1f4732); color:#f5f1e4; }
.psv2-sticky__btn--secondary{ background:var(--psv2-bg-deep); color:var(--psv2-gold); }
@media (width <= 1099px){ .psv2-sticky{ display:flex; } body{ padding-bottom:56px; } }

/* ---------- icons (CSS masks — Etch sanitizes inline SVG out of raw-html) ---------- */
.psv2-ico::before{ content:""; display:inline-block; flex:none;
  background-color:var(--psv2-gold); -webkit-mask-repeat:no-repeat; mask-repeat:no-repeat;
  -webkit-mask-position:center; mask-position:center;
  -webkit-mask-size:contain; mask-size:contain; width:15px; height:15px; }
.psv2-ico--lg::before{ width:22px; height:22px; margin-top:2px; }
.psv2-ico--parking::before{ -webkit-mask-image:url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Cpath%20d%3D%22M19%2017h2c.6%200%201-.4%201-1v-3c0-.9-.7-1.7-1.5-1.9C18.7%2010.6%2016%2010%2016%2010s-1.3-1.4-2.2-2.3c-.5-.4-1.1-.7-1.8-.7H5c-.6%200-1.1.4-1.4.9l-1.4%202.9A3.7%203.7%200%200%200%202%2012v4c0%20.6.4%201%201%201h2%22%2F%3E%3Ccircle%20cx%3D%227%22%20cy%3D%2217%22%20r%3D%222%22%2F%3E%3Cpath%20d%3D%22M9%2017h6%22%2F%3E%3Ccircle%20cx%3D%2217%22%20cy%3D%2217%22%20r%3D%222%22%2F%3E%3C%2Fsvg%3E"); mask-image:url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Cpath%20d%3D%22M19%2017h2c.6%200%201-.4%201-1v-3c0-.9-.7-1.7-1.5-1.9C18.7%2010.6%2016%2010%2016%2010s-1.3-1.4-2.2-2.3c-.5-.4-1.1-.7-1.8-.7H5c-.6%200-1.1.4-1.4.9l-1.4%202.9A3.7%203.7%200%200%200%202%2012v4c0%20.6.4%201%201%201h2%22%2F%3E%3Ccircle%20cx%3D%227%22%20cy%3D%2217%22%20r%3D%222%22%2F%3E%3Cpath%20d%3D%22M9%2017h6%22%2F%3E%3Ccircle%20cx%3D%2217%22%20cy%3D%2217%22%20r%3D%222%22%2F%3E%3C%2Fsvg%3E"); }
.psv2-ico--food::before{ -webkit-mask-image:url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Cpath%20d%3D%22M3%202v7c0%201.1.9%202%202%202h4a2%202%200%200%200%202-2V2%22%2F%3E%3Cpath%20d%3D%22M7%202v20%22%2F%3E%3Cpath%20d%3D%22M21%2015V2a5%205%200%200%200-5%205v6c0%201.1.9%202%202%202h3Zm0%200v7%22%2F%3E%3C%2Fsvg%3E"); mask-image:url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Cpath%20d%3D%22M3%202v7c0%201.1.9%202%202%202h4a2%202%200%200%200%202-2V2%22%2F%3E%3Cpath%20d%3D%22M7%202v20%22%2F%3E%3Cpath%20d%3D%22M21%2015V2a5%205%200%200%200-5%205v6c0%201.1.9%202%202%202h3Zm0%200v7%22%2F%3E%3C%2Fsvg%3E"); }
.psv2-ico--phone::before{ -webkit-mask-image:url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Crect%20width%3D%2214%22%20height%3D%2220%22%20x%3D%225%22%20y%3D%222%22%20rx%3D%222%22%20ry%3D%222%22%2F%3E%3Cpath%20d%3D%22M12%2018h.01%22%2F%3E%3C%2Fsvg%3E"); mask-image:url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Crect%20width%3D%2214%22%20height%3D%2220%22%20x%3D%225%22%20y%3D%222%22%20rx%3D%222%22%20ry%3D%222%22%2F%3E%3Cpath%20d%3D%22M12%2018h.01%22%2F%3E%3C%2Fsvg%3E"); }
.psv2-ico--users::before{ -webkit-mask-image:url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Cpath%20d%3D%22M16%2021v-2a4%204%200%200%200-4-4H6a4%204%200%200%200-4%204v2%22%2F%3E%3Ccircle%20cx%3D%229%22%20cy%3D%227%22%20r%3D%224%22%2F%3E%3Cpath%20d%3D%22M22%2021v-2a4%204%200%200%200-3-3.87%22%2F%3E%3Cpath%20d%3D%22M16%203.13a4%204%200%200%201%200%207.75%22%2F%3E%3C%2Fsvg%3E"); mask-image:url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Cpath%20d%3D%22M16%2021v-2a4%204%200%200%200-4-4H6a4%204%200%200%200-4%204v2%22%2F%3E%3Ccircle%20cx%3D%229%22%20cy%3D%227%22%20r%3D%224%22%2F%3E%3Cpath%20d%3D%22M22%2021v-2a4%204%200%200%200-3-3.87%22%2F%3E%3Cpath%20d%3D%22M16%203.13a4%204%200%200%201%200%207.75%22%2F%3E%3C%2Fsvg%3E"); }
.psv2-ico--clock::before{ -webkit-mask-image:url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Ccircle%20cx%3D%2212%22%20cy%3D%2212%22%20r%3D%2210%22%2F%3E%3Cpolyline%20points%3D%2212%206%2012%2012%2016%2014%22%2F%3E%3C%2Fsvg%3E"); mask-image:url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Ccircle%20cx%3D%2212%22%20cy%3D%2212%22%20r%3D%2210%22%2F%3E%3Cpolyline%20points%3D%2212%206%2012%2012%2016%2014%22%2F%3E%3C%2Fsvg%3E"); }
.psv2-ico--calendar::before{ -webkit-mask-image:url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Cpath%20d%3D%22M8%202v4%22%2F%3E%3Cpath%20d%3D%22M16%202v4%22%2F%3E%3Crect%20width%3D%2218%22%20height%3D%2218%22%20x%3D%223%22%20y%3D%224%22%20rx%3D%222%22%2F%3E%3Cpath%20d%3D%22M3%2010h18%22%2F%3E%3Cpath%20d%3D%22m9%2016%202%202%204-4%22%2F%3E%3C%2Fsvg%3E"); mask-image:url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Cpath%20d%3D%22M8%202v4%22%2F%3E%3Cpath%20d%3D%22M16%202v4%22%2F%3E%3Crect%20width%3D%2218%22%20height%3D%2218%22%20x%3D%223%22%20y%3D%224%22%20rx%3D%222%22%2F%3E%3Cpath%20d%3D%22M3%2010h18%22%2F%3E%3Cpath%20d%3D%22m9%2016%202%202%204-4%22%2F%3E%3C%2Fsvg%3E"); }
.psv2-ico--lock::before{ -webkit-mask-image:url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Crect%20width%3D%2218%22%20height%3D%2211%22%20x%3D%223%22%20y%3D%2211%22%20rx%3D%222%22%20ry%3D%222%22%2F%3E%3Cpath%20d%3D%22M7%2011V7a5%205%200%200%201%209.9-1%22%2F%3E%3C%2Fsvg%3E"); mask-image:url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Crect%20width%3D%2218%22%20height%3D%2211%22%20x%3D%223%22%20y%3D%2211%22%20rx%3D%222%22%20ry%3D%222%22%2F%3E%3Cpath%20d%3D%22M7%2011V7a5%205%200%200%201%209.9-1%22%2F%3E%3C%2Fsvg%3E"); }
.psv2-ico--play::before{ -webkit-mask-image:url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Ccircle%20cx%3D%2212%22%20cy%3D%2212%22%20r%3D%2210%22%2F%3E%3Cpolygon%20points%3D%2210%208%2016%2012%2010%2016%2010%208%22%2F%3E%3C%2Fsvg%3E"); mask-image:url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Ccircle%20cx%3D%2212%22%20cy%3D%2212%22%20r%3D%2210%22%2F%3E%3Cpolygon%20points%3D%2210%208%2016%2012%2010%2016%2010%208%22%2F%3E%3C%2Fsvg%3E"); }

/* ---------- footer CTA band (global, from SiteFooter mockup) ---------- */
.psv2-fcta{ position:relative; overflow:hidden; padding:110px 20px 96px; text-align:center;
  & > *{ position:relative; z-index:2; } }
/* Taller band on desktop so more of the ball is in frame above the headline.
   The image is object-fit:cover, so height is the only lever — a taller band
   crops less of it vertically. Deliberately NOT applied below 900px: that
   breakpoint gives the band a different layout entirely (image masked along
   the bottom, copy on flat #070707), where extra top padding would only add
   empty black. */
@media (min-width: 56.25rem){
  .psv2-fcta{ padding-top:260px; }
}
.psv2-fcta__img{ position:absolute; inset:0; z-index:0;
  & img{ width:100%; height:100%; object-fit:cover; display:block; filter:saturate(1.06); } }
.psv2-fcta__scrim{ position:absolute; inset:0; z-index:1;
  background:linear-gradient(180deg,#111111 0%,rgba(17,17,17,.55) 32%,rgba(17,17,17,.62) 62%,#0c0c0c 100%); }
.psv2-fcta__inner{ position:relative; max-width:660px; margin:0 auto; }
.psv2-fcta .psv2-eyebrow{ margin:0 0 14px; color:var(--psv2-gold-hero-eyebrow);
  text-shadow:0 1px 8px rgba(0,0,0,.8); }
.psv2-fcta__title{ margin:0 0 14px; font-family:var(--psv2-display);
  font-size:clamp(38px,9vw,64px); font-weight:700; line-height:1.02; color:var(--psv2-text-hero);
  text-shadow:0 2px 18px rgba(0,0,0,.75);
  & em{ font-style:italic; color:var(--psv2-gold-em); } }
.psv2-fcta__price{ font-size:18px; color:var(--psv2-text-cream-a); margin:0 0 26px;
  text-shadow:0 2px 8px rgba(0,0,0,.85); }
.psv2-fcta__micro{ font-size:16px; color:var(--psv2-text-cream-b); margin:16px 0 0;
  text-shadow:0 2px 8px rgba(0,0,0,.85); }
.psv2-fcta .psv2-btn{ font-size:16px; letter-spacing:2.5px; }
@media (width <= 899px){
  .psv2-fcta{ padding-bottom:calc(56.25vw + 32px); background:#070707; }
  .psv2-fcta__img{ top:auto; bottom:0; height:56.25vw;
    -webkit-mask-image:linear-gradient(180deg,transparent 0%,#000 40%);
    mask-image:linear-gradient(180deg,transparent 0%,#000 40%); }
  .psv2-fcta__scrim{ bottom:auto; top:0; height:calc(100% - 45vw);
    background:linear-gradient(180deg,#111111 0%,#070707 55%); }
}
.psv2-map{ position:relative; min-height:320px; overflow:hidden;
  border:1px solid var(--psv2-hairline); border-radius:var(--psv2-radius);
  & iframe{ position:absolute; inset:0; width:100%; height:100%; border:0;
    filter:grayscale(1) invert(0.92) contrast(0.9); } }
.psv2-maplink{ position:absolute; left:12px; bottom:12px; z-index:2; }
.psv2-rating{ display:flex; align-items:center; gap:8px; font-size:var(--psv2-sm);
  color:var(--psv2-text-soft);
  & .psv2-stars{ color:var(--psv2-gold); letter-spacing:2px; } }

/* ---------- footer (ported verbatim from SiteFooter.dc.html) ---------- */
.psv2-footer{ background:linear-gradient(180deg,#0c0c0c 0%,#0c0c0c 55%,#0e1d10 100%);
  padding:56px 20px 36px; }
.psv2-footer__inner{ max-width:1200px; margin:0 auto; }
.psv2-footer__grid{ display:grid; gap:32px; align-items:stretch; margin-bottom:36px;
  grid-template-columns:repeat(auto-fit,minmax(min(100%,300px),1fr)); }
.psv2-fbrand{ border:1px solid var(--psv2-hairline); border-radius:6px; padding:30px 26px;
  display:flex; flex-direction:column; gap:14px;
  & > img{ height:64px; width:auto; max-width:none; object-fit:contain; display:block; align-self:flex-start; }
  & p{ font-size:16px; line-height:1.7; color:var(--psv2-text-soft); margin:0; } }
.psv2-frating{ font-size:16px; color:var(--psv2-text-soft); margin:0;
  & .psv2-stars{ color:var(--psv2-gold); letter-spacing:2px; } }
.psv2-social{ display:flex; gap:10px; margin-top:auto; }
.psv2-social a{ width:44px; height:44px; display:flex; align-items:center; justify-content:center;
  border:1px solid var(--psv2-hairline); border-radius:6px; text-decoration:none;
  &:hover{ border-color:var(--psv2-gold); }
  &::before{ content:""; display:block; width:18px; height:18px; background-color:var(--psv2-gold);
    -webkit-mask-repeat:no-repeat; mask-repeat:no-repeat; -webkit-mask-position:center;
    mask-position:center; -webkit-mask-size:contain; mask-size:contain; } }
.psv2-soc--ig::before{ -webkit-mask-image:url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%221.6%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Crect%20width%3D%2220%22%20height%3D%2220%22%20x%3D%222%22%20y%3D%222%22%20rx%3D%225%22%20ry%3D%225%22%2F%3E%3Cpath%20d%3D%22M16%2011.37A4%204%200%201%201%2012.63%208%204%204%200%200%201%2016%2011.37z%22%2F%3E%3Cline%20x1%3D%2217.5%22%20x2%3D%2217.51%22%20y1%3D%226.5%22%20y2%3D%226.5%22%2F%3E%3C%2Fsvg%3E"); mask-image:url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%221.6%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Crect%20width%3D%2220%22%20height%3D%2220%22%20x%3D%222%22%20y%3D%222%22%20rx%3D%225%22%20ry%3D%225%22%2F%3E%3Cpath%20d%3D%22M16%2011.37A4%204%200%201%201%2012.63%208%204%204%200%200%201%2016%2011.37z%22%2F%3E%3Cline%20x1%3D%2217.5%22%20x2%3D%2217.51%22%20y1%3D%226.5%22%20y2%3D%226.5%22%2F%3E%3C%2Fsvg%3E"); }
.psv2-soc--fb::before{ -webkit-mask-image:url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22%23000%22%3E%3Cpath%20d%3D%22M18%202h-3a5%205%200%200%200-5%205v3H7v4h3v8h4v-8h3l1-4h-4V7a1%201%200%200%201%201-1h3z%22%2F%3E%3C%2Fsvg%3E"); mask-image:url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22%23000%22%3E%3Cpath%20d%3D%22M18%202h-3a5%205%200%200%200-5%205v3H7v4h3v8h4v-8h3l1-4h-4V7a1%201%200%200%201%201-1h3z%22%2F%3E%3C%2Fsvg%3E"); }
.psv2-soc--x::before{ -webkit-mask-image:url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22%23000%22%3E%3Cpath%20d%3D%22M18.244%202.25h3.308l-7.227%208.26%208.502%2011.24H16.17l-5.214-6.817L4.99%2021.75H1.68l7.73-8.835L1.254%202.25H8.08l4.713%206.231zM17.083%2019.77h1.833L7.084%204.126H5.117z%22%2F%3E%3C%2Fsvg%3E"); mask-image:url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22%23000%22%3E%3Cpath%20d%3D%22M18.244%202.25h3.308l-7.227%208.26%208.502%2011.24H16.17l-5.214-6.817L4.99%2021.75H1.68l7.73-8.835L1.254%202.25H8.08l4.713%206.231zM17.083%2019.77h1.833L7.084%204.126H5.117z%22%2F%3E%3C%2Fsvg%3E"); }
.psv2-soc--g::before{ -webkit-mask-image:url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22%23000%22%3E%3Cpath%20d%3D%22M21.35%2011.1h-9.17v2.73h6.51c-.33%203.81-3.5%205.44-6.5%205.44C8.36%2019.27%205%2016.25%205%2012c0-4.1%203.2-7.27%207.2-7.27%203.09%200%204.9%201.97%204.9%201.97L19%204.72S16.56%202%2012.1%202C6.42%202%202.03%206.8%202.03%2012c0%205.05%204.13%2010%2010.22%2010%205.35%200%209.25-3.67%209.25-9.09%200-1.15-.15-1.81-.15-1.81Z%22%2F%3E%3C%2Fsvg%3E"); mask-image:url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22%23000%22%3E%3Cpath%20d%3D%22M21.35%2011.1h-9.17v2.73h6.51c-.33%203.81-3.5%205.44-6.5%205.44C8.36%2019.27%205%2016.25%205%2012c0-4.1%203.2-7.27%207.2-7.27%203.09%200%204.9%201.97%204.9%201.97L19%204.72S16.56%202%2012.1%202C6.42%202%202.03%206.8%202.03%2012c0%205.05%204.13%2010%2010.22%2010%205.35%200%209.25-3.67%209.25-9.09%200-1.15-.15-1.81-.15-1.81Z%22%2F%3E%3C%2Fsvg%3E"); }
.psv2-fmap{ position:relative; display:block; border:1px solid var(--psv2-hairline);
  border-radius:6px; overflow:hidden; min-height:280px; text-decoration:none;
  &:hover{ border-color:var(--psv2-gold); }
  & iframe{ position:absolute; inset:0; width:100%; height:100%; border:0;
    filter:grayscale(1) invert(0.92) contrast(0.9); pointer-events:none; } }
.psv2-fmap__label{ position:absolute; left:12px; bottom:12px; font-family:var(--psv2-caps);
  font-size:14px; letter-spacing:2px; color:var(--psv2-gold-eyebrow); text-transform:uppercase;
  background:rgba(12,12,12,.85); border:1px solid var(--psv2-hairline); border-radius:6px;
  padding:6px 12px; }
.psv2-fcards{ display:grid; gap:12px; margin-bottom:32px;
  grid-template-columns:repeat(auto-fit,minmax(min(100%,240px),1fr)); }
.psv2-fcard{ display:flex; align-items:center; justify-content:space-between; gap:12px;
  border:1px solid var(--psv2-hairline); border-radius:6px; padding:16px 18px; min-height:44px;
  text-decoration:none;
  &:hover{ border-color:var(--psv2-gold); }
  & .psv2-fcard__k{ font-family:var(--psv2-caps); font-size:14px; letter-spacing:2px;
    color:var(--psv2-gold-eyebrow); text-transform:uppercase; display:block; margin-bottom:4px; }
  & .psv2-fcard__v{ font-size:16px; line-height:1.5; color:var(--psv2-text-soft); }
  & .psv2-fcard__arrow{ color:var(--psv2-gold); flex-shrink:0; } }
.psv2-flinks{ display:flex; flex-wrap:wrap; gap:10px 24px;
  border-top:1px solid var(--psv2-hairline); border-bottom:1px solid var(--psv2-hairline);
  padding:18px 0; margin-bottom:22px;
  & a{ font-family:var(--psv2-caps); font-size:15px; letter-spacing:1.8px; text-transform:uppercase;
    color:var(--psv2-text-soft); padding:6px 0; text-decoration:none;
    &:hover{ color:var(--psv2-gold); } } }
.psv2-flegal{ font-size:14px; line-height:1.8; color:var(--psv2-text-muted); }

/* Mockup's phone header is logo + burger only — the booking CTA lives in the
   sticky bottom bar, so repeating it here just makes the header taller. */
@media (max-width: 1099px){
  .psv2-nav > .psv2-btn{ display:none; }
}

/* ---------- desktop nav (MUST be last: beats the mobile drawer base rules) ---------- */
@media (min-width: 1100px){
  .psv2-nav__menu{ position:static; inset:auto; height:auto; display:flex; flex-direction:row;
    align-items:center; gap:28px; padding:0; background:none; border-top:0; overflow:visible; }
  .psv2-nav__menu li{ border-bottom:0; }
  .psv2-nav__menu .psv2-nav__link{ display:inline; padding:0; font-size:.95rem; }
  .psv2-nav__burger{ display:none; }
}

/* ---------- 1100px pages (lounge/rates/memberships use a narrower container) ---------- */
.psv2-container--1100{ width:100%; max-width:1100px; margin-inline:auto; }
/* ---------- guideline rows (lounge amenities) ---------- */
/* Lounge guidelines: the mockup runs these as two text columns separated by a
   2px top rule per item — not as bordered cards, which stacked into one tall
   column and made the section ~700px taller than the design. */
.psv2-guide{ display:grid; gap:0 32px;
  grid-template-columns:repeat(auto-fit,minmax(min(100%,260px),1fr)); }
.psv2-guide__item{ border-top:2px solid var(--psv2-hairline); padding:16px 0 20px;
  & strong{ display:block; font-family:var(--psv2-caps); font-size:16px; letter-spacing:1.8px;
    text-transform:uppercase; color:var(--psv2-text-head); margin-bottom:6px; }
  & p{ margin:0; font-size:16px; line-height:1.65; color:var(--psv2-text-soft); } }
@media (min-width: 56.25rem){ .psv2-split > .psv2-guide{ flex:1.4; } }
/* ---------- suite spec card (lounge technology) ---------- */
.psv2-spec{ display:flex; flex-direction:column; background:var(--psv2-surface-2);
  border:1px solid var(--psv2-hairline); border-radius:6px; overflow:hidden;
  &:hover{ border-color:var(--psv2-gold); } }
.psv2-spec__body{ display:flex; flex-direction:column; gap:10px; padding:22px 20px; }
.psv2-spec__size{ font-family:var(--psv2-caps); font-size:13px; letter-spacing:1.6px;
  text-transform:uppercase; color:var(--psv2-gold-eyebrow); }
.psv2-spec__list{ margin:0; font-size:15px; line-height:1.8; color:var(--psv2-text-soft); }

/* ---------- booking-window stat trio ---------- */
.psv2-stat{ text-align:center; background:var(--psv2-surface); border:1px solid var(--psv2-hairline);
  border-radius:6px; padding:22px 18px;
  & .psv2-stat__n{ display:block; font-family:var(--psv2-display); font-size:38px; font-weight:700;
    color:var(--psv2-gold); line-height:1; margin-bottom:6px; }
  & p{ margin:0; font-size:15px; color:var(--psv2-text-soft); } }
/* ---------- plan cards ---------- */
.psv2-plan{ display:flex; flex-direction:column; gap:10px; background:var(--psv2-surface-2);
  border:1px solid var(--psv2-hairline); border-radius:6px; padding:24px 22px;
  &:hover{ border-color:var(--psv2-gold); }
  & .psv2-plan__k{ font-family:var(--psv2-caps); font-size:13px; letter-spacing:1.6px;
    text-transform:uppercase; color:var(--psv2-gold-eyebrow); }
  & .psv2-plan__p{ font-family:var(--psv2-display); font-size:34px; font-weight:700;
    color:var(--psv2-gold-bright); line-height:1; }
  & ul{ margin:0; padding-left:1.1em; font-size:15px; line-height:1.75; color:var(--psv2-text-soft); }
  & a{ margin-top:auto; } }
/* ---------- info card (contact) ---------- */
.psv2-info{ display:flex; flex-direction:column; gap:6px; background:var(--psv2-surface);
  border:1px solid var(--psv2-hairline); border-radius:6px; padding:20px; text-decoration:none;
  /* the anchor styled its children but never itself, so any text sitting
     directly in the <a> inherited the browser's default blue on /contact-us/ */
  color:var(--psv2-text-soft);
  &:hover{ border-color:var(--psv2-gold); }
  & .psv2-info__k{ font-family:var(--psv2-caps); font-size:13px; letter-spacing:1.6px;
    text-transform:uppercase; color:var(--psv2-gold-eyebrow); }
  & p{ margin:0; font-size:16px; line-height:1.6; color:var(--psv2-text-soft); } }

/* ---------- promo card (rates page) ---------- */
.psv2-promocard{ position:relative; overflow:hidden; background:var(--psv2-glow), linear-gradient(180deg,#232323,#181818);
  border:1px solid var(--psv2-gold-border); border-radius:6px; padding:28px 26px;
  display:flex; flex-direction:column; gap:14px;
  & > *{ position:relative; z-index:1; } }
.psv2-promocard > .psv2-badge,
.psv2-promocard > .psv2-btn{ align-self:flex-start; }
.psv2-promocard__title{ margin:0; font-family:var(--psv2-display); font-size:32px; font-weight:700;
  color:var(--psv2-text-head);
  & em{ font-style:italic; color:var(--psv2-gold); } }
.psv2-promocard__grid{ display:grid; gap:12px;
  grid-template-columns:repeat(auto-fit,minmax(min(100%,240px),1fr)); }
.psv2-deal{ background:rgba(17,17,17,.5); border:1px solid var(--psv2-hairline);
  border-radius:6px; padding:16px 18px;
  & .psv2-deal__k{ display:block; font-family:var(--psv2-caps); font-size:12px; letter-spacing:1.6px;
    text-transform:uppercase; color:var(--psv2-gold-eyebrow); margin-bottom:6px; }
  & .psv2-deal__p{ font-family:var(--psv2-display); font-size:26px; font-weight:700;
    color:var(--psv2-gold-bright);
    & s{ color:var(--psv2-text-muted); font-size:16px; margin-right:6px; } }
  & .psv2-deal__save{ display:block; margin-top:6px; font-size:12px; color:var(--psv2-text-soft); } }
/* rate table feature rows */
.psv2-rates tbody th.psv2-feat{ font-family:var(--psv2-body); color:var(--psv2-text-muted); }
.psv2-rates td.psv2-featv{ font-family:var(--psv2-body); font-size:15px; font-weight:400;
  color:var(--psv2-text-soft); }
/* suites image pair */
.psv2-pair{ display:grid; gap:16px; grid-template-columns:repeat(auto-fit,minmax(min(100%,300px),1fr)); }
.psv2-pair__item{ position:relative; aspect-ratio:16/10; border:1px solid var(--psv2-hairline);
  border-radius:6px; overflow:hidden;
  & img{ width:100%; height:100%; object-fit:cover; display:block; } }

/* plans render 2-up like the reference, not 3+1 */
.psv2-grid:has(.psv2-plan){ grid-template-columns:repeat(auto-fit,minmax(min(100%,420px),1fr)); }

/* memberships: how-it-works renders 4 across like the reference */
.psv2-grid--4{ display:grid; gap:12px;
  grid-template-columns:repeat(auto-fit,minmax(min(100%,200px),1fr)); }
/* bordered container (The Math) */
.psv2-box{ border:1px solid var(--psv2-hairline); border-radius:6px; padding:26px 24px;
  background:var(--psv2-surface-3); }
/* close card with inline CTA */
.psv2-closecard{ display:flex; flex-wrap:wrap; align-items:center; justify-content:space-between;
  gap:18px; border:1px solid var(--psv2-hairline); border-radius:6px; padding:26px 24px;
  background:var(--psv2-surface-3);
  & .psv2-closecard__t{ margin:0 0 6px; font-family:var(--psv2-display); font-size:28px;
    font-weight:700; color:var(--psv2-text-head);
    & em{ font-style:italic; color:var(--psv2-gold); } }
  & p{ margin:0; font-size:15px; color:var(--psv2-text-soft); } }
/* hero badge pill */
.psv2-pill{ display:inline-flex; align-items:center; padding:7px 14px; margin-bottom:16px;
  font-family:var(--psv2-caps); font-size:12px; letter-spacing:2px; text-transform:uppercase;
  color:var(--psv2-gold-eyebrow); border:1px solid var(--psv2-hairline); border-radius:6px;
  background:rgba(17,17,17,.55); }
/* highlight the annual booking-window stat like the reference */
.psv2-stat--hi{ background:var(--psv2-surface-2); border-color:var(--psv2-gold-border); }

/* ---------- inner-page hero (ported verbatim from the mockups) ---------- */
.psv2-phero{ position:relative; overflow:hidden; }
.psv2-phero__img{ position:absolute; inset:0; z-index:0;
  & img{ width:100%; height:100%; object-fit:cover; display:block;
    filter:saturate(1.08) contrast(1.04); } }
.psv2-phero__scrim{ position:relative; z-index:1; padding:150px 20px 48px;
  background:linear-gradient(180deg,rgba(12,12,12,0) 0%,rgba(12,12,12,.55) 22%,rgba(12,12,12,.92) 60%,#111111 100%); }
.psv2-phero--tall .psv2-phero__scrim{ padding-top:240px;
  background:linear-gradient(180deg,rgba(12,12,12,0) 0%,rgba(12,12,12,0) 20%,rgba(12,12,12,.45) 48%,rgba(12,12,12,.88) 78%,#111111 100%); }
.psv2-phero--xtall .psv2-phero__scrim{ padding-top:300px;
  background:linear-gradient(180deg,rgba(12,12,12,0) 0%,rgba(12,12,12,0) 28%,rgba(12,12,12,.3) 58%,rgba(12,12,12,.82) 84%,#111111 100%); }
.psv2-phero__inner{ max-width:1100px; margin:0 auto; }
.psv2-phero__title{ font-family:var(--psv2-display); font-weight:700;
  font-size:clamp(38px,9vw,64px); line-height:1.02; color:#fdfaf2; margin:0 0 14px;
  text-shadow:0 2px 18px rgba(0,0,0,.75);
  & em{ font-style:italic; color:#d9c187; } }
.psv2-phero__title--sm{ font-size:clamp(36px,8.5vw,60px); line-height:1.05; }
.psv2-phero__title--mem{ font-size:clamp(38px,9vw,62px); line-height:1.04; }
/* eyebrow INSIDE the h1 */
.psv2-heyebrow{ display:block; font-family:var(--psv2-caps); font-size:15px; letter-spacing:2.5px;
  color:#e0c479; text-transform:uppercase; margin-bottom:14px; font-weight:400;
  text-shadow:0 1px 8px rgba(0,0,0,.8); }
.psv2-heyebrow--pill{ display:flex; width:fit-content; align-items:center; font-size:13px;
  background:rgba(12,12,12,.88); backdrop-filter:blur(8px); border:1px solid #cbb479;
  border-radius:6px; padding:10px 20px; margin-bottom:24px;
  box-shadow:0 4px 24px rgba(0,0,0,.5); text-shadow:none; }
.psv2-phero__lead{ font-size:18px; line-height:1.6; color:#f0ebdd; margin:0 0 22px;
  max-width:56ch; text-shadow:0 1px 10px rgba(0,0,0,.7); }
.psv2-phero .psv2-btn{ font-size:16px; letter-spacing:2.5px; padding:16px 38px; }

/* Footer legal line: the geo terms are real links to the city pages now, but
   this line is fine print — keep them quiet, and only lift on hover. */
.psv2-flegal a{ color:inherit; text-decoration:none;
  &:hover{ color:var(--psv2-gold); text-decoration:underline; } }

/* ================= RESTRUCTURE 2026-08-19 =================================
   docs/2026-08-18-site-restructure-plan.md. Three rules drive everything below:
   answer before you claim, say it once, and gold means actionable / brand /
   price. Measured baseline on the live home page at 1440 before this pass:
   33 gold text nodes, 24 uses of the display serif, 9 AlbaPlay buttons under
   six labels. ========================================================== */

/* G1 · ration the accent. The eyebrow was a gold, letterspaced, gold-ruled
   label above almost every section — seven on the home page alone, which is
   what turned the accent into texture. It stays as a label; it stops being an
   announcement. Muting it here fixes every page at once, including the ones
   this pass does not rewrite. */
.psv2-eyebrow{ color:var(--psv2-text-muted); font-size:14px; letter-spacing:2px;
  &::before{ background:var(--psv2-hairline); } }
.psv2-eyebrow--center::after{ background:var(--psv2-hairline); }

/* Labelled fact strip — the footer's ADDRESS / HOURS / CONTACT cards, promoted
   to the top of the page. This is the single highest-value block for both a
   skimming human and an answer engine: it is the whole offer as plain facts. */
.psv2-facts{ display:grid; gap:12px; grid-template-columns:repeat(auto-fit,minmax(min(100%,240px),1fr)); }
.psv2-fact{ border:1px solid var(--psv2-hairline); border-radius:var(--psv2-radius);
  padding:16px 18px;
  & .psv2-fact__k{ display:block; margin-bottom:4px; font-family:var(--psv2-caps);
    font-size:14px; letter-spacing:2px; text-transform:uppercase; color:var(--psv2-gold-eyebrow); }
  & .psv2-fact__v{ font-size:16px; line-height:1.5; color:var(--psv2-text-soft);
    & strong{ color:var(--psv2-text-bright); font-weight:600; } } }

/* The summer offer, once per page, from [psl_promo]. Renders nothing at all
   once psl_summer_promo is 0 — that flag is the whole Sept-1 removal. */
.psv2-promoline{ display:flex; flex-wrap:wrap; align-items:baseline; gap:6px 10px;
  margin:0 0 22px; padding:14px 18px; font-size:16px; line-height:1.6;
  color:var(--psv2-text-soft); background:var(--psv2-surface-3);
  border:1px solid var(--psv2-hairline-warm); border-radius:var(--psv2-radius);
  & .psv2-promoline__k{ font-family:var(--psv2-caps); font-size:13px; letter-spacing:2px;
    text-transform:uppercase; color:var(--psv2-gold-eyebrow); }
  & strong{ color:var(--psv2-text-bright); font-weight:600; } }

/* Text links doing the work seven buttons used to. One verb is a button
   (Book a Suite); everything else is a link that looks like a link. */
.psv2-links{ display:flex; flex-wrap:wrap; gap:10px 24px; margin:18px 0 0;
  font-size:16px; line-height:1.6; }
.psv2-links a,.psv2-inlinelink{ color:var(--psv2-gold); text-decoration:none;
  border-bottom:1px solid rgba(198,175,117,.45); padding-bottom:2px;
  &:hover{ color:var(--psv2-gold-bright); border-bottom-color:var(--psv2-gold-bright); } }
.psv2-note{ margin:18px 0 0; font-size:16px; line-height:1.7; color:var(--psv2-text-muted);
  & a{ color:var(--psv2-gold); text-decoration:none;
    border-bottom:1px solid rgba(198,175,117,.45);
    &:hover{ color:var(--psv2-gold-bright); } } }

/* FAQ from [psl_faq]. Two columns on desktop so six real questions read as one
   block rather than a long scroll; the rows are the existing FAQ rows. */
.psv2-faqlist{ display:grid; gap:0 40px; grid-template-columns:1fr; }
@media (min-width: 56.25rem){ .psv2-faqlist{ grid-template-columns:repeat(2,minmax(0,1fr)); } }
.psv2-faqlist .psv2-faq__a p{ margin:0 0 10px; font-size:16px; line-height:1.7;
  color:var(--psv2-text-soft);
  &:last-child{ margin-bottom:0; } }

/* Membership tables reuse the rate-table card; the "works out at" rows are the
   effective hourly rate, which is the number that makes the value obvious. */
.psv2-rates--members td small{ font-family:var(--psv2-body); font-size:14px;
  font-weight:400; color:var(--psv2-text-soft); }

/* The split-four-ways arithmetic. One box, one place on the site. */
.psv2-math{ display:inline-block; margin:0 0 20px; padding:14px 22px;
  border:1px solid var(--psv2-gold-border); border-radius:var(--psv2-radius);
  background:rgba(198,175,117,.06); font-family:var(--psv2-display); font-size:28px;
  color:var(--psv2-gold-bright);
  & small{ display:block; margin-top:4px; font-family:var(--psv2-body); font-size:14px;
    color:var(--psv2-text-muted); } }

/* Suite spec list (/the-lounge/) and the photo grid that replaced two chapters
   of prose about the technology. */
.psv2-gallery{ display:grid; gap:12px; grid-template-columns:repeat(auto-fit,minmax(min(100%,280px),1fr)); }
.psv2-gallery figure{ position:relative; margin:0; border:1px solid var(--psv2-hairline);
  border-radius:var(--psv2-radius); overflow:hidden; aspect-ratio:4/3;
  & img{ width:100%; height:100%; object-fit:cover; display:block; } }
.psv2-gallery figcaption{ position:absolute; left:10px; bottom:10px;
  font-family:var(--psv2-caps); font-size:12px; letter-spacing:1.6px; text-transform:uppercase;
  color:var(--psv2-gold-eyebrow); background:rgba(17,17,17,.78);
  border:1px solid var(--psv2-hairline); border-radius:var(--psv2-radius); padding:4px 10px; }

/* Support archive article index. The archive linked 3 of 64 articles; the rest
   were reachable only by search or by opening a section page first. */
.psv2-index{ display:grid; gap:28px; grid-template-columns:repeat(auto-fit,minmax(min(100%,300px),1fr)); }
.psv2-index__group h3{ margin:0 0 10px; font-family:var(--psv2-caps); font-size:.78rem;
  font-weight:600; letter-spacing:2px; text-transform:uppercase; color:var(--psv2-gold-eyebrow); }
.psv2-index__group ul{ list-style:none; margin:0; padding:0; display:flex;
  flex-direction:column; gap:8px; }
.psv2-index__group a{ font-size:16px; line-height:1.5; color:var(--psv2-text-soft);
  text-decoration:none;
  &:hover{ color:var(--psv2-gold); } }

/* Two-up copy/aside row used by the home membership card and the events line. */
.psv2-aside{ display:flex; flex-direction:column; gap:22px; }
@media (min-width: 56.25rem){
  .psv2-aside{ flex-direction:row; align-items:center; justify-content:space-between; gap:32px; }
  .psv2-aside__main{ max-width:62ch; }
  .psv2-aside__side{ flex:none; border-left:1px solid var(--psv2-hairline); padding-left:32px; }
}
.psv2-aside__side{ display:flex; flex-direction:column; align-items:flex-start; gap:8px;
  & .psv2-fact__k{ display:block; font-family:var(--psv2-caps); font-size:13px;
    letter-spacing:2px; text-transform:uppercase; color:var(--psv2-gold-eyebrow); }
  & .psv2-aside__price{ font-family:var(--psv2-display); font-size:34px; line-height:1;
    color:var(--psv2-gold-bright);
    & small{ font-family:var(--psv2-body); font-size:15px; color:var(--psv2-text-soft); } }
  & .psv2-aside__meta{ font-size:15px; color:var(--psv2-text-muted); } }

/* G3 · one button in the mobile sticky bar. Two competing primaries is zero
   primaries, and memberships have sold 1 annual / 0 monthly to date. */
.psv2-sticky--single .psv2-sticky__btn{ min-height:56px; }

/* Thin page hero. /rates/ is 28% of all landings and held visitors 2 seconds
   (GA4, 90 days) — because the first phone screen was a full-height photo and
   an 82-word promo card, and the first price cell sat about three screens
   down. No photo, no scrim, no eyebrow: the H1, one line, and the price.
   G8 also applies — the eyebrow used to live INSIDE the <h1>, so the crawled
   heading read "Rates & Memberships Golf Simulator Rates in Vaughan". */
.psv2-thero{ padding:40px var(--psv2-pad-x) 8px; border-bottom:1px solid var(--psv2-hairline-soft); }
.psv2-thero__inner{ width:100%; max-width:var(--psv2-container); margin-inline:auto; }
.psv2-thero__title{ margin:0 0 12px; font-family:var(--psv2-display);
  font-size:clamp(30px,5.5vw,44px); font-weight:700; line-height:1.05;
  color:var(--psv2-text-head);
  & em{ font-style:italic; color:var(--psv2-gold); } }
.psv2-thero__lead{ margin:0 0 20px; max-width:64ch; font-size:17px; line-height:1.75;
  color:var(--psv2-text-soft);
  & strong{ color:var(--psv2-text-head); font-weight:600; } }

/* Compact photo hero. /rates/ keeps its photograph like every other inner page,
   but not the 150px of dead space above the copy that helped push the rate
   table three phone-screens down (GA4: 28% of all landings, 2 seconds each).
   The other inner pages keep their original proportions — this is the one
   deliberate exception, and it exists because of the numbers. */
.psv2-phero--compact .psv2-phero__scrim{ padding-top:72px; padding-bottom:36px;
  /* Its own ramp. The base scrim is transparent until 22% down, which is fine
     when the copy starts 150px in — but the compact hero puts the h1 right at
     the top, over whatever the photograph happens to be doing there. This
     darkens from the first pixel so the title and lead always have contrast. */
  background:linear-gradient(180deg,rgba(12,12,12,.62) 0%,rgba(12,12,12,.74) 35%,rgba(12,12,12,.92) 72%,#111111 100%); }
@media (min-width: 56.25rem){
  .psv2-phero--compact .psv2-phero__scrim{ padding-top:88px; padding-bottom:40px; }
}

/* Body-copy links.
   This theme carries NO global `a` rule — every link in the original build was
   individually classed, so nothing ever styled a bare <a>. The moment page copy
   started linking out to the support guides (and [psl_faq] answers began
   carrying links), those rendered in the browser's default blue and purple on a
   near-black page. Scoped to the containers where prose actually lives, and to
   unclassed anchors only, so buttons, the support index and the footer keep
   their own treatments. */
.psv2-faq__a a:not([class]),
.psv2-lede a:not([class]),
.psv2-fact__v a:not([class]),
.psv2-hero__lede a:not([class]),
.psv2-phero__lead a:not([class]),
.psv2-thero__lead a:not([class]),
.psv2-rates__note a:not([class]),
.psv2-bay__specs a:not([class]),
/* the /indoor-golf/* family uses the older psl-* markup and has the same gap:
   its "More detail" line and its FAQ answers were rendering default blue on
   live, which predates this pass but is the identical defect */
.psl-booking-note a:not([class]),
.psl-contact-faq__answer a:not([class]){
  color:var(--psv2-gold); text-decoration:none;
  border-bottom:1px solid rgba(198,175,117,.45); padding-bottom:1px;
  &:hover{ color:var(--psv2-gold-bright); border-bottom-color:var(--psv2-gold-bright); }
  &:visited{ color:var(--psv2-gold); }
}
