/* ============================================
   UTILITIES — Classes utilitárias rápidas
   ============================================ */

/* Texto */
.text-center { text-align: center; }
.text-left { text-align: left; }
.text-right { text-align: right; }

/* Alinhar à esquerda no desktop, centralizado no mobile */
.text-left-desktop { text-align: center; }
.flex-left-desktop { align-items: center; }
.flex-left-desktop > * { justify-content: center; }

@media (min-width: 1024px) {
  .text-left-desktop { text-align: left; }
  .flex-left-desktop { align-items: flex-start; }
  .flex-left-desktop > * { justify-content: flex-start; }
}

.text-primary { color: var(--color-text-primary); }
.text-secondary { color: var(--color-text-secondary); }
.text-muted { color: var(--color-text-muted); }
.text-accent { color: var(--color-primary-light); }

/* Display */
.block { display: block; }
.inline { display: inline; }
.inline-block { display: inline-block; }
.hidden { display: none; }

/* Largura */
.w-full { width: 100%; }
.w-auto { width: auto; }
.max-w-prose { max-width: 68ch; }
.max-w-narrow { max-width: 720px; }
.max-w-wide { max-width: 920px; }

/* Margin auto */
.mx-auto { margin-inline: auto; }

/* Spacing */
.mt-1 { margin-top: var(--space-1); }
.mt-2 { margin-top: var(--space-2); }
.mt-3 { margin-top: var(--space-3); }
.mt-4 { margin-top: var(--space-4); }
.mt-5 { margin-top: var(--space-5); }
.mt-6 { margin-top: var(--space-6); }
.mt-7 { margin-top: var(--space-7); }
.mt-8 { margin-top: var(--space-8); }

.mb-1 { margin-bottom: var(--space-1); }
.mb-2 { margin-bottom: var(--space-2); }
.mb-3 { margin-bottom: var(--space-3); }
.mb-4 { margin-bottom: var(--space-4); }
.mb-5 { margin-bottom: var(--space-5); }
.mb-6 { margin-bottom: var(--space-6); }
.mb-7 { margin-bottom: var(--space-7); }
.mb-8 { margin-bottom: var(--space-8); }

/* Visibilidade */
.sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border-width: 0;
}

/* Animações */
.fade-in {
  opacity: 0;
  transform: translateY(16px);
  transition: opacity var(--duration-slow) var(--ease-out), transform var(--duration-slow) var(--ease-out);
}

.fade-in.visible {
  opacity: 1;
  transform: translateY(0);
}

/* Scroll reveal */
.reveal {
  opacity: 0;
  transform: translateY(20px);
  transition: opacity 600ms var(--ease-out), transform 600ms var(--ease-out);
}

.reveal.visible {
  opacity: 1;
  transform: translateY(0);
}

/* Glow */
.glow-blue {
  box-shadow: var(--shadow-glow);
}

.glow-strong {
  filter: drop-shadow(0 0 18px rgba(67, 183, 255, 0.42)) drop-shadow(0 0 48px rgba(14, 100, 221, 0.22));
}
