/* ═══════════════════════════════════════════════════════════════
   /donate — підтримати клуб довільною сумою через Vipps.

   Сторінка навмисно коротка. Людина, яка вже вирішила дати грошей,
   не має читати ще один лендінг: сума, кнопка, і все. Усе інше —
   необовʼязкове й нижче.

   КОЛЬОРИ СТАНІВ. Палітра проєкту закрита, зеленого й червоного
   токенів у tokens.css немає (див. коментар у components.css біля
   .form-error). Три значення нижче — єдині кольори поза токенами на
   цій сторінці, і в кожного поруч стоїть виміряний контраст, а не
   око. Рахувалось на композиті підкладки з білим фоном секції.
   ═══════════════════════════════════════════════════════════════ */

/* Панель — це .form-panel із join.css: фон, рамка, радіус і падінги
   однакові з усіма формами сайту. Звідси лише ширина. 560, а не 720
   як у join: там багатополева анкета, тут одне рішення й одна
   кнопка, і розтягувати їх на всю смугу тексту немає за чим. */
.donate-panel { max-width: 560px; }

/* Повернення з Vipps. Клас ставить інлайн-скрипт у <head> до першого
   малювання; без цього форма встигала блимнути перед подякою, і це
   читалось як «платіж не пройшов». */
.is-donate-return [data-donate-form] { display: none; }
.is-donate-return [data-donate-done] { display: block; }

/* ─── Вибір суми ─────────────────────────────────────────────── */

.donate-set { margin: 0 0 16px; padding: 0; border: 0; }

.donate-legend {
  display: block;
  padding: 0;
  margin-block-end: 12px;
  font-size: var(--fs-xs);
  font-weight: 500;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--c-muted);
}

.donate-amounts {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(96px, 1fr));
  gap: 10px;
}

/* Кожна сума — <label> навколо прихованої радіокнопки. Радіо, а не
   кнопка з aria-pressed: суми взаємно виключні, і це рівно семантика
   радіогрупи — «2 з 4», стрілки, звʼязок із legend. */
.donate-amount {
  display: flex;
  align-items: center;
  justify-content: center;
  min-height: 56px;
  padding: 10px 8px;
  /* --ink-400 (#7C93A4) дає 3.20:1 на білому, тоді як типовий
     --c-line (#DDE2E6) — лише 1.30:1. Невибрані суми не мають
     покладатись на саму лише золоту заливку сусіда: межа елемента
     має бути видима сама по собі (WCAG 1.4.11). */
  border: 1px solid var(--ink-400);
  border-radius: var(--r-md);
  background: transparent;
  color: var(--c-text);
  font-family: var(--font-display);
  font-size: 1.125rem;
  font-weight: 500;
  font-variant-numeric: tabular-nums;
  line-height: 1.2;
  white-space: nowrap;
  cursor: pointer;
  transition: border-color var(--t-fast) var(--ease-ui),
              background-color var(--t-fast) var(--ease-ui),
              color var(--t-fast) var(--ease-ui);
}

.donate-amount:hover { border-color: var(--c-text); }

/* Обрана сума. Золото заливкою, а не рамкою: рамку на дотик із
   телефона видно погано, а це головне рішення на сторінці. */
.donate-amount:has(input:checked) {
  background: var(--gold-500);
  border-color: var(--gold-600);
  color: var(--ink-900);
}

.donate-amount:has(input:focus-visible) {
  outline: 2px solid var(--c-focus, var(--gold-800));
  outline-offset: 2px;
}

/* ─── Своя сума ──────────────────────────────────────────────── */

.donate-own { margin-block-end: 6px; }

.donate-own__label {
  display: block;
  margin-block-end: 6px;
  font-size: var(--fs-sm);
  color: var(--c-muted);
}

/* Обгортка тримає «NOK» усередині поля, щоб воно не їхало при зміні
   довжини числа. */
.donate-own__wrap {
  position: relative;
  display: flex;
  align-items: center;
}

.donate-own__wrap input {
  width: 100%;
  min-height: 64px;
  padding: 0 72px 0 18px;
  border: 1px solid var(--ink-400);
  border-radius: var(--r-md);
  background: var(--c-field-bg, transparent);
  color: var(--c-text);
  font-family: var(--font-display);
  font-size: clamp(1.5rem, 4vw, 2rem);
  font-weight: 300;
  font-variant-numeric: tabular-nums;
  letter-spacing: -0.01em;
  transition: border-color var(--t-fast) var(--ease-ui),
              box-shadow var(--t-fast) var(--ease-ui);
}

/* :focus-visible, а не :focus — інакше миша теж лишалась би без
   кільця. І рамка --gold-800 (5.94:1 на білому), а не --gold-500
   (1.68:1): золото світле, на білому полі його просто не видно, і
   зміна стану лишалась би непомітною. Та сама пастка описана в
   tokens.css біля визначення --gold-800. */
.donate-own__wrap input:focus-visible {
  outline: 2px solid var(--c-focus, var(--gold-800));
  outline-offset: 2px;
  border-color: var(--c-accent-text, var(--gold-800));
  box-shadow: 0 0 0 4px var(--gold-glow);
}

.donate-own__cur {
  position: absolute;
  inset-inline-end: 18px;
  pointer-events: none;
  font-size: var(--fs-body);
  font-weight: 500;
  color: var(--c-muted);
}

/* ─── Необовʼязкове ──────────────────────────────────────────── */

.donate-more {
  margin-block: 20px 0;
  border-block-start: 1px solid var(--c-line-soft, var(--c-line));
  padding-block-start: 18px;
}

.donate-more > summary {
  /* 25px заввишки ледве перелазив поріг у 24. Вертикальні падінги
     роблять 45 і нічого не зсувають. */
  padding-block: 10px;
  cursor: pointer;
  font-size: var(--fs-sm);
  color: var(--c-muted);
  list-style: none;
}
.donate-more > summary::-webkit-details-marker { display: none; }
.donate-more > summary::before {
  content: "+ ";
  color: var(--c-accent-text);
  font-weight: 500;
}
.donate-more[open] > summary::before { content: "− "; }
.donate-more > summary:hover { color: var(--c-text); }
.donate-more > summary:focus-visible {
  outline: 2px solid var(--c-focus, var(--gold-800));
  outline-offset: 3px;
}

.donate-more__body { margin-block-start: 16px; }

/* ─── Кнопка й дрібний текст ─────────────────────────────────── */

.donate-submit {
  width: 100%;
  min-height: 56px;
  margin-block-start: 22px;
}

.donate-note {
  margin-block-start: 14px;
  font-size: var(--fs-xs);
  line-height: 1.55;
  color: var(--c-muted);
}

/* ─── Стан подяки ────────────────────────────────────────────── */

.donate-done__sum {
  font-family: var(--font-display);
  font-size: clamp(2.2rem, 6vw, 3.2rem);
  font-weight: 200;
  line-height: 1.05;
  letter-spacing: -0.02em;
  font-variant-numeric: tabular-nums;
  color: var(--c-accent-text);
  margin-block-end: 8px;
}

.donate-done__state {
  display: inline-block;
  margin-block-end: 14px;
  padding: 4px 12px;
  border-radius: 999px;
  font-size: var(--fs-xs);
  font-weight: 600;
}

/* Контраст рахований, не на око. Підкладка — композит із білим
   фоном секції; поріг 4.5, бо 13px/600 це не великий текст.
   ok   #1F6B41 на #E0F5EA = 5.69
   wait #7A6100 (--gold-800) на #FDF4D1 = 5.38
   bad  #9E2F23 на #FAE7E5 = 6.11
   Попередні #2E8B57 (3.72) і #C0392B (4.56) не проходили або
   проходили впритул. */
.donate-done__state.is-ok   { background: rgba(61,190,123,.16); color: #1F6B41; }
.donate-done__state.is-wait { background: rgba(242,194,0,.18);  color: var(--gold-800); }
.donate-done__state.is-bad  { background: rgba(226,104,94,.16); color: #9E2F23; }

/* Заголовок стояв упритул до тексту: відступ був 0 при 14px усюди
   поруч, і рядки візуально злипались. */
.donate-done h2 { margin-block-end: 14px; }

/* Єдина кнопка на сторінці подяки виглядала як рядок тексту:
   рамка --c-line дає 1.3:1 на білому. І 44px замість 40 — це
   єдина дія на екрані, її тиснуть із телефона. */
.donate-done .btn--ghost {
  border-color: var(--c-accent-text);
  min-height: 44px;
}

/* Поки чекаємо відповіді, на екрані має щось жити. Двадцять
   нерухомих секунд на сторінці про гроші читаються як «зламалось». */
@keyframes donate-pulse {
  0%, 100% { opacity: 1; }
  50%      { opacity: 0.55; }
}
.donate-done__state.is-wait {
  animation: donate-pulse 1.6s var(--ease-ui, ease-in-out) infinite;
}
@media (prefers-reduced-motion: reduce) {
  .donate-done__state.is-wait { animation: none; }
}

@media (max-width: 520px) {
  .donate-amounts { grid-template-columns: repeat(2, 1fr); }
}
