/* Cocoon Lux preview: the shared stylesheet, loaded first on every page (then nav.css, then the page's own
   files from its manifest, wp/src/pages/<key>.json). Mobile first.
   Holds what every page shares: the self-hosted fonts and their metric fallbacks, the design tokens, base
   elements, the silk texture, type, links, pill buttons, image frames, the header bar (its condensed state),
   the footer, the phone Book and Call bar, the reveal, reduced motion and print.
   Up to 767px: the phone artboards (390); from 600px the phone layout sits in a centred 560px column.
   1024px and up: the desktop artboards (designed at 1440, fluid). 768 to 1023: the tablet layout between them.
   Phones held sideways (768 or wider, 500 or less tall) keep the phone header.
   Theme: the injectables "hub" (design/DESIGN.md section 0).
   Split out of the 0.4.0 lux-home.css (6 Oct 2026) without changing the order of any rule: base.css, nav.css
   and pages/home.css, loaded in that order, are that one file. Page agents do not edit this file
   (wp/ARCHITECTURE.md): a rule here changes every page. */

/* Fonts: self-hosted latin woff2 (no other host is ever asked), plus metric-matched local fallbacks.
   Jost Fallback was measured against Arial in headless Chrome: Jost is 0.9605 of Arial's width for
   mixed-case 400 text and 0.960 for the uppercase 500 labels and buttons; ascent 1.070em, descent 0.375em,
   no line gap. The overrides are those metrics divided by size-adjust, so lines keep their height. */
@font-face{font-family:"Playfair Display";font-style:normal;font-weight:400;font-display:swap;src:url(../fonts/playfair-display-400.woff2) format("woff2")}
@font-face{font-family:"Playfair Display";font-style:italic;font-weight:400;font-display:swap;src:url(../fonts/playfair-display-400-italic.woff2) format("woff2")}
@font-face{font-family:"Jost";font-style:normal;font-weight:400 500;font-display:swap;src:url(../fonts/jost-latin-400-500.woff2) format("woff2")}
@font-face{font-family:"Playfair Fallback";font-style:normal;src:local("Georgia");size-adjust:101.8%;ascent-override:106.3%;descent-override:24.7%;line-gap-override:0%}
@font-face{font-family:"Playfair Fallback";font-style:italic;src:local("Georgia Italic"),local("Georgia-Italic");size-adjust:94.3%;ascent-override:114.7%;descent-override:26.6%;line-gap-override:0%}
@font-face{font-family:"Jost Fallback";font-style:normal;font-weight:400;src:local("Arial"),local("ArialMT");size-adjust:96.05%;ascent-override:111.4%;descent-override:39.04%;line-gap-override:0%}
@font-face{font-family:"Jost Fallback";font-style:normal;font-weight:500;src:local("Arial"),local("ArialMT");size-adjust:96%;ascent-override:111.46%;descent-override:39.06%;line-gap-override:0%}
/* Android has no Arial: there the fallback is Roboto, tuned the same way (measured in headless Chrome
   with Roboto 400 and 500 at 100px: Jost is 0.966 of Roboto's width for mixed-case 400 text and 1.034
   of Roboto Medium's for the uppercase 500 labels and buttons; same Jost ascent and descent). */
@font-face{font-family:"Jost Fallback Android";font-style:normal;font-weight:400;src:local("Roboto"),local("Roboto-Regular");size-adjust:96.6%;ascent-override:110.77%;descent-override:38.82%;line-gap-override:0%}
@font-face{font-family:"Jost Fallback Android";font-style:normal;font-weight:500;src:local("Roboto Medium"),local("Roboto-Medium");size-adjust:103.41%;ascent-override:103.47%;descent-override:36.26%;line-gap-override:0%}

:root{
  --ivory:#FBF8F2;--cream:#F3ECDF;--line:#D9CAB0;--line-soft:#E8DCC6;--img:#EFE6D6;
  --espresso:#2A211B;--night:#1F1813;--bark:#4A3F36;--umber:#5A4D42;
  --gold:#A48646;--gold-text:#7F6735;--gold-deep:#5E4A22;--gold-bright:#CE982C;--gold-light:#E9C77F;--gold-pale:#F3DDAE;
  --on-dark:#FBF8F2;--on-dark-muted:#E6DACB;--lead-dark:#F4EEE4;--foot-text:#CDBFAE;--foot-line:#3A2F27;--dark-line:rgba(251,248,242,.16);
  --serif:"Playfair Display","Playfair Fallback",Georgia,"Times New Roman",serif;
  --sans:"Jost","Jost Fallback","Jost Fallback Android",Arial,Helvetica,sans-serif;
  --ease:cubic-bezier(.22,1,.36,1);
  --max:1240px;
  --gutter:max(16px,env(safe-area-inset-left,0px),env(safe-area-inset-right,0px));
  --sec:56px;
  /* header: full height over the hero, condensed height, and the transforms between them */
  --h:72px;--hc:60px;--h-scale:.8334;--h-shift:-6px;--logo-w:60px;--logo-scale:.8;
  --bar-h:78px;
  /* how far an image may run past the text column, up to the 1680 image container */
  --bleed:calc((min(100vw,1680px) - min(100vw - 2*var(--gutter),var(--max)))/2);
}
@media (min-width:768px){:root{--gutter:max(40px,env(safe-area-inset-left,0px),env(safe-area-inset-right,0px));--sec:88px;--h:112px;--hc:80px;--h-scale:.7143;--h-shift:-16px;--logo-w:84px;--logo-scale:.7143}}
@media (min-width:1024px){:root{--gutter:max(56px,env(safe-area-inset-left,0px),env(safe-area-inset-right,0px));--sec:120px}}

/* Base */
*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;text-size-adjust:100%;scroll-padding-top:calc(var(--hc) + 16px);scroll-padding-bottom:calc(var(--bar-h) + env(safe-area-inset-bottom,0px) + 16px)}
html.lux-menu-open{overflow:hidden}
body{margin:0;background:var(--ivory);color:var(--bark);font-family:var(--sans);font-weight:400;font-size:17px;line-height:1.7;font-variant-numeric:lining-nums}
main{display:block;overflow-x:hidden;overflow-x:clip}
img,video{display:block;max-width:100%}
h1,h2,h3,p,ul,figure{margin:0}
ul{padding:0;list-style:none}
em{font-style:italic}
a{color:var(--gold-text);text-decoration:none;transition:color .3s}
a:hover{color:var(--gold-deep)}
:focus-visible{outline:2px solid var(--espresso);outline-offset:3px}
.lux-dark :focus-visible,.lux-hero :focus-visible,.lux-header:not(.is-condensed) :focus-visible,.lux-menu-open .lux-header :focus-visible{outline-color:var(--gold-light)}
.lux-dark{background:var(--espresso);color:var(--on-dark)}
.lux-wrap{max-width:calc(var(--max) + 2*var(--gutter));margin-inline:auto;padding-inline:var(--gutter)}
.lux-sprite{position:absolute;width:0;height:0;overflow:hidden}
.lux-nowrap{white-space:nowrap}
.lux-skip{position:absolute;left:12px;top:12px;z-index:100;padding:12px 18px;background:var(--ivory);color:var(--espresso);font-weight:500;transform:translateY(-200%)}
.lux-skip:focus{transform:none}

/* Silk: a sheet of ivory silk behind the page, as on both artboards: one 720x4320 file (AVIF, WebP
   fallback; assets-src/silk, copied by wp/export-assets.py) drawn 1440px wide from the top of the page,
   centred and repeated. The dark bands, the cream band and the footer paint over it, so it shows on the
   ivory sections only. Decoration only: its darkest tone, #F8F2E7, keeps every text colour inside the
   rules (gold #A48646 large type 3.1:1, #7F6735 4.8:1, umber 7.3:1, bark 9.2:1). The file is fetched only
   after the page has loaded, once the first ivory section is within a screen of view (assets/js/lux-home.js
   adds is-silk; without JavaScript a <noscript> style in the head sets it), and a background never moves
   the layout. */
.lux-silk{background-position:50% 0;background-size:1440px auto;background-repeat:repeat}
.lux-silk.is-silk{background-image:url(../img/silk-satin-720x4320.webp);background-image:image-set(url(../img/silk-satin-720x4320.avif) type("image/avif"),url(../img/silk-satin-720x4320.webp) type("image/webp"))}

/* Type (editorial standard, design/editorial/SPEC.md 1.5: nothing under 16px; the pills, labels, links and footer were 15px) */
.lux-h2{font-family:var(--serif);font-weight:400;font-size:32px;line-height:1.14;color:var(--espresso);text-wrap:balance}
.lux-h3{font-family:var(--serif);font-weight:400;font-size:24px;line-height:1.25;color:var(--espresso)}
.lux-label{font-size:16px;font-weight:500;line-height:1.5;letter-spacing:.14em;text-transform:uppercase}
.lux-label--gold{color:var(--gold-light)}
figcaption{margin-top:12px;font-size:16px;line-height:1.5;color:var(--umber)}
.lux-rule{width:56px;height:2px;margin:32px 0 22px;background:var(--gold)}

/* Standalone links: gold capitals with a gold underline, 44px tall */
.lux-link{display:inline-flex;align-items:center;min-height:44px;font-size:16px;font-weight:500;line-height:1.4;letter-spacing:.14em;text-transform:uppercase;color:var(--gold-text);text-decoration:underline;text-decoration-color:var(--gold);text-decoration-thickness:1px;text-underline-offset:8px;transition:color .3s,text-decoration-color .3s}
.lux-link:hover{color:var(--espresso);text-decoration-color:var(--espresso)}
.lux-dark .lux-link{color:var(--gold-light);text-decoration-color:rgba(233,199,127,.55)}
.lux-dark .lux-link:hover{color:var(--ivory)}
.lux-title{color:var(--espresso);transition:color .3s}
/* phones: the title links get a 44px tap height without moving the text */
@media (max-width:1023.98px){.lux-title{display:inline-block;margin:-7px 0;padding:7px 0}}
.lux-title:hover{color:var(--gold-text)}

/* Pill buttons: full width on phones */
.lux-pill{display:flex;width:100%;align-items:center;justify-content:center;gap:10px;min-height:54px;padding:0 16px;border:1px solid transparent;border-radius:999px;font-family:var(--sans);font-size:16px;font-weight:500;line-height:1;letter-spacing:.14em;text-transform:uppercase;text-decoration:none;white-space:nowrap;transition:background-color .3s,color .3s,border-color .3s}
.lux-pill--gold{background:var(--gold);color:var(--espresso)}
.lux-pill--gold:hover{background:var(--espresso);color:var(--ivory)}
.lux-pill--bright{background:var(--gold-bright);color:var(--espresso)}
.lux-pill--bright:hover{background:var(--ivory);color:var(--espresso)}
.lux-pill--line{border-color:var(--espresso);color:var(--espresso)}
.lux-pill--line:hover{border-color:var(--gold-text);color:var(--gold-text)}
.lux-pill--outline{border-color:var(--gold);color:var(--espresso)}
.lux-pill--outline:hover{border-color:var(--gold-text);color:var(--gold-text)}
.lux-pill--line-light{border-color:rgba(251,248,242,.65);color:var(--ivory)}
.lux-hero .lux-pill--line-light{border-color:rgba(251,248,242,.75)}
.lux-pill--line-light:hover{border-color:var(--gold-pale);color:var(--gold-pale)}
.lux-wa{flex:none;fill:currentColor}
.lux-actions{display:flex;flex-direction:column;gap:12px}

/* Images: one slow scale on hover, the arch at most once per screen */
.lux-frame{position:relative;overflow:hidden;isolation:isolate;border-radius:4px;background:var(--img)}
.lux-frame img{width:100%;height:100%;object-fit:cover;transition:transform 1.2s var(--ease)}
@media (hover:hover){.lux-zoom:hover .lux-frame img{transform:scale(1.03)}}
.lux-arch{border-radius:999px 999px 4px 4px}

/* Header: one element, fixed, transparent over the hero; it condenses by transform only */
.lux-header{position:absolute;top:0;left:0;right:0;z-index:50;height:var(--h);color:var(--ivory);pointer-events:none}
.js .lux-header{position:fixed}
.lux-header::before,.lux-header::after{content:"";position:absolute;left:0;right:0;opacity:0;transition:opacity .3s,transform .3s var(--ease)}
.lux-header::before{top:0;bottom:0;background:rgba(251,248,242,.97);transform-origin:top}
/* 0.9.0, client audit 7.1: the condensed bar is frosted, so the page reads softly through it as it scrolls */
@supports ((-webkit-backdrop-filter:blur(1px)) or (backdrop-filter:blur(1px))){
  .lux-header::before{background:rgba(251,248,242,.8);-webkit-backdrop-filter:blur(18px) saturate(1.15);backdrop-filter:blur(18px) saturate(1.15)}
  .lux-menu-open .lux-header::before,.lux-mega-open .lux-header::before{background:rgba(251,248,242,.97)}
}
.lux-header::after{top:100%;height:1px;background:var(--line-soft)}
.lux-header__bar{position:relative;z-index:1;display:flex;align-items:center;justify-content:space-between;gap:24px;height:100%;padding:0 8px 0 var(--gutter);transition:transform .3s var(--ease)}
.lux-header__bar>*,.lux-nav{pointer-events:auto}
.lux-header__logo{position:relative;flex:none;display:block;transform-origin:left center;transition:transform .3s var(--ease)}
/* the one vector logo (wp/build.py LOGO) on every ground: hero, ivory condensed header, open menu, footer */
.lux-logo{display:block;width:var(--logo-w);height:auto}
.lux-header__right{display:flex;align-items:center;gap:24px}
.lux-header__consult{display:none}
.lux-header.is-condensed{color:var(--espresso)}
.lux-header.is-condensed::before{opacity:1;transform:scaleY(var(--h-scale))}
.lux-header.is-condensed::after{opacity:1;transform:translateY(calc(var(--hc) - var(--h)))}
.lux-header.is-condensed .lux-header__bar{transform:translateY(var(--h-shift))}
.lux-header.is-condensed .lux-header__logo{transform:scale(var(--logo-scale))}
/* Footer */
.lux-footer{padding:56px 0 calc(48px + var(--bar-h) + env(safe-area-inset-bottom,0px));background:var(--night);color:var(--foot-text);font-size:16px;line-height:1.6}
.lux-footer__nav a,.lux-footer__legal a{color:var(--foot-text)}
.lux-footer__nav a:hover,.lux-footer__legal a:hover{color:var(--ivory)}
.lux-footer .lux-wrap{display:flex;flex-direction:column}
.lux-footer__top,.lux-footer__mid{display:contents}
.lux-footer__brand .lux-logo{width:76px;margin-block:9px}
.lux-footer .lux-actions{order:1;margin-top:32px}
.lux-footer__clinic{order:2;padding:10px 0 20px;border-top:1px solid var(--foot-line);font-size:16px}
.lux-footer__brand+.lux-footer__clinic{margin-top:40px}
.lux-footer__clinic:last-child{border-bottom:1px solid var(--foot-line)}
.lux-footer__clinic p{margin-top:6px}
.lux-footer__clinic p:nth-child(2){margin-top:4px}
.lux-footer__clinic .lux-footer__name{margin:0;font-size:16px;font-weight:500;line-height:1.5;letter-spacing:.14em;text-transform:uppercase}
.lux-footer .lux-footer__name a{display:inline-flex;align-items:center;min-height:44px;color:var(--gold-light)}
.lux-footer .lux-footer__name a:hover{color:var(--ivory)}
.lux-footer__nav{order:3;margin-top:32px;line-height:1.5}
.lux-footer__nav ul{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));column-gap:20px}
.lux-footer__nav li{display:flex}
.lux-footer__nav a,.lux-footer__legal a{display:flex;align-items:center;min-height:44px}
.lux-footer__base{order:4;display:flex;flex-direction:column-reverse;margin-top:36px;padding-top:22px;border-top:1px solid var(--foot-line)}
.lux-footer__legal{display:flex;flex-wrap:wrap;column-gap:24px}
.lux-footer__copy{margin-top:16px;font-size:16px}

/* Phone bottom bar: Book and Call, in once the hero button has scrolled away */
.lux-bar{position:fixed;left:0;right:0;bottom:0;z-index:40;display:flex;gap:8px;padding:12px var(--gutter) calc(12px + env(safe-area-inset-bottom,0px));background:var(--ivory);border-top:1px solid var(--line-soft);visibility:hidden;transform:translateY(100%);transition:transform .3s var(--ease),visibility 0s .3s}
.lux-bar.is-on{visibility:visible;transform:none;transition-delay:0s}
.lux-menu-open .lux-bar{visibility:hidden}
.lux-bar .lux-bar__wa{flex:1 1 auto;width:auto;min-width:0;padding:0 8px}
.lux-bar .lux-bar__call{flex:none;width:88px;padding:0}

/* Reveal: fade and 16px rise, once. Only when JavaScript has marked the element */
.lux-reveal{opacity:0;transform:translateY(16px);transition:opacity .7s var(--ease),transform .7s var(--ease)}
.lux-reveal.is-in{opacity:1;transform:none}

/* phones: running text wraps "pretty", as on the phone artboard; "medical spa" kept on one line in the
   Cocoon Across Bali heading, as on the phone artboard only */
@media (max-width:767.98px){p{text-wrap:pretty}.lux-nowrap-sm{white-space:nowrap}}

/* narrow phones: the bar keeps both buttons on one line with room inside the pill */
@media (max-width:374.98px){
  .lux-bar .lux-pill{letter-spacing:.1em}
  .lux-bar .lux-bar__call{width:76px}
}

@media (max-width:359.98px){
  .lux-bar{padding-inline:12px}
  .lux-bar .lux-pill{letter-spacing:.06em}
  .lux-bar .lux-bar__wa{gap:8px}
  .lux-bar .lux-bar__call{width:68px}
}

/* 600 to 767 (large phones sideways, foldables, iPad mini portrait): the phone layout in a centred
   560px column, so pills, arches and lines keep the phone proportions. Header, menu and the Book
   and Call bar line up with that column. */
@media (min-width:600px) and (max-width:767.98px){
  .lux-wrap{max-width:calc(560px + 2*var(--gutter))}
  .lux-header__bar{padding:0 calc((100% - 560px)/2 - 8px) 0 calc((100% - 560px)/2)}
  .lux-bar{padding-inline:calc((100% - 560px)/2)}
}

/* ---------- 768 and up: tablet ---------- */
@media (min-width:768px){
  html{scroll-padding-bottom:0}
  body{font-size:18px}
  .lux-br-sm{display:none}
  .lux-h2{font-size:clamp(36px,4.3vw,44px);line-height:1.12}
  .lux-h3{font-size:26px}
  figcaption{margin-top:14px;font-size:16px}
  .lux-rule{width:64px;margin:44px 0 28px}
  .lux-pill{display:inline-flex;width:auto;min-height:56px;padding:0 32px}
  .lux-pill--wa{padding:0 34px}
  .lux-actions{flex-direction:row;flex-wrap:wrap;align-items:center;gap:16px}

  .lux-header__bar{gap:32px;padding:0 var(--gutter)}
  .lux-header__consult{display:inline-flex;min-height:52px;padding:0 28px;background:var(--ivory);color:var(--espresso)}
  .lux-header__consult:hover{background:var(--gold-pale);color:var(--espresso)}
  .lux-header.is-condensed .lux-header__consult{background:var(--gold);color:var(--espresso)}
  .lux-header.is-condensed .lux-header__consult:hover{background:var(--espresso);color:var(--ivory)}

  .lux-footer{padding:88px 0 44px}
  .lux-footer .lux-wrap{display:block}
  .lux-footer__top{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));column-gap:32px;row-gap:40px;align-items:start}
  .lux-footer__brand{grid-column:1/-1}
  .lux-footer__brand .lux-logo{width:96px;margin-block:12px 0}
  .lux-footer__clinic,.lux-footer__clinic:last-child,.lux-footer__brand+.lux-footer__clinic{margin:0;padding:0;border:0;font-size:16px}
  /* names, addresses and hours share one row line across the three clinics, even when one name wraps */
  .lux-footer__clinic{display:grid;grid-row:span 3;grid-template-rows:subgrid;row-gap:0;align-content:start}
  .lux-footer .lux-footer__name a{display:inline;min-height:0}
  .lux-footer__clinic p:nth-child(2){margin-top:16px}
  .lux-footer__clinic p:nth-child(3){margin-top:10px}
  .lux-footer__mid{display:grid;grid-template-columns:minmax(0,1fr);row-gap:32px;margin-top:56px;padding-top:40px;border-top:1px solid var(--foot-line)}
  .lux-footer .lux-actions{margin:0}
  .lux-footer__nav{margin:0}
  .lux-footer__nav ul{display:flex;flex-wrap:wrap;gap:10px 24px}
  .lux-footer__nav a,.lux-footer__legal a{display:inline;min-height:0}
  .lux-footer__base{flex-direction:row;flex-wrap:wrap;justify-content:space-between;gap:12px 32px;margin-top:56px;padding-top:28px}
  .lux-footer__legal{gap:8px 28px}
  .lux-footer__copy{margin:0;font-size:16px}
  /* 0.9.0, client audit 7.2: from 768 the bar becomes one quiet WhatsApp concierge button, bottom right, in after the
     hero and stepping aside for the other WhatsApp buttons (base.js, unchanged); the call link is in the footer */
  .lux-bar{left:auto;right:max(24px,env(safe-area-inset-right,0px));bottom:max(24px,env(safe-area-inset-bottom,0px));padding:0;background:none;border:0;opacity:0;transform:translateY(12px);transition:opacity .4s var(--ease),transform .4s var(--ease),visibility 0s .4s}
  .lux-bar.is-on{opacity:1;transform:none}
  .lux-bar .lux-bar__call{display:none}
  .lux-bar .lux-bar__wa{flex:none;width:auto;min-height:52px;padding:0 24px 0 20px;gap:10px;background:var(--ivory);border:0;color:var(--espresso);box-shadow:0 6px 16px -6px rgba(42,33,27,.32)}
  .lux-bar .lux-bar__wa:hover{background:var(--espresso);border-color:var(--espresso);color:var(--ivory)}
}

/* ---------- phones held sideways (768 or wider, 500 or less tall): the phone header height and a
   hero that fits one screen, so the WhatsApp and call buttons are on the first screen ---------- */
@media (min-width:768px) and (max-height:500px){
  :root{--h:72px;--hc:60px;--h-scale:.8334;--h-shift:-6px;--logo-w:60px;--logo-scale:.8}
}

/* ---------- 1024 and up: the desktop artboard ---------- */
@media (min-width:1024px){
  .lux-h2{font-size:clamp(36px,3.056vw,44px)}

  .lux-header__bar{gap:32px}
  .lux-footer{padding-top:96px}
  .lux-footer__top{grid-template-columns:minmax(0,2fr) repeat(3,minmax(0,3fr));column-gap:40px}
  .lux-footer__brand{grid-column:auto;grid-row:span 3}
  .lux-footer__mid{margin-top:64px}
}

@media (min-width:1024px) and (hover:hover){
  .lux-link:hover{text-decoration-color:currentColor}
}

/* ---------- 1280 and up ---------- */
@media (min-width:1280px){
  .lux-footer__mid{grid-template-columns:auto minmax(0,1fr);column-gap:48px;align-items:center}
}

@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{transition:none !important;animation:none !important;scroll-behavior:auto !important}
  .lux-reveal{opacity:1;transform:none}
  .lux-zoom:hover .lux-frame img{transform:none}
}

@media print{.lux-header,.lux-bar{display:none}.lux-reveal{opacity:1;transform:none}.lux-silk{background-image:none !important}}
