/* Base */
*, *::before, *::after { box-sizing: border-box; }

body { font-family: var(--font-inter); }

textarea {
  font-family: var(--font-kalam);
  resize: vertical;
}

/* Animated gradient title */
.gradient-text {
  background: linear-gradient(135deg, #334155, #64748b, #334155);
  background-size: 200% 200%;
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
  background-clip: text;
  animation: shimmer 6s ease-in-out infinite;
}

@keyframes shimmer {
  0%, 100% { background-position: 0% 50%; }
  50%       { background-position: 100% 50%; }
}

/* Spinner */
@keyframes spin { to { transform: rotate(360deg); } }
.spinner { animation: spin 0.8s linear infinite; }

/* Page entry */
@keyframes fadeInUp {
  from { opacity: 0; transform: translateY(24px); }
  to   { opacity: 1; transform: translateY(0); }
}

.animate-in          { animation: fadeInUp 0.7s ease-out forwards; }
.animate-in-delay    { animation: fadeInUp 0.7s ease-out 0.15s forwards; opacity: 0; }
.animate-in-delay-2  { animation: fadeInUp 0.7s ease-out 0.3s  forwards; opacity: 0; }

/* Button */
.btn-glow {
  transition: all 0.3s ease;
  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);
}

.btn-glow:hover:not(:disabled) {
  box-shadow: 0 4px 20px rgba(51, 65, 85, 0.25);
  transform: translateY(-1px);
}

.btn-glow:active:not(:disabled) { transform: translateY(0); }

/* Textarea focus ring */
textarea:focus {
  outline: none;
  box-shadow: 0 0 0 3px rgba(100, 116, 139, 0.15);
  border-color: #94a3b8;
}

/* Status / error messages */
.status-msg { transition: opacity 0.3s ease; }
.error-msg  { transition: all 0.3s ease; }
