/* ============================================================
   Nix Elementor Widgets — Pro Visual Effects
   Scoped with .nix-ew- prefix
   ============================================================ */

/* ── Bricolage Grotesque — fonte local (D:/AGX/assets) ── */
@font-face {
  font-family: 'Bricolage Grotesque';
  font-style: normal;
  font-weight: 100 300;
  font-display: swap;
  src: url('../fonts/BricolageGrotesque_24pt-ExtraLight.ttf') format('truetype');
}
@font-face {
  font-family: 'Bricolage Grotesque';
  font-style: normal;
  font-weight: 400 500;
  font-display: swap;
  src: url('../fonts/BricolageGrotesque_24pt-Regular.ttf') format('truetype');
}
@font-face {
  font-family: 'Bricolage Grotesque';
  font-style: normal;
  font-weight: 600 900;
  font-display: swap;
  src: url('../fonts/BricolageGrotesque_24pt-ExtraBold.ttf') format('truetype');
}

/* ── Reset & Base ── */
[class^="nix-ew-"],
[class^="nix-ew-"] *,
[class^="nix-ew-"] *::before,
[class^="nix-ew-"] *::after {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
}

[class^="nix-ew-"] {
  font-family: 'Bricolage Grotesque', system-ui, sans-serif;
  line-height: 1.6;
  -webkit-font-smoothing: antialiased;
}

/* ── CSS Variables — Design Tokens ── */
:root {
  /* Color tokens */
  --nix-primary: #234F9D;
  --nix-primary-light: #3A6BC4;
  --nix-primary-dark: #18386E;
  --nix-primary-glow: rgba(35, 79, 157, 0.35);
  --nix-bg: hsl(32, 41%, 96%);
  --nix-fg: hsl(60, 4%, 11%);
  --nix-card: hsl(32, 30%, 92%);
  --nix-muted: hsl(40, 5%, 40%);
  --nix-border: hsl(32, 22%, 85%);
  --nix-dark-bg: #1D1D1B;
  --nix-success: #01A4C3;
  --nix-error: #E76652;

  /* Spacing scale (4px base) */
  --nix-space-1: 0.25rem;   /* 4px */
  --nix-space-2: 0.5rem;    /* 8px */
  --nix-space-3: 0.75rem;   /* 12px */
  --nix-space-4: 1rem;      /* 16px */
  --nix-space-5: 1.25rem;   /* 20px */
  --nix-space-6: 1.5rem;    /* 24px */
  --nix-space-8: 2rem;      /* 32px */
  --nix-space-10: 2.5rem;   /* 40px */
  --nix-space-12: 3rem;     /* 48px */
  --nix-space-16: 4rem;     /* 64px */
  --nix-space-20: 5rem;     /* 80px */

  /* Typography scale (1.25 ratio) */
  --nix-text-xs: 0.65rem;   /* 10.4px */
  --nix-text-sm: 0.75rem;   /* 12px */
  --nix-text-base: 0.875rem;/* 14px */
  --nix-text-md: 1rem;      /* 16px */
  --nix-text-lg: 1.125rem;  /* 18px */
  --nix-text-xl: 1.5rem;    /* 24px */
  --nix-text-2xl: 1.875rem; /* 30px */

  /* Border radius */
  --nix-radius: 0.625rem;   /* 10px */
  --nix-radius-sm: 0.375rem;/* 6px */
  --nix-radius-lg: 1rem;    /* 16px */
  --nix-radius-full: 9999px;

  /* Elevation (box-shadow) */
  --nix-shadow-sm: 0 1px 2px rgba(0,0,0,0.05);
  --nix-shadow-md: 0 4px 12px rgba(0,0,0,0.07);
  --nix-shadow-lg: 0 8px 30px rgba(0,0,0,0.1);
  --nix-shadow-xl: 0 16px 40px rgba(0,0,0,0.12);
  --nix-shadow-glow: 0 0 30px var(--nix-primary-glow);

  /* Transitions */
  --nix-ease: cubic-bezier(0.16, 1, 0.3, 1);
  --nix-duration-fast: 0.15s;
  --nix-duration: 0.3s;
  --nix-duration-slow: 0.6s;

  /* Min touch target */
  --nix-touch-min: 44px;
}

/* ── Typography ── */
.nix-ew-heading {
  font-family: 'Bricolage Grotesque', system-ui, sans-serif;
  font-weight: 700;
  line-height: 1.1;
  letter-spacing: -0.01em;
}

.nix-ew-tag {
  font-size: var(--nix-text-xs);
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.2em;
  color: var(--nix-primary);
  display: block;
  margin-bottom: var(--nix-space-3);
}

/* ── Global interactive states ── */
.nix-ew-btn-base {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: var(--nix-space-2);
  min-height: var(--nix-touch-min);
  padding: var(--nix-space-2) var(--nix-space-6);
  font-family: 'Bricolage Grotesque', system-ui, sans-serif;
  font-size: var(--nix-text-base);
  font-weight: 500;
  border: none;
  border-radius: var(--nix-radius-sm);
  cursor: pointer;
  text-decoration: none;
  position: relative;
  overflow: hidden;
  transition: all var(--nix-duration) var(--nix-ease);
}

/* Focus ring for all interactive nix-ew elements */
[class^="nix-ew-"] a:focus-visible,
[class^="nix-ew-"] button:focus-visible,
[class^="nix-ew-"] input:focus-visible,
[class^="nix-ew-"] textarea:focus-visible,
[class^="nix-ew-"] select:focus-visible {
  outline: 2px solid var(--nix-primary);
  outline-offset: 2px;
}

/* ============================================================
   SCROLL REVEAL SYSTEM
   ============================================================ */
.nix-ew-reveal {
  opacity: 0;
  transform: translateY(30px);
  transition: opacity 0.7s cubic-bezier(0.16, 1, 0.3, 1),
              transform 0.7s cubic-bezier(0.16, 1, 0.3, 1);
}

.nix-ew-reveal.nix-ew-reveal--left {
  transform: translateX(-40px);
}

.nix-ew-reveal.nix-ew-reveal--right {
  transform: translateX(40px);
}

.nix-ew-reveal.nix-ew-reveal--scale {
  transform: scale(0.92);
}

.nix-ew-reveal.is-visible {
  opacity: 1;
  transform: translateY(0) translateX(0) scale(1);
}

/* Staggered grid children */
.nix-ew-stagger-in {
  animation: nixStaggerIn 0.6s cubic-bezier(0.16, 1, 0.3, 1) both;
}

@keyframes nixStaggerIn {
  from { opacity: 0; transform: translateY(24px) scale(0.96); }
  to   { opacity: 1; transform: translateY(0) scale(1); }
}

/* Word-by-word text reveal */
.nix-ew-word {
  display: inline-block;
  opacity: 0;
  transform: translateY(100%);
  animation: nixWordIn 0.5s cubic-bezier(0.16, 1, 0.3, 1) forwards;
  white-space: pre;
}

@keyframes nixWordIn {
  to { opacity: 1; transform: translateY(0); }
}

/* ── 3D Tilt cards ── */
.nix-ew-tilt {
  transition: transform 0.15s ease-out, box-shadow 0.3s ease;
  will-change: transform;
}

/* ── Magnetic buttons ── */
.nix-ew-magnetic {
  transition: transform 0.2s cubic-bezier(0.16, 1, 0.3, 1);
  will-change: transform;
}

/* ============================================================
   HERO SLIDER — Cinematic
   ============================================================ */
.nix-ew-hero {
  position: relative;
  overflow: hidden;
  background: #000;
}

.nix-ew-hero__slide {
  position: absolute;
  inset: 0;
  opacity: 0;
  z-index: 0;
  transition: opacity 1s ease;
}

.nix-ew-hero__slide.is-active {
  opacity: 1;
  z-index: 1;
}

.nix-ew-hero__slide.is-leaving {
  opacity: 0;
  z-index: 2;
  transition: opacity 0.8s ease;
}

.nix-ew-hero__slide img {
  width: 100%;
  height: 120%;
  object-fit: cover;
  display: block;
  position: absolute;
  top: -10%;
  left: 0;
  transition: transform 8s ease-out;
}

.nix-ew-hero__slide.is-active img {
  transform: translateY(0);
}

/* Cinematic overlay */
.nix-ew-hero__overlay {
  position: absolute;
  inset: 0;
  background: linear-gradient(
    180deg,
    rgba(0,0,0,0.2) 0%,
    rgba(0,0,0,0.1) 30%,
    rgba(0,0,0,0.5) 70%,
    rgba(0,0,0,0.85) 100%
  );
}

.nix-ew-hero__overlay::after {
  content: '';
  position: absolute;
  inset: 0;
  background: rgba(26, 10, 46, 0.4);
}

/* Animated grain texture */
.nix-ew-hero__grain {
  position: absolute;
  inset: -50%;
  width: 200%;
  height: 200%;
  background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.04'/%3E%3C/svg%3E");
  z-index: 2;
  pointer-events: none;
  animation: nixGrain 0.5s steps(6) infinite;
  opacity: 0.5;
}

@keyframes nixGrain {
  0%, 100% { transform: translate(0, 0); }
  10% { transform: translate(-5%, -10%); }
  30% { transform: translate(3%, -15%); }
  50% { transform: translate(12%, 9%); }
  70% { transform: translate(9%, 4%); }
  90% { transform: translate(-1%, 7%); }
}

/* Vignette */
.nix-ew-hero__vignette {
  position: absolute;
  inset: 0;
  z-index: 3;
  pointer-events: none;
  background: radial-gradient(ellipse at center, transparent 50%, rgba(0,0,0,0.5) 100%);
}

/* Content */
.nix-ew-hero__content {
  position: relative;
  z-index: 10;
  height: 100%;
  display: flex;
  flex-direction: column;
  justify-content: flex-end;
  padding-bottom: 5rem;
  max-width: 64rem;
  margin: 0 auto;
  padding-left: 1.5rem;
  padding-right: 1.5rem;
}

.nix-ew-hero__text-wrap {
  position: relative;
}

.nix-ew-hero__text {
  max-width: 36rem;
  opacity: 0;
  visibility: hidden;
  transform: translateY(20px);
  transition: opacity 0.6s ease, transform 0.6s cubic-bezier(0.16, 1, 0.3, 1), visibility 0s 0.6s;
  pointer-events: none;
}

/* All non-active texts are stacked behind via absolute positioning */
.nix-ew-hero__text:not(.is-active) {
  position: absolute;
  top: 0;
  left: 0;
}

.nix-ew-hero__text.is-active {
  position: relative;
  opacity: 1;
  visibility: visible;
  transform: translateY(0);
  transition: opacity 0.6s ease 0.15s, transform 0.6s cubic-bezier(0.16, 1, 0.3, 1) 0.15s, visibility 0s 0s;
  pointer-events: auto;
}

.nix-ew-hero__text.is-leaving {
  position: absolute;
  top: 0;
  left: 0;
  opacity: 0;
  visibility: visible;
  transform: translateY(-10px);
  transition: opacity 0.35s ease, transform 0.35s ease, visibility 0s 0.35s;
  pointer-events: none;
}

.nix-ew-hero__text .nix-ew-tag {
  color: var(--nix-primary-light);
  letter-spacing: 0.25em;
  margin-bottom: 1rem;
}

.nix-ew-hero__title {
  font-size: clamp(1.875rem, 4vw, 3rem);
  color: #fff;
  margin-bottom: 1rem;
}

.nix-ew-hero__desc {
  color: rgba(255,255,255,0.6);
  font-size: 0.875rem;
  max-width: 28rem;
  margin-bottom: 1.75rem;
  line-height: 1.6;
}

.nix-ew-hero__btn {
  display: inline-flex;
  align-items: center;
  min-height: var(--nix-touch-min);
  background: var(--nix-primary);
  color: #fff;
  font-weight: 500;
  font-size: var(--nix-text-base);
  padding: var(--nix-space-2) var(--nix-space-6);
  border-radius: var(--nix-radius-sm);
  text-decoration: none;
  border: none;
  cursor: pointer;
  position: relative;
  overflow: hidden;
  transition: all var(--nix-duration) var(--nix-ease);
}

.nix-ew-hero__btn:hover {
  background: var(--nix-primary-light);
  color: #fff;
  box-shadow: var(--nix-shadow-glow), var(--nix-shadow-lg);
  transform: translateY(-1px);
}

/* Shimmer effect on button */
.nix-ew-hero__btn::after {
  content: '';
  position: absolute;
  top: 0;
  left: -100%;
  width: 100%;
  height: 100%;
  background: linear-gradient(90deg, transparent, rgba(255,255,255,0.2), transparent);
  transition: left 0.5s;
}

.nix-ew-hero__btn:hover::after {
  left: 100%;
}

/* Controls */
.nix-ew-hero__controls {
  display: flex;
  align-items: center;
  gap: 1rem;
  margin-top: 2.5rem;
}

.nix-ew-hero__arrow {
  width: var(--nix-touch-min);
  height: var(--nix-touch-min);
  border-radius: var(--nix-radius-full);
  border: 1px solid rgba(255,255,255,0.15);
  background: transparent;
  color: rgba(255,255,255,0.4);
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  transition: all var(--nix-duration) var(--nix-ease);
  font-size: 1.125rem;
  line-height: 1;
  backdrop-filter: blur(4px);
}

.nix-ew-hero__arrow:hover {
  color: #fff;
  border-color: rgba(255,255,255,0.4);
  background: rgba(255,255,255,0.08);
  transform: scale(1.1);
}

.nix-ew-hero__dots {
  display: flex;
  align-items: center;
  gap: 0.5rem;
}

.nix-ew-hero__dot {
  border: none;
  cursor: pointer;
  border-radius: 9999px;
  transition: all 0.4s cubic-bezier(0.16, 1, 0.3, 1);
  background: rgba(255,255,255,0.2);
  width: 0.375rem;
  height: 0.375rem;
  padding: 0;
}

.nix-ew-hero__dot.is-active {
  width: 1.75rem;
  height: 0.25rem;
  background: var(--nix-primary-light);
  box-shadow: 0 0 10px var(--nix-primary-glow);
}

.nix-ew-hero__counter {
  color: rgba(255,255,255,0.25);
  font-size: 0.75rem;
  font-weight: 500;
  margin-left: 0.5rem;
  font-variant-numeric: tabular-nums;
}

/* Progress bar */
.nix-ew-hero__progress {
  position: absolute;
  bottom: 0;
  left: 0;
  right: 0;
  height: 2px;
  background: rgba(255,255,255,0.08);
  z-index: 20;
}

.nix-ew-hero__progress-fill {
  height: 100%;
  width: 0%;
  background: linear-gradient(90deg, var(--nix-primary), var(--nix-primary-light));
  box-shadow: 0 0 8px var(--nix-primary-glow);
}

/* ============================================================
   ABOUT SECTION
   ============================================================ */
.nix-ew-about {
  padding: 5rem 0;
  background: var(--nix-bg);
}

.nix-ew-about__inner {
  max-width: 64rem;
  margin: 0 auto;
  padding: 0 1.5rem;
}

.nix-ew-about__header {
  max-width: 42rem;
  margin-bottom: 3.5rem;
}

.nix-ew-about__title {
  font-size: clamp(1.5rem, 3vw, 1.875rem);
  color: var(--nix-fg);
  margin-bottom: 1rem;
}

.nix-ew-about__desc {
  color: var(--nix-muted);
  font-size: 0.875rem;
  line-height: 1.7;
}

.nix-ew-about__grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 1px;
  background: var(--nix-border);
  border-radius: var(--nix-radius);
  overflow: hidden;
}

@media (max-width: 768px) {
  .nix-ew-about__grid { grid-template-columns: 1fr; }
}

.nix-ew-about__card {
  background: var(--nix-bg);
  padding: 1.5rem 1.75rem;
  position: relative;
  overflow: hidden;
  transition: background 0.3s;
}

/* Gradient border glow on hover */
.nix-ew-about__card::before {
  content: '';
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  height: 2px;
  background: linear-gradient(90deg, transparent, var(--nix-primary), transparent);
  opacity: 0;
  transition: opacity 0.4s;
}

.nix-ew-about__card:hover::before {
  opacity: 1;
}

.nix-ew-about__card:hover {
  background: rgba(35, 79, 157, 0.03);
}

.nix-ew-about__card-icon {
  color: var(--nix-primary);
  margin-bottom: 1rem;
  font-size: 20px;
  line-height: 1;
}

.nix-ew-about__card-icon svg { width: 1em; height: 1em; stroke-width: 1.5; }
.nix-ew-about__card-icon i { font-size: inherit; }

.nix-ew-about__card-title {
  font-size: 0.875rem;
  color: var(--nix-fg);
  margin-bottom: 0.5rem;
}

.nix-ew-about__card-text {
  color: var(--nix-muted);
  font-size: 0.75rem;
  line-height: 1.6;
}

/* ============================================================
   SERVICES SECTION
   ============================================================ */
.nix-ew-services {
  padding: 5rem 0;
  background: var(--nix-card);
}

.nix-ew-services__inner {
  max-width: 64rem;
  margin: 0 auto;
  padding: 0 1.5rem;
}

.nix-ew-services__header {
  max-width: 42rem;
  margin-bottom: 3.5rem;
}

.nix-ew-services__title {
  font-size: clamp(1.5rem, 3vw, 1.875rem);
  color: var(--nix-fg);
}

.nix-ew-services__list { list-style: none; }

/* "Fale conosco" CTA (mirrors the mappings button) */
.nix-ew-services__cta { margin-top: 2.5rem; text-align: center; }
.nix-ew-services__btn {
  display: inline-flex;
  align-items: center;
  gap: 0.5rem;
  background: var(--nix-primary);
  color: #fff;
  font-family: 'Bricolage Grotesque', system-ui, sans-serif;
  font-weight: 600;
  font-size: var(--nix-text-sm);
  padding: 0.85rem 1.75rem;
  border-radius: var(--nix-radius-sm); /* mesmo raio dos botões de Projetos/Mapeamentos */
  text-decoration: none;
  transition: background 0.25s, transform 0.25s;
}
.nix-ew-services__btn:hover { background: var(--nix-primary-light); color: #fff; transform: translateY(-2px); }

.nix-ew-services__item {
  display: flex;
  align-items: flex-start;
  gap: 1rem;
  padding: 1.5rem 0;
  border-bottom: 1px solid var(--nix-border);
  position: relative;
  transition: padding-left 0.3s cubic-bezier(0.16, 1, 0.3, 1);
}

.nix-ew-services__item:last-child { border-bottom: none; }

/* Slide-in accent line on hover */
.nix-ew-services__item::before {
  content: '';
  position: absolute;
  left: 0;
  top: 50%;
  transform: translateY(-50%);
  width: 3px;
  height: 0;
  background: var(--nix-primary);
  border-radius: 2px;
  transition: height 0.3s cubic-bezier(0.16, 1, 0.3, 1);
}

.nix-ew-services__item:hover::before {
  height: 60%;
}

.nix-ew-services__item:hover {
  padding-left: 1rem;
}

.nix-ew-services__item-icon {
  color: var(--nix-primary);
  flex-shrink: 0;
  margin-top: 0.125rem;
  font-size: 18px;
  line-height: 1;
}

.nix-ew-services__item-icon svg { width: 1em; height: 1em; stroke-width: 1.5; }
.nix-ew-services__item-icon i { font-size: inherit; }

.nix-ew-services__item-title {
  font-size: 0.875rem;
  color: var(--nix-fg);
  margin-bottom: 0.25rem;
  transition: color 0.2s;
}

.nix-ew-services__item:hover .nix-ew-services__item-title {
  color: var(--nix-primary);
}

.nix-ew-services__item-text {
  color: var(--nix-muted);
  font-size: 0.75rem;
  line-height: 1.6;
}

/* ============================================================
   PROJECTS SECTION
   ============================================================ */
.nix-ew-projects {
  padding: 5rem 0;
  background: var(--nix-bg);
}

.nix-ew-projects__inner {
  max-width: 64rem;
  margin: 0 auto;
  padding: 0 1.5rem;
}

.nix-ew-projects__header {
  text-align: center;
  max-width: 42rem;
  margin: 0 auto 3.5rem;
}

.nix-ew-projects__title {
  font-size: clamp(1.5rem, 3vw, 1.875rem);
  color: var(--nix-fg);
  margin-bottom: 0.75rem;
}

.nix-ew-projects__subtitle {
  color: var(--nix-muted);
  font-size: 0.875rem;
  line-height: 1.6;
}

.nix-ew-projects__grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 1.5rem;
}

/* Responsivo do grid de projetos. As media queries usam !important porque o
   Elementor gera uma regra de ALTA especificidade sem media query no CSS por-post
   (`.elementor-2 .elementor-element-XXX .nix-ew-projects__grid { repeat(3,1fr) }`),
   que de outra forma venceria estas e manteria 3 colunas espremidas no mobile. */
@media (max-width: 1024px) {
  .nix-ew-projects__grid { grid-template-columns: repeat(2, 1fr) !important; }
}
@media (max-width: 640px) {
  .nix-ew-projects__grid { grid-template-columns: 1fr !important; gap: 1rem; }
  .nix-ew-projects__cover { aspect-ratio: 2 / 1; padding: 1rem; }
  .nix-ew-projects__body { padding: 1rem 1.25rem; }
}

.nix-ew-projects__card {
  display: flex;
  flex-direction: column;
  height: 100%;
  border-radius: var(--nix-radius-lg);
  border: 1px solid var(--nix-border);
  background: var(--nix-bg);
  overflow: hidden;
  text-decoration: none;
  transition: border-color 0.3s, box-shadow 0.3s, transform 0.3s cubic-bezier(0.16, 1, 0.3, 1);
  will-change: transform;
}
.nix-ew-projects__card:hover {
  border-color: rgba(35, 79, 157, 0.4);
  box-shadow: 0 16px 40px rgba(35, 79, 157, 0.12);
}

/* Capa */
.nix-ew-projects__cover {
  position: relative;
  aspect-ratio: 16 / 10;
  display: flex;
  align-items: flex-end;
  padding: 1.25rem;
  overflow: hidden;
}
.nix-ew-projects__cover img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform 0.5s cubic-bezier(0.16, 1, 0.3, 1);
}
.nix-ew-projects__card:hover .nix-ew-projects__cover img { transform: scale(1.06); }
.nix-ew-projects__cover-shade {
  position: absolute;
  inset: 0;
  background: linear-gradient(to top, rgba(0,0,0,0.35), transparent 55%);
}
.nix-ew-projects__cover-texture {
  position: absolute;
  inset: 0;
  opacity: 0.12;
  background-image:
    radial-gradient(circle at 20% 25%, #fff 0, transparent 45%),
    radial-gradient(circle at 85% 75%, #fff 0, transparent 40%);
}
.nix-ew-projects__cover-cat {
  position: relative;
  z-index: 1;
  font-size: 0.65rem;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.12em;
  color: #fff;
  background: rgba(255,255,255,0.18);
  -webkit-backdrop-filter: blur(4px);
  backdrop-filter: blur(4px);
  padding: 0.3rem 0.7rem;
  border-radius: var(--nix-radius-full);
}
.nix-ew-projects__cover-arrow {
  position: absolute;
  top: 1rem;
  right: 1rem;
  z-index: 1;
  width: 2.25rem;
  height: 2.25rem;
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: 50%;
  color: #fff;
  background: rgba(255,255,255,0.18);
  -webkit-backdrop-filter: blur(4px);
  backdrop-filter: blur(4px);
  transition: background 0.3s, color 0.3s;
}
.nix-ew-projects__card:hover .nix-ew-projects__cover-arrow {
  background: #fff;
  color: var(--nix-primary);
}

/* Corpo */
.nix-ew-projects__body {
  padding: 1.25rem 1.5rem;
  flex: 1;
}
.nix-ew-projects__card-title {
  font-size: 1.0625rem;
  color: var(--nix-fg);
  margin-bottom: 0.5rem;
  line-height: 1.3;
  transition: color 0.3s;
}
.nix-ew-projects__card:hover .nix-ew-projects__card-title { color: var(--nix-primary); }
.nix-ew-projects__card-desc {
  color: var(--nix-muted);
  font-size: 0.8125rem;
  line-height: 1.6;
  display: -webkit-box;
  -webkit-line-clamp: 3;
  line-clamp: 3;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
.nix-ew-projects__card-bar {
  display: block;
  height: 3px;
  background: var(--secondary, #FCC53F);
  transform: scaleX(0);
  transform-origin: left;
  transition: transform 0.3s var(--nix-ease);
}
.nix-ew-projects__card:hover .nix-ew-projects__card-bar { transform: scaleX(1); }

/* Botão opcional "Ver projeto" dentro do card */
.nix-ew-projects__card-btn {
  display: inline-flex;
  align-items: center;
  gap: 0.4rem;
  margin-top: 1rem;
  padding: 0.5rem 1.1rem;
  font-size: 0.8125rem;
  font-weight: 600;
  color: var(--nix-primary);
  background: rgba(35, 79, 157, 0.08);
  border: 1px solid rgba(35, 79, 157, 0.2);
  border-radius: var(--nix-radius-sm);
  transition: background 0.3s, color 0.3s, border-color 0.3s, gap 0.3s;
}
.nix-ew-projects__card-btn svg { transition: transform 0.3s; }
.nix-ew-projects__card:hover .nix-ew-projects__card-btn {
  background: var(--nix-primary);
  border-color: var(--nix-primary);
  color: #fff;
  gap: 0.6rem;
}
.nix-ew-projects__card:hover .nix-ew-projects__card-btn svg { transform: translateX(2px); }

/* Botão "Ver todos os projetos" (rodapé da seção) — mesmo estilo do de mapeamentos */
.nix-ew-projects__footer {
  text-align: center;
  margin-top: 2.5rem;
}
.nix-ew-projects__view-all {
  display: inline-flex;
  align-items: center;
  gap: var(--nix-space-2);
  min-height: var(--nix-touch-min);
  background: var(--nix-primary);
  color: #fff;
  font-weight: 500;
  font-size: var(--nix-text-base);
  padding: var(--nix-space-2) var(--nix-space-8);
  border-radius: var(--nix-radius-sm);
  text-decoration: none;
  border: none;
  transition: background 0.3s, box-shadow 0.3s, transform 0.3s, gap 0.3s;
}
.nix-ew-projects__view-all:hover {
  background: var(--nix-primary-light);
  color: #fff;
  box-shadow: var(--nix-shadow-glow);
  transform: translateY(-1px);
  gap: calc(var(--nix-space-2) + 2px);
}
.nix-ew-projects__view-all svg { transition: transform 0.3s; }
.nix-ew-projects__view-all:hover svg { transform: translateX(2px); }

/* ============================================================
   TEAM SECTION
   ============================================================ */
.nix-ew-team {
  padding: 5rem 0;
  background: var(--nix-card);
}

.nix-ew-team__inner {
  max-width: 64rem;
  margin: 0 auto;
  padding: 0 1.5rem;
}

.nix-ew-team__header {
  text-align: center;
  margin-bottom: 3.5rem;
}

.nix-ew-team__title {
  font-size: clamp(1.5rem, 3vw, 1.875rem);
  color: var(--nix-fg);
  margin-bottom: 0.75rem;
}

.nix-ew-team__subtitle {
  color: var(--nix-muted);
  font-size: 0.875rem;
  max-width: 28rem;
  margin: 0 auto 1rem;
}

/* Botão "Ver equipe completa" — mesmo estilo do botão de Mapeamentos */
.nix-ew-team__footer {
  text-align: center;
  margin-top: 2.5rem;
}
.nix-ew-team__btn {
  display: inline-flex;
  align-items: center;
  gap: var(--nix-space-2);
  min-height: var(--nix-touch-min);
  background: var(--nix-primary);
  color: #fff;
  font-weight: 500;
  font-size: var(--nix-text-base);
  padding: var(--nix-space-2) var(--nix-space-8);
  border-radius: var(--nix-radius-sm);
  text-decoration: none;
  border: none;
  cursor: pointer;
  position: relative;
  overflow: hidden;
  transition: all var(--nix-duration) var(--nix-ease);
}
.nix-ew-team__btn:hover {
  background: var(--nix-primary-light);
  color: #fff;
  box-shadow: var(--nix-shadow-glow);
  transform: translateY(-1px);
}
.nix-ew-team__btn::after {
  content: '';
  position: absolute;
  top: 0;
  left: -100%;
  width: 100%;
  height: 100%;
  background: linear-gradient(90deg, transparent, rgba(255,255,255,0.15), transparent);
  transition: left 0.5s;
}
.nix-ew-team__btn:hover::after { left: 100%; }
.nix-ew-team__btn svg { width: 15px; height: 15px; transition: transform 0.3s; }
.nix-ew-team__btn:hover svg { transform: translateX(3px); }

.nix-ew-team__grid {
  display: grid;
  grid-template-columns: repeat(5, 1fr);
  gap: 1.5rem;
  margin: 0 auto;
}

@media (max-width: 1024px) { .nix-ew-team__grid { grid-template-columns: repeat(3, 1fr) !important; } }
@media (max-width: 640px)  { .nix-ew-team__grid { grid-template-columns: 1fr !important; gap: 0.75rem; } }

.nix-ew-team__card {
  display: flex;
  flex-direction: column;
  align-items: center;
  text-align: center;
  background: var(--nix-bg);
  border-radius: 1.5rem;
  border: 1px solid var(--nix-border);
  padding: 2.25rem 1.5rem;
  box-shadow: 0 1px 3px rgba(0,0,0,0.04);
  transition: border-color 0.3s, box-shadow 0.3s, transform 0.3s cubic-bezier(0.16, 1, 0.3, 1);
  will-change: transform;
}
.nix-ew-team__card:hover {
  border-color: rgba(35, 79, 157, 0.4);
  box-shadow: 0 18px 45px rgba(35, 79, 157, 0.13);
  transform: translateY(-4px);
}

/* Avatar redondo (foto ou iniciais) — tamanho controlado pelo slider */
.nix-ew-team__media {
  position: relative;
  width: 136px;
  height: 136px;
  flex-shrink: 0;
  border-radius: 50%;
  overflow: hidden;
  display: flex;
  align-items: center;
  justify-content: center;
  margin-bottom: 1.5rem;
  box-shadow: 0 0 0 4px var(--nix-bg), 0 6px 18px rgba(0,0,0,0.12);
  transition: box-shadow 0.3s, transform 0.3s cubic-bezier(0.16, 1, 0.3, 1);
}
.nix-ew-team__card:hover .nix-ew-team__media {
  box-shadow: 0 0 0 4px var(--nix-bg), 0 0 0 8px rgba(35,79,157,0.15);
}
.nix-ew-team__media img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.nix-ew-team__media--initials {
  background: linear-gradient(135deg, var(--nix-primary), var(--nix-primary-dark));
}
.nix-ew-team__media-texture {
  position: absolute;
  inset: 0;
  opacity: 0.14;
  background-image:
    radial-gradient(circle at 28% 22%, #fff 0, transparent 45%),
    radial-gradient(circle at 78% 72%, #fff 0, transparent 40%);
}
.nix-ew-team__initials {
  position: relative;
  color: #fff;
  font-size: 36px;
  font-weight: 800;
  letter-spacing: -0.01em;
}

/* Corpo */
.nix-ew-team__body { width: 100%; }
.nix-ew-team__name {
  font-size: 1.1875rem;
  color: var(--nix-fg);
  line-height: 1.25;
  margin-bottom: 0.35rem;
}
.nix-ew-team__role {
  font-size: 0.875rem;
  color: var(--nix-primary);
  font-weight: 600;
}
.nix-ew-team__detail {
  font-size: 0.75rem;
  color: var(--nix-muted);
  line-height: 1.45;
  margin-top: 0.35rem;
}
.nix-ew-team__card-bar {
  display: block;
  height: 3px;
  margin-top: auto;
  background: var(--secondary, #FCC53F);
  transform: scaleX(0);
  transform-origin: left;
  transition: transform 0.3s var(--nix-ease);
}
.nix-ew-team__card:hover .nix-ew-team__card-bar { transform: scaleX(1); }

/* Mobile: mantém avatar redondo centralizado, card mais compacto */
@media (max-width: 640px) {
  .nix-ew-team__card { padding: 1.75rem 1.25rem; }
  .nix-ew-team__media { margin-bottom: 1.1rem; }
}

/* ============================================================
   CTA SECTION — Immersive
   ============================================================ */
.nix-ew-cta {
  position: relative;
  background: var(--nix-dark-bg);
  padding: 5rem 0;
  overflow: hidden;
}

/* Animated background gradient */
.nix-ew-cta::before {
  content: '';
  position: absolute;
  inset: 0;
  background: radial-gradient(circle at 20% 80%, rgba(35, 79, 157, 0.08) 0%, transparent 50%),
              radial-gradient(circle at 80% 20%, rgba(255, 77, 141, 0.05) 0%, transparent 50%);
  animation: nixCtaBg 8s ease-in-out infinite alternate;
}

@keyframes nixCtaBg {
  0% { opacity: 0.5; }
  100% { opacity: 1; }
}

.nix-ew-cta__glow {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  width: 400px;
  height: 400px;
  background: radial-gradient(circle, rgba(35, 79, 157, 0.15) 0%, transparent 70%);
  border-radius: 50%;
  filter: blur(60px);
  pointer-events: none;
  transition: left 0.3s ease-out, top 0.3s ease-out;
}

/* Floating particles */
.nix-ew-cta__particles {
  position: absolute;
  inset: 0;
  overflow: hidden;
  pointer-events: none;
}

.nix-ew-cta__particle {
  position: absolute;
  width: 2px;
  height: 2px;
  background: var(--nix-primary-light);
  border-radius: 50%;
  opacity: 0.3;
  animation: nixFloat linear infinite;
}

.nix-ew-cta__particle:nth-child(1) { left: 10%; animation-duration: 12s; animation-delay: 0s; }
.nix-ew-cta__particle:nth-child(2) { left: 30%; animation-duration: 15s; animation-delay: 2s; }
.nix-ew-cta__particle:nth-child(3) { left: 50%; animation-duration: 10s; animation-delay: 4s; }
.nix-ew-cta__particle:nth-child(4) { left: 70%; animation-duration: 14s; animation-delay: 1s; }
.nix-ew-cta__particle:nth-child(5) { left: 90%; animation-duration: 11s; animation-delay: 3s; }

@keyframes nixFloat {
  0% { transform: translateY(100vh) scale(0); opacity: 0; }
  10% { opacity: 0.3; }
  90% { opacity: 0.3; }
  100% { transform: translateY(-20vh) scale(1); opacity: 0; }
}

.nix-ew-cta__inner {
  position: relative;
  z-index: 10;
  max-width: 42rem;
  margin: 0 auto;
  padding: 0 1.5rem;
  text-align: center;
}

.nix-ew-cta__title {
  font-size: clamp(1.5rem, 3vw, 1.875rem);
  color: #fff;
  margin-bottom: 1rem;
}

.nix-ew-cta__desc {
  color: #a09cb0;
  font-size: 0.875rem;
  max-width: 28rem;
  margin: 0 auto 2rem;
  line-height: 1.6;
}

.nix-ew-cta__btn {
  display: inline-flex;
  align-items: center;
  min-height: var(--nix-touch-min);
  background: var(--nix-primary);
  color: #fff;
  font-weight: 500;
  font-size: var(--nix-text-base);
  padding: var(--nix-space-3) var(--nix-space-8);
  border-radius: var(--nix-radius-sm);
  text-decoration: none;
  border: none;
  cursor: pointer;
  position: relative;
  overflow: hidden;
  transition: all var(--nix-duration) var(--nix-ease);
}

.nix-ew-cta__btn:hover {
  background: var(--nix-primary-light);
  color: #fff;
  box-shadow: var(--nix-shadow-glow), var(--nix-shadow-lg);
  transform: translateY(-2px);
}

.nix-ew-cta__btn::after {
  content: '';
  position: absolute;
  top: 0;
  left: -100%;
  width: 100%;
  height: 100%;
  background: linear-gradient(90deg, transparent, rgba(255,255,255,0.15), transparent);
  transition: left 0.6s;
}

.nix-ew-cta__btn:hover::after {
  left: 100%;
}

/* ============================================================
   CONTACT SECTION
   ============================================================ */
.nix-ew-contact {
  padding: 5rem 0;
  background: var(--nix-bg);
}

.nix-ew-contact__inner {
  max-width: 64rem;
  margin: 0 auto;
  padding: 0 1.5rem;
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 3rem;
}

@media (max-width: 768px) { .nix-ew-contact__inner { grid-template-columns: 1fr; } }

.nix-ew-contact__title {
  font-size: clamp(1.5rem, 3vw, 1.875rem);
  color: var(--nix-fg);
  margin-bottom: 1rem;
}

.nix-ew-contact__desc {
  color: var(--nix-muted);
  font-size: 0.875rem;
  line-height: 1.7;
  margin-bottom: 1.5rem;
}

.nix-ew-contact__info {
  font-size: 0.875rem;
  color: var(--nix-muted);
  line-height: 2;
}

.nix-ew-contact__form {
  display: flex;
  flex-direction: column;
  gap: 0.75rem;
}

.nix-ew-contact__row {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 0.75rem;
}

@media (max-width: 480px) { .nix-ew-contact__row { grid-template-columns: 1fr; } }

.nix-ew-contact__input,
.nix-ew-contact__textarea,
.nix-ew-contact__select {
  width: 100%;
  min-height: var(--nix-touch-min);
  padding: var(--nix-space-2) var(--nix-space-3);
  border: 1px solid var(--nix-border);
  border-radius: var(--nix-radius-sm);
  font-size: var(--nix-text-base);
  font-family: 'Bricolage Grotesque', system-ui, sans-serif;
  background: var(--nix-bg);
  color: var(--nix-fg);
  outline: none;
  transition: border-color var(--nix-duration-fast), box-shadow var(--nix-duration-fast);
}

.nix-ew-contact__input:focus,
.nix-ew-contact__textarea:focus,
.nix-ew-contact__select:focus,
.nix-ew-contact__input:focus-visible,
.nix-ew-contact__textarea:focus-visible,
.nix-ew-contact__select:focus-visible {
  /* The site theme paints a thick dark UA/theme outline on :focus that stacks
     on top of our soft ring, producing the "double border" bug — and also
     overrides our border-color/ring. Force our clean focus state to win. */
  outline: none !important;
  border-color: var(--nix-primary) !important;
  box-shadow: 0 0 0 3px rgba(35, 79, 157, 0.12) !important;
}

.nix-ew-contact__textarea {
  resize: none;
  min-height: 100px;
}

.nix-ew-contact__submit {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: var(--nix-space-2);
  width: 100%;
  min-height: var(--nix-touch-min);
  padding: var(--nix-space-2);
  background: var(--nix-primary);
  color: #fff;
  font-weight: 500;
  font-size: var(--nix-text-base);
  border: none;
  border-radius: var(--nix-radius-sm);
  cursor: pointer;
  font-family: 'Bricolage Grotesque', system-ui, sans-serif;
  position: relative;
  overflow: hidden;
  transition: all var(--nix-duration) var(--nix-ease);
}

.nix-ew-contact__submit:hover {
  background: var(--nix-primary-light);
  box-shadow: var(--nix-shadow-glow);
  transform: translateY(-1px);
}

.nix-ew-contact__submit::after {
  content: '';
  position: absolute;
  top: 0;
  left: -100%;
  width: 100%;
  height: 100%;
  background: linear-gradient(90deg, transparent, rgba(255,255,255,0.15), transparent);
  transition: left 0.5s;
}

.nix-ew-contact__submit:hover::after {
  left: 100%;
}

.nix-ew-contact__submit.is-sent {
  background: #01A4C3;
  box-shadow: 0 0 20px rgba(46, 196, 182, 0.3);
}

.nix-ew-contact__submit svg { width: 14px; height: 14px; }

/* ============================================================
   FOOTER
   ============================================================ */
.nix-ew-footer {
  background: var(--nix-dark-bg);
  color: rgba(255,255,255,0.7);
  position: relative;
  overflow: hidden;
}

/* On the standalone plugin pages (projetos / cursos / mapeamentos) the home's
   Elementor section background (image/overlay) doesn't transfer, so the footer
   would render on white. Force the brand-dark background on both the footer and
   its wrapping Elementor container so it looks like the home footer — one
   consistent footer site-wide. */
body.nix-project-page .nix-ew-footer,
body.ead-pontao-virtual-page .nix-ew-footer,
body.nix-map-virtual-page .nix-ew-footer,
body.nix-project-page .nix-ew-footer__container,
body.ead-pontao-virtual-page .nix-ew-footer__container,
body.nix-map-virtual-page .nix-ew-footer__container {
  background-color: #1D1D1B;
}
/* Paint the Elementor section/container that wraps the footer widget too, so
   there's no white band around it. Targets the e-con that contains our footer. */
body.nix-project-page .e-con:has(.nix-ew-footer),
body.ead-pontao-virtual-page .e-con:has(.nix-ew-footer),
body.nix-map-virtual-page .e-con:has(.nix-ew-footer) {
  background-color: #1D1D1B;
}

/* Subtle top gradient line */
.nix-ew-footer::before {
  content: '';
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  height: 1px;
  background: linear-gradient(90deg, transparent, var(--nix-primary), var(--nix-primary-light), transparent);
  opacity: 0.4;
}

/* Imagem de fundo + overlay (camadas atrás do conteúdo) */
.nix-ew-footer__bg,
.nix-ew-footer__overlay {
  display: block;
  position: absolute;
  top: 0; left: 0; right: 0; bottom: 0;
  width: 100%;
  height: 100%;
  pointer-events: none;
}
.nix-ew-footer__bg {
  z-index: 1;
  background-position: center center;
  background-size: cover;
  background-repeat: no-repeat;
}
.nix-ew-footer__overlay {
  z-index: 2;
  background: #1D1D1B;
  opacity: 0.7;
}
/* conteúdo acima das camadas */
.nix-ew-footer--has-bg .nix-ew-footer__inner { position: relative; z-index: 3; }
.nix-ew-footer--has-bg::before { z-index: 4; }

.nix-ew-footer__inner {
  /* Match the site's boxed content width (Elementor's 1200px) so the footer
     content lines up with the header on the same left/right margins. */
  max-width: 1200px;
  margin: 0 auto;
  padding: 3.5rem 1.5rem 2rem;
}

.nix-ew-footer__grid {
  /* Flexbox so any number of columns (Brand + Nav + Plataformas + Contato…)
     sit on ONE row. The brand column is wider but must NOT greedily grow and
     steal the slack, otherwise the last column (Contato) wraps below. Link
     columns share the remaining width evenly. */
  display: flex;
  flex-wrap: nowrap;
  align-items: flex-start;
  gap: 2rem;
  margin-bottom: 3rem;
}
.nix-ew-footer__grid > .nix-ew-footer__col {
  flex: 1 1 140px;   /* link columns: share remaining width evenly */
  min-width: 0;
}
.nix-ew-footer__grid > .nix-ew-footer__col--brand {
  flex: 1 1 240px;   /* brand wider basis, same grow so it doesn't eat the slack */
  max-width: 340px;
}

/* Tablet: let columns wrap to 2 rows if the row gets too tight. */
@media (max-width: 880px) {
  .nix-ew-footer__grid { flex-wrap: wrap; }
  .nix-ew-footer__grid > .nix-ew-footer__col { flex: 1 1 160px; }
  .nix-ew-footer__grid > .nix-ew-footer__col--brand { flex: 1 1 100%; max-width: none; }
}

@media (max-width: 640px) {
  /* Mobile: empilha as colunas e CENTRALIZA todo o conteúdo do rodapé.
     !important porque o controle "Alinhamento" do widget grava text-align via
     selector inline (default left) com prioridade maior que esta media query. */
  .nix-ew-footer__grid {
    flex-direction: column;
    gap: 2rem;
    text-align: center !important;
  }
  .nix-ew-footer__brand-desc,
  .nix-ew-footer__bottom,
  .nix-ew-footer__copy,
  .nix-ew-footer__policy { text-align: center !important; }
  /* As colunas DEVEM ocupar a largura toda (width:100% + align-self:stretch),
     senão num flex-column elas encolhem para a largura do conteúdo e encostam
     à esquerda — fazendo o text-align:center centralizar dentro de ~80px em vez
     de na tela. Esse era o motivo de "Navegação/Plataformas" parecerem à esquerda. */
  .nix-ew-footer__grid > .nix-ew-footer__col,
  .nix-ew-footer__grid > .nix-ew-footer__col--brand {
    flex: 0 0 auto !important;
    width: 100% !important;
    max-width: none !important;
    align-self: stretch !important;
  }

  /* Centraliza cada bloco: logo, descrição, redes, navegação e contato. */
  .nix-ew-footer__col,
  .nix-ew-footer__col--brand { display: flex; flex-direction: column; align-items: center !important; text-align: center !important; }
  .nix-ew-footer__col-title,
  .nix-ew-footer__title { width: 100%; text-align: center !important; }
  .nix-ew-footer__brand,
  .nix-ew-footer__brand-desc { margin-left: auto; margin-right: auto; }
  .nix-ew-footer__logo { margin-left: auto; margin-right: auto; }
  .nix-ew-footer__social { justify-content: center; width: 100%; }
  .nix-ew-footer__nav { align-items: center !important; width: 100%; }
  .nix-ew-footer__nav a { text-align: center; }
  .nix-ew-footer__contact-links { align-items: center !important; width: 100%; }
  .nix-ew-footer__contact-link { justify-content: center; }
  .nix-ew-footer__bottom { justify-content: center; text-align: center; }
}

.nix-ew-footer__brand {
  font-family: 'Bricolage Grotesque', system-ui, sans-serif;
  font-size: 1rem;
  font-weight: 700;
  color: #fff;
  margin-bottom: 0.75rem;
}

.nix-ew-footer__brand-accent {
  color: var(--nix-primary-light);
}

.nix-ew-footer__logo {
  display: block;
  width: 140px;
  max-width: 100%;
  height: auto;
  margin-bottom: 0.75rem;
}

.nix-ew-footer__brand-desc {
  font-size: 0.75rem;
  color: rgba(255,255,255,0.4);
  line-height: 1.6;
}

.nix-ew-footer__col-title {
  font-size: 0.65rem;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.2em;
  color: rgba(255,255,255,0.3);
  margin-bottom: 1rem;
}

.nix-ew-footer__nav {
  display: flex;
  flex-direction: column;
  gap: 0.5rem;
  list-style: none;
}

.nix-ew-footer__nav a {
  font-size: 0.75rem;
  color: rgba(255,255,255,0.4);
  text-decoration: none;
  transition: color 0.2s, padding-left 0.3s;
  display: inline-block;
}

.nix-ew-footer__nav a:hover {
  color: rgba(255,255,255,0.8);
  padding-left: 0.25rem;
}

.nix-ew-footer__contact-links {
  display: flex;
  flex-direction: column;
  gap: 0.625rem;
}

.nix-ew-footer__contact-link {
  display: inline-flex;
  align-items: center;
  gap: 0.5rem;
  font-size: 0.75rem;
  color: rgba(255,255,255,0.4);
  text-decoration: none;
  transition: color 0.2s;
}

.nix-ew-footer__contact-link:hover {
  color: rgba(255,255,255,0.8);
}

.nix-ew-footer__contact-link svg {
  color: var(--nix-primary-light);
  width: 12px;
  height: 12px;
  transition: transform 0.3s;
}

.nix-ew-footer__contact-link:hover svg {
  transform: scale(1.2);
}

/* Social icons */
.nix-ew-footer__social {
  display: flex;
  flex-wrap: wrap;
  gap: 0.75rem;
  margin-top: 1.25rem;
}

.nix-ew-footer__social a {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  color: var(--nix-primary-light);
  transition: color 0.2s, background 0.2s, transform 0.2s;
}

.nix-ew-footer__social a:hover {
  color: rgba(255,255,255,0.9);
  transform: translateY(-2px);
}

.nix-ew-footer__social svg {
  width: 18px;
  height: 18px;
}

/* Circle / square variants */
.nix-ew-footer__social--circle a,
.nix-ew-footer__social--square a {
  width: 38px;
  height: 38px;
  background: rgba(255,255,255,0.08);
}

.nix-ew-footer__social--circle a { border-radius: 50%; }
.nix-ew-footer__social--square a { border-radius: 8px; }

.nix-ew-footer__social--circle a:hover,
.nix-ew-footer__social--square a:hover {
  background: rgba(255,255,255,0.16);
}

/* Center alignment support */
.nix-ew-footer__grid[style*="center"] .nix-ew-footer__social,
.nix-ew-footer__grid[style*="center"] .nix-ew-footer__nav,
.nix-ew-footer__grid[style*="center"] .nix-ew-footer__contact-links {
  align-items: center;
}

.nix-ew-footer__bottom {
  border-top: 1px solid rgba(255,255,255,0.06);
  padding-top: 1.5rem;
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: 0.75rem;
}

.nix-ew-footer__copy,
.nix-ew-footer__policy {
  font-size: 0.6rem;
  color: rgba(255,255,255,0.25);
}

/* ============================================================
   REDUCED MOTION
   ============================================================ */
@media (prefers-reduced-motion: reduce) {
  .nix-ew-reveal,
  .nix-ew-word,
  .nix-ew-stagger-in,
  .nix-ew-hero__slide,
  .nix-ew-hero__slide img,
  .nix-ew-hero__text,
  .nix-ew-tilt,
  .nix-ew-magnetic {
    animation: none !important;
    transition: none !important;
    opacity: 1 !important;
    transform: none !important;
  }

  .nix-ew-hero__text {
    opacity: 0 !important;
    visibility: hidden !important;
  }

  .nix-ew-hero__text:not(.is-active) {
    position: absolute;
  }

  .nix-ew-hero__text.is-active {
    position: relative;
    opacity: 1 !important;
    visibility: visible !important;
  }

  .nix-ew-hero__grain {
    animation: none !important;
  }
}

/* ============================================================
   MAPPINGS WIDGET — Latest Entries Grid
   ============================================================ */
.nix-ew-mappings {
  padding: 5rem 0;
  background: var(--nix-bg);
}

.nix-ew-mappings__inner {
  max-width: 64rem;
  margin: 0 auto;
  padding: 0 1.5rem;
}

.nix-ew-mappings__header {
  max-width: 42rem;
  margin-bottom: 3rem;
}

.nix-ew-mappings__title {
  font-size: clamp(1.5rem, 3vw, 1.875rem);
  color: var(--nix-fg);
  margin-bottom: 0.75rem;
}

.nix-ew-mappings__subtitle {
  color: var(--nix-muted);
  font-size: 0.875rem;
  line-height: 1.6;
}

.nix-ew-mappings__grid {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 1.25rem;
}

@media (max-width: 640px) { .nix-ew-mappings__grid { grid-template-columns: 1fr !important; } }

.nix-ew-mappings__card {
  display: flex;
  flex-direction: column;
  height: 100%;
  border-radius: var(--nix-radius-lg, 1rem);
  border: 1px solid var(--nix-border);
  background: var(--nix-bg);
  overflow: hidden;
  text-decoration: none;
  transition: border-color 0.3s, box-shadow 0.3s, transform 0.3s cubic-bezier(0.16, 1, 0.3, 1);
  will-change: transform;
}

.nix-ew-mappings__card:hover {
  transform: translateY(-4px);
  border-color: rgba(35, 79, 157, 0.4);
  box-shadow: 0 16px 40px rgba(35, 79, 157, 0.12);
}

.nix-ew-mappings__card:focus-visible {
  outline: 2px solid var(--card-accent, var(--nix-primary));
  outline-offset: 3px;
}

/* Capa: só a imagem (ou a cor de fundo quando não há capa). Sem texto por cima. */
.nix-ew-mappings__cover {
  position: relative;
  /* Proporção nativa dos banners de mapeamento (~2.25). Usar 16/10 cortava as
     laterais das artes, que têm texto. Com 9/4 a capa aparece inteira. */
  aspect-ratio: 9 / 4;
  overflow: hidden;
  background: var(--card-accent, var(--nix-primary));
}

.nix-ew-mappings__cover img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  /* contain: nunca corta a arte. Se a imagem fugir da proporção do card, sobra
     uma faixa com a cor do tipo em vez de recortar o banner. */
  object-fit: contain;
  display: block;
  transition: transform 0.5s cubic-bezier(0.16, 1, 0.3, 1);
}

/* Sem zoom no hover: com object-fit contain o scale recortaria o banner. */

/* Badge de contagem sobre a capa — chip claro, legível em qualquer imagem. */
.nix-ew-mappings__card-badge {
  position: absolute;
  top: 0.75rem;
  left: 0.75rem;
  z-index: 2;
  font-size: 0.65rem;
  font-weight: 600;
  color: var(--nix-primary);
  background: rgba(255,255,255,0.92);
  padding: 0.25rem 0.625rem;
  border-radius: 9999px;
  box-shadow: 0 1px 3px rgba(0,0,0,0.12);
}

/* Corpo: título e descrição em texto escuro, igual à vitrine de Projetos. */
.nix-ew-mappings__body {
  padding: 1.25rem 1.5rem;
  flex: 1;
  display: flex;
  flex-direction: column;
}

.nix-ew-mappings__card-title {
  font-size: 1.0625rem;
  color: var(--nix-fg);
  margin-bottom: 0.5rem;
  line-height: 1.3;
  transition: color 0.3s;
}

.nix-ew-mappings__card:hover .nix-ew-mappings__card-title { color: var(--nix-primary); }

.nix-ew-mappings__card-desc {
  color: var(--nix-muted);
  font-size: 0.8125rem;
  line-height: 1.6;
  margin-bottom: 0.75rem;
}

.nix-ew-mappings__card-cta {
  display: inline-flex;
  align-items: center;
  gap: 0.25rem;
  margin-top: auto;
  font-size: 0.8125rem;
  font-weight: 500;
  color: var(--nix-primary);
  transition: all 0.3s;
}

.nix-ew-mappings__card-cta svg {
  transition: transform 0.3s;
}

.nix-ew-mappings__card:hover .nix-ew-mappings__card-cta {
  color: var(--nix-primary);
  gap: 0.5rem;
}

.nix-ew-mappings__card:hover .nix-ew-mappings__card-cta svg {
  transform: translateX(2px);
}

.nix-ew-mappings__footer {
  text-align: center;
  margin-top: 2.5rem;
}

.nix-ew-mappings__btn {
  display: inline-flex;
  align-items: center;
  gap: var(--nix-space-2);
  min-height: var(--nix-touch-min);
  background: var(--nix-primary);
  color: #fff;
  font-weight: 500;
  font-size: var(--nix-text-base);
  padding: var(--nix-space-2) var(--nix-space-8);
  border-radius: var(--nix-radius-sm);
  text-decoration: none;
  border: none;
  cursor: pointer;
  position: relative;
  overflow: hidden;
  transition: all var(--nix-duration) var(--nix-ease);
}

.nix-ew-mappings__btn:hover {
  background: var(--nix-primary-light);
  color: #fff;
  box-shadow: var(--nix-shadow-glow);
  transform: translateY(-1px);
}

.nix-ew-mappings__btn::after {
  content: '';
  position: absolute;
  top: 0;
  left: -100%;
  width: 100%;
  height: 100%;
  background: linear-gradient(90deg, transparent, rgba(255,255,255,0.15), transparent);
  transition: left 0.5s;
}

.nix-ew-mappings__btn:hover::after {
  left: 100%;
}

.nix-ew-mappings__btn svg {
  transition: transform 0.3s;
}

.nix-ew-mappings__btn:hover svg {
  transform: translateX(3px);
}


/* ── Mappings Overlay (fullscreen instant) ── */
.nix-ew-mappings__overlay {
  position: fixed;
  inset: 0;
  z-index: 99999;
  background: #fff;
  display: flex;
  flex-direction: column;
  transform: translateX(100%);
  opacity: 0;
  visibility: hidden;
  transition: transform 0.45s cubic-bezier(0.16, 1, 0.3, 1),
              opacity 0.35s ease,
              visibility 0s 0.45s;
}

.nix-ew-mappings__overlay.is-open {
  transform: translateX(0);
  opacity: 1;
  visibility: visible;
  transition: transform 0.45s cubic-bezier(0.16, 1, 0.3, 1),
              opacity 0.35s ease,
              visibility 0s 0s;
}

.nix-ew-mappings__overlay-bar {
  display: flex;
  align-items: center;
  gap: 1rem;
  padding: 0 1.5rem;
  height: 48px;
  border-bottom: 1px solid var(--nix-border);
  background: var(--nix-bg);
  flex-shrink: 0;
}

.nix-ew-mappings__overlay-back {
  display: inline-flex;
  align-items: center;
  gap: 0.4rem;
  background: none;
  border: none;
  font-size: 0.8125rem;
  font-family: inherit;
  color: var(--nix-muted);
  cursor: pointer;
  padding: 0.25rem 0;
  transition: color 0.2s;
}

.nix-ew-mappings__overlay-back:hover { color: var(--nix-primary); }
.nix-ew-mappings__overlay-back:focus-visible { outline: 2px solid var(--nix-primary); outline-offset: 2px; }
.nix-ew-mappings__overlay-back svg { width: 16px; height: 16px; }

.nix-ew-mappings__overlay-title {
  font-size: 0.875rem;
  color: var(--nix-fg);
  font-weight: 600;
}

.nix-ew-mappings__overlay-body {
  flex: 1;
  position: relative;
  overflow: hidden;
}

.nix-ew-mappings__overlay-body iframe {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  border: none;
  display: none;
}

.nix-ew-mappings__overlay-body iframe.is-active {
  display: block;
}

.nix-ew-mappings__loader {
  position: absolute;
  inset: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  background: var(--nix-bg);
  z-index: 5;
}

.nix-ew-mappings__loader-spinner {
  width: 32px;
  height: 32px;
  border: 3px solid var(--nix-border);
  border-top-color: var(--nix-primary);
  border-radius: 50%;
  animation: nixSpin 0.7s linear infinite;
}

@keyframes nixSpin {
  to { transform: rotate(360deg); }
}


/* ============================================================
   NAVBAR
   ============================================================ */
.nix-ew-navbar {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  z-index: 9999;
  transition: background var(--nix-duration) ease, border-color var(--nix-duration) ease;
  background: transparent;
  border-bottom: 1px solid transparent;
}

/* In Elementor editor, use sticky instead of fixed */
.elementor-editor-active .nix-ew-navbar {
  position: relative;
}

.nix-ew-navbar.is-scrolled {
  background: rgba(255,255,255,0.92);
  backdrop-filter: blur(16px);
  -webkit-backdrop-filter: blur(16px);
  border-bottom-color: var(--nix-border);
  box-shadow: var(--nix-shadow-sm);
}

.nix-ew-navbar__inner {
  /* Same boxed width as the footer so the logo/menu line up with the footer. */
  max-width: 1200px;
  margin: 0 auto;
  padding: 0 var(--nix-space-6);
  height: 56px;
  display: flex;
  align-items: center;
  justify-content: space-between;
}

/* Brand */
.nix-ew-navbar__brand {
  font-family: 'Bricolage Grotesque', system-ui, sans-serif;
  font-size: var(--nix-text-base);
  font-weight: 700;
  color: #fff;
  text-decoration: none;
  letter-spacing: -0.01em;
  display: flex;
  align-items: center;
  gap: var(--nix-space-2);
  transition: color var(--nix-duration);
}

.nix-ew-navbar.is-scrolled .nix-ew-navbar__brand {
  color: var(--nix-fg);
}

.nix-ew-navbar__brand-accent {
  color: rgba(255,255,255,0.6);
  transition: color var(--nix-duration);
}

.nix-ew-navbar.is-scrolled .nix-ew-navbar__brand-accent {
  color: var(--nix-primary);
}

.nix-ew-navbar__logo {
  height: 32px;
  width: auto;
  max-width: 160px;
  display: block;
  object-fit: contain;
}

/* Desktop links */
.nix-ew-navbar__links {
  display: flex;
  align-items: center;
  gap: var(--nix-space-6);
}

.nix-ew-navbar__link {
  font-size: var(--nix-text-sm);
  font-weight: 500;
  color: rgba(255,255,255,0.5);
  text-decoration: none;
  transition: color var(--nix-duration-fast);
  padding: var(--nix-space-1) 0;
}

.nix-ew-navbar__link:hover {
  color: rgba(255,255,255,0.9);
}

.nix-ew-navbar.is-scrolled .nix-ew-navbar__link {
  color: var(--nix-muted);
}

.nix-ew-navbar.is-scrolled .nix-ew-navbar__link:hover {
  color: var(--nix-fg);
}

/* ── Standalone pages (projetos / cursos / mapeamentos) ──
   These pages have a WHITE background with no dark hero behind the navbar, so
   the transparent "top" state would render white links on white (invisible).
   Force the solid (scrolled) look at all times. The navbar stays FIXED (as on
   the home) so it remains pinned to the top while scrolling — `sticky` fails
   here because the widget's wrapper is only as tall as the bar itself. We add
   top padding to the body to offset the fixed bar so content isn't hidden. */
/* Only when the FALLBACK Nix navbar is used (no Elementor Theme Builder header)
   does the project page need the fixed-bar offset. With the Elementor header the
   bar flows normally, so no body padding is added. */
body.nix-project-page:has(.nix-ew-navbar) { padding-top: 56px; /* = navbar height */ }
body.nix-project-page .nix-ew-navbar,
body.ead-pontao-virtual-page .nix-ew-navbar,
body.nix-map-virtual-page .nix-ew-navbar {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  background: rgba(255,255,255,0.95);
  -webkit-backdrop-filter: blur(16px);
  backdrop-filter: blur(16px);
  border-bottom-color: var(--nix-border);
  box-shadow: var(--nix-shadow-sm);
}
/* When logged in, the WordPress admin bar (fixed, 32px) sits at the very top —
   push the fixed navbar below it and add the matching offset to the content. */
body.nix-project-page.admin-bar:has(.nix-ew-navbar) { padding-top: 88px; /* 56 navbar + 32 admin bar */ }
body.admin-bar.nix-project-page .nix-ew-navbar,
body.admin-bar.ead-pontao-virtual-page .nix-ew-navbar,
body.admin-bar.nix-map-virtual-page .nix-ew-navbar { top: 32px; }
@media (max-width: 782px) {
  /* The admin bar is 46px tall on small screens. */
  body.nix-project-page.admin-bar:has(.nix-ew-navbar) { padding-top: 102px; }
  body.admin-bar.nix-project-page .nix-ew-navbar,
  body.admin-bar.ead-pontao-virtual-page .nix-ew-navbar,
  body.admin-bar.nix-map-virtual-page .nix-ew-navbar { top: 46px; }
}
body.nix-project-page .nix-ew-navbar__brand,
body.ead-pontao-virtual-page .nix-ew-navbar__brand,
body.nix-map-virtual-page .nix-ew-navbar__brand { color: var(--nix-fg); }
body.nix-project-page .nix-ew-navbar__brand-accent,
body.ead-pontao-virtual-page .nix-ew-navbar__brand-accent,
body.nix-map-virtual-page .nix-ew-navbar__brand-accent { color: var(--nix-primary); }
body.nix-project-page .nix-ew-navbar__link,
body.ead-pontao-virtual-page .nix-ew-navbar__link,
body.nix-map-virtual-page .nix-ew-navbar__link { color: var(--nix-muted); }
body.nix-project-page .nix-ew-navbar__link:hover,
body.ead-pontao-virtual-page .nix-ew-navbar__link:hover,
body.nix-map-virtual-page .nix-ew-navbar__link:hover { color: var(--nix-fg); }
body.nix-project-page .nix-ew-navbar__hamburger,
body.nix-project-page .nix-ew-navbar__hamburger::before,
body.nix-project-page .nix-ew-navbar__hamburger::after,
body.ead-pontao-virtual-page .nix-ew-navbar__hamburger,
body.ead-pontao-virtual-page .nix-ew-navbar__hamburger::before,
body.ead-pontao-virtual-page .nix-ew-navbar__hamburger::after,
body.nix-map-virtual-page .nix-ew-navbar__hamburger,
body.nix-map-virtual-page .nix-ew-navbar__hamburger::before,
body.nix-map-virtual-page .nix-ew-navbar__hamburger::after { background: var(--nix-fg); }

/* CTA button */
.nix-ew-navbar__cta {
  display: inline-flex;
  align-items: center;
  min-height: 34px;
  padding: 0 var(--nix-space-4);
  background: var(--nix-primary);
  color: #fff;
  font-size: var(--nix-text-sm);
  font-weight: 500;
  border-radius: var(--nix-radius-sm);
  text-decoration: none;
  transition: background var(--nix-duration-fast);
}

.nix-ew-navbar__cta:hover {
  background: var(--nix-primary-light);
  color: #fff;
}

/* Hamburger toggle */
.nix-ew-navbar__toggle {
  display: none;
  width: var(--nix-touch-min);
  height: var(--nix-touch-min);
  background: none;
  border: none;
  cursor: pointer;
  padding: 12px;
  position: relative;
}

.nix-ew-navbar__hamburger,
.nix-ew-navbar__hamburger::before,
.nix-ew-navbar__hamburger::after {
  display: block;
  width: 18px;
  height: 2px;
  background: #fff;
  border-radius: 1px;
  transition: all var(--nix-duration) var(--nix-ease);
}

.nix-ew-navbar.is-scrolled .nix-ew-navbar__hamburger,
.nix-ew-navbar.is-scrolled .nix-ew-navbar__hamburger::before,
.nix-ew-navbar.is-scrolled .nix-ew-navbar__hamburger::after {
  background: var(--nix-fg);
}

.nix-ew-navbar__hamburger::before,
.nix-ew-navbar__hamburger::after {
  content: '';
  position: absolute;
  left: 12px;
}

.nix-ew-navbar__hamburger::before { top: 10px; }
.nix-ew-navbar__hamburger::after { bottom: 10px; }

/* Open state */
.nix-ew-navbar__toggle[aria-expanded="true"] .nix-ew-navbar__hamburger {
  background: transparent;
}

.nix-ew-navbar__toggle[aria-expanded="true"] .nix-ew-navbar__hamburger::before {
  top: 50%;
  transform: translateY(-50%) rotate(45deg);
}

.nix-ew-navbar__toggle[aria-expanded="true"] .nix-ew-navbar__hamburger::after {
  bottom: auto;
  top: 50%;
  transform: translateY(-50%) rotate(-45deg);
}

/* Mobile menu */
.nix-ew-navbar__mobile {
  display: none;
  flex-direction: column;
  padding: var(--nix-space-3) var(--nix-space-6) var(--nix-space-4);
  background: rgba(255,255,255,0.95);
  backdrop-filter: blur(16px);
  -webkit-backdrop-filter: blur(16px);
  border-bottom: 1px solid var(--nix-border);
  overflow: hidden;
  max-height: 0;
  opacity: 0;
  transition: max-height var(--nix-duration) var(--nix-ease), opacity var(--nix-duration-fast), padding var(--nix-duration);
}

.nix-ew-navbar__mobile.is-open {
  display: flex;
  max-height: 400px;
  opacity: 1;
}

.nix-ew-navbar__mobile-link {
  font-size: var(--nix-text-base);
  color: var(--nix-muted);
  text-decoration: none;
  padding: var(--nix-space-2) 0;
  transition: color var(--nix-duration-fast);
}

.nix-ew-navbar__mobile-link:hover {
  color: var(--nix-fg);
}

.nix-ew-navbar__cta--mobile {
  margin-top: var(--nix-space-2);
  text-align: center;
  justify-content: center;
}

@media (max-width: 768px) {
  .nix-ew-navbar__links { display: none; }
  .nix-ew-navbar__toggle { display: block; }
}

/* ============================================================
   IMPACT — Animated stats
   ============================================================ */
.nix-ew-impact {
  padding: 5rem 0;
  background: var(--nix-bg);
}
.nix-ew-impact__inner {
  max-width: 64rem;
  margin: 0 auto;
  padding: 0 1.5rem;
}
.nix-ew-impact__header {
  text-align: center;
  max-width: 42rem;
  margin: 0 auto 3rem;
}
.nix-ew-impact__title {
  font-size: clamp(1.5rem, 3vw, 1.875rem);
  color: var(--nix-fg);
  margin-bottom: 0.75rem;
}
.nix-ew-impact__subtitle {
  color: var(--nix-muted);
  font-size: 0.875rem;
  line-height: 1.6;
}
.nix-ew-impact__grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 1.25rem;
}
.nix-ew-impact__item {
  background: var(--nix-card);
  border: 1px solid var(--nix-border);
  border-radius: var(--nix-radius-lg);
  padding: 2rem 1.25rem;
  text-align: center;
  transition: box-shadow var(--nix-duration) var(--nix-ease), transform var(--nix-duration) var(--nix-ease);
}
.nix-ew-impact__item:hover {
  box-shadow: var(--nix-shadow-lg);
  transform: translateY(-4px);
}
.nix-ew-impact__number {
  display: block;
  font-size: clamp(2rem, 5vw, 3rem);
  font-weight: 800;
  color: var(--nix-primary);
  line-height: 1;
  margin-bottom: 0.5rem;
}
.nix-ew-impact__label {
  display: block;
  font-size: 0.8125rem;
  color: var(--nix-muted);
  line-height: 1.4;
}
@media (max-width: 768px) { .nix-ew-impact__grid { grid-template-columns: repeat(2, 1fr) !important; } }

/* ============================================================
   QUICK LINKS — Acesso Rápido
   ============================================================ */
.nix-ew-quick {
  padding: 5rem 0;
  background: var(--nix-card);
}
.nix-ew-quick__inner {
  max-width: 64rem;
  margin: 0 auto;
  padding: 0 1.5rem;
}
.nix-ew-quick__header {
  text-align: center;
  max-width: 42rem;
  margin: 0 auto 3rem;
}
.nix-ew-quick__title {
  font-size: clamp(1.5rem, 3vw, 1.875rem);
  color: var(--nix-fg);
  margin-bottom: 0.75rem;
}
.nix-ew-quick__subtitle {
  color: var(--nix-muted);
  font-size: 0.875rem;
  line-height: 1.6;
}
.nix-ew-quick__grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 1.25rem;
}
.nix-ew-quick__card {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  background: var(--nix-bg);
  border: 1px solid var(--nix-border);
  border-radius: var(--nix-radius-lg);
  padding: 1.75rem;
  text-decoration: none;
  transition: border-color var(--nix-duration) var(--nix-ease), box-shadow var(--nix-duration) var(--nix-ease), transform var(--nix-duration) var(--nix-ease);
}
.nix-ew-quick__card:hover {
  box-shadow: var(--nix-shadow-lg);
}
.nix-ew-quick__icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 3rem;
  height: 3rem;
  border-radius: var(--nix-radius);
  background: var(--nix-primary-glow);
  color: var(--nix-primary);
  font-size: 1.25rem;
  margin-bottom: 1rem;
}
.nix-ew-quick__icon svg { width: 1.25rem; height: 1.25rem; }
.nix-ew-quick__card-title {
  font-size: 1.125rem;
  color: var(--nix-fg);
  margin-bottom: 0.4rem;
}
.nix-ew-quick__card-text {
  font-size: 0.8125rem;
  color: var(--nix-muted);
  line-height: 1.5;
  margin-bottom: 1rem;
}
.nix-ew-quick__arrow {
  margin-top: auto;
  color: var(--nix-muted);
  transition: transform var(--nix-duration) var(--nix-ease), color var(--nix-duration) var(--nix-ease);
}
.nix-ew-quick__card:hover .nix-ew-quick__arrow { transform: translateX(4px); }
@media (max-width: 768px) { .nix-ew-quick__grid { grid-template-columns: 1fr !important; } }

/* ============================================================
   TIMELINE — Histórico
   ============================================================ */
.nix-ew-timeline {
  padding: 5rem 0;
  background: var(--nix-bg);
}
.nix-ew-timeline__inner {
  max-width: 48rem;
  margin: 0 auto;
  padding: 0 1.5rem;
}
.nix-ew-timeline__header {
  text-align: center;
  margin-bottom: 3rem;
}
.nix-ew-timeline__title {
  font-size: clamp(1.5rem, 3vw, 1.875rem);
  color: var(--nix-fg);
  margin-bottom: 0.75rem;
}
.nix-ew-timeline__subtitle {
  color: var(--nix-muted);
  font-size: 0.875rem;
}
/* Acordeão com linha do tempo lateral */
.nix-ew-timeline__list {
  position: relative;
  padding-left: 1.75rem;
}
.nix-ew-timeline__list::before {
  content: '';
  position: absolute;
  left: 6px;
  top: 8px;
  bottom: 8px;
  width: 1px;
  background: var(--nix-border);
}
.nix-ew-timeline__item {
  position: relative;
  border-bottom: 1px solid var(--nix-border);
}
.nix-ew-timeline__dot {
  position: absolute;
  left: -1.75rem;
  top: 1.15rem;
  width: 13px;
  height: 13px;
  border-radius: 50%;
  background: var(--nix-bg);
  border: 2px solid var(--nix-border);
  transition: all var(--nix-duration) var(--nix-ease);
}
.nix-ew-timeline__item.is-open .nix-ew-timeline__dot {
  background: var(--nix-primary);
  border-color: var(--nix-primary);
  transform: scale(1.25);
  box-shadow: 0 0 0 4px rgba(35, 79, 157, 0.15);
}

/* Cabeçalho clicável */
.nix-ew-timeline__head {
  width: 100%;
  display: flex;
  align-items: center;
  gap: 1rem;
  padding: 1rem 0;
  background: none;
  border: none;
  cursor: pointer;
  text-align: left;
  min-height: var(--nix-touch-min);
}
.nix-ew-timeline__year {
  flex-shrink: 0;
  width: 4.5rem;
  font-size: 0.8125rem;
  font-weight: 700;
  letter-spacing: 0.03em;
  color: var(--nix-muted);
  transition: color var(--nix-duration) var(--nix-ease);
}
.nix-ew-timeline__item.is-open .nix-ew-timeline__year,
.nix-ew-timeline__head:hover .nix-ew-timeline__year { color: var(--nix-primary); }
.nix-ew-timeline__head-title {
  flex: 1;
  font-size: 1rem;
  font-weight: 600;
  color: var(--nix-fg);
  line-height: 1.35;
}
.nix-ew-timeline__toggle {
  flex-shrink: 0;
  width: 1.75rem;
  height: 1.75rem;
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: 50%;
  background: var(--nix-card);
  color: var(--nix-muted);
  transition: all var(--nix-duration) var(--nix-ease);
}
.nix-ew-timeline__item.is-open .nix-ew-timeline__toggle {
  background: var(--nix-primary);
  color: #fff;
  transform: rotate(45deg);
}

/* Painel expansível (altura controlada via JS) */
.nix-ew-timeline__panel {
  max-height: 0;
  overflow: hidden;
  transition: max-height 0.4s var(--nix-ease);
}
.nix-ew-timeline__text {
  padding: 0 2rem 1.25rem 5.5rem;
  font-size: 0.875rem;
  color: var(--nix-muted);
  line-height: 1.65;
}
@media (max-width: 640px) {
  .nix-ew-timeline__head { gap: 0.6rem; }
  .nix-ew-timeline__year { width: 3.5rem; font-size: 0.75rem; }
  .nix-ew-timeline__head-title { font-size: 0.9rem; }
  .nix-ew-timeline__text { padding: 0 0.5rem 1.1rem 0; }
}

/* ============================================================
   PARTNERS — Conselho / Rede de Pontos
   ============================================================ */
.nix-ew-partners {
  padding: 5rem 0;
  background: var(--nix-card);
}
.nix-ew-partners__inner {
  max-width: 64rem;
  margin: 0 auto;
  padding: 0 1.5rem;
}
.nix-ew-partners__header {
  text-align: center;
  max-width: 42rem;
  margin: 0 auto 3rem;
}
.nix-ew-partners__title {
  font-size: clamp(1.5rem, 3vw, 1.875rem);
  color: var(--nix-fg);
  margin-bottom: 0.75rem;
}
.nix-ew-partners__subtitle {
  color: var(--nix-muted);
  font-size: 0.875rem;
}
.nix-ew-partners__grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 1rem;
}
.nix-ew-partners__item {
  display: flex;
  align-items: center;
  justify-content: center;
  text-align: center;
  min-height: 110px;
  padding: 1.25rem;
  background: var(--nix-bg);
  border: 1px solid var(--nix-border);
  border-radius: var(--nix-radius-lg);
  text-decoration: none;
  transition: border-color var(--nix-duration) var(--nix-ease), box-shadow var(--nix-duration) var(--nix-ease), transform var(--nix-duration) var(--nix-ease);
}
.nix-ew-partners__item:hover {
  box-shadow: var(--nix-shadow-md);
  transform: translateY(-3px);
}
.nix-ew-partners__logo {
  max-width: 100%;
  max-height: 64px;
  object-fit: contain;
  filter: grayscale(1);
  opacity: 0.7;
  transition: filter var(--nix-duration) var(--nix-ease), opacity var(--nix-duration) var(--nix-ease);
}
.nix-ew-partners__item:hover .nix-ew-partners__logo { filter: grayscale(0); opacity: 1; }
.nix-ew-partners__name {
  font-size: 0.9375rem;
  font-weight: 600;
  color: var(--nix-fg);
  line-height: 1.3;
}
@media (max-width: 768px) { .nix-ew-partners__grid { grid-template-columns: repeat(2, 1fr) !important; } }

/* ============================================================
   FESTIVAL — Quitutes e Batuques
   ============================================================ */
.nix-ew-festival {
  padding: 5rem 0;
  background: var(--nix-bg);
}
.nix-ew-festival__inner {
  max-width: 64rem;
  margin: 0 auto;
  padding: 0 1.5rem;
}
.nix-ew-festival__intro {
  max-width: 42rem;
  margin-bottom: 3rem;
}
.nix-ew-festival__intro--media {
  max-width: none;
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 2.5rem;
  align-items: center;
}
.nix-ew-festival__title {
  font-size: clamp(1.75rem, 4vw, 2.25rem);
  color: var(--nix-fg);
  margin-bottom: 1rem;
}
.nix-ew-festival__subtitle {
  color: var(--nix-muted);
  font-size: 0.9375rem;
  line-height: 1.7;
}
.nix-ew-festival__intro-media img {
  width: 100%;
  border-radius: var(--nix-radius-lg);
  object-fit: cover;
  box-shadow: var(--nix-shadow-lg);
}
.nix-ew-festival__grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 1.5rem;
}
.nix-ew-festival__card {
  display: flex;
  flex-direction: column;
  background: var(--nix-card);
  border: 1px solid var(--nix-border);
  border-radius: var(--nix-radius-lg);
  overflow: hidden;
  transition: box-shadow var(--nix-duration) var(--nix-ease), transform var(--nix-duration) var(--nix-ease);
}
.nix-ew-festival__card:hover { box-shadow: var(--nix-shadow-lg); }
.nix-ew-festival__card-media {
  height: 160px;
  overflow: hidden;
}
.nix-ew-festival__card-media img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform 0.5s var(--nix-ease);
}
.nix-ew-festival__card:hover .nix-ew-festival__card-media img { transform: scale(1.05); }
.nix-ew-festival__card-body { padding: 1.5rem; }
.nix-ew-festival__card-year {
  display: block;
  font-size: 0.8125rem;
  font-weight: 700;
  color: var(--nix-error);
  margin-bottom: 0.25rem;
}
.nix-ew-festival__card-title {
  font-size: 1.0625rem;
  color: var(--nix-fg);
  margin-bottom: 0.5rem;
}
.nix-ew-festival__card-text {
  font-size: 0.8125rem;
  color: var(--nix-muted);
  line-height: 1.6;
}
@media (max-width: 900px) {
  .nix-ew-festival__intro--media { grid-template-columns: 1fr; }
  .nix-ew-festival__grid { grid-template-columns: repeat(2, 1fr) !important; }
}
@media (max-width: 640px) {
  .nix-ew-festival__grid { grid-template-columns: 1fr !important; }
}

/* ============================================================
   COURSES — Últimos cursos do EAD
   ============================================================ */
.nix-ew-courses {
  padding: 5rem 0;
  background: var(--nix-bg);
}
.nix-ew-courses__inner {
  max-width: 64rem;
  margin: 0 auto;
  padding: 0 1.5rem;
}
.nix-ew-courses__header {
  text-align: center;
  max-width: 42rem;
  margin: 0 auto 3rem;
}
.nix-ew-courses__heading {
  font-size: clamp(1.5rem, 3vw, 1.875rem);
  color: var(--nix-fg);
  margin-bottom: 0.75rem;
}
.nix-ew-courses__subtitle {
  color: var(--nix-muted);
  font-size: 0.875rem;
  line-height: 1.6;
}
.nix-ew-courses__grid {
  display: grid;
  /* Fixed-width columns (≈ EAD catalog card size) instead of stretching to
     fill — so a single course shows at the same compact size as the EAD. */
  grid-template-columns: repeat(auto-fill, minmax(260px, 300px));
  gap: 1.5rem;
  justify-content: start;
}

.nix-ew-courses__card {
  display: flex;
  flex-direction: column;
  height: 100%;
  background: #fff;
  border: 1px solid var(--nix-border);
  border-radius: 0.75rem;
  overflow: hidden;
  text-decoration: none;
  box-shadow: 0 1px 3px rgba(0,0,0,0.04);
  transition: border-color 0.3s, box-shadow 0.3s, transform 0.3s cubic-bezier(0.16, 1, 0.3, 1);
  will-change: transform;
}
.nix-ew-courses__card:hover {
  border-color: rgba(35, 79, 157, 0.35);
  box-shadow: 0 16px 38px rgba(35, 79, 157, 0.12);
  transform: translateY(-4px);
}

/* Mídia (altura fixa 192px = h-48, igual ao card EAD) */
.nix-ew-courses__media {
  position: relative;
  height: 192px;
  overflow: hidden;
  background: linear-gradient(135deg, #eef2f8, #dde6f2);
  display: flex;
  align-items: center;
  justify-content: center;
}
.nix-ew-courses__media img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform 0.5s cubic-bezier(0.16, 1, 0.3, 1);
}
.nix-ew-courses__card:hover .nix-ew-courses__media img { transform: scale(1.05); }
.nix-ew-courses__media-fallback { color: var(--nix-primary); opacity: 0.55; }
.nix-ew-courses__badge {
  position: absolute;
  top: 0.75rem;
  left: 0.75rem;
  font-size: 0.6875rem;
  font-weight: 600;
  color: #fff;
  background: rgba(29, 29, 27, 0.80);
  padding: 0.25rem 0.625rem;
  border-radius: 0.375rem;
}

/* Corpo — p-4 (1rem) com espaçamento de 0.75rem entre blocos */
.nix-ew-courses__body {
  display: flex;
  flex-direction: column;
  flex: 1;
  padding: 1rem;
}
.nix-ew-courses__title {
  font-size: 0.875rem;
  font-weight: 600;
  /* Force the dark heading colour — the card is an <a>, so themes would
     otherwise paint the title with their link colour (blue). */
  color: var(--nix-fg) !important;
  line-height: 1.375;
  margin-bottom: 0.75rem;
  transition: color 0.3s;
}
.nix-ew-courses__card:hover .nix-ew-courses__title { color: var(--nix-primary) !important; }
.nix-ew-courses__meta {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.75rem;
  margin-bottom: 0.75rem;
}
.nix-ew-courses__meta-item {
  display: inline-flex;
  align-items: center;
  gap: 0.25rem;
  font-size: 0.6875rem;
  color: var(--nix-muted);
}
.nix-ew-courses__meta-item svg { flex-shrink: 0; }
.nix-ew-courses__cert { color: #C79A1E; font-weight: 600; }

.nix-ew-courses__footer-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 0.75rem;
  margin-top: auto;
  padding-top: 0.75rem;
  border-top: 1px solid var(--nix-border);
}
.nix-ew-courses__rating {
  display: inline-flex;
  align-items: center;
  gap: 1px;
}
/* Empty stars are light grey; filled ones are the certificate gold (matches EAD). */
.nix-ew-courses__star { color: var(--nix-border); }
.nix-ew-courses__star.is-filled { color: #FFB700; }
.nix-ew-courses__rating-num {
  margin-left: 0.35rem;
  font-size: 0.75rem;
  color: var(--nix-muted);
}
.nix-ew-courses__access {
  display: inline-flex;
  align-items: center;
  gap: 0.35rem;
  font-size: 0.6875rem;
  font-weight: 500;
  color: var(--nix-primary);
  transition: gap 0.3s;
}
.nix-ew-courses__card:hover .nix-ew-courses__access { gap: 0.6rem; }

/* Botão CTA */
.nix-ew-courses__cta { text-align: center; margin-top: 2.5rem; }
.nix-ew-courses__btn {
  display: inline-flex;
  align-items: center;
  gap: var(--nix-space-2);
  min-height: var(--nix-touch-min);
  background: var(--nix-primary);
  color: #fff;
  font-weight: 500;
  font-size: var(--nix-text-base);
  padding: var(--nix-space-2) var(--nix-space-8);
  border-radius: var(--nix-radius-sm);
  text-decoration: none;
  transition: all var(--nix-duration) var(--nix-ease);
}
.nix-ew-courses__btn:hover {
  background: var(--nix-primary-light);
  color: #fff;
  box-shadow: var(--nix-shadow-glow);
  transform: translateY(-1px);
}
.nix-ew-courses__btn svg { transition: transform 0.3s; }
.nix-ew-courses__btn:hover svg { transform: translateX(3px); }

@media (max-width: 1024px) { .nix-ew-courses__grid { grid-template-columns: repeat(2, 1fr) !important; } }
@media (max-width: 640px) {
  .nix-ew-courses__grid { grid-template-columns: 1fr !important; gap: 1rem; }
}

/* ============================================================
   FIX FOUC DO HEADER — "caixas pretas" ao recarregar.
   No primeiro paint, antes de todo o CSS do Elementor resolver, os
   containers/widgets do header piscam com um OUTLINE 3px #1D1D1B (cor de
   marca) que some logo em seguida. Como este arquivo é enfileirado no
   <head> (elementor/frontend/after_enqueue_styles, render-blocking), o
   !important aqui vence qualquer outline aplicado por CSS tardio ou inline
   via JS — então as caixas nunca chegam a aparecer. Containers de layout
   não precisam de outline; o foco de teclado dos LINKS/BOTÕES é preservado
   (não alvejamos a, button, input).
   ============================================================ */
.elementor-location-header .e-con,
.elementor-location-header .e-con-inner,
.elementor-location-header .elementor-element,
.elementor-location-header .elementor-widget,
.elementor-location-header .elementor-widget-container,
header.e-con, header .e-con,
.she-header-yes, .she-header-yes .e-con,
.nix-ew-authbtn, .nix-ew-authbtn .nix-auth-root,
.nix-ew-wpmenu {
  outline: 0 !important;
}

/* ============================================================
   AUTH BUTTON WIDGET (standalone "Entrar / Minha conta")
   Wrapper only — the React control injects its own .nix-auth-* styles.
   ============================================================ */
.nix-ew-authbtn {
  display: flex;
  align-items: center;
  justify-content: flex-end;
  min-height: 38px; /* reserva espaço: header não "pula" entre SSR e mount do React */
  font-family: 'Bricolage Grotesque', system-ui, -apple-system, sans-serif;
}
.nix-ew-authbtn .nix-auth-root { display: inline-flex; }

/* Estilos do controle de auth carregados no <head> (não só injetados pelo React)
   para o botão já nascer estilizado no SSR — elimina o flash/FOUC no header.
   Idênticos ao <AuthStyles> de AuthButton.tsx. */
.nix-auth-btn{display:inline-flex;align-items:center;gap:8px;padding:8px 18px;border-radius:999px;
  background:#234F9D;color:#fff;font-size:14px;font-weight:600;border:0;cursor:pointer;
  font-family:inherit;line-height:1;transition:background .2s,opacity .2s;white-space:nowrap}
.nix-auth-btn:hover{background:#3A6BC4}
.nix-auth-btn__icon{width:16px;height:16px}
.nix-auth-user{position:relative;display:inline-block;font-family:inherit}
.nix-auth-user__trigger{display:inline-flex;align-items:center;gap:8px;padding:6px 10px;border-radius:999px;
  background:rgba(255,255,255,.12);border:1px solid rgba(255,255,255,.25);color:inherit;cursor:pointer;
  font-size:14px;font-weight:600;line-height:1}
.nix-auth-user__trigger:hover{background:rgba(255,255,255,.2)}
.nix-auth-user__avatar{width:28px;height:28px;border-radius:50%;object-fit:cover;display:flex;
  align-items:center;justify-content:center;background:#234F9D;color:#fff;font-size:13px;font-weight:700}
.nix-auth-user__name{max-width:140px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.nix-auth-user__chevron{width:15px;height:15px;opacity:.7}

/* ============================================================
   FIX: remover o fundo ROXO dos itens do menu (Essential Addons
   "Menu simples", preset-1). Na home todos os itens viram
   .current-menu-ancestor + a.eael-item-active porque apontam para
   âncoras da própria página, e o eael-NNN.css pinta o fundo de
   rgb(116,62,255). Neutralizamos o fundo (transparente) mantendo o
   texto legível. Especificidade alta para vencer o CSS do EAEL.
   ============================================================ */
.eael-simple-menu-container .eael-simple-menu li.current-menu-item > a.eael-item-active,
.eael-simple-menu-container .eael-simple-menu li.current-menu-ancestor > a.eael-item-active,
.eael-simple-menu-container .eael-simple-menu li.current_page_item > a.eael-item-active,
.eael-simple-menu-container.preset-1 .eael-simple-menu li.current-menu-item > a.eael-item-active,
.eael-simple-menu-container.preset-1 .eael-simple-menu li.current-menu-ancestor > a.eael-item-active,
.eael-simple-menu-container.preset-3 .eael-simple-menu li.current-menu-item > a.eael-item-active,
.eael-simple-menu-container.preset-3 .eael-simple-menu li.current-menu-ancestor > a.eael-item-active,
.eael-simple-menu-container .eael-simple-menu > li > a.eael-item-active,
.eael-simple-menu-container .eael-simple-menu > li > a:hover {
  background-color: transparent !important;
  background-image: none !important;
}

/* ============================================================
   FIX: estouro horizontal do site (barra de rolagem lateral).
   NÃO usar overflow-x em html/body: isso QUEBRA position: sticky
   dos headers. O estouro real (margem lateral de um container do
   Elementor) já foi corrigido na origem. Mantemos só max-width:100%
   como guarda leve, sem cortar overflow no eixo do scroll.
   ============================================================ */
body { max-width: 100%; }

/* ============================================================
   NIX WP MENU (widget nix_wp_menu) — menu do WordPress,
   horizontal no desktop, hambúrguer/drawer no mobile.
   Auto-contido: não depende de Elementor Pro nem do EAEL.
   A visibilidade do toggle/list por breakpoint é injetada
   inline por instância no PHP (usa o breakpoint do controle).
   ============================================================ */
.nix-ew-wpmenu {
	display: flex;
	align-items: center;
	width: 100%;
	position: relative;
	font-family: 'Bricolage Grotesque', system-ui, -apple-system, sans-serif;
}
.nix-ew-wpmenu__list {
	display: flex;
	align-items: center;
	flex-wrap: wrap;
	gap: 28px;
	list-style: none;
	margin: 0;
	padding: 0;
	width: 100%;
}
.nix-ew-wpmenu__item { list-style: none; margin: 0; padding: 0; }
.nix-ew-wpmenu__link {
	display: inline-block;
	text-decoration: none;
	color: #1D1D1B;
	font-weight: 600;
	font-size: 1rem;
	line-height: 1.2;
	transition: color .2s ease;
	white-space: nowrap;
}
.nix-ew-wpmenu__link:hover { color: #234F9D; }

/* Hambúrguer — escondido por padrão; o PHP o mostra abaixo do breakpoint. */
.nix-ew-wpmenu__toggle {
	display: none;
	align-items: center;
	justify-content: center;
	width: 44px;
	height: 44px;
	margin-left: auto;
	padding: 0;
	background: transparent;
	border: 0;
	cursor: pointer;
	-webkit-tap-highlight-color: transparent;
}
.nix-ew-wpmenu__bar,
.nix-ew-wpmenu__bar::before,
.nix-ew-wpmenu__bar::after {
	content: "";
	display: block;
	width: 26px;
	height: 2px;
	background: #1D1D1B;
	border-radius: 2px;
	transition: transform .25s ease, opacity .2s ease;
}
.nix-ew-wpmenu__bar { position: relative; }
.nix-ew-wpmenu__bar::before { position: absolute; top: -8px; left: 0; }
.nix-ew-wpmenu__bar::after  { position: absolute; top:  8px; left: 0; }
/* Ícone vira "X" quando aberto */
.nix-ew-wpmenu.is-open .nix-ew-wpmenu__bar { background: transparent; }
.nix-ew-wpmenu.is-open .nix-ew-wpmenu__bar::before { transform: translateY(8px) rotate(45deg); }
.nix-ew-wpmenu.is-open .nix-ew-wpmenu__bar::after  { transform: translateY(-8px) rotate(-45deg); }

/* Drawer mobile — painel full-width preso abaixo do header.
   Usa position:fixed ancorado à viewport (NÃO absolute) porque o widget vive
   dentro de um container estreito do header (~170px); com absolute o drawer
   herdaria essa largura. --nix-wpmenu-top é setado pelo JS com a posição do
   fundo do header (fallback 64px). */
.nix-ew-wpmenu__drawer {
	position: fixed;
	top: var(--nix-wpmenu-top, 64px);
	left: 0;
	right: 0;
	width: 100vw;
	max-width: 100vw;
	background: #ffffff;
	box-shadow: 0 12px 30px rgba(0, 0, 0, .12);
	border-top: 1px solid rgba(0, 0, 0, .06);
	max-height: 0;
	overflow: hidden;
	opacity: 0;
	visibility: hidden;
	transition: max-height .28s ease, opacity .2s ease, visibility .2s ease;
	z-index: 9990;
}
.nix-ew-wpmenu.is-open .nix-ew-wpmenu__drawer {
	max-height: calc(100vh - var(--nix-wpmenu-top, 64px));
	overflow-y: auto;
	opacity: 1;
	visibility: visible;
}
.nix-ew-wpmenu__drawer-list {
	list-style: none;
	margin: 0;
	padding: 8px 0;
}
.nix-ew-wpmenu__drawer-list .nix-ew-wpmenu__item { width: 100%; }
.nix-ew-wpmenu__drawer-list .nix-ew-wpmenu__link {
	display: block;
	width: 100%;
	padding: 14px 24px;
	border-bottom: 1px solid rgba(0, 0, 0, .04);
	white-space: normal;
}
