/* OBJETARIA — CSS do Service Detail (páginas de serviço), gerado por tools/build.mjs a partir de tools/servicos/servicos.css. Não editar à mão. */
@font-face{ font-family:'Aeonik'; src:url('../fonts/Aeonik%20Bold.woff2') format('woff2'); font-style:normal; font-weight:700; font-display:swap; ascent-override:93%; descent-override:21%; line-gap-override:0%; }
/* =========================================================
   OBJETARIA · SERVICE DETAIL SYSTEM (1.2.15) — fonte (escrita à mão)
   O tools/build.mjs prefixa cada seletor com body.obj-master:not(#obj):not(#obj) e grava
   assets/css/objetaria-servicos.css (carregado só nas páginas de serviço). O header é universal (objetaria-header.css).

   A FORMA É A AUTORIDADE. Geometria medida na referência (página BIM) a 1905 / 1440 / 900 / 640 / 375 px:
     hero      650 px em todas as larguras; texto centrado na vertical, à esquerda em min(1220 px, 90%);
               eyebrow 15 px (+.15em), 20 px até o título; título 128 → 72 (≤991) → 62 (≤767) com 40 px abaixo;
               forma branca na base (982 × 175 px, lado a ~40° da vertical, cantos suaves; aparecem os 60 px de cima)
               e a linha laranja com dobra logo acima dela (aqui, a mesma linha do hero da Home)
     corpo     padding 100/60 → 60/40 (≤991) → 60/20 (≤479); conteúdo min(1336 px, 90%) (100% abaixo de 992)
               título 90/90 → 62 → 52 → 42, 40 px abaixo
               linhas: 2 colunas de 47% + 6% de vão, centradas na vertical, 60 px entre as linhas
               bloco A: texto | frame 3:2 (628 × 416 em 1905) · bloco B: frame 10:7 (628 × 440) | texto + subtítulo
               24/30 + lista (recuo 40, 10 px entre itens)
               mídia grande: legenda 18/24, 66 px até o frame 16:9 na largura toda do conteúdo (1336 × 751)
     depois    Qualidade & Manufatura (componente universal, sem mudança) e rodapé universal
   Frames: a proporção é da POSIÇÃO; o asset entra em cover (e só escolhe o ponto focal). Sem asset, o frame fica vazio
   na mesma proporção. Em 900 px a página mantém as duas colunas (a referência empilha); empilha abaixo de 768.
   ========================================================= */

/* ---------- HERO ---------- */
/* 1.2.28 · sem overflow:hidden: a linha cinza sob a forma branca (celular, telas de densidade fracionária como 2,625×)
   era a borda do recorte do hero caindo no meio de um pixel físico — o recorte era suavizado SEPARADAMENTE na foto e na
   forma branca, e a foto vazava nessa linha. Agora a forma branca atravessa a divisa inteira (o trecho dela que passa
   do hero é branco sobre o branco do corpo, que fica por cima: nada muda à vista) e a divisa sob a forma é branco
   contínuo. Foto, véu e linha laranja ficam dentro do hero (inset:0) como antes; a geometria não muda. */
body.obj-master:not(#obj):not(#obj) .sv-hero{
  position:relative; z-index:1;
  height:650px;
  background:var(--black); color:var(--on-dark);
  overflow:visible;
  --focus:var(--accent);
  --sv-cut-w:982px; --sv-cut-vis:60px;      /* forma branca: largura e quanto dela aparece sobre o hero */
  --sv-line-w:514px; --sv-line-h:180px;     /* linha laranja (a mesma do hero da Home) */
}
body.obj-master:not(#obj):not(#obj) .sv-hero__media{ position:absolute; inset:0; z-index:0; background:#24262B; }
body.obj-master:not(#obj):not(#obj) .sv-hero__media picture{ position:absolute; inset:0; }
body.obj-master:not(#obj):not(#obj) .sv-hero__media img{ display:block; width:100%; height:100%; max-width:none; object-fit:cover; object-position:var(--sv-hero-pos, 50% 50%); }
/* véu: o título branco lê sobre qualquer foto escolhida depois, sem apagar o lado direito */
/* --sv-hero-veil (por asset, 0–1): 0 = a foto como veio (a do aço corten já vem tratada em tons escuros, como na referência) */
body.obj-master:not(#obj):not(#obj) .sv-hero__media::after{ content:""; position:absolute; inset:0; opacity:var(--sv-hero-veil, 1); background:linear-gradient(90deg, rgba(10,10,10,.55) 0%, rgba(10,10,10,.3) 55%, rgba(10,10,10,.16) 100%); }
body.obj-master:not(#obj):not(#obj) .sv-hero__media.is-empty::after{ background:repeating-linear-gradient(135deg, rgba(255,255,255,.035) 0 1px, transparent 1px 14px); }
body.obj-master:not(#obj):not(#obj) .sv-hero__content{
  position:relative; z-index:2;
  height:100%; width:min(var(--container-hero), 90%); margin-inline:auto;
  display:flex; flex-direction:column; justify-content:center; align-items:flex-start;
}
body.obj-master:not(#obj):not(#obj) .sv-hero__eyebrow{
  margin:0 0 20px;
  font-size:15px; font-weight:400; line-height:1.1; letter-spacing:.15em; text-transform:uppercase;
  color:var(--on-dark);
  /* 1.2.28 · quando o sobretítulo quebra no celular ("…em aço inox"), as linhas ficam equilibradas em vez de uma palavra sozinha */
  text-wrap:balance;
}
body.obj-master:not(#obj):not(#obj) .sv-hero__title{ margin:0 0 40px; font-size:128px; line-height:.9; color:var(--on-dark); }
/* linha laranja com dobra (mesmo desenho e traço de 1 px do hero da Home), encostada na direita, pousada na forma branca */
body.obj-master:not(#obj):not(#obj) .sv-hero__line{ position:absolute; right:0; bottom:calc(var(--sv-cut-vis) - 6px); z-index:3; width:var(--sv-line-w); height:var(--sv-line-h); overflow:visible; pointer-events:none; }
body.obj-master:not(#obj):not(#obj) .sv-hero__line path{ fill:none; stroke:var(--accent-line); stroke-width:1; vector-effect:non-scaling-stroke; }
/* forma branca na base: a passagem geométrica hero → corpo (só os --sv-cut-vis px de cima ficam sobre a foto) */
body.obj-master:not(#obj):not(#obj) .sv-hero__cut{
  position:absolute; right:0; top:calc(100% - var(--sv-cut-vis)); z-index:4;
  display:block; width:var(--sv-cut-w); max-width:100%; height:auto; aspect-ratio:757 / 135;
  fill:var(--white); pointer-events:none;
  /* 1.2.34 · o desenho continua abaixo do viewBox (até y 235): em telas estreitas a forma é mais baixa que a parte
     visível (35 px) e a continuação garante que ela sempre cubra a base do hero; o excedente fica sob o corpo branco */
  overflow:visible;
}

/* ---------- CORPO ---------- */
body.obj-master:not(#obj):not(#obj) .sv-body{ position:relative; z-index:2; background:var(--white); padding:100px 60px; }
body.obj-master:not(#obj):not(#obj) .sv-wrap{ width:min(var(--container), 90%); margin-inline:auto; }
body.obj-master:not(#obj):not(#obj) .sv-head{ margin:0 0 40px; font-size:90px; line-height:1; }
body.obj-master:not(#obj):not(#obj) .sv-row{
  display:grid; grid-template-columns:repeat(2, minmax(0, 1fr));
  column-gap:6%; align-items:center;
  margin:0 0 60px;
}
body.obj-master:not(#obj):not(#obj) .sv-row__text{ min-width:0; }
body.obj-master:not(#obj):not(#obj) .sv-row__text p{ margin:0 0 30px; font-family:var(--f-body); font-size:16px; font-weight:400; line-height:26px; color:var(--ink); }
/* parágrafo de abertura (bloco A): um bloco contínuo e mais presente, logo abaixo do título forte */
body.obj-master:not(#obj):not(#obj) .sv-row__text .sv-lead{ font-size:18px; line-height:30px; }
body.obj-master:not(#obj):not(#obj) .sv-row__text > p:last-child{ margin-bottom:0; }
/* subtítulo e legenda: 700 como na referência quando o arquivo Aeonik Bold existe (o build troca 700); sem ele,
   o Medium real (500). Nunca peso simulado. */
body.obj-master:not(#obj):not(#obj) .sv-sub{ margin:0 0 20px; font-family:var(--f-body); font-size:24px; font-weight:700; font-synthesis:none; line-height:30px; color:var(--ink); }
body.obj-master:not(#obj):not(#obj) .sv-list{ list-style:none; margin:0; padding:0 0 0 40px; }
body.obj-master:not(#obj):not(#obj) .sv-list li{ position:relative; margin:0 0 10px; padding:0; }
body.obj-master:not(#obj):not(#obj) .sv-list li:last-child{ margin-bottom:0; }
/* marcador: traço laranja (linguagem Objetaria) no lugar do ponto da referência, na mesma posição */
body.obj-master:not(#obj):not(#obj) .sv-list li::before{ content:""; position:absolute; left:-22px; top:12px; width:10px; height:2px; background:var(--accent); }
body.obj-master:not(#obj):not(#obj) .sv-list__label{ display:block; font-family:var(--f-body); font-size:16px; font-weight:400; line-height:26px; color:var(--ink); }
body.obj-master:not(#obj):not(#obj) .sv-list__links{ display:block; font-family:var(--f-body); font-size:14px; font-weight:400; line-height:22px; color:#7D7D7D; }
body.obj-master:not(#obj):not(#obj) .sv-list__links a{
  color:#7D7D7D; text-decoration:none;
  background:linear-gradient(currentColor, currentColor) 0 100% / 0 1px no-repeat;
  transition:color var(--duration-micro) var(--ease-out), background-size var(--duration-medium) var(--ease-premium);
}
body.obj-master:not(#obj):not(#obj) .sv-list__links a:hover,body.obj-master:not(#obj):not(#obj) .sv-list__links a:focus-visible{ color:var(--accent); background-size:100% 1px; }
body.obj-master:not(#obj):not(#obj) .sv-list__links a:focus-visible{ outline:2px solid var(--accent); outline-offset:2px; }
/* 1.2.31 · só a página Aço Inox & Soldagem (ritmo da referência "Pre-Con"): no bloco B o texto inteiro fica MAIS BAIXO que
   a foto e centrado ao lado dela — a lista "Domínio técnico" (8 itens) em duas colunas; o traço laranja de cada item
   fica no vão entre as colunas, na mesma distância do texto. Abaixo de 1200 px: uma coluna, como antes. A página
   Aço Corten não muda. */
/* 1.2.34 · Aço Inox & Soldagem — duas colunas só a partir de 1200 px. Medido (texto ÷ altura da foto 3:2): 1905 0,7/0,9 ·
   1440 0,7/0,9 · 1200 1,0/1,2 — equilibrado; abaixo disso a coluna de texto fica estreita para o conteúdo e o texto
   passava a 1,4–2× a altura da foto, começando ~50–150 px acima dela (1024: 456 × 255; 768: 512 × 216). Testado e
   descartado entre 992 e 1199: foto a 40% (pior, 1,8×) e a 55% (pior, 1,9× — o texto quebra mais). Até 1199 os blocos
   ficam em UMA coluna, na ordem da referência mobile (foto → texto nos dois blocos), com o texto até 680 px para leitura.
   A Aço Corten segue com o layout aprovado (duas colunas até 768). */
@media (max-width:1199px){
  body.obj-master:not(#obj):not(#obj) .sv-body--aco-inox-soldagem .sv-row,body.obj-master:not(#obj):not(#obj) .sv-body--pecas-sob-medida .sv-row{ grid-template-columns:minmax(0, 1fr); row-gap:40px; margin-bottom:64px; }
  body.obj-master:not(#obj):not(#obj) .sv-body--aco-inox-soldagem .sv-row--a > .sv-frame,body.obj-master:not(#obj):not(#obj) .sv-body--pecas-sob-medida .sv-row--a > .sv-frame{ order:-1; }
  body.obj-master:not(#obj):not(#obj) .sv-body--aco-inox-soldagem .sv-row--b,body.obj-master:not(#obj):not(#obj) .sv-body--pecas-sob-medida .sv-row--b{ margin-bottom:56px; }
  body.obj-master:not(#obj):not(#obj) .sv-body--aco-inox-soldagem .sv-row__text,body.obj-master:not(#obj):not(#obj) .sv-body--pecas-sob-medida .sv-row__text{ max-width:680px; }
  /* 1.2.35 · Peças sob Medida: o bloco 3 também abre com a foto (referência mobile) e é ele que fecha o corpo */
  body.obj-master:not(#obj):not(#obj) .sv-body--pecas-sob-medida .sv-row--c > .sv-frame{ order:-1; }
  body.obj-master:not(#obj):not(#obj) .sv-body--pecas-sob-medida .sv-row--b{ margin-bottom:64px; }
  body.obj-master:not(#obj):not(#obj) .sv-body--pecas-sob-medida .sv-row--c{ margin-bottom:56px; }
}
/* os 6 processos em 3 + 3 (grade preenchida por coluna; "columns" equilibrava pela altura e dava 4 + 2) sempre que a
   coluna de texto tem largura para dois itens lado a lado: no desktop (≥ 1200) e na coluna única de 680 px (≥ 768) */
@media (min-width:768px){
  body.obj-master:not(#obj):not(#obj) .sv-body--aco-inox-soldagem .sv-row--b .sv-list,body.obj-master:not(#obj):not(#obj) .sv-body--pecas-sob-medida .sv-row--b .sv-list{ display:grid; grid-template-columns:repeat(2, minmax(0, 1fr)); grid-template-rows:repeat(3, auto); grid-auto-flow:column; column-gap:40px; }
}
/* 1.2.34 · Aço Inox & Soldagem calibrada na referência "Pre-Con" (medida a 1905 e no celular; valores das capturas são
   estimativas). No desktop a grade, o título forte e os respiros já coincidiam (título: mesma altura de tinta, 72 px;
   título → foto 58 × 57 px); mudam só as proporções e o corpo do texto de abertura:
   · as DUAS fotos dos blocos em 3:2 (a referência usa 3:2 nas duas; o bloco B era 10:7);
   · o texto de abertura no corpo do bloco B (16/26 — na referência os dois blocos têm o mesmo corpo, entrelinha 26 px)
     e parágrafos separados por uma linha (26 px), como lá.
   A página Aço Corten não muda (as regras só valem com .sv-body--aco-inox-soldagem / .pj-quality--r43). */
body.obj-master:not(#obj):not(#obj) .sv-body--aco-inox-soldagem .sv-frame--rowB,body.obj-master:not(#obj):not(#obj) .sv-body--pecas-sob-medida .sv-frame--rowB{ aspect-ratio:3 / 2; }
body.obj-master:not(#obj):not(#obj) .sv-body--aco-inox-soldagem .sv-row__text .sv-lead,body.obj-master:not(#obj):not(#obj) .sv-body--pecas-sob-medida .sv-row__text .sv-lead{ font-size:16px; line-height:26px; }
body.obj-master:not(#obj):not(#obj) .sv-body--aco-inox-soldagem .sv-row__text p,body.obj-master:not(#obj):not(#obj) .sv-body--pecas-sob-medida .sv-row__text p{ margin-bottom:26px; }
body.obj-master:not(#obj):not(#obj) .sv-body--aco-inox-soldagem .sv-row__text > p:last-child,body.obj-master:not(#obj):not(#obj) .sv-body--pecas-sob-medida .sv-row__text > p:last-child{ margin-bottom:0; }
body.obj-master:not(#obj):not(#obj) .sv-body--aco-inox-soldagem .sv-row--b .sv-sub{ margin-top:6px; }
/* Qualidade & Manufatura desta página: foto 4:3, como na referência (o componente de /projetos/ e da Aço Corten segue 3:2) */
body.obj-master:not(#obj):not(#obj) .pj-quality--r43 .pj-quality__media{ aspect-ratio:4 / 3; }
/* foto escolhida no painel (slot preenchido em Objetaria › Imagens): mesma moldura, em cover, no ponto focal do slot */
body.obj-master:not(#obj):not(#obj) .sv-frame > img.obj-fill,body.obj-master:not(#obj):not(#obj) .pj-quality__media > img.obj-fill{ object-position:var(--obj-pos, 50% 50%); }
/* mídia grande */
body.obj-master:not(#obj):not(#obj) .sv-feature{ margin:0; }
body.obj-master:not(#obj):not(#obj) .sv-feature__caption{ margin:10px 0 66px; font-family:var(--f-body); font-size:18px; font-weight:700; font-synthesis:none; line-height:24px; color:var(--ink); }

/* ---------- FRAMES (proporção da posição; o asset se adapta) ---------- */
body.obj-master:not(#obj):not(#obj) .sv-frame{ position:relative; margin:0; overflow:hidden; background:#DADBDD; }
body.obj-master:not(#obj):not(#obj) .sv-frame--rowA{ aspect-ratio:3 / 2; }
body.obj-master:not(#obj):not(#obj) .sv-frame--rowB{ aspect-ratio:10 / 7; }
body.obj-master:not(#obj):not(#obj) .sv-frame--rowC{ aspect-ratio:3 / 2; }   /* 1.2.35 · bloco 3 (opcional): subtítulo + texto | foto */
/* 1.2.35 · Peças sob Medida no desktop: o respiro entre os blocos da referência BIM (medido a 1905: ~150 px do bloco 1 ao
   2, ~100 do 2 ao 3, ~160 do último até Qualidade & Manufatura) — 100 px entre blocos e 60 no último (+ 100 do corpo) */
@media (min-width:1200px){
  body.obj-master:not(#obj):not(#obj) .sv-body--pecas-sob-medida .sv-row{ margin-bottom:100px; }
  body.obj-master:not(#obj):not(#obj) .sv-body--pecas-sob-medida .sv-row--c{ margin-bottom:60px; }
}
/* linha discreta de projetos relacionados no fim do bloco 3 (mesmo cinza e sublinhado laranja dos links da lista) */
body.obj-master:not(#obj):not(#obj) .sv-related{ margin:0; font-family:var(--f-body); font-size:14px; line-height:22px; color:#7D7D7D; }
body.obj-master:not(#obj):not(#obj) .sv-related__label{ font-weight:500; color:var(--ink); }
body.obj-master:not(#obj):not(#obj) .sv-related .sv-list__links{ display:inline; }
body.obj-master:not(#obj):not(#obj) .sv-frame--feature{ aspect-ratio:16 / 9; background:#16171A; }
body.obj-master:not(#obj):not(#obj) .sv-frame picture{ position:absolute; inset:0; }
body.obj-master:not(#obj):not(#obj) .sv-frame img,body.obj-master:not(#obj):not(#obj) .sv-frame video{ position:absolute; inset:0; display:block; width:100%; height:100%; max-width:none; object-fit:cover; object-position:var(--pos, 50% 50%); }
/* frame vazio: placeholder neutro com a proporção da forma */
body.obj-master:not(#obj):not(#obj) .sv-frame.is-empty{ display:grid; place-items:center; background:#E4E5E7 repeating-linear-gradient(135deg, rgba(34,36,42,.05) 0 1px, transparent 1px 14px); }
body.obj-master:not(#obj):not(#obj) .sv-frame--feature.is-empty{ background:#1E2024 repeating-linear-gradient(135deg, rgba(255,255,255,.04) 0 1px, transparent 1px 14px); }
body.obj-master:not(#obj):not(#obj) .sv-frame__label{ font-family:var(--f-body); font-size:13px; font-weight:500; letter-spacing:.12em; text-transform:uppercase; color:#8A8E96; }
/* vídeo: mídia editorial embutida — sem interface de player. O botão pausar/retomar fica fora da vista e só aparece
   com o foco do teclado (para quem precisa parar o movimento); com o mouse, nada aparece sobre o vídeo. */
body.obj-master:not(#obj):not(#obj) .sv-video video{ pointer-events:none; }
body.obj-master:not(#obj):not(#obj) .sv-video__btn{
  position:absolute; right:16px; bottom:16px; z-index:1;
  display:grid; place-items:center; width:44px; height:44px; padding:0;
  border:1px solid rgba(255,255,255,.75); border-radius:50%;
  background:rgba(19,19,19,.55); color:var(--white); cursor:pointer;
  opacity:0; transform:scale(.9); pointer-events:none;
  transition:opacity 200ms var(--ease-out), transform 200ms var(--ease-out), background-color var(--duration-micro) var(--ease-out);
  --focus:var(--accent);
}
body.obj-master:not(#obj):not(#obj) .sv-video__btn:focus-visible{ opacity:1; transform:none; pointer-events:auto; background:var(--accent); border-color:var(--accent); }
body.obj-master:not(#obj):not(#obj) .sv-video__i{ width:16px; height:16px; }
body.obj-master:not(#obj):not(#obj) .sv-video__i--play path{ fill:currentColor; stroke:none; }
body.obj-master:not(#obj):not(#obj) .sv-video__i--pause path{ fill:none; stroke:currentColor; stroke-width:2; stroke-linecap:round; }
body.obj-master:not(#obj):not(#obj) .sv-video__i--play,body.obj-master:not(#obj):not(#obj) .sv-video.is-paused .sv-video__i--pause{ display:none; }
body.obj-master:not(#obj):not(#obj) .sv-video.is-paused .sv-video__i--play{ display:block; }

/* ---------- RESPONSIVO (faixas da referência; 2 colunas mantidas até 768) ---------- */
@media (max-width:1199px){
  body.obj-master:not(#obj):not(#obj) .sv-hero{ --sv-cut-w:76%; }
}
@media (max-width:991px){
  body.obj-master:not(#obj):not(#obj) .sv-hero__title{ font-size:72px; }
  body.obj-master:not(#obj):not(#obj) .sv-body{ padding:60px 40px; }
  body.obj-master:not(#obj):not(#obj) .sv-wrap{ width:100%; }
  body.obj-master:not(#obj):not(#obj) .sv-head{ font-size:62px; }
  body.obj-master:not(#obj):not(#obj) .sv-row{ column-gap:40px; }
  body.obj-master:not(#obj):not(#obj) .sv-feature__caption{ margin-bottom:40px; }
}
@media (max-width:767px){
  body.obj-master:not(#obj):not(#obj) .sv-hero{ --sv-cut-w:79%; --sv-cut-vis:56px; --sv-line-w:384px; --sv-line-h:134px; }
  body.obj-master:not(#obj):not(#obj) .sv-hero__title{ font-size:62px; }
  body.obj-master:not(#obj):not(#obj) .sv-head{ font-size:52px; }
  /* uma coluna. 1.2.28: na sequência da referência mobile — título → 1ª imagem → texto de abertura → 2ª imagem → texto
     + lista: no bloco A a mídia sobe para antes do texto (order na grade de uma coluna; o HTML continua texto → mídia,
     a ordem de leitura sem CSS e no leitor de tela); o bloco B já é mídia → texto */
  body.obj-master:not(#obj):not(#obj) .sv-row{ grid-template-columns:minmax(0, 1fr); row-gap:30px; margin-bottom:50px; }
  body.obj-master:not(#obj):not(#obj) .sv-row--a > .sv-frame{ order:-1; }
  body.obj-master:not(#obj):not(#obj) .sv-feature__caption{ margin-bottom:30px; }
  /* 1.2.34 · Aço Inox & Soldagem: ritmo da referência mobile (medido a ~390 px): título → 1ª foto ~20 px, foto → texto
     ~40, texto → 2ª foto ~64, fim do texto → Qualidade & Manufatura ~116; Qualidade termina ~86 px abaixo da foto */
  body.obj-master:not(#obj):not(#obj) .sv-body--aco-inox-soldagem,body.obj-master:not(#obj):not(#obj) .sv-body--pecas-sob-medida{ padding-top:48px; }
  body.obj-master:not(#obj):not(#obj) .sv-body--aco-inox-soldagem .sv-head,body.obj-master:not(#obj):not(#obj) .sv-body--pecas-sob-medida .sv-head{ margin-bottom:24px; }
  body.obj-master:not(#obj):not(#obj) .sv-body--aco-inox-soldagem .sv-row,body.obj-master:not(#obj):not(#obj) .sv-body--pecas-sob-medida .sv-row{ row-gap:40px; margin-bottom:64px; }
  body.obj-master:not(#obj):not(#obj) .sv-body--aco-inox-soldagem .sv-row--b,body.obj-master:not(#obj):not(#obj) .sv-body--pecas-sob-medida .sv-row--b{ margin-bottom:56px; }
  body.obj-master:not(#obj):not(#obj) .sv-body--pecas-sob-medida .sv-row--b{ margin-bottom:64px; }
  body.obj-master:not(#obj):not(#obj) .sv-body--pecas-sob-medida .sv-row--c{ margin-bottom:56px; }
  body.obj-master:not(#obj):not(#obj) .sv-row--c > .sv-frame{ order:-1; }
  body.obj-master:not(#obj):not(#obj) .pj-quality.pj-quality--r43{ padding-bottom:86px; }
}
@media (max-width:560px){
  body.obj-master:not(#obj):not(#obj) .sv-hero{ --sv-cut-w:60%; --sv-cut-vis:35px; --sv-line-w:150px; --sv-line-h:52px; }
}
@media (max-width:479px){
  body.obj-master:not(#obj):not(#obj) .sv-body{ padding:60px 20px; }
  body.obj-master:not(#obj):not(#obj) .sv-head{ font-size:42px; }
  body.obj-master:not(#obj):not(#obj) .sv-sub{ font-size:20px; line-height:26px; }
  body.obj-master:not(#obj):not(#obj) .sv-list{ padding-left:28px; }
  body.obj-master:not(#obj):not(#obj) .sv-list li::before{ left:-20px; }
}

/* =========================================================
   1.2.37 · CTA EDITORIAL (.obj-cta) — direção "A · contorno", escolhida entre três estudos (contorno, tipográfico,
   compacto) por ter a menor massa visual que ainda se lê como botão: fio de 1 px em #131313, raio de 3 px (o do botão
   Contate-nos), Aeonik 500 em caixa alta com tracking calibrado e o laranja só na seta. Hover/foco: o fio passa a
   laranja com um tom de fundo quase imperceptível e a seta avança 3 px na diagonal — 320 ms na curva do site, sem
   mudar tamanho nem cor do texto. Ativo: o tom aprofunda. Movimento reduzido: só a cor muda.
   Encapsulado: só .obj-cta e .sv-cta; nenhum botão legado (link-arrow "Ver detalhes"/"Solicite um orçamento",
   Contate-nos, menu, carrossel) é tocado.
   ========================================================= */
body.obj-master:not(#obj):not(#obj) .obj-cta{
  --cta-linha:#131313; --cta-acento:var(--accent); --cta-tempo:320ms;
  position:relative; display:inline-flex; align-items:center; gap:16px; max-width:100%; min-height:52px; box-sizing:border-box;
  padding:12px 22px 12px 26px; border:1px solid var(--cta-linha); border-radius:3px; background:transparent;
  font-family:var(--f-body); font-size:13px; font-weight:500; line-height:1.25; letter-spacing:.16em; text-transform:uppercase;
  /* uma linha sempre que cabe; numa coluna estreita o rótulo quebra dentro do fio, nunca vaza */
  color:var(--ink); text-decoration:none; white-space:normal; -webkit-tap-highlight-color:transparent;
  transition:border-color var(--cta-tempo) var(--ease-premium), background-color var(--cta-tempo) var(--ease-premium);
}
body.obj-master:not(#obj):not(#obj) .obj-cta__seta{ flex:none; width:12px; height:12px; fill:none; stroke:var(--cta-acento); stroke-width:1.6; stroke-linecap:square;
  transition:transform var(--cta-tempo) var(--ease-premium); }
body.obj-master:not(#obj):not(#obj) .obj-cta__sr{ position:absolute; width:1px; height:1px; margin:-1px; padding:0; overflow:hidden; clip:rect(0,0,0,0); white-space:nowrap; border:0; }
@media (hover:hover){
  body.obj-master:not(#obj):not(#obj) .obj-cta:hover{ border-color:var(--cta-acento); background-color:rgba(255,135,49,.05); color:var(--ink); }
  body.obj-master:not(#obj):not(#obj) .obj-cta:hover .obj-cta__seta{ transform:translate(3px, -3px); }
}
body.obj-master:not(#obj):not(#obj) .obj-cta:focus-visible{ outline:2px solid var(--cta-acento); outline-offset:3px; border-color:var(--cta-acento); }
body.obj-master:not(#obj):not(#obj) .obj-cta:focus-visible .obj-cta__seta{ transform:translate(3px, -3px); }
body.obj-master:not(#obj):not(#obj) .obj-cta:active{ background-color:rgba(255,135,49,.11); }
body.obj-master:not(#obj):not(#obj) .obj-cta[aria-disabled="true"]{ opacity:.4; pointer-events:none; }
@media (prefers-reduced-motion:reduce){
  body.obj-master:not(#obj):not(#obj) .obj-cta .obj-cta__seta,body.obj-master:not(#obj):not(#obj) .obj-cta:hover .obj-cta__seta,body.obj-master:not(#obj):not(#obj) .obj-cta:focus-visible .obj-cta__seta{ transform:none; }
}
/* lugar do CTA no fim do texto do bloco (ou da introdução): só respiro, sem fio nem rótulo */
body.obj-master:not(#obj):not(#obj) .sv-cta{ margin:36px 0 0; }
body.obj-master:not(#obj):not(#obj) .sv-row__text > .sv-cta{ margin-top:36px; }
body.obj-master:not(#obj):not(#obj) .sv-intro > .sv-cta{ margin-top:40px; }
@media (max-width:479px){
  /* celular: o botão mantém a largura do texto; rótulo longo pode quebrar em duas linhas, alinhado à esquerda */
  body.obj-master:not(#obj):not(#obj) .obj-cta{ gap:14px; min-height:50px; padding:12px 18px 12px 20px; letter-spacing:.12em; white-space:normal; }
}

/* =========================================================
   1.2.36 · LAREIRAS & CASCATAS — corpo em galeria
   Desktop (referência "Shop Fabrication"): título forte → introdução + lista com termos em destaque → grade 4 × 2 de
   blocos quadrados (32 px de vão) → faixa panorâmica 3:1. Até 991 px a grade vira um trilho deslizante: cartões em
   retrato 4:5 com o vizinho à mostra, snap no início de cada cartão, o ativo em destaque (os outros recuam um pouco)
   e, embaixo, contador + barra de progresso + setas. O trilho sangra até a borda da tela.
   ========================================================= */
body.obj-master:not(#obj):not(#obj) .sv-intro{ max-width:960px; margin:0 0 96px; }
body.obj-master:not(#obj):not(#obj) .sv-intro__lead{ margin:0 0 28px; font-family:var(--f-body); font-size:16px; font-weight:400; line-height:26px; color:var(--ink); }
body.obj-master:not(#obj):not(#obj) .sv-intro__lista{ list-style:none; margin:0; padding:0 0 0 40px; }
body.obj-master:not(#obj):not(#obj) .sv-intro__lista li{ position:relative; margin:0 0 12px; font-family:var(--f-body); font-size:16px; line-height:26px; color:var(--ink); }
body.obj-master:not(#obj):not(#obj) .sv-intro__lista li:last-child{ margin-bottom:0; }
body.obj-master:not(#obj):not(#obj) .sv-intro__lista li::before{ content:""; position:absolute; left:-22px; top:12px; width:10px; height:2px; background:var(--accent); }
body.obj-master:not(#obj):not(#obj) .sv-intro__lista strong{ font-weight:700; font-synthesis:none; }

body.obj-master:not(#obj):not(#obj) .lc-galeria{ --lc-gap:32px; }
body.obj-master:not(#obj):not(#obj) .lc-galeria__trilho{ display:grid; grid-template-columns:repeat(4, minmax(0, 1fr)); gap:var(--lc-gap); outline:none; }
body.obj-master:not(#obj):not(#obj) .lc-galeria__trilho:focus-visible{ outline:2px solid var(--accent); outline-offset:6px; }
body.obj-master:not(#obj):not(#obj) .lc-item{ position:relative; margin:0; overflow:hidden; aspect-ratio:1 / 1; background:#DADBDD; }
body.obj-master:not(#obj):not(#obj) .lc-item picture{ position:absolute; inset:0; }
body.obj-master:not(#obj):not(#obj) .lc-item img,body.obj-master:not(#obj):not(#obj) .lc-item video,body.obj-master:not(#obj):not(#obj) .lc-panorama video,body.obj-master:not(#obj):not(#obj) .lc-panorama img{
  position:absolute; inset:0; display:block; width:100%; height:100%; max-width:none;
  object-fit:cover; object-position:var(--pos, 50% 50%);
}
body.obj-master:not(#obj):not(#obj) .lc-item img{ transition:transform 1100ms var(--ease-premium); }
@media (hover:hover) and (min-width:992px){ body.obj-master:not(#obj):not(#obj) .lc-item:hover img{ transform:scale(1.035); } }
body.obj-master:not(#obj):not(#obj) .lc-item > img.obj-fill,body.obj-master:not(#obj):not(#obj) .lc-panorama > img.obj-fill,body.obj-master:not(#obj):not(#obj) .lc-item > video.obj-fill,body.obj-master:not(#obj):not(#obj) .lc-panorama > video.obj-fill{ object-position:var(--obj-pos, 50% 50%); }
body.obj-master:not(#obj):not(#obj) .lc-galeria__ui{ display:none; }
body.obj-master:not(#obj):not(#obj) .lc-panorama{ position:relative; margin:var(--lc-gap, 32px) 0 0; overflow:hidden; aspect-ratio:3 / 1; background:#24262B; }
/* vídeo trocado por foto no painel: o botão de pausa não tem o que pausar */
body.obj-master:not(#obj):not(#obj) .lc-item:not(:has(video)) .sv-video__btn,body.obj-master:not(#obj):not(#obj) .lc-panorama:not(:has(video)) .sv-video__btn{ display:none; }
/* 1.2.37 · cada bloco (e o panorama) abre o visualizador oficial — o mesmo das páginas de projeto. O botão (criado pelo
   servicos.js) cobre o bloco sem nada à vista: nenhum ícone, nome ou legenda sobre a imagem; no foco do teclado, um
   contorno laranja por dentro. O botão de pausa do vídeo (só no foco) fica acima dele. */
body.obj-master:not(#obj):not(#obj) .lc-abrir{
  position:absolute; inset:0; z-index:1; display:block; width:100%; height:100%; margin:0; padding:0;
  border:0; border-radius:0; background:transparent; box-shadow:none; cursor:zoom-in; -webkit-tap-highlight-color:transparent;
}
body.obj-master:not(#obj):not(#obj) .lc-abrir:hover,body.obj-master:not(#obj):not(#obj) .lc-abrir:focus,body.obj-master:not(#obj):not(#obj) .lc-abrir:active{ outline:none; background:transparent; }
body.obj-master:not(#obj):not(#obj) .lc-abrir:focus-visible{ outline:none; box-shadow:inset 0 0 0 2px var(--accent); }
body.obj-master:not(#obj):not(#obj) .lc-item .sv-video__btn,body.obj-master:not(#obj):not(#obj) .lc-panorama .sv-video__btn{ z-index:2; }
@media (hover:hover) and (min-width:992px){ body.obj-master:not(#obj):not(#obj) .lc-item:hover video{ transform:scale(1.035); } body.obj-master:not(#obj):not(#obj) .lc-item video{ transition:transform 1100ms var(--ease-premium); } }

@media (max-width:1199px){ body.obj-master:not(#obj):not(#obj) .lc-galeria{ --lc-gap:24px; } body.obj-master:not(#obj):not(#obj) .sv-intro{ margin-bottom:72px; } }
@media (max-width:991px){
  body.obj-master:not(#obj):not(#obj) .sv-body--galeria{ --lc-sangria:40px; }
  body.obj-master:not(#obj):not(#obj) .lc-galeria{ margin:0 calc(-1 * var(--lc-sangria)); }
  body.obj-master:not(#obj):not(#obj) .lc-galeria__trilho{
    display:flex; gap:14px; overflow-x:auto; overflow-y:hidden; overscroll-behavior-x:contain;
    scroll-snap-type:x mandatory; scroll-padding-inline:var(--lc-sangria); padding:0 var(--lc-sangria);
    scrollbar-width:none; -webkit-overflow-scrolling:touch;
  }
  body.obj-master:not(#obj):not(#obj) .lc-galeria__trilho::-webkit-scrollbar{ display:none; }
  body.obj-master:not(#obj):not(#obj) .lc-item{
    flex:0 0 44%; aspect-ratio:4 / 5; scroll-snap-align:start;
    transform:scale(.94); opacity:.62; transform-origin:50% 50%;
    transition:transform 700ms var(--ease-premium), opacity 700ms var(--ease-premium);
  }
  body.obj-master:not(#obj):not(#obj) .lc-item.is-ativo,body.obj-master:not(#obj):not(#obj) .lc-galeria:not(.is-pronta) .lc-item{ transform:none; opacity:1; }
  body.obj-master:not(#obj):not(#obj) .lc-galeria__ui{ display:flex; align-items:center; gap:18px; margin:22px var(--lc-sangria) 0; }
  body.obj-master:not(#obj):not(#obj) .lc-galeria__contador{ flex:none; margin:0; font-family:var(--f-body); font-size:13px; font-weight:500; line-height:1; letter-spacing:.14em; color:#7D7D7D; font-variant-numeric:tabular-nums; }
  body.obj-master:not(#obj):not(#obj) .lc-galeria__contador span{ color:var(--ink); }
  body.obj-master:not(#obj):not(#obj) .lc-galeria__barra{ position:relative; flex:1 1 auto; height:1px; background:rgba(19,19,19,.16); overflow:hidden; }
  body.obj-master:not(#obj):not(#obj) .lc-galeria__barra span{ position:absolute; inset:0; background:var(--accent); transform-origin:0 50%; transform:scaleX(var(--lc-p, .125)); transition:transform 500ms var(--ease-premium); }
  body.obj-master:not(#obj):not(#obj) .lc-galeria__setas{ flex:none; display:flex; gap:8px; }
  body.obj-master:not(#obj):not(#obj) .lc-galeria__seta{
    display:grid; place-items:center; width:44px; height:44px; padding:0; border:1px solid rgba(19,19,19,.22); border-radius:50%;
    background:transparent; color:var(--ink); cursor:pointer;
    transition:background-color var(--duration-hover) var(--ease-premium), border-color var(--duration-hover) var(--ease-premium), color var(--duration-hover) var(--ease-premium);
  }
  body.obj-master:not(#obj):not(#obj) .lc-galeria__seta svg{ width:16px; height:16px; fill:none; stroke:currentColor; stroke-width:1.6; }
  body.obj-master:not(#obj):not(#obj) .lc-galeria__seta:focus-visible{ outline:2px solid var(--accent); outline-offset:3px; }
  body.obj-master:not(#obj):not(#obj) .lc-galeria__seta[aria-disabled="true"]{ opacity:.35; cursor:default; }
  body.obj-master:not(#obj):not(#obj) .lc-panorama{ aspect-ratio:16 / 9; margin-top:48px; }
}
@media (max-width:991px) and (hover:hover){
  body.obj-master:not(#obj):not(#obj) .lc-galeria__seta:not([aria-disabled="true"]):hover{ background:#131313; border-color:#131313; color:var(--white); }
}
@media (max-width:767px){
  body.obj-master:not(#obj):not(#obj) .lc-item{ flex-basis:78%; }
  body.obj-master:not(#obj):not(#obj) .sv-intro{ margin-bottom:56px; }
  body.obj-master:not(#obj):not(#obj) .lc-panorama{ aspect-ratio:4 / 5; margin-top:40px; }
}
@media (max-width:479px){
  body.obj-master:not(#obj):not(#obj) .sv-body--galeria{ --lc-sangria:20px; }
  body.obj-master:not(#obj):not(#obj) .sv-intro__lista{ padding-left:28px; }
  body.obj-master:not(#obj):not(#obj) .sv-intro__lista li::before{ left:-20px; }
}

/* ===== movimento reduzido: transições do master restauradas (gerado) ===== */
@media (prefers-reduced-motion:reduce){
body.obj-master:not(#obj):not(#obj) .sv-list__links a{ transition:color var(--duration-micro) var(--ease-out), background-size var(--duration-medium) var(--ease-premium) !important; }
body.obj-master:not(#obj):not(#obj) .sv-video__btn{ transition:opacity 200ms var(--ease-out), transform 200ms var(--ease-out), background-color var(--duration-micro) var(--ease-out) !important; }
body.obj-master:not(#obj):not(#obj) .obj-cta{ transition:border-color var(--cta-tempo) var(--ease-premium), background-color var(--cta-tempo) var(--ease-premium) !important; }
body.obj-master:not(#obj):not(#obj) .obj-cta__seta{ transition:transform var(--cta-tempo) var(--ease-premium) !important; }
body.obj-master:not(#obj):not(#obj) .lc-item img{ transition:transform 1100ms var(--ease-premium) !important; }
@media (hover:hover) and (min-width:992px){ body.obj-master:not(#obj):not(#obj) .lc-item video{ transition:transform 1100ms var(--ease-premium) !important; } }
@media (max-width:991px){ body.obj-master:not(#obj):not(#obj) .lc-item{ transition:transform 700ms var(--ease-premium), opacity 700ms var(--ease-premium) !important; } }
@media (max-width:991px){ body.obj-master:not(#obj):not(#obj) .lc-galeria__barra span{ transition:transform 500ms var(--ease-premium) !important; } }
@media (max-width:991px){ body.obj-master:not(#obj):not(#obj) .lc-galeria__seta{ transition:background-color var(--duration-hover) var(--ease-premium), border-color var(--duration-hover) var(--ease-premium), color var(--duration-hover) var(--ease-premium) !important; } }
}
