*,*:before,*:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{margin:0;background:var(--bg, #000);color:var(--fg, #fff);font-family:var(--font-text, Inter, system-ui, sans-serif);line-height:1.5;-webkit-font-smoothing:antialiased;overflow-x:hidden}img,video,canvas,svg{display:block;max-width:100%}a{color:inherit;text-decoration:none}button{font:inherit;color:inherit;cursor:pointer;border:0;background:none}em{font-style:italic}h1,h2,h3,p{margin:0}.container{width:min(1200px,100% - 32px);margin-inline:auto}.hero{position:relative;min-height:100svh;overflow:clip;isolation:isolate}.hero canvas.stage,.hero video.bg{position:absolute;inset:0;width:100%;height:100%;z-index:-1;object-fit:cover}.chip{display:inline-flex;align-items:center;gap:.5em;padding:.45em .9em;border-radius:999px;border:1px solid color-mix(in srgb,currentColor 22%,transparent);font-size:.78rem;letter-spacing:.04em;backdrop-filter:blur(10px)}.pill{display:inline-flex;align-items:center;gap:.6em;padding:.85em 1.5em;border-radius:999px;font-weight:500;font-size:.95rem;transition:transform .25s cubic-bezier(.2,.8,.2,1),box-shadow .25s,background .25s;will-change:transform}.pill:hover{transform:translateY(-2px)}.pill.solid{background:var(--pill-bg, #fff);color:var(--pill-fg, #000)}.pill.ghost{border:1px solid color-mix(in srgb,currentColor 35%,transparent);backdrop-filter:blur(10px)}.pill .arrow{display:inline-grid;place-items:center;width:1.6em;height:1.6em;border-radius:50%;background:color-mix(in srgb,currentColor 14%,transparent);font-size:.9em}:focus-visible{outline:2px solid var(--accent, #fff);outline-offset:3px}@media (prefers-reduced-motion: reduce){*,*:before,*:after{animation-duration:.001ms!important;transition-duration:.001ms!important;scroll-behavior:auto!important}}@media (max-width: 720px){.pill{padding:.8em 1.25em}}:root{--oat: #faf8f4;--forest: #1c1b19;--sage: #d9cba8;--clay: #b8954e;--honey: #d9cba8;--clay-ink: #6b5430;--sage-ink: #4a4743;--oat-deep: #f2efe9;--bg: var(--oat);--fg: var(--forest);--accent: var(--forest);--font-display: "Playfair Display", Georgia, serif;--font-text: "Lora", Georgia, serif;--font-ui: "Montserrat", system-ui, -apple-system, sans-serif;--r-lg: 32px;--r-md: 22px;--r-sm: 14px;--hdr: 80px;--wrap: min(1200px, 100% - 48px);--ease: cubic-bezier(.22,.7,.2,1);--shadow: 0 1px 2px rgba(28,27,25,.06), 0 18px 40px -18px rgba(28,27,25,.28)}html{font-size:100%;scroll-padding-top:calc(var(--hdr) + 12px)}body{font-size:1.125rem;line-height:1.65;font-family:var(--font-text);background:var(--oat);color:var(--forest);text-rendering:optimizeLegibility}.container{width:var(--wrap);margin-inline:auto}h1,h2,h3,h4{font-family:var(--font-display);font-weight:400;color:var(--forest);letter-spacing:-.012em}figure{margin:0}h1{font-size:clamp(2.5rem,4.4vw,4.1rem);line-height:1.06}h2{font-size:clamp(2.05rem,3.9vw,3.3rem);line-height:1.08}h3{font-size:1.55rem;line-height:1.2}h1 em,h2 em{font-style:italic;color:var(--clay-ink);position:relative}p{max-width:62ch}.lede{font-size:clamp(1.2rem,1.7vw,1.35rem);line-height:1.55;max-width:31rem;color:#26241f}a{text-underline-offset:.22em}.skip{position:absolute;left:12px;top:-80px;z-index:200;background:var(--forest);color:var(--oat);padding:12px 18px;border-radius:10px;font-weight:600}.skip:focus{top:12px}:focus-visible{outline:3px solid var(--forest);outline-offset:3px;border-radius:6px}.on-dark :focus-visible,.site-footer :focus-visible,.plan :focus-visible{outline-color:var(--honey)}.vh{position:absolute!important;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}.eyebrow{display:inline-flex;align-items:center;gap:.7em;font-size:.875rem;font-weight:700;letter-spacing:.13em;text-transform:uppercase;color:var(--clay-ink)}.eyebrow:before{content:"";width:28px;height:2px;background:currentColor;border-radius:2px}.chip{display:inline-flex;align-items:center;gap:.6em;padding:.5em 1.05em;border-radius:999px;border:1.5px solid rgba(28,27,25,.22);background:#faf8f4bf;font-size:.9375rem;font-weight:600;color:var(--forest);backdrop-filter:blur(6px);margin-bottom:22px}.chip:before{content:"";width:9px;height:9px;border-radius:50%;background:var(--sage);box-shadow:0 0 0 4px #d9cba847}.btn{display:inline-flex;align-items:center;justify-content:center;gap:.75em;min-height:58px;padding:0 30px;border-radius:999px;font-weight:700;font-size:1.125rem;line-height:1.2;cursor:pointer;border:2px solid transparent;transition:transform .5s var(--ease),background .4s,color .4s,box-shadow .5s var(--ease)}.btn:hover{transform:translateY(-2px);box-shadow:0 14px 28px -14px #1c1b198c}.btn-primary{background:var(--forest);color:var(--oat)}.btn-primary:hover{background:#141312}.btn-honey{background:var(--honey);color:var(--forest)}.btn-honey:hover{background:#e2cfa4}.btn-ghost{border-color:var(--forest);color:var(--forest);background:transparent}.btn-ghost:hover{background:var(--forest);color:var(--oat)}.btn-sm{min-height:48px;padding:0 22px;font-size:1rem}.btn-arrow{display:inline-block;transition:transform .5s var(--ease)}.btn:hover .btn-arrow{transform:translate(5px)}.btn[disabled]{opacity:.6;cursor:progress;transform:none}.linen{background-color:#f2efe9;background-image:url(./linen.jpg);background-size:256px 256px}.section{padding-block:clamp(76px,10vw,140px);position:relative}.sec-head{max-width:46rem;margin-bottom:clamp(36px,5vw,64px)}.sec-head h2{margin-top:16px}.sec-head p{margin-top:18px;font-size:1.2rem;color:#26241f}.cw{display:inline-block}.ph{position:relative;overflow:hidden;border-radius:var(--r-md);background:var(--oat-deep);isolation:isolate}.ph-par{position:absolute;inset:0;will-change:transform}.ph img{width:100%;height:100%;object-fit:cover;filter:saturate(.9) contrast(1.03) sepia(.1) brightness(1.01);transition:transform 1.4s var(--ease)}.ph:before{content:"";position:absolute;inset:0;z-index:1;pointer-events:none;background:radial-gradient(120% 95% at 50% 45%,transparent 55%,rgba(28,27,25,.26) 100%),linear-gradient(180deg,#d9cba824,#d9cba81f);mix-blend-mode:multiply}.ph:after{content:"";position:absolute;inset:0;z-index:2;pointer-events:none;opacity:.16;mix-blend-mode:overlay;background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='180' height='180'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='2' stitchTiles='stitch'/><feColorMatrix values='0 0 0 0 .5  0 0 0 0 .5  0 0 0 0 .5  0 0 0 .9 0'/></filter><rect width='100%' height='100%' filter='url(%23n)'/></svg>");background-size:180px}.halo{position:fixed;left:0;top:0;width:38px;height:38px;margin:-19px 0 0 -19px;border-radius:50%;z-index:9999;pointer-events:none;background:#d9cba857;border:1.5px solid rgba(74,71,67,.45);opacity:0;transition:opacity .5s,width .5s var(--ease),height .5s var(--ease),margin .5s var(--ease),background .5s;will-change:transform}.halo.on{opacity:1}.halo.big{width:70px;height:70px;margin:-35px 0 0 -35px;background:#d9cba838}@media (hover: none),(pointer: coarse){.halo{display:none}}.site-header{position:sticky;top:0;z-index:90;background:#faf8f4ed;backdrop-filter:blur(14px);border-bottom:1px solid rgba(28,27,25,.1)}.hdr{display:flex;align-items:center;gap:28px;min-height:var(--hdr)}.logo{display:inline-flex;align-items:center;gap:12px;font-family:var(--font-display);font-size:1.75rem;letter-spacing:-.01em;margin-right:auto}.logo svg{width:38px;height:38px;flex:none}.lg-bg{fill:#1c1b19}.lg-fg{stroke:#faf8f4}.lg-heart{fill:#d9cba8}.site-footer .lg-bg{fill:#faf8f4}.site-footer .lg-fg{stroke:#1c1b19}.site-footer .lg-heart{fill:#b8954e}.nav ul{display:flex;gap:6px;list-style:none;margin:0;padding:0}.nav a{display:block;padding:10px 14px;border-radius:999px;font-weight:600;font-size:1.0625rem;transition:background .35s}.nav a:hover,.nav a[aria-current]{background:#d9cba84d}.hdr-phone{display:flex;flex-direction:column;line-height:1.15;padding-left:8px}.hdr-phone span{font-size:.8125rem;font-weight:600;color:var(--sage-ink)}.hdr-phone strong{font-family:var(--font-display);font-weight:400;font-size:1.5rem}.menu-btn{display:none;min-height:52px;padding:0 20px;border:2px solid var(--forest);border-radius:999px;font-weight:700;font-size:1.0625rem;align-items:center;gap:10px}.menu-btn i{width:20px;height:12px;display:inline-block;background:linear-gradient(var(--forest) 0 0) top/100% 2px no-repeat,linear-gradient(var(--forest) 0 0) bottom/100% 2px no-repeat,linear-gradient(var(--forest) 0 0) center/100% 2px no-repeat}.mobile-menu{padding:8px 24px 28px;border-top:1px solid rgba(28,27,25,.1)}.mobile-menu ul{list-style:none;margin:0;padding:0}.mobile-menu li a{display:block;padding:16px 4px;font-family:var(--font-display);font-size:1.7rem;border-bottom:1px solid rgba(28,27,25,.1)}.mobile-menu .mm-phone{display:block;margin-top:22px;font-family:var(--font-display);font-size:2.1rem}.mobile-menu .btn{width:100%;margin-top:16px}@media (max-width: 1100px){.hdr-phone span{display:none}.nav a{padding:10px}}@media (max-width: 980px){.nav,.hdr>.btn,.hdr-phone{display:none}.menu-btn{display:inline-flex}:root{--hdr: 72px}}.hero{position:relative;min-height:min(820px,calc(100svh - var(--hdr) - 72px));display:flex;align-items:center;padding-block:56px 72px;isolation:isolate;overflow:clip;background:radial-gradient(90% 80% at 10% 30%,#fdfbf8,var(--oat) 70%)}.hero-media{position:absolute;inset:0 0 0 35%;z-index:-1;background:url(../media/hero.poster.jpg?v=2) 66% 50% / cover no-repeat;-webkit-mask-image:linear-gradient(90deg,transparent 0,transparent 5%,rgba(0,0,0,.5) 20%,#000 38%);mask-image:linear-gradient(90deg,transparent 0,transparent 5%,rgba(0,0,0,.5) 20%,#000 38%)}.hero-media canvas.stage{position:absolute;inset:0;width:100%;height:100%;opacity:0;transition:opacity 1.6s ease}.hero-media canvas.is-live{opacity:1}.hero-media:after{content:"";position:absolute;inset:0;pointer-events:none;background:linear-gradient(180deg,#d9cba81a,#d9cba81a);mix-blend-mode:soft-light}.hero-copy{position:relative;z-index:2}.hero-copy>*{max-width:34rem}.hero-copy>h1{max-width:40rem}.hero-copy>.lede{max-width:28rem}.hero-copy h1{margin-bottom:26px}.hero-copy h1 em{display:inline-block}.uline{position:absolute;left:-2%;bottom:-.16em;width:104%;height:.34em;overflow:visible;pointer-events:none}.uline path{fill:none;stroke:var(--clay);stroke-width:7;stroke-linecap:round;stroke-dasharray:1;stroke-dashoffset:1}.hero-actions{display:flex;align-items:center;gap:22px 34px;flex-wrap:wrap;margin-top:34px;max-width:34rem}.phone-big{display:flex;flex-direction:column;line-height:1.1;padding:6px 0}.phone-label{font-size:1rem;font-weight:600;color:var(--sage-ink);margin-bottom:4px}.phone-num{font-family:var(--font-display);font-size:clamp(2.1rem,3.3vw,2.9rem);letter-spacing:-.01em;background:linear-gradient(var(--honey),var(--honey)) 0 96% / 100% 7px no-repeat;transition:background-size .5s var(--ease);width:fit-content}.phone-big:hover .phone-num{background-size:100% 100%}@media (max-width: 900px){.hero{display:flex;flex-direction:column;min-height:0;padding-block:36px 0;align-items:stretch}.hero-copy{order:1}.hero-media{order:2;position:relative;inset:auto;margin:36px 12px 0;height:min(100vw,500px);border-radius:var(--r-lg);overflow:hidden;-webkit-mask-image:none;mask-image:none;background-position:66% 50%}.hero-copy>*{max-width:none}.hero-actions .btn{width:100%}.hero{padding-bottom:12px}}.trust{background:var(--forest);color:var(--oat)}.trust ul{list-style:none;margin:0 auto;padding:22px 0;display:flex;flex-wrap:wrap;justify-content:space-between;gap:14px 36px}.trust li{display:inline-flex;align-items:center;gap:12px;font-weight:600;font-size:1.0625rem}.trust svg{width:26px;height:26px;color:var(--honey);flex:none}@media (max-width: 720px){.trust ul{display:grid;grid-template-columns:1fr;padding:20px 0}}.svc-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:20px}.svc{position:relative;display:block;aspect-ratio:4 / 5.6;border-radius:var(--r-lg);overflow:hidden;background:var(--forest);color:var(--oat);box-shadow:var(--shadow);isolation:isolate}.svc .ph{position:absolute;inset:0;border-radius:0}.svc:hover .ph img,.svc:focus-visible .ph img{transform:scale(1.04)}.svc-body{position:absolute;left:0;right:0;bottom:0;padding:70px 22px 22px;background:linear-gradient(180deg,transparent,rgba(20,19,18,.78) 38%,rgba(20,19,18,.94));z-index:3}.svc h3{color:var(--oat);font-size:1.7rem}.svc-line-wrap{display:grid;grid-template-rows:1fr;transition:grid-template-rows .9s var(--ease),opacity .7s}.svc-line-wrap>p{overflow:hidden;margin-top:8px;font-size:1.0625rem;line-height:1.45;color:#efeae0}.svc-list-wrap{display:grid;grid-template-rows:0fr;transition:grid-template-rows .9s var(--ease)}.svc-list-wrap>div{overflow:hidden}.svc-list{list-style:none;margin:0;padding:14px 0 4px;display:grid;gap:9px;opacity:0;transition:opacity .8s .1s}.svc-list li{position:relative;padding-left:30px;font-size:1.0625rem;line-height:1.4}.svc-list li:before{content:"";position:absolute;left:0;top:.2em;width:20px;height:20px;border-radius:50%;background:var(--honey) url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'><path d='M5.5 10.5l3 3 6-7' fill='none' stroke='%231C1B19' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'/></svg>") center/contain no-repeat}.svc-more{display:inline-block;margin-top:12px;font-weight:700;color:var(--honey)}.svc:hover .svc-list-wrap,.svc:focus-visible .svc-list-wrap,.svc:focus-within .svc-list-wrap{grid-template-rows:1fr}.svc:hover .svc-line-wrap,.svc:focus-visible .svc-line-wrap,.svc:focus-within .svc-line-wrap{grid-template-rows:0fr;opacity:0}.svc:hover .svc-list,.svc:focus-visible .svc-list,.svc:focus-within .svc-list{opacity:1}.svc-hint{margin-top:26px;display:flex;flex-wrap:wrap;gap:8px 24px;align-items:center;justify-content:space-between;font-weight:500;color:#26241f;max-width:none}.svc-hint a{font-weight:700;border-bottom:2px solid var(--clay)}@media (max-width: 1180px){.svc-grid{grid-template-columns:repeat(2,1fr)}.svc{aspect-ratio:4 / 4.4}}@media (hover: none),(max-width: 720px){.svc-grid{grid-template-columns:1fr}.svc{aspect-ratio:auto;display:flex;flex-direction:column}.svc .ph{position:relative;inset:auto;aspect-ratio:4 / 3}.svc-body{position:relative;background:var(--forest);padding:22px 22px 26px}.svc-list-wrap{grid-template-rows:1fr}.svc-list{opacity:1}.svc:hover .svc-line-wrap{grid-template-rows:1fr;opacity:1}.svc-hint span{display:none}}.plan{background:var(--forest);color:var(--oat);overflow:hidden}.plan:before{content:"";position:absolute;inset:0;background:radial-gradient(60% 60% at 85% 0%,rgba(143,169,138,.28),transparent 70%),radial-gradient(50% 50% at 0% 100%,rgba(201,130,91,.2),transparent 70%);pointer-events:none}.plan .container{position:relative}.plan h2{color:var(--oat)}.plan h2 em,.plan .eyebrow{color:var(--honey)}.plan .sec-head p{color:#e8e2d6}.plan-card{display:grid;grid-template-columns:1.02fr .98fr;border-radius:var(--r-lg);overflow:hidden;color:var(--forest);box-shadow:0 30px 80px -30px #0000008c}.plan-ctrl{padding:clamp(24px,3.4vw,46px)}.plan-res{padding:clamp(24px,3.4vw,46px);background:#1c1b190f;border-left:1.5px solid rgba(28,27,25,.12)}.plan fieldset{border:0;margin:0;padding:0;min-width:0}.plan legend,.plan .hl{font-weight:700;font-size:1.1875rem;margin-bottom:14px;padding:0;display:block}.types{display:grid;grid-template-columns:1fr 1fr;gap:12px}.type-opt{position:relative;display:block;cursor:pointer}.type-opt input{position:absolute;opacity:0;inset:0;width:100%;height:100%;cursor:pointer;margin:0;z-index:2}.type-card{display:block;height:100%;padding:16px 18px;border-radius:var(--r-sm);border:2px solid rgba(28,27,25,.22);background:#faf8f4db;transition:border-color .4s,background .4s,box-shadow .5s var(--ease),transform .5s var(--ease)}.type-card b{display:flex;justify-content:space-between;gap:8px;font-size:1.125rem;line-height:1.25}.type-card b span{color:var(--clay-ink);font-weight:700;white-space:nowrap}.type-card small{display:block;margin-top:6px;font-size:.9375rem;line-height:1.4;color:#2e2c29}.type-opt:hover .type-card{border-color:var(--sage-ink)}.type-opt input:checked+.type-card{border-color:var(--forest);background:#fff;box-shadow:0 0 0 3px #d9cba8e6,0 12px 26px -16px #1c1b1980}.type-opt input:focus-visible+.type-card{outline:3px solid var(--forest);outline-offset:3px}.hours{margin-top:30px}.hours-row{display:grid;grid-template-columns:56px 1fr 56px;align-items:center;gap:14px}.step-btn{width:56px;height:56px;border-radius:50%;border:2px solid var(--forest);font-size:1.9rem;line-height:1;font-weight:500;display:grid;place-items:center;background:#faf8f4e6;transition:background .35s,color .35s,transform .4s var(--ease)}.step-btn:hover{background:var(--forest);color:var(--oat)}.step-btn:active{transform:scale(.94)}.range{-webkit-appearance:none;appearance:none;width:100%;height:44px;background:transparent;cursor:pointer;margin:0;--p: 20%}.range::-webkit-slider-runnable-track{height:12px;border-radius:999px;background:linear-gradient(90deg,var(--forest) var(--p),rgba(28,27,25,.2) var(--p))}.range::-moz-range-track{height:12px;border-radius:999px;background:linear-gradient(90deg,var(--forest) var(--p),rgba(28,27,25,.2) var(--p))}.range::-webkit-slider-thumb{-webkit-appearance:none;width:38px;height:38px;border-radius:50%;background:var(--honey);border:3px solid var(--forest);margin-top:-13px;box-shadow:0 6px 14px -4px #1c1b1980}.range::-moz-range-thumb{width:32px;height:32px;border-radius:50%;background:var(--honey);border:3px solid var(--forest);box-shadow:0 6px 14px -4px #1c1b1980}.hours-out{display:flex;align-items:baseline;gap:10px;margin-top:8px;font-size:1.1875rem}.hours-out b{font-family:var(--font-display);font-weight:400;font-size:2.6rem;line-height:1}.hours-hint{color:#2e2c29;font-size:1rem}.res-label{font-weight:700;font-size:.875rem;letter-spacing:.13em;text-transform:uppercase;color:var(--clay-ink)}.res-price{display:flex;align-items:baseline;flex-wrap:wrap;gap:6px 12px;margin-top:6px;font-size:1.25rem}.res-price .amt{font-family:var(--font-display);font-size:clamp(3.4rem,6vw,4.8rem);line-height:1;letter-spacing:-.02em}.res-price .cur{font-family:var(--font-display);font-size:2.2rem;align-self:flex-start;margin-top:.3em;margin-right:-6px}.res-month{font-weight:600;margin-top:4px}.res-note{margin-top:4px;font-size:1rem;color:var(--sage-ink);font-weight:600;min-height:1.5em}.res-visits{margin-top:10px;font-size:1.0625rem;max-width:none}.plan-res h3{font-size:1.4rem;margin:26px 0 12px}.funding{list-style:none;margin:0;padding:0;display:grid;gap:4px}.funding li{display:grid;grid-template-columns:1fr auto;align-items:start;gap:4px 14px;padding:12px 0;border-top:1px solid rgba(28,27,25,.14)}.funding b{font-size:1.0625rem;line-height:1.3}.funding small{grid-column:1;font-size:.9375rem;line-height:1.4;color:#2e2c29}.chip-s{grid-row:1;grid-column:2;align-self:start;padding:4px 12px;border-radius:999px;font-size:.875rem;font-weight:700;white-space:nowrap;transition:background .6s,color .6s,opacity .6s}.chip-s.likely{background:var(--sage);color:#100f0e}.chip-s.maybe{background:var(--honey);color:#2a2213}.chip-s.no{background:#1c1b191a;color:#2e2c29}.funding li.is-no{opacity:.72}.plan-res .btn{width:100%;margin-top:24px}.res-reassure{margin-top:12px;font-weight:600;text-align:center;font-size:1rem;max-width:none}.disclaimer{margin-top:10px;font-size:.9375rem;color:#2e2c29;text-align:center;max-width:none}@media (max-width: 980px){.plan-card{grid-template-columns:1fr}.plan-res{border-left:0;border-top:1.5px solid rgba(28,27,25,.12)}}@media (max-width: 520px){.types{grid-template-columns:1fr}.hours-row{grid-template-columns:52px 1fr 52px;gap:8px}.step-btn{width:52px;height:52px}}.how-grid{display:grid;grid-template-columns:1.05fr .95fr;gap:clamp(32px,6vw,88px);align-items:center}.how-frame{position:relative;aspect-ratio:1.16;border-radius:40px;overflow:hidden;background:url(../media/hands.poster.jpg?v=2) 30% 50% / cover no-repeat,var(--oat-deep);box-shadow:var(--shadow);isolation:isolate}.how-frame canvas{position:absolute;inset:0;width:100%;height:100%;opacity:0;transition:opacity 1.6s}.how-frame canvas.is-live{opacity:1}.how-frame:after{content:"";position:absolute;inset:0;pointer-events:none;background:linear-gradient(180deg,#d9cba81a,#d9cba81f);mix-blend-mode:soft-light}.how-cap{position:absolute;left:20px;right:20px;bottom:20px;z-index:3;padding:14px 20px;border-radius:18px;background:#faf8f4e6;backdrop-filter:blur(8px);font-weight:600;font-size:1.0625rem;line-height:1.4}.steps{list-style:none;margin:34px 0 0;padding:0;position:relative;display:grid;gap:34px}.steps:before{content:"";position:absolute;left:25px;top:24px;bottom:24px;width:2px;background:#1c1b192e}.steps .fill{position:absolute;left:25px;top:24px;width:2px;height:0;background:var(--clay)}.step{position:relative;display:grid;grid-template-columns:52px 1fr;gap:22px}.step .num{width:52px;height:52px;border-radius:50%;display:grid;place-items:center;font-family:var(--font-display);font-size:1.6rem;background:var(--oat);border:2px solid var(--forest);z-index:1;transition:background .8s,color .8s}.step.on .num{background:var(--forest);color:var(--oat)}.step h3{font-size:1.6rem}.step p{margin-top:6px}.step .meta{display:inline-block;margin-top:10px;padding:4px 14px;border-radius:999px;background:#d9cba880;font-weight:700;font-size:.9375rem}.how .btn{margin-top:40px}@media (max-width: 900px){.how-grid{grid-template-columns:1fr}.how-frame{border-radius:30px;aspect-ratio:1.1}}.voices{background:var(--oat-deep)}.voices-grid{display:grid;grid-template-columns:.8fr 1.2fr;gap:clamp(32px,6vw,84px);align-items:center}.voices .ph{aspect-ratio:1;border-radius:var(--r-lg);box-shadow:var(--shadow)}.quotes{display:grid}.quote{grid-area:1 / 1;margin:0;opacity:0;visibility:hidden}.quote.on{opacity:1;visibility:visible}.quote blockquote{margin:0;font-family:var(--font-display);font-size:clamp(1.55rem,2.6vw,2.15rem);line-height:1.3;letter-spacing:-.01em}.quote blockquote:before{content:"“";display:block;font-size:4.2rem;line-height:.6;color:var(--clay);margin-bottom:8px}.quote figcaption{margin-top:22px;font-size:1.0625rem;line-height:1.4}.quote figcaption b{display:block;font-size:1.1875rem}.q-ctl{display:flex;align-items:center;gap:14px;margin-top:34px}.q-dot{width:48px;height:48px;display:grid;place-items:center;border-radius:50%}.q-dot:before{content:"";width:14px;height:14px;border-radius:50%;border:2px solid var(--forest);transition:background .5s,transform .5s var(--ease)}.q-dot[aria-current=true]:before{background:var(--forest);transform:scale(1.25)}.q-pause{margin-left:auto;min-height:48px;padding:0 20px;border-radius:999px;border:2px solid var(--forest);font-weight:700;font-size:1rem}.q-pause:hover{background:var(--forest);color:var(--oat)}.q-stars{color:var(--clay-ink);letter-spacing:.15em;margin-bottom:14px;font-size:1.2rem}@media (max-width: 900px){.voices-grid{grid-template-columns:1fr}.voices .ph{max-width:440px}}.area-grid{display:grid;grid-template-columns:1.1fr .9fr;gap:clamp(28px,5vw,72px);align-items:center}.map{position:relative;border-radius:var(--r-lg);aspect-ratio:640 / 440;box-shadow:var(--shadow);border:1.5px solid rgba(28,27,25,.14)}.map svg{position:absolute;inset:0;width:100%;height:100%;border-radius:var(--r-lg)}.pin.below b{bottom:auto;top:100%;transform:translate(-50%,-4px)}.pin.below:hover b,.pin.below.on b,.pin.below:focus-visible b{transform:translate(-50%,2px)}.pin{position:absolute;width:44px;height:44px;margin:-22px 0 0 -22px;border-radius:50%;display:grid;place-items:center}.pin i{width:18px;height:18px;border-radius:50%;background:var(--clay);border:3px solid var(--oat);box-shadow:0 0 0 2px var(--clay-ink),0 6px 12px -4px #0006;transition:transform .5s var(--ease),background .5s}.pin b{position:absolute;left:50%;bottom:100%;transform:translate(-50%,4px);white-space:nowrap;padding:4px 12px;border-radius:999px;background:var(--forest);color:var(--oat);font-size:.9375rem;font-weight:600;opacity:0;pointer-events:none;transition:opacity .5s,transform .5s var(--ease)}.pin:hover b,.pin.on b,.pin:focus-visible b{opacity:1;transform:translate(-50%,-2px)}.pin:hover i,.pin.on i{transform:scale(1.4);background:var(--forest)}.pin.on:after{content:"";position:absolute;inset:2px;border-radius:50%;border:2px solid var(--forest);animation:ping 3.4s ease-out infinite}@keyframes ping{0%{transform:scale(.6);opacity:.9}to{transform:scale(2.2);opacity:0}}.area-form{display:flex;gap:12px;margin-top:26px;flex-wrap:wrap}.field-in{flex:1 1 240px;min-height:58px;padding:0 20px;border-radius:14px;border:2px solid rgba(28,27,25,.4);background:#fff;font:inherit;color:var(--forest)}.field-in:focus{outline:3px solid var(--honey);outline-offset:1px;border-color:var(--forest)}.area-msg:empty{display:none}.area-msg{margin-top:18px;padding:16px 20px;border-radius:16px;background:#d9cba847;font-weight:600;min-height:3.2em}.area-msg.no{background:#d9cba866}.towns{list-style:none;display:flex;flex-wrap:wrap;gap:8px;margin:22px 0 0;padding:0}.towns button{min-height:44px;padding:0 16px;border-radius:999px;border:1.5px solid rgba(28,27,25,.35);font-weight:600;font-size:1rem;transition:background .35s,color .35s}.towns button:hover,.towns button.on{background:var(--forest);color:var(--oat)}@media (max-width: 900px){.area-grid{grid-template-columns:1fr}.pin b{font-size:.875rem}}.join{padding-block:clamp(20px,4vw,40px) clamp(76px,10vw,130px)}.join-card{display:grid;grid-template-columns:1fr 1fr;border-radius:var(--r-lg);overflow:hidden;background:var(--sage);color:var(--forest);box-shadow:var(--shadow)}.join-copy{padding:clamp(28px,5vw,64px);align-self:center}.join-copy .eyebrow{color:var(--forest)}.join-copy h2{margin:14px 0 18px}.join-copy h2 em{color:var(--forest)}.join-copy p{margin-bottom:28px}.join .ph{border-radius:0;min-height:360px}@media (max-width: 800px){.join-card{grid-template-columns:1fr}.join .ph{order:-1;min-height:260px}}.final{padding-block:clamp(64px,9vw,120px);text-align:center;background:linear-gradient(180deg,var(--oat),var(--oat-deep))}.final h2{max-width:16em;margin-inline:auto}.final p{margin:20px auto 30px;font-size:1.2rem}.final .phone-big{align-items:center;margin:30px auto 0}.site-footer{background:var(--forest);color:var(--oat);padding-block:72px 36px}.ft-grid{display:grid;grid-template-columns:1.4fr 1fr 1.2fr;gap:48px}.site-footer .logo{color:var(--oat);margin:0 0 18px}.site-footer p,.site-footer li{color:#e8e2d6;font-size:1.0625rem}.site-footer h4{font-family:var(--font-text);font-size:.875rem;letter-spacing:.13em;text-transform:uppercase;color:var(--honey);margin-bottom:16px;font-weight:700}.site-footer ul{list-style:none;margin:0;padding:0;display:grid;gap:8px}.site-footer a:hover{color:var(--honey)}.ft-phone{font-family:var(--font-display);font-size:2.2rem;color:var(--oat);display:inline-block;margin-bottom:8px}.ft-bottom{margin-top:56px;padding-top:24px;border-top:1px solid rgba(247,242,234,.2);display:flex;flex-wrap:wrap;gap:12px 28px;justify-content:space-between;font-size:.9375rem;color:#dcd3c2}.ft-bottom ul{display:flex;gap:22px}@media (max-width: 820px){.ft-grid{grid-template-columns:1fr;gap:36px}}.callbar{display:none}@media (max-width: 760px){.callbar{display:grid;grid-template-columns:1fr 1fr;gap:10px;position:fixed;left:0;right:0;bottom:0;z-index:80;padding:10px 12px calc(10px + env(safe-area-inset-bottom));background:#faf8f4f5;border-top:1px solid rgba(28,27,25,.15);backdrop-filter:blur(12px)}.callbar .btn{min-height:54px;padding:0 12px;font-size:1.0625rem}body{padding-bottom:76px}}.page-hero{position:relative;overflow:clip;isolation:isolate;padding-block:clamp(44px,6vw,84px) clamp(44px,6vw,80px);background:radial-gradient(90% 90% at 8% 20%,#fdfbf8,var(--oat) 70%)}.page-hero .container{display:grid;grid-template-columns:1.05fr .95fr;gap:clamp(28px,5vw,70px);align-items:center}.page-hero h1{font-size:clamp(2.5rem,4.8vw,4.2rem);margin-bottom:22px}.page-hero .lede{margin-bottom:30px}.page-hero .ph,.page-media{aspect-ratio:1.12;border-radius:36px;box-shadow:var(--shadow)}.page-media{position:relative;overflow:hidden;background:var(--oat-deep) url(../media/hero-still.jpg?v=2) 70% 50% / cover no-repeat;isolation:isolate}.page-media canvas{position:absolute;inset:0;width:100%;height:100%;opacity:0;transition:opacity 1.4s}.page-media canvas.is-live{opacity:1}.page-media:after{content:"";position:absolute;inset:0;pointer-events:none;background:linear-gradient(180deg,#d9cba81a,#d9cba81a);mix-blend-mode:soft-light}@media (max-width: 900px){.page-hero .container{grid-template-columns:1fr}.page-hero .ph,.page-media{aspect-ratio:1.2;border-radius:28px}}.jump{display:flex;flex-wrap:wrap;gap:10px;margin-top:4px}.jump a{min-height:48px;padding:0 20px;display:inline-flex;align-items:center;border-radius:999px;border:2px solid rgba(28,27,25,.4);font-weight:700;font-size:1rem;transition:background .35s,color .35s}.jump a:hover{background:var(--forest);color:var(--oat)}.detail{padding-block:clamp(44px,6vw,80px);border-top:1px solid rgba(28,27,25,.12)}.detail-grid{display:grid;grid-template-columns:.9fr 1.1fr;gap:clamp(28px,6vw,84px);align-items:center}.detail:nth-of-type(2n) .detail-grid{grid-template-columns:1.1fr .9fr}.detail:nth-of-type(2n) .detail-grid>.ph{order:2}.detail .ph{aspect-ratio:4 / 4.6;border-radius:var(--r-lg);box-shadow:var(--shadow)}.detail h2{margin:12px 0 16px;font-size:clamp(2rem,3.4vw,2.9rem)}.detail .lead{font-size:1.25rem;font-weight:500}.detail .who{margin-top:16px;padding:16px 20px;border-radius:16px;background:#d9cba842}.detail .who b{display:block;font-size:.875rem;letter-spacing:.12em;text-transform:uppercase;color:var(--sage-ink);margin-bottom:4px}.checks{list-style:none;margin:22px 0 0;padding:0;display:grid;gap:10px}.checks li{position:relative;padding-left:36px}.checks li:before{content:"";position:absolute;left:0;top:.1em;width:24px;height:24px;border-radius:50%;background:var(--sage) url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'><path d='M5.5 10.5l3 3 6-7' fill='none' stroke='%231C1B19' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'/></svg>") center/contain no-repeat}.visit{margin-top:20px;font-weight:600;color:var(--sage-ink)}.detail .btn{margin-top:24px}@media (max-width: 900px){.detail-grid,.detail:nth-of-type(2n) .detail-grid{grid-template-columns:1fr}.detail:nth-of-type(2n) .detail-grid>.ph{order:0}.detail .ph{aspect-ratio:4 / 3.4}}.rates{background:var(--oat-deep)}.rate-wrap{border-radius:var(--r-lg);overflow:hidden;box-shadow:var(--shadow);border:1.5px solid rgba(28,27,25,.14)}.rate-table{width:100%;border-collapse:collapse;font-size:1.0625rem}.rate-table th,.rate-table td{padding:20px 22px;text-align:left;border-bottom:1px solid rgba(28,27,25,.14);vertical-align:top}.rate-table thead th{background:var(--forest);color:var(--oat);font-size:.9375rem;letter-spacing:.06em;text-transform:uppercase}.rate-table tbody th{font-family:var(--font-display);font-weight:400;font-size:1.4rem}.rate-table tbody th small{display:block;font-family:var(--font-text);font-size:.9375rem;margin-top:4px;color:#2e2c29}.rate-table td b{font-size:1.2rem}.rate-table tr:last-child th,.rate-table tr:last-child td{border-bottom:0}.rate-note{margin-top:16px;color:#2e2c29;font-size:1rem}@media (max-width: 760px){.rate-table,.rate-table tbody,.rate-table tr,.rate-table th,.rate-table td{display:block}.rate-table thead{position:absolute;left:-9999px}.rate-table tr{padding:14px 6px;border-bottom:1px solid rgba(28,27,25,.14)}.rate-table th,.rate-table td{border:0;padding:6px 16px}.rate-table td:before{content:attr(data-l) ": ";font-weight:700;color:var(--sage-ink)}}.faq-list{display:grid;gap:14px;max-width:52rem}.faq-list details{border-radius:20px;border:1.5px solid rgba(28,27,25,.2);padding:0 24px;transition:background .4s}.faq-list details[open]{background:#d9cba833}.faq-list summary{cursor:pointer;list-style:none;display:flex;justify-content:space-between;align-items:center;gap:18px;min-height:68px;font-weight:700;font-size:1.1875rem;padding:14px 0}.faq-list summary::-webkit-details-marker{display:none}.faq-list summary:after{content:"+";font-size:2rem;line-height:1;font-weight:400;transition:transform .5s var(--ease);flex:none}.faq-list details[open] summary:after{transform:rotate(45deg)}.faq-list details p{padding:0 0 22px}.book-grid{display:grid;grid-template-columns:1.15fr .85fr;gap:clamp(28px,5vw,64px);align-items:start;padding-block:clamp(36px,5vw,64px) clamp(76px,9vw,120px)}.form-card{border-radius:var(--r-lg);padding:clamp(24px,4vw,48px);box-shadow:var(--shadow);border:1.5px solid rgba(28,27,25,.14)}.form-card h2{font-size:2rem;margin-bottom:26px}.fld{margin-bottom:22px;border:0;padding:0;min-width:0}.fld>label,.fld>legend{display:block;font-weight:700;margin-bottom:8px;font-size:1.0625rem;padding:0}.fld .hint{font-size:.9375rem;color:#2e2c29;margin:-4px 0 8px;max-width:none}.fld input[type=text],.fld input[type=tel],.fld input[type=email],.fld select,.fld textarea{width:100%;min-height:58px;padding:14px 18px;border-radius:14px;border:2px solid rgba(28,27,25,.4);background:#fff;font:inherit;color:var(--forest)}.fld textarea{min-height:120px;resize:vertical}.fld input:focus,.fld select:focus,.fld textarea:focus{outline:3px solid var(--honey);outline-offset:1px;border-color:var(--forest)}.fld.err input,.fld.err select,.fld.err textarea{border-color:#a3341c}.err-msg{display:none;margin-top:8px;color:#8c2511;font-weight:600;font-size:1rem}.fld.err .err-msg{display:block}.two{display:grid;grid-template-columns:1fr 1fr;gap:0 18px}@media (max-width: 640px){.two{grid-template-columns:1fr}}.opts{display:flex;flex-wrap:wrap;gap:10px}.opt{position:relative}.opt input{position:absolute;inset:0;width:100%;height:100%;opacity:0;cursor:pointer;margin:0;z-index:2}.opt span{display:flex;flex-direction:column;justify-content:center;min-height:56px;padding:8px 20px;border-radius:14px;border:2px solid rgba(28,27,25,.35);background:#fff;font-weight:600;line-height:1.25;transition:background .35s,border-color .35s,box-shadow .4s}.opt span small{font-weight:500;font-size:.875rem;color:#2e2c29}.opt:hover span{border-color:var(--forest)}.opt input:checked+span{background:var(--forest);color:var(--oat);border-color:var(--forest);box-shadow:0 0 0 3px #d9cba8e6}.opt input:checked+span small{color:#e8e2d6}.opt input:focus-visible+span{outline:3px solid var(--forest);outline-offset:3px}.consent{display:grid;grid-template-columns:30px 1fr;gap:14px;align-items:start;cursor:pointer;font-weight:500}.consent input{width:28px;height:28px;accent-color:var(--forest);margin:2px 0 0}.form-card .btn{width:100%;margin-top:8px;min-height:64px;font-size:1.25rem}.side{display:grid;gap:22px;position:sticky;top:calc(var(--hdr) + 18px)}.side-card{border-radius:var(--r-lg);padding:28px}.side-phone{background:var(--forest);color:var(--oat)}.side-phone p{color:#e8e2d6}.side-phone .big{display:block;font-family:var(--font-display);font-size:clamp(2.3rem,3.4vw,3rem);margin:6px 0 10px;color:var(--oat)}.side-phone .big:hover{color:var(--honey)}.side-next{border:1.5px solid rgba(28,27,25,.18)}.side-next h3{margin-bottom:14px}.side-next ol{margin:0;padding-left:22px;display:grid;gap:12px}.side .ph{aspect-ratio:4 / 3.2;border-radius:var(--r-lg)}.plan-sum{border:2px dashed rgba(28,27,25,.35);background:#d9cba833}.plan-sum h3{font-size:1.3rem;margin-bottom:8px}.plan-sum .big{font-family:var(--font-display);font-size:2.4rem;line-height:1.1}.plan-sum a{display:inline-block;margin-top:8px;font-weight:700;border-bottom:2px solid var(--clay)}@media (max-width: 960px){.book-grid{grid-template-columns:1fr}.side{position:static}}.done{text-align:center;padding:20px 4px}.done .tick{width:84px;height:84px;border-radius:50%;margin:0 auto 22px;background:var(--sage);display:grid;place-items:center}.done .tick svg{width:44px;height:44px}.done .tick path{stroke-dasharray:1;stroke-dashoffset:1}.done h2{margin-bottom:14px}.done p{margin-inline:auto}.done ol{text-align:left;max-width:30rem;margin:26px auto 28px;padding-left:22px;display:grid;gap:10px}.done .btn{width:auto;margin-top:0}@media (prefers-reduced-motion: reduce){.halo,.pin.on:after{animation:none}.ph img{transition:none}}.week{margin-top:28px;padding-top:22px;border-top:1px solid rgba(28,27,25,.16)}.week h3{font-size:1.2rem;margin-bottom:14px}.week-bars{display:grid;grid-template-columns:repeat(7,1fr);gap:10px;align-items:end;height:120px}.week-bars div{display:flex;flex-direction:column;justify-content:flex-end;align-items:center;height:100%;gap:8px}.week-bars i{width:100%;max-width:44px;border-radius:10px 10px 4px 4px;background:#1c1b191a;height:6px;transition:height 1s var(--ease),background .8s}.week-bars .on i{background:var(--sage-ink)}.week-bars span{font-weight:700;font-size:.9375rem}.promises{list-style:none;margin:22px 0 0;padding:0;display:grid;gap:8px;font-weight:600;font-size:1.0625rem}.promises li{position:relative;padding-left:32px}.promises li:before{content:"";position:absolute;left:0;top:.12em;width:22px;height:22px;border-radius:50%;background:var(--honey) url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'><path d='M5.5 10.5l3 3 6-7' fill='none' stroke='%231C1B19' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'/></svg>") center/contain no-repeat}

/* ---------------------------------------------------------------------------
   Widgy Normil Photography — brand layer over the base template.
   Three families, as on weddings/engagement/guide: Playfair Display for
   display type, Lora for reading, Montserrat for small UI type.
   --------------------------------------------------------------------------- */
.eyebrow,.res-label,.chip,.btn,.nav ul a,.hdr-phone,.menu-btn,.chip-s,.rate-table th,.rate-table td[data-l]::before,
.hours-out span,.hl,.week h3,.q-ctl,.jump a,.towns button,.meta,.step .meta,.field label,.opt span,.vh{
  font-family:var(--font-ui);
}
.eyebrow,.res-label{letter-spacing:.18em;font-weight:600}
.btn{font-weight:600;font-size:1.0625rem;letter-spacing:.04em}
h1,h2,h3,.res-price .amt{font-family:var(--font-display);font-weight:500}
h1,h2{letter-spacing:-.01em}

/* The session builder shows three collections, not seven days. */
.week-bars{grid-template-columns:repeat(3,1fr);height:104px}
.week-bars i{max-width:72px}
.res-collection{
  font-family:var(--font-display);font-size:1.5rem;line-height:1.1;
  margin-top:2px;color:var(--clay-ink);
}
.res-price{margin-top:2px}
/* the type cards no longer carry a per-hour price in the <b> */
.type-card b{display:block}

/* A gold hairline under the header reads as the brand rather than the template. */
.site-header::after{
  content:"";position:absolute;left:0;right:0;bottom:0;height:1px;
  background:linear-gradient(90deg,transparent,#b8954e59 18%,#b8954e59 82%,transparent);
}

/* Two words where the template had one: keep the wordmark on a single line. */
.logo span{white-space:nowrap}
@media (max-width:420px){
  .site-header .logo{font-size:1.3rem;gap:9px}
  .site-header .logo svg{width:30px;height:30px}
}

/* ---------------------------------------------------------------------------
   The signature wordmark, in place of the template's inline mark.
   --------------------------------------------------------------------------- */
.logo{gap:0}
.logo-img{display:block;height:34px;width:auto}
.logo-mark{display:none;height:42px;width:auto}
.site-footer .logo-img{height:42px;margin-bottom:6px}
@media (max-width:620px){
  .site-header .logo-img{display:none}
  .site-header .logo-mark{display:block}
}

/* ---------------------------------------------------------------------------
   One page: section rhythm and the in-view nav state.
   --------------------------------------------------------------------------- */
.nav ul a.on{color:var(--clay-ink)}
.nav ul a.on::after{
  content:"";position:absolute;left:14px;right:14px;bottom:6px;height:2px;
  background:var(--clay);border-radius:2px;
}
.nav ul a{position:relative}

.session-detail-wrap{padding:var(--pad-y-lg,96px) 0 0}
.session-detail-wrap .sec-head{margin-bottom:0}
.enquire .book-grid{margin-top:34px}
.faq{padding-top:0}

/* NO content-visibility ON THE SECTIONS, and it is worth writing down why.
   It was tried here: it is the obvious way to make a 16,000px page cheap, and
   it does cut paint work. But an unrealised section only has its ESTIMATED
   height, so every in-page link computed its target against heights that were
   wrong, then the sections realised mid-scroll and grew. "Start a session"
   landed a full 994px past the form. Measured, not theorised.

   The page does not need it. With the offscreen videos paused, the second
   canvas built lazily and the shader capped below full retina, a scripted
   scroll of the whole page ran 447 frames with a 13.3ms median and not one
   frame over 33ms. Every .ph figure carries an explicit aspect-ratio, so the
   lazy images reserve their space and nothing shifts.

   If it is ever reinstated, the in-page scroll has to re-target after the
   layout settles, or the links break again. */

/* ===========================================================================
   BURNT AMBER — the third accent.

   The palette already had two: gold (--clay / --clay-ink) for ivory surfaces
   and pale gold (--honey) for charcoal ones. Amber is not a replacement for
   either. Gold stays the metallic — the headline italics, the collection
   names, the money. Amber is the punctuation: the section labels, the marks,
   the rules, the pins, the dots, the things that point at something.

   Two tones, because one cannot serve both surfaces:
     --amber-ink  on ivory  #FAF8F4 → 5.6:1, passes AA at the 14px bold the
                  eyebrows are set in (bold under 18.66px is NOT large text).
     --amber-lift on charcoal #1C1B19 → 5.0:1.
   Contrast computed from the tokens, not sampled off a screenshot — a pixel
   sample of where text *would* be is not where text *is*.
   =========================================================================== */
:root{
  --amber:      #A85A24;
  --amber-ink:  #9C4F1C;
  --amber-lift: #C9752F;
  --amber-wash: #a85a2414;
  --amber-edge: #a85a2459;
}

/* --- the label on every section, so the accent reads as deliberate --- */
.eyebrow{color:var(--amber-ink)}
.res-label{color:var(--amber-ink)}
.detail .who b{color:var(--amber-ink)}
.plan .eyebrow,.plan h2 em{color:var(--amber-lift)}
.site-footer h4{color:var(--amber-lift)}

/* --- marks and rules --- */
.uline path{stroke:var(--amber)}            /* the hand-drawn hero underline */
.quote blockquote:before{color:var(--amber)}/* the opening quote mark        */
.q-stars{color:var(--amber-ink)}
.steps .fill{background:var(--amber)}       /* the How-it-works progress line */
.svc-hint a,.plan-sum a{border-bottom-color:var(--amber)}
.faq-list summary:after{color:var(--amber)}
.nav ul a.on{color:var(--amber-ink)}
.nav ul a.on::after{background:var(--amber)}
.site-header::after{
  background:linear-gradient(90deg,transparent,var(--amber-edge) 18%,var(--amber-edge) 82%,transparent);
}

/* --- dots, pins and bullets --- */
.chip:before{background:var(--amber);box-shadow:0 0 0 4px var(--amber-wash)}
.pin i{background:var(--amber)}
.pin.on i{background:var(--amber);box-shadow:0 0 0 6px var(--amber-wash)}
.trust svg{color:var(--amber-lift)}
.svc-list li:before{background:var(--amber-lift)}
.svc-more{color:var(--amber-lift)}
.promises li:before{background:var(--amber-lift)}

/* --- the builder: the control you actually touch, and the positive chip --- */
.range::-webkit-slider-thumb{background:var(--amber-lift)}
.range::-moz-range-thumb{background:var(--amber-lift)}
.chip-s.likely{background:var(--amber);color:#FAF8F4}
.week-bars > div.on i{background:var(--amber)}

/* --- small warmth, everywhere --- */
.faq-list details[open]{background:var(--amber-wash)}
.detail .who{background:var(--amber-wash)}
::selection{background:var(--amber);color:#FAF8F4}
.on-dark ::selection,.plan ::selection,.site-footer ::selection{
  background:var(--amber-lift);color:#1C1B19;
}
.jump a:hover{background:var(--amber-ink);color:#FAF8F4;border-color:var(--amber-ink)}
.btn-ghost:hover{background:var(--amber-ink);border-color:var(--amber-ink);color:#FAF8F4}


/* Lenis animates window.scrollY itself. `scroll-behavior:smooth` makes the
   browser animate the same value from the other side, and two easings
   negotiating over one number is exactly what "laggy" feels like. The scroll
   padding stays: it is what the reduced-motion and no-JS paths land on. */
html{scroll-behavior:auto}
@media (prefers-reduced-motion: reduce){ html{scroll-behavior:auto} }

/* A nav target should not arrive flush under the sticky header. */
#services,#plan,#how,#area,#about,#faq,#enquire,#rates,
#portrait,#couples,#family,#milestone{scroll-margin-top:calc(var(--hdr) + 12px)}

/* ===========================================================================
   THE GALLERY — 35 frames, five from each kind of session.
   =========================================================================== */
.gallery .sec-head{margin-bottom:26px}

.gal-filters{display:flex;flex-wrap:wrap;gap:10px;margin-bottom:26px}
.gal-chip{
  min-height:46px;padding:0 20px;border-radius:999px;cursor:pointer;
  border:1.5px solid rgba(28,27,25,.3);background:transparent;color:var(--forest);
  font-family:var(--font-ui);font-weight:600;font-size:.9375rem;letter-spacing:.02em;
  transition:background .35s var(--ease),color .35s var(--ease),border-color .35s var(--ease);
}
.gal-chip:hover{border-color:var(--amber-ink);color:var(--amber-ink)}
.gal-chip.on{background:var(--amber-ink);border-color:var(--amber-ink);color:#FAF8F4}

.gal-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:14px}
.gal-item{margin:0;min-width:0}
.gal-item.is-out{display:none}
.gal-open{
  display:block;width:100%;padding:0;border:0;background:var(--oat-deep);cursor:zoom-in;
  border-radius:var(--r-sm);overflow:hidden;aspect-ratio:4 / 5;
}
.gal-open img{
  width:100%;height:100%;object-fit:cover;display:block;
  filter:saturate(.94) contrast(1.02);
  transition:transform 1.1s var(--ease),filter .5s;
}
.gal-open:hover img,.gal-open:focus-visible img{transform:scale(1.05);filter:none}
.gal-open:focus-visible{outline:3px solid var(--amber);outline-offset:3px}
.gal-count{margin-top:18px;font-size:.9375rem;color:var(--sage-ink);font-family:var(--font-ui)}

@media (max-width:1100px){ .gal-grid{grid-template-columns:repeat(4,1fr)} }
@media (max-width:860px){ .gal-grid{grid-template-columns:repeat(3,1fr);gap:10px} }
@media (max-width:560px){ .gal-grid{grid-template-columns:repeat(2,1fr)} .gal-chip{min-height:42px;padding:0 15px;font-size:.875rem} }

/* --- lightbox. It lives on <body>: a position:fixed overlay inside a
   transformed ancestor is trapped in that ancestor's layer. --- */
.lb{position:fixed;inset:0;z-index:200;display:none}
.lb.on{display:block}
body.lb-open{overflow:hidden}
.lb-scrim{position:absolute;inset:0;background:#100f0ef7;backdrop-filter:blur(8px);animation:lb-in .3s var(--ease)}
.lb-inner{
  position:absolute;inset:0;display:grid;
  grid-template-columns:72px 1fr 72px;align-items:center;
  padding:20px;animation:lb-in .35s var(--ease);
}
.lb-fig{margin:0;display:flex;flex-direction:column;align-items:center;gap:14px;min-height:0}
.lb-fig img{
  max-width:100%;max-height:78vh;object-fit:contain;display:block;
  border-radius:var(--r-sm);box-shadow:0 40px 90px -30px #000000a6;
}
.lb-fig figcaption{
  font-family:var(--font-ui);font-size:.9375rem;line-height:1.5;color:#faf8f4cc;
  text-align:center;max-width:46rem;
}
.lb-btn{
  display:inline-flex;align-items:center;justify-content:center;
  width:56px;height:56px;border-radius:50%;cursor:pointer;
  border:1.5px solid #faf8f43d;background:#1c1b1999;color:#FAF8F4;
  font-size:2rem;line-height:1;transition:background .3s,border-color .3s,transform .3s var(--ease);
}
.lb-btn:hover{background:var(--amber-ink);border-color:var(--amber-ink);transform:scale(1.06)}
.lb-btn:focus-visible{outline:3px solid var(--amber-lift);outline-offset:3px}
.lb-prev{justify-self:start}
.lb-next{justify-self:end}
.lb-close{position:absolute;top:18px;right:18px;width:50px;height:50px;font-size:1.7rem}
@keyframes lb-in{from{opacity:0}to{opacity:1}}

@media (max-width:760px){
  /* Every child gets an explicit cell. Leaving the arrows to auto-placement
     created an implicit SECOND column and squeezed the photograph to 203px. */
  .lb-inner{grid-template-columns:1fr 1fr;grid-template-rows:1fr auto;padding:14px 14px 22px;gap:14px}
  .lb-fig{grid-column:1 / -1;grid-row:1;min-height:0;width:100%}
  .lb-fig img{max-height:60vh}
  .lb-prev,.lb-next{grid-row:2;width:54px;height:54px;margin:0}
  .lb-prev{grid-column:1;justify-self:end;margin-right:10px}
  .lb-next{grid-column:2;justify-self:start;margin-left:10px}
}
@media (prefers-reduced-motion:reduce){
  .lb-scrim,.lb-inner{animation:none}
  .gal-open img{transition:none}
}

/* A nav move drops focus on the destination heading so the keyboard follows the
   eye. The heading gets a temporary tabindex="-1" for that, and some browsers
   then paint a focus ring after a plain click. Keep the ring for real keyboard
   focus and drop it otherwise. */
[tabindex="-1"]:focus:not(:focus-visible){outline:none}

/* The About portrait is a full-length studio frame (941x1672). Cropped to the
   card's old near-square cell it lost his head and his feet, so the image
   column is narrower and the figure keeps the photograph's own ratio.
   width:100% is load-bearing: on a stretched grid item, aspect-ratio would
   otherwise drive the WIDTH and overflow the column. */
.join-card{grid-template-columns:1.32fr .68fr}
.join .ph{aspect-ratio:941 / 1672;width:100%;height:auto;min-height:0;align-self:stretch}
@media (max-width:800px){
  .join-card{grid-template-columns:1fr}
  .join .ph{aspect-ratio:941 / 1200;min-height:0}
}

/* ===========================================================================
   THE MAP — real geography, not a decorative squiggle.

   County outlines are US Census TIGER (public domain, via the plotly county
   GeoJSON); the state silhouette in the locator is the same source generalised;
   Lake Okeechobee is Natural Earth. Everything is projected with Web Mercator
   over the window lon -81.10..-79.90, lat 25.42..26.98 — so the eight pins sit
   on their true coordinates, not at hand-placed guesses.

   The region is genuinely tall and narrow: zooming in far enough to spread the
   coastal cities apart makes the frame taller, which is why the card is now
   portrait rather than the template's landscape.
   =========================================================================== */
.map{aspect-ratio:640 / 927;background:var(--oat-deep);overflow:hidden}

.mp-sea-fill{fill:#C3D5DC}                 /* Atlantic, Gulf, Okeechobee */
.mp-land path{fill:#EDE6D6}                /* the rest of the peninsula  */
.mp-service path{fill:#D9CBA8;fill-opacity:.85}
.mp-lines path{fill:none;vector-effect:non-scaling-stroke}
.mp-land-line path{stroke:#80663959;stroke-width:1}
.mp-svc-line path{stroke:var(--clay);stroke-width:1.6}

.mp-lbl{
  font-family:var(--font-ui);font-size:15px;font-weight:600;
  letter-spacing:.14em;fill:#4a474399;text-anchor:middle;
  paint-order:stroke;stroke:#ede6d6;stroke-width:3px;stroke-linejoin:round;
}
.mp-sea{fill:#4a6b7a99;stroke:#c3d5dc;writing-mode:vertical-rl;letter-spacing:.2em}

.mp-inset-bg{fill:#faf8f4e0;stroke:#8066393d;stroke-width:1}
.mp-inset-state{fill:#d9cba8;stroke:#806639;stroke-width:1.2;vector-effect:non-scaling-stroke}
.mp-inset-box{fill:none;stroke:var(--amber);stroke-width:2;vector-effect:non-scaling-stroke}
.mp-inset .mp-lbl{text-anchor:start;font-size:13px;stroke-width:0;fill:#4a4743}

/* A real map earns a bigger panel: give it the wider column on desktop. */
@media (min-width:981px){
  .area .container{grid-template-columns:.95fr 1.05fr;align-items:center}
}
@media (max-width:980px){
  .map{aspect-ratio:640 / 760}
  .mp-lbl{font-size:19px}
}

/* ===========================================================================
   PHONES: NOTHING IS CROPPED.

   Every photograph on this page sat in a box with a fixed aspect-ratio and
   `object-fit: cover`, which is a crop by design — a landscape frame in a 4/5
   tile loses its sides, a full-length portrait in a 4/3 tile loses its head and
   feet. On a phone there is no room to spare, so below 760px every figure takes
   its shape from the photograph instead of the other way round.

   The mechanism is deliberately ratio-agnostic: the figure stops declaring an
   aspect-ratio, the parallax wrapper leaves the flow, and the <img> gets
   `height:auto`. The image's own proportions then set the figure's height, so
   this needs no per-photo numbers and cannot drift out of step with the files.

   `transform: none !important` is load-bearing. The parallax sets `scale(1.12)`
   and a yPercent tween as INLINE styles on .ph-par; once that element is in the
   flow, the scale would overflow a figure that is still `overflow:hidden` and
   quietly crop 12% back off — the exact thing this block exists to stop. A
   stylesheet !important beats an inline style, and ys() also skips building the
   tweens at this width.
   =========================================================================== */
@media (max-width: 760px){
  .ph{aspect-ratio:auto!important;min-height:0!important;height:auto!important}
  .ph-par{position:static!important;transform:none!important;will-change:auto;inset:auto}
  .ph img{position:static;width:100%;height:auto!important;object-fit:contain;transform:none!important}

  /* the session cards: photograph on top, at its own shape, copy beneath */
  .svc{aspect-ratio:auto;display:flex;flex-direction:column}
  .svc .ph{position:relative;inset:auto;aspect-ratio:auto!important}
  .svc .ph img{filter:none}

  /* the blocks that had hand-set ratios */
  .detail .ph,.voices .ph,.join .ph,.side .ph{aspect-ratio:auto!important}
  .join .ph{order:-1}

  /* the two films are 9:16 — give them the whole frame rather than a band */
  .hero-media{height:auto!important;aspect-ratio:720 / 1280}
  .how-frame{aspect-ratio:720 / 1280}

  /* The gallery reads by orientation: two upright frames to a row, and a
     landscape frame gets the row to itself. Each tile keeps its own ratio, so
     a row of two portraits can be slightly uneven — they are top-aligned
     rather than stretched, because stretching is cropping by another name.

     `dense` matters here. A landscape spans both columns, so whenever one
     follows an odd number of portraits it drops to the next row and leaves a
     hole beside the portrait above it. Dense packing pulls a later upright
     frame into that hole. It can move a photograph a slot earlier than its
     category neighbours, which nothing on screen labels, and the alternative
     is a gallery full of gaps. */
  .gal-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:10px;
            align-items:start;grid-auto-flow:row dense}
  .gal-item{margin:0}
  .gal-item[data-orient="landscape"]{grid-column:1 / -1}
  .gal-item.is-out{display:none}
  .gal-open{aspect-ratio:var(--ar);height:auto}
  .gal-open img{height:auto;object-fit:contain}
}

/* Upright frames stay two to a row at every phone width. One per row looks
   generous until you add it up — 22 portraits at full width is most of the
   scroll — and every tile opens full-screen in the lightbox anyway, which is
   where a photograph is actually judged. Landscape frames already get a full
   row, which is where the breathing room goes. */
