:root {
  --blue: #2563eb;
  --blue-dark: #1749b8;
  --blue-pale: #e8f0ff;
  --green: #16834a;
  --green-pale: #e4f7ec;
  --ink: #172033;
  --muted: #5b667a;
  --soft: #f1f5f9;
  --white: #ffffff;
  --line: #dce3ec;
  --heading: "Epilogue", Arial, sans-serif;
  --body: "Nunito Sans", Arial, sans-serif;
  --container: 1160px;
  --gutter: clamp(1rem, 4vw, 2rem);
  --space: clamp(4.25rem, 8vw, 7rem);
  --radius: 1.25rem;
  --shadow: 0 20px 55px rgb(31 51 89 / 12%);
}

*, *::before, *::after { box-sizing: border-box; }
html { scroll-behavior: smooth; scroll-padding-top: 6rem; }
body { margin: 0; min-width: 320px; overflow-x: clip; color: var(--ink); background: var(--white); font-family: var(--body); font-size: 1rem; line-height: 1.65; }
body.nav-open { overflow: hidden; }
img { display: block; max-width: 100%; }
a { color: inherit; }
button, input, textarea { max-width: 100%; color: inherit; font: inherit; }
button { cursor: pointer; }
:focus-visible { outline: 3px solid var(--blue); outline-offset: 3px; }
::selection { background: var(--blue-pale); color: var(--blue-dark); }
h1, h2, h3, p, blockquote, dl, dd, figure { margin-top: 0; }
h1, h2, h3 { font-family: var(--heading); line-height: 1.08; letter-spacing: -.04em; text-wrap: balance; }
h1 { margin-bottom: 1.4rem; font-size: clamp(2.75rem, 10vw, 5.7rem); font-weight: 800; }
h2 { margin-bottom: 1.1rem; font-size: clamp(2.15rem, 7vw, 4rem); font-weight: 700; }
h3 { margin-bottom: .45rem; font-size: 1.15rem; }
.container { width: min(100%, calc(var(--container) + var(--gutter) * 2)); margin-inline: auto; padding-inline: var(--gutter); }
.narrow { max-width: 1020px; }
.section { padding-block: var(--space); }
.visually-hidden { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0; }
.skip-link { position: fixed; z-index: 999; top: .75rem; left: .75rem; padding: .7rem 1rem; transform: translateY(-180%); border-radius: .5rem; background: var(--ink); color: var(--white); font-weight: 800; }
.skip-link:focus { transform: translateY(0); }
.site-header { position: sticky; z-index: 50; top: 0; border-bottom: 1px solid var(--line); background: rgb(255 255 255 / 96%); backdrop-filter: blur(12px); }
.header-inner { position: relative; display: flex; min-height: 5rem; align-items: center; justify-content: space-between; gap: 1rem; }
.brand { display: flex; align-items: center; gap: .65rem; text-decoration: none; }
.brand__mark { display: grid; width: 2.65rem; height: 2.65rem; flex: 0 0 auto; place-items: center; border-radius: .8rem; background: var(--blue); color: var(--white); font: 800 1.1rem var(--heading); }
.brand strong, .brand small { display: block; line-height: 1; }
.brand strong { font: 800 1.05rem var(--heading); letter-spacing: -.03em; }
.brand small { margin-top: .27rem; color: var(--muted); font-size: .73rem; font-weight: 800; letter-spacing: .09em; text-transform: uppercase; }
.nav-toggle { display: grid; width: 3rem; height: 3rem; place-content: center; gap: .3rem; border: 1px solid var(--line); border-radius: .75rem; background: var(--white); }
.nav-toggle i { display: block; width: 1.25rem; height: 2px; border-radius: 2px; background: var(--ink); }
.primary-nav { position: absolute; top: 100%; right: var(--gutter); left: var(--gutter); display: none; padding: .65rem; border: 1px solid var(--line); border-radius: 1rem; background: var(--white); box-shadow: var(--shadow); }
.primary-nav.is-open { display: grid; }
.primary-nav a { padding: .8rem; border-radius: .55rem; font-weight: 800; text-decoration: none; }
.phone-button { display: none; }
.hero { padding-block: clamp(3rem, 8vw, 6.5rem); overflow: hidden; background: linear-gradient(145deg, #fff 55%, #f3f7ff); }
.hero-grid { display: grid; gap: 3rem; align-items: center; }
.hero-copy > p:not(.eyebrow) { max-width: 38rem; color: var(--muted); font-size: clamp(1.05rem, 2vw, 1.25rem); }
.eyebrow { margin-bottom: .9rem; color: var(--blue); font-size: .78rem; font-weight: 800; letter-spacing: .11em; text-transform: uppercase; }
.eyebrow span { color: var(--green); }
.hero-actions { display: flex; flex-wrap: wrap; align-items: center; gap: .8rem 1.25rem; margin-top: 1.75rem; }
.button { display: inline-flex; min-height: 3.35rem; align-items: center; justify-content: center; padding: .8rem 1.25rem; border: 2px solid transparent; border-radius: .8rem; font-weight: 800; text-align: center; text-decoration: none; }
.button--primary { border-color: var(--blue); background: var(--blue); color: var(--white); box-shadow: 0 10px 25px rgb(37 99 235 / 22%); }
.call-link { padding-block: .7rem; color: var(--blue-dark); font-weight: 800; }
.reassurance { display: flex; flex-wrap: wrap; gap: .65rem 1rem; padding: 0; margin: 1.8rem 0 0; color: var(--muted); font-size: .9rem; font-weight: 700; list-style: none; }
.reassurance span { color: var(--green); }
.hero-photo { position: relative; padding: .65rem; border: 1px solid var(--line); border-radius: clamp(1.25rem, 4vw, 2rem); background: var(--white); box-shadow: var(--shadow); }
.hero-photo::before { position: absolute; z-index: -1; top: -1.25rem; right: -.6rem; width: 8.5rem; height: 8.5rem; content: ""; border-radius: 50%; background: var(--green-pale); }
.hero-photo img { width: 100%; aspect-ratio: 16/11; border-radius: calc(clamp(1.25rem, 4vw, 2rem) - .35rem); object-fit: cover; object-position: 68% center; }
.hero-photo figcaption { position: absolute; right: 1.25rem; bottom: 1.25rem; padding: .7rem .9rem; border-radius: .75rem; background: rgb(255 255 255 / 94%); box-shadow: 0 8px 22px rgb(20 40 80 / 16%); font-size: .83rem; }
.hero-photo figcaption span { color: #f3a712; }
.hero-photo figcaption strong { margin-inline: .2rem; }
.section-heading { max-width: 720px; margin-bottom: 2.6rem; }
.section-heading > p:last-child:not(.eyebrow) { margin-bottom: 0; color: var(--muted); font-size: 1.08rem; }
.service-list { border-top: 1px solid var(--line); }
.service-list article { display: grid; grid-template-columns: auto minmax(0, 1fr); gap: .75rem 1rem; align-items: start; padding-block: 1.5rem; border-bottom: 1px solid var(--line); }
.service-icon { display: grid; width: 2.8rem; height: 2.8rem; place-items: center; border-radius: .75rem; background: var(--blue-pale); color: var(--blue); font-size: 1.35rem; }
.service-list p { margin-bottom: 0; color: var(--muted); }
.service-list a { grid-column: 2; color: var(--blue); font-weight: 800; text-decoration: none; white-space: nowrap; }
.family { background: var(--soft); }
.family-grid { display: grid; gap: 3rem; }
.family-copy > p:not(.eyebrow) { color: var(--muted); font-size: 1.08rem; }
.check-grid { display: grid; gap: 1rem; align-items: stretch; }
.check-grid article { min-height: 100%; padding: 1.5rem; border: 1px solid var(--line); border-radius: var(--radius); background: var(--white); box-shadow: 0 10px 25px rgb(31 51 89 / 5%); }
.check-grid article > span { display: grid; width: 2rem; height: 2rem; place-items: center; margin-bottom: 1.25rem; border-radius: 50%; background: var(--green-pale); color: var(--green); font-weight: 800; }
.check-grid p { margin-bottom: 0; color: var(--muted); }
.specials { background: var(--white); }
.section-heading--row { max-width: none; }
.voucher-grid { display: grid; gap: 1rem; align-items: stretch; }
.voucher { position: relative; display: flex; min-height: 100%; flex-direction: column; justify-content: space-between; gap: 2rem; padding: clamp(1.4rem, 5vw, 2.25rem); border: 2px dashed #9bb7ef; border-radius: var(--radius); background: #f8fbff; }
.voucher::before, .voucher::after { position: absolute; top: 50%; width: 1.15rem; height: 1.15rem; content: ""; transform: translateY(-50%); border: 2px dashed #9bb7ef; border-radius: 50%; background: var(--white); }
.voucher::before { left: -.65rem; border-left-color: transparent; border-bottom-color: transparent; transform: translateY(-50%) rotate(45deg); }
.voucher::after { right: -.65rem; border-right-color: transparent; border-top-color: transparent; transform: translateY(-50%) rotate(45deg); }
.voucher p { margin-bottom: .55rem; color: var(--blue); font-size: .75rem; font-weight: 800; letter-spacing: .11em; text-transform: uppercase; }
.voucher h3 { font-size: clamp(1.75rem, 6vw, 2.7rem); }
.voucher span { color: var(--muted); }
.voucher small { padding-top: 1rem; border-top: 1px dashed #b8c8e6; color: var(--muted); font-weight: 800; }
.reviews { background: var(--soft); }
.review-grid { display: grid; gap: 1rem; align-items: stretch; }
.review-grid blockquote { display: flex; min-height: 100%; flex-direction: column; padding: 1.5rem; margin-bottom: 0; border-radius: var(--radius); background: var(--white); }
.stars { margin-bottom: 1.1rem; color: #e59c08; letter-spacing: .12em; }
.review-grid blockquote > p { flex: 1; color: #384358; font-size: 1.03rem; }
.review-grid footer { display: flex; align-items: center; justify-content: space-between; gap: .75rem; padding-top: 1rem; border-top: 1px solid var(--line); }
.review-grid footer span { color: var(--muted); font-size: .86rem; }
.stats { padding-block: 3.5rem; background: var(--blue); color: var(--white); }
.stats-grid { display: grid; gap: 2rem; }
.stats-grid > div { padding-bottom: 1.2rem; border-bottom: 1px solid rgb(255 255 255 / 28%); }
.stats-grid > div:last-child { padding-bottom: 0; border: 0; }
.stat-number { display: block; font: 800 clamp(2.7rem, 10vw, 4.8rem)/1 var(--heading); letter-spacing: -.06em; }
.stats-grid p { margin: .45rem 0 0; font-weight: 700; }
.visit-grid { display: grid; gap: 1rem; align-items: stretch; }
.hours-card, .map-card { min-height: 100%; border-radius: var(--radius); }
.hours-card { display: flex; flex-direction: column; padding: clamp(1.5rem, 5vw, 2.5rem); background: var(--ink); color: var(--white); }
.card-label { margin-bottom: .6rem; color: #9db8f5; font-size: .75rem; font-weight: 800; letter-spacing: .12em; text-transform: uppercase; }
.hours-card dl { margin-block: 1.5rem; }
.hours-card dl div { display: flex; justify-content: space-between; gap: 1rem; padding-block: .7rem; border-bottom: 1px solid rgb(255 255 255 / 17%); }
.hours-card dt { font-weight: 700; }
.hours-card dd { color: #cbd3e1; text-align: right; }
.hours-card > a { display: flex; flex-direction: column; margin-top: auto; padding-top: 1rem; color: #a9c0ff; text-decoration: none; }
.hours-card > a span { font-size: .78rem; font-weight: 700; }
.hours-card > a strong { font: 700 clamp(1.6rem, 7vw, 2.5rem) var(--heading); letter-spacing: -.05em; }
.map-card { position: relative; min-height: 25rem; overflow: hidden; background: #dce8ec; }
.map-lines, .map-lines::before, .map-lines::after { position: absolute; content: ""; background: transparent; }
.map-lines { inset: 0; background: linear-gradient(34deg, transparent 47%, #fff 48%, #fff 52%, transparent 53%), linear-gradient(145deg, transparent 28%, #c6d8de 29%, #c6d8de 34%, transparent 35%); }
.map-lines::before { inset: 20% -10%; transform: rotate(-7deg); border-block: 1rem solid #f9fcfd; }
.map-lines::after { inset: -10% 45%; transform: rotate(12deg); border-inline: .7rem solid #f9fcfd; }
.map-pin { position: absolute; top: 33%; left: 55%; z-index: 1; display: grid; width: 3rem; height: 3rem; place-items: center; transform: translate(-50%, -50%) rotate(45deg); border-radius: 50% 50% 50% 0; background: var(--blue); color: var(--white); font: 800 1rem var(--heading); box-shadow: 0 8px 18px rgb(31 51 89 / 25%); }
.map-pin::first-letter { transform: rotate(-45deg); }
.map-card > div:last-child { position: absolute; right: 1rem; bottom: 1rem; left: 1rem; z-index: 2; padding: 1.25rem; border-radius: .9rem; background: rgb(255 255 255 / 94%); box-shadow: 0 12px 28px rgb(31 51 89 / 14%); }
.map-card p { margin-bottom: .25rem; color: var(--blue); font-weight: 800; }
.map-card strong { display: block; }
.map-card a { display: inline-block; margin-top: .7rem; color: var(--blue-dark); font-weight: 800; }
.appointment { background: #eaf1ff; }
.appointment-grid { display: grid; gap: 3rem; }
.appointment-grid > div > p:last-child { max-width: 33rem; color: var(--muted); }
.appointment form { display: grid; gap: 1rem; padding: clamp(1.2rem, 4vw, 2rem); border-radius: var(--radius); background: var(--white); box-shadow: var(--shadow); }
.field label { display: block; margin-bottom: .4rem; font-size: .84rem; font-weight: 800; }
.field input, .field textarea { width: 100%; padding: .85rem 1rem; border: 1px solid #c9d3e1; border-radius: .65rem; background: var(--white); }
.field textarea { resize: vertical; }
.field input:focus, .field textarea:focus { border-color: var(--blue); }
.form-status { margin: 0; padding: .8rem 1rem; border-radius: .65rem; background: var(--green-pale); color: #105936; font-weight: 700; }
.form-status.is-error { background: #fee9e9; color: #862828; }
.footer { padding-block: 2.25rem; background: var(--white); }
.footer-grid { display: grid; gap: 1.25rem; align-items: center; text-align: center; }
.brand--footer { justify-content: center; }
.footer p { margin-bottom: 0; color: var(--muted); }
.footer > div > a:last-child { color: var(--blue); font: 700 1.2rem var(--heading); }

@media (min-width: 600px) {
  .service-list article { grid-template-columns: auto minmax(0, 1fr) auto; gap: 1.25rem; }
  .service-list a { grid-column: auto; align-self: center; }
  .check-grid, .voucher-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .stats-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .stats-grid > div { padding: 0 1rem 0 0; border-right: 1px solid rgb(255 255 255 / 28%); border-bottom: 0; }
  .footer-grid { grid-template-columns: 1fr 1.2fr 1fr; text-align: left; }
  .brand--footer { justify-content: flex-start; }
  .footer-grid > a:last-child { text-align: right; }
}

@media (min-width: 760px) {
  .hero-grid, .family-grid, .appointment-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .hero-photo { order: 2; }
  .review-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .visit-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .section-heading--row { display: grid; grid-template-columns: minmax(0, 1.2fr) minmax(16rem, .6fr); gap: 2rem; align-items: end; }
  .section-heading--row > p { justify-self: end; }
}

@media (min-width: 1020px) {
  .nav-toggle { display: none; }
  .primary-nav { position: static; display: flex; padding: 0; border: 0; box-shadow: none; }
  .primary-nav a { padding: .75rem; font-size: .9rem; }
  .phone-button { display: flex; flex-direction: column; padding: .65rem .9rem; border-radius: .75rem; background: var(--blue); color: var(--white); line-height: 1.05; text-decoration: none; }
  .phone-button span { font-size: .65rem; font-weight: 800; letter-spacing: .08em; text-transform: uppercase; }
  .phone-button strong { margin-top: .22rem; }
  .hero-grid { grid-template-columns: minmax(0, .9fr) minmax(0, 1.1fr); gap: 5rem; }
  .family-grid { gap: 6rem; }
}

@media (hover: hover) {
  .button, .phone-button, .primary-nav a, .service-list a, .call-link { transition: color .2s ease, background-color .2s ease, transform .2s ease; }
  .button--primary:hover, .phone-button:hover { background: var(--blue-dark); }
  .primary-nav a:hover { color: var(--blue); background: var(--soft); }
  .service-list a:hover, .call-link:hover { color: var(--ink); }
  .check-grid article { transition: transform .2s ease, box-shadow .2s ease; }
  .check-grid article:hover { transform: translateY(-3px); box-shadow: var(--shadow); }
}

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

/* Standard: back-to-top button with scroll-progress ring */
.btt-button {
  position: fixed; right: 1.25rem; bottom: 1.25rem; z-index: 900;
  width: 48px; height: 48px; padding: 0; border: 0; border-radius: 50%;
  background: rgba(17, 17, 17, 0.85); cursor: pointer;
  opacity: 0; visibility: hidden; transform: translateY(8px);
  transition: opacity 0.25s, transform 0.25s, visibility 0.25s;
  display: grid; place-items: center;
  -webkit-backdrop-filter: blur(4px); backdrop-filter: blur(4px);
}
.btt-button.btt-visible { opacity: 1; visibility: visible; transform: none; }
.btt-button:focus-visible { outline: 3px solid #2563eb; outline-offset: 3px; }
.btt-ring { position: absolute; inset: 0; width: 100%; height: 100%; transform: rotate(-90deg); }
.btt-ring circle { fill: none; stroke-width: 3; }
.btt-ring-track { stroke: rgba(255, 255, 255, 0.22); }
.btt-ring-fill { stroke: #2563eb; stroke-dasharray: 125.66; stroke-dashoffset: 125.66; stroke-linecap: round; }
.btt-arrow { width: 18px; height: 18px; fill: none; stroke: #fff; stroke-width: 2.4; stroke-linecap: round; stroke-linejoin: round; }
@media (prefers-reduced-motion: reduce) { .btt-button { transition: none; } }
