# A janela

> A moldura em volta de toda página: a barra de título com a tecla de ajuda, o botão de relatar, as teclas de tema e o chip de usuário, o trilho de navegação e o que mostra cada entrada, a barra de status e o feed de ações, a faixa de runtime parado, o painel de ajuda, as notificações, o diálogo de consentimento de falha, as telas que uma conexão perdida mostra, a tela cheia, o zoom do Desktop e a área de notificação.

Toda página do Ganter Lab é desenhada dentro de uma moldura: uma barra de título, um trilho de navegação à esquerda, a página em si, e uma barra de status ao longo do rodapé. A moldura é a mesma em toda página e em toda tela que olha para a estação, tanto a janela da própria estação quanto um navegador na rede (veja [Acesso remoto](remote-access)); os poucos pontos em que as duas diferem estão apontados abaixo. Ver a moldura não exige permissão nenhuma, mas várias entradas e marcas dela são desenhadas só para uma identidade que carrega a permissão correspondente, exatamente como as páginas por trás delas.

## A moldura de relance {#the-frame-at-a-glance}

| Parte | Onde | O que ela guarda |
|---|---|---|
| Barra de título | Topo | A marca, a tecla de ajuda, o botão de relatar, as três teclas de tema e o chip de usuário. Na janela da própria estação o sistema operacional desenha a moldura da janela ("Ganter Lab", com minimizar, maximizar e fechar), a barra de título web se recolhe, e a tecla de ajuda, o botão de relatar, as teclas de tema e o chip se acomodam no canto superior direito. Um navegador mantém a barra inteira, com o símbolo da marca e o nome à esquerda. Com a [marca](settings-branding) definida, a moldura diz o Nome da estação e usa o Ícone dela, e a barra mostra o Logotipo da estação no lugar do símbolo e do nome. |
| Faixa de runtime parado | Sob a barra de título | Presente só enquanto o runtime está parado (veja abaixo). |
| Trilho de navegação | Borda esquerda | Até onze entradas em dois grupos: o grupo de trabalho no topo e o grupo do pé fixado embaixo. |
| Conteúdo | Centro | A página. Uma página que falha ao desenhar se reduz a um aviso ("Algo deu errado neste painel", "O resto da tela continua funcionando. A falha foi registrada na página Eventos, em Console.", com **Tentar de novo**) enquanto a moldura continua viva; a navegação seguinte recebe uma página limpa. |
| Tarjas de notificação | Sobre o conteúdo, canto inferior direito | As notificações que interrompem, a mais nova por cima. |
| Barra de status | Rodapé | Os indicadores, com a marca de versão nova por último, o feed de ações e o relógio. |

A janela abre com no mínimo 880 por 520 pixels e lembra onde você a deixou (posição, tamanho, maximizada) entre as aberturas; veja [Primeira abertura](app-install#first-launch).

## Barra de título {#title-bar}

### A tecla de ajuda {#the-help-key}

Um ponto de interrogação à esquerda do grupo direito da barra de título, depois de um divisor fino que a separa das teclas de tema. Ela abre o painel de ajuda descrito em [Ajuda contextual](#contextual-help) e fica marcada enquanto o painel está aberto. Ela é desenhada em toda rota, para toda identidade, e também enquanto o runtime está parado.

### O botão de relatar {#the-report-button}

À direita da tecla de ajuda, o botão de relatar escreve um relato para a Ganter, um defeito, uma sugestão ou o pedido de um driver, com uma captura de tela da janela. Ele é só um ícone, do tamanho da tecla de ajuda: a dica dele traz o nome, **Relatar**, e na linha de baixo o que ele faz, e um leitor de tela o anuncia por esse nome. Uma pressão captura primeiro a janela e só então abre o formulário do relato num diálogo sobre a página, então o formulário nunca aparece na própria imagem; o formulário, o que ele envia e o que o servidor responde estão em [Sua opinião](account-feedback#the-report-button). Ele é desenhado em toda rota para uma identidade cujo papel tem Enviar relatos à Ganter, que todos os papéis têm até um administrador desligar, e não é desenhado de jeito nenhum para uma cujo papel não tem. Enquanto uma situação recusa o relato, ele continua desenhado e esmaecido, com a razão sob o nome na dica: um navegador em vez da janela da estação, uma sessão que não consegue enviar (o perfil de demonstração, ou uma entrada na conta Ganter da estação a refazer) ou uma captura já em andamento. Uma estação que não está conectada a uma conta Ganter não é recusada: o relato dela vai sem conta, e o formulário diz que a Ganter não tem como responder. A demonstração publicada não o desenha.

### Teclas de tema {#theme-keys}

Três teclas lado a lado, nesta ordem, cada uma com uma dica que a nomeia:

| Tecla | Dica | O que ela faz |
|---|---|---|
| Sistema (um glifo de monitor) | Tema: Sistema | Segue a aparência do Windows. Na janela da estação o hospedeiro a resolve e a reaplica no instante em que o Windows troca entre claro e escuro; um navegador a resolve contra a preferência clara ou escura dele. |
| Claro (um glifo de sol) | Tema: Claro | A aparência clara, diga o Windows o que disser. |
| Escuro (um glifo de lua) | Tema: Escuro | A aparência escura, diga o Windows o que disser. |

A tecla em relevo é a **escolha** em vigor, nunca a aparência em que ela resulta: Sistema continua marcada como Sistema enquanto parece Claro ou Escuro. Na janela da própria estação, pressionar uma tecla a aplica ao vivo e a salva como preferência da estação no banco de configuração, e todo navegador que não escolheu um tema seu passa a segui-la na hora. Num navegador, pressionar uma tecla muda só aquele navegador: a escolha fica guardada nele e sobrevive a recarregar a página, nada chega à estação, e daí em diante aquele navegador deixa de acompanhar o tema da estação. As teclas não pedem permissão, porque a escolha de um navegador não chega a nenhuma outra tela. [Configurações, Aparência](settings-appearance) mostra e muda os mesmos três valores, nas mesmas condições.

### O chip de usuário {#the-user-chip}

À direita das teclas de tema, depois de um divisor fino, o chip nomeia quem está autenticado **nesta tela**: **Entrar** enquanto ninguém está, o nome de exibição depois que alguém entra. O ponto no glifo de pessoa é verde enquanto há alguém autenticado e cinza no resto do tempo. O chip é sempre desenhado, em toda rota e em toda tela, porque os papéis estão sempre em vigor e não estar autenticado é uma identidade em si (o papel "Não conectado").

Pressioná-lo abre o diálogo de entrada:

- O título diz **Entrar**, ou **Trocar de usuário** quando alguém já está autenticado e a lista está à mostra. Nesse caso uma linha de cabeçalho "Conectado como *nome*" carrega um botão **Sair**.
- A lista traz todo usuário local com uma sigla de duas letras, o nome e uma marca: um cadeado para um usuário com PIN (dica "PIN obrigatório"), uma seta para um usuário sem PIN (dica "Entra com um toque"), que entra no instante em que a linha é pressionada.
- Um usuário com PIN abre o passo do PIN: a sigla e o nome do usuário, **Voltar**, o rótulo "Digite o PIN" e um teclado que aceita de 4 a 6 dígitos. A tecla de confirmação ou o Enter envia.
- Uma recusa fica no teclado, ali mesmo: "Esse PIN não está correto.", ou "PINs errados demais. Tente de novo em *n* segundos/minutos." Cinco PINs errados seguidos fecham a porta por um minuto; cada nova sequência de cinco dobra a espera, até quinze minutos.
- Sem nenhum usuário local na estação ainda, o diálogo diz isso em vez de mostrar uma lista vazia: "Esta estação ainda não tem usuários locais. O primeiro, o administrador principal, é criado na página Usuários."

Na janela da própria estação o chip muda a sessão da estação, a identidade sob a qual todo comando daquela janela roda; num navegador ele autentica aquela conexão e nada mais. De um jeito ou de outro o desfecho também aparece no feed de ações da barra de status ("Você entrou como Ana.", "Ana saiu.", "Entrada recusada. Ainda conectado como Ana."), porque quem está autenticado decide o que todo outro comando pode fazer. O fluxo inteiro está descrito em [Entrar](users-signing-in).

## Trilho de navegação {#navigation-rail}

O trilho tem 64 pixels de largura: um glifo e um rótulo por entrada, com a entrada ativa destacada. Cada entrada é desenhada só quando a identidade desta tela carrega ao menos uma das permissões listadas; as próprias páginas conferem de novo ao abrir, então o trilho só corta o que seria recusado de qualquer forma. As permissões são as chaves do editor de papéis; veja [Permissões](users-permissions).

| Entrada | Grupo | Abre | Desenhada quando |
|---|---|---|---|
| Boas-vindas | Topo | A página Boas-vindas (`/welcome`): todas as áreas do programa, explicadas uma parada de cada vez | Numa estação, só enquanto a estação mantém a página (veja [Boas-vindas](welcome)), e então qualquer uma entre Configurar Connector, Configurar a lógica, Gerenciar o Process, Editar dashboards, Gerenciar usuários locais, Gerenciar agente (MCP). A demonstração publicada sempre a desenha, para todo visitante. |
| View | Topo | A página de dashboards (`/view`; também acesa para `/`, `/home` e o endereço próprio de um dashboard, `/d/…`) | Sempre: ver dashboards nunca pode ser revogado |
| Process | Topo | O ambiente do Process, que também guarda os históricos (acesa para `/histories` também) | Qualquer uma entre Ver modelos, Executar procedimentos, Editar receitas e avaliações, Gerenciar o Process, Ver históricos |
| Logic | Topo | A página da Logic | Ver a lógica |
| Connector | Topo | A página do Connector | Ver Connector |
| Usuários | Topo | A página de usuários | Sempre, numa estação de verdade (a própria página diz a quem não é administrador que a gestão está travada). A demonstração publicada a deixa de fora. |
| Validação | Pé | A página de validação | Ver validação |
| Eventos | Pé | A página de eventos | Ver eventos |
| Agente | Pé | A página do agente | Gerenciar agente (MCP) |
| Acesso remoto | Pé | A página Acesso remoto | Ver acesso remoto |
| Configurações | Pé | A página de configurações | Alterar configurações |
| Conta | Pé | A página da conta. A única entrada desenhada com o G da marca em vez de um glifo. | Sempre, numa estação de verdade. A demonstração publicada a deixa de fora. |

Sem ninguém autenticado, quem decide é o papel "Não conectado". As permissões de fábrica dele têm tudo menos Gerenciar usuários locais e Acesso remoto (LAN), então uma estação nova desenha todas as entradas até um administrador estreitar esse papel em [Papéis](users-roles). Quando uma troca de papel remove a entrada da página em que você está, o shell leva você para a primeira entrada que ele ainda desenha.

Duas entradas carregam uma marca:

- **Validação** exibe uma pílula de atenção com o número de itens a reparar (99+ passando de noventa e nove), escondida enquanto a configuração está limpa. Ela acompanha a revarredura em segundo plano do validador, então muda conforme você edita; veja [Validação](validation).
- **Conta** exibe um ponto de exclamação só quando a licença precisa de atenção: âmbar quando a assinatura está em atraso, termina em até 14 dias, ou não tem data de término conhecida mesmo estando marcada para terminar; vermelho quando a assinatura foi cancelada, ou quando ela poderia conceder um posto e esta estação não tem nenhum. Pressionar a entrada marcada leva à seção da assinatura, e não ao topo da página; veja [Assinatura](account-subscription). Não existe um ponto neutro de "conectado".

## Barra de status {#status-bar}

A barra se lê, da esquerda para a direita: o grupo de indicadores, que termina na marca de versão nova, o feed de ações no meio elástico e, sozinho na ponta direita, o relógio. Ela se atualiza a cada segundo.

### Os indicadores {#the-indicators}

| Indicador | O que diz | Aparece quando | Clique |
|---|---|---|---|
| Contagem do modo gratuito | "Gratuito · 12:34" em contagem regressiva, "Gratuito · runtime parado" depois que ela acabou, "Gratuito" enquanto nenhum tempo restante é conhecido; o G da entrada Conta do trilho de navegação, em âmbar. Dica: "Modo gratuito: o runtime para quando o tempo acaba. Entre na sua conta ou adicione uma licença para remover o limite. Clique para abrir a Conta." | A estação não está licenciada (veja [Modo gratuito e a licença](app-free-mode)) | Conta (num dispositivo travado na sua tela inicial ele só informa) |
| Saúde | A marca do Connector no trilho de navegação, tingida pela saúde do Connector, e um texto que começa pelo Connector. O pior dispositivo: "Connector: *nome* sem comunicação" (vermelho) ou "Connector: *nome* instável" (âmbar); com todo dispositivo lendo, "Connector: conectado" (verde); "Connector: parado" (cinza) enquanto o próprio Connector não está rodando. O servidor OPC UA embutido não faz parte dela: o Connector lê os dispositivos enquanto o servidor está parado, e o estado do servidor está em [Estado](connector-opcua-server). Dica: "Saúde do Connector (clique para abrir)". | Sempre | Connector |
| Alarmes | Um sino e "Alarmes: *n* ativos (*m* não reconhecidos)", com glifo e texto tingidos pela prioridade mais severa entre eles (a mesma escala que a árvore da Logic e os eventos usam). Dica: "Alarmes (clique para abrir a lista de alarmes)". | Algum alarme está ativo ou ainda esperando reconhecimento | Eventos, Alarmes |
| Gravações | "Process: *n* gravando", "Process: *n* em pausa", ou "Process: *n* gravando · *m* em pausa"; a marca do Process no trilho de navegação, verde, âmbar enquanto alguma execução está pausada (cada execução conta uma só vez, pela sua situação: uma execução pausada não conta também como gravando; só o relógio dela para, a aquisição continua). Dica: "Gravações em andamento (clique para abrir o Process)". | Ao menos uma unidade está gravando ou pausada | Process |
| Versão nova | Um glifo de seta no tom de destaque e "Atualização disponível", ou "Atualização com correções importantes" no tom de atenção quando a versão está marcada como portadora de correções importantes. Não diz número de versão. A dica diz que uma versão nova está disponível, acrescenta se ela já foi baixada ("Ela já foi baixada e é instalada na próxima vez que o Ganter Lab reiniciar.") e termina com "Clique para abrir Configurações, Atualizações." | Uma versão mais nova espera ser adotada e não foi ignorada em [Configurações, Atualizações](settings-updates), para uma identidade que carrega Alterar configurações (um operador num tablet remoto nunca vê uma decisão que não é dele), e nunca numa compilação sem canal de atualização | Configurações, Atualizações |

Cada indicador usa a marca da área pela qual fala e suas palavras começam pelo nome dessa área, então um olhar diz qual parte da estação está bem e qual não está: as marcas do Connector e do Process são as do trilho de navegação, a contagem usa o G da entrada Conta, e os alarmes mantêm o sino, já que pressioná-los abre a lista de alarmes em Eventos, e não a Logic. As cores são as de todo ponto de estado do aplicativo: verde para saudável, âmbar para degradado ou iniciando, vermelho para em falha ou offline, cinza para neutro. O ícone da área de notificação diz a mesma saúde do Connector (abaixo).

### O feed de ações {#the-action-feed}

O meio da barra é o único lugar onde o resultado do que você acabou de fazer aparece: um salvamento, uma exclusão, uma renomeação, uma importação, uma impressão, uma varredura, um reconhecimento. Todo comando que muda estado relata os dois desfechos, quando funcionou e quando foi recusado.

- Um sucesso some sozinho depois de seis segundos. Uma falha mantém uma marca vermelha e some sozinha depois de cerca de dez segundos, a menos que antes um resultado mais novo a substitua ou você pressione o **Dispensar** (x) dela. Uma recusa sobre um dispositivo, uma linha serial ou um broker MQTT do Connector (um campo que ainda falta, ou uma edição que a estação não aceitou) também sai assim que um salvamento posterior desse mesmo dispositivo, dessa mesma linha ou desse mesmo broker passa nesta tela, porque a página então mostra exatamente o que está gravado.
- O texto é cortado com reticências contra o relógio; o texto inteiro é a dica.
- Uma entrada pode carregar **um** botão de continuação ao lado dela, por exemplo **Desfazer** depois de remover um componente de dashboard. Ele vive e morre com a entrada: a expiração da entrada, o resultado seguinte, um dispensar e o próprio toque levam o botão embora, para que a barra nunca ofereça um verbo que não responde mais pelo texto ao lado dele.
- O feed pertence à conexão: esta tela mostra os resultados do que esta tela fez, nunca o que um navegador em outro lugar fez. A janela da própria estação carrega além disso o trabalho que nenhuma tela pediu (um backup automático, um relatório gerado sozinho, uma falha do hospedeiro).
- A única exceção: um comando pressionado dentro de um componente de dashboard (um Botão, uma Chave, uma Entrada) responde sob aquele componente, a superfície que ainda existe quando um dashboard em tela cheia esconde esta barra.

As páginas nunca criam um "Salvo" piscando nem uma linha de estado própria; se você procura a resposta a um toque, ela está aqui.

### O relógio {#the-clock}

**O relógio**: a data e a hora locais nos formatos escolhidos em [Configurações, Idioma e formatos](settings-localization) (por exemplo `dd/MM/yyyy HH:mm:ss`), avançando a cada segundo. A dica diz "Configurações: Idioma e formatos", que é a seção em que esses formatos são definidos.

A barra não mostra versão nenhuma: a versão que está rodando agora aparece em [Sobre](settings-about) e sob o título de [Configurações, Atualizações](settings-updates).

### Enquanto o runtime está parado {#while-the-runtime-is-stopped}

A saúde, os alarmes e as gravações não podem ser afirmados enquanto nada está sendo lido, então o grupo de indicadores dá lugar a uma mensagem que leva a algum lugar útil: "Entre para ampliar a janela gratuita" ou "Adicione uma licença para remover o limite" (as duas abrem a página da conta), ou, sem mais nada a comprar, "Reinicie o runtime para continuar" na janela da estação e "O reinício acontece na estação, o computador que roda o Ganter Lab." num navegador. A contagem continua primeiro, à esquerda, dizendo "Gratuito · runtime parado".

## A faixa de runtime parado e a página pausada {#the-stopped-runtime-band-and-the-paused-page}

Quando a janela do modo gratuito acaba, o runtime para (veja [Modo gratuito e a licença](app-free-mode)), e o shell diz isso uma vez, do mesmo jeito em toda rota e em toda tela:

- Uma faixa sob a barra de título: **Runtime parado**, "A aquisição, a Logic e a gravação estão pausadas. Sua configuração e as execuções gravadas estão intactas.", e o único botão **Reiniciar o runtime**. O botão só existe na janela da própria estação: um navegador lê "O reinício acontece na estação, o computador que roda o Ganter Lab." no lugar dele, para que uma janela de modo gratuito nunca possa ser zerada pela rede.
- Toda página menos a da conta dá lugar a um aviso de pausa: **Esta tela está pausada**, "Ela lê a estação ao vivo, e nada está sendo lido enquanto o runtime está parado. Ela espera aqui em vez de mostrar valores que não são mais verdadeiros.", e depois "Reiniciar é imediato e sem limite. O runtime volta no momento em que você pedir." na estação e "O operador da estação pode reiniciá-lo a qualquer momento, sem limite. Esta tela volta sozinha." em outro lugar. A conta mantém a página dela, porque entrar ou adicionar uma licença é o que tira o limite.
- Um dashboard em tela cheia sai dela, para que a faixa e o trilho fiquem à vista.
- Todo comando que mudaria a estação é recusado com as mesmas duas palavras, "Runtime parado": nas barras de ferramentas, nos menus, nos botões das tarjas (esmaecidos com essa dica) e no endpoint de agente.

Um reinício que falha levanta uma notificação de atenção, "Falha ao reiniciar o runtime: o runtime não pôde ser reiniciado por completo. Consulte Eventos e tente de novo.", e o botão fica para outra tentativa.

## Ajuda contextual {#contextual-help}

A tecla de ajuda abre um painel à direita, ao lado da página e não sobre ela: a página continua funcionando, então a instrução pode ser executada na tela de que ela fala. Numa tela estreita (um telefone, ou um tablet na vertical) o painel toma a janela. O Escape o fecha, assim como a tecla de fechar dele, e o foco volta para a tecla de ajuda.

O que ele mostra é a página de documentação daquilo que está na sua frente. A rota é quem decide, então abrir o painel na Logic abre a página da Logic desta documentação; numa página lida como uma coluna longa (Configurações, Agente, Conta) quem decide é a seção até onde você rolou, então Configurações em Backups abre Backups. Ir para outra página, ou para outra seção da mesma, traz a página que pertence ao que está agora na tela, em vez de deixar o artigo anterior parado por cima.

O painel carrega o título da página, o resumo dela, a lista das seções e o texto inteiro. Os links para outras páginas da documentação e para seções abrem dentro do painel; um link que sai da documentação abre no seu navegador. A tecla **Abrir a documentação completa** do painel abre a mesma página no site, no mesmo idioma e para a versão que esta estação roda; é a única coisa aqui que precisa de rede.

No alto do painel, acima do artigo, **Fazer o tour** começa uma caminhada por todas as áreas do programa, abrindo cada página e apontando os controles reais dela sem mudar nada (veja [O tour do programa](tour)). Começar por aqui fecha o painel antes, para o balão ter a janela só para ele. O botão é desenhado em toda página para as identidades para quem o trilho desenha a entrada Boas-vindas, mantendo ou não a estação essa página. Ele continua lá quando o painel não tem ajuda para mostrar, porque o tour aponta para a página, não para um artigo.

A documentação é instalada junto com o aplicativo, não buscada: é a documentação da versão que você está rodando, no idioma da estação, e ela abre sem nenhuma conexão com a internet. Um navegador na rede lê as mesmas páginas a partir da estação, então uma tela no chão de fábrica nunca fica sem elas. Quando um pacote não traz ajuda para a versão em execução ou para o idioma da estação, o painel diz qual versão e qual idioma ele procurou, em vez de abrir outra coisa, e a mesma linha é escrita em [Eventos, Console](events-console).

## Notificações {#notifications}

### Tarjas de notificação {#snackbars}

Os avisos que interrompem se empilham no canto inferior direito sobre a página, o mais novo por cima. Cada cartão carrega um destaque colorido para a gravidade dele (Informação, Alerta, Erro), um título opcional, a mensagem, os botões de ação que houver e um **Dispensar** (x). Um cartão fica grudado a menos que quem o levantou tenha dado um tempo de vida a ele. Enquanto o runtime está parado, um botão de cartão que mudaria a estação fica esmaecido com a dica "Runtime parado".

O que os levanta, entre outras coisas:

| Cartão | Botões | Permanência |
|---|---|---|
| A ativação de um alarme (título: o nome do alarme; mensagem: o texto de ativação dele), para todo alarme cujo tipo de notificação não é "Barra de status" | **Reconhecer** (o mesmo reconhecimento de qualquer outro lugar) e **Abrir os alarmes** (a lista de alarmes dos eventos) | Fixa, ou 8 segundos para um alarme "Temporizada"; um reconhecimento ou uma volta ao normal o fecham. Dispensar o cartão **não** é um reconhecimento. |
| "Limite de tempo do modo gratuito": "O runtime vai parar em cerca de *n* minutos. Entre na conta ou adicione uma licença para remover o limite." | Nenhum | 12 segundos |
| "Runtime parado": "O limite de tempo do modo gratuito foi atingido e o runtime parou. Entre na conta ou adicione uma licença para remover o limite, ou reinicie o runtime na estação." | Nenhum | Até o runtime voltar |
| "O servidor não pôde iniciar" (o servidor OPC UA embutido, quase sempre uma porta já em uso) | **Abrir o Connector** | Fixa |
| "Configuração restaurada", "Configuração restaurada com um aviso", "Restauração da configuração adiada" ou "Falha ao restaurar a configuração", depois de uma restauração de backup agendada | Nenhum | Fixa |
| "O acesso de agente (MCP) não pôde iniciar", "Dashboard remoto indisponível", "O dashboard web não pôde iniciar" | Nenhum | Fixa |
| "Atualização adiada": um reiniciar e atualizar foi pedido enquanto uma gravação corria | Nenhum | Fixa |
| O disparo de um intertravamento de unidade, um cliente OPC UA ou um equipamento esperando aprovação de certificado | Um botão que abre a página que responde a isso | Fixa |

As tarjas são para o que interrompe; o resultado da sua própria ação nunca é um cartão (veja o feed de ações acima).

### Notificações do Windows {#windows-notifications}

Os cartões vivem dentro da janela, então, enquanto a janela está escondida na área de notificação ou minimizada, os mesmos momentos também levantam uma notificação do Windows: a ativação de um alarme ("Alarme de prioridade *prioridade*: *nome*"), o disparo de um intertravamento, o aviso e a parada do modo gratuito, uma falha de servidor ou de restauração numa partida escondida, e a dica única na primeira vez que a janela some. Clicar na notificação abre a janela, onde o cartão está esperando. Essas notificações só existem numa compilação instalada; uma cópia portátil ou de desenvolvimento fica só com os cartões de dentro da janela.

## O diálogo de consentimento de falha {#the-crash-consent-dialog}

Se o Ganter Lab fechou de forma inesperada, a próxima partida que mostra a janela abre **Enviar o relatório de falha?** sobre a página (uma partida escondida na área de notificação espera pela próxima visível):

- "O Ganter Lab fechou de forma inesperada na última vez. Enviar este relatório ajuda a corrigir o problema. Ele contém o erro e um trecho curto do diário recente. Revise o conteúdo abaixo antes de enviar."
- **Detalhe da falha**: a carga inteira que seria enviada, com um botão **Copiar** ("Copiado" por um instante). A carga é o momento da captura, o contexto, a versão do aplicativo, o sistema operacional, a exceção com a pilha dela, e as últimas 60 linhas do log, limpas do nome de usuário do Windows e do caminho do perfil. Nada além disso sai da estação.
- **Enviar sempre os relatórios de falha automaticamente**: opta por enviar falhas futuras sem perguntar (a mesma chave de [Configurações, Relatórios de falha](settings-crash-reports)). Ela fica esmaecida com "Runtime parado" enquanto o runtime está parado, porque a opção não poderia ser salva.
- **Não enviar** apaga a falha capturada, para que ela não seja oferecida de novo. **Enviar o relatório** a envia; um envio que falha guarda a falha e pergunta de novo na próxima partida. O relatório é atribuído à sua conta Ganter quando a estação está autenticada, e aceito de forma anônima no resto do tempo.

A falha fica guardada como `crash\pending-crash.json` sob a pasta de dados até ser enviada ou recusada.

## Quando a tela perde a estação {#when-the-screen-loses-the-station}

A página é servida pela estação ao vivo, então uma tela pode perdê-la: a conexão cai, a estação reinicia, a página encontra uma falha. Um navegador na rede encontra essas telas com mais frequência; a janela da própria estação é servida do mesmo jeito e também pode mostrá-las.

- **A faixa do circuito.** Uma página que falha dentro de uma tela em execução mostra uma faixa discreta no rodapé: "Esta página encontrou um problema, mas o aplicativo continua funcionando. Os detalhes estão na página Eventos.", com **Recarregar** e uma marca de dispensa. Nada se perde; recarregar reconecta.
- **O cartão de reconexão** toma a tela inteira enquanto a conexão está fora:

| Estado | Título | O que ele diz e oferece |
|---|---|---|
| Reconectando | Reconectando à estação | "Esta tela lê a estação ao vivo (o computador que roda o Ganter Lab) e a conexão caiu. Ela está reconectando sozinha, e sua configuração e as execuções gravadas estão intactas." Progresso: "Tentativa *n* de *m*", com "próxima em *s* s" enquanto uma espera corre. |
| Falhou | A estação não está respondendo | "Esta tela parou de reconectar depois de várias tentativas. O Ganter Lab pode estar fechado na estação (o computador que roda o Ganter Lab). Nada aqui se perde: a tela volta completa assim que a estação responder." **Tentar de novo** e **Recarregar esta tela**. Uma tela que desistiu enquanto a aba estava escondida tenta mais uma vez no instante em que alguém olha para ela de novo. |
| Em espera | Esta tela está em espera | "A estação deixou esta tela de lado e guardou tudo o que estava nela. Retomar traz a tela de volta exatamente como estava." **Retomar** e **Recarregar esta tela**; depois de uma retomada que não foi adiante: "A retomada não foi adiante. Peça de novo, ou recarregue a tela." |
| Recusada | Esta tela precisa ser recarregada | "A estação voltou a responder, mas não guarda mais o que estava nesta tela, então não dá para continuar de onde parou. Recarregar traz a tela de volta ao vivo. Sua configuração e as execuções gravadas estão intactas." **Recarregar esta tela**. O recarregamento é sempre um clique seu; uma tela nunca é trocada por baixo de você. |

- **A janela não pôde ser servida.** A janela da própria estação é servida por uma porta dentro da máquina. Quando essa porta não pode ser aberta (quase sempre uma segunda cópia do Ganter Lab já rodando), a janela pinta um aviso próprio em vez de uma página em branco: **O Ganter Lab não conseguiu abrir a tela dele**, "O aplicativo está rodando e os seus dispositivos continuam sendo lidos. O que falta é a tela…", a porta, o que o sistema relatou e a pasta de logs. Ela tenta de novo a cada cinco segundos e abre sozinha assim que a porta ficar livre.
- **Não encontrada.** Um endereço que não casa com nenhuma página aparece dentro da moldura: **Esta tela não faz parte desta estação**, "Esse endereço não corresponde a nenhuma tela daqui. Ela pode ter sido renomeada ou removida.", com **Ir para o View**, que abre a página dos dashboards.
- **Entre para ver.** Um navegador na rede cuja identidade não tem Acesso remoto (LAN), ou qualquer tela cujo papel não abre a página pedida, recebe o cartão de entrada no lugar da página ("Entre para ver esta estação pela rede." ou "Entre para abrir esta página."), nomeando a identidade que foi recusada. Entrar desenha a página que foi pedida. A janela da própria estação e um navegador na máquina da estação nunca passam pelo portão de acesso remoto.

## Tela cheia e Expandir {#full-screen-and-expand}

Um dashboard na View, e o painel ou a tela de uma unidade sob o Process, podem esconder a moldura de duas formas, ambas no agrupamento final da barra do dashboard:

| Verbo | Dica | O que ele faz |
|---|---|---|
| Expandir | Usar a janela inteira | Esconde a barra de título e o trilho; o dashboard toma a janela inteira. |
| Tela cheia | Tela cheia (F11) | A coisa de verdade: a janela da estação vai para o monitor inteiro; um navegador pede a tela cheia do documento (um navegador que recusa ainda assim esconde a moldura). |

Os dois verbos ficam esmaecidos enquanto nenhum dashboard está aberto e não são desenhados enquanto um dashboard está sendo editado: entrar num deles encerraria a edição sem avisar. Se a barra de status fica no rodapé em qualquer dos dois modos é uma configuração do próprio dashboard (veja [Configurações do dashboard](view-settings)). Os modos são exclusivos: pressionar Tela cheia estando expandido eleva o modo, não o alterna.

Teclas: **F11** alterna a tela cheia (e não faz nada enquanto você edita ou enquanto uma pasta está aberta); **Esc** sai, do mais interno para o mais externo: uma pasta em renomeação, depois a sobreposição de navegação, depois a tela cheia, depois o Expandir. Um navegador que sai da tela cheia por gesto próprio leva o modo junto. Sair da rota do dashboard devolve a moldura, e um runtime parado sai da tela cheia para que a faixa e o trilho voltem. A ferramenta **Tela cheia** de um gráfico preenche o monitor do mesmo jeito (veja [Gráficos](view-charts)); o Esc fecha o gráfico primeiro. Mais em [Tela cheia](view-fullscreen).

## Ampliação da janela {#desktop-zoom}

Na janela da própria estação, **Ctrl + roda do mouse** amplia a superfície inteira nos passos nativos do motor de navegador (cada passo multiplica por 1,2, entre 25 % e 500 %) e **Ctrl + 0** volta para 100 %. Cada mudança é anunciada no feed de ações ("Ampliação: 120%") e salva na hora, por instalação, em `window-placement.json` sob a pasta de dados (nunca no banco de configuração, nunca num backup). [Configurações, Aparência](settings-appearance) mostra o nível atual e o zera. Um navegador mantém o zoom próprio dele.

## A área de notificação {#the-system-tray}

O Ganter Lab é sempre ativo: fechar a janela a esconde enquanto o servidor embutido, a aquisição e as gravações seguem trabalhando (a menos que "Continuar em segundo plano ao fechar" esteja desligada em [Configurações, Inicialização](settings-startup), caso em que o X encerra). O ícone da área de notificação é o ladrilho da marca com um ponto de saúde que espelha o Connector, a mesma leitura e as mesmas palavras da saúde na barra de status: verde conectado, âmbar instável, vermelho sem comunicação, cinza parado. A dica dele diz "Ganter Lab: *saúde*", a linha da barra de status, com "(gravando)" acrescentado enquanto alguma execução grava (conferido a cada 15 segundos). Com um Ícone e um Nome em [Configurações, Marca](settings-branding), o ícone é o Ícone da estação com o mesmo ponto, e a dica e o item Abrir do menu dizem o Nome da estação no lugar de Ganter Lab.

- Um clique esquerdo abre a janela; um clique direito abre o menu: **Abrir Ganter Lab**, uma linha somente leitura com a saúde da barra de status e "(gravando)" enquanto alguma execução grava, e **Sair**. Não há controles de iniciar ou parar no menu: um clique perdido não pode derrubar os clientes que leem o servidor.
- Na primeira vez que o X esconde a janela, uma janelinha do próprio aplicativo abre antes por cima dela, **O Ganter Lab continua em execução**. Ela diz que o servidor, a leitura dos dispositivos e as gravações em andamento continuam; que o ícone fica na área de notificação, perto do relógio (na seta ^ da barra de tarefas quando o Windows o oculta), e que **Sair** no menu do ícone encerra o aplicativo; e que desligar "Continuar em segundo plano ao fechar" em [Configurações, Inicialização](settings-startup) faz o X encerrar sempre. **Continuar em segundo plano** é o padrão (Enter, Esc e fechar a janelinha também escolhem este) e esconde a janela. **Sair agora** encerra só desta vez pelo mesmo Sair do menu, então uma gravação em andamento ainda pergunta antes, e a chave continua ligada. Depois de qualquer das duas respostas, ela não aparece mais nesta estação. É uma janela do próprio aplicativo, não uma notificação do Windows, e por isso aparece seja qual for o jeito de abrir o aplicativo.
- **Sair** para tudo por um encerramento só: o acesso de agente, o hospedeiro web, os monitores, o runtime de processo (as execuções continuam retomáveis), o servidor embutido, o runtime da lógica (os valores retidos são gravados), o diário de eventos e o hospedeiro. Enquanto uma gravação corre, a janela volta primeiro com uma confirmação calma, **Há uma gravação em andamento**: "Sair interrompe a aquisição de dados. Tudo o que foi gravado até agora está salvo e reabre na próxima vez que você iniciar o Ganter Lab, mas nada novo é gravado enquanto o aplicativo estiver fechado." **Manter em execução** é o padrão; **Sair mesmo assim** segue adiante. Uma atualização já baixada instala na saída.

## O que a moldura não faz {#what-the-frame-does-not-do}

- Ela nunca esconde a página de usuários de quem não é administrador; a página carrega o aviso próprio dela em vez disso.
- Ela nunca oferece o reinício do runtime em outro lugar que não a faixa, e nunca num navegador.
- Ela nunca mostra os resultados de ação de outra tela, e nunca transforma um resultado de ação num cartão.
- Ela nunca muda o tema de outra tela a partir de um navegador: uma tecla pressionada num navegador vale só para aquele navegador.
- O painel de ajuda nunca busca no site um artigo para mostrar, nunca abre uma página escrita para outra versão, e nunca recorre ao inglês para um idioma que a ajuda instalada não traz.
- A tecla de ajuda, o botão de relatar, as teclas de tema, o chip, o trilho e a barra de status são os únicos controles da moldura; todo verbo sobre uma coisa que você está configurando pertence à página daquela coisa (veja [Como as páginas funcionam](app-conventions)).
