/* Nording & Partners — site styles
   Tokens from the N&P Rebrand design system. Hairlines, not boxes. */

@font-face {
  font-family: "Noto Sans";
  font-weight: 400;
  font-display: swap;
  src: url("../fonts/noto-sans-latin-400-normal.woff2") format("woff2");
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: "Noto Sans";
  font-weight: 400;
  font-display: swap;
  src: url("../fonts/noto-sans-latin-ext-400-normal.woff2") format("woff2");
  unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* Gelasio shares Georgia's metrics: used only where Georgia is not installed (Android, Linux). */
@font-face {
  font-family: "Gelasio";
  font-weight: 400;
  font-display: swap;
  src: url("../fonts/gelasio-latin-400-normal.woff2") format("woff2");
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: "Gelasio";
  font-weight: 400;
  font-display: swap;
  src: url("../fonts/gelasio-latin-ext-400-normal.woff2") format("woff2");
  unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
}

:root {
  --navy: #101b2a;
  --steel: #4579a0;
  --stone: #c0c3bb;
  --ink: #101b2a;
  --ink-muted: #575e6a;
  --ink-faint: #8d9199;
  --surface: #ffffff;
  --surface-alt: #f5f5f3;
  --rule: #dfe1dc;
  --portrait-bg: #cecece;

  --font-serif: Georgia, Gelasio, "Times New Roman", Times, serif;
  --font-sans: "Noto Sans", Aptos, "Segoe UI", sans-serif;

  --container: 1120px;
  --gutter: 24px;
  --section: clamp(36px, 4.5vw, 56px);
  --section-tight: clamp(24px, 3.2vw, 40px);
  --section-wide: clamp(72px, 9vw, 112px);
  --section-mid: clamp(56px, 7vw, 88px);
}

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

html { scroll-behavior: smooth; }

body {
  margin: 0;
  font-family: var(--font-sans);
  font-size: 16px;
  line-height: 1.6;
  color: var(--ink);
  background: var(--surface);
  -webkit-font-smoothing: antialiased;
}

a { color: var(--steel); text-decoration: none; }
a:hover { color: var(--ink); text-decoration: underline; }

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

h1, h2, h3 {
  margin: 0;
  font-family: var(--font-serif);
  font-weight: 400;
}

p, ul { margin: 0; }

.container {
  max-width: var(--container);
  width: 100%;
  margin: 0 auto;
  padding-left: var(--gutter);
  padding-right: var(--gutter);
}

.skip-link {
  position: absolute;
  left: -9999px;
  top: 8px;
  padding: 8px 12px;
  background: var(--surface);
  color: var(--ink);
}
.skip-link:focus { left: 8px; z-index: 10; }

/* Type styles */
.eyebrow {
  font-size: 12px;
  line-height: 1.2;
  letter-spacing: 2px;
  text-transform: uppercase;
  color: var(--ink-muted);
}
.title {
  font-size: 40px;
  line-height: 1.15;
  letter-spacing: -0.25px;
}
.heading {
  font-size: 26px;
  line-height: 1.25;
}
.lead { font-size: 18px; line-height: 1.5; }
.muted { color: var(--ink-muted); }
.small { font-size: 14px; line-height: 1.5; }
.measure { max-width: 720px; }

/* Compact header: fixed to the top, slides in once the hero's nav has scrolled out */
:root { --topbar-h: 52px; }
.topbar {
  position: fixed;
  top: 0; left: 0; right: 0;
  height: var(--topbar-h);
  background: var(--surface);
  border-bottom: 1px solid var(--rule);
  z-index: 20;
  transform: translateY(-100%);
  visibility: hidden;
  transition: transform 300ms ease, visibility 0s linear 300ms;
}
.topbar.is-shown {
  transform: translateY(0);
  visibility: visible;
  transition: transform 300ms ease, visibility 0s;
}
.topbar__inner {
  height: 100%;
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 16px 32px;
}
.topbar__logo { display: inline-flex; align-items: center; }
.topbar__logo img { height: 20px; width: auto; }
.topbar__links {
  display: flex;
  gap: 8px 32px;
  font-size: 14px;
  letter-spacing: 0.3px;
}
.topbar__links a { color: var(--ink); padding: 8px 0; }
.topbar__links a:hover { color: var(--steel); text-decoration: none; }
section[id] { scroll-margin-top: calc(var(--topbar-h) + 16px); }

/* Hero */
.hero {
  position: relative;
  overflow: hidden;
  background: var(--navy);
  min-height: clamp(320px, 45vh, 420px);
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  color: #fff;
}
.hero__image {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center 42%;
}
.hero__nav {
  position: relative;
  padding-top: 24px;
  display: flex;
  flex-wrap: wrap;
  justify-content: space-between;
  align-items: center;
  gap: 16px 32px;
}
.hero__logo { display: inline-flex; align-items: center; }
.hero__logo img { height: 32px; width: auto; }
.hero__links {
  display: flex;
  flex-wrap: wrap;
  gap: 8px 32px;
  font-size: 14px;
  letter-spacing: 0.3px;
}
.hero__links a { color: #fff; padding: 8px 0; min-height: 28px; }
.hero__links a:hover { color: #fff; }
.hero__statement {
  position: relative;
  padding-top: 40px;
  padding-bottom: 36px;
}
.hero h1 {
  max-width: 760px;
  font-size: clamp(32px, 4vw, 48px);
  line-height: 1.1;
  letter-spacing: -0.5px;
  color: #fff;
}

/* Fold: hero + intro, sized so the next section's head and the three competency
   headings sit just inside the first viewport (about 230px of them), above the bar */
:root { --bar-h: 44px; --peek: 230px; }
.fold {
  min-height: calc(100vh - var(--peek) - var(--bar-h));
  min-height: calc(100dvh - var(--peek) - var(--bar-h));
  display: flex;
  flex-direction: column;
}

/* Intro. The bottom padding is the floor: about three body lines (3 × 16px × 1.6)
   between "Reach out" and the rule above What we do on compressed viewports */
.intro {
  flex: 1;
  display: flex;
  flex-direction: column;
  padding: var(--section) 0 76px;
}
.intro .container { display: flex; flex-direction: column; gap: 16px; }

/* Whatever room is left on taller viewports; the chevron shows only when there is enough of it */
.intro__space {
  flex: 1 1 0;
  min-height: 0;
  container-type: size;
  display: flex;
  align-items: center;
  justify-content: center;
}
.scroll-hint {
  display: none;
  position: relative;
  top: 15%; /* sits a little below the centre of the space */
  color: var(--rule); /* same as the divider above What we do */
  transition: opacity 400ms ease;
}
@container (min-height: 140px) {
  .scroll-hint { display: block; }
}
.scroll-hint.is-hidden { opacity: 0; }

/* Sections fade in with scroll (opacity is set by the script; full without it) */
.reveal { opacity: 1; }

/* Fixed bar on the bottom edge: the label of the section not yet scrolled in */
.next-bar {
  position: fixed;
  left: 0; right: 0; bottom: 0;
  height: var(--bar-h);
  background: var(--surface);
  border-top: 1px solid var(--rule);
  z-index: 10;
  transition: opacity 300ms ease, transform 300ms ease;
}
.next-bar.is-hidden { opacity: 0; transform: translateY(100%); pointer-events: none; }
.next-bar__label {
  display: block;
  padding-top: 15px;
  padding-bottom: 15px;
  line-height: 14px;
  color: var(--ink-muted);
  text-decoration: none;
  transition: opacity 220ms ease;
}
.next-bar__label:hover { color: var(--ink); text-decoration: none; }
.next-bar__label.is-swapping { opacity: 0; }

/* What we do */
.work { padding-bottom: var(--section-wide); }
.work .container {
  border-top: 1px solid var(--rule);
  padding-top: 24px;
  display: flex;
  flex-direction: column;
  gap: 48px;
}
.section-head { display: flex; flex-direction: column; gap: 8px; }
.grid-3 {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
  gap: 40px 48px;
}
.competency { display: flex; flex-direction: column; gap: 16px; }

/* Cross-cutting band */
.band {
  position: relative;
  padding-top: 32px;
  display: flex;
  flex-direction: column;
  gap: 32px;
}
.band__rule {
  position: absolute;
  left: 0; right: 0; top: -8px;
  height: 16px;
  display: flex;
  align-items: center;
}
.band__rule svg { display: block; flex: none; }
.band__rule .line { flex: 1; height: 1px; background: var(--navy); }
.band__intro { display: flex; flex-direction: column; gap: 16px; }
.band__intro .heading { text-align: center; }
.band__lists {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
  gap: 24px 48px;
}
.band__list { display: flex; flex-direction: column; gap: 10px; }
.dashes {
  padding-left: 18px;
  list-style: "–  " outside;
  display: flex;
  flex-direction: column;
  gap: 6px;
  font-size: 14px;
  line-height: 1.5;
  color: var(--ink-muted);
}

/* Team */
.team {
  background: var(--surface-alt);
  padding: var(--section-wide) 0; /* top matches the space below the last AI bullet */
}
.team .container { display: flex; flex-direction: column; gap: 48px; }
.team__grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(230px, 1fr));
  gap: 56px 32px;
}
.person { display: flex; flex-direction: column; gap: 12px; }
.person .heading { font-size: 23px; }
.person__role {
  display: flex;
  align-items: center;
  gap: 6px;
}
.person__partner { display: inline-flex; align-items: center; }
.person__partner img {
  height: 16px;
  width: auto;
  position: relative;
  top: -1px;
}
.person__photo {
  position: relative;
  aspect-ratio: 8 / 5;
  background: var(--portrait-bg);
  overflow: hidden;
}
.person__photo img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: right top;
}
[hidden] { display: none !important; }

.person__initials {
  display: none; /* kept in the markup; remove this line to show the initials again */
  position: absolute;
  left: 16px;
  bottom: 12px;
  font-family: var(--font-serif);
  font-size: 28px;
  line-height: 1;
  color: var(--ink-faint);
}
.person h3 { margin-top: 12px; }
.person__contact { margin-top: auto; padding-top: 4px; font-size: 14px; line-height: 1.7; }

/* Careers & contact */
.careers { padding-top: var(--section-wide); }
.careers .container {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
  gap: 24px 64px;
  padding-bottom: var(--section-mid);
  border-bottom: 1px solid var(--rule);
}
.careers__text {
  display: flex;
  flex-direction: column;
  gap: 16px;
  grid-column: span 2;
  max-width: 720px;
}
@media (max-width: 679px) { .careers__text { grid-column: auto; } }

.contact { padding: var(--section-mid) 0 var(--section-wide); }
.contact .container {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
  gap: 24px 64px;
}
.contact__block { display: flex; flex-direction: column; gap: 8px; }

/* Footer */
.footer { padding-bottom: 48px; }
.footer .container {
  border-top: 1px solid var(--rule);
  padding-top: 32px;
  display: flex;
  flex-wrap: wrap;
  justify-content: space-between;
  align-items: center;
  gap: 16px 32px;
}
.footer img { height: 22px; width: auto; }
.footer p { font-size: 12px; line-height: 1.4; color: var(--ink-muted); }

@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  .reveal { opacity: 1 !important; }
  .next-bar, .next-bar__label, .scroll-hint, .topbar { transition: none; }
}
