/* ==========================================================================
   Birthday Invitation — Maria Reneva · 19.12.2026
   Размеры первой части заданы в единицах макета: 1u = 1pt артборда шириной 700
   ========================================================================== */

/* ---------- Шрифты (локально) ---------- */
@font-face {
  font-family: "Cormorant Infant";
  src: url("../fonts/CormorantInfant-VF.woff?v=2") format("woff");
  font-weight: 300 700;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: "Cormorant Infant";
  src: url("../fonts/CormorantInfant-Italic-VF.woff?v=2") format("woff");
  font-weight: 300 600;
  font-style: italic;
  font-display: swap;
}
@font-face {
  font-family: "Cormorant Infant";
  src: url("../fonts/CormorantInfant-BoldItalic.otf?v=2") format("opentype");
  font-weight: 700;
  font-style: italic;
  font-display: swap;
}

/* ---------- Токены ---------- */
:root {
  --u: calc(min(100vw, 700px) / 700);

  --wine: #5a0000;
  --wine-deep: #430000;
  --ink: #580000;            /* бордовый каллиграфии на шёлке */
  --white: #ffffff;
  --milk: #f4eee6;
  --milk-dim: rgba(244, 238, 230, 0.78);
  --silver: #c8c8cb;
  --line: rgba(255, 255, 255, 0.85);
  --line-soft: rgba(255, 255, 255, 0.32);

  --serif: "Cormorant Infant", "Cormorant Garamond", "Cormorant", "Times New Roman", serif;

  --gutter: max(28px, calc(48 * var(--u)));
  --ease: cubic-bezier(0.22, 0.61, 0.36, 1);

  --fs-caps: max(13px, calc(23 * var(--u)));
  --fs-body: max(17px, calc(27 * var(--u)));
  --fs-title: max(31px, calc(60 * var(--u)));
}

/* ---------- База ---------- */
*,
*::before,
*::after { box-sizing: border-box; }

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

body {
  margin: 0;
  overflow-x: hidden;
  background: var(--wine) url("../img/burgundy-tile.jpg") center top / 100% auto repeat-y;
  color: var(--white);
  font-family: var(--serif);
  font-weight: 400;
  font-variant-numeric: lining-nums;
  line-height: 1.35;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-rendering: optimizeLegibility;
}

h1, h2, h3, p, ol, ul, figure { margin: 0; padding: 0; }
ol, ul { list-style: none; }
img { display: block; max-width: 100%; height: auto; }
a { color: inherit; }
.nowrap { white-space: nowrap; }

:focus-visible {
  outline: 1px solid currentColor;
  outline-offset: 4px;
}

/* ---------- Поверхности ---------- */
.silk {
  position: relative;
  isolation: isolate;
  overflow: hidden;
  background: #b9b9bb url("../img/silk.jpg") center / cover no-repeat;
  color: var(--ink);
}
.silk--soft::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: -1;
  background: rgba(236, 236, 238, 0.42);
}
/* мягкий блик по шёлку */
.silk::after {
  content: "";
  position: absolute;
  inset: -20% -60%;
  z-index: 0;
  pointer-events: none;
  background: linear-gradient(105deg,
    transparent 38%,
    rgba(255, 255, 255, 0.16) 47%,
    rgba(255, 255, 255, 0.26) 50%,
    rgba(255, 255, 255, 0.16) 53%,
    transparent 62%);
  transform: translateX(-60%);
  animation: sheen 11s var(--ease) 1.2s infinite;
  mix-blend-mode: soft-light;
}
@keyframes sheen {
  0%   { transform: translateX(-60%); }
  55%  { transform: translateX(60%); }
  100% { transform: translateX(60%); }
}

.wine {
  position: relative;
  isolation: isolate;
  color: var(--white);
}
.wine--monogram {
  background: var(--wine) url("../img/burgundy-monogram.jpg") center top / 100% auto no-repeat;
}
@media (min-width: 701px) {
  .wine--monogram { background-size: max(100%, 700px) auto; }
}

/* ---------- Общие элементы ---------- */
.rule {
  display: block;
  position: relative;
  height: 1px;
  background: var(--line);
  width: max(110px, calc(50% - 127 * var(--u)));
}
.rule::after {
  content: "";
  position: absolute;
  top: 50%;
  width: 5px;
  height: 5px;
  border-radius: 50%;
  background: var(--white);
  transform: translateY(-50%);
}
.rule--left { margin-right: auto; }
.rule--left::after { right: -2px; }
.rule--right { margin-left: auto; width: max(110px, calc(50% - 121 * var(--u))); }
.rule--right::after { left: -2px; }

.perf {
  display: block;
  flex: none;
  --dot: rgba(255, 255, 255, 0.42);
}
.perf--h {
  height: 2px;
  width: 100%;
  background: radial-gradient(circle, var(--dot) 0.85px, transparent 1.15px) left center / 6px 2px repeat-x;
}
.perf--v {
  width: 2px;
  background: radial-gradient(circle, var(--dot) 0.85px, transparent 1.15px) center top / 2px 6px repeat-y;
}

.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: max(46px, calc(52 * var(--u)));
  min-width: max(150px, calc(214 * var(--u)));
  padding: 0.55em 1.6em 0.5em;
  border: 1px solid var(--line);
  background: transparent;
  color: var(--white);
  font: 400 var(--fs-caps) / 1.15 var(--serif);
  letter-spacing: 0.16em;
  text-transform: uppercase;
  text-align: center;
  text-decoration: none;
  cursor: pointer;
  position: relative;
  overflow: hidden;
  transition: color 0.6s var(--ease), border-color 0.6s var(--ease), letter-spacing 0.8s var(--ease);
  -webkit-tap-highlight-color: transparent;
}
.btn::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: -1;
  background: var(--milk);
  transform: scaleY(0);
  transform-origin: 50% 100%;
  transition: transform 0.6s var(--ease);
}
.btn { isolation: isolate; }
@media (hover: hover) {
  .btn:hover { color: var(--wine); letter-spacing: 0.2em; }
  .btn:hover::before { transform: scaleY(1); }
}
.btn:active::before { transform: scaleY(1); }
.btn:active { color: var(--wine); }

.btn--ink { border-color: rgba(88, 0, 0, 0.75); color: var(--ink); }
.btn--ink::before { background: var(--ink); }
@media (hover: hover) {
  .btn--ink:hover { color: var(--milk); }
}
.btn--ink:active { color: var(--milk); }

.section-title {
  font-weight: 400;
  font-size: var(--fs-title);
  line-height: 1.04;
  letter-spacing: 0.01em;
  text-transform: uppercase;
  text-align: center;
}
.section-title--ink { color: var(--ink); }
.section-title--wide { letter-spacing: 0.22em; padding-left: 0.22em; }

.kicker {
  font-style: italic;
  font-weight: 400;
  font-size: max(19px, calc(32 * var(--u)));
  line-height: 1.2;
  text-align: center;
  color: var(--milk-dim);
  margin-bottom: 0.45em;
}
.kicker--below { margin: 0.7em 0 0; }

.script {
  font-style: italic;
  font-weight: 700;
  font-size: max(36px, calc(66 * var(--u)));
  line-height: 1;
  text-align: center;
}

.caps-small {
  display: block;
  font-size: max(11.5px, calc(18 * var(--u)));
  font-weight: 500;
  letter-spacing: 0.2em;
  text-transform: uppercase;
}

.label-italic {
  font-style: italic;
  font-weight: 500;
  font-size: max(21px, calc(34 * var(--u)));
  line-height: 1.1;
  margin-bottom: 0.22em;
}

.body-text {
  max-width: 30em;
  margin-inline: auto;
  padding-inline: var(--gutter);
  font-size: var(--fs-body);
  line-height: 1.34;
  text-align: center;
  color: var(--milk);
}

/* ==========================================================================
   ЧАСТЬ 1 — по макету
   ========================================================================== */
.hero {
  display: flex;
  align-items: center;
  justify-content: center;
  min-height: calc(min(100vw, 700px) * 658 / 700);
}
.hero__art {
  position: relative;
  z-index: 1;
  width: min(100vw, 700px);
  aspect-ratio: 700 / 658;
  padding-top: calc(136.25 / 658 * 100%);
}
.hero__art img { width: 100%; height: auto; }
@media (min-width: 701px) {
  .hero { min-height: clamp(560px, 86svh, 860px); padding-block: 48px 56px; }
  .hero__art {
    width: min(700px, 66svh * 1400 / 840);
    aspect-ratio: auto;
    padding-top: 0;
  }
}

.intro {
  display: flex;
  flex-direction: column;
  align-items: center;
  text-align: center;
  padding: calc(90 * var(--u)) 0 max(64px, calc(104 * var(--u)));
}
.intro__name {
  font-weight: 400;
  font-size: calc(73 * var(--u));
  line-height: 1.1;
  letter-spacing: 0.012em;
  text-transform: uppercase;
  padding-inline: 12px;
}
.intro__date {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: calc(46 * var(--u));
  margin-top: calc(108 * var(--u));
  font-size: calc(78 * var(--u));
  line-height: 1;
  letter-spacing: 0.05em;
}
.intro__date i {
  display: block;
  width: 1px;
  height: calc(50 * var(--u));
  background: var(--white);
}
.intro__invite {
  margin-top: calc(56 * var(--u));
  font-style: italic;
  font-size: max(14.5px, calc(28 * var(--u)));
  line-height: 1.2;
  letter-spacing: 0.08em;
  text-transform: uppercase;
}
.intro .rule--left { margin-top: calc(80 * var(--u)); align-self: flex-start; }
.intro__text {
  margin-top: calc(18 * var(--u));
  font-size: var(--fs-caps);
  line-height: 1.22;
  letter-spacing: 0.075em;
  text-transform: uppercase;
  padding-inline: 14px;
}
.intro .rule--right { margin-top: calc(22 * var(--u)); align-self: flex-end; }
.intro__title {
  padding-inline: 12px;
  overflow-wrap: anywhere;
  margin-top: calc(104 * var(--u));
  font-weight: 400;
  font-size: calc(60 * var(--u));
  line-height: 1.04;
  text-transform: uppercase;
}
.intro__address {
  margin-top: calc(30 * var(--u));
  font-size: var(--fs-caps);
  line-height: 1.22;
  letter-spacing: 0.1em;
  text-transform: uppercase;
}
.intro__btn { margin-top: calc(30 * var(--u)); }

/* ==========================================================================
   ТАЙМИНГ
   ========================================================================== */
.agenda {
  padding: max(12px, calc(20 * var(--u))) 0 max(56px, calc(84 * var(--u)));
}
.agenda__head { margin-bottom: max(34px, calc(60 * var(--u))); }

.board {
  --side: 38%;
  display: grid;
  grid-template-columns: minmax(0, 1fr) 2px var(--side);
  grid-template-areas:
    "top    top    top"
    "list   div    side"
    "bottom bottom bottom"
    "cta    cta    cta";
  max-width: 1040px;
  margin-inline: auto;
}
.board__top { grid-area: top; }
.board__bottom { grid-area: bottom; }
.board__divider { grid-area: div; }

.board__list {
  grid-area: list;
  counter-reset: none;
  padding: max(26px, calc(46 * var(--u))) max(14px, calc(26 * var(--u))) max(26px, calc(40 * var(--u))) var(--gutter);
}
.event {
  display: grid;
  grid-template-columns: 1fr;
  padding-bottom: max(22px, calc(38 * var(--u)));
}
.event:last-child { padding-bottom: 0; }
.event__num {
  font-size: max(12px, calc(19 * var(--u)));
  letter-spacing: 0.14em;
  color: var(--milk-dim);
  margin-bottom: 0.3em;
}
.event__time {
  font-weight: 400;
  font-size: max(36px, calc(66 * var(--u)));
  line-height: 0.98;
  letter-spacing: 0.02em;
}
.event__title {
  margin-top: 0.5em;
  font-weight: 500;
  font-size: max(12.5px, calc(20 * var(--u)));
  line-height: 1.3;
  letter-spacing: 0.15em;
  text-transform: uppercase;
  color: var(--milk);
}

.board__side {
  grid-area: side;
  display: flex;
  flex-direction: column;
}
.board__label {
  padding: max(22px, calc(36 * var(--u))) 6px max(16px, calc(26 * var(--u)));
  font-style: italic;
  font-weight: 700;
  font-size: max(24px, calc(42 * var(--u)));
  line-height: 1;
  text-align: center;
  color: var(--milk);
}
.board__photo {
  margin: max(18px, calc(30 * var(--u))) max(12px, calc(24 * var(--u)));
  padding: 3px;
  border: 1px solid rgba(255, 255, 255, 0.28);
  border-radius: 5px;
  background: rgba(0, 0, 0, 0.18);
  box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.25);
}
.board__photo img {
  width: 100%;
  aspect-ratio: 2 / 3;
  object-fit: cover;
  object-position: 50% 55%;
  border-radius: 3px;
}
.board__stamp {
  flex: 1;
  display: flex;
  align-items: center;
  justify-content: center;
  min-height: 170px;
  padding-block: 16px;
  white-space: nowrap;
  writing-mode: vertical-rl;
  font-style: italic;
  font-size: max(15px, calc(24 * var(--u)));
  letter-spacing: 0.22em;
  color: var(--milk-dim);
}

.board__cta {
  grid-area: cta;
  display: flex;
  justify-content: center;
  padding: max(28px, calc(44 * var(--u))) var(--gutter) 0;
}
.board__cta .btn { min-width: min(100%, 340px); }

/* очень узкие экраны: фото над расписанием */
@media (max-width: 359px) {
  .board {
    grid-template-columns: minmax(0, 1fr);
    grid-template-areas: "side" "top" "list" "bottom" "cta";
  }
  .board__divider { display: none; }
  .board__side { display: grid; grid-template-columns: 1fr 1fr; align-items: center; }
  .board__side .perf, .board__stamp { display: none; }
  .board__label { padding: 0; }
  .board__photo { margin: 0 var(--gutter) 22px 0; }
}

@media (min-width: 760px) {
  .board { --side: 34%; padding-inline: 24px; }
  .board__list { display: grid; grid-template-columns: 1fr 1fr; column-gap: 40px; padding-left: 48px; }
  .event:nth-child(odd):last-child { grid-column: 1 / -1; }
  .event:last-child { padding-top: 6px; }
  .event { padding-bottom: 44px; }
  .event__title { max-width: 18em; }
}
@media (min-width: 760px) {
  .board__stamp {
    flex: 1;
    min-height: 0;
    padding: 22px 8px;
    writing-mode: horizontal-tb;
    align-items: center;
    letter-spacing: 0.18em;
    font-size: max(15px, calc(22 * var(--u)));
  }
  .board__photo { margin-block: 24px; }
  .event { padding-bottom: 36px; }
  .board__list { padding-top: 40px; padding-bottom: 32px; }
}
@media (min-width: 1100px) {
  .board { --side: 30%; }
}

/* ==========================================================================
   ДРЕСС-КОД
   ========================================================================== */
.dress {
  padding: max(16px, calc(24 * var(--u))) max(14px, calc(26 * var(--u))) max(56px, calc(84 * var(--u)));
  text-align: center;
}
/* розовая закруглённая подложка-«капсула» */
.dress__inner {
  --ink: #4a0710;
  --pink: #dfbcbd;
  position: relative;
  z-index: 1;
  max-width: 620px;
  margin-inline: auto;
  padding: 30% max(40px, calc(64 * var(--u))) 27%;
  border-radius: 9999px;
  background: var(--pink);
  color: var(--ink);
  box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.25);
}
@media (min-width: 640px) {
  .dress__inner { padding-top: 22%; padding-bottom: 20%; }
}
@media (min-width: 760px) {
  .dress__inner {
    max-width: 560px;
    border-radius: 50% / 170px;
    padding: 96px 64px 104px;
  }
}
.dress__side {
  position: absolute;
  top: 50%;
  font-size: max(10.5px, calc(16 * var(--u)));
  font-weight: 500;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  white-space: nowrap;
  writing-mode: vertical-rl;
  color: rgba(74, 7, 16, 0.7);
}
.dress__side--l { left: max(12px, calc(22 * var(--u))); transform: translateY(-50%) rotate(180deg); }
.dress__side--r { right: max(12px, calc(22 * var(--u))); transform: translateY(-50%); }
.dress .script { margin-top: 0.12em; color: var(--ink); }
.dress__lead {
  margin: max(22px, calc(38 * var(--u))) auto 0;
  max-width: 27em;
  font-size: var(--fs-body);
  line-height: 1.34;
}
.dress__cols {
  display: grid;
  gap: 20px;
  margin-top: max(30px, calc(50 * var(--u)));
}
.dress__col p {
  font-size: max(16.5px, calc(25 * var(--u)));
  line-height: 1.34;
  max-width: 22em;
  margin-inline: auto;
}
.dress__sep {
  justify-self: center;
  width: 64px;
  height: 1px;
  background: rgba(88, 0, 0, 0.55);
  position: relative;
}
.dress__sep::before,
.dress__sep::after {
  content: "";
  position: absolute;
  top: -2px;
  width: 5px;
  height: 5px;
  border-radius: 50%;
  background: var(--ink);
}
.dress__sep::before { left: -2px; }
.dress__sep::after { right: -2px; }

.palette { margin-top: max(36px, calc(58 * var(--u))); }
.palette { container-type: inline-size; }
@container (max-width: 240px) {
  .palette .palette__list { grid-template-columns: repeat(3, minmax(0, 1fr)); row-gap: 16px; max-width: 230px; }
}
.palette .label-italic { margin-bottom: 16px; }
.palette__list {
  display: grid;
  grid-template-columns: repeat(5, minmax(0, 1fr));
  gap: 0 4px;
  max-width: 520px;
  margin-inline: auto;
}
.palette__list li {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 12px;
  font-style: italic;
  font-size: max(13.5px, calc(26 * var(--u)));
  line-height: 1.15;
}
.swatch {
  display: block;
  width: max(40px, calc(62 * var(--u)));
  aspect-ratio: 1;
  border-radius: 50%;
  outline: 1px solid rgba(88, 0, 0, 0.45);
  outline-offset: 3px;
}
.swatch--black { background: #0e0c0c; }
.swatch--white { background: #ffffff; }
.swatch--milk { background: #efe6d8; }
.swatch--silver { background: linear-gradient(135deg, #8f9095 0%, #e9e9ec 42%, #b2b3b8 58%, #f4f4f6 78%, #9c9da2 100%); }
.swatch--wine { background: #4a0006; }

.dress__note {
  margin: max(36px, calc(58 * var(--u))) auto 0;
  max-width: 28em;
  padding: 16px 0;
  border-block: 1px solid rgba(88, 0, 0, 0.35);
  font-style: italic;
  font-size: max(17px, calc(26 * var(--u)));
  line-height: 1.32;
}
.dress .btn { margin-top: max(34px, calc(56 * var(--u))); }
.dress .btn { font-size: max(12.5px, calc(19 * var(--u))); letter-spacing: 0.14em; padding-inline: 1.3em; }
@media (min-width: 760px) { .palette__list { gap: 0 10px; } }

/* ==========================================================================
   ПОДАРКИ
   ========================================================================== */
.gifts {
  display: flex;
  flex-direction: column;
  align-items: center;
  padding: max(20px, calc(30 * var(--u))) 0 max(64px, calc(96 * var(--u)));
  text-align: center;
}
.gifts__quote {
  max-width: 17em;
  margin-top: max(28px, calc(46 * var(--u)));
  padding-inline: var(--gutter);
  font-style: italic;
  font-size: max(22px, calc(38 * var(--u)));
  line-height: 1.2;
}
.gifts .rule--left { align-self: flex-start; margin: max(40px, calc(64 * var(--u))) 0 max(26px, calc(36 * var(--u))); }
.gifts .body-text + .body-text { margin-top: 0.6em; }
.gifts .rule--right { align-self: flex-end; margin: max(26px, calc(36 * var(--u))) 0 max(40px, calc(60 * var(--u))); }

/* ==========================================================================
   RSVP
   ========================================================================== */
.rsvp {
  padding: max(40px, calc(64 * var(--u))) 0 max(64px, calc(96 * var(--u)));
  text-align: center;
}
.rsvp .section-title { font-size: max(48px, calc(92 * var(--u))); }
.rsvp > .body-text { margin-top: max(30px, calc(50 * var(--u))); }
.rsvp__rules {
  max-width: 30em;
  margin: 26px auto 0;
  padding: 18px var(--gutter) 0;
  position: relative;
  font-style: italic;
  font-size: max(16.5px, calc(25 * var(--u)));
  line-height: 1.32;
  color: var(--milk-dim);
}
.rsvp__rules::before {
  content: "";
  position: absolute;
  top: 0;
  left: 50%;
  width: 40px;
  height: 1px;
  background: var(--line-soft);
  transform: translateX(-50%);
}
.rsvp__rules p + p { margin-top: 0.4em; }

.form {
  max-width: 520px;
  margin: max(40px, calc(64 * var(--u))) auto 0;
  padding-inline: var(--gutter);
  text-align: left;
}
.field {
  margin: 0 0 30px;
  padding: 0;
  border: 0;
  min-width: 0;
}
.field > label:not(.radio),
.field > legend {
  display: block;
  padding: 0;
  margin-bottom: 2px;
  font-size: 18px;
  font-weight: 500;
  letter-spacing: 0.02em;
  line-height: 1.3;
  color: var(--milk-dim);
}
.req { color: var(--milk); }

.field input[type="text"],
.field input[type="tel"] {
  display: block;
  width: 100%;
  padding: 8px 0 9px;
  border: 0;
  border-bottom: 1px solid rgba(255, 255, 255, 0.45);
  border-radius: 0;
  background: transparent;
  color: var(--white);
  font: 400 20px / 1.3 var(--serif);  /* ≥16px: без автозума на iOS */
  letter-spacing: 0.02em;
  caret-color: var(--milk);
  transition: border-color 0.5s var(--ease);
  -webkit-appearance: none;
  appearance: none;
}
.field input::placeholder { color: rgba(255, 255, 255, 0.3); }
.field input:focus { outline: none; border-bottom-color: var(--white); }
.field input:-webkit-autofill {
  -webkit-text-fill-color: var(--white);
  transition: background-color 9999s 0s;
}
.field.is-invalid input { border-bottom-color: #f2b8a8; }
.field__error {
  min-height: 0;
  margin-top: 6px;
  font-style: italic;
  font-size: 16px;
  line-height: 1.3;
  color: #f6c9bc;
}
.field__error:empty { display: none; }

.choice legend { margin-bottom: 12px; }
.radio {
  display: flex;
  align-items: flex-start;
  gap: 14px;
  padding: 7px 0;
  cursor: pointer;
  font-size: 19px;
  line-height: 1.3;
  color: var(--milk);
  -webkit-tap-highlight-color: transparent;
}
.radio input {
  flex: none;
  width: 18px;
  height: 18px;
  margin: 2px 0 0;
  border: 1px solid rgba(255, 255, 255, 0.6);
  border-radius: 50%;
  background: transparent;
  display: grid;
  place-content: center;
  cursor: pointer;
  -webkit-appearance: none;
  appearance: none;
  transition: border-color 0.4s var(--ease);
}
.radio input::before {
  content: "";
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--white);
  transform: scale(0);
  transition: transform 0.4s var(--ease);
}
.radio input:checked { border-color: var(--white); }
.radio input:checked::before { transform: scale(1); }
.radio input:focus-visible { outline: 1px solid var(--white); outline-offset: 3px; }

.form__extra {
  display: grid;
  grid-template-rows: 1fr;
  transition: grid-template-rows 0.7s var(--ease), opacity 0.6s var(--ease);
}
.form__extra > * { min-height: 0; }
.form__extra.is-collapsed { grid-template-rows: 0fr; opacity: 0; }
.form__extra-inner { overflow: hidden; }

.hp {
  position: absolute !important;
  left: -9999px;
  width: 1px;
  height: 1px;
  overflow: hidden;
}

.form__status {
  margin: 4px 0 18px;
  font-style: italic;
  font-size: 18px;
  line-height: 1.4;
  text-align: center;
  color: var(--milk);
}
.form__status:empty { display: none; }
.form__status.is-error { color: #f6c9bc; }

.btn--submit {
  display: flex;
  width: 100%;
  margin-top: 8px;
}
.btn--submit[disabled] { cursor: progress; opacity: 0.7; }
.btn--submit.is-sending .btn__label::after {
  content: "";
  display: inline-block;
  width: 1.2em;
  text-align: left;
  animation: dots 1.4s steps(4) infinite;
}
@keyframes dots {
  0% { content: ""; } 25% { content: "."; } 50% { content: ".."; } 75% { content: "..."; }
}

.form-done {
  display: flex;
  flex-direction: column;
  margin-top: max(44px, calc(70 * var(--u)));
  outline: none;
}
.form-done[hidden] { display: none; }
.form-done__text {
  max-width: 18em;
  margin: 30px auto;
  padding-inline: var(--gutter);
  font-style: italic;
  font-size: max(23px, calc(38 * var(--u)));
  line-height: 1.25;
  animation: rise 1.4s var(--ease) both;
}

/* ==========================================================================
   КОНТАКТЫ — рука с розовой карточкой
   Карточка в изображении hand-card (1519×559): x 7–764, y 8–450
   → left 0.461%, top 1.431%, width 49.836%, height 79.07%
   ========================================================================== */
.contacts {
  padding: max(28px, calc(44 * var(--u))) 0 max(24px, calc(36 * var(--u)));
  text-align: center;
  overflow: hidden;
  overflow: clip;
}
.contacts__lead {
  max-width: 24em;
  margin: 0 auto max(30px, calc(52 * var(--u)));
  padding-inline: var(--gutter);
  font-style: italic;
  font-size: max(18px, calc(28 * var(--u)));
  line-height: 1.35;
  color: var(--milk-dim);
}

.handcard {
  /* ширина карточки — главный размер; изображение масштабируется от неё */
  --card-w: calc(100% - 2 * var(--gutter));
  position: relative;
  width: calc(var(--card-w) / 0.49836);
  margin-left: calc(var(--gutter) - var(--card-w) / 0.49836 * 0.00461);
  text-align: left;
}
@media (min-width: 640px) {
  .handcard {
    --card-w: min(540px, 58%);
    margin-left: calc(50% - var(--card-w) * 0.62 - var(--card-w) / 0.49836 * 0.00461);
  }
}
.handcard picture,
.handcard__img {
  display: block;
  width: 100%;
  height: auto;
}

.handcard__card {
  position: absolute;
  left: 0.461%;
  top: 1.431%;
  width: 49.836%;
  height: 79.07%;
  container-type: inline-size;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  padding: 5% 6%;
  text-align: center;
  color: #4a0710;
  mix-blend-mode: multiply;      /* «напечатано» на бумаге */
}
.handcard__title {
  font-weight: 500;
  font-size: max(12px, min(5cqw, 19px));
  letter-spacing: 0.32em;
  padding-left: 0.32em;
  line-height: 1.2;
}
.handcard__name {
  margin-top: 3.6cqw;
  font-style: italic;
  font-weight: 500;
  font-size: min(10.2cqw, 46px);
  line-height: 1.05;
}
.handcard__phone,
.handcard__tg {
  text-decoration: none;
  background: linear-gradient(currentColor, currentColor) 50% 100% / 0 1px no-repeat;
  transition: background-size 0.6s var(--ease);
}
.handcard__phone {
  margin-top: 3.4cqw;
  font-size: min(8cqw, 32px);
  line-height: 1.15;
  letter-spacing: 0.04em;
}
.handcard__tg {
  margin-top: 1.6cqw;
  font-size: max(15px, min(6cqw, 24px));
  line-height: 1.2;
  letter-spacing: 0.02em;
}
@media (hover: hover) {
  .handcard__phone:hover,
  .handcard__tg:hover { background-size: 100% 1px; }
}

/* появление руки справа */
.js .handcard.reveal {
  transform: translateX(56px);
  filter: none;
  transition-duration: 1.9s;
}
.js .handcard.reveal.is-visible { transform: none; }

/* ==========================================================================
   БЛАГОДАРНОСТЬ — перед финалом
   ========================================================================== */
.thanks {
  display: flex;
  flex-direction: column;
  align-items: center;
  padding: max(28px, calc(44 * var(--u))) var(--gutter) 0;
  text-align: center;
}
.thanks__mark {
  position: relative;
  width: 56px;
  height: 1px;
  margin-bottom: max(24px, calc(36 * var(--u)));
  background: var(--line-soft);
}
.thanks__mark::before,
.thanks__mark::after {
  content: "";
  position: absolute;
  top: -2px;
  width: 5px;
  height: 5px;
  border-radius: 50%;
  background: var(--milk-dim);
}
.thanks__mark::before { left: -2px; }
.thanks__mark::after { right: -2px; }
.thanks__text {
  max-width: 17em;
  font-style: italic;
  font-size: max(22px, calc(34 * var(--u)));
  line-height: 1.3;
  color: var(--milk);
}

/* ==========================================================================
   ФИНАЛ — МАРИЯ на мерцающем «звёздном» бордовом фоне
   ========================================================================== */
.finale {
  position: relative;
  isolation: isolate;
  display: flex;
  align-items: center;
  justify-content: center;
  min-height: clamp(420px, 64svh, 640px);
  padding: 48px var(--gutter);
  text-align: center;
  overflow: hidden;
  overflow: clip;
}
.finale__sky {
  position: absolute;
  inset: 0;
  z-index: 0;
  width: 100%;
  height: 100%;
  pointer-events: none;
}
.finale__inner { position: relative; z-index: 1; }
.finale__name {
  font-weight: 400;
  font-size: max(62px, calc(132 * var(--u)));
  line-height: 1;
  letter-spacing: 0.14em;
  padding-left: 0.14em;
  color: var(--milk);
}
.finale__date {
  margin-top: max(22px, calc(38 * var(--u)));
  font-size: max(17px, calc(26 * var(--u)));
  letter-spacing: 0.34em;
  padding-left: 0.34em;
  color: var(--milk-dim);
}

/* ==========================================================================
   Звёзды по всему сайту — единый декоративный слой
   ========================================================================== */
.stars {
  position: fixed;
  inset: 0;
  z-index: 40;
  width: 100%;
  height: 100%;
  pointer-events: none;
}

/* ==========================================================================
   Появление при прокрутке
   ========================================================================== */
.js .reveal {
  opacity: 0;
  transform: translateY(14px);
  filter: blur(3px);
  transition:
    opacity 1.3s var(--ease),
    transform 1.3s var(--ease),
    filter 1.3s var(--ease);
  transition-delay: var(--delay, 0s);
}
.js .reveal.is-visible {
  opacity: 1;
  transform: none;
  filter: none;
}
.js .section-title.reveal,
.js .intro__name.reveal,
.js .intro__title.reveal {
  letter-spacing: 0.06em;
  transition-property: opacity, transform, filter, letter-spacing;
  transition-duration: 1.6s;
}
.js .section-title.reveal.is-visible,
.js .intro__name.reveal.is-visible,
.js .intro__title.reveal.is-visible { letter-spacing: 0.012em; }
.js .section-title--wide.reveal.is-visible { letter-spacing: 0.22em; }

@keyframes rise {
  from { opacity: 0; transform: translateY(10px); }
  to   { opacity: 1; transform: none; }
}

@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  *, *::before, *::after {
    animation-duration: 0.001ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.001ms !important;
    transition-delay: 0s !important;
  }
  .silk::after { display: none; }
  .js .reveal { opacity: 1; transform: none; filter: none; }
}
