/* ==========================================================================
   FAIXA DE VÍDEOS — prefixo fvid-
   Índice de uma série de vídeos curtos: grade de três colunas, capa 16:9 com
   título e duração DENTRO da imagem, e um <dialog> por seção que recebe o
   reprodutor.

   Tokens usados:
     --pad --max        só via .wrap do core; nada aqui mexe na coluna
     --display --sans   face do título do card e do rótulo de série
     --ease             curva única do projeto
     --accent --dark    anel de play aceso: fundo de marca, glifo escuro
     --dark-rgb         véu em gradiente da legenda sobre a capa
     --dark-2           fundo da caixa da capa até a imagem existir
     --light            tinta do que está sobre a imagem (ver ILHA ESCURA)
     --fg --fg-2        tinta da legenda do palco, dentro do diálogo
     --rule --rule-2    borda do card em repouso e sob o ponteiro
     --radius-media     canto do card e do quadro do vídeo
     --radius-pill      anel de play e botão de fechar
     --veil             véu do ::backdrop, pintado pela .dialog-casca do core

   ILHA ESCURA. O card é uma imagem, e o texto vive dentro dela: o que está
   sobre a capa lê --light, nunca --fg. É o que permite a mesma faixa rodar
   numa dobra .sec-paper sem virar texto escuro sobre véu escuro. Fora da
   imagem (o cabeçalho da dobra, a legenda do palco) o escopo de tom manda.
   Mesma decisão do midia/galeria-scroll-horizontal.

   PARAFUSOS (custom properties do próprio componente, §3):
     --fvid-min         largura mínima da coluna — é ela que decide 3/2/1
     --fvid-gap         vão da grade
     --fvid-tempo       duração das transições de INTERAÇÃO (hover, foco)
     --fvid-play-size   diâmetro do anel de play
     --fvid-entrada     duração da entrada do palco no diálogo
     --fvid-veil-mix    grau do véu do ::backdrop
     --fvid-cromo       altura que a legenda e os respiros comem acima do
                        quadro — entra na conta que dimensiona o palco
     --fvid-pw/--fvid-ph  a proporção da capa e do quadro, em dois números
                        (16 e 9). Dois e não um "16 / 9" porque o palco usa
                        a razão numa conta de calc(), e aspect-ratio aceita
                        os dois números separados por barra
   ========================================================================== */

.fvid{
  /* A GRADE NÃO TEM MEDIA QUERY DE COLUNA, e isso é de propósito: com
     `auto-fill` e este mínimo, a conta do próprio grid decide.
       coluna de 1096px (--max 1240 menos --pad)  ->  3 colunas
       ~660 a 1000px                              ->  2 colunas
       abaixo de ~660px                           ->  1 coluna
     3 * 320 + 2 * 26 = 1012, que cabe em 1096; a quarta não caberia. Mexer
     em --fvid-min move os três limiares de uma vez. */
  --fvid-min:320px;
  --fvid-gap:clamp(16px,2vw,26px);

  /* --dur do core é .9s: certo para entrada de dobra, lento para a capa
     responder ao ponteiro. Duração de interação é local. */
  --fvid-tempo:.55s;
  --fvid-play-size:46px;
  --fvid-entrada:.5s;
  --fvid-veil-mix:88%;
  --fvid-cromo:108px;
  --fvid-pw:16;
  --fvid-ph:9;
}

/* A primitiva .sec-head do core centra a PRÓPRIA caixa; os filhos dela
   continuam com o max-width de 22ch e 60ch encostado à esquerda. Onze
   componentes escrevem estas duas linhas (grid-equipe, acordeao-faq,
   carrossel-anel-3d, planos-honorarios…) — está anotado para promoção. */
.fvid-head .sec-title,
.fvid-head .sec-lead{margin-inline:auto}

.fvid-grade{
  display:grid;
  grid-template-columns:repeat(auto-fill,minmax(var(--fvid-min),1fr));
  gap:var(--fvid-gap);
  margin-block-start:clamp(34px,5vh,56px);
}
/* Sem isto, um título longo dentro de uma coluna 1fr faz a coluna crescer
   além da fração — o mínimo automático de um item de grade é o conteúdo. */
.fvid-item{min-inline-size:0}

/* ---------------------------------------------------------------- o card */
/* É um <button>, não um <div> com onclick: Tab, Enter, Espaço e o anúncio de
   "botão" vêm de graça. O destino é um reprodutor NESTA página, e é por isso
   que não é <a> — âncora promete navegação. */
.fvid-card{
  position:relative;
  display:block;
  inline-size:100%;
  padding:0;
  border:1px solid var(--rule);
  border-radius:var(--radius-media);
  overflow:hidden;
  text-align:start;
  /* O <button> nativo pinta o cromo do sistema por baixo, e `color-scheme:
     only light` (core/tokens.css) o deixa CINZA-CLARO em toda parte. O fundo
     explícito e o appearance zerado tiram os dois — ver o comentário do .btn
     em core/base.css, onde o mesmo caso já custou um botão invisível. */
  background:var(--dark-2);
  -webkit-appearance:none;appearance:none;
  /* O <button> alinha o conteúdo como texto: sem isto a capa ganha um filete
     de descida embaixo. Os blocos internos declaram a própria entrelinha. */
  line-height:0;
  transition:border-color var(--fvid-tempo) var(--ease);
}
.fvid-card:hover{border-color:var(--rule-2)}

.fvid-capa{
  inline-size:100%;
  /* `block-size:auto` NÃO é redundante, e a falta dele foi medida: o markup
     declara width="1600" height="900" no <img> para a caixa já estar
     reservada antes de a imagem existir, e o atributo `height` vira uma
     ALTURA DEFINIDA de 900px. Com altura definida, `aspect-ratio` não tem o
     que resolver e é ignorado em silêncio — a capa saía 348x900 em vez de
     348x196, e o card com 902px de altura. Quem apagar esta linha reabre o
     buraco; quem apagar os atributos do markup perde a reserva de caixa. */
  block-size:auto;
  aspect-ratio:var(--fvid-pw) / var(--fvid-ph);
  object-fit:cover;
  /* O brilho em repouso deixa a fileira coesa; sob o ponteiro o card acende
     sem virar outra imagem. */
  filter:brightness(.9);
  transition:filter var(--fvid-tempo) var(--ease);
}
/* :focus-visible junto do :hover — quem chega pelo teclado vê o mesmo card
   acender que quem chega pelo mouse. */
/* HOVER NÃO MEXE NA IMAGEM (CLAUDE.md §6, regra de 2026-09-29). O zoom de
   foto sob o ponteiro saiu: escala e deslocamento de mídia no hover mexem
   em recorte e composição, e é o que quebra a página quando o componente
   é colado noutro lugar. O retorno ficou em cor e brilho, que não mudam
   a geometria de nada. */
.fvid-card:hover .fvid-capa,
.fvid-card:focus-visible .fvid-capa{filter:brightness(1)}

/* ---------------------------------------------------------------- play */
/* ÓBVIO SEM SER ADESIVO. O alvo do clique é o CARD INTEIRO, então o anel não
   precisa ser o alvo — ele é só o sinal de que ali tem vídeo. Por isso é
   pequeno, de contorno e no canto, em vez de um disco branco de 84px no
   meio da foto: um triângulo dentro de um anel sobre um quadro parado se lê
   como vídeo à primeira olhada e não cobre o enquadramento.

   Nasce VISÍVEL, e é o que dispensa o `@media(hover:none)` que o irmão
   midia/galeria-scroll-horizontal precisa para o distintivo dele: em toque
   não há hover, e um sinal que só existe no hover nunca apareceria.

   `backdrop-filter` sem máscara em gradiente aqui é legítimo: a regra do §6
   é contra a CAIXA RETA, que produz borda dura e lê "chapado". Num disco de
   contorno não há borda reta a endurecer. Precedentes: .reel-play do
   midia/showreel-expansivel e .hgal-badge do irmão. */
.fvid-play{
  position:absolute;
  inset-block-start:14px;
  inset-inline-end:14px;
  z-index:2;
  display:grid;
  place-items:center;
  inline-size:var(--fvid-play-size);
  block-size:var(--fvid-play-size);
  border-radius:var(--radius-pill);
  border:1px solid color-mix(in srgb,var(--light) 52%,transparent);
  background:color-mix(in srgb,var(--dark) 34%,transparent);
  backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);
  color:var(--light);
  transition:background-color var(--fvid-tempo) var(--ease),
             border-color var(--fvid-tempo) var(--ease),
             color var(--fvid-tempo) var(--ease),
             transform var(--fvid-tempo) var(--ease);
}
/* Aceso: fundo de marca e glifo escuro, a mesma dupla do .btn-primary. */
.fvid-card:hover .fvid-play,
.fvid-card:focus-visible .fvid-play{
  background:color-mix(in srgb,var(--accent) 84%,transparent);
  border-color:var(--accent);
  color:var(--dark);
}
/* (Acima:) sem salto no hover (CLAUDE.md §6, 2026-09-29): o disco acende e não
   cresce, a mesma regra do .btn do core — botão não salta nem move. */
.fvid-play svg{
  inline-size:38%;
  /* O centro óptico de um triângulo não é o centro geométrico: centrado pelo
     cálculo ele parece deslocado para a esquerda. */
  margin-inline-start:6%;
}

/* O anel é a promessa de um gesto que só o script atende. Sem JavaScript ele
   sai de cena, e o card volta a ser o que de fato é: uma linha de índice com
   capa, título e duração. `scripting: none` é a mesma consulta que o
   core/motion.css usa para devolver a página sem script — medida, não
   hipótese (Chrome 120, Firefox 113, Safari 17). */
@media (scripting: none){.fvid-play{display:none}}

/* Some o zoom da capa e o salto do anel; ficam cor e opacidade, que não são
   deslocamento — sem elas o card deixaria de responder ao ponteiro. */
@media (prefers-reduced-motion: reduce){
  .fvid-capa{transition-duration:.01ms}
}

/* ---------------------------------------------------------------- legenda */
/* DENTRO da capa, ancorada embaixo, com véu em gradiente MASCARADO — a regra
   de forma do §6. Título e duração abaixo da foto transformariam uma peça
   gráfica em duas, e fariam a linha de base dançar entre um card de título
   curto e um de três linhas. */
.fvid-legenda{
  position:absolute;
  inset-inline:0;
  inset-block-end:0;
  z-index:2;
  display:flex;
  flex-direction:column;
  gap:6px;
  /* O RESPIRO DE CIMA É A MEDIDA CARA DESTA PEÇA, e o número saiu de medição.
     Numa coluna de 348px a capa 16:9 tem 197px de altura, e a legenda ocupa
     o que ocupa: a 54px de respiro superior ela passava de 70% da capa e a
     dobra virava uma parede de véu. A 28px, com título de duas linhas, ela
     fecha em ~100px — metade da capa, dos quais só os 44% de baixo são véu
     opaco (o resto é a máscara em degradê apagando). É a mesma proporção do
     .hgal-cap do irmão, que trabalha numa capa 4:3 e por isso pode ser mais
     generoso. Quem subir este valor devolve a parede. */
  padding:28px 20px 14px;
  /* Duas paradas mais fortes que a receita do §6 (`.9 em 44%`), e o motivo é
     medido: com a legenda em 100px, o título ocupa a faixa entre 55% e 80%
     da caixa — dentro da zona de esmaecimento. Nos 44% originais ele caía
     sobre um véu de alfa baixo, e num quadro claro (o vinhedo ao entardecer
     do preview) a leitura ficava marginal. Empurrar a opacidade para 60% da
     altura resolve sem virar tarja: o topo continua transparente. */
  background:linear-gradient(to top,
    rgba(var(--dark-rgb),.95) 0%,
    rgba(var(--dark-rgb),.72) 56%,
    transparent 100%);
  backdrop-filter:blur(3px);-webkit-backdrop-filter:blur(3px);
  mask-image:linear-gradient(to top,#000 0%,rgba(0,0,0,.94) 60%,transparent 100%);
  -webkit-mask-image:linear-gradient(to top,#000 0%,rgba(0,0,0,.94) 60%,transparent 100%);
}

/* Sem corte de linha de propósito: título truncado no meio de uma palavra é
   pior que título de três linhas. O que segura o tamanho é o teto de 12
   palavras do padrão editorial — acima disso a legenda come metade da capa,
   e o lugar de resolver isso é a copy, não o CSS. */
.fvid-titulo{
  font-family:var(--display);
  font-weight:700;
  font-size:clamp(14px,1.05vw,16px);
  line-height:1.28;
  letter-spacing:-.015em;
  color:var(--light);
}

.fvid-meta{
  display:flex;
  flex-wrap:wrap;
  align-items:baseline;
  justify-content:space-between;
  gap:4px 14px;
  font-size:10.5px;
  line-height:1.3;
  letter-spacing:.14em;
  text-transform:uppercase;
}
.fvid-serie{color:color-mix(in srgb,var(--light) 60%,transparent)}
/* A duração é a informação que decide o clique, então lê mais forte que o
   rótulo de série. `nowrap` porque "11 min" quebrado em duas linhas dentro de
   uma legenda de 11px é ilegível. */
.fvid-dur{
  color:color-mix(in srgb,var(--light) 88%,transparent);
  white-space:nowrap;
}

/* ---------------------------------------------------------------- diálogo */
/* A casca vem da .dialog-casca do core, declarada ANTES desta classe no
   markup: é ela que zera padding, borda, fundo e os limites de tamanho que o
   navegador dá de graça ao <dialog>, e que pinta o ::backdrop com --veil.
   Aqui fica só o que é FORMA desta peça.

   O <dialog> nasce `display:none` na folha do agente do usuário e só aparece
   com [open]. Escrever `.fvid-dialog{display:grid}` sem o [open] deixaria o
   reprodutor visível o tempo todo, com a página rolando por baixo — é a mesma
   armadilha do §6.5, na versão do elemento nativo. */
.fvid-dialog{
  inline-size:100%;
  block-size:100%;
  /* `hidden`, contra o `visible` da casca: o diálogo é o PALCO, e com um
     palco maior que a janela (--fvid-cromo mal calibrado, legenda em duas
     linhas) o que sobra fica dentro da tela em vez de pintar por fora dela. */
  overflow:hidden;
  /* Véu MAIS ESCURO que os 78% da casa, e isto é desenho: vídeo pede sala
     escura. O grau só se vê quando há dobra clara atrás — sobre fundo escuro
     os dois dão o mesmo pixel. Terceiro componente de vídeo a chegar nos
     mesmos 88% (showreel, depoimento em vídeo): anotado para virar token.
     O ::backdrop herda custom property do elemento que o originou, e é por
     isso que declarar --veil AQUI basta para a primitiva do core pintar o véu
     desta peça — uma regra .fvid-dialog::backdrop só para trocar a cor
     traria de volta a duplicação que a primitiva veio resolver. */
  --veil:color-mix(in srgb,var(--dark) var(--fvid-veil-mix),transparent);
}
.fvid-dialog[open]{display:grid;place-items:center}

/* O PALCO. A largura sai de três limites, e o terceiro é o que faz o quadro
   caber em tela baixa sem `max-block-size` nem letterbox: a largura é capada
   para que a altura 16:9 dela mais o cromo caibam na janela.
     1440x900  ->  min(1354, 1280, 1408) = 1280, quadro de 720
     1440x420  ->  min(1354, 1280,  554) =  554, quadro de 312
     390x844   ->  min( 367, 1280, 1308) =  367, quadro de 206
   A linha em `vh` fica antes da em `dvh` de propósito: navegador que não
   entende `dvh` descarta a segunda e mantém a primeira. */
.fvid-palco{
  position:relative;
  display:flex;
  flex-direction:column;
  gap:14px;
  inline-size:min(94vw,1280px,calc((100vh - var(--fvid-cromo)) * var(--fvid-pw) / var(--fvid-ph)));
  inline-size:min(94vw,1280px,calc((100dvh - var(--fvid-cromo)) * var(--fvid-pw) / var(--fvid-ph)));
  /* Nada entra seco (§5): a entrada carrega blur indo a zero. O transform
     mora AQUI e não num nó com [data-rv] — o diálogo é filho direto da
     seção, fora de todo invólucro de reveal, justamente para o
     `[data-rv].in{transform:none}` do core não apagá-lo em silêncio. */
  opacity:0;
  filter:blur(16px);
  transform:translateY(14px) scale(.985);
}
.fvid-palco.is-entrando{
  opacity:1;
  filter:blur(0);
  transform:none;
  transition:opacity var(--fvid-entrada) var(--ease),
             filter var(--fvid-entrada) var(--ease),
             transform var(--fvid-entrada) var(--ease);
}
/* O diálogo CONTINUA abrindo — ele foi pedido. Some só a coreografia: o palco
   nasce no lugar final, e o script nem chega a pôr a classe. */
@media (prefers-reduced-motion: reduce){
  .fvid-palco{opacity:1;filter:none;transform:none}
  .fvid-palco.is-entrando{transition:none}
}

.fvid-palco-cap{
  display:flex;
  flex-wrap:wrap;
  align-items:baseline;
  gap:4px 12px;
  /* Espaço do botão de fechar, que está fora do fluxo no canto de cima. */
  padding-inline-end:60px;
  min-block-size:44px;
}
.fvid-palco-serie{
  font-size:11px;
  letter-spacing:.14em;
  text-transform:uppercase;
  color:var(--fg-muted);
  white-space:nowrap;
}
.fvid-palco-titulo{
  font-family:var(--display);
  font-weight:700;
  font-size:clamp(15px,1.5vw,20px);
  line-height:1.3;
  letter-spacing:-.02em;
  color:var(--fg);
}

.fvid-quadro{
  position:relative;
  inline-size:100%;
  aspect-ratio:var(--fvid-pw) / var(--fvid-ph);
  border-radius:var(--radius-media);
  overflow:hidden;
  background:var(--dark);
}
.fvid-video{
  inline-size:100%;
  block-size:100%;
  /* `contain` e não `cover`: um vídeo vertical ou 4:3 no quadro 16:9 aparece
     inteiro, com tarja, em vez de ter as pontas cortadas. */
  object-fit:contain;
  display:block;
  background:var(--dark);
}

/* Primeiro focável do diálogo por ordem de DOM, e no canto por CSS — ver o
   comentário do markup. */
.fvid-fechar{
  position:absolute;
  inset-block-start:0;
  inset-inline-end:0;
  z-index:2;
  display:grid;
  place-items:center;
  inline-size:44px;
  block-size:44px;
  padding:0;
  border-radius:var(--radius-pill);
  border:1px solid var(--rule-2);
  background:none;
  -webkit-appearance:none;appearance:none;
  color:var(--fg-2);
  transition:color var(--fvid-tempo) var(--ease),border-color var(--fvid-tempo) var(--ease);
}
.fvid-fechar:hover{color:var(--accent);border-color:var(--accent)}
.fvid-fechar svg{
  inline-size:42%;
  stroke:currentColor;
  stroke-width:1.7;
}

/* ------------------------------------------- variação: vertical 9:16 */
/* .fvid--vertical na seção: a série é de cortes verticais — reels, corte
   de live, depoimento gravado no celular. A capa e o quadro do diálogo
   viram 9:16 pelos dois parafusos de proporção, e a coluna mínima cai para
   a grade acomodar quatro por fileira no lugar de três.
     coluna de 1096px  ->  4 colunas de ~254px (capa de 452px de altura)
     celular (abaixo)  ->  2 colunas, nunca 1: uma capa 9:16 na largura do
                           celular mede 620px e a faixa vira uma rolagem de
                           quatro telas
   O palco do diálogo já sabia lidar: a conta de largura usa a razão, e a
   1440x900 o quadro sai com ~445x792 — a altura da janela manda.
   Referência: os cortes de motion em 9:16 do portfólio do Dudes Becker. */
.fvid--vertical{
  --fvid-pw:9;
  --fvid-ph:16;
  --fvid-min:220px;
}
/* O título de uma capa estreita quebra em mais linhas: 12 palavras numa
   coluna de 254px são cinco linhas. O teto editorial desta variação é 8. */
.fvid--vertical .fvid-titulo{font-size:clamp(13.5px,1vw,15px)}

/* ---------------------------------------------------------------- mobile */
/* A capa fica 16:9 em toda largura, e isso não é esquecimento: a capa É um
   quadro do vídeo, e recortá-la para 3:2 no celular faria a peça mostrar um
   enquadramento que o vídeo não tem. O que muda é o respiro.

   Os dois parafusos são redeclarados em .fvid, e não no elemento que os lê —
   escritos no próprio .fvid-play e .fvid-palco eles venceriam o valor que o
   consumidor põe na seção, e o parafuso pareceria não funcionar. Mesma forma
   do --display-xl do core. Quem sobrescrever um deles sobrescreve os dois. */
@media (max-width: 680px){
  .fvid{--fvid-play-size:40px;--fvid-cromo:92px}
  /* Só o respiro LATERAL muda: 20px de cada lado come 11% de uma capa de
     350px. O de cima segue os 28px do desktop — a coluna do celular tem
     praticamente a mesma largura da coluna de três (350 contra 348), então a
     legenda tem de fechar na mesma altura, e um valor maior aqui devolveria
     a parede de véu exatamente onde a tela é menor. */
  .fvid-legenda{padding:28px 16px 15px;gap:7px}
  .fvid-play{inset-block-start:11px;inset-inline-end:11px}
  .fvid-palco{gap:11px}
}
/* A vertical no celular: duas colunas de ~167px em 390. --fvid-min aqui é
   o que garante as duas (2 × 150 + 16 de vão cabem em 350). O respiro de
   cima da legenda cai junto, porque a capa estreita tem menos largura para
   o mesmo título. */
@media (max-width: 680px){
  .fvid--vertical{--fvid-min:150px}
  .fvid--vertical .fvid-legenda{padding:22px 12px 12px}
}
