/* ══════════════════════════════════════════════════════════════════════════════════════════
   TIPOGRAFIA — Inter, servida pelo próprio projeto.
   ══════════════════════════════════════════════════════════════════════════════════════════

   POR QUE OS ARQUIVOS ESTÃO NO REPOSITÓRIO. A folha declarava `Inter` sem que nenhum arquivo da
   fonte existisse no projeto: o navegador caía silenciosamente em `-apple-system`, Segoe UI ou
   Arial, e o relatório saía com métricas diferentes em cada máquina — e no PDF, com outra fonte
   embutida. Um relatório de triagem que muda de forma conforme o computador de quem o abre não é
   o mesmo documento.

   VARIÁVEL, e não estática. O desenho usa pesos 250, 450, 550 e 650 — nenhum deles existe num
   arquivo estático. Só o eixo variável de 100 a 900 os produz exatamente como especificados.

   SEM REDE EM RUNTIME. Nada de Google Fonts, CDN ou dependência npm: os dois WOFF2 oficiais
   (Inter v4.1) e a licença SIL OFL 1.1 vivem em `assets/fonts/` e são servidos pelo mesmo
   processo que serve o resto. A página funciona sem internet.

   ITÁLICO ENTRA porque há conteúdo que realmente o usa: as notas de `.ma-info li i` são o único
   lugar do relatório sem `font-style: normal`. Sem o arquivo itálico, o navegador sintetizaria
   uma inclinação artificial — que é, de novo, uma fonte que ninguém escolheu. */

@font-face{
  font-family:"Inter";
  font-style:normal;
  font-weight:100 900;
  /* `block`, e não `swap`. `swap` PINTA o fallback e depois troca — é exatamente o vazamento
     visual que este patch existe para eliminar. Servido do mesmo host, o bloqueio é imperceptível,
     e a única coisa que o usuário chega a ver é Inter. */
  font-display:block;
  src:url("/assets/fonts/InterVariable.woff2") format("woff2");
}
@font-face{
  font-family:"Inter";
  font-style:italic;
  font-weight:100 900;
  font-display:block;
  src:url("/assets/fonts/InterVariable-Italic.woff2") format("woff2");
}

:root{
  /* A ÚNICA declaração de família do projeto. Qualquer outra é regressão. */
  --font-primary:"Inter";
  /* A COR DA MARCA, numa casa só. Ela aparecia literal em seis lugares e um verde de uma versão
     anterior do arco sobrevivia em outros três — foi um deles que vazou para o PDF, forçado com
     `!important` dentro de `@media print`. Cor de marca espalhada em literais volta sozinha. */
  --tiffany:#20d8df;
}

/* `html` carrega o único genérico da folha: último recurso TÉCNICO, para o caso de o WOFF2 local
   não carregar de forma alguma. Não é escolha tipográfica — é o que impede a página de ficar sem
   fonte nenhuma se o arquivo sumir. */
html{font-family:var(--font-primary),sans-serif}

/* Controles de formulário NÃO herdam a fonte do documento: o agente do usuário lhes impõe a fonte
   do sistema. Sem esta linha, busca, botões e selects seriam a única coisa da tela fora do Inter.
   `svg text` entra pelo mesmo motivo — texto dentro de SVG não herda de `body`. */
html,body,button,input,select,textarea,table,code,pre,svg text,
*::before,*::after{font-family:var(--font-primary)}

@media print{
  /* AS CORES DA MARCA SOBREVIVEM À IMPRESSÃO.
     Sem isto, o navegador descarta fundos e a capa navy sai branca com texto branco — ilegível.
     O relatório passa a não depender da opção manual "Background graphics" da caixa de diálogo,
     que o usuário não vê quando o PDF é gerado pela aplicação. */
  html{-webkit-print-color-adjust:exact;print-color-adjust:exact}
  .cover,.cover *,.toolbar,.badge,.dd,.pm-state,.scope,.warning,.scope-inline,
  .ds-gap,.pm-gap,.head-strip,.rs-head,.tags span{
    -webkit-print-color-adjust:exact;print-color-adjust:exact}

  /* A impressão e o PDF usam a MESMA família. Herança já daria isso; a regra é explícita porque é
     no PDF que a substituição por Helvetica ou Times passaria despercebida. */
  html,body,button,input,select,textarea,table,code,pre,svg text{font-family:var(--font-primary)}
}

:root{--deep:#0d1b2a;--navy:#14235a;--cream:#fff6e3;--ink:#1d2430;--mid:#626b75;--light:#98a0aa;--soft:#f7f9fa;--line:#dde3e8;--ok:#2e6e4e;--warn:#a4781f}*{box-sizing:border-box}html{background:#30343a}body{margin:0;background:#30343a;color:var(--ink)}.hero{min-height:100vh;background:var(--deep);display:flex;flex-direction:column;align-items:center;justify-content:center;padding:30px 18px;position:relative;overflow:hidden}.hero:before,.hero:after{content:"";position:absolute;border:1px solid #a9b1ba16;border-radius:50%}.hero:before{width:900px;height:900px;right:-320px;top:-390px}.hero:after{width:600px;height:600px;left:-250px;bottom:-340px}.brand-lockup,.hero-tag,form,.hint,#error,.local-note{position:relative;z-index:1}.brand-lockup{display:flex;flex-direction:column;align-items:center;color:white}.brand-sub{font-size:7px;letter-spacing:.48em;color:#fff9;margin-top:8px;margin-right:-.48em}.hero-tag{font-size:9px;letter-spacing:.3em;color:#ffffff80;font-weight:650;margin:26px 0 38px}.hero form{display:flex;align-items:center;width:min(660px,100%);height:58px;background:white;border-radius:30px;padding:0 9px 0 21px;box-shadow:0 16px 46px #0007}.search-icon{width:17px;height:17px;border:2px solid #1d243070;border-radius:50%;position:relative;margin-right:15px}.search-icon:after{content:"";position:absolute;width:7px;border-top:2px solid #1d243070;right:-5px;bottom:-3px;transform:rotate(45deg)}input{flex:1;border:0;outline:0;background:transparent;font-size:16px;color:var(--ink);min-width:0}form button{border:0;width:42px;height:42px;border-radius:50%;background:var(--navy);color:white;font-size:23px;cursor:pointer}.hint{color:#fff6;font-size:11px;margin-top:18px}.hero #error{color:#f1c1b8;font-size:12px}.local-note{position:absolute;bottom:30px;color:#ffffff55;font-size:8px;letter-spacing:.16em}.local-note span{display:inline-block;width:6px;height:6px;background:#74a986;border-radius:50%;margin-right:8px}.report{background:#30343a;padding:16px 0 70px}.toolbar{width:min(920px,calc(100% - 24px));margin:0 auto 16px;background:#111c2b;color:white;padding:11px 15px;display:flex;justify-content:space-between;align-items:center;font-size:12px}.toolbar small{opacity:.55;margin-left:10px}.toolbar button{color:white;background:transparent;border:1px solid #ffffff44;padding:7px 11px;margin-left:6px;cursor:pointer}.cover,.grid,.warning,.scope{width:min(920px,calc(100% - 24px));margin-left:auto;margin-right:auto}.cover{height:680px;background:var(--deep);color:white;padding:44px 58px;display:flex;flex-direction:column;justify-content:space-between;position:relative;overflow:hidden;box-shadow:0 24px 70px #0006}.cover:after{content:"";width:520px;height:520px;border:1px solid #fff2;border-radius:50%;position:absolute;right:-240px;top:-190px}.cover-top{display:flex;justify-content:space-between;font-size:8px;letter-spacing:.15em;color:#fff7}.cover-title{margin-top:auto;margin-bottom:44px;position:relative;z-index:1}.cover-title p{color:#a9b1ba;font-size:9px;letter-spacing:.21em}.cover-title h1{font-size:68px;font-weight:250;line-height:.95;letter-spacing:-.05em;margin:22px 0 28px}.cover-title h1 strong{display:block;color:var(--cream);font-weight:650}.cover-title h2{font-weight:400;font-size:20px;margin:0 0 7px}.cover-title span{font-size:11px;color:#fff7}.cover-kpis{display:grid;grid-template-columns:repeat(4,1fr);border-top:1px solid #fff2;border-bottom:1px solid #fff2}.cover-kpis div{padding:18px 14px}.cover-kpis div+div{border-left:1px solid #fff2}.cover-kpis b{display:block;font-size:15px;font-weight:550}.cover-kpis small{display:block;color:#a9b1ba;text-transform:uppercase;font-size:7px;letter-spacing:.12em;margin-top:7px}.warning,.scope{background:#fff8e8;border-left:3px solid var(--warn);padding:15px 18px;font-size:12px;margin-top:22px}.grid{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-top:16px}.grid article{background:white;border:1px solid var(--line);padding:25px}.card-label{font-size:8px;letter-spacing:.15em;color:var(--light);font-weight:700}.grid h2{color:var(--navy);font-weight:450;font-size:23px;margin:5px 0 20px}.row{border-top:1px solid #eef1f3;padding:13px 0}.row>div:first-child{display:flex;justify-content:space-between;gap:15px}.row span{font-size:11px;color:var(--mid)}.row strong{text-align:right;font-size:12px}.provenance{display:flex;align-items:center;gap:7px;flex-wrap:wrap;margin-top:7px;font-size:9px}.provenance a{color:var(--navy)}.provenance small{width:100%;color:var(--light);line-height:1.45}.badge{border-radius:2px;padding:3px 6px;background:#eee;text-transform:uppercase;font-size:7px;letter-spacing:.06em}.badge.medium{background:#e9f2ec;color:#2e6e4e}.badge.unverified{background:#fbf4e6;color:#a4781f}.tags{display:flex;gap:5px;flex-wrap:wrap;margin:12px 0}.tags span,.tags{font-size:9px}.tags span{background:var(--soft);padding:5px 7px}.scope{background:#edf4ef;border-color:var(--ok);line-height:1.6}.scope p{color:var(--mid);margin-bottom:0}footer{text-align:center;background:#30343a;color:#ffffff66;padding:22px;font-size:9px;letter-spacing:.02em;line-height:1.55}.footer-copy{width:min(720px,calc(100% - 32px));margin:0 auto}.footer-copy strong{color:#ffffff80;font-weight:600}@media(max-width:700px){.brand-mark-hero{width:min(186px,48vw)}.hero-tag{text-align:center;line-height:1.7}.cover{height:600px;padding:35px 28px}.cover-title h1{font-size:54px}.cover-kpis{grid-template-columns:1fr 1fr}.cover-kpis div:nth-child(3){border-left:0;border-top:1px solid #fff2}.cover-kpis div:nth-child(4){border-top:1px solid #fff2}.grid{grid-template-columns:1fr}.toolbar small{display:none}.footer-copy{width:min(520px,calc(100% - 24px))}}@media print{html,body,.report{background:white}.toolbar,#suggestions{display:none}.warning,.disclaimers,.sources{break-inside:avoid}.cover{width:100%;height:100vh;box-shadow:none;page-break-after:always}.grid,.scope{width:100%}.grid article{break-inside:avoid}.scope{break-inside:avoid}}

/* MP-01 — autocomplete, estados e painel de identidade. Mesma linguagem visual do produto. */
.search-shell{position:relative;width:min(660px,100%);z-index:2}
.search-kind{position:relative;z-index:2;display:flex;gap:4px;margin:-24px 0 12px;padding:3px;border:1px solid #ffffff20;border-radius:18px;background:#07142180}
.search-kind button{border:0;border-radius:14px;padding:7px 13px;background:transparent;color:#ffffff88;font-size:10px;font-weight:600;line-height:1;cursor:pointer}
.search-kind button.active{background:#ffffff15;color:white}
.company-view{width:min(920px,calc(100% - 24px));margin:0 auto;background:white;padding:32px}
.company-head{display:flex;justify-content:space-between;gap:20px;align-items:flex-start;border-bottom:1px solid var(--line);padding-bottom:22px}
.company-head h1{color:var(--navy);font-size:30px;margin:4px 0 8px}.company-head p{margin:0;color:var(--mid);font-size:12px}
.company-status{background:#e9f2ec;color:var(--ok);padding:6px 9px;font-size:9px;letter-spacing:.08em}
.company-facts{display:grid;grid-template-columns:repeat(3,1fr);gap:1px;background:var(--line);margin:22px 0}.company-facts div{background:white;padding:14px}.company-facts span{display:block;color:var(--mid);font-size:9px;text-transform:uppercase}.company-facts strong{display:block;margin-top:5px;font-size:12px}
.company-properties{display:grid;grid-template-columns:1fr 1fr;gap:10px}.company-property{border:1px solid var(--line);background:var(--soft);padding:14px;text-align:left;cursor:pointer;color:var(--ink)}.company-property strong{display:block;color:var(--navy);font-size:12px}.company-property span{display:block;color:var(--mid);font-size:10px;margin-top:5px}.company-note{font-size:10px;color:var(--mid);line-height:1.5;margin:15px 0}
@media(max-width:700px){.company-facts{grid-template-columns:1fr}.company-properties{grid-template-columns:1fr}.company-view{padding:22px}.company-head{flex-direction:column}}
.hero .search-shell form{width:100%}
form.is-loading button{opacity:.55;pointer-events:none}
#suggestions{list-style:none;margin:6px 0 0;padding:6px;background:white;border-radius:14px;box-shadow:0 18px 48px #0007;max-height:320px;overflow:auto;position:absolute;left:0;right:0}
#suggestions li{padding:11px 14px;font-size:13px;color:var(--ink);cursor:pointer;border-radius:9px}
#suggestions li:hover,#suggestions li.active{background:var(--soft)}
.hint[data-tone=loading]{color:#ffffffaa}
.hint[data-tone=error]{color:#f1c1b8}
.provenance .method{background:#eef1f3;color:var(--mid);padding:3px 6px;border-radius:2px;text-transform:uppercase;font-size:7px;letter-spacing:.06em}
.badge.high{background:#e3efe7;color:#245c40}.badge.low{background:#fbf1e6;color:#8a5d1a}
.badge.derived,.badge.registry{background:#eaeef5;color:var(--navy)}
.row strong.path{font-size:9px;color:var(--mid);font-weight:400;word-break:break-word}
.scope-inline{margin-top:14px;background:#edf4ef;border-left:3px solid var(--ok);padding:10px 12px;font-size:10px;line-height:1.6;color:var(--mid)}
.sources,.disclaimers{width:min(920px,calc(100% - 24px));margin:16px auto 0;background:white;border:1px solid var(--line);padding:22px 25px;font-size:11px}
.sources ul,.scope ul{list-style:none;margin:12px 0 0;padding:0}
.sources li,.scope li{padding:9px 0;border-top:1px solid #eef1f3;line-height:1.6}
.sources li small{display:block;color:var(--light);font-size:9px;margin-top:4px}
.sources a,.scope a{color:var(--navy)}
.disclaimers{background:#fff8e8;border-left:3px solid var(--warn)}
.disclaimers p{margin:0 0 8px;color:#6b5a30;line-height:1.6}
.disclaimers p:first-child{font-weight:650;color:#4a3f22}
.disclaimers p:last-child{margin-bottom:0}
.sources-note{color:var(--mid);font-size:10px;line-height:1.6;margin:10px 0 0}
/* Endereço da fonte em texto: no papel o link não é clicável, e a fonte precisa continuar
   identificável. Origem + caminho, sem a querystring — ver `sourceHref` em app.js. */
.src-url{display:block;color:var(--light);font-size:9px;margin-top:3px;overflow-wrap:anywhere}
.src-url i{font-style:normal;color:#b8bec6}
small .src-url{display:inline;margin:0}

/* MP-01.1 — painel de cobertura: endereço resolvido, property data ainda não conectada. */
.coverage{width:min(920px,calc(100% - 24px));margin:0 auto;background:white;border:1px solid var(--line);padding:40px 44px}
.coverage-eyebrow{font-size:8px;letter-spacing:.16em;color:var(--warn);font-weight:700;margin:0}
.coverage h2{color:var(--navy);font-weight:450;font-size:27px;margin:10px 0 26px}
.coverage-grid{display:grid;grid-template-columns:repeat(4,1fr);border-top:1px solid var(--line);border-bottom:1px solid var(--line)}
.coverage-grid div{padding:16px 14px}
.coverage-grid div+div{border-left:1px solid var(--line)}
.coverage-grid b{display:block;font-size:14px;font-weight:550}
.coverage-grid small{display:block;color:var(--light);text-transform:uppercase;font-size:7px;letter-spacing:.12em;margin-top:6px}
.coverage-msg{background:#fff8e8;border-left:3px solid var(--warn);padding:15px 18px;font-size:12px;line-height:1.6;margin:24px 0 12px}
.coverage-sub{color:var(--mid);font-size:11px;line-height:1.6;margin:0 0 26px}
.coverage-lists{display:grid;grid-template-columns:1fr 1fr;gap:26px;border-top:1px solid #eef1f3;padding-top:20px}
.coverage-lists strong{font-size:9px;letter-spacing:.1em;text-transform:uppercase;color:var(--light)}
.coverage-lists ul{list-style:none;margin:10px 0 0;padding:0;font-size:11px;line-height:1.9;color:var(--mid)}
@media(max-width:700px){.coverage{padding:28px 22px}.coverage-grid{grid-template-columns:1fr 1fr}.coverage-lists{grid-template-columns:1fr}}

/* MP-01.2 — logo oficial 2BTRUST.
   A escolha da variante é do CONTEXTO VISUAL, não do markup: cada superfície define
   --brand-logo, e uma única regra aplica. O src do <img> é a variante colorida, que é o
   comportamento correto sem CSS; o alt="2BTRUST" permanece em ambos os casos. */
:root{--brand-logo:url('/assets/brand/2btrust-logo-color.png')}   /* superfície clara → azul/original */
.hero,.cover,.toolbar{--brand-logo:url('/assets/brand/2btrust-logo-white.png')}  /* superfície dark → branco */
.brand-mark{content:var(--brand-logo);display:block;height:auto;max-width:100%;object-fit:contain}
.brand-mark-hero{width:min(232px,55vw)}
.brand-mark-mini{width:104px;flex:none}
/* O src do <img> é a variante BRANCA porque todas as superfícies que hoje exibem a marca são
   dark; assim, um navegador sem suporte a `content` em elemento substituído ainda mostra a
   variante legível. Superfície clara futura recebe a variante azul pelo :root acima. */

/* MP-02 — leitura rápida e eixos de due diligence. Mesma linguagem visual do relatório. */
.summary{width:min(920px,calc(100% - 24px));margin:16px auto 0;background:white;border:1px solid var(--line);padding:25px}
.summary-rows{display:grid;gap:2px;margin-top:16px}
.summary-rows>div{border-top:1px solid #eef1f3;padding:13px 0}
.summary-rows span{display:block;font-size:11px;color:var(--mid)}
.summary-rows strong{display:block;font-size:13px;margin:5px 0 6px}
.summary-rows small{display:block;color:var(--light);font-size:10px;line-height:1.6}
.dd{display:inline-block;border-radius:2px;padding:3px 6px;font-size:7px;letter-spacing:.06em;text-transform:uppercase;font-weight:700}
.dd-ok{background:#e3efe7;color:#245c40}
.dd-warning{background:#fbf1e6;color:#8a5d1a}
.dd-unverified,.dd-not_covered{background:#eef1f3;color:var(--mid)}
.dd-source_error{background:#f7e4e0;color:#8a3524}
.links{list-style:none;margin:12px 0 0;padding:0;font-size:10px;line-height:1.9}
.links a{color:var(--navy)}
.links code{display:block;color:var(--light);font-size:9px}
.scope-inline.warn{background:#fff8e8;border-left-color:var(--warn)}
.owner-company{margin-top:14px;padding:12px 14px;background:#f4f7f8;border-left:3px solid var(--navy);break-inside:avoid}
.owner-company>p{margin:0 0 8px;color:var(--navy);font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.07em}
.owner-company ul{list-style:none;margin:0;padding:0}
.owner-company li{display:flex;justify-content:space-between;gap:18px;padding:7px 0;border-top:1px solid #dce4e8;font-size:10px}
.owner-company li b{color:var(--ink)}
.owner-company li span{color:var(--mid);text-align:right}
.owner-company small{display:block;margin-top:8px;color:var(--mid);font-size:9px;line-height:1.45}
.dd-not_started{background:#eef1f3;color:var(--light)}
.dd-checking{background:#eaeef5;color:var(--navy)}

/* MP-04 — Property Tax. Quatro tons, e cada um exige que a FONTE tenha declarado aquilo.
   Verde só sai quando o roll declara saldo zero COM pagamento e data, e o dataset cobre o
   exercício corrente. Dado de outro exercício nunca pinta verde: o título vira cinza e a
   cor do achado desce para a linha do exercício, ao lado do ano a que ele pertence. */
:root{--tax-paid:#245c40;--tax-unpaid:#8a5d1a;--tax-delinquent:#8a3524;--tax-unknown:#626b75}
.dd-tax-paid{background:#e3efe7;color:var(--tax-paid)}
.dd-tax-unpaid{background:#fbf1e6;color:var(--tax-unpaid)}
.dd-tax-delinquent{background:#f7e4e0;color:var(--tax-delinquent)}
.dd-tax-unverified{background:#eef1f3;color:var(--tax-unknown)}
.tax-headline{display:flex;align-items:center;gap:10px;padding:14px 15px;border-left:3px solid var(--tax-unknown);background:var(--soft);margin-bottom:4px}
.tax-headline strong{font-size:14px;font-weight:550}
.tax-paid{border-left-color:var(--tax-paid);background:#eff6f1}
.tax-unpaid{border-left-color:var(--tax-unpaid);background:#fdf7ee}
.tax-delinquent{border-left-color:var(--tax-delinquent);background:#fbefec}
.tax-unverified{border-left-color:var(--tax-unknown);background:var(--soft)}
.tax-confirm{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:16px 0 0}
.tax-btn{display:inline-block;background:var(--navy);color:white;text-decoration:none;padding:9px 15px;font-size:11px;letter-spacing:.04em}
.tax-confirm code{font-size:10px;color:var(--mid)}
.tax-history{margin-top:16px;border-top:1px solid #eef1f3;padding-top:12px}
.tax-history summary{font-size:11px;color:var(--navy);cursor:pointer}
.tax-history table{width:100%;border-collapse:collapse;margin-top:12px;font-size:10px}
.tax-history th{text-align:left;color:var(--light);font-size:8px;letter-spacing:.1em;text-transform:uppercase;padding:6px 6px 6px 0;border-bottom:1px solid var(--line)}
.tax-history td{padding:7px 6px 7px 0;border-bottom:1px solid #eef1f3;color:var(--ink);vertical-align:top}
.tax-history td small{display:block;color:var(--light);font-size:9px}
.tax-history-note{color:var(--mid);font-size:10px;line-height:1.6;margin:10px 0 0}
@media print{.tax-history[open] summary{list-style:none}.tax-history{break-inside:avoid}}

/* Relatório: estado de tela e apêndice de auditoria. */
[hidden]{display:none!important}
.conflict-audit{width:min(920px,calc(100% - 24px));margin:22px auto 0;background:#fff;padding:25px;border:1px solid var(--line)}
.conflict-audit h2{color:var(--navy);font-size:23px;font-weight:450;margin:5px 0 8px}
.conflict-audit>p:not(.card-label){color:var(--mid);font-size:11px;line-height:1.55;margin:0 0 16px}
.conflict-list{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.conflict-item{border:1px solid #eef1f3;padding:10px;min-width:0}
.conflict-item code{display:block;color:var(--navy);font-size:9px;font-weight:700;margin-bottom:6px;overflow-wrap:anywhere}
.conflict-item span{display:block;color:var(--mid);font-size:9px;line-height:1.45;overflow-wrap:anywhere}
.conflict-item .conflict-same{color:var(--warn);margin-top:5px}
@media(max-width:700px){.conflict-list{grid-template-columns:1fr}}
@media print{.conflict-audit{width:100%;break-inside:auto}.conflict-item{break-inside:avoid}}

/* Capa-viva: o arco deixa de ser ornamento e passa a comunicar o andamento real da consulta. */
.cover:after{display:none}
.cover{padding:38px 58px}
.cover-top{align-items:flex-start}
.cover-brand{display:flex;flex-direction:column;gap:7px}
.cover-brand span{font-size:6px;letter-spacing:.28em;color:#ffffff70}
.cover-title{margin:auto 0 30px;text-align:center}
.cover-title>h2{margin:18px 0 7px}
.cover-progress{--progress:34;--gauge:var(--tiffany);width:330px;height:330px;margin:0 auto;position:relative;display:grid;place-items:center}
.cover-progress-ring{position:absolute;inset:0;border-radius:50%;background:conic-gradient(from 225deg,var(--gauge) calc(var(--progress)*2.7deg),#ffffff18 0 270deg,transparent 0);filter:drop-shadow(0 0 12px #20d8df33);transition:background .45s ease,filter .45s ease}
.cover-progress-ring:after{content:"";position:absolute;inset:10px;border-radius:50%;background:var(--deep)}
.cover-progress-center{position:relative;z-index:1;width:82%}
.cover-progress-center p{color:#a9b1ba;font-size:8px;letter-spacing:.24em;margin:0 0 16px}
.cover-progress-center h1{font-size:66px;font-weight:250;line-height:.82;letter-spacing:-.055em;margin:0}
.cover-progress-center h1 strong{display:block;color:var(--cream);font-weight:650}
.cover-progress-readout{display:flex;align-items:center;justify-content:center;gap:9px;margin-top:24px}
.cover-progress-value{font-size:13px!important;font-weight:700;color:var(--gauge)!important}
.cover-progress-status{text-transform:uppercase;font-size:7px!important;letter-spacing:.16em;color:#ffffff9c!important}
.cover-progress[data-state=complete]{--gauge:var(--tiffany)}
.cover-progress[data-state=complete] .cover-progress-ring{filter:drop-shadow(0 0 18px #20d8df55)}
.cover-progress[data-state=partial]{--gauge:var(--tiffany)}
.cover-kpis div{padding-top:15px;padding-bottom:15px}

@media(max-width:700px){
  .cover{height:660px;padding:28px 22px}
  .cover-progress{width:270px;height:270px}
  .cover-progress-center h1{font-size:54px}
}

/* No papel o arco sempre sai cheio: o PDF é gerado DEPOIS do carregamento, e um arco pela
   metade impresso sugeriria pesquisa interrompida. O RÓTULO desse estado não pode viver aqui:
   `content` de CSS não lê dicionário, e um literal em português apareceria no relatório em
   inglês. Ele é emitido por `pageMarginBoxes()`, no idioma escolhido (MP-08). */
@media print{
  /* O ARCO NÃO MUDA DE COR NO PAPEL. Esta linha forçava `#31c779` — um verde de uma versão
     anterior do arco — sobre o tiffany `#20d8df` que a tela usa desde então. O `!important`
     vencia a regra mais recente, e o PDF saía com uma cor que a marca não tem. O que o papel
     precisa forçar é só o PREENCHIMENTO: o PDF é gerado depois do carregamento, e um arco pela
     metade impresso sugeriria pesquisa interrompida. */
  .cover-progress{--progress:100!important}
  .cover-progress-value{display:none}
  .cover-progress-status{font-size:0!important}
  .cover-progress-status:before{font-size:7px}
}

/* Arco oficial 2BTRUST: somente a curva superior do símbolo, não um velocímetro circular. */
.cover-progress{--gauge:var(--tiffany);width:390px;height:300px;align-items:end}
.cover-progress-ring{position:absolute;inset:0;width:100%;height:auto;overflow:visible;background:none;border-radius:0;filter:drop-shadow(0 0 10px #20d8df40)}
.cover-progress-ring:after{display:none}
.cover-progress-ring path{stroke:none}
.cover-progress-track{fill:#ffffff12}
.cover-progress-fill{fill:var(--gauge)}
.cover-progress-clip{width:calc(var(--progress)*1%);transition:width .55s cubic-bezier(.22,.75,.22,1)}
.cover-progress-center{align-self:end;margin-bottom:8px}
.cover-progress[data-state=complete]{--gauge:var(--tiffany)}
.cover-progress[data-state=complete] .cover-progress-ring{filter:drop-shadow(0 0 18px #20d8df70)}
.cover-progress[data-state=partial]{--gauge:var(--tiffany)}

@media(max-width:700px){
  .cover-progress{width:300px;height:245px}
}

/* =======================================================================================
   MP-05 · RELATÓRIO PROFISSIONAL — tela e PDF a partir do MESMO modelo de dados.
   Não existe segundo relatório: o PDF é este documento, com as regras de página aplicadas.
   ======================================================================================= */

/* Largura única de documento. Todas as faixas usam a mesma, e é isso que produz margem
   consistente em vez de blocos com larguras diferentes empilhados. */
:root{--doc:min(920px,calc(100% - 24px))}
.doc{display:block}
.panel,.grid,.cover,.warning,.scope,.sources,.disclaimers,.conflict-audit{width:var(--doc);margin-left:auto;margin-right:auto}

/* Cartões não se esticam para acompanhar o vizinho: cartão curto fica curto, e o par não
   herda a altura do mais longo. Era isso que deixava Official Records vazio ao lado de um
   Property Tax gigante. */
.grid{align-items:start}
.grid.pair{grid-template-columns:1fr 1fr}
.grid.full{grid-template-columns:1fr}          /* conteúdo longo ocupa a largura inteira */

/* Dentro de um cartão de largura total, as linhas fluem em duas colunas: densidade sem
   transformar o cartão numa tira estreita. */
.card-cols{column-count:2;column-gap:34px}
.card-cols>.row{break-inside:avoid;-webkit-column-break-inside:avoid}
.card-cols>.row:first-child{border-top:0}
@media(max-width:700px){.card-cols{column-count:1}}

/* `.summary-rows span{display:block}` tem especificidade maior que `.dd`, e por isso os
   selos da leitura rápida vinham renderizados como BARRAS de largura total — na tela e no
   PDF. Selo é chip, não faixa. */
.summary-rows .dd,.summary-rows .badge,.row .dd,.row .badge,.head-strip .dd{display:inline-block;width:auto}
.panel-title{color:var(--navy);font-weight:450;font-size:23px;margin:5px 0 18px}
.summary.panel{padding:25px}

/* Faixa de estado no topo de cada cartão de diligência. */
.head-strip{display:flex;align-items:center;gap:10px;padding:14px 15px;border-left:3px solid var(--mid);background:var(--soft);margin-bottom:6px}
.head-strip strong{font-size:14px;font-weight:550}
.strip-tax-paid,.strip-flood-outside{border-left-color:var(--ok);background:#eff6f1}
.strip-tax-unpaid,.strip-flood-partial{border-left-color:var(--warn);background:#fdf7ee}
.strip-tax-delinquent,.strip-flood-sfha{border-left-color:#8a3524;background:#fbefec}
.strip-tax-unverified,.strip-flood-unverified,.strip-zoning-unverified{border-left-color:var(--mid);background:var(--soft)}
.strip-zoning-mapped{border-left-color:var(--navy);background:#eef1f7}

/* Cores de cobertura/confiança — não de conclusão de investimento. */
.dd-flood-outside{background:#e3efe7;color:#245c40}
.dd-flood-partial{background:#fbf1e6;color:#8a5d1a}
.dd-flood-sfha{background:#f7e4e0;color:#8a3524}
.dd-flood-unverified,.dd-zoning-unverified{background:#eef1f3;color:var(--mid)}
.dd-zoning-mapped{background:#eaeef5;color:var(--navy)}

/* Distribuição das zonas de flood no lote. */
.zone-bar{display:flex;height:9px;margin:14px 0 9px;overflow:hidden;background:#eef1f3}
.zone-seg{display:block;height:100%}
.zone-sfha,i.zone-sfha{background:#c2705d}
.zone-safe,i.zone-safe{background:#6f9d84}
.zone-legend{display:flex;flex-wrap:wrap;gap:6px 18px;font-size:10px;color:var(--mid);margin-bottom:6px}
.zone-legend i{display:inline-block;width:8px;height:8px;margin-right:6px}

/* Regra normativa não confirmada — a ausência precisa ser enumerável, não silenciosa. */
.rules{margin-top:16px;border:1px solid var(--line);background:#fbfcfd;padding:16px 18px}
.rules-head{display:flex;justify-content:space-between;align-items:baseline;gap:12px;flex-wrap:wrap;margin:0 0 10px;font-size:12px;color:var(--navy)}
.rules-head span{font-size:10px;color:var(--mid);font-weight:400}
.rules ul{list-style:none;margin:0;padding:0}
.rules li{border-top:1px solid #eef1f3;padding:9px 0;font-size:11px;break-inside:avoid}
.rules li b{display:block;color:var(--ink)}
.rules li span{display:block;color:var(--mid);font-size:10px;line-height:1.55;margin:3px 0}
.rules li a{color:var(--navy);font-size:10px}
.rules-note{color:var(--mid);font-size:10px;line-height:1.6;margin:12px 0 0}

/* Botão de conferência oficial. */
.cta-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:16px 0 0}
.cta{display:inline-block;background:var(--navy);color:#fff;text-decoration:none;padding:9px 15px;font-size:11px;letter-spacing:.04em}
.cta-row code{font-size:10px;color:var(--mid)}
.tax-btn{display:inline-block;background:var(--navy);color:#fff;text-decoration:none;padding:9px 15px;font-size:11px}
.cover-foot{position:relative;z-index:1;margin:16px 0 0;font-size:8px;letter-spacing:.12em;color:#ffffff66}

/* Cabeçalho, rodapé e paginação do PDF vivem em `@page` margin boxes emitidos na geração
   do relatório (`pageMarginBoxes`), porque o texto muda com a propriedade. */

/* =======================================================================================
   PDF — Letter, fundo branco, margens iguais, nada da tela de busca.
   ======================================================================================= */
@media print{
  @page{
    size:letter;
    margin:16mm 14mm 17mm;
    /* Cabeçalho, rodapé e numeração entram por margin boxes emitidos em `pageMarginBoxes`:
       o texto depende da propriedade, e `content` de margin box não lê o documento. */
  }

  /* Fundo branco em tudo. A tela é escura por fora do documento; o papel não. */
  html,body,.report,main,.doc{background:#fff!important;height:auto!important;min-height:0!important}
  body{color:#1d2430;font-size:9.5pt;line-height:1.5}

  /* Só o relatório vai ao papel. Busca, toolbar, sugestões e rodapé de site somem. */
  .hero,#hero,.toolbar,[data-print="hide"],#suggestions,body>footer,.search-shell,form{display:none!important}

  /* Larguras de tela dão lugar à caixa de conteúdo da página: sem laterais escuras. */
  :root{--doc:100%}
  .report{padding:0;margin:0}
  .doc{padding:0;margin:0}
  .doc>*:last-child{margin-bottom:0!important}
  .panel,.grid,.cover,.warning,.scope,.sources,.disclaimers,.conflict-audit{width:100%;margin-left:0;margin-right:0}

  /* Capa: página própria, e o único bloco escuro do documento.
     ALTURA FIXA FRAGMENTAVA A CAPA. Com `height:243mm` o conteúdo — arco, título, endereço,
     KPIs e a linha de emissão — passava alguns milímetros do que cabia, e o excedente ia para
     a página 2 junto com uma tira do fundo escuro: uma folha com 10% de tinta logo depois da
     capa. `min-height` deixa a capa ocupar a página inteira sem prometer uma altura exata, e
     `break-inside:avoid` garante que ela não se parta em duas. */
  .cover{height:auto;min-height:225mm;box-shadow:none;padding:22mm 22mm 18mm;
    break-inside:avoid;page-break-inside:avoid;break-after:page;page-break-after:always}
  .cover-title{margin-bottom:24mm}
  .cover-foot{margin-top:6mm}
  .cover-title h1{font-size:52pt}
  .cover-title h2{font-size:15pt}
  .cover-kpis b{font-size:11pt}

  /* UMA COLUNA no papel. Duas colunas obrigam a página a comportar o mais alto dos dois
     cartões: com Ownership em 1 446px ao lado de Valuation em 794px, a página quebrava no
     meio do par e sobrava um bloco vazio. Empilhado, cada cartão flui pelo próprio tamanho —
     e o defeito de "cartão longo preso a cartão curto" deixa de existir também no PDF. */
  .grid,.grid.pair,.grid.full{display:block}
  .grid article{margin-bottom:7mm;padding:6mm}

  /* A regra de não partir vale para o que CABE numa página. Aplicá-la a um cartão de duas
     páginas não o mantém inteiro — o motor desiste, empurra para a página seguinte e deixa
     a anterior pela metade. Medido: 15,8 páginas de conteúdo saíam em 24 folhas.
     Cartão longo, portanto, FLUI; o que nunca se parte é a unidade de leitura: a linha. */
  .row,.summary-rows>div,.rules li,.conflict-item,.sources li,.scope li,
  .head-strip,.zone-legend,.disclaimers,.tax-history tr{
    break-inside:avoid;page-break-inside:avoid}
  .grid article,.panel,.summary,.scope,.sources,.conflict-audit,.rules,.tax-history{
    break-inside:auto;page-break-inside:auto}
  /* Título nunca fica sozinho no pé da página. A faixa de estado NÃO entra nessa corrente:
     encadear card-label → h2 → head-strip → primeiro bloco cria um trecho indivisível grande
     demais, e o motor joga o cartão inteiro para a página seguinte deixando meia folha em
     branco. Só o título gruda no que vem depois. */
  h2,.card-label,.panel-title,.rules-head{break-after:avoid;page-break-after:avoid}
  .card-cols{break-inside:auto;page-break-inside:auto}

  /* GRID NÃO FRAGMENTA BEM ENTRE PÁGINAS. `.summary-rows` é um grid, e o Chrome empurrava a
     linha inteira que não coubesse — deixando ~30% da página do resumo em branco e a última
     pergunta órfã na página seguinte. Em fluxo de bloco cada linha quebra pelo próprio tamanho,
     e `break-inside:avoid` em `.summary-rows>div` continua impedindo que uma delas se parta. */
  .summary-rows{display:block}
  .summary-rows>div{margin-bottom:2px}
  /* O apêndice CONTINUA em duas colunas: ali o grid cabe inteiro numa página, e passá-lo a
     uma coluna empurrou dois itens e os disclaimers para uma folha quase vazia — que é o
     defeito oposto, e pior. Cada item já é indivisível por `break-inside:avoid`. */

  /* Avisos: compactos no papel. Quatro caixas âmbar por cartão, com o espaçamento de tela,
     custavam páginas inteiras de respiro sem acrescentar leitura. */
  .scope-inline{margin-top:3mm;padding:2mm 3mm;line-height:1.45}
  .grid article>.scope-inline.warn+.scope-inline.warn{margin-top:1.5mm}
  .links{margin-top:3mm;line-height:1.6}

  /* Legibilidade: nada abaixo de ~7,5pt no papel. */
  .grid h2,.panel-title{font-size:15pt;margin:2mm 0 4mm}
  .card-label{font-size:7pt}
  .row span,.summary-rows span{font-size:8.5pt}
  .row strong,.summary-rows strong{font-size:9pt}
  .provenance{font-size:7.5pt}
  .provenance small,.summary-rows small,.scope-inline,.rules li span,.rules-note,.sources li small{font-size:7.5pt}
  .badge,.dd{font-size:6.5pt}
  .tax-history table{font-size:7.5pt}
  .tax-history th{font-size:6.5pt}

  /* Links: úteis no papel só se o endereço aparecer. Vale para fontes e conferência oficial. */
  a{color:#14235a;text-decoration:none}
  /* O endereço vem de `.src-url`, já enxuto. `attr(href)` despejava a querystring inteira —
     a consulta ao roll estadual ocupava oito linhas e desmontava a paginação da página de fontes. */
  .src-url{font-size:6.5pt;color:#8a8f96}
  .cta,.tax-btn{background:transparent;color:#14235a;border:1pt solid #14235a;padding:2mm 3mm}

  /* Histórico anual abre no papel: um <details> fechado viraria informação perdida. */
  .tax-history[open] summary,.tax-history summary{list-style:none;color:#626b75}
  details:not([open])>*:not(summary){display:revert}


  /* O apêndice técnico FECHA o documento — é o último bloco antes dos disclaimers, que é o
     que "no final" quer dizer. Ele NÃO força página nova: forçar empurrava os disclaimers,
     que têm 4 linhas, sozinhos para uma folha inteira. Página quase vazia é defeito, e uma
     quebra decorativa não vale uma folha em branco. */
  .conflict-audit{break-before:auto;page-break-before:auto;margin-top:8mm}
  .conflict-list{grid-template-columns:1fr 1fr}
  .disclaimers{break-inside:avoid;border:1pt solid #e0d8bf}
}

/* ── MP-06 · Official Records ─────────────────────────────────────────────────────
   `dd-partial` usa o tom de atenção, nunca o verde de OK: cobertura parcial é uma
   ressalva, e pintá-la de verde faria o olho ler "está tudo certo". */
.dd-partial{background:#fbf1e6;color:#8a5d1a}

/* O aviso de lacuna vem ANTES dos achados e é o elemento mais pesado do card. */
.or-gap{margin-top:14px;background:#fff8e8;border-left:3px solid var(--warn);padding:12px 13px}
.or-gap strong{display:block;font-size:11px;color:#8a5d1a}
.or-gap small{display:block;color:var(--mid);font-size:9px;line-height:1.6}
.or-gap .tags{margin:9px 0 7px}

.or-table{margin-top:16px;border-top:1px solid var(--line)}
.or-head{display:grid;grid-template-columns:64px 1fr 100px 78px;gap:8px;padding:9px 0;
  font-size:7px;letter-spacing:.12em;text-transform:uppercase;color:var(--light);font-weight:700;
  border-bottom:1px solid var(--line)}
.or-row{display:grid;grid-template-columns:64px 1fr 100px 78px;gap:8px;padding:11px 0;
  border-bottom:1px solid #eef1f3;font-size:11px;align-items:baseline}
.or-row>span:nth-child(4){text-align:right}
.or-row code{font-size:10px;background:var(--soft);padding:2px 4px;word-break:break-all}
.or-row .or-origin{grid-column:1/-1;color:var(--light);font-size:9px;line-height:1.55;margin-top:5px}
.or-row .or-origin a{color:var(--navy)}
/* Correspondência incerta fica marcada NA LINHA, não só na contagem do resumo. */
.or-flag{display:block;font-style:normal;font-size:8px;color:#8a5d1a;margin-top:3px}

.or-liens{margin-top:6px}
.or-liens small{display:block;color:var(--mid);font-size:9px;line-height:1.6;margin-top:6px}

.or-pending{margin-top:14px;background:var(--soft);border-left:3px solid var(--light);padding:11px 13px}
.or-pending strong{display:block;font-size:11px;color:var(--ink)}
.or-pending small{display:block;color:var(--mid);font-size:9px;line-height:1.6}
.or-pending .tags{margin:9px 0 7px}

@media print{.or-row,.or-gap,.or-pending,.or-table{break-inside:avoid}}

/* ── MP-06A · sugestões do índice local ────────────────────────────────────────────
   County e Parcel ID em cada linha: são eles que distinguem dois endereços parecidos,
   e escolher errado contamina o relatório inteiro. */
#suggestions li{display:flex;flex-direction:column;gap:3px;align-items:flex-start}
/* Aviso de ambiguidade entre counties. Não é opção selecionável — só texto. */
.sug-head{background:#fff8e8;color:#8a5d1a;font-size:10px;font-weight:650;cursor:default;
  border-bottom:1px solid var(--line)}
.sug-head:hover{background:#fff8e8}
.sug-addr{font-size:14px;color:var(--ink);line-height:1.3}
.sug-meta{font-size:10px;color:var(--light);letter-spacing:.02em}
#suggestions li.active .sug-meta,#suggestions li:hover .sug-meta{color:var(--mid)}

/* ── MP-07 · estados de verificação e ações manuais ────────────────────────────────
   "Pesquisa não executada" precisa pesar MAIS que qualquer número do cartão. Por isso
   a faixa vem antes dos dados e usa o tom de atenção, nunca o verde de confirmado. */
.verif{margin:0 0 14px;padding:11px 13px;border-left:3px solid var(--line);background:var(--soft)}
.verif strong{display:block;font-size:11px;letter-spacing:.02em}
.verif small{display:block;color:var(--mid);font-size:9px;line-height:1.6;margin-top:4px}
.verif-verified_automatically{background:#edf4ef;border-left-color:var(--ok)}
.verif-manually_verified{background:#edf4ef;border-left-color:var(--ok)}
.verif-manual_search_required{background:#fff8e8;border-left-color:var(--warn)}
.verif-manual_search_required strong{color:#8a5d1a}
.verif-technically_blocked{background:#fff8e8;border-left-color:var(--warn)}
.verif-technically_blocked strong{color:#8a5d1a}

/* Ações manuais: separadas das fontes consultadas, e nunca contadas como consulta. */
.manual-actions{margin-top:16px;padding:13px;border:1px dashed var(--line);background:#fcfdfd}
.ma-title{font-size:8px;letter-spacing:.15em;color:var(--light);font-weight:700;
  text-transform:uppercase;margin:0 0 10px}
.ma-ident{display:flex;flex-wrap:wrap;gap:12px;margin-bottom:10px;font-size:10px;color:var(--mid)}
.ma-ident b{color:var(--ink)}
.manual-actions .cta-row{margin:0 0 10px}
.ma-sys,.ma-note,.ma-warn{display:block;font-size:9px;line-height:1.55;margin-top:3px}
.ma-sys{color:var(--light)}
.ma-note{color:var(--mid)}
.ma-warn{color:#8a5d1a;font-weight:600}
.ma-keys{margin-top:8px;font-size:9px;color:var(--mid)}
.ma-info{margin:10px 0 0;padding-left:16px;font-size:9px;color:var(--mid);line-height:1.7}
.ma-info a{color:var(--navy)}
.soft{color:var(--light);font-style:normal}
@media print{.verif,.manual-actions{break-inside:avoid}}

/* ── MP-07 · dois níveis de leitura ────────────────────────────────────────────────
   O nível TÉCNICO fica no DOM e sai da pintura. `display:none` e não remoção: fechar o
   olho não pode perder dado, quebrar Ctrl+F nem alterar o que a API entregou. */
.tech{display:none}
.report.is-complete .tech{display:block}
.report.is-complete .provenance.tech{display:flex}

.card-head{display:flex;align-items:flex-start;justify-content:space-between;gap:14px}
.card-question{font-size:15px;color:var(--ink);font-weight:500;margin:6px 0 14px;line-height:1.35}

/* O olho é discreto na tela e inexistente no papel. */
.toolbar-actions{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.report>.toolbar{position:sticky;top:0;z-index:50;box-shadow:0 8px 24px #0005}
/* A sigla é DESENHADA por cima do `<select>`, cujo texto fica transparente. Antes a leitura
   fechada dependia de recortar o texto pela largura — e o corte caía no meio da palavra assim
   que um idioma novo mudava a métrica (`EN — I`). A lista ABERTA é pintada pelo sistema
   operacional, ignora tudo isto e continua mostrando `EN — English`. */
.lang-pick{position:relative;display:inline-flex;align-items:center}
.lang-pick-code{position:absolute;left:0;right:14px;text-align:center;font-size:11px;
  pointer-events:none;line-height:1;z-index:1}
.lang-select{width:58px;background:transparent;color:transparent;border:1px solid #ffffff44;
  padding:6px 5px;font-size:11px;cursor:pointer;text-overflow:clip}
.lang-select option{color:var(--ink)}
.toolbar .lang-pick-code{color:#fff}

/* Identidade, Jurisdição, Proprietários e Avaliação seguem como uma leitura contínua.
   Não existem “meias páginas” lado a lado na tela. */
.grid.pair{display:block}
.grid.pair article+article{margin-top:10px}

@media print{
  /* Executivo é o padrão: o nível técnico não vai ao papel. */
  .tech{display:none !important}
  [data-print="hide"]{display:none !important}
  .card-head{display:block}
  /* Completo: o usuário PEDIU os detalhes técnicos ao salvar. */
  html.print-complete .tech{display:block !important}

  /* DIVISÃO INTERNA CONTROLADA (MP-07 §13).
     Cartão que CABE numa página não se parte. Cartão que não cabe — Property Tax completo,
     Official Records com tabela — precisa poder fluir: proibir a quebra num cartão de duas
     páginas não o mantém inteiro, faz o motor empurrar tudo e deixar a folha anterior pela
     metade. O que nunca se parte é a UNIDADE DE LEITURA: a linha, a faixa de estado, o
     exercício fiscal, o item do resumo. */
  .grid article,.sources,.research{break-inside:auto;page-break-inside:auto}
  .grid article>.card-head,.ty-row,.rs-group li,.or-state>div{
    break-inside:avoid;page-break-inside:avoid}
  /* Título nunca fica sozinho no pé da página, e o cabeçalho gruda no primeiro bloco. */
  .card-head,.card-question,h2,.rs-head,.ty-head{break-after:avoid;page-break-after:avoid}
  /* Órfão e viúva: nenhum parágrafo deixa uma linha solta atravessando a quebra. */
  p,li,.scope-inline{orphans:3;widows:3}
}


/* ═══════════════════════════════════════════════════════════════════════════════════
   MP-07 · REORGANIZAÇÃO DO RELATÓRIO
   ═══════════════════════════════════════════════════════════════════════════════════ */

/* ── WEB CONTÍNUA (§13) ────────────────────────────────────────────────────────────
   A tela não é papel. Blocos separados por respiro grande davam ao documento aparência de
   páginas soltas empilhadas — e página, na tela, é um corte artificial: não existe folha
   para virar. O fluxo é vertical e contínuo, e o único bloco que ainda se comporta como
   página é a capa, porque no PDF ela é uma. */
.report{padding:16px 0 48px}
.doc>.grid,.doc>.panel,.doc>.warning,.doc>.scope{margin-top:10px}
.doc>.cover+*{margin-top:12px}
.grid{gap:10px}
.grid article{padding:20px 22px}
.grid h2,.panel-title{margin:4px 0 12px}
.summary.panel{padding:22px}
.summary-rows>div{padding:11px 0}
.card-question{margin:5px 0 10px}
.scope-inline{margin-top:10px}
@media(max-width:700px){.grid article{padding:18px}}

/* ── EXERCÍCIOS FISCAIS (§4) ───────────────────────────────────────────────────────
   Três linhas, uma por exercício, SEMPRE — inclusive as vazias. A linha vazia não é uma
   falha de layout: é a resposta. `.ty-open` a marca como pendente, e ela nunca recebe o
   verde de confirmado, porque nada foi confirmado. */
.tax-years{margin:14px 0 4px;border-top:1px solid var(--line)}
.ty-head,.ty-row{display:grid;grid-template-columns:64px 1fr 110px 100px;gap:10px;align-items:baseline}
.ty-head{padding:9px 0;font-size:7px;letter-spacing:.12em;text-transform:uppercase;
  color:var(--light);font-weight:700;border-bottom:1px solid var(--line)}
.ty-row{padding:12px 0;border-bottom:1px solid #eef1f3;font-size:12px}
.ty-row .ty-year{font-weight:650;font-size:13px}
.ty-row .ty-due,.ty-row .ty-paid{text-align:right}
.ty-meta{grid-column:1/-1;color:var(--light);font-size:9px;line-height:1.55;margin-top:5px}
.ty-meta a{color:var(--navy)}
/* Exercício sem confirmação: tom de pendência, e a frase inteira em vez de um travessão. */
.ty-open{background:#fcfbf6}
.ty-open .ty-status{color:#8a5d1a;font-size:11px;line-height:1.4}
.ty-open .ty-year{color:var(--mid)}
@media(max-width:700px){.ty-head,.ty-row{grid-template-columns:52px 1fr}
  .ty-head span:nth-child(n+3),.ty-row .ty-due,.ty-row .ty-paid{display:none}}

/* ── OFICIAL RECORDS: as quatro situações, lado a lado (§7) ────────────────────────
   Elas ficam juntas para poderem ser CONTRASTADAS. Documento consultado e deed citado no
   mesmo número seria a confusão que este bloco existe para desfazer. */
.or-state{display:grid;grid-template-columns:repeat(4,1fr);gap:1px;background:var(--line);
  border:1px solid var(--line);margin:14px 0}
.or-state>div{background:white;padding:12px 13px}
.or-state b{display:block;font-size:16px;font-weight:600;color:var(--ink);line-height:1.2}
.or-state b em.soft,.or-state b .soft{font-size:11px;font-weight:500}
.or-state small{display:block;color:var(--mid);font-size:9px;line-height:1.45;margin-top:6px}
@media(max-width:700px){.or-state{grid-template-columns:1fr 1fr}}
/* Linha que é CITAÇÃO do cadastro, não documento aberto no registro. */
.or-cited{background:#fcfbf6}
.or-novalue{font-style:normal;font-size:10px;color:#8a5d1a;line-height:1.4;display:inline-block}

/* ── RESUMO DA PESQUISA (§11) ──────────────────────────────────────────────────────
   Cinco grupos, e grupo vazio não é renderizado. Cada grupo tem a sua cor de estado —
   nunca verde para o que não fechou. */
.research.panel{background:white;border:1px solid var(--line);padding:25px}
.research-scope{font-size:12px;color:var(--ink);line-height:1.6;margin:0 0 8px;
  padding:11px 13px;background:var(--soft);border-left:3px solid var(--navy)}
.research-note{font-size:10px;color:var(--mid);line-height:1.6;margin:0 0 16px}
.rs-group+.rs-group{margin-top:16px}
.rs-head{display:flex;align-items:baseline;gap:9px;margin:0 0 6px;padding-bottom:6px;
  border-bottom:2px solid var(--line);font-size:11px;font-weight:700;letter-spacing:.04em;
  text-transform:uppercase;color:var(--ink)}
.rs-head span{font-size:9px;font-weight:600;color:var(--mid);background:var(--soft);padding:2px 6px}
.rs-found .rs-head{border-bottom-color:var(--ok)}
.rs-unconfirmed .rs-head,.rs-manual .rs-head{border-bottom-color:var(--warn)}
.rs-unavailable .rs-head{border-bottom-color:var(--light)}
.rs-failed .rs-head{border-bottom-color:#8a3524}
.rs-group ul{list-style:none;margin:0;padding:0}
.rs-group li{border-bottom:1px solid #eef1f3;padding:10px 0;font-size:11px}
.rs-group li b{display:block;color:var(--ink);font-size:12px}
.rs-group li span{display:block;color:var(--mid);font-size:11px;line-height:1.55;margin-top:3px}
.rs-group li i{display:block;font-style:normal;color:var(--light);font-size:9px;margin-top:4px}
.rs-group li i a{color:var(--navy)}

/* ── FONTES E ESCOPO (§12) ─────────────────────────────────────────────────────────
   Executiva na leitura principal: órgão, assunto, resultado e data. O resto — método,
   sourceId, dataset, endereço técnico — abre no olho e vai ao PDF completo. */
.sources.panel{background:white;border:1px solid var(--line);padding:25px}
.sources ul{list-style:none;margin:0;padding:0}
.sources li{border-top:1px solid #eef1f3;padding:11px 0;font-size:11px;line-height:1.6}
.sources li a{color:var(--navy)}
.src-result{display:inline-block;font-size:7px;letter-spacing:.06em;text-transform:uppercase;
  font-weight:700;padding:3px 6px;margin-right:8px;border-radius:2px}
.src-ok{background:#e9f2ec;color:#2e6e4e}
.src-gap{background:#fbf4e6;color:#a4781f}
.src-subject{display:block;color:var(--mid);font-size:10px;margin-top:3px}
.src-when{display:block;color:var(--light);font-size:9px;margin-top:3px}
.sources li small.tech{color:var(--light);font-size:9px;line-height:1.6;margin-top:4px}
.sources li code{font-size:9px;background:var(--soft);padding:1px 4px}

/* ── MP-10 · CADEIA DOCUMENTAL ──────────────────────────────────────────────────────────
   O ESTADO DA OBRIGAÇÃO é a informação mais importante do bloco, e por isso é a única coisa
   colorida aqui: um valor sem estado ao lado parece dívida viva. "Não verificado" precisa ser
   lido antes de "US$ 800.000", não depois. */
.doc-chain{display:flex;flex-direction:column;gap:14px;margin-top:16px}
.ch-sec{border-top:1px solid var(--line);padding-top:11px}
.ch-head{font-size:7px;letter-spacing:.12em;text-transform:uppercase;color:var(--light);
  font-weight:700;margin:0 0 9px}
.ch-list{display:flex;flex-direction:column;gap:11px}
.ch-item{border:1px solid var(--line);padding:12px 14px;background:#fbfcfd}
.ch-item-head{display:flex;align-items:center;justify-content:space-between;gap:10px;
  margin-bottom:8px;flex-wrap:wrap}
.ch-item-head strong{font-size:12px;font-weight:650;color:var(--ink)}
.ch-item-head code,.ch-link code,.ch-row code{font-size:10px;background:var(--soft);
  padding:2px 5px;word-break:break-all}
/* Amarelo é o PADRÃO — inclusive para "não verificado". Verde só com extinção comprovada. */
.ch-state{font-size:7px;letter-spacing:.1em;text-transform:uppercase;font-weight:700;
  padding:4px 8px;white-space:nowrap;background:#fbf4e6;color:#8a5d1a}
.ch-state-satisfaction_linked,.ch-state-release_linked{background:#e9f2ec;color:var(--ok)}
.ch-link{font-size:11px;line-height:1.6;margin-top:7px;display:flex;gap:6px;
  align-items:baseline;flex-wrap:wrap}
.ch-link b{font-size:10px;color:var(--mid);font-weight:650}
.ch-link small{color:var(--light);font-size:9px}
.ch-note{display:block;font-size:9px;line-height:1.6;color:var(--mid);margin-top:6px}
.ch-rows{display:flex;flex-direction:column}
.ch-row{display:grid;grid-template-columns:1.3fr .7fr 1fr;gap:8px;align-items:baseline;
  font-size:11px;padding:9px 0;border-bottom:1px solid #eef1f3}
.ch-row small{grid-column:1/-1;color:var(--light);font-size:9px;margin-top:3px}
.ch-deed .card-cols{margin:0}
.doc-chain .soft{color:var(--light);font-style:normal}

.ch-evidence{border-top:1px solid var(--line);padding-top:10px;margin-top:4px}
.ch-evid-row{grid-template-columns:1fr 1fr 1.4fr}
.ch-evid-row code{font-size:9px}

@media print{.ch-item,.ch-sec,.ch-row{break-inside:avoid}}

/* ── MP-11 · DEVELOPMENT STANDARDS ─────────────────────────────────────────────────────
   O valor bruto da regra condicional aparece como TEXTO, não como número solto: "20% of the
   lot depth or existing setback, whichever is greater" precisa ser lido inteiro, e um "20%"
   isolado seria lido como o recuo. */
.ds-head{display:flex;flex-direction:column;gap:3px;padding-bottom:10px;
  border-bottom:1px solid var(--line);margin-bottom:4px}
.ds-head strong{font-size:12px;color:var(--navy)}
.ds-head small{font-size:10px;color:var(--mid);line-height:1.55}
.ds-sub{font-size:7px;letter-spacing:.12em;text-transform:uppercase;color:var(--light);
  font-weight:700;margin:14px 0 6px}
.ds-pend small{display:block;font-size:10px;line-height:1.6;color:#8a5d1a;margin-top:4px}
.ds-raw{font-size:11px;font-weight:500;text-align:right;line-height:1.5;max-width:60%}
.ds-cond{font-size:9px;line-height:1.6;color:var(--mid);margin-top:5px}
.ds-cond:not(.tech),.ds-cite:not(.tech){display:block}
.ds-cond code{font-size:9px;background:var(--soft);padding:2px 5px}
.ds-cite{font-size:8px;line-height:1.5;color:var(--light);margin-top:4px}
.ds-gap{margin-top:14px;background:#fff8e8;border-left:3px solid var(--warn);padding:11px 13px}
.ds-gap strong{display:block;font-size:11px;color:#8a5d1a}

@media print{.ds-head,.ds-gap{break-inside:avoid}}

/* ── MP-12 · PERMITS & INSPECTIONS ─────────────────────────────────────────────────────
   O balde de ATENÇÃO vem primeiro e é o único com cor de alerta. Os outros são neutros de
   propósito: "aparentemente completo" não é um selo verde, é uma leitura cautelosa. */
.pm-bucket{margin-top:16px}
.pm-bucket-head{font-size:7px;letter-spacing:.12em;text-transform:uppercase;color:var(--light);
  font-weight:700;margin:0 0 8px;display:flex;justify-content:space-between;align-items:center;
  padding-bottom:5px;border-bottom:1px solid var(--line)}
.pm-bucket-head span{font-size:9px;font-weight:600;color:var(--mid);background:var(--soft);padding:2px 6px}
.pm-bucket-attention_required .pm-bucket-head{color:#8a5d1a;border-bottom-color:var(--warn)}
.pm-item{border-left:2px solid var(--line);padding:10px 0 10px 12px;margin-bottom:10px}
.pm-bucket-attention_required .pm-item{border-left-color:var(--warn);background:#fffdf7}
.pm-item-head{display:flex;justify-content:space-between;align-items:baseline;gap:10px;margin:0}
.pm-item-head strong{font-size:12px;font-weight:650;color:var(--navy)}
.pm-item-sub{font-size:10px;color:var(--mid);margin:3px 0 6px;line-height:1.5}
.pm-state{font-size:7px;letter-spacing:.08em;text-transform:uppercase;font-weight:700;
  padding:3px 6px;border-radius:2px;background:var(--soft);color:var(--mid);white-space:nowrap}
.pm-state-attention_required{background:#fbf4e6;color:#8a5d1a}
.pm-state-in_progress{background:#eef2f7;color:var(--navy)}
.pm-reasons{margin-top:7px}
.pm-reasons small{display:block;font-size:9px;line-height:1.6;color:#8a5d1a;margin-top:3px}
.pm-sub{font-size:7px;letter-spacing:.12em;text-transform:uppercase;color:var(--light);
  font-weight:700;margin:11px 0 5px}
.pm-flow,.pm-insps{list-style:none;margin:0;padding:0}
.pm-flow li,.pm-insps li{display:flex;justify-content:space-between;gap:10px;font-size:10px;
  padding:4px 0;border-top:1px solid #eef1f3;line-height:1.5}
.pm-flow b,.pm-insps b{font-weight:550;color:var(--ink)}
.pm-flow span,.pm-insps span{color:var(--mid);text-align:right}
.pm-insps i{font-style:normal;color:var(--light);font-size:9px}
/* Reprovação NUNCA some do histórico, mesmo resolvida — ela fica marcada. */
.pm-insp-failed b{color:#9c4a35}
.pm-insp-failed span{color:#9c4a35;font-weight:600}
.pm-gap{margin-top:14px;background:#fff8e8;border-left:3px solid var(--warn);padding:11px 13px}
.pm-gap strong{display:block;font-size:11px;color:#8a5d1a;margin-bottom:6px}
.strip-warn{border-left-color:var(--warn)}

@media print{.pm-item,.pm-bucket,.pm-gap{break-inside:avoid}}

/* ── MP-15C · REPORT SHELL ─────────────────────────────────────────────────────────────
   O skeleton NUNCA se parece com valor. `Confirmando` e `Carregando` são texto legível, em
   itálico e na cor secundária — quem olha de relance vê que ali não há dado ainda, e quem usa
   leitor de tela ouve o mesmo pelo `aria-label`. */
.shell-pending{color:var(--light);font-weight:400;font-style:italic;font-size:11px}
.shell-bar{display:inline-block;height:9px;border-radius:2px;margin:5px 8px 0 0;
  background:linear-gradient(90deg,var(--soft) 0%,#eef1f3 50%,var(--soft) 100%);
  background-size:200% 100%;animation:shell-pulse 1.4s ease-in-out infinite}
@keyframes shell-pulse{0%{background-position:200% 0}100%{background-position:-200% 0}}

/* Movimento é preferência do usuário, não do designer. */
@media (prefers-reduced-motion: reduce){
  .shell-bar{animation:none;background:var(--soft)}
  .cover-progress-clip{transition:none}
}

/* O skeleton NÃO existe no papel: se um PDF sair com "Carregando", o documento mente. */
@media print{
  .shell-bar,.shell-pending{display:none!important}
}

/* Região só para leitor de tela. */
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;
  clip:rect(0,0,0,0);white-space:nowrap;border:0}

/* ══ MP-16A · CONTA, ACESSO E HISTÓRICO ══════════════════════════════════════════════════
   Nada aqui aparece no PDF: `#account-root` carrega `data-print="hide"`, e a regra de
   impressão acima já esconde a subárvore inteira. O ícone, o drawer e a janela de acesso são
   navegação — e navegação impressa é ruído num relatório de diligência. */

/* O ÍCONE. Pequeno, no canto, e só depois do login. Não é sidebar, não é dashboard, não é
   card de perfil: é um botão de 34px que abre uma sobreposição. */
.acct-btn{position:fixed;top:14px;right:14px;z-index:40;width:34px;height:34px;border-radius:50%;
  border:1px solid #ffffff3d;background:#111c2bcc;color:#fff;font:600 11px/1 var(--ui,inherit);
  letter-spacing:.04em;cursor:pointer;display:flex;align-items:center;justify-content:center;
  backdrop-filter:saturate(140%) blur(6px)}
.acct-btn:hover{background:#111c2b;border-color:#ffffff66}
.acct-btn:focus-visible{outline:2px solid var(--cream);outline-offset:2px}

/* O drawer SOBREPÕE. O conteúdo da página não se desloca — deslocá-lo faria o relatório
   reflowar e a pessoa perderia o lugar onde estava lendo. */
.acct-overlay{position:fixed;inset:0;z-index:50;background:#0d1b2a5c}
.acct-drawer{position:fixed;top:0;right:0;bottom:0;z-index:51;width:min(340px,100vw);
  background:#fff;border-left:1px solid var(--line);display:flex;flex-direction:column;
  box-shadow:-18px 0 46px #0d1b2a33}
.acct-drawer:focus{outline:none}
.acct-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;
  padding:20px 18px 14px;border-bottom:1px solid var(--line)}
.acct-brand{margin:0;font-size:15px;font-weight:650;color:var(--navy);letter-spacing:-.01em}
.acct-sub{display:block;margin-top:3px;font-size:8px;letter-spacing:.18em;text-transform:uppercase;
  color:var(--light);font-weight:700}
.acct-x{border:0;background:transparent;color:var(--mid);font-size:20px;line-height:1;
  cursor:pointer;padding:2px 6px}
.acct-x:hover{color:var(--ink)}
.acct-x:focus-visible{outline:2px solid var(--navy);outline-offset:2px}

/* TRÊS LINHAS na altura visível, e a rolagem é INTERNA. Sem segunda página e sem botão de
   "ver todas": a lista é a mesma, ela só continua abaixo da dobra do painel. */
.acct-list{list-style:none;margin:0;padding:6px 0;overflow-y:auto;overscroll-behavior:contain;
  --acct-row:46px;max-height:calc(var(--acct-row) * 3)}
.acct-list li{margin:0}
.acct-item{display:block;width:100%;text-align:left;border:0;background:transparent;
  padding:0 18px;height:var(--acct-row,46px);font-size:13px;color:var(--ink);cursor:pointer;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.acct-item:hover{background:var(--soft)}
.acct-item:focus-visible{outline:2px solid var(--navy);outline-offset:-2px}
.acct-note{padding:16px 18px;font-size:12px;color:var(--mid);line-height:1.5}
.acct-note small{display:block;margin-top:4px;color:var(--light);font-size:11px}
.acct-error{color:#8c3a2c}
.acct-foot{margin-top:auto;padding:14px 18px;border-top:1px solid var(--line)}
.acct-logout{border:1px solid var(--line);background:#fff;color:var(--mid);font-size:11px;
  padding:7px 12px;cursor:pointer}
.acct-logout:hover{color:var(--ink);border-color:var(--mid)}
.acct-logout:focus-visible{outline:2px solid var(--navy);outline-offset:2px}

/* A JANELA DE ACESSO. Compacta: nome, e-mail, o que guardamos, e o botão. */
.auth-backdrop{position:fixed;inset:0;z-index:60;background:#0d1b2a8f}
.auth-dialog{position:fixed;inset:0;z-index:61;display:flex;align-items:center;
  justify-content:center;padding:18px}
.auth-dialog:focus{outline:none}
.auth-card{position:relative;width:min(390px,100%);max-height:calc(100vh - 36px);overflow-y:auto;
  background:#fff;border:1px solid var(--line);padding:26px 24px 22px;
  box-shadow:0 26px 70px #0d1b2a4d}
.auth-head{display:flex;align-items:flex-start;justify-content:space-between;gap:10px}
.auth-head-actions{display:flex;align-items:center;gap:8px}
.auth-x{border:0;background:transparent;color:var(--light);border-radius:0;width:auto;height:auto;
  font-size:20px;line-height:1;cursor:pointer;padding:2px 6px}
.auth-x:hover{color:var(--ink)}
.auth-eyebrow{margin:0;font-size:8px;letter-spacing:.2em;color:var(--light);font-weight:700}
.auth-card h2{margin:8px 0 6px;font-size:19px;font-weight:500;color:var(--navy)}
.auth-sub{margin:0 0 18px;font-size:12px;color:var(--mid);line-height:1.55}
.auth-card label{display:block;font-size:10px;letter-spacing:.1em;text-transform:uppercase;
  color:var(--light);font-weight:700;margin:0 0 5px}
.auth-card form input[type=text],.auth-card form input[type=email],.auth-card form input:not([type]),
.auth-card form input#auth-code{width:100%;border:1px solid var(--line);border-radius:0;
  padding:10px 12px;font-size:14px;color:var(--ink);background:#fff;margin:0 0 14px}
.auth-card form input:focus{outline:2px solid var(--navy);outline-offset:-1px}
#auth-code{letter-spacing:.42em;font-variant-numeric:tabular-nums}
/* `form button` é a regra do botão redondo de ↵ da busca. O botão primário do modal também é
   `form button` e herdava `border-radius:50%` — com largura total, o círculo virava ELIPSE.
   A especificidade aqui é maior, e o raio, a largura e a altura são declarados de propósito. */
.auth-card form button.auth-primary,.auth-primary{width:100%;height:auto;border:0;border-radius:0;
  background:var(--navy);color:#fff;padding:12px;font-size:13px;cursor:pointer;margin-top:4px}
.auth-primary[disabled]{opacity:.55;cursor:default}
.auth-primary:focus-visible{outline:2px solid var(--cream);outline-offset:2px}
.auth-msg{margin:0 0 8px;font-size:11px;color:var(--mid);line-height:1.5}
.auth-error{margin:0 0 8px;font-size:12px;color:#8c3a2c;line-height:1.5}
.auth-error:empty,.auth-msg:empty{margin:0}
.auth-foot{display:flex;justify-content:space-between;gap:10px;margin-top:14px}
.auth-link{border:0;background:transparent;color:var(--navy);font-size:11px;cursor:pointer;
  padding:4px 0;text-decoration:underline}
.auth-link[disabled]{color:var(--light);cursor:default;text-decoration:none}

/* PRIVACIDADE. Curta, na própria janela, antes de o dado ser enviado — nunca escondida atrás
   de um link. E o consentimento de marketing é uma caixa SEPARADA e desmarcada. */
.auth-privacy{background:var(--soft);border-left:2px solid var(--line);padding:11px 13px;
  margin:2px 0 14px}
.auth-privacy strong{display:block;font-size:10px;letter-spacing:.08em;text-transform:uppercase;
  color:var(--mid);margin-bottom:6px}
.auth-privacy ul{margin:0;padding-left:16px}
.auth-privacy li{font-size:11px;color:var(--mid);line-height:1.55;margin-bottom:3px}
.auth-check{display:flex!important;align-items:flex-start;gap:8px;margin:0 0 14px!important;
  text-transform:none!important;letter-spacing:0!important;font-weight:400!important;
  color:var(--mid)!important;font-size:11px!important}
.auth-check input{margin:2px 0 0;flex:none}

/* A BARRA DO SNAPSHOT. Fina, acima da toolbar, com a ação de atualizar separada da leitura. */
.snap-bar{width:min(920px,calc(100% - 24px));margin:0 auto 8px;background:#fff8e8;
  border-left:3px solid var(--warn);padding:10px 14px;display:flex;align-items:center;
  justify-content:space-between;gap:14px;font-size:11px;color:var(--ink)}
.snap-bar small{display:block;color:var(--mid);margin-top:2px}
.snap-refresh{flex:none;border:1px solid var(--warn);background:transparent;color:#7a5a12;
  font-size:11px;padding:6px 11px;cursor:pointer}
.snap-refresh:hover{background:#f6e9cd}
.snap-refresh[disabled]{opacity:.6;cursor:default}
.snap-refresh:focus-visible{outline:2px solid var(--navy);outline-offset:2px}

@media(max-width:700px){
  .acct-drawer{width:100vw;border-left:0}
  .acct-btn{top:10px;right:10px}
  .auth-card{padding:22px 18px 18px}
  .snap-bar{flex-direction:column;align-items:flex-start}
}
@media (prefers-reduced-motion: no-preference){
  .acct-drawer{animation:acct-in .18s ease-out}
  @keyframes acct-in{from{transform:translateX(14px);opacity:.4}to{transform:none;opacity:1}}
}

/* ══ MP-16A · BARRA SUPERIOR — idioma e conta ═══════════════════════════════════════════
   Tudo aqui vive dentro de `#account-root`, que carrega `data-print="hide"`: nada disto
   chega ao PDF. */

.topbar{position:fixed;top:14px;right:14px;z-index:40;display:flex;align-items:center;gap:8px}

/* O SELETOR DE IDIOMAS na tela inicial. Fechado mostra só a sigla; aberto, a lista é pintada
   pelo sistema operacional, que ignora a largura — é assim que o nome por extenso aparece.
   `中文` é mais largo que `EN`, e a largura acomoda os dois sem cortar. */
/* O `backdrop-filter` fica no INVÓLUCRO, não no `<select>`.
   O defeito que isto corrige: `backdrop-filter` cria contexto de empilhamento, e o select
   passava a pintar POR CIMA da sigla absolutamente posicionada — no celular a caixa aparecia
   vazia. A sigla também ganhou `z-index`, para não depender só da ordem de pintura. */
.topbar-lang{border-radius:0;backdrop-filter:saturate(140%) blur(6px)}
.lang-select-top{width:62px;border-color:#ffffff55;background:#111c2bcc}
.topbar-lang .lang-pick-code{color:#fff}
/* Dentro da janela de acesso o fundo é claro: a sigla acompanha. */
.lang-select-auth{width:58px;border-color:var(--line);background:#fff}
.auth-head .lang-pick-code{color:var(--mid)}
.lang-select-top:focus-visible{outline:2px solid var(--cream);outline-offset:2px}
.topbar-lang{display:flex}

/* O ícone da conta perde a posição própria: quem posiciona agora é a barra. */
.topbar .acct-btn{position:static;top:auto;right:auto}

/* A CAIXA DO CÓDIGO DE DESENVOLVIMENTO. Discreta e inequivocamente provisória: fundo âmbar,
   tipografia monoespaçada no código e o aviso de que nenhum e-mail saiu logo abaixo. */
.auth-devcode{background:#fff8e8;border-left:3px solid var(--warn);padding:9px 12px;
  margin:0 0 12px;display:block}
.auth-devcode b{display:block;font-size:13px;color:#6d4f0f;letter-spacing:.02em;
  font-variant-numeric:tabular-nums}
.auth-devcode small{display:block;margin-top:3px;font-size:10px;color:#8a6a1c;line-height:1.5}

@media(max-width:700px){
  .topbar{top:10px;right:10px;gap:6px}
  .lang-select-top{width:60px}
}

/* O atalho de limpeza do limitador local. Só existe em desenvolvimento — o servidor decide. */
.auth-devreset:empty{display:none}
.auth-devreset{margin:0 0 10px}
.auth-devreset small{display:block;font-size:10px;color:var(--mid);line-height:1.5;margin-bottom:4px}

/* A saída para uma falha de carregamento do painel. Discreta, mas presente: falha de rede sem
   caminho de volta é beco sem saída, não estado declarado. */
.acct-retry{display:inline-block;margin-top:8px;border:1px solid var(--line);background:#fff;
  color:var(--navy);font-size:11px;padding:5px 10px;cursor:pointer}
.acct-retry:hover{border-color:var(--mid)}
.acct-retry:focus-visible{outline:2px solid var(--navy);outline-offset:2px}

/* Três saídas legais, discretas e permanentes. */
.legal-links{display:flex;justify-content:center;gap:14px;margin-top:8px;font-size:8px}
.legal-links a{color:#ffffff70;text-decoration:none}
.legal-links a:hover,.legal-links a:focus{color:#fff;text-decoration:underline}
