/* GUI — A CONSOLIDAÇÃO DE UX.

   Esta folha entra POR ÚLTIMO e veste o que a rodada mudou. Ela não redesenha
   o produto: onde o componente já tinha classe e forma, ela ajusta; onde a
   rodada criou componente novo — tutorial, cabeçalho com sino e avatar, bloco
   de calendário recolhível, CTA de ingresso, Conta, Notificações, busca
   agrupada, prateleira por destino — ela desenha.

   Nenhuma regra aqui alcança `.home-gui`, `.h-hero`, `.h-sec` ou qualquer
   seletor da Home A, com UMA exceção declarada: os resultados de busca
   (`.bg-*`), que passaram a ser o mesmo componente nas duas Homes. */

/* ====================================================================
   1. CABEÇALHO INTERNO — sino + avatar, sem o G (§46, §49, §50)
   ==================================================================== */
.shell-acoes { flex: none; display: flex; align-items: center; gap: 6px; }
.shell-ic, .shell-avatar {
  flex: none; width: 36px; height: 36px; border-radius: 50%;
  border: 1px solid var(--linha); background: var(--papel-2);
  display: grid; place-items: center; font-size: 16px; color: var(--tinta-fraca);
  padding: 0; cursor: pointer;
}
.shell-avatar {
  background: linear-gradient(140deg, var(--acento), #5c3a86);
  border-color: transparent; color: #fff; font-size: 17px;
}
.shell-ic:focus-visible, .shell-avatar:focus-visible {
  outline: 2px solid var(--acento); outline-offset: 2px;
}
/* O SINO NÃO TEM SELO (§83): não há notificação para contar, e um ponto
   vermelho inventado é a mentira mais barata de uma barra superior. */
.shell-ic::after { content: none; }
/* O DESENHO DO SINO (§22, §23).

   O ícone era `◔` — um círculo com um quadrante. Em 36px de botão ele não
   comunica «notificações»: comunica RELÓGIO, que é exatamente o ícone que a
   §45 da consolidação tinha acabado de tirar deste lugar. Trocar o glifo por
   outro glifo não resolveria: não existe sino em Unicode que não venha como
   emoji colorido (🔔), e um emoji ao lado de um avatar monocromático é um
   corpo estranho na barra.

   O sino é então traçado — 24×24, `currentColor`, contorno de 1.8 — que é a
   MESMA linguagem dos ícones da Home A (o coração do hero, a lupa da busca).
   Ele herda a cor do botão, acompanha o foco e não tem detalhe para perder
   quando reduzido. */
.shell-ic svg { display: block; }

/* ====================================================================
   2. BUSCA AGRUPADA — a mesma nas duas Homes (§9)
   ==================================================================== */
.bg-res {
  margin-top: 8px; background: var(--papel-2);
  border: 1px solid var(--linha); border-radius: 14px; overflow: hidden;
}
.bg-grupo + .bg-grupo { border-top: 1px solid var(--linha); }
.bg-grupo-tit {
  margin: 0; padding: 9px 14px 5px;
  font-size: .68rem; font-weight: 700; letter-spacing: .1em; text-transform: uppercase;
  color: var(--tinta-clara);
}
.bg-lista { list-style: none; margin: 0; padding: 0 0 6px; }
.bg-item {
  width: 100%; display: flex; align-items: center; gap: 10px;
  padding: 9px 14px; border: 0; background: transparent; text-align: left;
  font: inherit; color: var(--tinta); cursor: pointer;
}
.bg-item:hover, .bg-item:focus-visible { background: rgba(123, 79, 176, .07); outline: none; }
.bg-nome { flex: 1 1 auto; min-width: 0; line-height: 1.3; }
.bg-onde { flex: none; font-size: .74rem; color: var(--tinta-clara); }
.bg-seta { flex: none; color: var(--tinta-clara); }
.bg-vazio { margin: 0; padding: 14px; color: var(--tinta-fraca); font-size: .88rem; }

/* ====================================================================
   3. TUTORIAL "COMO USAR UM GUIDE" (§3 a §6)
   ==================================================================== */
.tg {
  position: fixed; inset: 0; z-index: 120;
  display: flex; align-items: flex-end; justify-content: center;
  background: rgba(20, 16, 30, .55);
  padding: 16px; padding-bottom: calc(16px + var(--seguro-b));
}
.tg[hidden] { display: none; }
body.com-tutorial { overflow: hidden; }
.tg-caixa {
  width: 100%; max-width: 420px; max-height: 92dvh; overflow-y: auto;
  background: var(--papel-2); border-radius: 22px;
  padding: 16px 18px calc(18px + var(--seguro-b));
  box-shadow: 0 -10px 40px rgba(20, 16, 30, .3);
}
.tg-topo { display: flex; align-items: center; justify-content: space-between; gap: 10px; }
.tg-rot {
  margin: 0; font-size: .7rem; font-weight: 700; letter-spacing: .1em;
  text-transform: uppercase; color: var(--tinta-clara);
}
.tg-pular {
  border: 0; background: transparent; color: var(--acento);
  font: inherit; font-size: .88rem; font-weight: 600; padding: 4px 2px; cursor: pointer;
}
.tg-tit { margin: 14px 0 6px; font-size: 1.2rem; line-height: 1.25; letter-spacing: -.01em; }
.tg-txt { margin: 0; color: var(--tinta-fraca); line-height: 1.5; }
.tg-conta { margin: 8px 0 0; font-size: .78rem; color: var(--tinta-clara); text-align: center; }

.tg-pontos {
  list-style: none; display: flex; gap: 6px; justify-content: center;
  margin: 18px 0 12px; padding: 0;
}
.tg-pontos li { width: 7px; height: 7px; border-radius: 50%; background: var(--linha); }
.tg-pontos li.on { background: var(--acento); width: 20px; border-radius: 4px; }
.tg-oculto {
  position: absolute; width: 1px; height: 1px; overflow: hidden;
  clip: rect(0 0 0 0); white-space: nowrap;
}
.tg-nao {
  display: flex; align-items: center; gap: 8px;
  font-size: .84rem; color: var(--tinta-fraca); margin-bottom: 12px; cursor: pointer;
}
.tg-nao input { width: 17px; height: 17px; accent-color: var(--acento); }
.tg-acoes { display: flex; gap: 10px; }
.tg-bt {
  flex: 1 1 auto; border: 0; border-radius: 13px; padding: 13px 16px;
  font: inherit; font-weight: 600; cursor: pointer;
}
.tg-bt-pri { background: var(--acento); color: #fff; }
/* §40 — OS DOIS SÃO AÇÕES, e têm a mesma altura e o mesmo direito à linha.
   `flex: 0 0 auto` fazia «Voltar» encolher até a palavra, ao lado de um
   «Próximo» que tomava o resto: um lia como botão, o outro como link. A
   distinção passa a ser só de preenchimento — e «Próximo» continua sendo o
   primário, com mais peso na linha. */
.tg-bt-sec { background: var(--papel); color: var(--tinta); border: 1px solid var(--linha);
             flex: 1 1 0; }
.tg-bt-pri { flex: 1.4 1 0; }
/* O gesto de swipe não pode ser confundido com seleção de texto arrastada. */
.tg-caixa { touch-action: pan-y; }

/* --- as artes: desenhadas, nunca fotografadas (§13) --- */
.tg-arte {
  margin-top: 14px; border-radius: 16px; background: var(--papel);
  border: 1px solid var(--linha); padding: 16px; min-height: 132px;
  display: flex; flex-direction: column; justify-content: center; gap: 8px;
}
.tg-reg { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.tg-pin {
  width: 22px; height: 22px; border-radius: 50%; flex: none;
  display: grid; place-items: center; font-size: .72rem; font-weight: 700;
  background: var(--linha); color: var(--tinta-fraca);
}
.tg-reg-on .tg-pin { background: var(--acento); color: #fff; }
.tg-barra { flex: 1 1 auto; height: 9px; border-radius: 5px; background: var(--linha); }
.tg-reg-on .tg-barra { background: rgba(123, 79, 176, .35); }
.tg-ativs { list-style: none; margin: 4px 0 4px 30px; padding: 0; width: 100%; display: grid; gap: 5px; }
.tg-ativs li { height: 7px; border-radius: 4px; background: rgba(123, 79, 176, .18); }
.tg-ativs li:nth-child(2) { width: 78%; }
.tg-ativs li:nth-child(3) { width: 56%; }

.tg-arte-mapa { padding: 10px; }
.tg-mapa-fundo { fill: #eef1f4; }
.tg-mapa-via { fill: none; stroke: #dfe4ea; stroke-width: 6; stroke-linecap: round; }
.tg-mapa-via2 { fill: none; stroke: #dfe4ea; stroke-width: 4; }
.tg-mapa-pinos circle { fill: var(--acento); }
.tg-mapa-pinos text {
  fill: #fff; font-size: 13px; font-weight: 700; text-anchor: middle;
  font-family: inherit;
}

.tg-pa-transporte { display: flex; align-items: center; justify-content: center; gap: 14px; }
.tg-pa-bt {
  position: relative; width: 44px; height: 44px; border-radius: 50%;
  display: grid; place-items: center; background: var(--papel-2);
  border: 1px solid var(--linha); color: var(--tinta-fraca); font-size: 18px;
}
.tg-pa-bt b {
  position: absolute; bottom: 6px; font-size: .55rem; font-weight: 700;
}
.tg-pa-play { width: 56px; height: 56px; background: var(--acento); color: #fff; border-color: transparent; }
.tg-pa-barra { height: 5px; border-radius: 3px; background: var(--linha); margin: 12px 4px 0; }
.tg-pa-barra span { display: block; width: 38%; height: 100%; border-radius: 3px; background: var(--acento); }
.tg-pa-vel { display: flex; gap: 5px; justify-content: center; margin-top: 10px; }
.tg-pa-vel span {
  font-size: .66rem; padding: 3px 7px; border-radius: 8px;
  background: var(--papel-2); border: 1px solid var(--linha); color: var(--tinta-clara);
}
.tg-pa-vel .on { background: var(--acento); color: #fff; border-color: transparent; }

.tg-cal-bloco {
  display: flex; align-items: center; justify-content: space-between;
  background: var(--papel-2); border: 1px solid var(--linha);
  border-radius: 12px; padding: 10px 12px;
}
.tg-cal-tit { font-weight: 600; font-size: .9rem; }
.tg-cal-dia { font-size: .78rem; color: var(--acento); font-weight: 600; }
.tg-cal-linha { display: flex; gap: 8px; }
.tg-cal-campo { flex: 1 1 0; height: 30px; border-radius: 9px; background: var(--linha); }
.tg-cal-cta {
  text-align: center; background: var(--acento); color: #fff;
  border-radius: 12px; padding: 10px; font-weight: 600; font-size: .88rem;
}

/* ====================================================================
   4. ACTIVITY DETAIL — calendário recolhível, texto completo, ingresso
   ==================================================================== */

/* --- Ver texto completo: onde o "Remover" estava (§32) --- */
.btn-texto-completo {
  width: 100%; display: flex; align-items: center; justify-content: center; gap: 8px;
  margin: 12px 0 0; padding: 13px 16px;
  border: 1px solid var(--linha); border-radius: 13px;
  background: var(--papel-2); color: var(--tinta);
  font: inherit; font-weight: 600; cursor: pointer;
}
.btn-texto-completo:focus-visible { outline: 2px solid var(--acento); outline-offset: 2px; }
.btn-texto-completo .chev { color: var(--tinta-clara); }

/* ====================================================================
   O BLOCO DE CALENDÁRIO — §13 a §15, §19 a §23
   ====================================================================

   TUDO CABE DENTRO DO CARTÃO, e isso é uma regra medida, não uma intenção: o
   bloco tem `overflow: hidden`, o corpo tem `min-width: 0` em cada nível de
   flex, e os dois `<select>` têm `width: 100%` dentro de colunas `1fr` — sem
   essa cadeia, um `<select>` com «2h · ideal» empurra a grade e vaza pela
   borda direita.

   O PADDING ENCOSTOU O CONTEÚDO NA ESQUERDA (§19). Eram 14px de cada lado
   dentro de um cartão que já tem 16px de margem da tela: 30px só de ar antes
   da primeira letra, num telefone de 393px. */
/* ==================================================================
   O DESALINHAMENTO DO BLOCO — UMA GOTEIRA SÓ, DOS DOIS LADOS (§11 a §14)
   ==================================================================

   O QUE FOI MEDIDO. Com o bloco expandido e a atividade agendada, a 393px,
   TODOS os elementos internos ficavam a 15px da borda esquerda e a 13px da
   direita — cabeçalho, data, campo «Dia», o par Início/Duração, o resumo e o
   par Salvar/Remover. Dois pixels, em todas as linhas, sempre para o mesmo
   lado.

   A CAUSA. A goteira estava declarada duas vezes, e diferente das duas:
   `.calb-cab` com `padding: 12px 12px 12px 14px` e `.calb-corpo` com
   `padding: 0 12px 13px 14px`. Esquerda 14, direita 12. A rodada anterior
   reduziu a direita para 12 tentando devolver ar ao conteúdo, e esqueceu a
   esquerda em 14 — o resultado é um conteúdo que ENCOSTA na borda direita e
   respira na esquerda. Num cartão com contorno visível e 16px de raio, é isso
   que se lê como «escapou pela lateral».

   Não era `width`, não era `box-sizing` (`*{box-sizing:border-box}` é global),
   não era `min-width` e não era a grade: nada atravessa a borda em largura
   nenhuma entre 320px e 1440px — a varredura de bounding boxes do §35 prova
   isso a cada corrida. Era a goteira.

   A CORREÇÃO. Uma variável, um valor, os dois lados. Quem declarar padding
   lateral dentro do bloco declara `var(--calb-gut)` — e não um número. */
.calb-bloco {
  --calb-gut: 14px;   /* a goteira interna, igual nos dois lados */
  --calb-ic: 15px;    /* a largura reservada ao ícone do cabeçalho */
  --calb-gap: 9px;    /* e o espaço entre ele e o título */
  margin: 14px 0 0; border: 1px solid var(--linha); border-radius: 16px;
  background: var(--papel-2); overflow: hidden;
}
/* --- o cabeçalho: título em cima, data embaixo (§17, §20) --- */
.calb-cab {
  width: 100%; display: flex; flex-direction: column; gap: 2px;
  padding: 12px var(--calb-gut); border: 0; background: transparent;
  font: inherit; color: var(--tinta); text-align: left; cursor: pointer;
}
.calb-cab:focus-visible { outline: 2px solid var(--acento); outline-offset: -2px; }
.calb-cab-topo { display: flex; align-items: center; gap: var(--calb-gap); width: 100%; }
/* A LARGURA DO ÍCONE É DECLARADA porque é dela que sai o recuo da data. Sem
   isto, o ícone mede o que o glifo `▦` medir na fonte que tiver carregado —
   e o recuo da linha de baixo deixa de bater com o título. */
.calb-ic { flex: none; width: var(--calb-ic); color: var(--acento);
           font-size: 1rem; line-height: 1; text-align: center; }
.calb-tit { flex: 1 1 auto; font-weight: 700; font-size: 1rem; letter-spacing: -.01em; }
.calb-chev { flex: none; color: var(--tinta-clara); }
/* A DATA GANHOU LINHA PRÓPRIA. Ela é a informação que o bloco recolhido
   existe para dar, e tem espaço para o intervalo inteiro sem reticências.

   O RECUO É CALCULADO, E NÃO CHUTADO. Era `padding-left: 25px` — um número
   escrito à mão para «dar mais ou menos a largura do ícone». Media 22.8px na
   prática, e a data ficava 2.2px à direita do título, bem no lugar onde o olho
   procura uma coluna. Agora ela se alinha com o título por construção. */
.calb-quando { display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap;
              padding-left: calc(var(--calb-ic) + var(--calb-gap)); }
.calb-data { font-size: .86rem; font-weight: 600; color: var(--acento); }
.calb-hora { font-size: .8rem; color: var(--tinta-fraca); }

.calb-corpo { padding: 0 var(--calb-gut) 13px; min-width: 0; }
.calb-corpo[hidden] { display: none; }
.calb-bloco .agenda-edit { border: 0; padding: 0; margin: 0; background: transparent;
                          min-width: 0; }
.calb-bloco .escolher-dia:empty { display: none; }
/* Nenhum campo pode ser mais largo do que a coluna que o contém. */
.calb-bloco .campo { min-width: 0; }
.calb-bloco select, .calb-bloco .sel-dia { width: 100%; max-width: 100%; min-width: 0; }
/* O PAR INÍCIO/DURAÇÃO QUEBRA ANTES DE VAZAR (§15).

   A grade era `1fr 1fr` fixo: duas colunas em qualquer largura, inclusive
   naquela em que duas colunas não cabem. Enquanto houver largura, elas não
   vazam — a medição do §35 mostra que aguentam até 320px —, mas «enquanto
   houver» é uma promessa que depende do texto das opções, e o texto das opções
   depende do acervo.

   A REGRA É DUAS COLUNAS, E UMA QUANDO DUAS NÃO CABEM. A pergunta certa não é
   quanto mede a JANELA — é quanto mede o BLOCO, que muda de largura conforme a
   ficha, a gaveta ou a área de leitura em que ele estiver. Por isso a medida é
   uma consulta de contêiner, e não um `@media`.

   `auto-fit` foi tentado primeiro e está ERRADO aqui: a 648px ele criava
   QUATRO colunas, e os dois campos ficavam espremidos à esquerda com metade do
   bloco vazia à direita. O par Início/Duração é um par — o teto é dois.

   Sem suporte a `@container`, o que vale é a declaração de cima: duas colunas
   com `minmax(0, 1fr)`, que a varredura do §35 prova não vazar nem a 320px.
   A degradação é o comportamento de hoje, e não um defeito novo.

   Dia continua atravessando por `1 / -1`, que vale igual nos dois casos. */
.calb-corpo { container-type: inline-size; }
.calb-bloco .agenda-edit { grid-template-columns: repeat(2, minmax(0, 1fr)); }
@container (max-width: 250px) {
  .calb-bloco .agenda-edit { grid-template-columns: minmax(0, 1fr); }
}

.btn-cal-add {
  width: 100%; border: 0; border-radius: 13px; padding: 13px 16px;
  background: var(--acento); color: #fff; font: inherit; font-weight: 600;
  cursor: pointer; display: inline-flex; align-items: center;
  justify-content: center; gap: 7px;
}

/* --- SALVAR E REMOVER, LADO A LADO (§14) ---
   Duas colunas iguais: elas têm o mesmo peso de decisão dentro do bloco, e
   larguras diferentes sugeririam que uma é a ação principal. O «Remover» é
   distinguido pelo TRATAMENTO — fundo neutro, contorno — e não pelo tamanho. */
/* `.agenda-edit` é uma grade de duas colunas (regional.css). As ações e a
   confirmação atravessam as duas — sem isto elas cairiam numa coluna só e o
   par de botões ficaria com metade da largura do cartão. */
.calb-bloco .agenda-acoes, .calb-bloco .salvo { grid-column: 1 / -1; }
/* A MESMA REGRA PARA OS BOTÕES (§16). Lado a lado é a forma preferida, e é a
   que vale no viewport principal do projeto — a medição confirma os dois em
   393px. `wrap` com base de 116px é o que os faz EMPILHAR, em vez de espremer
   ou vazar, quando a largura deixar de existir. */
.agenda-acoes { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 12px; }
.agenda-acoes > button { flex: 1 1 116px; min-width: 0; padding: 12px 10px;
                         border-radius: 13px; font: inherit; font-weight: 600;
                         cursor: pointer; }
.agenda-acoes .btn-salvar { border: 0; background: var(--acento); color: #fff; }
.agenda-acoes .btn-salvar:disabled { background: var(--linha); color: var(--tinta-clara);
                                     cursor: default; }
.agenda-acoes .btn-cal-remover {
  border: 1px solid var(--linha); background: transparent; color: var(--tinta-fraca);
}
.agenda-acoes .btn-cal-remover:hover { color: #a13c2c; border-color: #e0c3bb; }
.calb-bloco .salvo { margin: 9px 0 0; font-size: .82rem; color: var(--acento);
                    text-align: center; min-height: 0; display: block; }
.calb-bloco .salvo[hidden] { display: none; }

/* --- o texto da narração, e o bloco de detalhes (§16, §17) --- */
.narracao-texto { margin: 10px 0 0; padding: 14px 15px;
                  background: var(--papel-2); border: 1px solid var(--linha);
                  border-radius: 16px; }
.narracao-texto p { margin: 0 0 12px; line-height: 1.62; }
.narracao-texto p:last-child { margin-bottom: 0; }

.det-bloco { margin: 14px 0 0; border: 1px solid var(--linha); border-radius: 16px;
             background: var(--papel-2); overflow: hidden; }
.det-bloco > summary { list-style: none; cursor: pointer; padding: 13px 14px;
                       font-weight: 700; display: flex; align-items: center; gap: 8px; }
.det-bloco > summary::-webkit-details-marker { display: none; }
.det-bloco > summary::after { content: "▾"; margin-left: auto;
                              color: var(--tinta-clara); font-weight: 400; }
.det-bloco[open] > summary::after { content: "▴"; }
.det-corpo { padding: 0 14px 14px; }
.det-corpo h4 { margin: 4px 0 6px; font-size: .78rem; letter-spacing: .06em;
                text-transform: uppercase; color: var(--tinta-clara); }
.det-corpo p { margin: 0 0 10px; line-height: 1.55; }
.det-corpo ul { margin: 0; padding-left: 18px; }
.det-corpo li { margin-bottom: 6px; line-height: 1.45; }

/* --- CTA de ingresso (§25) --- */
.btn-ingresso {
  display: flex; align-items: center; justify-content: center; gap: 9px;
  margin: 12px 0 0; padding: 13px 16px;
  border: 1px solid var(--acento); border-radius: 13px;
  background: var(--papel-2); color: var(--acento);
  font-weight: 600; text-decoration: none;
}
.btn-ingresso .ic { font-size: 1rem; }
.tk-prov { font-size: .76rem; font-weight: 500; color: var(--tinta-clara); }
.tk-nota {
  margin: 12px 0 0; padding: 11px 13px; border-radius: 12px;
  background: rgba(123, 79, 176, .07); color: var(--tinta-fraca); font-size: .86rem;
}

/* --- aviso contextual de horário (§39) --- */
.aviso-hr {
  position: fixed; inset: 0; z-index: 130;
  display: flex; align-items: center; justify-content: center; padding: 20px;
  background: rgba(20, 16, 30, .5);
}
.aviso-hr-caixa {
  width: 100%; max-width: 360px; background: var(--papel-2);
  border-radius: 18px; padding: 20px; box-shadow: 0 12px 40px rgba(20, 16, 30, .28);
}
.aviso-hr-tit { margin: 0 0 8px; font-weight: 700; display: flex; align-items: center; gap: 8px; }
.aviso-hr-tit span { color: var(--acento); }
.aviso-hr-txt { margin: 0 0 6px; color: var(--tinta-fraca); line-height: 1.5; }
.aviso-hr-sub { margin: 0 0 16px; font-size: .8rem; color: var(--tinta-clara); }
.aviso-hr-acoes { display: flex; }

/* ====================================================================
   5. MAPA — arredores e bate-voltas (§16)
   ==================================================================== */
.mr-arredores {
  padding: 8px 12px 4px; border-bottom: 1px solid var(--linha);
}
.mr-arr-tit {
  margin: 0 0 6px; font-size: .68rem; font-weight: 700; letter-spacing: .09em;
  text-transform: uppercase; color: var(--tinta-clara);
}
.mr-arr-lista { list-style: none; margin: 0; padding: 0; display: flex; gap: 8px; overflow-x: auto; }
.mr-arr-lista button {
  display: flex; align-items: center; gap: 7px; white-space: nowrap;
  border: 1px solid var(--linha); border-radius: 999px; background: var(--papel-2);
  padding: 5px 11px 5px 5px; font: inherit; font-size: .8rem; color: var(--tinta); cursor: pointer;
}
.mr-arr-km { color: var(--tinta-clara); font-size: .74rem; }
.mr-arr-nota { margin: 6px 0 2px; font-size: .7rem; color: var(--tinta-clara); line-height: 1.35; }

/* ====================================================================
   6. VITRINE DO GUIDE — o mapa saiu daqui (Bloco 1, §38)
   ====================================================================

   Esta seção vestia «Onde ele te leva»: o seletor de vista, a moldura do mapa
   real e a nota dos arredores. A seção inteira foi removida da página comercial
   — mapa é experiência operacional do Guide, e não argumento de venda.

   AS REGRAS SAÍRAM JUNTO, E NÃO FICARAM ÓRFÃS. CSS morto para um componente
   removido é o convite mais barato para ele voltar: basta alguém colar o HTML e
   ele já vem estilizado. Dentro do Guide adquirido o mapa real continua
   inteiro, e é `mapa-real.js` + `regional.css` que o vestem (§39). */

/* ====================================================================
   7. PRATELEIRA POR DESTINO — Comprar e Meus guias (§70, §71, §73)
   ==================================================================== */
.pd-pais-sec + .pd-pais-sec { margin-top: 18px; }
.pd-pais-tit {
  display: flex; align-items: baseline; gap: 8px;
  margin: 18px 0 8px; font-size: .9rem; font-weight: 700;
}
.pd-pais-n { font-size: .74rem; font-weight: 500; color: var(--tinta-clara); }
.pd-lista { list-style: none; margin: 0; padding: 0; display: grid; gap: 10px; }
.pd-card { border: 1px solid var(--linha); border-radius: var(--raio); overflow: hidden; background: var(--papel-2); }
.pd-card.em-producao { opacity: .82; }
.pd-abre {
  width: 100%; display: flex; align-items: center; gap: 12px;
  padding: 10px; border: 0; background: transparent; text-align: left;
  font: inherit; color: var(--tinta); cursor: pointer;
}
.pd-abre:focus-visible { outline: 2px solid var(--acento); outline-offset: -2px; }
.pd-capa {
  flex: none; width: 76px; height: 76px; border-radius: 13px; overflow: hidden;
  display: block; background: var(--linha);
}
.pd-capa img { width: 100%; height: 100%; object-fit: cover; display: block; }
.pd-capa-cor {
  background: var(--capa); display: grid; place-items: center;
  color: #fff; font-weight: 700; letter-spacing: .04em;
}
.pd-tx { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.pd-linha { display: flex; align-items: baseline; gap: 10px; }
.pd-nome { flex: 1 1 auto; font-weight: 700; font-size: 1rem; }
.pd-preco { flex: none; font-weight: 700; color: var(--acento); }
.pd-pais { font-size: .8rem; color: var(--tinta-fraca); }
.pd-fatos { font-size: .78rem; color: var(--tinta-clara); }
.pd-selo {
  align-self: flex-start; margin-top: 3px;
  font-size: .66rem; font-weight: 700; letter-spacing: .05em; text-transform: uppercase;
  padding: 2px 7px; border-radius: 999px;
  background: var(--linha); color: var(--tinta-fraca);
}
.pd-selo.seu { background: rgba(123, 79, 176, .12); color: var(--acento); }
.pd-cta { flex: none; font-size: .82rem; font-weight: 600; color: var(--acento); }
.pd-card.em-producao .pd-cta { color: var(--tinta-clara); }

/* ====================================================================
   8. HOME B — o card
   ====================================================================
   O card foi reescrito na rodada de ajustes visuais, e a folha dele voltou a
   ser `home-b.css`, que é onde a Home B mora. O que sobrava aqui eram regras
   da versão anterior — mantê-las seria deixar duas folhas disputando o mesmo
   seletor, que é como uma correção passa a depender da ordem dos arquivos. */

/* ====================================================================
   9. VIAGEM, CONTA E NOTIFICAÇÕES (§43, §44, §47, §85)
   ==================================================================== */
.vg-trilha { list-style: none; margin: 0; padding: 0; display: grid; gap: 8px; }
.vg-trilha-bt {
  width: 100%; display: flex; align-items: center; gap: 10px;
  padding: 12px 14px; border: 1px solid var(--linha); border-radius: 14px;
  background: var(--papel-2); font: inherit; color: var(--tinta); text-align: left;
  cursor: pointer;
}
.vg-trilha-bt:disabled { cursor: default; color: var(--tinta-fraca); }
.vg-trilha-tx { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; }
.vg-trilha-datas { font-size: .78rem; color: var(--tinta-fraca); }
.vg-trilha-n { flex: none; font-size: .74rem; color: var(--tinta-clara); }
.btn-sec { background: var(--papel-2); color: var(--tinta); border: 1px solid var(--linha); }

.ct-cabeca { display: flex; gap: 14px; align-items: flex-start; margin-bottom: 6px; }
.ct-avatar-g {
  flex: none; width: 54px; height: 54px; border-radius: 50%;
  display: grid; place-items: center; font-size: 24px; color: #fff;
  background: linear-gradient(140deg, var(--acento), #5c3a86);
}
.ct-cabeca h2 { margin: 0 0 5px; font-size: 1.06rem; }
.ct-cabeca p { margin: 0; color: var(--tinta-fraca); font-size: .88rem; line-height: 1.45; }
.ct-itens button { align-items: flex-start; }
.ct-sub { display: block; font-size: .74rem; color: var(--tinta-clara); font-weight: 400; }

.nt-vazio {
  border: 1px dashed var(--linha); border-radius: var(--raio);
  padding: 34px 20px; text-align: center; color: var(--tinta-fraca);
}
.nt-ic { font-size: 26px; color: var(--tinta-clara); display: block; margin-bottom: 10px; }
.nt-vazio p { margin: 0 0 6px; }

/* ====================================================================
   10. AJUDA — a porta de volta do tutorial (§6)
   ==================================================================== */
.inst-cta {
  width: 100%; display: flex; align-items: center; gap: 11px;
  margin: 0 0 16px; padding: 13px 14px;
  border: 1px solid var(--linha); border-radius: 14px;
  background: var(--papel-2); font: inherit; color: var(--tinta);
  text-align: left; cursor: pointer;
}
.inst-cta span { min-width: 0; }
.inst-cta > span:nth-child(2) { flex: 1 1 auto; font-weight: 600; }
.inst-cta small { display: block; font-weight: 400; font-size: .76rem; color: var(--tinta-clara); }
.inst-cta-ic { flex: none; color: var(--acento); font-size: 1.05rem; }

/* ====================================================================
   11. AVALIE O GUI — o assunto virou select (§55, §56)
   ==================================================================== */
.av-select {
  width: 100%; padding: 12px 13px; border-radius: 12px;
  border: 1px solid var(--linha); background: var(--papel-2);
  font: inherit; color: var(--tinta);
}
.av-assunto, .av-livre { display: block; margin-bottom: 12px; }

/* ====================================================================
   12. DESKTOP — nem mobile esticado, nem layout novo (§110)
   ==================================================================== */
@media (min-width: 860px) {
  .pd-lista { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .tg { align-items: center; }
  .tg-caixa { border-radius: 22px; }
}

/* O contador do antigo botão de planejamento vive escondido: `pintarConta`
   continua alimentando-o porque os testes gravados da 12.13 o leem, e apagar
   o nó quebraria a leitura sem melhorar nada na tela (§45). */
#conta-plano { display: none !important; }
/* O cabeçalho do mapa é "curto de propósito" (12.6B-H): o par sino + avatar
   entra sem crescer a faixa. */
.topo .shell-acoes { align-self: center; }


/* ====================================================================
   O CTA DE INGRESSO — contextual à atividade (§11 a §19)
   ====================================================================

   Ele fica entre o Calendário e «Obter direção», e se parece com «Obter
   direção» de propósito: os dois são coisas a resolver antes de ir, e dar a
   um deles o peso do botão primário sugeriria que comprar ingresso é mais
   importante do que chegar lá. O preenchido continua sendo o Salvar do
   calendário, que é a única ação que muda a viagem do viajante.

   `.sem-destino` é o estado de hoje: há ingresso a comprar, e ainda não há por
   onde. Ele não se disfarça de link — é `<button>`, não `<a>`, e o cursor e o
   leitor de tela dizem a mesma coisa. */
.btn-ingresso {
  appearance: none; cursor: pointer; font: inherit; width: 100%;
  display: flex; align-items: center; justify-content: center; gap: 8px;
  margin: 10px 0 0; padding: 13px 16px; border-radius: 14px;
  background: var(--papel-2); border: 1px solid var(--acento);
  color: var(--acento); font-weight: 600; text-decoration: none;
}
.btn-ingresso .ic { font-size: .9rem; }
.btn-ingresso:focus-visible { outline: 2px solid var(--acento); outline-offset: 2px; }
.tk-prov { font-size: .74rem; font-weight: 500; color: var(--tinta-clara); }

/* A MENSAGEM DE LABORATÓRIO NASCE DO TOQUE, e some com a ficha (§19). Ela
   começa `hidden`: quem não tocar no botão nunca a lê. */
.tk-lab {
  margin: 8px 0 0; padding: 10px 13px; border-radius: 12px;
  background: var(--papel); border: 1px dashed var(--linha);
  font-size: .8rem; line-height: 1.45; color: var(--tinta-fraca);
}
.tk-lab[hidden] { display: none; }


/* ====================================================================
   BLOCO 1 — O CABEÇALHO ÚNICO: TRÊS ZONAS, UM CENTRO GEOMÉTRICO
   ====================================================================

   §3, §4, §5 — e as contraprovas CP-HEAD-01 e CP-HEAD-02.

   O DEFEITO. Os dois cabeçalhos do app — o do shell e o do mapa — eram `flex`
   de três filhos:

       [ ‹ voltar ] [ título ......... ] [ sino avatar ]

   Nesse arranjo o título recebe O QUE SOBRA, e portanto a posição dele é
   função da largura do voltar. «‹ Destinos» (74px) e «‹ Asakusa / Ueno»
   (131px) deslocavam o título em quantidades diferentes, e o resultado era o
   que a revisão humana viu: telas que parecem alinhadas de jeitos diferentes.
   Centralizar o texto dentro do `flex: 1` não resolveria — resolveria a
   aparência dentro da caixa, e a caixa é que estava fora do lugar.

   A CORREÇÃO É ESTRUTURAL. Três trilhos de grade:

       minmax(0, 1fr)  |  auto  |  minmax(0, 1fr)

   Os dois trilhos laterais são `1fr` e portanto TÊM A MESMA LARGURA, seja qual
   for o conteúdo deles. O trilho do meio fica exatamente no centro do
   cabeçalho — e o centro do título é o centro da tela.

   `minmax(0, …)` em vez de `1fr` puro é o que impede um voltar comprido de
   crescer o próprio trilho: sem o mínimo zero, `1fr` é `minmax(auto, 1fr)` e a
   largura do conteúdo volta a mandar — que é precisamente o defeito. O botão
   passa a truncar; o título não sai do centro. É isto que as CP-HEAD-01/02
   injetam e exigem que continue valendo. */
/* --------------------------------------------------------------------
   O TRILHO LATERAL TEM PISO — §6 a §9 do fechamento pós-Gate

   O DEFEITO, VISTO NO IPHONE. «National Museum of Nature and Science» no
   cabeçalho da atividade, e o sino e o avatar sumidos.

   E A CAUSA NÃO ERA SOBREPOSIÇÃO. Medido em 320px: o título ocupava
   [20, 300] e a zona direita, [304, 304] — **largura zero**. Os trilhos
   `minmax(0, 1fr)` podem encolher até nada, e o trilho do meio é `auto`:
   com um título de 37 caracteres, o meio pediu tudo e as pontas cederam
   tudo. Os controles não foram invadidos; foram espremidos para fora da
   existência, que é pior, porque não deixa nem o rastro da colisão.

   A CORREÇÃO É DAR PISO AOS DOIS TRILHOS, e o mesmo piso para os dois —
   `minmax(--cab-lado, 1fr)`. Eles continuam `1fr`, continuam idênticos, e o
   centro continua geométrico; o que muda é que agora existe um tamanho
   abaixo do qual eles não descem. O piso é a largura REAL do par
   sino+avatar: 36+6+36, mais 4px de respiro.

   A partir daí o título é que tem de caber no que sobra — e o §8 diz em que
   ordem ele deve tentar. Ver a regra do `h1`, abaixo. */
:root { --cab-lado: 82px; }
@media (max-width: 359px) { :root { --cab-lado: 72px; } }

.shell-topo {
  display: grid;
  grid-template-columns:
    minmax(var(--cab-lado), 1fr) minmax(0, auto) minmax(var(--cab-lado), 1fr);
  align-items: center;
  column-gap: 8px;
}
.topo {
  display: grid;
  grid-template-columns:
    minmax(var(--cab-lado), 1fr) minmax(0, auto) minmax(var(--cab-lado), 1fr);
  align-items: center;
  column-gap: 8px;
  flex-wrap: nowrap;
}
.shell-lado, .topo-lado {
  min-width: 0; display: flex; align-items: center; gap: 6px; overflow: hidden;
}
.shell-lado-e, .topo-lado-e { justify-content: flex-start; }
.shell-lado-d, .topo-lado-d { justify-content: flex-end; }
/* O VOLTAR TRUNCA EM VEZ DE EMPURRAR. Ele é a única coisa do cabeçalho cujo
   texto é imprevisível — nome de região, nome de destino, nome de área. */
.shell-voltar, .voltar-destino {
  min-width: 0; max-width: 100%;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.shell-tit, .topo-txt {
  grid-column: 2; min-width: 0; text-align: center;
  display: flex; flex-direction: column; align-items: center;
}
/* O TÍTULO LONGO, NA ORDEM DO §8.

     1. até DUAS linhas          `-webkit-line-clamp: 2`
     2. fonte menor, moderada    1,06rem → 0,98rem quando há duas linhas
     3. line-height controlado   1,16 — apertado sem colar
     4. largura real disponível  o trilho do meio, que agora tem limite
     5. reticências, por último  o próprio clamp as põe na segunda linha

   Duas linhas fazem o cabeçalho crescer, e isso é o certo: o §8 autoriza em
   primeiro lugar, e a alternativa era encolher a letra até ficar ilegível ou
   esconder o sino. As telas de título curto continuam em uma linha e em
   55px — a altura única do Bloco 1 não se perde onde ela existia.

   A SEGUNDA LINHA (contexto) NUNCA quebra: ela é curta por contrato — «Asakusa
   / Ueno», «Tóquio, Japão» — e duas linhas de contexto embaixo de duas de
   título seriam quatro linhas de cabeçalho. */
.shell-tit h1, .topo-txt h1 {
  max-width: 100%;
  display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2;
  overflow: hidden; white-space: normal;
  overflow-wrap: anywhere;
}
.shell-tit p, .topo-txt p {
  max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}

/* --------------------------------------------------------------------
   A HIERARQUIA DAS DUAS LINHAS — §5, §7

   A linha de baixo é CONTEXTO: o destino a que a tela pertence, o país, a
   região. Ela é menor, é secundária e puxa para o roxo da identidade — o
   mesmo padrão que os mapas já usavam e que o §5 manda valer no app inteiro.

   A linha de cima é a TELA: preto, maior, e é ela que o olho encontra
   primeiro. Nenhuma das duas é frase explicativa: o §7 proibiu a glosa, e a
   segunda linha só existe quando é DADO (§6 da rodada anterior).

   `--contexto` é derivado do acento, e não um roxo novo: um segundo roxo
   escrito à mão divergiria do primeiro na próxima vez que o acento mudasse. */
:root { --contexto: color-mix(in srgb, var(--acento) 66%, var(--tinta-fraca)); }
.shell-tit h1, .topo-txt h1 {
  font-size: 1.06rem; font-weight: 700; line-height: 1.16;
  letter-spacing: -.012em; color: var(--tinta);
}
/* O passo 2 do §8: a redução é MODERADA e só onde o espaço é curto. 0,98rem
   continua acima do tamanho de corpo do aplicativo — «não reduzir para tamanho
   ilegível» é o limite que o §8 impõe, e ele é respeitado. */
@media (max-width: 440px) {
  .shell-tit h1, .topo-txt h1 { font-size: .98rem; }
}
@media (max-width: 359px) {
  .shell-tit h1, .topo-txt h1 { font-size: .94rem; }
}
.shell-tit p, .topo-txt p {
  font-size: .76rem; font-weight: 600; line-height: 1.25;
  letter-spacing: .005em; color: var(--contexto);
}
.shell-tit p[hidden], .topo-txt p[hidden] { display: none; }

@media (min-width: 720px) {
  .shell-tit h1, .topo-txt h1 { font-size: 1.18rem; }
  .shell-tit p, .topo-txt p { font-size: .82rem; }
}
/* Em 320px o par sino+avatar e um voltar comprido dividem 320 − 32 de padding.
   O título continua centrado porque os trilhos continuam iguais; o que cede é
   a tipografia do voltar, que é rótulo e não conteúdo. */
@media (max-width: 359px) {
  .shell-topo, .topo { column-gap: 4px; }
  .shell-voltar, .voltar-destino { font-size: .86rem; }
  .shell-ic, .shell-avatar { width: 32px; height: 32px; }
}


/* ====================================================================
   REFINAMENTO PÓS-GATE MOBILE — o que o iPhone real pediu
   ====================================================================
   Esta camada entra por último, como a anterior, e pelo mesmo motivo: ela
   veste o que a rodada mudou, sem redesenhar o que já estava aprovado.
   Ordem: barra inferior · capa do Guide · marcas · Meu dia · Avalie ·
   Dados da viagem · créditos. */

/* --------------------------------------------------------------------
   1. BARRA INFERIOR — hierarquia, e não tamanho (§53 a §59)

   O §59 pede para aumentar a presença visual SÓ o necessário, e comparar
   antes e depois. MEDIDO em 393×852, contra o commit do checkpoint:

       altura da barra     52,0 px  →  62,0 px
       altura do botão     51   px  →  59   px

   Dez pixels. Nenhuma barra gigante: o §57 proíbe copiar o YouTube, e uma
   faixa de 80px num telefone de 852px come conteúdo que o viajante precisa.

   O QUE MUDA DE VERDADE NÃO É A ALTURA, É O CONTRASTE. O rótulo inativo
   sai de `--tinta-clara` (#8b93a1) para `--tinta-fraca` (#5b6472), e o
   ícone passa a ser traçado em 24px em vez de um glifo de 17px. */
:root { --shell-h: 64px; }
.shell-nav {
  /* A SAFE AREA DO IPHONE (§58). O `padding-bottom` já existia; o que
     faltava era a barra ter altura PRÓPRIA acima dele, para o home
     indicator não comer o alvo de toque do último item. */
  padding-bottom: calc(var(--seguro-b) + 2px);
  box-shadow: 0 -8px 24px rgba(30, 25, 45, .10);
}
.shell-nav button {
  padding: 8px 2px 9px; gap: 4px;
  min-height: 56px;
  color: var(--tinta-fraca); font-size: .68rem; font-weight: 600;
  letter-spacing: .005em;
  /* O alvo é o botão inteiro, e não o ícone: numa grade de cinco colunas,
     cada um já tem ~78px de largura em 393px. */
  cursor: pointer; position: relative;
}
.shell-nav .ic {
  display: grid; place-items: center; width: 26px; height: 26px; font-size: 0;
}
.shell-nav .ic svg { display: block; width: 24px; height: 24px; }
.shell-nav .rot { line-height: 1.1; }

/* O ESTADO ATIVO É EVIDENTE, E NÃO É UM BOTÃO GIGANTE (§57).

   Três sinais somados, cada um fraco sozinho e inequívoco junto: o ícone
   ganha o roxo do acento e traço mais grosso, o rótulo escurece e engorda,
   e uma cápsula suave aparece atrás do ícone. A cápsula é o que resolve o
   «pouco destaque» que o humano viu no aparelho: cor de texto sozinha, num
   ícone de contorno fino, não sobrevive à luz do sol. */
.shell-nav button.ativo { color: var(--acento); font-weight: 700; }
.shell-nav button.ativo .ic::before {
  content: ""; position: absolute; top: 4px; left: 50%; transform: translateX(-50%);
  width: 46px; height: 30px; border-radius: 999px;
  background: rgba(123, 79, 176, .12);
}
.shell-nav button.ativo .ic { position: static; }
.shell-nav button.ativo .ic svg { stroke-width: 2.1; position: relative; }
.shell-nav button:focus-visible { outline: 2px solid var(--acento); outline-offset: -3px; }

/* Em 320px os cinco rótulos ainda cabem, mas sem folga: a tipografia cede
   antes de a palavra quebrar em duas linhas. */
@media (max-width: 359px) {
  .shell-nav button { font-size: .62rem; padding-left: 0; padding-right: 0; }
  .shell-nav .ic svg { width: 22px; height: 22px; }
  .shell-nav button.ativo .ic::before { width: 40px; }
}

/* --------------------------------------------------------------------
   2. A CAPA DO GUIDE (§13 a §18) */
.guide-capa { max-width: var(--lim, 560px); margin: 0 auto; padding: 14px 16px 28px; }
/* OS CANTOS SÃO OS DA HOME B (§16): 22px é o raio dos cartões grandes de lá,
   e é ele que faz a capa parecer continuação do card que a abriu. */
.gc-foto {
  position: relative; margin: 0; border-radius: 22px; overflow: hidden;
  aspect-ratio: 4 / 5; max-height: 62vh; background: var(--capa, var(--linha));
  box-shadow: 0 6px 22px rgba(24, 16, 28, .16);
}
.gc-foto img { width: 100%; height: 100%; object-fit: cover; display: block; }
/* O VÉU É O MÍNIMO PARA A LETRA SER LEGÍVEL (§15): transparente no alto,
   fechando só no terço de baixo, onde o texto está. Nada de pôster. */
.gc-veu {
  position: absolute; inset: 0;
  background: linear-gradient(180deg, rgba(20,14,32,.30) 0%, rgba(20,14,32,0) 34%,
              rgba(20,14,32,.34) 62%, rgba(20,14,32,.82) 100%);
}
.gc-tx { position: absolute; left: 0; right: 0; bottom: 0; padding: 20px 20px 22px;
         color: #fff; }
.gc-selo {
  display: inline-block; margin-bottom: 8px;
  font-size: .64rem; font-weight: 700; letter-spacing: .09em; text-transform: uppercase;
  background: rgba(255,255,255,.2); border: 1px solid rgba(255,255,255,.34);
  border-radius: 999px; padding: 4px 10px;
}
.gc-tx h2 {
  margin: 0; font-size: 1.9rem; line-height: 1.08; letter-spacing: -.028em;
  /* A SOMBRA É LEVE (§15), e existe para o caso de a foto ter céu claro
     exatamente atrás da primeira linha — que é o caso de Tóquio. */
  text-shadow: 0 2px 14px rgba(20, 14, 32, .5);
}
.gc-onde { margin: 5px 0 0; font-size: .95rem; color: rgba(255,255,255,.92);
           text-shadow: 0 1px 10px rgba(20, 14, 32, .5); }
.gc-fatos { margin: 14px 0 0; font-size: .88rem; color: var(--tinta-fraca); }
.gc-resumo { margin: 8px 0 0; font-size: .95rem; line-height: 1.5; color: var(--tinta); }
.gc-bt {
  appearance: none; cursor: pointer; font: inherit; font-weight: 700;
  width: 100%; margin: 18px 0 0; padding: 16px 20px; border: 0;
  border-radius: 16px; background: var(--acento); color: #fff; font-size: 1.02rem;
}
.gc-bt:focus-visible { outline: 2px solid var(--acento); outline-offset: 3px; }
@media (min-width: 720px) {
  .guide-capa { --lim: 640px; }
  .gc-foto { aspect-ratio: 16 / 9; max-height: 420px; }
  .gc-tx h2 { font-size: 2.3rem; }
  .gc-bt { width: auto; min-width: 300px; }
}

/* --------------------------------------------------------------------
   3. CRÉDITOS DE IMAGEM, NO LUGAR CERTO (§19, §20) */
.gp-creditos { margin: 26px 0 0; padding-top: 14px; border-top: 1px solid var(--linha); }
.gp-creditos h3 {
  margin: 0 0 6px; font-size: .7rem; font-weight: 700; letter-spacing: .09em;
  text-transform: uppercase; color: var(--tinta-clara);
}
.gp-credito { margin: 0; font-size: .76rem; line-height: 1.5; color: var(--tinta-clara); }
.gp-credito a { color: var(--tinta-fraca); }
.guide-capa .gp-creditos { margin-top: 22px; }
/* A `figcaption` sobreposta ao hero comercial não existe mais; a regra sai
   junto, para que colar o HTML de volta não traga o estilo pronto (§19). */

/* --------------------------------------------------------------------
   4. FAVORITO E VISITEI — LINGUAGEM COMPACTA (§16 a §21)

   `.ad-marcas` — a faixa de dois botões de meia-tela — SAIU com o HTML que a
   emitia. O estilo sai junto pela razão de sempre: regra viva para componente
   removido é o convite mais barato para ele voltar. */

/* O CORAÇÃO SOBRE A IMAGEM (§16, §17). Sem texto, com alvo de 40px, e com um
   véu circular por baixo para o glifo não se perder numa foto clara — o
   Sensō-ji tem céu branco exatamente naquele canto. */
.hero-ativ { position: relative; }
.hero-fav {
  position: absolute; top: 10px; right: 10px;
  appearance: none; cursor: pointer; font: inherit; line-height: 1;
  width: 40px; height: 40px; border-radius: 50%;
  display: grid; place-items: center;
  border: 0; background: rgba(20, 14, 32, .42);
  backdrop-filter: blur(3px); -webkit-backdrop-filter: blur(3px);
  color: #fff; font-size: 1.25rem;
}
.hero-fav.on { background: var(--acento); color: #fff; }
.hero-fav:focus-visible { outline: 2px solid #fff; outline-offset: 2px; }

/* «✓ VISITEI» NA LINHA DOS METADADOS (§18, §19, §20). O texto não muda com o
   estado — «Visitei» é o que a pessoa fez, e não uma pergunta. Muda a cor. */
.onde { display: flex; align-items: baseline; gap: 10px; }
.onde-tx { flex: 1 1 auto; min-width: 0; }
.mk-visitei {
  appearance: none; cursor: pointer; font: inherit; font-size: .8rem; font-weight: 650;
  flex: 0 0 auto; white-space: nowrap; min-height: 32px;
  display: inline-flex; align-items: center; gap: 5px;
  padding: 5px 11px; border-radius: 999px;
  border: 1px solid var(--linha); background: var(--papel-2); color: var(--tinta-fraca);
}
.mk-visitei.on { border-color: var(--acento); color: var(--acento);
                 background: rgba(123, 79, 176, .1); }
.mk-visitei:focus-visible { outline: 2px solid var(--acento); outline-offset: 2px; }

/* O DRAWER (§21): ícone puro para as duas marcas, rótulo só no calendário. */
.pv-acoes { display: flex; align-items: center; gap: 8px; margin: 14px 0 0; }
.pv-mk {
  appearance: none; cursor: pointer; font: inherit; font-size: .82rem; font-weight: 600;
  min-height: 40px; display: inline-flex; align-items: center; justify-content: center;
  gap: 6px; padding: 8px 13px; border-radius: 999px;
  border: 1px solid var(--linha); background: var(--papel-2); color: var(--tinta-fraca);
}
.pv-ic { flex: 0 0 auto; width: 40px; padding: 0; font-size: 1.05rem; }
.pv-mk.on { border-color: var(--acento); color: var(--acento);
            background: rgba(123, 79, 176, .09); }
.pv-cal { flex: 1 1 auto; }
.pv-mk:focus-visible { outline: 2px solid var(--acento); outline-offset: 2px; }

/* --------------------------------------------------------------------
   5. MEU DIA — a foto manda, e o card inteiro abre (§32 a §37) */
.dia-lista .dia-item {
  display: block; padding: 0; margin-bottom: 14px;
  background: var(--papel-2); border: 1px solid var(--linha);
  border-radius: 18px; overflow: hidden;
}
.dia-item.em-conflito { border-color: #d9a441; }
.di-abre {
  appearance: none; border: 0; background: none; padding: 0; margin: 0;
  display: block; width: 100%; text-align: left; cursor: pointer; color: inherit;
  font: inherit;
}
.di-abre:focus-visible { outline: 2px solid var(--acento); outline-offset: -3px; }
/* A FOTO É HORIZONTAL (§33) e ocupa a largura inteira do card. */
.di-foto { position: relative; display: block; width: 100%; aspect-ratio: 16 / 9;
           background: var(--linha); overflow: hidden; }
.di-foto .mid-thumb, .di-foto .di-thumb {
  display: block; width: 100%; height: 100%; border-radius: 0;
}
.di-foto img { width: 100%; height: 100%; object-fit: cover; display: block; }
.di-foto .di-thumb.sem-foto {
  display: grid; place-items: center; background: var(--tinta-cap, var(--acento));
  color: rgba(255,255,255,.92); font-size: 2rem; font-weight: 700;
}
.di-foto-veu {
  position: absolute; inset: 0;
  background: linear-gradient(180deg, rgba(20,14,32,0) 38%, rgba(20,14,32,.78) 100%);
}
.di-foto-tx { position: absolute; left: 0; right: 0; bottom: 0; padding: 12px 14px 12px;
              display: block; color: #fff; }
.di-nome {
  display: block; font-size: 1.02rem; font-weight: 700; line-height: 1.2;
  letter-spacing: -.012em; text-shadow: 0 1px 10px rgba(20,14,32,.55);
}
.di-quando {
  display: flex; align-items: baseline; flex-wrap: wrap; gap: 4px 10px; margin-top: 4px;
  font-size: .82rem; color: rgba(255,255,255,.92);
  text-shadow: 0 1px 8px rgba(20,14,32,.55);
}
.di-quando .di-hora { display: inline-flex; align-items: baseline; gap: 4px; }
.di-quando strong { font-weight: 700; }
.di-seta { opacity: .8; }
.di-sem-hora { font-style: italic; color: rgba(255,255,255,.82); }
.di-dur { font-size: .76rem; color: rgba(255,255,255,.8); }

/* --------------------------------------------------------------------
   3. MEU DIA COMPACTO — uma superfície só (§10 a §14)

   O card era foto (202px) + faixa branca de ações (62px) = 264px. As duas
   áreas viraram UMA: tudo vive sobre a imagem, e a faixa branca — que era
   quase um quarto da altura e não carregava informação visual nenhuma —
   deixou de existir.

   A altura é declarada num lugar só e nasce do conteúdo: o bloco de texto
   pede ~62px, as ações ~36px, e o degradê precisa de ar acima deles para não
   começar colado no nome. */
.dia-lista .dia-item {
  position: relative; display: block; overflow: hidden;
  min-height: var(--dia-card-h, 136px);
  margin-bottom: 10px; padding: 0;
  background: var(--linha); border: 1px solid var(--linha);
  border-radius: 16px;
}
.dia-item.em-conflito { border-color: #d9a441; }

/* `.di-abre` COBRE O CARTÃO INTEIRO, por baixo de tudo (§14). As ações ficam
   acima dele no eixo Z, e não dentro dele na árvore. */
.di-abre {
  position: absolute; inset: 0; z-index: 1;
  appearance: none; border: 0; background: none; padding: 0; margin: 0;
  width: 100%; height: 100%; text-align: left; cursor: pointer;
  color: inherit; font: inherit; display: block;
}
.di-abre:focus-visible { outline: 2px solid var(--acento); outline-offset: -3px; }
/* `aspect-ratio: auto` NÃO É DECORAÇÃO. A regra anterior de `.di-foto` — a do
   card alto, com foto horizontal por cima da faixa branca — declarava
   `aspect-ratio: 16 / 9`, e esta aqui só trocou `position` e `inset`. A
   proporção sobreviveu à cascata: dentro de um card de 136px, a foto era
   resolvida com 202px de altura e ficava cortada por `overflow: hidden`.

   O degradê é filho dela, então ele também media 202px — e o ponto mais escuro,
   que existe para o nome sobreviver à foto mais clara do acervo, caía 66px
   ABAIXO da borda visível do card. O texto ficava sobre a parte clara de um
   degradê desenhado para outra altura. Zerar a proporção devolve a foto e o véu
   ao tamanho do card, que é onde eles são vistos. */
.di-foto { position: absolute; inset: 0; aspect-ratio: auto;
           display: block; overflow: hidden; }
.di-foto .mid-thumb, .di-foto .di-thumb {
  display: block; width: 100%; height: 100%; border-radius: 0;
}
.di-foto img { width: 100%; height: 100%; object-fit: cover; display: block; }
.di-foto .di-thumb.sem-foto {
  display: grid; place-items: center; background: var(--tinta-cap, var(--acento));
  color: rgba(255,255,255,.92); font-size: 1.8rem; font-weight: 700;
}
/* O DEGRADÊ ESCURECE SÓ O TERÇO DE BAIXO (§12), e vai fundo o bastante para
   o texto sobreviver à foto mais clara do acervo. */
.di-foto-veu {
  position: absolute; inset: 0;
  /* MEDIDO SOBRE O PIOR FUNDO DO ACERVO. A ilustração de Asakusa/Ueno é
     pastel, clara e cheia de detalhe — e é o fundo de quase todas as
     atividades, porque só o Sensō-ji tem fotografia própria. Com o degradê a
     52 % o nome e o horário ficavam legíveis na foto e sujos na ilustração.
     A 72 %, e com o degradê começando mais cedo, os dois sobrevivem. */
  background: linear-gradient(180deg, rgba(20,14,32,.10) 0%, rgba(20,14,32,.02) 20%,
              rgba(20,14,32,.40) 44%, rgba(20,14,32,.72) 62%, rgba(20,14,32,.93) 100%);
}
.di-tx {
  position: absolute; left: 0; right: 0; bottom: 42px;
  display: block; padding: 0 13px; color: #fff;
}
/* §13 — a legibilidade não foi sacrificada para reduzir altura. */
.di-nome {
  display: block; font-size: 1.02rem; font-weight: 700; line-height: 1.2;
  letter-spacing: -.012em; text-shadow: 0 1px 3px rgba(20,14,32,.9),
                                           0 2px 14px rgba(20,14,32,.7);
  overflow: hidden; text-overflow: ellipsis; display: -webkit-box;
  -webkit-box-orient: vertical; -webkit-line-clamp: 2;
}
.di-quando {
  display: flex; align-items: baseline; flex-wrap: wrap; gap: 3px 9px; margin-top: 2px;
  font-size: .82rem; color: #fff;
  text-shadow: 0 1px 3px rgba(20,14,32,.9), 0 2px 10px rgba(20,14,32,.7);
  font-variant-numeric: tabular-nums;
}
.di-quando .di-hora { display: inline-flex; align-items: baseline; gap: 4px; }
.di-quando strong { font-weight: 700; }
.di-seta { opacity: .85; }
.di-sem-hora { font-style: italic; color: rgba(255,255,255,.85); }
.di-dur { font-size: .74rem; color: rgba(255,255,255,.86); font-variant-numeric: normal; }

/* O CORAÇÃO NO ALTO À DIREITA, sobre a parte clara da foto. */
.di-fav {
  position: absolute; top: 8px; right: 8px; z-index: 3;
  appearance: none; cursor: pointer; font: inherit; line-height: 1;
  width: 38px; height: 38px; border-radius: 50%;
  display: grid; place-items: center;
  border: 0; background: rgba(20, 14, 32, .42);
  backdrop-filter: blur(3px); -webkit-backdrop-filter: blur(3px);
  color: #fff; font-size: 1.14rem;
}
.di-fav.on { background: var(--acento); }
.di-fav:focus-visible { outline: 2px solid #fff; outline-offset: 2px; }

/* AS AÇÕES NO RODAPÉ DA IMAGEM (§11, §12), compactas e legíveis. */
.di-acoes {
  position: absolute; left: 0; right: 0; bottom: 0; z-index: 3;
  display: flex; align-items: center; gap: 7px; padding: 0 10px 9px;
}
.di-visitei, .di-acoes .di-link {
  appearance: none; cursor: pointer; font: inherit;
  font-size: .78rem; font-weight: 650; white-space: nowrap;
  min-height: 32px; display: inline-flex; align-items: center; gap: 5px;
  padding: 6px 11px; border-radius: 999px;
  border: 1px solid rgba(255,255,255,.34); background: rgba(20,14,32,.42);
  backdrop-filter: blur(3px); -webkit-backdrop-filter: blur(3px);
  color: #fff;
}
.di-visitei.on { background: var(--acento); border-color: transparent; }
.di-acoes .di-link { margin-left: auto; }
.di-mais-op {
  flex: 0 0 auto; appearance: none; cursor: pointer; font: inherit;
  width: 32px; height: 32px; border-radius: 50%;
  border: 1px solid rgba(255,255,255,.34); background: rgba(20,14,32,.42);
  backdrop-filter: blur(3px); -webkit-backdrop-filter: blur(3px);
  color: #fff; font-size: 1rem; line-height: 1;
}
.di-visitei:focus-visible, .di-acoes .di-link:focus-visible,
.di-mais-op:focus-visible { outline: 2px solid #fff; outline-offset: 2px; }
.dia-item .di-conflito {
  position: relative; z-index: 3; margin: 0; padding: 7px 12px;
  font-size: .78rem; background: rgba(255,255,255,.94); color: #a3372c;
}
.di-link-txt {
  appearance: none; border: 0; background: none; padding: 0; font: inherit;
  font-size: .78rem; color: var(--acento); cursor: pointer; text-decoration: underline;
}
/* Em 320px «Direção» e «Visitei» ainda cabem; abaixo disso o rótulo da
   direção cede e fica o ícone, que é o que menos se lê dos dois. */
@media (max-width: 359px) {
  .dia-lista .dia-item { --dia-card-h: 128px; }
  .di-visitei, .di-acoes .di-link { font-size: .74rem; padding: 6px 9px; }
}

/* --------------------------------------------------------------------
   4. A FOLHA DE AÇÕES E A CONFIRMAÇÃO (§17, §18) */
.pl-acoes { padding-bottom: calc(var(--seguro-b) + 8px); }
.pl-opcoes { display: grid; gap: 4px; padding: 8px 10px 12px; }
.pl-op {
  width: 100%; appearance: none; border: 0; background: none; cursor: pointer;
  font: inherit; color: inherit; text-align: left;
  display: flex; align-items: center; gap: 12px;
  padding: 13px 12px; border-radius: 13px; min-height: 56px; font-size: .96rem;
}
.pl-op:active { background: var(--papel); }
.pl-op-ic { flex: none; width: 24px; text-align: center; font-size: 1.05rem; }
.pl-op em { display: block; font-style: normal; font-size: .76rem;
            color: var(--tinta-clara); margin-top: 1px; }
.pl-op-risco { color: #a3372c; }
.pl-op-cancelar { justify-content: center; color: var(--tinta-fraca); font-weight: 650;
                  background: var(--papel); margin-top: 4px; }
.pl-aviso { margin: 0; padding: 4px 18px 6px; font-size: .88rem; line-height: 1.5;
            color: var(--tinta-fraca); }
.pl-opcoes-linha { grid-template-columns: 1fr 1fr; gap: 10px; padding: 10px 14px 14px; }
.pl-bt {
  appearance: none; cursor: pointer; font: inherit; font-weight: 700; font-size: .95rem;
  min-height: 48px; border-radius: 14px; border: 0;
}
.pl-bt-sec { background: var(--papel); color: var(--tinta-fraca); }
.pl-bt-risco { background: #a3372c; color: #fff; }
.pl-bt:focus-visible { outline: 2px solid var(--acento); outline-offset: 2px; }

/* --------------------------------------------------------------------
   6. AVALIE O GUI — as estrelas primeiro (§25, §26) */
.av-estrelas { border: 0; margin: 0 0 4px; padding: 0; }
.av-estrelas legend {
  padding: 0; margin: 0 0 8px; font-size: .95rem; font-weight: 650; color: var(--tinta);
}
.av-est-linha { display: flex; gap: 6px; }
/* ALVO GRANDE DE PROPÓSITO (§26: «a interação deve ser clara em mobile»).
   48px é o que permite acertar a quarta estrela com o polegar sem mirar. */
.av-est {
  appearance: none; cursor: pointer; font: inherit; line-height: 1;
  width: 48px; height: 48px; border-radius: 13px;
  border: 1px solid var(--linha); background: var(--papel-2);
  color: var(--tinta-clara); font-size: 1.5rem;
  display: grid; place-items: center;
}
.av-est.on { color: #e0a32b; border-color: #e7c98a; background: #fdf8ec; }
.av-est:focus-visible { outline: 2px solid var(--acento); outline-offset: 2px; }
.av-est-nota { margin: 8px 0 0; font-size: .8rem; color: var(--tinta-fraca); }
.av-comentario textarea { min-height: 132px; }
.av-nota-dada { margin: 2px 0 6px; font-size: .9rem; color: #e0a32b; letter-spacing: .06em; }

/* --------------------------------------------------------------------
   7. DADOS DA VIAGEM — destino e datas (§49 a §52) */
/* §52: o cartão tinha `--papel-2` sobre um fundo `--papel` quase igual, e no
   iPhone os dois se confundiam. O contorno ganha corpo e a sombra separa a
   superfície do fundo — sem inventar linguagem nova: são o mesmo branco, o
   mesmo raio e a mesma sombra dos cartões da Home B. */
.viagem-dados .vg-dest {
  padding: 12px 13px; border-radius: 18px; margin-bottom: 10px;
  border: 1px solid var(--linha);
  box-shadow: 0 2px 10px rgba(24, 16, 28, .05);
}
.viagem-dados .vg-estrutural { background: var(--papel-2); opacity: .86; }
.viagem-dados .vg-dest-topo { margin-bottom: 8px; align-items: center; }
.viagem-dados .vg-dest-nome strong { font-size: 1.08rem; }
.viagem-dados .vg-dest-apoio:empty { display: none; }
.viagem-dados .vg-dest-apoio { margin-top: 3px; }
.viagem-dados .vg-icone { width: 34px; height: 34px; }
/* O PERÍODO NUMA LINHA SÓ (§51): «11 out → 16 out · 5 noites». */
.viagem-dados .vg-periodo-bt {
  display: flex; align-items: baseline; gap: 10px; width: 100%;
  padding: 9px 12px; border-radius: 12px; min-height: 44px;
}
.vg-p-datas { display: inline-flex; align-items: baseline; gap: 8px; }
.vg-p-datas strong { font-size: 1rem; font-weight: 700; }
.viagem-dados .vg-p-seta { opacity: .55; }
.viagem-dados .vg-p-noites { margin-left: auto; font-size: .78rem; color: var(--tinta-clara); }
.viagem-dados .vg-atividades {
  margin-top: 8px; min-height: 44px; padding: 9px 12px;
}
.viagem-dados .vg-atividades em { display: none; }


/* --------------------------------------------------------------------
   8. FAVORITOS E VISITADOS — UMA LISTA SÓ (§44 a §50) */
.ex-linha {
  display: flex; align-items: center; gap: 10px;
  padding: 10px 12px; background: var(--papel-2);
  border: 1px solid var(--linha); border-radius: 14px; margin-bottom: 8px;
}
.ex-linha .ex-item {
  flex: 1 1 auto; min-width: 0; appearance: none; border: 0; background: none;
  padding: 0; font: inherit; text-align: left; cursor: pointer; color: inherit;
  display: block; min-height: 40px;
}
.ex-linha .ex-item strong { display: block; font-size: .96rem; font-weight: 650;
                            line-height: 1.25; }
.ex-linha .ex-item span { display: block; font-size: .78rem; color: var(--tinta-clara);
                          margin-top: 2px; }
.ex-linha .ex-marcas { flex: 0 0 auto; display: flex; flex-direction: row; gap: 6px; }
.ex-linha .ex-mk {
  appearance: none; cursor: pointer; font: inherit;
  width: 40px; height: 40px; border-radius: 50%;
  border: 1px solid var(--linha); background: var(--papel);
  color: var(--tinta-clara); font-size: 1.02rem;
}
.ex-linha .ex-mk.on { border-color: var(--acento); color: var(--acento);
                      background: rgba(123, 79, 176, .1); }
.ex-linha .ex-mk:focus-visible { outline: 2px solid var(--acento); outline-offset: 2px; }

/* --------------------------------------------------------------------
   9. PLAYER — roteiro do dia e lista da região (§22 a §34)

   A FAIXA DE TRANSPORTE GANHOU DUAS PONTAS. No meio continuam os três
   controles de áudio, do mesmo tamanho de antes; nas pontas, dois chevrons
   que trocam a ATIVIDADE. A diferença de tamanho e de moldura é o que o §29
   e o §30 pedem: eles não podem parecer controle de segundos. */
/* --------------------------------------------------------------------
   2. O PLAYER — três níveis de hierarquia, e não um (§4, §5, §6, §25)

   A ORDEM É A DO §5, e ela conta uma história da esquerda para a direita:

       [ ⏮ atividade ]  [ ↺15 ]  [ ▶ PLAY ]  [ ↻15 ]  [ atividade ⏭ ]
         navegação      ajuste    execução    ajuste     navegação
          macro        temporal              temporal      macro

   E TRÊS TAMANHOS, porque são três pesos de decisão:

       Play/Pause          56px   roxo preenchido — o foco
       atividade ⏮ ⏭       48px   círculo claro, ícone de track
       ±15s                40px   círculo contornado, discreto

   A versão anterior invertia os dois últimos: o skip de atividade era o menor
   elemento da faixa, e o de segundos, o maior. Quem estava caminhando com o
   telefone na mão via primeiro o controle menos importante. */
.pa-transporte { position: relative; gap: 12px; }

.pa-bt-ativ {
  appearance: none; cursor: pointer; font: inherit;
  width: 48px; height: 48px; border-radius: 50%;
  display: grid; place-items: center; padding: 0;
  border: 0; background: rgba(123, 79, 176, .1); color: var(--acento);
}
.pa-ativ-ic { display: grid; place-items: center; line-height: 0; }
.pa-ativ-ic svg { display: block; }
.pa-bt-ativ[disabled] {
  background: var(--papel); color: var(--tinta-clara); opacity: .5; cursor: default;
}
.pa-bt-ativ:not([disabled]):active { background: rgba(123, 79, 176, .22); }
.pa-bt-ativ:focus-visible { outline: 2px solid var(--acento); outline-offset: 2px; }

/* O ±15 GANHA A MOLDURA CIRCULAR QUE FALTAVA (§25). Ele era um glifo solto,
   de linguagem diferente da do Play; agora é um botão de verdade — círculo,
   contorno fino, e o «15» integrado ao desenho. Menor que o de atividade,
   porque ajustar segundos é a decisão mais barata da faixa. */
.pa-bt-salto {
  width: 40px; height: 40px; border-radius: 50%;
  border: 1px solid var(--linha); background: var(--papel-2);
  color: var(--tinta-fraca);
}
.pa-bt-salto .pa-ic { font-size: 1.16rem; }
.pa-bt-salto .pa-salto { font-size: .5rem; top: 54%; }
.pa-bt-salto:active { background: var(--papel); }

/* «VER ATIVIDADES» É AÇÃO SECUNDÁRIA (§26, §27). A cápsula contornada
   competia com a faixa de velocidades e desequilibrava o rodapé; agora é um
   link com ícone, alinhado à direita, sem moldura. */
.pa-rodape { justify-content: space-between; }
.pa-lista {
  appearance: none; cursor: pointer; font: inherit;
  font-size: .76rem; font-weight: 650; white-space: nowrap;
  min-height: 36px; display: inline-flex; align-items: center; gap: 5px;
  padding: 6px 4px 6px 8px; border: 0; border-radius: 10px;
  background: transparent; color: var(--acento);
}
.pa-lista-ic { font-size: .82rem; line-height: 1; }
.pa-lista:active { background: rgba(123, 79, 176, .1); }
.pa-lista:focus-visible { outline: 2px solid var(--acento); outline-offset: 2px; }

/* Em 320px os cinco controles pedem 232px de botão; o player tem 264px úteis.
   O `gap` cede antes de qualquer botão encolher — a hierarquia é o que não
   pode ser negociada. */
@media (max-width: 359px) {
  .pa-transporte { gap: 7px; }
  .pa-bt-ativ { width: 44px; height: 44px; }
}
@media (max-width: 400px) {
  .pa-rodape { flex-wrap: wrap; row-gap: 8px; justify-content: center; }
}


/* ====================================================================
   REFINAMENTO FINAL PÓS-GATE — o segundo Gate físico
   ====================================================================
   Player, Meu dia compacto, exclusão protegida, painel de atividades,
   Diário, tutorial e contexto editorial dos mapas. */

/* --------------------------------------------------------------------
   1. O PAINEL DE ATIVIDADES DA REGIÃO — §20 a §24

   Bottom sheet: ele sobe do rodapé, cobre no máximo 78 % da altura e deixa
   a Activity Detail visível por cima do véu. É a forma que diz «isto está
   POR CIMA do que você estava vendo», e não «isto substituiu». */
.pl-ativ { position: fixed; inset: 0; z-index: 60; display: flex; align-items: flex-end; }
.pl-ativ[hidden] { display: none; }
.pl-veu { position: absolute; inset: 0; background: rgba(20, 14, 32, .46); }
.pl-folha {
  position: relative; width: 100%; max-height: 78vh;
  display: flex; flex-direction: column;
  background: var(--papel-2); border-radius: 20px 20px 0 0;
  box-shadow: 0 -10px 34px rgba(24, 16, 28, .26);
  padding-bottom: var(--seguro-b);
  animation: pl-sobe .18s ease-out;
}
@keyframes pl-sobe { from { transform: translateY(14px); opacity: .6; } }
@media (prefers-reduced-motion: reduce) { .pl-folha { animation: none; } }
.pl-cab {
  display: flex; align-items: center; gap: 12px;
  padding: 16px 16px 12px; border-bottom: 1px solid var(--linha);
}
.pl-tit { flex: 1 1 auto; min-width: 0; }
.pl-tit strong { display: block; font-size: 1.05rem; letter-spacing: -.015em; }
.pl-tit span { display: block; font-size: .78rem; color: var(--tinta-clara); margin-top: 2px; }
.pl-fechar {
  flex: none; appearance: none; cursor: pointer; font: inherit;
  width: 40px; height: 40px; border-radius: 50%;
  border: 1px solid var(--linha); background: var(--papel);
  color: var(--tinta-fraca); font-size: 1rem;
}
.pl-fechar:focus-visible { outline: 2px solid var(--acento); outline-offset: 2px; }
.pl-lista { list-style: none; margin: 0; padding: 6px 8px 12px; overflow-y: auto; }
.pl-item {
  width: 100%; appearance: none; border: 0; background: none; cursor: pointer;
  font: inherit; color: inherit; text-align: left;
  display: flex; align-items: center; gap: 11px;
  padding: 11px 10px; border-radius: 13px; min-height: 56px;
}
.pl-item:active { background: var(--papel); }
.pl-item-tx { flex: 1 1 auto; min-width: 0; }
.pl-item-tx strong { display: block; font-size: .94rem; font-weight: 600; line-height: 1.25; }
.pl-item-tx span { display: block; font-size: .76rem; color: var(--tinta-clara); margin-top: 1px; }
.pl-seta { flex: none; color: var(--tinta-clara); }
/* A ATUAL É MARCADA, E NÃO DESABILITADA (§22). Ela continua tocável — tocar
   nela fecha o painel, que é o que a pessoa quer dizer com «é esta mesma». */
.pl-item.atual { background: rgba(123, 79, 176, .09); }
.pl-item.atual .pl-item-tx strong { color: var(--acento); }
.pl-atual {
  flex: none; font-size: .68rem; font-weight: 700; letter-spacing: .06em;
  text-transform: uppercase; color: var(--acento);
  background: rgba(123, 79, 176, .14); border-radius: 999px; padding: 4px 9px;
}
.pl-item:focus-visible { outline: 2px solid var(--acento); outline-offset: -2px; }
body.com-painel { overflow: hidden; }
@media (min-width: 720px) {
  .pl-ativ { align-items: center; justify-content: center; }
  .pl-folha { max-width: 520px; border-radius: 20px; max-height: 70vh; }
}

/* ====================================================================
   CONTEXTO EDITORIAL DAS TELAS DE MAPA — §46 a §54
   ====================================================================

   A faixa que responde «por que este lugar merece um guia?» antes do primeiro
   toque no mapa. Ela tem um orçamento de altura declarado e pequeno: a
   miniatura de 44px define o piso, o resumo é cortado em DUAS linhas por
   `line-clamp`, e nada aqui cresce com o texto. Um resumo mais longo no acervo
   empurraria o mapa para fora da dobra — e o §54 diz que o mapa continua
   prioritário, o que só é verdade se estiver escrito em algum lugar que o
   navegador obedeça. */
.mapa-ctx { padding: 10px 16px 0; }

.mc-bloco {
  display: flex;
  align-items: center;
  gap: 10px;
}

/* A miniatura é quadrada e pequena: ela é uma âncora visual do destino, não
   uma segunda capa. `flex: 0 0 auto` para que o texto ceda largura primeiro. */
.mc-mini {
  flex: 0 0 auto;
  width: 44px;
  height: 44px;
  border-radius: 10px;
  object-fit: cover;
  background: var(--papel-2);
}

/* O pino da região ocupa o lugar da miniatura e herda o desenho que ele já tem
   no mapa e na lista — mesma forma, mesma cor, mesmo número. */
.mapa-ctx .pin { flex: 0 0 auto; }

.mc-tx { min-width: 0; }

.mc-resumo {
  margin: 0;
  font-size: 12.5px;
  line-height: 1.35;
  color: var(--tinta-fraca);
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 2;
  line-clamp: 2;
  overflow: hidden;
}
