Referência viva pra qualquer HTML interno. Cores, fonte, logo, componentes e movimento.
Use sempre essas URLs exatas. O logo precisa ficar sobre fundo branco. A fonte é Nunito em todos os pesos.
https://cdn.medprev.online/web-app/assets/4c53cd49/_next/static/media/logo.5120ca8f.svg
https://fonts.googleapis.com/css2?family=Nunito:wght@400;500;600;700;800;900&display=swap
Use sempre via variável CSS, nunca hex hardcoded no markup.
Nunito em todos os pesos. Body em 500. Sem fonte secundária, sem monospace.
Componentes prontos pra copiar. Todos seguem a paleta e a tipografia acima.
API: openConfirm({title, text, confirmLabel, confirmStyle, onConfirm}). Botão primário usa .btn.danger quando a ação é destrutiva (reset, apagar). Reusa o estilo do .modal-overlay.
Regras de transição. Use sempre os timings/easings definidos em :root. Nada além disso.
Sai: opacity: 0; transform: translateX(-16px). Entra do lado oposto. Sempre na direção do avanço (forward = vem da direita, back = vem da esquerda).
Nunca re-renderizar a lista inteira ao clicar. Use classList.toggle('selected') no elemento. Os outros itens NÃO devem animar/piscar.
Overlay sempre presente no DOM com visibility: hidden; opacity: 0. Classe .active dispara fade-in + card sobe (translateY(20px) scale(0.96) → 0/1). Fechamento reverte. Nunca display: none direto.
Mesma técnica do modal: visibility + opacity + transition. Spinner roda continuamente. Texto e progress bar opcionais.
Drop area que acabou de receber um arquivo faz um pop sutil. Feedback de "deu certo".
Usar canvas-confetti nas cores #096840 · #E5F9DF · #B5E8C2 · #FFFFFF. Frames laterais por 2s + burst central. Dispara quando entra na tela de sucesso.
Cada .screen tem só uma responsabilidade: aparecer ou sumir. Layout (centralização, flexbox, max-width) fica num wrapper interno (.full-center pra welcome/success, .wrap pro wizard). Isso evita conflito de especificidade entre display: block e display: flex no mesmo elemento.
Três containers separados, cada um com display: none default e .active pra mostrar com animation: page-fade-in 0.4s.
A tela welcome tem logo grande, label "Wizard", título, descrição, botão grande de iniciar, blobs verdes flutuando ao fundo.
As etapas mostram stepper, header com logo pequeno, link "✕ Recomeçar" no canto direito.
A success não mostra stepper nem header de etapa: replica visualmente a welcome, com logo grande, label "✓ Concluído", título, estatísticas e botões de próxima ação.
Reset dentro do app (botão "Recomeçar" no header ou "Começar do zero" na success) zera o state e vai direto pra primeira etapa, não volta pra welcome. O usuário já decidiu começar, não faz sentido fazer ele clicar de novo.
Quando o Patrick pedir um HTML interno, siga isso à risca.
01 / Identidade, sempre em fundo branco, dentro de um .logo-box.--green, --green-light, --text, etc). Nunca hex hardcoded no markup.--t-fast / --t-base / --t-slow e easings --ease-out / --ease-bounce.--bg, cards brancos com borda --border..primary e .danger mantém color: var(--white).classList.toggle('selected'). NUNCA re-renderizar a lista inteira (faz tudo piscar).visibility + opacity + transition. Jamais display: none → flex direto.alert() / confirm() / prompt() nativos. Sempre modal customizado (ver componente "Modal de confirmação"). Ação destrutiva = botão .danger..screen controla SÓ visibilidade (display none/block). Layout (flexbox, centralização) vai em wrapper interno. Não misturar responsabilidades no mesmo elemento — gera conflito de especificidade.prefers-reduced-motion sempre.