/* =============================================================================
   Amici Restaurant — Cambridge, Ontario
   Concept preview by PXLNorth. Recreation of the sundayinbrooklyn.com blueprint
   (templates/blueprints/food/sundayinbrooklyn) at Amici's own brand.

   TYPE — chosen for THIS business, not a house pairing.
   -------------------------------------------------------------------------
   Display: BODONI MODA. Giambattista Bodoni cut his types in Parma, in
   Emilia-Romagna, and Emilia-Romagna is the region Amici's About page names as
   the source of its cooking. So the display face is not a generic "elegant
   serif" but the letterform of the place the food comes from. The blueprint
   asks for a high-contrast serif set in letterspaced caps for everything
   display; a Didone is exactly that, and Bodoni Moda ships real 600/700 faces,
   so no heading has to lean on a synthesized bold. It is used only on white or
   paper grounds here: a Didone's hairlines dissolve on a dark ground, which no
   automated check can see.
   Text: ARCHIVO. A clean grotesque with a tall x-height, which is what small
   letterspaced caps (address, hours, nav, eyebrows) need to stay readable at
   11-13px. It carries the body copy without competing with the Bodoni.
   Both weights used in this file are requested in the fonts link in index.html.

   COLOUR — one accent, from their own site.
   -------------------------------------------------------------------------
   The live amicirestaurant.ca renders a deep red masthead band (sampled
   #6e0d0d) over a near-white page with cream/gold detail. So: white and a warm
   cream paper carry the surfaces, near-black carries the ink, and ONE accent,
   the wine red, carries the rules, the CTAs and the single accented word in the
   wordmark. Their cream becomes a surface (--paper), never a second accent.
   Nothing here is a logo colour used as a canvas.
   ========================================================================= */

:root {
  --ink: #191310;
  --ink-2: #4a3d35;
  --ink-3: #6f605a;
  --accent: #7a1113;
  --accent-deep: #58090b;
  --paper: #faf4e9;
  --paper-2: #f3e9d7;
  --line: #e3d8c6;
  --line-soft: #efe6d6;
  --white: #ffffff;

  --wrap: 1180px;
  --sans: "Archivo", "Segoe UI", system-ui, -apple-system, sans-serif;
  --serif: "Bodoni Moda", "Times New Roman", Georgia, serif;

  /* Non-sticky masthead (this blueprint's header does not travel), so anchors
     need only breathing room, not nav clearance. Measured: no fixed chrome. */
  --anchor-gap: 28px;
}

*, *::before, *::after { box-sizing: border-box; }
[hidden] { display: none !important; }

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

body {
  margin: 0;
  background: var(--white);
  color: var(--ink-2);
  font-family: var(--sans);
  font-size: 16px;
  line-height: 1.62;
  overflow-x: hidden;
}

/* `height: auto` is NOT decoration. The HTML width/height attributes map to CSS
   presentational hints, so an <img height="1200"> keeps a literal 1200px height
   the moment CSS sets only its width, and `aspect-ratio` cannot override a
   height that is already specified. The first render of this page stretched
   every dish tile to 1200px tall for exactly that reason. */
img { max-width: 100%; height: auto; }
picture { display: block; }

a { color: var(--accent); }
a:focus-visible, button:focus-visible, input:focus-visible,
select:focus-visible, textarea:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 3px;
}

.wrap { width: min(100% - 2.5rem, var(--wrap)); margin-inline: auto; }

.skip {
  position: absolute; left: -9999px; top: 0;
  background: var(--ink); color: #fff; padding: .7rem 1rem; z-index: 50;
}
.skip:focus { left: 0; }

section[id], [id="top"] { scroll-margin-top: var(--anchor-gap); }

/* ---------- icons: ONE symbol per meaning, referenced with <use> ---------- */
.icon-sprite { position: absolute; width: 0; height: 0; overflow: hidden; }
.ico {
  flex: 0 0 auto;
  fill: none; stroke: currentColor; stroke-width: 2;
  stroke-linecap: round; stroke-linejoin: round;
}

/* ---------- headings ---------- */
h1, h2, h3 { font-family: var(--serif); color: var(--ink); margin: 0; }
h2 {
  font-weight: 600;
  font-size: clamp(1.95rem, 1.3rem + 2.6vw, 3.1rem);
  line-height: 1.08;
  letter-spacing: .005em;
}
h3 { font-weight: 600; }

.eyebrow {
  margin: 0 0 .85rem;
  font-family: var(--sans);
  font-size: .6875rem;
  font-weight: 600;
  letter-spacing: .22em;
  text-transform: uppercase;
  color: var(--accent);
}
.rule {
  display: block;
  width: 72px; height: 2px;
  background: var(--accent);
  margin: 1.15rem 0 1.6rem;
}
.rule--centre { margin-inline: auto; }

.lede {
  font-size: clamp(1.02rem, .97rem + .28vw, 1.15rem);
  color: var(--ink-2);
  max-width: 46ch;
}

/* ---------- buttons ---------- */
.btn {
  display: inline-flex; align-items: center; gap: .55rem;
  padding: .78rem 1.25rem;
  font-family: var(--sans);
  font-size: .8125rem;
  font-weight: 600;
  letter-spacing: .1em;
  text-transform: uppercase;
  text-decoration: none;
  white-space: nowrap;
  border: 1px solid transparent;
  border-radius: 2px;
  cursor: pointer;
  transition: background-color .18s ease, color .18s ease, border-color .18s ease;
}
.btn span { white-space: nowrap; }
.btn-primary { background: var(--accent); color: #fff; }
.btn-primary:hover { background: var(--accent-deep); }
.btn-ghost {
  background: transparent;
  color: var(--accent);
  border-color: var(--accent);
}
.btn-ghost .ico { stroke: var(--accent); }
.btn-ghost:hover { background: var(--accent); color: #fff; }
.btn-ghost:hover .ico { stroke: #fff; }

/* =========================================================================
   MASTHEAD — centred stacked wordmark over one thin uppercase nav row,
   the blueprint's header, plus the booking + call controls the blueprint's
   own "booking is buried" defect note tells us to promote.
   ========================================================================= */
.masthead {
  background: var(--white);
  border-bottom: 1px solid var(--line-soft);
  padding: 1.5rem 0 1.1rem;
  text-align: center;
}
.wordmark {
  font-family: var(--serif);
  font-weight: 700;
  line-height: .96;
  letter-spacing: .02em;
  text-transform: uppercase;
  font-size: clamp(2.1rem, 1.35rem + 3vw, 3.15rem);
  margin: 0;
}
.wordmark .h1-accent { color: var(--accent); display: block; }
.wordmark-sub {
  display: block;
  font-family: var(--sans);
  font-weight: 600;
  font-size: clamp(.6875rem, .62rem + .3vw, .8125rem);
  letter-spacing: .42em;
  color: var(--ink);
  margin-top: .55rem;
  padding-left: .42em; /* optical: absorbs the trailing letterspace */
}
.tagline {
  margin: .85rem 0 0;
  font-family: var(--serif);
  font-style: italic;
  font-size: clamp(.95rem, .9rem + .25vw, 1.08rem);
  color: var(--ink-3);
}

.nav { margin-top: 1.3rem; }
.nav-links {
  list-style: none;
  display: flex; flex-wrap: wrap; justify-content: center;
  gap: .5rem 1.65rem;
  margin: 0 0 1.05rem; padding: 0;
}
.nav-links a {
  font-size: .6875rem;
  font-weight: 600;
  letter-spacing: .2em;
  text-transform: uppercase;
  text-decoration: none;
  color: var(--ink);
  white-space: nowrap;
  padding-bottom: 2px;
  border-bottom: 1px solid transparent;
}
.nav-links a:hover { border-bottom-color: var(--accent); color: var(--accent); }

.nav-actions {
  display: flex; flex-wrap: wrap; justify-content: center; gap: .6rem;
}
.nav-actions .btn { padding: .68rem 1.05rem; font-size: .75rem; letter-spacing: .09em; }

@media (min-width: 900px) {
  .masthead { padding: 2.1rem 0 1.4rem; }
  .nav-actions .btn { padding: .72rem 1.15rem; }
}

/* =========================================================================
   HERO — one full-bleed real photograph, edge to edge, no text on it.
   The dish is the whole argument (blueprint principle 1). The band is the
   photo and nothing else, so nothing empty can open under it.
   ========================================================================= */
.hero { display: block; background: var(--ink); }
.hero picture, .hero img { display: block; width: 100%; }
.hero img {
  height: clamp(300px, 50vh, 540px);
  object-fit: cover;
  object-position: center 46%;
}
@media (min-width: 900px) {
  .hero img { height: clamp(460px, 68vh, 700px); object-position: center 48%; }
}

/* =========================================================================
   RESERVE — the conversion the business actually runs on. Amici publishes one
   booking channel, a phone line ("For Reservations: 519-624-8984"), so the form
   collects what a host needs and the call control sits beside it. No second
   step is invented: a table booking has no wizard in it.
   ========================================================================= */
.reserve { background: var(--paper); padding: clamp(3rem, 6vw, 5rem) 0; }
.reserve-grid { display: grid; gap: clamp(2rem, 4vw, 3.25rem); align-items: stretch; }
@media (min-width: 980px) {
  .reserve-grid { grid-template-columns: minmax(0, 1.06fr) minmax(0, .94fr); }
}
.reserve-copy { min-width: 0; }
.reserve-photo { margin: 0; min-width: 0; display: flex; flex-direction: column; }
.reserve-photo picture { flex: 1 1 auto; }
.reserve-photo img {
  display: block; width: 100%; height: 100%;
  min-height: 280px;
  object-fit: cover; object-position: center 46%;
}
.photo-cap {
  margin: .7rem 0 0;
  font-size: .75rem;
  letter-spacing: .04em;
  color: var(--ink-3);
}

.form { margin-top: 1.9rem; }
.field { margin-bottom: 1rem; min-width: 0; }
.field-row { display: grid; gap: 1rem; }
@media (min-width: 620px) { .field-row { grid-template-columns: 1fr 1fr; } }
.field label {
  display: block;
  font-size: .6875rem; font-weight: 600;
  letter-spacing: .16em; text-transform: uppercase;
  color: var(--ink); margin-bottom: .4rem;
}
.field input, .field select, .field textarea {
  width: 100%;
  font-family: var(--sans); font-size: .97rem;
  color: var(--ink);
  background: var(--white);
  border: 1px solid var(--line);
  border-radius: 2px;
  padding: .72rem .8rem;
}
/* Light ground here, but the options are pinned to the page's own surfaces so a
   browser popup can never render the page's ink on its own default. */
.field select option { background: var(--white); color: var(--ink); }
.field textarea { min-height: 104px; resize: vertical; }
.field input::placeholder, .field textarea::placeholder { color: #9a8c84; }
.err {
  display: block; margin-top: .35rem;
  font-size: .78rem; color: var(--accent-deep); font-weight: 600;
}
.form-note { margin: .1rem 0 1.15rem; font-size: .82rem; color: var(--ink-3); }

.form-actions { display: flex; flex-wrap: wrap; gap: .7rem; align-items: center; }

.done {
  border: 1px solid var(--accent);
  border-left-width: 4px;
  background: var(--white);
  padding: clamp(1.15rem, 2.4vw, 1.6rem);
  margin-top: 1.9rem;
}
.done h3 { font-size: 1.4rem; margin-bottom: .6rem; }
.done p { margin: 0 0 .7rem; }
.done p:last-child { margin-bottom: 0; }

.aside-actions {
  display: flex; flex-wrap: wrap; gap: .7rem;
  margin-top: 1.5rem; padding-top: 1.35rem;
  border-top: 1px solid var(--line);
}

/* =========================================================================
   MENU — the blueprint's one permitted addition: a compact taste of the
   kitchen. Photographs first, then a short excerpt of the real card.
   ========================================================================= */
.menu { padding: clamp(3.2rem, 6vw, 5.2rem) 0; }
.dish-strip {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: clamp(.75rem, 1.6vw, 1.15rem);
  margin: 2rem 0 clamp(2.4rem, 4vw, 3.4rem);
}
@media (min-width: 900px) { .dish-strip { grid-template-columns: repeat(4, minmax(0, 1fr)); } }
.dish { margin: 0; min-width: 0; }
.dish img {
  display: block; width: 100%; height: auto;
  aspect-ratio: 4 / 5;
  object-fit: cover;
}
.dish figcaption {
  /* Reserved height so every caption starts at the same y whatever its length. */
  min-height: 3.1em;
  margin-top: .7rem;
  font-size: .8125rem;
  line-height: 1.5;
  color: var(--ink-3);
  letter-spacing: .02em;
}

.card-cols { display: grid; gap: clamp(1.8rem, 3.4vw, 2.8rem); }
@media (min-width: 860px) { .card-cols { grid-template-columns: 1fr 1fr; } }
.card-col { min-width: 0; }
.card-col h3 {
  font-size: .8125rem;
  font-family: var(--sans);
  font-weight: 600;
  letter-spacing: .2em;
  text-transform: uppercase;
  color: var(--accent);
  margin-bottom: 1.05rem;
  padding-bottom: .55rem;
  border-bottom: 1px solid var(--line);
}
.item { margin-bottom: 1.35rem; }
.item-head {
  display: flex; align-items: baseline; justify-content: space-between; gap: 1rem;
}
.item-name {
  font-family: var(--serif); font-weight: 600;
  font-size: 1.075rem; color: var(--ink); min-width: 0;
}
.item-price {
  font-size: .8125rem; font-weight: 600; letter-spacing: .06em;
  color: var(--ink); white-space: nowrap;
}
.item-desc { margin: .3rem 0 0; font-size: .9rem; color: var(--ink-3); }
.menu-note {
  margin: clamp(2rem, 3.4vw, 2.8rem) 0 0;
  padding-top: 1.4rem;
  border-top: 1px solid var(--line);
  font-size: .95rem;
  color: var(--ink-2);
  max-width: 68ch;
}
.menu-actions { display: flex; flex-wrap: wrap; gap: .7rem; margin-top: 1.6rem; }

/* =========================================================================
   STORY — their own room, their own words.
   ========================================================================= */
.story { background: var(--paper); padding: clamp(3.2rem, 6vw, 5.2rem) 0; }
.story-grid { display: grid; gap: clamp(2rem, 4vw, 3.25rem); align-items: stretch; }
@media (min-width: 980px) {
  .story-grid { grid-template-columns: minmax(0, 1.02fr) minmax(0, .98fr); }
}
.story-photo { margin: 0; min-width: 0; display: flex; flex-direction: column; }
.story-photo picture { flex: 1 1 auto; }
.story-photo img {
  display: block; width: 100%; height: 100%;
  min-height: 260px;
  object-fit: cover; object-position: center 58%;
}
.story-copy { min-width: 0; }
.story-copy p { max-width: 52ch; }
.facts { list-style: none; margin: 1.6rem 0 1.8rem; padding: 0; }
.facts li {
  position: relative;
  padding-left: 1.5rem;
  margin-bottom: .65rem;
  font-size: .95rem;
  color: var(--ink-2);
}
.facts li::before {
  content: "";
  position: absolute; left: 0; top: .62em;
  box-sizing: content-box;
  width: 0; height: 0;
  border-top: 4px solid transparent;
  border-bottom: 4px solid transparent;
  border-left: 6.5px solid var(--accent);
}

/* =========================================================================
   GUESTS — stars inside the card, the review's own rating, its own date.
   ========================================================================= */
.guests { padding: clamp(3.2rem, 6vw, 5.2rem) 0; }
.guests-head { text-align: center; margin-bottom: clamp(2rem, 3.6vw, 2.9rem); }
.stars { display: inline-flex; gap: .18rem; }
.stars svg { width: 17px; height: 17px; fill: var(--accent); }
.guests-head .stars svg { width: 21px; height: 21px; }
.rating-line {
  margin: .6rem 0 .1rem;
  font-size: .75rem; font-weight: 600;
  letter-spacing: .18em; text-transform: uppercase;
  color: var(--ink-3);
}
.guests-head h2 { margin-top: .5rem; }

.review-cards {
  list-style: none; margin: 0; padding: 0;
  display: grid; gap: clamp(1rem, 2vw, 1.5rem);
}
@media (min-width: 720px) { .review-cards { grid-template-columns: 1fr 1fr; } }
@media (min-width: 1120px) { .review-cards { grid-template-columns: repeat(4, minmax(0, 1fr)); } }
.review {
  min-width: 0;
  background: var(--paper);
  border-top: 3px solid var(--accent);
  padding: clamp(1.2rem, 2.2vw, 1.55rem);
  display: flex; flex-direction: column;
}
.review-quote {
  margin: 0 0 1.15rem;
  font-size: .95rem;
  line-height: 1.65;
  color: var(--ink-2);
  flex: 1 1 auto;
}
.review .stars { margin-bottom: .6rem; }
.review-name {
  font-family: var(--serif); font-weight: 600;
  font-size: 1.02rem; color: var(--ink);
}
.review-date {
  margin: .2rem 0 0;
  font-size: .55rem;
  letter-spacing: .1em;
  color: var(--ink-3);
}

/* =========================================================================
   VISIT — the blueprint's own signature block: place name over an accent
   rule, address and phone in letterspaced caps, then the day-part as display
   typography rather than a footer table. Amici runs ONE service, so there is
   one day-part here, not four. Nothing invented.
   ========================================================================= */
.visit { background: var(--paper); padding: clamp(3.2rem, 6vw, 5.2rem) 0; }
.visit-grid { display: grid; gap: clamp(2rem, 4vw, 3.4rem); align-items: stretch; }
@media (min-width: 980px) {
  .visit-grid { grid-template-columns: minmax(0, 1.05fr) minmax(0, .95fr); }
}
.visit-main { min-width: 0; }
.place {
  font-weight: 600;
  font-size: clamp(2.3rem, 1.4rem + 3.6vw, 3.6rem);
  letter-spacing: .09em;
  text-transform: uppercase;
  line-height: 1;
}
.caps-line {
  margin: 0 0 .5rem;
  font-size: .78rem;
  font-weight: 500;
  letter-spacing: .16em;
  text-transform: uppercase;
  color: var(--ink-2);
  display: flex; align-items: flex-start; gap: .6rem;
}
.caps-line .line-ico { display: inline-flex; align-items: center; height: 1.5em; color: var(--accent); }
.caps-line .ico { width: 15px; height: 15px; }
.caps-line a { color: var(--ink); text-decoration: none; border-bottom: 1px solid var(--accent); }
.caps-line a:hover { color: var(--accent); }

.daypart {
  margin: clamp(1.9rem, 3.2vw, 2.6rem) 0 1.1rem;
  font-size: clamp(1.35rem, 1.1rem + 1.1vw, 1.7rem);
  font-weight: 600;
  letter-spacing: .16em;
  text-transform: uppercase;
}
.daypart-rule { display: block; width: 46px; height: 2px; background: var(--accent); margin: .75rem 0 1.4rem; }

.hours-grid {
  display: grid;
  grid-template-columns: max-content max-content;
  column-gap: clamp(1.1rem, 3vw, 2.6rem);
  row-gap: .58rem;
}
.hours-row { display: contents; }
.hours-day {
  position: relative;
  padding-left: 1.05rem;
  font-family: var(--serif);
  font-size: 1.02rem;
  color: var(--ink);
  letter-spacing: .05em;
}
.hours-time {
  text-align: left;
  white-space: nowrap;
  font-size: .84rem;
  letter-spacing: .1em;
  text-transform: uppercase;
  color: var(--ink-2);
  align-self: center;
}
.hours-day::before {
  content: ""; position: absolute; left: 0; top: calc(0.5em + 2px);
  box-sizing: content-box;
  width: 0; height: 0;
  border-top: 4.5px solid transparent;
  border-bottom: 4.5px solid transparent;
  border-left: 7.5px solid transparent;
}
/* Two tones far apart in HUE as well as value, on a LIGHT band, so they are
   saturated mid-tones rather than tints. Both measured against --paper:
   #1f6b33 on #faf4e9 = 5.5:1, #7a1113 on #faf4e9 = 9.8:1, floor 3:1. */
.hours-row[data-today="true"] .hours-day,
.hours-row[data-today="true"] .hours-time { font-weight: 700; color: var(--ink); }
.hours-row[data-today="true"][data-state="open"] .hours-day::before { border-left-color: #1f6b33; }
.hours-row[data-today="true"][data-state="closed"] .hours-day::before { border-left-color: var(--accent); }
.hours-state {
  margin: 1.15rem 0 0;
  font-size: .72rem; font-weight: 700;
  letter-spacing: .18em; text-transform: uppercase;
}
.hours-state[data-state="open"] { color: #1a5c2c; }
.hours-state[data-state="closed"] { color: var(--accent-deep); }

.visit-actions { display: flex; flex-wrap: wrap; gap: .7rem; margin-top: 1.9rem; }
.visit-photo { margin: 0; min-width: 0; display: flex; flex-direction: column; }
.visit-photo picture { flex: 1 1 auto; }
.visit-photo img {
  display: block; width: 100%; height: 100%;
  min-height: 300px;
  object-fit: cover; object-position: center 48%;
}

/* =========================================================================
   FOOTER — utility only. The nav and the reserve band own the booking CTA,
   so it is not repeated here.
   ========================================================================= */
.site-footer {
  background: var(--paper-2);
  border-top: 3px solid var(--accent);
  padding: clamp(2.6rem, 4.5vw, 3.6rem) 0 2.2rem;
  text-align: center;
}
.foot-mark {
  font-family: var(--serif); font-weight: 700;
  font-size: 1.35rem; letter-spacing: .16em; text-transform: uppercase;
  color: var(--ink); margin: 0 0 .9rem;
}
.foot-addr {
  margin: 0 0 1.4rem;
  font-size: .78rem; letter-spacing: .13em; text-transform: uppercase;
  color: var(--ink-2);
}
.foot-links {
  list-style: none; margin: 0 0 1.7rem; padding: 0;
  display: flex; flex-wrap: wrap; justify-content: center; gap: .6rem 1.4rem;
}
.foot-links a {
  display: inline-flex; align-items: center; gap: .45rem;
  font-size: .72rem; font-weight: 600;
  letter-spacing: .14em; text-transform: uppercase;
  text-decoration: none; color: var(--ink);
}
.foot-links a:hover { color: var(--accent); }
.foot-links .ico { width: 14px; height: 14px; stroke: var(--accent); }
.colophon, .footer-disclosure {
  margin: 0 auto .55rem;
  max-width: 62ch;
  font-size: .72rem;
  line-height: 1.65;
  color: var(--ink-3);
}
.colophon a { color: var(--ink-3); }
.footer-disclosure { margin-bottom: 0; }

/* ---------- the PXLNorth preview badge ---------- */
.preview-badge {
  position: fixed; left: 12px; bottom: 12px; z-index: 60;
  display: flex; align-items: center; gap: .55rem;
  background: rgba(25, 19, 16, .93);
  border-radius: 3px;
  padding: .42rem .55rem .42rem .7rem;
  font-size: .68rem;
  box-shadow: 0 6px 20px rgba(0, 0, 0, .22);
}
.preview-badge a { text-decoration: none; }
.preview-badge-info { color: rgba(255, 255, 255, .9); }
.preview-badge-cta {
  background: var(--accent); color: #fff;
  padding: .3rem .55rem; border-radius: 2px; font-weight: 600;
}
.preview-badge--inflow { box-shadow: none; }

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