/* ==========================================================================
   UTILITIES — дрібні службові класи
   Свідомо мало: більшість оформлення належить компонентам, а не утилітам.
   ========================================================================== */

/* Текст лише для скрінрідера. Не display:none — інакше його не буде озвучено. */
.visually-hidden {
  position: absolute !important;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip-path: inset(50%);
  white-space: nowrap;
  border: 0;
}

/* Той самий текст, але видимий при отриманні фокуса */
.visually-hidden-focusable:not(:focus):not(:focus-within) {
  position: absolute !important;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip-path: inset(50%);
  white-space: nowrap;
  border: 0;
}

.text-center {
  text-align: center;
}

.text-left {
  text-align: left;
}

.full-width {
  width: 100%;
}

.mt-0 {
  margin-top: 0;
}

.mt-4 {
  margin-top: var(--space-4);
}

.mt-6 {
  margin-top: var(--space-6);
}

.mt-8 {
  margin-top: var(--space-8);
}

/* Обрізає текст після заданої кількості рядків */
.clamp-2 {
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

/* Аварійний запобіжник від горизонтального скролу.
   Вішається на підозрілий контейнер, а не на body — на body воно
   ламає position: sticky у хедері. */
.overflow-guard {
  max-width: 100%;
  overflow-x: auto;
}
