/* ═══════════════════════════════════════════════════════════════════════════
   NOVUS — BASE
   Reset, document surface, typography defaults, focus, motion policy.
   ═══════════════════════════════════════════════════════════════════════════ */

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

html{
  -webkit-text-size-adjust:100%;
  scroll-behavior:smooth;
  /* The sticky header must never cover an anchor target. */
  scroll-padding-top:96px;
}

body{
  background:var(--bg);
  color:var(--ink);
  font-family:var(--sans);
  font-size:var(--t-body);
  line-height:1.62;
  font-feature-settings:'cv02','cv03','cv04','ss01';
  -webkit-font-smoothing:antialiased;
  -moz-osx-font-smoothing:grayscale;
  text-rendering:optimizeLegibility;
  overflow-x:hidden;
}
body.menu-open{ overflow:hidden; }

/* THE FIELD — a fixed layer rather than background-attachment:fixed, which
   iOS Safari ignores and which costs a full repaint per scroll frame
   everywhere else. Two extremely quiet washes; no gradient ever announces
   itself. */
body::before{
  content:''; position:fixed; inset:0; z-index:-2; pointer-events:none;
  background:
    radial-gradient(120% 62% at 50% -6%, rgba(78,155,255,.055), transparent 60%),
    radial-gradient(90% 60% at 100% 104%, rgba(14,36,86,.34), transparent 62%),
    linear-gradient(180deg,#07080A 0%,#0A0B0E 34%,#08090C 100%);
}
/* Fine grain. Stops large dark fields from banding on cheap panels and adds
   the tooth that makes a dark page read as printed rather than emitted. */
body::after{
  content:''; position:fixed; inset:0; z-index:-1; pointer-events:none;
  opacity:.032; mix-blend-mode:overlay;
  background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 220 220' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
}

svg{ display:block; }
img{ max-width:100%; height:auto; display:block; }

a{ color:inherit; text-decoration:none; }
button{ font:inherit; color:inherit; background:none; border:none; cursor:pointer; }
ul,ol{ list-style:none; }

::selection{ background:rgba(78,155,255,.26); color:#fff; }

/* ── TYPOGRAPHY DEFAULTS ─────────────────────────────────────────────────── */
h1,h2,h3,h4{
  font-family:var(--serif);
  font-weight:400;
  font-variation-settings:'SOFT' 0,'WONK' 0;
  letter-spacing:-.018em;
  line-height:1.07;
  text-wrap:balance;
}
h1{ font-size:var(--t-h1); }
h2{ font-size:var(--t-h2); }
h3{ font-size:var(--t-h3); line-height:1.18; letter-spacing:-.012em; }
h4{ font-size:var(--t-h4); line-height:1.3; letter-spacing:-.008em; }

p{ text-wrap:pretty; }

strong{ font-weight:600; color:var(--ink); }

/* ── FOCUS ───────────────────────────────────────────────────────────────── */
:focus{ outline:none; }
:focus-visible{
  outline:2px solid var(--blue);
  outline-offset:3px;
  border-radius:var(--r-xs);
}

.skip{
  position:absolute; left:var(--gutter); top:12px; z-index:200;
  transform:translateY(-160%);
  padding:11px 18px; border-radius:var(--r-sm);
  background:var(--bg-3); border:1px solid var(--hair-2);
  font-size:var(--t-sm); font-weight:600;
  transition:transform .2s var(--ease);
}
.skip:focus-visible{ transform:translateY(0); }

.sr{
  position:absolute; width:1px; height:1px; padding:0; margin:-1px;
  overflow:hidden; clip:rect(0 0 0 0); white-space:nowrap; border:0;
}

/* ── MOTION POLICY ───────────────────────────────────────────────────────────
   Rule 10: the site must look exceptional with animation switched off. Every
   reveal is a transition FROM a shifted state TO the real one, so disabling
   motion simply lands the page in its finished composition. */
@media (prefers-reduced-motion:reduce){
  html{ scroll-behavior:auto; }
  *,*::before,*::after{
    animation-duration:.001ms !important;
    animation-iteration-count:1 !important;
    transition-duration:.001ms !important;
    scroll-behavior:auto !important;
  }
  .reveal,.reveal-child{ opacity:1 !important; transform:none !important; }
  .f-act{ opacity:1 !important; }
  .conf u::after{ transform:scaleX(1) !important; }
}
