/* ==========================================================================
   Mia Druck — Ocean Glades Realty
   Editorial design system. Shared by index.html and every area page.
   ========================================================================== */

/* Fonts (self-hosted, latin subset) */
@font-face{
  font-family:'Fraunces';
  src:url('fonts/fraunces-latin-var.woff2') format('woff2-variations');
  font-weight:400 700;
  font-display:swap;
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,
                U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,
                U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}
@font-face{
  font-family:'Inter';
  src:url('fonts/inter-latin-var.woff2') format('woff2-variations');
  font-weight:400 700;
  font-display:swap;
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,
                U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,
                U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}

:root{
  /* Palette — no gradients anywhere. */
  --ink:#0F2436;
  --ink-80:rgba(15,36,54,.80);
  --ink-60:rgba(15,36,54,.62);
  --paper:#FBF8F3;
  --sand:#E7DCCA;
  --sand-soft:#F2EBDF;
  --brass:#9A7B4F;
  --brass-dark:#7C6039;
  --rule:rgba(15,36,54,.14);
  --rule-strong:rgba(15,36,54,.28);

  --serif:'Fraunces',Georgia,'Times New Roman',serif;
  --sans:'Inter',system-ui,-apple-system,'Segoe UI',Roboto,Arial,sans-serif;

  /* Type scale */
  --t-meta:14px;
  --t-body:17px;
  --t-lead:clamp(19px,1.4vw,21px);
  --t-h3:clamp(22px,2vw,26px);
  --t-h2:clamp(30px,4vw,52px);
  --t-h1:clamp(46px,7vw,96px);

  --wrap:1180px;
  --gutter:clamp(20px,5vw,48px);
  --section:clamp(72px,10vw,140px);
  --photo-max:560px;   /* hard cap — see plan: keeps photos at ~1.3x native */
}

*,*::before,*::after{ box-sizing:border-box; }

html{
  scroll-behavior:smooth;
  scroll-padding-top:96px;
  -webkit-text-size-adjust:100%;
}
body{
  margin:0;
  background:var(--paper);
  color:var(--ink);
  font-family:var(--sans);
  font-size:var(--t-body);
  line-height:1.7;
  -webkit-font-smoothing:antialiased;
  text-rendering:optimizeLegibility;
}

img{ max-width:100%; height:auto; display:block; }
a{ color:inherit; text-decoration:none; }

h1,h2,h3,h4{
  font-family:var(--serif);
  font-variation-settings:'opsz' 144;
  font-weight:600;
  letter-spacing:-.02em;
  margin:0;
}
h1{ font-size:var(--t-h1); line-height:.98; }
h2{ font-size:var(--t-h2); line-height:1.04; }
h3{ font-size:var(--t-h3); line-height:1.18; letter-spacing:-.015em; }
p{ margin:0 0 1.1em; }
p:last-child{ margin-bottom:0; }

.wrap{ width:min(var(--wrap),100% - var(--gutter)*2); margin-inline:auto; }

/* Accessibility ---------------------------------------------------------- */
.skip{
  position:absolute; left:-9999px; top:0; z-index:200;
  background:var(--ink); color:var(--paper);
  padding:14px 20px; font-weight:600;
}
.skip:focus{ left:0; }

:focus-visible{
  outline:2px solid var(--brass);
  outline-offset:3px;
}

.visually-hidden{
  position:absolute; width:1px; height:1px; overflow:hidden;
  clip:rect(0 0 0 0); clip-path:inset(50%); white-space:nowrap;
}

/* Shared bits ------------------------------------------------------------ */
.eyebrow{
  font-family:var(--sans);
  font-size:12px;
  font-weight:600;
  letter-spacing:.18em;
  text-transform:uppercase;
  color:var(--brass);
  margin:0;
}

.lead{
  font-size:var(--t-lead);
  line-height:1.6;
  color:var(--ink-80);
  max-width:62ch;
}

.meta{
  font-size:var(--t-meta);
  font-weight:500;
  letter-spacing:.02em;
  color:var(--ink-60);
}

/* Links inside prose get a brass underline that thickens on hover. */
.prose a,.underline-link{
  color:var(--ink);
  text-decoration:underline;
  text-decoration-color:var(--brass);
  text-underline-offset:4px;
  text-decoration-thickness:1px;
  transition:text-decoration-thickness .12s ease;
}
.prose a:hover,.underline-link:hover{ text-decoration-thickness:2px; }

/* Buttons — square, hairline, no gradient. */
.btn{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  gap:10px;
  min-height:52px;
  padding:0 26px;
  border:1px solid var(--ink);
  border-radius:2px;
  background:var(--ink);
  color:var(--paper);
  font-family:var(--sans);
  font-size:15px;
  font-weight:600;
  letter-spacing:.02em;
  cursor:pointer;
  transition:background .14s ease,color .14s ease,border-color .14s ease;
}
.btn:hover{ background:var(--brass); border-color:var(--brass); }

.btn-ghost{
  background:transparent;
  color:var(--ink);
  border-color:var(--rule-strong);
}
.btn-ghost:hover{ background:var(--ink); border-color:var(--ink); color:var(--paper); }

.btn-light{
  background:transparent;
  color:#fff;
  border-color:rgba(255,255,255,.55);
}
.btn-light:hover{ background:#fff; border-color:#fff; color:var(--ink); }

/* Header ----------------------------------------------------------------- */
.topbar{
  position:sticky;
  top:0;
  z-index:50;
  background:var(--paper);
  border-bottom:1px solid var(--rule);
}
.topbar-inner{
  width:min(var(--wrap),100% - var(--gutter)*2);
  margin-inline:auto;
  min-height:76px;
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:20px;
  position:relative;
}
.wordmark{
  font-family:var(--serif);
  font-variation-settings:'opsz' 144;
  font-weight:600;
  font-size:21px;
  letter-spacing:.14em;
  text-transform:uppercase;
  white-space:nowrap;
}
.wordmark span{
  display:block;
  font-family:var(--sans);
  font-size:10px;
  font-weight:500;
  letter-spacing:.2em;
  color:var(--ink-60);
  margin-top:2px;
}
.navlinks{ display:flex; align-items:center; gap:28px; }
.navlinks a{
  font-size:14px;
  font-weight:500;
  letter-spacing:.03em;
  color:var(--ink-80);
  padding:6px 0;
  border-bottom:1px solid transparent;
  transition:color .12s ease,border-color .12s ease;
}
.navlinks a:hover{ color:var(--ink); border-bottom-color:var(--brass); }
/* "page" is set in the markup on area pages; "location" is set by the scroll
   spy on the homepage. Both read as the current position. */
.navlinks a[aria-current]{ color:var(--ink); border-bottom-color:var(--brass); }
.navlinks a.nav-cta{
  border:1px solid var(--ink);
  border-radius:2px;
  padding:11px 20px;
  font-weight:600;
  color:var(--ink);
}
.navlinks a.nav-cta:hover{ background:var(--ink); color:var(--paper); border-color:var(--ink); }
/* The CTA is a bordered button — its own border shorthand resets the underline
   the rule above draws, so it fills instead. */
.navlinks a.nav-cta[aria-current]{ background:var(--ink); color:var(--paper); border-color:var(--ink); }

.nav-toggle{
  display:none;
  width:46px; height:46px;
  align-items:center; justify-content:center;
  border:1px solid var(--rule-strong);
  border-radius:2px;
  background:transparent;
  color:var(--ink);
  cursor:pointer;
}
.nav-toggle svg{ width:22px; height:22px; }

@media (max-width:860px){
  .nav-toggle{ display:inline-flex; }
  .navlinks{
    position:absolute;
    top:calc(100% + 1px);
    left:calc(var(--gutter) * -1);
    right:calc(var(--gutter) * -1);
    flex-direction:column;
    align-items:stretch;
    gap:0;
    padding:8px var(--gutter) 20px;
    background:var(--paper);
    border-bottom:1px solid var(--rule);
    opacity:0;
    transform:translateY(-10px);
    pointer-events:none;
    transition:opacity .18s ease,transform .18s ease;
  }
  .topbar.nav-open .navlinks{ opacity:1; transform:translateY(0); pointer-events:auto; }
  .navlinks a{
    padding:15px 0;
    font-size:16px;
    border-bottom:1px solid var(--rule);
  }
  /* Every row already has a divider here, so recolouring it reads as a rule,
     not a state — mark the current item with brass text instead. */
  .navlinks a[aria-current]{ color:var(--brass); border-bottom-color:var(--rule); }
  .navlinks a.nav-cta{
    margin-top:16px;
    text-align:center;
    justify-content:center;
    display:flex;
  }
}

/* Hero — the only full-bleed image on the site. ---------------------------- */
.hero{
  position:relative;
  min-height:min(88vh,820px);
  display:flex;
  align-items:flex-end;
  overflow:hidden;
  background:var(--ink);
}
.hero-img{
  position:absolute; inset:0;
  width:100%; height:100%;
  object-fit:cover;
}
/* Scrim tuned so white body copy clears 4.5:1 against the photo. */
.hero-scrim{
  position:absolute; inset:0;
  background:
    linear-gradient(180deg,rgba(15,36,54,.42) 0%,rgba(15,36,54,0) 34%),
    linear-gradient(0deg,rgba(15,36,54,.86) 0%,rgba(15,36,54,.44) 42%,rgba(15,36,54,.08) 78%);
}
.hero-inner{
  position:relative;
  width:min(var(--wrap),100% - var(--gutter)*2);
  margin-inline:auto;
  padding:clamp(48px,9vw,104px) 0;
  color:#fff;
}
.hero .eyebrow{ color:var(--sand); }
.hero h1{
  margin:18px 0 0;
  max-width:15ch;
  color:#fff;
}
.hero h1 em{
  font-style:italic;
  font-weight:400;
}
.hero-sub{
  margin:22px 0 0;
  max-width:46ch;
  font-size:var(--t-lead);
  line-height:1.6;
  color:rgba(255,255,255,.88);
}
.hero-actions{
  margin-top:34px;
  display:flex;
  gap:14px;
  flex-wrap:wrap;
}
/* Scoped to .hero: these invert for the dark photo hero. The area pages reuse
   .hero-actions over a light background and must keep the default button
   colours, so this must not leak out of .hero. */
.hero .hero-actions .btn{ background:#fff; border-color:#fff; color:var(--ink); }
.hero .hero-actions .btn:hover{ background:var(--brass); border-color:var(--brass); color:#fff; }
.hero .hero-actions .btn-light{ background:transparent; color:#fff; }
.hero .hero-actions .btn-light:hover{ background:#fff; color:var(--ink); }

/* Proof strip ------------------------------------------------------------- */
.proof{
  background:var(--ink);
  color:rgba(255,255,255,.82);
  border-bottom:1px solid rgba(255,255,255,.12);
}
.proof-inner{
  width:min(var(--wrap),100% - var(--gutter)*2);
  margin-inline:auto;
  padding:20px 0;
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:14px 34px;
  flex-wrap:wrap;
  font-size:13.5px;
  letter-spacing:.04em;
}
.proof strong{ color:#fff; font-weight:600; }
.proof .stars{ color:var(--sand); letter-spacing:2px; }
.proof-areas{ display:flex; gap:8px; flex-wrap:wrap; align-items:center; }
.proof-areas a{
  color:rgba(255,255,255,.82);
  border-bottom:1px solid rgba(255,255,255,.28);
  padding-bottom:1px;
  transition:color .12s ease,border-color .12s ease;
}
.proof-areas a:hover{ color:#fff; border-bottom-color:var(--sand); }
.proof-sep{ color:rgba(255,255,255,.34); }

/* Section framework ------------------------------------------------------- */
.section{ padding:var(--section) 0; }
.section--sand{ background:var(--sand-soft); }
.section--ink{ background:var(--ink); color:rgba(255,255,255,.86); }
.section--ink h2,.section--ink h3{ color:#fff; }
.section--ink .eyebrow{ color:var(--sand); }
.section--tight{ padding-block:clamp(56px,7vw,96px); }

.section-head{
  display:flex;
  align-items:flex-end;
  justify-content:space-between;
  gap:24px;
  flex-wrap:wrap;
  padding-bottom:22px;
  margin-bottom:clamp(36px,5vw,64px);
  border-bottom:1px solid var(--rule);
}
.section--ink .section-head{ border-bottom-color:rgba(255,255,255,.18); }
.section-head .eyebrow{ margin-bottom:14px; }
.section-head h2{ max-width:20ch; }
.section-head .hint{
  font-size:var(--t-meta);
  color:var(--ink-60);
  max-width:34ch;
  text-align:right;
}
.section--ink .section-head .hint{ color:rgba(255,255,255,.62); }
@media (max-width:760px){
  .section-head{ flex-direction:column; align-items:flex-start; }
  .section-head .hint{ text-align:left; }
}

/* Listings — editorial index rows, alternating sides. ---------------------- */
.listing-index{ display:grid; gap:clamp(52px,7vw,96px); }

.listing{
  display:grid;
  grid-template-columns:minmax(0,var(--photo-max)) minmax(0,1fr);
  gap:clamp(28px,5vw,64px);
  align-items:center;
}
.listing:nth-child(even) .listing-media{ order:2; }

.listing-media{
  position:relative;
  max-width:var(--photo-max);
  background:var(--sand);
}
.listing-media img{
  width:100%;
  aspect-ratio:3/2;
  object-fit:cover;
}
.listing-flag{
  position:absolute;
  top:0; left:0;
  background:var(--paper);
  color:var(--ink);
  font-size:11px;
  font-weight:600;
  letter-spacing:.16em;
  text-transform:uppercase;
  padding:8px 14px;
}

.listing-body{ min-width:0; }
.listing-price{
  font-family:var(--serif);
  font-variation-settings:'opsz' 144;
  font-weight:600;
  font-size:clamp(26px,3vw,34px);
  letter-spacing:-.02em;
  line-height:1;
}
.listing-body h3{ margin:14px 0 4px; }
.listing-city{
  font-family:var(--serif);
  font-style:italic;
  font-weight:400;
  font-size:var(--t-lead);
  color:var(--ink-60);
}
.listing-rule{
  height:1px;
  background:var(--rule);
  margin:22px 0;
}
.listing-specs{
  display:flex;
  flex-wrap:wrap;
  gap:8px 18px;
  font-size:var(--t-meta);
  font-weight:500;
  letter-spacing:.06em;
  text-transform:uppercase;
  color:var(--ink-80);
}
.listing-specs li{ list-style:none; }
.listing-specs{ margin:0; padding:0; }
.listing-tags{
  display:flex;
  flex-wrap:wrap;
  gap:8px;
  margin:20px 0 0;
  padding:0;
}
.listing-tags li{
  list-style:none;
  font-size:12px;
  font-weight:500;
  letter-spacing:.08em;
  text-transform:uppercase;
  color:var(--ink-60);
  border:1px solid var(--rule);
  padding:6px 12px;
}
.listing-actions{
  margin-top:28px;
  display:flex;
  align-items:center;
  gap:14px;
  flex-wrap:wrap;
}

.icon-btn{
  width:52px; height:52px;
  display:inline-flex;
  align-items:center;
  justify-content:center;
  border:1px solid var(--rule-strong);
  border-radius:2px;
  background:transparent;
  color:var(--ink);
  cursor:pointer;
  transition:background .14s ease,color .14s ease,border-color .14s ease;
}
.icon-btn:hover{ background:var(--ink); border-color:var(--ink); color:var(--paper); }
.icon-btn svg{ width:19px; height:19px; }

/* Deep-linked listing (?listing=…) */
.listing.is-highlighted .listing-media{ outline:3px solid var(--brass); outline-offset:8px; }

@media (max-width:860px){
  .listing{ grid-template-columns:1fr; gap:24px; }
  .listing:nth-child(even) .listing-media{ order:0; }
  .listing-media{ max-width:none; }
}

/* Recent sales — tighter 3-up. -------------------------------------------- */
.sold-grid{
  display:grid;
  grid-template-columns:repeat(3,1fr);
  gap:clamp(24px,3vw,40px);
}
@media (max-width:900px){ .sold-grid{ grid-template-columns:repeat(2,1fr); } }
@media (max-width:600px){ .sold-grid{ grid-template-columns:1fr; } }

.sold{ min-width:0; }
.sold-media{ background:var(--sand); margin-bottom:18px; }
.sold-media img{ width:100%; aspect-ratio:4/3; object-fit:cover; }
.sold-price{
  font-family:var(--serif);
  font-variation-settings:'opsz' 144;
  font-weight:600;
  font-size:26px;
  letter-spacing:-.02em;
  line-height:1;
}
.sold h3{ font-size:19px; margin:10px 0 4px; }
.sold-date{
  margin-top:12px;
  padding-top:12px;
  border-top:1px solid var(--rule);
  font-size:12px;
  font-weight:600;
  letter-spacing:.12em;
  text-transform:uppercase;
  color:var(--brass);
}

/* Reviews — editorial pull quotes. ---------------------------------------- */
.reviews-grid{
  display:grid;
  grid-template-columns:repeat(3,1fr);
  gap:clamp(28px,4vw,52px);
}
@media (max-width:900px){ .reviews-grid{ grid-template-columns:1fr; max-width:66ch; } }

.review{ position:relative; padding-top:18px; }
.review::before{
  content:'\201C';
  position:absolute;
  top:-24px; left:-6px;
  font-family:var(--serif);
  font-size:96px;
  line-height:1;
  color:var(--brass);
  opacity:.34;
  pointer-events:none;
}
.review blockquote{
  margin:0;
  position:relative;
  font-size:15.5px;
  line-height:1.72;
  color:var(--ink-80);
}
.review figcaption{
  margin-top:18px;
  padding-top:14px;
  border-top:1px solid var(--rule);
  font-size:12px;
  font-weight:600;
  letter-spacing:.14em;
  text-transform:uppercase;
}
.review figcaption .src{
  display:block;
  margin-top:5px;
  font-weight:500;
  letter-spacing:.06em;
  text-transform:none;
  color:var(--ink-60);
}

/* About ------------------------------------------------------------------- */
.about{
  display:grid;
  grid-template-columns:minmax(0,382px) minmax(0,1fr);
  gap:clamp(32px,6vw,80px);
  align-items:start;
}
@media (max-width:860px){ .about{ grid-template-columns:1fr; } }
.about-portrait{ background:var(--sand); }
.about-portrait img{ width:100%; aspect-ratio:3/4; object-fit:cover; }
.about-body .prose{ max-width:60ch; color:var(--ink-80); }
.about-credits{
  margin-top:36px;
  padding-top:28px;
  border-top:1px solid var(--rule);
  display:flex;
  align-items:center;
  gap:28px;
  flex-wrap:wrap;
}
.about-credits img{ height:66px; width:auto; }
.social-row{ display:flex; gap:10px; }
.social-btn{
  width:46px; height:46px;
  display:inline-flex;
  align-items:center;
  justify-content:center;
  border:1px solid var(--rule);
  border-radius:2px;
  color:var(--ink);
  transition:background .14s ease,color .14s ease,border-color .14s ease;
}
.social-btn:hover{ background:var(--ink); border-color:var(--ink); color:var(--paper); }
.social-btn svg{ width:20px; height:20px; }

/* Areas served ------------------------------------------------------------ */
.areas-grid{
  display:grid;
  grid-template-columns:repeat(4,1fr);
  gap:1px;
  background:var(--rule);
  border:1px solid var(--rule);
}
@media (max-width:900px){ .areas-grid{ grid-template-columns:repeat(2,1fr); } }
@media (max-width:520px){ .areas-grid{ grid-template-columns:1fr; } }

.area-card{
  display:block;
  background:var(--paper);
  padding:32px 26px 28px;
  transition:background .16s ease,color .16s ease;
}
.section--sand .area-card{ background:var(--sand-soft); }
.area-card h3{ font-size:22px; margin-bottom:8px; }
.area-card p{
  font-size:14px;
  line-height:1.6;
  color:var(--ink-60);
  margin:0;
  transition:color .16s ease;
}
.area-card .go{
  display:inline-block;
  margin-top:20px;
  font-size:12px;
  font-weight:600;
  letter-spacing:.14em;
  text-transform:uppercase;
  color:var(--brass);
  transition:color .16s ease;
}
.area-card:hover{ background:var(--ink); color:#fff; }
.area-card:hover h3{ color:#fff; }
.area-card:hover p{ color:rgba(255,255,255,.72); }
.area-card:hover .go{ color:var(--sand); }

/* FAQ --------------------------------------------------------------------- */
.faq{ max-width:80ch; }
.faq details{
  border-top:1px solid var(--rule);
  padding:0;
}
.faq details:last-of-type{ border-bottom:1px solid var(--rule); }
.faq summary{
  display:flex;
  align-items:flex-start;
  justify-content:space-between;
  gap:24px;
  padding:26px 0;
  cursor:pointer;
  list-style:none;
  font-family:var(--serif);
  font-variation-settings:'opsz' 144;
  font-weight:600;
  font-size:clamp(19px,1.7vw,22px);
  letter-spacing:-.015em;
  line-height:1.3;
}
.faq summary::-webkit-details-marker{ display:none; }
.faq summary::after{
  content:'+';
  flex:none;
  font-family:var(--sans);
  font-size:24px;
  font-weight:400;
  line-height:1;
  color:var(--brass);
  transition:transform .18s ease;
}
.faq details[open] summary::after{ transform:rotate(45deg); }
.faq-answer{
  padding:0 0 28px;
  max-width:70ch;
  color:var(--ink-80);
}

/* Contact ----------------------------------------------------------------- */
.contact{
  display:grid;
  grid-template-columns:minmax(0,1fr) minmax(0,1.15fr);
  gap:clamp(36px,6vw,88px);
  align-items:start;
}
@media (max-width:860px){ .contact{ grid-template-columns:1fr; } }

.contact-direct{ display:grid; gap:26px; }
.contact-line .label{
  font-size:11px;
  font-weight:600;
  letter-spacing:.16em;
  text-transform:uppercase;
  color:var(--brass);
  margin-bottom:6px;
}
.contact-line .value{
  font-family:var(--serif);
  font-variation-settings:'opsz' 144;
  font-weight:600;
  font-size:clamp(22px,2.2vw,28px);
  letter-spacing:-.02em;
  line-height:1.2;
}
.contact-line a.value:hover{ color:var(--brass); }
.contact-line address{
  font-style:normal;
  font-size:16px;
  line-height:1.6;
  color:var(--ink-80);
}

.form{ display:grid; gap:20px; }
.row2{ display:grid; grid-template-columns:1fr 1fr; gap:20px; }
@media (max-width:560px){ .row2{ grid-template-columns:1fr; } }

.field{ display:grid; gap:8px; }
.field > span{
  font-size:11px;
  font-weight:600;
  letter-spacing:.16em;
  text-transform:uppercase;
  color:var(--ink-60);
}
.field .req{ color:var(--brass); }
input,textarea,select{
  font:inherit;
  font-size:16px;         /* 16px stops iOS zoom-on-focus */
  color:var(--ink);
  background:transparent;
  border:0;
  border-bottom:1px solid var(--rule-strong);
  border-radius:0;
  padding:12px 2px;
  outline:none;
  transition:border-color .14s ease;
}
textarea{ resize:vertical; min-height:104px; }
input:focus,textarea:focus{ border-bottom-color:var(--brass); }
input::placeholder,textarea::placeholder{ color:rgba(15,36,54,.38); }

.form-foot{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:20px;
  flex-wrap:wrap;
  margin-top:6px;
}
.form-note{ font-size:13px; color:var(--ink-60); max-width:38ch; }

/* Honeypot — off-screen, never shown to real users. */
.hp{
  position:absolute !important;
  left:-9999px !important;
  width:1px; height:1px;
  overflow:hidden;
}

.form-success{
  border:1px solid var(--brass);
  padding:36px 32px;
  text-align:center;
}
.form-success h3{ margin-bottom:12px; }
.form-success p{ color:var(--ink-80); }

/* Footer ------------------------------------------------------------------ */
footer{
  background:var(--ink);
  color:rgba(255,255,255,.68);
  padding:clamp(56px,7vw,84px) 0 40px;
  font-size:14px;
}
.footer-grid{
  display:grid;
  grid-template-columns:1.4fr 1fr 1fr;
  gap:40px;
  padding-bottom:40px;
  border-bottom:1px solid rgba(255,255,255,.14);
}
@media (max-width:820px){ .footer-grid{ grid-template-columns:1fr 1fr; } }
@media (max-width:520px){ .footer-grid{ grid-template-columns:1fr; } }
footer .wordmark{ color:#fff; margin-bottom:16px; }
footer .wordmark span{ color:rgba(255,255,255,.58); }
footer address{ font-style:normal; line-height:1.7; }
footer a{ color:rgba(255,255,255,.78); }
footer a:hover{ color:#fff; text-decoration:underline; text-underline-offset:3px; }
.footer-col h4{
  font-family:var(--sans);
  font-size:11px;
  font-weight:600;
  letter-spacing:.16em;
  text-transform:uppercase;
  color:var(--sand);
  margin-bottom:16px;
}
.footer-col ul{ list-style:none; margin:0; padding:0; display:grid; gap:10px; }
.footer-legal{
  padding-top:28px;
  display:flex;
  justify-content:space-between;
  gap:16px 32px;
  flex-wrap:wrap;
  font-size:12.5px;
  color:rgba(255,255,255,.52);
  line-height:1.6;
}
.footer-legal p{ margin:0; max-width:72ch; }

/* Mobile sticky call bar --------------------------------------------------- */
.mobile-bar{
  position:fixed;
  left:0; right:0; bottom:0;
  z-index:60;
  display:none;
  border-top:1px solid var(--rule);
  background:var(--paper);
}
.mobile-bar a{
  flex:1;
  min-height:58px;
  display:flex;
  align-items:center;
  justify-content:center;
  gap:8px;
  font-size:14px;
  font-weight:600;
  letter-spacing:.04em;
}
.mobile-bar a + a{ border-left:1px solid var(--rule); }
.mobile-bar a.primary{ background:var(--ink); color:var(--paper); }
@media (max-width:860px){
  .mobile-bar{ display:flex; }
  body{ padding-bottom:58px; }
}

/* Breadcrumbs (area pages) ------------------------------------------------- */
.crumbs{
  padding:22px 0;
  font-size:12.5px;
  letter-spacing:.04em;
  color:var(--ink-60);
  border-bottom:1px solid var(--rule);
}
.crumbs ol{ list-style:none; margin:0; padding:0; display:flex; gap:8px; flex-wrap:wrap; }
.crumbs a:hover{ color:var(--ink); text-decoration:underline; text-underline-offset:3px; }
.crumbs [aria-current="page"]{ color:var(--ink); }

/* Area page — compact hero (no full-bleed photo). -------------------------- */
.page-hero{
  padding:clamp(56px,8vw,104px) 0 clamp(48px,6vw,72px);
  border-bottom:1px solid var(--rule);
}
.page-hero h1{ max-width:16ch; margin:18px 0 0; }
.page-hero .lead{ margin-top:24px; }
/* Buttons here use the default .btn / .btn-ghost colours — no overrides needed. */

/* Neighborhood chips */
.chip-list{
  display:flex;
  flex-wrap:wrap;
  gap:10px;
  margin:0;
  padding:0;
}
.chip-list li{
  list-style:none;
  border:1px solid var(--rule);
  padding:9px 15px;
  font-size:13px;
  letter-spacing:.04em;
  color:var(--ink-80);
}

/* Two-column prose block */
.prose-cols{
  display:grid;
  grid-template-columns:repeat(2,minmax(0,1fr));
  gap:clamp(28px,4vw,56px);
  color:var(--ink-80);
}
@media (max-width:760px){ .prose-cols{ grid-template-columns:1fr; } }

/* Toast ------------------------------------------------------------------- */
.copy-toast{
  position:fixed;
  left:50%; bottom:26px;
  transform:translateX(-50%) translateY(8px);
  z-index:999;
  background:var(--ink);
  color:var(--paper);
  padding:13px 22px;
  font-size:13px;
  font-weight:600;
  letter-spacing:.08em;
  text-transform:uppercase;
  opacity:0;
  pointer-events:none;
  transition:opacity .2s ease,transform .2s ease;
}
.copy-toast.show{ opacity:1; transform:translateX(-50%) translateY(0); }
@media (max-width:860px){ .copy-toast{ bottom:74px; } }

/* Utility ----------------------------------------------------------------- */
.hide{ display:none !important; }

/* Scroll reveal -----------------------------------------------------------
   Scoped to .js so the page stays fully visible without JavaScript. The class
   is set by an inline script in <head>; never hide content on CSS alone. */
.js .reveal{
  opacity:0;
  transform:translateY(18px);
  transition:opacity .7s cubic-bezier(.22,.61,.36,1),transform .7s cubic-bezier(.22,.61,.36,1);
}
.js .reveal.is-visible{ opacity:1; transform:none; }

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