/*
 * crowdnoise.com marketing site: the bits Framer's runtime used to provide.
 * Page layout/styling lives in the per-page stylesheets next to this file
 * (Framer's own server-rendered CSS, unchanged apart from asset URLs).
 */

/* Breakpoint visibility. Framer emits one hashed class per page and
   breakpoint (hidden-72rtr7, ...); the build normalises them to these,
   keeping each original media query exactly. */
@media (min-width: 1440px) { .cn-hide-d { display: none !important; } }
@media (min-width: 810px) and (max-width: 1439.98px) { .cn-hide-t { display: none !important; } }
@media (max-width: 809.98px) { .cn-hide-m { display: none !important; } }
@media (min-width: 810px) and (max-width: 1439px) { .cn-hide-t2 { display: none !important; } }
@media (max-width: 809px) { .cn-hide-m2 { display: none !important; } }
@media (max-width: 1439.98px) { .cn-hide-tm { display: none !important; } }

/* Appear / scroll-in animations. Elements are rendered in their final state;
   with JS on (html.cn-js) they start from their Framer "initial" values and
   transition in once marketing.js adds .cn-in. */
.cn-js [data-cn-reveal] {
    transition-property: opacity, transform, filter;
    transition-duration: var(--cn-dur, 0.6s);
    transition-timing-function: var(--cn-ease, cubic-bezier(0.44, 0, 0.56, 1));
    transition-delay: var(--cn-delay, 0s);
}
.cn-js [data-cn-reveal]:not(.cn-in) { opacity: var(--cn-o, 0.001) !important; }
.cn-js [data-cn-reveal][style*="--cn-t:"]:not(.cn-in) { transform: var(--cn-t) !important; }
.cn-js [data-cn-reveal][style*="--cn-f:"]:not(.cn-in) { filter: var(--cn-f) !important; }
@media (prefers-reduced-motion: reduce) {
    .cn-js [data-cn-reveal]:not(.cn-in) { opacity: 1 !important; transform: none !important; filter: none !important; }
    .cn-js [data-cn-reveal] { transition: none; }
}

/* Framer "Ticker" component */
@keyframes cn-ticker {
    from { transform: translateX(0); }
    to { transform: translateX(var(--cn-ticker-distance, -50%)); }
}
.cn-ticker-run { animation: cn-ticker var(--cn-ticker-duration, 20s) linear infinite; }
@media (prefers-reduced-motion: reduce) { .cn-ticker-run { animation: none; } }

/* Mobile menu: the open state is a <template> swapped in by marketing.js */
[data-cn-nav-toggle] { cursor: pointer; }

/* Carousel (home2) */
[data-cn-carousel] .ssc_track { transition: transform 0.45s cubic-bezier(0.22, 1, 0.36, 1); }
[data-cn-carousel] .ssc_track.cn-dragging { transition: none; }

/* FAQ (home2) */
[data-cn-faq] { cursor: pointer; }
[data-cn-faq] .framer-1p2dmfq,
[data-cn-faq] .framer-w03rfs,
[data-cn-faq] .framer-1bih3t3 { transition: transform 0.3s ease, opacity 0.3s ease; }

/* Form states (Framer's button spinner + input shake) */
@keyframes cn-spin { to { transform: rotate(360deg); } }
.cn-spin { animation: cn-spin 1s linear infinite; }
@keyframes cn-shake {
    0%, 100% { transform: translateX(0); }
    33% { transform: translateX(-4px); }
    66% { transform: translateX(4px); }
}
.cn-shake { animation: cn-shake 0.2s linear; }
