*, *::before, *::after { box-sizing: border-box; } /* Garante que o atributo/propriedade "hidden" sempre vença, mesmo em elementos cujo próprio componente define display:flex/grid/etc. */ [hidden] { display: none !important; } html, body { height: 100%; } body { margin: 0; font-family: var(--font-sans); background: var(--bg-canvas); color: var(--text-primary); -webkit-font-smoothing: antialiased; transition: background var(--transition-base), color var(--transition-base); } h1, h2, h3, h4, p { margin: 0; } button, input { font-family: inherit; color: inherit; } button { cursor: pointer; border: none; background: none; } a { color: inherit; text-decoration: none; } ul { list-style: none; margin: 0; padding: 0; } svg { display: block; flex-shrink: 0; } .visually-hidden { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; } ::selection { background: var(--accent); color: var(--accent-contrast); } /* Animações globais — rápidas de propósito (a ideia é sensação de fluidez, não "efeito"), e sem nenhum @media (prefers-reduced-motion) desativando: decisão deliberada do usuário, essas animações devem rodar sempre, independente da preferência de acessibilidade do sistema operacional. */ @keyframes pidFadeIn { from { opacity: 0; } to { opacity: 1; } } @keyframes pidFadeSlideUp { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: translateY(0); } } @keyframes pidScaleIn { from { opacity: 0; transform: scale(0.96); } to { opacity: 1; transform: scale(1); } } /* scrollbar discreta */ * { scrollbar-width: thin; scrollbar-color: var(--border-subtle) transparent; } *::-webkit-scrollbar { width: 8px; height: 8px; } *::-webkit-scrollbar-thumb { background: var(--border-subtle); border-radius: var(--radius-pill); }