/* ==========================================================================
   site.css — Aquatic Gardens & Landscaping (Mankato, MN).

   HARD RULE (house-tech-spec §3): no raw hex, no px/rem size literals, no
   font-name literals in this file. Tokens only — the two escape hatches are
   the house breakpoints and an explicit `@allow-literal: reason` comment.

   Archetype: poster-hero (design-rules §7, brief §5). Single column, no
   split composition, at every width. No cards, no shadows, no rounded
   corners anywhere — structure is carried by hairlines and space (brief
   §5.1 rule 5). The section plan is brief §6; the signature move ("the
   still surface") is brief §8.
   ========================================================================== */

/* --- Layout primitives ---------------------------------------------------- */

.container {
  width: 100%;
  max-width: var(--layout-container);
  margin-inline: auto;
  padding-inline: var(--layout-gutter);
}

/* Brief §5.3: the container is uncapped below 1440 and caps to 800px from
   1440 up — a narrower cap than a split archetype's, since the oversized
   display type needs a shorter measure to stay readable at 64px. */
@media (min-width: 90em) {
  .container {
    max-width: var(--layout-container-wide);
  }
}

.section {
  padding-block: var(--section-gap);
}

/* §VI's reserved gallery band — "not a full .section... a compact band,
   never inflated to look like a populated gallery" (brief §6 §VI). Bounded
   by hairlines rather than the standard section padding, since structure on
   this site is carried by hairlines and space, never a box (brief §5.1). */
.section--compact {
  padding-block: var(--space-lg);
  border-block: var(--border-hairline) var(--border-style) var(--color-border);
}

.measure {
  max-width: var(--layout-measure);
}

/* --- Header & navigation ----------------------------------------------------
   Brief §6 sticky-chrome: wordmark left, office tel: link right — no nav
   menu (the C2-winning tile's own header carries only these two elements;
   copy.md gives no nav-item labels, and none is needed on a one-pager whose
   only anchor target is the contact form the hero CTA already reaches). */

.site-header {
  position: relative;
  z-index: var(--z-header);
  height: var(--header-height);
  box-sizing: border-box;
  border-bottom: var(--border-hairline) var(--border-style) var(--color-border);
  background-color: var(--color-bg);
}

.site-header__inner {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-sm);
  height: 100%;
}

.site-header__brand {
  font-family: var(--font-display);
  font-size: var(--text-wordmark);
  font-weight: var(--font-weight-display);
  color: var(--color-ink);
  text-decoration: none;
  letter-spacing: var(--tracking-tight);
}

@media (min-width: 64em) {
  .site-header__brand {
    font-size: var(--text-wordmark-lg);
  }
}

.site-header__tel {
  font-family: var(--font-body);
  font-size: var(--text-eyebrow);
  font-weight: var(--font-weight-body-strong);
  color: var(--color-ink-muted);
  text-decoration: none;
}

.site-header__tel:hover,
.site-header__tel:focus-visible {
  text-decoration: underline;
  text-underline-offset: var(--space-3xs);
}

/* --- Buttons ----------------------------------------------------------------
   One role on this site: the primary CTA (brief §5.1 rule 5, §6.10 — no
   second button anywhere). --radius-none, accent fill. */

.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: var(--space-2xs);
  padding-inline: var(--space-md);
  border: var(--border-hairline) var(--border-style) transparent;
  border-radius: var(--radius-none);
  font-family: var(--font-body);
  font-weight: var(--font-weight-body-strong);
  font-size: var(--text-eyebrow);
  line-height: var(--leading-snug);
  text-align: center;
  text-decoration: none;
  transition: background-color var(--duration-fast) var(--ease-out),
              color var(--duration-fast) var(--ease-out);
}

.btn--primary {
  background-color: var(--color-accent);
  color: var(--color-accent-ink);
  height: var(--cta-height);
}

@media (min-width: 64em) {
  .btn--primary {
    height: var(--cta-height-lg);
  }
}

.btn--quiet {
  border-color: var(--color-border);
  color: var(--color-ink);
}

/* --- Hero — poster-hero archetype (brief §5.1, §5.5) -----------------------
   Single reading column. DOM order: eyebrow -> h1 -> primary CTA -> the
   living-hero field. No lead line, no facts line in the hero — this
   archetype's weight sits in the type. */

.hero {
  padding-block-start: var(--hero-pad-start);
  padding-block-end: var(--section-gap);
}

@media (min-width: 64em) {
  .hero {
    padding-block-start: var(--hero-pad-start-lg);
  }
}

.hero__eyebrow {
  display: flex;
  flex-direction: column;
  gap: var(--space-3xs);
  margin: 0 0 var(--hero-gap-eyebrow-h1);
}

@media (min-width: 64em) {
  .hero__eyebrow {
    margin-block-end: var(--hero-gap-eyebrow-h1-lg);
  }
}

.hero__eyebrow-place,
.hero__eyebrow-trade {
  display: flex;
  align-items: center;
  height: var(--eyebrow-row-height);
  font-family: var(--font-body);
  font-size: var(--text-eyebrow);
  font-weight: var(--font-weight-body-strong);
  letter-spacing: var(--tracking-wide);
  text-transform: uppercase;
  color: var(--color-ink-muted);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.hero__h1 {
  margin: 0 0 var(--hero-gap-h1-cta);
  font-family: var(--font-display);
  font-weight: var(--font-weight-display);
  font-style: normal;
  font-size: var(--text-display);
  line-height: var(--leading-tight);
  letter-spacing: var(--tracking-tight);
  color: var(--color-ink);
}

@media (min-width: 64em) {
  .hero__h1 {
    margin-block-end: var(--hero-gap-h1-cta-lg);
  }
}

/* Two fixed line-boxes, real fluid metrics (brief §5.5 — the tile's own
   placeholder used a fixed 44px purely for cross-browser tile rendering;
   the shipped build computes the real value from the real face). */
.hero__h1-line {
  display: block;
  height: calc(var(--text-display) * var(--leading-tight));
  overflow: hidden;
}

.hero__accent {
  font-style: italic;
  color: var(--color-accent);
}

/* --- The living-hero field — "the still surface" (brief §7, §8) ----------- */

.hero__field {
  position: relative;
  height: var(--hero-field-height);
  margin-block-start: var(--hero-field-margin-top);
  overflow: hidden;
  border: var(--border-hairline) var(--border-style) var(--color-border);
  background-image: radial-gradient(120% 100% at 50% 42%,
    var(--color-atmos-deep) 0%, var(--color-atmos-mid) 46%, var(--color-bg) 100%);
}

@media (min-width: 64em) {
  .hero__field {
    margin-block-start: var(--hero-field-margin-top-lg);
  }
}

.hero__field-img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
}

/* No gold rule in the hero field. Brief §1 / §4.2: the single 2px
   --color-hairline-accent rule is used exactly once per page, as the
   credentials-list top rule (§III) — "reused nowhere else on the page." */

/* The still-surface signature (brief §8.2): a ripple ring expands once from
   centre, holds, and settles to a static ring — never restarted by scroll,
   hover, or any interaction. The reed and leaf drift on slow, independent,
   non-synchronised loops. Pure CSS, no JS drives any of it (brief §8.4). */

.ripple {
  position: absolute;
  inset-inline-start: 50%;
  inset-block-start: 42%;
  width: var(--ripple-start-size);
  height: var(--ripple-start-size);
  margin: var(--ripple-start-offset) 0 0 var(--ripple-start-offset);
  border-radius: var(--radius-pill);
  border: var(--ripple-border-width) solid var(--color-accent-ink);
  opacity: .85;
  animation: aql-ripple var(--duration-ripple) var(--ease-ripple) 1 both;
}

@keyframes aql-ripple {
  0%   { width: var(--ripple-start-size); height: var(--ripple-start-size); margin: var(--ripple-start-offset) 0 0 var(--ripple-start-offset); opacity: 0; }
  10%  { opacity: .9; }
  70%  { width: var(--ripple-end-size); height: var(--ripple-end-size); margin: var(--ripple-end-offset) 0 0 var(--ripple-end-offset); opacity: .35; }
  100% { width: var(--ripple-end-size); height: var(--ripple-end-size); margin: var(--ripple-end-offset) 0 0 var(--ripple-end-offset); opacity: .22; }
}

.ripple-core {
  position: absolute;
  inset-inline-start: 50%;
  inset-block-start: 42%;
  width: var(--ripple-core-size);
  height: var(--ripple-core-size);
  margin: var(--ripple-core-offset) 0 0 var(--ripple-core-offset);
  border-radius: var(--radius-pill);
  background-color: var(--color-accent-ink);
  opacity: 0;
  animation: aql-core var(--duration-ripple) var(--ease-out) 1 both;
}

@keyframes aql-core {
  0%, 8% { opacity: 0; }
  14%, 100% { opacity: .75; }
}

.reed {
  position: absolute;
  inset-inline-start: 66%;
  inset-block-start: 60%;
  width: var(--reed-width);
  height: var(--reed-height);
  background-color: var(--color-border);
  transform-origin: bottom center;
  animation: aql-sway var(--duration-reed) var(--ease-loop) infinite;
}

@keyframes aql-sway {
  0%, 100% { transform: rotate(-4deg); }
  50%      { transform: rotate(3deg); }
}

.leaf {
  position: absolute;
  inset-inline-start: 30%;
  inset-block-start: 70%;
  width: var(--leaf-width);
  height: var(--leaf-height);
  border-radius: 50% 50% 50% 0;
  background-color: var(--color-border);
  animation: aql-drift var(--duration-leaf) var(--ease-loop) infinite;
}

@keyframes aql-drift {
  0%, 100% { transform: translate(0, 0) rotate(0deg); }
  50%      { transform: translate(var(--leaf-drift-x), var(--leaf-drift-y)) rotate(6deg); }
}

/* AI-imagery disclosure caption — sits on an opaque --color-surface chip,
   never directly on the atmosphere (brief §4.3; contrast row 6, 7.35:1). */
.hero__plate-label {
  position: absolute;
  inset-inline-end: var(--space-2xs);
  inset-block-end: var(--space-2xs);
  max-width: var(--plate-label-max-width);
  padding: var(--space-3xs) var(--space-2xs);
  background-color: var(--color-surface);
  border: var(--border-hairline) var(--border-style) var(--color-ink);
  font-family: var(--font-body);
  font-size: var(--text-micro);
  line-height: var(--leading-lead);
  letter-spacing: var(--tracking-plate);
  color: var(--color-ink);
}

@media (prefers-reduced-motion: reduce) {
  .ripple, .ripple-core, .reed, .leaf {
    animation: none;
  }
  .ripple {
    width: var(--ripple-end-size);
    height: var(--ripple-end-size);
    margin: var(--ripple-end-offset) 0 0 var(--ripple-end-offset);
    opacity: .3;
  }
  .ripple-core {
    opacity: .75;
  }
  .reed {
    transform: rotate(-1deg);
  }
  .leaf {
    transform: translate(var(--leaf-rest-x), var(--leaf-rest-y)) rotate(3deg);
  }
}

/* --- Section heads ----------------------------------------------------------
   Brief §2.3: "Section h3 heads" — Libre Caslon Text 400 roman, sized at the
   --text-h2 role (brief §2.10: the same computed values also carry
   thanks.html's h2-scale heading). Every section on this page after the hero
   uses this one heading pattern. */

.section__head {
  margin: 0 0 var(--space-md);
  font-family: var(--font-display);
  font-weight: var(--font-weight-display);
  font-style: normal;
  font-size: var(--text-h2);
  line-height: var(--leading-snug);
  letter-spacing: var(--tracking-tight);
  color: var(--color-ink);
}

.section__intro {
  margin: 0 0 var(--space-md);
  font-family: var(--font-body);
  font-size: var(--text-body);
  line-height: var(--leading-body);
  color: var(--color-ink-muted);
}

/* thanks.html's own heading/lead gaps (brief §5.5) — 18px < 1024, 24px
   (--space-md) >= 1024. Applied alongside .section__head, whose own 24px
   flat bottom margin this overrides at the narrow breakpoint only. */
.thanks-heading {
  margin-block-end: var(--thanks-gap);
}

.thanks__lead {
  margin: 0 0 var(--thanks-gap);
  font-family: var(--font-body);
  font-size: var(--text-lead);
  line-height: var(--leading-lead);
  color: var(--color-ink-muted);
}

@media (min-width: 64em) {
  .thanks-heading {
    margin-block-end: var(--thanks-gap-lg);
  }
  .thanks__lead {
    margin-block-end: var(--thanks-gap-lg);
  }
}

/* --- Flat, hairline-divided lists --------------------------------------------
   The site's one enumeration device (brief §6.10: zero numeral systems
   anywhere). Reused for §II's service groups, §III's credentials list, §IV's
   process steps and §VII's FAQ — never a card, never a numbered list. */

.rule-list {
  border-block-start: var(--border-hairline) var(--border-style) var(--color-border);
}

/* §III only: the single 2px gold rule (ref-007's motif, brief §1, §6) —
   used exactly once on the page, dividing Design Credentials from What We
   Build. Overrides the plain hairline top rule above. */
.rule-list--accent {
  border-block-start: var(--border-thick) var(--border-style) var(--color-hairline-accent);
}

.rule-list__row {
  padding-block: var(--space-sm);
  border-block-end: var(--border-hairline) var(--border-style) var(--color-border);
}

.rule-list__row:last-child {
  border-block-end: none;
}

.rule-list__row-head {
  margin: 0 0 var(--space-3xs);
  font-family: var(--font-display);
  font-weight: var(--font-weight-display);
  font-style: normal;
  font-size: var(--text-h2);
  color: var(--color-ink);
}

/* Credentials-list accent word — italic, --color-accent (brief §2.3's
   "Credentials-list h3 sub-heads, accent word only"). */
.rule-list__row-head em {
  font-style: italic;
  color: var(--color-accent);
}

.rule-list__row-body {
  margin: 0;
  font-family: var(--font-body);
  font-size: var(--text-body);
  line-height: var(--leading-body);
  color: var(--color-ink-muted);
}

/* --- Secondary imagery (§7.2, §7.4: slots 2 and 3, lazy-loaded) ----------- */

.section__image {
  margin-block-start: var(--space-lg);
  max-width: var(--section-image-max-width);
}

.section__image img {
  width: 100%;
}

/* --- Filed Under (§V) — plain text, no list, no map -------------------------- */

.service-areas {
  margin: var(--space-sm) 0 0;
  font-family: var(--font-body);
  font-weight: var(--font-weight-body-strong);
  color: var(--color-ink);
}

/* --- Form ---------------------------------------------------------------------
   One form (spec §6). Fields on --color-surface, 1px --color-border,
   --radius-none, label above every input (brief §VIII). */

.form {
  display: grid;
  gap: var(--space-md);
  max-width: var(--layout-measure);
  margin-block-start: var(--space-lg);
}

.field {
  display: grid;
  gap: var(--space-3xs);
}

.field__label {
  font-family: var(--font-body);
  font-size: var(--text-eyebrow);
  font-weight: var(--font-weight-body-strong);
  color: var(--color-ink);
}

.field__control {
  width: 100%;
  min-height: var(--layout-tap-min);
  padding: var(--space-2xs) var(--space-xs);
  background-color: var(--color-surface);
  color: var(--color-ink);
  font-family: var(--font-body);
  font-size: var(--text-body);
  border: var(--border-hairline) var(--border-style) var(--color-border);
  border-radius: var(--radius-none);
}

.field__control:focus-visible {
  outline: var(--border-thick) var(--border-style) var(--color-focus);
  outline-offset: var(--space-3xs);
}

textarea.field__control {
  min-height: var(--space-3xl);
  resize: vertical;
}

.field__hint {
  font-family: var(--font-body);
  font-size: var(--text-eyebrow);
  color: var(--color-ink-muted);
}

.form__trap {
  position: absolute;
  /* @allow-literal: off-canvas parking position, not a design value */
  left: -9999px;
  opacity: 0;
  pointer-events: none;
}

.form__status {
  font-family: var(--font-body);
  font-size: var(--text-eyebrow);
  color: var(--color-ink-muted);
}

.form__status[data-state='error'] {
  color: var(--color-ink);
  font-weight: var(--font-weight-body-strong);
}

/* --- NAP block (§VIII) --------------------------------------------------- */

.nap {
  margin-block-start: var(--space-lg);
  font-family: var(--font-body);
  font-size: var(--text-body);
  line-height: var(--leading-body);
  color: var(--color-ink);
  font-style: normal;
}

.nap a {
  color: inherit;
}

/* --- Footer ------------------------------------------------------------------ */

.site-footer {
  padding-block: var(--space-xl);
  border-top: var(--border-hairline) var(--border-style) var(--color-border);
  font-family: var(--font-body);
  font-size: var(--text-eyebrow);
  color: var(--color-ink-muted);
}

.site-footer a {
  color: inherit;
  text-underline-offset: var(--space-3xs);
}

.site-footer__nap {
  font-style: normal;
  color: var(--color-ink);
}

.site-footer p {
  margin: var(--space-3xs) 0 0;
}

.site-footer p:first-child {
  margin-block-start: 0;
}
