/* =====================================================================
   Joana Rosa — A Nossa Presidente
   Sem dependências externas. Tudo servido a partir do próprio domínio.
   ===================================================================== */

/* ---------------------------------------------------------------- fontes */
@font-face { font-family: "Poppins"; font-weight: 500; font-style: normal; font-display: swap; src: url("/assets/fonts/poppins-medium.woff2") format("woff2"); }
@font-face { font-family: "Poppins"; font-weight: 500; font-style: italic; font-display: swap; src: url("/assets/fonts/poppins-mediumitalic.woff2") format("woff2"); }
@font-face { font-family: "Poppins"; font-weight: 600; font-style: italic; font-display: swap; src: url("/assets/fonts/poppins-semibolditalic.woff2") format("woff2"); }
@font-face { font-family: "Poppins"; font-weight: 700; font-style: normal; font-display: swap; src: url("/assets/fonts/poppins-bold.woff2") format("woff2"); }
@font-face { font-family: "Poppins"; font-weight: 800; font-style: normal; font-display: swap; src: url("/assets/fonts/poppins-extrabold.woff2") format("woff2"); }
@font-face { font-family: "Poppins"; font-weight: 800; font-style: italic; font-display: swap; src: url("/assets/fonts/poppins-extrabolditalic.woff2") format("woff2"); }
@font-face { font-family: "Poppins"; font-weight: 900; font-style: italic; font-display: swap; src: url("/assets/fonts/poppins-blackitalic.woff2") format("woff2"); }

/* ---------------------------------------------------------------- tokens */
:root {
  --navy: #002b64;
  --navy-2: #0a2a5c;
  --blue: #0072bc;
  --blue-2: #00558f;
  --sky: #6dcff6;
  --cyan: #09b8ed;
  --red: #ed1941;
  --red-2: #ed1b34;
  --magenta: #ed1651;
  --purple: #524fa1;
  --orange: #f7941d;
  --yellow: #fdb841;
  --beige: #e7dad1;
  --ink: #231f20;
  --white: #fff;

  --grad-blue: linear-gradient(155deg, #0473bd 0%, #0b5b9e 38%, #133f73 100%);
  --grad-brand: linear-gradient(90deg, var(--red) 0%, var(--orange) 60%, var(--yellow) 100%);

  --gutter: clamp(16px, calc(13.5vw - 60px), 260px);
  --wrap: min(1402px, 100% - 2 * var(--gutter));
  --header-h: clamp(60px, 4.2vw, 76px);

  /* Escala tipográfica web (mín. telemóvel -> máx. desktop) */
  --fz-xs: .8125rem;                                     /* 13px */
  --fz-sm: .875rem;                                      /* 14px */
  --fz-body: clamp(1rem, .96rem + .2vw, 1.125rem);       /* 16 -> 18px */
  --fz-lead: clamp(1.125rem, 1.05rem + .35vw, 1.375rem); /* 18 -> 22px */
  --fz-h3: clamp(1.25rem, 1.1rem + .6vw, 1.75rem);       /* 20 -> 28px */
  --fz-title: clamp(2rem, 1.5rem + 2vw, 3.25rem);        /* 32 -> 52px */
  --fz-sub: var(--fz-lead);
  --fz-nav: var(--fz-xs);
  --fz-btn: 1rem;                                        /* 16px */

  --radius-lg: clamp(18px, 2.1vw, 40px);
  --radius: clamp(14px, 1.3vw, 26px);

  --ease-out: cubic-bezier(.16, 1, .3, 1);
  --ease-io: cubic-bezier(.76, 0, .24, 1);
  --ease-back: cubic-bezier(.34, 1.56, .64, 1);

  color-scheme: light;
}

/* ---------------------------------------------------------------- base */
*, *::before, *::after { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; text-size-adjust: 100%; scroll-behavior: smooth; scroll-padding-top: calc(var(--header-h) + 16px); }
body {
  margin: 0;
  font-family: "Poppins", system-ui, -apple-system, "Segoe UI", sans-serif;
  font-weight: 500;
  font-size: var(--fz-body);
  line-height: 1.5;
  color: var(--white);
  background: var(--navy);
  overflow-x: clip;
  -webkit-font-smoothing: antialiased;
}
img, svg, video, canvas { display: block; max-width: 100%; }
img { height: auto; }
a { color: inherit; }
button { font: inherit; color: inherit; cursor: pointer; }
h1, h2, h3, p, figure, ul { margin: 0; }
ul { padding: 0; list-style: none; }
main:focus { outline: none; }
:focus-visible { outline: 3px solid var(--sky); outline-offset: 3px; border-radius: 4px; }
.sprite { position: absolute; width: 0; height: 0; overflow: hidden; }
.sr-only { position: absolute !important; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; }
.center { text-align: center; }
.skip-link { position: fixed; top: 8px; left: 8px; z-index: 10001; padding: .6em 1em; border-radius: 99px; background: var(--white); color: var(--navy); font-weight: 800; transform: translateY(-160%); transition: transform .2s; }
.skip-link:focus { transform: none; }

/* ---------------------------------------------------------------- intro / preloader */
.intro {
  position: fixed; inset: 0; z-index: 10000;
  display: grid; place-items: center;
  background: var(--navy);
  overflow: hidden;
  animation: intro-exit .9s var(--ease-io) 2.55s forwards;
}
html.no-intro .intro { display: none; }
html.intro-lock, html.intro-lock body { overflow: hidden; }
.intro__ambient {
  position: absolute; inset: -30%;
  background:
    radial-gradient(34vw 34vw at 24% 30%, rgba(4, 115, 189, .55), transparent 68%),
    radial-gradient(26vw 26vw at 78% 74%, rgba(237, 25, 65, .28), transparent 68%),
    radial-gradient(18vw 18vw at 82% 18%, rgba(247, 148, 29, .22), transparent 72%);
  animation: ambient 8s ease-in-out infinite alternate;
}
.intro__logo { width: 100%; }
.intro__inner { position: relative; display: grid; justify-items: center; gap: clamp(14px, 2.4vh, 28px); width: min(680px, 84vw); }
.intro__svg { width: 100%; height: auto; overflow: visible; }
.intro__svg .lg-draw { fill: none; stroke: var(--white); stroke-width: 2.4; stroke-linecap: round; stroke-linejoin: round; stroke-dasharray: 1; stroke-dashoffset: 1; animation: draw 1.1s var(--ease-out) .1s forwards; }
.intro__svg .lg-j { opacity: 0; animation: fade .35s ease 1s forwards; }
.intro__svg .lg-c { transform-box: fill-box; transform-origin: 30% 30%; transform: scale(0); animation: pop .6s var(--ease-back) 1.05s forwards; }
.intro__svg .lg-w { clip-path: inset(0 100% 0 0); animation: wipe-in .8s var(--ease-out) .95s forwards; }
.intro__tagline { width: min(300px, 44vw); opacity: 0; transform: translateY(14px); animation: rise .6s var(--ease-out) 1.65s forwards; }
.intro__stripe { position: absolute; inset: auto 0 0; height: 5px; background: var(--grad-brand); transform: scaleX(0); transform-origin: left; animation: grow 2.3s var(--ease-out) .1s forwards; }

@keyframes intro-exit { to { transform: translateY(-101%); visibility: hidden; } }
@keyframes ambient { to { transform: translate3d(4%, -3%, 0) scale(1.08); } }
@keyframes draw { to { stroke-dashoffset: 0; } }
@keyframes fade { to { opacity: 1; } }
@keyframes pop { to { transform: scale(1); } }
@keyframes wipe-in { to { clip-path: inset(0 0 0 0); } }
@keyframes rise { to { opacity: 1; transform: none; } }
@keyframes grow { to { transform: scaleX(1); } }

/* ---------------------------------------------------------------- progresso de leitura */
.scroll-progress { position: fixed; inset: 0 0 auto; height: 3px; z-index: 1001; pointer-events: none; }
.scroll-progress span { display: block; height: 100%; background: var(--grad-brand); transform-origin: left; transform: scaleX(var(--p, 0)); }

/* ---------------------------------------------------------------- header */
.site-header {
  position: fixed; inset: 0 0 auto; z-index: 1000;
  height: var(--header-h);
  background: var(--navy);
  transition: transform .45s var(--ease-out), box-shadow .3s, background-color .3s;
}
.site-header.is-scrolled { box-shadow: 0 10px 30px rgba(0, 20, 50, .35); background: rgba(0, 43, 100, .92); backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px); }
.site-header.is-hidden { transform: translateY(-100%); }
.site-header__inner { height: 100%; width: var(--wrap); margin-inline: auto; display: flex; align-items: center; justify-content: space-between; gap: 24px; }
.site-header__logo { flex: none; display: block; width: clamp(150px, 13vw, 240px); transition: transform .3s var(--ease-out); }
.site-header__logo:hover { transform: scale(1.04); }
.nav__list { display: flex; align-items: center; }
.nav__list li { display: flex; align-items: center; }
.nav__list li + li::before { content: "•"; color: var(--orange); margin-inline: clamp(8px, 1.1vw, 20px); font-weight: 700; font-size: var(--fz-nav); }
.nav__list a {
  position: relative;
  font-size: var(--fz-nav); font-weight: 700; letter-spacing: .16em; text-transform: uppercase; text-decoration: none;
  padding-block: 6px;
}
.nav__list a::after { content: ""; position: absolute; left: 0; right: .22em; bottom: 0; height: 2px; background: var(--orange); transform: scaleX(0); transform-origin: right; transition: transform .35s var(--ease-out); }
.nav__list a:hover::after, .nav__list a[aria-current="page"]::after { transform: scaleX(1); transform-origin: left; }
/* PARTISIPA: botão com mais destaque, sem o ponto separador antes */
.nav__list .nav__cta::before { content: none; }
.nav__list .nav__cta { margin-left: clamp(14px, 1.6vw, 28px); }
.nav__list .nav__cta a { padding: .85em 1.5em; border-radius: 999px; background: var(--red); color: var(--white); box-shadow: 0 6px 18px rgba(237, 25, 65, .35); transition: transform .25s var(--ease-out), background-color .25s, color .25s; }
.nav__list .nav__cta a::after { content: none; }
.nav__list .nav__cta a:hover, .nav__list .nav__cta a[aria-current="page"] { background: var(--white); color: var(--red); transform: translateY(-1px) scale(1.04); }

.burger { display: none; width: 44px; height: 44px; border: 0; background: none; padding: 10px; position: relative; z-index: 1002; }
.burger span { display: block; height: 2px; margin: 5px 0; background: var(--white); border-radius: 2px; transition: transform .35s var(--ease-out), opacity .2s; }
.burger[aria-expanded="true"] span:nth-child(1) { transform: translateY(7px) rotate(45deg); }
.burger[aria-expanded="true"] span:nth-child(2) { opacity: 0; }
.burger[aria-expanded="true"] span:nth-child(3) { transform: translateY(-7px) rotate(-45deg); }

.menu {
  position: fixed; inset: 0; z-index: 999;
  display: grid; align-content: center; justify-items: center; gap: 40px;
  background: var(--grad-blue);
  clip-path: circle(0 at calc(100% - 38px) 30px);
  transition: clip-path .7s var(--ease-io), visibility 0s .7s;
  visibility: hidden;
}
.menu[hidden] { display: grid; }
.menu.is-open { clip-path: circle(150% at calc(100% - 38px) 30px); visibility: visible; transition: clip-path .7s var(--ease-io); }
.menu__list { text-align: center; }
.menu__list a { display: inline-block; padding: .2em .4em; font-size: clamp(1.75rem, 6vw, 2.25rem); font-weight: 900; font-style: italic; text-decoration: none; line-height: 1.3; opacity: 0; transform: translateY(24px); transition: opacity .4s, transform .5s var(--ease-out), color .2s; }
.menu__list a:hover { color: var(--sky); }
.menu__list .menu__cta { margin-top: .5em; }
.menu__list .menu__cta a { padding: .25em 1.1em; border-radius: 999px; background: var(--red); color: var(--white); }
.menu__list .menu__cta a:hover { background: var(--white); color: var(--red); }
.menu.is-open .menu__list a { opacity: 1; transform: none; }
.menu.is-open .menu__list li:nth-child(1) a { transition-delay: .18s; }
.menu.is-open .menu__list li:nth-child(2) a { transition-delay: .24s; }
.menu.is-open .menu__list li:nth-child(3) a { transition-delay: .30s; }
.menu.is-open .menu__list li:nth-child(4) a { transition-delay: .36s; }
.menu.is-open .menu__list li:nth-child(5) a { transition-delay: .42s; }
.menu.is-open .menu__list li:nth-child(6) a { transition-delay: .48s; }
.menu__tag { width: 160px; }

main { padding-top: var(--header-h); }

/* ---------------------------------------------------------------- tipografia comum */
.title { font-size: var(--fz-title); font-weight: 900; font-style: italic; line-height: 1.1; letter-spacing: -.03em; text-align: center; }
.title a { text-decoration: none; }
.title--red, .subtitle--red { color: var(--red); }
.subtitle { margin-top: .4em; font-size: var(--fz-sub); font-weight: 600; font-style: italic; line-height: 1.35; text-align: center; letter-spacing: -.01em; }
.section { position: relative; padding-block: clamp(56px, 6.5vw, 124px); overflow: clip; }
.section--blue { background: var(--grad-blue); }
.section--beige { background: var(--beige); color: var(--ink); }
.section__head { width: var(--wrap); margin: 0 auto clamp(28px, 3.3vw, 64px); }
.page-top { min-height: 60vh; }

/* pills / botões */
.pill {
  --bg: var(--sky); --fg: var(--blue);
  position: relative; isolation: isolate; overflow: hidden;
  display: inline-flex; align-items: center; justify-content: center; gap: .5em;
  min-height: 44px; padding: .7em 1.6em;
  border: 0; border-radius: 999px;
  background: var(--bg); color: var(--fg);
  font-size: var(--fz-btn); font-weight: 800; line-height: 1.2; text-decoration: none;
  transition: transform .35s var(--ease-back), color .3s;
}
.pill::before { content: ""; position: absolute; inset: 0; z-index: -1; background: var(--white); transform: translateX(-101%); transition: transform .45s var(--ease-out); }
.pill:hover { transform: translateY(-2px) scale(1.03); }
.pill:hover::before { transform: none; }
.pill--red { --bg: var(--red); --fg: var(--white); }
.pill--red:hover { color: var(--red); }
.pill--blue { --bg: var(--blue); --fg: var(--white); }
.pill--blue:hover { color: var(--blue); }
.pill--xs { min-height: 0; font-size: .75rem; padding: .45em 1em; }
.pill--light::before { background: var(--white); }

/* ---------------------------------------------------------------- hero */
.hero { position: relative; height: clamp(520px, 42.35vw, 815px); background: var(--navy); overflow: hidden; }
.hero__slides, .hero__slide { position: absolute; inset: 0; }
.hero__slide { visibility: hidden; clip-path: inset(0 0 0 100%); transition: clip-path 1.1s var(--ease-io), visibility 0s 1.1s; }
.hero__slide.is-active { visibility: visible; clip-path: inset(0 0 0 0); transition: clip-path 1.1s var(--ease-io); z-index: 2; }
.hero__slide.is-leaving { visibility: visible; clip-path: inset(0 0 0 0); z-index: 1; }
[data-depth] { will-change: transform; }
.hero__bg { position: absolute; inset: -4%; }
.hero__bg img { width: 100%; height: 100%; object-fit: cover; }
.hero__slide.is-active .hero__bg img { animation: kenburns 14s ease-out both; }
@keyframes kenburns { from { transform: scale(1.12); } to { transform: scale(1); } }

/* slide Joana */
.hero__slide--joana .hero__bg img { object-position: 30% 50%; }
/* foto e texto juntos ao centro: a foto acaba no meio do banner e o texto (logótipo, E di Nos, lema) começa logo a seguir */
.hero__joana-copy { position: absolute; left: 51%; width: min(44%, 880px); top: 0; bottom: 0; display: grid; align-content: center; justify-items: center; gap: min(3.4vw, 64px); }
.hero__logo { width: 100%; }
.hero__logo img { width: 100%; }
.hero__edinos { width: 23%; margin-top: calc(min(3.4vw, 64px) * -.6 - 23% * 10 / 298); } /* mais junto ao logótipo do que o lema; o 2.º termo desconta a folga de 10 no topo do viewBox (era do acento, que já não existe; mantida para o layout não mudar) */
/* no desktop o lema fica no fundo do banner (como no mockup); no mobile volta a seguir o título (em baixo está a foto) */
.hero__lema { position: absolute; left: 50%; bottom: 5.5%; translate: -50% 0; margin: 0; color: var(--white); font-size: min(2.05vw, 38px); font-weight: 700; letter-spacing: .09em; line-height: 1; text-transform: uppercase; white-space: nowrap; }
.hero__lema-dot { display: inline-block; width: .3em; height: .3em; margin: 0 .55em; border-radius: 50%; background: var(--orange); vertical-align: .22em; }
/* busto cortado acima da renda da camisola (a renda NUNCA pode aparecer): assenta sempre no fundo do banner,
   para o corte ficar escondido na margem; -14px porque o parallax sobe até ~6px */
.hero__joana { position: absolute; right: 50%; bottom: -14px; height: min(88%, 40vw); }
.hero__joana img { width: auto; height: 100%; max-width: none; filter: drop-shadow(20px 10px 50px rgba(0, 10, 40, .35)); }

.hero__slide--joana .hero__logo, .hero__slide--joana .hero__edinos, .hero__slide--joana .hero__lema { opacity: 0; transform: translateY(30px); }
.hero__slide--joana .hero__joana img { opacity: 0; transform: translateX(-8%); }
.hero__slide--joana.is-in .hero__logo { animation: rise .9s var(--ease-out) .15s forwards; }
.hero__slide--joana.is-in .hero__edinos { animation: rise .8s var(--ease-out) .35s forwards; }
.hero__slide--joana.is-in .hero__lema { animation: rise .8s var(--ease-out) .55s forwards; }
.hero__slide--joana.is-in .hero__joana img { animation: slide-in-r 1.2s var(--ease-out) .2s forwards; }
@keyframes slide-in-r { to { opacity: 1; transform: none; } }

/* slide Ouvir */
.hero__slide--ouvir .hero__bg img { object-position: 50% 46%; }
.hero__outline { position: absolute; left: -2.1%; right: -2.4%; top: 22.6%; color: var(--white); }
.hero__outline svg { width: 100%; overflow: visible; }
.hero__outline path { stroke-dasharray: 1; }
/* recorte das duas pessoas (cortado à cintura): assenta no fundo do banner, centrado, com as cabeças perto do topo */
.hero__front { --w: calc(clamp(520px, 42.35vw, 815px) * 1.4); position: absolute; left: 50%; width: var(--w); margin-left: calc(var(--w) / -2); bottom: -14px; } /* margem abaixo do banner: o parallax sobe até ~5px e não pode abrir uma faixa por baixo */
.hero__front img { width: 100%; }
.hero__claim { position: absolute; left: 0; right: 0; top: 56.5%; display: grid; justify-items: center; width: max-content; margin: 0 auto; text-transform: uppercase; }
.hero__claim span { display: block; line-height: 1; font-style: italic; white-space: nowrap; }
.hero__claim-a { padding: .06em .3em .1em .22em; background: var(--magenta); font-size: clamp(2.75rem, 1.5rem + 4.5vw, 5.5rem); font-weight: 900; letter-spacing: -.02em; transform: skewX(-10deg) ; clip-path: polygon(3% 0, 100% 0, 97% 100%, 0 100%); }
.hero__claim-b { margin-top: -.06em; padding: .12em .35em .14em; background: var(--purple); font-size: clamp(2rem, 1.2rem + 3.2vw, 4rem); font-weight: 500; clip-path: polygon(3% 0, 100% 0, 97% 100%, 0 100%); }

.hero__slide--ouvir .hero__outline path { stroke-dashoffset: 1; }
.hero__slide--ouvir.is-in .hero__outline path { animation: draw 2.2s var(--ease-out) .2s forwards; }
.hero__slide--ouvir .hero__front img { opacity: 0; transform: translateY(6%) scale(1.04); }
.hero__slide--ouvir.is-in .hero__front img { animation: slide-in-r 1.2s var(--ease-out) .35s forwards; }
.hero__slide--ouvir .hero__claim span { opacity: 0; }
.hero__slide--ouvir.is-in .hero__claim-a { animation: claim-l .8s var(--ease-out) .9s forwards; }
.hero__slide--ouvir.is-in .hero__claim-b { animation: claim-r .8s var(--ease-out) 1.05s forwards; }
@keyframes claim-l { from { opacity: 0; translate: -40% 0; } to { opacity: 1; translate: 0 0; } }
@keyframes claim-r { from { opacity: 0; translate: 40% 0; } to { opacity: 1; translate: 0 0; } }

.hero__controls { position: absolute; z-index: 5; right: var(--gutter); bottom: 22px; display: flex; gap: 10px; align-items: center; }
.hero__dot { width: 12px; height: 12px; padding: 0; border: 2px solid var(--white); border-radius: 50%; background: transparent; transition: background .3s, transform .3s; }
.hero__dot.is-active { background: var(--white); transform: scale(1.15); }
.hero__pause { width: 30px; height: 30px; margin-left: 4px; border: 2px solid rgba(255, 255, 255, .7); border-radius: 50%; background: rgba(0, 43, 100, .4); display: grid; place-items: center; }
.hero__pause span { width: 8px; height: 10px; border-inline: 3px solid var(--white); }
.hero__pause[aria-pressed="true"] span { width: 0; height: 0; border: 0; border-left: 9px solid var(--white); border-top: 6px solid transparent; border-bottom: 6px solid transparent; margin-left: 3px; }

/* ---------------------------------------------------------------- faixa PRESIDENCIAIS */
.band { background: var(--red); padding-block: clamp(18px, 2.4vw, 46px); }
.band__text { text-align: center; font-size: clamp(1.25rem, 1rem + 1vw, 2rem); font-weight: 500; letter-spacing: .08em; text-transform: uppercase; line-height: 1.1; }

/* ---------------------------------------------------------------- Cabo Verde / mapa */

.video { position: relative; display: block; overflow: hidden; background: var(--navy); color: var(--white); }
.video img { width: 100%; height: 100%; object-fit: cover; transition: transform .8s var(--ease-out), filter .4s; }
.video:hover img { transform: scale(1.05); filter: brightness(.85); }
.video__play { position: absolute; left: 50%; top: 50%; width: clamp(46px, 4.2vw, 80px); aspect-ratio: 1; translate: -50% -50%; border-radius: 50%; background: rgba(237, 25, 65, .92); box-shadow: 0 10px 30px rgba(0, 0, 0, .3); transition: transform .4s var(--ease-back); }
.video__play::before { content: ""; position: absolute; left: 38%; top: 30%; border-left: .9em solid var(--white); border-top: .55em solid transparent; border-bottom: .55em solid transparent; font-size: clamp(14px, 1.2vw, 22px); }
.video__play::after { content: ""; position: absolute; inset: -6px; border-radius: 50%; border: 2px solid rgba(255, 255, 255, .7); animation: ping 2.2s ease-out infinite; }
@keyframes ping { from { transform: scale(.9); opacity: 1; } to { transform: scale(1.5); opacity: 0; } }
.video:hover .video__play { transform: scale(1.12); }
.video--short { aspect-ratio: 324 / 574; }
.video iframe { position: absolute; inset: 0; width: 100%; height: 100%; border: 0; }
.video video { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; background: #000; }

.world-map { color: var(--white); position: relative; width: var(--wrap); margin: clamp(28px, 2.4vw, 46px) auto 0; aspect-ratio: 1402 / 841; border-radius: var(--radius-lg); background: var(--navy); overflow: hidden; box-shadow: 0 30px 60px -30px rgba(0, 43, 100, .55); }
.world-map__stage, .world-map__svg { position: absolute; inset: 0; width: 100%; height: 100%; }
.world-map__svg path { stroke: var(--white); stroke-width: 1.2; vector-effect: non-scaling-stroke; }
.map-region { cursor: pointer; outline: none; transition: opacity .5s, filter .3s; }
/* todas as ilhas e países com a mesma cor (só a região escolhida muda, no zoom) */
.map-region path { fill: #58c5c7; transition: fill .5s; }
.map-hit { fill: transparent; stroke: none; }
.map-region:hover, .map-region:focus-visible { filter: brightness(1.18) drop-shadow(0 0 6px rgba(255, 255, 255, .55)); }
.map-region:focus-visible path { stroke-width: 2.5; }
.world-map.is-zoomed .map-region.is-selected path { fill: #e26e5d; }
.world-map.is-zoomed .map-region:not(.in-cluster) { opacity: 0; pointer-events: none; }
/* ilha sem mandatário (ver build.mjs, switchOffEmpty): fica no mapa, com a mesma cor, mas sem clique */
.world-map .map-region.map-region--off { cursor: default; pointer-events: none; filter: none; }

.world-map__panel { position: absolute; inset: 0; pointer-events: none; }
.world-map__back { pointer-events: auto; position: absolute; top: 18px; left: 41%; padding: .45em 1em; border: 2px solid var(--sky); border-radius: 99px; background: rgba(0, 43, 100, .75); color: var(--sky); font-size: var(--fz-sm); font-weight: 800; min-height: 40px; transition: background .3s, color .3s; }
.world-map__back:hover { background: var(--sky); color: var(--navy); }
.world-map__video { position: absolute; left: 1.4%; top: 2.3%; width: 32.2%; height: 95.2%; pointer-events: none; visibility: hidden; opacity: 0; transform: translateX(-30px); transition: opacity .5s, transform .7s var(--ease-out); }
.world-map__video .video { height: 100%; border-radius: var(--radius-lg); }
.world-map__info { position: absolute; left: 41%; right: 22px; bottom: 7%; opacity: 0; transform: translateY(20px); transition: opacity .5s .15s, transform .7s var(--ease-out) .15s; }
.world-map__name { display: block; font-size: clamp(1.5rem, 1.1rem + 1.4vw, 2.5rem); font-weight: 900; font-style: italic; letter-spacing: -.03em; line-height: 1.05; }
.world-map__role { display: block; font-size: clamp(.9375rem, .85rem + .3vw, 1.125rem); font-weight: 600; font-style: italic; }
/* vários mandatários na mesma região: botões para trocar de vídeo */
.world-map__people { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 14px; pointer-events: auto; }
.world-map__people[hidden] { display: none; }
.world-map__person { min-height: 40px; padding: .45em 1.1em; border: 2px solid var(--sky); border-radius: 99px; background: rgba(0, 43, 100, .75); color: var(--sky); font-size: var(--fz-sm); font-weight: 800; transition: background .3s, color .3s; }
.world-map__person:hover, .world-map__person[aria-pressed="true"] { background: var(--sky); color: var(--navy); }
/* is-intro: antes de escolher uma ilha, a mandatária nacional fica sempre visível à esquerda */
.world-map.is-zoomed .world-map__video, .world-map.is-zoomed .world-map__info,
.world-map.is-intro .world-map__video, .world-map.is-intro .world-map__info { opacity: 1; transform: none; }
/* o vídeo só recebe cliques quando está visível (antes tapava os EUA de forma invisível) */
.world-map.is-zoomed .world-map__video, .world-map.is-intro .world-map__video { pointer-events: auto; visibility: visible; }
.world-map__video { transition: opacity .5s, transform .7s var(--ease-out), width .7s var(--ease-out), height .7s var(--ease-out), visibility 0s .5s; }
.world-map.is-zoomed .world-map__video, .world-map.is-intro .world-map__video { transition: opacity .5s, transform .7s var(--ease-out), width .7s var(--ease-out), height .7s var(--ease-out), visibility 0s; }
/* desktop, mandatária nacional: vídeo um pouco mais baixo, com o nome e o cargo por baixo */
@media (min-width: 900px) {
  .world-map.is-intro .world-map__video { width: 28.35%; height: 84%; }
  .world-map.is-intro .world-map__info { left: 1.4%; right: auto; top: 88%; bottom: auto; width: 28.35%; }
  .world-map.is-intro .world-map__name { font-size: clamp(1.25rem, .8rem + 1vw, 2rem); }
}

/* país sem mandatário com vídeo: nome centrado por baixo do país */
.world-map.no-video .world-map__info { left: 0; right: 0; text-align: center; }

/* etiqueta com o nome do país ao passar o rato / focar */
.world-map__tip { position: absolute; z-index: 3; left: 0; top: 0; padding: .45em .9em; border-radius: 99px; background: var(--white); color: var(--navy); font-size: var(--fz-sm); font-weight: 800; white-space: nowrap; pointer-events: none; opacity: 0; transform: translate(-50%, calc(-100% - 10px)) scale(.92); transition: opacity .2s, transform .25s var(--ease-out); box-shadow: 0 8px 20px -8px rgba(0, 10, 40, .6); }
.world-map__tip::after { content: ""; position: absolute; left: 50%; top: 100%; margin-left: -6px; border: 6px solid transparent; border-top-color: var(--white); }
.world-map__tip.is-on { opacity: 1; transform: translate(-50%, calc(-100% - 10px)); }
.world-map__hint { position: absolute; right: 22px; bottom: 16px; font-size: .75rem; font-weight: 700; letter-spacing: .16em; text-transform: uppercase; color: var(--sky); opacity: .8; transition: opacity .4s; }
.world-map.is-zoomed .world-map__hint { opacity: 0; }

/* ---------------------------------------------------------------- compromissos: carrossel */
.compromissos .title { margin-bottom: clamp(24px, 2.6vw, 50px); }
.carousel { position: relative; --cw: clamp(280px, 53.4vw, 1026px); --gap: clamp(12px, 1.2vw, 24px); }
.carousel__viewport { position: relative; height: calc(var(--cw) * .6); overflow: hidden; touch-action: pan-y; cursor: grab; }
.carousel__viewport.is-dragging { cursor: grabbing; }
.carousel__track { position: absolute; inset: 0; }
.carousel .c-card { position: absolute; left: 50%; top: 0; width: var(--cw); height: 100%; margin-left: calc(var(--cw) / -2); transform: translateX(calc(var(--slot, 0) * (var(--cw) + var(--gap)) + var(--drag, 0px))) scale(var(--sc, .9)); transition: transform .8s var(--ease-out), opacity .6s; opacity: var(--op, 1); }
.carousel.is-dragging .c-card, .carousel .c-card.no-anim { transition: none; }
.carousel .c-card.is-current { --sc: 1; }
.carousel__arrow { position: absolute; z-index: 4; top: calc(var(--cw) * .6 * .69); width: clamp(40px, 3.8vw, 72px); aspect-ratio: 1; border: 0; border-radius: 50%; background: #111; box-shadow: 0 8px 20px rgba(0, 0, 0, .35); transition: transform .35s var(--ease-back), background .3s; }
.carousel__arrow::before { content: ""; position: absolute; inset: 0; margin: auto; width: 42%; height: 3px; background: var(--white); border-radius: 2px; }
.carousel__arrow::after { content: ""; position: absolute; top: 50%; width: 22%; aspect-ratio: 1; border: solid var(--white); border-width: 3px 3px 0 0; }
.carousel__arrow--prev { left: calc(50% - var(--cw) / 2 - var(--gap) - clamp(40px, 3.8vw, 72px) / 2 - 1.2vw); }
.carousel__arrow--prev::after { left: 28%; transform: translateY(-50%) rotate(-135deg); }
.carousel__arrow--next { right: calc(50% - var(--cw) / 2 - var(--gap) - clamp(40px, 3.8vw, 72px) / 2 - 1.2vw); }
.carousel__arrow--next::after { right: 28%; transform: translateY(-50%) rotate(45deg); }
.carousel__arrow:hover { transform: scale(1.12); background: var(--red); }
.dots { display: flex; justify-content: center; gap: clamp(4px, .45vw, 8px); margin-top: clamp(20px, 1.8vw, 34px); }
.dots__dot { width: clamp(14px, 1.1vw, 21px); aspect-ratio: 1; padding: 0; border: 2px solid var(--white); border-radius: 50%; background: transparent; transition: background .3s, transform .3s; }
.dots__dot[aria-current="true"] { background: var(--white); transform: scale(1.12); }
.compromissos .center { margin-top: clamp(20px, 2vw, 40px); }

/* cartão de compromisso (3 tamanhos) */
.c-card { display: grid; grid-template-columns: 42% 58%; overflow: hidden; border-radius: var(--radius); background: var(--navy); color: var(--white); text-decoration: none; }
.c-card--alt { background: var(--blue); }
.c-card__text { display: flex; flex-direction: column; align-items: flex-start; padding: 7% 6% 8%; min-width: 0; }
.c-card__n { color: var(--cyan); font-weight: 800; font-style: italic; line-height: .8; letter-spacing: -.04em; }
.c-card__title { font-weight: 800; font-style: italic; line-height: 1.18; letter-spacing: -.01em; }
.c-card .pill { margin-top: auto; }
.c-card__media { position: relative; overflow: hidden; border-radius: var(--radius); }
.c-card__media img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; transition: transform 1s var(--ease-out); }
.c-card:hover .c-card__media img { transform: scale(1.06); }
.c-card__media img[src*="/compromisso-2."] { object-position: 100% 50%; } /* a Joana está na margem direita da foto */
/* compromissos com vídeo (vertical 9:16): a coluna do vídeo fica estreita e alta */
.c-card__loop { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; background: var(--navy); }
.c-card--video .c-card__media { background: var(--navy); }
.c-card__player { position: absolute; inset: 0; border-radius: inherit; }
.c-card__player img { position: absolute; inset: 0; }
.c-card--lg.c-card--video { grid-template-columns: 1fr 34%; }
/* carrossel com vídeo: o texto do compromisso enche a coluna do título (no telemóvel o cartão é só o vídeo) */
.c-card__lead { margin-top: 1.1em; max-width: 34em; font-size: clamp(.8125rem, calc(var(--cw) * .0205), 1.1875rem); font-weight: 500; line-height: 1.6; opacity: .92; }
.c-card--lg .c-card__lead { margin-bottom: 1.2em; }
.c-card--lg .c-card__lead + .pill { margin-top: auto; }
/* ecrãs estreitos de computador: no máximo 5 linhas (o texto inteiro está na página do compromisso) */
@media (max-width: 1100px) {
  .c-card--lg .c-card__lead { display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 5; line-clamp: 5; overflow: hidden; }
}
.c-card--sm.c-card--video { grid-template-columns: 1fr 34%; }
/* página do compromisso: o vídeo cabe inteiro no ecrã (por baixo do menu e do título da secção) */
.c-card--xl.c-card--video { grid-template-columns: 1fr min(26%, 320px, calc((100svh - 220px) * 9 / 16)); }
.c-card--xl.c-card--video .c-card__media { aspect-ratio: 9 / 16; }
.c-card--xl.c-card--video .c-card__text { padding: 4% 6%; }
.c-card--lg .c-card__n { font-size: calc(var(--cw) * .12); }
.c-card--lg .c-card__title { margin-top: .6em; font-size: min(calc(var(--cw) * .032), 2rem); line-height: 1.25; }
.c-card--lg .pill { font-size: var(--fz-sm); }
.c-card--xl { width: var(--wrap); margin: 0 auto; grid-template-columns: 49% 51%; min-height: clamp(260px, 31.9vw, 612px); }
.c-card--xl .c-card__text { justify-content: center; padding: 3% 4%; }
.c-card--xl .c-card__n { font-size: clamp(4rem, 7vw, 8rem); }
.c-card--xl .c-card__title { font-size: clamp(1.75rem, 1.2rem + 2.2vw, 3.25rem); line-height: 1.2; }

/* grelha */
.c-grid { width: var(--wrap); margin: 0 auto; display: grid; grid-template-columns: repeat(3, 1fr); gap: clamp(12px, 1.04vw, 20px); }
.c-grid__item:last-child:nth-child(3n + 1) { grid-column: 2; }
.c-card--sm { aspect-ratio: 452 / 272; grid-template-columns: 42% 58%; transition: transform .45s var(--ease-out), box-shadow .45s; }
.c-card--sm:hover { transform: translateY(-6px); box-shadow: 0 22px 40px -18px rgba(0, 10, 40, .6); }
.c-card--sm .c-card__text { padding: 5% 4% 5% 5%; }
.c-card--sm .c-card__n { font-size: clamp(2.25rem, 3vw, 3.5rem); }
.c-card--sm .c-card__title { font-size: clamp(.9375rem, .8rem + .35vw, 1.125rem); line-height: 1.3; }

.prose { width: min(72ch, var(--wrap)); margin: clamp(32px, 3.3vw, 64px) auto; font-size: var(--fz-body); line-height: 1.7; }

/* ---------------------------------------------------------------- compromisso: anterior / seguinte */
.c-pager { width: min(1100px, var(--wrap)); margin: clamp(36px, 4vw, 64px) auto 0; display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }
.c-pager__link { display: grid; align-content: start; gap: 4px; padding: 22px 26px; border: 1px solid rgba(255, 255, 255, .18); border-radius: var(--radius); background: rgba(255, 255, 255, .07); text-decoration: none; transition: background .3s, border-color .3s, transform .35s var(--ease-out); }
.c-pager__link:hover { background: rgba(255, 255, 255, .13); border-color: var(--sky); transform: translateY(-3px); }
.c-pager__link--next { text-align: right; justify-items: end; }
.c-pager__dir { font-size: var(--fz-xs); font-weight: 700; letter-spacing: .12em; text-transform: uppercase; color: var(--sky); }
.c-pager__n { margin-top: 6px; color: var(--cyan); font-size: 2.25rem; font-weight: 800; font-style: italic; line-height: 1; }
.c-pager__title { margin-top: 6px; font-size: clamp(1.0625rem, .95rem + .45vw, 1.375rem); font-weight: 800; font-style: italic; line-height: 1.25; }

.c-pager__all { margin-top: clamp(24px, 2.6vw, 36px); }

/* ---------------------------------------------------------------- documento estratégico (PDF) */
.c-doc { width: var(--wrap); margin: clamp(28px, 3vw, 48px) auto 0; }
.c-doc .pill { white-space: normal; text-wrap: balance; }
.c-doc__meta { font-weight: 600; opacity: .8; }
.prose p + p { margin-top: 1.5em; }
.prose--intro { text-align: center; }
.prose--legal { max-width: 72ch; }
.prose--legal h2 { margin-top: 1.6em; font-size: var(--fz-h3); font-weight: 900; font-style: italic; }
.prose--legal p { margin-top: .6em; }
.prose--legal p + p { margin-top: 1em; }
.prose--legal .prose__lead { font-size: 1.08em; font-weight: 600; }
.prose--legal ul { margin-top: .6em; padding-left: 1.3em; list-style: disc; }
.prose--legal li + li { margin-top: .35em; }
.prose--legal li::marker { color: var(--orange); }
.prose--legal a { color: inherit; text-decoration: underline; text-underline-offset: .18em; }
.prose--legal .prose__updated { margin-top: 2.2em; font-size: var(--fz-sm); opacity: .75; }

/* ---------------------------------------------------------------- galeria (marquee) */
.galeria { padding-bottom: clamp(56px, 5.4vw, 104px); }
/* corta só nas laterais: as sombras por baixo das fotos ficam inteiras (com margem extra para browsers antigos) */
.marquee { position: relative; overflow: hidden; overflow-x: clip; overflow-y: visible; padding-block: 28px 56px; margin-bottom: -24px; }
.marquee__track { display: flex; width: max-content; animation: marquee var(--marquee-dur, 64s) linear infinite; }
/* espaço da faixa reservado enquanto as publicações do Instagram chegam (evita saltos na página) */
.marquee--instagram { min-height: calc(clamp(220px, 23vw, 442px) * 608 / 442 + 84px); }
.marquee--instagram[hidden] { display: none; }
.galeria__fallback { margin-top: 12px; }
.marquee:hover .marquee__track, .marquee:focus-within .marquee__track { animation-play-state: paused; }
@keyframes marquee { to { transform: translateX(-50%); } }
.marquee__list { display: flex; align-items: center; }
.marquee__item { flex: none; margin-right: clamp(-24px, -1.1vw, -10px); }
.marquee__item:nth-child(odd) { transform: rotate(-1.2deg); }
.marquee__item:nth-child(even) { transform: rotate(1deg) translateY(4px); }
.marquee__btn { display: block; padding: 0; border: 0; background: none; border-radius: var(--radius-lg); overflow: hidden; box-shadow: 0 2px 6px rgba(35, 31, 32, .08), 0 18px 36px -16px rgba(35, 31, 32, .38); transition: transform .5s var(--ease-out), box-shadow .5s; }
.marquee__btn:hover { transform: translateY(-10px) scale(1.03); box-shadow: 0 4px 10px rgba(35, 31, 32, .1), 0 32px 48px -18px rgba(35, 31, 32, .45); position: relative; z-index: 2; }
.marquee__btn img { width: clamp(220px, 23vw, 442px); aspect-ratio: 442 / 608; object-fit: cover; }
/* vídeos do Instagram: botão de play; o clique abre o Instagram num separador novo */
.marquee__btn--video { position: relative; }
.marquee__play { position: absolute; left: 50%; top: 50%; width: clamp(54px, 4.6vw, 76px); aspect-ratio: 1; translate: -50% -50%; border-radius: 50%; background: rgba(255, 255, 255, .92); box-shadow: 0 10px 28px -8px rgba(0, 10, 40, .55); transition: transform .4s var(--ease-out), background-color .3s; pointer-events: none; }
.marquee__play::before { content: ""; position: absolute; inset: 0; margin: auto; translate: 12% 0; width: 0; height: 0; border-style: solid; border-width: .62em 0 .62em 1.05em; border-color: transparent transparent transparent var(--red); font-size: clamp(15px, 1.25vw, 21px); transition: border-color .3s; }
.marquee__btn--video:hover .marquee__play, .marquee__btn--video:focus-visible .marquee__play { transform: scale(1.12); background: var(--red); }
.marquee__btn--video:hover .marquee__play::before, .marquee__btn--video:focus-visible .marquee__play::before { border-left-color: var(--white); }

.lightbox { max-width: min(92vw, 1100px); max-height: 90vh; padding: 0; border: 0; border-radius: var(--radius-lg); background: transparent; overflow: visible; }
.lightbox::backdrop { background: rgba(0, 20, 50, .85); backdrop-filter: blur(6px); }
.lightbox[open] { animation: lb-in .45s var(--ease-out); }
@keyframes lb-in { from { opacity: 0; transform: scale(.94); } }
.lightbox__img { max-width: 100%; max-height: 84vh; touch-action: pan-y; user-select: none; -webkit-user-drag: none; width: auto; border-radius: var(--radius-lg); }
.lightbox__close { position: absolute; top: -18px; right: -18px; width: 44px; height: 44px; border: 0; border-radius: 50%; background: var(--red); color: var(--white); font-size: 1.6rem; line-height: 1; z-index: 2; }
.lightbox__nav { position: absolute; z-index: 2; top: 50%; width: 52px; height: 52px; margin-top: -26px; padding: 0; border: 0; border-radius: 50%; background: rgba(255, 255, 255, .92); box-shadow: 0 10px 26px -10px rgba(0, 10, 40, .6); transition: background .3s, transform .35s var(--ease-back); }
.lightbox__nav::before { content: ""; position: absolute; inset: 0; margin: auto; width: 12px; height: 12px; border: solid var(--navy); border-width: 0 0 3px 3px; transform: translateX(2px) rotate(45deg); transition: border-color .3s; }
.lightbox__nav--next::before { transform: translateX(-2px) rotate(-135deg); }
.lightbox__nav--prev { left: -76px; }
.lightbox__nav--next { right: -76px; }
.lightbox__nav:hover { background: var(--red); transform: scale(1.08); }
.lightbox__nav:hover::before { border-color: var(--white); }
.lightbox__count { position: absolute; left: 0; right: 0; top: calc(100% + 12px); color: var(--white); font-size: var(--fz-sm); font-weight: 700; letter-spacing: .12em; text-align: center; }
.lightbox.is-single .lightbox__nav, .lightbox.is-single .lightbox__count { display: none; }
/* fotos do Instagram: link para a publicação original */
.lightbox__link { position: absolute; left: 0; bottom: calc(100% + 12px); padding: .55em 1.3em; border-radius: 999px; background: var(--red); color: var(--white); font-size: var(--fz-xs); font-weight: 700; letter-spacing: .12em; text-transform: uppercase; text-decoration: none; white-space: nowrap; }
.lightbox__link:hover { background: var(--white); color: var(--red); }
.lightbox__link[hidden] { display: none; }

/* ---------------------------------------------------------------- redes sociais */
/* RODAPE.ai: cinco cartões (ícone + nome) e a foto da Joana num círculo com dois anéis, por cima do
   último cartão. Medidas do .ai em --u: o conjunto (1553 no artboard de 1920) ocupa a largura do conteúdo. */
.social { --u: calc(min(1402px, 100vw - 2 * clamp(16px, 13.5vw - 60px, 260px)) / 1553); --icon: calc(106 * var(--u)); }
.social .title { margin-bottom: clamp(26px, 2.8vw, 54px); }
.social__wrap { display: flex; align-items: center; justify-content: center; }
.social__grid { display: flex; gap: calc(26.6 * var(--u)); }
.social__card { position: relative; display: flex; flex-direction: column; align-items: center; gap: calc(18 * var(--u)); width: calc(205 * var(--u)); height: calc(278 * var(--u)); padding-top: calc(53.5 * var(--u)); border-radius: calc(31.4 * var(--u)); background: var(--white); color: var(--red); text-decoration: none; box-shadow: 0 2px 0 #63646633; transition: transform .4s var(--ease-back), box-shadow .4s; }
/* o último cartão continua por baixo do círculo (no .ai vai até 1447; o círculo começa em 1302) */
.social__grid > li:last-child .social__card { width: calc(338 * var(--u)); padding-right: calc(133 * var(--u)); }
.social__card:hover { transform: translateY(-4px); box-shadow: 0 16px 26px -10px rgba(0, 10, 40, .5); }
.social__icon { flex: none; width: var(--icon); height: var(--icon); border-radius: 50%; background: var(--red); color: var(--white); display: grid; place-items: center; transition: transform .6s var(--ease-back); }
.social__icon svg { width: 100%; height: 100%; fill: currentColor; }
.social__card:hover .social__icon { transform: rotate(-12deg) scale(1.08); }
.social__label { font-size: max(.875rem, 30 * var(--u)); font-weight: 600; font-style: italic; line-height: 1.1; white-space: nowrap; }
/* anel de fora (azul -> vermelho), anel de dentro (cor do fundo -> azul, na borda da imagem) e disco ciano com a foto */
.social__photo { position: relative; z-index: 1; flex: none; width: calc(434 * var(--u)); aspect-ratio: 1; margin-left: calc(-145 * var(--u)); padding: calc(12 * var(--u)); border-radius: 50%; background: linear-gradient(90deg, #009fe3, #958286, #e30929); }
.social__photo img { display: block; width: 100%; height: 100%; border: calc(12.5 * var(--u)) solid transparent; border-radius: 50%; background: linear-gradient(90deg, #104372 20%, #0066ae) border-box; }
@media (max-width: 899px) {
  /* foto em cima; cartões numa linha de 5 (3 + 2 em ecrãs estreitos) */
  .social__wrap { flex-direction: column; gap: 22px; width: min(640px, 100% - 2 * clamp(16px, 4.8vw, 200px)); margin: 0 auto; }
  .social__photo { order: -1; width: min(240px, 62vw); margin: 0; padding: 7px; }
  .social__photo img { border-width: 7px; }
  .social__grid { flex-wrap: wrap; justify-content: center; gap: 10px; width: 100%; }
  .social__grid > li { flex: 0 0 calc((100% - 4 * 10px) / 5); }
  .social__card, .social__grid > li:last-child .social__card { width: 100%; height: auto; padding: 18px 4px 16px; gap: 10px; border-radius: 18px; }
  .social { --icon: clamp(44px, 13vw, 56px); }
  .social__label { font-size: clamp(.8125rem, 3.9vw, .9375rem); }
}
@media (max-width: 599px) {
  .social__grid > li { flex-basis: calc((100% - 2 * 10px) / 3); }
}

/* ---------------------------------------------------------------- footer */
/* Redes sociais + rodapé partilham um único fundo contínuo (sem corte entre secções) */
/* Ondas à escala original do rodapé (imagem inteira à largura da página),
   presas ao fundo. Como o bloco é mais alto que o rodapé, a imagem aparece
   completa — as ondas de cima já não ficam cortadas — e o topo funde-se na cor. */
.closing { --wave-h: max(24vw, 220px); position: relative; isolation: isolate; overflow: hidden; background: #104372; } /* o mesmo azul do banner (cor dominante de wave-bg.webp) */
.closing__bg { position: absolute; inset: 0; z-index: -1; pointer-events: none; overflow: hidden; }
.closing__waves {
  position: absolute; left: 0; right: 0; bottom: 0; height: var(--wave-h);
  /* largura total, altura reduzida: ondas mais baixas e discretas */
  background: url("/assets/img/wave-bg.webp") 50% 100% / 100% 100% no-repeat;
  -webkit-mask-image: linear-gradient(to bottom, transparent 0, #000 14%);
  mask-image: linear-gradient(to bottom, transparent 0, #000 14%);
}
/* Redes sociais: fundo do RODAPE.ai, azul-claro no canto de cima à esquerda até ao azul do bloco.
   Em ecrãs largos a diagonal ainda não chegou ao #104372 no canto de baixo à esquerda, por isso
   a camada de cima desvanece para o #104372 até ao fundo: sem corte com o Partisipa em nenhuma largura. */
.closing .social {
  background:
    linear-gradient(to bottom, #10437200 45%, #104372),
    linear-gradient(150deg, #0069b4, #005898 12%, #05467b 30%, #104372 52%);
  padding-bottom: clamp(16px, 1.5vw, 30px);
}
/* Perfil e Stickers no fim das páginas: secção cinza, mesma largura das redes sociais */
.kit-section { background: #eceef1; color: var(--navy); }
.kit-section .subtitle { color: var(--ink); }
.kit-section .kit { width: min(1040px, 100% - 2 * clamp(16px, 4.8vw, 200px)); }
.kit-section .kit__card { box-shadow: 0 18px 40px -22px rgba(0, 43, 100, .35); }
.site-footer { position: relative; background: none; }
/* Ordem do fim das páginas: NOVIDADIS -> redes sociais + Partisipa (azul) -> Perfil e Stickers (cinza) -> rodapé (azul, com as ondas) */
.closing--top .apoio { padding-bottom: clamp(56px, 6.5vw, 124px); }
.closing--footer { --wave-h: 100%; }

/* Subscrição da newsletter no fim de todas as páginas */
/* PARTISIPA: formulário "Junte-se à campanha" (mesmo cartão da newsletter, campos do formulário da newsletter) */
.apoio { position: relative; padding-block: clamp(24px, 3vw, 48px) 0; scroll-margin-top: calc(var(--header-h) + 16px); }
.apoio__card {
  width: min(1040px, 100% - 2 * clamp(16px, 4.8vw, 200px)); margin: 0 auto;
  padding: clamp(22px, 2.6vw, 44px) clamp(20px, 2.8vw, 48px);
  border: 1px solid rgba(255, 255, 255, .18); border-radius: var(--radius-lg);
  background: rgba(0, 43, 100, .45); backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px);
  box-shadow: 0 24px 50px -24px rgba(0, 10, 40, .6);
}
.apoio__title { font-size: clamp(1.75rem, 1.3rem + 1.6vw, 2.75rem); font-weight: 900; font-style: italic; letter-spacing: -.02em; line-height: 1.05; }
.apoio__head p { margin-top: .5em; max-width: 46em; font-size: var(--fz-lead); line-height: 1.5; opacity: .92; }
.nl.apoio__form { width: auto; max-width: none; margin-top: clamp(18px, 2vw, 32px); display: grid; grid-template-columns: 1fr 1fr; column-gap: clamp(12px, 1.4vw, 24px); }
.apoio__form > .nl__field--area, .apoio__form > .nl__field--phone, .apoio__form > .nl__consent, .apoio__form > .apoio__hint,
.apoio__form > .apoio__turnstile, .apoio__form > p { grid-column: 1 / -1; }
.apoio__whatsapp { margin: -4px 0 clamp(14px, 1.45vw, 28px); }
.apoio__hint { margin: -4px 0 6px; font-size: var(--fz-sm); opacity: .8; }
.apoio__opt { color: rgba(255, 255, 255, .6); font-size: .85em; }
.apoio__turnstile { display: flex; justify-content: center; min-height: 65px; margin-bottom: 8px; }
.nl__field.nl__field--area { flex-direction: column; align-items: stretch; border-radius: 26px; }
.nl__field--area label { padding: 14px clamp(18px, 1.6vw, 30px) 0; text-align: left; }
.nl__field--area textarea { min-height: 120px; padding: 8px clamp(18px, 1.6vw, 30px) 16px; border: 0; background: transparent; color: var(--white); font: inherit; font-size: clamp(1rem, .95rem + .3vw, 1.25rem); line-height: 1.5; resize: vertical; }
.nl__field--area textarea:focus { outline: none; }
@media (max-width: 899px) {
  .nl.apoio__form { grid-template-columns: 1fr; }
}
.page-newsletter .apoio { display: none; } /* a página da newsletter já tem o seu formulário */
.site-footer__brand { position: relative; display: grid; justify-items: center; padding-block: clamp(40px, 4.6vw, 88px) clamp(36px, 3.6vw, 70px); }
.site-footer__logo { width: clamp(240px, 34vw, 600px); }
/* "E di Nos" igual ao do topo (hero), mais pequeno */
.site-footer__edinos { width: clamp(110px, 10.5vw, 180px); margin-top: calc(clamp(16px, 1.8vw, 28px) - clamp(110px, 10.5vw, 180px) * 10 / 298); }
.site-footer__bar { position: relative; display: flex; flex-wrap: wrap; justify-content: space-between; gap: 8px 24px; width: var(--wrap); margin: 0 auto; padding-block: 16px 22px; border-top: 1px solid rgba(255, 255, 255, .18); font-size: var(--fz-sm); opacity: .85; }
.site-footer__bar ul { display: flex; gap: 18px; }
.site-footer__bar a { text-decoration: none; }
.site-footer__bar a:hover { text-decoration: underline; }

/* ---------------------------------------------------------------- perfil e stickers */
.kit { width: min(1452px, var(--wrap)); margin: 0 auto; display: grid; grid-template-columns: 1fr 1fr; gap: clamp(16px, 2.2vw, 42px); align-items: stretch; } /* os dois cards com a mesma altura */
.kit__card { padding: clamp(22px, 2vw, 40px) clamp(18px, 1.6vw, 30px) clamp(26px, 2.4vw, 46px); border-radius: var(--radius-lg); background: var(--white); color: var(--ink); text-align: center; }
.kit__title { color: var(--blue-2); font-size: clamp(1.75rem, 1.3rem + 1.6vw, 2.75rem); font-weight: 900; font-style: italic; letter-spacing: -.03em; line-height: 1.05; }
.kit__sub { margin-top: .4em; font-size: clamp(1rem, .9rem + .4vw, 1.25rem); font-weight: 600; font-style: italic; line-height: 1.35; }
.kit__note { margin-top: 1.4em; font-size: var(--fz-sm); color: #555; }
/* Stickers: botão para pedir pelo WhatsApp da campanha (desligado até haver envio automático; ver kit.html) */
.kit__cta { margin-top: clamp(20px, 1.8vw, 30px); }
.kit__wa { display: inline-flex; align-items: center; gap: .55em; }
.kit__wa svg { flex: none; width: 1.6em; height: 1.6em; margin-left: -.4em; fill: currentColor; }
.kit__cta + .kit__note { margin-top: .9em; }
/* Stickers: passos para criar o sticker no WhatsApp a partir da imagem descarregada */
.kit__how { margin-top: clamp(18px, 1.6vw, 28px); font-size: var(--fz-sm); color: #555; text-align: left; display: inline-block; }
.kit__how-title { margin: 0; font-weight: 700; color: var(--blue-2); text-align: center; }
.kit__how ol { margin: .6em 0 0; padding-left: 1.3em; line-height: 1.6; }
/* Música: terceiro cartão, a toda a largura, por baixo do Perfil e dos Stickers */
.musica { grid-column: 1 / -1; display: flex; align-items: center; justify-content: center; gap: clamp(18px, 3vw, 56px); text-align: left; }
.musica__video { flex: none; width: clamp(170px, 17vw, 280px); border-radius: var(--radius-lg); box-shadow: 0 14px 30px -16px rgba(0, 43, 100, .5); }
.musica__body { flex: 0 1 34em; }
.musica__actions { display: flex; gap: 10px; flex-wrap: wrap; margin-top: clamp(16px, 1.4vw, 24px); }
.musica__actions [hidden] { display: none; }

.perfil__frames { display: grid; justify-items: center; gap: clamp(8px, .6vw, 12px); margin-top: clamp(24px, 2.4vw, 46px); }
.perfil__frame { width: clamp(150px, 17.2vw, 330px); aspect-ratio: 1; padding: 0; border: 4px solid transparent; border-radius: 50%; background: none; transition: transform .4s var(--ease-back), border-color .3s; }
.perfil__frame canvas { width: 100%; height: 100%; border-radius: 50%; }
.perfil__frame.is-selected { border-color: var(--red); transform: scale(1.03); }
.perfil__frame:hover { transform: scale(1.05); }
.perfil.has-photo .perfil__frame canvas { cursor: grab; touch-action: none; }
.perfil__tools { display: grid; justify-items: center; gap: 12px; margin-top: 22px; }
.perfil__upload { cursor: pointer; }
.perfil__upload:focus-within { outline: 3px solid var(--sky); outline-offset: 3px; }
.perfil__zoom { display: flex; align-items: center; gap: 10px; font-weight: 700; color: var(--blue-2); }
.perfil__zoom[hidden], .perfil__help[hidden], .perfil__actions[hidden] { display: none; }
.perfil__zoom input { accent-color: var(--red); width: 180px; }
.perfil__actions { display: flex; gap: 10px; flex-wrap: wrap; justify-content: center; }
.perfil__privacy, .perfil__help { font-size: var(--fz-sm); color: #555; max-width: 30em; }
.perfil__error { color: var(--red); font-weight: 700; font-size: var(--fz-sm); }
.perfil__error:empty { display: none; }

.stickers { display: grid; grid-template-columns: repeat(6, 1fr); gap: clamp(10px, 1.1vw, 22px); width: min(100%, 322px * 1.9); margin: clamp(20px, 1.8vw, 34px) auto 0; }
/* 3 por fila (cada um ocupa 2 de 6 colunas); uma última fila incompleta fica centrada */
.stickers > li { grid-column: span 2; }
.stickers > li:nth-child(3n+1):nth-last-child(2) { grid-column: 2 / span 2; }
.stickers > li:nth-child(3n+1):last-child { grid-column: 3 / span 2; }
.sticker { display: block; aspect-ratio: 1; padding: 8%; border-radius: clamp(12px, 1.2vw, 22px); background: #95a9bc; box-shadow: inset 0 0 0 1px rgba(0, 0, 0, .08), 0 6px 14px -6px rgba(0, 0, 0, .35); transition: transform .45s var(--ease-back), background .3s; }
.sticker img { width: 100%; height: 100%; object-fit: contain; filter: drop-shadow(0 4px 6px rgba(0, 0, 0, .25)); transition: transform .45s var(--ease-back); }
.sticker:hover { background: #a9bccd; transform: translateY(-4px) rotate(-2deg); }
.sticker:hover img { transform: scale(1.08) rotate(3deg); }

/* ---------------------------------------------------------------- o meu percurso (linha cronológica) */
.percurso { background: var(--white); color: var(--navy); }
.percurso .subtitle { color: var(--navy); }
.timeline { --fill: 0; --dot: 22px; --dot-top: clamp(26px, 2.5vw, 42px); position: relative; width: min(1100px, var(--wrap)); margin: 0 auto; }
.timeline__line { position: absolute; left: 50%; top: var(--dot-top); bottom: 0; width: 4px; margin-left: -2px; border-radius: 2px; background: #e1e6ee; overflow: hidden; }
.timeline__fill { position: absolute; inset: 0; background: linear-gradient(180deg, var(--red), var(--orange) 60%, var(--yellow)); transform: scaleY(var(--fill)); transform-origin: top; }
.timeline__list { margin: 0; padding: 0; list-style: none; display: grid; gap: clamp(24px, 2.6vw, 48px); }
.timeline__item { position: relative; display: grid; grid-template-columns: 1fr 1fr; column-gap: clamp(56px, 7vw, 130px); }
/* os cartões alternam de lado e sobem até meio do anterior (ziguezague) */
.timeline__item + .timeline__item { margin-top: clamp(-150px, -8vw, -70px); }
.timeline__item:nth-child(odd) .timeline__card { grid-column: 1; text-align: right; }
.timeline__item:nth-child(even) .timeline__card { grid-column: 2; }
.timeline__dot { position: absolute; z-index: 1; left: 50%; top: calc(var(--dot-top) - var(--dot) / 2 + 2px); width: var(--dot); height: var(--dot); margin-left: calc(var(--dot) / -2); border: 4px solid #cfd6e2; border-radius: 50%; background: var(--white); transition: border-color .4s, transform .5s var(--ease-back); }
.timeline__item.is-on .timeline__dot { border-color: var(--red); transform: scale(1.15); }
.timeline__item--now .timeline__dot { background: var(--red); }
.timeline__item--now.is-on .timeline__dot { box-shadow: 0 0 0 8px rgba(237, 25, 65, .15); }
.timeline__card { padding: clamp(20px, 2vw, 34px) clamp(22px, 2.3vw, 40px); border-radius: var(--radius); background: #f2f4f8; }
.timeline__year { font-size: clamp(1.125rem, 1rem + .6vw, 1.5rem); font-weight: 900; font-style: italic; line-height: 1; letter-spacing: -.02em; color: var(--red); }
.timeline__title { margin-top: .4em; font-size: var(--fz-h3); font-weight: 800; line-height: 1.25; }
.timeline__text { margin-top: .6em; color: var(--ink); line-height: 1.6; }
.timeline__item--now .timeline__card { background: var(--grad-blue); color: var(--white); }
.timeline__item--now .timeline__year { color: var(--yellow); }
.timeline__item--now .timeline__text { color: rgba(255, 255, 255, .88); }
.timeline__card > :first-child { margin-top: 0; }
/* marcos com fotos: cartão de um lado, fotos do outro, sem ziguezague */
.timeline__list:has(.timeline__item--media) { gap: clamp(48px, 5.5vw, 104px); }
.timeline__item--media + .timeline__item, .timeline__item + .timeline__item--media { margin-top: 0; }
.timeline__item--media > .timeline__card, .timeline__item--media > .timeline__media { grid-row: 1; align-self: start; }
.timeline__item--media:nth-child(odd) .timeline__media { grid-column: 2; }
.timeline__item--media:nth-child(even) .timeline__media { grid-column: 1; }
.timeline__media { display: grid; gap: clamp(12px, 1.2vw, 20px); align-items: start; }
.timeline__media--duo { grid-template-columns: 2fr 1fr; }
.timeline__media--trio { grid-template-columns: 1fr 1fr; }
.timeline__media--trio > .timeline__fig:first-child { grid-column: 1 / -1; }
.timeline__fig { margin: 0; }
.timeline__fig img { display: block; width: 100%; height: auto; max-height: min(560px, 70vh); object-fit: cover; object-position: 50% 25%; border-radius: var(--radius); background: #e1e6ee; box-shadow: 0 18px 40px -24px rgba(0, 20, 60, .45); }
.timeline__caption { margin-top: .7em; color: var(--navy); font-size: var(--fz-sm); font-style: italic; line-height: 1.45; opacity: .8; }

/* ---------------------------------------------------------------- newsletter */
.nl { width: var(--wrap); max-width: 880px; margin: 0 auto; }
.nl__field { position: relative; display: flex; align-items: center; margin-bottom: clamp(14px, 1.45vw, 28px); overflow: hidden; border-radius: 999px; background: var(--navy); box-shadow: 0 0 0 2px transparent; transition: box-shadow .3s; }
.nl__field:focus-within { box-shadow: 0 0 0 2px var(--sky), 0 0 0 7px rgba(109, 207, 246, .15); }
.nl__field label { flex: none; padding-left: clamp(18px, 1.6vw, 30px); color: var(--sky); font-size: var(--fz-lead); }
.nl__field input { flex: 1; min-width: 0; height: clamp(52px, 4vw, 64px); padding: 0 clamp(14px, 1.6vw, 30px) 0 .5em; border: 0; background: transparent; color: var(--white); font: inherit; font-size: clamp(1rem, .95rem + .3vw, 1.25rem); }
.nl__field input:focus { outline: none; }
.nl__field.is-invalid { box-shadow: 0 0 0 2px var(--red); }
.nl__trap { position: absolute; left: -9999px; width: 1px; height: 1px; overflow: hidden; }
.nl__consent { display: flex; gap: .7em; align-items: flex-start; margin: 8px 0 18px; font-size: .9375rem; }
.nl__consent input { flex: none; width: 1.2em; height: 1.2em; margin-top: .2em; accent-color: var(--sky); }
.cf-turnstile { display: flex; justify-content: center; margin-bottom: 18px; min-height: 65px; }
.nl .pill { padding-inline: 2.4em; }
.nl .pill[disabled] { opacity: .6; pointer-events: none; }
.nl__status { min-height: 1.5em; margin-top: 14px; text-align: center; font-weight: 700; }
.nl__status.is-ok { color: var(--sky); }
.nl__status.is-err { color: #ffb3c1; }
.nl__small { margin-top: 10px; font-size: var(--fz-sm); line-height: 1.6; }

/* ---------------------------------------------------------------- efeitos: reveal / títulos palavra a palavra */
.js [data-reveal] { opacity: 0; transition: opacity .9s var(--ease-out), transform 1s var(--ease-out), clip-path 1.1s var(--ease-out); transition-delay: var(--d, 0ms); }
.js [data-reveal="up"] { transform: translateY(40px); }
.js [data-reveal="left"] { transform: translateX(-60px); }
.js [data-reveal="right"] { transform: translateX(60px); }
.js [data-reveal="zoom"] { transform: scale(.92); }
.js [data-reveal="fade"] { transform: none; }
.js [data-reveal].is-visible { opacity: 1; transform: none; }
.js [data-reveal="letters"] { opacity: 1; transform: none; }
.letter { display: inline-block; opacity: 0; transform: translateY(.6em) rotate(8deg); transition: opacity .5s, transform .7s var(--ease-back); transition-delay: calc(var(--i) * 45ms); }
.is-visible .letter { opacity: 1; transform: none; }
/* Títulos: palavras a subir de trás de uma máscara, em cascata */
/* folga de .3em por cima (compensada na margem) para os acentos das maiúsculas (Ê, Ô) não ficarem cortados pela máscara */
.wr-word { display: inline-block; overflow: hidden; vertical-align: top; padding: .3em .08em .1em; margin: -.3em -.08em -.1em; }
.wr-inner { display: inline-block; transform: translateY(110%) rotate(4deg); transform-origin: 0 100%; opacity: 0; transition: transform 1s var(--ease-out), opacity .6s ease; transition-delay: calc(var(--i, 0) * 90ms); }
.is-visible .wr-inner { transform: none; opacity: 1; }

/* ---------------------------------------------------------------- responsivo */
@media (max-width: 1100px) {
  .nav { display: none; }
  .burger { display: block; }
}

@media (max-width: 899px) {
  :root { --header-h: 60px; }

  /* hero em coluna */
  /* altura à medida do conteúdo: título em cima (~30vw a partir de 8% da altura) + busto da Joana
     (--bw de largura, proporção 1500x1208 => altura .805 x --bw) a assentar no fundo, sem vazio entre os dois */
  .hero { --bw: min(108vw, 600px); height: calc((var(--bw) * .805 + 36vw - 14px) / .92); }
  .hero__slide--joana .hero__joana-copy { left: 6%; right: 6%; width: auto; top: 8%; bottom: auto; align-content: start; gap: 3.5vw; }
  .hero__logo { width: 92%; }
  .hero__edinos { width: 32%; margin-top: calc(-1.2vw - 32% * 10 / 298); }
  .hero__lema { position: static; translate: none; font-size: 4.3vw; }
  .hero__joana { right: auto; left: 50%; translate: -50% 0; width: var(--bw); height: auto; z-index: 1; } /* centrado; continua a assentar no fundo (sem mostrar o corte) */
  .hero__joana img { width: 100%; height: auto; }
  .hero__slide--joana .hero__bg::after { content: ""; position: absolute; inset: 0; background: linear-gradient(180deg, rgba(0,43,100,.35), transparent 55%); }
  .hero__slide--joana .hero__joana-copy { z-index: 2; }
  .hero__outline { top: 14%; left: -30%; right: -30%; }
  /* as pessoas assentam no fundo do banner (sem corte a meio) e um degradé azul apoia o título */
  .hero__front { --w: min(144%, 70svh); }
  .hero__slide--ouvir::after { content: ""; position: absolute; inset: auto 0 0; height: 42%; background: linear-gradient(180deg, rgba(0, 43, 100, 0), rgba(0, 43, 100, .55) 45%, rgba(0, 43, 100, .92)); pointer-events: none; }
  .hero__claim { top: auto; bottom: 7%; z-index: 1; }
  .hero__controls { right: 16px; bottom: 14px; }

  .lightbox__close { top: -56px; right: 0; }
  .lightbox__nav { width: 44px; height: 44px; margin-top: -22px; }
  .lightbox__nav--prev { left: 10px; }
  .lightbox__nav--next { right: 10px; }

  .timeline { --dot: 18px; }
  .timeline__line, .timeline__dot { left: 9px; }
  .timeline__item { grid-template-columns: 1fr; padding-left: 38px; }
  .timeline__item + .timeline__item { margin-top: 0; }
  .timeline__item:nth-child(n) .timeline__card { grid-column: 1; text-align: left; }
  .timeline__item--media { row-gap: 16px; }
  .timeline__item--media > .timeline__card, .timeline__item--media:nth-child(n) > .timeline__media { grid-row: auto; grid-column: 1; }
  .timeline__fig img { max-height: 72vh; }

  .world-map { aspect-ratio: auto; display: grid; }
  .world-map__stage { position: relative; aspect-ratio: 1402 / 841; }
  .world-map__panel { position: relative; inset: auto; display: none; padding: 14px; }
  .world-map.is-zoomed .world-map__panel, .world-map.is-intro .world-map__panel { display: grid; grid-template-columns: 42% 1fr; gap: 14px; align-items: end; }
  .world-map__video, .world-map__info { position: static; width: auto; height: auto; }
  .world-map__video .video { aspect-ratio: 9 / 16; }
  /* botão por baixo de tudo, a toda a largura (não tapa o mapa) */
  .world-map__back { position: static; grid-column: 1 / -1; order: 3; justify-self: stretch; }
  .world-map.no-video .world-map__panel { grid-template-columns: 1fr; }
  .world-map.no-video .world-map__info { text-align: center; }
  .world-map__hint { display: none; }

  .carousel { --cw: 86vw; }
  .carousel__viewport { height: calc(var(--cw) * 1.2); }
  .carousel .c-card { grid-template-columns: 1fr; grid-template-rows: 1fr 1fr; }
  .c-card--lg .c-card__n { font-size: calc(var(--cw) * .2); }
  .c-card--lg .c-card__title { font-size: 1.375rem; }
  .c-card--lg .pill { font-size: var(--fz-sm); }
  .c-card--lg .c-card__text { padding: 6%; }
  .carousel__arrow { top: calc(var(--cw) * 1.2 + 6px); }
  /* com vídeo: o cartão é o próprio vídeo (o título já aparece no vídeo); o botão fica por cima, em baixo */
  .carousel:has(.c-card--video) .carousel__viewport { height: calc(var(--cw) * 16 / 9); }
  .carousel:has(.c-card--video) .carousel__arrow { top: calc(var(--cw) * 16 / 9 + 6px); }
  .carousel .c-card--video { grid-template-columns: 1fr; grid-template-rows: 1fr; }
  .carousel .c-card--video .c-card__media { grid-area: 1 / 1; border-radius: 0; }
  .carousel .c-card--video .c-card__text { grid-area: 1 / 1; z-index: 1; justify-content: flex-end; align-items: center; padding: 0 6% 7%; background: linear-gradient(transparent 70%, rgba(0, 10, 40, .7)); pointer-events: none; }
  .carousel .c-card--video .c-card__text .pill { pointer-events: auto; }
  /* a tocar o vídeo com som: sai o botão de cima para não tapar os controlos */
  .carousel .c-card--video:has(div.c-card__player) .c-card__text { display: none; }
  .carousel .c-card--video .c-card__lead { display: none; }
  .carousel .c-card--video .c-card__title { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
  .carousel__arrow--prev { left: 16px; }
  .carousel__arrow--next { right: 16px; }
  .dots { padding-inline: 64px; flex-wrap: wrap; }

  .c-card--xl { grid-template-columns: 1fr; }
  .c-card--xl .c-card__media { aspect-ratio: 16 / 11; }
  .c-card--xl .c-card__text { padding: 7% 6%; }
  .c-card--xl.c-card--video { grid-template-columns: 1fr; }
  .c-card--xl.c-card--video .c-card__media { justify-self: center; width: min(100%, calc(78svh * 9 / 16)); }
  .c-card--xl.c-card--video .c-card__text { padding: 7% 6%; }

  .c-grid { grid-template-columns: 1fr 1fr; }
  .c-grid__item:last-child:nth-child(3n + 1) { grid-column: auto; }
  .c-card--sm { aspect-ratio: auto; grid-template-columns: 1fr; }
  .c-card--sm .c-card__media { aspect-ratio: 4 / 3; order: -1; }
  .c-card--sm.c-card--video { grid-template-columns: 1fr; }
  .c-card--sm.c-card--video .c-card__media { aspect-ratio: 3 / 4; }
  .c-card--sm .c-card__n { font-size: 2.25rem; }
  .c-card--sm .c-card__title { font-size: .9375rem; }
  .c-card--sm .pill { display: none; }

  .kit { grid-template-columns: 1fr; }
  .musica { flex-direction: column; text-align: center; }
  .musica__body { flex: none; width: 100%; }
  .musica__actions { justify-content: center; }
}

@media (max-width: 520px) {
  .c-grid { grid-template-columns: 1fr; }
  /* uma coluna: texto à esquerda, vídeo vertical à direita (senão cada cartão ocupa o ecrã todo) */
  .c-card--sm.c-card--video { grid-template-columns: 1fr 42%; }
  .c-card--sm.c-card--video .c-card__media { order: 0; aspect-ratio: 9 / 16; }
  .c-card--sm.c-card--video .c-card__text { justify-content: center; padding: 6%; }
  .c-card--sm.c-card--video .c-card__title { font-size: 1.0625rem; }
  .c-pager { grid-template-columns: 1fr; }
  .c-pager__link--next { text-align: left; justify-items: start; }
  .site-footer__bar { flex-direction: column; }
}

/* ---------------------------------------------------------------- movimento reduzido */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation-duration: .001ms !important; animation-iteration-count: 1 !important; transition-duration: .001ms !important; transition-delay: 0ms !important; scroll-behavior: auto !important; }
  .intro { display: none; }
  .marquee { overflow-x: auto; }
  .marquee__track { animation: none; }
  .js [data-reveal], .letter, .wr-inner { opacity: 1 !important; transform: none !important; clip-path: none !important; }
  .hero__slide--joana .hero__logo, .hero__slide--joana .hero__edinos, .hero__slide--joana .hero__lema, .hero__slide--joana .hero__joana img, .hero__slide--ouvir .hero__front img, .hero__slide--ouvir .hero__claim span { opacity: 1; transform: none; }
  .hero__slide--ouvir .hero__outline path { stroke-dashoffset: 0; }
}

/* Newsletter: listas (indicativo, concelho, país) e escolha da residência */
.nl__field select { flex: 1; min-width: 0; height: clamp(52px, 4vw, 64px); padding: 0 clamp(14px, 1.6vw, 30px) 0 .5em; border: 0; background: transparent; color: var(--white); color-scheme: dark; font: inherit; font-size: clamp(1rem, .95rem + .3vw, 1.25rem); cursor: pointer; }
.nl__field select:focus { outline: none; }
.nl__field select option, .nl__field select optgroup { color: var(--white); background: var(--navy); }
.nl__field[hidden] { display: none; }
.nl__field--phone select { flex: 0 1 auto; max-width: 46%; padding-right: .3em; }
.nl__field--phone input { padding-left: .6em; }
.nl__choice { display: flex; flex-wrap: wrap; align-items: center; gap: .6em clamp(12px, 1.2vw, 20px); min-height: clamp(52px, 4vw, 64px); margin: 0 0 clamp(14px, 1.45vw, 28px); padding: 7px clamp(18px, 1.6vw, 30px); border: 0; border-radius: 999px; background: var(--navy); box-shadow: 0 0 0 2px transparent; transition: box-shadow .3s; }
.nl__choice legend { float: left; padding: 0; margin-right: .5em; color: var(--sky); font-size: var(--fz-lead); }
.nl__choice label { position: relative; display: inline-flex; align-items: center; min-height: 38px; padding: 0 1.15em; border: 1.5px solid rgba(255, 255, 255, .35); border-radius: 999px; font-size: clamp(.9375rem, .9rem + .25vw, 1.0625rem); font-weight: 600; line-height: 1; cursor: pointer; transition: background .25s, border-color .25s, color .25s; }
.nl__choice label:hover { border-color: var(--sky); }
.nl__choice label:has(input:checked) { background: var(--sky); border-color: var(--sky); color: var(--navy); }
.nl__choice label:has(input:focus-visible) { outline: 2px solid var(--white); outline-offset: 2px; }
.nl__choice input { position: absolute; width: 1px; height: 1px; margin: 0; opacity: 0; pointer-events: none; }
.nl__choice.is-invalid { box-shadow: 0 0 0 2px var(--red); }
@media (max-width: 640px) {
  .nl__choice { border-radius: 28px; }
  /* indicativo na primeira linha, número na segunda */
  .nl__field--phone { flex-wrap: wrap; border-radius: 28px; padding-bottom: 6px; }
  .nl__field--phone select { flex: 1 1 auto; max-width: none; height: 48px; }
  .nl__field--phone input { flex: 1 1 100%; height: 44px; margin: 0 14px; padding-left: .6em; border-top: 1px solid rgba(255, 255, 255, .14); }
}

/* Preenchimento automático do browser: mantém o fundo escuro e o texto claro dos campos */
.nl__field input:-webkit-autofill, .nl__field input:-webkit-autofill:hover, .nl__field input:-webkit-autofill:focus,
.nl__field select:-webkit-autofill, .nl__field select:-webkit-autofill:hover, .nl__field select:-webkit-autofill:focus {
  -webkit-text-fill-color: var(--white); caret-color: var(--white);
  -webkit-box-shadow: 0 0 0 1000px var(--navy) inset; box-shadow: 0 0 0 1000px var(--navy) inset;
  transition: background-color 9999s ease-out;
}
.nl__field input:autofill, .nl__field select:autofill { filter: none; }

/* PARTISIPA: nota informativa no lugar da caixa de consentimento */
.apoio__legal { margin: 0 0 14px; }
.apoio__legal a, .welcome__legal a { text-decoration: underline; text-underline-offset: 2px; }

/* ---------------------------------------------------------------- janela de boas-vindas (popup.js) */
.welcome {
  width: min(900px, 100% - 32px); max-width: none; max-height: calc(100dvh - 32px);
  padding: 0; border: 0; border-radius: var(--radius-lg); overflow: auto; overscroll-behavior: contain;
  background: var(--grad-blue); color: var(--white);
  box-shadow: 0 40px 80px -30px rgba(0, 10, 40, .8);
}
.welcome[open] { display: grid; grid-template-columns: 42% minmax(0, 1fr); overflow-x: hidden; }
.welcome::backdrop { background: rgba(0, 20, 50, .72); backdrop-filter: blur(5px); -webkit-backdrop-filter: blur(5px); }
.welcome.is-open { animation: welcome-in .6s var(--ease-out); }
.welcome.is-open::backdrop { animation: fade-in .4s ease-out; }
@keyframes welcome-in { from { opacity: 0; transform: translateY(28px) scale(.97); } }
@keyframes fade-in { from { opacity: 0; } }

.welcome__x-form { position: absolute; top: 12px; right: 12px; z-index: 3; }
.welcome__x { width: 40px; height: 40px; padding: 0; border: 0; border-radius: 50%; background: rgba(255, 255, 255, .14); color: var(--white); font-size: 1.6rem; line-height: 1; transition: background .3s, transform .35s var(--ease-back); }
.welcome__x:hover { background: var(--red); transform: rotate(90deg); }

/* lado esquerdo: fundo de fundo.ai, logótipo, "E di Nos", a Joana a ocupar a largura e a faixa "Sentir · Servir · Proteger" em baixo */
.welcome__media { position: relative; display: flex; flex-direction: column; align-items: center; min-height: 100%; overflow: hidden; background: #1d4878; }
.welcome__bg { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; object-position: 50% 0; }
.welcome__logo { position: relative; z-index: 1; width: 88%; margin: clamp(30px, 3.6vw, 46px) auto 0; }
.welcome__edinos { position: relative; z-index: 1; width: 40%; margin: 10px auto 0; }
.welcome__joana { position: relative; z-index: 1; flex: none; width: 134%; max-width: none; margin-top: auto; padding-top: 10px; }
.welcome__lema { position: relative; z-index: 2; align-self: stretch; margin: 0; padding: clamp(16px, 1.9vw, 24px) 10px; background: var(--blue-2); color: var(--white); font-size: clamp(.8125rem, 1.45vw, 1.0625rem); font-weight: 600; letter-spacing: .14em; line-height: 1; text-align: center; text-transform: uppercase; white-space: nowrap; }
.welcome__lema-dot { display: inline-block; width: .32em; height: .32em; margin: 0 .9em; border-radius: 50%; background: var(--orange); vertical-align: .2em; }

.welcome__body { position: relative; padding: clamp(26px, 3vw, 40px) clamp(22px, 3vw, 40px) clamp(20px, 2.4vw, 30px); }
.welcome__eyebrow { display: inline-block; padding: .5em 1.1em; border-radius: 999px; background: var(--red); font-size: .75rem; font-weight: 800; letter-spacing: .14em; line-height: 1; text-transform: uppercase; }
.welcome__title { margin-top: 14px; padding-right: 36px; font-size: clamp(1.75rem, 1.2rem + 1.5vw, 2.5rem); font-weight: 900; font-style: italic; letter-spacing: -.02em; line-height: 1.05; }
.welcome__lead { margin-top: 10px; font-size: 1rem; line-height: 1.5; opacity: .92; }

.nl.welcome__form { width: auto; max-width: none; margin: 20px 0 0; }
.welcome .nl__field { margin-bottom: 12px; }
.welcome .nl__field label { padding-left: 20px; font-size: 1rem; }
.welcome .nl__field input, .welcome .nl__field select { height: 50px; font-size: 1rem; }
.welcome .nl__field--phone select { flex: 0 1 auto; width: 0; min-width: 9.5em; max-width: 50%; }
.welcome .nl__field--phone input { padding-right: 20px; }
.welcome__turnstile.apoio__turnstile { min-height: 0; margin: 0; }
.welcome__turnstile:has(iframe) { margin-bottom: 10px; }
.welcome__submit.pill { width: 100%; min-height: 52px; margin-top: 4px; }
.welcome .nl__status { min-height: 0; margin-top: 10px; }
.welcome .nl__status:empty { margin: 0; }
.welcome__legal { margin-top: 10px; font-size: .75rem; line-height: 1.5; opacity: .72; }

.welcome__follow { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 10px 16px; margin-top: 18px; padding-top: 16px; border-top: 1px solid rgba(255, 255, 255, .18); }
.welcome__follow-t { font-weight: 700; font-style: italic; }
.welcome__social { display: flex; gap: 8px; }
.welcome__icon { display: grid; place-items: center; width: 40px; aspect-ratio: 1; border-radius: 50%; background: var(--white); color: var(--red); transition: background .3s, color .3s, transform .35s var(--ease-back); }
.welcome__icon svg { width: 100%; height: 100%; fill: currentColor; }
.welcome__icon:hover { background: var(--red); color: var(--white); transform: translateY(-3px); }
.welcome__later-form { text-align: center; }
.welcome__later { margin-top: 12px; padding: 6px 10px; border: 0; background: none; color: rgba(255, 255, 255, .75); font: inherit; font-size: .875rem; text-decoration: underline; text-underline-offset: 3px; }
.welcome__later:hover { color: var(--white); }

/* depois de enviar: fica o agradecimento e as redes */
.welcome.is-done .welcome__form > :not(.nl__status), .welcome.is-done .welcome__lead { display: none; }
.welcome.is-done .nl__status { margin-top: 4px; font-size: 1.125rem; text-align: left; }

/* telemóvel: folha que sobe do fundo, com a foto numa faixa curta */
@media (max-width: 719px) {
  .welcome { width: 100%; max-height: 94dvh; margin: auto 0 0; border-radius: 24px 24px 0 0; }
  .welcome[open] { grid-template-columns: minmax(0, 1fr); }
  .welcome .nl__field--phone select { flex: 1 1 auto; width: auto; min-width: 0; max-width: none; }
  .welcome.is-open { animation-name: welcome-up; }
  @keyframes welcome-up { from { transform: translateY(100%); } }
  .welcome__media { display: block; min-height: 0; height: 132px; }
  .welcome__logo { width: 52%; margin: 26px 0 0 16px; }
  .welcome__edinos { width: 22%; margin: 4px 0 0 16px; }
  .welcome__joana { position: absolute; bottom: 0; right: -4%; width: 50%; margin: 0; padding: 0; }
  .welcome__lema { display: none; }
  .welcome__x-form { top: 10px; right: 10px; }
  .welcome__x { background: rgba(0, 20, 50, .45); }
  .welcome__body { padding: 20px 16px calc(14px + env(safe-area-inset-bottom)); }
  .welcome__title { padding-right: 0; }
  .welcome__follow { justify-content: center; text-align: center; }
}
@media (max-width: 719px) and (max-height: 700px) {
  .welcome__media { display: none; }
  .welcome__x { background: rgba(255, 255, 255, .14); }
}
@media (prefers-reduced-motion: reduce) {
  .welcome.is-open, .welcome.is-open::backdrop { animation: none; }
}

/* ===================================================================== FALA COM A JOANA (WhatsApp)
   Bolha fixa no canto inferior direito, em todas as páginas: foto da Joana com o símbolo do WhatsApp
   e um balão com a frase do cartaz. O X fecha só o balão; na página seguinte volta a abrir. */
.wa-fala { position: fixed; right: max(18px, env(safe-area-inset-right)); bottom: max(18px, env(safe-area-inset-bottom)); z-index: 900; display: flex; align-items: flex-end; gap: 12px; pointer-events: none; }
.wa-fala > * { pointer-events: auto; }
.wa-fala__card { position: relative; max-width: 230px; border-radius: 18px 18px 4px 18px; background: var(--white); box-shadow: 0 14px 34px -12px rgba(0, 20, 60, .5); animation: wa-pop .5s 1.2s both var(--ease-back); }
.wa-fala__card[hidden] { display: none; }
.wa-fala__msg { display: block; padding: 12px 34px 12px 16px; color: var(--navy); font-size: var(--fz-sm); line-height: 1.35; text-decoration: none; }
.wa-fala__msg b { display: block; font-size: 1rem; font-weight: 900; font-style: italic; letter-spacing: -.01em; }
.wa-fala__msg small { display: block; margin-top: 6px; color: var(--red); font-size: var(--fz-xs); font-weight: 800; }
.wa-fala__msg:hover small { text-decoration: underline; }
.wa-fala__x { position: absolute; top: 6px; right: 6px; width: 26px; height: 26px; padding: 0; border: 0; border-radius: 50%; background: #eef1f6; color: var(--navy); font-size: 1rem; font-weight: 800; line-height: 1; transition: background .2s; }
.wa-fala__x:hover { background: #dde3ec; }
.wa-fala__btn { position: relative; flex: none; display: block; width: 64px; height: 64px; border: 3px solid var(--white); border-radius: 50%; background: var(--sky); box-shadow: 0 12px 30px -8px rgba(0, 20, 60, .6); transition: transform .3s var(--ease-back); }
.wa-fala__btn:hover { transform: scale(1.06); }
.wa-fala__btn img { width: 100%; height: 100%; border-radius: 50%; object-fit: cover; }
.wa-fala__ico { position: absolute; right: -6px; bottom: -4px; display: grid; place-items: center; width: 28px; height: 28px; border: 2px solid var(--white); border-radius: 50%; background: #25d366; }
.wa-fala__ico svg { width: 26px; height: 26px; fill: var(--white); }
@keyframes wa-pop { from { opacity: 0; transform: translateY(10px) scale(.8); } }
@media (max-width: 719px) {
  .wa-fala { right: max(12px, env(safe-area-inset-right)); bottom: max(12px, env(safe-area-inset-bottom)); gap: 10px; }
  .wa-fala__card { max-width: 200px; }
  .wa-fala__btn { width: 56px; height: 56px; }
}
@media (prefers-reduced-motion: reduce) {
  .wa-fala__card { animation: none; }
}

/* ===================================================================== MÚSICA «E di Nos»
   Pílula fixa no canto inferior esquerdo, em todas as páginas (partials/musica.html; código em site.js).
   Botão vermelho (tocar/pausa), o nome da música e barras que dançam enquanto toca. Ao passar o rato (ou com
   o teclado) alarga para a direita e mostra a barra para avançar/recuar, o tempo, Descarregar e Partilhar. No telemóvel fica só o botão e as barras,
   para não tocar no balão do WhatsApp do outro lado. */
.tocar { position: fixed; left: max(18px, env(safe-area-inset-left)); bottom: max(18px, env(safe-area-inset-bottom)); z-index: 900; display: flex; align-items: center; min-height: 56px; border: 3px solid var(--white); border-radius: 999px; background: var(--navy); color: var(--white); box-shadow: 0 12px 30px -8px rgba(0, 20, 60, .6); animation: wa-pop .5s 1.4s both var(--ease-back); }
.tocar audio { display: none; }
.tocar__btn { display: flex; align-items: center; gap: 10px; align-self: stretch; padding: 3px 18px 3px 3px; border: 0; border-radius: 999px; background: none; color: inherit; }
.tocar__btn:focus-visible, .tocar__acao:focus-visible { outline: 3px solid var(--sky); outline-offset: 2px; }
/* Descarregar e Partilhar: escondidos (largura 0) até passar o rato ou focar com o teclado */
.tocar__mais { display: flex; align-items: center; gap: 6px; max-width: 0; overflow: hidden; opacity: 0; transition: max-width .45s var(--ease-out), opacity .3s, padding .45s var(--ease-out); }
@media (hover: hover) {
  .tocar:hover .tocar__mais, .tocar:focus-within .tocar__mais { max-width: 340px; opacity: 1; padding: 0 8px 0 0; }
}
/* barra para avançar/recuar (a parte já ouvida a amarelo) e o tempo */
.tocar__seek { flex: none; width: 130px; height: 20px; margin: 0 2px 0 0; background: none; accent-color: var(--yellow); cursor: pointer; }
.tocar__seek:focus-visible { outline: 3px solid var(--sky); outline-offset: 2px; }
.tocar__tempo { flex: none; min-width: 2.6em; margin-right: 4px; font-size: var(--fz-xs); font-weight: 700; font-variant-numeric: tabular-nums; color: rgba(255, 255, 255, .85); }
.tocar__acao { display: grid; place-items: center; flex: none; width: 38px; height: 38px; padding: 0; border: 0; border-radius: 50%; background: rgba(255, 255, 255, .12); color: var(--white); transition: background .2s, color .2s; }
.tocar__acao:hover { background: var(--white); color: var(--navy); }
.tocar__acao svg { width: 19px; height: 19px; }
/* ícone: triângulo (tocar) ou duas barras (pausa), desenhado em CSS */
.tocar__ico { position: relative; flex: none; width: 40px; height: 40px; border-radius: 50%; background: var(--red); }
.tocar__ico::before { content: ""; position: absolute; left: 15px; top: 12px; border-left: 14px solid var(--white); border-top: 8px solid transparent; border-bottom: 8px solid transparent; }
.tocar.is-playing .tocar__ico::before { left: 13px; top: 13px; width: 4px; height: 14px; border: 0; background: var(--white); box-shadow: 10px 0 0 var(--white); }
.tocar__nome { font-size: var(--fz-sm); font-weight: 800; font-style: italic; letter-spacing: -.01em; white-space: nowrap; }
.tocar__eq { display: flex; align-items: flex-end; gap: 3px; height: 16px; }
.tocar__eq i { width: 3px; height: 30%; border-radius: 2px; background: var(--yellow); transition: height .3s; }
.tocar.is-playing .tocar__eq i { animation: tocar-eq .9s ease-in-out infinite alternate; }
.tocar.is-playing .tocar__eq i:nth-child(2) { animation-delay: -.3s; }
.tocar.is-playing .tocar__eq i:nth-child(3) { animation-delay: -.6s; }
.tocar.is-playing .tocar__eq i:nth-child(4) { animation-delay: -.15s; }
@keyframes tocar-eq { from { height: 25%; } to { height: 100%; } }
@media (max-width: 719px) {
  .tocar { left: max(12px, env(safe-area-inset-left)); bottom: max(12px, env(safe-area-inset-bottom)); }
  .tocar { min-height: 50px; }
  .tocar__btn { gap: 8px; padding: 2px 12px 2px 2px; }
  .tocar__nome { display: none; }
}
@media (prefers-reduced-motion: reduce) {
  .tocar { animation: none; }
  .tocar.is-playing .tocar__eq i { animation: none; height: 70%; }
}
