/*
 * Camada transversal de acessibilidade.
 * Mantém a paleta aprovada e reserva os tons mais escuros para texto,
 * controlos e estados que exigem contraste WCAG 2.2 AA.
 */

:root {
  --rs-verde-acao: var(--rs-verde);
  --rs-borda-controlo: #758986;
  --rs-foco: #ffcc33;
  --rs-foco-contorno: #191919;
}

html {
  scroll-padding-top: calc(var(--header) + 20px);
}

body {
  overflow-wrap: break-word;
  text-rendering: optimizeLegibility;
}

main,
section[id],
article[id],
h1[id],
h2[id],
h3[id] {
  scroll-margin-top: calc(var(--header) + 20px);
}

:where(a, button, input, select, textarea, summary, [tabindex]):focus-visible {
  border-radius: 3px;
  outline: 3px solid var(--rs-foco) !important;
  outline-offset: 3px !important;
  box-shadow: 0 0 0 5px var(--rs-foco-contorno) !important;
}

:where(input, select, textarea) {
  border-color: var(--rs-borda-controlo) !important;
}

:where(
  .support-method,
  .amount-grid > button,
  .donation-back,
  .discount-tabs button,
  .membership-tabs button,
  .agenda-filters button,
  .archive-filter-pills button,
  .event-share a,
  .event-share button,
  .highlights-archive__load-more button
) {
  border-color: var(--rs-borda-controlo);
}

:where(input, select, textarea)[aria-invalid="true"] {
  border-color: #8a2f2f !important;
  box-shadow: 0 0 0 2px #f3c7c7;
}

:where(input, textarea)::placeholder {
  color: var(--rs-texto-suave);
  opacity: 1;
}

/* Os links integrados em texto não dependem apenas da cor. */
main p a:not([class]),
main li a:not([class]),
.footer-contact a,
.footer-information a,
.newsletter p a {
  color: var(--rs-verde-texto);
  text-decoration: underline;
  text-decoration-thickness: 0.09em;
  text-underline-offset: 0.18em;
}

/* No rodapé, a organização em listas e blocos já identifica as ligações. */
.footer-contact a,
.footer-information a {
  text-decoration: none;
}

main p a:not([class]):hover,
main li a:not([class]):hover,
.footer-contact a:hover,
.footer-information a:hover {
  color: var(--rs-preto);
  text-decoration-thickness: 0.15em;
}

.footer-contact address {
  font-style: normal;
}

/* Contraste de texto e de ações pequenas. */
.header-button--member,
.button--outline {
  color: var(--rs-verde);
}

.footer-grid a:hover,
.health-powered strong {
  color: var(--rs-verde-texto);
}

.header-button--donation,
.button--solid,
.newsletter form button,
.highlights-archive__load-more button:hover,
.reports-hero .button,
.structure-hero__button,
.support-method.is-active,
.donation-steps li.is-active span,
.custom-amount.is-selected,
.donation-next,
.support-information--irs a,
.volunteer-submit button,
.store-cart-link,
.product-card__button,
.product-purchase__button,
.discounts-hero__content > a:hover,
.discount-tabs button.is-active,
.membership-tabs button.is-active,
.membership-submit button,
.archive-filter-pills button:hover,
.archive-filter-pills button.is-active,
.event-info-card__ticket,
.event-share a:hover,
.event-share button:hover,
.archive-no-results button,
.complaints-action {
  border-color: var(--rs-verde-acao);
  background: var(--rs-verde-acao);
  color: var(--rs-fundo);
}

.header-button--donation:hover,
.button--solid:hover,
.newsletter form button:hover,
.donation-next:hover,
.support-information--irs a:hover,
.volunteer-submit button:hover,
.product-card__button:hover,
.product-purchase__button:hover,
.membership-submit button:hover,
.event-info-card__ticket:hover,
.archive-no-results button:hover,
.complaints-action:hover {
  border-color: var(--rs-verde-texto);
  background: var(--rs-verde-texto);
  color: var(--rs-fundo);
}

/* Alvos de toque confortáveis, sem alterar ligações corridas em texto. */
.header-button,
.menu-toggle,
.primary-nav > ul > li > a,
.primary-nav > ul > li > button,
.submenu a,
.social-links a,
.newsletter-toggle,
.newsletter form button,
.language-link,
.read-more,
.button,
.support-method,
.amount-grid > button,
.donation-next,
.donation-back,
.volunteer-submit button,
.product-card__button,
.product-purchase__button,
.product-detail__back,
.discount-tabs button,
.membership-tabs button,
.membership-submit button,
.agenda-filters button,
.archive-filter-pills button,
.agenda-archive-link,
.agenda-event-card__link,
.archive-highlight-card__link,
.highlights-archive__load-more button,
.event-info-card__ticket,
.event-share a,
.event-share button,
.archive-no-results button,
.complaints-action,
.faq-list summary {
  min-height: 44px;
}

.archive-filter-pills button {
  border-color: var(--rs-borda-controlo);
  background: var(--rs-fundo);
  color: var(--rs-verde-texto);
}

.archive-filter-pills button:hover,
.archive-filter-pills button.is-active {
  border-color: var(--rs-verde-acao);
  background: var(--rs-verde-acao);
  color: var(--rs-fundo);
}

.social-links a,
.event-share a,
.event-share button,
.language-link {
  min-width: 44px;
}

/* Etiquetas visíveis e ajuda de formulário. */
.form-required-note {
  margin: 0 0 18px;
  color: var(--rs-texto-apoio);
  font-size: 0.875rem;
}

.required-mark {
  margin-left: 0.15em;
  color: #8a2f2f;
  font-weight: 700;
  text-decoration: none;
}

.newsletter-label {
  display: block;
  margin-bottom: 4px;
  color: var(--rs-texto);
  font-size: 0.78rem;
  font-weight: 600;
}

.form-error[tabindex="-1"]:focus {
  outline: 3px solid #8a2f2f;
  outline-offset: 3px;
}

.external-link-note {
  white-space: nowrap;
}

/* Texto anteriormente demasiado pequeno para leitura confortável. */
.body-person h4 {
  font-size: max(0.9375rem, 15px);
}

.body-person p,
.store-cart-link,
.product-card__button,
.event-info-card__ticket,
.archive-no-results button {
  font-size: max(0.75rem, 12px);
}

.body-person p {
  line-height: 1.6;
}

.team-section h2 {
  color: var(--rs-verde-texto);
}

.health-contact {
  background: var(--rs-verde-hover);
}

.health-contact__box p a:not([class]),
.health-contact__box p a:not([class]):hover {
  color: var(--rs-fundo);
}

.health-contact__box span {
  color: var(--rs-fundo);
}

.complaints-panel__number {
  background: var(--rs-verde-acao);
}

.archive-highlight-card__venue,
.archive-highlight-card__date,
.highlights-archive__load-more p,
.event-info-card__date > span,
.event-info-card__location > span,
.event-share > p,
.agenda-page-hero__credit {
  font-size: max(0.75rem, 12px);
}

/* Texto sobre fotografia recebe uma camada estável, independente da imagem. */
.support-hero::before {
  background: rgb(0 0 0 / 64%);
}

.support-method::before,
.support-method:hover::before,
.support-method:focus-visible::before {
  background: rgb(0 0 0 / 68%);
}

.support-method.is-active::before {
  background: transparent;
}

.agenda-page-hero::after {
  position: absolute;
  z-index: 1;
  content: "";
  pointer-events: none;
  inset: 50% 0 0;
  background: linear-gradient(transparent, rgb(0 0 0 / 72%));
}

.agenda-page-hero__month,
.agenda-page-hero__credit {
  z-index: 2;
}

.agenda-page-hero__credit {
  padding: 5px 8px;
  border-radius: 3px;
  background: rgb(0 0 0 / 72%);
  text-shadow: none;
}

/* O menu só expõe submenus que estejam realmente abertos. */
.primary-nav .submenu {
  display: none;
}

.has-submenu.is-open > .submenu {
  display: block;
}

.mobile-nav-actions {
  display: none;
}

@media (max-width: 1199px) {
  .submenu {
    padding-left: 16px !important;
  }

  .mobile-nav-actions {
    display: grid;
    grid-template-columns: 1fr;
    gap: 10px;
    padding-top: 18px;
  }

  .mobile-nav-actions a {
    display: inline-flex;
    min-height: 44px;
    align-items: center;
    justify-content: center;
    padding: 9px 14px;
    border: 2px solid var(--rs-verde-acao);
    border-radius: 4px;
    font-weight: 700;
    text-align: center;
  }

  .mobile-nav-actions a:first-child {
    background: var(--rs-verde-acao);
    color: var(--rs-fundo);
  }

  .mobile-nav-actions a:last-child {
    color: var(--rs-verde-texto);
  }

  .languages--mobile {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 14px;
    padding-top: 18px;
    border-top: 1px solid var(--rs-verde-borda);
    margin-top: 18px;
  }

  .languages--mobile .language-link {
    font-size: 16px;
  }
}

@media (max-width: 767px) {
  .about-home__text {
    text-align: left;
  }
}

@media (prefers-reduced-motion: reduce) {
  html {
    scroll-behavior: auto;
  }

  *,
  *::before,
  *::after {
    animation-delay: 0.01ms !important;
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    scroll-behavior: auto !important;
    transition-delay: 0.01ms !important;
    transition-duration: 0.01ms !important;
  }
}

@media (forced-colors: active) {
  :where(a, button, input, select, textarea, summary):focus-visible {
    outline: 3px solid Highlight !important;
    box-shadow: none !important;
  }

  .agenda-filters button,
  .archive-filter-pills button,
  .discount-tabs button,
  .membership-tabs button {
    border: 1px solid ButtonText;
  }
}
