/* ====================================================================
   Denovers · Shared site CSS
   --------------------------------------------------------------------
   Consolidates patterns that were duplicated across pages:
   1. Scroll-in animations (.anim-in)
   2. Form success/error states (.form-success / .form-error)
   3. Cross-link card components (.xl-related + .xl-tint-*)
   Page-specific hero entrance CSS stays inline (per-page hero scope).
   Locked 2026-05-25.
   ==================================================================== */

/* ---------- SCROLL-IN ANIMATIONS · IntersectionObserver-driven ---------- */
@media (prefers-reduced-motion: no-preference) {
 .anim-in { opacity: 0; transform: translateY(20px); transition: opacity .7s cubic-bezier(0.22, 1, 0.36, 1), transform .7s cubic-bezier(0.22, 1, 0.36, 1); will-change: opacity, transform; }
 .anim-in.is-in { opacity: 1; transform: translateY(0); }

 /* Grid item stagger via nth-of-type */
 .cases .card.anim-in:nth-of-type(2),
 .home-cases .card-pair.anim-in:nth-of-type(2),
 .xl-grid .xl-card.anim-in:nth-of-type(2) { transition-delay: 80ms; }
 .cases .card.anim-in:nth-of-type(3),
 .home-cases .card-pair.anim-in:nth-of-type(3),
 .xl-grid .xl-card.anim-in:nth-of-type(3) { transition-delay: 160ms; }
 .cases .card.anim-in:nth-of-type(4) { transition-delay: 240ms; }
 details.anim-in:nth-of-type(2) { transition-delay: 50ms; }
 details.anim-in:nth-of-type(3) { transition-delay: 100ms; }
 details.anim-in:nth-of-type(4) { transition-delay: 150ms; }
 details.anim-in:nth-of-type(5) { transition-delay: 200ms; }
}

/* ---------- CASE CARD + CASE HERO EYEBROW · hide plum dot + client name, keep industry/year tagline ---------- */
.card-meta .dot,
.card-meta .name,
.rc-meta-top .rc-dot,
.rc-meta-top .rc-name,
.case-hero-meta .dot,
.case-hero-meta .name { display: none !important; }

/* ---------- FORM SUCCESS / ERROR STATES ---------- */
.form-success { padding: clamp(28px, 4vw, 48px) clamp(20px, 3vw, 32px); text-align: center; background: var(--paper); border: 1px solid rgba(12,12,10,0.08); border-radius: 4px; animation: form-success-in .5s cubic-bezier(0.22, 1, 0.36, 1); }
.form-success .fs-icon { display: inline-flex; align-items: center; justify-content: center; width: 56px; height: 56px; background: var(--accent); color: var(--paper); border-radius: 50%; margin: 0 auto 18px; }
.form-success .fs-icon svg { display: block; }
.form-success .fs-title { font-family: var(--sans); font-size: clamp(19px, 1.9vw, 24px); line-height: 1.2; font-weight: 500; color: var(--ink); margin: 0 0 10px; }
.form-success .fs-sub { font-family: var(--sans); font-size: 14.5px; line-height: 1.5; color: var(--ink-2); margin: 0 auto; max-width: 36ch; }
@keyframes form-success-in { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: translateY(0); } }
.form-error { padding: 12px 16px; background: #FDECEC; border: 1px solid #F2B4B4; border-radius: 4px; color: #8A1818; font-family: var(--sans); font-size: 14px; margin-top: 12px; }
