/* ============================================================
   global.css -- base reset, loaded on every page before style.css
   ============================================================ */

*, *::before, *::after {
  box-sizing: border-box;
}

html {
  -webkit-text-size-adjust: 100%;
  scroll-behavior: smooth;
}

body {
  margin: 0;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

a {
  text-decoration: none;
}

ul, ol {
  padding: 0;
}

:root {
  --brand-blue: #3377ff;
  --brand-purple: #6e59ed;
  --brand-navy: #1e2228;
  --brand-navy-soft: #47536b;
  --brand-bg-tint: #f1f5fd;
}

/* ---- Static-site safety override ----
   The original site hides freshly-rendered elements (opacity/visibility) until
   a scroll-triggered JS animation reveals them. On a hardcoded static site we
   don't want content's visibility depending on JS executing correctly, so we
   guarantee it's visible by default. THIS RULE MUST STAY -- without it,
   icon-box widgets and other elementor-invisible-tagged sections render
   completely blank. (Lost once already during a rebuild -- hence this being
   its own permanent script instead of an ad-hoc shell heredoc.) */
.elementor-invisible{visibility:visible!important;opacity:1!important}

/* Masterlayer's own "reveal" scroll-animation system (separate from Elementor's
   native one) also hides content until JS adds an .is-in-view class -- same
   problem, same fix. */
.master-fancy-image.reveal>*{opacity:1!important}
.master-fancy-image.reveal:after{display:none!important}
