/* ==========================================================================
   SUBPAGES — Our Story, Menu, Private Dining, Reservations, Contact, 404.
   Uses the homepage tokens only (tokens.css). Loaded after motion.css.

   Signature: the "halo" — a thin gold frame floating just off a photograph,
   taken from the square halo lights over the Front and Middle Rooms. It is
   the only ornament on these pages; keep it to room and story photographs.
   ========================================================================== */

:root {
  --page-gutter: clamp(1rem, 4.2vw, 4.8rem);
  --hairline: color-mix(in oklab, var(--color-charcoal) 14%, transparent);
  --halo: color-mix(in oklab, var(--color-brass) 60%, transparent);
}

/* ---- page hero ---------------------------------------------------------- */

.page-hero {
  display: grid;
  grid-template-columns: minmax(0, 1.35fr) minmax(0, 0.65fr);
  gap: clamp(1.5rem, 5vw, 6rem);
  align-items: end;
  padding: calc(var(--header-h) + clamp(3rem, 9vw, 8rem)) var(--page-gutter) clamp(2.5rem, 5vw, 4.5rem);
  border-bottom: 1px solid var(--hairline);
}

.page-hero__title {
  margin: 0;
  font-family: var(--font-serif);
  font-size: clamp(3.2rem, 9vw, 8.5rem);
  font-weight: 400;
  line-height: 0.9;
  text-wrap: balance;
  overflow-wrap: break-word;
}

.page-hero__lede {
  margin: 0;
  max-width: 36ch;
  color: color-mix(in oklab, var(--color-charcoal) 78%, transparent);
  font-size: clamp(1rem, 1.3vw, 1.15rem);
  line-height: 1.6;
}

.page-hero__lede + .page-hero__actions {
  margin-top: 1.5rem;
}

.page-hero__actions {
  display: flex;
  flex-wrap: wrap;
  gap: 0.75rem;
}

/* a short aside under a hero lede (the menu page: à la carte vs private
   dining prix fixe) */
.page-hero__note {
  max-width: 44ch;
  margin: 1.5rem 0 0;
  padding-left: 1rem;
  border-left: 1px solid var(--halo);
  color: color-mix(in oklab, var(--color-charcoal) 72%, transparent);
  font-size: 0.95rem;
  line-height: 1.6;
}

/* full-bleed photograph directly under a hero */
.page-feature {
  margin: 0;
  height: clamp(320px, 62svh, 720px);
}

.page-feature img {
  height: 100%;
}

@media (max-width: 900px) {
  .page-hero {
    grid-template-columns: minmax(0, 1fr);
    align-items: start;
  }
}

/* ---- the halo ----------------------------------------------------------- */

.halo {
  outline: 1px solid var(--halo);
  outline-offset: clamp(8px, 1.1vw, 16px);
  transition: outline-offset var(--duration-medium) var(--ease-soft);
}

.halo:hover {
  outline-offset: clamp(4px, 0.6vw, 9px);
}

/* ---- shared section rhythm --------------------------------------------- */

.page-section {
  padding: clamp(4rem, 9vw, 9rem) var(--page-gutter);
}

.page-section + .page-section {
  border-top: 1px solid var(--hairline);
}

.page-section__head {
  max-width: 760px;
  margin-bottom: clamp(2.5rem, 5vw, 4.5rem);
}

/* ---- Our Story chapters ------------------------------------------------- */

.story-chapters {
  display: grid;
  gap: clamp(5rem, 11vw, 10rem);
}

.story-chapter {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
  gap: clamp(2rem, 7vw, 7rem);
  align-items: center;
}

.story-chapter__media {
  margin: clamp(10px, 1.2vw, 18px);
  aspect-ratio: 4 / 5;
}

.story-chapter__media img {
  height: 100%;
}

.story-chapter.is-flipped .story-chapter__media {
  order: 2;
}

.story-chapter__copy {
  max-width: 46ch;
}

@media (max-width: 900px) {
  .story-chapter {
    grid-template-columns: minmax(0, 1fr);
  }

  .story-chapter.is-flipped .story-chapter__media {
    order: 0;
  }

  .story-chapter__media {
    aspect-ratio: 4 / 3;
  }
}

/* ---- rooms (Our Story teaser + Private Dining) -------------------------- */

.rooms {
  display: grid;
  gap: clamp(5rem, 11vw, 10rem);
}

.room {
  display: grid;
  grid-template-columns: minmax(0, 1.25fr) minmax(0, 0.75fr);
  gap: clamp(2rem, 6vw, 6rem);
  align-items: center;
  scroll-margin-top: calc(var(--header-h) + 2rem);
}

.room.is-flipped .room__gallery {
  order: 2;
}

.room__gallery {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: clamp(0.75rem, 1.5vw, 1.25rem);
}

.room__lead {
  grid-column: 1 / -1;
  margin: clamp(10px, 1.2vw, 18px);
  aspect-ratio: 4 / 3;
}

.room__thumb {
  margin: 0;
  aspect-ratio: 1;
}

.room__lead img,
.room__thumb img {
  height: 100%;
}

.room__copy {
  max-width: 42ch;
}

@media (max-width: 900px) {
  .room {
    grid-template-columns: minmax(0, 1fr);
  }

  .room.is-flipped .room__gallery {
    order: 0;
  }
}

.room-links {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: clamp(1rem, 2vw, 2rem);
}

.room-link {
  display: grid;
  gap: 1rem;
  text-decoration: none;
}

.room-link figure {
  margin: 0;
  aspect-ratio: 3 / 4;
}

.room-link img {
  height: 100%;
}

.room-link__name {
  font-family: var(--font-serif);
  font-size: var(--font-size-h3);
}

.room-link:hover .room-link__name,
.room-link:focus-visible .room-link__name {
  color: var(--color-brass);
}

@media (max-width: 760px) {
  .room-links {
    grid-template-columns: minmax(0, 1fr);
  }
}

/* ---- menu page additions ------------------------------------------------ */

.menu-page-note {
  margin: -0.5rem 0 1rem;
  color: var(--color-muted);
  font-size: var(--font-size-body-sm);
  letter-spacing: 0.04em;
}

.menu-page-fineprint {
  margin-top: 2.5rem;
  padding-top: 1.5rem;
  border-top: 1px solid var(--hairline);
  color: var(--color-muted);
  font-size: var(--font-size-body-sm);
}

.menu-page-fineprint p {
  margin: 0 0 0.5rem;
}

.spirits-list {
  columns: 2 14rem;
  column-gap: 2rem;
  margin: 0;
  padding: 0;
  list-style: none;
}

.spirits-list li {
  padding: 0.45rem 0;
  border-bottom: 1px solid var(--hairline);
  break-inside: avoid;
}

.wine-group {
  border-bottom: 1px solid var(--hairline);
}

.wine-group summary {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 1rem;
  min-height: 44px;
  padding: 1rem 0;
  cursor: pointer;
  list-style: none;
}

.wine-group summary::-webkit-details-marker {
  display: none;
}

.wine-group summary h3 {
  margin: 0;
  font-family: var(--font-serif);
  font-size: var(--font-size-h3);
  font-weight: 400;
}

.wine-group summary::after {
  content: '+';
  color: var(--color-brass);
  font: 1.25rem/1 var(--font-sans);
}

.wine-group[open] summary::after {
  content: '–';
}

.wine-group__count {
  margin-left: auto;
  color: var(--color-muted);
  font-size: var(--font-size-body-sm);
}

.wine-group .menu-item h4 {
  margin: 0;
  font-family: var(--font-serif);
  font-size: 1.1rem;
  font-weight: 400;
}

/* ---- info blocks (Contact, Reservations) -------------------------------- */

.info-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 15rem), 1fr));
  gap: clamp(2rem, 4vw, 3.5rem) clamp(1.5rem, 3vw, 3rem);
}

.info-block h2 {
  margin: 0 0 0.75rem;
  color: var(--color-brass);
  font: var(--font-size-body-sm) / 1.2 var(--font-sans);
  letter-spacing: 0.14em;
  text-transform: uppercase;
}

.info-block p {
  margin: 0 0 0.4rem;
}

.info-block {
  min-width: 0;
}

/* the email address is one long word: it breaks after the @ (a <wbr>),
   and only anywhere else if even that will not fit */
.info-block__big {
  overflow-wrap: break-word;
  font-family: var(--font-serif);
  font-size: clamp(1.5rem, 2.4vw, 2.1rem);
  line-height: 1.15;
}

.split {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
  gap: clamp(2rem, 6vw, 6rem);
  align-items: start;
}

@media (max-width: 900px) {
  .split {
    grid-template-columns: minmax(0, 1fr);
  }
}

/* map: a photo + button until the visitor asks for the Google map, so no
   third-party request happens on page load */
.map-facade {
  position: relative;
  display: grid;
  place-items: center;
  margin: 0;
  aspect-ratio: 4 / 3;
  overflow: hidden;
  background: var(--color-mahogany-dark);
}

.map-facade > picture img,
.map-facade > img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  opacity: 0.45;
}

.map-facade__actions {
  position: relative;
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 0.75rem;
  padding: 1rem;
}

.map-facade iframe {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  border: 0;
}

/* ---- contact ----------------------------------------------------------- */

/* the welcome: copy beside the front-door photograph */
.contact-welcome {
  display: grid;
  grid-template-columns: minmax(0, 1.15fr) minmax(0, 0.85fr);
  gap: clamp(2rem, 6vw, 7rem);
  align-items: center;
  padding: calc(var(--header-h) + clamp(2.5rem, 6vw, 6rem)) var(--page-gutter) clamp(3.5rem, 7vw, 7rem);
  border-bottom: 1px solid var(--hairline);
}

.contact-welcome__copy {
  display: grid;
  gap: clamp(1.25rem, 2vw, 1.75rem);
  justify-items: start;
}

.contact-welcome__copy .page-hero__title {
  font-size: clamp(3rem, 7.2vw, 7rem);
}

.contact-welcome__copy .page-hero__lede {
  max-width: 44ch;
}

.contact-welcome__media {
  margin: clamp(10px, 1.2vw, 18px);
  aspect-ratio: 4 / 5;
  max-height: 78svh;
}

.contact-welcome__media img {
  height: 100%;
}

.contact-details {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: clamp(2.25rem, 4vw, 3.5rem) clamp(1.5rem, 3vw, 3rem);
}

/* the details get the wider share; the map card is a supporting panel */
.page-contact .split {
  grid-template-columns: minmax(0, 1.45fr) minmax(0, 1fr);
}

.contact-details .info-block__big {
  font-size: clamp(1.4rem, 1.9vw, 1.9rem);
}

.contact-details__wide {
  grid-column: 1 / -1;
  padding-top: clamp(1.75rem, 3vw, 2.5rem);
  border-top: 1px solid var(--hairline);
}

.contact-details__wide p {
  max-width: 58ch;
}

.info-block__note {
  margin-top: 0.9rem;
  color: color-mix(in oklab, var(--color-charcoal) 72%, transparent);
  font-size: 0.95rem;
  line-height: 1.6;
}

/* the map card before it loads: the address on a dark panel */
.map-facade__label {
  position: relative;
  display: grid;
  gap: 0.6rem;
  justify-items: center;
  text-align: center;
  font-family: var(--font-serif);
  font-size: clamp(1.4rem, 2.2vw, 2rem);
  line-height: 1.25;
}

.map-facade:has(.map-facade__label) {
  align-content: center;
  gap: 1.5rem;
  outline: 1px solid var(--hairline);
}

@media (max-width: 900px) {
  .page-contact .split {
    grid-template-columns: minmax(0, 1fr);
  }

  .contact-welcome {
    grid-template-columns: minmax(0, 1fr);
  }

  .contact-welcome__media {
    max-height: none;
  }
}

@media (max-width: 560px) {
  .contact-details {
    grid-template-columns: minmax(0, 1fr);
  }
}

/* ---- private dining: prix fixe menus ----------------------------------- */

.prix-fixe__inner {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
  column-gap: clamp(2rem, 6vw, 6rem);
  align-items: start;
}

.prix-fixe__inner > .eyebrow,
.prix-fixe__inner > .h2 {
  grid-column: 1;
}

.prix-fixe__body {
  grid-column: 2;
  grid-row: 1 / span 2;
  display: grid;
  gap: 1rem;
  max-width: 52ch;
  padding-top: 0.4rem;
}

.prix-fixe__body p {
  margin: 0;
}

.prix-fixe__body .page-hero__actions {
  margin-top: 0.75rem;
}

@media (max-width: 900px) {
  .prix-fixe__inner {
    grid-template-columns: minmax(0, 1fr);
  }

  .prix-fixe__body {
    grid-column: 1;
    grid-row: auto;
    margin-top: 1.5rem;
  }
}

/* ---- feeling adventurous ----------------------------------------------- */

.adventure-jump {
  display: flex;
  flex-wrap: wrap;
  gap: 0.25rem 1.5rem;
  margin-top: 1.5rem;
}

.adventure-jump a {
  padding: 0.6rem 0;
  font: 12px/1.2 var(--font-sans);
  letter-spacing: 0.13em;
  text-transform: uppercase;
}

/* section intro with a photo beside it (Under one roof, Things to do) */
.adventure-intro {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
  gap: clamp(2rem, 6vw, 6rem);
  align-items: center;
  margin-bottom: clamp(2.5rem, 5vw, 4.5rem);
}

.adventure-intro .page-section__head {
  margin-bottom: 0;
}

.adventure-figure {
  margin: 0;
}

.adventure-figure__frame {
  /* room for the halo's outline-offset */
  margin: clamp(10px, 1.2vw, 18px);
}

.adventure-figure figcaption {
  margin: clamp(1.25rem, 2vw, 1.75rem) clamp(10px, 1.2vw, 18px) 0;
  color: color-mix(in oklab, var(--color-charcoal) 72%, transparent);
  font: 13px/1.5 var(--font-sans);
  letter-spacing: 0.02em;
}

.adventure-figure__credit {
  display: block;
  margin-top: 0.25rem;
  font-size: 11px;
  letter-spacing: 0.08em;
  text-transform: uppercase;
}

.adventure-figure__credit a {
  text-decoration: underline;
  text-decoration-color: color-mix(in oklab, currentColor 45%, transparent);
  text-underline-offset: 0.25em;
}

@media (max-width: 900px) {
  .adventure-intro {
    grid-template-columns: minmax(0, 1fr);
  }
}

.place-list {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(min(100%, 19rem), 1fr));
  gap: 0 clamp(1.5rem, 3vw, 3rem);
  margin: 0;
  padding: 0;
  list-style: none;
}

.place {
  padding: 1.5rem 0 1.75rem;
  border-top: 1px solid var(--hairline);
}

/* a place card with a photo (the sister restaurants) */
.place__media {
  margin: 0 0 1.25rem;
  aspect-ratio: 4 / 3;
}

.place__name {
  margin: 0 0 0.4rem;
  font-family: var(--font-serif);
  font-size: clamp(1.35rem, 1.8vw, 1.7rem);
  font-weight: 400;
  line-height: 1.2;
}

.place__name a {
  text-decoration: none;
}

.place__name a:hover,
.place__name a:focus-visible {
  text-decoration: underline;
  text-underline-offset: 0.2em;
}

.place__meta {
  margin: 0 0 0.6rem;
  color: var(--color-brass);
  font: 12px/1.4 var(--font-sans);
  letter-spacing: 0.1em;
  text-transform: uppercase;
}

.place__note {
  margin: 0;
  max-width: 46ch;
  color: color-mix(in oklab, var(--color-charcoal) 78%, transparent);
  line-height: 1.6;
}

.amenities {
  margin-top: clamp(2.5rem, 5vw, 4rem);
}

/* "What we eat": Breakfast, then Lunch & dinner */
.place-group + .place-group {
  margin-top: clamp(2.5rem, 5vw, 4rem);
}

.place-group__title {
  margin: 0 0 0.5rem;
  color: var(--color-brass);
  font: 12px/1.2 var(--font-sans);
  letter-spacing: 0.14em;
  text-transform: uppercase;
}

.amenities__title {
  margin: 0 0 1rem;
  color: var(--color-brass);
  font: 12px/1.2 var(--font-sans);
  letter-spacing: 0.14em;
  text-transform: uppercase;
}

.amenities ul {
  display: flex;
  flex-wrap: wrap;
  gap: 0.75rem 2.5rem;
  margin: 0;
  padding: 0;
  list-style: none;
}

.amenities__note {
  color: var(--color-muted);
}

/* ---- reservations widget ------------------------------------------------ */

.reserve-widget {
  display: grid;
  justify-items: start;
  gap: 1.25rem;
}

/* app.js loads the OpenTable widget into this slot after first paint; it
   holds the "tall" widget's 490px so nothing below shifts when it lands */
.reserve-widget__slot {
  min-height: 490px;
}

.reserve-widget__slot iframe {
  display: block;
}

.reserve-widget__fallback {
  color: var(--color-muted);
  font-size: var(--font-size-body-sm);
}

/* ---- inquiry form ------------------------------------------------------- */

.inquiry {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 1.25rem 1.5rem;
  max-width: 760px;
}

.field {
  display: grid;
  gap: 0.45rem;
}

.field--wide {
  grid-column: 1 / -1;
}

.field label {
  font: var(--font-size-body-sm) / 1.2 var(--font-sans);
  letter-spacing: 0.1em;
  text-transform: uppercase;
}

.field__optional {
  color: var(--color-muted);
  letter-spacing: 0.04em;
  text-transform: none;
}

.field input,
.field select,
.field textarea {
  width: 100%;
  min-height: 48px;
  padding: 0.75rem 0.9rem;
  border: 1px solid color-mix(in oklab, var(--color-charcoal) 30%, transparent);
  border-radius: 0;
  background: var(--color-mahogany-dark);
  color: var(--color-ivory);
  font: 1rem/1.4 var(--font-sans);
}

.field textarea {
  min-height: 9rem;
  resize: vertical;
}

.field input:focus-visible,
.field select:focus-visible,
.field textarea:focus-visible {
  border-color: var(--color-brass);
  outline: 2px solid var(--color-brass);
  outline-offset: 1px;
}

.field [aria-invalid='true'] {
  border-color: #e0a07a;
}

.field__error {
  margin: 0;
  color: #e9b394;
  font-size: var(--font-size-body-sm);
}

.field__error:empty {
  display: none;
}

/* honeypot: present for bots, removed from view and from assistive tech */
.inquiry__trap {
  position: absolute;
  left: -10000px;
  width: 1px;
  height: 1px;
  overflow: hidden;
}

.inquiry__footer {
  grid-column: 1 / -1;
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 1rem 1.5rem;
}

.inquiry__status {
  margin: 0;
  max-width: 52ch;
}

.inquiry__status[data-state='error'] {
  color: #e9b394;
}

.inquiry__status[data-state='sent'] {
  color: var(--color-brass);
}

button.btn-primary {
  cursor: pointer;
}

button.btn-primary[aria-busy='true'] {
  opacity: 0.7;
  cursor: progress;
}

@media (max-width: 640px) {
  .inquiry {
    grid-template-columns: minmax(0, 1fr);
  }
}

/* ---- closing call to action -------------------------------------------- */

.page-cta {
  display: flex;
  flex-wrap: wrap;
  align-items: end;
  justify-content: space-between;
  gap: 1.5rem 3rem;
}

.page-cta .h2 {
  margin: 0;
  max-width: 18ch;
}
