*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{margin:0;text-wrap:pretty;background:var(--surface-page);color:var(--text-body);font-family:var(--font-sans);font-size:var(--fs-body);line-height:var(--lh-body);-webkit-font-smoothing:antialiased}
img{display:block;max-width:100%}
/* Prose links only — component anchors (any a[class]) own their colours, so a global hover can never leak into buttons/nav/cards */
:where(a){color:inherit}
:where(a:not([class])){color:var(--text-strong);text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:3px;transition:color var(--dur-fast) var(--ease-inout)}
@media(hover:hover){:where(a:not([class])):hover{color:var(--terra-600)}}
:where(.jm-scope-dark,.jm-feature) :where(a:not([class])){color:var(--creme-50)}@media(hover:hover){:where(.jm-scope-dark,.jm-feature) :where(a:not([class])):hover{color:var(--ouro-500)}}
:focus-visible{outline:2px solid var(--focus-ring);outline-offset:3px}
/* Dark scopes flip the focus ring (non-text contrast ≥3:1 on both) */
.jm-scope-dark,.jm-feature,.jm-lb,.jm-slot--dark,.jm-quote--inverse{--focus-ring:var(--focus-ring-inverse)}
::placeholder{color:var(--text-placeholder);opacity:1}
::selection{background:var(--ouro-400);color:var(--ink-900)}
@keyframes jm-ticker{from{transform:translateX(0)}to{transform:translateX(-50%)}}
@keyframes jm-hero-settle{from{transform:scale(var(--hero-scale-from))}to{transform:scale(1)}}
@keyframes jm-enter{from{opacity:0;transform:translateY(var(--enter-distance))}to{opacity:1;transform:none}}
/* Reveal is progressive enhancement: content is VISIBLE unless the page opts in with html.jm-reveal-on (set by JS that also owns a fallback) */
.jm-reveal{transition:opacity var(--dur-enter) var(--ease-out),transform var(--dur-enter) var(--ease-out)}
.jm-reveal-on .jm-reveal:not(.is-in){opacity:0;transform:translateY(var(--enter-distance))}
@media (prefers-reduced-motion:reduce){.jm-reveal{opacity:1;transform:none}*{animation-duration:0ms!important;animation-iteration-count:1!important}}
