/* ========== ВСПОМОГАТЕЛЬНЫЕ КЛАССЫ ========== */
.visually-hidden {
  position: absolute;
  width: 1px;
  height: 1px;
  margin: -1px;
  padding: 0;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  border: 0;
}

.lock {
  overflow: hidden;
}

/* Социальные иконки */
.social-link {
  display: inline-flex;
  justify-content: center;
  align-items: center;
  width: 40px;
  height: 40px;
  border-radius: 50%;
  background-color: rgba(255, 255, 255, 0.1);
  margin: 0 var(--space-xs);
  transition: background-color 0.2s ease, transform 0.2s ease;
}

.social-link:hover,
.social-link:focus {
  background-color: var(--primary-color);
  transform: translateY(-3px);
  outline: none;
}

.social-link i {
  font-size: 1.6rem;
}

/* Анимации при скролле */
[data-aos] {
  transition-property: transform, opacity;
}

[data-aos="fade-up"] {
  transform: translateY(30px);
  opacity: 0;
  transition-duration: 0.6s;
}

[data-aos="fade-up"].aos-animate {
  transform: translateY(0);
  opacity: 1;
}

[data-aos="fade-down"] {
  transform: translateY(-30px);
  opacity: 0;
}

[data-aos="fade-down"].aos-animate {
  transform: translateY(0);
  opacity: 1;
}

[data-aos="fade-right"] {
  transform: translateX(-30px);
  opacity: 0;
}

[data-aos="fade-right"].aos-animate {
  transform: translateX(0);
  opacity: 1;
}

[data-aos="fade-left"] {
  transform: translateX(30px);
  opacity: 0;
}

[data-aos="fade-left"].aos-animate {
  transform: translateX(0);
  opacity: 1;
}

[data-aos="zoom-in"] {
  transform: scale(0.8);
  opacity: 0;
}

[data-aos="zoom-in"].aos-animate {
  transform: scale(1);
  opacity: 1;
}

[data-aos="zoom-out"] {
  transform: scale(1.1);
  opacity: 0;
}

[data-aos="zoom-out"].aos-animate {
  transform: scale(1);
  opacity: 1;
}

/* Глобальные ошибки */
.global-error {
  position: fixed;
  bottom: var(--space-lg);
  right: var(--space-lg);
  max-width: 400px;
  background-color: #f8d7da;
  color: #721c24;
  border-left: 4px solid #f5c6cb;
  padding: var(--space-md);
  border-radius: var(--border-radius);
  z-index: var(--z-modal);
  box-shadow: var(--box-shadow);
}

.global-error__content {
  position: relative;
}

.global-error__close {
  position: absolute;
  top: -1rem;
  right: -1rem;
  width: 30px;
  height: 30px;
  background-color: #f5c6cb;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  border: none;
  cursor: pointer;
  color: #721c24;
  font-size: 1.6rem;
  transition: background-color 0.2s ease;
}

.global-error__close:hover {
  background-color: #f1b0b7;
}

/* Ленивая загрузка изображений */
img[loading="lazy"] {
  opacity: 0;
  transition: opacity 0.3s ease;
}

img[loading="lazy"].loaded {
  opacity: 1;
}

/* Прелоадер */
.preloader {
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background-color: var(--light-color);
  z-index: 9999;
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;
  transition: opacity 0.5s ease, visibility 0.5s ease;
}

.preloader__logo {
  margin-bottom: var(--space-xl);
}

.preloader__progress {
  width: 200px;
  height: 4px;
  background-color: #eee;
  margin-top: var(--space-lg);
  border-radius: 2px;
  overflow: hidden;
}

.preloader__progress-bar {
  height: 100%;
  width: 0;
  background-color: var(--primary-color);
  animation: loading 2s ease-in-out infinite;
}

@keyframes loading {
  0% { width: 0; }
  50% { width: 100%; }
  100% { width: 0; margin-left: 100%; }
}