/* ==========================================================================
   Construmarket — sistema de design
   Direção visual da equipa de marketing (Proposta B): azul-marinho
   institucional + laranja de obra, fundo claro, cartões arredondados e
   muito espaço em branco. construmarket.pt
   ========================================================================== */
:root {
  --verde: #ea700f;
  --verde-escuro: #c05a08;
  --verde-suave: #fdeede;
  --tinta: #0e2b49;
  --texto: #29405a;
  --mudo: #5f7285;
  --linha: #dfe5ec;
  --fundo: #f5f7fa;
  --branco: #ffffff;
  --perigo: #c0392b;
  --aviso: #b9770e;
  --info: #21618c;
  --raio: 14px;
  --sombra: 0 1px 3px rgba(18, 49, 42, .08), 0 8px 24px rgba(18, 49, 42, .06);
  /* Escala do certificado energético */
  --classe-aplus: #00703c; --classe-a: #2e9e41; --classe-b: #8bc53f;
  --classe-bmenos: #c8d92b; --classe-c: #f7e400; --classe-d: #f5b800;
  --classe-e: #ef7d00; --classe-f: #e2231a;
}

* { box-sizing: border-box; margin: 0; padding: 0; }
html { scroll-behavior: smooth; }
body {
  font-family: "Segoe UI", system-ui, -apple-system, Roboto, sans-serif;
  color: var(--texto); background: var(--fundo);
  line-height: 1.6; font-size: 16px;
}
a { color: var(--verde-escuro); text-decoration: none; }
a:hover { text-decoration: underline; }
h1, h2, h3, h4 { color: var(--tinta); line-height: 1.25; font-weight: 700; }
img { max-width: 100%; }

/* ---------- barra superior ---------- */
.topo {
  background: var(--branco); border-bottom: 1px solid var(--linha);
  position: sticky; top: 0; z-index: 60;
}
.topo-inner {
  max-width: 1180px; margin: 0 auto; padding: .65rem 1.5rem;
  display: flex; align-items: center; gap: 1.4rem;
}
.marca { display: flex; align-items: baseline; gap: .45rem; font-weight: 800;
  font-size: 1.35rem; color: var(--tinta); }
.marca:hover { text-decoration: none; }
.marca .cert { color: var(--tinta); }
.marca .en { color: var(--verde); }
.marca-sub { font-size: .62rem; letter-spacing: .14em; text-transform: uppercase;
  color: var(--mudo); font-weight: 600; }
.navlink { color: var(--texto); font-weight: 600; font-size: .92rem;
  padding: .35rem .2rem; }
.navlink:hover { color: var(--verde-escuro); text-decoration: none; }
.topo-acoes { margin-left: auto; display: flex; gap: .6rem; align-items: center; }
.topo-conta .topo-inner { flex-wrap: wrap; gap: .75rem 1.4rem; }
.topo-conta .topo-acoes { width: 100%; flex-wrap: wrap; justify-content: flex-end; }

/* ---------- botões ---------- */
.btn {
  display: inline-block; padding: .55rem 1.15rem; border-radius: 999px;
  border: 1.5px solid var(--linha); background: var(--branco);
  color: var(--tinta); font-weight: 600; font-size: .92rem; cursor: pointer;
  transition: all .15s ease;
}
.btn:hover { border-color: var(--verde); color: var(--verde-escuro);
  text-decoration: none; }
.btn-primary { background: var(--verde); border-color: var(--verde);
  color: #fff; }
.btn-primary:hover { background: var(--verde-escuro);
  border-color: var(--verde-escuro); color: #fff; }
.btn-danger { border-color: var(--perigo); color: var(--perigo); }
.btn-danger:hover { background: var(--perigo); color: #fff; }
.btn-sm { padding: .3rem .8rem; font-size: .82rem; }
.btn[disabled] { opacity: .5; cursor: not-allowed; }

/* ---------- herói ---------- */
.hero { background: linear-gradient(160deg, var(--tinta) 0%, #14395f 55%,
  var(--verde-escuro) 100%); color: #eaf1f8; padding: 4.5rem 1.5rem; }
.hero-inner { max-width: 1180px; margin: 0 auto; display: grid;
  grid-template-columns: 1.2fr .8fr; gap: 3rem; align-items: center; }
.hero h1 { color: #fff; font-size: clamp(2rem, 4.5vw, 3.1rem);
  margin-bottom: 1rem; }
.hero .lead { font-size: 1.15rem; color: #bfd0e0; margin-bottom: 1.8rem; }
.hero .btn { border-color: transparent; }
.eyebrow { display: inline-block; letter-spacing: .16em; font-size: .72rem;
  text-transform: uppercase; font-weight: 700; color: var(--verde);
  margin-bottom: .8rem; }
.hero .eyebrow { color: #ffb056; }

/* ---------- secções e cartões ---------- */
.section { padding: 3.5rem 1.5rem; }
.section-inner { max-width: 1180px; margin: 0 auto; }
.section h2 { font-size: 1.7rem; margin-bottom: .4rem; }
.section .sub { color: var(--mudo); margin-bottom: 2rem; max-width: 60ch; }
.grid { display: grid; gap: 1.4rem; }
.grid-3 { grid-template-columns: repeat(3, 1fr); }
.grid-2 { grid-template-columns: repeat(2, 1fr); }

.card { background: var(--branco); border: 1px solid var(--linha);
  border-radius: var(--raio); box-shadow: var(--sombra); }
.card-body { padding: 1.5rem; }
.card h3 { font-size: 1.08rem; margin-bottom: .5rem; }
.card .muted, .muted { color: var(--mudo); font-size: .92rem; }

.num { font-size: 2rem; font-weight: 800; color: var(--verde-escuro); }

/* ---------- formulários ---------- */
.form-grid { display: grid; grid-template-columns: repeat(2, 1fr);
  gap: 1rem 1.4rem; }
.field { display: flex; flex-direction: column; gap: .3rem; }
.field.span-all { grid-column: 1 / -1; }
label { font-weight: 600; font-size: .88rem; color: var(--tinta); }
input, select, textarea {
  font: inherit; padding: .55rem .8rem; border: 1.5px solid var(--linha);
  border-radius: 9px; background: var(--branco); color: var(--texto);
  width: 100%;
}
input:focus, select:focus, textarea:focus {
  outline: 2px solid var(--verde-suave); border-color: var(--verde);
}
.help { font-size: .8rem; color: var(--mudo); }
.check { display: flex; gap: .55rem; align-items: flex-start;
  font-weight: 400; font-size: .92rem; }
.check input { width: auto; margin-top: .25rem; }
fieldset { border: 1px solid var(--linha); border-radius: var(--raio);
  padding: 1.3rem; margin-bottom: 1.5rem; background: var(--branco); }
legend { font-weight: 700; color: var(--tinta); padding: 0 .5rem; }
.form-actions { display: flex; gap: .8rem; justify-content: flex-end;
  margin-top: 1.4rem; }

/* ---------- tabelas ---------- */
.tabela-wrap { overflow-x: auto; }
table.tabela { width: 100%; border-collapse: collapse; font-size: .92rem;
  background: var(--branco); }
.tabela th { text-align: left; font-size: .74rem; letter-spacing: .08em;
  text-transform: uppercase; color: var(--mudo); font-weight: 700;
  padding: .7rem .9rem; border-bottom: 2px solid var(--linha); }
.tabela td { padding: .75rem .9rem; border-bottom: 1px solid var(--linha);
  vertical-align: middle; }
.tabela tr:hover td { background: var(--verde-suave); }
.cell-sub { display: block; font-size: .8rem; color: var(--mudo); }

/* ---------- distintivos ---------- */
.badge { display: inline-block; padding: .18rem .65rem; border-radius: 999px;
  font-size: .76rem; font-weight: 700; background: var(--verde-suave);
  color: var(--verde-escuro); }
.badge-warn { background: #fdf3e0; color: var(--aviso); }
.badge-danger { background: #fdeceb; color: var(--perigo); }
.badge-info { background: #eaf2f8; color: var(--info); }
.badge-muted { background: #eef1ef; color: var(--mudo); }

/* Selo de classe energética */
.classe { display: inline-flex; align-items: center; justify-content: center;
  min-width: 3.2rem; height: 3.2rem; border-radius: 10px; color: #fff;
  font-size: 1.5rem; font-weight: 800; padding: 0 .6rem;
  text-shadow: 0 1px 2px rgba(0,0,0,.25); }
.classe-sm { min-width: 2rem; height: 2rem; font-size: .95rem;
  border-radius: 7px; }
.classe[data-classe="A+"] { background: var(--classe-aplus); }
.classe[data-classe="A"]  { background: var(--classe-a); }
.classe[data-classe="B"]  { background: var(--classe-b); }
.classe[data-classe="B-"] { background: var(--classe-bmenos); color: #4a4a00;
  text-shadow: none; }
.classe[data-classe="C"]  { background: var(--classe-c); color: #5a5200;
  text-shadow: none; }
.classe[data-classe="D"]  { background: var(--classe-d); color: #5c4500;
  text-shadow: none; }
.classe[data-classe="E"]  { background: var(--classe-e); }
.classe[data-classe="F"]  { background: var(--classe-f); }

/* ---------- mensagens ---------- */
.flashes { max-width: 1180px; margin: 1rem auto 0; padding: 0 1.5rem; }
.flash { padding: .7rem 1.1rem; border-radius: 10px; margin-bottom: .5rem;
  font-size: .92rem; border: 1px solid; }
.flash-success { background: var(--verde-suave); color: var(--verde-escuro);
  border-color: #f6d9bd; }
.flash-danger { background: #fdeceb; color: var(--perigo);
  border-color: #f2c4bf; }
.flash-warning { background: #fdf3e0; color: var(--aviso);
  border-color: #f0d9ad; }
.flash-info { background: #eaf2f8; color: var(--info); border-color: #c2d8ea; }

/* ---------- página interior ---------- */
.page { max-width: 1180px; margin: 0 auto; padding: 2.2rem 1.5rem 3.5rem; }
.page-head { margin-bottom: 1.8rem; }
.page-head h1 { font-size: 1.65rem; margin-bottom: .25rem; }
.page-head .sub { color: var(--mudo); }
.row { display: flex; gap: .8rem; align-items: center; flex-wrap: wrap; }
.row.between { justify-content: space-between; }

/* ---------- mapa ---------- */
.mapa { height: 380px; border-radius: var(--raio); border: 1px solid
  var(--linha); z-index: 1; }

/* ---------- calculadora ---------- */
.calc-linhas { display: flex; flex-direction: column; gap: .5rem; }
.calc-linha { display: grid; gap: .5rem; align-items: end;
  grid-template-columns: repeat(auto-fit, minmax(90px, 1fr)) 2.2rem; }
.calc-linha .rm { height: 2.4rem; border-radius: 8px; border: 1.5px solid
  var(--linha); background: var(--branco); color: var(--perigo);
  cursor: pointer; font-weight: 700; }
.resultado-grande { display: flex; gap: 2rem; align-items: center;
  padding: 1.5rem; background: var(--verde-suave); border-radius: var(--raio); }
.kv { display: grid; grid-template-columns: auto 1fr; gap: .2rem 1.2rem;
  font-size: .92rem; }
.kv dt { color: var(--mudo); }
.kv dd { font-weight: 600; color: var(--tinta); text-align: right; }

/* ---------- rodapé ---------- */
.rodape { background: var(--tinta); color: #8fa2b5; margin-top: 3rem;
  padding: 2.5rem 1.5rem; font-size: .88rem; }
.rodape-inner { max-width: 1180px; margin: 0 auto; display: flex;
  justify-content: space-between; gap: 2rem; flex-wrap: wrap; }
.rodape a { color: #bfd0e0; }
.rodape .marca { color: #fff; font-size: 1.1rem; }
.rodape .marca .en { color: #ffb056; }

/* ---------- passos ---------- */
.passos { counter-reset: passo; display: grid;
  grid-template-columns: repeat(3, 1fr); gap: 1.4rem; }
.passo { counter-increment: passo; position: relative; padding-top: .6rem; }
.passo::before { content: counter(passo); position: absolute; top: -1.1rem;
  left: 0; width: 2.4rem; height: 2.4rem; border-radius: 50%;
  background: var(--verde); color: #fff; font-weight: 800; display: flex;
  align-items: center; justify-content: center; }
.passo .card-body { padding-top: 2rem; }

.empty { text-align: center; padding: 2.5rem 1.5rem; color: var(--mudo); }
.empty h3 { color: var(--tinta); margin-bottom: .4rem; }

@media (max-width: 900px) {
  .hero-inner, .grid-3, .grid-2, .passos { grid-template-columns: 1fr; }
  .form-grid { grid-template-columns: 1fr; }
  .hide-sm { display: none; }
}


/* ---------- landing Construmarket ---------- */
.barra-confianca { background:var(--tinta); color:#eaf1f8;
  padding:1.1rem 1.5rem; }
.barra-confianca-inner { max-width:1180px; margin:0 auto; display:grid;
  grid-template-columns:repeat(4, 1fr); gap:1rem; }
.confianca-item { display:flex; gap:.6rem; align-items:center;
  font-size:.9rem; }
.confianca-item .ico { font-size:1.3rem; color:var(--verde); }

.categorias-grelha { display:grid; grid-template-columns:repeat(5, 1fr);
  gap:1rem; }
.categoria-cartao { text-decoration:none; background:var(--branco);
  border:1px solid var(--linha); border-radius:var(--raio); padding:1.1rem;
  text-align:center; transition:all .15s ease; box-shadow:var(--sombra); }
.categoria-cartao:hover { border-color:var(--verde); transform:translateY(-2px);
  text-decoration:none; }
.categoria-cartao .ico { font-size:1.7rem; display:block;
  margin-bottom:.45rem; }
.categoria-cartao strong { color:var(--tinta); font-size:.92rem; }

.passos-linha { display:grid; grid-template-columns:repeat(4, 1fr);
  gap:1rem; counter-reset:pl; }
.passo-linha { background:var(--branco); border:1px solid var(--linha);
  border-radius:var(--raio); padding:1.1rem; position:relative;
  counter-increment:pl; box-shadow:var(--sombra); }
.passo-linha::before { content:counter(pl); position:absolute; top:-14px;
  left:14px; width:28px; height:28px; border-radius:50%;
  background:var(--verde); color:#fff; font-weight:800; display:flex;
  align-items:center; justify-content:center; font-size:.9rem; }
.passo-linha strong { color:var(--tinta); display:block;
  margin:.4rem 0 .2rem; }
.passo-linha p { font-size:.85rem; color:var(--mudo); margin:0; }

@media (max-width: 900px) {
  .barra-confianca-inner { grid-template-columns:repeat(2, 1fr); }
  .categorias-grelha { grid-template-columns:repeat(2, 1fr); }
  .passos-linha { grid-template-columns:1fr 1fr; }
}

/* Fotografia, pesquisa e cobertura por distrito */
.hero { padding: 4rem 1.5rem; background: linear-gradient(125deg, #0e2b49, #183f61); }
.hero-inner { grid-template-columns: minmax(0, .9fr) minmax(0, 1.1fr); gap: 2.5rem; }
.hero-copy { min-width: 0; }
.hero h1 { font-size: clamp(2.3rem, 4.2vw, 3.7rem); letter-spacing: -.035em; }
.hero h1 span { color: #ffb056; }
.hero .lead { max-width: 46ch; color: #d1dfeb; }
.hero-photo { min-width: 0; width: 100%; margin: 0; overflow: hidden; border-radius: 22px;
  box-shadow: 0 18px 48px rgba(0, 0, 0, .22); }
.hero-photo img { display: block; width: 100%; max-width: 100%; height: auto;
  aspect-ratio: 1376 / 768; object-fit: contain; background: #fff; }
.hero-photo figcaption { padding: 1.2rem 1.6rem;
  background: rgba(10, 30, 48, .88); color: #fff; }
.hero-photo figcaption span { display: block; margin-bottom: .35rem; font-size: .9rem; }
.hero-photo figcaption strong { display: block; font-size: 1.08rem; }
.hero-pesquisa { display: grid; grid-template-columns: minmax(0, 1.1fr) minmax(0, 1fr);
  gap: .75rem; padding: .9rem; border-radius: 16px; }
.hero-pesquisa-field { min-width: 0; }
.hero-pesquisa label { display: block; margin-bottom: .3rem; font-size: .78rem; }
.hero-pesquisa select { width: 100%; min-width: 0; border: 1px solid var(--linha); font-size: .86rem; }
.hero-pesquisa .btn { grid-column: 1 / -1; border-radius: 10px; padding: .75rem 1rem; }
.hero-note { color: #c5d7e6; font-size: .82rem; margin: .7rem 0 1.35rem; }
.hero-actions { flex-wrap: wrap; }
.hero .hero-secondary { color: #fff; background: rgba(255, 255, 255, .1); border-color: rgba(255, 255, 255, .22); }
.hero .hero-secondary:hover { background: rgba(255, 255, 255, .2); }
.profissoes-section { padding-top: 0; }
.profissoes-grelha { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: .8rem; }
.profissao-link { display: flex; align-items: center; justify-content: space-between; gap: .8rem;
  background: #fff; border: 1px solid var(--linha); border-radius: 12px; padding: 1rem;
  color: var(--tinta); font-weight: 600; font-size: .92rem; }
.profissao-link:hover { text-decoration: none; border-color: var(--verde); background: var(--verde-suave); }
.profissao-link > span:last-child { color: var(--verde-escuro); }
.profissionais-filtros { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)) auto;
  gap: 1rem; align-items: end; }
.profissionais-filtros .field, .profissionais-resultados > div { min-width: 0; }
.profissionais-morada { grid-column: 1 / -1; font-size: .9rem; }
.profissionais-morada summary { cursor: pointer; color: var(--mudo); }
.profissionais-morada .field { margin-top: .7rem; max-width: 38rem; }
.profissionais-resultados { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 1.5rem; }
.pesquisa-estado { margin: .9rem 0; min-height: 1.5rem; }
.cobertura-texto { margin: .7rem 0 .4rem; color: var(--tinta); font-size: .88rem; }
.distritos-grelha { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: .55rem 1rem; margin-top: 1rem; }
.distritos-grelha .check { padding: .6rem; border: 1px solid var(--linha); border-radius: 8px; }
.distritos-grelha .check:has(input:checked) { background: var(--verde-suave); border-color: var(--verde); }
a:focus-visible, button:focus-visible, select:focus-visible, input:focus-visible, summary:focus-visible {
  outline: 3px solid #367bb2; outline-offset: 3px; }
.hero-pesquisa select:focus-visible { outline: 3px solid #367bb2; outline-offset: 3px; }
@media (max-width: 900px) {
  .hero-inner, .profissionais-resultados { grid-template-columns: 1fr; }
  .profissoes-grelha, .profissionais-filtros { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .profissionais-filtros .btn { align-self: end; }
}
@media (max-width: 560px) {
  .hero { padding: 2.4rem 1rem; }
  .hero-inner { gap: 2rem; }
  .hero-pesquisa, .profissoes-grelha, .profissionais-filtros, .distritos-grelha { grid-template-columns: 1fr; }
  .hero-photo figcaption { padding: 1rem; }
  .hero-actions .btn { width: 100%; text-align: center; }
  .profissoes-section .row { flex-wrap: wrap; }
}

@media print {
  .topo, .rodape, .flashes, button, form[action], .form-actions { display: none !important; }
  body { background: #fff; color: #000; }
  .page { max-width: none !important; margin: 0; padding: 0; }
  .card { box-shadow: none; border: 0; }
  a { color: inherit; text-decoration: none; }
}

/* Respeitar campos e botões ocultos, incluindo os controlos de localização. */
[hidden] { display: none !important; }

/* As ações das contas de prestador devem caber no ecrã do telemóvel. */
@media (max-width: 900px) {
  .topo-inner { flex-wrap: wrap; gap: .7rem; }
  .topo-acoes { width: 100%; margin-left: 0; flex-wrap: wrap; justify-content: flex-end; }
}

.processos-filtros { display:flex; flex-wrap:wrap; gap:.5rem; margin-top:.8rem; }
.processos-contagem { display:inline-block; padding:0 .4rem; border-radius:1rem; background:rgba(0,0,0,.08); }
.processo-linha { padding:.85rem 0; border-bottom:1px solid var(--linha); gap:1rem; flex-wrap:wrap; }
.pdf-visualizador { width:min(1200px,94vw); max-width:94vw; max-height:94vh; padding:1rem; border:1px solid var(--linha); border-radius:12px; box-shadow:0 20px 60px #0004; }
.pdf-visualizador::backdrop { background:rgba(10,25,35,.65); }
.pdf-visualizador-cabecalho { gap:1rem; padding-bottom:.7rem; }
.pdf-visualizador-cabecalho h2 { font-size:1.15rem; margin:0; }
.pdf-paginas { overflow:auto; width:100%; height:72vh; border:1px solid var(--linha); background:#f0f2f4; padding:12px; box-sizing:border-box; }
.pdf-paginas section { margin:0 auto 1rem; width:fit-content; max-width:100%; }
.pdf-paginas canvas { display:block; max-width:100%; height:auto !important; background:#fff; box-shadow:0 2px 6px #0002; }
.pdf-visualizador-acoes { gap:.5rem; margin-top:.8rem; flex-wrap:wrap; }
.logo-entidade { display:block; max-width:240px; max-height:90px; object-fit:contain; margin:.8rem 0; }
@media (max-width:600px) { .pdf-visualizador { padding:.7rem; } .pdf-paginas { height:65vh; } }

/* Identificação da inspeção e cronograma de barras. */
.inspecao-dados { min-width:0; margin:1rem 0; }
.inspecao-dados[hidden], .inspecao-dados [hidden], #cronograma-tabela[hidden] { display:none !important; }
.gantt-scroll { overflow-x:auto; max-width:100%; border:1px solid var(--linha); border-radius:8px; margin:1rem 0; }
.gantt-chart { width:100%; }
.gantt-row { display:grid; grid-template-columns:240px minmax(0,1fr); min-height:72px; border-bottom:1px solid var(--linha); }
.gantt-row:last-child { border-bottom:0; }
.gantt-name { position:sticky; left:0; z-index:3; background:white; padding:.8rem; border-right:1px solid var(--linha); overflow-wrap:anywhere; }
.gantt-header { min-height:45px; background:var(--fundo); }
.gantt-header .gantt-name { background:var(--fundo); font-weight:600; }
.gantt-axis, .gantt-track { position:relative; min-width:0; }
.gantt-axis { overflow:hidden; }
.gantt-tick { position:absolute; top:0; padding:.7rem .3rem; border-left:1px solid var(--linha); height:100%; white-space:nowrap; font-size:.8rem; }
.gantt-gridline { position:absolute; top:0; bottom:0; border-left:1px solid var(--linha); pointer-events:none; }
.gantt-bar { position:absolute; top:22px; height:28px; min-width:3px; border:1px solid #527f9e; border-radius:5px; background:#e7f0f7; overflow:hidden; color:#142d3e; }
.gantt-progress { position:absolute; inset:0 auto 0 0; background:#87b3d1; }
.gantt-value { position:relative; display:block; text-align:center; font-size:.8rem; line-height:26px; }
.gantt-late { border-color:#985919; background:#fff0d8; }
.gantt-late .gantt-progress { background:#e7b979; }
.gantt-done { border-color:#39775e; background:#39775e; color:#fff; }
.gantt-done .gantt-progress { background:#39775e; }
.gantt-today { position:absolute; top:0; bottom:0; width:2px; background:var(--perigo); pointer-events:none; z-index:2; }

@media (max-width:600px) {
  .gantt-row { grid-template-columns:160px minmax(0,1fr); }
  .gantt-name { position:static; }
  .gantt-scroll { scroll-margin-top:200px; }
}

/* Manter os filtros de vistorias dentro da largura disponível. */
#filtros-realizadas label, #filtros-realizadas select { min-width: 0; }
