.text-center{text-align:center}
.text-muted{color:var(--rjw-muted)}
.text-accent{color:var(--rjw-accent)}
.mb-0{margin-bottom:0}
.mb-1{margin-bottom:.5rem}
.mb-2{margin-bottom:1rem}
.mb-3{margin-bottom:1.5rem}
.mb-4{margin-bottom:2.5rem}
.mt-0{margin-top:0}
.mt-2{margin-top:1rem}
.mt-4{margin-top:2.5rem}
.no-list{list-style:none;margin:0;padding:0}
.divider{height:1px;background:var(--rjw-line);border:0;margin:2rem 0}
.badge{display:inline-flex;align-items:center;gap:.35rem;padding:.3rem .7rem;background:var(--rjw-accent-tint);color:var(--rjw-accent-dark);border-radius:999px;font-size:.8rem;font-weight:600}
.badge svg{width:12px;height:12px}
.about-photo{border-radius:var(--rjw-radius-lg);overflow:hidden;background:var(--rjw-cream);box-shadow:var(--rjw-shadow-lg,0 30px 60px -20px rgba(0,0,0,.28))}
.about-photo img{width:100%;height:100%;object-fit:cover}

/* Scroll reveal. Individual + staggered children. */
[data-reveal]{opacity:0;transform:translateY(28px);transition:opacity .8s cubic-bezier(.22,1,.36,1),transform .8s cubic-bezier(.22,1,.36,1)}
[data-reveal].is-revealed{opacity:1;transform:none}
[data-reveal-stagger] > *{opacity:0;transform:translateY(24px);transition:opacity .7s cubic-bezier(.22,1,.36,1),transform .7s cubic-bezier(.22,1,.36,1)}
[data-reveal-stagger].is-revealed > *{opacity:1;transform:none}
[data-reveal-stagger].is-revealed > *:nth-child(1){transition-delay:.05s}
[data-reveal-stagger].is-revealed > *:nth-child(2){transition-delay:.12s}
[data-reveal-stagger].is-revealed > *:nth-child(3){transition-delay:.2s}
[data-reveal-stagger].is-revealed > *:nth-child(4){transition-delay:.28s}
[data-reveal-stagger].is-revealed > *:nth-child(5){transition-delay:.36s}
[data-reveal-stagger].is-revealed > *:nth-child(6){transition-delay:.44s}
[data-reveal-stagger].is-revealed > *:nth-child(7){transition-delay:.52s}
[data-reveal-stagger].is-revealed > *:nth-child(8){transition-delay:.6s}
[data-reveal-stagger].is-revealed > *:nth-child(9){transition-delay:.68s}

/* Magnetic CTA. Translated via JS. */
[data-magnetic]{transition:transform .3s cubic-bezier(.22,1,.36,1)}

/* Horizontal swipeable carousel. Native scroll snap. */
.carousel{display:grid;grid-auto-flow:column;grid-auto-columns:min(85%,360px);gap:1.25rem;overflow-x:auto;overscroll-behavior-x:contain;scroll-snap-type:x mandatory;padding:.5rem var(--rjw-gutter) 2.5rem;margin-inline:calc(var(--rjw-gutter) * -1);scrollbar-width:none;-webkit-overflow-scrolling:touch}
.carousel::-webkit-scrollbar{display:none}
.carousel > *{scroll-snap-align:start}
@media(min-width:900px){.carousel{grid-auto-flow:row;grid-auto-columns:auto;grid-template-columns:repeat(3,1fr);overflow:visible;padding:0;margin:0}}

/* Sticky mobile action bar. Only shown under 900px. */
.mobile-actions{position:fixed;left:0;right:0;bottom:0;z-index:70;display:grid;grid-template-columns:1fr 1fr;gap:0;background:rgba(255,255,255,.96);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);border-top:1px solid rgba(0,0,0,.08);box-shadow:0 -10px 30px -12px rgba(0,0,0,.15);transform:translateY(110%);transition:transform .35s cubic-bezier(.22,1,.36,1);padding-bottom:env(safe-area-inset-bottom)}
.mobile-actions.is-visible{transform:none}
.mobile-actions a{display:flex;align-items:center;justify-content:center;gap:.45rem;padding:1rem .5rem;text-decoration:none;font-weight:600;font-size:.95rem;color:var(--rjw-ink);border:0;background:transparent;line-height:1;font-family:var(--font-body)}
.mobile-actions a + a{border-left:1px solid rgba(0,0,0,.08)}
.mobile-actions a.is-primary{background:var(--rjw-accent);color:#fff}
.mobile-actions a.is-primary:hover{background:var(--rjw-accent-dark)}
.mobile-actions svg{width:18px;height:18px}
@media(min-width:900px){.mobile-actions{display:none}}
@media(max-width:900px){body.has-mobile-actions{padding-bottom:calc(64px + env(safe-area-inset-bottom))}}

/* Focus polish. */
:focus-visible{outline:3px solid var(--rjw-accent-glow);outline-offset:3px;border-radius:3px}
::selection{background:var(--rjw-accent);color:#fff}
