/*
Theme Name:  Neve – Real Granito
Theme URI:   https://realgranito.pt
Description: Child theme do Neve para realgranito.pt. Repõe o que no site original vinha do Neve Pro (barra de contactos, banners no cabeçalho, barra vermelha, rodapé) e dos plugins Editor Plus / Emage Hover Effects (classes de estilo, efeitos hover), para que as páginas em Elementor (versão gratuita) fiquem iguais ao original.
Author:      nologic
Template:    neve
Version:     1.0.0
Text Domain: neve-realgranito
*/

/* ------------------------------------------------------------------ */
/* Additional CSS do Customizer do site original (wp-custom-css)       */
/* ------------------------------------------------------------------ */
.tituloprincipal { font-family: Montserrat; font-weight: 400; padding-top: 2%; padding-bottom: 7%; }
.sliderimage { box-shadow: black 0px 1px 10px; }
#content.neve-main > .container > .row > .col { margin-bottom: 0px; }
.header--row.header-bottom { border-bottom: 4px solid black; z-index: 100; }
.item--inner.builder-item--logo, .site-logo, .skip-lazy, .skip-lazy:hover { z-index: 10000; }
.materiais:hover { opacity: 80%; cursor: pointer; }

/* ------------------------------------------------------------------ */
/* Cabeçalho: o que era Neve Pro (contactos, 2.º HTML, 3 filas)        */
/* ------------------------------------------------------------------ */
/* fila de topo: lista de contactos (era o componente "Contact" do Pro) */
.rg-topbar { background: #fff; height: 30px; display: none; }
@media (min-width: 960px) { .rg-topbar { display: block; } }
.rg-topbar .container { height: 100%; }
.rg-topbar ul { list-style: none; margin: 0; padding: 0; display: flex; justify-content: center; align-items: center; height: 100%; font-size: 0.8em; font-weight: 300; line-height: 1.6em; color: #000; }
.rg-topbar li { display: flex; align-items: center; }
.rg-topbar li { margin-left: 10px; }
.rg-topbar li:not(:first-child) { margin-left: 50px; }
.rg-topbar li svg { width: 0.8em; height: 0.8em; fill: #000; margin-right: 5px; }
.rg-topbar li a { color: #000; text-decoration: none; }
/* fila principal: logótipo, menu, dois banners (era 1 logo + 2 custom_html do Pro).
   Tamanhos/padding do logótipo e tipografia do menu vêm dos theme mods (config/theme-mods.json). */
.header-main-inner { background: #fff; }
@media (min-width: 960px) { .header-main-inner { height: 75px; } }
/* o logótipo (328x713, 52 px de largura em desktop) sai da fila de 75 px e sobrepõe-se às barras de contactos e vermelha, como no original */
@media (min-width: 960px) { .builder-item--logo .site-logo { overflow: visible; } .builder-item--logo .site-logo img { position: relative; z-index: 10000; } }
/* em mobile/tablet o original mostrava outro logótipo (só a figura, Logo_RealGranito-3-1, 120 px) — era o 2.º componente Logo do Pro;
   aqui vai dentro do custom_html (fila principal mobile, à esquerda) e os banners escondem-se */
.builder-item--custom_html .nv-html-content .rg-logo-mobile { display: none; }
@media (max-width: 959px) {
  .builder-item--custom_html .nv-html-content .rg-banners { display: none; }
  .builder-item--custom_html .nv-html-content .rg-logo-mobile { display: block; padding: 10px 0; }
  .builder-item--custom_html .nv-html-content .rg-logo-mobile img { max-width: 120px; height: auto; display: block; }
}
/* os dois banners: no original cada um estava numa coluna de 2/12 do cabeçalho (≈197 px a 1366 px), com width:250px */
@media (min-width: 960px) {
  .builder-item--custom_html .nv-html-content .rg-banners { margin: 0; display: flex; gap: 44px; align-items: center; justify-content: flex-end; }
  .builder-item--custom_html .nv-html-content .rg-banners a { flex: 0 1 calc(100vw / 6 - 44px); max-width: 250px; }
  .builder-item--custom_html .nv-html-content .rg-banners img { width: 250px; max-width: 100%; height: auto; display: block; }
}
/* no original o logótipo ocupava 1/12 do cabeçalho e o menu começava logo a seguir (col-1 + col-7 do Neve Pro) */
@media (min-width: 960px) {
  .header-main-inner .hfg-slot.left > .builder-item:first-child { flex: 0 0 calc(100vw / 12); min-width: 0; }
  .header-main-inner .hfg-slot.left > .builder-item.has-nav { margin-left: 0; }
}
.builder-item--primary-menu .nav-menu-primary > .nav-ul li > a { color: #000; }
.builder-item--primary-menu .nav-menu-primary > .nav-ul li:hover > a,
.builder-item--primary-menu .nav-menu-primary > .nav-ul li.current-menu-item > a,
.builder-item--primary-menu .nav-menu-primary > .nav-ul li.current_page_item > a { color: #ab2e2e; }
.builder-item--primary-menu .nav-menu-primary > .nav-ul li > a:after { background-color: #ab2e2e; }
/* fila de baixo: barra vermelha fixa de 15 px com risca preta (era uma fila do Pro com um HTML vazio) */
.hfg_header .header-bottom-inner, .rg-redbar { background-color: #ab2e2e; }
.rg-redbar { height: 19px; border-bottom: 4px solid #000; box-sizing: border-box; display: none; }   /* 15 px vermelho + 4 px preto */
@media (min-width: 960px) { .rg-redbar { display: block; } }
/* filas fixas (era o "is_sticky" do Neve Pro nas filas de topo e de baixo): JS em functions.php põe body.rg-stuck ao rolar */
.rg-sticky-placeholder { display: none; }
@media (min-width: 960px) {
  body.rg-stuck .rg-topbar { position: fixed; top: 0; left: 0; right: 0; z-index: 101; }
  body.rg-stuck .rg-redbar { position: fixed; top: 30px; left: 0; right: 0; z-index: 100; }
  body.rg-stuck .rg-sticky-placeholder { display: block; }
}

/* ------------------------------------------------------------------ */
/* Rodapé (fila de baixo preta, copyright cinzento, menu Montserrat 200)*/
/* ------------------------------------------------------------------ */
.footer-bottom-inner { background-color: #000; }
@media (min-width: 960px) { .footer-bottom-inner { height: 40px; overflow: hidden; } .footer-bottom-inner > .container { height: 100%; display: flex; align-items: center; } .footer-bottom-inner > .container > .row { flex: 1 1 100%; } }   /* a fila (49 px) centra-se na faixa de 40 px, como no original */
.footer-bottom-inner, .footer-bottom-inner a:not(.button) { color: #fff; }
/* grelha do original: copyright em col-2 com offset-1 (alinhado à direita, termina a 25 %), menu em col-9 a seguir */
@media (min-width: 960px) {
  .footer-bottom-inner .row { grid-template-columns: 25% 1fr auto; }
  .footer-bottom-inner .hfg-slot:first-child .builder-item { text-align: right; }
}
/* copyright: 0.7em, peso 200, cinzento (era o componente "Copyright" do builder, agora footer_copyright_content) */
.footer-bottom-inner .builder-item.cr, .footer-bottom-inner .builder-item.cr * { color: #c2c2c2; font-weight: 200; }
/* (o .item--inner do Neve repõe font-size/text-align via variáveis, por isso é aí que se define) */
@media (min-width: 960px) {
  .footer-bottom-inner .builder-item.cr .item--inner { --fontsize: 0.7rem; --textalign: right; --justify: flex-end; font-size: 0.7rem; text-align: right; }
  .footer-bottom-inner .builder-item.cr .component-wrap { justify-content: flex-end; }
}
.footer-bottom-inner .builder-item.cr .component-wrap { line-height: 1.6em; }
/* menu do rodapé: tipografia nos theme mods (Montserrat 200, 0.7em) */
#footer-menu > li > a:after { background-color: #ab2e2e; }

/* ------------------------------------------------------------------ */
/* Tipografia global do original (Customizer > Typography, desktop)     */
/* ------------------------------------------------------------------ */
/* body 15/16 px lh 1.6, h1 75 px, h2 50 px, h3-h6 defaults do Neve 3.0.2: theme mods neve_typeface_general / neve_h1_… … neve_h6_… */
h1, h2, h3, h4, h5, h6, .elementor-heading-title { font-family: Montserrat, var(--nv-fallback-ff); }
/* o widget Heading do Elementor impõe line-height 1 e o peso da tipografia "Primary" do kit; repõem-se os valores do Neve por nível */
.elementor-widget-heading h1.elementor-heading-title { font-weight: 500; line-height: 1.6em; }
.elementor-widget-heading h2.elementor-heading-title { font-weight: 300; line-height: 1.6em; }
.elementor-widget-heading :is(h3, h4, h5, h6).elementor-heading-title { font-weight: 600; line-height: 1.68421; }

/* título da página (só /projetos/ o mostra): métricas do Neve 3.0.2 */
.single-page-container .nv-page-title-wrap.nv-big-title { margin-top: 30px; }
.single-page-container .nv-page-title-wrap.nv-big-title .nv-page-title { padding-bottom: 10px; margin-bottom: 20px; }
.single-page-container .nv-page-title-wrap.nv-big-title .nv-page-title h1 { line-height: 1.3em; margin-bottom: 0; }

/* ------------------------------------------------------------------ */
/* Classes do Editor Plus / do conteúdo original usadas nas páginas     */
/* ------------------------------------------------------------------ */
/* títulos que no original eram <p> (Obras à medida, Catálogos): herdam a fonte do wrapper (classes do autor / eplus.css)
   e mantêm a line-height do parágrafo (25.6px), como no original — o padding do Editor Plus fica dentro da mesma caixa */
.e-con .elementor-element.elementor-widget.elementor-widget-heading.rg-from-p { margin-block-end: 20px; }   /* (0,5,0): ganha à regra geral dos títulos, .8rem */
.elementor-widget.rg-from-p .elementor-heading-title { font: inherit; line-height: 25.6px; text-align: inherit; }
/* fonte de ícones do Editor Plus (setas de navegação em Obras à medida): ficheiros originais do plugin em fonts/ */
@font-face { font-family: 'eplus-icon'; src: url('fonts/eplus-icon.eot'); src: url('fonts/eplus-icon.eot#iefix') format('embedded-opentype'), url('fonts/eplus-icon.ttf') format('truetype'), url('fonts/eplus-icon.woff') format('woff'); font-weight: normal; font-style: normal; font-display: block; }
[class^="eplusicon-"], [class*=" eplusicon-"] { font-family: 'eplus-icon' !important; speak: never; font-style: normal; font-weight: normal; font-variant: normal; text-transform: none; line-height: 1; -webkit-font-smoothing: antialiased; }
.eplusicon-angle-double-down:before { content: "\f103"; } .eplusicon-angle-double-up:before { content: "\f102"; }
.eplusicon-plus1:before { content: "\f067"; } .eplusicon-minus1:before { content: "\f068"; }
.rg-ep-icon a { text-decoration: none; }
/* o Gutenberg empilhava as colunas até 781 px (media-text até 600): breakpoints do kit mobile=600 / mobile_extra=781.
   O CSS compilado do Elementor mantém 767 px fixos na regra do flex-wrap dos contentores -> a faixa 768-781 é coberta
   aqui (o --width por contentor vem do CSS da página, mais específico) */
@media (min-width: 601px) and (max-width: 781px) { .e-con.e-flex { --flex-wrap: var(--flex-wrap-mobile); } }
/* wp-block-columns do original: margin-bottom 1.75em (Gutenberg) e .alignwide = 70vw centrado (Neve style-legacy) */
.elementor-element.rg-columns { margin-bottom: 1.75em; }
/* colunas dentro de colunas: no original as margens colapsavam (block layout); em flex não, por isso anula-se a interior */
.elementor-element.rg-columns > .e-con > .elementor-element.rg-columns:last-child { margin-bottom: 0; }
.elementor-element.rg-alignwide { --width: 70vw; width: 70vw; max-width: 70vw; margin-left: calc(50% - 35vw); }
/* (para contentores de topo o Elementor impõe max-width: min(100%, var(--width)) — daí o 100% ser anulado com uma regra mais específica) */
[data-elementor-id] > .e-con.rg-alignfull { --width: 100vw; width: 100vw; max-width: 100vw; margin-left: calc(50% - 50vw); --margin-left: calc(50% - 50vw); --margin-right: 0; }   /* vídeo da home */
/* wp-block-media-text (páginas dos materiais): imagem a 100 % da coluna, conteúdo com padding 0 8 % */
.elementor-element.rg-mt-content { padding: 0 4%; }   /* 8 % da coluna = 4 % da linha (o % refere-se ao contentor) */
.rg-mt-media img { width: 100%; }
/* classes de tamanho do Gutenberg que o Elementor não carrega (as outras vêm dos global styles do core) */
.has-huge-font-size { font-size: 42px; } .has-normal-font-size { font-size: 16px; }
/* menu principal: no original os itens tinham margin-right 26 px e padding 10px 0, sem padding no link; hover a vermelho sem opacidade */
.header-main-inner .builder-item--primary-menu .nav-ul > li { margin: 0 26px 0 0; padding: 10px 0; }
.header-main-inner .builder-item--primary-menu .nav-ul > li > .wrap { padding: 0; }
.builder-item--primary-menu { --hovertextcolor: #ab2e2e; }   /* o estilo "full height" do Neve actual impõe var(--hovertextcolor) !important */
/* no Neve 3.0.2 o hover era texto vermelho + risca de 2 px por baixo (largura do texto, 0.3 s); no actual é um bloco de cor */
.header-main-inner .nav-ul { margin-left: 0; margin-right: 0; }   /* (o Neve actual recua a lista em metade do espaçamento) */
.builder-item--primary-menu .m-style > ul > li > .wrap::after { display: none; }   /* o bloco do Neve actual */
.builder-item--primary-menu .style-full-height > ul > li > .wrap > a { position: relative; }
.builder-item--primary-menu .style-full-height > ul > li > .wrap > a::after { content: ""; position: absolute; display: block; left: 0; right: auto; top: auto; bottom: 0; width: 0; height: 2px !important; background-color: #ab2e2e; opacity: 1; z-index: auto; transition: opacity .3s, width .3s; }
.builder-item--primary-menu .style-full-height > ul > li > .wrap:hover > a::after { width: 100%; }
.builder-item--primary-menu .style-full-height > ul > li > .wrap:hover > a, .builder-item--primary-menu .nav-ul li:hover > .wrap > a { color: #ab2e2e; opacity: 1; }
.builder-item--primary-menu .nav-ul a:hover { opacity: 1; }
/* margens do Neve (h: .8rem, p: 20px) que o Elementor anula nos widgets (`.e-con .elementor-widget.elementor-widget { margin-block-end: 0 }`) */
.e-con .elementor-widget.elementor-widget-heading.elementor-widget-heading { margin-block-end: .8rem; }
.elementor-widget-text-editor p, .elementor-widget-text-editor ul, .elementor-widget-text-editor ol { margin-bottom: 20px; }
/* listas como no Neve 3.0.2: indent 20 px, marcador circle, li margin-top 10 px; margem 20px 0 SÓ nas listas que eram filhas
   directas do conteúdo (.nv-content-wrap > ul -> classe rg-toplist); a 1.ª lista de um bloco vem a seguir a um título (.8rem)
   e no original as margens colapsavam */
.elementor-widget-text-editor ul, .elementor-widget-text-editor ol { margin: 0; padding-left: 20px; list-style-type: circle; }
.elementor-widget-text-editor ol { list-style-type: decimal; }
.elementor-widget-text-editor li { margin-top: 10px; }
.elementor-widget-text-editor ul.rg-toplist, .elementor-widget-text-editor ol.rg-toplist { margin: 20px 0; }
.elementor-widget-text-editor > .rg-toplist:first-child, .elementor-widget-text-editor > .elementor-widget-container > .rg-toplist:first-child { margin-top: calc(20px - .8rem); }
/* galerias masonry (RBEA has-grid-lrg): 3 colunas >= 800 px, 2 colunas 400-799, 1 coluna < 400 (o Elementor usa 601/480) */
@media (max-width: 799px) { .elementor-widget-image-gallery .elementor-image-gallery .gallery-columns-3 .gallery-item { max-width: 50%; } }
@media (max-width: 399px) { .elementor-widget-image-gallery .elementor-image-gallery .gallery-columns-3 .gallery-item { max-width: 100%; } }
/* imagens das galerias: cursor de lupa do lightbox original */
.elementor-image-gallery .gallery-item img { cursor: zoom-in; }
/* o Neve actual esbate os links em hover (opacity .9); o 3.0.2 não */
a:hover, a:focus { opacity: 1; }
/* links dentro do texto: sublinhados como no Neve 3.0.2 */
.nv-content-wrap .elementor .elementor-widget-text-editor a:not(.button) { text-decoration: underline; }   /* (o Neve tira o sublinhado a `.nv-content-wrap .elementor a`) */
/* a 1.ª lista de um bloco de texto: no original a margem do 1.º <li> (10 px) colapsava com a do título anterior; num flex item não */
.elementor-widget-text-editor > ul:first-child > li:first-child, .elementor-widget-text-editor > ol:first-child > li:first-child { margin-top: 0; }
.elementor-widget-text-editor a:hover { color: var(--nv-secondary-accent); }
/* no Neve 3.0.2 o line-height do body era 1.6em (valor calculado em px herdado por tudo, p.ex. parágrafos a 20 px ficam com 25.6 px) */
html body { line-height: 1.6em; }
.rdivider { border-color: #14171c; }
.rg-justify, .rg-justify p { text-align: justify; }
.rg-caption p { text-align: center; color: #14171c; }
/* título "CATÁLOGO A5" (no original era um parágrafo a negrito, Open Sans; padding/risca vêm do eplus.css) */
.elementor-widget.rg-underline .elementor-heading-title { font-family: Open Sans, var(--nv-fallback-ff); font-weight: 400; }   /* o <strong> lá dentro dá o 700 */
.elementor-widget.rg-from-p .elementor-heading-title { letter-spacing: normal; }
/* amostras dos materiais: quadradas, a toda a largura da coluna */
.materiais img { width: 450px; max-width: 100%; aspect-ratio: 1 / 1; object-fit: cover; }   /* o original tinha width="450" (alguns ficheiros recuperados são 380 px); alinhadas à esquerda como a figure */
.elementor-widget.materiais { text-align: left; }
/* botões (estilo primário do Neve 3.0.2: Open Sans .8em 600 maiúsculas, padding 8/12 px, raio 3 px) */
.elementor-widget-button .elementor-button.elementor-button { background-color: #ab2e2e; color: #fff; border-radius: 3px; font-family: Open Sans, var(--nv-fallback-ff); font-weight: 600; line-height: normal; text-transform: uppercase; padding: 8px 12px; }
.elementor-widget-button .elementor-button.elementor-size-md { font-size: .8em; }   /* (0,3,0): ganha ao CSS do widget mas perde para um tamanho definido no widget (has-medium-font-size) */
.e-con .elementor-widget.elementor-widget-button.elementor-widget-button { margin-block-end: 20px; }   /* era um <p> */
.elementor-widget-button .elementor-button.elementor-button:hover { background-color: #ab2e2e; color: #fff; opacity: .9; }

/* ------------------------------------------------------------------ */
/* Efeitos hover (substituem o plugin Emage Hover Effects Block)        */
/* ------------------------------------------------------------------ */
/* (selectores no .elementor-widget: o Elementor >= 3.24 já não emite o .elementor-widget-container) */
/* efeito "zoom-in" do Emage: scale(1.2) em hover, imagem object-fit cover; a camada de cor (rgba 196,59,59 / 173,46,46)
   estava definida mas só se aplicava a .imghvr-anim-single, que estes blocos não usavam -> sem véu */
/* Quem Somos > Instalações: 0.25 s, fundo preto */
.elementor-widget.rg-hover { overflow: hidden; background: #000; }
.rg-hover img { display: block; width: 100%; object-fit: cover; object-position: center; transition: transform .25s; }
.rg-hover:hover img { transform: scale(1.2); }
/* Portfólio: 0.35 s; rg-cap = blocos cujo CSS limitava a imagem a 200 px (34 dos 39) */
.elementor-widget.rg-portfolio { position: relative; overflow: hidden; }
.rg-portfolio img { display: block; width: 100%; object-fit: cover; object-position: center; transition: transform .35s; }
.elementor-widget.rg-cap { max-height: 200px; }
.rg-cap img { height: 200px; }
.rg-portfolio:hover img { transform: scale(1.2); }

/* ------------------------------------------------------------------ */
/* Ajustes Elementor + Neve                                             */
/* ------------------------------------------------------------------ */
/* mapa (Contactos): no original o iframe era inline e o bloco ficava 8 px mais alto (descendente da linha) */
.elementor-widget-google_maps { padding-bottom: 8px; }   /* (o iframe inline do widget rg-map já tem o mesmo descendente de 8 px) */
.rg-map iframe { width: 100%; height: 544px; border: 0; }
.elementor-widget-text-editor { color: var(--nv-text-color); }
.elementor-widget-image-gallery .gallery-item img { border-radius: 4px; }
/* acordeão do Editor Plus (valores do ep-stylesheet original) no Nested Accordion do Elementor, via as variáveis do widget:
   título Open Sans 18 px negrito, padding 15 px, fundo #f0f0f0 com borda #c6c6c6, sem espaço entre itens, ícone à direita;
   hover/aberto: fundo vermelho e texto branco; conteúdo 10/20 px, texto preto; line-height herdado do body (25.6 / 24 px) */
.elementor-widget-n-accordion .e-n-accordion { --n-accordion-padding: 15px; --n-accordion-border-width: 1px; --n-accordion-border-style: solid; --n-accordion-border-color: #c6c6c6;
  --n-accordion-border-radius: 0; --n-accordion-title-font-size: 18px; --n-accordion-title-normal-color: #000; --n-accordion-title-hover-color: #fff; --n-accordion-title-active-color: #fff;
  --n-accordion-icon-normal-color: #000; --n-accordion-icon-hover-color: #fff; --n-accordion-icon-active-color: #fff; --n-accordion-icon-size: 18px;
  --n-accordion-item-title-space-between: 0; --n-accordion-item-title-distance-from-content: 0; --n-accordion-title-icon-order: 1; --n-accordion-title-justify-content: space-between; --n-accordion-icon-gap: 0; }
.elementor-widget-n-accordion .e-n-accordion-item { margin: 0; }
.elementor-widget-n-accordion .e-n-accordion-item-title { background: #f0f0f0; font-family: Open Sans, var(--nv-fallback-ff); font-weight: 700; line-height: inherit; transition: background .2s, color .2s; }
.elementor-widget-n-accordion .e-n-accordion-item-title-text { font-weight: 700; line-height: inherit; }
.elementor-widget-n-accordion .e-n-accordion-item-title:hover, .elementor-widget-n-accordion .e-n-accordion-item[open] > .e-n-accordion-item-title { background: #ab2e2e; }
.elementor-widget-n-accordion .e-n-accordion-item > .e-con { border: 1px solid #c6c6c6; border-top: 0; color: #000; --padding-top: 10px; --padding-bottom: 10px; --padding-left: 20px; --padding-right: 20px; }
.elementor-widget-n-accordion .e-n-accordion-item > .e-con .elementor-widget-text-editor { color: #000; }
