/* ═══════════════════════════════════════════════════════════════════════════
   SHARED PAGE STYLING

   The design tokens, the top bar, the footer, the form controls and the cards,
   in one place rather than copied into each page that wants them. Used by the
   Ambassador Programme pages, the application form and account setup; the
   ambassador dashboard loads it for the tokens and controls and brings its own
   shell in ambassador-dashboard.css. site-nav.css still owns the mobile drawer
   and the footer legal row, so nothing here restates those.

   Everything that lays out a *public page* - the fixed bar, the section
   rhythm, the footer - is scoped to `body.site`. Bare `nav`, `section` and
   `footer` selectors would otherwise land on any page that uses those elements
   for something else: the dashboard's sidebar is a <nav>, and inheriting
   `position: fixed; top: 0; left: 0; right: 0` turned it into a second top bar
   laid across the screen.
   ═══════════════════════════════════════════════════════════════════════════ */

:root {
  --green: #71fb78;
  --blue:  #56c4e9;
  --amber: #ffc247;
  --red:   #ff6b6b;
  --bg:    #020b18;
  --text:  #e2f0ff;
  --muted: #9ab0c9;
  --font-display: 'GothamCondensed', 'Arial Narrow', 'Helvetica Neue Condensed', Arial, sans-serif;
  --font-body:    'Exo 2', system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;
  --font-mono:    'Share Tech Mono', ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
}

@font-face { font-family: 'GothamCondensed'; src: url('GothamCondensed-Light.woff') format('woff'); font-weight: 300; font-style: normal; font-display: swap; }
@font-face { font-family: 'GothamCondensed'; src: url('GothamCondensed-Bold.woff')  format('woff'); font-weight: 900; font-style: normal; font-display: swap; }

* { margin: 0; padding: 0; box-sizing: border-box; }
html { scroll-behavior: smooth; background: #010810; }
body { background: transparent; color: var(--text); font-family: var(--font-body); overflow-x: hidden; }

::-webkit-scrollbar { width: 4px; }
::-webkit-scrollbar-track { background: var(--bg); }
::-webkit-scrollbar-thumb { background: var(--green); border-radius: 2px; }

/* ── NAV ─────────────────────────────────────────────────────────────────── */
body.site nav {
  position: fixed; top: 0; left: 0; right: 0; z-index: 1000;
  display: flex; align-items: center; justify-content: space-between;
  padding: 22px 60px; background: rgba(1, 8, 16, 0.6); backdrop-filter: blur(20px);
  border-bottom: 1px solid rgba(113, 251, 120, 0.07);
  transition: padding 0.3s ease, background 0.3s ease, border-color 0.3s ease;
}
body.site nav.scrolled { padding: 14px 60px; background: rgba(1, 8, 16, 0.96); border-bottom-color: rgba(113, 251, 120, 0.12); }
.nav-logo { display: flex; align-items: center; gap: 10px; text-decoration: none; flex-shrink: 0; }
.nav-logo-img { width: 36px; height: 36px; object-fit: contain; flex-shrink: 0; }
.nav-logo-text { display: flex; flex-direction: column; line-height: 1; }
.nav-logo-top { font-family: var(--font-display); font-size: 1.05rem; font-weight: 900; letter-spacing: 3px; text-transform: uppercase; color: var(--green); }
.nav-logo-sub { font-family: var(--font-display); font-size: 0.6rem; font-weight: 300; letter-spacing: 2.5px; text-transform: uppercase; color: rgba(86, 196, 233, 0.7); margin-top: 2px; }
.nav-links { display: flex; align-items: center; gap: 0; list-style: none; margin: 0 auto; }
.nav-links a {
  font-family: var(--font-display); font-size: 0.78rem; font-weight: 900; letter-spacing: 2.5px;
  text-transform: uppercase; text-decoration: none; color: rgba(255, 255, 255, 0.55); padding: 6px 18px;
  position: relative; transition: color 0.2s ease;
}
.nav-links a::after {
  content: ""; position: absolute; bottom: -2px; left: 18px; right: 18px; height: 1px;
  background: var(--green); transform: scaleX(0); transform-origin: left; transition: transform 0.25s ease;
}
.nav-links a:hover { color: #fff; }
.nav-links a:hover::after { transform: scaleX(1); }
.nav-links a.active { color: var(--green); }
.nav-links a.active::after { transform: scaleX(1); }
.nav-links li:not(:last-child)::after { content: "·"; color: rgba(255, 255, 255, 0.1); font-size: 0.7rem; pointer-events: none; }
.nav-right { display: flex; align-items: center; gap: 8px; flex-shrink: 0; }
.nav-hamburger { display: none; flex-direction: column; gap: 5px; cursor: pointer; padding: 4px; background: none; border: none; }
.nav-hamburger span { display: block; width: 22px; height: 1px; background: rgba(255, 255, 255, 0.5); transition: all 0.3s ease; }
.nav-hamburger:hover span { background: var(--green); }
@media (max-width: 1100px) { body.site nav { padding: 18px 32px; } body.site nav.scrolled { padding: 12px 32px; } .nav-links a { padding: 6px 12px; letter-spacing: 1.5px; } }
@media (max-width: 900px)  { body.site nav { padding: 16px 24px; } body.site nav.scrolled { padding: 12px 24px; } .nav-links { display: none; } .nav-hamburger { display: flex; } }

/* ── PAGE SHELL ──────────────────────────────────────────────────────────── */
body.site section { position: relative; z-index: 3; padding: 100px 60px; }
body.site footer  { position: relative; z-index: 3; }
.section-sep { position: relative; z-index: 3; height: 1px; margin: 0 60px; background: linear-gradient(90deg, transparent, rgba(0, 255, 174, 0.2), transparent); }
@media (max-width: 900px) { body.site section { padding: 70px 24px; } .section-sep { margin: 0 24px; } }

.tint-blue {
  background: #020b18; border-top: 1px solid rgba(255, 255, 255, 0.04); border-bottom: 1px solid rgba(255, 255, 255, 0.04);
  position: relative; overflow: hidden;
}
.tint-blue::after {
  content: ""; position: absolute; inset: 0; pointer-events: none;
  background-image: linear-gradient(rgba(125, 211, 252, 0.025) 1px, transparent 1px),
                    linear-gradient(90deg, rgba(125, 211, 252, 0.025) 1px, transparent 1px);
  background-size: 60px 60px;
}

.section-header { margin-bottom: 60px; position: relative; z-index: 2; }
.section-title-lg {
  font-family: var(--font-display); font-size: clamp(2.4rem, 5vw, 4rem); font-weight: 900;
  letter-spacing: 3px; text-transform: uppercase; line-height: 0.95; color: var(--green);
}
.section-sub-lg {
  font-family: var(--font-body); font-size: 1.02rem; font-weight: 300; color: #b8c7d9;
  line-height: 1.7; letter-spacing: 0.2px; margin-top: 18px; max-width: 680px;
}

/* ── HERO ────────────────────────────────────────────────────────────────── */
.amb-hero {
  position: relative; overflow: hidden; padding: 170px 60px 90px;
  background: radial-gradient(ellipse at 50% 20%, rgba(0, 60, 42, 0.22) 0%, transparent 65%),
              radial-gradient(ellipse at 80% 70%, rgba(20, 50, 90, 0.18) 0%, transparent 55%);
}
@media (max-width: 900px) { .amb-hero { padding: 130px 24px 70px; } }
.grid-bg {
  position: absolute; inset: 0; z-index: 0;
  background-image: linear-gradient(rgba(0, 255, 174, 0.03) 1px, transparent 1px),
                    linear-gradient(90deg, rgba(0, 255, 174, 0.03) 1px, transparent 1px);
  background-size: 60px 60px;
  mask-image: radial-gradient(ellipse at 50% 0%, black 20%, transparent 70%);
}
.amb-hero-content { position: relative; z-index: 3; max-width: 820px; }
.amb-eyebrow {
  font-family: var(--font-mono); font-size: 0.75rem; letter-spacing: 3px; text-transform: uppercase;
  color: rgba(113, 251, 120, 0.55); margin-bottom: 20px;
}
.amb-hero-title {
  font-family: var(--font-display); font-size: clamp(2.4rem, 6vw, 4.6rem); font-weight: 900;
  line-height: 1.05; letter-spacing: 2px; color: var(--green); margin-bottom: 22px;
  animation: title-in 1s ease forwards;
}
.amb-hero-title span { color: var(--blue); }
@keyframes title-in { from { opacity: 0; transform: translateY(30px); } to { opacity: 1; transform: translateY(0); } }
.amb-hero-sub {
  font-family: var(--font-body); font-size: 1.08rem; font-weight: 300; color: #c3d2e3;
  line-height: 1.75; letter-spacing: 0.2px; max-width: 660px;
  animation: title-in 1s 0.2s ease both;
}
.amb-hero-actions { display: flex; flex-wrap: wrap; gap: 16px; align-items: center; margin-top: 36px; animation: title-in 1s 0.35s ease both; }

/* ── BUTTONS ─────────────────────────────────────────────────────────────── */
.btn-cta {
  position: relative; display: inline-flex; align-items: center; justify-content: center; padding: 16px 44px;
  border: 1.5px solid var(--green); background: transparent; color: var(--green); font-family: var(--font-display);
  font-size: 1rem; font-weight: 900; letter-spacing: 3px; text-transform: uppercase; text-decoration: none;
  overflow: hidden; cursor: pointer; transition: color 0.25s ease, transform 0.25s ease;
}
.btn-cta::before { content: ""; position: absolute; inset: 0; background: var(--green); transform: scaleX(0); transform-origin: left; transition: transform 0.35s ease; z-index: -1; }
.btn-cta:hover:not(:disabled)::before { transform: scaleX(1); }
.btn-cta:hover:not(:disabled) { color: #020b18; transform: translateY(-2px); }
.btn-cta:disabled { opacity: 0.5; cursor: not-allowed; transform: none; }
.btn-cta.ghost { border-color: rgba(86, 196, 233, 0.6); color: var(--blue); }
.btn-cta.ghost::before { background: var(--blue); }
.btn-cta.sm { padding: 11px 26px; font-size: 0.85rem; letter-spacing: 2px; }

/* ── CARDS ───────────────────────────────────────────────────────────────── */
.amb-grid { display: grid; gap: 18px; position: relative; z-index: 2; }
.amb-grid.cols-2 { grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); }
.amb-grid.cols-3 { grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); }

.amb-card {
  border: 1px solid rgba(255, 255, 255, 0.08); background: rgba(255, 255, 255, 0.02);
  padding: 26px 26px 28px; position: relative; transition: border-color 0.25s ease, background 0.25s ease, transform 0.25s ease;
}
.amb-card:hover { border-color: rgba(113, 251, 120, 0.3); background: rgba(113, 251, 120, 0.03); transform: translateY(-3px); }
.amb-card h3 {
  font-family: var(--font-display); font-size: 1.15rem; font-weight: 900; letter-spacing: 2px;
  text-transform: uppercase; color: #fff; margin-bottom: 12px;
}
.amb-card p { font-size: 0.97rem; font-weight: 300; line-height: 1.75; color: var(--muted); }
.amb-card-num {
  font-family: var(--font-mono); font-size: 0.72rem; letter-spacing: 2px;
  color: rgba(86, 196, 233, 0.6); display: block; margin-bottom: 14px;
}

/* Benefits read as a checklist rather than prose - there are eleven of them. */
.benefit-list { display: grid; grid-template-columns: repeat(auto-fit, minmax(290px, 1fr)); gap: 2px; position: relative; z-index: 2; }
.benefit {
  display: flex; align-items: flex-start; gap: 14px; padding: 20px 22px;
  border: 1px solid rgba(255, 255, 255, 0.06); background: rgba(255, 255, 255, 0.015);
  transition: border-color 0.2s ease, background 0.2s ease;
}
.benefit:hover { border-color: rgba(113, 251, 120, 0.28); background: rgba(113, 251, 120, 0.04); }
.benefit-tick { flex-shrink: 0; width: 18px; height: 18px; margin-top: 3px; color: var(--green); }
.benefit-body strong { display: block; font-family: var(--font-body); font-size: 1rem; font-weight: 500; color: #fff; letter-spacing: 0.2px; }

/* ── ELIGIBILITY / PLAIN LISTS ───────────────────────────────────────────── */
.check-list { list-style: none; display: grid; gap: 14px; position: relative; z-index: 2; max-width: 780px; }
.check-list li {
  position: relative; padding-left: 30px; font-size: 1rem; font-weight: 300;
  line-height: 1.75; color: #b8c7d9; letter-spacing: 0.2px;
}
.check-list li::before {
  content: ""; position: absolute; left: 4px; top: 11px; width: 8px; height: 8px;
  border: 1px solid var(--green); transform: rotate(45deg);
}

/* ── FAQ ─────────────────────────────────────────────────────────────────── */
.faq { max-width: 860px; position: relative; z-index: 2; }
.faq details { border-bottom: 1px solid rgba(255, 255, 255, 0.08); }
.faq summary {
  list-style: none; cursor: pointer; padding: 22px 40px 22px 0; position: relative;
  font-family: var(--font-body); font-size: 1.05rem; font-weight: 500; color: #fff; letter-spacing: 0.2px;
}
.faq summary::-webkit-details-marker { display: none; }
.faq summary::after {
  content: "+"; position: absolute; right: 6px; top: 50%; transform: translateY(-50%);
  font-family: var(--font-mono); font-size: 1.3rem; color: var(--green); transition: transform 0.2s ease;
}
.faq details[open] summary::after { content: "−"; }
.faq summary:hover { color: var(--green); }
.faq-answer { padding: 0 0 24px; font-size: 0.98rem; font-weight: 300; line-height: 1.8; color: var(--muted); max-width: 74ch; }

/* ── FORMS ───────────────────────────────────────────────────────────────── */
.form-shell { max-width: 760px; position: relative; z-index: 2; }
.field { margin-bottom: 24px; }
.field label { display: block; font-family: var(--font-body); font-size: 0.92rem; color: #c3d2e3; margin-bottom: 9px; letter-spacing: 0.2px; }
.field .req { color: rgba(113, 251, 120, 0.8); }
.field input, .field textarea, .field select {
  width: 100%; background: rgba(255, 255, 255, 0.03); color: var(--text);
  border: 1px solid rgba(255, 255, 255, 0.12); padding: 13px 15px;
  font-family: var(--font-body); font-size: 1rem; letter-spacing: 0.2px;
  transition: border-color 0.2s ease, background 0.2s ease;
}
.field textarea { min-height: 140px; resize: vertical; line-height: 1.7; }
.field input:focus, .field textarea:focus, .field select:focus { outline: none; border-color: rgba(113, 251, 120, 0.6); background: rgba(255, 255, 255, 0.05); }
.field input::placeholder, .field textarea::placeholder { color: rgba(255, 255, 255, 0.28); }
.field input[aria-invalid="true"], .field textarea[aria-invalid="true"], .field .combo-input[aria-invalid="true"] { border-color: rgba(255, 107, 107, 0.75); }
.field-hint { margin-top: 8px; font-size: 0.86rem; font-weight: 300; color: rgba(255, 255, 255, 0.4); line-height: 1.6; }
.field-error { margin-top: 8px; font-size: 0.86rem; color: #ff8f8f; min-height: 1.1em; }
.field-row { display: grid; grid-template-columns: repeat(auto-fit, minmax(230px, 1fr)); gap: 0 20px; }

.form-fieldset { border: none; margin-bottom: 10px; }
.form-fieldset legend {
  font-family: var(--font-display); font-size: 0.8rem; font-weight: 900; letter-spacing: 3px;
  text-transform: uppercase; color: rgba(113, 251, 120, 0.65); padding: 0 0 20px;
}
.form-note { margin-top: 18px; font-family: var(--font-body); font-size: 0.95rem; line-height: 1.6; letter-spacing: 0.2px; min-height: 1.4em; }
.form-note.ok    { color: var(--green); }
.form-note.error { color: #ff8f8f; }

/* ── TICKS AND DOTS ──────────────────────────────────────────────────────────
   The browser's own checkbox is a grey system square that belongs to no design,
   and `accent-color` only repaints the middle of it. So the control is drawn
   here instead: appearance:none strips the native one, and the tick and the dot
   arrive as background images.

   The input itself is styled rather than hidden behind a label's pseudo-element.
   That keeps one element doing the job - focusable, keyboard-operable, and
   announced by a screen reader as the checkbox it still is - where the usual
   hide-and-redraw trick quietly takes all three away.

   Marks are SVG data URIs rather than pseudo-elements: ::before on a replaced
   element is not something every browser agrees to render, and a checkbox whose
   tick is invisible in one browser is worse than a plain one everywhere. */
body.site input[type="checkbox"],
body.site input[type="radio"],
body.db   input[type="checkbox"],
body.db   input[type="radio"] {
  appearance: none; -webkit-appearance: none;
  flex-shrink: 0; display: inline-block; position: relative;
  width: 20px; height: 20px; margin: 0; padding: 0; cursor: pointer;
  border: 1.5px solid rgba(255, 255, 255, 0.22);
  border-radius: 5px;
  background: rgba(255, 255, 255, 0.04);
  background-repeat: no-repeat; background-position: center; background-size: 78%;
  transition: border-color 0.16s ease, background-color 0.16s ease, box-shadow 0.16s ease;
}
body.site input[type="radio"], body.db input[type="radio"] { border-radius: 50%; background-size: 52%; }

body.site input[type="checkbox"]:hover, body.db input[type="checkbox"]:hover,
body.site input[type="radio"]:hover,    body.db input[type="radio"]:hover {
  border-color: rgba(113, 251, 120, 0.55); background-color: rgba(113, 251, 120, 0.07);
}

body.site input[type="checkbox"]:checked, body.db input[type="checkbox"]:checked {
  border-color: var(--green);
  background-color: rgba(113, 251, 120, 0.16);
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2371fb78' stroke-width='3.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4.5 12.6l5.2 5.2L19.5 7'/%3E%3C/svg%3E");
}
body.site input[type="radio"]:checked, body.db input[type="radio"]:checked {
  border-color: var(--green);
  background-color: rgba(113, 251, 120, 0.16);
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='12' fill='%2371fb78'/%3E%3C/svg%3E");
}

/* A ring rather than an outline, so it follows the rounded corners. Only for
   keyboard focus - a mouse click should not leave one behind. */
body.site input[type="checkbox"]:focus-visible, body.db input[type="checkbox"]:focus-visible,
body.site input[type="radio"]:focus-visible,    body.db input[type="radio"]:focus-visible {
  outline: none; box-shadow: 0 0 0 3px rgba(113, 251, 120, 0.3);
}
body.site input[type="checkbox"]:disabled, body.db input[type="checkbox"]:disabled,
body.site input[type="radio"]:disabled,    body.db input[type="radio"]:disabled {
  opacity: 0.4; cursor: not-allowed;
}

.agree {
  display: flex; align-items: flex-start; gap: 15px; padding: 20px 22px; margin-bottom: 26px;
  border: 1px solid rgba(255, 255, 255, 0.1); background: rgba(255, 255, 255, 0.02);
  transition: border-color 0.18s ease, background 0.18s ease;
}
.agree:hover { border-color: rgba(255, 255, 255, 0.16); }
/* Ticked, the whole panel says so rather than just the little square in it. */
.agree:has(input:checked) { border-color: rgba(113, 251, 120, 0.35); background: rgba(113, 251, 120, 0.045); }
.agree input { margin-top: 3px; }
.agree label { display: block; margin: 0; font-size: 0.95rem; font-weight: 300; line-height: 1.7; color: #b8c7d9; cursor: pointer; }
.agree:has(input:checked) label { color: #d6e4f3; }
.agree a { color: var(--blue); }

/* The published ambassador roll. Cards rather than a list, because a name with
   a school and a sentence under it reads as a person; a bullet does not. */
.roll-grid {
  display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: 18px;
  max-width: 1200px; margin: 0 auto; position: relative; z-index: 2;
}
.roll-card {
  padding: 26px 24px; border: 1px solid rgba(255, 255, 255, 0.08);
  background: rgba(255, 255, 255, 0.02); transition: border-color 0.2s ease, background 0.2s ease;
}
.roll-card:hover { border-color: rgba(113, 251, 120, 0.3); background: rgba(113, 251, 120, 0.04); }
.roll-card.featured { border-color: rgba(113, 251, 120, 0.4); background: rgba(113, 251, 120, 0.06); }
.roll-card h3 { font-size: 1.12rem; font-weight: 500; color: #fff; letter-spacing: 0.2px; }
.roll-role {
  margin-top: 6px; font-family: var(--font-mono); font-size: 0.75rem; letter-spacing: 2px;
  text-transform: uppercase; color: var(--green);
}
.roll-where { margin-top: 10px; font-size: 0.92rem; font-weight: 300; color: #b8c7d9; }
.roll-bio {
  margin-top: 12px; font-size: 0.92rem; font-weight: 300; line-height: 1.75;
  color: rgba(255, 255, 255, 0.55);
}

/* A grid of tick boxes - the subjects somebody wants to be asked about. Laid out
   in columns that reflow rather than a fixed number, so twelve of them read as a
   short list on a laptop and a single column on a phone. The whole box is the
   target, not just the 20px square. */
.pick-grid {
  display: grid; grid-template-columns: repeat(auto-fill, minmax(215px, 1fr)); gap: 10px;
}
/* Written as `.pick-grid .pick-box`, not `.pick-box`, and that is the whole
   reason the tick and its word used to sit flush against each other: these
   labels live inside a `.field`, and `.field label { display: block }` outranks
   a single class. The row was never a flex row, so its gap was never applied.
   Two classes settle it whatever order the file ends up in. */
.pick-grid .pick-box {
  display: flex; align-items: center; gap: 13px; margin: 0;
  padding: 15px 17px; cursor: pointer;
  border: 1px solid rgba(255, 255, 255, 0.1); border-radius: 4px;
  background: rgba(255, 255, 255, 0.02);
  font-family: var(--font-body); font-size: 0.95rem; font-weight: 300;
  letter-spacing: 0.2px; color: #b8c7d9;
  transition: border-color 0.18s ease, background 0.18s ease, color 0.18s ease, transform 0.12s ease;
  user-select: none;
}
.pick-grid .pick-box:hover { border-color: rgba(113, 251, 120, 0.35); background: rgba(255, 255, 255, 0.04); color: #fff; }
/* A press that moves confirms the box is the control, not the little square. */
.pick-grid .pick-box:active { transform: scale(0.985); }
.pick-grid .pick-box input { width: 19px; height: 19px; }
.pick-grid .pick-box span { flex: 1; min-width: 0; }
.pick-grid .pick-box:has(input:checked) {
  border-color: rgba(113, 251, 120, 0.5); background: rgba(113, 251, 120, 0.07);
  color: #fff; font-weight: 400;
}
/* On the card, not the input: the ring belongs to whatever the eye reads as the
   control, and here that is the whole box. */
.pick-grid .pick-box:focus-within { border-color: rgba(113, 251, 120, 0.6); box-shadow: 0 0 0 3px rgba(113, 251, 120, 0.22); }
.pick-grid .pick-box:focus-within input { box-shadow: none; }

/* Searchable country picker. A <datalist> is the cheap version and behaves
   differently in every browser, so the list is drawn here: one input, one
   filtered listbox, arrow keys and Enter. */
.combo { position: relative; }
.combo-list {
  position: absolute; top: calc(100% + 4px); left: 0; right: 0; z-index: 40;
  max-height: 260px; overflow-y: auto; background: #04101d;
  border: 1px solid rgba(113, 251, 120, 0.28); display: none;
}
.combo-list.open { display: block; }
.combo-list li {
  list-style: none; padding: 11px 15px; font-size: 0.97rem; color: #c3d2e3; cursor: pointer;
  border-bottom: 1px solid rgba(255, 255, 255, 0.04);
}
.combo-list li:last-child { border-bottom: none; }
.combo-list li[aria-selected="true"], .combo-list li:hover { background: rgba(113, 251, 120, 0.12); color: #fff; }
.combo-empty { padding: 14px 15px; font-size: 0.92rem; color: rgba(255, 255, 255, 0.35); }

/* ── STATUS BANNER ───────────────────────────────────────────────────────── */
.banner {
  display: flex; gap: 14px; align-items: flex-start; padding: 18px 22px; margin-bottom: 32px;
  border-left: 3px solid var(--amber); background: rgba(255, 194, 71, 0.07);
  font-size: 0.97rem; font-weight: 300; line-height: 1.7; color: #e3d7bd;
}
.banner.ok  { border-left-color: var(--green); background: rgba(113, 251, 120, 0.07); color: #cdf3cf; }
.banner.bad { border-left-color: var(--red);   background: rgba(255, 107, 107, 0.07); color: #f3cdcd; }
.banner strong { color: #fff; font-weight: 600; }

/* An author `display` beats the `hidden` attribute's UA display:none, so any
   element styled display:flex here goes on painting after JavaScript hides it -
   an empty coloured bar above the form, a spinner that never leaves. Stated once
   for everything in this file rather than remembered per rule. Same trap as
   .nav-drawer[hidden] in site-nav.css. */
[hidden] { display: none !important; }

/* ── FOOTER ──────────────────────────────────────────────────────────────── */
body.site footer { background: #010810; border-top: 1px solid rgba(0, 255, 174, 0.07); padding: 72px 60px 40px; }
.footer-inner { max-width: 1100px; margin: 0 auto; }
.footer-brand-row { display: flex; align-items: baseline; gap: 12px; margin-bottom: 48px; }
.footer-logo-text { font-family: var(--font-display); font-size: 1.6rem; font-weight: 900; letter-spacing: 4px; text-transform: uppercase; color: var(--green); }
.footer-logo-sub  { font-family: var(--font-display); font-size: 0.75rem; font-weight: 300; letter-spacing: 3px; text-transform: uppercase; color: rgba(86, 196, 233, 0.75); }
.footer-divider { height: 1px; background: rgba(255, 255, 255, 0.05); margin-bottom: 48px; }
.footer-cols { display: grid; grid-template-columns: max-content max-content; justify-content: space-between; gap: 40px 80px; margin-bottom: 48px; }
.footer-col h4 { font-family: var(--font-display); font-size: 0.62rem; font-weight: 900; letter-spacing: 3px; text-transform: uppercase; color: rgba(113, 251, 120, 0.45); margin-bottom: 20px; }
.footer-links { list-style: none; display: flex; flex-direction: column; gap: 11px; }
.footer-links a { font-family: var(--font-body); font-size: 0.92rem; font-weight: 300; color: var(--muted); text-decoration: none; letter-spacing: 0.2px; transition: color 0.2s ease; }
.footer-links a:hover { color: #e2f0ff; }
.footer-copy { font-family: var(--font-display); font-size: 0.78rem; font-weight: 300; color: rgba(255, 255, 255, 0.52); letter-spacing: 1.5px; text-transform: uppercase; }
@media (max-width: 900px) { body.site footer { padding: 56px 24px 32px; } .footer-cols { gap: 48px; } }
@media (max-width: 500px) { .footer-cols { grid-template-columns: 1fr; justify-content: start; } }

/* ── REVEAL ──────────────────────────────────────────────────────────────── */
.reveal { opacity: 0; transform: translateY(30px); transition: opacity 0.7s ease, transform 0.7s ease; }
.reveal.visible { opacity: 1; transform: translateY(0); }
/* Without JavaScript nothing adds .visible, and the whole page would stay
   invisible. The `js` class is set by an inline script in <head>. */
html:not(.js) .reveal { opacity: 1; transform: none; }
.reveal-delay-1 { transition-delay: 0.08s; }
.reveal-delay-2 { transition-delay: 0.16s; }

@media (prefers-reduced-motion: reduce) {
  .reveal { opacity: 1; transform: none; transition: none; }
  .amb-hero-title, .amb-hero-sub, .amb-hero-actions { animation: none; }
  .amb-card:hover { transform: none; }
  html { scroll-behavior: auto; }
}
