/* NB Invicta Rede — consolidação visual v52.
   Camada final: tokens semânticos únicos, zero superfícies claras acidentais no
   tema escuro e densidade mobile-first. NB Games e os jogos reais permanecem
   deliberadamente isolados da identidade visual da Rede. */

:root {
  --nb-background: #f4f7fb;
  --nb-surface: #ffffff;
  --nb-surface-raised: #ffffff;
  --nb-surface-soft: #edf4fb;
  --nb-border: #b7c8da;
  --nb-text-primary: #091d35;
  --nb-text-secondary: #40566f;
  --nb-muted: #667b93;
  --nb-accent: #075fc9;
  --nb-accent-hover: #034b9f;
  --nb-on-accent: #ffffff;
  --nb-success: #176b43;
  --nb-warning: #835000;
  --nb-error: #a51d32;
  --nb-focus: #0078d4;
  --nb-shadow-surface: 0 14px 36px rgba(7, 31, 61, .09);
  color-scheme: light;
}

html[data-nb-theme="dark"] {
  --nb-background: #050f1d;
  --nb-surface: #0c2035;
  --nb-surface-raised: #122c47;
  --nb-surface-soft: #173754;
  --nb-border: #3f6284;
  --nb-text-primary: #f5f9ff;
  --nb-text-secondary: #ccdaea;
  --nb-muted: #a7bad0;
  --nb-accent: #72b8ff;
  --nb-accent-hover: #a9d4ff;
  --nb-on-accent: #051426;
  --nb-success: #72d9a8;
  --nb-warning: #ffd486;
  --nb-error: #ff9caf;
  --nb-focus: #83d0ff;
  --nb-shadow-surface: 0 18px 44px rgba(0, 0, 0, .3);

  /* Compatibilidade retroativa: páginas antigas passam a herdar o mesmo tema. */
  --nb51-bg: var(--nb-background);
  --nb51-bg-elevated: var(--nb-surface-raised);
  --nb51-surface: var(--nb-surface);
  --nb51-surface-soft: var(--nb-surface-soft);
  --nb51-surface-strong: #1c4366;
  --nb51-text: var(--nb-text-primary);
  --nb51-text-secondary: var(--nb-text-secondary);
  --nb51-link: var(--nb-accent);
  --nb51-link-hover: var(--nb-accent-hover);
  --nb51-border: var(--nb-border);
  --nb51-border-strong: #7193b5;
  --nb51-focus: var(--nb-focus);
  --nb51-success: var(--nb-success);
  --nb51-warning: var(--nb-warning);
  --nb51-danger: var(--nb-error);
  --nb51-on-accent: var(--nb-on-accent);
  --nb-canvas: var(--nb-background);
  --nb-canvas-deep: #07182a;
  --nb-ink: var(--nb-text-primary);
  --nb-faint: var(--nb-muted);
  --nb-line: var(--nb-border);
  --nb-line-strong: #6284a6;
  --nb-soft: var(--nb-surface-soft);
  color-scheme: dark;
}

html[data-nb-theme="dark"],
html[data-nb-theme="dark"] body:not(.games-page):not([data-games-project]) {
  color: var(--nb-text-primary) !important;
  background-color: var(--nb-background) !important;
}

html[data-nb-theme="dark"] body:not(.games-page):not([data-games-project]) {
  background-image:
    radial-gradient(circle at 12% -8%, rgba(31, 106, 191, .18), transparent 32rem),
    linear-gradient(180deg, #050f1d, #08182a 58%, #061321) !important;
}

/* Superfícies semânticas. Uma página futura com componentes partilhados herda
   automaticamente o tema, sem precisar de uma exceção local. */
html[data-nb-theme="dark"] body:not(.games-page):not([data-games-project]) :where(
  article,
  aside,
  form,
  fieldset,
  details,
  dialog,
  table,
  [class*="card"]:not([class*="hero"]):not([class*="logo"]):not([class*="icon"]),
  [class*="panel"]:not([class*="hero"]),
  [class*="modal"],
  [class*="dialog"],
  [class*="drawer"],
  [class*="popover"],
  [class*="dropdown"],
  [class*="tooltip"],
  [class*="toast"],
  [class*="notification"],
  [class*="newsletter"],
  [class*="box"],
  [class*="trust"],
  [class*="empty"],
  [class*="example"],
  [class*="learn-source"],
  [class*="reading-tools"],
  [class*="progress"],
  [class*="result"],
  [class*="sheet"],
  [class*="widget"],
  [class*="workspace"]
) {
  border-color: var(--nb-border) !important;
  color: var(--nb-text-primary) !important;
  background-color: var(--nb-surface) !important;
  background-image: none !important;
  box-shadow: var(--nb-shadow-surface);
}

/* Superfícies elevadas, navegação e overlays. */
html[data-nb-theme="dark"] body:not(.games-page):not([data-games-project]) :where(
  .site-header,
  .site-category-panel,
  .site-menu-group,
  .nb-mobile-menu-v33,
  .site-footer,
  .nb-consent-dialog,
  .nb-titor-panel-v2,
  .nb-titor-head-v2,
  .nb-titor-form-v2,
  .nb-titor-foot-v2,
  .account-dialog,
  .favorite-toast,
  [role="dialog"],
  [role="menu"],
  [role="listbox"]
) {
  border-color: var(--nb-border) !important;
  color: var(--nb-text-primary) !important;
  background: var(--nb-surface-raised) !important;
}

/* O mega-menu usa ligações sem classe própria. Sem esta regra, a folha antiga
   conserva cartões claros mesmo quando o painel já está em dark mode. */
html[data-nb-theme="dark"] body:not(.games-page):not([data-games-project]) .site-menu-links > a {
  border: 1px solid var(--nb-border) !important;
  color: var(--nb-text-primary) !important;
  background: var(--nb-surface) !important;
  box-shadow: none !important;
}

html[data-nb-theme="dark"] body:not(.games-page):not([data-games-project]) .site-menu-links > a:hover {
  border-color: #7ab8f4 !important;
  background: var(--nb-surface-soft) !important;
}

html[data-nb-theme="dark"] body:not(.games-page):not([data-games-project]) .site-menu-links > a > span {
  color: var(--nb-text-primary) !important;
}

html[data-nb-theme="dark"] body:not(.games-page):not([data-games-project]) .site-menu-links > a > small {
  color: var(--nb-text-secondary) !important;
}

/* Subcomponentes funcionais usados pelos vários projetos. Estes nomes seguem
   o contrato partilhado (input/estado/nota/progresso), por isso a correção é
   sistémica e não uma coleção de remendos por página. */
html[data-nb-theme="dark"] body:not(.games-page):not([data-games-project]) :where(
  [class*="-input-v"],
  [class*="-empty-v"],
  [class*="-next-step-v"],
  [class*="-state-v"],
  [class*="-progress-track-v"],
  [class*="-note"],
  [class*="-icon-v"]
) {
  border-color: var(--nb-border) !important;
  color: var(--nb-text-primary) !important;
  background-color: var(--nb-surface-soft) !important;
}

html[data-nb-theme="dark"] body:not(.games-page):not([data-games-project]) :where(
  [class*="-input-v"],
  [class*="-empty-v"],
  [class*="-next-step-v"],
  [class*="-state-v"],
  [class*="-note"]
) :where(span, strong, p, small) {
  color: inherit !important;
}

html[data-nb-theme="dark"] body:not(.games-page):not([data-games-project]) .newsletter-edition-list > a,
html[data-nb-theme="dark"] body:not(.games-page):not([data-games-project]) main [data-nb-project]:not(img):not(source) {
  border-color: var(--nb-border) !important;
  color: var(--nb-text-primary) !important;
  background-color: var(--nb-surface) !important;
  background-image: none !important;
}

html[data-nb-theme="dark"] body:not(.games-page):not([data-games-project]) .newsletter-edition-list > a:hover,
html[data-nb-theme="dark"] body:not(.games-page):not([data-games-project]) main [data-nb-project]:not(img):not(source):hover {
  border-color: #7ab8f4 !important;
  background-color: var(--nb-surface-soft) !important;
}

html[data-nb-theme="dark"] body:not(.games-page):not([data-games-project]) [data-nb-project-status] {
  border-color: #52789d !important;
  color: #dcecff !important;
  background: #174267 !important;
}

html[data-nb-theme="dark"] body:not(.games-page):not([data-games-project]) :where(.source-note, .private-forward-note) {
  border-color: var(--nb-border) !important;
  color: var(--nb-text-secondary) !important;
  background: var(--nb-surface) !important;
}

html[data-nb-theme="dark"] body:not(.games-page):not([data-games-project]) :where(.source-note, .private-forward-note) strong {
  color: var(--nb-text-primary) !important;
}

html[data-nb-theme="dark"] body:not(.games-page):not([data-games-project]) main [class*="-grid-v"] > a {
  border-color: var(--nb-border) !important;
  color: var(--nb-text-primary) !important;
  background-color: var(--nb-surface) !important;
  background-image: none !important;
}

html[data-nb-theme="dark"] body:not(.games-page):not([data-games-project]) main [class*="-grid-v"] > a:hover {
  border-color: #7ab8f4 !important;
  background-color: var(--nb-surface-soft) !important;
}

html[data-nb-theme="dark"] body:not(.games-page):not([data-games-project]) main [class*="-grid-v"] > a :where(strong, span, small) {
  color: inherit !important;
}

html[data-nb-theme="dark"] body:not(.games-page):not([data-games-project]) [class*="-tool-card-v"] > span:first-child {
  border-color: var(--nb-border) !important;
  color: var(--nb-text-primary) !important;
  background-color: var(--nb-surface-soft) !important;
}

html[data-nb-theme="dark"] body:not(.games-page):not([data-games-project]) [class*="-hero-progress-v"] :where(span, small) {
  color: var(--nb-text-secondary) !important;
}

html[data-nb-theme="dark"] body:not(.games-page):not([data-games-project]) [class*="-banner-v"] > a {
  border-color: var(--nb-accent) !important;
  color: var(--nb-on-accent) !important;
  background: var(--nb-accent) !important;
}

html[data-nb-theme="dark"] body:not(.games-page):not([data-games-project]) [class*="-banner-v"] > a:hover {
  border-color: var(--nb-accent-hover) !important;
  color: var(--nb-on-accent) !important;
  background: var(--nb-accent-hover) !important;
}

/* Segurança final para padrões editoriais antigos que não tinham classes de
   card. Mantém a semântica original, mas remove superfícies claras herdadas. */
html[data-nb-theme="dark"] body:not(.games-page):not([data-games-project]) main :where(
  [class*="price-list"] > div,
  [class*="choice-grid"] > a,
  [class*="reading-tools"] a,
  [class*="topic-links"] a,
  a[class*="tag"]
) {
  border-color: var(--nb-border) !important;
  color: var(--nb-text-primary) !important;
  background: var(--nb-surface) !important;
}

html[data-nb-theme="dark"] body:not(.games-page):not([data-games-project]) main article > span:not([class*="logo"]):not([class*="icon"]),
html[data-nb-theme="dark"] body:not(.games-page):not([data-games-project]) main span[class*="tag"] {
  border-color: #52789d !important;
  color: #dcecff !important;
  background: #174267 !important;
}

html[data-nb-theme="dark"] body:not(.games-page):not([data-games-project]) main small:not([data-nb-project-status]) {
  color: var(--nb-text-secondary) !important;
  background-color: transparent !important;
}

html[data-nb-theme="dark"] body:not(.games-page):not([data-games-project]) main [class*="icon"]:not([class*="logo"]) {
  border-color: var(--nb-border) !important;
  color: var(--nb-text-primary) !important;
  background-color: var(--nb-surface-soft) !important;
}

html[data-nb-theme="dark"] body:not(.games-page):not([data-games-project]) main [class*="sticker"] {
  border-color: var(--nb-border) !important;
  color: var(--nb-text-primary) !important;
  background-color: var(--nb-surface-soft) !important;
}

html[data-nb-theme="dark"] body:not(.games-page):not([data-games-project]) :where(
  h1, h2, h3, h4, h5, h6, strong, b, legend, th, summary
) {
  color: var(--nb-text-primary) !important;
}

html[data-nb-theme="dark"] body:not(.games-page):not([data-games-project]) :where(
  p, li, small, dt, dd, label, figcaption, time,
  [class*="muted"], [class*="description"], [class*="subtitle"], [class*="helper"]
) {
  color: var(--nb-text-secondary) !important;
}

html[data-nb-theme="dark"] body:not(.games-page):not([data-games-project]) :where(a:not([class*="button"]):not([role="button"])) {
  color: var(--nb-accent) !important;
}

html[data-nb-theme="dark"] body:not(.games-page):not([data-games-project]) :where(a:not([class*="button"]):not([role="button"]):hover) {
  color: var(--nb-accent-hover) !important;
}

/* Formulários e estados nativos: nenhum controlo claro fica esquecido. */
html[data-nb-theme="dark"] body:not(.games-page):not([data-games-project]) :where(
  input:not([type="checkbox"]):not([type="radio"]):not([type="range"]),
  select,
  textarea
) {
  border-color: var(--nb-border) !important;
  color: var(--nb-text-primary) !important;
  background: var(--nb-surface-raised) !important;
  caret-color: var(--nb-text-primary) !important;
}

html[data-nb-theme="dark"] body:not(.games-page):not([data-games-project]) :where(input, textarea)::placeholder {
  color: var(--nb-muted) !important;
  opacity: 1 !important;
}

html[data-nb-theme="dark"] body:not(.games-page):not([data-games-project]) select option {
  color: var(--nb-text-primary) !important;
  background: var(--nb-surface-raised) !important;
}

html[data-nb-theme="dark"] body:not(.games-page):not([data-games-project]) :where(input[type="checkbox"], input[type="radio"]) {
  accent-color: #4ea3ff;
}

html[data-nb-theme="dark"] body:not(.games-page):not([data-games-project]) :where(
  button,
  [role="button"],
  a[class*="button"],
  [class*="actions"] > a,
  [class*="actions"] > button
) {
  border-color: #4d82b5 !important;
  color: var(--nb-text-primary) !important;
  background-color: #153b62 !important;
  background-image: none !important;
}

html[data-nb-theme="dark"] body:not(.games-page):not([data-games-project]) :where(
  button,
  [role="button"],
  a[class*="button"],
  [class*="actions"] > a,
  [class*="actions"] > button
):hover {
  border-color: #7ab8f4 !important;
  background-color: #1e507f !important;
}

html[data-nb-theme="dark"] body:not(.games-page):not([data-games-project]) :where(
  button:disabled,
  [role="button"][aria-disabled="true"],
  input:disabled,
  select:disabled,
  textarea:disabled
) {
  border-color: #39536d !important;
  color: #9fb0c4 !important;
  background: #16283b !important;
  opacity: .82 !important;
}

/* Tabelas, resultados e estados informativos. */
html[data-nb-theme="dark"] body:not(.games-page):not([data-games-project]) :where(th, thead td) {
  border-color: var(--nb-border) !important;
  color: var(--nb-text-primary) !important;
  background: var(--nb-surface-raised) !important;
}

html[data-nb-theme="dark"] body:not(.games-page):not([data-games-project]) :where(td, tbody tr) {
  border-color: var(--nb-border) !important;
  color: var(--nb-text-secondary) !important;
  background: var(--nb-surface) !important;
}

html[data-nb-theme="dark"] body:not(.games-page):not([data-games-project]) :where(
  [class*="badge"], [class*="chip"], [class*="status"], [class*="eyebrow"], [class*="kicker"]
) {
  border-color: #52789d !important;
  color: #dcecff !important;
  background: #174267 !important;
}

html[data-nb-theme="dark"] body:not(.games-page):not([data-games-project]) :where(
  .is-success, [data-state="success"], [class*="success"]
) {
  border-color: #347c61 !important;
  color: #c9f8df !important;
  background: #103f32 !important;
}

html[data-nb-theme="dark"] body:not(.games-page):not([data-games-project]) :where(
  .is-warning, [data-state="warning"], [class*="warning"]
) {
  border-color: #907039 !important;
  color: #ffedbf !important;
  background: #4c3712 !important;
}

html[data-nb-theme="dark"] body:not(.games-page):not([data-games-project]) :where(
  .is-error, .is-danger, [data-state="error"], [class*="error"], [class*="danger"]
) {
  border-color: #9b5361 !important;
  color: #ffd8df !important;
  background: #51212c !important;
}

/* Corrige explicitamente os dois últimos elementos claros conhecidos da v51. */
html[data-nb-theme="dark"] .bj-compass-card-v2,
html[data-nb-theme="dark"] .bj-hero-v2 .nb-button-v2:not(.is-secondary) {
  border-color: var(--nb-border) !important;
  color: var(--nb-text-primary) !important;
  background: var(--nb-surface-raised) !important;
}

html[data-nb-theme="dark"] .bj-compass-card-v2 :where(h2, h3, strong, p, small, span) {
  color: inherit !important;
}

/* Elementos flutuantes seguem uma única coluna e respeitam safe areas. */
html[data-nb-theme="dark"] body:not(.games-page):not([data-games-project]) :where(
  .nb-titor-trigger-v2,
  .favorite-floating,
  .nb-favorite-floating,
  [data-favorite-floating]
) {
  border-color: #5d86ad !important;
  color: var(--nb-text-primary) !important;
  background: #143a5d !important;
  box-shadow: 0 12px 28px rgba(0, 0, 0, .4) !important;
}

body:not(.games-page):not([data-games-project]) :where(a, button, input, select, textarea, summary, [tabindex]):focus-visible {
  outline: 3px solid var(--nb-focus) !important;
  outline-offset: 3px !important;
}

@media (max-width: 760px) {
  body:not(.games-page):not([data-games-project]) {
    --nb-page: min(100% - 1rem, 1180px);
    --nb-reading: min(100% - 1rem, 780px);
    overflow-x: clip;
    font-size: 16px;
  }

  body:not(.games-page):not([data-games-project]) .site-header-wrap,
  body:not(.games-page):not([data-games-project]) .site-header-top {
    min-height: 58px !important;
  }

  body:not(.games-page):not([data-games-project]) .site-brand img {
    width: 38px !important;
    height: 38px !important;
  }

  body:not(.games-page):not([data-games-project]) .site-brand span {
    max-width: 9.5rem;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    font-size: .92rem !important;
  }

  body:not(.games-page):not([data-games-project]) :where(h1) {
    font-size: clamp(1.9rem, 9vw, 2.5rem) !important;
    line-height: 1.08 !important;
  }

  body:not(.games-page):not([data-games-project]) :where(h2) {
    font-size: clamp(1.4rem, 6.6vw, 1.78rem) !important;
    line-height: 1.16 !important;
  }

  body:not(.games-page):not([data-games-project]) :where(
    article,
    aside,
    fieldset,
    details,
    [class*="card"]:not([class*="hero"]),
    [class*="panel"]:not([class*="hero"]),
    [class*="workspace"],
    [class*="result"]
  ) {
    max-width: 100%;
    min-width: 0;
    border-radius: 16px !important;
    padding: clamp(.85rem, 4vw, 1.05rem) !important;
  }

  body:not(.games-page):not([data-games-project]) :where(
    [class*="grid"],
    [class*="columns"],
    [class*="layout"]
  ) {
    min-width: 0;
  }

  body:not(.games-page):not([data-games-project]) :where(
    .nb-titor-v2,
    .favorite-floating,
    .nb-favorite-floating,
    [data-favorite-floating]
  ) {
    right: max(.7rem, env(safe-area-inset-right)) !important;
  }

  body:not(.games-page):not([data-games-project]) :where(.nb-titor-v2) {
    bottom: max(.7rem, env(safe-area-inset-bottom)) !important;
  }

  body:not(.games-page):not([data-games-project]) :where(
    .favorite-floating,
    .nb-favorite-floating,
    [data-favorite-floating]
  ) {
    bottom: calc(max(.7rem, env(safe-area-inset-bottom)) + 4.2rem) !important;
  }

  body:not(.games-page):not([data-games-project]) :where(.nb-titor-panel-v2, [role="dialog"]) {
    max-width: calc(100vw - 1rem) !important;
    max-height: calc(100dvh - 1rem) !important;
  }

  body:not(.games-page):not([data-games-project]) :where(.table-wrap, .table-responsive, [data-table-scroll], table) {
    max-width: 100%;
    overflow-x: auto;
    overscroll-behavior-inline: contain;
  }
}

@media (prefers-reduced-motion: reduce) {
  body:not(.games-page):not([data-games-project]) *,
  body:not(.games-page):not([data-games-project]) *::before,
  body:not(.games-page):not([data-games-project]) *::after {
    scroll-behavior: auto !important;
    transition-duration: .01ms !important;
    animation-duration: .01ms !important;
    animation-iteration-count: 1 !important;
  }
}

/* PaisDePrimeira: primeira base funcional, sem dados pessoais e com cálculo local. */
.pdp-cost-card-v52 { margin: 1.2rem 0; }
.pdp-cost-form-v52 { display: grid; gap: 1rem; }
.pdp-cost-form-v52 fieldset { margin: 0; padding: 1rem; }
.pdp-cost-form-v52 legend { padding: 0 .35rem; font-weight: 850; }
.pdp-cost-grid-v52 { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: .8rem; }
.pdp-cost-grid-v52 label { display: grid; gap: .35rem; font-weight: 750; }
.pdp-cost-grid-v52 input { width: 100%; }
.pdp-cost-result-v52 { margin-top: 1rem; padding: 1.1rem; border: 1px solid var(--nb-border); border-radius: 16px; background: var(--nb-surface-soft); }
.pdp-cost-result-v52[hidden] { display: none; }
.pdp-result-grid-v52 { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: .75rem; }
.pdp-result-grid-v52 p { margin: 0; padding: .8rem; border: 1px solid var(--nb-border); border-radius: 12px; background: var(--nb-surface); }
.pdp-result-grid-v52 span, .pdp-result-grid-v52 strong { display: block; }
.pdp-result-grid-v52 strong { margin-top: .2rem; color: var(--nb-text-primary); font-size: 1.2rem; }

@media (max-width: 760px) {
  .pdp-cost-grid-v52,
  .pdp-result-grid-v52 { grid-template-columns: minmax(0, 1fr); }
}
