Contexto
O badge de dispositivos é o primeiro diagnóstico que o usuário novo vê — e é um beco sem saída. Quando não há device virtual, updateLagunaBadge() (static/app.js:311) pinta o badge de vermelho com badge.laguna_none = "⚠ Sem dispositivo virtual (instale VB-CABLE)" (static/i18n.js:145). Estado amarelo (badge.laguna_cable): "VB-CABLE detectado (renomeie para Laguna)".
O problema: o badge é um <span> inerte (static/index.html:20) — sem id de destino, sem clique, sem listener (o único uso de laguna-badge em app.js é o de pintar o texto). E a receita que resolve exatamente esses dois estados — instalar VB-CABLE, renomear "CABLE Output"→Laguna Translator Mic, "CABLE Input"→Laguna Translator Output — está no <details> fechado por padrão do rodapé (static/index.html:254-271), sem id e sem nenhum link apontando pra ele.
Resultado: o app diz ao usuário o que está errado e esconde como resolver a três rolagens de distância. Quem instalou pela primeira vez fica sem os selects de saída virtual e sem caminho óbvio a seguir. Já pagamos essa dívida de "erro visível mas não acionável" na #33 e na #26; aqui é o mesmo padrão, no ponto de entrada.
Proposta
Fazer o badge acionar o passo a passo quando o estado for amarelo ou vermelho:
<details> do rodapé ganha id (ex.: setup-guide).
- Badge vira
<button id="laguna-badge" class="badge …"> (mantendo classes/estilo atuais) — ao clicar: details.open = true, scrollIntoView({behavior:'smooth', block:'start'}) e foco no <summary>.
- O clique só é oferecido nos estados acionáveis (
laguna_cable, laguna_none) — em laguna_ok o badge fica informativo (sem role/cursor de ação). Estado devices_error já tem a instrução do 🔄 no próprio texto; não precisa abrir o guia.
- Texto do badge nos estados acionáveis ganha um sufixo curto e traduzido (ex.:
badge.laguna_none_cta = "— clique para ver como resolver"), com paridade PT/EN.
Alternativa mais barata, se o <button> complicar o layout dos badges: manter o <span> e adicionar um link/ícone → como resolver ao lado, dentro do mesmo container.
Acceptance criteria
Dica de abordagem
Só static/ — área de autonomia total (§7.3 do HANDBOOK), sem tocar em backend. O tooltip vem de data-tip-i18n (tip.laguna_badge) e o aria-label de data-aria-i18n, ambos aplicados em static/i18n.js:323-329 — trocar <span> por <button> mantém os dois se os atributos forem preservados. Cuidado com style.css: .badge provavelmente não neutraliza o estilo default de <button> (borda/fundo/fonte) — inclua o reset no seletor.
Contexto
O badge de dispositivos é o primeiro diagnóstico que o usuário novo vê — e é um beco sem saída. Quando não há device virtual,
updateLagunaBadge()(static/app.js:311) pinta o badge de vermelho combadge.laguna_none= "⚠ Sem dispositivo virtual (instale VB-CABLE)" (static/i18n.js:145). Estado amarelo (badge.laguna_cable): "VB-CABLE detectado (renomeie para Laguna)".O problema: o badge é um
<span>inerte (static/index.html:20) — semidde destino, sem clique, sem listener (o único uso delaguna-badgeemapp.jsé o de pintar o texto). E a receita que resolve exatamente esses dois estados — instalar VB-CABLE, renomear "CABLE Output"→Laguna Translator Mic, "CABLE Input"→Laguna Translator Output— está no<details>fechado por padrão do rodapé (static/index.html:254-271), semide sem nenhum link apontando pra ele.Resultado: o app diz ao usuário o que está errado e esconde como resolver a três rolagens de distância. Quem instalou pela primeira vez fica sem os selects de saída virtual e sem caminho óbvio a seguir. Já pagamos essa dívida de "erro visível mas não acionável" na #33 e na #26; aqui é o mesmo padrão, no ponto de entrada.
Proposta
Fazer o badge acionar o passo a passo quando o estado for amarelo ou vermelho:
<details>do rodapé ganhaid(ex.:setup-guide).<button id="laguna-badge" class="badge …">(mantendo classes/estilo atuais) — ao clicar:details.open = true,scrollIntoView({behavior:'smooth', block:'start'})e foco no<summary>.laguna_cable,laguna_none) — emlaguna_oko badge fica informativo (semrole/cursor de ação). Estadodevices_errorjá tem a instrução do 🔄 no próprio texto; não precisa abrir o guia.badge.laguna_none_cta= "— clique para ver como resolver"), com paridade PT/EN.Alternativa mais barata, se o
<button>complicar o layout dos badges: manter o<span>e adicionar um link/ícone→ como resolverao lado, dentro do mesmo container.Acceptance criteria
<details>do rodapé, rola até ele e move o foco pro<summary>— sem recarregar a página.laguna_ok) o badge não é anunciado como acionável (semrole="button", sem cursor de ação) e o tooltip atual continua funcionando.aria-expandedreflete o estado do<details>.tests_unit/test_i18n_parity.pyverde.node --check static/app.js static/i18n.js+ o teste de paridade.Dica de abordagem
Só
static/— área de autonomia total (§7.3 do HANDBOOK), sem tocar em backend. O tooltip vem dedata-tip-i18n(tip.laguna_badge) e oaria-labeldedata-aria-i18n, ambos aplicados em static/i18n.js:323-329 — trocar<span>por<button>mantém os dois se os atributos forem preservados. Cuidado comstyle.css:.badgeprovavelmente não neutraliza o estilo default de<button>(borda/fundo/fonte) — inclua o reset no seletor.