Criar uma tela de PDV para o sistema de vendas com duas variacoes de uso.

Variacao principal: supermercado, baseada nas imagens do prompt original:

- Tela inicial com indicador de quantidade, area de digitacao/pesquisa de produto e acoes de sair, opcoes e pagar.
- Uso completo por teclado.
- Tudo que for digitado deve ir para a pesquisa de produtos.
- Enter pesquisa o produto.
- Se houver apenas um resultado, adicionar automaticamente.
- Se houver mais de um resultado, exibir lista para selecao.
- Ao selecionar um produto, exibir dialog de quantidade.
- Adicionar modo de quantidade aplicada com atalho CTRL + Q.
- Quando o modo de quantidade aplicada estiver ativo, usar o indicador de quantidade ao adicionar o produto e resetar o indicador para 1 apos a inclusao.

Pagamento:

- Abrir tela de pagamento quando houver produto na venda.
- Exibir botoes das formas de pagamento cadastradas com `mostrar_pdv = S`.
- Permitir mais de uma forma de pagamento.
- Informar valor pago por forma de pagamento.
- Calcular total da venda, total pago, falta pagar e troco.
- Permitir desconto por valor fixo ou percentual.
- Ao preencher percentual, calcular valor fixo.
- Ao preencher valor fixo, calcular percentual.
- Nao implementar informacoes fiscais da imagem.

Banco:

- Criar tabelas necessarias para vendas, itens e pagamentos.
- Reaproveitar cadastros existentes de produtos e formas de pagamento.
- Registrar SQL em `back/Database/`.

Complemento de layout:

- O PDV deve ocupar 100% da tela.
- Header, Sidebar e Footer devem ficar ocultos no PDV.
- A tela nao deve ter scroll global.
- O unico scroll da tela deve ficar na area de itens da venda.
- A variacao nao deve ser escolhida por botoes dentro da tela.
- A variacao deve ser controlada por rota:
  - `/pdv/1` para Supermercado.
  - `/pdv/2` para Balcao.

Complemento de teclado:

- A area de pesquisa do PDV nao deve ser um input HTML real.
- Deve ser um elemento visual que simula input.
- A pesquisa deve ser preenchida pelo handler global de teclado: toda tecla que nao for uma acao/atalho deve ser adicionada ao buffer exibido nessa area.
- Quando houver itens adicionados a venda, `ArrowUp` e `ArrowDown` devem navegar entre os itens.
- Quando houver item selecionado, `ArrowLeft` e `ArrowRight` devem diminuir/aumentar a quantidade.
- A tecla `Delete` deve remover o item selecionado da venda.
- `ArrowLeft` nao deve reduzir a quantidade abaixo de 1. A remocao deve acontecer apenas por `Delete` ou acao explicita de lixeira.
- No dialog de quantidade, as setas devem alterar apenas a quantidade pendente do dialog.
- Enquanto qualquer dialog estiver aberto, as interacoes de teclado nao devem afetar pesquisa ou itens da venda por tras.
- O dialog de quantidade deve exibir um card de previa do produto selecionado, com imagem, nome, codigo, unidade, estoque e preco.
- Imagens de referencia servem apenas como base de layout/fluxo. As cores devem seguir o padrao do sistema, usando tokens como `var(--primary)` e `var(--primary-hover)`.
- Nas listagens e previas do PDV, quando o produto tiver imagem, exibir a imagem do produto. Quando nao tiver, usar `front/src/assets/images/no_logo.png`.

Complemento de pagamento:

- O valor pago nao deve mais ser digitado diretamente no dialog principal de pagamento.
- Ao escolher uma forma de pagamento, fechar momentaneamente o dialog de pagamento e abrir um dialog separado para informar o valor.
- O dialog de valor deve usar uma area visual que simula um input, nao um input HTML.
- A digitacao pelo teclado deve preencher o valor apenas quando a tecla for numerica.
- O valor exibido deve estar sempre formatado como moeda.
- As setas devem aumentar ou diminuir o valor.
- Ao confirmar o valor, fechar o dialog de valor e voltar ao dialog de pagamento exibindo o pagamento informado.
- No dialog principal de pagamento, as setas devem navegar entre os pagamentos ja adicionados.
- No dialog principal de pagamento, a tecla `Delete` deve remover a forma de pagamento selecionada.
