/* Static behaviour layer; the original compiled design remains in style.css. */
.static-mobile{display:none}
.static-menu-button{border:1px solid var(--border);border-radius:999px;padding:.65rem 1rem;color:var(--foreground);background:var(--card)}
.static-mobile-nav{position:absolute;left:1.25rem;right:1.25rem;top:5rem;display:none;flex-direction:column;gap:.2rem;padding:1rem;border:1px solid var(--border);border-radius:1rem;background:var(--popover);box-shadow:var(--shadow-lift)}
.static-mobile-nav.open{display:flex}
.static-mobile-nav a{padding:.7rem .9rem;border-radius:.7rem;color:var(--foreground)}
.static-mobile-nav a:hover{background:var(--secondary);color:var(--primary)}
.form-status{flex-basis:100%;padding:.5rem 1rem 0;color:var(--primary);font-size:.78rem}
.form-status.error{color:#ff8e9d}
.ajax-form button:disabled{cursor:wait;opacity:.65}
.opacity-0{opacity:1!important}
.translate-y-8{transform:translateY(0)!important}
/* Reveal elements are animated by React in the source project. In the static
   build they must be visible immediately because there is no React hydration. */
.reveal-init,.reveal-visible{opacity:1!important;transform:none!important}
html,body{background:var(--background);color:var(--foreground)}
body{overflow-x:hidden}
main,section,footer,header{width:100%}
/* Dark-theme contrast repair. The source used primary-foreground and graphite
   as dark ink on a light canvas; the converted site uses dark surfaces. */
:root{
  --primary-foreground:oklch(96% .012 240);
  --graphite:oklch(96% .012 240);
}
/* Gold and azure filled controls still need dark ink for contrast. */
[class~="bg-primary"],[class~="bg-silver"],[class~="bg-silver-bright"]{
  color:oklch(14% .03 255)!important;
}
@media(max-width:1279px){.static-mobile{display:block}.static-mobile-nav{z-index:80}}
