/* AHM Clinical — custom styles lifted from the Stitch "Precision Clinical"
   design system: glassmorphism, radial glows, scroll-reveal, accordion. */

:root {
    --clinical-blue: #0f172a;
}

body {
    font-family: "Plus Jakarta Sans", sans-serif;
}

.material-symbols-outlined {
    font-variation-settings: 'FILL' 0, 'wght' 400, 'GRAD' 0, 'opsz' 24;
    vertical-align: middle;
}

/* ---------- Scroll reveal ----------
   Content is hidden only when JS is available (html.js), but a CSS safety
   animation ALWAYS reveals it after a short delay — so the page is never stuck
   blank if site.js is slow, cached, or fails to run. When site.js reveals an
   element (on load or on scroll) it adds .animate-fade-in-up, which fires the
   same animation immediately. */
html.js .gsap-reveal {
    opacity: 0;
    transform: translateY(30px);
    animation: fadeInUp 0.8s cubic-bezier(0.16, 1, 0.3, 1) 1.2s forwards;
}
html.js .gsap-reveal.animate-fade-in-up { animation-delay: 0s; }
.animate-fade-in-up { animation: fadeInUp 0.8s cubic-bezier(0.16, 1, 0.3, 1) forwards; }
@media (prefers-reduced-motion: reduce) {
    html.js .gsap-reveal { opacity: 1; transform: none; animation: none; }
}
@keyframes fadeInUp {
    from { opacity: 0; transform: translateY(30px); }
    to   { opacity: 1; transform: translateY(0); }
}

/* ---------- Responsive type ----------
   text-display-lg is a fixed 56px Tailwind theme size used for every page
   hero (H1s across index/trt/prep/sexual-health/pricing etc). At mobile
   widths a long single word (e.g. "Testosterone") won't wrap and pushes the
   whole page into horizontal scroll, so shrink it below the sm breakpoint. */
@media (max-width: 640px) {
    .text-display-lg {
        font-size: 34px;
        line-height: 40px;
    }
}

/* ---------- Glass panels ---------- */
.glass-panel {
    background: rgba(255, 255, 255, 0.65);
    backdrop-filter: blur(24px);
    -webkit-backdrop-filter: blur(24px);
    border: 1px solid rgba(15, 23, 42, 0.08);
    box-shadow: 0 10px 40px -10px rgba(15, 23, 42, 0.08), inset 0 0 0 1px rgba(255, 255, 255, 0.6);
    transition: all 0.4s cubic-bezier(0.16, 1, 0.3, 1);
}
.glass-panel:hover {
    border-color: rgba(15, 23, 42, 0.2);
    box-shadow: 0 20px 50px -10px rgba(15, 23, 42, 0.12), inset 0 0 0 1px rgba(255, 255, 255, 0.8);
    transform: translateY(-4px);
}
/* Static variant (no lift) for dashboard cards that shouldn't move on hover */
.glass-static {
    background: rgba(255, 255, 255, 0.65);
    backdrop-filter: blur(24px);
    -webkit-backdrop-filter: blur(24px);
    border: 1px solid rgba(15, 23, 42, 0.08);
    box-shadow: 0 10px 40px -10px rgba(15, 23, 42, 0.08), inset 0 0 0 1px rgba(255, 255, 255, 0.6);
}

/* ---------- Background gradients ---------- */
.bg-radial-glow {
    background: radial-gradient(circle at 50% 0%, rgba(203, 213, 225, 0.4) 0%, rgba(248, 250, 252, 0) 70%);
}
.bg-radial-accent {
    background: radial-gradient(circle at 80% 20%, rgba(15, 23, 42, 0.03) 0%, rgba(248, 250, 252, 0) 50%);
}

/* ---------- Accordion (details/summary) ---------- */
details > summary { list-style: none; }
details > summary::-webkit-details-marker { display: none; }
details[open] summary ~ * { animation: sweep .5s ease-in-out; }
@keyframes sweep {
    0%   { opacity: 0; margin-top: -10px; }
    100% { opacity: 1; margin-top: 0px; }
}

/* ---------- Portal scrollbars (subtle) ---------- */
.thin-scroll::-webkit-scrollbar { width: 8px; height: 8px; }
.thin-scroll::-webkit-scrollbar-thumb { background: rgba(15,23,42,0.15); border-radius: 9999px; }
.thin-scroll::-webkit-scrollbar-track { background: transparent; }

/* ---------- Mobile nav ----------
   Closed state must fully collapse (display:none) so the menu doesn't reserve
   vertical space and push the page content down when it's hidden. */
.mobile-menu { transition: opacity .25s ease, transform .25s ease; }
.mobile-menu.hidden-menu { display: none; opacity: 0; transform: translateY(-8px); pointer-events: none; }


