/*
 * cms.css — evita o "flash" das listas antes do conteudo carregar.
 *
 * O HTML exportado do Webflow traz, em cada lista de CMS, um card-modelo com imagem
 * placeholder cinza e a mensagem "No items found.". O cms.js troca isso pelo conteudo
 * real, mas precisa buscar o content/cases.json primeiro — o que leva uns 450ms em
 * rede real. Nesse intervalo o visitante via a versao vazia e depois um "pop" com o
 * conteudo certo.
 *
 * Aqui o estado inicial fica invisivel e entra com fade quando os dados estao prontos.
 *
 * O gatilho e a classe .cms-pending, que o proprio cms.js coloca no <html> assim que
 * carrega. Se o cms.js nao rodar (erro de rede, JS desligado), a classe nunca aparece
 * e as listas ficam visiveis normalmente — ou seja, a falha e pro lado seguro: no pior
 * caso volta o flash antigo, nunca uma pagina em branco.
 */

html.cms-pending .cases_collection > .w-dyn-items,
html.cms-pending .cases_collection > .w-dyn-empty,
html.cms-pending .preview-collection > .w-dyn-items,
html.cms-pending .preview-collection > .w-dyn-empty,
html.cms-pending .blogs-collection-wrapper > .w-dyn-items,
html.cms-pending .blogs-collection-wrapper > .w-dyn-empty,
html.cms-pending .nex-case_wrapper > .w-dyn-items,
html.cms-pending .nex-case_wrapper > .w-dyn-empty {
  opacity: 0;
}

html.cms-pending [data-cms-ready] > .w-dyn-items,
html.cms-pending [data-cms-ready] > .w-dyn-empty {
  opacity: 1;
  transition: opacity 0.4s ease;
}

/*
 * ---------------------------------------------------------------------------
 * GRID DA GALERIA — por formato, nao por posicao
 * ---------------------------------------------------------------------------
 *
 * O CSS que veio do Webflow (no <style> do detail_cases.html) distribui as vagas
 * por posicao, num ciclo fixo de tres: 1a inteira, 2a e 3a metades, e repete.
 * Isso obrigava a sequencia das imagens a seguir o ciclo — fora dele, a imagem
 * caia numa vaga de proporcao diferente e era cortada pelo object-fit.
 *
 * Aqui a vaga vem do campo "layout" de cada item no cases.json:
 *
 *   full        linha inteira        (16:9,  ex. 2000x1125)
 *   half        meia coluna         (8:9,   ex. 1000x1125)
 *   split       meia coluna partida (16:9,  ex. 1000x552) — dois seguidos
 *               empilham dentro da mesma meia coluna
 *
 * Assim a ordem na pagina e simplesmente a ordem do array no JSON: reordenar nao
 * exige recalcular posicao nem renomear arquivo.
 *
 * Estas regras tem especificidade maior que as do Webflow (html + duas classes +
 * atributo), por isso vencem sem precisar de !important.
 */
html.cms-pending .cms-list._01 > [data-layout="full"] {
  grid-column: 1 / 5;
}

html.cms-pending .cms-list._01 > [data-layout="half"] {
  grid-column: span 2;
}

html.cms-pending .cms-list._01 > [data-layout="split-group"] {
  grid-column: span 2;
  display: flex;
  flex-direction: column;
  gap: 0.5em; /* mesmo gap do grid, pra divisao interna casar com o resto */
}

/* Um "split" sozinho (numero impar deles) ocupa a meia coluna inteira. */
html.cms-pending .cms-list._01 > [data-layout="split"] {
  grid-column: span 2;
}

/* No mobile o Webflow joga tudo em coluna unica; o agrupador acompanha. */
@media screen and (max-width: 479px) {
  html.cms-pending .cms-list._01 > [data-layout] {
    grid-column: 1 / -1;
  }
}

/*
 * Imagens da galeria do case.
 *
 * O .project_image tem height:100% dentro de um pai de altura automatica — ou seja,
 * a altura vem do proprio arquivo de imagem. Antes dela chegar, o container tem
 * altura zero e a pagina "pula" quando cada imagem carrega.
 *
 * A proporcao exata de cada item e aplicada pelo cms.js a partir dos campos "w" e
 * "h" do JSON. O 16:9 aqui e so a rede de seguranca para itens sem essas medidas.
 */
html.cms-pending .project_image img[data-cms-img=""] {
  opacity: 0;
  aspect-ratio: 16 / 9;
  height: auto;
}

/* Video da galeria ocupa o mesmo espaco que uma imagem ocuparia. */
html.cms-pending .project_image video {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}

html.cms-pending .project_image img[data-cms-img="ready"] {
  opacity: 1;
  transition: opacity 0.6s ease;
}

/*
 * As primeiras imagens do case (marcadas com data-cms-eager) entram SEM fade.
 * Elas tem prioridade alta de download, entao a intencao e que a pagina abra com
 * elas ja no lugar — um fade aqui seria justamente o "efeito marcante" que a gente
 * quer evitar na abertura. O fade fica reservado para as imagens de baixo, que
 * chegam durante a rolagem, onde a entrada suave ajuda.
 */
html.cms-pending .project_image img[data-cms-eager][data-cms-img="ready"] {
  transition: none;
}

/* Quem pediu menos animacao no sistema recebe o conteudo direto, sem o fade. */
@media (prefers-reduced-motion: reduce) {
  html.cms-pending [data-cms-ready] > .w-dyn-items,
  html.cms-pending [data-cms-ready] > .w-dyn-empty,
  html.cms-pending .project_image img[data-cms-img="ready"] {
    transition: none;
  }
}
