/* =============================================================
   Arch Fellow — main stylesheet
   =============================================================
   Hand-editable. No build step processes this file: it is served
   verbatim from /css/main.css.

   Page rules are scoped `.page-<name> main` — <body> carries the
   page class and the header/footer sit outside <main>, so page
   rules can never reach shared chrome. Keep that shape when you
   add sections; several page classes (.hero, .stats, .band)
   intentionally mean different things on different pages.
   ============================================================= */


/* ===== Design tokens ================================================ */

/* Arch Fellow design tokens — values are exact per the design handoff README.
   Do not eyeball these from the wireframes; the wireframes are scaled down. */

:root {
  /* ---- Arch Fellow palette ---- */
  --af-ink: #252935;        /* primary text, dark surfaces, nav, footer CTAs */
  --af-ink-deep: #1C1F29;   /* legal strip */
  --af-ink-mid: #3D4152;    /* body copy on light coloured fields */
  --af-gold: #FCB017;       /* brand field, primary action */
  --af-lavender: #C8C5E2;   /* secondary brand field */
  --af-cream: #FDF8ED;      /* tertiary field, list backgrounds */
  --af-cream-warm: #F2EFE3; /* alternate warm field */
  --af-grey-text: #5C5F70;  /* eyebrows, secondary text */
  --af-grey-mid: #8B8FA3;   /* placeholder, disabled */
  --af-hairline-cream: #E0DCCF;
  --af-hairline-white: #DBD6C8;
  --af-white: #FFFFFF;

  /* Hover is a darkening step only — never lighter, never a hue shift. */
  --af-gold-hover: #F0AF00;

  /* ---- McDonald's core, for co-branded surfaces only ---- */
  --mcd-yellow: #FFBC0D;
  --mcd-red: #DB0007;
  --mcd-gray-11: #2D2D2D;
  --mcd-gray-1: #F7F7F7;
  --mcd-warm-tan: #B69A81;

  /* ---- Type ---- */
  /* Speedee is licensed McDonald's brand type and is NOT in the handoff
     bundle. Source it via the client's McDonald's brand channel and drop the
     @font-face into fonts.css. The stack below degrades until then. */
  --af-font: 'Speedee', system-ui, -apple-system, 'Segoe UI', sans-serif;
  --af-font-condensed: 'Speedee Condensed', var(--af-font);

  --af-display: 700 clamp(2.5rem, 4.5vw, 3.5rem)/1.0 var(--af-font);   /* 48–56px */
  --af-h1: 700 2.5rem/1.05 var(--af-font);                              /* 40px */
  --af-h2: 700 1.75rem/1.1 var(--af-font);                              /* 28px */
  --af-h3: 700 1.125rem/1.2 var(--af-font);                             /* 18px */
  --af-body: 300 1rem/1.5 var(--af-font);                               /* 16px */
  --af-body-sm: 300 0.875rem/1.5 var(--af-font);                        /* 14px */
  --af-eyebrow: 700 0.6875rem/1.2 var(--af-font);                       /* 11px */
  --af-legal: 300 0.75rem/1.4 var(--af-font);                           /* 12px */

  --af-track-display: -0.02em;
  --af-track-h2: -0.01em;
  --af-track-eyebrow: 0.2em;

  /* ---- Space: 4px base grid ---- */
  --af-s1: 4px;  --af-s2: 8px;  --af-s3: 12px; --af-s4: 16px;
  --af-s5: 24px; --af-s6: 32px; --af-s7: 40px; --af-s8: 64px;
  --af-section-y: 64px;        /* desktop vertical rhythm */
  --af-container: 1280px;
  --af-measure: 720px;         /* reading measure */
  --af-gutter: 16px;           /* mobile */

  /* ---- Radius ---- */
  --af-r-card: 12px;
  --af-r-input: 8px;
  --af-r-image: 8px;
  --af-r-sheet: 16px;
  --af-r-pill: 999px;          /* actions are fully round — brand signature */

  /* ---- Elevation ---- */
  --af-shadow-card: 0 1px 2px rgba(37, 41, 53, .10);
  --af-shadow-lift: 0 6px 16px rgba(37, 41, 53, .16);
  --af-focus-ring: 0 0 0 3px rgba(45, 45, 45, .25);

  /* ---- Motion ---- */
  --af-ease: cubic-bezier(.2, 0, 0, 1);
  --af-t-control: 140ms;
  --af-t-surface: 220ms;
  --af-t-page: 360ms;

  /* ---- Photography grade ---- */
  --af-photo-grade: saturate(1.1) contrast(1.035);

  --af-touch-min: 44px;        /* minimum touch target, no exceptions */

  /* ---- Brand lockup ----
     One variable drives the whole lockup. The handoff's lockup is not three
     equal heights: the Arch Fellow mark is tallest (44px), the hairline
     divider 28px (~64%) and the Golden Arches 25px (~57%). Those ratios are
     held below, so changing --af-lockup rescales the lockup correctly. */
  /* Header height. Anything that has to sit clear of the sticky header
     (e.g. the About owner card) should offset from this, not a literal. */
  --af-header-h: 100px;
  --af-header-h-compact: 84px;

  --af-lockup: 64px;           /* Arch Fellow mark height, header */
  --af-lockup-compact: 48px;   /* compact header (job + store + contact) */
  --af-lockup-footer: 56px;
}

@media (min-width: 768px)  { :root { --af-gutter: 24px; } }
@media (min-width: 1024px) { :root { --af-gutter: 40px; } }

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: .01ms !important;
    transition-duration: .01ms !important;
  }
}

/* ===== Base, layout primitives, components ========================== */

*, *::before, *::after { box-sizing: border-box; }

html { -webkit-text-size-adjust: 100%; }

body {
  margin: 0;
  font: var(--af-body);
  color: var(--af-ink);
  background: var(--af-white);
}

h1, h2, h3, h4, p, figure, blockquote { margin: 0; }
/* <picture> is unstyled by default, which leaves an inline-baseline gap
   under every photo it wraps. Pin it to block so image geometry is
   deterministic rather than UA-dependent. */
img, svg, video, picture { display: block; max-width: 100%; }
img { height: auto; }

a { color: inherit; }

:focus-visible { outline: none; box-shadow: var(--af-focus-ring); }

/* ---- Layout primitives ---- */
.af-container {
  max-width: var(--af-container);
  margin-inline: auto;
  padding-inline: var(--af-gutter);
}
.af-measure { max-width: var(--af-measure); }

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

/* One dominant field colour per section; alternate down the page. */
.af-field-ink      { background: var(--af-ink);        color: var(--af-white); }
.af-field-white    { background: var(--af-white);      color: var(--af-ink); }
.af-field-cream    { background: var(--af-cream);      color: var(--af-ink); }
.af-field-cream-w  { background: var(--af-cream-warm); color: var(--af-ink); }
.af-field-lavender { background: var(--af-lavender);   color: var(--af-ink); }
.af-field-gold     { background: var(--af-gold);       color: var(--af-ink); } /* never white on gold */

/* ---- Type roles ---- */
.af-display { font: var(--af-display); letter-spacing: var(--af-track-display); }
.af-h1      { font: var(--af-h1);      letter-spacing: var(--af-track-display); }
.af-h2      { font: var(--af-h2);      letter-spacing: var(--af-track-h2); }
.af-h3      { font: var(--af-h3); }
.af-body    { font: var(--af-body); }
.af-body-sm { font: var(--af-body-sm); }
.af-legal   { font: var(--af-legal); }

.af-eyebrow {
  font: var(--af-eyebrow);
  letter-spacing: var(--af-track-eyebrow);
  text-transform: uppercase;
  color: var(--af-grey-text);
}
.af-field-ink .af-eyebrow,
.af-field-lavender .af-eyebrow { color: inherit; }

/* ---- Actions: always a pill, minimum 44px ---- */
.af-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: var(--af-s2);
  min-height: var(--af-touch-min);
  padding: 0 var(--af-s5);
  border: 2px solid transparent;
  border-radius: var(--af-r-pill);
  font: 700 1rem/1 var(--af-font);
  text-decoration: none;
  cursor: pointer;
  transition: background-color var(--af-t-control) var(--af-ease),
              transform var(--af-t-control) var(--af-ease);
}
.af-btn:active { transform: scale(.97); }

.af-btn--gold  { background: var(--af-gold); color: var(--af-ink); }
.af-btn--gold:hover  { background: var(--af-gold-hover); }

.af-btn--ink   { background: var(--af-ink); color: var(--af-white); }
.af-btn--ink:hover   { background: var(--af-ink-deep); }

.af-btn--outline { background: transparent; color: var(--af-ink); border-color: var(--af-ink); }
.af-btn--outline:hover { background: var(--af-ink); color: var(--af-white); }

.af-field-ink .af-btn--outline { color: var(--af-white); border-color: var(--af-white); }
.af-field-ink .af-btn--outline:hover { background: var(--af-white); color: var(--af-ink); }

/* ---- Cards ---- */
.af-card {
  display: flex;
  flex-direction: column;
  background: var(--af-white);
  border-radius: var(--af-r-card);
  box-shadow: var(--af-shadow-card);
  overflow: hidden;
}
/* Weight signals interactivity, not colour. */
.af-card--bordered { border: 2px solid var(--af-ink); box-shadow: none; }

.af-card--interactive {
  transition: box-shadow var(--af-t-control) var(--af-ease),
              transform var(--af-t-control) var(--af-ease);
}
.af-card--interactive:hover {
  box-shadow: var(--af-shadow-lift);
  transform: translateY(-2px);
}

/* Pushes an action to the bottom so cards in a row stay aligned even when a
   sibling title wraps. Preserved from the wireframe. */
.af-card__spacer { margin-top: auto; }

/* ---- Chips ---- */
.af-chip {
  display: inline-flex;
  align-items: center;
  min-height: 32px;
  padding: 0 var(--af-s3);
  border: 1px solid var(--af-hairline-white);
  border-radius: var(--af-r-pill);
  font: var(--af-body-sm);
  background: var(--af-white);
}

/* Active chips take a 2px border, so 1px of horizontal padding comes off to
   keep the layout from shifting. */
.af-chip--filter { cursor: pointer; min-height: var(--af-touch-min); font-weight: 400; }
.af-chip--filter[aria-pressed='true'] {
  background: var(--af-gold);
  border: 2px solid var(--af-ink);
  padding: 0 calc(var(--af-s3) - 1px);
  font-weight: 700;
}

/* ---- Forms ---- */
.af-input, .af-select, .af-textarea {
  width: 100%;
  min-height: var(--af-touch-min);
  padding: var(--af-s3) var(--af-s4);
  border: 1px solid var(--af-hairline-white);
  border-radius: var(--af-r-input);
  font: var(--af-body);
  color: var(--af-ink);
  background: var(--af-white);
}
.af-input::placeholder, .af-textarea::placeholder { color: var(--af-grey-mid); }
.af-input:focus, .af-select:focus, .af-textarea:focus {
  border: 2px solid var(--af-ink);
  padding: calc(var(--af-s3) - 1px) calc(var(--af-s4) - 1px);
  outline: none;
}
.af-textarea { min-height: 120px; resize: vertical; }
.af-label { display: block; font: var(--af-body-sm); font-weight: 400; margin-bottom: var(--af-s1); }

/* ---- Photography ---- */
.af-photo { border-radius: var(--af-r-image); filter: var(--af-photo-grade); object-fit: cover; }

.af-hairline { border: 0; border-top: 1px solid var(--af-hairline-cream); }

.af-sr {
  position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
  overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0;
}

/* The skip link must become visible when it takes focus — otherwise keyboard
   users tab to something they cannot see. Only anchors: .af-sr is also used
   for non-focusable labels (e.g. inside the menu button). */
a.af-sr:focus {
  position: fixed;
  top: var(--af-s3);
  left: var(--af-s3);
  z-index: 100;
  display: inline-flex;
  align-items: center;
  width: auto;
  height: auto;
  min-height: var(--af-touch-min);
  margin: 0;
  padding: 0 var(--af-s5);
  overflow: visible;
  clip: auto;
  border-radius: var(--af-r-pill);
  background: var(--af-gold);
  color: var(--af-ink);
  font-weight: 700;
  text-decoration: none;
}

/* ---- Touch targets: 44px minimum, no exceptions ----
   Text links that act as standalone controls (back links, section links,
   contact details, table row links) are inline by default and land at
   17-21px. Giving them a flex box lets the min-height apply without
   changing where the text sits. */
.lockup,
a.af-chip,
.page-home main .ops__all,
.page-careers main .roles__filter,
.page-job main .back,
.page-store main .back,
.page-contact main .office__line a,
.page-contact main .feedback__line a,
.page-store main .addr a,
.page-directory main .tbl__name a {
  display: inline-flex;
  align-items: center;
  min-height: var(--af-touch-min);
}

/* ===== Component: Brandmark — logo lockup =========================== */

.lockup {
  display: inline-flex;
  align-items: center;
  gap: var(--af-s3);
  text-decoration: none;
}

/* Sized here rather than inline in the templates, so there is one number to
   change and both the static build and the WordPress theme stay in step. */
.lockup .mark--af       { height: var(--af-lockup); }
.lockup .lockup__divider { height: calc(var(--af-lockup) * 0.62); }
.lockup .mark--arches   { height: calc(var(--af-lockup) * 0.66); }

.hdr[data-compact] .lockup { --af-lockup: var(--af-lockup-compact); }
.ftr .lockup               { --af-lockup: var(--af-lockup-footer); }

.mark {
  display: block;
  background: var(--af-gold);
  -webkit-mask-repeat: no-repeat;
  mask-repeat: no-repeat;
  -webkit-mask-position: center;
  mask-position: center;
  -webkit-mask-size: contain;
  mask-size: contain;
}

.mark--af {
  aspect-ratio: 58 / 46;
  -webkit-mask-image: url('/assets/brand/af-logo.png');
  mask-image: url('/assets/brand/af-logo.png');
}

.mark--arches {
  aspect-ratio: 1 / 1;
  -webkit-mask-image: url('/assets/golden-arches.png');
  mask-image: url('/assets/golden-arches.png');
}

/* Named .lockup__divider to match the markup — the old .divider selector
   matched nothing, so the hairline never rendered. */
.lockup__divider {
  width: 1px; background: rgba(255, 255, 255, .28);
}

/* ===== Component: Header — sticky ink bar =========================== */

/* Header sticks on scroll. */
  .hdr {
  position: sticky;
  top: 0;
  z-index: 50;
  background: var(--af-ink);
  color: var(--af-white);
}

.hdr__in {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--af-s5);
  min-height: var(--af-header-h);
}

.hdr[data-compact] .hdr__in {
  min-height: var(--af-header-h-compact);
}

.hdr__nav {
  display: none; align-items: center; gap: var(--af-s5);
}

@media (min-width: 860px) {
  .hdr__nav {
    display: flex;
  }

  .hdr__toggle {
    display: none !important;
  }
}

.hdr__link {
  display: inline-flex;
  align-items: center;
  min-height: var(--af-touch-min);
  font: 400 0.9375rem/1 var(--af-font);
  text-decoration: none;
  color: var(--af-white);
  transition: color var(--af-t-control) var(--af-ease);
}

.hdr__link:hover {
  color: var(--af-gold);
}

/* Active item is gold and 700. */
  .hdr__link[aria-current='page'] {
  color: var(--af-gold); font-weight: 700;
}

/* Contact is always a gold pill, never a plain link. */
  .hdr__cta {
  padding-inline: var(--af-s4); font-size: 0.9375rem;
}

.hdr__toggle {
  display: inline-flex;
  flex-direction: column;
  justify-content: center;
  gap: 5px;
  width: var(--af-touch-min);
  height: var(--af-touch-min);
  padding: 0;
  background: none;
  border: 0;
  cursor: pointer;
}

/* Namespaced: the restaurant detail page has its own .bar, and the WordPress
   header markup already used .hdr__bar. Matching them here means the burger
   renders in both builds and the two cannot collide. */
.hdr__bar {
  display: block; height: 2px; background: var(--af-white);
}

.hdr__mobile {
  display: flex;
  flex-direction: column;
  gap: var(--af-s2);
  padding: var(--af-s4) var(--af-gutter) var(--af-s5);
  border-top: 1px solid rgba(255, 255, 255, .18);
}

.hdr__mobile[hidden] {
  display: none;
}

@media (min-width: 860px) {
  .hdr__mobile {
    display: none !important;
  }
}

/* ===== Component: Footer ============================================ */

.ftr {
  background: var(--af-ink); color: var(--af-white);
}

.ftr__in {
  display: grid;
  gap: var(--af-s7);
  padding-block: var(--af-s8) var(--af-s7);
}

@media (min-width: 860px) {
  .ftr__in {
    grid-template-columns: minmax(200px, 1fr) 3fr;
  }
}

.ftr__meta {
  margin-top: var(--af-s3); color: var(--af-grey-mid);
}

.ftr__cols {
  display: grid;
  gap: var(--af-s5);
  grid-template-columns: repeat(2, 1fr);
}

@media (min-width: 640px) {
  .ftr__cols {
    grid-template-columns: repeat(4, 1fr);
  }
}

.ftr__ctitle {
  color: var(--af-lavender); margin-bottom: var(--af-s3);
}

.ftr__list {
  list-style: none; margin: 0; padding: 0;
}

.ftr__link {
  display: inline-flex;
  align-items: center;
  min-height: var(--af-touch-min);
  font: var(--af-body-sm);
  text-decoration: none;
  transition: color var(--af-t-control) var(--af-ease);
}

.ftr__link:hover {
  color: var(--af-gold);
}

/* Legal never animates. */
  .ftr__legal {
  background: var(--af-ink-deep);
  padding-block: var(--af-s4);
  color: var(--af-grey-mid);
}

/* ===== Component: Door card — the three Home doors ================== */

.door {
  height: 100%;
}

.door__photo {
  width: 100%;
  /* 8a runs the photo at ~66% of the card's width (92px on a 139px card).
     Held to that proportion as the grid widens, floored at the wireframe's
     own height so narrow columns never crop to a sliver. */
  height: clamp(200px, 20vw, 264px);
  object-fit: cover;
  filter: var(--af-photo-grade);
  border-radius: 0;
}

.door__body {
  display: flex;
  flex-direction: column;
  flex: 1;
  padding: var(--af-s5);
}

.door__copy {
  margin-top: var(--af-s2); color: var(--af-ink-mid);
}

.door__action {
  padding-top: var(--af-s5);
}

/* ===== Component: CTA band ========================================== */

.ctaband {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: var(--af-s5);
}

.ctaband__body {
  margin-top: var(--af-s2); color: var(--af-lavender);
}


/* ===== Page: / (home) =============================================== */

.page-home main .hero__in { padding-block: clamp(var(--af-s8), 9vw, 120px); }
.page-home main .hero__title { max-width: 16ch; }

/* Supporting line runs at ~40% of the headline (handoff, Home §2), so it has
   to track the hero clamp rather than sit at body size. Headline is
   clamp(2.5rem, 4.5vw, 3.5rem); 40% of that is the clamp below.
   Measure: the wireframe caps it at 300px on a 470px frame — scaled by the
   same 34px->56px type factor, that is ~494px. */
.page-home main .hero__sub {
  font: 300 clamp(1rem, 1.8vw, 1.4rem)/1.4 var(--af-font);
  max-width: 31rem;
  margin-top: var(--af-s5);
  color: var(--af-ink);
}

.page-home main .doors {
  display: grid;
  gap: var(--af-s5);
  margin-top: var(--af-s6);
}
/* Three doors stack on mobile. */
@media (min-width: 860px) {
  .page-home main .doors { grid-template-columns: repeat(3, 1fr); }
}

.page-home main .community { display: grid; gap: var(--af-s7); }
@media (min-width: 860px) {
  .page-home main .community { grid-template-columns: 1fr 1fr; align-items: stretch; }
}
.page-home main .community__title { margin-top: var(--af-s3); }

/* Photo moves above its text on mobile, where it runs full width. */
.page-home main .community__photo {
  order: -1;
  width: 100%;
  height: auto;
  aspect-ratio: 3 / 2;
}
@media (min-width: 860px) {
  /* From here the photo is a contained square sitting at the right of its
     column, not a panel that stretches to the row.
     `height: 100%` used to let it inflate to whatever the column was wide —
     at full-width that meant an ~800px tall photo swamping the stats beside
     it. Capping the width keeps it the same size whatever the viewport. */
  .page-home main .community__photo {
    order: 0;
    aspect-ratio: 1;
    max-width: 280px;
    justify-self: end;
    align-self: start;
  }
}

.page-home main .stats { margin: var(--af-s5) 0 var(--af-s6); display: grid; gap: var(--af-s3); }
.page-home main .stat { display: flex; align-items: center; gap: var(--af-s4); }
.page-home main .stat__chip {
  flex: 0 0 auto;
  min-width: 112px;
  padding: var(--af-s2) var(--af-s5);
  background: var(--af-gold);
  border-radius: var(--af-r-pill);
  font: 700 1.25rem/1.4 var(--af-font);
  color: var(--af-ink);
  text-align: center;
}

/* Body size rather than body-small: these three lines are the section's
   substance, and at 14px they read as captions next to the photo. */
.page-home main .stat__body {
  margin: 0;
  font: 300 1.25rem/1.5 var(--af-font);
  color: var(--af-ink-mid);
}

.page-home main .ops__head {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: var(--af-s4);
}
.page-home main .ops__all { text-decoration: none; font-weight: 700; }
.page-home main .ops__all:hover { color: var(--af-gold-hover); }

.page-home main .ops { display: grid; gap: var(--af-s5); margin-top: var(--af-s5); }
@media (min-width: 860px) {
  .page-home main .ops { grid-template-columns: 2fr 1fr; }
}

/* Map goes full width above the region cards on mobile. */
.page-home main .ops__map {
  width: 100%;
  min-height: 380px;
  border: 0;
  border-radius: var(--af-r-card);
  background: var(--af-cream);
}
.page-home main .ops__regions { display: grid; gap: var(--af-s3); align-content: start; }
.page-home main .region {
  padding: var(--af-s4) var(--af-s5);
  text-decoration: none;
  border: 1px solid var(--af-hairline-white);
}
.page-home main .region__count { color: var(--af-grey-text); margin-top: var(--af-s1); }

.page-home main .twoup { display: grid; gap: var(--af-s5); }
@media (min-width: 640px) {
  .page-home main .twoup { grid-template-columns: 1fr 1fr; }
}
.page-home main .twoup__card { padding: var(--af-s6); min-height: 200px; }
.page-home main .twoup__card--ink { background: var(--af-ink); color: var(--af-white); }
.page-home main .twoup__card--ink .af-eyebrow { color: var(--af-lavender); }
.page-home main .twoup__title { margin-top: var(--af-s2); }
.page-home main .twoup__action { padding-top: var(--af-s5); }


/* ===== Page: /about ================================================= */

.page-about main .hero {
  display: flex;
  flex-direction: column;
  gap: var(--af-s3);
  align-items: flex-start;
}
.page-about main .hero__title { max-width: 22ch; line-height: 1.12; }
.page-about main .hero__body { max-width: 52ch; color: var(--af-ink-mid); }

.page-about main .letter { display: grid; gap: var(--af-s7); }
@media (min-width: 860px) {
  .page-about main .letter {
    grid-template-columns: 300px minmax(0, 1fr);
    align-items: start;
  }
}

.page-about main .owner {
  position: sticky;
  top: calc(var(--af-header-h) + var(--af-s5));
}
@media (max-width: 859px) {
  .page-about main .owner { position: static; max-width: 300px; }
}
.page-about main .owner__photo {
  width: 100%;
  /* 2/3 matches the source portrait's own aspect (800x1195), so it runs taller
     and object-fit has nothing left to crop — the full frame shows. */
  aspect-ratio: 2 / 3;
  object-fit: cover;
  border-radius: var(--af-r-image) var(--af-r-image) 0 0;
  filter: var(--af-photo-grade);
}
.page-about main .owner__band { height: 6px; background: var(--af-gold); }
.page-about main .owner__plate {
  background: var(--af-ink);
  color: var(--af-white);
  padding: var(--af-s4);
  border-radius: 0 0 var(--af-r-image) var(--af-r-image);
}
.page-about main .owner__eyebrow { color: var(--af-gold); }
.page-about main .owner__name { margin-top: var(--af-s2); }
.page-about main .owner__meta { margin-top: var(--af-s1); color: var(--af-grey-mid); }

.page-about main .letter__p {
  margin-top: var(--af-s5);
  font: 300 1.125rem/1.6 var(--af-font);
  color: var(--af-ink-mid);
}
.page-about main .letter__p:first-of-type { margin-top: var(--af-s5); }
.page-about main .letter__sign {
  margin-top: var(--af-s6);
  font: 300 1.125rem/1.6 var(--af-font);
}
.page-about main .letter__title { color: var(--af-grey-text); }

.page-about main .values { display: grid; gap: var(--af-s5); margin-top: var(--af-s6); }
@media (min-width: 860px) {
  .page-about main .values { grid-template-columns: repeat(3, 1fr); }
}
.page-about main .value { padding: var(--af-s5); }
.page-about main .value__body { margin-top: var(--af-s2); color: var(--af-ink-mid); }


/* ===== Page: /careers =============================================== */

.page-careers main .hero {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: var(--af-s4);
}
.page-careers main .hero__title { max-width: 24ch; }
.page-careers main .hero__body { max-width: 56ch; }

.page-careers main .benefits { display: grid; gap: var(--af-s4); margin-top: var(--af-s6); }
@media (min-width: 640px) {
  .page-careers main .benefits { grid-template-columns: repeat(2, 1fr); }
}
@media (min-width: 1024px) {
  .page-careers main .benefits { grid-template-columns: repeat(3, 1fr); }
}
.page-careers main .benefit {
  flex-direction: row;
  align-items: flex-start;
  gap: var(--af-s4);
  padding: var(--af-s5);
  border: 1px solid var(--af-hairline-white);
}
/* The icon is a flex item, so a long title on a narrow card was squeezing it
   below the 26px the handoff specifies — cards ended up with 26px and 24px
   icons side by side. Stop it shrinking. */
.page-careers main .benefit > svg { flex: 0 0 auto; }
.page-careers main .benefit__body { margin-top: var(--af-s1); color: var(--af-ink-mid); }

.page-careers main .roles__head {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: var(--af-s4);
}
.page-careers main .roles__filter { text-decoration: none; font-weight: 700; }

.page-careers main .chips {
  display: flex;
  flex-wrap: wrap;
  gap: var(--af-s2);
  margin-top: var(--af-s5);
}

.page-careers main .roles {
  list-style: none;
  margin: var(--af-s5) 0 0;
  padding: 0;
  display: grid;
  gap: var(--af-s3);
}
.page-careers main .role {
  flex-direction: row;
  align-items: center;
  justify-content: space-between;
  gap: var(--af-s4);
  padding: var(--af-s5);
}
.page-careers main .role[hidden] { display: none; }
.page-careers main .role__detail { margin-top: var(--af-s1); color: var(--af-grey-text); }
.page-careers main .roles__empty { margin-top: var(--af-s5); color: var(--af-grey-text); }
.page-careers main .roles__empty[hidden] { display: none; }

.page-careers main .path { display: grid; gap: var(--af-s7); align-items: center; }
@media (min-width: 860px) {
  .page-careers main .path { grid-template-columns: minmax(0, 1fr) 240px; }
}
.page-careers main .path__title { margin-top: var(--af-s3); }
.page-careers main .path__list {
  list-style: none;
  margin: var(--af-s5) 0 0;
  padding: 0;
  display: grid;
  gap: var(--af-s4);
}
.page-careers main .path__row { display: flex; align-items: center; gap: var(--af-s4); }
.page-careers main .path__num {
  flex: 0 0 auto;
  display: grid;
  place-items: center;
  width: 32px;
  height: 32px;
  background: var(--af-gold);
  border-radius: var(--af-r-pill);
  font: 700 0.9375rem/1 var(--af-font);
}
.page-careers main .path__photo { width: 100%; max-width: 240px; aspect-ratio: 1; }


/* ===== Page: /careers/<slug> (job detail) =========================== */

/* Narrower than the other pages — a reading column even at desktop. */
.page-job main .doc__in {
  max-width: var(--af-measure);
  margin-inline: auto;
  padding-inline: var(--af-gutter);
}
.page-job main .back {
  display: inline-block;
  margin-bottom: var(--af-s4);
  text-decoration: none;
  font-weight: 700;
}
.page-job main .hero__eyebrow { margin-bottom: var(--af-s2); }

.page-job main .chips {
  list-style: none;
  display: flex;
  flex-wrap: wrap;
  gap: var(--af-s2);
  margin: var(--af-s5) 0 0;
  padding: 0;
}
.page-job main .chips--tight { margin-top: var(--af-s3); }

/* Plain paragraphs, not bullets. */
.page-job main .duty { margin-top: var(--af-s4); color: var(--af-ink-mid); }

.page-job main .perks {
  list-style: none;
  display: grid;
  gap: var(--af-s4);
  margin: var(--af-s5) 0 0;
  padding: 0;
}
@media (min-width: 560px) {
  .page-job main .perks { grid-template-columns: 1fr 1fr; }
}
.page-job main .perk { display: flex; align-items: center; gap: var(--af-s3); }

.page-job main .store {
  flex-direction: row;
  margin-top: var(--af-s5);
  border: 1px solid var(--af-hairline-white);
}
.page-job main .store__photo {
  width: 160px;
  align-self: stretch;
  height: auto;
  object-fit: cover;
  filter: var(--af-photo-grade);
  flex: 0 0 auto;
}
.page-job main .store__photo--fallback { background: var(--af-lavender); min-height: 140px; }
.page-job main .store__body { padding: var(--af-s5); }
.page-job main .store__addr { margin-top: var(--af-s1); color: var(--af-grey-text); }

.page-job main .band {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: var(--af-s5);
}
.page-job main .band__body { margin-top: var(--af-s2); color: var(--af-lavender); }


/* ===== Page: /community ============================================= */

/* The stats section below is also cream, so without this the banner and the
   cards run together as one field. 1px hairline is the token set's separator
   for cream-on-cream. */
.page-community main .hero {
  display: grid;
  /* Clearance so the separator reads as a section edge rather than a rule
     drawn under the photo. The photo still bleeds to the top and right; only
     the bottom gets space. */
  padding-bottom: var(--af-s5);
  border-bottom: 1px solid var(--af-hairline-cream);
}
@media (min-width: 860px) {
  /* Text column wider than the photo column: the copy is the point of this
     banner, the photo supports it. */
  .page-community main .hero { grid-template-columns: 1.2fr 0.8fr; align-items: center; }
}
.page-community main .hero__text { padding: var(--af-section-y) var(--af-gutter); }
@media (min-width: 860px) {
  .page-community main .hero__text {
    /* Align the copy to the site container's left edge.
       This was `margin-left: auto` with a half-container max-width, which only
       landed on the container edge while the column was exactly half the
       viewport — change the column ratio and the text drifts. Computing the
       container offset directly holds at any ratio and any width.
       max() keeps it at the plain gutter below the container's max width. */
    width: 100%;
    max-width: none;
    margin-left: 0;
    padding-left: max(
      var(--af-gutter),
      calc((100vw - var(--af-container)) / 2 + var(--af-gutter))
    );
    padding-right: var(--af-s7);
  }
}
/* Larger than the standard H1 here — this is a banner, and at 40px the
   heading was losing to the photo beside it. */
.page-community main .hero__title {
  margin-top: var(--af-s3);
  font-size: clamp(2.5rem, 3.6vw, 3.25rem);
  line-height: 1.05;
}
.page-community main .hero__body {
  margin-top: var(--af-s4);
  max-width: 34ch;
  font: 300 clamp(1.0625rem, 1.35vw, 1.25rem)/1.5 var(--af-font);
  color: var(--af-ink-mid);
}
/* Photo bleeds to the section edge. */
.page-community main .hero__photo {
  width: 100%;
  height: 100%;
  min-height: 280px;
  object-fit: cover;
  filter: var(--af-photo-grade);
}
@media (min-width: 860px) {
  /* The source image is nearly square, so with no cap the banner grew as tall
     as its column was wide — 731px at a 1440 viewport. A fixed ratio keeps it
     a banner instead of a panel, and object-fit crops rather than distorts. */
  .page-community main .hero__photo {
    height: auto;
    aspect-ratio: 4 / 3;
    max-height: 440px;
  }
}

.page-community main .stats { display: grid; gap: var(--af-s5); }
@media (min-width: 860px) {
  /* Narrower than the full container, centred. The row still reads as three
     equal cards; they just stop stretching to the full 1200px. */
  .page-community main .stats {
    grid-template-columns: repeat(3, 1fr);
    max-width: 880px;
    margin-inline: 0;
  }
}
.page-community main .stat { padding: var(--af-s6); border: 1px solid var(--af-hairline-white); }
/* The handoff sets these at H3 (22px). Raised deliberately — the figure is
   the whole point of the card and was reading as a label above the copy. */
.page-community main .stat__figure {
  font: 700 2.375rem/1.05 var(--af-font);
  letter-spacing: var(--af-track-display);
}
.page-community main .stat__body {
  margin-top: var(--af-s3);
  font: 300 1.0625rem/1.5 var(--af-font);
  color: var(--af-ink-mid);
}

.page-community main .rows {
  display: grid;
  gap: var(--af-s4);
  margin-top: var(--af-s6);
}
@media (min-width: 860px) {
  /* Left-aligned, not centred: the section heading sits at the container edge,
     and a centred row left it ~160px adrift of its own heading. */
  .page-community main .rows {
    max-width: 880px;
    margin-inline: 0;
  }
}
.page-community main .row {
  flex-direction: row;
  align-items: center;
  gap: var(--af-s5);
  padding: var(--af-s5) var(--af-s6);
}
.page-community main .row h3 { font-size: 1.375rem; }
.page-community main .row__body {
  margin-top: var(--af-s1);
  font: 300 1.15rem/1.5 var(--af-font);
  color: var(--af-ink-mid);
}

.page-community main .pair { display: grid; gap: var(--af-s5); }
@media (min-width: 640px) {
  .page-community main .pair { grid-template-columns: 1fr 1fr; }
}
.page-community main .pair__img { width: 100%; aspect-ratio: 3 / 2; object-fit: cover; }
.page-community main .pair__img--pending {
  background: var(--af-cream-warm);
  border-radius: var(--af-r-image);
}


/* ===== Page: /contact =============================================== */

.page-contact main .routes { display: grid; gap: var(--af-s4); }
.page-contact main .route {
  flex-direction: row;
  align-items: center;
  gap: var(--af-s4);
  padding: var(--af-s5);
  border: 1px solid var(--af-hairline-white);
}
.page-contact main .route__text { flex: 1 1 auto; }
.page-contact main .route__body { margin-top: var(--af-s1); color: var(--af-ink-mid); }
.page-contact main .route__detail { margin-top: var(--af-s2); color: var(--af-grey-text); }
.page-contact main .route__action { flex: 0 0 auto; }
@media (max-width: 559px) {
  .page-contact main .route { flex-wrap: wrap; }
  .page-contact main .route__action { width: 100%; }
}

.page-contact main .form {
  display: grid;
  gap: var(--af-s5);
  margin-top: var(--af-s6);
  max-width: var(--af-measure);
}
.page-contact main .form__row { display: grid; gap: var(--af-s5); }
@media (min-width: 560px) {
  .page-contact main .form__row { grid-template-columns: 1fr 1fr; }
}
/* Left-aligned, not stretched. */
.page-contact main .form__send { justify-self: start; }

.page-contact main .office { display: grid; gap: var(--af-s7); }
@media (min-width: 860px) {
  .page-contact main .office { grid-template-columns: 1fr 1fr; align-items: start; }
}
.page-contact main .office__line { margin-top: var(--af-s1); color: var(--af-ink-mid); }
.page-contact main .office__line a { text-decoration: none; }
.page-contact main .office__line a:hover { color: var(--af-gold-hover); }

.page-contact main .feedback {
  margin-top: var(--af-s5);
  padding: var(--af-s4);
  border: 1px solid var(--af-hairline-white);
  border-radius: var(--af-r-card);
}
.page-contact main .feedback__line { margin-top: var(--af-s1); }
.page-contact main .feedback__line a { text-decoration: none; }

.page-contact main .office__map {
  width: 100%;
  min-height: 260px;
  border: 0;
  border-radius: var(--af-r-card);
  background: var(--af-cream);
}


/* ===== Page: /locations ============================================= */

.page-locations main .hero {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: var(--af-s3);
}

/* Type scaled from wireframe 2a.
   2a is the 960px artboard; the production container is 1280px, so its sizes
   are multiplied by 1280/960 = 1.333:
     eyebrow  9.5 -> 12.7    H1 40/0.98 -> 53.3
     body    13.5 -> 18      actions 14 -> 18.7     legal 10.5 -> 14
   This keeps 2a's hierarchy (H1 is ~3x the body) rather than the flatter
   2.5x the default scale produced. */
.page-locations main .markets {
  display: flex;
  gap: var(--af-s5);
  font-size: 0.79rem;
}
.page-locations main .hero__title {
  max-width: 24ch;
  font-size: clamp(2.5rem, 4.1vw, 3.33rem);
  line-height: 0.98;
}
.page-locations main .hero__body {
  max-width: 54ch;
  font: 300 1.125rem/1.5 var(--af-font);
  color: var(--af-ink-mid);
}
.page-locations main .actions .af-btn { font-size: 1.167rem; }
.page-locations main .legal .af-legal { font-size: 0.875rem; }

.page-locations main .mapwrap { background: var(--af-cream); }
.page-locations main .mapwrap__frame {
  display: block;
  width: 100%;
  height: 540px;
  border: 0;
}
/* Below the map's own stacking breakpoint it needs more room, not less. */
@media (max-width: 719px) {
  .page-locations main .mapwrap__frame { height: 640px; }
}

.page-locations main .actions { display: flex; flex-wrap: wrap; gap: var(--af-s4); }

.page-locations main .legal {
  background: var(--af-ink-deep);
  color: var(--af-grey-mid);
  padding-block: var(--af-s5);
}


/* ===== Page: /locations/directory =================================== */

.page-directory main .hero {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: var(--af-s3);
}
.page-directory main .markets { display: flex; gap: var(--af-s5); }
.page-directory main .hero__body { color: var(--af-ink-mid); }

.page-directory main .counts {
  display: flex;
  flex-wrap: wrap;
  gap: var(--af-s2);
  margin: 0 0 var(--af-s7);
}

.page-directory main .region { margin-top: var(--af-s7); }
.page-directory main .region:first-of-type { margin-top: 0; }
.page-directory main .region__title { margin-bottom: var(--af-s4); }

/* Wide tables scroll in their own container; the page never scrolls sideways. */
.page-directory main .tbl {
  width: 100%;
  border-collapse: collapse;
  display: block;
  overflow-x: auto;
  /* Edge shadows so it is visible that the table scrolls. The `local` layers
     are white covers pinned to the content, the `scroll` layers are the
     shadows pinned to the box — so each shadow only shows while there is
     more table in that direction, and vanishes at the ends and when the
     table fits. Pure CSS, no scroll listener. */
  background:
    linear-gradient(to right, var(--af-white) 30%, rgba(255, 255, 255, 0)) left center,
    linear-gradient(to left,  var(--af-white) 30%, rgba(255, 255, 255, 0)) right center,
    radial-gradient(farthest-side at 0 50%,   rgba(37, 41, 53, .16), rgba(37, 41, 53, 0)) left center,
    radial-gradient(farthest-side at 100% 50%, rgba(37, 41, 53, .16), rgba(37, 41, 53, 0)) right center;
  background-repeat: no-repeat;
  background-size: 40px 100%, 40px 100%, 14px 100%, 14px 100%;
  background-attachment: local, local, scroll, scroll;
}
.page-directory main .tbl thead { text-align: left; }
.page-directory main .tbl th,
.page-directory main .tbl td {
  padding: var(--af-s3) var(--af-s4);
  border-bottom: 1px solid var(--af-hairline-cream);
  font: var(--af-body-sm);
  text-align: left;
  white-space: nowrap;
}
.page-directory main .tbl thead th {
  font-weight: 700;
  border-bottom-width: 2px;
  border-bottom-color: var(--af-ink);
}
.page-directory main .tbl__num { color: var(--af-grey-text); font-variant-numeric: tabular-nums; }
.page-directory main .tbl__name { font-weight: 700; }
.page-directory main .tbl__name a { text-decoration: none; }
.page-directory main .tbl__name a:hover { color: var(--af-gold-hover); }
.page-directory main .tbl__note { font-weight: 300; color: var(--af-grey-text); }
.page-directory main .tbl__empty { color: var(--af-grey-mid); }

.page-directory main .legal {
  background: var(--af-ink-deep);
  color: var(--af-grey-mid);
  padding-block: var(--af-s5);
}

@media print {
  .page-directory main .legal { color: var(--af-ink); background: none; }
  .page-directory main .tbl th,
  .page-directory main .tbl td { white-space: normal; }
}


/* ===== Page: /locations/<store> (restaurant detail) ================= */

.page-store main .bar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--af-s4);
  padding-block: var(--af-s4);
}
.page-store main .back { text-decoration: none; font-weight: 700; }
.page-store main .af-chip { text-decoration: none; }

.page-store main .shot {
  width: 100%;
  height: clamp(220px, 34vw, 420px);
  object-fit: cover;
  filter: var(--af-photo-grade);
}
.page-store main .shot--fallback { background: var(--af-lavender); }
.page-store main .band { height: 8px; background: var(--af-gold); }

.page-store main .title { margin-top: var(--af-s2); }
.page-store main .addr { margin-top: var(--af-s2); color: var(--af-ink-mid); }
.page-store main .addr a { text-decoration: none; }
.page-store main .actions {
  display: flex;
  flex-wrap: wrap;
  gap: var(--af-s3);
  margin-top: var(--af-s5);
}

.page-store main .grid { display: grid; gap: var(--af-s7); }
@media (min-width: 640px) {
  .page-store main .grid { grid-template-columns: 1fr 1fr; }
}

.page-store main .hours { margin: var(--af-s4) 0 0; display: grid; gap: var(--af-s2); }
.page-store main .hours__row {
  display: flex;
  justify-content: space-between;
  gap: var(--af-s4);
  padding-bottom: var(--af-s2);
  border-bottom: 1px solid var(--af-hairline-cream);
}
.page-store main .hours__time { margin: 0; font-weight: 700; }

.page-store main .amenities {
  list-style: none;
  margin: var(--af-s4) 0 0;
  padding: 0;
  display: grid;
  gap: var(--af-s3);
}
.page-store main .amenity { display: flex; align-items: center; gap: var(--af-s3); }

.page-store main .hiring {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: var(--af-s5);
}
.page-store main .hiring__body { margin-top: var(--af-s2); color: var(--af-lavender); }

.page-store main .legal {
  background: var(--af-ink-deep);
  color: var(--af-grey-mid);
  padding-block: var(--af-s5);
}
