/* Carpet Cleaning Wizards, shared shell stylesheet.
   Field Record design language: parchment paper, aubergine ink, orchid and gold marks.
   Sections: 1 tokens, 2 base, 3 header and mobile sheet, 4 page head and layout,
   5 buttons and badges, 6 cards, 7 records and sliders, 8 ledger, 9 gallery and lightbox,
   10 roommap, 11 voices, 12 estimate form and booking modal, 13 consent slip, 14 chat,
   15 accessibility widget, 16 footer, 17 prose and page primitives, 18 utilities and motion,
   19 reduced motion, 20 print. Homepage one offs live in home.css. */

/* ============================================================ 1 tokens */
@font-face{font-family:"BSD fallback";src:local("Arial Narrow"),local("Impact");size-adjust:104%;ascent-override:86%;descent-override:20%;line-gap-override:0%}
@font-face{font-family:"Hanken fallback";src:local("Segoe UI"),local("Arial");size-adjust:99%;ascent-override:95%;descent-override:24%;line-gap-override:0%}
:root{
  --ink:#271a36; --ink-2:#312142; --ink-3:#3d2a50;
  --ink-lift:radial-gradient(135% 125% at 12% -12%,#381f52 0%,#271a36 52%,#1d1229 100%);
  --paper:#f7f1ea; --paper-2:#efe6da; --paper-3:#fffdf9;
  --mark-700:#7a1f82; --mark-600:#8b2893; --mark-400:#d377da; --mark-glow:#e7a4ef;
  /* gold-2 is a rule and star colour: on parchment it reads 2.71:1, so text on paper uses gold-ink */
  --gold:#e2a53a; --gold-2:#c8862a; --gold-soft:#f4d79a; --gold-ink:#8a5a12;
  --foil-gold:linear-gradient(176deg,#f7dfa4 0%,#e2a53a 46%,#b9781f 100%);
  --on-ink:#f7f1ea; --on-ink-2:#c8b7cf; --on-ink-faint:#ad98b5;
  --border:#e3d7c8; --field-border:#8b8094; --muted:#665160; --err:#b3261e; --ok:#146c40;
  --hair:#ffffff1a; --hair-ink:#271a3612; --line:#b9a68f4d; --hair-gold:#e2a53a3d;
  --focus:#b23fbd;
  --s2:8px; --s3:16px; --s4:24px; --s5:32px; --s6:48px; --s7:64px; --s8:96px;
  --section:clamp(88px,12vw,168px);
  --section-sm:clamp(56px,8vw,104px);
  --pad:clamp(22px,5vw,84px);
  --header-h:80px;
  --d1:clamp(3.3rem,9.4vw,8.2rem); --d2:clamp(2.5rem,5.6vw,4.3rem);
  --d3:clamp(1.9rem,3.9vw,3rem); --d4:clamp(2.1rem,4.6vw,3.5rem);
  --t-lead:clamp(1.08rem,1.4vw,1.22rem); --t-body:1.0625rem;
  --t-small:.9rem; --t-meta:.78rem; --t-label:.72rem;
  --shadow-1:0 1px 2px rgba(20,13,24,.12);
  --shadow-2:0 2px 6px rgba(20,13,24,.12),0 16px 38px -16px rgba(20,13,24,.5);
  --shadow-float:0 30px 70px -30px rgba(15,8,20,.72);
  --glass-bg:rgba(35,25,48,.86); --glass-blur:blur(12px) saturate(140%);
  --glass-border:1px solid rgba(255,255,255,.09); --glass-top:inset 0 1px 0 rgba(255,255,255,.12);
  --ease-out:cubic-bezier(.16,.84,.44,1);
  --t-fast:140ms; --t:200ms; --t-slow:300ms;
  --font-display:"Big Shoulders Display","BSD fallback",Impact,"Arial Narrow",sans-serif;
  --font-serif:"Fraunces",Georgia,"Times New Roman",serif;
  --font-text:"Hanken Grotesk","Hanken fallback",system-ui,"Segoe UI",Arial,sans-serif;
  --font-mono:"Spline Sans Mono",ui-monospace,"Cascadia Code",Consolas,monospace;
  --grain:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.82' numOctaves='3'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
  --check:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 6 9 17l-5-5'/%3E%3C/svg%3E");
}
/* accessibility menu states (stored in localStorage "ax") */
html.ax-text-1{font-size:112.5%} html.ax-text-2{font-size:125%}
html.ax-contrast{ --on-ink-2:#fff; --on-ink-faint:#f2e6d5; --muted:#2a1c25; --mark-400:#ec9bf3; --gold:#f4c657; --gold-ink:#6f4708; --border:#8a7566; --field-border:#6f5a49 }
html.ax-links a:not(.btn):not(.brand){ text-decoration:underline!important; text-underline-offset:3px }
html.ax-nomotion *{ animation:none!important; transition:none!important; scroll-behavior:auto!important }
html.ax-readable{ --font-text:Arial,"Segoe UI",sans-serif }
html.ax-readable body,html.ax-readable p,html.ax-readable li,html.ax-readable a,html.ax-readable .row__d,html.ax-readable .msg{ letter-spacing:.03em!important;word-spacing:.12em;line-height:1.85 }
html.ax-cursor,html.ax-cursor *{ cursor:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='38' height='38' viewBox='0 0 24 24'%3E%3Cpath fill='%23140d18' stroke='%23ffffff' stroke-width='1.3' d='M5 2l15 8-7 1.6-3 6.4z'/%3E%3C/svg%3E") 5 3,auto !important }

/* ============================================================ 2 base */
*{box-sizing:border-box}
html{scroll-behavior:smooth;scroll-padding-top:calc(var(--header-h) + 12px)}
body{margin:0;background:var(--paper);color:var(--ink);font-family:var(--font-text);
  font-size:var(--t-body);line-height:1.55;letter-spacing:-.006em;-webkit-font-smoothing:antialiased;
  overflow-x:hidden;text-rendering:optimizeLegibility;font-kerning:normal}
img{display:block;max-width:100%;height:auto}
a{color:inherit}
h1,h2,h3,h4{margin:0;font-optical-sizing:auto}
svg{flex:none}
::selection{background:rgba(122,31,130,.22);color:inherit;text-shadow:none}
:focus-visible{outline:2px solid var(--focus);outline-offset:3px;border-radius:7px;box-shadow:0 0 0 5px rgba(224,139,234,.18)}
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.skip{position:fixed;top:8px;left:8px;z-index:200;background:var(--ink);color:#fff;padding:11px 17px;border-radius:6px;font-weight:600;text-decoration:none;transform:translateY(-180%);transition:transform .2s var(--ease-out)}
.skip:focus{transform:none}
.foil{background:var(--foil-gold);-webkit-background-clip:text;background-clip:text;color:transparent}
.eyebrow{font-family:var(--font-text);font-weight:600;text-transform:uppercase;letter-spacing:.24em;
  font-size:var(--t-label);color:var(--mark-600);display:inline-flex;align-items:center;gap:.9em;line-height:1.4;margin:0}
.eyebrow::before{content:"";width:26px;height:1px;background:currentColor;opacity:.55;flex:none}
/* one eyebrow on parchment: the deep orchid at the label size. The light orchid is an ink board
   device only, so a section head on paper can never print it (it falls to 2.5:1 there). */
.eyebrow--ink{color:var(--mark-600)}
.section--ink .eyebrow,.page-head .eyebrow,.record .eyebrow,.map .eyebrow,.est .eyebrow,
.band .eyebrow,.foot .eyebrow,main>header.hero .eyebrow,.callout--ink .eyebrow{color:var(--mark-400)}
.stars{color:var(--gold-2);letter-spacing:.14em}
.mono{font-family:var(--font-text);font-variant-numeric:tabular-nums lining-nums}
.grain{position:relative}
.grain::before{content:"";position:absolute;inset:0;z-index:0;pointer-events:none;opacity:.9;mix-blend-mode:soft-light;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.82' numOctaves='3' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='.05'/%3E%3C/svg%3E")}
/* a small brand touch: the carpet cursor */
body{cursor:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAgCAYAAABgrToAAAAIh0lEQVR42u1Ya3CU5RV+zvt9e9/NZrMbbkmQIBBJgBjkopU2C1VAhqJVEg3e0HasVaudqQVvuLvSDiOxOgFbKl5bHbVJEVGccgtklQKagFBCAnJJwoZcNglJNnvf7/tOf6Az/rAQgrb94fn/nvc5z3nPec55ge/t0kz6Np2xh4Xb7Zai/iiVFJdI7qU18Pt9/H8RaUlJ5TcGy8x0KX4v6bDH4xFuuMVs32wVAPMRHv+PV6tLW/sC+VnOnLYFi368ln5Ip5mZiOi/xyQzU+XXGDPo9Nizou6Zu669P7po6u08O/cmnj5qLq9avCbAn3PWLs8umT0shnKXfLEHKksqJSJSAajczLlHK08s7A+Ff/Lk333X26zpsMOl7Ouopf5YKKXt0bIL3570iwXlc56umF9hAJD4TgFyJUtUSiozZ9Z5D3uWPeC5u6Ony5qbkYu0NIdaaC8S5duelU3penhveEz8YeuL6umOwFLeyjU0j3YCEATSGIPPtrhocB/wrLV3vlbr21j+oClqsT5a9IiSZR2hWo1Wqam9mRKUhNPkRNnUW2l0ZpZoDrbmPFz+VPXx1YGVsiRpi7FYYgy+cMSg01pKKr/HxSteXr1t6/6dlz0+/RH1rillcNmd8t7AZ5JggXA8DIWTiCXjOBE8idLCW2hpfplqS1jVx6tWPvXZU/UvbhAbVJQMnhgxmN5WWlWq8XHO+d1bFRvqTzWaXl24FhaTORpWw/0Hggexr62OncKFg20HYDQaOJKMYH/z57jjitsQjcalB2b8TJrpKFRWb1nzYNOqwCNURWrlf2hLQ2JQFhJXlm9e++mxA05P8bJkp9b5fDQV63NaXOaNDR9yYc6V1H22By2xJtZUprzsfP7o6FacjfZCk5RAa+iMUla4WM0kh/rC9pee5V08rrSqVBtMZYsLptZHWuoNZeZHh3fcOHdsca/daFMGUiFNItkpQ9aFUxGcaW/DzlM7wBJIkiTsO76XOkIdmiRkCBPWyTqpMRjtxs+L7qSmztOGDe9uXQ6Aqxqq6JIAHgkeIQD4y473lho0A6674keVXYnuDydZCh/VZGVzmMMHZZapLrBX61a6NJ3QdabZzPfKQhwJDnRTR7iT5bhhhUWyTU4hWWsz2fqvGlaI6oaaxdzHGaVVpeqFCuZ8AMnn9ynMLB8K1M9xGuwwKIYyUqm4beBM0iB0xqbeFvlA2+dwWJwsk06xmA1/Dnadej0rc5i3P94d/qR5j2aQDKZ+9H5AFt4RS8ViU0dM4Z5wb3rrC11Xn9PI85MkziNj5yKrxvCWs4GcCc7LYZPtaULIxqSWVCfaJi3a0/TZpObeJriES1JVVd8bDnksacMf6+w5W8Eq23a37BVmnZnTZfsoMaD3JlKpUeMyclVoYP/xvYUAUBOsoSE1ai+88MGHU9s7MyY7C0wH2+ux5cQ2znVMSB9hcmJN1zqtpsVPs7KvpfHOPGS0u/hMfxslObbqLHpBksy17bW0fPvTmD5q2jRF03C0p5EVTiHfmU8GTef6VpTEJll1QpOw6dhmnpRZQG8efI2JJbpyWJF4YsaTyLbm4EhnAzeprTTRng9mDQOpAQRTQWqPteGd+r/h7cPvaMOsw0SWKYta+s5g/MgmzMyapgeAmqEC9MILAMi8zNJdt2G/kmXLlhfkLOCJaRPIZR4OhVV83LoHte37YwOpAZNKGojAGmuIpxIkky5u0Jm0HH26QZAkKWoS3dFemIxmHArW40hb4wgAqPF7hwbQ5/NpHngE7kNg+l+v+ueq/c/NOtT1L9Wst0ndsW7i5ABDh52yyaoIIVqFJCIyURdAOqEnJaJGxwsSkc6B4G1gshMJEiSgJvvUa7Kuo7G23G0A4C72wu+fPcQUF7sFESl1SxrXt4Y6itc3vChF1BiIBEtGh5BlmmAUciMERggSUFVttMacnVI0VUiyqmnaeAFdBn85CjIz9Dq7oTB9CkghHYHgdbs1n39IAysTQOBdbHjo4SeObji9cZ9iTLyVTGjF0UTy1zpZvEGCjmkq7kgkkwmAvxBCvkZTlXpmzk2z22qY+aREuCwWT+aBhFMQQkKSN0fCPcY7xt29+s3lax10D/UxmAgXOdB+pZWbFmyfX5x1UxLAZGta7hMAxgCWMAA3gGyQ/ZO8yVcvuffe+4vsrrFv1tX5R9665J6FBttIH4AZgHXFly6vBzA2zTxmnmRJf2ne6FuTJ5ecnnxuXSiRLjrFX6lIc8+p3Lgaa0pzuSaqSfx+2bIVaXs/rdNuuWXh8zpZHqjeufvyOXNmrVNSKVN+/sTUK6+9/9O517ljGekOV0FB3gO1dYeEKzMjb0pBXl08kkj3rnx+fqi9eUuvtffm6kDNDACH84P5dNEAC4YVMACMMWcf00M/4ZnyZ1Y59Gnx4Nnu5QuGX4/GYyeKWGX0hwbU8uf+xKFQRMnNzTE3t7Ri46YtxtHZo5IdnV2ulKqgoeGL21sCbbcbLAIrV/02pHfIWevuezvNopmDX7/rYpcm8sBD3kqv/NBjyz5ucpyZSXoNoeP9sFN6ezyRsO0IfVgNnfF9k9U2XmM2JSIRRW8x9stC0qL9ESfUUIdduvzRspE3xjqVbu5L9IwxjrORzqxDZouj6ZW7K6bAh8g5EN/8Bs8rM1893pZftjhe3/ruffFURJ4/Yd624rIfHP3j+vVPvt5S9ZtAoqleFkadxlpKJsmSUhUCkaoXeiQ5Fp9mmVr48MR75s391dzdJ98KjH3501cXgWGdX3T1+tmbbmi+UIEMee2smFWR2dndt7Iv2pepCYAByJA0BhODIZOclCTJ6DI5Pk7dHFnj8/m0/0TAJS9NDCZvsfdcpfmheeFl2k1dAO4fVDSHz7UtD7yE4i8HFD80Amnf2eLOYPLCK9VcQE3dcMMHn/L9L9P/yv4N9pwGyFyPvDIAAAAASUVORK5CYII=") 4 4, auto}
a,button,label,summary,[role=button]{cursor:pointer}
input,textarea,select{cursor:text}
input[type=checkbox],input[type=radio],input[type=file],.svcs label{cursor:pointer}

/* ============================================================ 3 header and mobile sheet */
.hdr{position:fixed;top:0;left:0;right:0;z-index:60;transition:background .3s ease,backdrop-filter .3s ease,box-shadow .3s ease}
.hdr.solid,body.page--blog-post .hdr{background:var(--glass-bg);backdrop-filter:var(--glass-blur);border-bottom:var(--glass-border);box-shadow:var(--glass-top)}
.nav{display:flex;align-items:center;justify-content:space-between;padding:var(--s3) var(--pad);min-height:var(--header-h)}
.brand{display:flex;align-items:center;flex:none;text-decoration:none}
.brand img{height:48px;width:auto;display:block}
.nav__links{display:flex;gap:2px;align-items:center}
.nav__links>a,.dd>button{color:rgba(255,255,255,.82);text-decoration:none;font-family:var(--font-text);
  font-size:.92rem;font-weight:500;background:none;border:0;cursor:pointer;padding:9px 13px;border-radius:8px;
  display:inline-flex;align-items:center;gap:5px;transition:color var(--t) ease,background var(--t) ease;position:relative;
  white-space:nowrap}
.nav__links>a:hover,.dd>button:hover,.dd:focus-within>button,.dd.open>button{color:#fff;background:rgba(255,255,255,.08)}
.nav__links>a[aria-current=page],.dd.current>button{color:#fff}
.nav__links>a::after{content:"";position:absolute;left:13px;right:13px;bottom:4px;height:1.5px;border-radius:2px;
  background:var(--gold);transform:scaleX(0);transform-origin:left;transition:transform .3s var(--ease-out)}
.nav__links>a:hover::after,.nav__links>a[aria-current=page]::after{transform:scaleX(1)}
.dd{position:relative}
.dd__menu{position:absolute;top:calc(100% + 8px);left:0;min-width:250px;background:var(--glass-bg);
  backdrop-filter:var(--glass-blur);border:var(--glass-border);border-radius:14px;padding:8px;
  box-shadow:var(--glass-top),var(--shadow-float);opacity:0;visibility:hidden;transform:translateY(-6px) scale(.98);
  transform-origin:top left;transition:opacity var(--t) var(--ease-out),transform var(--t) var(--ease-out),visibility var(--t);z-index:5}
.dd:hover .dd__menu,.dd:focus-within .dd__menu,.dd.open .dd__menu{opacity:1;visibility:visible;transform:none}
.dd.closed .dd__menu{opacity:0;visibility:hidden;transform:translateY(-6px) scale(.98)}
.dd__menu a{display:block;color:var(--on-ink-2);text-decoration:none;font-size:.9rem;padding:9px 12px;border-radius:9px;transition:background .15s,color .15s}
.dd__menu a:hover,.dd__menu a[aria-current=page]{background:rgba(205,104,213,.16);color:#fff}
.dd__menu a.dd__all{margin-top:4px;border-top:1px solid var(--hair);border-radius:0 0 9px 9px;padding-top:11px;color:var(--gold-soft);font-weight:600}
.nav__cta{display:flex;align-items:center;gap:var(--s3);flex:none}
.nav__phone{color:#fff;text-decoration:none;font-weight:700;display:inline-flex;gap:8px;align-items:center;
  font-family:var(--font-text);font-size:.95rem;font-variant-numeric:tabular-nums;padding:9px 15px;border-radius:999px;
  border:1px solid var(--hair);background:rgba(255,255,255,.05);transition:background var(--t),border-color var(--t)}
.nav__phone:hover{background:rgba(255,255,255,.1);border-color:var(--mark-400)}
.nav__cta .btn{padding:11px 20px;font-size:.92rem}
.burger{display:none;background:none;border:0;color:#fff;cursor:pointer;padding:8px;min-width:44px;min-height:44px;align-items:center;justify-content:center}
/* Spanish labels run longer than the English ones, so the row loses its padding before it loses its baseline */
@media(max-width:1280px){ .nav__links>a,.dd>button{padding-inline:9px;font-size:.88rem} .nav__links>a::after{left:9px;right:9px} .nav__cta{gap:10px} }
@media(max-width:1140px){ .nav__links,.nav__phone{display:none} .burger{display:inline-flex} }
@media(max-width:520px){ .nav__cta .btn{display:none} }
.msheet{position:fixed;inset:0;z-index:70;background:rgba(20,13,24,.97);backdrop-filter:blur(20px);
  display:flex;flex-direction:column;padding:80px var(--pad) 40px;gap:2px;transform:translateY(-100%);
  transition:transform .4s var(--ease-out),visibility .4s;overflow-y:auto;visibility:hidden}
.msheet.open{transform:none;visibility:visible}
.msheet a{color:#fff;text-decoration:none;font-family:var(--font-display);font-weight:600;font-size:1.7rem;padding:10px 0;border-bottom:1px solid var(--hair)}
.msheet a[aria-current=page]{color:var(--gold-soft)}
.msheet .msheet__group{font-family:var(--font-display);font-weight:600;font-size:1.7rem;color:#fff;padding:10px 0 4px;border-bottom:1px solid var(--hair);margin:0}
.msheet .sub{font-family:var(--font-text);font-size:1rem;font-weight:500;color:var(--on-ink-2);padding:7px 0 7px 16px;border:0}
.msheet .msheet__cta{margin-top:18px;display:flex;flex-wrap:wrap;gap:10px}
.msheet .msheet__cta .btn{font-family:var(--font-text);font-size:1rem;border-bottom:0;padding:15px 22px}
.msheet .msheet__cta--top{margin:64px 0 22px;padding-bottom:22px;border-bottom:1px solid var(--hair)}
.msheet .msheet__cta--top .btn{flex-basis:100%;justify-content:center;text-align:center}
.msheet__close{position:absolute;top:18px;right:var(--pad);background:none;border:0;color:#fff;cursor:pointer;padding:8px;min-width:44px;min-height:44px}
.progress{position:fixed;top:0;left:0;height:2px;width:100%;z-index:100;background:var(--gold);transform:scaleX(0);transform-origin:left;pointer-events:none}

/* The header carries two calls to action, moved here from templates/partials/header.html. Between
   1141px, where the nav links are still shown, and the widths below, the row runs out of room, so the
   number steps aside: it is still one tap away in the page head CTA row, the footer band, the thumb bar
   and the mobile menu. The Spanish labels are longer, so Spanish gives way earlier. */
@media(max-width:1260px){
  .nav__phone{display:none}
  .nav__cta .btn{padding-inline:15px;font-size:.88rem}
}
@media(max-width:1400px){ .page--lang-es .nav__phone{display:none} }
@media(max-width:1400px) and (min-width:1261px){ .page--lang-es .nav__cta .btn{padding-inline:16px} }

/* ============================================================ 4 page head and layout */
.wrap{max-width:1180px;margin:0 auto;padding-inline:var(--pad)}
.wrap--narrow{max-width:860px}
.section{padding-block:var(--section-sm)}
.section--paper2{background:var(--paper-2)}
.section--ink{background:var(--ink-lift);color:var(--on-ink)}
.section--ink .eyebrow{color:var(--mark-400)}
.section--ink .head h2{color:#fff}
.section--ink .head p{color:var(--on-ink-2)}
.head{padding:var(--section) var(--pad) clamp(30px,4vw,48px);max-width:1040px}
.head--tight{padding-top:var(--section-sm);padding-bottom:clamp(22px,3vw,34px)}
.head--flush{padding:0 0 clamp(22px,3vw,34px);max-width:none}
@media(min-width:900px){ .head--flush{padding-inline-start:0} }
.head .eyebrow{margin:0}
.head h2{font-family:var(--font-display);font-weight:700;font-variation-settings:"opsz" 62;line-height:.9;
  letter-spacing:-.02em;font-size:var(--d2);margin:14px 0 0;text-wrap:balance}
.head p{color:var(--muted);font-size:var(--t-lead);margin:16px 0 0;max-width:60ch;line-height:1.5;text-wrap:pretty}
@media(min-width:900px){ .head,.voices__lead{padding-inline-start:calc(var(--pad) + clamp(0px,5vw,96px))} }
/* the page head: every inner page opens on the ink board, the way the homepage record does */
.page-head{position:relative;z-index:2;isolation:isolate;background:var(--ink-lift);color:var(--on-ink);
  padding:calc(var(--header-h) + clamp(28px,5vw,64px)) var(--pad) clamp(40px,6vw,72px);border-bottom:1px solid var(--hair-gold)}
.page-head>*{position:relative;z-index:1}
.page-head__in{max-width:1180px;margin:0 auto}
.page-head .breadcrumbs{margin-bottom:clamp(18px,3vw,30px)}
.page-head .eyebrow{color:var(--mark-400)}
.page-head h1{font-family:var(--font-display);font-weight:800;font-variation-settings:"opsz" 72;line-height:.88;
  letter-spacing:-.03em;font-size:clamp(2.7rem,6.2vw,5.6rem);color:#fff;margin:16px 0 0;max-width:16ch;text-wrap:balance}
.page-head h1 em{font-family:var(--font-serif);font-style:italic;font-weight:500;font-variation-settings:"opsz" 96;letter-spacing:-.01em}
.page-head .lead{color:var(--on-ink-2);font-size:var(--t-lead);max-width:62ch;margin:22px 0 0;line-height:1.55;letter-spacing:-.009em;text-wrap:pretty}
.page-head__meta{display:flex;flex-wrap:wrap;gap:8px 22px;margin:26px 0 0;font-family:var(--font-mono);font-size:.7rem;letter-spacing:.12em;text-transform:uppercase;color:var(--on-ink-faint)}
.page-head__meta b{color:var(--gold-soft);font-weight:600}
.page-head__cta{display:flex;gap:12px;flex-wrap:wrap;align-items:center;margin-top:28px}
.page-head__cta .phone{color:#fff;text-decoration:none;font-family:var(--font-text);font-size:.85rem;font-variant-numeric:tabular-nums;opacity:.9}
.page-head__grid{display:grid;grid-template-columns:minmax(0,1.2fr) minmax(280px,.8fr);gap:clamp(28px,4vw,64px);align-items:end}
@media(max-width:820px){ .page-head__grid{grid-template-columns:1fr} }
/* the record tab hung off the bottom edge of the board */
.page-head__tab{position:absolute;z-index:3;left:var(--pad);bottom:0;transform:translateY(50%);font-family:var(--font-mono);font-size:.62rem;font-weight:700;
  letter-spacing:.14em;text-transform:uppercase;white-space:nowrap;color:var(--paper);background:var(--ink);padding:7px 11px;border-radius:3px;
  box-shadow:0 0 0 1px var(--gold),0 10px 20px -10px rgba(0,0,0,.7);pointer-events:none;margin:0}
.page-head + *{padding-top:calc(var(--section-sm) + 10px)}
/* the framed photograph on a parchment mat, used by page heads and figures */
.mat{position:relative;padding:12px;background:var(--paper);border-radius:3px;
  box-shadow:0 0 0 1px var(--hair-gold),0 44px 90px -34px rgba(0,0,0,.8),0 14px 30px -14px rgba(0,0,0,.6)}
.mat::before{content:"";position:absolute;inset:-11px;pointer-events:none;--tick:linear-gradient(var(--gold),var(--gold));
  background:var(--tick) 0 0/16px 1px,var(--tick) 0 0/1px 16px,var(--tick) 100% 0/16px 1px,var(--tick) 100% 0/1px 16px,
    var(--tick) 0 100%/16px 1px,var(--tick) 0 100%/1px 16px,var(--tick) 100% 100%/16px 1px,var(--tick) 100% 100%/1px 16px;background-repeat:no-repeat}
.mat img{width:100%;height:auto;display:block}
.mat__cap{position:absolute;z-index:8;left:18px;bottom:0;transform:translateY(50%);font-family:var(--font-mono);font-size:.62rem;font-weight:700;
  letter-spacing:.14em;text-transform:uppercase;white-space:nowrap;color:var(--paper);background:var(--ink);padding:7px 11px;border-radius:3px;
  box-shadow:0 0 0 1px var(--gold),0 10px 20px -10px rgba(0,0,0,.7);pointer-events:none;margin:0}

/* ============================================================ 5 buttons and badges */
.btn{display:inline-flex;align-items:center;gap:.5em;font-weight:600;font-size:1rem;border-radius:6px;
  padding:15px 26px;border:1px solid transparent;cursor:pointer;text-decoration:none;font-family:var(--font-text);line-height:1.2;
  transition:transform var(--t) var(--ease-out),background var(--t) ease,border-color var(--t) ease,box-shadow var(--t) ease}
.btn--solid{background:var(--mark-700);color:#fff;box-shadow:inset 0 0 0 1px rgba(0,0,0,.22)}
.btn--solid:hover{background:var(--mark-600);transform:translateY(-1px)}
.btn--solid:active{transform:translateY(0);box-shadow:inset 0 2px 7px rgba(0,0,0,.4)}
.btn--ghost{background:rgba(255,255,255,.05);color:#fff;border-color:rgba(255,255,255,.34)}
.btn--ghost:hover{border-color:var(--gold);background:rgba(255,255,255,.1)}
.btn--dark{background:var(--ink);color:#fff}
.btn--dark:hover{background:var(--ink-3)}
.btn--paper{background:var(--paper);color:var(--ink);border-color:var(--ink)}
.btn--paper:hover{background:#fff}
.btn--gold{background:var(--gold);color:var(--ink);box-shadow:inset 0 1px 0 rgba(255,255,255,.45)}
.btn--gold:hover{background:var(--gold-soft)}
.btn--sm{padding:10px 16px;font-size:.88rem}
.btn:active{transform:scale(.985)}
.btn[disabled],.btn[aria-disabled=true]{opacity:.6;cursor:progress;transform:none}
/* the booking CTA row (templates/partials/cta-row.html): the estimate button, the book button
   and the number, in that order, wherever the page asks for the job. The head variant reuses
   .page-head__cta and the band variant reuses .band .cta, so neither changes what it looked like. */
.ctarow{display:flex;gap:12px;flex-wrap:wrap;align-items:center}
.ctarow--sm{gap:10px;margin:0}
.ctarow>.phone{text-decoration:none;font-family:var(--font-text);font-size:.85rem;font-variant-numeric:tabular-nums;opacity:.9}
.ctarow>.phone:hover{opacity:1}
.band .ctarow>.phone{color:var(--on-ink)}
/* the spacing the hand written wrappers used to carry. The small rows sit inside a flex
   column card (the FAQ slip, the 404 file card) whose own gap already spaces them. */
.page-head .ctarow:not(.ctarow--sm){margin-top:28px}
.callout .ctarow{margin-top:16px}
.ts-filed .ctarow{margin-top:22px}
.badge{display:inline-flex;align-items:center;gap:6px;font-family:var(--font-mono);font-size:.62rem;font-weight:700;letter-spacing:.14em;text-transform:uppercase;
  color:var(--ink);background:var(--paper);border:1px solid var(--gold);padding:5px 9px;border-radius:3px;line-height:1.2;white-space:nowrap}
.badge--ink{background:var(--ink);color:var(--paper);border-color:var(--gold)}
.badge--soft{border-color:var(--border);color:var(--muted)}
.badge--gold{background:var(--gold);color:var(--ink);border-color:var(--gold-2)}
.gbadge{display:inline-flex;align-items:center;gap:10px;text-decoration:none;color:var(--muted);font-size:.9rem;font-weight:600;
  background:#fff;border:1px solid var(--border);border-radius:999px;padding:9px 17px 9px 13px;box-shadow:var(--shadow-1);margin-bottom:22px;transition:box-shadow var(--t) var(--ease-out),transform var(--t) var(--ease-out)}
.gbadge:hover{box-shadow:var(--shadow-2);transform:translateY(-1px)}
.gbadge svg{width:20px;height:20px}
.gbadge b{color:var(--ink);font-weight:700}

/* ============================================================ 6 cards */
.cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,270px),1fr));gap:clamp(14px,2vw,22px)}
.cards--3{grid-template-columns:repeat(auto-fill,minmax(min(100%,300px),1fr))}
.card{position:relative;display:flex;flex-direction:column;gap:10px;background:var(--paper-3);border:1px solid var(--border);border-radius:5px;padding:clamp(18px,2.4vw,26px);
  box-shadow:var(--shadow-1);text-decoration:none;color:inherit;overflow:hidden;
  transition:transform var(--t-slow) var(--ease-out),box-shadow var(--t-slow) var(--ease-out),border-color var(--t)}
.card::before{content:"";position:absolute;top:0;left:0;right:0;height:3px;background:var(--ink);transition:background var(--t)}
.card:hover{transform:translateY(-3px);box-shadow:var(--shadow-2);border-color:#d5c6b2}
.card:hover::before{background:var(--mark-400)}
.card__n{font-family:var(--font-mono);font-size:.64rem;letter-spacing:.14em;text-transform:uppercase;color:var(--gold-ink);font-weight:600}
.card__t{font-family:var(--font-display);font-weight:700;font-variation-settings:"opsz" 40;font-size:clamp(1.45rem,2.2vw,1.9rem);line-height:.96;letter-spacing:-.015em;color:var(--ink)}
.card__t a{color:inherit;text-decoration:none}
.card__t a:hover{color:var(--mark-700)}
.card__d{color:var(--muted);font-size:.97rem;margin:0;text-wrap:pretty}
.card__img{margin:-1px -1px 6px;border-radius:4px 4px 0 0;overflow:hidden;aspect-ratio:3/2;background:var(--paper-2)}
.card__img img{width:100%;height:100%;object-fit:cover;filter:saturate(.92) contrast(1.04);transition:transform .5s var(--ease-out)}
.card:hover .card__img img{transform:scale(1.04)}
.card__go{margin-top:auto;display:inline-flex;align-items:center;gap:7px;color:var(--mark-700);font-weight:700;font-size:.88rem;padding-top:6px}
.card__go svg{width:14px;height:14px;transition:transform var(--t) var(--ease-out)}
.card:hover .card__go svg{transform:translateX(3px)}
.card--ink{background:var(--ink);color:var(--on-ink);border-color:var(--ink-3)}
.card--ink .card__t{color:#fff} .card--ink .card__d{color:var(--on-ink-2)} .card--ink .card__go{color:var(--gold-soft)}
.card--ink::before{background:var(--gold)}

/* ============================================================ 7 records and sliders */
.record{position:relative;background:var(--ink-lift);color:var(--on-ink);padding-bottom:clamp(60px,7vw,96px)}
.record::before,.map::before,.est::before{content:"";position:absolute;top:0;left:0;right:0;height:1px;z-index:3;
  background:linear-gradient(90deg,transparent,rgba(205,104,213,.35),transparent)}
.record>*{position:relative;z-index:1}
.record .head h2{color:#fff}
.record .head p{color:var(--on-ink-2)}
.record__ba{position:relative;margin:0 var(--pad);border-radius:18px;overflow:hidden;--pos:50%;
  box-shadow:var(--shadow-float),inset 0 0 0 1px rgba(255,255,255,.12),inset 0 2px 30px rgba(0,0,0,.32);touch-action:pan-y;background:#0f0812;cursor:ew-resize}
.record__ba img{position:absolute;inset:0;width:100%;height:100%;object-fit:contain}
.record__ba .after{z-index:1}
.record__ba .before{z-index:2;clip-path:inset(0 calc(100% - var(--pos)) 0 0)}
.record__ba::after{content:"";position:absolute;inset:0;z-index:3;pointer-events:none;border-radius:inherit;
  background:radial-gradient(120% 120% at 50% 40%,transparent 58%,rgba(0,0,0,.2))}
.record__ba .l{position:absolute;top:0;bottom:0;left:var(--pos);width:2px;background:rgba(255,255,255,.9);z-index:4;transform:translateX(-1px)}
.record__ba .k{position:absolute;top:50%;left:var(--pos);z-index:5;width:48px;height:48px;color:var(--mark-700);transform:translate(-50%,-50%);
  border-radius:50%;background:#fff;display:grid;place-items:center;cursor:ew-resize;border:0;padding:0;box-shadow:0 10px 26px -6px rgba(15,8,20,.7),0 0 0 5px rgba(255,255,255,.14);transition:transform var(--t) var(--ease-out)}
.record__ba .k.grabbing{transform:translate(-50%,-50%) scale(1.09)}
.record__ba .k:focus-visible{outline:2px solid var(--focus);outline-offset:4px}
.record__ba .cap{position:absolute;left:16px;bottom:15px;z-index:4;font-family:var(--font-text);font-size:.66rem;
  letter-spacing:.13em;text-transform:uppercase;color:#fff;background:rgba(20,13,24,.62);backdrop-filter:blur(6px);padding:8px 13px;border-radius:8px;border:var(--glass-border);margin:0}
.record__ba .pos{position:absolute;z-index:7;left:var(--pos);top:calc(50% - 48px);transform:translateX(-50%);
  font-family:var(--font-text);font-size:.68rem;color:#fff;background:rgba(20,13,24,.62);backdrop-filter:blur(4px);
  padding:5px 9px;border-radius:7px;pointer-events:none;opacity:0;transition:opacity var(--t)}
.record__ba.touched .pos{opacity:1}
.ba-tag{position:absolute;top:14px;z-index:4;font-family:var(--font-mono);font-size:.58rem;font-weight:700;letter-spacing:.16em;text-transform:uppercase;
  color:#fff;background:rgba(20,13,24,.62);backdrop-filter:blur(4px);padding:5px 9px;border-radius:5px;border:var(--glass-border);box-shadow:var(--glass-top);pointer-events:none}
.ba-before{left:14px} .ba-after{right:14px;color:var(--gold-soft)}
.ba-before::before{content:"\25C0\00a0";font-size:.5em;vertical-align:middle} .ba-after::after{content:"\00a0\25B6";font-size:.5em;vertical-align:middle}
/* the record pair: frames share a row height, each keeps its own photograph's aspect */
.record__pair{display:flex;align-items:flex-start;justify-content:center;--gap:clamp(14px,2vw,26px);gap:var(--gap);margin:0 var(--pad);container-type:inline-size;flex-wrap:wrap}
.record__pair .record__ba{margin:0;flex:none;--rowh:min(512px,calc((100cqw - var(--gap)) / 2.25));height:var(--rowh);width:calc(var(--rowh) * var(--ar,1.5))}
.record__col{flex:none;display:flex;flex-direction:column;gap:12px}
.record__note{margin:0;font-family:var(--font-mono);font-size:.64rem;letter-spacing:.12em;text-transform:uppercase;color:var(--on-ink-faint);text-align:center}
/* a single record run at page width */
.record__single{margin:0 var(--pad)}
.record__single .record__ba{margin:0 auto;max-width:900px;aspect-ratio:var(--ar,3/2)}
@media(max-width:820px){
  .record__pair{flex-direction:column;align-items:center}
  .record__pair .record__ba{height:auto;width:100%;aspect-ratio:var(--ar,1.5)}
  .record__col{width:100%;max-width:384px}
}
.record .gal__note{padding-top:26px}
.strip{display:flex;gap:14px;overflow-x:auto;padding:26px var(--pad) 8px;scroll-snap-type:x mandatory;scrollbar-width:none}
.strip::-webkit-scrollbar{display:none}
.strip figure{margin:0;flex:0 0 clamp(220px,26vw,300px);scroll-snap-align:start;position:relative}
.strip img{width:100%;aspect-ratio:4/3;object-fit:cover;border-radius:13px;filter:saturate(.9) contrast(1.04) brightness(1.01);transition:transform .5s var(--ease-out)}
.strip figure::after{content:"";position:absolute;inset:0;top:auto;height:100%;pointer-events:none;border-radius:13px;
  box-shadow:inset 0 0 0 1px rgba(255,255,255,.1);background:linear-gradient(to top,rgba(20,13,24,.22),rgba(122,31,130,.04))}
.strip figure:hover img{transform:scale(1.03)}
.strip figcaption{margin-top:11px;font-family:var(--font-text);font-size:.7rem;letter-spacing:.13em;text-transform:uppercase;color:var(--on-ink-faint)}
.strip figcaption b{color:var(--on-ink);font-weight:500}
/* ink-wipe on the dark section top lines */
.record::before,.map::before{transform:scaleX(0);transform-origin:left;transition:transform .95s var(--ease-out)}
.record.seen::before,.map.seen::before{transform:scaleX(1)}

/* ============================================================ 8 ledger */
.ledger{position:relative;background:var(--paper)}
.ledger::before{content:"";position:absolute;inset:0;z-index:0;pointer-events:none;opacity:.03;mix-blend-mode:multiply;background-image:var(--grain)}
.ledger>*{position:relative;z-index:1}
.row{display:grid;grid-template-columns:minmax(190px,1.1fr) minmax(0,1.6fr) 140px;gap:clamp(18px,3vw,44px);
  align-items:center;padding:clamp(30px,3.8vw,46px) var(--pad);text-decoration:none;color:inherit;position:relative;transition:background var(--t-slow) ease}
.row::after{content:"";position:absolute;top:0;left:var(--pad);right:var(--pad);height:1px;
  background:linear-gradient(90deg,transparent,var(--line) 6%,var(--line) 94%,transparent)}
.row::before{content:"";position:absolute;left:0;top:0;bottom:0;width:0;background:var(--mark-400);transition:width var(--t-slow) var(--ease-out)}
.row:hover{background:var(--paper-2)}
.row:hover::before{width:4px}
.row__n{font-family:var(--font-display);font-weight:700;font-variation-settings:"opsz" 40;font-size:clamp(2rem,4vw,3.2rem);
  line-height:.94;letter-spacing:-.02em;text-shadow:0 1px 0 rgba(255,255,255,.5);transition:color var(--t-slow) var(--ease-out)}
.row:hover .row__n{color:var(--mark-700)}
.row__d{color:var(--muted);font-size:1.02rem;max-width:52ch;text-wrap:pretty}
.row__t{position:relative;width:140px;height:90px;border-radius:11px;overflow:hidden;box-shadow:var(--shadow-2)}
.row__t img{width:100%;height:100%;object-fit:cover;filter:saturate(.9) contrast(1.04) brightness(1.01);transition:transform .45s var(--ease-out)}
.row__t::after{content:"";position:absolute;inset:0;pointer-events:none;border-radius:inherit;
  box-shadow:inset 0 0 0 1px rgba(255,255,255,.1);background:linear-gradient(to top,rgba(20,13,24,.22),rgba(122,31,130,.04))}
.row:hover .row__t img{transform:scale(1.06)}
.ledger .row::after{transform:scaleX(0);transform-origin:left;transition:transform .7s var(--ease-out)}
.ledger .row.in::after{transform:scaleX(1)}
@media(max-width:760px){
  .row{grid-template-columns:1fr;gap:14px}
  .row__t{width:100%;height:170px}
}

/* ============================================================ 9 gallery and lightbox */
.gallery{position:relative;background:var(--paper)}
.gallery::before{content:"";position:absolute;inset:0;z-index:0;pointer-events:none;opacity:.03;mix-blend-mode:multiply;background-image:var(--grain)}
.gallery>*{position:relative;z-index:1}
.gal__grid{display:grid;grid-template-columns:repeat(4,1fr);gap:clamp(12px,1.6vw,20px);padding:clamp(30px,4vw,46px) var(--pad) 0;max-width:1260px;margin:0 auto}
@media(max-width:900px){ .gal__grid{grid-template-columns:repeat(3,1fr)} }
@media(max-width:560px){ .gal__grid{grid-template-columns:repeat(2,1fr)} }
.gal__item{display:block;padding:0;border:0;background:#fff;cursor:pointer;position:relative;overflow:hidden;border-radius:4px;box-shadow:var(--shadow-2);text-align:left;
  transition:transform .45s var(--ease-out),box-shadow .45s var(--ease-out)}
.gal__item img{width:100%;aspect-ratio:1;object-fit:cover;display:block;filter:saturate(.96) contrast(1.03);transition:transform .5s var(--ease-out)}
.gal__item:hover img{transform:scale(1.055)}
.gal__item::after{content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;box-shadow:inset 0 0 0 1px rgba(34,19,46,.1);background:linear-gradient(to top,rgba(20,13,24,.55),transparent 42%)}
.gal__item.tilting{transition:transform 0s,box-shadow .3s var(--ease-out);box-shadow:var(--shadow-float);z-index:2}
.gal__tag{position:absolute;left:9px;bottom:8px;z-index:2;font-family:var(--font-mono);font-size:.6rem;font-weight:600;letter-spacing:.05em;text-transform:uppercase;color:#fff;max-width:calc(100% - 18px)}
.gal__tag b{color:var(--gold-soft);font-weight:700}
.gal__note{text-align:center;font-family:var(--font-mono);font-size:.72rem;letter-spacing:.1em;text-transform:uppercase;color:var(--muted);padding:24px var(--pad) 0;margin:0}
.gallery:not(.expanded) .gal__item:nth-child(n+13){display:none}
.gal__more{text-align:center;padding:30px var(--pad) 0}
.gal__more .btn{cursor:pointer;box-shadow:var(--shadow-2)}
.gal__item.rise.in{animation-name:riseGal}
@keyframes riseGal{from{opacity:0;transform:translateY(26px) scale(.965)}to{opacity:1;transform:none}}
.lb{position:fixed;inset:0;z-index:120;background:rgba(12,7,16,.95);display:none;align-items:center;justify-content:center;padding:clamp(16px,4vw,48px)}
.lb.open{display:flex}
.lb__stage{position:relative;display:flex;flex-direction:column;align-items:center;gap:12px;max-width:min(1080px,92vw)}
.lb__img{max-width:100%;max-height:78vh;object-fit:contain;border-radius:4px;box-shadow:0 30px 80px -20px #000,inset 0 0 0 1px rgba(255,255,255,.08)}
.lb__cap{font-family:var(--font-mono);font-size:.72rem;letter-spacing:.1em;text-transform:uppercase;color:var(--on-ink-2);text-align:center}
.lb__close{position:absolute;top:-46px;right:-8px;background:none;border:0;color:#fff;cursor:pointer;padding:6px;opacity:.85;min-width:44px;min-height:44px}
.lb__close:hover{opacity:1}
.lb__nav{position:fixed;top:50%;transform:translateY(-50%);background:rgba(255,255,255,.08);border:1px solid var(--hair);color:#fff;width:52px;height:52px;border-radius:50%;cursor:pointer;display:grid;place-items:center;transition:background .15s}
.lb__nav:hover{background:rgba(255,255,255,.2)}
.lb__prev{left:clamp(10px,2vw,26px)} .lb__next{right:clamp(10px,2vw,26px)}
.lb__count{position:fixed;bottom:20px;left:0;right:0;text-align:center;font-family:var(--font-mono);font-size:.7rem;color:var(--on-ink-faint);letter-spacing:.12em}
@media(max-width:560px){ .lb__nav{width:44px;height:44px} }

/* ============================================================ 10 roommap and county list */
.map{position:relative;background:var(--ink-lift);color:var(--on-ink)}
.map>*{position:relative;z-index:1}
.map ul{list-style:none;margin:0;padding:0}
.map li{display:flex;align-items:baseline;gap:clamp(16px,4vw,52px);padding:22px var(--pad);position:relative;transition:background var(--t-slow) ease,padding-left var(--t-slow) var(--ease-out)}
.map li::before{content:"";position:absolute;top:0;left:var(--pad);right:var(--pad);height:1px;background:linear-gradient(90deg,transparent,var(--hair) 6%,var(--hair) 94%,transparent);transform:scaleX(0);transform-origin:left;transition:transform .7s var(--ease-out) .05s}
.map li.in::before{transform:scaleX(1)}
.map li:hover{background:var(--ink-2);padding-left:calc(var(--pad) + 10px)}
.map__c{font-family:var(--font-display);font-weight:700;font-variation-settings:"opsz" 40;font-size:clamp(2rem,4.6vw,3.4rem);
  line-height:.92;letter-spacing:-.02em;color:#fff;flex:0 0 auto;min-width:clamp(140px,22vw,320px);text-decoration:none}
.map__c:hover{color:var(--gold-soft)}
.map__t{color:var(--on-ink-faint);font-size:.95rem}
.map__t a{color:inherit;text-decoration:none}
.map__t a:hover{color:#fff;text-decoration:underline}
.map li.rise:nth-child(2){--i:1}.map li.rise:nth-child(3){--i:2}.map li.rise:nth-child(4){--i:3}.map li.rise:nth-child(5){--i:4}.map li.rise:nth-child(6){--i:5}.map li.rise:nth-child(7){--i:6}.map li.rise:nth-child(8){--i:7}
@media(max-width:680px){ .map li{flex-direction:column;gap:6px} }
/* the service-area rug photographed in a room: a fixed 1792x1008 stage scaled to its box so the county hit overlay stays exact at every width */
.roommap{position:relative;z-index:1;margin:clamp(16px,3vw,34px) auto 0;max-width:1180px;width:calc(100% - 2*var(--pad));padding-bottom:clamp(42px,5vw,64px)}
.roommap__box{position:relative;aspect-ratio:16/9;overflow:hidden;border-radius:6px;background:#0e0a12;
  box-shadow:0 48px 78px -28px rgba(0,0,0,.72),0 10px 24px -12px rgba(0,0,0,.55)}
.roommap__stage{position:absolute;left:0;top:0;width:1792px;height:1008px;transform-origin:0 0;transform:scale(.5)}
.roommap__stage img{position:absolute;left:0;top:0;width:1792px;height:1008px;max-width:none;display:block}
.roommap__hit{position:absolute;left:0;top:0;width:1180px;height:720px;overflow:visible;transform-origin:0 0;
  transform:matrix3d(1.050847,0,0,0,-0.241121,0.672211,0,-0.000269,0,0,1,0,276,290,0,1)}
.roommap__hit path{fill:rgba(255,255,255,0);stroke:var(--gold);stroke-width:0;stroke-linejoin:round;vector-effect:non-scaling-stroke;pointer-events:fill;cursor:pointer;outline:none;
  transition:fill 180ms ease,stroke-width 180ms ease}
.roommap__hit path:hover,.roommap__hit path:focus-visible,.roommap__hit path.on{fill:rgba(255,255,255,.18);stroke-width:3px}
.roommap__card{position:absolute;z-index:3;left:0;top:0;pointer-events:none;opacity:0;visibility:hidden;transform:translateY(4px);min-width:150px;padding:10px 13px 11px;
  border-radius:4px;background:var(--paper);color:var(--ink);border:1px solid rgba(34,19,46,.28);box-shadow:inset 0 1px 0 rgba(255,255,255,.6),0 18px 34px -14px rgba(0,0,0,.65);
  transition:opacity 180ms ease,transform 180ms var(--ease-out),visibility 180ms}
.roommap__card.show{opacity:1;visibility:visible;transform:none}
.roommap__card.pin{pointer-events:auto}
.roommap__card b{display:block;font-family:var(--font-display);font-weight:800;font-variation-settings:"opsz" 40;font-size:1.45rem;line-height:1;letter-spacing:.02em;text-transform:uppercase}
.roommap__card small{display:block;margin-top:5px;font-family:var(--font-mono);font-size:.68rem;letter-spacing:.12em;text-transform:uppercase;color:var(--muted)}
.roommap__card a{display:inline-flex;align-items:center;gap:6px;margin-top:9px;color:var(--mark-700);font-weight:700;font-size:.85rem;text-decoration:none;border-bottom:1px solid var(--hair-gold)}
.roommap__card a:hover{color:var(--mark-600)}
.roommap__card a svg{width:13px;height:13px}
.roommap__cap{display:flex;flex-wrap:wrap;gap:8px 18px;align-items:center;justify-content:space-between;margin:14px 2px 0;
  font-family:var(--font-mono);font-size:.66rem;letter-spacing:.1em;text-transform:uppercase;color:var(--on-ink-faint)}
.roommap__cap a{color:var(--gold);text-decoration:none;font-weight:700;display:inline-flex;gap:7px;align-items:center}
.roommap__cap a:hover{color:var(--gold-soft)}
.roommap__cap svg{width:14px;height:14px;flex:none}
@media(max-width:760px){
  .roommap{width:100%;max-width:none;margin-top:10px}
  .roommap__box{aspect-ratio:4/3;border-radius:0}
  .roommap__cap{padding:0 var(--pad)}
}

/* ============================================================ 11 voices */
.voices{position:relative;background:var(--paper-2);padding:var(--section) 0}
.voices--tight{padding:var(--section-sm) 0}
.voices::before{content:"";position:absolute;inset:0;z-index:0;pointer-events:none;opacity:.03;mix-blend-mode:multiply;background-image:var(--grain)}
.voices>*{position:relative;z-index:1}
.voices__lead{padding:0 var(--pad);max-width:1040px}
.voices__lead .stars{color:var(--gold-2);font-size:1.15rem}
.voices blockquote{font-family:var(--font-serif);font-style:italic;font-weight:500;font-variation-settings:"opsz" 110;letter-spacing:-.008em;
  line-height:1.1;font-size:var(--d3);margin:20px 0 0;text-wrap:balance;color:var(--ink);hanging-punctuation:first;text-indent:-.4ch}
.voices cite{display:block;margin-top:24px;font-style:normal;font-weight:600;color:var(--muted);font-size:.95rem;font-variant-numeric:tabular-nums}
.voices__more{display:grid;grid-template-columns:1fr 1fr;gap:clamp(24px,4vw,60px);padding:clamp(44px,5vw,68px) var(--pad) 0;max-width:1140px}
.voices__more p{margin:0;color:var(--ink);font-size:1.06rem;line-height:1.55;text-wrap:pretty}
.voices__more blockquote{margin:0;font:inherit;color:inherit;letter-spacing:inherit;text-indent:0}
.voices__h{font-family:var(--font-display);font-weight:700;font-variation-settings:"opsz" 62;font-size:var(--d3);
  line-height:.92;letter-spacing:-.02em;color:var(--ink);margin:14px 0 12px;text-wrap:balance}
.voices__intro{color:var(--muted);max-width:62ch;margin:0 0 26px}
.voices__note{text-align:left;font-family:var(--font-mono);font-size:.72rem;letter-spacing:.1em;text-transform:uppercase;
  color:var(--muted);padding:24px var(--pad) 0;margin:0}
@media(min-width:900px){ .voices__note{padding-inline-start:calc(var(--pad) + clamp(0px,5vw,96px))} }
.voices__more .stars{font-size:.9rem}
.voices__more cite{color:var(--muted);font-size:.85rem;margin-top:12px;display:block;font-style:normal}
.voices__more>.rise:nth-child(2){--i:1}
@media(max-width:680px){ .voices__more{grid-template-columns:1fr;gap:30px} }
/* a review card for inner pages */
.review{background:var(--paper-3);border:1px solid var(--border);border-left:3px solid var(--gold);border-radius:4px;padding:20px 22px;margin:0}
.review p{margin:0;font-family:var(--font-serif);font-style:italic;font-size:1.08rem;line-height:1.45;color:var(--ink)}
.review cite{display:block;margin-top:12px;font-style:normal;font-size:.82rem;color:var(--muted);font-weight:600}
.review .stars{font-size:.82rem;display:block;margin-bottom:8px}

/* ============================================================ 12 estimate form and booking modal */
.est{position:relative;overflow:hidden;color:#fff;background:var(--ink)}
.est>img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;z-index:0;filter:saturate(.85) brightness(.78)}
.est::after{content:"";position:absolute;inset:0;z-index:1;background:linear-gradient(180deg,rgba(24,11,33,.93),rgba(24,11,33,.83)),radial-gradient(120% 90% at 50% 28%,transparent 42%,rgba(12,6,18,.55))}
.est__weave{position:absolute;inset:0;z-index:2;width:100%;height:100%;pointer-events:none;opacity:.8;mix-blend-mode:screen}
html.ax-nomotion .est__weave{opacity:.42}
.est__grid{position:relative;z-index:2;display:grid;grid-template-columns:1fr 1.05fr;gap:clamp(32px,6vw,80px);align-items:center;
  padding:var(--section) var(--pad);max-width:1240px;margin:0 auto}
@media(max-width:900px){ .est__grid{grid-template-columns:1fr;gap:34px} }
.est__copy h2{font-family:var(--font-display);font-weight:700;font-variation-settings:"opsz" 62;font-size:var(--d2);line-height:.9;letter-spacing:-.02em;margin:14px 0 0;color:#fff}
.est__copy>p{color:#e7dcec;margin:16px 0 0;max-width:42ch;font-size:1.08rem;text-wrap:pretty}
.est__copy .trust{margin-top:26px;display:flex;flex-direction:column;gap:11px;color:#d9cfe0;font-size:.95rem}
.est__copy .trust span{display:flex;align-items:center;gap:10px}
.est__copy .trust span::before{content:"";width:16px;height:16px;flex:none;background:var(--gold);-webkit-mask:var(--check) center/contain no-repeat;mask:var(--check) center/contain no-repeat}
.est__copy .trust b{color:#fff}
.est__copy .trust a{color:#fff;text-decoration:none;font-weight:700}
.est__copy .trust a:hover{text-decoration:underline}
/* the work order ticket on warm paper */
.form{position:relative;background:var(--paper);color:var(--ink);border-radius:5px;overflow:hidden;padding:0;box-shadow:var(--shadow-float);border:1px solid var(--border);
  clip-path:polygon(0 0, calc(100% - 20px) 0, 100% 20px, 100% 100%, 0 100%)}
.form__mast{background:var(--ink);color:var(--on-ink);padding:15px clamp(22px,3vw,30px);display:flex;align-items:center;gap:11px}
.form__mast .wm{width:26px;height:26px;flex:none}
.form__mast .t{font-family:var(--font-display);font-weight:800;font-variation-settings:"opsz" 40;font-size:1.42rem;line-height:1;letter-spacing:.015em;text-transform:uppercase;margin:0}
.form__mast .no{margin-left:auto;font-family:var(--font-mono);font-size:.72rem;font-weight:600;color:var(--gold-soft);letter-spacing:.05em;white-space:nowrap}
.form__mastline{background:var(--ink-2);color:var(--on-ink-2);font-family:var(--font-mono);font-size:.63rem;letter-spacing:.14em;text-transform:uppercase;padding:6px clamp(22px,3vw,30px);border-bottom:2px solid var(--gold)}
.form__inner{padding:clamp(22px,3vw,30px);position:relative}
.form__inner::before{content:"";position:absolute;top:14px;bottom:14px;left:calc(clamp(22px,3vw,30px) - 11px);width:1px;background:var(--hair-gold);pointer-events:none}
.field{margin-bottom:18px;position:relative}
.field>label,.field>.field__label{display:block;font-size:.82rem;font-weight:600;color:#4a3f52;margin-bottom:4px;font-family:var(--font-text)}
.field .req{color:var(--gold-ink)}
.field .opt{color:var(--muted);font-weight:500}
.field input,.field select,.field textarea{width:100%;border:0;border-bottom:2px solid var(--field-border);border-radius:0;padding:8px 2px;font-size:1rem;
  font-family:var(--font-text);color:var(--ink);background:transparent;transition:border-color var(--t)}
.field input::placeholder,.field textarea::placeholder{color:#6b6174}
.field input:focus,.field select:focus,.field textarea:focus{outline:none;border-bottom-color:var(--gold-2);box-shadow:none;border-radius:0}
.field input:focus-visible,.field textarea:focus-visible{outline:2px solid var(--focus);outline-offset:4px;border-radius:2px}
.field input[readonly]{color:var(--muted);border-bottom-style:dashed}
.field textarea{min-height:70px;resize:vertical}
.field .hint{display:block;color:var(--muted);font-size:.78rem;margin-top:5px}
.field-row{display:grid;grid-template-columns:1fr 1fr;gap:16px}
.field-row3{display:grid;grid-template-columns:1.7fr .7fr 1fr;gap:16px}
@media(max-width:420px){ .field-row,.field-row3{grid-template-columns:1fr} }
.field.err input,.field.err select,.field.err textarea{border-bottom-color:var(--err)}
.field .msg{color:var(--err);font-size:.78rem;margin-top:5px;display:none;font-weight:600}
.field.err .msg{display:block}
.form__errors{display:none;margin:0 0 18px;padding:12px 14px;border:1px solid var(--err);border-left-width:4px;border-radius:4px;background:#fff6f5;color:var(--ink);font-size:.9rem}
.form__errors.on{display:block}
.form__errors h3{font-family:var(--font-text);font-size:.92rem;font-weight:700;margin:0 0 6px;color:var(--err)}
.form__errors ul{margin:0;padding-left:18px}
.form__errors a{color:var(--err)}
/* material swatch service tiles */
.svcs{display:grid;grid-template-columns:repeat(3,1fr);gap:9px}
@media(max-width:520px){ .svcs{grid-template-columns:repeat(2,1fr)} }
.svcs label{display:flex;align-items:center;gap:9px;border:1px solid var(--field-border);border-radius:4px;padding:8px 9px;background:var(--paper);
  font-size:.8rem;font-weight:600;cursor:pointer;margin:0;position:relative;transition:border-color .15s,background .15s,color .15s,transform .12s var(--ease-out);min-height:44px}
.svcs label:hover{border-color:var(--ink)}
.svcs label:active{transform:scale(.96)}
.svcs label:focus-within{outline:2px solid var(--focus);outline-offset:2px}
.svcs .sw{width:26px;height:26px;flex:none;border-radius:3px;box-shadow:inset 0 0 0 1px rgba(34,19,46,.16)}
.svcs input{position:absolute;opacity:0;width:1px;height:1px;margin:0}
.svcs label:has(input:checked){border-color:var(--mark-700);box-shadow:inset 0 0 0 1px var(--mark-700)}
.svcs label:has(input:checked)::after{content:"";position:absolute;right:5px;top:5px;width:13px;height:13px;background:var(--mark-700);transform:rotate(-9deg);
  -webkit-mask:var(--check) center/contain no-repeat;mask:var(--check) center/contain no-repeat}
.sw--carpet{background:repeating-linear-gradient(45deg,#9c7857,#9c7857 2px,#7f5f3d 2px,#7f5f3d 4px)}
.sw--rug{background:conic-gradient(from 30deg,#7a2f5e,#b0568f,#5c2247,#b0568f,#7a2f5e)}
.sw--uph{background:repeating-linear-gradient(0deg,#c9beac 0 2px,#b0a48c 2px 4px),repeating-linear-gradient(90deg,#0000000f 0 2px,transparent 2px 4px)}
.sw--mattress{background:repeating-linear-gradient(45deg,#eae3d3 0 6px,#d9cfb9 6px 7px),repeating-linear-gradient(-45deg,#0000000a 0 6px,transparent 6px 7px)}
.sw--tile{background:linear-gradient(#e8e2d4,#e8e2d4);background-image:linear-gradient(#00000014 1px,transparent 1px),linear-gradient(90deg,#00000014 1px,transparent 1px),linear-gradient(#e8e2d4,#e8e2d4);background-size:13px 13px,13px 13px,cover}
.sw--water{background:repeating-radial-gradient(circle at 50% 42%,#5a86a8 0 3px,#3f6f92 3px 6px)}
/* photo upload */
.upload{border:1px dashed var(--field-border);border-radius:4px;padding:12px 14px;background:rgba(255,255,255,.4);transition:border-color .15s,background .15s}
.upload:focus-within,.upload.over{border-color:var(--mark-700);background:#fff}
.upload:focus-within .upload__btn{outline:2px solid var(--focus);outline-offset:2px}
.upload__row{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.upload input[type=file]{position:absolute;width:1px;height:1px;opacity:0;overflow:hidden}
.upload__btn{display:inline-flex;align-items:center;gap:8px;background:var(--ink);color:#fff;border-radius:4px;padding:9px 14px;font-size:.85rem;font-weight:600;cursor:pointer;min-height:40px}
.upload__btn svg{width:16px;height:16px}
.upload__note{font-size:.78rem;color:var(--muted);margin:0}
.upload__list{list-style:none;margin:10px 0 0;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(72px,1fr));gap:8px}
.upload__list:empty{display:none}
.upload__list li{position:relative;aspect-ratio:1;border-radius:3px;overflow:hidden;background:var(--paper-2);border:1px solid var(--border)}
.upload__list img{width:100%;height:100%;object-fit:cover}
.upload__list button{position:absolute;top:3px;right:3px;width:32px;height:32px;border-radius:50%;border:0;background:rgba(20,13,24,.8);color:#fff;font-size:.8rem;line-height:1;display:grid;place-items:center;cursor:pointer;padding:0}
.upload__list button svg{width:13px;height:13px}
/* the visible control stays small, the pointer target is 48px so it clears the phone minimum */
.upload__list button::before{content:"";position:absolute;inset:-8px}
.consent{display:flex;gap:10px;align-items:flex-start;margin:0 0 12px;font-size:.8rem;color:var(--muted);line-height:1.5;padding:0;border:0}
.consent input{width:18px;height:18px;margin-top:2px;flex:none;accent-color:var(--mark-700)}
.consent a{color:var(--mark-700);text-decoration:underline}
.consent--group{margin:16px 0 8px}
.consent__lead{font-size:.8rem;color:var(--muted);margin:0 0 8px;font-weight:600}
.form .btn{width:100%;justify-content:center;font-size:1.02rem;padding:15px;border-radius:4px}
.form__note{text-align:center;font-size:.72rem;color:var(--muted);margin-top:12px;font-family:var(--font-mono);letter-spacing:.05em}
.hp{position:absolute;left:-9999px;width:1px;height:1px;opacity:0}
/* Cloudflare Turnstile box, rendered only when a site key is configured */
.turnstile{margin:14px 0 10px}
.turnstile .cf-turnstile{min-height:0}
.turnstile iframe{max-width:100%}
.turnstile__note{font-size:.72rem;color:var(--muted);margin:6px 0 0;line-height:1.5}
.book .turnstile{margin:8px 0}
.chat-lead .turnstile{margin:6px 0}
.chat-lead .turnstile__note{font-size:.68rem}
.form.sent .form__inner{display:none}
.form__ok{display:none;text-align:center;padding:44px 24px}
.form.sent .form__ok{display:block}
.seal{width:min(232px,100%);height:auto;color:var(--gold)}
.form__ok .seal{width:154px;height:154px;color:var(--mark-700);margin:0 auto 16px}
.form.sent .form__ok .seal{animation:sealThump .5s var(--ease-out) both}
@keyframes sealThump{0%{opacity:0;transform:scale(1.28) rotate(-7deg)}60%{opacity:1}100%{opacity:1;transform:scale(1) rotate(-3deg)}}
.form__ok h3{font-family:var(--font-display);font-weight:700;font-size:1.6rem;margin:0 0 6px}
.form__ok .sub{color:var(--muted);font-size:.95rem}
.form__fail{display:none;margin:14px 0 0;padding:12px 14px;border:1px solid var(--err);border-left-width:4px;border-radius:4px;background:#fff6f5;font-size:.9rem}
.form__fail.on{display:block}
.form__fail a{color:var(--mark-700);font-weight:700}
/* booking modal */
.book-scrim{position:fixed;inset:0;z-index:95;background:rgba(15,8,20,.6);backdrop-filter:blur(4px);opacity:0;visibility:hidden;transition:opacity var(--t),visibility var(--t)}
.book-scrim.open{opacity:1;visibility:visible}
.book{position:fixed;z-index:96;left:50%;top:50%;transform:translate(-50%,-48%) scale(.98);width:min(460px,calc(100vw - 32px));max-height:calc(100vh - 40px);overflow-y:auto;
  background:#fff;color:var(--ink);border-radius:20px;box-shadow:var(--shadow-float);opacity:0;visibility:hidden;
  transition:opacity var(--t) var(--ease-out),transform var(--t) var(--ease-out),visibility var(--t)}
.book.open{opacity:1;visibility:visible;transform:translate(-50%,-50%)}
.book__head{display:flex;align-items:center;gap:12px;padding:18px 20px;color:#fff;background:linear-gradient(178deg,#7a1f82,#5a1360)}
.book__head .t{font-family:var(--font-display);font-weight:700;font-size:1.4rem;line-height:1;margin:0}
.book__head .s{font-size:.74rem;color:rgba(255,255,255,.72);margin-top:3px}
.book__close{margin-left:auto;background:none;border:0;color:#fff;cursor:pointer;padding:4px;opacity:.85;min-width:44px;min-height:44px;display:grid;place-items:center}
.book__close:hover{opacity:1}
.book__body{padding:20px}
.book__body>label,.book__body .book__label{display:block;font-size:.82rem;font-weight:600;margin-bottom:7px}
.book__body input[type=date],.book__body input[type=text],.book__body input[type=tel]{width:100%;border:1px solid var(--border);border-radius:11px;padding:12px 14px;font-size:.95rem;font-family:var(--font-text);margin-bottom:16px;background:var(--paper);color:var(--ink)}
.book__body input:focus{outline:none;border-color:var(--mark-400);box-shadow:0 0 0 4px rgba(205,104,213,.15);background:#fff}
.book__body input:focus-visible{outline:2px solid var(--focus);outline-offset:2px}
.book__body input[aria-invalid=true]{border-color:var(--err)}
.windows{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-bottom:16px}
.windows button{border:1px solid var(--border);background:var(--paper);border-radius:11px;padding:11px 12px;cursor:pointer;font-size:.88rem;font-weight:600;color:var(--ink);text-align:left;font-family:var(--font-text);transition:border-color .15s,background .15s,color .15s}
.windows button:hover{border-color:var(--mark-400)}
.windows button .w{display:block;font-size:.72rem;color:var(--muted);font-weight:500;margin-top:2px}
.windows button[aria-pressed=true]{background:var(--mark-700);color:#fff;border-color:var(--mark-700)}
.windows button[aria-pressed=true] .w{color:rgba(255,255,255,.8)}
.book .btn{width:100%;justify-content:center;padding:14px}
.book .consent{margin-bottom:10px}
.book__ok{display:none;text-align:center;padding:12px 0}
.book.done .book__form{display:none} .book.done .book__ok{display:block}
.book__ok svg{width:52px;height:52px;color:var(--ok);margin:0 auto 10px}
.book__ok h3{font-family:var(--font-display);font-weight:700;font-size:1.4rem;margin:0 0 6px}
.book__ok .sub{color:var(--muted);margin:0}
.form__ok svg path,.book__ok svg path{stroke-dasharray:30;stroke-dashoffset:30}
.form.sent .form__ok svg path{animation:drawCheck .6s .1s var(--ease-out) forwards}
.book.done .book__ok svg path{animation:drawCheck .6s .1s var(--ease-out) forwards}
@keyframes drawCheck{to{stroke-dashoffset:0}}

/* The booking modal at ticket size, moved here from templates/partials/book.html: ink mast, gold
   rule, parchment body, underline fields. The #book id beats the .book rules above where they meet. */
#book{width:min(700px,calc(100vw - 28px));border-radius:5px;background:var(--paper-3);overflow:hidden}
#book .book__form{display:flex;flex-direction:column;max-height:calc(100vh - 40px);overflow:hidden}
#book .form__mast{flex:none}
#book .form__mastline{flex:none}
#book .book__body{flex:1 1 auto;overflow-y:auto;overscroll-behavior:contain;padding:clamp(18px,2.6vw,28px)}
#book .book__close{margin-left:auto;color:#fff}
#book .field{margin-bottom:16px}
#book .field input,#book .field select,#book .field textarea{width:100%;border:0;border-bottom:2px solid var(--field-border);
  border-radius:0;padding:9px 2px;margin:0;font-size:1rem;font-family:var(--font-text);background:transparent;color:var(--ink)}
#book .field select{appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23271a36' stroke-width='2.4'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:right 2px center;background-size:15px;padding-right:24px}
#book .field input:focus,#book .field select:focus,#book .field textarea:focus{outline:none;
  border-bottom-color:var(--gold-2);box-shadow:none;background:transparent}
#book .field input:focus-visible,#book .field select:focus-visible,#book .field textarea:focus-visible{outline:2px solid var(--focus);outline-offset:4px}
#book .field.err input,#book .field.err select{border-bottom-color:var(--err)}
#book .field textarea{min-height:66px;resize:vertical}
#book .windows{grid-template-columns:1fr 1fr;gap:8px;margin:0}
#book .windows button{border-radius:4px;min-height:48px}
#book .field-row{display:grid;grid-template-columns:1fr 1fr;gap:16px}
#book .field--day input{max-width:300px}
#book .book__other{display:none}
#book .book__other.on{display:block}
#book .book__ok{display:none;text-align:center;padding:clamp(24px,3vw,34px) clamp(18px,2.6vw,28px) clamp(22px,3vw,30px)}
#book.done .book__form{display:none}
#book.done .book__ok{display:block}
#book .book__ok .seal{width:138px;height:138px;color:var(--mark-700);margin:0 auto 14px}
#book.done .book__ok .seal{animation:sealThump .5s var(--ease-out) both}
#book .book__ok h3{font-family:var(--font-display);font-weight:800;font-variation-settings:"opsz" 40;font-size:1.7rem;line-height:1;margin:0 0 8px;color:var(--ink)}
#book .book__ok .sub{color:var(--muted);margin:0 auto;max-width:44ch;font-size:.95rem}
#book .book__ok .btn{margin-top:20px;width:auto;min-width:220px;padding:13px 28px}
#book .form__errors{margin-bottom:18px}
#book .consent--group{margin:18px 0 6px}
/* the required acknowledgement is not a .field, so its marker and its error state are set here */
#book .consent .req{color:var(--gold-ink)}
#book .consent-ack .msg{display:none;color:var(--err);font-size:.78rem;font-weight:600;margin:-6px 0 12px 28px}
#book .consent-ack.err .msg{display:block}
#book .consent-ack.err .consent input{outline:2px solid var(--err);outline-offset:2px}
#book .turnstile{margin:12px 0 6px}
#book .btn--submit{width:100%;justify-content:center;padding:15px}
#book .form__note{font-size:.78rem;color:var(--muted);margin:10px 0 0;text-align:center}
body.book-open{overflow:hidden}
@media(max-width:600px){
  #book{width:100vw;max-width:100vw;height:100dvh;max-height:100dvh;top:0;left:0;transform:none;border-radius:0}
  #book.open{transform:none}
  #book .book__form{max-height:100dvh}
  #book .field-row{grid-template-columns:1fr;gap:0}
  #book .windows{grid-template-columns:1fr}
}
@media(prefers-reduced-motion:reduce){ #book.done .book__ok .seal{animation:none}}

/* ============================================================ 13 consent slip */
/* The privacy banner, moved here from templates/partials/consent.html. It replaces the old .cc card
   and the .switch it was the only user of; nothing else on the site referenced either. */
.pc{position:fixed;left:0;right:0;bottom:0;z-index:88;padding:0 clamp(0px,2.6vw,28px) clamp(0px,2.4vw,22px);pointer-events:none}
.pc[hidden]{display:none}
.pc__slip{position:relative;pointer-events:auto;max-width:1120px;margin:0 auto;background:var(--paper-3);
  border:1px solid var(--border);border-radius:4px;box-shadow:var(--shadow-float);max-height:86vh;overflow-y:auto;
  animation:pcIn .28s var(--ease-out) both}
.pc__slip::before{content:"";position:absolute;top:0;left:0;right:0;height:3px;background:var(--foil-gold);z-index:2}
.pc__slip::after{content:"";position:absolute;inset:0;background-image:var(--grain);background-size:160px;
  opacity:.05;mix-blend-mode:multiply;pointer-events:none;z-index:0}
@keyframes pcIn{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}
.pc__close[hidden]{display:none}
.pc__close{position:absolute;top:7px;right:7px;z-index:3;width:40px;height:40px;display:grid;place-items:center;
  background:none;border:0;border-radius:5px;color:var(--muted);cursor:pointer;transition:color var(--t),background var(--t)}
.pc__close:hover{color:var(--ink);background:var(--paper-2)}
.pc__close svg{width:19px;height:19px}
.pc__main{position:relative;z-index:1;display:grid;grid-template-columns:minmax(0,1fr) auto;
  gap:clamp(16px,3vw,44px);align-items:center;padding:clamp(18px,2.2vw,26px) clamp(18px,2.4vw,30px)}
.pc--closable .pc__main{padding-top:clamp(26px,2.6vw,32px)}
.pc__eyebrow{display:flex;align-items:center;gap:10px;margin:0 0 9px;font-family:var(--font-mono);font-weight:600;
  font-size:.62rem;letter-spacing:.2em;text-transform:uppercase;color:var(--gold-ink)}
.pc__eyebrow::before{content:"";width:22px;height:1px;background:var(--gold-2);flex:none}
.pc__h{font-family:var(--font-display);font-weight:800;font-variation-settings:"opsz" 40;
  font-size:clamp(1.55rem,2.5vw,2rem);line-height:.98;letter-spacing:-.015em;color:var(--ink);margin:0 0 9px}
.pc__b{margin:0;color:var(--muted);font-size:.9rem;line-height:1.55;max-width:64ch}
.pc__links{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;margin:11px 0 0;font-size:.82rem}
.pc__links a{color:var(--mark-700);text-decoration:underline;text-underline-offset:2px}
.pc__links span{color:var(--line)}
.pc__acts{display:flex;flex-direction:column;gap:9px;width:min(100%,372px)}
.pc__two{display:grid;grid-template-columns:1fr 1fr;gap:9px}
.pc__two .btn{width:100%;justify-content:center;text-align:center;padding:13px 12px;font-size:.9rem}
.pc .btn--paper{border-width:2px;font-weight:700}
.pc__manage{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:44px;padding:8px 6px;
  background:none;border:0;cursor:pointer;color:var(--ink);font-family:var(--font-mono);font-weight:600;
  font-size:.68rem;letter-spacing:.16em;text-transform:uppercase;text-decoration:underline;
  text-underline-offset:4px;text-decoration-color:var(--gold-2);transition:color var(--t)}
.pc__manage:hover{color:var(--mark-700)}
.pc__manage svg{width:13px;height:13px;transition:transform var(--t) var(--ease-out)}
.pc__manage[aria-expanded=true] svg{transform:rotate(180deg)}
.pc__panel{position:relative;z-index:1;background:var(--paper);border-top:1px solid var(--line);
  padding:clamp(6px,1vw,10px) clamp(18px,2.4vw,30px) clamp(18px,2.4vw,26px)}
.pc__panel[hidden]{display:none}
.pc__rows{list-style:none;margin:0;padding:0}
.pc__row{display:flex;align-items:center;gap:16px;padding:14px 0;border-bottom:1px solid var(--hair-ink)}
.pc__row:last-child{border-bottom:0}
.pc__row>div{flex:1;min-width:0}
.pc__row b{font-size:.95rem;font-weight:700;color:var(--ink)}
.pc__vendor{margin-left:9px;font-family:var(--font-mono);font-size:.6rem;font-weight:600;letter-spacing:.12em;
  text-transform:uppercase;color:var(--gold-ink);white-space:nowrap}
.pc__row small{display:block;margin-top:3px;font-size:.82rem;line-height:1.45;color:var(--muted);max-width:72ch}
.pc__switch{position:relative;flex:none;width:56px;height:32px;border-radius:999px;padding:0;cursor:pointer;
  border:1px solid var(--field-border);background:var(--paper-2);transition:background var(--t),border-color var(--t)}
.pc__switch::before{content:"";position:absolute;left:-4px;right:-4px;top:-7px;bottom:-7px}
.pc__switch::after{content:"";position:absolute;top:3px;left:3px;width:24px;height:24px;border-radius:50%;
  background:#fff;box-shadow:0 1px 3px rgba(20,13,24,.4);transition:transform var(--t) var(--ease-out)}
.pc__switch[aria-checked=true]{background:var(--mark-700);border-color:var(--mark-700)}
.pc__switch[aria-checked=true]::after{transform:translateX(24px)}
.pc__switch[aria-disabled=true]{background:var(--gold-2);border-color:var(--gold-ink);cursor:default}
.pc__switch[aria-disabled=true]::after{transform:translateX(24px)}
.pc__foot{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:14px;margin-top:16px}
.pc__ret{margin:0;font-size:.78rem;line-height:1.45;color:var(--muted);max-width:58ch}
.pc__foot .btn{padding:13px 24px;font-size:.92rem}
body.cc-open .chat-btn,body.cc-open .ax-btn{opacity:1;visibility:visible;transform:none;
  bottom:calc(var(--cc-h,0px) + 14px);transition:bottom var(--t) var(--ease-out)}
@media(max-width:860px){
  .pc__main{grid-template-columns:1fr;gap:16px;align-items:start}
  .pc__acts{min-width:0}
}
@media(max-width:720px){
  .pc{padding:0}
  .pc__slip{max-width:none;border-radius:0;border-left:0;border-right:0;border-bottom:0;max-height:88vh}
  .pc__main{padding:13px 16px}
  .pc--closable .pc__main{padding-top:22px}
  .pc__acts{width:100%}
  .pc__two{grid-template-columns:1fr;gap:8px}
  .pc__h{font-size:1.34rem;margin-bottom:7px}
  .pc__b{font-size:.85rem;line-height:1.5}
  .pc__links{margin-top:9px}
  .pc__manage{min-height:40px;padding:6px}
  .pc__panel{padding:4px 16px 16px}
  .pc__row{flex-wrap:wrap;gap:8px 14px;padding:10px 0}
  .pc__row small{font-size:.79rem}
  .pc__ret{font-size:.75rem}
  .pc__foot{gap:8px;margin-top:10px}
  .pc__foot .btn{width:100%;justify-content:center}
}
@media(prefers-reduced-motion:reduce){.pc__slip{animation:none}}

/* ============================================================ 14 chat */
.chat-btn{position:fixed;right:20px;bottom:20px;z-index:85;display:inline-flex;align-items:center;gap:9px;padding:13px 20px 13px 16px;
  border-radius:999px;border:none;cursor:pointer;color:#fff;background:linear-gradient(178deg,#93299b,#7a1f82);
  box-shadow:var(--shadow-float),var(--glass-top);font-family:var(--font-text);font-weight:600;font-size:.95rem;min-height:48px;
  transition:transform var(--t) var(--ease-out),opacity var(--t),visibility var(--t)}
.chat-btn:hover{transform:translateY(-2px)}
.chat-btn svg{width:21px;height:21px}
.chat-panel{position:fixed;right:20px;bottom:20px;z-index:86;width:min(380px,calc(100vw - 40px));height:min(560px,calc(100vh - 90px));
  background:#fff;border-radius:20px;overflow:hidden;display:flex;flex-direction:column;box-shadow:var(--shadow-float);border:1px solid var(--border);
  opacity:0;visibility:hidden;transform:translateY(16px) scale(.98);transform-origin:bottom right;
  transition:opacity var(--t) var(--ease-out),transform var(--t) var(--ease-out),visibility var(--t)}
.chat-panel.open{opacity:1;visibility:visible;transform:none}
.chat-head{display:flex;align-items:center;gap:12px;padding:15px 16px;color:#fff;background:linear-gradient(178deg,#7a1f82,#5a1360)}
.chat-head img{height:34px;width:auto}
.chat-head .t{font-family:var(--font-display);font-weight:700;font-size:1.18rem;line-height:1;margin:0}
.chat-head .s{font-size:.72rem;color:rgba(255,255,255,.72);display:flex;align-items:center;gap:6px;margin-top:2px}
.chat-head .status{width:8px;height:8px;border-radius:50%;background:#5fd08a;box-shadow:0 0 0 3px rgba(95,208,138,.25)}
.chat-close{margin-left:auto;background:none;border:0;color:#fff;cursor:pointer;padding:4px;opacity:.85;min-width:44px;min-height:44px;display:grid;place-items:center}
.chat-close:hover{opacity:1}
.chat-body{flex:1;overflow-y:auto;padding:18px;display:flex;flex-direction:column;gap:11px;background:var(--paper)}
.msg{max-width:84%;padding:11px 15px;border-radius:16px;font-size:.92rem;line-height:1.45;animation:msg-in .22s var(--ease-out) both}
.msg.bot{align-self:flex-start;background:#fff;border:1px solid var(--border);border-bottom-left-radius:5px;color:var(--ink)}
.msg.user{align-self:flex-end;background:var(--mark-700);color:#fff;border-bottom-right-radius:5px}
.msg__cta{display:inline-flex;align-items:center;margin:10px 6px 0 0;padding:11px 18px;border-radius:3px;
  background:var(--gold);color:var(--ink);text-decoration:none;font-size:.9rem;font-weight:700;letter-spacing:.01em;border:0;cursor:pointer;font-family:var(--font-text);
  box-shadow:0 5px 14px -5px rgba(226,165,58,.6),inset 0 1px 0 rgba(255,255,255,.45);transition:transform var(--t-fast) var(--ease-out),background var(--t) ease}
.msg__cta:hover{background:var(--gold-soft)}
.msg__cta:active{transform:scale(.97)}
.msg__cta--ghost{background:transparent;box-shadow:inset 0 0 0 1px var(--border);color:var(--mark-700)}
.chat-lead{display:flex;flex-direction:column;gap:8px;margin-top:8px}
.chat-lead input[type=text],.chat-lead input[type=tel]{width:100%;border:1px solid var(--border);border-radius:8px;padding:9px 11px;font-size:.9rem;font-family:var(--font-text);background:var(--paper)}
.chat-lead input:focus{outline:none;border-color:var(--mark-400);box-shadow:0 0 0 3px rgba(205,104,213,.15)}
.chat-lead .consent{font-size:.72rem;margin:2px 0 4px}
.chat-lead .msg__err{color:var(--err);font-size:.78rem;font-weight:600;display:none;margin:0}
.chat-lead .msg__err.on{display:block}
.chat-quick{display:flex;flex-wrap:wrap;gap:8px;padding:0 18px 12px;background:var(--paper)}
.chat-quick button{background:#fff;border:1px solid var(--border);border-radius:999px;padding:8px 13px;font-size:.82rem;font-weight:600;color:var(--mark-700);cursor:pointer;font-family:var(--font-text);transition:border-color .15s,background .15s}
.chat-quick button:hover{border-color:var(--mark-400);background:#f6e9f8}
.chat-input{display:flex;gap:8px;padding:12px;border-top:1px solid var(--border);background:#fff}
.chat-input input{flex:1;border:1px solid var(--border);border-radius:999px;padding:11px 16px;font-size:.92rem;font-family:var(--font-text);outline:none;min-width:0}
.chat-input input:focus{border-color:var(--mark-400)}
.chat-input input:focus-visible,.chat-lead input:focus-visible,.chat-quick button:focus-visible{outline:2px solid var(--focus);outline-offset:2px}
.chat-input button{border:0;background:var(--mark-700);color:#fff;width:44px;height:44px;border-radius:50%;cursor:pointer;display:grid;place-items:center;flex:none}
@media(max-width:520px){ .chat-panel{right:12px;bottom:12px;width:calc(100vw - 24px);height:calc(100dvh - 84px)} .chat-btn{right:12px;bottom:12px} }
@keyframes msg-in{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
.typing{display:inline-flex;gap:4px;align-items:center;padding:2px 0}
.typing span[aria-hidden]{width:7px;height:7px;border-radius:50%;background:var(--mark-400);animation:typing 1s infinite}
.typing span[aria-hidden]:nth-child(2){animation-delay:.15s} .typing span[aria-hidden]:nth-child(3){animation-delay:.3s}
@keyframes typing{0%,60%,100%{opacity:.3;transform:translateY(0)}30%{opacity:1;transform:translateY(-3px)}}

/* ============================================================ 15 accessibility widget */
.ax-btn{position:fixed;left:20px;bottom:20px;z-index:90;width:54px;height:54px;border-radius:50%;border:var(--glass-border);
  background:linear-gradient(178deg,#93299b,#7a1f82);color:#fff;cursor:pointer;display:grid;place-items:center;
  box-shadow:var(--shadow-2),var(--glass-top);transition:transform var(--t) var(--ease-out),opacity var(--t),visibility var(--t)}
.ax-btn:hover{transform:scale(1.06)}
.ax-panel{position:fixed;left:20px;bottom:86px;z-index:91;width:288px;background:#fff;color:var(--ink);border-radius:16px;
  box-shadow:var(--shadow-float);border:1px solid var(--border);padding:16px;
  opacity:0;visibility:hidden;transform:translateY(10px) scale(.97);transform-origin:bottom left;
  transition:opacity var(--t) var(--ease-out),transform var(--t) var(--ease-out),visibility var(--t)}
.ax-panel.open{opacity:1;visibility:visible;transform:none}
.ax-panel h2{font-family:var(--font-display);font-weight:700;font-size:1.3rem;margin:0 0 4px}
.ax-panel p{margin:0 0 12px;font-size:.8rem;color:var(--muted)}
.ax-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.ax-opt{display:flex;flex-direction:column;align-items:center;gap:6px;padding:12px 8px;border:1px solid var(--border);
  border-radius:11px;background:var(--paper);cursor:pointer;font-size:.78rem;font-weight:600;color:var(--ink);text-align:center;font-family:var(--font-text);transition:border-color .15s,background .15s}
.ax-opt:hover{border-color:var(--mark-400)}
.ax-opt[aria-pressed=true]{background:var(--mark-700);color:#fff;border-color:var(--mark-700)}
.ax-opt svg{width:22px;height:22px}
.ax-reset{grid-column:1/-1;background:none;border:0;color:var(--mark-700);font-weight:600;cursor:pointer;padding:8px;font-size:.85rem;text-decoration:underline;font-family:var(--font-text)}
.ax-panel .stmt{display:block;margin-top:8px;font-size:.78rem;color:var(--muted);text-decoration:underline}

/* ============================================================ 16 footer */
.foot{position:relative;background:radial-gradient(120% 120% at 85% 0%,#1a1523,#13101a 60%);color:var(--on-ink-2);padding:clamp(52px,6vw,74px) var(--pad) 40px;font-size:.9rem;overflow:hidden}
.foot__seal{position:absolute;right:3%;bottom:7%;width:min(32vw,280px);color:var(--mark-400);opacity:.11;pointer-events:none;z-index:0}
.foot__big{font-family:var(--font-display);font-weight:700;font-variation-settings:"opsz" 40;font-size:var(--d4);line-height:.94;letter-spacing:-.02em;color:#fff;margin:12px 0 0;max-width:20ch;text-wrap:balance;position:relative;z-index:1}
.foot__grid{position:relative;z-index:1;display:grid;grid-template-columns:1.5fr 1fr 1fr 1fr 1.1fr;gap:32px;padding:clamp(40px,5vw,60px) 0 32px;margin-top:clamp(40px,5vw,60px);border-top:1px solid var(--hair)}
@media(max-width:1000px){ .foot__grid{grid-template-columns:1fr 1fr 1fr} .foot__grid>:first-child{grid-column:1/-1} }
@media(max-width:640px){ .foot__grid{grid-template-columns:1fr 1fr} } @media(max-width:440px){ .foot__grid{grid-template-columns:1fr} }
.foot__grid h2{text-transform:uppercase;letter-spacing:.18em;font-size:.68rem;color:var(--on-ink-faint);margin:0 0 14px;font-family:var(--font-text);font-weight:600}
.foot__grid p{margin:0;max-width:38ch}
.foot__grid a{color:var(--on-ink-2);text-decoration:none;display:flex;align-items:center;gap:8px;margin:8px 0;transition:color .15s}
.foot__grid a:hover{color:#fff}
.foot__grid ul{list-style:none;margin:0;padding:0}
.foot__nap{display:flex;flex-direction:column;gap:2px}
.foot__nap span{display:block;margin:8px 0}
.foot__phone{font-family:var(--font-text);font-variant-numeric:tabular-nums;font-weight:700;color:#fff!important}
.foot__bottom{position:relative;z-index:1;padding-top:22px;display:flex;justify-content:space-between;gap:16px;flex-wrap:wrap;color:var(--on-ink-faint);font-size:.8rem;border-top:1px solid var(--hair)}
.foot__legal{display:flex;gap:8px 16px;flex-wrap:wrap;align-items:center;list-style:none;margin:0;padding:0}
.foot__legal a,.foot__legal button{color:var(--on-ink-faint);text-decoration:none;transition:color .15s;background:none;border:0;padding:0;font:inherit;cursor:pointer}
.foot__legal a:hover,.foot__legal button:hover{color:#fff;text-decoration:underline}
.foot__social{position:relative;z-index:1;display:flex;gap:12px;padding-bottom:26px;list-style:none;margin:0;padding-left:0}
.foot__social a{display:grid;place-items:center;width:44px;height:44px;border-radius:11px;border:1px solid var(--hair);color:var(--on-ink-2);transition:color var(--t),border-color var(--t),background var(--t)}
.foot__social a:hover{color:#fff;border-color:var(--mark-400);background:rgba(205,104,213,.12)}
.foot__social svg{width:19px;height:19px}

/* The footer CTA band and the thumb bar, moved here from templates/partials/footer.html:
   one gold hairline, the mono eyebrow, the three actions, one note. */
.foot__cta{position:relative;z-index:1;margin-top:clamp(26px,3.4vw,38px);padding-top:clamp(22px,2.8vw,30px);border-top:1px solid var(--hair-gold)}
.foot__cta-e{color:var(--mark-400);margin-bottom:16px}
.foot__cta .ctarow{align-items:center}
.foot__cta .ctarow>.phone{color:var(--on-ink);font-weight:700;font-size:.92rem}
.foot__cta .ctarow>.phone:hover{color:#fff}
.foot__cta-n{margin:14px 0 0;color:var(--on-ink-faint);font-size:.84rem;max-width:52ch}

/* the thumb bar. Under 520px section 3 above hides both header buttons, so this is the only place a
   phone sized screen can start a job without opening the menu. It steps out of the way for the chat
   panel, the accessibility panel and the privacy banner. */
.callbar{display:none}
@media(max-width:520px){
  .callbar{display:flex;position:fixed;left:0;right:0;bottom:0;z-index:84;gap:8px;align-items:center;
    padding:9px 12px calc(9px + env(safe-area-inset-bottom,0px));background:var(--ink-lift);
    border-top:2px solid var(--gold);box-shadow:0 -14px 30px -18px rgba(15,8,20,.9);
    transition:transform var(--t) var(--ease-out)}
  .callbar__phone{flex:none;width:48px;height:48px;display:grid;place-items:center;border-radius:6px;
    border:1px solid rgba(255,255,255,.34);color:#fff;text-decoration:none;background:rgba(255,255,255,.05)}
  .callbar__phone svg{width:20px;height:20px}
  .callbar a.btn,.callbar button.btn{flex:1 1 0;min-width:0;justify-content:center;text-align:center;
    padding:14px 8px;font-size:clamp(.76rem,3.1vw,.9rem);border-radius:6px}
  body{padding-bottom:calc(66px + env(safe-area-inset-bottom,0px))}
  .chat-btn,.ax-btn{bottom:calc(78px + env(safe-area-inset-bottom,0px))}
  /* the two launchers float 78px to 132px above the thumb bar, so the last line of the
     legal row needs to clear them or the accessibility button sits on Cookie settings */
  .foot{padding-bottom:96px}
  body.cc-open .callbar,body:has(.chat-panel.open) .callbar,body:has(.ax-panel.open) .callbar{transform:translateY(105%)}
  body:has(.chat-panel.open) .chat-btn,body:has(.ax-panel.open) .ax-btn{bottom:20px}
}
/* the mobile menu is a full screen sheet at a lower stacking level than the three floating
   controls, so all three step aside while it is open rather than sitting on top of it */
body:has(.msheet.open) .callbar{transform:translateY(105%)}
body:has(.msheet.open) .chat-btn,body:has(.msheet.open) .ax-btn{opacity:0;visibility:hidden}

/* ============================================================ 17 prose and page primitives */
.prose{max-width:68ch;font-size:var(--t-body);line-height:1.65;color:var(--ink)}
.prose>*+*{margin-top:1.1em}
.prose h2{font-family:var(--font-display);font-weight:700;font-variation-settings:"opsz" 62;font-size:var(--d3);line-height:.92;letter-spacing:-.02em;margin-top:2.2em;text-wrap:balance}
.prose h2:first-child{margin-top:0}
.prose h3{font-family:var(--font-display);font-weight:700;font-variation-settings:"opsz" 40;font-size:1.55rem;line-height:1;letter-spacing:-.01em;margin-top:1.8em}
.prose h4{font-family:var(--font-text);font-weight:700;font-size:1.05rem;margin-top:1.6em}
.prose p{margin-bottom:0;text-wrap:pretty}
.prose a{color:var(--mark-700);text-decoration:underline;text-underline-offset:2px;text-decoration-thickness:1px}
.prose a:hover{color:var(--mark-600)}
.prose .btn,.callout a.btn{text-decoration:none}
.prose .btn--gold,.callout a.btn--gold{color:var(--ink)}
.prose strong{font-weight:700}
.prose ul,.prose ol{padding-left:1.3em}
.prose li{margin:.35em 0}
.prose li::marker{color:var(--gold-ink)}
.prose ol{list-style:decimal-leading-zero}
.prose ol li::marker{font-family:var(--font-mono);font-size:.85em;color:var(--gold-ink)}
.prose hr{border:0;height:1px;margin:2.2em 0;background:linear-gradient(90deg,transparent,var(--line) 6%,var(--line) 94%,transparent)}
.prose blockquote{margin:1.6em 0;padding:4px 0 4px 22px;border-left:3px solid var(--gold);font-family:var(--font-serif);font-style:italic;font-weight:500;font-size:1.25rem;line-height:1.35;color:var(--ink)}
.prose blockquote cite{display:block;margin-top:10px;font-family:var(--font-text);font-style:normal;font-size:.85rem;color:var(--muted);font-weight:600}
.prose figure{margin:1.8em 0}
.prose figcaption,.figcap{font-family:var(--font-mono);font-size:.68rem;letter-spacing:.12em;text-transform:uppercase;color:var(--muted);margin-top:10px}
.figcap--note{font-family:var(--font-text);font-size:.92rem;letter-spacing:0;text-transform:none;line-height:1.5;color:var(--muted)}
.prose img{border-radius:4px;box-shadow:var(--shadow-2)}
.prose table{border-collapse:collapse;width:100%;font-size:.95rem}
.prose th,.table-wrap th{text-align:left;font-family:var(--font-mono);font-size:.66rem;letter-spacing:.12em;text-transform:uppercase;color:var(--gold-ink);padding:10px 12px;border-bottom:2px solid var(--ink);font-weight:600}
.prose td,.table-wrap td{padding:10px 12px;border-bottom:1px solid var(--border);vertical-align:top}
.prose tbody tr:hover td,.table-wrap tbody tr:hover td{background:var(--paper-2)}
.prose code{font-family:var(--font-mono);font-size:.88em;background:var(--paper-2);padding:.1em .4em;border-radius:3px}
.prose .lede{font-size:var(--t-lead);color:var(--muted);line-height:1.5}
.prose--ink{color:var(--on-ink)} .prose--ink a{color:var(--mark-400)} .prose--ink h2,.prose--ink h3{color:#fff}
.prose--wide{max-width:none}
.table-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch;margin:1.6em 0;border:1px solid var(--border);border-radius:4px;background:var(--paper-3);color:var(--ink)}
.table-wrap table{border-collapse:collapse;width:100%;min-width:520px;font-size:.95rem}
.table-wrap table caption{text-align:left;font-family:var(--font-mono);font-size:.68rem;letter-spacing:.12em;text-transform:uppercase;color:var(--muted);padding:10px 12px}
/* the two column article body: a sticky table of contents on wide screens */
.article{display:grid;grid-template-columns:minmax(0,1fr);gap:clamp(28px,4vw,64px);align-items:start}
@media(min-width:1000px){ .article--toc{grid-template-columns:220px minmax(0,1fr)} }
/* the work order rail: on wide screens the article runs contents, copy and a standing work order card,
   so the third of the wrap that used to sit empty beside the measure carries the way to reach us. */
.article__rail{display:none}
/* Three columns only fit inside the 1180 wrap once the outer two are trimmed and the gutters
   come in: at 1440 this leaves the copy about 61 characters, which is still a reading measure. */
@media(min-width:1200px){
  .article--rail{grid-template-columns:minmax(160px,190px) minmax(0,66ch) minmax(210px,240px);
    column-gap:clamp(24px,2.4vw,36px)}
  .article--rail>.post-tail,.article--rail>.case-tail{grid-column:2}
  .article__rail{display:block;grid-column:3;grid-row:1;position:sticky;top:calc(var(--header-h) + 22px)}
}
/* the standing work order card: the same ticket language as the estimate form, at rail width */
.workcard{position:relative;background:var(--paper-3);border:1px solid var(--border);border-top:3px solid var(--gold);
  border-radius:0 0 4px 4px;padding:18px 18px 20px;box-shadow:var(--shadow-1)}
.workcard__t{font-family:var(--font-mono);font-size:.62rem;letter-spacing:.16em;text-transform:uppercase;
  color:var(--gold-ink);font-weight:600;margin:0 0 12px}
.workcard__phone{display:inline-flex;align-items:center;gap:9px;font-family:var(--font-display);font-weight:800;
  font-variation-settings:"opsz" 40;font-size:1.6rem;line-height:1;letter-spacing:-.01em;color:var(--ink);
  text-decoration:none;border-bottom:2px solid transparent;transition:color .15s,border-color .15s}
.workcard__phone:hover{color:var(--mark-700);border-color:currentColor}
.workcard__hours{margin:8px 0 0;font-family:var(--font-mono);font-size:.6rem;letter-spacing:.13em;
  text-transform:uppercase;color:var(--muted)}
.workcard p{margin:14px 0 0;font-size:.9rem;line-height:1.5;color:var(--muted)}
.workcard .btn{margin-top:16px;width:100%;justify-content:center}
.workcard__note{margin-top:14px;padding-top:12px;border-top:1px solid var(--hair-ink);
  font-family:var(--font-mono);font-size:.6rem;letter-spacing:.12em;text-transform:uppercase;color:var(--muted)}
.workcard__note b{color:var(--ink);font-weight:700}
.toc{position:sticky;top:calc(var(--header-h) + 16px);font-size:.88rem;border-top:2px solid var(--ink);padding-top:12px}
.toc__t{font-family:var(--font-mono);font-size:.64rem;letter-spacing:.14em;text-transform:uppercase;color:var(--gold-ink);margin:0 0 8px;font-weight:600}
.toc ol{list-style:none;margin:0;padding:0;counter-reset:toc}
.toc li{counter-increment:toc;display:flex;gap:10px;padding:5px 0;border-bottom:1px solid var(--hair-ink)}
.toc li::before{content:counter(toc,decimal-leading-zero);font-family:var(--font-mono);font-size:.7rem;color:var(--gold-ink);padding-top:3px;flex:none}
.toc a{color:var(--ink);text-decoration:none}
.toc__n{margin-left:auto;flex:none;font-family:var(--font-mono);font-size:.66rem;letter-spacing:.1em;color:var(--muted);padding-top:3px}
.toc a:hover,.toc a[aria-current=true]{color:var(--mark-700);text-decoration:underline}
@media(max-width:999px){ .toc{position:static} }
/* faq accordion */
.faq{border-top:1px solid var(--ink);margin:0}
.faq details{border-bottom:1px solid var(--border)}
.faq summary{list-style:none;display:grid;grid-template-columns:2.6rem minmax(0,1fr) 28px;gap:12px;align-items:baseline;padding:18px 0;cursor:pointer;font-weight:700;font-size:1.06rem;line-height:1.35;color:var(--ink);transition:color var(--t)}
.faq summary::-webkit-details-marker{display:none}
.faq summary::before{content:attr(data-n);font-family:var(--font-mono);font-size:.7rem;letter-spacing:.1em;color:var(--gold-ink);font-weight:600;padding-top:2px}
.faq summary::after{content:"";width:12px;height:12px;justify-self:end;align-self:center;background:currentColor;
  -webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='3' stroke-linecap='round'%3E%3Cpath d='M12 5v14M5 12h14'/%3E%3C/svg%3E") center/contain no-repeat;
  mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='3' stroke-linecap='round'%3E%3Cpath d='M12 5v14M5 12h14'/%3E%3C/svg%3E") center/contain no-repeat;
  transition:transform var(--t) var(--ease-out);color:var(--mark-700)}
.faq summary:hover{color:var(--mark-700)}
.faq details[open] summary::after{transform:rotate(45deg)}
.faq summary:focus-visible{outline-offset:-2px;border-radius:4px}
.faq__a{padding:0 28px 22px 3.35rem;color:#3f3747;line-height:1.62;max-width:66ch}
.faq__a p{margin:0 0 .8em} .faq__a p:last-child{margin-bottom:0}
.faq__group{font-family:var(--font-display);font-weight:700;font-variation-settings:"opsz" 40;font-size:1.6rem;letter-spacing:-.01em;margin:2.4em 0 .6em}
.faq__group:first-child{margin-top:0}
@media(max-width:520px){ .faq summary{grid-template-columns:2.2rem minmax(0,1fr) 22px} .faq__a{padding-left:calc(2.2rem + 12px);padding-right:0} }
/* breadcrumbs */
.breadcrumbs{font-family:var(--font-mono);font-size:.66rem;letter-spacing:.12em;text-transform:uppercase;color:var(--muted)}
.breadcrumbs ol{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:6px 0;align-items:center}
.breadcrumbs li{display:inline-flex;align-items:flex-start}
.breadcrumbs li+li::before{content:"/";margin:0 10px;color:var(--gold-2);opacity:.8;line-height:1.6}
/* the crumb text stays small, the tap target is padded out to clear the phone minimum */
.breadcrumbs a{color:inherit;text-decoration:none;border-bottom:1px solid transparent;transition:color .15s,border-color .15s;
  display:inline-block;padding-block:8px;margin-block:-8px}
.breadcrumbs a:hover{color:var(--mark-700);border-color:currentColor}
.breadcrumbs [aria-current=page]{color:var(--ink);font-weight:600}
.page-head .breadcrumbs{color:var(--on-ink-faint)}
.page-head .breadcrumbs a:hover{color:#fff}
.page-head .breadcrumbs [aria-current=page]{color:var(--gold-soft)}
@media(max-width:640px){
  .breadcrumbs{font-size:.72rem}
  .breadcrumbs [aria-current=page]{display:inline-block;max-width:58vw;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:bottom}
}
/* callouts */
.callout{position:relative;background:var(--paper-2);border-left:4px solid var(--gold);border-radius:0 4px 4px 0;padding:18px 22px;margin:1.8em 0;color:var(--ink)}
.callout__t{font-family:var(--font-mono);font-size:.66rem;letter-spacing:.14em;text-transform:uppercase;color:var(--gold-ink);margin:0 0 8px;font-weight:600}
.callout p{margin:0} .callout p+p{margin-top:.7em}
.callout ul{margin:.4em 0 0;padding-left:1.2em}
.callout--ink{background:var(--ink);color:var(--on-ink);border-left-color:var(--mark-400)}
.callout--ink .callout__t{color:var(--mark-400)}
.callout--ink a{color:var(--gold-soft)}
.callout--fact{display:grid;grid-template-columns:auto 1fr;gap:16px;align-items:center}
.callout--fact .n{font-family:var(--font-display);font-weight:800;font-variation-settings:"opsz" 40;font-size:2.4rem;line-height:.9;color:var(--mark-700)}
/* stats strip */
.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,180px),1fr));gap:1px;background:var(--line);border-block:1px solid var(--line);margin:0;padding:0}
.stats>div,.stats>li{background:var(--paper);padding:clamp(20px,3vw,30px) clamp(16px,2.4vw,26px);list-style:none;margin:0}
.stats b,.stats .stats__n{display:block;font-family:var(--font-display);font-weight:800;font-variation-settings:"opsz" 72;font-size:clamp(2.4rem,4.8vw,3.8rem);line-height:.9;letter-spacing:-.02em;color:var(--ink);font-variant-numeric:tabular-nums}
.stats small,.stats .stats__l{display:block;margin-top:8px;font-family:var(--font-mono);font-size:.66rem;letter-spacing:.14em;text-transform:uppercase;color:var(--muted)}
.stats--ink{background:var(--hair);border-color:var(--hair)} .stats--ink>div,.stats--ink>li{background:var(--ink)} .stats--ink b,.stats--ink .stats__n{color:#fff} .stats--ink small,.stats--ink .stats__l{color:var(--on-ink-faint)}
/* related links block */
.related{border-top:1px solid var(--ink);padding-top:clamp(28px,4vw,44px)}
.related__grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,220px),1fr));gap:clamp(22px,3vw,40px)}
.related h2,.related__t{font-family:var(--font-mono);font-size:.66rem;letter-spacing:.14em;text-transform:uppercase;color:var(--gold-ink);margin:0 0 12px;font-weight:600}
.related h2.related__big{font-family:var(--font-display);font-weight:700;font-variation-settings:"opsz" 62;font-size:var(--d3);letter-spacing:-.02em;line-height:.92;text-transform:none;color:var(--ink);margin:0 0 24px}
.related ul{list-style:none;margin:0;padding:0}
.related li{border-bottom:1px solid var(--hair-ink)}
.related a{display:flex;align-items:baseline;justify-content:space-between;gap:12px;padding:9px 0;color:var(--ink);text-decoration:none;font-weight:500;transition:color .15s,padding-left .2s var(--ease-out)}
.related a:hover{color:var(--mark-700);padding-left:4px}
.related a small{font-family:var(--font-mono);font-size:.64rem;letter-spacing:.1em;text-transform:uppercase;color:var(--muted);flex:none}
.related p{color:var(--muted);font-size:.92rem;margin:0 0 10px}
/* town index, columns of links grouped by county */
.townindex{columns:4 200px;column-gap:clamp(22px,3vw,40px);column-rule:1px solid var(--hair-ink)}
.townindex>*{break-inside:avoid;margin:0 0 22px}
.townindex h3{font-family:var(--font-display);font-weight:700;font-variation-settings:"opsz" 40;font-size:1.5rem;letter-spacing:-.01em;margin:0 0 8px}
.townindex h3 a{color:var(--ink);text-decoration:none} .townindex h3 a:hover{color:var(--mark-700)}
.townindex h3 small{font-family:var(--font-mono);font-size:.62rem;letter-spacing:.12em;color:var(--gold-ink);margin-left:8px;text-transform:uppercase;font-weight:600}
.townindex ul{list-style:none;margin:0;padding:0}
.townindex li{font-size:.95rem;line-height:1.35;padding:3px 0}
.townindex li a{color:var(--ink);text-decoration:none;border-bottom:1px solid transparent}
.townindex li a:hover{color:var(--mark-700);border-color:currentColor}
.townindex--flat{columns:5 160px}
.chips{display:flex;flex-wrap:wrap;gap:8px;list-style:none;margin:0;padding:0}
.chips a,.chips span{display:inline-flex;align-items:center;min-height:44px;padding:9px 14px;border:1px solid var(--border);border-radius:999px;background:var(--paper-3);color:var(--ink);text-decoration:none;font-size:.88rem;font-weight:500;transition:border-color .15s,color .15s}
.chips a:hover{border-color:var(--mark-700);color:var(--mark-700)}
/* pager, previous and next */
.pager{display:grid;grid-template-columns:1fr 1fr;gap:1px;background:var(--line);border-block:1px solid var(--line);margin:clamp(28px,4vw,44px) 0 0}
.pager a{display:flex;flex-direction:column;gap:6px;padding:22px clamp(16px,2.4vw,26px);background:var(--paper);color:var(--ink);text-decoration:none;transition:background var(--t)}
.pager a:hover{background:var(--paper-2)}
.pager a:hover .pager__t{color:var(--mark-700)}
.pager__l{font-family:var(--font-mono);font-size:.64rem;letter-spacing:.14em;text-transform:uppercase;color:var(--gold-ink)}
.pager__t{font-family:var(--font-display);font-weight:700;font-variation-settings:"opsz" 40;font-size:1.4rem;line-height:1;letter-spacing:-.01em;transition:color var(--t)}
.pager .pager__next{text-align:right;align-items:flex-end}
.pager__empty{background:var(--paper)}
@media(max-width:560px){ .pager{grid-template-columns:1fr} .pager .pager__next{text-align:left;align-items:flex-start} }
/* the CTA band between content and footer, and the 404 index */
.band{background:var(--ink);color:var(--on-ink);padding:var(--section-sm) var(--pad)}
.band__in{max-width:1180px;margin:0 auto;display:flex;flex-wrap:wrap;gap:22px 40px;align-items:center;justify-content:space-between}
.band h2{font-family:var(--font-display);font-weight:700;font-variation-settings:"opsz" 62;font-size:var(--d3);line-height:.92;letter-spacing:-.02em;color:#fff;max-width:18ch;text-wrap:balance}
.band p{color:var(--on-ink-2);margin:10px 0 0;max-width:48ch}
.band .cta{display:flex;gap:12px;flex-wrap:wrap}
.cols{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,240px),1fr));gap:clamp(22px,3vw,40px)}
.cols--4{grid-template-columns:repeat(auto-fit,minmax(min(100%,200px),1fr))}

/* ============================================================ 17b unclassed page content and placeholder compat
   Page templates written against the placeholder shell still render sensibly: bare sections inside main get the
   wrap width, headings get the display face, and the placeholder class names map onto the primitives above. */
main>section:not([class]),main>article:not([class]),main>section.towns,main>section.services-block,main>section.related:not(.wrap){max-width:1180px;margin:0 auto;padding:clamp(28px,4vw,48px) var(--pad)}
main>section:not([class]) h2,main>article:not([class]) h2,main>section.towns h2,main>section.services-block h2{font-family:var(--font-display);font-weight:700;font-variation-settings:"opsz" 62;font-size:var(--d3);line-height:.92;letter-spacing:-.02em;margin:1.4em 0 .5em;text-wrap:balance}
main>section:not([class]) h3,main>article:not([class]) h3{font-family:var(--font-display);font-weight:700;font-variation-settings:"opsz" 40;font-size:1.5rem;line-height:1;margin:1.4em 0 .4em}
main>section:not([class]) p,main>article:not([class]) p{max-width:68ch;line-height:1.65}
main>section:not([class]) a:not(.btn),main>article:not([class]) a:not(.btn){color:var(--mark-700)}
main>header.hero{position:relative;isolation:isolate;background:var(--ink-lift);color:var(--on-ink);padding:calc(var(--header-h) + clamp(28px,5vw,64px)) var(--pad) clamp(40px,6vw,72px);border-bottom:1px solid var(--hair-gold)}
main>header.hero>*{position:relative;z-index:1;max-width:1180px;margin-inline:auto}
main>header.hero .eyebrow{color:var(--mark-400)}
main>header.hero h1,main>article:not([class]) h1{font-family:var(--font-display);font-weight:800;font-variation-settings:"opsz" 72;line-height:.88;letter-spacing:-.03em;font-size:clamp(2.7rem,6.2vw,5.6rem);color:#fff;margin:16px auto 0;max-width:min(1180px,16ch);text-wrap:balance}
main>article:not([class]){padding-top:calc(var(--header-h) + 36px)}
main>article:not([class]) h1{color:var(--ink);margin-top:16px}
main>header.hero .lead{color:var(--on-ink-2);font-size:var(--t-lead);max-width:62ch;margin:22px auto 0;line-height:1.55}
main>header.hero .mono,main>header.hero .breadcrumbs{color:var(--on-ink-faint);font-family:var(--font-mono);font-size:.7rem;letter-spacing:.12em;text-transform:uppercase;margin-top:22px}
main>header.hero figure{margin:30px auto 0;max-width:900px}
main>header.hero figure img{border-radius:4px;box-shadow:var(--shadow-float)}
main>header.hero .btn+.btn{margin-left:8px}
.lead{font-size:var(--t-lead);line-height:1.5;color:var(--muted)}
.mono{font-family:var(--font-mono);font-size:.72rem;letter-spacing:.1em;text-transform:uppercase;color:var(--muted)}
.grid{display:grid;gap:clamp(14px,2vw,22px);grid-template-columns:repeat(auto-fill,minmax(min(100%,260px),1fr))}
.grid--tight{grid-template-columns:repeat(auto-fill,minmax(11rem,1fr));gap:.3rem 1rem;list-style:none;padding:0;margin:0}
.grid--tight a{color:var(--ink);text-decoration:none;border-bottom:1px solid transparent}
.grid--tight a:hover{color:var(--mark-700);border-color:currentColor}
.grid .card h2,.grid .card h3{font-family:var(--font-display);font-weight:700;font-size:1.5rem;line-height:1;margin:0}
.grid .card h3 a{color:var(--ink);text-decoration:none} .grid .card h3 a:hover{color:var(--mark-700)}
.grid .card img{border-radius:3px;aspect-ratio:3/2;object-fit:cover;width:100%}
.aside{background:var(--paper-2);border-left:4px solid var(--gold);padding:18px 22px;margin:1.8em 0;border-radius:0 4px 4px 0}
.aside h2{font-size:1.4rem;margin-top:0}
.aside dl{margin:0} .aside dt{margin-top:10px} .aside dd{margin:2px 0 0}
.rev{background:var(--paper-3);border:1px solid var(--border);border-left:3px solid var(--gold);padding:18px 22px;margin:0 0 14px;border-radius:4px}
.rev p{margin:0;font-family:var(--font-serif);font-style:italic;font-size:1.08rem;line-height:1.45}
.rev cite{display:block;margin-top:10px;font-style:normal;font-size:.82rem;color:var(--muted);font-weight:600}
details.faq{border-bottom:1px solid var(--border);padding:12px 0;border-top:0}
details.faq summary{font-weight:700;cursor:pointer;padding:6px 0;display:block}
details.faq p{color:#3f3747;line-height:1.62;max-width:66ch;margin:8px 0 0}
.services-block ol.ledger{list-style:none;margin:0;padding:0;border-top:1px solid var(--ink)}
.services-block ol.ledger li{display:flex;flex-wrap:wrap;gap:8px 18px;align-items:baseline;padding:14px 0;border-bottom:1px solid var(--border)}
@media(max-width:640px){ .services-block ol.ledger li{display:grid;grid-template-columns:2.4rem minmax(0,1fr);gap:4px 12px;align-items:baseline}
  .services-block ol.ledger .n{grid-row:1} .services-block ol.ledger a{grid-column:2} .services-block ol.ledger li>span:not(.n){grid-column:2} }
.services-block ol.ledger .n{font-family:var(--font-mono);color:var(--gold-ink);font-size:.7rem;letter-spacing:.12em;min-width:2.4rem}
.services-block ol.ledger a{font-family:var(--font-display);font-weight:700;font-size:1.5rem;line-height:1;color:var(--ink);text-decoration:none}
.services-block ol.ledger a:hover{color:var(--mark-700)}
.est form.form:not([data-estimate]){padding:clamp(22px,3vw,30px);clip-path:none;max-width:640px}
.est form.form:not([data-estimate]) label{display:block;font-size:.82rem;font-weight:600;color:#4a3f52;margin:14px 0 4px}
.est form.form:not([data-estimate]) input:not([type=checkbox]),.est form.form:not([data-estimate]) select,.est form.form:not([data-estimate]) textarea{width:100%;border:0;border-bottom:2px solid var(--field-border);background:transparent;padding:8px 2px;font:inherit;color:var(--ink)}
.est form.form:not([data-estimate]) .check{display:flex;gap:10px;align-items:flex-start;font-weight:500;font-size:.85rem;color:var(--muted);margin-top:16px}
.est>.eyebrow,.est>h2,.est>.lead,.est>form{position:relative;z-index:2;max-width:1180px;margin-inline:auto;padding-inline:var(--pad)}
.est>.eyebrow{padding-top:var(--section-sm);color:var(--mark-400)}
.est>h2{font-family:var(--font-display);font-weight:700;font-variation-settings:"opsz" 62;font-size:var(--d2);line-height:.9;letter-spacing:-.02em;margin:14px auto 0;color:#fff}
.est>.lead{color:#e7dcec;margin:16px auto 24px}
.est>.lead a{color:#fff}
.est>form{margin-bottom:var(--section-sm)}

/* ============================================================ 17c the town sheet
   The 456 town pages (228 in each language). These were a scoped <style> block in
   templates/pages/town.html; they are ordinary classes here, in the same place in the
   cascade the block held, so nothing about the sheet moved. The tp- prefix marks the
   compositions only this page type uses: the survey grid, the on-file plate, the
   observation list and the boundary ledger. */
.tp-grid{display:grid;gap:clamp(30px,4vw,58px);grid-template-columns:minmax(0,1fr)}
@media(min-width:980px){
  .tp-grid{grid-template-columns:minmax(0,1.6fr) minmax(272px,.85fr);align-items:start}
  .tp-side{position:sticky;top:calc(var(--header-h) + 26px)}
}
.tp-plate{position:relative;background:var(--paper-3);border:1px solid var(--border);border-radius:4px;
  padding:22px 24px;box-shadow:var(--shadow-1)}
.tp-plate::before{content:"";position:absolute;inset:7px;pointer-events:none;--tick:linear-gradient(var(--gold),var(--gold));
  background:var(--tick) 0 0/13px 1px,var(--tick) 0 0/1px 13px,var(--tick) 100% 0/13px 1px,var(--tick) 100% 0/1px 13px,
    var(--tick) 0 100%/13px 1px,var(--tick) 0 100%/1px 13px,var(--tick) 100% 100%/13px 1px,var(--tick) 100% 100%/1px 13px;
  background-repeat:no-repeat}
.tp-plate__t{font-family:var(--font-mono);font-size:.66rem;letter-spacing:.14em;text-transform:uppercase;
  color:var(--gold-ink);font-weight:600;margin:0 0 14px}
.tp-plate dl{margin:0;display:grid;grid-template-columns:auto minmax(0,1fr);gap:11px 18px}
.tp-plate dt{font-family:var(--font-mono);font-size:.6rem;letter-spacing:.13em;text-transform:uppercase;
  color:var(--muted);font-weight:600;padding-top:3px}
.tp-plate dd{margin:0;font-size:.94rem;line-height:1.45;color:var(--ink)}
.tp-plate dd a{color:var(--mark-700);text-decoration:none;border-bottom:1px solid transparent;transition:border-color .15s}
.tp-plate dd a:hover{border-color:currentColor}
.tp-obs{margin-top:22px}
.tp-obs ol{margin:.5em 0 0;padding-left:1.6em;list-style:decimal-leading-zero}
.tp-obs li{margin:.55em 0;font-size:.94rem;line-height:1.5}
.tp-obs li::marker{font-family:var(--font-mono);font-size:.78em;color:var(--gold-ink)}
.tp-bound{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,320px),1fr));
  column-gap:clamp(26px,4vw,64px);list-style:none;margin:26px 0 0;padding:0;border-top:2px solid var(--ink)}
.tp-bound li{border-bottom:1px solid var(--border)}
.tp-bound a{position:relative;display:grid;grid-template-columns:minmax(0,1fr) auto;gap:6px 18px;
  align-items:baseline;padding:15px 0;color:var(--ink);text-decoration:none;
  transition:color .15s,padding-left .22s var(--ease-out)}
.tp-bound a:hover{color:var(--mark-700);padding-left:8px}
.tp-bound a::after{content:"";position:absolute;left:0;right:0;bottom:-1px;height:1px;background:var(--mark-700);
  transform:scaleX(0);transform-origin:left;transition:transform .35s var(--ease-out)}
.tp-bound a:hover::after,.tp-bound a:focus-visible::after{transform:scaleX(1)}
.tp-bound__n{font-family:var(--font-display);font-weight:700;font-variation-settings:"opsz" 40;
  font-size:clamp(1.2rem,2vw,1.5rem);line-height:1.05;letter-spacing:-.012em}
.tp-bound__c{font-family:var(--font-mono);font-size:.62rem;letter-spacing:.13em;text-transform:uppercase;
  color:var(--muted);white-space:nowrap}
.tp-h2{font-family:var(--font-display);font-weight:700;font-variation-settings:"opsz" 62;font-size:var(--d3);
  line-height:.92;letter-spacing:-.02em;color:var(--ink);margin:14px 0 20px;max-width:20ch;text-wrap:balance}
.tp-next{margin-top:clamp(34px,5vw,58px)}
.tp-figcap{margin:12px 2px 0;font-family:var(--font-mono);font-size:.68rem;letter-spacing:.01em;
  color:var(--muted);line-height:1.55}
/* One left edge for the page. The shell's .page-head__in stops at 1180px while .wrap
   pads inside its 1180px, so without this the h1 hangs a pad-width left of the body,
   and the shared .record and .voices bands sit further left again. All four are pulled
   onto the .wrap column here rather than in site.css, because only this page type
   mixes bands and wrapped sections. */
.page--town .page-head__in{max-width:calc(1180px - var(--pad) * 2)}
.page--town .page-head__tab{left:calc(var(--pad) + max(0px, (100% - 1180px) / 2))}
.page--town .page-head__grid{align-items:center;grid-template-columns:minmax(0,1.15fr) minmax(300px,.85fr)}
@media(max-width:820px){ .page--town .page-head__grid{grid-template-columns:1fr} }
.page--town .record .head{max-width:1180px;margin-inline:auto}
.page--town .voices__lead{max-width:none;padding-inline:calc(var(--pad) + max(0px, (100% - 1180px) / 2))}
.page--town .voices__h{margin:14px 0 10px;max-width:20ch}
.page--town .voices__intro{max-width:62ch;margin:0 0 28px}
/* three reviews, three columns, the way the county sheet shows them. The shared
   partial puts the eyebrow, the heading and the intro in the same wrapper as the
   quotes, so those three span the full row. */
@media(min-width:900px){
  .page--town .voices__lead{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:18px;align-items:start}
  .page--town .voices__lead>.eyebrow,
  .page--town .voices__lead>.voices__h,
  .page--town .voices__lead>.voices__intro{grid-column:1 / -1}
  .page--town .voices .rev{margin:0;height:100%}
}
@media(prefers-reduced-motion:reduce){ .tp-bound a,.tp-bound a::after{transition:none} }
html.ax-nomotion .tp-bound a::after{transition:none}

/* ============================================================ 17d the site map
   /sitemap/ and /es/mapa-del-sitio/. One drawer per group: the rail on the left carries the
   file number, the name and the count, the links run down the right. The town lists are the
   only dense thing on the page, so they set in columns and keep the ink colour a link wants. */
.sm-index{padding-bottom:clamp(20px,3vw,40px)}
/* the first drawer already carries its own top padding, so the shared page-head gap is trimmed */
.page-head + .sm-index{padding-top:clamp(8px,1.6vw,22px)}
.sm-sec{max-width:1180px;margin:0 auto;padding:clamp(30px,4vw,54px) var(--pad);display:grid;
  grid-template-columns:minmax(190px,.65fr) minmax(0,2.6fr);gap:clamp(20px,3vw,48px);align-items:start;
  scroll-margin-top:calc(var(--header-h) + 20px)}
.sm-sec+.sm-sec{border-top:1px solid var(--line)}
.sm-sec__n{margin:0;font-family:var(--font-mono);font-size:.66rem;font-weight:700;letter-spacing:.16em;
  text-transform:uppercase;color:var(--gold-ink)}
.sm-sec__n span{color:var(--muted);font-weight:500}
.sm-sec h2{font-family:var(--font-display);font-weight:800;font-variation-settings:"opsz" 62;
  font-size:clamp(1.9rem,3.6vw,2.8rem);line-height:.9;letter-spacing:-.025em;color:var(--ink);margin:12px 0 0;text-wrap:balance}
.sm-sec__k{margin:12px 0 0;font-family:var(--font-mono);font-size:.66rem;letter-spacing:.14em;
  text-transform:uppercase;color:var(--muted)}
.sm-sec .btn{margin-top:20px}
@media(min-width:1000px){ .sm-sec__id{position:sticky;top:calc(var(--header-h) + 22px)} }
@media(max-width:760px){ .sm-sec{grid-template-columns:1fr;gap:20px} }
/* the flat lists: services, notes, records, company, legal */
.sm-list{list-style:none;margin:0;padding:0;border-top:2px solid var(--ink);
  display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,290px),1fr));column-gap:clamp(24px,3.4vw,56px)}
.sm-list li{border-bottom:1px solid var(--border)}
.sm-list a,.sm-tool{display:block;width:100%;text-align:left;padding:13px 0;color:var(--ink);
  font-family:inherit;font-size:.98rem;line-height:1.35;text-decoration:none;
  transition:color .15s ease,padding-left .22s var(--ease-out)}
.sm-list a:hover,.sm-tool:hover{color:var(--mark-700);padding-left:8px}
.sm-list small{display:block;margin-top:3px;font-family:var(--font-mono);font-size:.6rem;letter-spacing:.13em;
  text-transform:uppercase;color:var(--muted)}
.sm-tool{background:none;border:0;cursor:pointer}
.sm-sub{margin:clamp(26px,3vw,38px) 0 12px;font-family:var(--font-mono);font-size:.66rem;font-weight:600;
  letter-spacing:.14em;text-transform:uppercase;color:var(--gold-ink)}
/* the counties: one card each, every town under it, in columns */
.sm-counties{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,300px),1fr));
  gap:clamp(22px,2.8vw,38px)}
.sm-county{border-top:2px solid var(--ink);padding-top:13px}
.sm-county__h{font-family:var(--font-display);font-weight:700;font-variation-settings:"opsz" 40;
  font-size:clamp(1.2rem,1.9vw,1.45rem);line-height:1.05;letter-spacing:-.015em;margin:0}
.sm-county__h a{color:var(--ink);text-decoration:none;border-bottom:1px solid transparent;transition:border-color .15s,color .15s}
.sm-county__h a:hover{color:var(--mark-700);border-color:currentColor}
.sm-county__k{margin:6px 0 0;font-family:var(--font-mono);font-size:.6rem;letter-spacing:.13em;
  text-transform:uppercase;color:var(--muted)}
.sm-towns{list-style:none;margin:12px 0 0;padding:0;columns:2;column-gap:22px}
.sm-towns li{break-inside:avoid}
.sm-towns a{display:block;padding:7px 0;color:var(--ink);text-decoration:none;font-size:.9rem;line-height:1.3;
  border-bottom:1px solid var(--hair-ink);transition:color .15s ease}
.sm-towns a:hover{color:var(--mark-700)}
@media(max-width:420px){ .sm-towns{columns:1} }
@media(prefers-reduced-motion:reduce){ .sm-list a,.sm-tool,.sm-towns a{transition:none} }

/* ============================================================ 18 utilities and motion */
.rise{opacity:0}
.rise.in{opacity:1;animation:riseIn .55s var(--ease-out) calc(var(--i,0) * 55ms) backwards}
@keyframes riseIn{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}
html.ax-nomotion .rise{opacity:1;animation:none!important}
.count{font-variant-numeric:tabular-nums;display:inline-block;min-width:2.5ch;text-align:center}
.spotlight{position:fixed;top:0;left:0;width:560px;height:560px;margin:-280px 0 0 -280px;border-radius:50%;pointer-events:none;z-index:6;
  background:radial-gradient(circle,rgba(205,104,213,.18),rgba(226,165,58,.07) 42%,transparent 70%);mix-blend-mode:screen;opacity:0;transition:opacity .45s ease;will-change:transform}
body.spot-on .spotlight{opacity:1}
.live{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap}
.mt0{margin-top:0} .mb0{margin-bottom:0}
.flow>*+*{margin-top:var(--flow,1.2em)}
.center{text-align:center}
.hide-mobile{display:initial} @media(max-width:760px){ .hide-mobile{display:none} }
.icon{width:1em;height:1em;flex:none}

/* ============================================================ 19 reduced motion */
@media(prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  .rise{opacity:1;animation:none!important}
  .msg{animation:none}
  .typing span[aria-hidden]{animation:none}
  .progress{display:none}
  .est__weave{opacity:.42}
  .ledger .row::after,.map li::before{transform:scaleX(1);transition:none}
  .form.sent .form__ok .seal{animation:none}
  .book__ok svg path,.form__ok svg path{stroke-dashoffset:0;animation:none}
  .spotlight{display:none}
  .gal__item,.gal__item.rise{transform:none!important}
  .record::before,.map::before{transform:scaleX(1);transition:none}
  .roommap__hit path,.roommap__card,.pc__switch,.pc__switch::after{transition:none}
  *{scroll-behavior:auto}
}
html.ax-nomotion .roommap__hit path,html.ax-nomotion .roommap__card{transition:none}
html.ax-nomotion .record::before,html.ax-nomotion .map::before,html.ax-nomotion .ledger .row::after,html.ax-nomotion .map li::before{transform:scaleX(1)}

/* ============================================================ 20 print */
@media print{
  .hdr,.msheet,.progress,.spotlight,.chat-btn,.chat-panel,.ax-btn,.ax-panel,.pc,.callbar,.lb,.book,.book-scrim,.est__weave,.skip,.foot__social,.gal__more{display:none!important}
  body{background:#fff;color:#000;cursor:auto}
  .page-head,.section--ink,.record,.map,.est,.foot,.band{background:#fff!important;color:#000!important}
  .page-head h1,.page-head .lead,.record .head h2,.map__c,.foot__big{color:#000!important}
  .rise{opacity:1!important;animation:none!important}
  a[href^="http"]::after{content:" (" attr(href) ")";font-size:.8em;color:#555}
  .faq details{break-inside:avoid} .faq details:not([open]) .faq__a{display:block}
  .form{clip-path:none;box-shadow:none;border:1px solid #000}
}
