/* Coastal Ridge Construction - Lompoc - spec build #48
   ---------------------------------------------------------------------------
   BLACK AND ORANGE, BECAUSE THAT IS HIS MARK. His shirt carries a black
   diamond with COASTAL in white caps, RIDGE in big orange, CONSTRUCTION in
   white caps. The masthead reproduces that STRUCTURE in type, and the page is
   dark-led where #47 (sent the same day) was silver.

   Structure, unlike the last eleven:
     #46 type-led paper, reviews by room      #47 split hero, silver
     #48 A REVIEWER'S SENTENCE AS THE HERO, then a full-bleed four-photo
         strip with no gutters, an asymmetric work grid, the one long review
         printed in full, and the licence next to a crop of his own shirt,
         which already prints the number. No eyebrows.

   ⭐⭐ THE ORANGE IS SAMPLED OFF THE LOGO ON HIS WORK SHIRT (photo p06).
   The RIDGE letters only (crop 100x30 at 550,1008), after the first, wider
   crop was contaminated by the oak cabinets behind him. White-balanced
   against the white COASTAL letters of the same mark (ref 223,215,222):
   #B45A41 as photographed under indoor light -> #CD6A4A balanced. Hue 15.

   ⚠ COLLISION, ACCEPTED: hue 15 is #39's stain (14.7). #39 was a desaturated
   brown on light grounds; this is a saturated orange on black. The brand wins.

   ⚠ THE SAMPLED ORANGE FAILS ON WHITE: 3.65. It is 5.09 on the black, so it
   is published as-is ONLY on dark grounds and large display; a darkened
   sibling carries every small text and button on light grounds.

   ⚠ EVERY RATIO BELOW WAS COMPUTED, NOT ESTIMATED.
     #141312 black   on white 18.56 | on paper 16.47
     #CD6A4A orange  on black  5.09 | on white 3.65 (LARGE/DARK ONLY)
     #E08466 orange2 on black  6.77                 -> small text on dark
     #A4462A orangeD on white  6.02 | on paper 5.34 | white on it 6.02
     #8A3920 orangeH white on it 7.82
     #57524C muted   on white  7.73 | on paper 6.86
     #D9D3CC body-d  on black 12.50
     #9A938B dim-d   on black  6.12
   --------------------------------------------------------------------------- */

:root {
  --ground:  #FFFFFF;
  --paper:   #F4F1EC;
  --black:   #141312;   /* the diamond */
  --orange:  #CD6A4A;   /* SAMPLED off RIDGE. DARK GROUNDS / LARGE ONLY */
  --orange2: #E08466;
  --orangeD: #A4462A;
  --orangeH: #8A3920;
  --muted:   #57524C;
  --rule:    #E3DDD5;
  --rule-d:  #2E2B28;
  --body-d:  #D9D3CC;
  --dim-d:   #9A938B;

  --mono: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas,
          "Liberation Mono", monospace;
  --wide: 1180px;
  --s-md: 16px; --s-lg: 26px; --s-xl: 36px; --s-2xl: 60px;
  --sect: clamp(64px, 9vw, 108px);
}

* { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; }
body {
  margin: 0; background: var(--ground); color: var(--black);
  font-family: ui-sans-serif, system-ui, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
  font-size: 17px; line-height: 1.65; -webkit-font-smoothing: antialiased;
}

/* Browser surfaces. The parts you did not draw still carry the design, and
   this is the cheapest signal that a page was built rather than assembled. */
::selection      { background: var(--orange); color: var(--black); }
:root            { caret-color: var(--orangeD); accent-color: var(--orangeD); }
:focus-visible   { outline: 2px solid var(--orange); outline-offset: 3px; }
a                { color: var(--orangeD); text-underline-offset: 3px; text-decoration-thickness: 1px; }
.tabular, time, dd { font-variant-numeric: tabular-nums; }
@supports (scrollbar-color: auto) {
  html { scrollbar-color: var(--orangeD) var(--paper); scrollbar-width: thin; }
}

img { max-width: 100%; height: auto; display: block; }
.wrap { width: 100%; max-width: var(--wide); margin-inline: auto; padding-inline: 24px; }
.muted { color: var(--muted); }

/* ── Masthead: the shirt mark's structure, set in type ────────────────── */
.mast { background: var(--black); border-bottom: 1px solid var(--rule-d); }
.mast .wrap {
  display: flex; flex-wrap: wrap; gap: 12px 26px; align-items: center;
  justify-content: space-between; padding-block: 14px;
}
.mark { margin: 0; display: inline-flex; flex-direction: column; line-height: 1; color: #fff; }
.mark .m1, .mark .m3 {
  font-size: 11px; font-weight: 800; letter-spacing: 0.22em; text-transform: uppercase;
}
.mark .m1 { padding-left: 3px; }
.mark .m2 {
  font-size: 30px; font-weight: 900; font-style: italic; text-transform: uppercase;
  letter-spacing: -0.02em; color: var(--orange); margin: 2px 0 3px;   /* 5.09 on black */
}
.mast .tel {
  color: #fff; font-weight: 700; font-size: 17px; text-decoration: none; white-space: nowrap;
  border: 1px solid var(--orange); border-radius: 6px; padding: 9px 16px;
}
.mast .tel:hover { background: var(--orangeH); border-color: var(--orangeH); }

/* ── Hero: his customer's sentence ────────────────────────────────────── */
section { padding-block: var(--sect); }
.hero { background: var(--black); color: var(--body-d); padding-block: clamp(60px, 9vw, 116px) clamp(48px, 6vw, 76px); }
/* max-width in ch must sit on the <p>: on the blockquote it measured the 17px
   body font and squeezed the headline to one word per line. */
.hero-quote { margin: 0 0 var(--s-xl); }
.hero-quote p:first-child { max-width: 19ch; }
.hero-quote p {
  margin: 0; color: #fff; font-weight: 800; letter-spacing: -0.034em; line-height: 1.04;
  font-size: clamp(36px, 5.6vw, 66px);
}
.hero-quote .q { color: var(--orange); }
.hero-quote p.who {
  margin-top: 18px; font-size: 16px; font-weight: 600; letter-spacing: 0;
  line-height: 1.4; color: var(--orange2);                            /* 6.77 */
}
.hero .lede { max-width: 56ch; font-size: 18.5px; margin: 0 0 var(--s-xl); }
.btn {
  display: inline-block; background: var(--orangeD); color: #fff;      /* 6.02 */
  font-size: 16.5px; font-weight: 700; padding: 14px 26px; border-radius: 6px; text-decoration: none;
}
.btn:hover { background: var(--orangeH); }
.hero .btn { background: var(--orange); color: var(--black); }         /* 5.09 */
.hero .btn:hover { background: var(--orange2); }

/* ── Full-bleed strip, no gutters ─────────────────────────────────────── */
.strip { display: grid; grid-template-columns: repeat(2, 1fr); background: var(--black); }
@media (min-width: 820px) { .strip { grid-template-columns: repeat(4, 1fr); } }
.strip figure { margin: 0; }
.strip img { width: 100%; aspect-ratio: 3 / 4; object-fit: cover; }
.strip-cap { margin: 14px auto 0; color: var(--muted); font-size: 14.5px; }

h2 {
  margin: 0 0 var(--s-lg); font-size: clamp(28px, 3.6vw, 44px);
  line-height: 1.08; letter-spacing: -0.03em; font-weight: 800; max-width: 22ch;
}
p { margin: 0 0 var(--s-md); }
p:last-child { margin-bottom: 0; }
.intro { font-size: 18.5px; max-width: 58ch; color: var(--muted); }

/* ── Work grid: asymmetric, bottom-aligned ────────────────────────────── */
.work { padding-top: clamp(56px, 7vw, 88px); }
.work-grid { display: grid; gap: var(--s-lg); }
.work figure { margin: 0; }
.work img { width: 100%; border-radius: 6px; outline: 1px solid oklch(0 0 0 / 0.1); outline-offset: -1px; }
.work figcaption { margin-top: 9px; font-size: 15px; color: var(--muted); }
@media (min-width: 880px) {
  .work-grid { grid-template-columns: 1.6fr 1fr; align-items: end; }
  .w-patio img, .w-white img { aspect-ratio: 4 / 5; object-fit: cover; }
}

/* ── Reviews ──────────────────────────────────────────────────────────── */
.reviews { background: var(--paper); }
.rev-grid { display: grid; gap: var(--s-2xl); align-items: start; }
@media (min-width: 900px) { .rev-grid { grid-template-columns: 1.7fr 1fr; } }
.reviews blockquote { margin: 0; }
.reviews .long p { font-size: 18px; line-height: 1.62; max-width: 62ch; }
.reviews .short p:first-child { font-size: 22px; line-height: 1.35; font-weight: 700; letter-spacing: -0.015em; }
.reviews .short { border-top: 3px solid var(--orangeD); padding-top: var(--s-lg); }
/* ⚠ LOAD-BEARING: .who is a <p>, never a nested <footer> - a global footer
   rule paints the name invisible (the bug carried from #29 onward). */
.reviews .who { margin-top: var(--s-md); font-size: 15px; font-weight: 700; color: var(--black); }
.reviews .who span { font-weight: 400; color: var(--muted); }
.reviews .note { margin-top: var(--s-lg); font-size: 14.5px; color: var(--muted); }

/* ── Licence, on black, beside his own shirt ──────────────────────────── */
.license { background: var(--black); color: var(--body-d); }
.license h2 { color: #fff; }
.license .intro { color: var(--body-d); }
.license .wrap { display: grid; gap: var(--s-xl); }
@media (min-width: 900px) { .license .wrap { grid-template-columns: 1fr 1.2fr; align-items: start; } }
.shirt { margin: var(--s-lg) 0 0; max-width: 300px; }
.shirt img { border-radius: 6px; }
.record { margin: 0; border-top: 1px solid var(--rule-d); }
.record div {
  display: flex; flex-wrap: wrap; justify-content: space-between; gap: 6px 24px;
  padding: 13px 0; border-bottom: 1px solid var(--rule-d); font-family: var(--mono); font-size: 14.5px;
}
.record dt { margin: 0; color: var(--dim-d); }
.record dd { margin: 0; color: #fff; font-weight: 600; text-align: right; }
.record .hi dd { color: var(--orange2); }                              /* 6.77 */

/* ── Hours and where ──────────────────────────────────────────────────── */
.reach-grid { display: grid; gap: var(--s-2xl); align-items: start; }
@media (min-width: 860px) { .reach-grid { grid-template-columns: 1fr 1fr; } }
.hours { margin: 0; max-width: 420px; border-top: 1px solid var(--rule); }
.hours div {
  display: flex; justify-content: space-between; gap: 20px; padding: 11px 0;
  border-bottom: 1px solid var(--rule); font-family: var(--mono); font-size: 14.5px;
}
.hours dt { margin: 0; color: var(--muted); }
.hours dd { margin: 0; font-weight: 600; }
.hours .shut dd { color: var(--muted); font-weight: 400; }
.where p { margin-bottom: var(--s-md); }

/* ── Letter ───────────────────────────────────────────────────────────── */
.letter { background: var(--paper); }
.letter .wrap { max-width: 820px; }
.letter p { color: var(--muted); max-width: 68ch; }
.letter strong { color: var(--black); }
.letter .sign { margin-top: var(--s-lg); color: var(--black); font-weight: 600; }

/* ── Footer ───────────────────────────────────────────────────────────── */
footer { background: var(--black); color: var(--body-d); padding-block: var(--s-2xl) var(--s-xl); }
footer .wrap { display: grid; gap: var(--s-lg); }
@media (min-width: 700px) { footer .wrap { grid-template-columns: 1.3fr 1fr 1fr; } }
footer h4 { margin: 0 0 10px; color: #fff; font-size: 15px; font-weight: 700; }
footer p { margin: 0 0 4px; font-size: 15px; }
footer a { color: var(--orange2); text-decoration: none; }             /* 6.77 */
footer a:hover { text-decoration: underline; }
/* grid-column is load-bearing - #41's bug */
.legal {
  grid-column: 1 / -1; margin-top: var(--s-xl); padding-top: var(--s-md);
  border-top: 1px solid var(--rule-d); font-size: 12.5px; color: var(--dim-d);
}

/* ── Sticky call button, phones only ──────────────────────────────────── */
.callbar { display: none; }
@media (max-width: 700px) {
  .callbar {
    display: block; position: fixed; left: 0; right: 0; bottom: 0; z-index: 40;
    background: var(--orange); padding: 13px 16px; text-align: center;
  }
  .callbar a { color: var(--black); font-weight: 700; text-decoration: none; font-size: 17px; }  /* 5.09 */
  body { padding-bottom: 62px; }
  .mast .tel { display: none; }   /* the callbar carries the number on phones */
}
