:root{
  /* ===== PALETA — A METADE QUENTE DO LOGÓTIPO =====
     O wordmark atravessa de roxo a laranja. O site adopta só a metade
     direita dessa travessia: vermelho → laranja, o lado do "ENERGY".
     O roxo continua a existir, mas apenas dentro do logótipo: não se
     repete em nenhuma superfície da página.

     Isto é uma decisão, não um descuido. Um logótipo multicor não obriga
     o site a repetir todas as cores; obriga-o a não contradizer nenhuma.
     A metade quente cobre 51% do wordmark e é a que fala de movimento. */
  --marca:#b9202b;          /* principal — 6,06:1 sobre papel */
  --marca-esc:#9e1c22;      /* títulos, hover — 7,58:1 */
  --marca-luz:#fdeeed;
  --vermelho:#b9202b;
  --laranja:#de4a30;        /* acento */
  --laranja-esc:#c33d26;    /* acento sobre papel claro — 4,92:1 */
  --laranja-cl:#e8613f;     /* acento sobre fundo escuro — 4,91:1 */
  --laranja-luz:#fbeeea;

  /* ===== OS DOIS DEGRADÊS =====
     No wordmark a cor não é chapada: atravessa. Aqui atravessa também,
     mas em duas versões com papéis que NUNCA se trocam.

     --grad      remata no laranja saturado #f26132, tal como o logótipo.
                 SÓ em superfícies SEM texto por cima (filetes, indicadores,
                 blocos decorativos). Texto branco sobre esse laranja dá
                 3,22:1 e chumba o AA — medido ponto a ponto.

     --grad-txt  a mesma travessia, remata em #c33d26. Mínimo verificado
                 ao longo de todo o percurso: 5,23:1 contra branco, AA em
                 todo o comprimento. É este que vai para botões, selos e
                 qualquer superfície que carregue texto.

     Um botão com --grad é um bug de acessibilidade, não uma escolha estética. */
  --grad:linear-gradient(96deg,#b9202b 0%,#cf4224 55%,#f26132 100%);
  --grad-txt:linear-gradient(96deg,#b9202b 0%,#c33724 55%,#cd471f 100%);
  --grad-v:linear-gradient(168deg,#b9202b 0%,#cf4224 58%,#f26132 100%);

  /* neutros com sub-tom quente, para acompanharem a família da marca
     em vez de puxarem para o lilás */
  --papel:#fbf9f8; --papel2:#f4efec; --papel3:#e8ddd8;
  --tinta:#241d1a; --tinta2:#574a45; --tinta3:#6e5f59; --linha:#e0d4ce;
  /* --tinta3 é a cor das etiquetas de secção ("A CLÍNICA", "OS ESPAÇOS"),
     a 13px. A #8a7a74 davam 3,60:1 sobre --papel2 e chumbavam o AA.
     A #6e5f59 dão 5,34:1 no pior fundo. */

  /* Fundo escuro das secções de destaque, do rodapé e dos submenus.
     17,21:1 contra branco.

     Era #241814 — quase-preto com sub-tom quente, croma 0,021 e matiz 39°.
     Fazia sentido enquanto todas as superfícies grandes eram neutras. Deixou
     de fazer no dia em que a faixa de chamada e o cabeçalho ganharam a
     travessia da marca: medido em OKLCH, o rodapé ficava a DEZ GRAUS de
     matiz da ponta quente do degradê (#e03022, 29,6°). Praticamente a mesma
     cor, só mais escura — e o rodapé, que é a âncora do site, passava a
     ler-se como o laranja da faixa apagado. Competia com ela e perdia.

     🔄 Revisto duas vezes, 28 Jul.

     1.ª volta: baixei o croma de 0,021 para 0,008 e dei o assunto por
     resolvido. Estava enganado — baixei a saturação e deixei o MATIZ onde
     estava, a 31°, ou seja a DOIS GRAUS da ponta quente da faixa. Tratei o
     sintoma; a causa ficou. O rodapé continuava a ser «o laranja da faixa,
     apagado», só que menos.

     2.ª volta: o matiz passa para 313° — a ponta ROXA da travessia, a 76°
     da quente. Luminosidade e contraste praticamente intactos (L=0,231 e
     17,02:1, contra 0,223 e 17,21:1). A travessia passa a fechar o
     círculo: começa no roxo lá em cima na barra, atravessa para o quente na
     faixa de chamada, e o chão do site devolve-a ao roxo.

     E o anti-reference? «Wellness spa lilás» é lavanda CLARO e desbotado.
     Isto tem croma 0,036 contra os 0,160 do roxo da marca: a esta
     luminosidade o matiz mal se lê. É um escuro com carácter, não um lilás. */
  --escuro:#231829;

  /* confirmação. --turquesa era usado em dois sítios e nunca foi definido:
     o visto de "mensagem enviada" do formulário e o aviso de "copiado" do
     rodapé apareciam ambos na cor do texto que os rodeia, sem sinal de êxito.
     Duas variantes porque os dois sítios têm fundos opostos:
       --ok      sobre papel claro (modal do formulário) — 4,99:1
       --ok-luz  sobre o rodapé escuro                   — 9,06:1 */
  --ok:#0f7a6b;
  --ok-luz:#4fd6be;

  --tit:"Barlow Condensed","Arial Narrow",sans-serif;
  --txt:"Barlow",system-ui,-apple-system,sans-serif;
  --saida:cubic-bezier(.22,1,.36,1);
  --nav:66px;
}
*,*::before,*::after{box-sizing:border-box}
html{scroll-behavior:smooth;-webkit-text-size-adjust:100%}
body{margin:0;background:var(--papel);color:var(--tinta);font-family:var(--txt);
  font-size:17px;line-height:1.62;-webkit-font-smoothing:antialiased;overflow-x:hidden}
img{max-width:100%;height:auto;display:block}
a{color:inherit;text-decoration:none}
h1,h2,h3{font-family:var(--tit);font-weight:700;line-height:.99;margin:0;letter-spacing:-.012em;text-wrap:balance}
p{margin:0}
/* --azul nunca existiu no :root. A declaração era inválida e o browser
   descartava-a inteira: o site ficava SEM indicador de foco visível, o que
   chumba a WCAG 2.4.7 e deixa quem navega por teclado sem saber onde está.
   Passa a usar o vermelho da marca, com um halo branco por baixo para o
   foco também se ver quando cai sobre fundo escuro. */
:focus-visible{outline:3px solid var(--marca);outline-offset:3px;border-radius:2px;
  box-shadow:0 0 0 6px rgba(251,249,250,.9)}
.oe-wrap{max-width:1180px;margin:0 auto;width:100%}
.oe-mt{margin-top:26px}

/* ===== SALTAR PARA CONTEÚDO (a11y) ===== */
.oe-skip{position:absolute;left:-9999px;top:0;z-index:200;background:var(--tinta);color:var(--papel);
  padding:12px 18px;font-family:var(--tit)}
.oe-skip:focus{left:8px;top:8px}

/* ===== CABEÇALHO ===== */
.oe-topo{position:fixed;inset:0 0 auto;z-index:60;height:var(--nav);display:flex;align-items:center;
  justify-content:space-between;padding:0 16px;transition:background .35s var(--saida),box-shadow .35s var(--saida)}
.oe-topo.oe-solido{background:rgba(251,248,245,.96);backdrop-filter:blur(16px);box-shadow:0 1px 0 var(--linha)}
/* Sobre a fotografia do hero o logótipo é branco; assim que o cabeçalho
   fica sólido passa ao logótipo A CORES, no MESMO tamanho — antes trocava
   para a versão a preto e encolhia de 46px para 38px ao mesmo tempo, o que
   fazia a marca perder presença exactamente no momento em que ganha fundo
   branco para a suportar. */
.oe-logo{height:46px;width:auto}
.oe-logo--cores{display:none}
.oe-topo.oe-solido .oe-logo--claro{display:none}
.oe-topo.oe-solido .oe-logo--cores{display:block}
.oe-topo__dir{display:flex;align-items:center;gap:8px}
.oe-hamb{display:flex;flex-direction:column;justify-content:center;gap:5px;width:44px;height:44px;
  background:none;border:0;cursor:pointer;padding:0}
.oe-hamb span{display:block;width:22px;height:2px;background:var(--papel);margin-left:auto;margin-right:auto;
  transition:transform .3s var(--saida),opacity .2s,background .3s}
.oe-hamb span:last-child{width:15px;margin-right:11px}
.oe-topo.oe-solido .oe-hamb span{background:var(--tinta)}
.oe-topo__cta{display:none!important}

/* menu horizontal, sempre visível em ecrã grande */
.oe-menu{display:none}
.oe-menu a{font-family:var(--tit);font-size:1.02rem;font-weight:600;letter-spacing:.09em;
  text-transform:uppercase;color:var(--papel);padding:8px 2px;position:relative;transition:color .25s var(--saida)}
.oe-menu a::after{content:"";position:absolute;left:0;right:100%;bottom:2px;height:2px;background:var(--laranja);
  transition:right .32s var(--saida)}
.oe-menu a:hover::after,.oe-menu a:focus-visible::after{right:0}
.oe-topo.oe-solido .oe-menu a{color:var(--tinta)}

/* menu de ecrã inteiro */
.oe-nav{position:fixed;inset:0;z-index:80;background:var(--tinta);display:flex;flex-direction:column;
  justify-content:center;padding:76px 22px 32px;gap:0;
  clip-path:inset(0 0 100% 0);transition:clip-path .55s var(--saida);visibility:hidden}
.oe-nav.oe-aberto{clip-path:inset(0 0 0 0);visibility:visible}
.oe-nav a{font-family:var(--tit);font-size:clamp(2rem,10vw,3.4rem);color:var(--papel);text-transform:uppercase;
  padding:7px 0;border-bottom:1px solid rgba(251,248,245,.1);
  opacity:0;transform:translateY(16px);transition:opacity .5s var(--saida),transform .5s var(--saida),color .2s}
.oe-nav.oe-aberto a{opacity:1;transform:none}
.oe-nav.oe-aberto a:nth-child(1){transition-delay:.08s}
.oe-nav.oe-aberto a:nth-child(2){transition-delay:.13s}
.oe-nav.oe-aberto a:nth-child(3){transition-delay:.18s}
.oe-nav.oe-aberto a:nth-child(4){transition-delay:.23s}
.oe-nav.oe-aberto a:nth-child(5){transition-delay:.28s}
.oe-nav.oe-aberto a:nth-child(6){transition-delay:.33s}
.oe-nav a:hover,.oe-nav a:focus-visible{color:var(--laranja)}
.oe-nav__x{position:absolute;top:12px;right:12px;width:44px;height:44px;background:none;border:0;
  color:var(--papel);font-size:32px;line-height:1;cursor:pointer}

/* ===== BOTÕES ===== */
.oe-btn{display:inline-flex;align-items:center;justify-content:center;gap:.5rem;min-height:54px;padding:0 26px;
  background:var(--marca);color:#fff;font-family:var(--tit);font-size:1.15rem;font-weight:700;
  text-transform:uppercase;letter-spacing:.05em;border:2px solid var(--marca);border-radius:2px;cursor:pointer;
  transition:background .2s var(--saida),border-color .2s var(--saida),transform .15s var(--saida)}
.oe-btn:hover{background:var(--marca-esc);border-color:var(--marca-esc)}
.oe-btn:active{transform:scale(.97)}
.oe-btn--linha{background:transparent;color:var(--papel);border-color:rgba(251,248,245,.45)}
.oe-btn--linha:hover{background:rgba(251,248,245,.12);border-color:var(--papel)}

/* ===== BOTÃO DE ARO =====
   Acção secundária ao lado da principal. Em repouso é neutro — aro e texto
   brancos, sem fundo — para não disputar atenção com "marcar avaliação".
   A cor só aparece ao passar o rato, e é a mesma do botão principal: o
   segundo botão pede-se, não se anuncia. */
.oe-btn--aro{background:transparent;color:var(--papel);
  border:2px solid rgba(251,249,248,.85);
  transition:background .3s var(--saida),color .25s var(--saida),border-color .25s var(--saida)}
.oe-btn--aro:hover,.oe-btn--aro:focus-visible{
  background:var(--grad-txt);color:#fff;border-color:transparent}

/* as duas acções do hero lado a lado; em ecrã estreito empilham e ocupam
   a largura toda, para continuarem a cumprir os 44px de área de toque */
.oe-hero__accoes{display:flex;flex-wrap:wrap;gap:12px;align-items:center;
  opacity:0;transform:translateY(14px);animation:oe-entra .8s var(--saida) .72s forwards}
@media (max-width:460px){
  .oe-hero__accoes{flex-direction:column;align-items:stretch}
  .oe-hero__accoes .oe-btn{width:100%}
}

/* ===== HERO ===== */
.oe-hero{position:relative;min-height:100svh;display:grid;grid-template-rows:1fr auto;
  isolation:isolate;overflow:clip;background:var(--escuro)}
.oe-hero__fotom{display:none}
.oe-hero__img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:58% center}
@keyframes oe-zoom{from{transform:scale(1.09)}to{transform:scale(1)}}
/* véu do hero em telemóvel: sobe de baixo, porque em ecrã estreito o texto
   assenta no fundo. Levava castanho (134,56,18) — cor que não existe na marca
   e que dava à fotografia um tom sépia lavado. Passa a subir do escuro
   quente da marca, com a mesma família do vermelho. */
.oe-hero::after{content:"";position:absolute;inset:0;z-index:-1;pointer-events:none;
  background:linear-gradient(to top,
    rgba(36,24,20,.88) 0%,
    rgba(34,23,19,.86) 10%,
    rgba(32,22,19,.86) 26%,
    rgba(28,21,18,.66) 52%,
    rgba(26,20,18,.32) 72%,
    rgba(26,20,18,.08) 88%,
    transparent 100%)}
.oe-hero__in{grid-row:1;align-self:end;padding:0 16px 30px;max-width:980px;position:relative;z-index:2}
.oe-hero__marca{display:none;width:min(74%,420px);margin:0 0 22px;
  opacity:0;transform:translateY(18px);animation:oe-entra .9s var(--saida) .25s forwards}
@keyframes oe-entra{to{opacity:1;transform:none}}
.oe-hero h1{font-size:clamp(3.3rem,15vw,9rem);color:var(--papel);line-height:.9;
  opacity:0;transform:translateY(22px);animation:oe-entra 1s var(--saida) .4s forwards}
.oe-hero h1 i{font-style:italic;color:var(--laranja)}   /* o acento fica no título: é o remate */

/* ===== O REMATE DO HERO LEVA A TRAVESSIA =====
   Pedido do cliente: a palavra final do título com o degradê do logótipo,
   só na zona final dele, sem chegar ao roxo.

   ⚠️ Degradê aplicado a texto é normalmente proibido: se o background-clip
   falhar, o texto fica com a cor do fundo e desaparece, e o contraste deixa
   de ser mensurável. Aqui vai com três protecções:

   1. `color` sólido declarado ANTES e fora do @supports. Se o background-clip
      não pegar, o texto fica #e8613f — 3,28:1 sobre o fundo medido do hero,
      acima dos 3:1 que o AA pede a 74px.
   2. O @supports só ativa onde o -webkit-background-clip existe mesmo.
   3. Os dois extremos do degradê foram medidos contra o fundo REAL por baixo
      das letras (não estimado): #e8613f = 3,28:1 e #f9852f = 4,45:1.
      Nenhum ponto do percurso desce abaixo do mais escuro dos dois.

   Se a fotografia do hero mudar, voltar a medir. */
.oe-hero h1 i,
.oe-slide__t i{color:#f26132}   /* 3,45:1 sobre o fundo medido do hero */
@supports (-webkit-background-clip:text) or (background-clip:text){
  .oe-hero h1 i,
  .oe-slide__t i{
    /* Alargado em 28 Jul. Estava #f26132 → #fb9433: três laranjas, ou seja
       os últimos 5% da travessia — a olho não se lia como travessia nenhuma.
       Recua até #cd312e, que é onde a travessia PASSA a suportar texto sobre
       este fundo. Medido ponto a ponto sobre o fundo real do hero (#20160f):
       do roxo aos 76% da travessia nada chega a 3:1 — o roxo dá 1,99:1, o
       magenta 2,39:1, o vermelho da marca 2,88:1. Não é preferência, é
       luminância: a metade fria não pode ser texto sobre escuro.
       Extremos verificados: 3,44:1 e 7,93:1. */
    background:linear-gradient(96deg,#cd312e 0%,#e34e31 42%,#f26132 74%,#fb9433 100%);
    -webkit-background-clip:text;background-clip:text;
    -webkit-text-fill-color:transparent;
    /* o fill transparente não se aplica a ::selection nem ao modo de alto
       contraste, onde o `color` acima volta a mandar */
    padding-right:.06em}
}
@media (forced-colors:active){
  .oe-hero h1 i,
  .oe-slide__t i{-webkit-text-fill-color:currentColor;background:none}
}
/* a palavra que muda: o texto do hero está vivo */
.oe-rot{position:relative;display:inline-grid;font-style:italic;color:var(--laranja);vertical-align:top}
.oe-rot__f{visibility:hidden;grid-area:1/1;white-space:nowrap}   /* reserva a largura da maior */
.oe-rot__p{grid-area:1/1;white-space:nowrap;opacity:0;transform:translateY(.36em) rotate(1.5deg);
  filter:blur(5px);transition:opacity .55s var(--saida),transform .55s var(--saida),filter .55s var(--saida)}
.oe-rot__p.oe-on{opacity:1;transform:none;filter:none}
.oe-rot__p.oe-sai{opacity:0;transform:translateY(-.34em) rotate(-1.5deg);filter:blur(5px)}
@media (prefers-reduced-motion:reduce){
  .oe-rot__p{transition:none}
  .oe-rot__p:not(.oe-on){display:none}
}
.oe-hero p{color:rgba(251,248,245,.86);font-size:clamp(1.05rem,4.4vw,1.42rem);max-width:32ch;margin:18px 0 28px;
  opacity:0;transform:translateY(16px);animation:oe-entra .9s var(--saida) .58s forwards}
/* a entrada passou para .oe-hero__accoes, que envolve os dois botões */
.oe-hero__pe{grid-row:2;display:flex;justify-content:space-between;align-items:center;gap:10px;padding:13px 16px 16px;
  border-top:1px solid rgba(251,248,245,.16);font-family:var(--tit);font-size:.78rem;letter-spacing:.15em;
  text-transform:uppercase;color:rgba(251,248,245,.7)}
.oe-seta{width:21px;animation:oe-desce 2.2s var(--saida) infinite}
@keyframes oe-desce{0%,100%{transform:translateY(0);opacity:.5}50%{transform:translateY(6px);opacity:1}}

/* ===== SECÇÕES ===== */
.oe-sec{padding:70px 16px;background:var(--papel);position:relative;z-index:1}
.oe-sec--areia{background:var(--papel2)}
.oe-eyebrow{display:inline-flex;align-items:center;gap:.55rem;font-family:var(--tit);font-size:.8rem;
  font-weight:600;letter-spacing:.18em;text-transform:uppercase;color:var(--tinta3);margin-bottom:12px}
.oe-eyebrow::before{content:"";width:2px;height:1em;background:var(--laranja);transform:skewX(-6deg)}
/* os h2 são os maiores blocos de tinta da página: é aqui que a marca pinta.
   A preto (--tinta) o site ficava a 1,0% de cor de marca visível.
   #9e1c22 dá 7,58:1 sobre papel — acima do AA com folga. */
.oe-sec h2{font-size:clamp(2.05rem,8.5vw,3.5rem);color:var(--marca-esc)}

/* ===== A TRAVESSIA LARGA VIVE AQUI =====
   Sobre fundo escuro a amplitude é impossível: o vermelho do logótipo tem
   luminância baixa demais e não chega a 3:1 nem sobre preto puro. Logo, a
   travessia ampla do logótipo só cabe onde o fundo é claro — e é aqui, nos
   títulos de secção, que há área e tamanho para ela se ler como travessia.

   Leva o degradê COMPLETO do logótipo, roxo #662C90 incluído: um degradê
   vermelho→laranja lê-se como "quente", não como OSTEOENERGY — o que torna
   este wordmark reconhecível é precisamente o salto do roxo ao laranja.
   O roxo entra só aqui, dentro das letras. Superfícies (fundos, botões,
   rodapé) continuam sem uma gota dele.
   Verificado contra o fundo mais escuro (--papel2 #f4efec): mínimo 3,19:1,
   e os h2 são 33-56px, ou seja texto grande, onde o AA pede 3:1.

   Mesmas três protecções do hero: cor sólida fora do @supports, activação
   só onde o background-clip existe, e forced-colors devolve o currentColor. */
@supports (-webkit-background-clip:text) or (background-clip:text){
  /* `.oe-perc` junta-se à excepção: é escura como a `.oe-dest`, e o degradê
     medido lá dá 1,90:1 no arranque do roxo. */
  .oe-sec:not(.oe-dest):not(.oe-etapas) h2{
    /* ATENÇÃO: a shorthand `background` REPÕE background-clip. Tem de vir
       sempre ANTES dele e na mesma regra, senão o texto fica transparente
       por cima do degradê e o título desaparece. */
    /* Os stops estão comprimidos: a travessia completa-se aos 55% e o resto
       fica laranja constante. Um h2 de duas linhas tem o box à largura da
       frase inteira (478px) mas as linhas visíveis só ocupam ~310px, ou seja
       65% — com o degradê esticado a 100% o título parava no vermelho e nunca
       chegava ao laranja. É o mesmo defeito do background-size:190% que havia
       nos botões, noutra roupagem.
       `box-decoration-break:clone` resolveria isto de forma exacta, mas exige
       display:inline no h2, o que desfaz o text-wrap:balance e piora a quebra. */
    background:linear-gradient(96deg,#662c90 0%,#a71f54 24%,#b82025 37%,#e85530 55%,#e85530 100%);
    -webkit-background-clip:text;background-clip:text;
    -webkit-text-fill-color:transparent;
    width:fit-content;
    padding-right:.06em}
}
@media (forced-colors:active){
  .oe-sec h2{-webkit-text-fill-color:currentColor;background:none}
}
/* excepto sobre fundo escuro, onde o vermelho não teria contraste */
.oe-dest h2,.oe-sec--escura h2{color:var(--papel)}
/* itálico dos títulos: continua a ser o remate laranja, mas no tom que se lê.
   #de4a30 sobre papel dá 3,85:1 e chumbava o AA; #c33d26 dá 4,92:1. */
.oe-sec h2 i,.oe-int h1 i{font-style:italic;color:var(--laranja-esc)}
.oe-dest h2 i,.oe-int--foto h1 i{color:var(--laranja)}
.oe-lead{color:var(--tinta2);max-width:56ch;margin-top:14px}
.oe-cab{margin-bottom:30px}

/* revelação */
.oe-rev{opacity:0;transform:translateY(24px);transition:opacity .75s var(--saida),transform .75s var(--saida)}
.oe-rev.oe-in{opacity:1;transform:none}

/* ===== UNIDADES ===== */
.oe-unid{position:relative;display:block;border-top:1px solid var(--linha);padding:24px 34px 24px 0;
  transition:padding-left .35s var(--saida)}
.oe-unids .oe-unid:last-child{border-bottom:1px solid var(--linha)}
.oe-unid:hover{padding-left:10px}
.oe-unid__n{display:block;font-family:var(--tit);font-size:.76rem;letter-spacing:.2em;color:var(--tinta3)}
.oe-unid__t{display:block;font-family:var(--tit);font-size:clamp(1.75rem,7vw,2.8rem);font-weight:700;
  line-height:1.02;margin:3px 0 5px;transition:color .25s var(--saida)}
.oe-unid:hover .oe-unid__t{color:var(--marca)}
.oe-unid__d{display:block;color:var(--tinta2);font-size:.97rem;max-width:46ch}
.oe-unid__s{position:absolute;right:0;top:50%;transform:translateY(-50%);width:26px;color:var(--tinta3);
  transition:transform .3s var(--saida),color .3s}
.oe-unid:hover .oe-unid__s{transform:translate(6px,-50%);color:var(--marca)}
.oe-selo{display:inline-block;margin-left:9px;background:var(--vermelho);color:#fff;font-family:var(--txt);
  font-size:.6rem;font-weight:600;letter-spacing:.1em;text-transform:uppercase;padding:3px 8px;
  border-radius:2px;vertical-align:middle}

/* ===== ESPECIALIDADES ===== */
/* Substituída pela grelha `.oe-espg` a 29 Jul. Fica porque o bloco continua
   a aceitar listas sem descrição, e aí esta apresentação serve. */
.oe-esp{list-style:none;margin:26px 0 0;padding:0;border-top:1px solid var(--linha);
  display:flex;flex-wrap:wrap}
.oe-esp li{width:100%;border-bottom:1px solid var(--linha);padding:15px 0;display:flex;
  justify-content:space-between;align-items:baseline;gap:14px;transition:padding-left .3s var(--saida),color .3s}
.oe-esp li:hover{padding-left:9px;color:var(--marca)}
.oe-esp li span{font-family:var(--tit);font-size:1.45rem;font-weight:600}
.oe-esp li b{font-family:var(--txt);font-size:.78rem;font-weight:400;color:var(--tinta3);white-space:nowrap}

/* ===== ESPECIALIDADES EM CARTÕES =====
   Era uma tabela de duas colunas com o local repetido em cada linha. O local
   subiu para uma indicação única e cada especialidade ganhou uma frase.

   A grelha tem SEIS colunas para conseguir duas larguras na mesma malha: os
   destaques ocupam metade (span 3), os restantes um terço (span 2). Numa
   grelha de três, os dois destaques deixavam sempre um cartão órfão. */
.oe-espn{font-family:var(--txt);font-size:.83rem;letter-spacing:.03em;
  color:var(--tinta3);margin:44px 0 16px;padding-bottom:14px;
  border-bottom:1px solid var(--linha)}
.oe-espg{list-style:none;margin:0;padding:0;display:grid;gap:11px;
  grid-template-columns:1fr}
.oe-espg li{display:flex}
.oe-espg a,.oe-espg li > div{display:flex;flex-direction:column;gap:8px;width:100%;
  padding:21px 20px 19px;border:1px solid var(--linha);border-radius:3px;
  background:var(--papel);color:inherit;text-decoration:none;
  transition:border-color .32s var(--saida),transform .32s var(--saida),
             box-shadow .32s var(--saida)}
.oe-espg a:hover,.oe-espg a:focus-visible{border-color:var(--marca);
  transform:translateY(-3px);box-shadow:0 10px 26px -18px rgba(36,29,26,.5)}
.oe-espg h3{font-family:var(--tit);font-size:1.32rem;font-weight:600;
  line-height:1.12;margin:0;color:var(--marca-esc)}
.oe-espg p{font-size:.93rem;line-height:1.56;color:var(--tinta2);margin:0}
.oe-espg__mais{margin-top:auto;padding-top:12px;font-family:var(--tit);
  font-size:.75rem;letter-spacing:.13em;text-transform:uppercase;color:var(--marca)}
.oe-espg__mais::after{content:" →"}
/* Só para leitores de ecrã. Não existia no tema; `display:none` não servia,
   porque tira o texto também da árvore de acessibilidade. */
.oe-oculto{position:absolute;width:1px;height:1px;padding:0;margin:-1px;
  overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}
/* Os dois em destaque: fundo cheio e título maior, sem sair da paleta. */
.oe-espg--d a{background:var(--papel2);border-color:transparent}
.oe-espg--d h3{font-size:1.72rem}
.oe-espg--d p{font-size:1rem}
/* `hover:hover` e não largura: num telemóvel não há passagem do rato, e
   esconder ali o «Saber mais» deixava o cartão sem dizer que era clicável. */
@media (hover:hover){
  .oe-espg__mais{opacity:0;transform:translateY(5px);
    transition:opacity .3s var(--saida),transform .3s var(--saida)}
  .oe-espg a:hover .oe-espg__mais,
  .oe-espg a:focus-visible .oe-espg__mais{opacity:1;transform:none}
}
@media (prefers-reduced-motion:reduce){
  .oe-espg a,.oe-espg__mais{transition:none}
  .oe-espg a:hover,.oe-espg a:focus-visible{transform:none}
}
.oe-espb{display:flex;flex-wrap:wrap;gap:12px;margin-top:26px}
@media (max-width:460px){ .oe-espb{flex-direction:column} .oe-espb .oe-btn{width:100%} }
@media (min-width:600px){
  .oe-espg{grid-template-columns:repeat(2,1fr)}
  .oe-espg li.oe-espg--d{grid-column:span 2}
}
@media (min-width:960px){
  .oe-espg{grid-template-columns:repeat(6,1fr);gap:13px}
  .oe-espg li{grid-column:span 2}
  /* `li.oe-espg--d` e não só `.oe-espg--d`: a regra de cima tem dois
     selectores e ganhava — os oito cartões saíam todos da mesma largura. */
  .oe-espg li.oe-espg--d{grid-column:span 3}
}

/* Três portas em vez de duas: com o telefone ao lado, a linha deixou de caber
   em ecrãs médios. Passam a poder envolver, e o telefone quebra para a sua
   própria linha em vez de espremer os botões. */
.oe-cta-faixa__b{flex-wrap:wrap}
.oe-cta-faixa__tel{flex-basis:100%;gap:9px}
.oe-cta-faixa__tel svg{width:19px;height:19px;flex:0 0 auto}
/* Um dos dois de cada vez, mas ambos sempre no HTML: quem ouve a página ouve
   «Ligar 924 358 082» em qualquer ecrã. */
.oe-tel__num{display:none}
@media (min-width:1180px){
  .oe-cta-faixa__tel{flex-basis:auto}
  .oe-tel__accao{display:none}
  .oe-tel__num{display:inline}
}

/* Dois botões lado a lado na chamada; em ecrã estreito empilham e ocupam a
   largura toda, para manterem a área de toque. */
.oe-chamada__b{display:flex;flex-wrap:wrap;gap:12px;align-items:center}
@media (max-width:460px){
  .oe-chamada__b{flex-direction:column;align-items:stretch}
  .oe-chamada__b .oe-btn{width:100%}
}

/* O pé da secção escura: botão à esquerda, logótipo à direita. Em ecrã
   estreito o logótipo passa para baixo em vez de encolher o botão. */
.oe-dest__pe{display:flex;flex-wrap:wrap;align-items:center;gap:20px 26px}
.oe-dest__selo{display:inline-flex;align-items:center;opacity:.62}
.oe-dest__logo{height:30px;width:auto;display:block}
@media (min-width:820px){
  .oe-dest__pe{justify-content:space-between}
  .oe-dest__logo{height:34px}
}

/* ===== CARTÃO DE EQUIPA =====
   Cheguei a pôr aqui o efeito dos packs da loja Toirito — o cartão a
   inclinar-se a seguir o rato, com brilho a acompanhar. Saiu: mesmo a 6 graus,
   um retrato que se vira lê-se como cromo colecionável, e esta página é para
   dar confiança.

   Fica o que responde sem chamar atenção para si: a fotografia aproxima-se
   devagar, o cartão levanta, e o filete da travessia desenha-se por baixo.
   Em repouso não há nada. */
.oe-membro__n{margin:0}
.oe-membro__c{margin:6px 0 0}
.oe-membro__brilho{display:none}

@media (min-width:820px) and (hover:hover){
  .oe-membro__retrato{position:relative;border-radius:3px;
    transition:transform .45s var(--saida),box-shadow .45s var(--saida)}
  .oe-membro__img{transition:transform 1.1s var(--saida)}
  .oe-membro:hover .oe-membro__img{transform:scale(1.05)}
  .oe-membro:hover .oe-membro__retrato{transform:translateY(-4px);
    box-shadow:0 18px 40px -22px rgba(35,24,41,.55)}

  /* O filete da marca: o mesmo degradê dos títulos, desenhado da esquerda. */
  .oe-membro__retrato:not(.oe-membro__retrato--sem)::before{
    content:"";position:absolute;left:0;right:0;bottom:0;height:3px;z-index:2;
    background:var(--grad-txt);transform:scaleX(0);transform-origin:left;
    transition:transform .55s var(--saida)}
  .oe-membro:hover .oe-membro__retrato::before{transform:scaleX(1)}

  .oe-membro__n{transition:color .35s var(--saida)}
  .oe-membro:hover .oe-membro__n{color:var(--marca-esc)}
}
@media (prefers-reduced-motion:reduce){
  .oe-membro__retrato,.oe-membro__img,.oe-membro__retrato::before{transition:none}
  .oe-membro:hover .oe-membro__retrato,.oe-membro:hover .oe-membro__img{transform:none}
}

/* Retrato em falta: as iniciais no lugar da fotografia. A cor é a da marca a
   baixa opacidade sobre o cinzento que o retrato já usava — assinala a
   ausência sem gritar, e sai sozinho assim que a fotografia entrar. */
.oe-membro__retrato--sem{display:grid;place-items:center;
  background:linear-gradient(150deg,var(--papel2),var(--papel3))}
.oe-membro__marca{display:grid;place-items:center;width:100%;padding:0 18%}
.oe-membro__logo{width:100%;height:auto;display:block;opacity:.22}

/* ===== ITENS DA GRELHA COM FOTOGRAFIA =====
   A área de imagem só existe em `.oe-item--foto`. Um cartão sem fotografia
   numa grelha onde os outros têm fica sem essa área e o texto sobe — melhor
   do que um rectângulo cinzento à espera de uma imagem que talvez não venha.

   `oe-item__txt` existe para o padding poder ser do texto e não do cartão:
   com a fotografia colada às margens, o padding tinha de sair de cima. */
.oe-item--foto{padding:0!important;display:flex;flex-direction:column}
/* 16:7 e não 16:10. Medido: a 16:10 a fotografia ocupava 73-78% da altura do
   cartão e o nome da especialidade — a informação — ficava espremido em baixo.
   A 16:7 desce para cerca de 55% e a página encurta ~2000px. */
.oe-item__cx{display:block;overflow:hidden;background:var(--papel3);
  aspect-ratio:16/7}
/* Excepção: onde a fotografia É o conteúdo e o texto é legenda. */
#espaco .oe-item__cx{aspect-ratio:16/10}
.oe-item__img{width:100%;height:100%;object-fit:cover;display:block;
  transition:transform 1.1s var(--saida)}
a.oe-item--foto:hover .oe-item__img,
a.oe-item--foto:focus-visible .oe-item__img{transform:scale(1.04)}
.oe-item--foto .oe-item__txt{display:block;padding:20px 22px 22px;flex:1}
.oe-item--foto .oe-item__n{margin-bottom:5px}
@media (prefers-reduced-motion:reduce){
  .oe-item__img{transition:none}
  a.oe-item--foto:hover .oe-item__img{transform:none}
}

/* ===== GRELHAS AGRUPADAS =====
   Uma grelha sem <h2> é a continuação da anterior, não uma secção nova: só a
   primeira de um grupo leva título, as outras trazem o sobretítulo com o nome
   da área. Sem isto ficavam 224px de vazio entre subgrupos e as quatro áreas
   liam-se como quatro secções sem relação. */
.oe-sec:has(.oe-grelha):not(:has(h2)){padding-top:0}
.oe-sec:has(.oe-grelha):not(:has(h2)) .oe-cab{margin-bottom:14px}
.oe-sec:has(.oe-grelha):not(:has(h2)) + .oe-sec:has(.oe-grelha):not(:has(h2)){padding-top:0}
/* O sobretítulo passa a fazer de título do subgrupo: ganha peso e ar. */
.oe-sec:has(.oe-grelha):not(:has(h2)) .oe-eyebrow{font-size:.86rem;margin-bottom:0}

/* ===== TESTEMUNHOS =====
   Citações de comprimentos muito diferentes — de seis palavras a quatro
   linhas. Em colunas de igual altura, as curtas ficavam com metade do cartão
   vazio. `masonry` não é seguro ainda; colunas CSS resolvem: cada citação
   ocupa o que precisa e o texto flui.

   As aspas são decorativas e ficam no `::before`, fora do texto — quem ouve a
   página não precisa de ouvir «aspas» antes de cada uma. */
.oe-test__l{margin-top:36px;columns:1;column-gap:26px}
.oe-test__c{break-inside:avoid;margin:0 0 26px;padding:26px 24px 22px;
  background:var(--papel);border:1px solid var(--linha);border-radius:3px;
  position:relative;transition-delay:calc(var(--i) * 70ms)}
.oe-sec--areia .oe-test__c{background:var(--papel)}
.oe-test__c::before{content:"“";position:absolute;top:2px;left:18px;
  font-family:var(--tit);font-size:3.4rem;line-height:1;color:var(--marca);opacity:.22}
.oe-test__c blockquote{margin:0}
.oe-test__c blockquote p{margin:0;color:var(--tinta);font-size:1.02rem;line-height:1.6}
.oe-test__c figcaption{margin-top:15px;display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 10px}
.oe-test__n{font-family:var(--tit);font-weight:600;font-size:.98rem;color:var(--tinta)}
.oe-test__f{font-size:.8rem;color:var(--tinta3);letter-spacing:.04em}
.oe-test__nota{margin-top:6px;font-size:.9rem;color:var(--tinta3)}
.oe-test__nota a{color:var(--marca);text-underline-offset:3px}
@media (min-width:660px){ .oe-test__l{columns:2} }
@media (min-width:1060px){ .oe-test__l{columns:3;column-gap:24px} }
@media (prefers-reduced-motion:reduce){ .oe-test__c{transition-delay:0s} }

/* ===== HORÁRIOS: OS DOIS MODOS DE CONSULTA =====
   Os filtros respondem a «quando é o Pilates?»; o mapa responde a «o que há na
   terça de manhã?». São perguntas diferentes e por isso convivem.

   Tabela a sério e não grelha de divs: numa tabela o leitor de ecrã anuncia
   «terça-feira, 09:30, Pilates Clínico»; numa grelha de divs a relação entre a
   aula e o dia perde-se.

   Rola na horizontal dentro da caixa — seis dias não cabem em 390px, e a
   alternativa era encolher o texto até não se ler. */
.oe-hor__modos{display:flex;gap:8px;margin-bottom:18px}
.oe-hor__modo{font-family:var(--tit);font-size:.82rem;letter-spacing:.1em;
  text-transform:uppercase;padding:11px 16px;min-height:44px;cursor:pointer;
  background:none;border:1px solid var(--linha);border-radius:2px;
  color:var(--tinta2);transition:all .3s var(--saida)}
.oe-hor__modo:hover{border-color:var(--marca);color:var(--marca)}
.oe-hor__modo.oe-on{background:var(--marca);border-color:var(--marca);color:#fff}
.oe-hor__modo:focus-visible{outline:2px solid var(--marca);outline-offset:2px}

.oe-hor__mapa-u + .oe-hor__mapa-u{margin-top:34px}
.oe-hor__mapa-t{font-family:var(--tit);font-size:1.15rem;font-weight:600;
  margin:0 0 12px;color:var(--marca-esc)}
.oe-hor__mapa-cx{overflow-x:auto;-webkit-overflow-scrolling:touch;
  border:1px solid var(--linha);border-radius:3px;background:var(--papel)}
.oe-sec--areia .oe-hor__mapa-cx{background:var(--papel)}
.oe-hor__tab{width:100%;border-collapse:collapse;min-width:760px}
.oe-hor__tab th{font-family:var(--tit);font-size:.78rem;letter-spacing:.12em;
  text-transform:uppercase;color:var(--tinta3);font-weight:600;
  padding:13px 12px;text-align:left;border-bottom:1px solid var(--linha);
  background:var(--papel2);white-space:nowrap}
.oe-hor__tab td{vertical-align:top;padding:12px;width:16.66%;
  border-left:1px solid var(--linha)}
.oe-hor__tab td:first-child{border-left:0}
.oe-hor__tab-aula{display:block;padding:7px 0;line-height:1.35}
.oe-hor__tab-aula + .oe-hor__tab-aula{border-top:1px solid var(--linha)}
.oe-hor__tab-aula b{display:block;font-family:var(--tit);font-size:.95rem;
  color:var(--marca);font-variant-numeric:tabular-nums}
.oe-hor__tab-aula a{color:var(--tinta);text-decoration:none;font-size:.94rem}
.oe-hor__tab-aula a:hover{color:var(--marca);text-decoration:underline}
.oe-hor__tab-aula i{display:block;font-style:normal;font-size:.78rem;color:var(--tinta3)}
.oe-hor__tab-vazio{color:var(--linha)}

/* ===== PERGUNTAS FREQUENTES =====
   Mesmo desenho do FAQ que já existia nas fichas de modalidade, agora fora
   dele. `<details>` nativo: abre sem script, responde ao teclado sem nada
   escrito por nós, e continua a abrir se o JavaScript falhar. */
.oe-faq__l{margin-top:32px;max-width:76ch}
.oe-faq__q{border-bottom:1px solid var(--linha)}
.oe-faq__q:first-of-type{border-top:1px solid var(--linha)}
.oe-faq__q > summary{display:flex;align-items:center;gap:14px;padding:17px 2px;
  cursor:pointer;list-style:none;font-weight:500;font-size:1.04rem;
  transition:color .3s var(--saida)}
.oe-faq__q > summary::-webkit-details-marker{display:none}
.oe-faq__q > summary:hover{color:var(--marca)}
.oe-faq__q > summary:focus-visible{outline:2px solid var(--marca);outline-offset:3px}
.oe-faq__q > summary span{flex:1}
.oe-faq__seta{width:21px;flex:0 0 auto;color:var(--marca);
  transition:transform .3s var(--saida)}
.oe-faq__q[open] > summary .oe-faq__seta{transform:rotate(180deg)}
.oe-faq__q p{padding:0 2px 21px;color:var(--tinta2);max-width:68ch;margin:0;line-height:1.6}
@media (prefers-reduced-motion:reduce){ .oe-faq__seta{transition:none} }

/* ===== PORQUÊ A OSTEOENERGY =====
   Seis afirmações curtas. Sem cartões: cada uma é uma linha de texto com um
   visto à frente, e um cartão à volta de cinco palavras só acrescentava
   moldura. O que as agrupa é o alinhamento e o espaço.

   `align-items:start` e não `center`: as razões têm comprimentos diferentes e
   as que passam a duas linhas fariam o visto flutuar a meio. */
.oe-razoes__l{list-style:none;margin:34px 0 0;padding:0;
  display:grid;gap:18px 30px;grid-template-columns:1fr}
.oe-razoes__l li{display:flex;align-items:start;gap:13px;
  font-size:1.04rem;line-height:1.45;color:var(--tinta)}
.oe-razoes__v{flex:0 0 auto;width:21px;height:21px;margin-top:.1em;color:var(--marca)}
@media (min-width:640px){
  .oe-razoes__l{grid-template-columns:repeat(2,1fr);gap:20px 40px;margin-top:40px}
}
@media (min-width:1040px){
  .oe-razoes__l{grid-template-columns:repeat(3,1fr)}
}

/* ===== AS ETAPAS DO ACOMPANHAMENTO =====
   Prefixo `oe-etapas` e não `oe-perc`: esse é da linha do tempo, mais abaixo
   neste ficheiro, e as regras dela ganhavam por virem depois — o percurso da
   homepage saía com quatro colunas em vez de cinco, e a página da história
   ficava com fundo escuro. Duas coisas partidas pelo mesmo nome.

   No telemóvel os passos ficam ao centro e cada um traz o seu troço de fio,
   que cresce com ele. Uma linha contínua ao centro passaria por trás do texto.
   A partir dos 900px os passos alinham-se e o fio passa a ser um só,
   horizontal. */
.oe-etapas{background:var(--escuro);color:var(--papel);position:relative;overflow:clip}
.oe-etapas .oe-wrap{position:relative;z-index:1}
.oe-etapas .oe-eyebrow{color:rgba(251,248,245,.62)}
.oe-etapas .oe-eyebrow::before{background:var(--laranja-cl)}
.oe-etapas h2{color:var(--papel);max-width:20ch}
/* A travessia reaproveitada do hero — a única já medida contra fundo escuro.
   Cor sólida primeiro, para quem não tem background-clip; e em alto contraste
   o `currentColor` volta a mandar. */
.oe-etapas h2 i{font-style:italic;color:#f26132;
  /* caixa só: não deixa o «o» ficar pendurado no fim da linha de cima */
  display:inline-block;max-width:100%}
@supports (-webkit-background-clip:text) or (background-clip:text){
  .oe-etapas h2 i{
    background:linear-gradient(96deg,#cd312e 0%,#e34e31 42%,#f26132 74%,#fb9433 100%);
    -webkit-background-clip:text;background-clip:text;
    -webkit-text-fill-color:transparent;
    padding-right:.06em}
}
@media (forced-colors:active){
  .oe-etapas h2 i{-webkit-text-fill-color:currentColor;background:none}
}
.oe-etapas .oe-lead{color:rgba(251,248,245,.80);max-width:56ch}

/* A fotografia por baixo. A camada escura por cima não é decoração: sem ela o
   texto branco perdia contraste em cima das zonas claras da fotografia. */
.oe-etapas__fundo{position:absolute;inset:0;z-index:0}
.oe-etapas__img{width:100%;height:100%;object-fit:cover;display:block;
  opacity:.14;filter:grayscale(.35)}
.oe-etapas__fundo::after{content:"";position:absolute;inset:0;
  background:linear-gradient(180deg,rgba(35,24,41,.62) 0%,rgba(35,24,41,.80) 100%)}

.oe-etapas__l{list-style:none;margin:46px 0 0;padding:0;position:relative;
  display:grid;gap:30px;grid-template-columns:1fr;justify-items:center;text-align:center}
.oe-etapas__p{position:relative;padding-top:32px;
  opacity:0;transform:translateY(22px);
  transition:opacity .9s var(--saida),transform .9s var(--saida);
  transition-delay:calc(var(--i) * 280ms + 300ms)}
.oe-etapas.oe-vista .oe-etapas__p{opacity:1;transform:none}
/* O troço de fio que liga ao passo anterior, no vão entre os dois. */
.oe-etapas__p::after{content:"";position:absolute;left:50%;top:-30px;width:2px;height:30px;
  background:var(--laranja-cl);opacity:.55;
  transform:translateX(-50%) scaleY(0);transform-origin:top;
  transition:transform .7s var(--saida);
  transition-delay:calc(var(--i) * 280ms + 120ms)}
.oe-etapas__p:first-child::after{content:none}
.oe-etapas.oe-vista .oe-etapas__p::after{transform:translateX(-50%) scaleY(1)}
.oe-etapas__pt{position:absolute;left:50%;margin-left:-8px;top:0;
  width:15px;height:15px;border-radius:50%;
  background:var(--escuro);border:2px solid var(--laranja-cl);
  box-shadow:0 0 0 0 rgba(232,97,63,.34);
  transition:box-shadow .7s var(--saida);
  transition-delay:calc(var(--i) * 280ms + 700ms)}
.oe-etapas.oe-vista .oe-etapas__p .oe-etapas__pt{box-shadow:0 0 0 6px rgba(232,97,63,.16)}
.oe-etapas__n{display:block;font-family:var(--tit);font-size:.74rem;letter-spacing:.2em;
  /* #EE7448 e não `--laranja-cl`: com a fotografia por baixo o ponto mais
     claro do fundo sobe a #2E2434, e aí o laranja normal dá 4,38:1 — falha os
     4,5 por pouco. Este dá 5,10:1 no pior ponto. */
  color:#EE7448;margin-bottom:3px}
.oe-etapas h3{font-family:var(--tit);font-size:clamp(1.3rem,4.6vw,1.62rem);font-weight:600;
  line-height:1.15;margin:0;color:var(--papel);max-width:22ch}
.oe-etapas__p p{color:rgba(251,248,245,.72);font-size:.95rem;line-height:1.55;margin:7px 0 0;
  max-width:30ch}
.oe-etapas__b{margin-top:44px}

@media (min-width:900px){
  .oe-etapas__l{grid-template-columns:repeat(5,1fr);gap:20px;margin-top:54px;
    justify-items:start;text-align:left}
  /* Em linha, o fio é um só e nasce ao nível dos pontos. Os troços por passo
     desligam-se: aqui a continuidade lê-se melhor do que a cadência. */
  .oe-etapas__p::after{content:none}
  .oe-etapas__l::before{content:"";position:absolute;left:10px;right:10px;top:7px;height:2px;
    background:linear-gradient(90deg,var(--laranja-cl),rgba(232,97,63,.15));
    transform:scaleX(0);transform-origin:left;
    transition:transform 2.6s var(--saida) .1s}
  .oe-etapas.oe-vista .oe-etapas__l::before{transform:scaleX(1)}
  .oe-etapas__p{padding:32px 14px 0 0}
  .oe-etapas__pt{left:0;margin-left:0;top:0}
}
/* Quem desliga o movimento vê a secção inteira, parada. O rodapé nem chega a
   observá-la: põe `.oe-vista` de uma vez e não a tira mais. */
@media (prefers-reduced-motion:reduce){
  .oe-etapas__l::before,.oe-etapas__p::after{transition:none;transform:none}
  .oe-etapas__p{transition:none;transition-delay:0s;opacity:1;transform:none}
  .oe-etapas__pt{transition:none}
}

/* ===== DESTAQUE ESCURO ===== */
.oe-dest{background:var(--escuro);color:var(--papel);overflow:clip}
.oe-dest__img{width:100%;height:58vw;max-height:440px;object-fit:cover}
.oe-dest__txt{padding:42px 16px 70px}
.oe-dest .oe-eyebrow{color:rgba(251,248,245,.6)}
.oe-dest h2{color:var(--papel)}
.oe-dest .oe-lead{color:rgba(251,248,245,.78)}
.oe-gigante{font-family:var(--tit);font-style:italic;font-weight:700;font-size:clamp(3.4rem,16vw,8rem);
  color:var(--laranja);opacity:.22;line-height:.92;margin:.18em 0 .22em;white-space:nowrap;
  user-select:none;letter-spacing:-.02em}

/* ===== MODAL + FORMULÁRIO ===== */
.oe-modal{position:fixed;inset:0;z-index:100;display:grid;place-items:end center;
  background:rgba(18,14,11,.6);backdrop-filter:blur(3px);opacity:0;visibility:hidden;
  transition:opacity .3s var(--saida),visibility .3s}
.oe-modal.oe-on{opacity:1;visibility:visible}
.oe-modal__cx{background:var(--papel);width:100%;max-width:560px;max-height:92svh;overflow-y:auto;
  padding:26px 18px 30px;border-radius:14px 14px 0 0;
  transform:translateY(24px);transition:transform .4s var(--saida)}
.oe-modal.oe-on .oe-modal__cx{transform:none}
.oe-modal__x{position:absolute;top:14px;right:14px;width:44px;height:44px;background:var(--papel);
  border:1px solid var(--linha);border-radius:50%;font-size:22px;line-height:1;cursor:pointer;color:var(--tinta)}
.oe-modal__logo{height:30px;width:auto;margin:0 0 18px}
.oe-modal h2{font-size:1.9rem;margin-bottom:6px}
.oe-modal .oe-lead{font-size:.96rem;margin-bottom:20px}

.oe-campo{margin-bottom:15px}
.oe-campo label{display:block;font-family:var(--tit);font-size:.86rem;font-weight:600;letter-spacing:.08em;
  text-transform:uppercase;color:var(--tinta2);margin-bottom:5px}
.oe-campo input,.oe-campo select,.oe-campo textarea{width:100%;min-height:52px;padding:13px 15px;
  background:#fff;border:1px solid var(--linha);border-radius:3px;font-family:var(--txt);font-size:1.02rem;
  color:var(--tinta);transition:border-color .2s var(--saida),box-shadow .2s var(--saida)}
.oe-campo textarea{min-height:104px;resize:vertical}
.oe-campo input:focus,.oe-campo select:focus,.oe-campo textarea:focus{outline:0;border-color:var(--laranja);
  box-shadow:0 0 0 3px var(--laranja-luz)}
.oe-campo input:user-invalid{border-color:#d13b3b}
.oe-erro{color:#c23434;font-size:.86rem;margin-top:5px;display:none}
.oe-campo.oe-mal .oe-erro{display:block}
.oe-hp{position:absolute;left:-9999px}   /* armadilha anti-robô */
.oe-form__btn{width:100%;margin-top:6px}
.oe-form__nota{font-size:.8rem;color:var(--tinta3);margin-top:12px;line-height:1.45}
.oe-ok{text-align:center;padding:26px 0}
.oe-ok svg{width:52px;color:var(--ok);margin:0 auto 14px}

/* ===== RODAPÉ ===== */
.oe-rodape{background:var(--escuro);color:var(--papel);padding:0}

/* faixa de acção antes do rodapé */
.oe-cta-faixa{border-bottom:1px solid rgba(251,248,245,.12);padding:52px 16px}
.oe-cta-faixa .oe-wrap{display:grid;gap:22px}
.oe-cta-faixa h2{font-size:clamp(1.9rem,7vw,2.9rem);color:var(--papel);max-width:18ch}
.oe-cta-faixa p{color:rgba(251,248,245,.68);max-width:44ch;margin-top:10px}

.oe-rodape__miolo{padding:52px 16px 0}
.oe-rodape__logo{height:30px!important;width:auto!important;max-width:230px;object-fit:contain;
  opacity:.96;margin:0 0 34px}

.oe-rodape__grelha{display:grid;gap:30px}
.oe-fb h3{font-family:var(--tit);font-size:.8rem;font-weight:600;letter-spacing:.2em;text-transform:uppercase;
  color:rgba(251,248,245,.42);margin:0 0 12px;padding-bottom:10px;
  border-bottom:1px solid rgba(251,248,245,.12)}
.oe-fb p{color:rgba(251,248,245,.74);font-size:.95rem;margin:3px 0;line-height:1.5}
.oe-fb a{transition:color .2s var(--saida)}
.oe-fb a:hover{color:var(--laranja)}

.oe-social{display:flex;flex-wrap:wrap;gap:10px;margin:14px 0 0}
.oe-social a{display:grid;place-items:center;width:44px;height:44px;border-radius:50%;
  border:1px solid rgba(251,248,245,.2);color:rgba(251,248,245,.82);
  transition:background .25s var(--saida),border-color .25s var(--saida),color .25s,transform .25s var(--saida)}
.oe-social a:hover{background:var(--marca);border-color:var(--marca);color:#fff;transform:translateY(-2px)}
.oe-social svg{width:19px;height:19px}

.oe-partilha{border-top:1px solid rgba(251,248,245,.12);margin-top:44px;padding:22px 0;
  display:flex;flex-wrap:wrap;align-items:center;gap:12px}
.oe-partilha__t{font-family:var(--tit);font-size:.78rem;letter-spacing:.2em;text-transform:uppercase;
  color:rgba(251,248,245,.42)}
.oe-partilha__b{display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.oe-partilha button,.oe-partilha a.oe-pt{display:inline-flex;align-items:center;gap:.5rem;
  min-height:40px;padding:0 14px;background:transparent;color:rgba(251,248,245,.78);
  border:1px solid rgba(251,248,245,.18);border-radius:3px;cursor:pointer;
  font-family:var(--txt);font-size:.86rem;
  transition:background .22s var(--saida),border-color .22s var(--saida),color .22s}
.oe-partilha button:hover,.oe-partilha a.oe-pt:hover{background:rgba(251,248,245,.09);
  border-color:rgba(251,248,245,.4);color:var(--papel)}
.oe-partilha svg{width:15px;height:15px}
.oe-copiado{color:var(--ok-luz);font-size:.84rem;opacity:0;transition:opacity .25s}
.oe-copiado.oe-on{opacity:1}

.oe-fim{border-top:1px solid rgba(251,248,245,.12);padding:18px 0 26px;
  color:rgba(251,248,245,.42);font-size:.79rem;display:flex;flex-wrap:wrap;gap:10px;
  justify-content:space-between}
.oe-fim a:hover{color:var(--laranja)}

@media (min-width:820px){
  .oe-cta-faixa{padding:66px 38px}
  .oe-cta-faixa .oe-wrap{grid-template-columns:1.4fr auto;align-items:center;gap:40px}
  .oe-rodape__miolo{padding:66px 38px 0}
  .oe-rodape__logo{height:36px!important;margin-bottom:44px}
  .oe-rodape__grelha{grid-template-columns:1.15fr 1fr 1fr 1fr;gap:38px}
  .oe-partilha{justify-content:space-between;margin-top:56px}
}


/* ===== CARROSSEL DO HERO (reposto) ===== */
.oe-hero__fundos{position:absolute;inset:0;z-index:-2;overflow:clip}
.oe-hero__fundos .oe-hero__img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;
  opacity:0;transform:scale(1.06);transition:opacity 1.1s var(--saida),transform 7s linear}
.oe-hero__fundos .oe-hero__img.oe-on{opacity:1;transform:scale(1)}
.oe-hero__slides{position:relative;display:grid}
.oe-slide{grid-area:1/1;opacity:0;transform:translateY(16px);pointer-events:none;
  transition:opacity .62s var(--saida),transform .62s var(--saida)}
.oe-slide.oe-on{opacity:1;transform:none;pointer-events:auto}
.oe-slide__e{color:rgba(251,248,245,.72)!important;margin-bottom:10px}
.oe-slide__e::before{background:var(--laranja)}
/* `balance` nos dois: o h1 já o tinha, mas os slides 2 a 5 não são h1
   (só pode haver um por página) e partiam-se onde calhava — «Uma
   abordagem / global à / sua saúde.» deixava o «à» sozinho no fim. */
.oe-hero h1,
.oe-slide__t{text-wrap:balance}
.oe-hero h1{max-width:15ch}
/* a margem passou para .oe-hero__accoes: aqui, no filho de um flex com
   align-items:center, o margin-top empurrava só o botão principal e deixava
   os dois desalinhados em 13px (metade da margem) */
.oe-hero__accoes{margin-top:26px}
.oe-pontos{display:flex;gap:9px;margin-top:26px}
.oe-ponto{width:34px;height:34px;padding:0;background:none;border:0;cursor:pointer;display:grid;place-items:center}
.oe-ponto span{display:block;width:26px;height:3px;border-radius:2px;background:rgba(251,248,245,.3);
  transition:background .3s var(--saida),width .3s var(--saida)}
.oe-ponto.oe-on span{background:var(--laranja);width:34px}
@media (min-width:820px){ .oe-hero h1{max-width:14ch} .oe-pontos{margin-top:32px} }
@media (prefers-reduced-motion:reduce){
  .oe-hero__fundos .oe-hero__img{transition:opacity .2s}
  .oe-slide{transition:opacity .2s}
}


/* ===== ECRÃ GRANDE (reposto) ===== */
@media (min-width:820px){
  :root{--nav:104px}
  body{font-size:18px}
  .oe-topo{padding:0 38px}
  .oe-menu{display:flex;align-items:center;gap:26px}
  .oe-logo{height:62px}
  .oe-hamb{display:none}
  .oe-topo__cta{display:inline-flex!important;min-height:44px;padding:0 20px;font-size:1rem}
    /* o botão do topo mantém-se sempre visível, incluindo sobre a fotografia
     do hero. Era transparente com um contorno a 50% de branco e desaparecia
     contra as zonas claras da foto — que é precisamente onde ele está. */
  .oe-topo:not(.oe-solido) .oe-topo__cta{
    background:var(--grad-txt);color:#fff;border:0;padding:0 22px;
    box-shadow:0 2px 14px rgba(0,0,0,.28)}
  .oe-sec{padding:112px 38px}
  .oe-hero{display:flex;align-items:center;min-height:100svh}
  .oe-hero__img{object-position:72% center}
  /* véu direccional: escurece o lado do texto, liberta o lado da fotografia.
     O anterior mantinha .46 aos 62% e .20 aos 80% — a foto do espaço ficava
     lavada de ponta a ponta e o instrutor mal se distinguia do fundo.
     Agora cai a zero aos 88%: o texto tem contraste onde está, e a metade
     direita da imagem lê-se como fotografia. */
  /* O véu tem de cobrir TODA a largura do texto, não só o início dele.
     Medido: por baixo do itálico do h1 o fundo chegava a #827B79, e o laranja
     do texto dava 1,19:1 contra esse ponto — as letras desapareciam contra as
     zonas claras da fotografia. A queda começava aos 32% e o texto vai até
     aos 44% da largura.
     Agora mantém-se cheio até aos 52% e só depois abre, o que continua a
     libertar a metade direita da imagem. */
  .oe-hero::after{background:linear-gradient(96deg,
    rgba(28,16,12,.90) 0%,
    rgba(30,17,13,.89) 22%,
    rgba(32,18,14,.86) 38%,
    rgba(34,20,16,.78) 52%,
    rgba(32,21,18,.44) 68%,
    rgba(30,22,19,.14) 82%,
    transparent 93%)}
  .oe-hero__in{align-self:center;width:100%;max-width:1180px;margin:0 auto;padding:0 38px}
  .oe-hero__in > *{max-width:min(64%,820px)}
  .oe-hero h1{font-size:clamp(3.4rem,6.4vw,6.4rem)}
  .oe-hero__pe{position:absolute;inset:auto 0 0;padding:17px 38px 22px}
  .oe-duas{display:grid;grid-template-columns:.85fr 1.15fr;gap:56px;align-items:start}
  .oe-esp li{width:50%}
  .oe-esp li:nth-child(odd){padding-right:34px}
  .oe-unid{padding:32px 44px 32px 0}
  .oe-barra{display:none}
  .oe-modal{place-items:center}
  .oe-modal__cx{border-radius:6px;padding:34px 34px 36px}
  .oe-grelha{grid-template-columns:repeat(3,1fr)}
  .oe-item{padding:28px 24px}
  .oe-int{padding:calc(var(--nav) + 70px) 38px 62px}
  .oe-int--foto{padding-top:calc(var(--nav) + 120px);padding-bottom:96px}
}
@media (min-width:600px) and (max-width:959px){ .oe-grelha{grid-template-columns:repeat(2,1fr)} }


/* rodapé — afinações */
.oe-cta-faixa .oe-eyebrow{color:rgba(251,248,245,.45)}
.oe-cta-faixa__b{display:flex;flex-wrap:wrap;gap:10px}
.oe-cta-faixa__b .oe-btn--linha{color:var(--papel);border-color:rgba(251,248,245,.3)}
.oe-rodape__topo{display:grid;gap:14px;margin-bottom:40px;
  padding-bottom:32px;border-bottom:1px solid rgba(251,248,245,.12)}
.oe-rodape__frase{color:rgba(251,248,245,.58);font-size:1.02rem;max-width:34ch;margin:0}
.oe-fb p strong{color:rgba(251,248,245,.9);font-weight:600}
@media (min-width:820px){
  .oe-rodape__topo{grid-template-columns:auto 1fr;align-items:center;gap:44px}
  .oe-rodape__logo{margin:0}
  .oe-rodape__grelha{grid-template-columns:repeat(3,1fr);gap:34px 30px}
}
@media (min-width:1180px){
  .oe-rodape__grelha{grid-template-columns:.85fr .95fr .95fr 1.15fr 1fr}
}


/* ===== INTERIOR E GRELHA (reposto) ===== */
.oe-int__img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;z-index:-2}
.oe-int--foto::after{content:"";position:absolute;inset:0;z-index:-1;
  background:linear-gradient(to top,rgba(30,19,14,.95) 0%,rgba(24,17,13,.82) 45%,rgba(24,17,13,.55) 100%)}
.oe-int h1{font-size:clamp(2.4rem,10vw,4.6rem);margin:0}
.oe-int--foto h1{color:var(--papel)}
/* sobre papel claro o remate usa o laranja escuro (4,92:1); sobre a foto
   escura pode usar o laranja pleno do logótipo */
.oe-int h1 i{font-style:italic;color:var(--laranja-esc)}
.oe-int--foto h1 i{color:var(--laranja)}
.oe-int .oe-lead{margin-top:16px;max-width:52ch}
.oe-int--foto .oe-lead{color:rgba(251,248,245,.84)}
.oe-int--foto .oe-eyebrow{color:rgba(251,248,245,.62)}
.oe-int__in{max-width:1180px;margin-inline:auto;position:relative;z-index:1}

.oe-grelha{display:grid;gap:1px;background:var(--linha);border:1px solid var(--linha);margin-top:30px}
.oe-item{display:block;background:var(--papel);padding:22px 18px;transition:background .3s var(--saida)}
.oe-sec--areia .oe-item{background:var(--papel2)}
a.oe-item:hover{background:var(--laranja);color:#fff}
a.oe-item:hover .oe-item__n,a.oe-item:hover .oe-item__d{color:rgba(255,255,255,.88)}
.oe-item__n{display:block;font-family:var(--tit);font-size:.72rem;letter-spacing:.2em;color:var(--tinta3);margin-bottom:6px}
.oe-item__t{font-family:var(--tit);font-size:1.5rem;font-weight:700;line-height:1.05;margin:0}
.oe-item__d{color:var(--tinta2);font-size:.92rem;margin-top:6px}
.oe-prosa p{margin:0 0 16px;color:var(--tinta2);max-width:64ch}
.oe-prosa p:last-child{margin-bottom:0}
@media (min-width:600px){ .oe-grelha{grid-template-columns:repeat(2,1fr)} }
@media (min-width:960px){
  .oe-grelha{grid-template-columns:repeat(3,1fr)}
  .oe-grelha--2{grid-template-columns:repeat(2,1fr)}
  .oe-item{padding:28px 24px}
  .oe-item--larga{grid-column:1/-1}
  .oe-item--larga .oe-item__d{max-width:62ch}
}

/* ===== MORADAS COM MAPA ===== */
.oe-moradas{display:grid;gap:26px;margin-top:32px}
.oe-morada{background:var(--papel2);border:1px solid var(--linha);overflow:hidden;
  transition:transform .3s var(--saida),box-shadow .3s var(--saida)}
.oe-morada:hover{transform:translateY(-3px);box-shadow:0 12px 32px rgba(36,29,24,.09)}
.oe-morada__f{aspect-ratio:16/10;overflow:hidden;background:var(--papel3)}
.oe-morada__f img,.oe-morada__mapa iframe{width:100%;height:100%;object-fit:cover;border:0;display:block}
.oe-morada__mapa{filter:grayscale(.35) contrast(1.04)}
.oe-morada__c{padding:22px 20px 24px}
.oe-morada__c h3{font-family:var(--tit);font-size:1.6rem;margin:0 0 6px}
.oe-morada__d{color:var(--tinta2);font-size:.94rem;margin-bottom:12px}
.oe-morada__m{color:var(--tinta);font-size:1rem;line-height:1.5}
.oe-morada__tel{display:inline-block;margin-top:10px;font-family:var(--tit);font-size:1.3rem;
  font-weight:700;color:var(--marca)}
.oe-morada__tel:hover{color:var(--laranja-esc)}
.oe-morada__h{margin-top:8px;font-family:var(--tit);font-size:.82rem;letter-spacing:.14em;
  text-transform:uppercase;color:var(--laranja)}
.oe-morada__ir{display:inline-block;margin-top:14px;font-weight:600;color:var(--tinta);
  border-bottom:1px solid var(--linha);padding-bottom:2px;transition:color .2s,border-color .2s}
.oe-morada__ir:hover{color:var(--laranja);border-color:var(--laranja)}
@media (min-width:760px){ .oe-moradas{grid-template-columns:repeat(2,1fr)} }
@media (min-width:1100px){ .oe-moradas{grid-template-columns:repeat(3,1fr);gap:30px} }

/* ===== CONSENTIMENTO ===== */
.oe-mapa-espera{position:absolute;inset:0;display:grid;place-content:center;justify-items:center;gap:8px;
  padding:18px;text-align:center;background:var(--papel3);color:var(--tinta2)}
.oe-mapa-espera svg{width:28px;color:var(--tinta3)}
.oe-mapa-espera p{font-size:.88rem;max-width:24ch}
.oe-mapa-btn{min-height:40px;padding:0 16px;background:var(--tinta);color:var(--papel);border:0;
  border-radius:3px;font-family:var(--tit);font-size:.95rem;font-weight:700;text-transform:uppercase;
  letter-spacing:.05em;cursor:pointer;transition:background .2s var(--saida)}
.oe-mapa-btn:hover{background:var(--marca)}
.oe-morada__mapa{position:relative}

.oe-cookies{position:fixed;inset:auto 12px 12px;z-index:120;max-width:520px;margin-inline:auto;
  background:var(--tinta);color:var(--papel);border-radius:10px;padding:20px 20px 18px;
  box-shadow:0 18px 48px rgba(20,15,12,.42);
  transform:translateY(140%);transition:transform .5s var(--saida)}
.oe-cookies.oe-on{transform:none}
.oe-cookies h2{font-size:1.25rem;color:var(--papel);margin:0 0 6px}
.oe-cookies p{color:rgba(251,248,245,.74);font-size:.9rem;line-height:1.5;margin:0 0 15px}
/* o banner assenta em fundo escuro: o --laranja dava 4,05:1 e chumbava */
.oe-cookies p a{color:var(--laranja-cl);text-decoration:underline;text-underline-offset:.2em}
.oe-cookies__b{display:flex;flex-wrap:wrap;gap:9px}
.oe-cookies__b button{flex:1 1 auto;min-height:46px;padding:0 18px;border-radius:4px;cursor:pointer;
  font-family:var(--tit);font-size:1rem;font-weight:700;text-transform:uppercase;letter-spacing:.05em;
  transition:background .2s var(--saida),border-color .2s var(--saida)}
.oe-cookies__sim{background:var(--marca);color:#fff;border:2px solid var(--marca)}
.oe-cookies__sim:hover{background:var(--marca-esc);border-color:var(--marca-esc)}
.oe-cookies__nao{background:transparent;color:var(--papel);border:2px solid rgba(251,248,245,.34)}
.oe-cookies__nao:hover{background:rgba(251,248,245,.1);border-color:var(--papel)}
.oe-prefs{background:none;border:0;color:inherit;font:inherit;cursor:pointer;text-decoration:underline;
  text-underline-offset:.2em;padding:0}
.oe-prefs:hover{color:var(--laranja)}
@media (min-width:560px){ .oe-cookies{inset:auto auto 16px 16px;padding:24px} }

/* ===== HORÁRIO ===== */
/* ===== HORÁRIO SEMANAL =====
   Eram seis cartões iguais, cada um encimado por uma barra preta cheia: seis
   blocos escuros empilhados que pesavam mais do que as aulas em si, que são o
   conteúdo. O cabeçalho passa a tipografia sobre o próprio papel, com um
   filete de marca por baixo — o dia continua a ler-se primeiro, sem que a
   página fique às riscas pretas. */
.oe-horario{display:grid;gap:18px;margin-top:30px}
.oe-dia{background:var(--papel2);border:1px solid var(--linha);border-radius:3px;
  overflow:hidden;transition:border-color .25s var(--saida),box-shadow .25s var(--saida)}
.oe-sec--areia .oe-dia{background:var(--papel)}
.oe-dia:hover{border-color:var(--papel3);box-shadow:0 3px 16px rgba(36,24,20,.06)}
.oe-dia__t{font-family:var(--tit);font-size:1.12rem;font-weight:700;letter-spacing:.13em;
  text-transform:uppercase;color:var(--tinta);margin:0;padding:15px 16px 12px;
  border-bottom:3px solid var(--marca);display:flex;align-items:baseline;gap:.6rem}

/* o dia de hoje é o único que a maioria das pessoas vem cá ver */
.oe-dia--hoje{border-color:var(--marca)}
.oe-dia--hoje .oe-dia__t{color:var(--marca-esc)}
.oe-dia__t::after{content:"hoje";margin-left:auto;font-size:.62rem;letter-spacing:.14em;
  padding:.24em .6em;border-radius:2px;background:var(--marca);color:#fff;
  opacity:0;transform:translateY(-1px);transition:opacity .3s var(--saida)}
.oe-dia--hoje .oe-dia__t::after{opacity:1}

.oe-dia__l{list-style:none;margin:0;padding:0}
.oe-dia__l li{display:grid;grid-template-columns:auto 1fr auto;gap:14px;align-items:baseline;
  padding:11px 16px;border-bottom:1px solid var(--linha);transition:background .2s var(--saida)}
.oe-dia__l li:last-child{border-bottom:0}
.oe-dia__l li:hover{background:var(--laranja-luz)}
/* algarismos de largura fixa: sem isto o "1" é mais estreito que o "9" e a
   coluna das horas fica a dançar de linha para linha */
.oe-dia__h{font-family:var(--tit);font-size:1.15rem;font-weight:700;color:var(--marca);
  min-width:3.4em;font-variant-numeric:tabular-nums;font-feature-settings:"tnum" 1}
/* o capitalize não fazia nada em texto já todo em maiúsculas — a normalização
   passou para oe_nome_aula() no PHP, onde dá para tratar as siglas à parte */
.oe-dia__a{font-size:.95rem;color:var(--tinta);line-height:1.35}
.oe-dia__d{font-size:.72rem;color:var(--tinta3);white-space:nowrap;letter-spacing:.04em;
  text-transform:uppercase;font-family:var(--tit);font-weight:600}
@media (min-width:700px){ .oe-horario{grid-template-columns:repeat(2,1fr);gap:20px} }
@media (min-width:1100px){ .oe-horario{grid-template-columns:repeat(3,1fr)} }

/* ===== LOGÓTIPO ANIMADO ===== */
.oe-marca-sec{padding:78px 16px;text-align:center;position:relative;z-index:1}
.oe-marca-sec--tinta{background:var(--tinta)}
.oe-marca-sec--papel{background:var(--papel2)}
.oe-marca-anim{position:relative;display:inline-block;overflow:hidden;
  max-width:min(88%,540px);line-height:0}
.oe-marca-anim__img{width:100%;height:auto;
  clip-path:inset(0 100% 0 0);
  transition:clip-path 1.5s cubic-bezier(.22,1,.36,1)}
.oe-marca-anim.oe-in .oe-marca-anim__img{clip-path:inset(0 0 0 0)}
/* brilho que passa depois de o logótipo aparecer */
.oe-marca-anim__brilho{position:absolute;inset:0;pointer-events:none;
  background:linear-gradient(105deg,transparent 38%,rgba(255,255,255,.34) 50%,transparent 62%);
  transform:translateX(-115%)}
.oe-marca-anim.oe-in .oe-marca-anim__brilho{
  animation:oe-brilho 1.5s cubic-bezier(.4,0,.2,1) 1.25s 1}
@keyframes oe-brilho{ to{ transform:translateX(115%) } }
.oe-marca-frase{margin:24px auto 0;max-width:40ch;
  font-family:var(--tit);font-size:1.05rem;font-weight:600;letter-spacing:.18em;
  text-transform:uppercase}
.oe-marca-sec--tinta .oe-marca-frase{color:rgba(251,248,245,.56)}
.oe-marca-sec--papel .oe-marca-frase{color:var(--tinta3)}
@media (min-width:820px){ .oe-marca-sec{padding:104px 38px} }
@media (prefers-reduced-motion:reduce){
  .oe-marca-anim__img{clip-path:none;transition:none}
  .oe-marca-anim__brilho{display:none}
}

/* os slides que não são o primeiro têm o mesmo aspecto do H1 sem serem título */
.oe-slide__t{font-family:var(--tit);font-weight:700;line-height:.9;letter-spacing:-.012em;
  color:var(--papel);text-wrap:balance;max-width:15ch;
  font-size:clamp(3.3rem,15vw,9rem)}
.oe-slide__t i{font-style:italic;color:var(--laranja)}
@media (min-width:820px){
  .oe-slide__t{font-size:clamp(3.4rem,6.4vw,6.4rem);max-width:14ch}
}


/* ===== SEPARAÇÃO DE SECÇÕES =====
   Sem filetes. As secções separam-se por espaço generoso (70px em telemóvel,
   112px em ecrã grande) e pela troca de fundo entre --papel e --papel2.
   Riscos de cor a separar blocos são um remendo: acrescentam ruído
   horizontal, cortam a leitura vertical e cansam à terceira repetição.
   O degradê fica reservado aos botões, onde é acção e não decoração. */
.oe-cta-faixa{position:relative}




/* etiquetas: a barrinha oblíqua passa a ter o degradê */
.oe-eyebrow::before{background:var(--grad)}

/* sublinhado do menu em desktop */
.oe-menu a::after{background:var(--grad)}

/* indicador activo do carrossel */
.oe-ponto.oe-on span{background:var(--laranja);width:34px}

/* item da lista em hover: degradê em vez de laranja chapado */
a.oe-item:hover{background:var(--marca);color:#fff}

/* barra de acção do telemóvel */



/* texto pequeno a laranja: o tom depende do fundo em que assenta.
   A regra original mandava --laranja-esc para todos, incluindo os links do
   rodapé e do menu de ecrã inteiro — que estão sobre fundo escuro, onde um
   laranja escuro é exactamente o oposto do que é preciso. */
.oe-morada__tel,.oe-morada__h,.oe-item__d a,.oe-prosa a{color:var(--laranja-esc)}
.oe-fb a:hover,.oe-fim a:hover,.oe-nav a:hover,.oe-menu a:hover{color:var(--laranja-cl)}


/* ===== O DEGRADÊ É A MARCA =====
   No logótipo a cor nunca é chapada: atravessa. Aqui atravessa do
   vermelho ao laranja.
   Aqui faz o mesmo — nos botões, nas faixas e nos estados activos. */

/* ===== HIERARQUIA DE BOTÕES =====
   O degradê é o gesto mais forte que a marca tem. Aplicado a todos os botões
   deixa de ser ênfase: cinco botões a gritar com a mesma força é o mesmo que
   nenhum. E como a travessia se dimensiona à largura, um botão de 163px e
   outro de 246px mostram ritmos diferentes do mesmo degradê — a marca deixa
   de ser uma e passa a ser tantas quantas as larguras.

   Fica reservado a UMA acção: marcar avaliação, que é o que o site inteiro
   serve. Marcada pelo próprio elemento (button[data-oe-modal] abre o modal
   de marcação), não por texto: a hierarquia visual segue a hierarquia real
   de acção e não precisa de manutenção quando o texto mudar.

   Tudo o resto é vermelho sólido ou contorno. */

/* PRIMÁRIO — marcar avaliação (no topo, no hero e na faixa final) e o envio
   do formulário. Marcado por classe e não por tipo de elemento: o botão do
   hero tanto pode sair <button data-oe-modal> como <a href> conforme o URL
   que estiver no bloco, e numa primeira tentativa a distinção por elemento
   deixou o botão do hero com o tratamento de secundário. */
.oe-btn[data-oe-modal],
.oe-hero__cta,
.oe-topo__cta,
.oe-form__btn{
  background:var(--grad-txt);
  background-size:100% 100%;
  /* sem borda: com border:2px o degradê era dimensionado ao padding-box mas
     pintado até ao border-box, e a cor esticava nos 2px de cada lado — dava
     uma moldura desalinhada, laranja de um lado e roxa do outro.
     O padding compensa os 2px para a altura e a largura não mudarem. */
  border:0;
  padding:0 28px;
  transition:filter .3s var(--saida), transform .15s var(--saida), box-shadow .3s var(--saida)}
.oe-btn[data-oe-modal]:hover,
.oe-hero__cta:hover,
.oe-topo__cta:hover,
.oe-form__btn:hover{
  filter:brightness(1.09) saturate(1.04);
  box-shadow:0 6px 22px rgba(184,32,37,.28)}

/* SECUNDÁRIO — ver horários, experimentar uma aula: levam a outra página,
   não são a conversão. Vermelho sólido, o princípio da travessia. */
.oe-btn:where(:not([data-oe-modal]):not(.oe-hero__cta):not(.oe-topo__cta):not(.oe-form__btn):not(.oe-btn--linha):not(.oe-btn--tel):not(.oe-btn--aro):not(.oe-btn--fino)){
  background:var(--marca);
  border-color:var(--marca)}
.oe-btn:where(:not([data-oe-modal]):not(.oe-hero__cta):not(.oe-topo__cta):not(.oe-form__btn):not(.oe-btn--linha):not(.oe-btn--tel):not(.oe-btn--aro):not(.oe-btn--fino)):hover{
  background:var(--marca-esc);
  border-color:var(--marca-esc)}

.oe-sec--areia{position:relative}


.oe-dest{position:relative}


/* selo: leva texto branco, logo vai ao degradê seguro */
.oe-selo{background:var(--grad-txt)}
/* indicador e barra da etiqueta: sem texto por cima, degradê fiel */
.oe-ponto.oe-on span{background:var(--grad);width:34px}
.oe-eyebrow::before{background:var(--grad)}

/* item da lista: o degradê entra da esquerda ao passar o rato */
a.oe-item{position:relative;isolation:isolate;overflow:hidden}
a.oe-item::before{content:"";position:absolute;inset:0;z-index:-1;background:var(--grad-txt);
  transform:translateX(-101%);transition:transform .45s var(--saida)}
a.oe-item:hover{background:transparent;color:#fff}
a.oe-item:hover::before{transform:none}
a.oe-item:hover .oe-item__n,a.oe-item:hover .oe-item__d{color:rgba(255,255,255,.9)}

/* redes sociais e botão do mapa: ícone/texto branco por cima → degradê seguro */
.oe-social a:hover{background:var(--grad-txt);border-color:transparent}
.oe-mapa-btn:hover{background:var(--grad-txt)}

/* sublinhado do menu em ecrã grande */
.oe-menu a::after{background:var(--grad)}

/* consentimento: aceitar cookies não é a acção que o site serve.
   Dar-lhe o degradê da marca era gastar o gesto mais forte num aviso legal
   e pô-lo a competir com "marcar avaliação". Roxo sólido. */
.oe-cookies__sim{background:var(--marca);border-color:var(--marca)}
.oe-cookies__sim:hover{background:var(--marca-esc);border-color:var(--marca-esc)}

.oe-rodape{position:relative}


/* ===== GALERIA EM MOSAICO ===== */
.oe-galeria{display:grid;gap:10px;margin-top:30px;grid-template-columns:repeat(2,1fr)}
.oe-gal{margin:0;overflow:hidden;background:var(--papel3);position:relative}
.oe-gal img{width:100%;height:100%;object-fit:cover;display:block;
  transition:transform 1.1s var(--saida)}
.oe-gal:hover img{transform:scale(1.045)}
.oe-gal--1{aspect-ratio:4/5}
.oe-gal--2{aspect-ratio:4/5}
.oe-gal--3{aspect-ratio:16/11;grid-column:1/-1}
.oe-gal--4{aspect-ratio:1}
.oe-gal--5{aspect-ratio:1}
.oe-gal--6{aspect-ratio:16/11;grid-column:1/-1}
@media (min-width:820px){
  .oe-galeria{grid-template-columns:repeat(6,1fr);gap:12px}
  .oe-gal--1{grid-column:span 4;aspect-ratio:16/10}
  .oe-gal--2{grid-column:span 2;aspect-ratio:4/5}
  .oe-gal--3{grid-column:span 2;aspect-ratio:4/5}
  .oe-gal--4{grid-column:span 4;aspect-ratio:16/10}
  .oe-gal--5{grid-column:span 3;aspect-ratio:3/2}
  .oe-gal--6{grid-column:span 3;aspect-ratio:3/2}
}


/* ===== DOCUMENTO LONGO (páginas legais e afins) =====
   O tema não carrega o CSS de blocos do WordPress — de propósito, por peso.
   A consequência é que qualquer página feita de blocos genéricos sai sem
   contentor nem ritmo: parágrafos de ponta a ponta do ecrã, títulos colados
   ao texto anterior. Estas regras dão-lhe corpo de documento. */
/* o contentor mantém a largura do resto do site para o corpo começar na mesma
   linha vertical que o h1; quem limita a medida de leitura são os filhos */
.oe-doc__in{max-width:1180px}
.oe-doc p,.oe-doc h2,.oe-doc h3,.oe-doc ul,.oe-doc ol{max-width:68ch}
.oe-doc p{color:var(--tinta2);margin:0 0 1.1em;max-width:68ch;line-height:1.7}
.oe-doc h2{font-family:var(--tit);font-size:clamp(1.45rem,3.4vw,1.9rem);font-weight:700;
  color:var(--marca-esc);margin:2.4em 0 .6em;letter-spacing:-.008em;
  padding-top:1.1em;border-top:1px solid var(--linha)}
.oe-doc h2:first-of-type{margin-top:1.2em}
.oe-doc h3{font-family:var(--tit);font-size:1.16rem;font-weight:700;color:var(--tinta);
  margin:1.9em 0 .45em;letter-spacing:.01em}
.oe-doc a{color:var(--laranja-esc);text-decoration:underline;text-underline-offset:.18em;
  text-decoration-thickness:1px}
.oe-doc a:hover{color:var(--marca)}
.oe-doc strong{color:var(--tinta);font-weight:600}
/* parágrafos que começam por marcador vêm de listas do site antigo */
.oe-doc p:has(+ p) + p{margin-top:0}
@media (min-width:900px){
  .oe-doc{padding-top:78px}
}


/* ===== PLANOS E PREÇOS =====
   Cartões são a affordance certa aqui: os planos existem para serem
   comparados lado a lado. O valor é o elemento maior de cada cartão porque
   é a razão pela qual a página é visitada. */
.oe-precos__grupo{margin-top:46px}
.oe-precos__grupo:first-of-type{margin-top:30px}
.oe-precos__cab{margin-bottom:20px;padding-bottom:14px;border-bottom:1px solid var(--linha)}
.oe-precos__t{font-family:var(--tit);font-size:clamp(1.3rem,3.6vw,1.7rem);font-weight:700;
  color:var(--tinta);margin:0;letter-spacing:-.008em}
.oe-precos__s{color:var(--tinta3);font-size:.94rem;margin:5px 0 0}
.oe-precos{display:grid;gap:16px;grid-template-columns:1fr}
.oe-plano{background:var(--papel2);border:1px solid var(--linha);border-radius:3px;
  padding:24px 22px 22px;display:flex;flex-direction:column;
  transition:border-color .25s var(--saida),box-shadow .25s var(--saida)}
.oe-sec--areia .oe-plano{background:var(--papel)}
.oe-plano:hover{border-color:var(--papel3);box-shadow:0 4px 20px rgba(36,24,20,.07)}
.oe-plano__n{font-family:var(--tit);font-size:1.12rem;font-weight:700;letter-spacing:.11em;
  text-transform:uppercase;color:var(--tinta);margin:0}
.oe-plano__s{font-size:.85rem;color:var(--tinta3);margin:4px 0 0;text-transform:uppercase;
  letter-spacing:.07em;font-family:var(--tit);font-weight:600}
.oe-plano__v{font-family:var(--tit);font-weight:700;font-size:clamp(2.5rem,7vw,3.1rem);
  color:var(--marca);line-height:1;margin:16px 0 2px;letter-spacing:-.02em;
  font-variant-numeric:tabular-nums;font-feature-settings:"tnum" 1}
.oe-plano__eur{font-size:.5em;vertical-align:.55em;margin-right:.1em;color:var(--marca-esc)}
.oe-plano__per{font-size:.32em;color:var(--tinta3);letter-spacing:.04em;margin-left:.12em;
  text-transform:uppercase}
.oe-plano__l{list-style:none;margin:16px 0 0;padding:0;border-top:1px solid var(--linha);
  padding-top:14px}
.oe-plano__l li{position:relative;padding-left:18px;margin-bottom:7px;font-size:.93rem;
  color:var(--tinta2);line-height:1.45}
.oe-plano__l li::before{content:"";position:absolute;left:0;top:.55em;width:7px;height:7px;
  background:var(--grad);border-radius:50%}
.oe-plano__nota{margin-top:auto;padding-top:14px;font-size:.78rem;color:var(--tinta3);
  line-height:1.4}
.oe-precos__rodape{margin-top:14px;font-size:.82rem;color:var(--tinta3)}
.oe-precos__cta{margin-top:40px}
@media (min-width:640px){ .oe-precos{grid-template-columns:repeat(2,1fr);gap:18px} }
@media (min-width:1000px){ .oe-precos{grid-template-columns:repeat(3,1fr)} }
@media (min-width:1240px){ .oe-precos--4{grid-template-columns:repeat(4,1fr)} }


/* botão de cada plano e etiqueta do plano escolhido no modal */
.oe-plano__b{width:100%;margin-top:18px;min-height:48px;font-size:1rem}
.oe-plano__nota + .oe-plano__b{margin-top:12px}
.oe-modal__plano{display:inline-block;margin:8px 0 0;padding:.42em .85em;
  background:var(--marca-luz);border:1px solid var(--marca);border-radius:2px;
  font-family:var(--tit);font-weight:700;font-size:.92rem;letter-spacing:.03em;
  color:var(--marca-esc)}
.oe-modal__plano[hidden]{display:none}


/* ===== SUBMENUS =====
   O menu do topo passa a ter dois níveis. Em ecrã grande abre por baixo do
   pai; no menu de ecrã inteiro (telemóvel) fica sempre expandido, porque um
   acordeão dentro de um menu já aberto é um clique a mais sem ganho. */
.oe-menu{position:relative}
.oe-menu .menu-item{position:relative}
.oe-menu .menu-item-has-children::after{content:"";position:absolute;left:0;right:0;
  top:100%;height:14px}
.oe-menu .sub-menu{list-style:none;margin:0;padding:8px 0;
  position:absolute;top:100%;left:-14px;min-width:248px;z-index:70;
  background:var(--escuro);border-radius:0 0 3px 3px;
  box-shadow:0 14px 34px rgba(28,16,12,.28);
  opacity:0;visibility:hidden;transform:translateY(-6px);
  transition:opacity .22s var(--saida),transform .22s var(--saida),visibility .22s}
.oe-menu .sub-menu::before{content:"";position:absolute;inset:0 0 auto;height:3px;
  background:var(--grad)}
.oe-menu .menu-item-has-children:hover > .sub-menu,
.oe-menu .menu-item-has-children:focus-within > .sub-menu{
  opacity:1;visibility:visible;transform:none}
/* O painel do submenu é escuro sempre, mesmo com o cabeçalho sólido. Sem o
   selector reforçado, a regra `.oe-topo.oe-solido .oe-menu a{color:var(--tinta)}`
   ganhava por especificidade e pintava estes links de escuro sobre escuro —
   ficavam invisíveis a partir do momento em que se fazia scroll. */
.oe-menu .sub-menu a,
.oe-topo.oe-solido .oe-menu .sub-menu a{display:block;padding:10px 18px;font-size:.92rem;
  letter-spacing:.04em;color:rgba(251,249,248,.88);text-transform:none;
  font-family:var(--txt);font-weight:500;white-space:nowrap}
.oe-menu .sub-menu a::after{display:none}
.oe-menu .sub-menu a:hover,.oe-menu .sub-menu a:focus-visible,
.oe-topo.oe-solido .oe-menu .sub-menu a:hover{
  background:rgba(251,249,248,.10);color:var(--laranja-cl)}
/* seta discreta nos pais que têm filhos */
.oe-menu .menu-item-has-children > a::before{content:"";display:inline-block;width:5px;height:5px;
  margin-right:.45em;vertical-align:.18em;border-right:1.5px solid currentColor;
  border-bottom:1.5px solid currentColor;transform:rotate(45deg);opacity:.55;
  transition:transform .22s var(--saida)}
.oe-menu .menu-item-has-children:hover > a::before{transform:rotate(45deg) translate(1px,1px);opacity:1}

/* menu de ecrã inteiro: submenus sempre à vista, recuados */
.oe-nav .sub-menu{list-style:none;margin:0 0 10px;padding:0}
.oe-nav .sub-menu a{font-size:clamp(1rem,4.4vw,1.2rem);padding:5px 0 5px 20px;
  border-bottom:0;color:rgba(251,249,248,.72);text-transform:none;font-family:var(--txt)}
.oe-nav .sub-menu a:hover{color:var(--laranja-cl)}
.oe-nav .menu-item{list-style:none}
.oe-nav ul{list-style:none;margin:0;padding:0}


/* ===== OS ESPAÇOS =====
   Eram quatro moradas em lista vertical, com o mesmo aspecto de um índice:
   nada dizia que são QUATRO, que é o argumento. Agora a contagem é anunciada
   ao lado do título e cada espaço tem cartão próprio, com lugar reservado
   para a sua fotografia — enquanto não houver, o número ocupa esse lugar. */
.oe-cab--conta{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;
  gap:18px 30px}
.oe-conta{display:flex;align-items:center;gap:14px;margin:0;flex-shrink:0}
.oe-conta b{font-family:var(--tit);font-size:clamp(3.4rem,9vw,4.6rem);font-weight:700;
  line-height:.82;letter-spacing:-.04em;
  background:var(--grad);-webkit-background-clip:text;background-clip:text;
  -webkit-text-fill-color:transparent;color:var(--marca)}
.oe-conta span{font-family:var(--tit);font-size:.94rem;letter-spacing:.14em;
  text-transform:uppercase;color:var(--tinta3);line-height:1.3}
@media (forced-colors:active){ .oe-conta b{-webkit-text-fill-color:currentColor;background:none} }

.oe-unids{display:grid;gap:16px;margin-top:34px;grid-template-columns:1fr}
.oe-unid{position:relative;display:flex;flex-direction:column;border:1px solid var(--linha);
  border-radius:3px;overflow:hidden;background:var(--papel);padding:0;
  transition:border-color .28s var(--saida),box-shadow .28s var(--saida),transform .28s var(--saida)}
.oe-sec--areia .oe-unid{background:var(--papel)}
.oe-unid:hover{border-color:var(--papel3);box-shadow:0 8px 30px rgba(36,24,20,.10);
  transform:translateY(-3px);padding-left:0}
/* moldura da fotografia: mantém a proporção mesmo sem imagem, para a grelha
   não saltar quando as fotografias forem carregadas */
.oe-unid__cx{position:relative;display:block;aspect-ratio:16/10;overflow:hidden;
  background:var(--papel3)}
.oe-unid__img{width:100%;height:100%;object-fit:cover;display:block;
  transition:transform 1s var(--saida)}
.oe-unid:hover .oe-unid__img{transform:scale(1.04)}
.oe-unid__n{position:absolute;left:0;bottom:0;z-index:2;
  font-family:var(--tit);font-size:2.4rem;font-weight:700;line-height:1;
  color:#fff;padding:.3em .5em .22em;background:var(--grad-txt);letter-spacing:-.02em}
/* sem fotografia, o número ocupa a moldura inteira em vez de ficar um vazio */
.oe-unid:not(.oe-unid--foto) .oe-unid__cx{display:grid;place-items:center;
  background:var(--papel2);border-bottom:1px solid var(--linha)}
.oe-unid:not(.oe-unid--foto) .oe-unid__n{position:static;background:none;padding:0;
  font-size:clamp(3.6rem,11vw,5rem);
  background:var(--grad);-webkit-background-clip:text;background-clip:text;
  -webkit-text-fill-color:transparent;color:var(--marca);opacity:.34}
.oe-unid__txt{display:block;padding:20px 22px 22px}
.oe-unid__t{display:block;font-family:var(--tit);font-size:clamp(1.28rem,3.6vw,1.6rem);
  font-weight:700;letter-spacing:-.008em;color:var(--tinta);margin-bottom:7px;line-height:1.1}
.oe-unid:hover .oe-unid__t{color:var(--marca-esc)}
.oe-unid__d{display:block;color:var(--tinta2);font-size:.95rem;line-height:1.5}
.oe-unid__ir{display:inline-flex;align-items:center;gap:.45rem;margin-top:14px;
  font-family:var(--tit);font-size:.82rem;letter-spacing:.13em;text-transform:uppercase;
  color:var(--marca);font-weight:600}
.oe-unid__ir svg{width:17px;transition:transform .3s var(--saida)}
.oe-unid:hover .oe-unid__ir svg{transform:translateX(4px)}
@media (min-width:620px){ .oe-unids{grid-template-columns:repeat(2,1fr);gap:18px} }
/* Quatro em linha faziam cartões de ~280px: a fotografia ficava uma miniatura
   e a descrição em cinco linhas estreitas. Ficam dois por linha em qualquer
   ecrã a partir dos 620px, que é o que ela pediu — imagem ao dobro e o texto
   a respirar. A regra `--4` fica sem efeito de propósito: se um dia houver
   uma quinta unidade, a grelha continua a dois. */
@media (min-width:1100px){ .oe-unids{gap:26px} }
.oe-unids__intro{max-width:52ch;margin-top:14px}
@media (prefers-reduced-motion:reduce){
  .oe-unid,.oe-unid__img,.oe-unid__ir svg{transition:none}
  .oe-unid:hover{transform:none}
}


/* ===== EQUIPA =====
   Sem cartão: um cartão à volta de cada pessoa acrescenta duas linhas e um
   fundo que competem com o retrato, e a skill é clara em só usar cartões
   quando são mesmo a melhor affordance. Aqui o que agrupa é o próprio
   retrato e o espaço à volta. A hierarquia faz-se por escala e peso —
   nome grande, função em maiúsculas pequenas na cor da marca, áreas em
   corpo de texto. */
.oe-equipa{display:grid;gap:44px 26px;margin-top:38px;grid-template-columns:repeat(2,1fr)}
.oe-membro{display:flex;flex-direction:column}
.oe-membro__retrato{position:relative;aspect-ratio:4/5;overflow:hidden;border-radius:3px;
  background:var(--papel3);margin:0 0 18px}
.oe-membro__img{width:100%;height:100%;object-fit:cover;object-position:center 25%;
  display:block;transition:transform 1.1s var(--saida),filter .5s var(--saida)}
.oe-membro:hover .oe-membro__img{transform:scale(1.035)}
.oe-membro__n{font-family:var(--tit);font-size:clamp(1.35rem,3.4vw,1.7rem);font-weight:700;
  color:var(--tinta);margin:0;letter-spacing:-.008em;line-height:1.05}
.oe-membro__c{font-family:var(--tit);font-size:.79rem;letter-spacing:.16em;text-transform:uppercase;
  color:var(--marca);margin:8px 0 0;font-weight:600}
.oe-membro__e{color:var(--tinta2);font-size:.94rem;line-height:1.55;margin:12px 0 0;max-width:34ch}
.oe-membro__f{margin-top:16px;padding-top:0;border-top:0}
.oe-membro__f summary{display:inline-flex;align-items:center;gap:.5rem;cursor:pointer;
  list-style:none;font-family:var(--tit);font-size:.78rem;letter-spacing:.13em;
  text-transform:uppercase;color:var(--tinta3);font-weight:600;
  transition:color .2s var(--saida)}
.oe-membro__f summary::-webkit-details-marker{display:none}
.oe-membro__f summary:hover{color:var(--marca)}
.oe-membro__f summary::after{content:"";width:6px;height:6px;
  border-right:1.6px solid currentColor;border-bottom:1.6px solid currentColor;
  transform:rotate(45deg) translateY(-2px);transition:transform .25s var(--saida)}
.oe-membro__f[open] summary::after{transform:rotate(-135deg) translateY(0)}
.oe-membro__cnt{display:inline-grid;place-items:center;min-width:19px;height:19px;padding:0 5px;
  border-radius:10px;background:var(--marca-luz);color:var(--marca-esc);font-size:.72rem;
  font-family:var(--txt);font-weight:700;letter-spacing:0}
.oe-membro__f ul{list-style:none;margin:14px 0 0;padding:0;max-width:36ch}
.oe-membro__f li{position:relative;padding-left:16px;margin-bottom:7px;font-size:.87rem;
  color:var(--tinta2);line-height:1.5}
.oe-membro__f li::before{content:"";position:absolute;left:0;top:.6em;width:5px;height:5px;
  background:var(--grad);border-radius:50%}
@media (min-width:900px){ .oe-equipa{grid-template-columns:repeat(4,1fr);gap:40px 26px} }
@media (prefers-reduced-motion:reduce){
  .oe-membro__img{transition:none}
  .oe-membro:hover .oe-membro__img{transform:none}
}

/* =====================================================================
   FICHA — a estrutura comum das especialidades e das modalidades
   =====================================================================
   Trinta e uma páginas partilham este desenho. O conteúdo que a cliente
   escreveu é denso — a Osteopatia tem cinco variantes e cinquenta
   situações clínicas — e o trabalho aqui é sobretudo de hierarquia:
   deixar ver a estrutura antes de obrigar a ler o corpo. */

.oe-ficha{padding-top:56px;padding-bottom:56px}

/* Os h2 desta página são seis ou sete, não um. Ao tamanho dos h2 de
   secção da homepage (até 3,5rem) o olho lia-os como sete títulos de
   página empilhados e perdia-se a hierarquia entre eles e o h1. */
.oe-ficha h2{font-size:clamp(1.55rem,4.6vw,2.15rem);color:var(--marca-esc);letter-spacing:-.015em}
.oe-ficha h3{font-family:var(--tit);font-size:1.18rem;letter-spacing:.01em;color:var(--tinta)}
.oe-ficha > .oe-wrap > * + *{margin-top:clamp(44px,6vw,72px)}

/* ---- o que é ---- */
.oe-ficha__intro .oe-prosa p{font-size:1.06rem;max-width:62ch}

/* ---- listas curtas lado a lado ---- */
.oe-ficha__listas{display:grid;gap:1px;background:var(--linha);
  border:1px solid var(--linha)}
.oe-ficha__lista{background:var(--papel);padding:26px 22px}
.oe-sec--areia .oe-ficha__lista{background:var(--papel2)}
.oe-ficha__lista h3{margin:0 0 14px}
.oe-ficha__lista ul{list-style:none;margin:0;padding:0}
.oe-ficha__lista li{position:relative;padding-left:20px;color:var(--tinta2);
  font-size:.97rem;line-height:1.5;margin-bottom:9px}
.oe-ficha__lista li:last-child{margin-bottom:0}
/* marcador tipográfico em vez de bola: o mesmo gesto oblíquo do
   sobretítulo, para as listas pertencerem à mesma família. */
.oe-ficha__lista li::before{content:"";position:absolute;left:0;top:.62em;
  width:9px;height:2px;background:var(--laranja);transform:skewX(-14deg)}
@media (min-width:720px){
  .oe-ficha__listas--2{grid-template-columns:repeat(2,1fr)}
  .oe-ficha__listas--3{grid-template-columns:repeat(3,1fr)}
}

/* ---- variantes ---- */
.oe-ficha__cab{display:flex;align-items:baseline;gap:14px;margin-bottom:18px}
.oe-ficha__conta{font-family:var(--tit);font-size:.86rem;letter-spacing:.14em;
  color:var(--tinta3);border:1px solid var(--linha);border-radius:999px;
  padding:2px 11px;flex-shrink:0}
.oe-ficha__var{border-top:1px solid var(--linha)}
.oe-ficha__var:last-of-type{border-bottom:1px solid var(--linha)}
.oe-ficha__var > summary{display:flex;align-items:center;gap:14px;
  padding:18px 2px;cursor:pointer;list-style:none;
  transition:color .3s var(--saida)}
.oe-ficha__var > summary::-webkit-details-marker{display:none}
.oe-ficha__var > summary:hover{color:var(--marca)}
/* h3 e não span: «Osteopatia Estrutural», «Visceral», «Craniana» são
   subtítulos reais da página e é assim que o Google e um leitor de ecrã
   constroem o índice. Estar dentro de um <summary> não muda isso. */
.oe-ficha__vt{font-family:var(--tit);font-size:clamp(1.2rem,3.4vw,1.5rem);
  font-weight:700;line-height:1.1;flex:1;margin:0;color:var(--tinta)}
.oe-ficha__vn{font-family:var(--tit);font-size:.78rem;letter-spacing:.12em;
  color:var(--tinta3);flex-shrink:0}
.oe-ficha__seta{width:20px;height:20px;flex-shrink:0;color:var(--tinta3);
  transition:transform .35s var(--saida)}
.oe-ficha__var[open] > summary .oe-ficha__seta,
.oe-ficha__q[open] > summary .oe-ficha__seta{transform:rotate(180deg)}
.oe-ficha__vc{padding:0 2px 24px}
.oe-ficha__var--solta{padding:18px 2px 24px}
.oe-ficha__vd{color:var(--tinta2);max-width:64ch;margin:0 0 14px}
.oe-ficha__vi{list-style:none;margin:0;padding:0;display:grid;gap:7px 26px}
.oe-ficha__vi li{position:relative;padding-left:18px;color:var(--tinta2);font-size:.95rem}
.oe-ficha__vi li::before{content:"";position:absolute;left:0;top:.66em;
  width:7px;height:2px;background:var(--laranja);transform:skewX(-14deg)}
/* As listas de situações têm dez a quinze linhas de três palavras cada.
   Numa coluna só são uma fita estreita e altíssima; em colunas ficam à
   largura da leitura e a página encurta para metade. */
@media (min-width:640px){ .oe-ficha__vi{grid-template-columns:repeat(2,1fr)} }
@media (min-width:1020px){ .oe-ficha__vi{grid-template-columns:repeat(3,1fr)} }
.oe-ficha__nota{margin-top:18px;color:var(--tinta3);font-size:.92rem;
  font-style:italic;max-width:62ch}

/* ---- como decorre ---- */
.oe-ficha__passos ol{list-style:none;counter-reset:oe-p;margin:22px 0 0;padding:0}
.oe-ficha__passos li{counter-increment:oe-p;position:relative;
  padding:0 0 20px 52px;color:var(--tinta2)}
.oe-ficha__passos li::before{content:counter(oe-p,decimal-leading-zero);
  position:absolute;left:0;top:-.12em;font-family:var(--tit);font-size:1.05rem;
  font-weight:700;color:var(--marca);letter-spacing:.04em}
/* o fio que liga os passos pára no penúltimo: um traço a sair do último
   número prometia um passo que não existe */
.oe-ficha__passos li::after{content:"";position:absolute;left:14px;top:1.6em;
  bottom:.2em;width:1px;background:var(--linha)}
.oe-ficha__passos li:last-child{padding-bottom:0}
.oe-ficha__passos li:last-child::after{display:none}

/* ---- informação prática ---- */
.oe-ficha__prat dl{display:grid;gap:1px;background:var(--linha);
  border:1px solid var(--linha);margin:22px 0 0}
.oe-ficha__prat dl > div{background:var(--papel);padding:16px 20px;
  display:flex;flex-wrap:wrap;gap:4px 18px;align-items:baseline}
.oe-sec--areia .oe-ficha__prat dl > div{background:var(--papel2)}
.oe-ficha__prat dt{font-family:var(--tit);font-size:.82rem;letter-spacing:.16em;
  text-transform:uppercase;color:var(--tinta3);min-width:150px}
.oe-ficha__prat dd{margin:0;color:var(--tinta);font-weight:500}

/* ---- perguntas frequentes ---- */
.oe-ficha__q{border-bottom:1px solid var(--linha)}
.oe-ficha__q:first-of-type{border-top:1px solid var(--linha)}
.oe-ficha__q > summary{display:flex;align-items:center;gap:14px;padding:16px 2px;
  cursor:pointer;list-style:none;font-weight:500;
  transition:color .3s var(--saida)}
.oe-ficha__q > summary::-webkit-details-marker{display:none}
.oe-ficha__q > summary:hover{color:var(--marca)}
.oe-ficha__q > summary span{flex:1}
.oe-ficha__q p{padding:0 2px 20px;color:var(--tinta2);max-width:68ch;margin:0}
.oe-ficha__faq h2{margin-bottom:20px}

/* ---- ressalva clínica ---- */
/* Não é um erro nem um alarme: é uma delimitação do âmbito da consulta,
   que a cliente fez questão de deixar escrita («não substitui o
   acompanhamento do pediatra»). Fica legível e sóbria, sem vermelho. */
.oe-ficha__aviso{display:flex;gap:13px;align-items:flex-start;
  background:var(--papel3);padding:18px 20px;color:var(--tinta2);
  font-size:.95rem;max-width:72ch}
.oe-ficha__aviso svg{width:21px;height:21px;flex-shrink:0;
  color:var(--tinta3);margin-top:1px}

/* ---- chamada final ---- */
.oe-ficha__cta{text-align:center;padding:38px 20px;background:var(--papel2);
  border:1px solid var(--linha)}
.oe-sec--areia .oe-ficha__cta{background:var(--papel)}
.oe-ficha__cta h2{margin-bottom:18px}
.oe-ficha__cta p{display:flex;flex-wrap:wrap;gap:12px;justify-content:center;margin:0}

/* Segundo botão sobre fundo claro. O .oe-btn--linha existente foi desenhado
   para o rodapé escuro (texto e aro brancos) e aqui ficava invisível. */
.oe-btn--fino{background:transparent;color:var(--marca);border:2px solid var(--linha)}
.oe-btn--fino:hover{background:var(--marca-luz);border-color:var(--marca);color:var(--marca-esc)}

@media (prefers-reduced-motion:reduce){
  .oe-ficha__seta,.oe-ficha__var > summary,.oe-ficha__q > summary{transition:none}
}

/* Ressalva dentro de uma variante. Delimita o âmbito clínico e a cliente
   escreveu-a de propósito; fica marcada por um traço lateral e não por
   vermelho — não é um erro, é o alcance da consulta. */
.oe-ficha__vnota{margin:16px 0 0;padding-left:14px;border-left:2px solid var(--laranja);
  color:var(--tinta2);font-size:.92rem;font-style:italic;max-width:64ch}

/* Os itens do menu saem sem <ul> à volta (items_wrap = '%3$s'), e um <li>
   solto mantém display:list-item — o browser desenhava um ponto preto antes
   de cada entrada. Só se via em páginas de fundo claro, onde os pontos
   contrastam; sobre a fotografia do hero passavam despercebidos. */
.oe-menu > li,.oe-nav > li{list-style:none}

/* =====================================================================
   MENU — sete entradas de topo, não cinco
   =====================================================================
   A árvore que a cliente desenhou tem sete entradas de primeiro nível e
   um nível novo (Unidades). O menu horizontal ligava aos 960px, medida
   feita para cinco: aos 1100px o «Clínica» encostava ao logótipo e o
   «Sobre Nós» partia-se em duas linhas.

   A saída não é mandar tudo para o hambúrguer aos 1200px — perdia-se o
   menu em todos os tablets ao alto. É apertar por etapas: entre os 960 e
   os 1200 o menu fica mais junto e mais pequeno, o logótipo encolhe e o
   botão do topo sai, porque o hambúrguer não existe aí e o menu tem de
   caber de qualquer maneira. */

/* «Sobre Nós» e «Pilates Premium Studio (Osteo 3)» são duas palavras: sem
   isto o browser parte-as ao meio e a linha do cabeçalho cresce. */
.oe-menu a,.oe-menu .sub-menu a{white-space:nowrap}

@media (min-width:960px) and (max-width:1199px){
  .oe-topo{padding:0 22px}
  .oe-menu{gap:15px}
  .oe-menu > li > a{font-size:.9rem;letter-spacing:.05em}
  .oe-logo{height:50px}
  /* 🔄 Revisto. Escondia-se o botão nesta faixa por se assumir que não
     cabia — e quando era um «Marcar avaliação» genérico, repetido no fundo
     de cada página, a perda era pequena. Deixou de o ser: o botão passou a
     dizer o que faz sentido na secção («Aula experimental» no ginásio,
     «Marcar consulta» na clínica) e é o único sítio onde essa distinção
     aparece de forma persistente.
     Medido a 1180px: logótipo 214 + menu 474 = 688 de 1104 disponíveis.
     Sobram 416px para um botão de 178. Cabia desde sempre. */
  .oe-topo__cta{padding:0 15px;font-size:.92rem}
}

/* Célula de preenchimento da última fila da grelha: existe só para tapar o
   fundo cinzento que separa os cartões. Não tem conteúdo nem é anunciada. */
.oe-item--vazia{background:var(--papel);pointer-events:none}
.oe-sec--areia .oe-item--vazia{background:var(--papel2)}

/* =====================================================================
   A BARRA — ao sair do hero, o cabeçalho ganha o degradê das lonas
   =====================================================================
   As lonas dos três espaços têm uma faixa no topo com a travessia completa
   do logótipo e o wordmark branco por cima. É a identidade impressa da
   cliente, e é o que o cabeçalho passa a ser assim que a fotografia do
   hero sai de vista.

   🔴 Isto traz o roxo de volta a uma superfície, o que foi vetado a 27 Jul.
   É uma reversão consciente, tomada em 28 Jul depois de ver a sinalética
   real dos espaços — e é coerente com a excepção que já existia: o roxo
   já vivia dentro das letras dos títulos, com o degradê completo do
   wordmark. Botões, secções e rodapé continuam sem roxo.

   ⚠️ O remate NÃO é o laranja pleno #F26132. Medido: texto branco por cima
   dá 3,22:1 e chumba o AA. #e03022 é o quente mais vivo que ainda passa
   (4,55:1) e a olho é quase indistinguível. Pontos verificados contra
   branco: #662D91 8,94:1 · #8E2472 7,94:1 · #A9265A 6,75:1 · #e03022 4,55:1. */

:root{
  --grad-barra:linear-gradient(96deg,#662D91 0%,#8E2472 34%,#A9265A 62%,#e03022 100%);
  /* A mesma travessia na diagonal, para as secções de destaque.
     🔴 NÃO usar aqui o `--grad-v`: esse é o degradê de ASSINATURA e remata no
     laranja pleno #f26132, que com texto branco dá 3,22:1. Foi o que fiz à
     primeira, e o parágrafo do destaque saiu a 4,49:1 — chumbava por 0,01.
     É precisamente o erro que o design system avisa: um degradê de superfície
     debaixo de texto não é uma escolha estética, é um bug de acessibilidade. */
  --grad-dest:linear-gradient(168deg,#662D91 0%,#8E2472 34%,#A9265A 62%,#e03022 100%);
}

/* Um degradê não faz fade com transition:background — o browser salta de um
   para o outro. A travessia entra por opacidade, numa camada por baixo do
   conteúdo, para a passagem do hero para a barra ser contínua. */
.oe-topo::before{content:"";position:absolute;inset:0;z-index:0;
  background:var(--grad-barra);opacity:0;
  transition:opacity .45s var(--saida)}
.oe-topo > *{position:relative;z-index:1}

.oe-topo.oe-solido::before{opacity:1}
.oe-topo.oe-solido{
  background:transparent;                 /* o papel claro deu lugar à travessia */
  backdrop-filter:none;                   /* nada para desfocar: o fundo é opaco */
  box-shadow:0 6px 24px rgba(36,24,20,.20)}

/* Nas páginas sem fotografia de topo o cabeçalho já nasce assim; um fade à
   entrada seria um piscar sem motivo, porque não houve transição nenhuma. */
.oe-topo[data-oe-fixo]::before{transition:none}

/* Sobre a travessia, o logótipo a cores desapareceria dentro dela. */
.oe-topo.oe-solido .oe-logo--cores{display:none}
.oe-topo.oe-solido .oe-logo--claro{display:block}
.oe-topo.oe-solido .oe-menu a{color:#fff}
.oe-topo.oe-solido .oe-menu a:hover{color:#fff;opacity:.82}
.oe-topo.oe-solido .oe-hamb span{background:#fff}

/* O botão do topo é o mesmo degradê dos botões: sobre a barra ficava um
   rectângulo vermelho dentro de uma travessia vermelha, sem se destacar de
   nada. Passa a contorno branco — a acção continua a ler-se, e é a barra
   que fica a ser a superfície de marca. */
.oe-topo.oe-solido .oe-topo__cta{
  background:rgba(255,255,255,.14);border:2px solid rgba(255,255,255,.62);
  color:#fff;padding:0 20px;box-shadow:none}
.oe-topo.oe-solido .oe-topo__cta:hover{
  background:#fff;border-color:#fff;color:var(--marca-esc);filter:none}

/* O painel dos submenus mantém-se no escuro da marca: sobre a travessia é o
   contraste que o separa dela, e o texto branco continua a 17:1. */
.oe-topo.oe-solido .oe-menu .sub-menu{box-shadow:0 16px 38px rgba(36,24,20,.42)}

@media (prefers-reduced-motion:reduce){ .oe-topo::before{transition:none} }

/* =====================================================================
   MENU DE ECRÃ INTEIRO — o conteúdo cresceu e deixou de caber
   =====================================================================
   A árvore nova tem 26 entradas: 936px de menu num ecrã de 844px. O painel
   estava a `justify-content:center` e sem scroll, por isso o excedente saía
   pelos DOIS lados — o primeiro item ficava a -48px, acima do ecrã, e os
   últimos abaixo dele. Ambos existiam, estavam visíveis para o DOM, e não
   havia maneira nenhuma de lá chegar.

   `overflow-y:auto` sozinho não resolve: com `justify-content:center` o que
   transborda para CIMA continua inalcançável, porque o flexbox não gera área
   de scroll antes do início do conteúdo. O padrão que resolve é alinhar ao
   início e centrar com margens automáticas em pseudo-elementos — quando cabe
   fica centrado, quando não cabe encosta ao topo e faz scroll. */
.oe-nav{justify-content:flex-start;overflow-y:auto;overscroll-behavior:contain;
  -webkit-overflow-scrolling:touch}
.oe-nav::before{content:"";margin-top:auto}
.oe-nav::after{content:"";margin-bottom:auto}
.oe-nav > *{flex-shrink:0}

/* Com o painel a fazer scroll, um botão de fechar em `absolute` sobe com o
   conteúdo e sai do ecrã. Fica preso à janela. */
.oe-nav__x{position:fixed}

/* =====================================================================
   ENTRADA DE PÁGINA — o título estava por baixo da barra em telemóvel
   =====================================================================
   O único `.oe-int{padding:…}` do ficheiro vivia dentro de
   `@media (min-width:960px)`. Em ecrã pequeno o bloco de entrada não tinha
   afastamento nenhum do topo, e como o cabeçalho é `position:fixed`, o h1
   nascia por baixo dele — cortado ao meio em todas as páginas interiores,
   com fotografia ou sem ela. Só se tornou evidente quando a barra ganhou
   cor e deixou de deixar ver o que tapava.

   Regra base primeiro, e o ecrã grande a partir dela. */
.oe-int{padding:calc(var(--nav) + 38px) 16px 44px}
.oe-int--foto{padding-top:calc(var(--nav) + 72px);padding-bottom:64px}

/* =====================================================================
   BARRA DE ACÇÃO DE TELEMÓVEL — existia no HTML, nunca teve desenho
   =====================================================================
   O `<div class="oe-barra">` está no rodapé desde a construção e o
   JavaScript já lhe punha a classe `oe-on` a partir de 65% do primeiro
   ecrã. Só que a única regra dela no CSS era `display:none` acima dos
   960px: em telemóvel ficava um bloco solto no fim do documento, sem
   posição, sem afastamento e sem espaço entre os botões — o «Ligar»
   encostado a x=0 e o par a acabar a 15px da margem num ecrã de 320px.

   `oe-btn--tel` também não existia em lado nenhum a não ser dentro das
   cadeias `:not()` que o excluíam do vermelho sólido — ou seja, era um
   botão sem aspecto definido. */
.oe-barra{position:fixed;left:0;right:0;bottom:0;z-index:70;
  display:flex;gap:10px;
  padding:10px 14px calc(10px + env(safe-area-inset-bottom, 0px));
  /* 🔴 Estava `rgba(30,20,16,.95)` — o castanho antigo, escrito à mão. Quando
     o rodapé passou de #241814 para #231829 (matiz 313°, para acompanhar o
     roxo da barra do topo), a barra móvel ficou para trás: no mesmo ecrã via-se
     o rodapé roxo e, colada por baixo, uma faixa castanha. Um valor fixo não
     acompanha uma variável — por isso agora deriva dela. O rgba fica só como
     recurso para quem não tem `color-mix`. */
  background:rgba(35,24,41,.95);
  background:color-mix(in srgb, var(--escuro) 95%, transparent);
  box-shadow:0 -8px 26px rgba(22,14,28,.34);
  transform:translateY(105%);
  transition:transform .38s var(--saida)}
@supports (backdrop-filter:blur(2px)){ .oe-barra{backdrop-filter:blur(14px)} }
.oe-barra.oe-on{transform:none}

/* Repartem a largura em vez de se encostarem à esquerda. `min-width:0`
   porque um flex item não encolhe abaixo do conteúdo sem isso, e
   «Marcar avaliação» é largo. */
.oe-barra .oe-btn{flex:1 1 0;min-width:0;min-height:50px;padding:0 12px;
  font-size:.95rem;white-space:nowrap}
/* «Ligar» é a acção secundária: ocupa o que precisa, não metade da barra. */
.oe-barra .oe-btn--tel{flex:0 1 auto;background:transparent;color:var(--papel);
  border:2px solid rgba(251,248,245,.42)}
.oe-barra .oe-btn--tel:hover,.oe-barra .oe-btn--tel:active{
  background:rgba(251,248,245,.14);border-color:var(--papel)}

/* A barra assenta por cima do fim do documento; sem isto tapa as últimas
   linhas do rodapé, que é onde estão as moradas. */
@media (max-width:959px){ body{padding-bottom:72px} }

/* A barra de acção é SÓ de telemóvel. A regra que a escondia acima dos 960px
   está na linha 513, muito antes das regras acima; com a mesma especificidade
   ganha a última do ficheiro, e o `display:flex` que lhe dei passou a mostrá-la
   também no computador — onde o cabeçalho já tem o botão de marcação e o
   telefone está no rodapé. Reposto aqui, depois de tudo. */
@media (min-width:960px){ .oe-barra{display:none} body{padding-bottom:0} }

/* =====================================================================
   SUBMENUS — acompanham a barra, porque a barra tem dois estados
   =====================================================================
   Sobre o hero o cabeçalho é transparente e o submenu assenta sobre a
   fotografia: aí o painel escuro é o que se lê, e mantém-se.

   A partir do momento em que a barra ganha o degradê, o mesmo painel
   escuro passa a ser um bloco pesado colado por baixo de uma superfície
   de marca — nada mudou nele, mudou o que está por cima. Nesse estado
   passa a claro: a barra é a marca, o painel é conteúdo. */
.oe-topo.oe-solido .oe-menu .sub-menu{
  background:#fff;
  box-shadow:0 18px 40px rgba(36,24,20,.26)}
.oe-topo.oe-solido .oe-menu .sub-menu a{color:#3a2f2b}
.oe-topo.oe-solido .oe-menu .sub-menu a:hover,
.oe-topo.oe-solido .oe-menu .sub-menu a:focus-visible{
  background:var(--papel2);color:var(--marca-esc)}
/* O filete do topo do painel continua a ser o degradê, agora a costurá-lo
   à barra em vez de o separar dela. */
.oe-topo.oe-solido .oe-menu .sub-menu::before{background:var(--grad)}

/* =====================================================================
   FAIXA DE CHAMADA — ganha a travessia, para se separar do rodapé
   =====================================================================
   A faixa «Comece por uma avaliação» era escura e o rodapé também: duas
   superfícies da mesma cor encostadas, separadas só por um filete a 12%
   de branco. Com a travessia da marca a faixa passa a ler-se como um
   bloco próprio, e é o mesmo gesto que o cabeçalho ganhou.

   Três coisas mudam com ela, senão parte:
   · o parágrafo estava a 68% de branco — sobre a ponta quente do degradê
     descia abaixo do AA; sobe para 92%;
   · o botão principal tinha `--grad-txt`, ou seja um degradê por cima de
     outro degradê, com o mesmo remate: desaparecia. Passa a branco sólido,
     que sobre esta superfície é o contraste mais forte disponível;
   · o filete que a separava do rodapé deixa de fazer falta — a cor separa. */
.oe-cta-faixa{background:var(--grad-barra);border-bottom:0}
.oe-cta-faixa p{color:rgba(255,255,255,.92)}
.oe-cta-faixa .oe-eyebrow{color:rgba(255,255,255,.80)}
.oe-cta-faixa .oe-eyebrow::before{background:rgba(255,255,255,.85)}
.oe-cta-faixa h2{color:#fff}

.oe-cta-faixa .oe-btn[data-oe-modal]{
  background:#fff;color:var(--marca-esc);box-shadow:0 4px 18px rgba(36,24,20,.24)}
.oe-cta-faixa .oe-btn[data-oe-modal]:hover{
  background:var(--papel2);color:var(--marca-esc);filter:none;
  box-shadow:0 6px 22px rgba(36,24,20,.30)}
.oe-cta-faixa .oe-btn--linha{color:#fff;border-color:rgba(255,255,255,.66)}
.oe-cta-faixa .oe-btn--linha:hover{background:rgba(255,255,255,.16);border-color:#fff}
/* `[data-oe-modal]` a mais no selector: sem ele a regra do botão principal
   ganhava e os secundários saíam brancos como ele. Todos os botões desta
   faixa abrem o modal, por isso a distinção não podia vir daí. */
.oe-cta-faixa .oe-btn--linha[data-oe-modal]{
  background:transparent;color:#fff;
  /* 82% e não 66%: a 66 o contorno dava 2,68:1 contra o vermelho e a norma
     pede 3:1 para o limite de um componente. Aqui: 3,42:1. */
  border:2px solid rgba(255,255,255,.82);
  padding:0 26px;box-shadow:none}
.oe-cta-faixa .oe-btn--linha[data-oe-modal]:hover{
  background:rgba(255,255,255,.16);border-color:#fff;box-shadow:none;filter:none}

/* =====================================================================
   HORÁRIOS COM FILTROS
   =====================================================================
   Três filtros — unidade, dia, modalidade — em <select> nativo e não em
   pastilhas: são muitas opções, e num telemóvel o selector do sistema é
   maior, mais fácil de acertar e já conhecido de quem tem cinquenta anos.

   A intensidade e o nível de cada aula não são escritos aqui: vêm da ficha
   da modalidade. */

.oe-hor__filtros{display:grid;gap:14px;margin-bottom:22px;
  background:var(--papel2);padding:18px 18px 20px;border:1px solid var(--linha)}
.oe-sec--areia .oe-hor__filtros{background:var(--papel)}
.oe-hor__campo{display:flex;flex-direction:column;gap:6px;margin:0}
.oe-hor__campo label{font-family:var(--tit);font-size:.78rem;letter-spacing:.16em;
  text-transform:uppercase;color:var(--tinta3)}
.oe-hor__campo select{font-family:var(--txt);font-size:1rem;color:var(--tinta);
  background:var(--papel);border:2px solid var(--linha);padding:11px 12px;
  min-height:48px;width:100%;appearance:none;border-radius:0;
  background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%236e5f59' stroke-width='2'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:right 12px center;background-size:18px;
  padding-right:40px}
.oe-hor__campo select:hover{border-color:var(--tinta3)}
.oe-hor__limpar{justify-self:start;background:none;border:0;padding:6px 0;cursor:pointer;
  font-family:var(--tit);font-size:.86rem;letter-spacing:.1em;text-transform:uppercase;
  color:var(--marca);text-decoration:underline;text-underline-offset:3px}
.oe-hor__limpar:hover{color:var(--marca-esc)}

.oe-hor__conta{font-family:var(--tit);font-size:.86rem;letter-spacing:.14em;
  text-transform:uppercase;color:var(--tinta3);margin:0 0 8px}

.oe-hor__dia{font-family:var(--tit);font-size:1.35rem;color:var(--marca-esc);
  margin:26px 0 6px;padding-bottom:6px;border-bottom:1px solid var(--linha)}
.oe-hor__dia:first-of-type{margin-top:10px}

/* Uma linha por aula. Em telemóvel a hora manda-se para cima do nome e a
   grelha passa a duas colunas: quatro colunas num ecrã de 360px davam três
   caracteres a cada uma. */
.oe-hor__aula{display:grid;grid-template-columns:auto 1fr;gap:4px 14px;
  align-items:baseline;padding:14px 2px;border-bottom:1px solid var(--linha)}
.oe-hor__h{font-family:var(--tit);font-size:1.15rem;font-weight:700;color:var(--tinta);
  font-variant-numeric:tabular-nums}
.oe-hor__m{font-weight:500;color:var(--tinta)}
.oe-hor__m a{text-decoration:underline;text-decoration-color:var(--linha);
  text-underline-offset:3px;transition:text-decoration-color .25s var(--saida)}
.oe-hor__m a:hover{color:var(--marca);text-decoration-color:var(--marca)}
.oe-hor__u{display:block;font-size:.85rem;color:var(--tinta3);font-weight:400}
.oe-hor__meta{grid-column:2;display:flex;flex-wrap:wrap;gap:6px;margin-top:4px}
.oe-hor__meta b{font-family:var(--tit);font-size:.74rem;letter-spacing:.1em;
  text-transform:uppercase;font-weight:600;padding:3px 9px;border:1px solid var(--linha);
  color:var(--tinta3);border-radius:999px}
.oe-hor__dur{color:var(--tinta2)}
.oe-hor__b{grid-column:2;justify-self:start;margin-top:10px;min-height:44px;
  font-size:.86rem;padding:0 18px}
.oe-hor__vazio{margin-top:26px;color:var(--tinta2)}

@media (min-width:760px){
  .oe-hor__filtros{grid-template-columns:repeat(3,1fr);align-items:end;gap:16px}
  .oe-hor__limpar{grid-column:1/-1}
  .oe-hor__aula{grid-template-columns:88px minmax(0,1fr) auto auto;
    gap:0 20px;align-items:center;padding:16px 2px}
  .oe-hor__meta{grid-column:auto;margin-top:0;justify-content:flex-end}
  .oe-hor__b{grid-column:auto;margin-top:0}
  .oe-hor__u{display:inline;font-size:.85rem;margin-left:10px}
}

/* O botão de reservar traz `data-oe-modal`, e a regra que dá o degradê aos
   botões primários apanhava-o: ficava texto vermelho de `--fino` por cima do
   degradê vermelho, ilegível. E são cinquenta e oito na mesma página — o gesto
   mais forte da marca repetido em cada linha do horário deixava de ser ênfase.
   Reservar é uma acção de linha, não a conversão principal da página. */
.oe-hor .oe-btn.oe-hor__b,
.oe-hor .oe-btn.oe-hor__b[data-oe-modal]{
  background:transparent;background-image:none;color:var(--marca);
  border:2px solid var(--linha);box-shadow:none}
.oe-hor .oe-btn.oe-hor__b:hover,
.oe-hor .oe-btn.oe-hor__b[data-oe-modal]:hover{
  background:var(--marca);border-color:var(--marca);color:#fff;filter:none;box-shadow:none}

/* «Intensidade» escrito por extenso em cinquenta e oito linhas é a mesma
   palavra cinquenta e oito vezes. O valor chega; o resto vive no title. */
.oe-hor__int{position:relative}

/* Pastilhas do horário: ícone + valor, e a intensidade em três barras.
   As barras cheias contam — lê-se de relance, sem comparar frases linha a
   linha. A palavra fica ao lado: a forma é o atalho, não a substituição, e
   nunca é a cor sozinha a dizer o que quer que seja. */
.oe-hor__meta b{display:inline-flex;align-items:center;gap:6px}
.oe-hor__ic{width:14px;height:14px;flex-shrink:0;opacity:.75}
.oe-hor__barras{display:inline-flex;align-items:flex-end;gap:2px;height:11px}
.oe-hor__barras i{width:3px;background:var(--linha);border-radius:1px}
.oe-hor__barras i:nth-child(1){height:5px}
.oe-hor__barras i:nth-child(2){height:8px}
.oe-hor__barras i:nth-child(3){height:11px}
.oe-hor__barras i.oe-on{background:var(--laranja-esc)}
/* Ler as três pastilhas de seguida é ler «intensidade» cinquenta e oito vezes.
   A palavra fica para quem usa leitor de ecrã — que não vê as barras e precisa
   de saber do que trata o número. O olho vê as barras e o valor. */
.oe-sr{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;
  clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;border:0}

/* ---------------------------------------------------------------------
   Selector de dias — a estrutura do horário, não um filtro
   ---------------------------------------------------------------------
   Um dia de cada vez. O número em cada pastilha diz quantas aulas lá estão
   com os filtros actuais, para se ver que a 4ª tem doze e a 6ª quatro antes
   de lá ir. Cinco dias + «semana toda» cabem numa linha até aos 360px. */
.oe-hor__dias{display:flex;gap:6px;margin-bottom:16px;flex-wrap:wrap}
.oe-hor__dia-b{flex:1 1 0;min-width:52px;min-height:56px;cursor:pointer;
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;
  background:var(--papel);border:2px solid var(--linha);color:var(--tinta2);
  font-family:var(--tit);letter-spacing:.06em;
  transition:background .25s var(--saida),border-color .25s var(--saida),color .25s var(--saida)}
.oe-sec--areia .oe-hor__dia-b{background:var(--papel2)}
.oe-hor__dia-c{font-size:1rem;font-weight:700;text-transform:uppercase}
.oe-hor__dia-n{font-size:.72rem;font-weight:600;color:var(--tinta3);letter-spacing:.1em}
.oe-hor__dia-b:hover{border-color:var(--tinta3);color:var(--tinta)}
.oe-hor__dia-b.oe-on{background:var(--marca);border-color:var(--marca);color:#fff}
.oe-hor__dia-b.oe-on .oe-hor__dia-n{color:rgba(255,255,255,.82)}
/* Um dia sem aulas continua a ver-se e continua a poder clicar-se: escondê-lo
   fazia o selector mudar de tamanho a cada filtro, e ninguém percebia porquê. */
.oe-hor__dia-b.oe-vazio{opacity:.45}
.oe-hor__dia-b.oe-vazio.oe-on{opacity:1}
.oe-hor__dia-b--tudo{flex:1 1 100%;min-height:44px;font-size:.82rem;
  flex-direction:row;text-transform:uppercase;letter-spacing:.14em}

/* Com um dia de cada vez, o título repete o que a pastilha já diz. */
.oe-hor__dia{margin-top:6px}

@media (min-width:620px){
  .oe-hor__dias{flex-wrap:nowrap}
  .oe-hor__dia-b--tudo{flex:0 0 auto;min-width:130px;padding:0 16px}
}

/* Enquadramento das fotografias de topo.
   Com `cover` e o padrão `center center`, uma fotografia quadrada num hero
   panorâmico corta metade em cima e metade em baixo — e o que está em cima
   são as cabeças. Na fotografia da equipa, a fila de trás ficava decapitada.
   Nas fotografias que temos (pessoas, fachadas, salas), o que interessa vive
   no terço superior; o chão em baixo não interessa a ninguém. */
.oe-int__img{object-position:center 32%}

/* =====================================================================
   DESTAQUE — a mesma travessia, noutra direcção
   =====================================================================
   A secção escura não se lia: texto claro sobre quase-preto, com a palavra
   gigante a competir por trás. Ganha a travessia da marca — mas na
   diagonal (`--grad-v`), e não nos 96° da barra do topo e da faixa de
   chamada. Numa página com destaque haveria três superfícies da marca à
   vista; se as três tivessem o mesmo ângulo, lia-se como repetição em vez
   de família. */
.oe-dest{background:var(--grad-dest)}
.oe-dest .oe-eyebrow{color:rgba(255,255,255,.82)}
.oe-dest .oe-eyebrow::before{background:rgba(255,255,255,.85)}
.oe-dest h2{color:#fff}
.oe-dest h2 i{color:#ffd9c6}          /* o laranja da marca some dentro do próprio degradê */
.oe-dest .oe-lead{color:#fff}

/* A palavra gigante era `--marca` sobre escuro; sobre a travessia ficaria
   vermelho sobre vermelho. Passa a branco quase apagado: continua a ser
   textura de fundo, e não um segundo título a disputar o primeiro. */
.oe-dest .oe-gigante{color:rgba(255,255,255,.13);-webkit-text-fill-color:rgba(255,255,255,.13)}

/* Botão: o degradê dos primários dentro de um degradê desaparece — o mesmo
   que aconteceu na faixa de chamada. Branco sólido é o contraste mais forte
   disponível sobre esta superfície. */
.oe-dest .oe-btn[data-oe-modal],
.oe-dest .oe-btn{background:#fff;background-image:none;color:var(--marca-esc);
  border:0;box-shadow:0 4px 18px rgba(36,24,20,.26)}
.oe-dest .oe-btn:hover{background:var(--papel2);color:var(--marca-esc);filter:none;
  box-shadow:0 6px 22px rgba(36,24,20,.32)}

/* A fotografia fica como é.
   Cheguei a pôr-lhe `mix-blend-mode:luminosity` a 55%, a pensar que assentava
   POR BAIXO do texto — não assenta: no bloco de destaque a fotografia ocupa a
   faixa de cima e o texto a de baixo, são zonas separadas. O resultado foi uma
   pessoa em aparelho de Pilates tingida de magenta, irreconhecível, sem que
   isso resolvesse problema nenhum. */

/* =====================================================================
   O botão de contorno tem de ganhar ao degradê — em todo o lado
   =====================================================================
   `oe_botao()` transforma qualquer botão cujo destino seja `#marcar` num
   `<button data-oe-modal>`. A regra que pinta os primários com o degradê
   apanha-o por aí, mesmo quando a classe pedida era `--fino`: ficava texto
   vermelho por cima de degradê vermelho, ilegível. Aconteceu no «Reservar»
   do horário e no «Pedir informações» do Pilates Premium, e ia repetir-se em
   cada botão secundário que abrisse o formulário.
   Resolvido aqui, com especificidade suficiente, para não voltar a aparecer
   caso a caso. */
.oe-btn.oe-btn--fino,
.oe-btn.oe-btn--fino[data-oe-modal],
button.oe-btn.oe-btn--fino{
  background:transparent;background-image:none;color:var(--marca);
  border:2px solid var(--linha);box-shadow:none}
.oe-btn.oe-btn--fino:hover,
.oe-btn.oe-btn--fino[data-oe-modal]:hover,
button.oe-btn.oe-btn--fino:hover{
  background:var(--marca);border-color:var(--marca);color:#fff;filter:none;box-shadow:none}

/* Sobre a faixa de chamada e sobre o destaque, que já são a travessia, o
   contorno vermelho desaparece: aí o secundário é branco. */
.oe-cta-faixa .oe-btn.oe-btn--fino,
.oe-dest .oe-btn.oe-btn--fino{background:transparent;color:#fff;border-color:rgba(255,255,255,.66)}
.oe-cta-faixa .oe-btn.oe-btn--fino:hover,
.oe-dest .oe-btn.oe-btn--fino:hover{background:rgba(255,255,255,.16);border-color:#fff;color:#fff}

/* =====================================================================
   DESTAQUE — o título tinha ficado cinco vezes menor que a decoração
   =====================================================================
   A regra que dá tamanho aos títulos de secção é `.oe-sec:not(.oe-dest) h2`
   — exclui o destaque de propósito, porque lá o título levava o degradê nas
   letras e aqui isso não se aplica. Só que ao excluí-lo do degradê excluiu-o
   também do TAMANHO: o h2 caía no valor herdado, 27px, enquanto a palavra
   decorativa ao lado tem 128px.

   «Pilates Clínico» a 27px por baixo de «reformer» a 128px não é hierarquia,
   é o contrário dela: o que importa lê-se como legenda e o ornamento lê-se
   como título. Não era um problema de contraste — era de escala.

   O título recupera a escala das outras secções; a palavra decorativa desce
   e afasta-se, para acompanhar em vez de competir. */
.oe-dest h2{font-size:clamp(2.05rem,8.5vw,3.5rem);line-height:.99}
.oe-dest .oe-gigante{font-size:clamp(2.6rem,10vw,5rem);opacity:1;margin:.06em 0 .3em}

@media (min-width:960px){
  .oe-dest__txt{padding:70px 38px 96px}
}

/* =====================================================================
   DESTAQUE — o problema era a composição, não a cor
   =====================================================================
   Squint test: ao desfocar, via-se texto espremido numa coluna de 45% à
   esquerda e 55% da secção vazia à direita. O texto não se lia mal por
   contraste — media 6,3:1 a 7,6:1, tudo a passar. Lia-se mal porque estava
   na margem, e porque a palavra decorativa ficava DENTRO do caminho de
   leitura, entre o título e o parágrafo: não era fundo, era obstáculo.

   Duas mudanças estruturais:
   · em ecrã largo, a fotografia passa para a metade que estava vazia e o
     texto ocupa a outra — a secção deixa de ter buraco e encurta para
     metade da altura;
   · a palavra decorativa sai do fluxo. Fica atrás do texto, em marca de
     água, que é o papel que sempre teve e nunca cumpriu. */

.oe-dest .oe-gigante{
  position:absolute;left:0;top:-.06em;z-index:0;pointer-events:none;
  font-size:clamp(4rem,17vw,9rem);opacity:1;margin:0;
  color:rgba(255,255,255,.11);-webkit-text-fill-color:rgba(255,255,255,.11)}
.oe-dest .oe-wrap{position:relative}
.oe-dest .oe-eyebrow,.oe-dest h2,.oe-dest .oe-lead,.oe-dest .oe-mt{position:relative;z-index:1}
/* O título precisa de espaço para a marca de água respirar por trás dele. */
.oe-dest h2{margin-bottom:.34em}

@media (min-width:960px){
  /* A fotografia deixa de ser uma faixa por cima e passa a ocupar a metade
     que estava a sobrar. Texto à esquerda, imagem à direita — assimétrico,
     como o register de marca pede, e sem desperdício. */
  .oe-dest{display:grid;grid-template-columns:1.05fr .95fr;align-items:stretch}
  .oe-dest__img{height:100%;max-height:none;min-height:520px;order:2}
  .oe-dest__txt{order:1;display:flex;align-items:center;padding:88px 0 88px 38px}
  .oe-dest__txt .oe-wrap{max-width:640px;margin:0;padding-right:56px}
  /* Sem fotografia, o texto volta a ter a secção toda e centra-se. */
  .oe-dest:not(:has(.oe-dest__img)){display:block}
  .oe-dest:not(:has(.oe-dest__img)) .oe-dest__txt{padding:88px 38px}
  .oe-dest:not(:has(.oe-dest__img)) .oe-dest__txt .oe-wrap{max-width:1180px;margin-inline:auto;padding-right:0}
}

/* Galeria: o padrão adapta-se ao número de fotografias.
   O mosaico base assume seis e repete-se de seis em seis; com duas, três ou
   cinco sobravam colunas vazias no fim — um rectângulo cinzento a fechar a
   secção. */
@media (min-width:760px){
  .oe-galeria--2 .oe-gal--1,
  .oe-galeria--2 .oe-gal--2{grid-column:span 3;aspect-ratio:3/2}

  .oe-galeria--3 .oe-gal--1{grid-column:span 6;aspect-ratio:16/7}
  .oe-galeria--3 .oe-gal--2,
  .oe-galeria--3 .oe-gal--3{grid-column:span 3;aspect-ratio:3/2}

  .oe-galeria--5 .oe-gal--1{grid-column:span 4;aspect-ratio:16/10}
  .oe-galeria--5 .oe-gal--2{grid-column:span 2;aspect-ratio:4/5}
  .oe-galeria--5 .oe-gal--3,
  .oe-galeria--5 .oe-gal--4,
  .oe-galeria--5 .oe-gal--5{grid-column:span 2;aspect-ratio:1}
}
@media (max-width:759px){
  /* Em coluna dupla, um número ímpar deixa a última sozinha: alarga-se. */
  .oe-galeria--3 .oe-gal--3,
  .oe-galeria--5 .oe-gal--5{grid-column:1/-1;aspect-ratio:16/10}
}

/* =====================================================================
   LINHA DO TEMPO
   =====================================================================
   Quatro datas em prosa não se lêem como percurso — lêem-se como mais um
   parágrafo. O fio vertical e os pontos dizem «isto aconteceu por esta
   ordem» antes de se ler uma única palavra. */
.oe-perc__l{list-style:none;margin:34px 0 0;padding:0;position:relative}
/* O fio pára no último ponto: um traço a sair do fim prometia um marco que
   ainda não existe. */
.oe-perc__l::before{content:"";position:absolute;left:5px;top:10px;bottom:2.2em;
  width:2px;background:linear-gradient(180deg,var(--marca),var(--laranja-esc))}
.oe-perc__i{position:relative;padding:0 0 30px 34px;display:grid;
  grid-template-columns:auto 1fr;gap:2px 18px;align-items:baseline}
.oe-perc__i:last-child{padding-bottom:0}
.oe-perc__ponto{position:absolute;left:0;top:.42em;width:12px;height:12px;
  border-radius:50%;background:var(--papel);border:3px solid var(--marca)}
.oe-sec--areia .oe-perc__ponto{background:var(--papel2)}
/* O marco mais recente é o único cheio: é onde a história está agora. */
.oe-perc__i:last-child .oe-perc__ponto{background:var(--marca)}
.oe-perc__ano{font-family:var(--tit);font-size:clamp(1.5rem,5vw,2rem);font-weight:700;
  color:var(--marca-esc);line-height:1;font-variant-numeric:tabular-nums;
  grid-column:1;grid-row:1}
.oe-perc__c{grid-column:1/-1;display:block}
.oe-perc__t{display:block;font-family:var(--tit);font-size:1.12rem;color:var(--tinta);
  margin-top:4px}
.oe-perc__d{display:block;color:var(--tinta2);max-width:60ch;margin-top:3px}

@media (min-width:760px){
  .oe-perc__l::before{left:78px}
  .oe-perc__i{padding-left:112px;grid-template-columns:1fr;gap:3px}
  .oe-perc__ponto{left:73px;top:.5em}
  /* O ano sai da coluna e alinha-se à esquerda do fio: lê-se a coluna de
     anos de uma vez, sem ter de percorrer cada bloco de texto.

     ⚠️ `grid-area:auto` é obrigatório aqui. Num contentor `display:grid`, um
     filho `position:absolute` QUE TENHA posição de grelha definida passa a ter
     como referência a CÉLULA, e não o contentor — o `left:0` media a partir do
     início da célula, que já começa depois dos 112px de padding, e o ano
     aterrava exactamente por cima do título. */
  .oe-perc__ano{position:absolute;grid-area:auto;left:0;top:0;width:64px;text-align:right}
  .oe-perc__c{grid-column:1}
}

/* =====================================================================
   CARTÕES DOS ESPAÇOS — a travessia acende ao passar o rato
   =====================================================================
   O degradê da marca entra por baixo da fotografia e sobe pelo cartão,
   sem nada saltar de sítio: só opacidade e um deslocamento de fundo, que
   não obrigam o browser a refazer o layout.

   ⚠️ Isto é um estado de rato — em telemóvel não existe. Por isso NÃO
   carrega informação nenhuma: o cartão já se lê inteiro parado. É ênfase,
   não conteúdo. */
.oe-unid{position:relative;isolation:isolate;
  transition:transform .5s var(--saida),box-shadow .5s var(--saida)}

/* A travessia, por baixo de tudo, a aparecer por opacidade. */
.oe-unid::before{content:"";position:absolute;inset:0;z-index:-1;
  background:var(--grad-dest);opacity:0;
  transition:opacity .45s var(--saida)}
.oe-unid:hover::before,.oe-unid:focus-visible::before{opacity:1}

@media (hover:hover){
  .oe-unid:hover{transform:translateY(-4px);box-shadow:0 18px 40px rgba(36,24,20,.22)}
  /* A fotografia levanta um pouco o brilho e aproxima-se; o zoom que já
     existia mantém-se, agora acompanhado. */
  .oe-unid:hover .oe-unid__img{transform:scale(1.06);filter:saturate(1.06)}
  /* O texto passa a assentar na travessia, e a caixa deixa de ter fundo
     próprio para a cor poder passar. */
  .oe-unid:hover .oe-unid__txt{background:transparent}
  .oe-unid:hover .oe-unid__t,
  .oe-unid:hover .oe-unid__d,
  .oe-unid:hover .oe-unid__ir{color:#fff}
  .oe-unid:hover .oe-unid__ir svg{transform:translateX(5px)}
  .oe-unid:hover .oe-unid__n{background:rgba(255,255,255,.18);color:#fff}
  .oe-unid:hover .oe-selo{background:#fff;color:var(--marca-esc)}
}
.oe-unid__txt{transition:background .4s var(--saida)}
.oe-unid__t,.oe-unid__d,.oe-unid__ir{transition:color .4s var(--saida)}
.oe-unid__ir svg{transition:transform .4s var(--saida)}
.oe-unid__n{transition:background .4s var(--saida),color .4s var(--saida)}

@media (prefers-reduced-motion:reduce){
  .oe-unid,.oe-unid::before,.oe-unid__img,.oe-unid__txt{transition:none}
  .oe-unid:hover{transform:none}
  .oe-unid:hover .oe-unid__img{transform:none}
}

/* O véu do topo estava a afogar a fotografia da equipa: as caras ficavam
   quase pretas do lado do texto. Menos opaco, e a escurecer só o que tem
   texto por cima. */
.oe-int--foto::after{
  background:linear-gradient(105deg,
    rgba(30,19,14,.90) 0%, rgba(28,18,14,.72) 34%,
    rgba(26,17,13,.34) 62%, rgba(26,17,13,.10) 100%)}

/* =====================================================================
   FOTOGRAFIA LARGA — a fotografia como assunto, não como textura
   =====================================================================
   Sem véu e sem texto por cima. Uma fotografia de equipa debaixo de um
   gradiente escuro com um título em cima deixa de mostrar pessoas: as
   caras escurecem, o enquadramento corta-as ao meio, e ninguém repara em
   ninguém. Aqui vê-se. */
.oe-foto{background:var(--papel);padding:0}
.oe-foto--areia{background:var(--papel2)}
.oe-foto__f{margin:0;position:relative}
.oe-foto__img{width:100%;height:100%;object-fit:cover;display:block}

/* A altura é dada por rácio, não por pixels: assim a fotografia acompanha
   a largura do ecrã e nunca fica com barras nem salta ao carregar.

   ⚠️ Os rácios foram encolhidos. O 21:8 que aqui estava mostrava 41% de uma
   fotografia quadrada — recortava 59% e cortava as pessoas em cima e em
   baixo. Uma faixa panorâmica serve para uma paisagem, não para um grupo. */
.oe-foto--baixa .oe-foto__f{aspect-ratio:16/9}
.oe-foto--media .oe-foto__f{aspect-ratio:4/3}
.oe-foto--alta  .oe-foto__f{aspect-ratio:1}
@media (min-width:760px){
  .oe-foto--baixa .oe-foto__f{aspect-ratio:21/9}
  .oe-foto--media .oe-foto__f{aspect-ratio:16/9}
  .oe-foto--alta  .oe-foto__f{aspect-ratio:3/2}
}
.oe-foto--contida{padding:0 16px}
.oe-foto--contida .oe-foto__f{max-width:1180px;margin-inline:auto}
@media (min-width:960px){ .oe-foto--contida{padding:0 38px} }

/* A legenda alinha com o conteúdo da página, não com a margem do ecrã.
   Estava a começar aos 38px enquanto tudo o resto começava aos 110 — não
   alinhava com nada e lia-se como uma nota perdida. Só se usa quando
   acrescenta o que a fotografia não diz: escrever «a equipa» por baixo de
   uma fotografia da equipa não é legenda, é ruído. */
.oe-foto__cap{max-width:1180px;margin:14px auto 0;padding:0 16px;
  font-size:.88rem;color:var(--tinta3);line-height:1.5}
@media (min-width:960px){ .oe-foto__cap{padding:0 38px} }

/* =====================================================================
   LINHA DO TEMPO — em ecrã largo deita-se
   =====================================================================
   Quatro marcos empilhados numa coluna de 40% deixavam metade do ecrã em
   branco, e um percurso lido de cima para baixo não parece um percurso:
   parece uma lista. Deitada, o fio atravessa o ecrã e os anos lêem-se de
   uma vez — que é o que uma linha do tempo é para fazer. */
@media (min-width:1000px){
  .oe-perc__l{display:grid;grid-template-columns:repeat(4,1fr);gap:0;
    margin-top:52px;padding-top:34px}
  /* o fio passa a horizontal, e continua a parar no último ponto */
  .oe-perc__l::before{left:0;right:12.5%;top:5px;bottom:auto;width:auto;height:2px;
    background:linear-gradient(90deg,var(--marca),var(--laranja-esc))}
  .oe-perc__i{padding:0 26px 0 0;display:block;position:relative}
  .oe-perc__ponto{left:0;top:-34px}
  .oe-perc__ano{position:static;width:auto;text-align:left;display:block;
    font-size:clamp(1.9rem,2.6vw,2.6rem);margin-bottom:6px}
  .oe-perc__c{display:block}
  .oe-perc__d{max-width:none}
}

/* =====================================================================
   Duas travessias encostadas são uma parede
   =====================================================================
   A faixa de chamada vive no rodapé e leva sempre a travessia. Quando a
   página acaba num bloco de destaque — que também a leva — ficam duas
   superfícies de marca encostadas, sem nada entre elas: deixa de ser
   ênfase e passa a ser um muro de cor de quase mil pixels.

   O último bloco antes do rodapé volta ao escuro. A travessia continua a
   aparecer, mas uma vez, e a faixa recupera o destaque que é dela. */
main > .oe-dest:last-child{background:var(--escuro)}
main > .oe-dest:last-child .oe-eyebrow{color:rgba(251,248,245,.62)}
main > .oe-dest:last-child .oe-lead{color:rgba(251,248,245,.86)}
main > .oe-dest:last-child h2 i{color:var(--laranja-cl)}
main > .oe-dest:last-child .oe-gigante{
  color:rgba(232,97,63,.16);-webkit-text-fill-color:rgba(232,97,63,.16)}
/* Sobre o escuro o botão branco continua a ser o mais forte, mas já não
   precisa de sombra para se descolar. */
main > .oe-dest:last-child .oe-btn{box-shadow:none}

/* Aviso do horário: aparece quando o dia se solta sozinho, para a mudança
   não parecer um salto sem explicação. */
.oe-hor__aviso{margin:0 0 10px;padding:9px 13px;background:var(--marca-luz);
  border-left:3px solid var(--marca);color:var(--marca-esc);font-size:.9rem;
  max-width:52ch}

/* =====================================================================
   🔴 [hidden] tem de ganhar a qualquer `display` do autor
   =====================================================================
   `[hidden]{display:none}` vem da folha de estilo do BROWSER, que perde
   para qualquer regra escrita por nós. `.oe-hor__aula{display:grid}` — uma
   classe — ganhava-lhe: as 57 aulas filtradas ficavam com o atributo
   `hidden` posto pelo JavaScript e continuavam TODAS visíveis. A contagem
   mudava, a lista não. O filtro parecia partido porque estava.

   Regra global: qualquer elemento a que se dê `display` e que possa ser
   escondido por `hidden` precisa disto. */
[hidden]{display:none !important}

/* O telefone da faixa deixa de ser botão.
   Com três botões lado a lado, os três pediam o mesmo grau de atenção e
   nenhum se destacava — o design system é explícito: o gesto mais forte
   perde força se for repetido. Aula experimental é a porta de entrada da
   maioria e fica em branco sólido; avaliação, em contorno; o telefone é
   uma alternativa de contacto, não uma terceira decisão. */
.oe-cta-faixa__tel{display:inline-flex;align-items:center;min-height:44px;
  color:#fff;font-family:var(--tit);font-size:1.02rem;letter-spacing:.06em;
  text-decoration:underline;text-underline-offset:5px;
  text-decoration-color:rgba(255,255,255,.45);
  transition:text-decoration-color .3s var(--saida)}
.oe-cta-faixa__tel:hover{text-decoration-color:#fff}
/* O parágrafo cresceu: com duas frases precisa de mais medida de linha. */
.oe-cta-faixa p{max-width:56ch}

/* Cartão de morada: fotografia E mapa, LADO A LADO.
   Empilhados davam cartões de 963px — fotografia 358, mapa 322, texto 281 —
   e 71% de cada cartão era imagem. Quatro desses são dois mil pixels só de
   moradas. Lado a lado, a mesma informação cabe em pouco mais de metade da
   altura e aproveita a largura que a coluna já tem. */
.oe-morada__f{overflow:hidden}
.oe-morada__f img{width:100%;height:100%;object-fit:cover;display:block}

@media (min-width:560px){
  .oe-morada{display:grid;grid-template-columns:1fr 1fr;grid-template-rows:auto auto}
  .oe-morada__f{aspect-ratio:1;grid-row:1}
  .oe-morada__mapa{border-left:1px solid var(--linha)}
  /* O texto atravessa as duas colunas, por baixo das duas imagens. */
  .oe-morada__c{grid-column:1/-1}
}
/* Em coluna única, a fotografia encolhe: é reconhecimento, não é o assunto. */
@media (max-width:559px){
  .oe-morada__f{aspect-ratio:21/9}
  .oe-morada__mapa{aspect-ratio:16/10;border-top:1px solid var(--linha)}
}

/* Quatro moradas em três colunas deixavam a quarta sozinha, com dois terços
   da linha em branco. Com quatro, duas colunas fecham as duas filas. */
@media (min-width:1100px){
  .oe-moradas{grid-template-columns:repeat(3,1fr)}
  .oe-moradas:has(.oe-morada:nth-child(4)):not(:has(.oe-morada:nth-child(5))){
    grid-template-columns:repeat(2,1fr)}
}

/* =====================================================================
   CARTÃO DE MODALIDADE
   =====================================================================
   A fotografia sangra para fora da coluna de texto e a informação encosta-
   -se-lhe do lado de dentro. Assimétrico de propósito: uma fotografia
   centrada com legenda por baixo é o arranjo por omissão de toda a gente,
   e ia repetir-se dezoito vezes.

   Os dados vêm da ficha da própria página — não se escrevem duas vezes. */
.oe-cartao{background:var(--papel);padding:0 0 clamp(48px,6vw,80px)}
.oe-cartao--areia{background:var(--papel2)}
.oe-cartao__in{display:grid;gap:0}
.oe-cartao__f{margin:0;overflow:hidden;aspect-ratio:4/3}
.oe-cartao__img{width:100%;height:100%;object-fit:cover;display:block}
.oe-cartao__c{padding:26px 16px 0}

/* A frase é a única coisa que se escreve à mão neste bloco: uma linha que
   diga o que a fotografia mostra e o texto não diz. */
.oe-cartao__frase{font-family:var(--tit);font-size:clamp(1.3rem,4.6vw,1.9rem);
  line-height:1.16;color:var(--tinta);max-width:22ch;margin:0 0 22px;
  letter-spacing:-.01em}

.oe-cartao__d{display:grid;gap:0;margin:0;border-top:1px solid var(--linha)}
.oe-cartao__d > div{display:flex;align-items:baseline;gap:14px;
  padding:11px 0;border-bottom:1px solid var(--linha)}
.oe-cartao__d dt{font-family:var(--tit);font-size:.76rem;letter-spacing:.16em;
  text-transform:uppercase;color:var(--tinta3);min-width:104px;flex-shrink:0}
.oe-cartao__d dd{margin:0;display:flex;align-items:center;gap:9px;
  color:var(--tinta);font-weight:500}

.oe-cartao__barras{display:inline-flex;align-items:flex-end;gap:2px;height:13px;flex-shrink:0}
.oe-cartao__barras i{width:4px;background:var(--linha);border-radius:1px}
.oe-cartao__barras i:nth-child(1){height:6px}
.oe-cartao__barras i:nth-child(2){height:10px}
.oe-cartao__barras i:nth-child(3){height:13px}
.oe-cartao__barras i.oe-on{background:var(--laranja-esc)}

/* ONDE SE PRATICA
   Era `.92rem` a `--tinta3` — a mesma cor e quase o mesmo tamanho de uma
   legenda de rodapé, para a informação que decide se a pessoa se desloca ou
   não. Seis das dezoito modalidades existem numa única unidade.
   Passa a pastilha: contorno da marca, alfinete, e o nome da unidade a peso
   600 sobre `--tinta`. O «Osteo 1 / Osteo 2» fica em caixa alta pequena — é
   a etiqueta interna dela, e quem conhece procura-a; quem não conhece lê o
   nome do sítio, que é o que interessa. */
.oe-cartao__onde{margin:22px 0 0}
.oe-cartao__onde-t{display:block;font-family:var(--tit);font-size:.76rem;
  letter-spacing:.16em;text-transform:uppercase;color:var(--tinta3);margin:0 0 10px}
.oe-uns{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:10px}
.oe-un{display:inline-flex;align-items:center;gap:9px;min-height:44px;
  padding:8px 16px 8px 13px;border-radius:999px;
  border:1.5px solid var(--laranja-esc);background:var(--laranja-luz);
  color:var(--tinta);text-decoration:none;line-height:1.2;
  transition:background .18s ease-out,border-color .18s ease-out}
.oe-un__p{width:18px;height:18px;flex-shrink:0;color:var(--laranja-esc)}
.oe-un b{font-weight:600;font-size:.97rem}
.oe-un i{font-style:normal;font-family:var(--tit);font-size:.78rem;
  letter-spacing:.1em;text-transform:uppercase;color:var(--tinta2)}
a.oe-un:hover,a.oe-un:focus-visible{background:#f7ddd4;border-color:var(--vermelho)}
/* Só aparece quando é mesmo uma unidade só — e aí é um aviso, não uma legenda. */
.oe-cartao__so{margin:11px 0 0;font-size:.89rem;color:var(--tinta2)}
.oe-cartao__b{margin:22px 0 0}

@media (min-width:900px){
  /* 🔄 Revisto. Tinha a fotografia a sangrar até à margem esquerda do ecrã,
     e era o ÚNICO bloco da página a fazê-lo — todo o resto vive nos 1180px
     centrados. O bloco cortava a página ao meio num sítio sem razão para ser
     especial, e o texto começava a meio do ecrã enquanto o parágrafo logo
     acima começava na margem. Lia-se como desalinhamento, porque era.

     Agora vive na mesma grelha do resto: texto à esquerda, alinhado com tudo
     o que vem antes e depois; fotografia à direita, a confirmar o que se
     acabou de ler. Sem sangramento arbitrário. */
  /* ⚠️ 1180 + 76: com `box-sizing:border-box`, um `max-width:1180px` com
     `padding-inline:38px` deixa o CONTEÚDO em 1104 e empurra-o 38px para
     dentro — exactamente o desalinhamento que se via contra o resto da
     página. A caixa tem de ser a largura do conteúdo MAIS o padding. */
  .oe-cartao__in{max-width:calc(1180px + 76px);margin-inline:auto;padding-inline:38px;
    grid-template-columns:minmax(0,1fr) minmax(0,1.06fr);
    gap:clamp(32px,3.4vw,56px);align-items:center}
  .oe-cartao__f{order:2;aspect-ratio:4/3;min-height:0}
  .oe-cartao__c{order:1;padding:0;display:flex;flex-direction:column;justify-content:center}
  .oe-cartao__frase{margin-bottom:26px}
}


/* =====================================================================
   ARO DA FOTOGRAFIA — a travessia a dar a volta, devagar
   =====================================================================
   Aqui é o sítio certo para o degradê FIEL, com o laranja pleno #F26132:
   é uma superfície sem texto por cima, que é a condição que o design
   system impõe. Nos botões e nas barras usa-se o remate escurecido porque
   lá há texto; aqui não há.

   O aro é `conic-gradient` e não `linear`: dá a volta ao rectângulo, e é
   isso que faz a travessia parecer contínua em vez de cortada nos cantos.
   O movimento anima uma propriedade registada (`@property`), não o
   `background` — um gradiente normal não interpola e saltaria.

   18 segundos por volta: devagar ao ponto de se notar sem distrair de
   nada. E some com `prefers-reduced-motion`. */
@property --oe-ang {
  syntax: '<angle>';
  initial-value: 0deg;
  inherits: false;
}

.oe-cartao__f{
  position:relative;
  padding:4px;
  overflow:visible;
  /* O ponto claro a 50% é o que dá o movimento: a travessia sozinha, a rodar,
     lê-se quase igual em qualquer instante porque as cores são vizinhas. Um
     realce estreito que percorre o contorno vê-se mesmo — é o mesmo princípio
     de um reflexo a passar num objecto metálico. */
  background:conic-gradient(from var(--oe-ang),
    #662D91 0%, #9E1F63 18%, #B82025 34%, #F26132 46%,
    #FFB27A 50%, #F26132 54%,
    #B82025 68%, #9E1F63 84%, #662D91 100%);
  animation:oe-aro 9s linear infinite}

/* Ao passar o rato acelera. Dá-lhe um segundo tempo sem obrigar o primeiro
   a ser rápido de mais — nove segundos parados, três com atenção em cima. */
@media (hover:hover){
  .oe-cartao__f:hover{animation-duration:3.2s}
}

@keyframes oe-aro{ to{ --oe-ang:360deg } }

/* A fotografia por cima do aro, a deixar ver só os 3px de contorno. */
.oe-cartao__img{position:relative;z-index:1}

/* Sem `@property` o ângulo não anima; o aro fica parado — o que continua a
   ser um aro. Nunca fica um rectângulo de cor sólida por cima da fotografia. */
@supports not (background: conic-gradient(from 0deg, red, blue)){
  .oe-cartao__f{background:var(--grad);animation:none}
}
@media (prefers-reduced-motion:reduce){
  .oe-cartao__f{animation:none}
}

/* ═══ AS NOSSAS MARCAS ═══════════════════════════════════════════════
   Era a grelha genérica, numerada 01/02/03. Numerar marcas é ordená-las,
   e entre a Zen Concept, a reikifulness e a yogafulness não há ordem —
   o «01» lia-se como «a mais importante».

   Uma marca reconhece-se pelo logótipo. Escrever o nome dela na fonte
   de outra pessoa é a única versão que garantidamente está errada.

   ⚠️ As três paletas brigam de frente com a nossa: a Zen é verde-petróleo
   a laranja, as outras duas são pastel com lettering preto, e o site é
   quente. Por isso cada logótipo vive numa PLACA BRANCA com folga à volta.
   O branco isola — é o que separa a identidade deles da nossa, e é assim
   que se apresentam marcas de terceiros em qualquer sítio sério. */
.oe-marcas__l{list-style:none;margin:44px 0 0;padding:0;display:grid;gap:22px}
@media (min-width:760px){
  .oe-marcas__l{grid-template-columns:repeat(auto-fit,minmax(268px,1fr))}
}
.oe-marca__in{display:flex;flex-direction:column;height:100%;
  text-decoration:none;color:inherit}

/* Altura mínima igual nas três placas: os logótipos têm proporções
   diferentes (3,2 e 3,0) e sem isto as descrições ficavam em degrau. */
.oe-marca__placa{display:flex;align-items:center;justify-content:center;
  min-height:132px;padding:26px 30px;background:#fff;
  border:1px solid var(--linha);border-radius:15px;
  transition:border-color .2s ease-out,box-shadow .2s ease-out}
/* ⚠️ Os três ficheiros vinham com folgas diferentes: o da Zen sem margem
   nenhuma, os outros dois com ~19% de transparência em cima e em baixo. Com
   `max-height` igual, isso fazia os dois da direita LEREM-SE mais pequenos —
   a caixa era a mesma, o desenho lá dentro é que era menor. As margens foram
   aparadas no ficheiro; aqui limita-se pelos DOIS eixos, porque depois de
   aparados os rácios ficaram 3,2 / 4,4 / 4,1 e só a altura já não chegava. */
.oe-marca__logo{max-width:80%;max-height:66px;width:auto;height:auto;
  object-fit:contain;display:block}
.oe-marca__nome{font-family:var(--tit);font-size:1.15rem;color:var(--tinta);
  text-align:center;font-weight:600}

.oe-marca__d{margin:16px 0 0;color:var(--tinta2);line-height:1.6}
.oe-marca__v{margin:auto 0 0;padding-top:14px;display:inline-flex;
  align-items:center;gap:8px;font-family:var(--tit);font-size:.83rem;
  letter-spacing:.14em;text-transform:uppercase;color:var(--laranja-esc)}
.oe-marca__v svg{width:17px;height:17px;transition:transform .2s ease-out}

a.oe-marca__in:hover .oe-marca__placa,
a.oe-marca__in:focus-visible .oe-marca__placa{
  border-color:var(--laranja-esc);box-shadow:0 6px 22px rgba(36,29,26,.09)}
a.oe-marca__in:hover .oe-marca__v svg{transform:translateX(4px)}
@media (prefers-reduced-motion:reduce){
  .oe-marca__v svg{transition:none}
  a.oe-marca__in:hover .oe-marca__v svg{transform:none}
}

/* ═══ SELECÇÃO DE TEXTO ═══════════════════════════════════════════════
   O site nunca definiu `::selection`, por isso ficava a do sistema: azul
   claro (#accef7 no Chrome) com o texto a manter a SUA cor. Sobre fundo
   escuro — o hero e todo o rodapé — isso dá **branco sobre azul claro:
   1,62:1**. Ilegível. E no telemóvel não é caso raro: um toque longo a
   tentar deslizar selecciona texto sem se querer.

   Nos títulos com degradê (`background-clip:text`) o efeito é outro: o
   preenchimento transparente não vale dentro de `::selection`, e o texto
   cai para o `color` de recurso. O degradê da marca desaparece a meio de
   uma frase.

   ➡️ Fixam-se OS DOIS lados. `-webkit-text-fill-color` tem de estar aqui
   explicitamente, senão os títulos com degradê continuam a decidir por si.
   Medido: 11,97:1 — passa AAA com folga, sobre claro e sobre escuro. */
::selection{
  background:#f6d4c6;
  color:var(--tinta);
  -webkit-text-fill-color:var(--tinta);
  text-shadow:none}
::-moz-selection{
  background:#f6d4c6;
  color:var(--tinta);
  text-shadow:none}


/* =====================================================================
   A NOSSA HISTÓRIA — o retrato do director clínico
   =====================================================================
   Ela pediu que a imagem principal desta página passasse a ser a
   fotografia do cofundador. A fotografia é quadrada e ele está em baixo
   e à esquerda, onde o título se instala — e `.oe-int` não é
   `position:relative`, por isso o `inset:0` da fotografia media-se
   contra o ecrã inteiro: da faixa só se via o letreiro.

   Aqui a moldura é a secção. Em ecrã largo a fotografia encosta à
   direita e o véu escuro fica do lado do texto; em telemóvel volta a ser
   fundo de largura inteira, agora com a moldura certa — o quadrado cabe
   quase todo. */
.page-id-274 .oe-int{position:relative;background:#1E130E}
@media (min-width:900px){
  .page-id-274 .oe-int__img{left:auto;width:56%;object-position:38% 58%}
  .page-id-274 .oe-int--foto::after{
    background:linear-gradient(94deg,
      rgba(30,19,14,1) 38%, rgba(30,19,14,.74) 50%,
      rgba(30,19,14,.24) 68%, rgba(30,19,14,0) 86%)}
  .page-id-274 .oe-int .oe-lead{max-width:38ch}
}
@media (max-width:899px){
  .page-id-274 .oe-int__img{object-position:center 60%}
}

/* A fotografia e o véu vivem em índice negativo — pintam atrás da secção.
   Enquanto `.oe-int` não tinha fundo, isso não se notava; com fundo, o
   fundo tapa-os. A secção passa a ser um contexto próprio e as camadas
   sobem para índices positivos, pela mesma ordem de sempre. */
.page-id-274 .oe-int{isolation:isolate}
.page-id-274 .oe-int__img{z-index:0}
.page-id-274 .oe-int--foto::after{z-index:1}
.page-id-274 .oe-int__in{z-index:2}

/* A junta e o menu. A fotografia alarga para 62% e o véu só começa a
   abrir depois dessa margem, por isso não há linha nenhuma a marcar
   onde ela entra. E a primeira camada escurece a faixa do menu — do
   lado direito o topo é o letreiro iluminado, e o menu é branco. */
@media (min-width:900px){
  .page-id-274 .oe-int__img{width:62%}
  .page-id-274 .oe-int--foto::after{
    background:
      linear-gradient(180deg, rgba(24,17,13,.88) 0, rgba(24,17,13,.52) 96px,
        rgba(24,17,13,0) 168px),
      linear-gradient(94deg, rgba(30,19,14,1) 34%, rgba(30,19,14,.86) 42%,
        rgba(30,19,14,.34) 62%, rgba(30,19,14,0) 84%)}
}

/* Em telemóvel a coluna é uma só e o título caía-lhe na cara. Separar o
   texto da fotografia em duas faixas resolvia isso e deixava um corte
   seco a meio do banner, sem véu — não se parecia com nada no site.
   Fica uma só imagem, como nas outras páginas, mas o texto assenta no
   FUNDO: sobre a camisola preta, que é onde há escuro a sério. A cara e
   o letreiro ficam livres em cima e o véu sobe de baixo para cima, na
   direcção do véu original do tema. */
@media (max-width:899px){
  .page-id-274 .oe-int{padding-top:calc(var(--nav) + 300px);padding-bottom:34px}
  .page-id-274 .oe-int__img{object-position:center top}
  .page-id-274 .oe-int--foto::after{
    background:linear-gradient(to top,
      rgba(24,17,13,.96) 0%, rgba(24,17,13,.90) 30%,
      rgba(24,17,13,.46) 60%, rgba(24,17,13,.14) 100%)}
}

/* O selo do Reiki não é um logótipo de palavra numa fila de marcas: é um
   selo redondo e está sozinho. A placa branca da largura toda com o
   desenho a 66px ao meio fazia-o parecer uma errata — e o selo já traz
   fundo transparente, não precisa de nada a isolá-lo. Ao tamanho a que
   se lê, com a frase ao lado. */
#parceiros .oe-marcas__l{margin-top:30px}
#parceiros .oe-marca__in{flex-direction:row;align-items:center;gap:34px}
#parceiros .oe-marca__placa{flex:0 0 auto;min-height:0;padding:0;width:186px;
  background:none;border:0;border-radius:0}
#parceiros .oe-marca__logo{max-width:100%;max-height:none;width:100%}
#parceiros .oe-marca__d{margin:0;max-width:42ch;font-size:1.06rem}
a#parceiros .oe-marca__in:hover .oe-marca__placa{box-shadow:none}
@media (max-width:639px){
  #parceiros .oe-marca__in{flex-direction:column;align-items:flex-start;gap:22px}
  #parceiros .oe-marca__placa{width:148px}
}

/* =====================================================================
   RODAPÉ — os cinco grupos da cliente, e o telemóvel
   =====================================================================
   «Agendar consulta» e «Marcar avaliação» abrem o modal, por isso são
   <button> e não <a>. No meio de uma lista de links têm de se ler como
   os vizinhos: sem fundo, sem moldura, sem tipo de letra de botão. */
.oe-fb__b{background:none;border:0;padding:0;margin:0;font:inherit;
  color:inherit;cursor:pointer;text-align:left;
  transition:color .2s var(--saida)}
.oe-fb__b:hover,.oe-fb__b:focus-visible{color:var(--laranja-cl)}
.oe-fb__morada{margin-top:11px}
.oe-fb__morada:first-of-type{margin-top:16px}

/* Cinco grupos empilhados num telemóvel são um scroll sem fim. Os quatro
   grupos de links vão a duas colunas; os contactos ficam com a largura
   toda, senão a morada quebra a meio. Acima dos 820px nada disto se
   aplica — o rodapé do desktop fica exactamente como estava. */
@media (max-width:819px){
  .oe-rodape__grelha{grid-template-columns:1fr 1fr;gap:28px 20px}
  .oe-fb--cont{grid-column:1 / -1}
  .oe-fb h3{margin-bottom:10px;padding-bottom:8px}
  .oe-fb p{font-size:.92rem}
}

/* `left top` e não `center top`: com a sobra horizontal ao meio, o ombro
   esquerdo dele saía do enquadramento e a cara ficava encostada à
   margem. Encostada à esquerda, a fotografia mostra-o inteiro. */
@media (max-width:899px){
  .page-id-274 .oe-int__img{object-position:left top}
}

/* `:first-of-type` conta <p>, não <p class="oe-fb__morada"> — as moradas
   vêm depois de quatro parágrafos de links e nenhuma era «a primeira do
   seu tipo». A primeira morada é a que vem depois de um parágrafo que
   não é morada. */
.oe-fb p:not(.oe-fb__morada) + .oe-fb__morada{margin-top:18px}

/* =====================================================================
   RODAPÉ EM DUAS FAIXAS — navegação e contactos
   =====================================================================
   Medido no rodapé de cinco colunas: aos 1024px refluía para três e a
   segunda fila ficava a 2,42× da altura da primeira, com uma célula
   vazia ao lado. A causa não é estética — um grupo de navegação é uma
   lista de linhas de uma linha, uma morada é um bloco de três que não
   se parte, e na mesma grelha a métrica do bloco manda na da lista.

   As duas faixas têm as MESMAS quatro colunas e o mesmo gap, por isso
   alinham na vertical: continua a ler-se como uma grelha só. */
@media (min-width:820px){
  .oe-rodape__grelha,
  .oe-rodape__cont-g{grid-template-columns:repeat(4,1fr);gap:34px 30px}
}
@media (min-width:1180px){
  .oe-rodape__grelha{grid-template-columns:repeat(4,1fr)}
}

.oe-rodape__cont{margin-top:42px;padding-top:30px;
  border-top:1px solid rgba(251,248,245,.12)}
/* Sem o filete de baixo dos outros h3: a faixa já tem o dela em cima e
   dois filetes a 30px de distância leem-se como uma tabela. */
.oe-rodape__cont h3{font-family:var(--tit);font-size:.8rem;font-weight:600;
  letter-spacing:.2em;text-transform:uppercase;
  color:rgba(251,248,245,.42);margin:0 0 20px}
.oe-rodape__cont-g{display:grid;gap:26px 20px}

/* `<address>` vem em itálico por omissão do browser. O nome da unidade em
   linha própria: é o que se procura primeiro («qual destas é a mais perto»). */
.oe-fb__morada{font-style:normal;margin:0;
  color:rgba(251,248,245,.74);font-size:.95rem;line-height:1.5}
.oe-fb__morada strong{display:block;margin-bottom:3px;
  color:rgba(251,248,245,.9);font-weight:600}
.oe-fb--falar p:first-child{margin-top:0}

/* Entre os 520 e os 819px as quatro colunas dos contactos ficariam com
   130px e a morada quebrava a cada duas palavras. Duas colunas. */
@media (min-width:520px) and (max-width:819px){
  .oe-rodape__cont-g{grid-template-columns:1fr 1fr}
}

/* Duas grelhas que se querem alinhadas têm de partilhar o gap. O
   `gap:26px 20px` genérico estava depois da media query e ganhava-lhe:
   20px contra 30px, e o desvio acumulava até 8px na quarta coluna. */
@media (min-width:820px){
  .oe-rodape__cont-g{gap:34px 30px}
}
/* E abaixo dos 520px as três moradas a uma coluna somavam 509px — mais
   do que a coluna única que substituíram (o rodapé passou de 708 para
   801px). A duas colunas as quatro células fazem 2×2. */
@media (max-width:519px){
  .oe-rodape__cont-g{grid-template-columns:1fr 1fr;gap:24px 18px}
  .oe-fb__morada{font-size:.9rem}
}

/* O mesmo gap horizontal nas duas faixas também em telemóvel: 18px
   contra 20px deixava a segunda coluna 1px fora do sítio. */
@media (max-width:519px){
  .oe-rodape__cont-g{gap:24px 20px}
}

/* `.oe-fb__morada:first-of-type{margin-top:16px}` foi escrita quando as
   moradas eram `<p>` no meio de links — e nunca se aplicou, porque
   nenhuma era o primeiro `<p>`. Ao passarem a `<address>`, a primeira
   passou a ser o primeiro do seu tipo e a regra acordou: 16px a mais,
   coluna desalinhada das outras duas. `:first-of-type` conta a TAG. */
.oe-rodape__cont-g > .oe-fb__morada,
.oe-rodape__cont-g > .oe-fb__morada:first-of-type{margin-top:0}

/* O nome da unidade já é bloco próprio (`strong{display:block}`); o
   `<br>` que vinha logo depois dele no markup acrescentava uma linha
   vazia entre o nome e a rua. Sai o <br>, não o bloco: assim a morada
   continua a ser copiável de uma vez. */
.oe-fb__morada strong + br{display:none}

/* =====================================================================
   As etiquetas do rodapé chumbavam o AA
   =====================================================================
   Medido: branco a 42% sobre `#231829` dá 3,88:1, e são maiúsculas de
   12,8px com letter-spacing — texto pequeno, mínimo 4,5:1. A 57% dão
   6,17:1. O público desta clínica é dos 35 aos 65: contraste fraco aqui
   é uma falha real, não uma preferência.

   Sem laranja de propósito. São cinco etiquetas iguais em coluna, e a
   travessia da marca vive na faixa de chamada logo acima — cinco pontos
   de cor aqui fariam essa faixa escorrer para o rodapé e perder o papel
   de remate. Para quem cá voltar: o único laranja que passa neste fundo
   é o `--laranja-cl` (#E8613F, 5,03:1); o `--laranja` dá 4,16:1 e o
   `--laranja-esc` 3,25:1. */
.oe-fb h3,
.oe-rodape__cont h3,
.oe-partilha__t{color:rgba(251,248,245,.57)}
