/* ==========================================================================
   Assertica — New Era inner-page primitives
   --------------------------------------------------------------------------
   Inner pages are read, not experienced. They keep the void, the glass and the
   cinematic display face, but drop the seven-phase scroll story: the field is
   pinned to a single phase and dimmed (`data-phase` / `data-gain` on `.ne`).
   Everything is scoped under `.ne`. Requires tokens.css + new-era.css.
   ========================================================================== */

.ne-page {
  position: relative;
  z-index: 2;
  max-width: var(--ne-container);
  margin: 0 auto;
  padding: 0 var(--space-6, 2rem);
}

/* --- page header --------------------------------------------------------- */

.ne-page-header {
  padding: clamp(7rem, 15vh, 10rem) 0 clamp(2.5rem, 5vw, 4rem);
}

/* The measure belongs on the headline, not the container. `ch` resolves against
   the element's own font — put it on the wrapper and it is computed from the
   1rem body face, which at a 5.6rem display size wraps one word per line. */
.ne-page-header .ne-h {
  margin-top: 1.5rem;
  max-width: 16ch;
}

.ne-page-header.is-wide .ne-h { max-width: 20ch; }

.ne-page-header .ne-lead { max-width: 58ch; }

/* --- generic section ----------------------------------------------------- */

.ne-section { padding: clamp(3rem, 6vw, 5.5rem) 0; }
.ne-section + .ne-section { border-top: 1px solid var(--glass-border); }

.ne-section__head { margin-bottom: 2.5rem; max-width: 62ch; }

.ne-section__head h2 {
  margin: 1.1rem 0 0;
  font-family: var(--font-display);
  font-weight: 400;
  font-size: clamp(1.9rem, 3.2vw, 2.9rem);
  line-height: 1.12;
  letter-spacing: var(--tracking-cinematic);
  color: var(--ink-bright);
}

.ne-section__head p {
  margin: 1rem 0 0;
  font-size: var(--text-lead, 1.15rem);
  line-height: var(--leading-normal, 1.6);
  color: var(--ink-body);
}

/* --- grids --------------------------------------------------------------- */

.ne-grid { display: grid; gap: 1rem; }
.ne-grid.cols-2 { grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); }
.ne-grid.cols-3 { grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); }
.ne-grid.cols-4 { grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); }

/* --- service block — a numbered, expanded service ------------------------ */

.ne-service {
  display: grid;
  grid-template-columns: 5.5rem 1fr 1fr;
  gap: clamp(1.5rem, 3vw, 3rem);
  padding: clamp(1.75rem, 3vw, 2.5rem) 0;
  border-top: 1px solid var(--glass-border);
  align-items: start;
}

.ne-service:last-child { border-bottom: 1px solid var(--glass-border); }

.ne-service__index {
  font-family: var(--font-display);
  font-size: 1.05rem;
  font-weight: 500;
  color: var(--orange);
  letter-spacing: var(--tracking-label, 1px);
}

.ne-service h3 {
  margin: 0 0 0.75rem;
  font-family: var(--font-display);
  font-weight: 400;
  font-size: clamp(1.4rem, 2.1vw, 1.85rem);
  line-height: 1.15;
  letter-spacing: var(--tracking-tight, -0.5px);
  color: var(--ink-bright);
}

.ne-service p {
  margin: 0;
  font-size: var(--text-base, 1rem);
  line-height: var(--leading-normal, 1.6);
  color: var(--ink-body);
}

.ne-service ul {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  gap: 0.6rem;
}

.ne-service li {
  position: relative;
  padding-left: 1.25rem;
  font-size: var(--text-sm, 0.9rem);
  line-height: var(--leading-normal, 1.6);
  color: var(--ink-body);
}

.ne-service li::before {
  content: '';
  position: absolute;
  left: 0;
  top: 0.62em;
  width: 6px;
  height: 1px;
  background: var(--orange);
}

/* Two-column variant for a service block sitting inside a narrow column, where
   the three-column form has nowhere near enough room. */
.ne-service.is-stacked { grid-template-columns: 3.25rem 1fr; gap: 0.75rem 1.25rem; }
.ne-service.is-stacked > p { grid-column: 2; }

@media (max-width: 900px) {
  .ne-service,
  .ne-service.is-stacked { grid-template-columns: 1fr; gap: 1rem; }
  .ne-service.is-stacked > p { grid-column: 1; }
}

/* --- animated workflow ---------------------------------------------------
   A connected sequence rather than a row of parallel boxes: a rail draws
   between the markers as the block scrolls, and each step lights when the rail
   reaches it. `flow.js` sets --seg (0→1 fill of the rail leaving each step)
   and toggles .is-active.

   Un-armed — no JS, or reduced motion — this renders fully drawn. Only the
   `.is-armed` class opts into dim-then-reveal, and only JS adds it. */

/* Vertical is the base layout; the horizontal rail is the enhancement. That
   way `.is-vertical` — for a flow inside a narrow column — is just "opt out of
   the enhancement" rather than a second copy of the rules. */
.ne-flow {
  --flow-steps: 5;
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  grid-template-columns: 1fr;
  gap: 0;
}

.ne-flow__step {
  position: relative;
  padding: 0 0 2.25rem 3.9rem;
}

.ne-flow__step:last-child { padding-bottom: 0; }

.ne-flow__marker {
  position: absolute;
  top: 0;
  left: 0;
  z-index: 1;
  display: grid;
  place-items: center;
  width: 44px;
  height: 44px;
  border: 1px solid var(--glass-border);
  border-radius: 50%;
  background: var(--void-2);
  font-family: var(--font-display);
  font-size: 0.8rem;
  font-weight: 500;
  letter-spacing: 0.5px;
  color: var(--ink-muted);
  transition: color var(--dur-base, 0.3s) var(--ease-cine),
              border-color var(--dur-base, 0.3s) var(--ease-cine),
              background var(--dur-base, 0.3s) var(--ease-cine),
              box-shadow var(--dur-base, 0.3s) var(--ease-cine);
}

.ne-flow__step.is-active .ne-flow__marker {
  color: var(--white);
  border-color: var(--orange);
  background: var(--orange);
  box-shadow: 0 0 0 6px rgba(249, 115, 22, 0.14),
              var(--shadow-orange, 0 8px 30px rgba(249, 115, 22, 0.35));
}

/* The rail leaving this step, running down to the next marker. */
.ne-flow__rail {
  position: absolute;
  top: 44px;
  left: 21px;
  width: 1px;
  height: calc(100% - 44px);
  background: var(--glass-border);
  overflow: hidden;
}

.ne-flow__step:last-child .ne-flow__rail { display: none; }

.ne-flow__rail i {
  display: block;
  width: 100%;
  height: 100%;
  background: linear-gradient(180deg, var(--orange), var(--orange-light));
  transform: scaleY(1);
  transform-origin: center top;
}

.ne-flow.is-armed .ne-flow__rail i {
  transform: scaleY(var(--seg, 0));
  transition: transform 0.5s var(--ease-cine);
}

.ne-flow__body { transition: opacity 0.5s var(--ease-cine), transform 0.5s var(--ease-cine); }

.ne-flow.is-armed .ne-flow__body {
  opacity: 0.22;
  transform: translate3d(0, 12px, 0);
}

.ne-flow.is-armed .ne-flow__step.is-active .ne-flow__body {
  opacity: 1;
  transform: none;
}

.ne-flow__body h3 {
  margin: 0 0 0.6rem;
  font-family: var(--font-display);
  font-weight: 400;
  font-size: clamp(1.25rem, 1.7vw, 1.5rem);
  line-height: 1.15;
  letter-spacing: var(--tracking-tight, -0.5px);
  color: var(--ink-bright);
}

.ne-flow__body p {
  margin: 0;
  font-size: var(--text-sm, 0.9rem);
  line-height: var(--leading-normal, 1.6);
  color: var(--ink-body);
}

/* The differentiator each step earns — the claim, attached to the stage that
   backs it up rather than floating in its own box. */
.ne-flow__claim {
  display: block;
  margin-top: 1rem;
  padding-top: 0.9rem;
  border-top: 1px solid var(--glass-border);
  font-size: var(--text-2xs, 0.75rem);
  font-weight: 700;
  letter-spacing: var(--tracking-eyebrow, 2px);
  text-transform: uppercase;
  color: var(--orange);
}

/* Horizontal rail — only when there is room, and only when the flow has not
   opted out with `.is-vertical` (a flow sitting inside a narrow column). */
@media (min-width: 1101px) {
  .ne-flow:not(.is-vertical) {
    grid-template-columns: repeat(var(--flow-steps), 1fr);
    gap: 1.25rem;
  }
  .ne-flow:not(.is-vertical) .ne-flow__step { padding: 4.5rem 0 0; }
  .ne-flow:not(.is-vertical) .ne-flow__rail {
    top: 22px;
    left: 44px;
    right: -1.25rem;
    width: auto;
    height: 1px;
  }
  .ne-flow:not(.is-vertical) .ne-flow__rail i {
    height: 100%;
    background: linear-gradient(90deg, var(--orange), var(--orange-light));
    transform: scaleX(1);
    transform-origin: left center;
  }
  .ne-flow:not(.is-vertical).is-armed .ne-flow__rail i { transform: scaleX(var(--seg, 0)); }
}

@media (prefers-reduced-motion: reduce) {
  .ne-flow__marker,
  .ne-flow__body,
  .ne-flow__rail i { transition: none; }
}

/* --- staggered reveal for parallel content --------------------------------
   For grids of genuinely comparable items — sectors, service lines, case
   studies. No rail and no travelling marker, because nothing connects them:
   they simply arrive in sequence and then hold. `data-reveal-mode="stagger"`
   tells flow.js to skip current-tracking for the group. */

[data-reveal-mode='stagger'].is-armed > * {
  opacity: 0;
  transform: translate3d(0, 18px, 0);
  transition: opacity 0.55s var(--ease-cine), transform 0.55s var(--ease-cine);
  transition-delay: calc(var(--i, 0) * 80ms);
}

[data-reveal-mode='stagger'].is-armed > *.is-in {
  opacity: 1;
  transform: none;
}

@media (prefers-reduced-motion: reduce) {
  [data-reveal-mode='stagger'].is-armed > * {
    opacity: 1;
    transform: none;
    transition: none;
  }
}

/* --- principles list -----------------------------------------------------
   For ordered content that is NOT a sequence — beliefs, not stages. No rail
   connecting the items, because nothing flows from one to the next. Instead
   each row draws its own rule and lifts in as it enters, and an orange marker
   travels down the list marking whichever row you are reading.

   Driven by `mountReveals()` in flow.js. Un-armed it renders as plain static
   rows, which is exactly the no-JS state we want. */

.ne-principles { list-style: none; margin: 0; padding: 0; }

.ne-principle {
  position: relative;
  display: grid;
  grid-template-columns: 5.5rem 1fr 1fr;
  gap: clamp(1.5rem, 3vw, 3rem);
  padding: clamp(1.75rem, 3vw, 2.5rem) 0;
  align-items: start;
  transition: opacity 0.6s var(--ease-cine), transform 0.6s var(--ease-cine);
}

/* The travelling "you are here" marker. */
.ne-principle::before {
  content: '';
  position: absolute;
  left: -1.25rem;
  top: clamp(1.75rem, 3vw, 2.5rem);
  width: 2px;
  height: 2.1rem;
  border-radius: 2px;
  background: var(--orange);
  opacity: 0;
  transform: scaleY(0);
  transform-origin: center top;
  transition: transform 0.45s var(--ease-cine), opacity 0.45s var(--ease-cine);
}

.ne-principle.is-current::before { opacity: 1; transform: scaleY(1); }

.ne-principle__rule {
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  height: 1px;
  background: var(--glass-border);
  overflow: hidden;
}

.ne-principle__rule i {
  display: block;
  width: 100%;
  height: 100%;
  /* A short orange lead-in, not a full orange rule — five of those at once
     reads as a warning state rather than an accent. */
  background: linear-gradient(90deg, var(--orange), transparent 32%);
  opacity: 0.7;
  transform: scaleX(0);
  transform-origin: left center;
  transition: transform 0.9s var(--ease-cine), opacity 0.4s var(--ease-cine);
  transition-delay: calc(var(--i, 0) * 70ms);
}

.ne-principle.is-in .ne-principle__rule i { transform: scaleX(1); }
.ne-principle.is-current .ne-principle__rule i { opacity: 1; }

.ne-principles.is-armed .ne-principle {
  opacity: 0.25;
  transform: translate3d(0, 14px, 0);
  transition-delay: calc(var(--i, 0) * 70ms);
}

.ne-principles.is-armed .ne-principle.is-in { opacity: 1; transform: none; }

.ne-principle__index {
  font-family: var(--font-display);
  font-size: 1.05rem;
  font-weight: 500;
  letter-spacing: var(--tracking-label, 1px);
  color: var(--ink-muted);
  transition: color 0.4s var(--ease-cine), transform 0.4s var(--ease-cine);
}

.ne-principle.is-current .ne-principle__index {
  color: var(--orange);
  transform: translateX(4px);
}

.ne-principle h3 {
  margin: 0;
  font-family: var(--font-display);
  font-weight: 400;
  font-size: clamp(1.4rem, 2.1vw, 1.85rem);
  line-height: 1.15;
  letter-spacing: var(--tracking-tight, -0.5px);
  color: var(--ink-bright);
}

.ne-principle p {
  margin: 0;
  font-size: var(--text-base, 1rem);
  line-height: var(--leading-normal, 1.6);
  color: var(--ink-body);
  transition: color 0.4s var(--ease-cine);
}

.ne-principle.is-current p { color: var(--ink-bright); }

@media (max-width: 900px) {
  .ne-principle { grid-template-columns: 1fr; gap: 0.75rem; }
  .ne-principle::before { left: -0.85rem; }
}

@media (prefers-reduced-motion: reduce) {
  .ne-principle,
  .ne-principle::before,
  .ne-principle__index,
  .ne-principle p,
  .ne-principle__rule i { transition: none; }
}

/* --- case study card ----------------------------------------------------- */

.ne-case {
  display: block;
  padding: clamp(1.5rem, 2.6vw, 2rem);
  border: 1px solid var(--glass-border);
  border-radius: var(--radius-4xl, 20px);
  background: var(--glass);
  backdrop-filter: blur(var(--glass-blur));
  -webkit-backdrop-filter: blur(var(--glass-blur));
  text-decoration: none;
  transition: border-color var(--dur-base, 0.3s) ease,
              background var(--dur-base, 0.3s) ease,
              transform var(--dur-base, 0.3s) ease;
}

.ne-case:hover {
  transform: translateY(-4px);
  border-color: var(--glass-border-lit);
  background: var(--glass-strong);
}

.ne-case__tag {
  display: inline-block;
  font-size: var(--text-2xs, 0.75rem);
  font-weight: 700;
  letter-spacing: var(--tracking-eyebrow, 2px);
  text-transform: uppercase;
  color: var(--orange);
}

.ne-case.is-cool .ne-case__tag { color: var(--blue-light); }
.ne-case.is-ai .ne-case__tag { color: var(--purple-light); }

.ne-case h3 {
  margin: 0.85rem 0 0.6rem;
  font-family: var(--font-display);
  font-weight: 400;
  font-size: 1.35rem;
  line-height: 1.2;
  letter-spacing: var(--tracking-tight, -0.5px);
  color: var(--ink-bright);
}

.ne-case p {
  margin: 0;
  font-size: var(--text-sm, 0.9rem);
  line-height: var(--leading-normal, 1.6);
  color: var(--ink-body);
}

.ne-case__metrics {
  display: flex;
  flex-wrap: wrap;
  gap: 1.5rem;
  margin: 1.4rem 0 1.1rem;
  padding-top: 1.2rem;
  border-top: 1px solid var(--glass-border);
}

.ne-case__metrics div { min-width: 0; }

.ne-case__metrics b {
  display: block;
  font-family: var(--font-display);
  font-weight: 500;
  font-size: 1.5rem;
  line-height: 1;
  letter-spacing: var(--tracking-tight, -0.5px);
  color: var(--ink-bright);
}

.ne-case__metrics span {
  display: block;
  margin-top: 0.35rem;
  font-size: var(--text-2xs, 0.75rem);
  letter-spacing: 0.5px;
  text-transform: uppercase;
  color: var(--ink-muted);
}

.ne-stack { display: flex; flex-wrap: wrap; gap: 0.4rem; }

.ne-stack li {
  list-style: none;
  padding: 0.28rem 0.65rem;
  border: 1px solid var(--glass-border);
  border-radius: var(--radius-sm, 6px);
  font-size: var(--text-2xs, 0.75rem);
  color: var(--ink-muted);
}

/* --- blog list ----------------------------------------------------------- */

.ne-post {
  display: grid;
  grid-template-columns: 9rem 1fr auto;
  gap: clamp(1rem, 3vw, 2.5rem);
  align-items: baseline;
  padding: 1.6rem 0;
  border-top: 1px solid var(--glass-border);
  text-decoration: none;
  transition: background var(--dur-base, 0.3s) ease;
}

.ne-post:last-of-type { border-bottom: 1px solid var(--glass-border); }

.ne-post__meta {
  font-size: var(--text-2xs, 0.75rem);
  font-weight: 700;
  letter-spacing: var(--tracking-eyebrow, 2px);
  text-transform: uppercase;
  color: var(--ink-muted);
}

.ne-post h3 {
  margin: 0 0 0.5rem;
  font-family: var(--font-display);
  font-weight: 400;
  font-size: clamp(1.15rem, 1.9vw, 1.5rem);
  line-height: 1.22;
  letter-spacing: var(--tracking-tight, -0.5px);
  color: var(--ink-bright);
  transition: color var(--dur-fast, 0.2s) ease;
}

.ne-post:hover h3 { color: var(--orange); }

.ne-post p {
  margin: 0;
  max-width: 68ch;
  font-size: var(--text-sm, 0.9rem);
  line-height: var(--leading-normal, 1.6);
  color: var(--ink-body);
}

.ne-post__date {
  font-size: var(--text-xs, 0.8rem);
  color: var(--ink-muted);
  white-space: nowrap;
}

@media (max-width: 760px) {
  .ne-post { grid-template-columns: 1fr; gap: 0.6rem; }
  .ne-post__date { order: -1; }
}

/* --- filters ------------------------------------------------------------- */

.ne-filters { display: flex; flex-wrap: wrap; gap: 0.5rem; margin-bottom: 2rem; }

/* Filters are controls, so they follow the button radius, not the tag pill. */
.ne-filter {
  padding: 0.55rem 1.05rem;
  border: 1px solid var(--glass-border);
  border-radius: var(--radius-control-sm, 10px);
  background: transparent;
  font-family: var(--font-body);
  font-size: var(--text-sm, 0.9rem);
  color: var(--ink-body);
  cursor: pointer;
  transition: border-color var(--dur-fast, 0.2s) ease,
              background var(--dur-fast, 0.2s) ease,
              color var(--dur-fast, 0.2s) ease;
}

.ne-filter:hover { border-color: var(--glass-border-lit); color: var(--ink-bright); }
.ne-filter[aria-pressed='true'] { background: var(--orange); border-color: var(--orange); color: var(--white); }
.ne-filter:focus-visible { outline: 2px solid var(--orange); outline-offset: 3px; }

/* --- form ---------------------------------------------------------------- */

.ne-form { display: grid; gap: 1.1rem; max-width: 620px; }
.ne-form__row { display: grid; grid-template-columns: 1fr 1fr; gap: 1.1rem; }

.ne-field { display: grid; gap: 0.5rem; }

.ne-field label {
  font-size: var(--text-2xs, 0.75rem);
  font-weight: 700;
  letter-spacing: var(--tracking-eyebrow, 2px);
  text-transform: uppercase;
  color: var(--ink-muted);
}

.ne-field input,
.ne-field select,
.ne-field textarea {
  width: 100%;
  padding: 0.85rem 1rem;
  border: 1px solid var(--glass-border);
  border-radius: var(--radius-lg, 10px);
  background: var(--glass);
  font-family: var(--font-body);
  font-size: var(--text-base, 1rem);
  color: var(--ink-bright);
  transition: border-color var(--dur-fast, 0.2s) ease, background var(--dur-fast, 0.2s) ease;
}

.ne-field textarea { min-height: 150px; resize: vertical; }
.ne-field input::placeholder,
.ne-field textarea::placeholder { color: var(--ink-muted); }

.ne-field input:focus,
.ne-field select:focus,
.ne-field textarea:focus {
  outline: none;
  border-color: var(--orange);
  background: var(--glass-strong);
}

.ne-field select option { background: var(--void-2); color: var(--ink-bright); }

.ne-form__note { font-size: var(--text-sm, 0.9rem); color: var(--ink-muted); }

@media (max-width: 620px) {
  .ne-form__row { grid-template-columns: 1fr; }
}

/* --- closing CTA band ---------------------------------------------------- */

.ne-cta {
  margin: clamp(3rem, 6vw, 5rem) 0 clamp(4rem, 8vw, 6rem);
  padding: clamp(2.5rem, 5vw, 4rem);
  border: 1px solid var(--glass-border);
  border-radius: var(--radius-5xl, 24px);
  background: var(--glass);
  backdrop-filter: blur(var(--glass-blur));
  -webkit-backdrop-filter: blur(var(--glass-blur));
  text-align: center;
}

.ne-cta h2 {
  margin: 0 auto;
  max-width: 20ch;
  font-family: var(--font-display);
  font-weight: 300;
  font-size: clamp(1.9rem, 3.6vw, 3rem);
  line-height: 1.1;
  letter-spacing: var(--tracking-cinematic);
  color: var(--ink-bright);
}

.ne-cta p {
  margin: 1.1rem auto 0;
  max-width: 52ch;
  font-size: var(--text-lead, 1.15rem);
  line-height: var(--leading-normal, 1.6);
  color: var(--ink-body);
}

.ne-cta .ne-actions { justify-content: center; }

@media (prefers-reduced-motion: reduce) {
  .ne-case,
  .ne-post,
  .ne-filter { transition: none; }
  .ne-case:hover { transform: none; }
}

/* --- prose ----------------------------------------------------------------
   For content authored in WordPress rather than laid out by hand — posts and
   any page falling through to the generic template. The static reference build
   never needed this; the theme does. */

.ne-prose {
  max-width: 72ch;
  font-size: 1.05rem;
  line-height: 1.75;
  color: var(--ink-body);
}

.ne-prose > * + * { margin-top: 1.35rem; }

.ne-prose h2,
.ne-prose h3,
.ne-prose h4 {
  font-family: var(--font-display);
  font-weight: 400;
  line-height: 1.2;
  letter-spacing: var(--tracking-tight, -0.5px);
  color: var(--ink-bright);
  margin-top: 2.75rem;
}

.ne-prose h2 { font-size: clamp(1.6rem, 2.6vw, 2.1rem); }
.ne-prose h3 { font-size: clamp(1.3rem, 2vw, 1.6rem); }
.ne-prose h4 { font-size: 1.15rem; }

.ne-prose a {
  color: var(--orange);
  text-decoration: underline;
  text-underline-offset: 3px;
  text-decoration-thickness: 1px;
}

.ne-prose a:hover { color: var(--orange-light); }

.ne-prose strong { color: var(--ink-bright); font-weight: 600; }

.ne-prose ul,
.ne-prose ol { padding-left: 1.35rem; }
.ne-prose li + li { margin-top: 0.5rem; }
.ne-prose li::marker { color: var(--orange); }

.ne-prose blockquote {
  margin-left: 0;
  padding: 0.35rem 0 0.35rem 1.5rem;
  border-left: 2px solid var(--orange);
  font-size: 1.15rem;
  color: var(--ink-bright);
}

.ne-prose code {
  padding: 0.15em 0.4em;
  border: 1px solid var(--glass-border);
  border-radius: var(--radius-xs, 4px);
  background: var(--glass);
  font-size: 0.9em;
  color: var(--ink-bright);
}

.ne-prose pre {
  overflow-x: auto;
  padding: 1.25rem;
  border: 1px solid var(--glass-border);
  border-radius: var(--radius-lg, 10px);
  background: rgba(0, 0, 0, 0.35);
  font-size: 0.9rem;
  line-height: 1.6;
}

.ne-prose pre code { padding: 0; border: 0; background: none; }

.ne-prose img {
  border-radius: var(--radius-2xl, 14px);
  border: 1px solid var(--glass-border);
}

.ne-prose hr {
  border: 0;
  border-top: 1px solid var(--glass-border);
  margin-block: 2.5rem;
}

.ne-prose table { width: 100%; border-collapse: collapse; }
.ne-prose th,
.ne-prose td {
  padding: 0.75rem 1rem 0.75rem 0;
  border-bottom: 1px solid var(--glass-border);
  text-align: left;
}
.ne-prose th { color: var(--ink-bright); font-weight: 600; }

/* --- form status + honeypot ------------------------------------------------
   The trap field must be reachable by a bot parsing the DOM but never by a
   person, so it is positioned off-screen rather than display:none — some bots
   deliberately skip hidden inputs. */

.ne-form__trap {
  position: absolute;
  left: -9999px;
  width: 1px;
  height: 1px;
  overflow: hidden;
}

.ne-form__status {
  margin-bottom: 1.5rem;
  padding: 0.95rem 1.25rem;
  border: 1px solid var(--glass-border);
  border-left-width: 2px;
  border-radius: 0 var(--radius-control, 12px) var(--radius-control, 12px) 0;
  font-size: var(--text-sm, 0.9rem);
  line-height: var(--leading-normal, 1.6);
}

.ne-form__status.is-good {
  border-left-color: var(--green-bright, #22C55E);
  background: rgba(34, 197, 94, 0.08);
  color: var(--ink-bright);
}

.ne-form__status.is-bad {
  border-left-color: var(--orange);
  background: rgba(249, 115, 22, 0.08);
  color: var(--ink-bright);
}
