/* ============================================================
   Samostan motion — intro overlay, scroll reveal, hover effects.
   Driven by assets/js/motion.js and the samostan/motion block
   (switches). Reduced-motion users get none of it: motion.js
   never adds html.sf-intro / html.sf-hover / .sf-reveal.
   ============================================================ */

/* ── Intro overlay (shown only while html.sf-intro is set) ── */
.sf-loader {
    display: none;
    position: fixed;
    inset: 0;
    z-index: 99999;
    align-items: center;
    justify-content: center;
    background: var(--sf-color-navy, #2b3542);
    overflow: hidden;
}
html.sf-intro .sf-loader { display: flex; }
.sf-loader__inner {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 22px;
    padding: 24px;
}
.sf-loader__logo {
    display: block;
    height: 120px;
    width: auto;
    opacity: 0;
    transform: translateY(14px) scale(0.94);
}
.sf-loader__text {
    margin: 0;
    max-width: 560px;
    font-family: var(--font-display, 'EB Garamond', Georgia, serif);
    font-size: 26px;
    line-height: 1.2;
    letter-spacing: 0.02em;
    color: #fff;
    text-align: center;
    text-wrap: balance;
    opacity: 0;
    transform: translateY(10px);
}
.sf-loader.is-on .sf-loader__logo { animation: sfIntroLogo 0.9s cubic-bezier(0.22, 0.61, 0.36, 1) 0.15s forwards; }
.sf-loader.is-on .sf-loader__text { animation: sfIntroText 0.7s cubic-bezier(0.22, 0.61, 0.36, 1) 0.85s forwards; }
.sf-loader.is-out { animation: sfIntroOut 0.8s ease-in forwards; }
@keyframes sfIntroLogo { to { opacity: 1; transform: none; } }
@keyframes sfIntroText { to { opacity: 1; transform: none; } }
@keyframes sfIntroOut  { to { opacity: 0; visibility: hidden; } }
@media (max-width: 640px) {
    .sf-loader__logo { height: 88px; }
    .sf-loader__text { font-size: 20px; }
}

/* ── Scroll reveal ── */
.sf-reveal {
    opacity: 0;
    transform: translate3d(0, 28px, 0);
    transition: opacity 0.8s cubic-bezier(0.22, 0.61, 0.36, 1), transform 0.8s cubic-bezier(0.22, 0.61, 0.36, 1);
    transition-delay: var(--sf-d, 0ms);
    will-change: opacity, transform;
}
img.sf-reveal { transform: translate3d(0, 20px, 0) scale(1.03); }
.sf-reveal.is-in { opacity: 1; transform: none; }

/* ── Hover effects (html.sf-hover) ── */
html.sf-hover .sf-mission-card,
html.sf-hover .sf-community-card,
html.sf-hover .sf-contact-card {
    transition: transform 0.45s cubic-bezier(0.22, 0.61, 0.36, 1), box-shadow 0.45s cubic-bezier(0.22, 0.61, 0.36, 1);
}
html.sf-hover .sf-mission-card:hover,
html.sf-hover .sf-community-card:hover,
html.sf-hover .sf-contact-card:hover {
    transform: translateY(-6px);
    box-shadow: 0 24px 40px -24px rgba(0, 0, 0, 0.35);
}
html.sf-hover a:has(> img.object-cover) { display: block; overflow: hidden; }
html.sf-hover a:has(> img.rounded-\[30px\]) { border-radius: 30px; }
html.sf-hover a:has(> img.rounded-\[20px\]) { border-radius: 20px; }
html.sf-hover a > img.object-cover { transition: transform 0.8s cubic-bezier(0.22, 0.61, 0.36, 1); }
html.sf-hover a:hover > img.object-cover { transform: scale(1.04); }
html.sf-hover .btn { transition: opacity 0.3s ease, transform 0.3s ease; }
html.sf-hover .btn:hover { transform: translateY(-2px); }

@media (prefers-reduced-motion: reduce) {
    .sf-loader, .sf-reveal { animation: none !important; transition: none !important; opacity: 1; transform: none; }
    html.sf-intro .sf-loader { display: none; }
}
