@import "./styles/design-system.css"; @tailwind base; @tailwind components; @tailwind utilities; @layer base { body { font-family: "Inter", system-ui, -apple-system, sans-serif; } } /* Dark mode hard fallback (ensure full-page background) */ html.dark, html.dark body, html.dark #root, html.dark .app-root { background-color: #0f172a !important; background-image: linear-gradient( to bottom right, #0f172a, #1e293b ) !important; } /* Fontes alternativas acessibilidade */ @font-face { font-family: "OpenDyslexic"; /* Tenta usar instalada localmente; se não houver, a regra abaixo garantirá um fallback visual */ src: local("OpenDyslexic Regular"), local("OpenDyslexic"); /* Dica: para uso em produção, adicione fontes web (woff2/woff) no diretório public/fonts e referencie aqui, por exemplo: src: url("/fonts/OpenDyslexic-Regular.woff2") format("woff2"), url("/fonts/OpenDyslexic-Regular.woff") format("woff"); */ font-weight: 400; font-style: normal; font-display: swap; } /* Quando a fonte OpenDyslexic não estiver disponível, use um fallback amigável à dislexia (Comic Sans) e aplique ajustes de legibilidade para garantir diferença visual imediata */ html.dyslexic-font body { font-family: "OpenDyslexic", "Comic Sans MS", "Comic Sans", "Inter", system-ui, -apple-system, sans-serif; letter-spacing: 0.02em; word-spacing: 0.04em; font-variant-ligatures: none; } /* Espaçamento de linha aumentado */ html.line-spacing body { line-height: 1.6; } html.line-spacing p, html.line-spacing li { line-height: 1.65; } /* Redução de movimento: remove animações e transições não essenciais */ html.reduced-motion *, html.reduced-motion *::before, html.reduced-motion *::after { animation: none !important; transition: none !important; scroll-behavior: auto !important; } /* Filtro de luz azul (aplica matiz e tonalidade amarelada) */ /* Filtro de luz azul (modo mais "padrão" com tom amarelado suave) */ html.low-blue-light body { /* Mais quente: mais sepia e matiz mais próximo do laranja */ filter: sepia(40%) hue-rotate(315deg) saturate(85%) brightness(98%); } /* Modo foco: destaque reforçado no elemento focado, sem quebrar layout */ html.focus-mode *:focus-visible { outline: 4px solid #3b82f6; /* azul Tailwind 500 */ outline-offset: 3px; box-shadow: 0 0 0 4px rgba(59, 130, 246, 0.25); border-radius: 6px; transition: outline-color 0.15s ease, box-shadow 0.15s ease; } /* Modo foco (escuro): cor de foco mais clara para contraste */ html.focus-mode.dark *:focus-visible, .dark html.focus-mode *:focus-visible { outline-color: #60a5fa; /* azul 400 */ box-shadow: 0 0 0 4px rgba(96, 165, 250, 0.25); } @layer components { .btn-primary { @apply bg-gradient-to-l from-blue-800 to-blue-500 text-white px-4 py-2 rounded-lg hover:from-blue-900 hover:to-blue-600 transition-all duration-300 shadow-lg; } .btn-secondary { @apply bg-gray-200 text-gray-800 px-4 py-2 rounded-lg hover:bg-gray-300 transition-colors; } .card { @apply bg-white rounded-lg shadow-md p-6; } .form-input { @apply w-full px-3 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent; } .status-agendada { @apply bg-yellow-100 text-yellow-800 px-2 py-1 rounded-full text-xs font-medium; } .status-confirmada { @apply bg-gradient-to-l from-blue-700 to-blue-400 text-white px-2 py-1 rounded-full text-xs font-medium; } .status-realizada { @apply bg-green-100 text-green-800 px-2 py-1 rounded-full text-xs font-medium; } .status-cancelada { @apply bg-red-100 text-red-800 px-2 py-1 rounded-full text-xs font-medium; } .status-faltou { @apply bg-gray-100 text-gray-800 px-2 py-1 rounded-full text-xs font-medium; } .gradient-blue-bg { @apply bg-gradient-to-l from-blue-800 to-blue-500; } .gradient-blue-hover { @apply hover:bg-gradient-to-l hover:from-blue-900 hover:to-blue-600; } .gradient-blue-light { @apply bg-gradient-to-l from-blue-600 to-blue-400; } } /* Estilos de Acessibilidade */ .high-contrast { --tw-bg-opacity: 1; } .high-contrast body { background-color: #000 !important; color: #fff !important; } .high-contrast .bg-white { background-color: #000 !important; color: #fff !important; border: 2px solid #fff !important; } .high-contrast .text-gray-600, .high-contrast .text-gray-700, .high-contrast .text-gray-800, .high-contrast .text-gray-900 { color: #fff !important; } .high-contrast .bg-blue-600, .high-contrast .bg-blue-500, .high-contrast .bg-green-600 { background-color: #ffff00 !important; color: #000 !important; } .high-contrast a, .high-contrast button:not(.bg-red-500) { text-decoration: underline; font-weight: bold; } .high-contrast input, .high-contrast select, .high-contrast textarea { background-color: #fff !important; color: #000 !important; border: 2px solid #000 !important; } /* Modo Escuro Melhorado */ .dark { color-scheme: dark; } .dark body { background-color: #0f172a; background-image: linear-gradient(to bottom right, #0f172a, #1e293b); color: #e2e8f0; } /* High visibility toggles (override) */ .a11y-toggle-button { position: relative; outline: none; } .a11y-toggle-button:focus-visible { box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.7), 0 0 0 5px rgba(255, 255, 255, 0.9); } .a11y-toggle-track { transition: background-color 0.25s ease, box-shadow 0.25s ease; box-shadow: inset 0 0 0 2px rgba(0, 0, 0, 0.15); } .dark .a11y-toggle-track { box-shadow: inset 0 0 0 2px rgba(255, 255, 255, 0.12); } .a11y-toggle-thumb { transition: transform 0.25s ease, background-color 0.25s ease; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.3); } .a11y-toggle-track[data-active="true"] { background: linear-gradient(90deg, #2563eb, #3b82f6) !important; } .a11y-toggle-track[data-active="false"] { background: linear-gradient(90deg, #cbd5e1, #94a3b8) !important; } .dark .a11y-toggle-track[data-active="false"] { background: linear-gradient(90deg, #475569, #334155) !important; } .a11y-toggle-track[data-active="true"] .a11y-toggle-thumb { background: #fff; } .a11y-toggle-status-label { font-size: 0.625rem; /* 10px */ font-weight: 600; letter-spacing: 0.5px; text-transform: uppercase; display: inline-block; margin-top: 2px; color: #64748b; } .dark .a11y-toggle-status-label { color: #94a3b8; } .a11y-toggle-track[data-active="true"] + .a11y-toggle-status-label { color: #2563eb; } .dark .a11y-toggle-track[data-active="true"] + .a11y-toggle-status-label { color: #60a5fa; } /* Containers e Cards */ .dark .bg-white { background-color: #1e293b !important; color: #e2e8f0 !important; border-color: #334155 !important; } .dark .card, .dark .rounded-lg, .dark .shadow-md, .dark .shadow-lg { background-color: #1e293b; border: 1px solid #334155; box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.5), 0 2px 4px -1px rgba(0, 0, 0, 0.3); } /* Textos */ .dark .text-gray-900 { color: #f1f5f9 !important; } .dark .text-gray-800 { color: #e2e8f0 !important; } .dark .text-gray-700 { color: #cbd5e1 !important; } .dark .text-gray-600 { color: #94a3b8 !important; } .dark .text-gray-500 { color: #64748b !important; } .dark .text-gray-400 { color: #475569 !important; } /* Inputs e Formulários */ .dark input, .dark select, .dark textarea, .dark .form-input { background-color: #0f172a !important; border-color: #475569 !important; color: #e2e8f0 !important; } .dark input:focus, .dark select:focus, .dark textarea:focus, .dark .form-input:focus { border-color: #60a5fa !important; box-shadow: 0 0 0 3px rgba(96, 165, 250, 0.2) !important; } .dark input::placeholder, .dark textarea::placeholder { color: #64748b !important; } /* Botões */ .dark .bg-gray-100, .dark .bg-gray-200 { background-color: #334155 !important; color: #e2e8f0 !important; } .dark .bg-gray-100:hover, .dark .bg-gray-200:hover { background-color: #475569 !important; } /* Botões primários com brilho ajustado */ .dark .bg-blue-600 { background-color: #2563eb !important; } .dark .bg-green-600 { background-color: #16a34a !important; } .dark .bg-red-600 { background-color: #dc2626 !important; } /* Status badges - ajuste para melhor contraste */ .dark .status-agendada { background-color: #713f12 !important; color: #fde047 !important; } .dark .status-confirmada { background-color: #1e3a8a !important; color: #93c5fd !important; } .dark .status-realizada { background-color: #14532d !important; color: #86efac !important; } .dark .status-cancelada { background-color: #7f1d1d !important; color: #fca5a5 !important; } .dark .status-faltou { background-color: #374151 !important; color: #d1d5db !important; } /* Tabelas */ .dark table { border-color: #334155 !important; } .dark thead { background-color: #0f172a !important; } .dark tbody tr { border-color: #334155 !important; } .dark tbody tr:hover { background-color: #334155 !important; } /* Links */ .dark a { color: #60a5fa !important; } .dark a:hover { color: #93c5fd !important; } /* Bordas */ .dark .border-gray-200, .dark .border-gray-300 { border-color: #334155 !important; } /* Gradientes - ajuste para modo escuro */ .dark .gradient-blue-bg, .dark .bg-gradient-to-l { background: linear-gradient(to left, #1e40af, #1e3a8a) !important; } /* Header e navegação */ .dark header { background-color: #1e293b !important; border-bottom: 1px solid #334155 !important; } /* Modais */ .dark .modal-content { background-color: #1e293b !important; border-color: #334155 !important; } /* Scrollbar escura */ .dark ::-webkit-scrollbar { width: 10px; height: 10px; } .dark ::-webkit-scrollbar-track { background: #0f172a; } .dark ::-webkit-scrollbar-thumb { background: #475569; border-radius: 5px; } .dark ::-webkit-scrollbar-thumb:hover { background: #64748b; } /* Divisores */ .dark hr, .dark .divide-y > * { border-color: #334155 !important; } /* Dropdown menus */ .dark .dropdown-menu { background-color: #1e293b !important; border-color: #334155 !important; } .dark .dropdown-item:hover { background-color: #334155 !important; } /* Toast notifications */ .dark .toast { background-color: #1e293b !important; color: #e2e8f0 !important; border-color: #334155 !important; } /* Shadows ajustadas */ .dark .shadow-sm { box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.5) !important; } .dark .shadow { box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.5), 0 1px 2px 0 rgba(0, 0, 0, 0.3) !important; } .dark .shadow-md { box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.5), 0 2px 4px -1px rgba(0, 0, 0, 0.3) !important; } .dark .shadow-lg { box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.5), 0 4px 6px -2px rgba(0, 0, 0, 0.3) !important; } .dark .shadow-xl { box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.5), 0 10px 10px -5px rgba(0, 0, 0, 0.3) !important; } .dark .shadow-2xl { box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.7) !important; } /* Melhor foco para navegação por teclado */ *:focus-visible { outline: 3px solid #3b82f6; outline-offset: 2px; } .dark *:focus-visible { outline-color: #60a5fa; } /* Animações */ @keyframes slideIn { from { opacity: 0; transform: translateY(10px) scale(0.95); } to { opacity: 1; transform: translateY(0) scale(1); } } .animate-slideIn { animation: slideIn 0.2s ease-out; } /* Transições suaves globais para modo escuro */ body, .card, .bg-white, input, select, textarea, button { transition: background-color 0.3s ease, color 0.3s ease, border-color 0.3s ease; }