/* Гид по Нижнему Новгороду — вёрстка по макету Figma «ГИД ПО НН v1» (1080 px).
   Мобильный приоритет: до 720 px все отступы ужимаются пропорционально,
   типографика идёт по своей кривой, чтобы текст оставался читаемым. */

:root {
  --ink: #3d4351;
  --ink-50: rgba(61, 67, 81, 0.5);
  --ink-80: rgba(61, 67, 81, 0.8);
  --accent: #ef3124;
  --bg: #f8faff;
  --card: #fff;

  /* Единица макета. На широких экранах 1 px макета = 1 px экрана. */
  --u: min(1px, 100vw / 720);
  --pad: calc(52 * var(--u));
  --pad-text: var(--pad);
  --gap: calc(24 * var(--u));
  --radius: calc(40 * var(--u));
  --rhythm: calc(60 * var(--u));

  --fs-h1: clamp(38px, 9.63vw, 104px);
  --fs-h2: clamp(31px, 7.41vw, 80px);
  --fs-lead: clamp(17px, 2.96vw, 32px);
  --fs-h3: clamp(20px, 3.7vw, 40px);
  --fs-body: clamp(16px, 2.59vw, 28px);
  --fs-meta: clamp(14px, 2.59vw, 28px);
  --fs-pill: clamp(13px, 3.12vw, 34px);
  --lh-body: 1.45;
}

@media (min-width: 760px) {
  :root {
    --pad-text: calc(100 * var(--u));
    --lh-body: 1.29;
  }
}

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

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

body {
  margin: 0;
  background: var(--bg);
  color: var(--ink);
  font-family: 'Styrene A LC', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif;
  font-weight: 400;
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}

img { display: block; max-width: 100%; height: auto; }

h1, h2, h3, p, ul { margin: 0; }
ul { padding: 0; list-style: none; }

.page {
  max-width: 1080px;
  margin-inline: auto;
  padding-bottom: calc(131 * var(--u));
  overflow-x: clip;                 /* вылеты картинок за край режутся так же, как фреймом в Figma */
}

.page > * + * { margin-top: calc(88 * var(--u)); }
.hero + .panel { margin-top: calc(66 * var(--u)); }

/* ------------------------------------------------------------------ шапка */

.hero { padding-top: calc(62 * var(--u)); }

.hero__title {
  padding-inline: calc(41 * var(--u));
  max-width: calc(908 * var(--u));   /* ширина текстового блока из макета */
  font-size: var(--fs-h1);
  font-weight: 500;
  line-height: 0.94;
  letter-spacing: -0.04em;
}

.pill {
  display: inline-flex;
  align-items: center;
  gap: 0.5em;
  margin-top: calc(56 * var(--u));
  margin-inline: var(--pad);
  padding: 0.24em 0.66em 0.24em 0.24em;
  border-radius: 999px;
  background: var(--card);
  color: var(--ink-80);
  font-size: var(--fs-pill);
  line-height: 1.2;
  letter-spacing: -0.01em;
}

.pill .icon { width: 2.03em; height: 2.03em; flex: none; }

.hero__img {
  width: calc(100% + 58 * var(--u));
  max-width: none;
  margin-top: calc(56 * var(--u));
  margin-left: calc(-29 * var(--u));
}

.hero__intro {
  margin-top: calc(56 * var(--u));
  padding-inline: var(--pad-text);
  font-size: var(--fs-lead);
  line-height: 1.19;
  letter-spacing: -0.02em;
}

.hero__intro p + p { margin-top: 1.2em; }
.hero__intro { text-wrap: pretty; }

/* ----------------------------------------------------------------- блоки */

.panel {
  padding-block: calc(64 * var(--u));
  border-radius: var(--radius);
  background: var(--card);
}

.panel > * + * { margin-top: calc(64 * var(--u)); }
.section > * + * { margin-top: var(--rhythm); }

.section-title {
  padding-inline: var(--pad);
  font-size: var(--fs-h2);
  font-weight: 500;
  line-height: 0.94;
  letter-spacing: -0.05em;
  text-align: center;
  text-wrap: balance;
}

.section-title em { font-style: normal; color: var(--accent); }
.section-title--accent { color: var(--accent); }

/* --------------------------------------------------------------- картинки */

.wide {
  width: calc(100% - 2 * var(--pad));
  margin-inline: auto;
}

.full { width: 100%; }

.duo {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: var(--gap);
  padding-inline: var(--pad);
}

/* Пара с вылетом за оба края — как в макете (−82 слева, +135 справа). */
.duo--bleed {
  grid-template-columns: 428fr 845fr;
  width: calc(100% + 217 * var(--u));
  margin-left: calc(-82 * var(--u));
  padding-inline: 0;
}

/* ------------------------------------------------------------ точки на карте */

.place__name {
  font-size: var(--fs-h3);
  font-weight: 500;
  line-height: 1.1;
  letter-spacing: -0.04em;
  text-wrap: balance;
}

.place__meta {
  display: flex;
  flex-direction: column;
  margin-top: calc(18 * var(--u));
  color: var(--ink-50);
  font-size: var(--fs-meta);
  line-height: 1.15;
  letter-spacing: -0.04em;
}

.place__meta a {
  color: inherit;
  text-decoration: underline;
  text-underline-offset: 0.18em;
  text-decoration-thickness: from-font;
}

.place__meta a:hover { color: var(--accent); }

.place__text {
  margin-top: calc(24 * var(--u));
  font-size: var(--fs-body);
  line-height: var(--lh-body);
  text-wrap: pretty;
}

.place__text p + p { margin-top: 1em; }

.place--inset { padding-inline: var(--pad-text); }

.spots {
  display: flex;
  flex-direction: column;
  gap: calc(64 * var(--u));
  padding-inline: var(--pad-text);
}

.spot { display: flex; align-items: flex-start; gap: calc(32 * var(--u)); }

.spot .icon {
  width: clamp(28px, 4.44vw, 48px);
  height: clamp(28px, 4.44vw, 48px);
  flex: none;
}

.spot__body { flex: 1; min-width: 0; }

/* -------------------------------------------------------- гастро-маршруты */

.cards {
  columns: 1;
  column-gap: var(--gap);
  padding-inline: var(--pad);
}

.card {
  break-inside: avoid;
  margin-bottom: calc(48 * var(--u));
}

.card__body { margin-top: calc(48 * var(--u)); }

/* Две колонки только там, где строке хватает длины: на планшете в портрете
   узкая колонка + неразрывные пробелы из макета дают рваный набор. */
@media (min-width: 900px) {
  .cards { columns: 2; }
}

/* ------------------------------------------------------- локальные бренды */

.shops {
  display: flex;
  flex-direction: column;
  gap: calc(64 * var(--u));
  padding-inline: var(--pad);
}

.shop {
  display: grid;
  grid-template-columns: 1fr;
  gap: calc(32 * var(--u));
  align-items: start;
}

.shop__media { order: -1; }        /* на мобиле фото всегда сверху */

@media (min-width: 900px) {
  .shop {
    grid-template-columns: 1fr 1fr;
    gap: var(--gap);
  }
  .shop__media { order: 0; }
}
