:root{--map-water:#A9CFD0;--map-land:#EEF0E6;--map-hill:#CFDCC0;--map-city:#E3DED2;--map-road:#FFFFFF;--map-label:#5B6F6E;--pin:#132A2B;--pin-ink:#FFFFFF}
:root[data-theme="dark"]{--map-water:#16393B;--map-land:#1E2D2C;--map-hill:#27402F;--map-city:#2C3634;--map-road:#3A4A48;--map-label:#9FB3B1;--pin:#E6EFED;--pin-ink:#0E1A1B}

/* Cabeçalho */
.nav a{padding:6px 0;border-bottom:2px solid transparent;white-space:nowrap}
.nav a.on{color:var(--ink);border-color:var(--ochre)}
.acct{padding:8px 14px;gap:8px;white-space:nowrap}
.acct.on{border-color:var(--ink)}
.menu-btn{display:none;width:40px;height:40px;border:1px solid var(--line);border-radius:10px;background:var(--surface);flex-direction:column;justify-content:center;align-items:center;gap:4px;cursor:pointer}
.menu-btn span{width:18px;height:2px;background:var(--ink);border-radius:2px}
.btn.sm{padding:7px 14px;font-size:14px}
.btn.block{width:100%}
.btn:disabled{opacity:.45;cursor:not-allowed}
.btn svg{width:16px;height:16px}
.linkbtn{border:0;background:none;color:var(--teal);font-weight:600;cursor:pointer;padding:4px;text-decoration:underline;text-underline-offset:3px}
section.tight{padding-block:8px 24px}
.h3{font:400 24px/1.2 var(--f-display);margin:34px 0 12px}
.h4{font:600 16px/1.3 var(--f-body);margin:22px 0 10px}
.lbl{font-size:12px;font-weight:600;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-3);margin:16px 0 8px}
.good{color:var(--good);font-weight:600}
.small{font-size:12px}

/* Pesquisa da página inicial */
.sbox{margin-top:26px;background:var(--surface);border:1px solid var(--line);border-radius:16px;box-shadow:var(--shadow);overflow:visible}
.stabs{display:flex;gap:4px;padding:6px 6px 0}
.stabs button{border:0;background:none;padding:10px 16px;font-weight:600;color:var(--ink-3);cursor:pointer;border-bottom:3px solid transparent}
.stabs button[aria-selected="true"]{color:var(--ink);border-color:var(--teal)}
.sfields{display:grid;grid-template-columns:2fr 1fr 1fr auto;gap:6px;padding:8px;border-top:1px solid var(--line)}
.sfields .field:first-child{border-left:0}
.field.where{position:relative}
.ac{position:absolute;left:0;right:0;top:calc(100% + 6px);z-index:15;list-style:none;margin:0;padding:6px;background:var(--surface);border:1px solid var(--line);border-radius:12px;box-shadow:var(--shadow);min-width:260px}
.ac li{display:flex;justify-content:space-between;gap:12px;padding:9px 10px;border-radius:8px;cursor:pointer}
.ac li:hover{background:var(--sunk)}
.ac li span{font-size:12px;color:var(--ink-3);text-align:right}
.tiles{display:grid;grid-template-columns:repeat(4,1fr);gap:14px}
.tile{display:grid;grid-template-columns:40px 1fr auto;gap:12px;align-items:center;padding:16px;background:var(--surface);border:1px solid var(--line);border-radius:14px;text-decoration:none;transition:border-color .15s,transform .15s}
.tile:hover{border-color:var(--teal);transform:translateY(-2px)}
.tile .ic{width:40px;height:40px;border-radius:10px;background:var(--teal-soft);color:var(--teal);display:grid;place-items:center}
.tile .ic svg{width:20px;height:20px}
.tile b{display:block;font-size:15px}
.tile span span{font-size:13px;color:var(--ink-2)}
.tile .arr{color:var(--teal);font-weight:700}
.zone{text-decoration:none;color:inherit}
.store h3{margin-bottom:4px}
.info-list{display:grid;gap:12px;margin:16px 0}
.info-list div{display:grid;grid-template-columns:100px 1fr;gap:12px;font-size:15px}
.info-list dt{font-size:12px;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-3);padding-top:2px}
.info-list dd{margin:0}
.info-list a{color:var(--teal)}
.avatar{width:44px;height:44px;border-radius:50%;display:grid;place-items:center;font-weight:700;background:hsl(var(--h) 45% 88%);color:hsl(var(--h) 45% 25%);flex:none}

/* Cartões */
.card{position:relative;cursor:default}
.card h3 a{text-decoration:none}
.card h3 a:hover{color:var(--teal)}
.card.hl{outline:2px solid var(--ochre);outline-offset:2px}
.badges{position:absolute;top:12px;left:12px;display:flex;gap:6px;flex-wrap:wrap}
.badges .badge{position:static}
.badge.ico{display:grid;place-items:center;width:26px;height:24px;padding:0}
.badge.ico svg{width:15px;height:15px}
.badge.inline{position:static;display:inline-block;font-size:11px;padding:2px 8px}
.price s{font-size:14px;color:var(--ink-3);font-weight:500}
.cmp-check{display:flex;align-items:center;gap:6px;font-size:13px;color:var(--ink-2);margin-top:10px;cursor:pointer}
.cmp-check input{accent-color:var(--teal)}

/* Pesquisa */
.s-top{padding-block:24px 8px}
.s-bar{display:flex;flex-wrap:wrap;gap:10px;align-items:center}
.s-bar .stabs{padding:0;background:var(--surface);border:1px solid var(--line);border-radius:12px}
.s-where{flex:1;min-width:220px;background:var(--surface);border:1px solid var(--line);border-radius:12px;padding:6px 14px}
.f-toggle{display:none}
.viewsw{display:flex;background:var(--sunk);border-radius:10px;padding:3px}
.viewsw button{border:0;background:none;padding:8px 14px;border-radius:8px;font-weight:600;color:var(--ink-2);cursor:pointer}
.viewsw button[aria-pressed="true"]{background:var(--surface);color:var(--ink);box-shadow:0 1px 2px rgba(0,0,0,.1)}
.s-head{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;margin-top:22px}
.s-head h1{font-size:clamp(24px,3vw,32px)}
/* Com wrap: nos idiomas em que os botões são mais compridos — "Enregistrer la
   recherche" contra "Guardar pesquisa" — num telemóvel estreito passam para
   a linha de baixo em vez de saírem do ecrã. */
.s-actions{display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.chips{display:flex;flex-wrap:wrap;gap:8px;margin-top:14px;align-items:center}
.chip.on{background:var(--teal-soft);border-color:var(--teal);color:var(--ink)}
.s-body{display:grid;grid-template-columns:250px 1fr;gap:28px;padding-block:18px 72px;align-items:start}
.filters-side{position:sticky;top:calc(80px + env(safe-area-inset-top,0px))}
.f-inner{display:flex;flex-direction:column;gap:4px;max-height:calc(100vh - 110px);overflow:auto;padding-right:6px}
.f-head{display:none;justify-content:space-between;align-items:center;padding-bottom:10px}
fieldset{border:0;border-top:1px solid var(--line);margin:0;padding:14px 0 10px}
legend{font-size:12px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-3);padding:0;margin-bottom:8px;float:left;width:100%}
fieldset select{width:100%;border:1px solid var(--line);border-radius:8px;padding:8px;background:var(--surface)}
.ck{display:flex;align-items:center;gap:8px;padding:4px 0;font-size:14px;cursor:pointer;clear:both}
.ck input{accent-color:var(--teal);width:16px;height:16px}
.ck span{margin-left:auto;font-family:var(--f-mono);font-size:12px;color:var(--ink-3)}
.pair{display:grid;grid-template-columns:1fr 1fr;gap:8px;clear:both}
.pair label{display:flex;flex-direction:column;gap:4px;font-size:12px;color:var(--ink-3)}
.seg.small{display:inline-flex;flex-wrap:wrap;gap:2px;clear:both}
.seg.small button{padding:6px 10px;font-size:13px}
.s-results.map{display:grid;grid-template-columns:1.1fr 1fr;gap:20px;align-items:start}
.map-pane{position:sticky;top:calc(80px + env(safe-area-inset-top,0px))}
.map-box{border:1px solid var(--line);border-radius:14px;overflow:hidden;background:var(--map-water)}
.map-list{display:grid;gap:16px}
svg.map{display:block;width:100%;height:auto}
.zlabel{font:600 11px var(--f-body);fill:var(--map-label);cursor:pointer;letter-spacing:.02em}
.zlabel:hover,.zlabel.on{fill:var(--teal);text-decoration:underline}
.pin{cursor:pointer}
.pin rect,.pin path{fill:var(--pin)}
.pin text{font:600 11px var(--f-mono);fill:var(--pin-ink)}
.pin:hover rect,.pin:hover path,.pin.on rect,.pin.on path{fill:var(--ochre)}
.pin.on text,.pin:hover text{fill:#1d1606}
.pin:focus-visible{outline:none}.pin:focus-visible rect{stroke:var(--ochre);stroke-width:3}
.offmap rect{fill:var(--surface);stroke:var(--line)}
.offmap text{font:600 11px var(--f-body);fill:var(--ink-2)}
.mini.wide{display:grid;grid-template-columns:96px 1fr;gap:12px;align-items:center;margin-top:10px;padding:8px;border:1px solid var(--line);border-radius:12px;background:var(--surface);text-decoration:none}
.mini.wide .th{width:96px;height:72px;border-radius:8px;overflow:hidden}
.mini.wide .th svg{width:100%;height:100%;display:block}
.mini.wide span span{display:block;font-size:13px;color:var(--ink-2)}
.empty p{margin-top:6px}

/* Ficha */
.d-wrap{padding-block:18px 80px}
.crumbs{display:flex;flex-wrap:wrap;gap:6px;font-size:13px;color:var(--ink-3)}
.crumbs a{color:var(--ink-2);text-decoration:none}
.crumbs a:hover{color:var(--teal)}
.d-head{display:flex;flex-wrap:wrap;justify-content:space-between;gap:14px;align-items:end;margin:14px 0 18px}
.d-head h1{font-size:clamp(28px,4vw,42px);max-width:22ch}
.d-head .loc{margin-top:8px}
.d-tools{display:flex;flex-wrap:wrap;gap:6px}
.d-tools [aria-pressed="true"]{color:#C8433A;border-color:#C8433A}
.d-tools [aria-pressed="true"] path{fill:currentColor}
.d-tools .cmp-check{margin:0}
.gal-tabs{display:flex;gap:4px;border-bottom:1px solid var(--line);overflow-x:auto}
.gal-tabs button{border:0;background:none;padding:10px 14px;font-weight:600;color:var(--ink-3);cursor:pointer;border-bottom:3px solid transparent;white-space:nowrap}
.gal-tabs button[aria-selected="true"]{color:var(--ink);border-color:var(--teal)}
.gallery{margin-top:12px}
.g-main{position:relative;aspect-ratio:16/9;max-width:100%;border-radius:14px;overflow:hidden;background:var(--sunk)}
.g-main svg{width:100%;height:100%;display:block}
.g-count{position:absolute;left:12px;bottom:12px;background:rgba(10,24,25,.7);color:#fff;font-size:12px;padding:4px 10px;border-radius:999px}
.g-nav{position:absolute;top:50%;transform:translateY(-50%);width:42px;height:42px;border-radius:50%;border:0;background:var(--surface);color:var(--ink);font-size:24px;cursor:pointer;box-shadow:var(--shadow)}
.g-nav.prev{left:12px}.g-nav.next{right:12px}
.g-thumbs{display:flex;gap:8px;margin-top:8px;overflow-x:auto}
.g-thumbs button{flex:none;width:96px;height:64px;border-radius:8px;overflow:hidden;border:2px solid transparent;padding:0;cursor:pointer;background:none}
.g-thumbs button.on{border-color:var(--teal)}
.g-thumbs svg{width:100%;height:100%;display:block}
.pano{overflow-x:auto;border-radius:14px;cursor:grab;aspect-ratio:16/9;max-width:100%;touch-action:pan-y}
.pano svg{height:100%;width:auto;display:block}
.play{position:absolute;inset:0;margin:auto;width:72px;height:72px;border-radius:50%;background:rgba(255,255,255,.9);display:grid;place-items:center;font-size:26px;color:#132A2B}
.g-plan{border:1px solid var(--line);border-radius:14px;overflow:auto;background:var(--ground)}
.g-plan svg{display:block;width:100%;min-width:480px}
.g-plan.off{padding:40px;text-align:center;display:grid;gap:10px}
.d-grid{display:grid;grid-template-columns:1fr 360px;gap:36px;margin-top:28px;align-items:start}
.facts{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:1px;background:var(--line);border:1px solid var(--line);border-radius:12px;overflow:hidden;margin:0}
.facts div{background:var(--surface);padding:12px 14px}
.facts dt{font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-3)}
.facts dd{margin:3px 0 0;font:600 16px var(--f-mono)}
.prose{max-width:65ch;color:var(--ink-2);font-size:16.5px}
.feat-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:8px;padding:0;margin:0;list-style:none}
.feat-list li{padding:10px 12px;background:var(--surface);border:1px solid var(--line);border-radius:10px;font-size:15px}
.feat-list li::before{content:"✓";color:var(--teal);font-weight:700;margin-right:8px}
.ce-scale{display:grid;gap:3px;max-width:420px}
.ce-scale span{color:#fff;font:700 12px var(--f-mono);padding:4px 10px;border-radius:0 4px 4px 0;opacity:.45}
.ce-scale span.on{opacity:1}
.costs{display:grid;gap:1px;background:var(--line);border:1px solid var(--line);border-radius:12px;overflow:hidden}
.costs div{display:flex;justify-content:space-between;gap:16px;background:var(--surface);padding:12px 14px;font-size:15px}
.costs b{font-weight:600;text-align:right}
.sticky{position:sticky;top:calc(84px + env(safe-area-inset-top,0px));display:flex;flex-direction:column;gap:12px}
.big-price{font-size:30px}
.agent{display:flex;gap:12px;align-items:center;padding-top:12px;border-top:1px solid var(--line)}
.agent b{display:block}
.agent span{font-size:13px;color:var(--ink-2)}
.agent-btns{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.form.one{grid-template-columns:1fr}
.tip{padding:14px;border-radius:12px;background:var(--ochre-soft);display:grid;gap:8px;font-size:14px}
.tip .btn{justify-self:start}

/* Janela e comparador */
dialog.wide{max-width:min(1000px,calc(100vw - 32px))}
.m-pad{padding:28px;max-height:88vh;overflow:auto}
.m-pad h3{margin-bottom:6px}
.tbl-wrap{overflow-x:auto;margin-top:16px}
.cmp-tbl{border-collapse:collapse;width:100%;min-width:560px;font-size:14px}
.cmp-tbl th,.cmp-tbl td{padding:10px;border-bottom:1px solid var(--line);text-align:left;vertical-align:top}
.cmp-tbl thead th{vertical-align:bottom}
.cmp-tbl thead a{display:grid;gap:6px;text-decoration:none;font-weight:600}
.cmp-tbl thead svg{width:100%;max-width:200px;aspect-ratio:4/3;height:auto;border-radius:8px}
.cmp-tbl tbody th{color:var(--ink-3);font-weight:600;white-space:nowrap}
.best{color:var(--good);font-weight:700}
.cmp-bar{position:fixed;left:0;right:0;bottom:0;z-index:25;background:var(--surface);border-top:1px solid var(--line);box-shadow:0 -6px 20px rgba(0,0,0,.08);padding-bottom:env(safe-area-inset-bottom,0px)}
.cmp-bar .wrap{display:flex;align-items:center;gap:12px;padding-block:12px;padding-right:190px}
.cmp-refs{display:flex;gap:6px;flex:1;flex-wrap:wrap}
.cmp-refs span{font-size:12px;background:var(--sunk);padding:3px 8px;border-radius:6px}
.toast{position:fixed;left:50%;transform:translateX(-50%);bottom:calc(90px + env(safe-area-inset-bottom,0px));z-index:40;background:var(--ink);color:var(--ground);padding:12px 18px;border-radius:12px;font-size:14px;max-width:calc(100vw - 32px);box-shadow:var(--shadow)}
.visit .daypick,.visit .hourpick{display:flex;flex-wrap:wrap;gap:6px}
.daypick button{display:grid;justify-items:center;width:62px;padding:8px 0;border:1px solid var(--line);border-radius:10px;background:var(--surface);cursor:pointer;font-size:12px;color:var(--ink-2)}
.daypick b{font:600 20px var(--f-mono);color:var(--ink)}
.hourpick button{padding:8px 14px;border:1px solid var(--line);border-radius:999px;background:var(--surface);cursor:pointer;font-family:var(--f-mono)}
.daypick [aria-pressed="true"],.hourpick [aria-pressed="true"]{border-color:var(--teal);background:var(--teal-soft)}

/* Páginas de serviço */
.page{padding-block:36px 80px}
.page-head{margin-bottom:24px}
.page-head h1{font-size:clamp(32px,5vw,52px);margin-top:10px}
.page-head .lede{margin-top:14px;max-width:56ch;color:var(--ink-2);font-size:17px}
.two.wide-left{grid-template-columns:1.5fr 1fr}
/* Um bloco de grelha recusa-se, por omissão, a encolher abaixo do seu conteúdo.
   Num telemóvel isso empurrava a página inteira para fora do ecrã — a da
   remodelação ficava com 382 píxeis num ecrã de 375. Com min-width:0 o bloco
   aceita encolher e o texto quebra, que é o que se quer. */
.two>*,.hero-grid>*,.m-grid>*,.d-grid>*,.sfields>*,.search>*,.form>*,.works>*{min-width:0}
.side-list{padding-top:12px}
.side-list .h3{margin-top:0}
.side-list .tip{margin-top:20px}
.wiz-steps{display:flex;gap:6px;list-style:none;padding:0;margin:0 0 20px;flex-wrap:wrap}
.wiz-steps li{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--ink-3);padding:6px 10px 6px 6px;border-radius:999px;background:var(--sunk)}
.wiz-steps span{width:22px;height:22px;border-radius:50%;display:grid;place-items:center;background:var(--surface);font:600 12px var(--f-mono)}
.wiz-steps li.on{color:var(--ink);background:var(--teal-soft)}
.wiz-steps li.on span,.wiz-steps li.done span{background:var(--teal);color:var(--teal-ink)}
.wiz-nav{display:flex;justify-content:space-between;margin-top:22px;padding-top:16px;border-top:1px solid var(--line)}
.wiz .h3{margin-top:0}
.result.est{grid-template-columns:1fr;margin-top:18px}
.result.est .big{font-size:clamp(22px,3.4vw,30px)}
.chipset{display:flex;flex-wrap:wrap;gap:8px}
.chip[aria-pressed="true"]{background:var(--teal-soft);border-color:var(--teal)}
.ic.num{font:600 16px var(--f-mono)}
.match{font-size:14px;padding:12px 14px;border-radius:10px;background:var(--sunk)}
.match a{color:var(--teal);font-weight:600}
.works{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.work{display:flex;gap:10px;align-items:flex-start;padding:12px;border:1px solid var(--line);border-radius:12px;cursor:pointer;background:var(--ground)}
.work:has(input:checked){border-color:var(--teal);background:var(--teal-soft)}
.work input{margin-top:3px;accent-color:var(--teal)}
.work b{display:block;font-size:15px}
.work small{color:var(--ink-2);font-size:13px}
.tabs{display:flex;gap:4px;border-bottom:1px solid var(--line);overflow-x:auto;margin-bottom:22px}
.tabs button{border:0;background:none;padding:10px 14px;font-weight:600;color:var(--ink-3);cursor:pointer;border-bottom:3px solid transparent;white-space:nowrap}
.tabs button[aria-selected="true"]{color:var(--ink);border-color:var(--teal)}
.rows{list-style:none;padding:0;margin:0;border-top:1px solid var(--line)}
.rows li{display:flex;flex-wrap:wrap;align-items:center;gap:10px 16px;padding:14px 0;border-bottom:1px solid var(--line)}
.rows li>div{flex:1;min-width:220px;display:grid;gap:2px}
.rows a{color:var(--teal)}
.switch{display:flex;gap:6px;align-items:center;font-size:14px}
.switch input{accent-color:var(--teal)}
.pill{font-size:12px;font-weight:600;padding:3px 10px;border-radius:999px;background:var(--teal-soft);color:var(--teal)}

/* Rodapé */
.foot{border-top:1px solid var(--line);background:var(--surface);padding-block:40px 20px;margin-top:40px}
.foot-grid{display:grid;grid-template-columns:1.4fr 1fr 1fr 1fr;gap:28px}
.foot h4{margin:0 0 10px;font-size:12px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-3)}
.foot-grid>div{display:flex;flex-direction:column;gap:6px;font-size:14px}
.foot-grid a{color:var(--ink-2);text-decoration:none}
.foot-grid a:hover{color:var(--teal)}
.foot-grid span{color:var(--ink-2)}
.foot .brand svg{width:34px;height:34px}
.foot-note{margin-top:28px;padding-top:16px;border-top:1px solid var(--line);font-size:12px;color:var(--ink-3)}

@media (max-width:1100px){.tiles{grid-template-columns:1fr 1fr}.foot-grid{grid-template-columns:1fr 1fr}}
@media (max-width:1100px){
  .menu-btn{display:flex}
  .nav{display:none}
  .top .wrap{gap:12px}
  .acct{margin-left:auto}
  body.menu-open .nav{display:flex;flex-direction:column;position:absolute;top:64px;left:0;right:0;background:var(--surface);border-bottom:1px solid var(--line);padding:12px 20px;gap:4px;box-shadow:var(--shadow)}
  body.menu-open .nav a{padding:10px 0;border-bottom:1px solid var(--line)}
  /* O seletor de idiomas vem para aqui no telemóvel (ver app.js): dá-se-lhe ar
     e bandeiras maiores, que agora há espaço para elas. */
  body.menu-open .nav .langs{margin:10px 0 2px;gap:8px}
  body.menu-open .nav .langs .lang{padding:7px 9px}
  body.menu-open .nav .langs .lang svg{width:28px;height:19px}
  .s-body{grid-template-columns:1fr}
  .f-toggle{display:inline-flex}
  .filters-side{display:none;position:fixed;inset:0;z-index:50;background:var(--ground);padding:16px 20px calc(16px + env(safe-area-inset-bottom,0px))}
  body.filters-open .filters-side{display:block}
  .f-inner{max-height:100%}
  .f-head{display:flex}
  .s-results.map{grid-template-columns:1fr}
  .map-pane{position:static}
  .d-grid{grid-template-columns:1fr}
  .sticky{position:static}
  .two.wide-left{grid-template-columns:1fr}
}
@media (max-width:640px){
  /* 28px de cada lado é demasiado quando o ecrã tem 375: sobrava-lhe menos
     espaço do que o conteúdo precisa. */
  .panel{padding:18px}
  .sfields{grid-template-columns:1fr 1fr}
  .sfields .field.where{grid-column:1/-1;border-left:0}
  .sfields .field:nth-child(2){border-left:0}
  .sfields .btn{grid-column:1/-1}
  .tiles{grid-template-columns:1fr}
  .works{grid-template-columns:1fr}
  .foot-grid{grid-template-columns:1fr}
  .cmp-bar .wrap{padding-right:20px;flex-wrap:wrap}
  .cmp-bar~.chat-fab{bottom:calc(84px + env(safe-area-inset-bottom,0px))}
  .s-actions{width:100%}
  .s-actions .sel{flex:1}
  .info-list div{grid-template-columns:1fr;gap:2px}
}
@media print{.top,.foot,.chat-fab,.chat,.cmp-bar,.d-side form,.gal-tabs,.g-thumbs,.g-nav,.d-tools{display:none!important}.d-grid{grid-template-columns:1fr}}
