/* tokens.css */
/*
 * Amuse Website V2 - Typography V2 / Design Tokens
 * Source of truth: Claude Design "Typography V2" (2026-10-24), tokens.json in the Design System.
 *
 * - English headings: Cormorant Garamond. English text, nav, buttons, price, labels, footer: Inter.
 * - Chinese: the device's own Chinese sans-serif (PingFang SC on Apple, the system CJK sans on Android,
 *   Microsoft YaHei on Windows). No Chinese italics. No Songti substitutes.
 * - Sizes follow the viewport piecewise-linearly between 320 / 390 / 768 / 1024 / 1440 px (calc(vw + px)),
 *   so the same token serves phone, tablet and desktop. Chinese pages (html[lang|="zh"]) override
 *   size, line-height and tracking where the spec differs.
 * - Minimum text size is 12px. Body copy is left-aligned. Text gold is #80613B (--tg); champagne
 *   (#C8A45D) is decoration and dark grounds only.
 *
 * CHINESE WEB FONT: none (owner decision 2026-10-27). The HarmonyOS Sans SC files (~16 MB) may not be
 * subset under their licence, so Chinese pages use system fonts instead of downloading them.
 */
/* Inter and Cormorant Garamond are served from this site (2026-10-28), not from Google Fonts: the same
 * variable woff2 files Google serves (latin and latin-ext only), SIL Open Font License, see assets/v2/fonts/OFL-*.txt. */
@font-face{font-family:'Cormorant Garamond';font-style:italic;font-weight:400 500;font-display:swap;src:url(/assets/v2/fonts/cormorant-garamond-italic-latin-ext.06bc9a8c.woff2) format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF}
@font-face{font-family:'Cormorant Garamond';font-style:italic;font-weight:400 500;font-display:swap;src:url(/assets/v2/fonts/cormorant-garamond-italic-latin.e6d6d1d7.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD}
@font-face{font-family:'Cormorant Garamond';font-style:normal;font-weight:400 600;font-display:swap;src:url(/assets/v2/fonts/cormorant-garamond-latin-ext.9dc38267.woff2) format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF}
@font-face{font-family:'Cormorant Garamond';font-style:normal;font-weight:400 600;font-display:swap;src:url(/assets/v2/fonts/cormorant-garamond-latin.5d618c46.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD}
@font-face{font-family:'Inter';font-style:normal;font-weight:400 700;font-display:swap;src:url(/assets/v2/fonts/inter-latin-ext.a28eb6d3.woff2) format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF}
@font-face{font-family:'Inter';font-style:normal;font-weight:400 700;font-display:swap;src:url(/assets/v2/fonts/inter-latin.c9407645.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD}

:root{--ff-display:'Cormorant Garamond','HarmonyOS Sans SC','Songti SC','SimSun',Georgia,serif;--ff-body:'Inter','HarmonyOS Sans SC','PingFang SC','Microsoft YaHei',Arial,sans-serif;--tg:#80613B;--lh-hero:1.1;--ls-hero:-0.03em;--fw-hero:400;--lh-h1:1.04;--ls-h1:-0.06em;--fw-h1:500;--lh-land:1.04;--ls-land:-0.06em;--fw-land:500;--lh-h2:1.1;--ls-h2:-0.045em;--fw-h2:500;--lh-h3:1.15;--ls-h3:-0.025em;--fw-h3:500;--lh-card:1.2;--ls-card:-0.015em;--fw-card:500;--lh-service:1.15;--ls-service:-0.02em;--fw-service:500;--lh-faq:1.3;--ls-faq:-0.01em;--fw-faq:500;--lh-stat:1;--ls-stat:-0.03em;--fw-stat:500;--lh-num:1;--ls-num:0;--fw-num:500;--lh-lead:1.7;--ls-lead:0;--fw-lead:400;--lh-body:1.65;--ls-body:0;--fw-body:400;--lh-small:1.6;--ls-small:0;--lh-caption:1.5;--ls-caption:0;--lh-eyebrow:1.4;--ls-eyebrow:0.12em;--fw-eyebrow:500;--lh-label:1.4;--ls-label:0.12em;--fw-label:600;--lh-navd:1.25;--ls-navd:0.1em;--fw-navd:500;--lh-navm:1.2;--ls-navm:-0.01em;--fw-navm:500;--lh-lang:1.2;--ls-lang:0.06em;--lh-btn:1.25;--ls-btn:0;--fw-btn:600;--lh-ctam:1.25;--ls-ctam:0.08em;--fw-ctam:600;--lh-link:1.5;--ls-link:0;--fw-link:500;--lh-price:1.4;--ls-price:0;--fw-price:500;--lh-pricemeta:1.5;--ls-pricemeta:0;--lh-tab:1.3;--ls-tab:0;--fw-tab:500;--lh-fth:1.2;--ls-fth:-0.01em;--fw-fth:500;--lh-ftl:1.6;--ls-ftl:0;--lh-ftc:1.7;--lh-ftcopy:1.6;}
:root{--fs-hero:36px;--fs-h1:38px;--fs-land:36px;--fs-h2:30px;--fs-h3:24px;--fs-card:22px;--fs-service:23px;--fs-faq:18px;--fs-stat:40px;--fs-num:20px;--fs-lead:16px;--fs-body:15px;--fs-small:14px;--fs-caption:12px;--fs-eyebrow:12px;--fs-label:18px;--fs-navd:16px;--fs-navm:30px;--fs-lang:14px;--fs-btn:16px;--fs-ctam:16px;--fs-link:15px;--fs-price:17px;--fs-pricemeta:14px;--fs-tab:14px;--fs-fth:22px;--fs-ftl:16px;--fs-ftc:15px;--fs-ftcopy:13px;}html[lang|="zh"]{--fs-hero:30px;--fs-h1:36px;--fs-land:34px;--fs-h2:28px;--fs-h3:21px;--fs-card:19px;--fs-service:20px;--fs-faq:16px;--fs-num:18px;--fs-label:17px;--fs-navm:26px;--fs-fth:20px;}
@media (min-width:320px) and (max-width:389.98px){:root{--fs-hero:calc(5.7143vw + 17.7143px);--fs-h1:calc(8.5714vw + 10.5714px);--fs-land:calc(8.5714vw + 8.5714px);--fs-h2:calc(5.7143vw + 11.7143px);--fs-h3:calc(4.2857vw + 10.2857px);--fs-card:calc(2.8571vw + 12.8571px);--fs-service:calc(2.8571vw + 13.8571px);--fs-faq:calc(1.4286vw + 13.4286px);--fs-stat:calc(5.7143vw + 21.7143px);--fs-num:20px;--fs-lead:16px;--fs-body:15px;--fs-small:14px;--fs-caption:12px;--fs-eyebrow:12px;--fs-label:calc(2.8571vw + 8.8571px);--fs-navd:16px;--fs-navm:calc(2.8571vw + 20.8571px);--fs-lang:14px;--fs-btn:16px;--fs-ctam:16px;--fs-link:15px;--fs-price:17px;--fs-pricemeta:14px;--fs-tab:14px;--fs-fth:22px;--fs-ftl:16px;--fs-ftc:15px;--fs-ftcopy:13px;}html[lang|="zh"]{--fs-hero:calc(5.7143vw + 11.7143px);--fs-h1:calc(5.7143vw + 17.7143px);--fs-land:calc(5.7143vw + 15.7143px);--fs-h2:calc(5.7143vw + 9.7143px);--fs-h3:calc(4.2857vw + 7.2857px);--fs-card:calc(2.8571vw + 9.8571px);--fs-service:calc(2.8571vw + 10.8571px);--fs-faq:calc(1.4286vw + 11.4286px);--fs-num:18px;--fs-label:calc(2.8571vw + 7.8571px);--fs-navm:calc(2.8571vw + 16.8571px);--fs-fth:20px;}}
@media (min-width:390px) and (max-width:767.98px){:root{--fs-hero:calc(1.0582vw + 35.873px);--fs-h1:calc(1.5873vw + 37.8095px);--fs-land:calc(1.5873vw + 35.8095px);--fs-h2:calc(1.0582vw + 29.873px);--fs-h3:calc(0.7937vw + 23.9048px);--fs-card:calc(0.5291vw + 21.9365px);--fs-service:calc(0.2646vw + 23.9683px);--fs-faq:calc(0.2646vw + 17.9683px);--fs-stat:calc(2.1164vw + 35.746px);--fs-num:20px;--fs-lead:16px;--fs-body:calc(0.2646vw + 13.9683px);--fs-small:14px;--fs-caption:12px;--fs-eyebrow:12px;--fs-label:calc(0.5291vw + 17.9365px);--fs-navd:16px;--fs-navm:32px;--fs-lang:14px;--fs-btn:16px;--fs-ctam:16px;--fs-link:15px;--fs-price:calc(0.2646vw + 15.9683px);--fs-pricemeta:14px;--fs-tab:14px;--fs-fth:calc(0.5291vw + 19.9365px);--fs-ftl:16px;--fs-ftc:15px;--fs-ftcopy:13px;}html[lang|="zh"]{--fs-hero:calc(1.0582vw + 29.873px);--fs-h1:calc(1.5873vw + 33.8095px);--fs-land:calc(1.5873vw + 31.8095px);--fs-h2:calc(0.7937vw + 28.9048px);--fs-h3:calc(0.5291vw + 21.9365px);--fs-card:calc(0.5291vw + 18.9365px);--fs-service:calc(0.2646vw + 20.9683px);--fs-faq:calc(0.2646vw + 15.9683px);--fs-num:18px;--fs-label:calc(0.5291vw + 16.9365px);--fs-navm:28px;--fs-fth:calc(0.5291vw + 17.9365px);}}
@media (min-width:768px) and (max-width:1023.98px){:root{--fs-hero:calc(1.5625vw + 32px);--fs-h1:calc(3.9062vw + 20px);--fs-land:calc(3.125vw + 24px);--fs-h2:calc(1.5625vw + 26px);--fs-h3:calc(0.7812vw + 24px);--fs-card:calc(0.7812vw + 20px);--fs-service:calc(0.7812vw + 20px);--fs-faq:calc(0.3906vw + 17px);--fs-stat:calc(3.125vw + 28px);--fs-num:20px;--fs-lead:calc(0.3906vw + 13px);--fs-body:16px;--fs-small:14px;--fs-caption:12px;--fs-eyebrow:12px;--fs-label:calc(1.5625vw + 10px);--fs-navd:16px;--fs-navm:32px;--fs-lang:14px;--fs-btn:calc(-0.3906vw + 19px);--fs-ctam:16px;--fs-link:15px;--fs-price:18px;--fs-pricemeta:14px;--fs-tab:calc(0.3906vw + 11px);--fs-fth:24px;--fs-ftl:16px;--fs-ftc:15px;--fs-ftcopy:13px;}html[lang|="zh"]{--fs-hero:calc(1.5625vw + 26px);--fs-h1:calc(3.125vw + 22px);--fs-land:calc(2.3438vw + 26px);--fs-h2:calc(1.5625vw + 23px);--fs-h3:calc(0.7812vw + 20px);--fs-card:calc(0.3906vw + 20px);--fs-service:calc(0.7812vw + 17px);--fs-faq:calc(0.3906vw + 15px);--fs-num:18px;--fs-label:calc(1.1719vw + 12px);--fs-navm:28px;--fs-fth:22px;}}
@media (min-width:1024px) and (max-width:1439.98px){:root{--fs-hero:calc(4.5673vw + 1.2308px);--fs-h1:calc(8.6538vw - 28.6154px);--fs-land:calc(8.1731vw - 27.6923px);--fs-h2:calc(4.3269vw - 2.3077px);--fs-h3:calc(0.9615vw + 22.1538px);--fs-card:calc(0.4808vw + 23.0769px);--fs-service:calc(0.4808vw + 23.0769px);--fs-faq:calc(0.2404vw + 18.5385px);--fs-stat:calc(0.9615vw + 50.1538px);--fs-num:20px;--fs-lead:calc(0.2404vw + 14.5385px);--fs-body:16px;--fs-small:14px;--fs-caption:12px;--fs-eyebrow:12px;--fs-label:calc(0.4808vw + 21.0769px);--fs-navd:16px;--fs-navm:32px;--fs-lang:14px;--fs-btn:15px;--fs-ctam:16px;--fs-link:15px;--fs-price:18px;--fs-pricemeta:14px;--fs-tab:15px;--fs-fth:24px;--fs-ftl:16px;--fs-ftc:15px;--fs-ftcopy:13px;}html[lang|="zh"]{--fs-hero:calc(2.8846vw + 12.4615px);--fs-h1:calc(5.7692vw - 5.0769px);--fs-land:calc(5.2885vw - 4.1538px);--fs-h2:calc(1.2019vw + 26.6923px);--fs-h3:calc(0.4808vw + 23.0769px);--fs-card:calc(0.4808vw + 19.0769px);--fs-service:calc(0.4808vw + 20.0769px);--fs-faq:calc(0.2404vw + 16.5385px);--fs-num:18px;--fs-label:calc(0.4808vw + 19.0769px);--fs-navm:28px;--fs-fth:22px;}}
@media (min-width:1440px){:root{--fs-hero:67px;--fs-h1:96px;--fs-land:90px;--fs-h2:60px;--fs-h3:36px;--fs-card:30px;--fs-service:30px;--fs-faq:22px;--fs-stat:64px;--fs-num:20px;--fs-lead:18px;--fs-body:16px;--fs-small:14px;--fs-caption:12px;--fs-eyebrow:12px;--fs-label:28px;--fs-navd:16px;--fs-navm:32px;--fs-lang:14px;--fs-btn:15px;--fs-ctam:16px;--fs-link:15px;--fs-price:18px;--fs-pricemeta:14px;--fs-tab:15px;--fs-fth:24px;--fs-ftl:16px;--fs-ftc:15px;--fs-ftcopy:13px;}html[lang|="zh"]{--fs-hero:54px;--fs-h1:78px;--fs-land:72px;--fs-h2:44px;--fs-h3:30px;--fs-card:26px;--fs-service:27px;--fs-faq:20px;--fs-num:18px;--fs-label:26px;--fs-navm:28px;--fs-fth:22px;}}
html[lang|="zh"]{--ff-display:'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Source Han Sans SC','Microsoft YaHei','Inter',Arial,sans-serif;--ff-body:'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Source Han Sans SC','Microsoft YaHei','Inter',Arial,sans-serif;--lh-hero:1.2;--ls-hero:0.02em;--fw-hero:500;--lh-h1:1.15;--ls-h1:0.01em;--lh-land:1.15;--ls-land:0.01em;--lh-h2:1.2;--ls-h2:0;--lh-h3:1.3;--ls-h3:0;--lh-card:1.35;--ls-card:0;--lh-service:1.3;--ls-service:0;--lh-faq:1.45;--ls-faq:0;--ls-stat:0;--lh-lead:1.85;--lh-body:1.8;--lh-small:1.75;--lh-caption:1.6;--lh-eyebrow:1.5;--ls-eyebrow:0.06em;--lh-label:1.5;--ls-label:0.03em;--lh-navd:1.3;--ls-navd:0.06em;--lh-navm:1.25;--ls-navm:0;--ls-lang:0.04em;--lh-btn:1.3;--ls-btn:0.02em;--lh-ctam:1.3;--ls-ctam:0.04em;--lh-link:1.6;--lh-price:1.5;--lh-pricemeta:1.65;--lh-tab:1.4;--lh-fth:1.3;--ls-fth:0;--lh-ftl:1.7;--lh-ftc:1.75;--lh-ftcopy:1.7;}

/* ---------------------------------------------------------------------------------------------
 * Colour tokens - Design System tokens.json (Typography V2 release, 2026-10-24).
 * Three golds, deliberately separate (owner decision 2026-10-24):
 *   --tg             #80613B  Text Gold: the only gold for text on light grounds (Typography block above)
 *   --v2-logo-gold   #82633D  Logo Gold: the colour of the confirmed vector logo (amuse-logo.svg)
 *   --v2-champagne   #C8A45D  Accent Gold: decoration, rules, the booking button fill, text on dark only
 * --------------------------------------------------------------------------------------------- */
:root{
  --v2-ivory:#FAF8F5;--v2-ink:#1A1A1A;--v2-warm:#F3F1ED;--v2-warm-sand:#E8E0D5;--v2-white:#FFFFFF;
  --v2-champagne:#C8A45D;--v2-champagne-bright:#D9BA78;--v2-bronze-soft:#927B50;
  --v2-logo-gold:#82633D;
  --v2-text-secondary:#555555;--v2-divider:#DFDCD5;--v2-control-border:#8F887E;
  --v2-cocoa:#5A4D42;--v2-dark-media:#242321;--v2-footer-rule:#7D6E61;--v2-footer-control:#B0A699;
  --v2-on-dark-muted:#D8D0C4;--v2-on-dark-subtle:#B9B0A4;--v2-dark-rule:#3A3835;--v2-dark-border:#6B655E;
  --v2-photo-placeholder:#E4DBCB;
}

/* ---------------------------------------------------------------------------------------------
 * Layout tokens - taken from the responsive-fixed canvas (the approved layout baseline).
 * Canvas: .wrap max-width 1360px, side padding clamp(24px,5vw,80px), 22px at <=620px;
 * header 72px (desktop) / 70px (<=620px); header inner row max 1440px.
 * 1360px is the confirmed main-content maximum (owner decision 2026-10-24; the old 1200px is not used).
 * It applies to content containers only: hero and full-bleed media follow the canvas per section and
 * are not capped by a token (wide 1600 / 1920px layouts are kept).
 * Custom properties cannot be used inside @media; breakpoints are documented in
 * docs/website-v2/p1-foundation.md and repeated as literals in base.css.
 * --------------------------------------------------------------------------------------------- */
:root{
  --v2-wrap-max:1360px;--v2-nav-max:1440px;
  --v2-edge:clamp(24px,5vw,80px);
  --v2-header-h:72px;
  --v2-btn-h:48px;--v2-hero-btn-h:56px;--v2-touch:44px;
  --v2-radius-pill:36px;
  --v2-s4:4px;--v2-s8:8px;--v2-s12:12px;--v2-s16:16px;--v2-s18:18px;--v2-s24:24px;--v2-s32:32px;
  --v2-s44:44px;--v2-s48:48px;--v2-s64:64px;--v2-s80:80px;--v2-s96:96px;--v2-s112:112px;--v2-s128:128px;
}
@media (max-width:620px){:root{--v2-edge:22px;--v2-header-h:70px}}

/* base.css */
/*
 * Amuse Website V2 - base styles (P1 foundation).
 * Requires tokens.css. Not linked from any existing page yet: pages adopt it in P2+.
 * Everything here comes from the approved, responsive-fixed canvas or the Design System;
 * no new visual design. Class names are prefixed v2- / t- so they cannot collide with styles.css.
 *
 * Breakpoints used by the canvas (literals, custom properties cannot be used in @media):
 *   >=1440 type plateau | 1024-1439 type ramp | <=1023 mobile navigation (measured: desktop nav fits
 *   at 1024, see docs) | 980 / 900 / 820 / 760 section-level grid steps (component CSS, P2+) |
 *   <=620 mobile layout (22px edge, 70px header) | <=480 / <=400 button padding | 390 / 320 type nodes
 */
*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;text-size-adjust:100%}
/* Keep content clear of the notch in landscape on viewport-fit=cover pages (0 elsewhere). */
body{padding-left:env(safe-area-inset-left,0px);padding-right:env(safe-area-inset-right,0px)}
/* On phones the root (canvas) colour is the footer's cocoa, so the area iOS Safari shows below the end of
 * the page, behind its toolbar, matches the footer instead of a white block. The body stays ivory. */
@media (hover:none) and (pointer:coarse){html{background-color:var(--v2-cocoa)}body{min-height:100vh}}
body{margin:0;background:var(--v2-ivory);color:var(--v2-ink);-webkit-font-smoothing:antialiased;
  font-family:var(--ff-body);font-size:var(--fs-body);line-height:var(--lh-body);letter-spacing:var(--ls-body);font-weight:var(--fw-body);
  text-align:left}
img,video,svg{display:block;max-width:100%;height:auto}
h1,h2,h3,h4,p,figure,blockquote,dl,dd{margin:0}
/* Natural wrapping: never clip text to hide a layout problem. */
h1,h2,h3,h4,p,li,dd,blockquote{overflow-wrap:break-word}
/* No global text-wrap:balance/pretty: line breaks follow the approved canvas; components opt in where the canvas does. */
/* Chinese is never set in italics (accent phrases change colour only). */
html[lang|="zh"] em,html[lang|="zh"] i,html[lang|="zh"] cite{font-style:normal}
a{color:inherit}
a:focus-visible,button:focus-visible,[tabindex]:focus-visible{outline:2px solid var(--tg);outline-offset:3px}

/* Layout */
.v2-wrap{width:100%;max-width:var(--v2-wrap-max);margin-inline:auto;padding-inline:var(--v2-edge)}
/* Full-bleed sections and hero media are sized per component from the canvas; no global cap. */
.v2-skip{position:absolute;left:16px;top:-80px;z-index:100;padding:12px 18px;background:var(--v2-ink);color:var(--v2-ivory);border-radius:4px;text-decoration:none;
  font-family:var(--ff-body);font-size:var(--fs-small);line-height:var(--lh-small)}
.v2-skip:focus{top:12px}
.v2-sr{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}

/* Typography helpers: one class per V2 token (sizes, leading, tracking, weight and family per language). */
.t-hero{font-family:var(--ff-display);font-size:var(--fs-hero);line-height:var(--lh-hero);letter-spacing:var(--ls-hero);font-weight:var(--fw-hero)}
.t-h1{font-family:var(--ff-display);font-size:var(--fs-h1);line-height:var(--lh-h1);letter-spacing:var(--ls-h1);font-weight:var(--fw-h1)}
.t-land{font-family:var(--ff-display);font-size:var(--fs-land);line-height:var(--lh-land);letter-spacing:var(--ls-land);font-weight:var(--fw-land)}
.t-h2{font-family:var(--ff-display);font-size:var(--fs-h2);line-height:var(--lh-h2);letter-spacing:var(--ls-h2);font-weight:var(--fw-h2)}
.t-h3{font-family:var(--ff-display);font-size:var(--fs-h3);line-height:var(--lh-h3);letter-spacing:var(--ls-h3);font-weight:var(--fw-h3)}
.t-card{font-family:var(--ff-display);font-size:var(--fs-card);line-height:var(--lh-card);letter-spacing:var(--ls-card);font-weight:var(--fw-card)}
.t-service{font-family:var(--ff-display);font-size:var(--fs-service);line-height:var(--lh-service);letter-spacing:var(--ls-service);font-weight:var(--fw-service)}
.t-faq{font-family:var(--ff-display);font-size:var(--fs-faq);line-height:var(--lh-faq);letter-spacing:var(--ls-faq);font-weight:var(--fw-faq)}
.t-stat{font-family:var(--ff-display);font-size:var(--fs-stat);line-height:var(--lh-stat);letter-spacing:var(--ls-stat);font-weight:var(--fw-stat)}
.t-num{font-family:var(--ff-display);font-size:var(--fs-num);line-height:var(--lh-num);letter-spacing:var(--ls-num);font-weight:var(--fw-num)}
.t-lead{font-family:var(--ff-body);font-size:var(--fs-lead);line-height:var(--lh-lead);letter-spacing:var(--ls-lead);font-weight:var(--fw-lead)}
.t-body{font-family:var(--ff-body);font-size:var(--fs-body);line-height:var(--lh-body);letter-spacing:var(--ls-body);font-weight:var(--fw-body)}
.t-small{font-family:var(--ff-body);font-size:var(--fs-small);line-height:var(--lh-small);letter-spacing:var(--ls-small)}
.t-caption{font-family:var(--ff-body);font-size:var(--fs-caption);line-height:var(--lh-caption);letter-spacing:var(--ls-caption)}
.t-eyebrow{font-family:var(--ff-body);font-size:var(--fs-eyebrow);line-height:var(--lh-eyebrow);letter-spacing:var(--ls-eyebrow);font-weight:var(--fw-eyebrow)}
.t-label{font-family:var(--ff-body);font-size:var(--fs-label);line-height:var(--lh-label);letter-spacing:var(--ls-label);font-weight:var(--fw-label)}
.t-navd{font-family:var(--ff-body);font-size:var(--fs-navd);line-height:var(--lh-navd);letter-spacing:var(--ls-navd);font-weight:var(--fw-navd)}
.t-navm{font-family:var(--ff-display);font-size:var(--fs-navm);line-height:var(--lh-navm);letter-spacing:var(--ls-navm);font-weight:var(--fw-navm)}
.t-lang{font-family:var(--ff-body);font-size:var(--fs-lang);line-height:var(--lh-lang);letter-spacing:var(--ls-lang)}
.t-btn{font-family:var(--ff-body);font-size:var(--fs-btn);line-height:var(--lh-btn);letter-spacing:var(--ls-btn);font-weight:var(--fw-btn)}
.t-ctam{font-family:var(--ff-body);font-size:var(--fs-ctam);line-height:var(--lh-ctam);letter-spacing:var(--ls-ctam);font-weight:var(--fw-ctam)}
.t-link{font-family:var(--ff-body);font-size:var(--fs-link);line-height:var(--lh-link);letter-spacing:var(--ls-link);font-weight:var(--fw-link)}
.t-price{font-family:var(--ff-body);font-size:var(--fs-price);line-height:var(--lh-price);letter-spacing:var(--ls-price);font-weight:var(--fw-price)}
.t-pricemeta{font-family:var(--ff-body);font-size:var(--fs-pricemeta);line-height:var(--lh-pricemeta);letter-spacing:var(--ls-pricemeta)}
.t-tab{font-family:var(--ff-body);font-size:var(--fs-tab);line-height:var(--lh-tab);letter-spacing:var(--ls-tab);font-weight:var(--fw-tab)}
.t-fth{font-family:var(--ff-display);font-size:var(--fs-fth);line-height:var(--lh-fth);letter-spacing:var(--ls-fth);font-weight:var(--fw-fth)}
.t-ftl{font-family:var(--ff-body);font-size:var(--fs-ftl);line-height:var(--lh-ftl);letter-spacing:var(--ls-ftl)}
.t-ftc{font-family:var(--ff-body);font-size:var(--fs-ftc);line-height:var(--lh-ftc)}
.t-ftcopy{font-family:var(--ff-body);font-size:var(--fs-ftcopy);line-height:var(--lh-ftcopy)}
.t-accent{color:var(--tg);font-style:italic}
html[lang|="zh"] .t-accent{font-style:normal}

/* Buttons. Labels stay at the token size (15px desktop / 16px mobile) and are never shrunk to fit.
 * Short labels sit on one line; long WhatsApp labels may wrap to two centred lines on narrow
 * phones (owner decision 2026-10-24): height grows with the text, padding stays generous. */
.v2-btn{display:inline-flex;align-items:center;justify-content:center;gap:10px;
  min-height:var(--v2-btn-h);max-width:100%;padding:12px 28px;border-radius:var(--v2-radius-pill);
  font-family:var(--ff-body);font-size:var(--fs-btn);line-height:var(--lh-btn);letter-spacing:var(--ls-btn);font-weight:var(--fw-btn);
  text-align:center;text-decoration:none;white-space:normal;text-wrap:balance;overflow-wrap:break-word;cursor:pointer}
.v2-btn > svg{flex:none}
.v2-btn--gold{background:var(--v2-champagne);color:var(--v2-ink);border:0}
.v2-btn--ink{background:var(--v2-ink);color:var(--v2-ivory);border:0}
.v2-btn--ghost{background:rgba(40,34,30,0.30);color:var(--v2-ivory);border:1px solid rgba(250,248,245,0.85);min-height:var(--v2-hero-btn-h)}
.v2-btn--nowrap{white-space:nowrap}
@media (max-width:480px){.v2-btn{padding-inline:18px;gap:8px}}
@media (max-width:400px){.v2-btn{padding-inline:16px}}

@media (prefers-reduced-motion:reduce){*,*::before,*::after{animation-duration:.01ms !important;animation-iteration-count:1 !important;transition-duration:.01ms !important;scroll-behavior:auto !important}}

/* components.css */
/*
 * Amuse Website V2 - shared components (P2): header, desktop navigation, language switch,
 * mobile menu V2.1 and footer. Requires tokens.css + base.css. Ported from the approved,
 * responsive-fixed canvas; type sizes come only from the Typography V2 tokens.
 * Breakpoints: desktop navigation >=1024px, menu <=1023px (re-verified on these components),
 * compact header <=620px.
 */

/* ---------- Header ---------- */
.v2-hdr{position:relative;z-index:60;color:var(--v2-ink);background:var(--v2-ivory);border-bottom:1px solid var(--v2-divider);
  transition:background-color .22s ease,color .22s ease,border-color .22s ease}
.v2-hdr--overlay{position:absolute;inset:0 0 auto 0;background:transparent;color:var(--v2-ivory);border-bottom-color:rgba(250,248,245,0.2)}
.v2-hdr.is-open{background:var(--v2-ivory);color:var(--v2-ink);border-bottom-color:var(--v2-divider)}
/* The homepage uses viewport-fit=cover so its hero fills the whole iPhone screen; the header then
 * clears the status bar. env() is 0 on pages without viewport-fit=cover. */
.v2-hdr{padding-top:env(safe-area-inset-top,0px)}
/* iOS 26 Safari colours the status-bar strip at the top of the page from a full-width fixed element at
 * the top edge, or else from the root background (which is cocoa on touch screens so the strip below the
 * footer matches it). This invisible strip sets that colour: ivory, or the hero photo's top tone on the
 * homepage. site.js removes it once the page scrolls, when Safari shows the page itself behind the bar. */
.v2-tint{display:none}
@media (hover:none) and (pointer:coarse){
  .v2-tint{display:block;position:fixed;top:0;left:0;width:100%;height:4px;background:var(--v2-ivory);opacity:0;pointer-events:none}
  .v2-tint--hero{background:#9C8F79}
  /* Same idea at the bottom edge: while the footer is on screen, a cocoa strip makes Safari colour the
   * area behind its toolbar like the footer (otherwise it shows a white block below the page). */
  /* Opaque and taller than the top strip: it only shows while the footer (same cocoa) fills the bottom of
   * the screen, so it is never visible, and Safari did not pick up the 4px invisible version. */
  .v2-tint--foot{top:auto;bottom:0;height:12px;background:var(--v2-cocoa);opacity:1}
  .v2-tint[hidden]{display:none}
}
.v2-hdr__bar{display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);align-items:center;gap:0 32px;
  max-width:var(--v2-nav-max);margin:0 auto;min-height:var(--v2-header-h);padding:8px var(--v2-edge) 0}
.v2-hdr__home{grid-column:2;grid-row:1;position:relative;display:flex;align-items:center;justify-content:center;
  width:156px;height:44px;text-decoration:none}
.v2-hdr__logo{display:block;width:156px;height:40px;object-fit:contain;object-position:center;transition:opacity .22s ease}
.v2-hdr--overlay .v2-hdr__logo{position:absolute;inset:2px 0}
.v2-hdr__logo--dark{opacity:0}
.v2-hdr.is-open .v2-hdr__logo--light{opacity:0}
.v2-hdr.is-open .v2-hdr__logo--dark{opacity:1}
.v2-hdr__right{grid-column:3;grid-row:1;display:flex;align-items:center;justify-content:space-between;gap:40px;min-width:0}

/* Desktop navigation: Inter 16px (navd token), uppercase, underline on hover and on the current section */
.v2-nav{display:flex;align-items:center;gap:clamp(18px,calc(4.809vw - 29.15px),40px)}
.v2-nav--left{grid-column:1;grid-row:1;justify-self:end;margin-right:clamp(12px,1.667vw,24px)}
.v2-nav--right{margin-left:clamp(12px,1.667vw,24px)}
.v2-nav__link{padding:12px 0;color:inherit;text-decoration:none;text-transform:uppercase;white-space:nowrap;
  font-family:var(--ff-body);font-size:var(--fs-navd);line-height:var(--lh-navd);letter-spacing:var(--ls-navd);font-weight:var(--fw-navd);
  background-image:linear-gradient(currentColor,currentColor);background-size:0 1px;background-repeat:no-repeat;background-position:0 100%;transition:background-size .3s ease}
.v2-nav__link:hover,.v2-nav__link[aria-current="page"]{background-size:100% 1px}
/* Services dropdown (2026-10-27): opens on hover or keyboard focus. The padding above the panel
 * bridges the gap from the link so the pointer can move down without closing it. */
.v2-dd{position:relative}
.v2-dd__panel{position:absolute;left:-24px;top:100%;z-index:70;min-width:260px;margin:0;padding:12px 0 0;list-style:none;
  visibility:hidden;opacity:0;transform:translateY(4px);transition:opacity .18s ease,transform .18s ease,visibility 0s linear .18s}
.v2-dd__panel::before{content:"";position:absolute;inset:12px 0 0;z-index:-1;background:rgba(250,248,245,.55);
  -webkit-backdrop-filter:blur(14px) saturate(1.2);backdrop-filter:blur(14px) saturate(1.2);border:1px solid rgba(26,26,26,.08)}
.v2-dd:hover .v2-dd__panel,.v2-dd:focus-within .v2-dd__panel{visibility:visible;opacity:1;transform:none;transition-delay:0s}
.v2-dd__panel li:first-child{padding-top:10px}.v2-dd__panel li:last-child{padding-bottom:10px}
.v2-dd__a{display:block;padding:11px 24px;color:var(--v2-ink);text-decoration:none;white-space:nowrap;
  font-family:var(--ff-body);font-size:var(--fs-navd);line-height:1.5;letter-spacing:.02em;transition:color .15s ease}
.v2-dd__a:hover,.v2-dd__a[aria-current="page"]{color:var(--tg)}
.v2-dd__a:focus-visible{outline:2px solid var(--v2-ink);outline-offset:-2px}
/* Over a hero photo the panel is a dark, see-through glass with ivory text, like the header itself. */
.v2-hdr--overlay:not(.is-open) .v2-dd__panel::before{background:rgba(26,26,26,.28);border-color:rgba(250,248,245,.22)}
.v2-hdr--overlay:not(.is-open) .v2-dd__a{color:var(--v2-ivory)}
.v2-hdr--overlay:not(.is-open) .v2-dd__a:hover,.v2-hdr--overlay:not(.is-open) .v2-dd__a[aria-current="page"]{color:var(--v2-champagne-bright)}
.v2-hdr--overlay:not(.is-open) .v2-dd__a:focus-visible{outline-color:var(--v2-ivory)}

/* Language switch: real links to the same page in the other language (14px lang token) */
.v2-lang{display:flex;flex:none;align-items:center;gap:4px;margin-left:auto}
.v2-lang__a{display:inline-flex;align-items:center;justify-content:center;min-height:var(--v2-touch);min-width:36px;padding:0 8px;white-space:nowrap;
  color:inherit;text-decoration:none;opacity:.6;font-weight:400;
  font-family:var(--ff-body);font-size:var(--fs-lang);line-height:var(--lh-lang);letter-spacing:var(--ls-lang)}
.v2-lang__a[aria-current]{opacity:1;font-weight:700}
.v2-lang__a:hover{opacity:1}
.v2-lang__a--off{opacity:.35;cursor:default}
.v2-lang__a--off:hover{opacity:.35}
.v2-lang__sep{color:var(--v2-champagne)}
/* Canvas: narrower language links below 1240px so the right column never squeezes them */
@media (max-width:1240px){.v2-lang__a{min-width:0;padding:0 4px}}

/* Menu toggle (shown <=1023px) */
.v2-hdr__toggle{display:none;grid-column:1;grid-row:1;justify-self:start;align-items:center;justify-content:center;
  width:var(--v2-touch);height:var(--v2-touch);margin-left:-12px;padding:0;background:none;border:0;color:inherit;cursor:pointer}
.v2-hdr__ico--close{display:none}
.v2-hdr.is-open .v2-hdr__ico--open{display:none}
.v2-hdr.is-open .v2-hdr__ico--close{display:block}

.v2-hdr a:focus-visible,.v2-hdr button:focus-visible{outline:2px solid currentColor;outline-offset:3px}
.v2-hdr--overlay:not(.is-open) a:focus-visible,.v2-hdr--overlay:not(.is-open) button:focus-visible{outline-color:var(--v2-ivory)}

/* ---------- Mobile menu V2.1 ---------- */
.v2-menu{display:none}
@media (max-width:1023.98px){
  .v2-nav{display:none}
  .v2-hdr__toggle{display:flex}
  .v2-hdr__right{justify-content:flex-end}
  .v2-menu{position:absolute;left:0;right:0;top:100%;z-index:50;display:flex;flex-direction:column;
    height:min(calc(100dvh - var(--v2-header-h) - env(safe-area-inset-top,0px) - 1px),860px);overflow-y:auto;overscroll-behavior:contain;
    padding:8px var(--v2-edge) calc(32px + env(safe-area-inset-bottom,0px));
    background:var(--v2-ivory);color:var(--v2-ink);
    visibility:hidden;opacity:0;clip-path:inset(0 0 100% 0);
    transition:clip-path .24s cubic-bezier(.2,.7,.2,1),opacity .2s ease,visibility 0s linear .24s}
  .v2-hdr.is-open .v2-menu{visibility:visible;opacity:1;clip-path:inset(0 0 0 0);transition-delay:0s}
}
.v2-menu__list,.v2-menu__foot{width:100%;max-width:720px}
.v2-menu__list{list-style:none;margin:0;padding:0}
.v2-menu__i{opacity:0;transform:translateY(6px);transition:opacity .14s ease,transform .14s ease}
.v2-hdr.is-open .v2-menu__i{opacity:1;transform:none;transition:opacity .22s ease var(--d,0ms),transform .22s ease var(--d,0ms)}
.v2-menu__a{display:flex;align-items:center;justify-content:space-between;gap:16px;min-height:68px;
  border-bottom:1px solid #E6E2DA;color:var(--v2-ink);text-decoration:none;
  font-family:var(--ff-display);font-size:var(--fs-navm);line-height:var(--lh-navm);letter-spacing:var(--ls-navm);font-weight:var(--fw-navm);
  transition:color .18s ease}
.v2-menu__lbl{display:flex;align-items:center;min-width:0;overflow-wrap:break-word}
.v2-menu__a svg{flex:none;color:var(--v2-control-border);transition:transform .2s ease,color .2s ease}
.v2-menu__a:hover,.v2-menu__a:active{color:#927339}
.v2-menu__a:hover svg,.v2-menu__a:active svg{transform:translate(2px,-2px);color:#927339}
.v2-menu__a[aria-current="page"]{color:var(--tg)}
.v2-menu__a[aria-current="page"] .v2-menu__lbl::before{content:"";flex:none;width:16px;height:1px;margin-right:12px;background:var(--v2-champagne)}
.v2-menu__a[aria-current="page"] svg{color:var(--v2-champagne)}
/* Mobile menu: the five service pages listed under Services */
.v2-menu__sub{list-style:none;margin:0;padding:6px 0 10px 16px;border-bottom:1px solid #E6E2DA}
.v2-menu__s{display:flex;align-items:center;min-height:44px;color:var(--v2-text-secondary);text-decoration:none;
  font-family:var(--ff-body);font-size:var(--fs-body);line-height:var(--lh-body)}
.v2-menu__s:hover,.v2-menu__s:active,.v2-menu__s[aria-current="page"]{color:var(--tg)}
.v2-menu__foot{margin-top:auto;padding-top:40px}
/* The one booking button in the menu: champagne pill, 16px (ctam token), at least 48px tall */
.v2-menu__cta{display:flex;align-items:center;justify-content:center;gap:10px;width:100%;min-height:52px;padding:12px 16px;
  background:var(--v2-champagne);color:var(--v2-ink);border-radius:999px;text-decoration:none;text-transform:uppercase;text-align:center;
  font-family:var(--ff-body);font-size:var(--fs-ctam);line-height:var(--lh-ctam);letter-spacing:var(--ls-ctam);font-weight:var(--fw-ctam);
  transition:background-color .2s ease}
.v2-menu__cta svg{flex:none}
.v2-menu__cta:hover,.v2-menu__cta:active{background:var(--v2-champagne-bright)}
/* Same narrow-phone tightening the canvas applies to its pill buttons (<=400px): label stays 16px */
@media (max-width:400px){.v2-menu__cta{gap:8px;letter-spacing:0.04em}}
.v2-menu__brand{margin:16px 0 0;text-align:center;text-wrap:balance;text-transform:uppercase;color:#6B6055;
  font-family:var(--ff-body);font-size:var(--fs-caption);line-height:var(--lh-caption);letter-spacing:var(--ls-caption)}
.v2-menu a:focus-visible{outline:2px solid var(--v2-ink);outline-offset:3px}

/* No JavaScript: the menu is shown as a plain list under the header instead of a hidden panel. */
@media (max-width:1023.98px){
  html:not(.v2-js) .v2-hdr__toggle{display:none}
  html:not(.v2-js) .v2-menu{position:static;height:auto;visibility:visible;opacity:1;clip-path:none;padding-bottom:24px}
  html:not(.v2-js) .v2-menu__i{opacity:1;transform:none}
  html:not(.v2-js) .v2-hdr--overlay{position:relative;background:var(--v2-cocoa)}
}

/* Phone header (<=620px) = the approved mobile boards: 70px bar, 22px edge, 8px column gap,
 * 120x32 logo, language links 40px wide with no gap and pulled 8px into the edge. */
@media (max-width:620px){
  .v2-hdr__bar{gap:0 8px;min-height:var(--v2-header-h);padding:0 var(--v2-edge)}
  .v2-hdr__home,.v2-hdr__logo{width:120px}
  .v2-hdr__logo{height:32px}
  .v2-hdr--overlay .v2-hdr__logo{inset:6px 0}
  .v2-lang{gap:0;margin-right:-8px}
  .v2-lang__a{min-width:40px;padding:0 4px;white-space:nowrap}
}
/* Pages with three languages (the home page has BM, 2026-10-28): on phones show only the two languages
 * you can switch to, so the switch keeps the width of the two-language one. The current language stays
 * in the accessibility tree. */
@media (max-width:620px){
  .v2-lang:has(> :nth-child(5)) > [aria-current],
  .v2-lang:has(> :nth-child(5)) > [aria-current] + .v2-lang__sep,
  .v2-lang:has(> :nth-child(5)) > .v2-lang__sep:has(+ [aria-current]:last-child){position:absolute;width:1px;height:1px;min-width:0;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap}
}
/* Narrowest phones and zoomed-in browsers: keep at least 8px between the centred logo and the
 * language switch without moving the logo or clipping text. Targets stay 44px tall. */
@media (max-width:360px){.v2-lang__a{min-width:34px}}
/* <=300px (a 320px phone at 107%+ zoom): show only the language you can switch to; the current
 * language stays in the accessibility tree. */
@media (max-width:300px){
  .v2-lang__a[aria-current],.v2-lang__sep{position:absolute;width:1px;height:1px;min-width:0;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap}
  .v2-lang{margin-right:-4px}
}
@media (max-width:260px){.v2-hdr__home,.v2-hdr__logo{width:96px}.v2-hdr__logo{height:26px}.v2-hdr--overlay .v2-hdr__logo{inset:9px 0}}
@media (max-width:230px){.v2-hdr__home,.v2-hdr__logo{width:80px}.v2-hdr__logo{height:22px}.v2-hdr--overlay .v2-hdr__logo{inset:11px 0}}

/* ---------- Footer ---------- */
.v2-ft{position:relative;background:var(--v2-cocoa);color:var(--v2-ivory);padding-bottom:env(safe-area-inset-bottom,0px)}
.v2-ft a:focus-visible{outline:2px solid var(--v2-ivory);outline-offset:3px}
.v2-ft__grid{display:grid;grid-template-columns:minmax(0,1.5fr) minmax(0,.8fr) minmax(0,1fr) minmax(0,1.2fr);gap:48px;
  padding:80px max(var(--v2-edge),calc((100% - var(--v2-wrap-max)) / 2)) 48px}
/* 4 -> 2 columns at 1100px (owner decision 2026-10-24; canvas used 980px, which crowded the hours at 990-1090px) */
@media (max-width:1100px){.v2-ft__grid{grid-template-columns:repeat(2,minmax(0,1fr))}}

.v2-ft__contact{display:flex;flex-direction:column;align-items:flex-start;min-width:0}
.v2-ft__addr{margin:0;font-style:normal;font-weight:500;letter-spacing:.1em;text-transform:uppercase;white-space:pre-line;
  font-family:var(--ff-body);font-size:var(--fs-ftc);line-height:var(--lh-ftc)}
.v2-ft__note{margin:6px 0 0;color:var(--v2-on-dark-muted);font-family:var(--ff-body);font-size:var(--fs-ftcopy);line-height:var(--lh-ftcopy)}
.v2-ft__links{display:flex;flex-direction:column;align-items:flex-start;gap:2px;margin:16px 0 0}
.v2-ft__a{color:var(--v2-on-dark-muted);text-decoration:none;transition:color .2s ease;
  font-family:var(--ff-body);font-size:var(--fs-ftl);line-height:var(--lh-ftl);letter-spacing:var(--ls-ftl)}
.v2-ft__a:hover{color:var(--v2-champagne)}
.v2-ft__strong{color:var(--v2-ivory);font-weight:500;letter-spacing:.1em;text-transform:uppercase;
  font-size:var(--fs-ftc);line-height:var(--lh-ftc)}
.v2-ft__tel{text-transform:none}
.v2-ft__arrow{color:var(--v2-champagne)}
.v2-ft__home{display:flex;align-items:center;margin:40px 0 0}
.v2-ft__home img{width:213px;height:57px;object-fit:contain;object-position:left center}
.v2-ft__socials{display:flex;flex-wrap:wrap;gap:12px;margin:16px 0 0}
.v2-ft__soc{display:flex;align-items:center;justify-content:center;width:var(--v2-touch);height:var(--v2-touch);
  border:1px solid rgba(243,238,230,0.5);border-radius:50%;color:#F3EEE6;text-decoration:none;transition:color .18s ease}
.v2-ft__soc svg{display:block;transition:transform .18s ease}
.v2-ft__soc:hover,.v2-ft__soc:focus-visible,.v2-ft__soc:active{color:var(--b)}
.v2-ft__soc:hover svg,.v2-ft__soc:focus-visible svg,.v2-ft__soc:active svg{transform:scale(1.1)}
.v2-ft__col{min-width:0}
.v2-ft__h{margin:0 0 20px;color:var(--v2-ivory);
  font-family:var(--ff-display);font-size:var(--fs-fth);line-height:var(--lh-fth);letter-spacing:var(--ls-fth);font-weight:var(--fw-fth)}
.v2-ft__list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:10px}
.v2-ft__hours{margin:0}
.v2-ft__row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:16px;padding:0 0 10px;
  font-family:var(--ff-body);font-size:var(--fs-ftc);line-height:var(--lh-ftc)}
.v2-ft__row dt{color:var(--v2-on-dark-muted)}
.v2-ft__row dd{margin:0;font-weight:500;color:var(--v2-ivory)}
.v2-ft__book{margin:18px 0 0;padding-inline:23px;border:1px solid var(--v2-champagne)}
.v2-ft__book span{font-weight:700}
.v2-ft__book:hover{background:var(--v2-champagne-bright);border-color:var(--v2-champagne-bright)}
.v2-ft__bottom{padding:0 max(var(--v2-edge),calc((100% - var(--v2-wrap-max)) / 2))}
.v2-ft__bar{position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px 24px;
  padding:8px 0 0;border-top:1px solid var(--v2-footer-rule);color:var(--v2-on-dark-muted);
  font-family:var(--ff-body);font-size:var(--fs-ftcopy);line-height:var(--lh-ftcopy)}
.v2-ft__copy{display:flex;align-items:center;min-height:28px}
.v2-ft__top{position:absolute;right:0;top:0;transform:translateY(calc(-100% - 13px));display:flex;align-items:center;justify-content:center;
  min-width:64px;height:var(--v2-touch);padding:0 16px;border:1px solid var(--v2-footer-control);background:var(--v2-cocoa);color:var(--v2-ivory);text-decoration:none;
  font-family:var(--ff-body);font-size:var(--fs-eyebrow);line-height:var(--lh-eyebrow);letter-spacing:var(--ls-eyebrow);font-weight:var(--fw-eyebrow);
  transition:border-color .2s ease,color .2s ease}
.v2-ft__top:hover{border-color:var(--v2-champagne);color:var(--v2-champagne)}

/* Phone footer (<=620px) = the approved mobile boards: one column with Explore and Services side by side,
 * 40-44px link rows, full-width booking button. */
@media (max-width:620px){
  .v2-ft__grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:44px 24px;padding:56px var(--v2-edge) 72px}
  .v2-ft__contact,.v2-ft__col:last-child{grid-column:1 / -1}
  .v2-ft__links{gap:0;margin-top:10px}
  .v2-ft__strong{display:flex;align-items:center;gap:6px;min-height:var(--v2-touch)}
  .v2-ft__home{margin-top:28px}
  .v2-ft__home img{width:208px;height:55px}
  .v2-ft__h{margin-bottom:12px}
  .v2-ft__col:last-child .v2-ft__h{margin-bottom:14px}
  .v2-ft__list{gap:0}
  .v2-ft__list .v2-ft__a{display:flex;align-items:center;min-height:40px}
  .v2-ft__book{display:flex;width:100%;margin-top:16px}
  .v2-ft__bottom{padding-inline:var(--v2-edge)}
  .v2-ft__bar{gap:4px 16px;padding-top:14px}
}

/* Floating WhatsApp button (phones and tablets, where the header has no booking button).
 * site.js shows it once the visitor scrolls past the first screen and hides it while the footer,
 * with its own BOOK NOW button, is on screen. Without JavaScript it stays hidden. */
.v2-sticky{display:none}
@media (max-width:1023.98px){
  /* iOS 26 Safari colours its bottom toolbar from any fixed element that spans 80% or more of the screen
   * width near the bottom, even a hidden one or one painted through a pseudo-element: a full-width gold
   * button turned the toolbar gold. The button is therefore a compact pill (well under 80% wide), removed
   * with display:none while hidden, and it only rises a few pixels when it appears. */
  .v2-js .v2-sticky{position:fixed;z-index:40;left:50%;bottom:calc(16px + env(safe-area-inset-bottom,0px));
    display:none;align-items:center;justify-content:center;gap:10px;width:max-content;max-width:72vw;min-height:52px;padding:12px 30px;
    background:var(--v2-champagne);color:var(--v2-ink);border-radius:999px;text-decoration:none;
    font-family:var(--ff-body);font-size:var(--fs-ctam);line-height:var(--lh-ctam);letter-spacing:0.02em;font-weight:var(--fw-ctam);
    box-shadow:0 2px 8px rgba(26,26,26,0.14);
    transform:translate(-50%,10px);opacity:0;
    transition:transform .25s ease,opacity .25s ease,display .25s allow-discrete,background-color .2s ease}
  .v2-js .v2-sticky.is-shown{display:flex;transform:translate(-50%,0);opacity:1}
  @starting-style{.v2-js .v2-sticky.is-shown{transform:translate(-50%,10px);opacity:0}}
  .v2-js .v2-sticky svg{flex:none}
  .v2-js .v2-sticky:hover,.v2-js .v2-sticky:active{background:var(--v2-champagne-bright)}
  .v2-js .v2-sticky:focus-visible{outline:2px solid var(--v2-ink);outline-offset:3px}
  .v2-hdr.is-open ~ .v2-sticky{display:none}
}
@media (prefers-reduced-motion:reduce){
  .v2-hdr,.v2-hdr__logo,.v2-dd__panel,.v2-menu,.v2-menu__i,.v2-hdr.is-open .v2-menu__i,.v2-menu__a,.v2-menu__a svg,.v2-menu__cta,.v2-nav__link,.v2-js .v2-sticky,.v2-js .v2-sticky.is-shown{transition:none !important}
}

/* Hair guide links on the Hair Colour and Hair Treatment pages (2026-10-27). */
.v2-reads__list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:24px;margin:32px 0 0;padding:0;list-style:none}
.v2-reads__card{display:flex;flex-direction:column;height:100%;padding:28px;background:var(--v2-warm);color:var(--v2-ink);text-decoration:none}
.v2-reads__card h3{margin:0;font-family:var(--ff-display);font-size:var(--fs-card);line-height:var(--lh-card);letter-spacing:var(--ls-card);font-weight:var(--fw-card)}
.v2-reads__card p{flex:1;margin:12px 0 20px;color:var(--v2-text-secondary);font-family:var(--ff-body);font-size:var(--fs-small);line-height:var(--lh-small)}
.v2-reads__card > span{align-self:flex-start}
.v2-reads__card:hover h3{color:var(--tg)}
.v2-reads__all{margin:24px 0 0}
@media (max-width:760px){.v2-reads__list{grid-template-columns:minmax(0,1fr);gap:16px}.v2-reads__card{padding:22px}}

/* WhatsApp booking questions (quiz.js, 2026-10-28): a bottom sheet on phones, a centred panel on larger screens. */
.v2-quiz[hidden]{display:none}
.v2-quiz{position:fixed;inset:0;z-index:90;display:flex;align-items:flex-end;justify-content:center}
.v2-quiz-open,.v2-quiz-open body{overflow:hidden}
.v2-quiz__scrim{position:absolute;inset:0;background:rgba(26,26,26,.42)}
.v2-quiz__sheet{position:relative;display:flex;flex-direction:column;width:100%;max-height:88dvh;background:var(--v2-ivory);color:var(--v2-ink);
  border-radius:22px 22px 0 0;box-shadow:0 -8px 30px rgba(26,26,26,.18);padding-bottom:env(safe-area-inset-bottom,0px)}
@media (min-width:621px){
  .v2-quiz{align-items:center;padding:24px}
  .v2-quiz__sheet{max-width:460px;max-height:min(720px,90dvh);border-radius:22px;padding-bottom:0}
}
.v2-quiz__top{display:flex;align-items:center;gap:12px;padding:12px 12px 4px 22px}
.v2-quiz__title{margin:0;font-size:12px;font-weight:600;letter-spacing:.12em;text-transform:uppercase;color:var(--v2-logo-gold)}
.v2-quiz__dots{display:flex;gap:6px;margin-left:auto}
.v2-quiz__dots i{width:22px;height:3px;border-radius:2px;background:var(--v2-divider)}
.v2-quiz__dots i.is-on{background:var(--v2-champagne)}
.v2-quiz__x{display:grid;place-items:center;width:var(--v2-touch);height:var(--v2-touch);border:0;border-radius:50%;background:none;color:var(--v2-text-secondary);cursor:pointer}
.v2-quiz__body{overflow-y:auto;padding:4px 22px 12px}
.v2-quiz__q{margin:6px 0 4px;font-family:var(--ff-display);font-size:28px;font-weight:500;line-height:1.15;outline:none}
.v2-quiz__hint{margin:0 0 16px;font-size:13px;color:var(--v2-text-secondary)}
.v2-quiz__chips{display:flex;flex-wrap:wrap;gap:8px}
.v2-quiz__chip{min-height:var(--v2-touch);padding:10px 16px;border:1px solid var(--v2-divider);border-radius:999px;background:var(--v2-white);
  color:var(--v2-ink);font:500 14px/1.25 var(--ff-body);text-align:left;cursor:pointer}
.v2-quiz__chip small{display:block;margin-top:2px;font-size:12px;font-weight:400;color:var(--v2-text-secondary)}
.v2-quiz__chip[aria-pressed="true"]{border-color:var(--v2-logo-gold);background:#F4ECDD;box-shadow:inset 0 0 0 1px var(--v2-logo-gold)}
.v2-quiz__msg{margin:0;padding:14px 16px;border:1px solid var(--v2-divider);border-radius:14px;background:var(--v2-white);font-size:14px;line-height:1.6;white-space:pre-wrap}
.v2-quiz__price{margin:12px 0 0;font-size:13px;color:var(--v2-text-secondary)}
.v2-quiz__foot{display:flex;flex-direction:column;gap:6px;padding:12px 22px 16px;border-top:1px solid var(--v2-divider)}
.v2-quiz__next,.v2-quiz__send{display:flex;align-items:center;justify-content:center;gap:10px;min-height:52px;border:0;border-radius:999px;
  font:600 15px/1.2 var(--ff-body);text-decoration:none;cursor:pointer}
.v2-quiz__next{background:var(--v2-ink);color:var(--v2-ivory)}
.v2-quiz__next[disabled]{opacity:.35;cursor:not-allowed}
.v2-quiz__send{background:var(--v2-champagne);color:var(--v2-ink)}
.v2-quiz__send:hover{background:var(--v2-champagne-bright)}
.v2-quiz__links{display:flex;justify-content:space-between;gap:12px}
.v2-quiz__link{min-height:var(--v2-touch);display:inline-flex;align-items:center;padding:0;border:0;background:none;color:var(--v2-text-secondary);
  font:13px/1.3 var(--ff-body);text-decoration:underline;text-underline-offset:3px;cursor:pointer}
.v2-quiz button:focus-visible,.v2-quiz a:focus-visible{outline:2px solid var(--v2-ink);outline-offset:3px}
@media (prefers-reduced-motion:no-preference){.v2-quiz__sheet{animation:v2-quiz-up .22s ease}@keyframes v2-quiz-up{from{transform:translateY(24px);opacity:.6}}}

/* ---------- Monthly promotion bar (scripts/v2/promo.mjs) ----------
 * Shown above the header only while a promotion runs (an inline script removes [hidden]). In normal flow,
 * so on the home page the overlay header and the iOS status-bar strip move below it / take its colour. */
.v2-promo{position:relative;z-index:61;display:flex;align-items:center;justify-content:center;min-height:40px;
  padding:env(safe-area-inset-top,0px) 48px 0;background:var(--v2-cocoa);color:var(--v2-ivory);
  font-family:var(--ff-body);font-size:14px;line-height:1.3;letter-spacing:0.02em}
.v2-promo[hidden]{display:none}
.v2-promo__t{margin:0;padding-block:9px;text-align:center}
.v2-promo__p b{color:var(--v2-champagne-bright);font-weight:600}
.v2-promo__p s{margin-left:4px;opacity:0.7}
.v2-promo__a{margin-left:10px;color:inherit;text-decoration:underline;text-underline-offset:3px;white-space:nowrap}
.v2-promo__x{position:absolute;right:max(8px,calc(var(--v2-edge) - 12px));bottom:0;display:flex;align-items:center;justify-content:center;
  width:40px;height:40px;padding:0;border:0;background:none;color:inherit;opacity:0.75;cursor:pointer}
.v2-promo__x:hover,.v2-promo__x:focus-visible{opacity:1}
.v2-promo-on .v2-hdr{padding-top:0}
.v2-promo-on .v2-hdr--overlay{top:var(--v2-promo-h,40px)} /* bar height, set by the inline script (it can wrap to two lines) */
@media (max-width:1023.98px){
  .v2-promo-on .v2-menu{height:min(calc(100dvh - var(--v2-header-h) - var(--v2-promo-h,40px) - 1px),860px)}
}
.v2-promo-on .v2-tint:not(.v2-tint--foot){background:var(--v2-cocoa)}
@media (max-width:620px){
  .v2-promo{justify-content:flex-start;padding-left:var(--v2-edge);font-size:13px;letter-spacing:0}
  .v2-promo__t{text-align:left}
  .v2-promo__p s{display:none}
  .v2-promo__a{margin-left:6px}
}

/* home.css */
/*
 * Amuse Website V2 - Homepage (P3). Requires tokens.css, base.css, components.css.
 * Ported from the approved canvas boards "Desktop 1440" (Main) and "Mobile 390" (Mobile) after the
 * responsive pass: desktop values first, the desktop board's own fallbacks at <=760px, and the
 * mobile board's values at <=620px, so one page runs continuously from 320px to 1920px.
 * Type sizes come only from the Typography V2 tokens.
 */

.v2-home{background:var(--v2-ivory);color:var(--v2-ink);overflow-x:clip}
.v2-home em{font-style:italic;color:var(--tg)}
html[lang|="zh"] .v2-home em{font-style:normal}
.v2-side{padding-inline:max(var(--v2-edge),calc((100% - var(--v2-wrap-max)) / 2))}

/* Section label with a rule (Services / Gallery / About / Reviews) */
.v2-kick{display:flex;align-items:center;gap:24px;margin:0;color:var(--tg);text-transform:uppercase;
  font-family:var(--ff-body);font-size:var(--fs-label);line-height:var(--lh-label);letter-spacing:var(--ls-label);font-weight:var(--fw-label)}
.v2-kick::after{content:"";flex:1;height:1px;background:var(--v2-divider)}

/* Underlined text link with an arrow (View all services / gallery, Read more on Google) */
.v2-more{display:flex;align-items:center;gap:10px;padding:0 0 5px;color:var(--v2-ink);text-decoration:none;border-bottom:1px solid var(--v2-champagne);
  font-family:var(--ff-body);font-size:var(--fs-link);line-height:var(--lh-link);letter-spacing:var(--ls-link);font-weight:var(--fw-link)}
.v2-rev__more svg{flex:none}
.v2-more__arr{font-size:16px;line-height:1;color:var(--v2-bronze-soft)}
.v2-more:hover,.v2-svc__a:hover{color:#927339}

/* ---------- Hero ---------- */
/* The homepage header overlays the hero, so no header height is subtracted. */
.v2-hero{position:relative;display:flex;flex-direction:column;min-height:100vh;min-height:100dvh;background:#2E2925;color:var(--v2-ivory)}
.v2-hero__media{position:absolute;inset:0;overflow:hidden;background:#3A2F29}
.v2-hero__media img{position:absolute;inset:0;display:block;width:100%;height:100%;object-fit:cover;object-position:center 30%}
.v2-hero__shade{position:absolute;inset:0;background:linear-gradient(180deg,rgba(26,26,26,0.4) 0%,rgba(26,26,26,0) 18%,rgba(26,26,26,0) 45%,rgba(26,26,26,0.32) 68%,rgba(26,26,26,0.62) 100%)}
.v2-hero__body{position:relative;z-index:1;margin-top:auto;padding:0 var(--v2-edge) 80px;display:flex;flex-direction:column;align-items:center}
.v2-hero__h1{margin:0 auto 32px;max-width:1440px;text-align:center;color:var(--v2-ivory);
  text-shadow:0 2px 24px rgba(26,26,26,0.45),0 1px 3px rgba(26,26,26,0.3)}
.v2-hero__br{display:none}
.v2-hero__cta{display:inline-flex;align-items:center;justify-content:center;gap:16px;min-height:var(--v2-hero-btn-h);max-width:100%;padding:12px 28px;
  background:transparent;color:var(--v2-ivory);border:1px solid rgba(250,248,245,0.85);border-radius:var(--v2-radius-pill);text-decoration:none;
  text-transform:uppercase;text-align:center;text-wrap:balance;
  font-family:var(--ff-body);font-size:var(--fs-btn);line-height:var(--lh-btn);font-weight:var(--fw-btn);letter-spacing:0.1em;
  transition:background .25s ease,border-color .25s ease}
.v2-hero__cta svg{flex:none}
.v2-hero__arr{transition:transform .25s ease}
.v2-hero__cta:hover{background:rgba(250,248,245,0.14);border-color:var(--v2-ivory)}
.v2-hero__cta:hover .v2-hero__arr{transform:translateX(5px)}
.v2-rise{animation:v2-rise .9s cubic-bezier(.2,.7,.2,1) both}
.v2-rise2{animation-delay:.12s}
/* Rise without a fade: text is visible from the first paint, so it counts as the LCP straight away. */
@keyframes v2-rise{from{transform:translateY(18px)}to{transform:none}}

/* ---------- Intro line ---------- */
.v2-intro{max-width:var(--v2-wrap-max);margin:0 auto;padding:64px var(--v2-edge) 0;display:flex;flex-direction:column;align-items:center;gap:20px}
.v2-intro__rule{display:block;width:48px;height:1px;background:var(--v2-champagne)}
.v2-intro p{max-width:760px;text-align:center;color:var(--v2-cocoa);text-wrap:balance}

/* ---------- Services preview ---------- */
.v2-svc{padding-block:64px}
.v2-svc__spread{display:grid;grid-template-columns:minmax(0,.68fr) minmax(0,1fr);align-items:center;gap:clamp(36px,5vw,72px)}
.v2-svc__text{min-width:0}
.v2-svc__head{margin:0 0 36px}
.v2-svc__head .v2-kick{margin-bottom:14px}
.v2-svc__h2{margin:0 0 18px;white-space:pre-line;max-width:385px;width:min(398px,100%);height:107px}
.v2-svc__intro{max-width:383px;color:var(--v2-text-secondary);position:relative;top:8px}
.v2-svc__feat{display:flex;flex-direction:column;min-width:0;color:var(--v2-ink);text-decoration:none;position:relative;top:18px}
.v2-svc__kick{display:flex;align-items:baseline;gap:14px;margin:0 0 11px;text-transform:uppercase;color:#76716A;
  font-family:var(--ff-body);font-size:var(--fs-eyebrow);line-height:var(--lh-eyebrow);letter-spacing:var(--ls-eyebrow);font-weight:var(--fw-eyebrow)}
.v2-num{color:var(--tg);font-family:var(--ff-display);font-size:var(--fs-num);line-height:var(--lh-num);letter-spacing:var(--ls-num);font-weight:var(--fw-num)}
.v2-svc__feat h3{margin:0}
.v2-svc__fig{display:block;min-width:0;align-self:center}
.v2-svc__fig figure{position:relative;margin:0;aspect-ratio:1.34 / 1;overflow:hidden;background:var(--v2-warm)}
.v2-svc__fig img,.v2-about__fig img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block}
.v2-svc__fig img{object-position:center 45%}
.v2-svc__more{display:flex;flex-direction:column;margin:40px 0 0}
.v2-svc__list{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 68px}
.v2-svc__list li{display:grid;grid-template-columns:38px minmax(0,1fr);gap:14px;align-items:baseline;min-height:96px;padding:18px 0;border-top:1px solid var(--v2-divider)}
.v2-svc__a{color:var(--v2-ink);text-decoration:none;font-family:var(--ff-display);font-size:var(--fs-h3);line-height:var(--lh-h3);letter-spacing:var(--ls-h3);font-weight:var(--fw-h3)}
.v2-svc__all{align-self:flex-end;gap:11px;margin:8px 0 0}
.v2-svc__all span:first-child{font-weight:500}

/* ---------- Gallery preview: coverflow ---------- */
.v2-gal{padding:0 0 64px;overflow:hidden}
.v2-gal__in{display:flex;flex-direction:column}
.v2-gal__head{margin:0 0 36px}
.v2-gal__head .v2-kick{margin-bottom:9px}
.v2-gal__head h2{margin:0}
/* card size follows the viewport (230px at 390px, 415px from 704px) with the canvas 415:560 ratio */
.v2-cf{--gw:min(415px,59vw);--gh:calc(var(--gw) * 1.3494);position:relative;height:calc(var(--gh) + 12px);
  touch-action:pan-y;user-select:none;-webkit-user-select:none}
.v2-cf__item{position:absolute;left:50%;top:50%;width:var(--gw);height:var(--gh);margin:0;overflow:hidden;background:#EAE4DA;
  --off:0px;--sc:1;opacity:0;z-index:1;cursor:pointer;
  transform:translate(-50%,-50%) translateX(var(--off)) scale(var(--sc));
  transition:transform .55s cubic-bezier(.2,.7,.2,1),opacity .55s ease}
.v2-cf__item img{position:absolute;inset:0;display:block;width:100%;height:100%;object-fit:cover;pointer-events:none}
/* positions from the canvas: offsets as a share of the card width, scale and opacity per step */
.v2-cf__item[data-d="0"]{--off:0px;--sc:1;opacity:1;z-index:10;background:#E4DBCB;cursor:default}
.v2-cf__item[data-d="1"]{--off:calc(var(--gw) * .7711);--sc:.82;opacity:.88;z-index:9}
.v2-cf__item[data-d="-1"]{--off:calc(var(--gw) * -.7711);--sc:.82;opacity:.88;z-index:9}
.v2-cf__item[data-d="2"]{--off:calc(var(--gw) * 1.3012);--sc:.66;opacity:.65;z-index:8}
.v2-cf__item[data-d="-2"]{--off:calc(var(--gw) * -1.3012);--sc:.66;opacity:.65;z-index:8}
.v2-cf__item[data-d="3"]{--off:calc(var(--gw) * 1.6867);--sc:.55;z-index:7}
.v2-cf__item[data-d="-3"]{--off:calc(var(--gw) * -1.6867);--sc:.55;z-index:7}
.v2-cf__item[data-d="4"]{--off:calc(var(--gw) * 2.0723);--sc:.5;z-index:6}
.v2-cf__item[data-d="-4"]{--off:calc(var(--gw) * -2.0723);--sc:.5;z-index:6}
.v2-gal__ctrl{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;margin:20px 0 0}
.v2-gal__nav{display:flex;align-items:center;justify-content:center;gap:16px}
.v2-gal__btn{display:flex;align-items:center;justify-content:center;width:var(--v2-touch);height:var(--v2-touch);padding:0;
  border:1px solid var(--v2-control-border);border-radius:50%;background:transparent;color:var(--v2-ink);font:inherit;font-size:16px;line-height:1;cursor:pointer;
  transition:border-color .2s ease,color .2s ease}
.v2-gal__btn:hover{border-color:var(--tg);color:var(--tg)}
.v2-gal__count{min-width:64px;text-align:center;font-weight:500;color:var(--v2-text-secondary);
  font-family:var(--ff-body);font-size:var(--fs-small);line-height:var(--lh-small);letter-spacing:var(--ls-small)}
.v2-gal__all{justify-self:end;margin:0}
html:not(.v2-js) .v2-gal__nav{visibility:hidden}

/* ---------- About ---------- */
.v2-about{background:var(--v2-warm);padding-top:72px;padding-bottom:32px}
.v2-about__grid{display:grid;grid-template-columns:minmax(0,.786fr) minmax(0,1fr);align-items:center;gap:clamp(40px,6.112vw,88px)}
.v2-about__text{display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;max-width:465px;min-width:0;width:100%;height:424px;padding-top:20px}
.v2-about__text .v2-kick{margin-bottom:15px;align-self:stretch}
.v2-about__h2{margin:16px 0 17px;max-width:460px;width:min(430px,100%);text-align:center}
html[lang|="zh"] .v2-about__h2{text-align:left}
.v2-about__text p:last-child{margin:16px 0 0;max-width:430px;color:var(--v2-text-secondary)}
.v2-about__fig{position:relative;margin:0;height:443px;min-width:0;overflow:hidden;background:var(--v2-photo-placeholder)}
.v2-about__fig img{object-position:center 85%}

/* ---------- Google Reviews ---------- */
.v2-rev{background:var(--v2-warm);padding-top:32px;padding-bottom:64px}
.v2-rev__in{max-width:var(--v2-wrap-max);margin:0 auto}
.v2-rev__in > .v2-kick{margin-bottom:24px}
.v2-rev__top{display:flex;align-items:flex-end;justify-content:space-between;gap:32px;flex-wrap:wrap}
.v2-rev__head{display:flex;flex-direction:column;align-items:flex-start;gap:8px}
/* Overall Google rating (canvas): score, five stars and the count over a champagne hairline */
.v2-rev__rating{display:flex;align-items:center;gap:16px;margin:0 0 14px;color:var(--v2-ink);text-decoration:none}
.v2-rev__score{font-family:var(--ff-display);font-size:var(--fs-stat);line-height:var(--lh-stat);letter-spacing:var(--ls-stat);font-weight:var(--fw-stat)}
.v2-rev__meta{display:flex;flex-direction:column;gap:2px}
.v2-rev__mstars{font-size:15px;line-height:1.4;letter-spacing:0.13em;color:var(--v2-champagne)}
.v2-rev__count{font-weight:500;color:var(--v2-text-secondary);border-bottom:1px solid var(--v2-champagne);padding:0 0 2px;
  font-family:var(--ff-body);font-size:var(--fs-small);line-height:var(--lh-small);letter-spacing:var(--ls-small)}
.v2-rev__rating:hover .v2-rev__count{color:#927339}
.v2-rev__head h2{margin:0}
.v2-rev__head p{max-width:270px;color:var(--v2-text-secondary)}
.v2-rev__list{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));margin:16px 0 0;padding:0;list-style:none}
.v2-rev__card{display:flex;flex-direction:column;padding:0 32px;border-left:1px solid var(--v2-divider)}
.v2-rev__card:first-child{padding:0 32px 0 0;border-left:0}
.v2-rev__card:last-child{padding:0 0 0 32px}
.v2-rev__stars{margin:0 0 18px;font-size:16px;line-height:1.5;letter-spacing:0.13em;color:var(--v2-champagne)}
.v2-rev__card blockquote{margin:0;text-align:start}
.v2-rev__ctx{margin:12px 0 32px;color:var(--v2-text-secondary);font-family:var(--ff-body);font-size:var(--fs-caption);line-height:var(--lh-caption);letter-spacing:var(--ls-caption)}
.v2-rev__by{margin:auto 0 0;padding:20px 0 0;border-top:1px solid var(--v2-divider);display:flex;align-items:center;gap:14px}
.v2-rev__avatar{display:flex;align-items:center;justify-content:center;flex:none;width:40px;height:40px;border-radius:50%;background:var(--v2-photo-placeholder);color:var(--tg);font-weight:600;
  font-family:var(--ff-body);font-size:var(--fs-caption);line-height:var(--lh-caption);letter-spacing:var(--ls-caption)}
.v2-rev__author{margin:0;font-weight:500;color:var(--v2-ink);font-family:var(--ff-body);font-size:var(--fs-small);line-height:var(--lh-small);letter-spacing:var(--ls-small)}
.v2-rev__src{margin:2px 0 0;color:var(--v2-text-secondary);font-family:var(--ff-body);font-size:var(--fs-caption);line-height:var(--lh-caption);letter-spacing:var(--ls-caption)}
.v2-rev__foot{display:flex;align-items:center;justify-content:flex-end;gap:16px;margin:32px 0 0}
.v2-rev__more{padding:8px 0}
.v2-rev__swipe{display:none;color:#76716A;font-family:var(--ff-body);font-size:var(--fs-caption);line-height:var(--lh-caption);letter-spacing:var(--ls-caption)}

/* ---------- Tablet: reviews become a swipeable row (canvas mobile pattern, two cards in view) ---------- */
@media (max-width:959.98px){
  .v2-rev__list{display:flex;gap:12px;margin:28px calc(var(--v2-edge) * -1) 0;padding:0 var(--v2-edge) 2px;overflow-x:auto;
    scroll-snap-type:x mandatory;scroll-padding:0 var(--v2-edge);-webkit-overflow-scrolling:touch;overscroll-behavior-x:contain}
  .v2-rev__card,.v2-rev__card:first-child,.v2-rev__card:last-child{flex:0 0 calc((100% - 12px) * .46);scroll-snap-align:start;padding:24px 22px 22px;border:0;background:var(--v2-ivory)}
  .v2-rev__ctx{margin:12px 0 0}
  .v2-rev__by{border-top:0}
  .v2-rev__avatar{display:none}
  .v2-rev__foot{justify-content:space-between;margin-top:20px}
  .v2-rev__swipe{display:block}
}

/* Portrait tablets: the subject sits left of centre in the landscape photo, so keep her face in frame
 * (same horizontal anchor as the mobile board) */
@media (min-width:621px) and (max-width:1023.98px) and (orientation:portrait){.v2-hero__media img{object-position:24% 30%}}

/* ---------- Desktop board fallbacks (<=1279px / <=760px) ---------- */
@media (max-width:1279px){
  .v2-svc__h2{height:auto;min-height:107px}
  .v2-about__text{height:auto;min-height:424px}
}
@media (max-width:760px){
  .v2-svc__spread{grid-template-columns:minmax(0,1fr);gap:24px}
  .v2-svc__list{grid-template-columns:minmax(0,1fr)}
  .v2-about__grid{grid-template-columns:minmax(0,1fr);gap:24px}
}

/* ---------- Phones (<=620px) = the approved mobile board ---------- */
@media (max-width:620px){
  .v2-hero{min-height:100vh;min-height:100lvh}
  .v2-hero__media img{object-position:24% center}
}
@media (max-width:620px) and (orientation:portrait){
  .v2-hero__media img{object-position:50% center} /* the phone crop is centred on what 24% showed on the full photo */
}
@media (max-width:620px){
  .v2-hero__shade{background:linear-gradient(180deg,rgba(26,26,26,0.4) 0%,rgba(26,26,26,0) 16%,rgba(26,26,26,0) 45%,rgba(26,26,26,0.32) 68%,rgba(26,26,26,0.62) 100%)}
  .v2-hero__body{padding:0 var(--v2-edge) 48px;padding-bottom:calc(48px + max(0px,100lvh - 100dvh) + env(safe-area-inset-bottom,0px))}
  /* iOS 26 Safari: the photo continues 140px under the floating toolbar (otherwise the next section shows
   * there); the text and button keep their place on screen. */
  .v2-ios-safari .v2-hero{min-height:calc(100lvh + 140px)}
  .v2-ios-safari .v2-hero__body{padding-bottom:calc(48px + 140px + max(0px,100lvh - 100dvh) + env(safe-area-inset-bottom,0px))}
  .v2-hero__h1{margin:0 0 22px;text-shadow:0 2px 20px rgba(26,26,26,0.45),0 1px 3px rgba(26,26,26,0.3)}
  .v2-hero__br{display:inline}
  .v2-hero__cta{gap:12px;padding:12px 24px;background:rgba(40,34,30,0.30);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border-color:rgba(250,248,245,0.45)}

  .v2-intro{padding:40px var(--v2-edge) 0;gap:16px}
  .v2-intro__rule{width:40px}
  .v2-intro p{max-width:330px}

  .v2-svc{padding-block:32px}
  .v2-svc__head{margin:0}
  .v2-svc__head .v2-kick{gap:18px;margin-bottom:12px}
  .v2-svc__h2{margin:0 0 15px;max-width:none;width:auto;height:auto;min-height:0}
  .v2-svc__intro{max-width:440px;margin:0 0 25px;top:0}
  .v2-svc__feat{top:0}
  .v2-svc__fig figure{aspect-ratio:1.12 / 1}
  .v2-svc__more{margin-top:38px}
  .v2-svc__list{border-top:1px solid var(--v2-divider)}
  .v2-svc__list li{grid-template-columns:32px minmax(0,1fr);gap:12px;min-height:0;padding:14px 0;border-top:0;border-bottom:1px solid var(--v2-divider)}
  .v2-svc__all{margin-top:23px}

  .v2-gal{padding:0 0 32px}
  .v2-gal__in{padding-inline:24px}
  .v2-gal__head{margin:0 0 20px}
  .v2-gal__head .v2-kick{gap:18px;margin-bottom:7px}
  .v2-gal__head h2{margin:0 0 8px}
  .v2-cf{height:calc(var(--gh) + 20px)}
  .v2-cf__item[data-d="1"]{--off:calc(var(--gw) * .6522);--sc:.78}
  .v2-cf__item[data-d="-1"]{--off:calc(var(--gw) * -.6522);--sc:.78}
  .v2-cf__item[data-d="2"]{--off:calc(var(--gw) * 1.087);--sc:.6;opacity:0}
  .v2-cf__item[data-d="-2"]{--off:calc(var(--gw) * -1.087);--sc:.6;opacity:0}
  .v2-cf__item[data-d="3"]{--off:calc(var(--gw) * 1.4348);--sc:.5}
  .v2-cf__item[data-d="-3"]{--off:calc(var(--gw) * -1.4348);--sc:.5}
  .v2-cf__item[data-d="4"]{--off:calc(var(--gw) * 1.7391);--sc:.45}
  .v2-cf__item[data-d="-4"]{--off:calc(var(--gw) * -1.7391);--sc:.45}
  .v2-gal__ctrl{display:flex;flex-direction:column;align-items:center;gap:14px;margin:16px 0 0}
  .v2-gal__all{justify-self:auto}

  .v2-about{padding:51px var(--v2-edge) 44px}
  .v2-about__text{justify-content:center;max-width:none;height:auto;min-height:0;padding-top:0}
  .v2-about__text .v2-kick{gap:18px;margin-bottom:11px}
  .v2-about__h2{margin:0 0 14px;max-width:440px;width:min(346px,100%)}
  .v2-about__text p:last-child{margin:0}
  .v2-about__fig{height:auto;aspect-ratio:346 / 324}
  .v2-about__fig img{object-position:center bottom}

  .v2-rev{padding:44px var(--v2-edge) 26px}
  .v2-rev__in > .v2-kick{gap:18px;margin-bottom:20px}
  .v2-rev__top{flex-direction:column;align-items:flex-start;gap:16px}
  .v2-rev__head{gap:16px}
  .v2-rev__rating{gap:14px;margin:4px 0 0}
  .v2-rev__head h2{max-width:440px}
  .v2-rev__head p{max-width:none}
  .v2-rev__card,.v2-rev__card:first-child,.v2-rev__card:last-child{flex-basis:82%}
}

/* Canvas narrow-phone rule for the ghost pill (<=400px): tighter tracking and padding, label stays 16px */
@media (max-width:400px){.v2-hero__cta{gap:8px;padding-inline:16px;letter-spacing:0.04em}}
/* <360px: drop the leading chat icon so the 16px label stays on one line (the arrow stays) */
@media (max-width:359.98px){.v2-hero__cta > svg:first-child{display:none}}
@media (prefers-reduced-motion:reduce){
  .v2-rise{animation:none}
  .v2-cf__item,.v2-hero__cta,.v2-hero__arr{transition:none}
}

/* ---------- Monthly offer (scripts/v2/promo.mjs), above Services while a promotion runs ---------- */
.v2-offer{max-width:var(--v2-wrap-max);margin:0 auto;padding:64px var(--v2-edge) 0}
.v2-offer[hidden]{display:none}
.v2-offer__card{display:grid;grid-template-columns:minmax(0,1.05fr) minmax(0,1fr);background:var(--v2-warm);border:1px solid var(--v2-divider);overflow:hidden}
.v2-offer__fig{margin:0;min-height:440px}
.v2-offer__fig img{display:block;width:100%;height:100%;object-fit:cover}
.v2-offer__body{display:flex;flex-direction:column;justify-content:center;padding:clamp(28px,4vw,64px)}
.v2-offer__kick{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px;margin:0;font-family:var(--ff-body);font-size:13px;font-weight:600;letter-spacing:0.14em;text-transform:uppercase;color:var(--v2-bronze-soft)}
.v2-offer__tag{padding:6px 11px;border-radius:var(--v2-radius-pill);background:var(--v2-ink);color:var(--v2-ivory);letter-spacing:0.08em}
.v2-offer__h2{margin:18px 0 16px;font-family:var(--ff-display);font-weight:400;font-size:clamp(32px,3.6vw,50px);line-height:1.12;color:var(--v2-ink)}
.v2-offer__h2 em{font-style:normal;color:var(--v2-logo-gold)}
.v2-offer__list{margin:0 0 22px;padding:0;list-style:none;font-size:16px;line-height:1.75;color:var(--v2-text-secondary)}
.v2-offer__list li{position:relative;padding-left:24px}
.v2-offer__list li::before{content:"";position:absolute;left:2px;top:0.62em;width:9px;height:5px;border-left:1.5px solid var(--v2-champagne);border-bottom:1.5px solid var(--v2-champagne);transform:rotate(-45deg)}
.v2-offer__price{margin:0 0 6px}
.v2-offer__now b{font-family:var(--ff-display);font-size:40px;font-weight:500;line-height:1;color:var(--v2-ink)}
.v2-offer__now s{margin-left:10px;font-size:16px;color:var(--v2-text-secondary)}
.v2-offer__terms{margin:0 0 24px;font-size:14px;line-height:1.5;color:var(--v2-text-secondary)}
.v2-offer__acts{display:flex;flex-wrap:wrap;align-items:center;gap:14px 24px}
.v2-offer__btn{display:inline-flex;align-items:center;justify-content:center;min-height:var(--v2-btn-h);padding:12px 28px;border-radius:var(--v2-radius-pill);
  background:var(--v2-champagne);color:var(--v2-ink);font-size:15px;font-weight:600;text-decoration:none;text-align:center}
.v2-offer__btn:hover,.v2-offer__btn:focus-visible{background:var(--v2-champagne-bright)}
.v2-offer__more{color:var(--v2-ink);font-size:15px;text-decoration:underline;text-underline-offset:4px}
.v2-offer__fine{margin:18px 0 0;font-size:13px;color:var(--v2-text-secondary)}
@media (max-width:820px){
  .v2-offer__card{grid-template-columns:minmax(0,1fr)}
  .v2-offer__fig{min-height:0;aspect-ratio:3/2}
}
@media (max-width:620px){
  .v2-offer{padding-top:40px}
  .v2-offer__body{padding:28px 22px 32px}
  .v2-offer__acts{flex-direction:column;align-items:stretch}
  .v2-offer__more{align-self:center}
}
