/* Site-wide compact mobile footer. Desktop layout remains unchanged. */
.foot-toggle{font:inherit;color:inherit;background:none;border:0;padding:0;text-align:left;width:100%}
.foot-panel{display:contents}
@media(max-width:720px){
  footer{padding-bottom:18px}
  .foot-cta{padding:34px 0}
  .foot-grid{display:block!important;padding:34px 0 22px!important}
  .foot-brand{padding-bottom:24px}
  .foot-brand p{max-width:42ch;margin:12px 0;font-size:.86rem;line-height:1.55}
  .foot-trust{display:grid;grid-template-columns:1fr 1fr;gap:8px 12px;margin-top:14px}
  .foot-trust span{font-size:.73rem;line-height:1.4;align-items:flex-start}
  .foot-col{border-top:1px solid rgba(255,255,255,.09)}
  .foot-col:last-child{border-bottom:1px solid rgba(255,255,255,.09)}
  .foot-col .foot-toggle{display:flex;align-items:center;justify-content:space-between;gap:16px;min-height:54px;cursor:pointer;font-family:'Montserrat','Montserrat Fallback',sans-serif;font-size:.75rem;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:#B2C1DD}
  .foot-col .foot-toggle::after{content:"+";display:grid;place-items:center;width:25px;height:25px;border-radius:50%;border:1px solid rgba(143,163,200,.28);font-size:1rem;font-weight:400;line-height:1;color:#8FA3C8;transition:transform .25s ease,color .25s,border-color .25s}
  .foot-col .foot-toggle[aria-expanded="true"]::after{content:"−";color:#EAF0FB;border-color:rgba(79,155,255,.45);transform:rotate(180deg)}
  .foot-col .foot-toggle::before{display:none!important}
  .foot-panel{display:block;padding:0 0 14px}
  .foot-panel[hidden]{display:none}
  .foot-col a,.foot-col span{font-size:.84rem;margin-bottom:9px;line-height:1.45}
  .foot-links2{column-count:2!important;column-gap:18px!important}
  .foot-col .pill{width:100%;max-width:290px;margin-bottom:9px}
  .foot-social{margin:12px 0 2px}
  .foot-bottom{padding-top:18px;gap:11px;display:grid;justify-items:start}
  .foot-bottom .mini-links{display:flex;gap:14px;flex-wrap:wrap}
  .foot-bottom .mini-links a{margin-left:0}
  .disclaimer{margin-top:16px;font-size:.7rem;line-height:1.5}
}
@media(max-width:390px){
  .foot-trust{grid-template-columns:1fr}
  .foot-links2{column-count:1!important}
}
@media(prefers-reduced-motion:reduce){.foot-col .foot-toggle::after{transition:none}}

/* Tap targets: WCAG 2.5.8 AA asks for 24px on standalone controls. These sit
   between 15px and 22.3px, which is 62% to 93% of the floor on every page.

   min-height rather than padding for the block and flex controls: the footer
   link columns hold roughly ten links each, so padding every one of them would
   add real height to a footer that is already 1063px tall, while min-height
   costs the 1.9px each is actually short. Inline controls take padding-block
   instead, which grows the hit box without touching the line box, so the text
   does not move at all. */
.foot-links2 a,
.foot-panel > a,
.foot-grid .foot-col a:not(.brand) {
  min-height: 24px;
  display: flex;
  align-items: center;
}
.foot-grid .foot-col button.fh {
  min-height: 24px;
}
/* Inline, inside a run of separators: padding only. */
.mini-links a,
a.cat-all,
a.yr-link,
a.rpt-link {
  padding-block: 5px;
}
/* Primary navigation is a flex row; the anchors are the flex items. */
nav.navlinks > a {
  min-height: 24px;
  display: flex;
  align-items: center;
}

/* The remaining standalone controls, each its own line rather than a link
   inside a sentence. inline-flex because several are inline elements whose
   own rules zero out padding. */
.foot-secline a,
a.desk-talk,
a.yr-link,
a.rpt-link,
a.cat-all,
.svc-links a,
.bill-line a,
.bnd-subline a,
a.link {
  display: inline-flex;
  align-items: center;
  min-height: 24px;
}

/* The six city pages had one inbound link each, so the whole local play hung on
   a single edge apiece. The footer is the one surface every page shares. */
.mini-links.areas { display: block; margin-bottom: 10px; }
.mini-links.areas b {
  font-weight: 700;
  margin-right: 10px;
  color: inherit;
  opacity: .75;
}

/* A typeset coverage area rather than a list of place names. The four towns sit
   at their real latitude and longitude, projected into the box, so the shape is
   this stretch of coastline and not an arrangement. The connecting stroke uses
   the engine's thread pattern, so it draws as the footer comes into view and is
   simply absent under reduced motion. Each name is the link; the dot is
   decoration and hidden from assistive tech. */
.cmap{position:relative;width:100%;max-width:340px;aspect-ratio:2/1;margin:2px 0 12px;color:var(--teal-2,#7FF0E4)}
.cmap-svg{position:absolute;inset:0;width:100%;height:100%}
.cmap-pt{position:absolute;transform:translate(-50%,-50%);display:inline-flex;align-items:center;gap:6px;min-height:24px;padding:2px 4px;white-space:nowrap;font-size:.76rem;line-height:1}
.cmap-dot{width:5px;height:5px;border-radius:50%;background:currentColor;flex:none;box-shadow:0 0 8px currentColor}
.cmap-nm{color:var(--body,#A6B2CC)}
.cmap-pt:hover .cmap-nm,.cmap-pt:focus-visible .cmap-nm{color:var(--ink,#EAF0FB)}
@media(max-width:520px){.cmap{max-width:280px}.cmap-pt{font-size:.72rem}}

/* Westerly and Mystic are eleven kilometres apart, so at this scale their
   labels collide. The DOTS stay at their true positions; only the label moves,
   because the point of plotting real coordinates is lost if you move the place. */
.cmap-pt.up{flex-direction:column;gap:3px;transform:translate(-50%,-165%)}
.cmap-pt.up .cmap-nm{order:-1}
