/* ===================================================================
   A casca: a barra lateral (o nav vinho em coluna) e a barra de cima (o
   caminho da página e a busca). Depende SÓ de tokens.css.

   Arquivo próprio, e não um trecho do estilo.css, por causa do fiscal. Ele
   carrega só os tokens porque o estilo.css colide com os componentes dele —
   o `.nota` de lá é a linha da nota fiscal, e o daqui (max-width:78ch, fonte
   de nota de rodapé) a esmagaria; o mesmo vale para `.cartao`, `.conteudo`,
   `.marca` e para as regras de `button` e `input`. Com a barra dentro do
   estilo.css, adotá-la no fiscal seria reescrever as doze telas dele.

   Daí as duas regras deste arquivo, e há teste para as duas:
     - todo seletor mora debaixo de `.lateral`, `.lateral-*` ou `.casca-*`.
       Carregar esta folha num app não pode mudar nada fora da casca;
     - nenhuma cor à mão. Sobre o vinho, o texto usa os `--texto-nav*` e o
       ativo usa o `--fundo-nav-on`, que são hex compostos sobre
       `--escuro-de` e medidos em test_contraste.py; o alfa que sobra é o dos
       `--claro-*` em LINHA (hairline, borda de campo), que é como o `.topo`
       já fazia.

   A barra de cima mora aqui, e não no estilo.css, pelo mesmo motivo da
   lateral: o fiscal não carrega o estilo.css, e a barra de cima é da casca,
   não de uma tela.

   O avatar e o Sair que aparecem aqui são os mesmos do `.topo`, com as
   mesmas classes (`.avatar`, `.botao-sair`), redeclarados DENTRO da barra:
   quem só carrega tokens + lateral (o fiscal) precisa deles desenhados, e a
   marcação continua igual à do topo, para quem migra colar sem traduzir.

   Uso (o HTML completo está no fim deste arquivo):

     <div class="casca-lateral">
       <header class="lateral"> marca · menu(busca, nav, pé) </header>
       <div class="lateral-miolo">
         [<div class="casca-topo"> caminho · busca </div>]
         <main class="conteudo">…</main>
       </div>
     </div>
   =================================================================== */

/* ---------- a casca de duas colunas ----------
   A barra tem largura fixa e o miolo fica com o resto. `minmax(0,1fr)` e não
   `1fr`: com `1fr` a coluna não encolhe abaixo do conteúdo dela, e uma tabela
   larga empurraria a página para o lado em vez de rolar dentro do cartão.

   Quem rola é o DOCUMENTO, e a barra fica parada por `sticky`. A alternativa
   (o miolo com `overflow:auto` e a página travada) parece igual e não é:
   PageDown e espaço não rolam uma caixa interna antes de alguém clicar
   nela, o `position:sticky` de dentro das telas (a coluna de ação do pedido
   no RH) passa a grudar na caixa e não na janela, e o Voltar do navegador
   não devolve a posição. */
.casca-lateral{display:grid;grid-template-columns:232px minmax(0,1fr);
      min-height:100vh;flex:1 0 auto}
/* O miolo é coluna flexível para o rodapé descer até o pé da janela (o
   `.conteudo` cresce, como no body do estilo.css). Daí o `width:100%` nos
   filhos: em coluna flexível, margem automática ANULA o esticar, e o
   `.conteudo` do fiscal (`max-width:1680px;margin:0 auto`) encolhia até a
   largura do próprio texto. */
.lateral-miolo{min-width:0;display:flex;flex-direction:column}
.lateral-miolo>*{width:100%}

/* `<header>` e não `<aside>`: aside é o marco de "conteúdo acessório" para o
   leitor de tela, e isto é o cabeçalho do site em pé — o mesmo marco que o
   `.topo` era, e é onde quem usa leitor procura o menu. */
.lateral{position:sticky;top:0;align-self:start;z-index:30;
      height:100vh;height:100dvh;
      display:flex;flex-direction:column;
      background:var(--escuro-de);color:var(--texto-nav);
      font:400 14px/1.5 var(--corpo)}
.lateral svg{width:18px;height:18px;flex:none;fill:none;stroke:currentColor;
      stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}

/* ---------- marca ----------
   O segundo termo é o nome do produto na ferramenta (`.produto`) e a sigla
   no portal (`.bpo`), como no topo. */
.lateral-topo{flex:none;display:flex;align-items:center;
      justify-content:space-between;gap:12px;
      padding:24px 24px 20px;border-bottom:1px solid var(--hairline-claro)}
.lateral-marca{display:flex;align-items:baseline;gap:8px;min-width:0;
      text-decoration:none}
.lateral-marca .ecovis{font:600 18px/1 var(--corpo);letter-spacing:.02em;
      color:var(--branco)}
.lateral-marca .produto{font:600 14px/1 var(--titulo);color:var(--texto-nav);
      white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.lateral-marca .bpo{font:400 12px/1 var(--corpo);letter-spacing:.34em;
      color:var(--texto-nav)}

/* O botão de menu só existe no estreito (lá embaixo). */
.lateral-botao{display:none}

/* ---------- o menu: busca, nav e pé ----------
   No largo ele é só a parte de baixo da coluna. No estreito ele é um
   `popover` — abre por cima da página, fecha com Esc e com clique fora, e
   devolve o foco ao botão, sem uma linha de JavaScript (ver o fim).

   As primeiras declarações desfazem o desenho que o navegador dá a todo
   `[popover]` (fixo e centrado na tela, com borda e fundo de sistema): aqui
   ele está fechado e mesmo assim à vista, no fluxo da coluna. */
.lateral-menu{position:static;inset:auto;width:auto;height:auto;margin:0;
      border:0;padding:0;overflow:visible;color:inherit;background:none;
      flex:1;min-height:0;display:flex;flex-direction:column}

/* ---------- busca ----------
   Logo abaixo da marca (o fiscal procura nota por número e prestador).
   O seletor é comprido de propósito: as regras de `input[type=search]` do
   fiscal e do estilo.css (caixa clara de 42px, anel vermelho a 12%, que no
   escuro some) precisam perder aqui, inclusive no :hover e no :focus. */
.lateral-busca{flex:none;margin:0;padding:16px 16px 2px}
.lateral .lateral-busca input[type=search]{width:100%;height:38px;
      padding:0 12px;font:400 13.5px var(--corpo);color:var(--texto-nav-on);
      background:transparent;border:1px solid var(--claro-50);
      border-radius:var(--raio-campo);box-shadow:none;outline:none}
.lateral .lateral-busca input[type=search]:hover{border-color:var(--claro-62)}
/* o rosé é o foco de campo sobre o escuro, desde o hero da Central */
.lateral .lateral-busca input[type=search]:focus{border-color:var(--rose);
      box-shadow:0 0 0 1px var(--rose)}
.lateral .lateral-busca input::placeholder{color:var(--texto-nav-fraco)}
/* o "x" nativo do campo de busca sai azul do navegador, fora da paleta e
   sem contraste no escuro; Esc limpa o campo do mesmo jeito */
.lateral .lateral-busca input::-webkit-search-cancel-button{
      -webkit-appearance:none;appearance:none}

/* ---------- nav ----------
   Só a lista rola quando a janela é baixa: a marca fica em cima e o pé
   (a pessoa, o sino, o Sair) fica à vista embaixo. */
.lateral-nav{flex:1;min-height:0;overflow-y:auto;padding:6px 14px 18px;
      scrollbar-width:thin;scrollbar-color:var(--claro-35) transparent}
.lateral-grupo{display:flex;flex-direction:column;gap:2px}
/* Rótulo de grupo: o "Rótulo" da especificação (Mono 500, 11px, 0.14em,
   caixa alta) a 60%, que é o `--texto-nav-fraco` — o único tom do vinho mais
   apagado que o item, e mesmo assim medido acima de 4.5:1. */
.lateral-rotulo{display:block;padding:16px 10px 6px;
      font:500 11px/1.2 var(--mono);letter-spacing:.14em;
      text-transform:uppercase;color:var(--texto-nav-fraco)}

/* O item: 14px, 400, branco a 85% (`--texto-nav`), canto de 6px.

   O ativo é marcado pelo ATRIBUTO, e não por uma classe: estilo preso ao
   `aria-current` não tem como aparecer na tela sem o leitor de tela saber
   dele. Desde 2026-10 ele é o FUNDO (branco a 14%, `--fundo-nav-on`) e o
   peso 600; o traço vermelho à esquerda saiu, porque vermelho sobre vinho
   não se distingue, e dois sinais para o mesmo estado é um a mais. */
.lateral-nav a,.lateral-link{display:flex;align-items:center;gap:11px;
      padding:9px 10px;border-radius:var(--raio);
      font:400 14px/1.3 var(--corpo);color:var(--texto-nav);
      text-decoration:none;transition:color .15s,background-color .15s}
/* O hover muda a cor e só: o fundo é a marca do ATIVO, e o mesmo fundo no
   hover faria o item sob o cursor parecer a página em que se está. */
.lateral-nav a:hover,.lateral-link:hover{color:var(--texto-nav-on)}
.lateral-nav a[aria-current="page"]{color:var(--texto-nav-on);font-weight:600;
      background:var(--fundo-nav-on)}

/* contagem: o que espera por esta pessoa. Vermelho porque é chamado à ação
   (como no sino), e não estado de dado. */
.lateral-conta{margin-left:auto;min-width:20px;padding:1px 7px;
      border-radius:var(--raio-pill);background:var(--vermelho);
      color:var(--branco);font:500 11px/16px var(--mono);text-align:center;
      font-style:normal}

/* ---------- pé ----------
   Tudo opcional, na ordem: o link para fora (portal, ou a outra
   ferramenta), a pessoa com o sino, o Sair. `position:relative` porque é
   contra o pé que o painel do sino se posiciona — o pé não rola, e a nav,
   que rola, cortaria um painel aberto de dentro dela. */
.lateral-pe{flex:none;position:relative;display:flex;flex-direction:column;
      gap:8px;padding:12px 14px 18px;border-top:1px solid var(--hairline-claro)}
.lateral-pe form{margin:0}
.lateral-link{font-size:13.5px}

.lateral-eu{display:flex;align-items:center;gap:6px;min-width:0;
      padding:2px 0 2px 12px}
/* `.lateral-quem` é <a> no portal (leva a /conta) e <span> nas ferramentas */
.lateral-quem{display:flex;align-items:center;gap:10px;flex:1;min-width:0;
      color:inherit;text-decoration:none}
.lateral-nome{display:flex;flex-direction:column;min-width:0}
.lateral-nome b{font:600 13.5px/1.3 var(--corpo);color:var(--texto-nav-on);
      white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.lateral-nome small{font:400 12px/1.3 var(--corpo);
      color:var(--texto-nav-fraco)}
a.lateral-quem:hover b{text-decoration:underline}

/* o mesmo `.avatar` do topo: vermelho cheio e inicial branca no escuro, e a
   foto, quando há, ocupando o círculo */
.lateral .avatar{width:32px;height:32px;flex:none;border-radius:50%;
      background:var(--vermelho);color:var(--branco);display:grid;
      place-items:center;font:600 12.5px var(--corpo);overflow:hidden}
.lateral .avatar img{width:100%;height:100%;object-fit:cover;display:block}

/* Botão de ícone no escuro: o sino, hoje. Serve num <summary> (o sino é um
   <details>) e num <button>; por isso apaga o marcador do summary.

   O `.lateral` na frente não é enfeite. O sino do RH chegou à barra com o
   desenho dele (`.sino>summary`: tinta `--texto2`, que no escuro não passa
   de 3:1, e hover de fundo BRANCO), e esse seletor pesa mais que uma classe
   sozinha. Com o prefixo, pôr a classe no summary basta — não depende de
   alguém lembrar de apagar a regra antiga do app. */
.lateral .lateral-icone{position:relative;flex:none;display:grid;
      place-items:center;width:36px;height:36px;padding:0;border:0;
      border-radius:var(--raio);background:none;color:var(--texto-nav);
      cursor:pointer;
      list-style:none;transition:color .15s}
.lateral .lateral-icone::-webkit-details-marker{display:none}
.lateral .lateral-icone::marker{content:""}
.lateral .lateral-icone:hover,.lateral [open]>.lateral-icone{
      color:var(--texto-nav-on);background:none}
.lateral-icone .lateral-conta{position:absolute;top:1px;right:0;margin:0;
      min-width:16px;padding:0 4px;font-size:10px;line-height:16px}

/* O que abre do pé abre PARA CIMA — embaixo dele só há a borda da janela —
   e pode passar da largura da barra, por cima do miolo. É papel, não
   escuro: é conteúdo (os pedidos que esperam), não navegação.

   Quem o posiciona é o PÉ, e não o <details> em volta: o sino fica na ponta
   direita da linha da pessoa, e um painel de 330px ancorado nele sairia pela
   borda da tela no celular. Por isso o <details> do pé perde o `position` e
   o painel zera `top` e `right` — os dois que um painel de app costuma
   trazer, para abrir para baixo. */
.lateral .lateral-pe details{position:static}
.lateral .lateral-painel{position:absolute;top:auto;right:auto;left:14px;
      bottom:calc(100% + 8px);z-index:40;width:330px;
      max-width:calc(100vw - 28px);max-height:calc(100vh - 120px);
      overflow-y:auto;background:var(--papel);color:var(--texto);
      border:1px solid var(--borda);border-radius:var(--raio);
      box-shadow:var(--sombra-alta)}

/* o Sair do topo, igual */
.lateral .botao-sair{align-self:flex-start;margin-left:12px;
      font:400 12.5px var(--corpo);letter-spacing:.06em;
      color:var(--claro-78);background:none;padding:6px 16px;
      border:1px solid var(--claro-35);border-radius:var(--raio-pill);
      cursor:pointer;transition:all .15s}
.lateral .botao-sair:hover{color:var(--branco);border-color:var(--claro-62);
      background:none}

/* ---------- a barra de cima ----------
   64px, branca, com a borda de baixo: o caminho da página à esquerda e a
   busca à direita, ocupando o que sobra até 420px. É opcional por app — o
   app decide se ela aparece e o que a busca procura (o `action` e o `name`
   do formulário são dele) —, e a busca é opcional dentro dela.

   Ela é PAPEL, não vinho: a especificação separa a navegação (a coluna) do
   lugar onde se está (esta faixa). Por isso aqui vale o anel de foco do
   padrão, e não o rosé da barra lateral.

   Não é `<header>`: a barra lateral já é o `<header>` da página, e dois
   cabeçalhos de site viram dois marcos "banner" para quem usa leitor de
   tela. O caminho é `<nav aria-label>` e a busca é `role="search"`, que são
   os dois marcos que importam aqui. */
.casca-topo{flex:none;display:flex;align-items:center;gap:24px;height:64px;
      padding:0 40px;background:var(--papel);
      border-bottom:1px solid var(--borda);
      font:400 14px/1.4 var(--corpo);color:var(--texto2)}

/* O caminho: "Portal / Início", com a parte onde se está em peso maior e na
   tinta cheia. A barra entre as partes é do CSS, e não do texto, para o
   leitor de tela não ler "barra" entre cada uma.

   Ele NÃO encolhe para dar lugar à busca (`flex:none`), até a metade da
   barra: com os dois encolhendo juntos, no celular o "Início" virava
   "Iníci" ao lado de uma busca larga. Passou da metade, a última parte
   ganha reticências — e é por isso que o item é bloco e não flex: o
   `text-overflow` não vale para o texto solto dentro de um flex. */
.casca-caminho{flex:none;min-width:0;max-width:50%}
.casca-caminho ol{display:flex;align-items:center;gap:8px;min-width:0;
      margin:0;padding:0;list-style:none;white-space:nowrap}
.casca-caminho li{flex:none;min-width:0}
.casca-caminho li+li::before{content:"/";margin-right:8px;
      color:var(--texto3)}
.casca-caminho a{color:inherit;text-decoration:none}
.casca-caminho a:hover{color:var(--texto);text-decoration:underline}
.casca-caminho [aria-current="page"]{flex:0 1 auto;overflow:hidden;
      text-overflow:ellipsis;font-weight:600;color:var(--texto)}
.casca-caminho a:focus-visible{outline:2px solid var(--vermelho);
      outline-offset:2px;border-radius:var(--raio-mini)}

/* A busca: 40px, borda `--borda-input`, fundo `--fundo-busca`, canto de 6px.
   O seletor é comprido pelo mesmo motivo do da busca da lateral: as regras
   de `input[type=search]` do estilo.css e do fiscal (42px, outro fundo)
   precisam perder aqui, inclusive no :hover e no :focus. */
.casca-busca{position:relative;flex:0 1 420px;min-width:0;margin:0 0 0 auto}
.casca-topo .casca-busca input[type=search]{width:100%;height:40px;
      padding:0 12px 0 36px;font:400 14px var(--corpo);color:var(--texto);
      background:var(--fundo-busca);border:1px solid var(--borda-input);
      border-radius:var(--raio-campo);box-shadow:none;outline:none;
      transition:border-color .15s}
.casca-topo .casca-busca input[type=search]:hover{
      border-color:var(--borda-forte)}
.casca-topo .casca-busca input[type=search]:focus{
      border-color:var(--vermelho);box-shadow:var(--anel)}
/* O placeholder da especificação é a tinta a 55%, e isso dá 3.93:1 sobre o
   fundo da busca. Fica o `--texto3`, que é o text-subtle já ajustado para
   passar ali. `opacity:1` porque o Firefox apaga o placeholder sozinho. */
.casca-topo .casca-busca input::placeholder{color:var(--texto3);opacity:1}
.casca-topo .casca-busca input::-webkit-search-cancel-button{
      -webkit-appearance:none;appearance:none}
.casca-busca svg{position:absolute;left:12px;top:50%;width:16px;height:16px;
      transform:translateY(-50%);pointer-events:none;fill:none;
      stroke:var(--texto3);stroke-width:1.6;stroke-linecap:round;
      stroke-linejoin:round}
/* O atalho (⌘K no Mac, Ctrl K no resto). Nasce `hidden` e é o atalho.js que
   o mostra, com o texto da plataforma: sem o script o atalho não funciona,
   e uma dica de um atalho que não existe é uma promessa falsa. */
.casca-atalho{position:absolute;right:8px;top:50%;transform:translateY(-50%);
      padding:4px 6px;font:500 11px/1 var(--mono);color:var(--texto3);
      background:var(--papel);border:1px solid var(--divisor);
      border-radius:var(--raio-mini);pointer-events:none}
.casca-topo .casca-busca:has(.casca-atalho:not([hidden])) input[type=search]{
      padding-right:64px}

/* ---------- o seletor de ferramentas ----------
   Etapa 4 do acesso por ferramenta: o botão de grade 3×3 na ponta direita
   da barra de cima abre as ferramentas DESTA pessoa, agrupadas por setor (o
   menu de apps do Microsoft 365), para ela pular de uma para outra sem
   voltar ao portal. A lista vem do portal (`bpo_comum.catalogo.minhas`);
   com `None` o app não desenha nem o botão — fica só o link para o portal.

   Mora DENTRO da `.casca-topo`, e todo seletor daqui começa por ela: é o
   que mantém a regra de escopo deste arquivo, e `.seletor` sozinho é nome
   genérico demais para não colidir com uma tela de algum app.

   É `popover`, como o menu da lateral no estreito: Esc fecha, clique fora
   fecha, o foco volta ao botão e o estado aberto chega ao leitor de tela
   pelo próprio botão (`popovertarget`), sem uma linha de script em quatro
   apps. Sem popover no navegador, NADA aparece — nem o botão, que não
   abriria nada, nem o painel, que sem o navegador para escondê-lo cairia
   aberto no meio da barra. A diferença para o menu da lateral é de
   propósito: lá esconder tiraria a navegação da página; aqui sobra a marca
   ECOVIS, que leva ao portal, de onde se chega a tudo.

   O botão é o discreto da barra: 40px (a altura da busca ao lado), sem
   borda em repouso, a tinta de segunda linha; no hover ganha a borda e o
   fundo da busca, para os dois lerem como controles da mesma faixa.

   Ele é o ÚLTIMO item da barra. Com a busca, quem empurra os dois para a
   direita é a margem automática DELA; sem a busca (as CNDs a apagam), é a
   dele. As duas automáticas juntas dividiriam a sobra, e o botão ficaria
   solto no meio do caminho. */
.casca-topo .seletor-botao{flex:none;display:none;place-items:center;
      width:40px;height:40px;margin:0 0 0 auto;padding:0;
      border:1px solid transparent;border-radius:var(--raio);
      background:none;color:var(--texto2);cursor:pointer;
      transition:color .15s,border-color .15s,background-color .15s}
.casca-topo .casca-busca~.seletor-botao{margin-left:0}
.casca-topo .seletor-botao svg{width:20px;height:20px;fill:currentColor;
      stroke:none}
.casca-topo .seletor-botao:hover{color:var(--texto);
      background:var(--fundo-busca);border-color:var(--borda-input)}
.casca-topo .seletor-botao:focus-visible{outline:none;
      border-color:var(--vermelho);box-shadow:var(--anel)}

/* O painel. Papel com a hairline de 1px e sem sombra, como todo cartão do
   padrão; o canto é o `--raio`.

   POSIÇÃO. Aberto, o popover mora na camada de cima (top layer), e o bloco
   que o contém passa a ser a JANELA — não a barra, não o `.lateral-miolo`.
   Por isso nem `@media` nem `@container` são a régua da largura: a
   `@container` mediria o miolo, que no largo tem 232px a menos que o espaço
   onde o painel de fato abre (ele passa por cima de tudo); a régua certa é
   o próprio bloco do painel, e é a ele que o `%` do `max-width` se refere.
   Daí `min(320px, janela − 2×16px)` sem consulta nenhuma: no celular ele
   ocupa a tela menos o respiro, no largo fica em 320.

   O lugar é ANCORADO no botão (`anchor-name`, logo abaixo): 8px abaixo
   dele, com a borda direita na dele. Onde o navegador não tem âncora, vale
   a conta fixa desta regra, que é a geometria da casca: a barra tem 64px e
   o botão de 40px está centrado nela, então ele acaba em 52px e o painel
   abre em 60; a direita é o recuo da barra (40px). No estreito a barra
   desce os 56px da faixa vinho e o recuo vira 16px — e esse corte é o da
   PRÓPRIA casca (`@media` lá embaixo), que é a janela, e não o de uma tela.

   `absolute` e não `fixed`: a barra de cima não é grudada, então o painel
   tem de rolar junto com ela, e no top layer o `absolute` se mede pelo
   documento. As primeiras declarações desfazem o desenho que o navegador
   dá a todo `[popover]` (centrado, com borda e fundo de sistema). */
.casca-topo .seletor{display:none;position:absolute;inset:60px 40px auto auto;
      width:320px;max-width:calc(100% - 32px);height:auto;
      max-height:calc(100vh - 140px);max-height:calc(100dvh - 140px);
      margin:0;padding:8px;overflow-x:hidden;overflow-y:auto;
      background:var(--papel);color:var(--texto);
      border:1px solid var(--borda);border-radius:var(--raio);box-shadow:none;
      font:400 14px/1.4 var(--corpo);text-align:left;
      scrollbar-width:thin;scrollbar-color:var(--borda-forte) transparent}
@supports (anchor-name:--seletor){
  .casca-topo .seletor-botao{anchor-name:--seletor}
  .casca-topo .seletor{position-anchor:--seletor;
        top:calc(anchor(bottom) + 8px);right:anchor(right)}
}
@supports selector(:popover-open){
  .casca-topo .seletor-botao{display:grid}
  .casca-topo .seletor:popover-open{display:block}
  /* aberto, o botão fica com a borda do hover: é o mesmo aviso de "isto
     está aberto" que o botão de menu da lateral dá */
  .casca-topo:has(.seletor:popover-open) .seletor-botao{color:var(--texto);
        border-color:var(--borda-forte)}
}

/* Um setor por bloco, com o rótulo da barra lateral (Mono 500, 11px,
   0.14em, caixa alta) na tinta do papel, e a hairline de dentro do cartão
   (`--divisor`) entre um setor e o seguinte. É `<h3>` para quem navega por
   título; o desenho é o de rótulo, não o de título. */
.casca-topo .seletor-grupo{margin:0;padding:0}
.casca-topo .seletor-grupo+.seletor-grupo{margin-top:6px;padding-top:6px;
      border-top:1px solid var(--divisor)}
.casca-topo .seletor-grupo h3{margin:0;padding:10px 10px 6px;
      font:500 11px/1.2 var(--mono);letter-spacing:.14em;
      text-transform:uppercase;color:var(--texto3)}

/* A ferramenta é item de lista, como o da lateral: 14px, canto de 6px.

   O hover é o `--hover` (um fio abaixo do papel) e o ATUAL é o `--fundo` (o
   tom da página) com peso 600 — dois tons, e não um, pela mesma razão da
   lateral: o mesmo fundo no hover faria a ferramenta sob o cursor parecer a
   ferramenta em que se está. E o atual é marcado pelo ATRIBUTO, nunca por
   classe: estilo preso ao `aria-current` não aparece sem o leitor de tela
   saber dele. A regra do atual vem DEPOIS da do hover, que tem o mesmo
   peso: passar o cursor por cima dele não o apaga. */
.casca-topo .seletor a{display:flex;align-items:center;gap:10px;
      padding:9px 10px;border-radius:var(--raio);
      font:400 14px/1.3 var(--corpo);color:var(--texto);text-decoration:none;
      transition:background-color .15s}
.casca-topo .seletor a:hover{background:var(--hover)}
.casca-topo .seletor a[aria-current="page"]{font-weight:600;
      background:var(--fundo)}
.casca-topo .seletor a:focus-visible{outline:2px solid var(--vermelho);
      outline-offset:-2px}

/* "Nenhuma outra ferramenta": a pessoa só abre a ferramenta em que está.
   É frase, não aviso — a tinta de segunda linha, sem cor de estado. */
.casca-topo .seletor-vazio{margin:0;padding:10px;
      font:400 13.5px/1.5 var(--corpo);color:var(--texto2)}

/* ---------- foco ----------
   O anel do padrão (`--anel`, vermelho a 12%) foi feito para o papel e no
   escuro não aparece. Aqui o foco é o contorno rosé, por dentro da caixa —
   por fora, a nav que rola cortaria o contorno do item. */
.lateral a:focus-visible,.lateral button:focus-visible,
.lateral summary:focus-visible{outline:2px solid var(--rose);
      outline-offset:-2px}
.lateral .lateral-painel a:focus-visible{outline-color:var(--vermelho)}

/* ---------- estreito: a faixa no alto e o menu por cima ----------
   Abaixo de 860px a coluna vira uma faixa escura de 56px com a marca e o
   botão de menu, e o menu abre como gaveta pela esquerda, por cima do
   conteúdo e abaixo da faixa — o botão continua à vista para fechar.

   É o `popover` do HTML que faz o trabalho: Esc fecha, clique fora fecha, o
   foco volta ao botão e o estado aberto/fechado chega ao leitor de tela pelo
   próprio botão (`popovertarget`). Sem script, e portanto sem nada a manter
   em quatro apps.

   O `@supports` é o que torna isto seguro: num navegador sem popover o menu
   NÃO se esconde — ele aparece inteiro debaixo da faixa, no fluxo, e a
   página continua navegável. Esconder primeiro e depender do popover para
   mostrar deixaria esse navegador sem menu nenhum. */
@media (max-width:860px){
  .casca-lateral{display:block}
  /* A barra de cima continua no celular, abaixo da faixa vinho, com o recuo
     de 16px. O atalho sai: quem está no estreito quase nunca tem teclado, e
     sem ele a busca ganha a largura. O caminho fica só com a parte final. */
  .casca-topo{gap:12px;padding:0 16px}
  .casca-topo .casca-atalho{display:none}
  /* o MESMO seletor de cima, e não um mais curto: o de cima pesa mais, e
     só a ordem no arquivo o desfaz */
  .casca-topo .casca-busca:has(.casca-atalho:not([hidden])) input[type=search]{
        padding-right:12px}
  /* O seletor SEM âncora: a barra de cima desceu os 56px da faixa vinho
     (56 + 60 = 116) e o recuo dela é 16px. Só sem âncora — com ela o lugar
     vem do botão, e esta regra, que vem depois no arquivo, o desfaria. */
  @supports not (anchor-name:--seletor){
    .casca-topo .seletor{inset:116px 16px auto auto}
  }
  .lateral{position:relative;height:auto;display:block}
  .lateral-topo{height:56px;padding:0 6px 0 18px}
  .lateral-marca .ecovis{font-size:17px}
  .lateral-botao{width:44px;height:44px;place-items:center;padding:0;
        border:1px solid transparent;border-radius:var(--raio);
        background:none;color:var(--texto-nav-on);cursor:pointer}
  .lateral-botao svg{width:22px;height:22px}
  .lateral-botao:hover{background:none;border-color:var(--claro-35)}
  @supports selector(:popover-open){
    .lateral{position:sticky;top:0}
    .lateral-botao{display:grid}
    .lateral:has(.lateral-menu:popover-open) .lateral-botao{
          border-color:var(--claro-50)}
    .lateral-menu:not(:popover-open){display:none}
    .lateral-menu:popover-open{position:fixed;inset:56px auto 0 0;
          width:min(300px,calc(100vw - 40px));height:auto;display:flex;
          background:var(--escuro-de);
          border-top:1px solid var(--hairline-claro);
          box-shadow:var(--sombra-login)}
  }
}
@media (max-width:560px){
  .casca-caminho li:not(:last-child){display:none}
  .casca-caminho li+li::before{content:none}
}

/* ===================================================================
   O HTML, completo. Tudo o que está entre [ ] é opcional por app.

   <div class="casca-lateral">
     <header class="lateral">
       <div class="lateral-topo">
         <a class="lateral-marca" href="/"><span class="ecovis">ECOVIS</span
           ><span class="produto">Solicitações</span></a>
         <button class="lateral-botao" type="button"
                 popovertarget="lateral-menu" aria-label="Menu">
           <svg viewBox="0 0 24 24" aria-hidden="true">
             <path d="M4 7h16M4 12h16M4 17h16"/></svg></button>
       </div>
       <div class="lateral-menu" id="lateral-menu" popover>
         [<form class="lateral-busca" role="search" method="get" action="/busca">
           <input type="search" name="q" aria-label="Buscar nota"
                  placeholder="buscar nº ou prestador"></form>]
         <nav class="lateral-nav" aria-label="Solicitações">
           <div class="lateral-grupo" role="group" aria-labelledby="g-voce">
             <span class="lateral-rotulo" id="g-voce">Para você</span>
             <a href="/" aria-current="page"><svg …/>Meus pedidos</a>
             <a href="/fila"><svg …/>A decidir
               <span class="lateral-conta">3</span></a>
           </div>
         </nav>
         <div class="lateral-pe">
           [<a class="lateral-link" href="…"><svg …/>Portal BPO</a>]
           <div class="lateral-eu">
             <span class="lateral-quem">        (ou <a … href="/conta">)
               <span class="avatar">T</span>
               <span class="lateral-nome"><b>TI Ecovis</b
                 >[<small>administrador</small>]</span></span>
             [<details class="sino">
               <summary class="lateral-icone" aria-label="Avisos (2)">
                 <svg …/><span class="lateral-conta">2</span></summary>
               <div class="lateral-painel">…</div></details>]
           </div>
           <form method="post" action="/sair">
             <input type="hidden" name="_csrf" value="…">
             <button type="submit" class="botao-sair">Sair</button></form>
         </div>
       </div>
     </header>
     <div class="lateral-miolo">
       [<div class="casca-topo">
         <nav class="casca-caminho" aria-label="Você está em">
           <ol><li><a href="/">Portal</a></li
             ><li aria-current="page">Início</li></ol></nav>
         [<form class="casca-busca" role="search" method="get" action="/">
           <svg viewBox="0 0 24 24" aria-hidden="true">
             <circle cx="11" cy="11" r="6.5"/><path d="m16 16 4.5 4.5"/></svg>
           <input type="search" name="q" data-atalho="busca"
                  aria-label="Buscar ferramenta" placeholder="Buscar ferramenta">
           <kbd class="casca-atalho" hidden>Ctrl K</kbd></form>]
         [<button class="seletor-botao" type="button" popovertarget="seletor"
                  aria-label="Ferramentas">
           <svg viewBox="0 0 24 24" aria-hidden="true"><path d="M5 5h3v3H5zm5.5
             0h3v3h-3zM16 5h3v3h-3zM5 10.5h3v3H5zm5.5 0h3v3h-3zm5.5 0h3v3h-3zM5
             16h3v3H5zm5.5 0h3v3h-3zm5.5 0h3v3h-3z"/></svg></button>
         <div id="seletor" popover class="seletor">
           <section class="seletor-grupo">
             <h3>Fiscal</h3>
             <a href="https://…" aria-current="page">Serviços Tomados</a>
             <a href="https://…">CNDs</a>
           </section>
           <section class="seletor-grupo">
             <h3>RH</h3>
             <a href="https://…">Solicitações</a>
           </section>
           [<p class="seletor-vazio">Nenhuma outra ferramenta.</p>]
         </div>]
       </div>]
       <main id="conteudo" tabindex="-1" class="conteudo">…</main>
       [<footer class="rodape">…</footer>]
     </div>
   </div>
   [<script src="/comum/atalho.js?v={{ revisao }}" defer></script>]

   O atalho.js liga Ctrl+K / ⌘K ao campo com `data-atalho="busca"` e mostra
   a `.casca-atalho` do mesmo formulário. Sem o <script>, a busca funciona e
   a dica não aparece — que é o certo, porque o atalho também não existe.

   O seletor (o botão e o painel) sai de `bpo_comum.catalogo.minhas`: um
   `.seletor-grupo` por grupo, um <a> por ferramenta, com `href` = a `url`
   que o portal mandou e `aria-current="page"` na ferramenta em que se está
   (o app sabe qual é pelo `slug`). O botão é o ÚLTIMO item da barra, e o
   painel vem logo depois dele, DENTRO da `.casca-topo` — fora dela nenhuma
   regra daqui o pinta. A `.seletor-vazio` entra quando não há OUTRA
   ferramenta além da atual. Com `minhas` devolvendo `None`, nenhum dos dois
   entra: "não sei o que você abre" não é "nenhuma outra ferramenta", e a
   marca ECOVIS continua levando ao portal.
   =================================================================== */
