/* Softriver Complete Brand Guidelines lock — 2026-09-09
   Tokens only. Do not invent additional brand colors. */
:root {
  --nc-primary: #0089CA;
  --nc-windsor: #0D182B;
  --nc-white: #FFFFFF;
  --nc-black: #000000;

  /* Official greyscale ladder */
  --nc-graphite: #6E7180;
  --nc-space: #9DA2B3;
  --nc-steel: #BCBFCC;
  --nc-smoke: #D3D6E0;
  --nc-cloud: #EDEFF7;

  --nc-font: "Geist", "Geist Fallback", ui-sans-serif, system-ui, sans-serif;

  /* Book hierarchy, adapted — desktop caps only; mobile keeps existing clamps */
  --nc-track-display: -0.03em;
  --nc-track-body: -0.02em;
  --nc-track-caption: 0em;
  --nc-fs-display: clamp(40px, 6vw, 100px);
  --nc-fs-h1: clamp(32px, 5.6vw, 88px);
  --nc-fs-h2: clamp(28px, 3.4vw, 48px);
  --nc-fs-h3: clamp(22px, 2.6vw, 36px);
  --nc-fs-h4: clamp(20px, 2vw, 28px);
  --nc-fs-body: 1.125rem;
  --nc-fs-caption: 0.8125rem;
}

html, body {
  font-family: var(--nc-font);
}

/* Server HTML is the first paint. The designer runtime used to hide x-dc
   until React replaced it. Static pages no longer load that runtime. */
x-dc {
  display: block;
}
helmet {
  display: none;
}

.n3-hero-poster,
.n3-hero-video {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  opacity: 0.4;
  filter: saturate(0.85) contrast(1.05);
}
@media (max-width: 860px), (prefers-reduced-motion: reduce) {
  .n3-hero-video {
    display: none !important;
  }
}
@media (min-width: 861px) and (prefers-reduced-motion: no-preference) {
  .n3-hero-poster {
    display: none;
  }
}

.nc-vimeo-btn {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  margin: 0;
  padding: 0;
  border: 0;
  background: #0D182B;
  cursor: pointer;
  display: block;
}
.nc-vimeo-btn img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}
.nc-vimeo-play {
  position: absolute;
  left: 50%;
  top: 50%;
  width: 68px;
  height: 68px;
  margin: 0;
  transform: translate(-50%, -50%);
  border-radius: 50%;
  background: rgba(13, 24, 43, 0.72);
  border: 2px solid #ffffff;
  box-sizing: border-box;
}
.nc-vimeo-play::before {
  content: "";
  position: absolute;
  left: 26px;
  top: 20px;
  border-style: solid;
  border-width: 14px 0 14px 22px;
  border-color: transparent transparent transparent #ffffff;
}
.nc-vimeo-btn:focus-visible {
  outline: 2px solid #ffffff;
  outline-offset: -6px;
}

/* Keep a figure, name, or phrase on one line. Break before the span. */
.n3-keep {
  white-space: nowrap;
  overflow-wrap: normal;
  word-break: keep-all;
}
/* Long display phrases that do not fit a phone. They stay intact from
   tablet up and wrap on ordinary spaces below 480px. */
@media (max-width: 480px) {
  .n3-keep-phrase {
    white-space: normal;
  }
}

/* Designer hydration rewrites hex inline colors to rgb(). Keep both
   forms so the rules match before and after JS. */
section[style*="background:#0D182B"] a[style*="background:#0089CA"]:hover,
section[style*="background: rgb(13, 24, 43)"] a[style*="background: rgb(0, 137, 202)"]:hover,
[data-norsten-nav] a[style*="background:#0089CA"]:hover,
[data-norsten-nav] a[style*="background: rgb(0, 137, 202)"]:hover {
  background: var(--nc-white) !important;
  color: var(--nc-windsor) !important;
}

/* Muted type on Cloud. Space (#9DA2B3) is ~2.22:1; Graphite is the
   next official greyscale step and reads ~4.2:1 on #EDEFF7. Footer was
   the known fail; apply/FDA labels on Cloud use the same pair. */
[style*="background:#EDEFF7"] [style*="color:#9DA2B3"],
[style*="background:#EDEFF7"] [style*="color: rgb(157, 162, 179)"],
[style*="background: rgb(237, 239, 247)"] [style*="color:#9DA2B3"],
[style*="background: rgb(237, 239, 247)"] [style*="color: rgb(157, 162, 179)"],
footer [style*="color:#9DA2B3"],
footer [style*="color: rgb(157, 162, 179)"] {
  color: var(--nc-graphite) !important;
}

/* Filled primary CTAs: white on #0089CA is ~3.89:1. A one-step darker fill
   clears 4.5:1 without adding a new brand color family. Hover rules above
   and inline style-hover still win once the attribute is no longer primary. */
a[style*="background:#0089CA"]:not(:hover),
a[style*="background: rgb(0, 137, 202)"]:not(:hover),
button[style*="background:#0089CA"]:not(:hover),
button[style*="background: rgb(0, 137, 202)"]:not(:hover) {
  background: #0077b3 !important;
}

/* Off-screen honeypot. Do not use display:none — bots skip that. */
.nc-hp {
  position: absolute;
  left: -10000px;
  top: auto;
  width: 1px;
  height: 1px;
  overflow: hidden;
}

/* Keyboard focus. Pages often set outline:none inline; :focus-visible
   puts a visible ring back without painting a ring on mouse click. */
a:focus-visible,
button:focus-visible,
input:focus-visible,
textarea:focus-visible,
select:focus-visible,
summary:focus-visible,
[tabindex]:focus-visible {
  outline: 2px solid var(--nc-primary) !important;
  outline-offset: 3px;
}
section[style*="background:#0D182B"] a:focus-visible,
section[style*="background: rgb(13, 24, 43)"] a:focus-visible,
section[style*="background:#0D182B"] button:focus-visible,
section[style*="background: rgb(13, 24, 43)"] button:focus-visible,
footer[style*="background:#0D182B"] a:focus-visible,
footer[style*="background: rgb(13, 24, 43)"] a:focus-visible,
a[style*="background:#0089CA"]:focus-visible,
a[style*="background: rgb(0, 137, 202)"]:focus-visible,
button[style*="background:#0089CA"]:focus-visible,
button[style*="background: rgb(0, 137, 202)"]:focus-visible,
.nc-consent-accept:focus-visible,
.nc-skip:focus-visible {
  outline-color: var(--nc-white) !important;
}

.nc-skip {
  position: absolute;
  left: -10000px;
  top: 0;
  z-index: 400;
  padding: 12px 20px;
  background: var(--nc-windsor);
  color: var(--nc-white);
  font-family: var(--nc-font);
  font-weight: 900;
  font-size: 13px;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  text-decoration: none;
}
.nc-skip:focus,
.nc-skip:focus-visible {
  left: 16px;
  top: 16px;
  outline: 2px solid var(--nc-primary);
  outline-offset: 3px;
}

#nc-consent {
  position: fixed;
  left: 0;
  right: 0;
  bottom: 0;
  z-index: 240;
  background: var(--nc-windsor);
  color: var(--nc-white);
  border-top: 1px solid rgba(168, 203, 234, 0.25);
}
.nc-consent-inner {
  max-width: 1440px;
  margin: 0 auto;
  padding: 20px 64px;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 24px;
  flex-wrap: wrap;
}
.nc-consent-copy {
  margin: 0;
  max-width: 62ch;
  font-family: var(--nc-font);
  font-weight: 400;
  font-size: 15px;
  line-height: 1.55;
  color: #A8CBEA;
}
.nc-consent-actions {
  display: flex;
  align-items: center;
  gap: 16px;
  flex-wrap: wrap;
}
.nc-consent-privacy {
  font-family: var(--nc-font);
  font-weight: 500;
  font-size: 12px;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--nc-primary);
  text-decoration: none;
}
.nc-consent-privacy:hover { color: var(--nc-white); }
.nc-consent-accept,
.nc-consent-decline {
  font-family: var(--nc-font);
  font-weight: 900;
  font-size: 13px;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  cursor: pointer;
  padding: 12px 22px;
}
.nc-consent-accept {
  background: #0077b3;
  border: none;
  color: var(--nc-white);
}
.nc-consent-decline {
  background: none;
  border: 2px solid #A8CBEA;
  color: var(--nc-white);
}
@media (max-width: 860px) {
  .nc-consent-inner { padding: 20px 24px 24px; }
  .nc-consent-accept, .nc-consent-decline { min-height: 44px; }
}

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }
  section[data-screen-label="01 Hero"] video,
  .n3-hero-video {
    display: none !important;
  }
}

/* Light type pass: book tracking, modest desktop scale. Mobile clamps in
   site-mobile.css and per-page helmets stay in charge below 861px. */
@media (min-width: 861px) {
  .n3-hero-h,
  .n3-disp,
  .n3-metric {
    letter-spacing: var(--nc-track-display) !important;
  }
  /* Article H2s share one clamp (40px). Nudge toward book H2 without
     forcing display titles that already sit near 88–150px. */
  .n3-ah {
    font-size: var(--nc-fs-h2) !important;
    letter-spacing: var(--nc-track-display) !important;
  }
  h1, h2, h3, h4 {
    letter-spacing: var(--nc-track-display) !important;
  }
  p {
    letter-spacing: var(--nc-track-body);
  }
}
