/* Lawnster preview. Values come from tokens.css; brand colors are taken from the Lawnster logo. */
@font-face { font-family: "Clash Grotesk"; src: url("fonts/clash-grotesk-600.woff2") format("woff2"); font-weight: 600; font-display: swap; }
@font-face { font-family: "Switzer"; src: url("fonts/switzer-400.woff2") format("woff2"); font-weight: 400; font-display: swap; }
@font-face { font-family: "Switzer"; src: url("fonts/switzer-600.woff2") format("woff2"); font-weight: 600; font-display: swap; }

:root {
  --display: "Clash Grotesk", "Switzer", system-ui, sans-serif;
  --gold: #F2C443;          /* the yellow banner of the logo */
  --deep: #0F3540;          /* the dark teal ring of the logo, used for the frame: header, hero card, footer */
  --sage: #F2F6F1;          /* a light grass tint for cards on white */
  --head: 64px;
}

html { scroll-padding-top: var(--head); }
body { overflow-x: clip; }
h1, h2, h3 { font-family: var(--display); font-weight: 600; letter-spacing: -0.01em; }
.gold { color: var(--gold); }
::selection { background: var(--gold); color: var(--deep); }
:focus-visible { outline: 3px solid var(--accent); outline-offset: 3px; }
.top :focus-visible, .hero :focus-visible, .foot :focus-visible { outline-color: var(--gold); }

/* ---- header: a slim solid bar, the call button always in reach ---- */
.top { position: fixed; inset: 0 0 auto 0; z-index: 20; height: var(--head); display: flex; align-items: center;
  justify-content: space-between; gap: var(--s-4); padding-inline: var(--s-5); background: var(--deep); color: #fff; }
.brand { display: flex; align-items: center; gap: var(--s-3); color: #fff; text-decoration: none; min-height: var(--tap); }
.brand img { width: 44px; height: 44px; border-radius: 50%; }
.brand-name { font-family: var(--display); font-weight: 600; font-size: 21px; line-height: 1.1; }
.brand-sub { font-family: var(--sans); font-weight: 400; font-size: var(--text-small); opacity: .9; margin-left: var(--s-2); }
.top-call { min-height: var(--tap); }

/* ---- buttons on the dark frame ---- */
.btn--gold { background: var(--gold); border-color: var(--gold); color: var(--deep); }
.btn--line { background: transparent; border-color: rgba(255, 255, 255, .7); color: #fff; }
.btn--ghost { border-color: var(--accent); color: var(--accent); }
.actions { display: flex; flex-wrap: wrap; gap: var(--s-3); }
.actions .btn + .btn, .section-cta .btn + .btn { margin-left: 0; }

/* ---- the scroll hero: the section is tall, the stage sticks, the photos move with the scroll ---- */
.hero { position: relative; height: 420vh; padding: 0; background: var(--deep); }
.stage { position: sticky; top: 0; height: 100vh; height: 100svh; overflow: hidden; }
.scene { position: absolute; inset: 0; margin: 0; opacity: 0; will-change: opacity, transform; }
.scene.is-on { opacity: 1; }
.scene img { width: 100%; height: 100%; object-fit: cover; border-radius: 0; transform-origin: 50% 60%; will-change: transform; }
.caption { position: absolute; top: calc(var(--head) + var(--s-4)); left: var(--s-5); margin: 0; z-index: 2; }
.cap { position: absolute; left: 0; top: 0; white-space: nowrap; padding: var(--s-2) var(--s-3); background: var(--deep);
  color: #fff; font-size: var(--text-small); font-weight: 600; border-radius: var(--r-button); opacity: 0; transition: opacity .35s; }
.cap.is-on { opacity: 1; }
.hero-card { position: absolute; left: var(--s-7); bottom: var(--s-7); z-index: 3; width: min(560px, calc(100% - 2 * var(--s-5)));
  padding: var(--s-6); background: var(--deep); color: #fff; border-radius: var(--r-card); }
.hero-card h1 { font-size: clamp(34px, 3.6vw, 52px); max-width: 15ch; color: #fff; }
.hero-card .lead { font-size: var(--text-lead); margin-bottom: var(--s-5); }
.hero-card .btn-note { opacity: .9; margin-bottom: 0; }
.stars { margin: 0 0 var(--s-3); font-weight: 600; color: var(--gold); }
.owner-note { margin: var(--s-4) 0 0; padding-top: var(--s-3); border-top: 1px solid rgba(255, 255, 255, .25);
  font-size: var(--text-body); color: #fff; }

/* ---- sections after the hero ---- */
.intro { font-size: var(--text-lead); margin-bottom: var(--s-6); }
.section-cta { margin-top: var(--s-6); display: flex; flex-wrap: wrap; align-items: center; gap: var(--s-3); }
.section-cta .btn-note { flex-basis: 100%; margin: 0; }

.services .card { background: var(--sage); border-color: transparent; padding: 0; overflow: hidden; }
.services .card img { border-radius: 0; }
.services .card h3 { margin: var(--s-5) var(--s-5) var(--gap-after-heading); }
.services .card p { margin: 0 var(--s-5) var(--s-5); }

.pair .shot { margin: 0; position: relative; }
.shot figcaption { position: absolute; left: var(--s-3); top: var(--s-3); padding: var(--s-1) var(--s-3); background: var(--deep);
  color: #fff; font-weight: 600; border-radius: var(--r-button); }
.pull { margin: var(--s-6) 0 0; max-width: 46ch; }
.pull p { font-family: var(--display); font-size: var(--text-h3); line-height: 1.3; margin-bottom: var(--s-2); }
.pull cite { font-style: normal; font-weight: 600; color: var(--accent); }

.reviews { background: var(--paper); }
.quote { margin: 0; background: var(--sage); border-color: transparent; }
.quote blockquote { margin: 0 0 var(--s-5); }
.quote blockquote p { margin: 0; }
.quote figcaption { margin-top: auto; font-weight: 600; }
.quote figcaption span { display: block; font-weight: 400; font-size: var(--text-small); }

.photos img { border-radius: var(--r-photo); }

.book .book-text, .book .facts { grid-column: 1 / -1; }
@media (min-width: 1024px) {
  .book .book-text { grid-column: 1 / span 7; }
  .book .facts { grid-column: 8 / span 5; align-self: center; }
}
.facts { margin: 0; display: grid; gap: var(--s-4); }
.facts div { padding: var(--s-4) var(--s-5); background: var(--sage); border-radius: var(--r-card); }
.facts dt { font-size: var(--text-small); font-weight: 600; color: var(--accent); }
.facts dd { margin: 0; font-size: var(--text-lead); font-weight: 600; }

/* ---- footer: the dark frame at the end ---- */
.foot { background: var(--deep); color: #fff; padding-block: var(--s-8) var(--s-6); }
.foot a:not(.btn) { color: #fff; }
.foot-in { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: var(--s-5); }
.foot-in p { margin: 0; }
.foot-brand { display: flex; align-items: center; gap: var(--s-4); }
.foot-brand img { width: 56px; height: 56px; border-radius: 50%; }
.made { margin-top: var(--s-6); padding-top: var(--s-4); border-top: 1px solid rgba(255, 255, 255, .2); font-size: var(--text-body); }

/* ---- phones ---- */
@media (max-width: 640px) {
  :root { --head: 60px; }
  .top { height: var(--head); padding-inline: var(--s-4); }
  .brand-sub { display: none; }
  .hero { height: 360vh; }
  .caption { left: var(--s-4); top: calc(var(--head) + var(--s-3)); }
  .hero-card { left: var(--s-4); right: var(--s-4); bottom: var(--s-4); width: auto; padding: var(--s-5); }
  .hero-card h1 { font-size: 30px; }
  .hero-card .lead { display: none; }
  .scene[data-scene="2"] img { object-position: 28% 50% !important; }
  .actions .btn { flex: 1 1 0; }
  .section-cta .btn { flex: 1 1 auto; }
}

/* short phones: keep more of the photo in view */
@media (max-width: 640px) and (max-height: 760px) {
  .hero-card .btn-note { display: none; }
  .hero-card .stars { margin-bottom: var(--s-2); }
}

@media (prefers-reduced-motion: reduce) {
  .hero { height: auto; }
  .stage { position: relative; height: 100svh; }
  .scene, .scene img { transform: none !important; }
}
