Ir para o conteúdo

Estilos

🖌️ | 📝 Cadastro

O arquivo Cadastro.css localizado em (src/pages/Cadastro.css) define toda a estilização visual da página de cadastro de usuários do frontend do projeto Mapa da Acessibilidade.

Função e contexto

Este arquivo foi desenvolvido para garantir que o formulário de cadastro seja moderno, acessível, responsivo e agradável de usar. Ele contribui diretamente para a experiência do usuário, tornando o processo de criação de conta mais intuitivo e visualmente alinhado à identidade do sistema.

/* Arquivo: src/pages/Cadastro.css */

/* 
  Centraliza o formulário de cadastro na tela, com fundo suave e padding.
*/
.register-container {
  display: flex;
  align-items: center;
  justify-content: center;
  min-height: 100vh;
  background-color: #f8fafc;
  padding: 20px;
}

/* 
  Cartão principal do formulário, com fundo branco, bordas arredondadas e sombra.
*/
.register-card {
  background: white;
  border-radius: 16px;
  box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
  padding: 32px;
  width: 100%;
  max-width: 400px;
}

/* 
  Cabeçalho do formulário, centralizado.
*/
.register-header {
  text-align: center;
  margin-bottom: 32px;
}

/* 
  Ícone ilustrativo do topo do formulário.
*/
.register-icon {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 80px;
  height: 80px;
  background: linear-gradient(135deg, #dbeafe 0%, #bfdbfe 100%);
  border-radius: 50%;
  margin: 0 auto 24px;
  color: #3b82f6;
}

.register-icon svg {
  width: 40px;
  height: 40px;
}

/* 
  Título e subtítulo do formulário.
*/
.register-title {
  font-size: 24px;
  font-weight: 700;
  color: #1f2937;
  margin: 0 0 8px;
}

.register-subtitle {
  font-size: 14px;
  color: #6b7280;
  margin: 0;
}

/* 
  Link para login ou outras páginas, com cor de destaque e efeito hover.
*/
.register-link {
  color: #3b82f6;
  text-decoration: none;
  font-weight: 500;
}

.register-link:hover {
  color: #1d4ed8;
}

/* 
  Espaçamento inferior do formulário.
*/
.register-form {
  margin-bottom: 24px;
}

/* 
  Grupo de campos do formulário.
*/
.form-group {
  margin-bottom: 16px;
}

/* 
  Wrapper para campos de entrada com ícones.
*/
.input-wrapper {
  position: relative;
  display: flex;
  align-items: center;
}

/* 
  Ícone à esquerda do campo de entrada.
*/
.input-icon {
  position: absolute;
  left: 12px;
  width: 20px;
  height: 20px;
  color: #9ca3af;
  z-index: 1;
}

/* 
  Campo de entrada principal.
*/
.form-input {
  width: 100%;
  padding: 12px 12px 12px 44px;
  border: 1px solid #d1d5db;
  border-radius: 8px;
  font-size: 16px;
  color: #374151;
  background: white;
  transition: border-color 0.2s ease-in-out;
}

/* 
  Destaque ao focar no campo de entrada.
*/
.form-input:focus {
  outline: none;
  border-color: #3b82f6;
  box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);
}

.form-input::placeholder {
  color: #9ca3af;
}

/* 
  Ícone à direita do campo de entrada (ex: mostrar senha).
*/
.input-flag {
  position: absolute;
  right: 12px;
  font-size: 16px;
}

/* 
  Botão para alternar exibição da senha.
*/
.toggle-password {
  position: absolute;
  right: 12px;
  background: none;
  border: none;
  cursor: pointer;
  color: #9ca3af;
  padding: 0;
  display: flex;
  align-items: center;
  justify-content: center;
}

.toggle-password:hover {
  color: #6b7280;
}

.toggle-password svg {
  width: 20px;
  height: 20px;
}

/* 
  Grupo de checkbox para aceite dos termos.
*/
.checkbox-group {
  margin: 20px 0;
}

.checkbox-wrapper {
  display: flex;
  align-items: flex-start;
  gap: 8px;
}

.checkbox {
  width: 16px;
  height: 16px;
  margin: 0;
  flex-shrink: 0;
  margin-top: 2px;
}

.checkbox-label {
  font-size: 14px;
  color: #374151;
  line-height: 1.5;
}

.terms-link {
  color: #3b82f6;
  text-decoration: none;
}

.terms-link:hover {
  text-decoration: underline;
}

/* 
  Botão principal de cadastro.
*/
.register-button {
  width: 100%;
  background: #3b82f6;
  color: white;
  border: none;
  border-radius: 8px;
  padding: 12px 16px;
  font-size: 16px;
  font-weight: 500;
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  transition: background-color 0.2s ease-in-out;
}

.register-button:hover {
  background: #1d4ed8;
}

.register-button svg {
  width: 20px;
  height: 20px;
}

/* 
  Divisor visual entre cadastro tradicional e social.
*/
.divider {
  position: relative;
  text-align: center;
  margin: 24px 0;
}

.divider::before {
  content: '';
  position: absolute;
  top: 50%;
  left: 0;
  right: 0;
  height: 1px;
  background: #e5e7eb;
}

.divider span {
  background: white;
  color: #9ca3af;
  padding: 0 16px;
  font-size: 14px;
  position: relative;
  z-index: 1;
}

/* 
  Botões de cadastro social (Facebook, Google, Apple).
*/
.social-buttons {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 12px;
}

.social-button {
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 12px;
  border: 1px solid #d1d5db;
  border-radius: 8px;
  background: white;
  cursor: pointer;
  transition: all 0.2s ease-in-out;
}

.social-button:hover {
  background: #f9fafb;
  border-color: #9ca3af;
}

.social-button svg {
  width: 20px;
  height: 20px;
}

.social-button.facebook svg {
  color: #1877f2;
}

.social-button.google svg {
  color: #ea4335;
}

.social-button.apple svg {
  color: #000000;
}

/* 
  Responsividade para telas pequenas.
*/
@media (max-width: 480px) {
  .register-container {
    padding: 16px;
  }

  .register-card {
    padding: 24px;
  }

  .register-icon {
    width: 60px;
    height: 60px;
  }

  .register-icon svg {
    width: 30px;
    height: 30px;
  }

  .register-title {
    font-size: 20px;
  }
}

Principais características e classes

  • Layout centralizado e responsivo:
    .register-container centraliza o formulário vertical e horizontalmente, ocupando toda a altura da tela, com fundo suave e padding adaptativo para diferentes tamanhos de dispositivo.

  • Cartão de cadastro:
    .register-card define o bloco principal do formulário, com fundo branco, bordas arredondadas, sombra para destaque e largura máxima para boa leitura em qualquer tela.

  • Cabeçalho e ícone:
    .register-header, .register-icon, .register-title, .register-subtitle estilizam o topo do formulário, incluindo ícone ilustrativo, título e subtítulo, reforçando a identidade visual.

  • Campos de formulário:
    .form-group, .input-wrapper, .form-input, .input-icon, .toggle-password organizam e estilizam os campos de entrada, garantindo espaçamento, ícones alinhados, feedback visual ao focar e botões para exibir/ocultar senha.

  • Checkbox de termos:
    .checkbox-group, .checkbox-wrapper, .checkbox, .checkbox-label, .terms-link garantem alinhamento, legibilidade e acessibilidade para o aceite dos termos de uso e política de privacidade.

  • Botão de cadastro:
    .register-button estiliza o botão principal, com cor de destaque, bordas arredondadas, fonte em negrito e efeito hover para melhor interação.

  • Divisor e cadastro social:
    .divider, .social-buttons, .social-button organizam a separação entre cadastro tradicional e social, com botões para Facebook, Google e Apple, cada um com cor e ícone característicos.

  • Responsividade:
    Media queries ajustam paddings, tamanhos de ícones e fontes para telas menores, garantindo boa usabilidade em dispositivos móveis.

Resumo

O arquivo Cadastro.css é essencial para proporcionar uma experiência de cadastro agradável, acessível e alinhada ao design do Mapa da Acessibilidade. Ele garante que o formulário seja visualmente atraente, fácil de usar e adaptado a qualquer dispositivo, contribuindo para a inclusão e o engajamento de novos usuários na plataforma.


🖌️ | 📞 Contato

O arquivo Contato.css localizado na pasta (src/pages/Contato.css) define toda a estilização visual da página de contato do frontend do projeto Mapa da Acessibilidade.

Função e contexto

Este arquivo foi desenvolvido para garantir que a página de contato seja moderna, acessível, responsiva e agradável de usar. Ele contribui diretamente para a experiência do usuário, tornando o envio de mensagens e a visualização das informações institucionais mais intuitivos e visualmente alinhados à identidade do sistema.

/* Arquivo: (`src/pages/Contato.css`)*/

/* 
  Define altura mínima para a área principal da página de contato,
  garantindo que ocupe toda a altura da tela.
*/
.contact-main {
  min-height: 100vh;
}

/* 
  Seção principal da página de contato, com espaçamento vertical e fundo suave.
*/
.contact-section {
  padding: 4rem 0 6rem;
  background-color: #f8fafc;
}

/* 
  Container centralizado e responsivo para o conteúdo da página de contato.
  Ajusta o padding conforme o tamanho da tela.
*/
.contact-container {
  max-width: 1200px;
  margin: 0 auto;
  padding: 0 1rem;
}
@media (min-width: 640px) {
  .contact-container {
    padding: 0 1.5rem;
  }
}
@media (min-width: 1024px) {
  .contact-container {
    padding: 0 2rem;
  }
}

/* 
  Cabeçalho da página de contato, centralizado e com espaçamento inferior.
*/
.contact-header {
  text-align: center;
  margin-bottom: 4rem;
}

/* 
  Wrapper para o título e ícone do cabeçalho.
*/
.contact-title-wrapper {
  display: flex;
  align-items: center;
  justify-content: center;
  margin-bottom: 1rem;
}

/* 
  Ícone do cabeçalho, com cor de destaque.
*/
.contact-icon {
  height: 2rem;
  width: 2rem;
  color: #3b82f6;
  margin-right: 0.75rem;
}

/* 
  Título principal da página de contato.
*/
.contact-title {
  font-size: 2.25rem;
  font-weight: bold;
  color: #1f2937;
  margin: 0;
}
@media (min-width: 768px) {
  .contact-title {
    font-size: 2.5rem;
  }
}

/* 
  Subtítulo da página de contato.
*/
.contact-subtitle {
  font-size: 1.25rem;
  color: #4b5563;
  max-width: 48rem;
  margin: 0 auto;
  line-height: 1.6;
}

/* 
  Grid principal do conteúdo, adaptando para uma ou duas colunas conforme a tela.
*/
.contact-content {
  display: grid;
  grid-template-columns: 1fr;
  gap: 3rem;
}
@media (min-width: 1024px) {
  .contact-content {
    grid-template-columns: 1fr 1fr;
  }
}

/* 
  Título da seção de informações institucionais.
*/
.contact-info-title {
  font-size: 1.5rem;
  font-weight: bold;
  color: #1f2937;
  margin-bottom: 2rem;
}

/* 
  Grid de cartões de informações institucionais.
*/
.contact-info-grid {
  display: flex;
  flex-direction: column;
  gap: 1.5rem;
}

/* 
  Cartão de informação institucional, com fundo branco, bordas arredondadas e sombra.
*/
.contact-info-card {
  background: white;
  border-radius: 0.5rem;
  padding: 1.5rem;
  box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06);
  transition: box-shadow 0.2s ease-in-out;
}
.contact-info-card:hover {
  box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
}

/* 
  Conteúdo interno do cartão de informação, alinhando ícone e texto.
*/
.contact-info-content {
  display: flex;
  align-items: flex-start;
  gap: 1rem;
}

/* 
  Wrapper para o ícone do cartão de informação.
*/
.contact-info-icon-wrapper {
  width: 3rem;
  height: 3rem;
  background-color: #dbeafe;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
}

/* 
  Ícone do cartão de informação.
*/
.contact-info-icon {
  height: 1.5rem;
  width: 1.5rem;
  color: #3b82f6;
}

/* 
  Área de texto do cartão de informação.
*/
.contact-info-text {
  flex: 1;
}

/* 
  Título do cartão de informação.
*/
.contact-info-card-title {
  font-size: 1.125rem;
  font-weight: 600;
  color: #1f2937;
  margin: 0 0 0.5rem;
}

/* 
  Link de contato (e-mail, telefone), com efeito hover.
*/
.contact-info-link {
  color: #4b5563;
  text-decoration: none;
  white-space: pre-line;
  transition: color 0.2s ease-in-out;
}
.contact-info-link:hover {
  color: #1d4ed8;
}

/* 
  Descrição do cartão de informação.
*/
.contact-info-description {
  color: #4b5563;
  white-space: pre-line;
  margin: 0;
  line-height: 1.5;
}

/* 
  Cartão do formulário de contato, com fundo branco e sombra.
*/
.contact-form-card {
  background: white;
  border-radius: 0.5rem;
  box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06);
  overflow: hidden;
}

/* 
  Cabeçalho do formulário de contato.
*/
.contact-form-header {
  padding: 1.5rem 1.5rem 0;
}

/* 
  Título do formulário de contato.
*/
.contact-form-title {
  font-size: 1.5rem;
  color: #1f2937;
  font-weight: 600;
  margin: 0 0 0.5rem;
}

/* 
  Descrição do formulário de contato.
*/
.contact-form-description {
  color: #4b5563;
  margin: 0;
  line-height: 1.5;
}

/* 
  Conteúdo do formulário de contato.
*/
.contact-form-content {
  padding: 1.5rem;
}

/* 
  Estrutura do formulário, com espaçamento entre campos.
*/
.contact-form {
  display: flex;
  flex-direction: column;
  gap: 1.5rem;
}

/* 
  Linha de campos do formulário, adaptando para duas colunas em telas médias.
*/
.form-row {
  display: grid;
  grid-template-columns: 1fr;
  gap: 1rem;
}
@media (min-width: 768px) {
  .form-row {
    grid-template-columns: 1fr 1fr;
  }
}

/* 
  Grupo de campos do formulário.
*/
.form-group {
  display: flex;
  flex-direction: column;
}

/* 
  Rótulo dos campos do formulário.
*/
.form-label {
  display: block;
  font-size: 0.875rem;
  font-weight: 500;
  color: #374151;
  margin-bottom: 0.5rem;
}

/* 
  Campos de entrada e textarea do formulário.
*/
.form-input,
.form-textarea {
  width: 100%;
  padding: 0.75rem;
  border: 1px solid #d1d5db;
  border-radius: 0.375rem;
  font-size: 1rem;
  transition: border-color 0.2s ease-in-out, box-shadow 0.2s ease-in-out;
  background: white;
}

/* 
  Destaque ao focar nos campos do formulário.
*/
.form-input:focus,
.form-textarea:focus {
  outline: none;
  border-color: #3b82f6;
  box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);
}

.form-input::placeholder,
.form-textarea::placeholder {
  color: #9ca3af;
}

/* 
  Textarea com redimensionamento vertical.
*/
.form-textarea {
  resize: vertical;
  min-height: 120px;
}

/* 
  Botão de envio do formulário, com cor de destaque e efeito hover.
*/
.form-submit-button {
  width: 100%;
  background-color: #3b82f6;
  color: white;
  padding: 0.75rem 1.5rem;
  font-size: 1.125rem;
  font-weight: 600;
  border: none;
  border-radius: 0.375rem;
  cursor: pointer;
  transition: background-color 0.2s ease-in-out;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 0.5rem;
}
.form-submit-button:hover {
  background-color: #1d4ed8;
}
.form-submit-button:focus {
  outline: none;
  box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.3);
}

/* 
  Ícone do botão de envio.
*/
.submit-icon {
  height: 1.25rem;
  width: 1.25rem;
}

/* 
  Responsividade adicional para telas pequenas.
*/
@media (max-width: 640px) {
  .contact-section {
    padding: 2rem 0 3rem;
  }
  .contact-header {
    margin-bottom: 2rem;
  }
  .contact-title {
    font-size: 1.875rem;
  }
  .contact-subtitle {
    font-size: 1.125rem;
  }
  .contact-content {
    gap: 2rem;
  }
  .contact-info-card,
  .contact-form-header,
  .contact-form-content {
    padding: 1rem;
  }
}

Principais características e classes

  • Layout centralizado e responsivo:
    .contact-section e .contact-container organizam o conteúdo em uma largura máxima, centralizando e adaptando o layout para diferentes tamanhos de tela.

  • Cabeçalho e títulos:
    .contact-header, .contact-title-wrapper, .contact-title, .contact-subtitle estilizam o topo da página, incluindo ícone, título e subtítulo, reforçando a identidade visual e a clareza das informações.

  • Grid de conteúdo:
    .contact-content utiliza grid para dividir a área de informações institucionais e o formulário de contato, adaptando-se para uma ou duas colunas conforme o tamanho da tela.

  • Cartões de informação:
    .contact-info-card, .contact-info-content, .contact-info-icon-wrapper, .contact-info-icon, .contact-info-card-title, .contact-info-link, .contact-info-description organizam e estilizam os dados de contato (e-mail, telefone, endereço, horário), com ícones, títulos e links interativos.

  • Formulário de contato:
    .contact-form-card, .contact-form-header, .contact-form-title, .contact-form-description, .contact-form-content, .contact-form e .form-group estruturam o formulário, garantindo espaçamento, campos acessíveis e feedback visual ao focar.

  • Campos de formulário:
    .form-label, .form-input, .form-textarea garantem legibilidade, contraste e usabilidade nos campos de entrada e texto.

  • Botão de envio:
    .form-submit-button estiliza o botão principal do formulário, com cor de destaque, fonte em negrito, efeito hover e foco acessível.

  • Responsividade:
    Media queries ajustam paddings, tamanhos de fontes, espaçamentos e grid para telas menores, garantindo boa usabilidade em dispositivos móveis.

Resumo

O arquivo Contato.css é essencial para proporcionar uma experiência de contato agradável, acessível e alinhada ao design do Mapa da Acessibilidade. Ele garante que a página seja visualmente atraente, fácil de usar e adaptada a qualquer dispositivo, contribuindo para a comunicação eficiente entre usuários e a equipe do projeto.


🖌️ | 🏢 Eventos

O arquivo Eventos.css localizado em (src/pages/Eventos.css) define toda a estilização visual da página de eventos do frontend do projeto Mapa da Acessibilidade.

Função e contexto

Este arquivo foi desenvolvido para garantir que a página de eventos seja moderna, acessível, responsiva e visualmente atraente. Ele contribui diretamente para a experiência do usuário, tornando a navegação, visualização e participação em eventos mais intuitivas e alinhadas à identidade visual do sistema.

/*
Arquivo: (src/pages/Eventos.css)
/*

/* 
  Seção principal da página de eventos, com espaçamento vertical e fundo branco.
*/
.events-section {
  padding: 4rem 0 6rem;
  background-color: #ffffff;
}

/* 
  Container centralizado e responsivo para o conteúdo da página de eventos.
  Ajusta o padding conforme o tamanho da tela.
*/
.events-container {
  max-width: 1200px;
  margin: 0 auto;
  padding: 0 1rem;
}
@media (min-width: 640px) {
  .events-container {
    padding: 0 1.5rem;
  }
}
@media (min-width: 1024px) {
  .events-container {
    padding: 0 2rem;
  }
}

/* 
  Cabeçalho da página de eventos, centralizado e com espaçamento inferior.
*/
.events-header {
  text-align: center;
  margin-bottom: 4rem;
}

/* 
  Wrapper para o título e ícone do cabeçalho.
*/
.events-title-wrapper {
  display: flex;
  align-items: center;
  justify-content: center;
  margin-bottom: 1rem;
}

/* 
  Ícone do título, com cor de destaque.
*/
.events-title-icon {
  height: 2rem;
  width: 2rem;
  color: #3b82f6;
  margin-right: 0.75rem;
}

/* 
  Título principal da página de eventos.
*/
.events-title {
  font-size: 2.25rem;
  font-weight: bold;
  color: #3b82f6;
  margin: 0;
}
@media (min-width: 768px) {
  .events-title {
    font-size: 2.5rem;
  }
}

/* 
  Subtítulo da página de eventos.
*/
.events-subtitle {
  font-size: 1.25rem;
  color: #6b7280;
  max-width: 48rem;
  margin: 0 auto;
  line-height: 1.6;
}

/* 
  Grid de eventos, adaptando para uma ou duas colunas conforme a tela.
*/
.events-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: 2rem;
  margin-bottom: 4rem;
}
@media (min-width: 768px) {
  .events-grid {
    grid-template-columns: repeat(2, 1fr);
  }
}

/* 
  Card individual de evento, com fundo branco, bordas arredondadas e sombra.
  Destaca ao passar o mouse.
*/
.event-card {
  background: white;
  border-radius: 0.75rem;
  border: 2px solid #e5e7eb;
  padding: 1.5rem;
  cursor: pointer;
  transition: all 0.3s ease;
  box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06);
}
.event-card:hover {
  border-color: #3b82f6;
  transform: translateY(-2px);
  box-shadow: 0 10px 25px 0 rgba(0, 0, 0, 0.1);
}

/* 
  Cabeçalho do card de evento.
*/
.event-card-header {
  margin-bottom: 1rem;
}

/* 
  Linha de badges de status do evento.
*/
.event-badges-row {
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  margin-bottom: 0.75rem;
  flex-wrap: wrap;
  gap: 0.5rem;
}

/* 
  Grupo de badges de status.
*/
.event-status-badges {
  display: flex;
  gap: 0.5rem;
  flex-wrap: wrap;
}

/* 
  Badge de status do evento.
*/
.event-badge {
  padding: 0.25rem 0.75rem;
  border-radius: 9999px;
  font-size: 0.75rem;
  font-weight: 500;
  display: inline-block;
}

/* 
  Cores específicas para cada tipo de evento e status.
*/
.event-badge-workshop {
  background-color: #dbeafe;
  color: #1e40af;
}
.event-badge-webinar {
  background-color: #d1fae5;
  color: #065f46;
}
.event-badge-acao {
  background-color: #fed7aa;
  color: #c2410c;
}
.event-badge-hackathon {
  background-color: #e9d5ff;
  color: #7c3aed;
}
.event-badge-free {
  background-color: transparent;
  color: #059669;
  border: 1px solid #059669;
}
.event-badge-online {
  background-color: transparent;
  color: #2563eb;
  border: 1px solid #2563eb;
}

/* 
  Título do card de evento.
*/
.event-card-title {
  font-size: 1.25rem;
  font-weight: 600;
  color: #1f2937;
  margin: 0;
  line-height: 1.4;
}

/* 
  Conteúdo do card de evento.
*/
.event-card-content {
  display: flex;
  flex-direction: column;
  gap: 1rem;
}

/* 
  Descrição do evento, com limite de linhas e overflow escondido.
*/
.event-description {
  color: #6b7280;
  margin: 0;
  line-height: 1.6;
  display: -webkit-box;
  -webkit-line-clamp: 3;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

/* 
  Detalhes do evento (local, data, horário, etc).
*/
.event-details {
  display: flex;
  flex-direction: column;
  gap: 0.75rem;
}
.event-detail-item {
  display: flex;
  align-items: center;
  font-size: 0.875rem;
  color: #6b7280;
}
.event-detail-icon {
  height: 1rem;
  width: 1rem;
  margin-right: 0.5rem;
  color: #3b82f6;
  flex-shrink: 0;
}

/* 
  Ações do evento (botões de inscrição, detalhes, etc).
*/
.event-actions {
  display: flex;
  flex-direction: column;
  gap: 0.75rem;
}
@media (min-width: 640px) {
  .event-actions {
    flex-direction: row;
  }
}

/* 
  Botões de ação dos eventos.
*/
.event-btn {
  padding: 0.75rem 1.5rem;
  border-radius: 0.375rem;
  font-weight: 500;
  border: none;
  cursor: pointer;
  transition: all 0.2s ease;
  display: flex;
  align-items: center;
  justify-content: center;
  text-decoration: none;
  font-size: 0.875rem;
}
.event-btn-primary {
  background-color: #3b82f6;
  color: white;
  flex: 1;
}
.event-btn-primary:hover {
  background-color: #2563eb;
}
.event-btn-secondary {
  background-color: transparent;
  color: #3b82f6;
  border: 1px solid #3b82f6;
}
.event-btn-secondary:hover {
  background-color: #3b82f6;
  color: white;
}
.event-btn-icon {
  height: 1rem;
  width: 1rem;
  margin-right: 0.5rem;
}

/* 
  Barra de progresso de vagas do evento.
*/
.event-progress-wrapper {
  margin-top: 0.5rem;
}
.event-progress-bar {
  width: 100%;
  background-color: #e5e7eb;
  border-radius: 9999px;
  height: 0.5rem;
  overflow: hidden;
}
.event-progress-fill {
  background-color: #3b82f6;
  height: 100%;
  border-radius: 9999px;
  transition: width 0.3s ease;
}
.event-progress-text {
  font-size: 0.75rem;
  color: #6b7280;
  margin: 0.25rem 0 0 0;
}

/* 
  Seção de chamada para ação (CTA) ao final da página de eventos.
*/
.events-cta-wrapper {
  text-align: center;
}
.events-cta {
  background: linear-gradient(135deg, #3b82f6 0%, #1d4ed8 100%);
  border-radius: 1rem;
  padding: 2rem;
  color: white;
}
.events-cta-title {
  font-size: 1.875rem;
  font-weight: bold;
  margin: 0 0 1rem 0;
}
@media (min-width: 768px) {
  .events-cta-title {
    font-size: 2.25rem;
  }
}
.events-cta-description {
  font-size: 1.125rem;
  margin: 0 0 1.5rem 0;
  opacity: 0.9;
  max-width: 32rem;
  margin-left: auto;
  margin-right: auto;
  line-height: 1.6;
}
.events-cta-buttons {
  display: flex;
  flex-direction: column;
  gap: 1rem;
  justify-content: center;
  align-items: center;
}
@media (min-width: 640px) {
  .events-cta-buttons {
    flex-direction: row;
  }
}
.events-cta-btn {
  background-color: white;
  color: #3b82f6;
  padding: 0.75rem 1.5rem;
  font-weight: 600;
  border-radius: 0.375rem;
  border: none;
  cursor: pointer;
  transition: all 0.2s ease;
  text-decoration: none;
  font-size: 1rem;
}
.events-cta-btn:hover {
  background-color: #f3f4f6;
  transform: translateY(-1px);
}

/* 
  Ajustes responsivos para telas pequenas.
*/
@media (max-width: 639px) {
  .events-section {
    padding: 2rem 0 4rem;
  }
  .events-header {
    margin-bottom: 2rem;
  }
  .events-title {
    font-size: 1.875rem;
  }
  .events-subtitle {
    font-size: 1.125rem;
  }
  .event-card {
    padding: 1rem;
  }
  .events-cta {
    padding: 1.5rem;
  }
  .events-cta-title {
    font-size: 1.5rem;
  }
  .events-cta-description {
    font-size: 1rem;
  }
}

Principais características e classes

  • Layout centralizado e responsivo:
    .events-section e .events-container organizam o conteúdo em uma largura máxima, centralizando e adaptando o layout para diferentes tamanhos de tela.

  • Cabeçalho e títulos:
    .events-header, .events-title-wrapper, .events-title, .events-title-icon, .events-subtitle estilizam o topo da página, incluindo ícone, título e subtítulo, reforçando a identidade visual e a clareza das informações.

  • Grid de eventos:
    .events-grid organiza os cards de eventos em uma ou duas colunas, adaptando-se ao tamanho da tela para garantir boa visualização em dispositivos móveis e desktops.

  • Cards de evento:
    .event-card estiliza cada evento individualmente, com fundo branco, bordas arredondadas, sombra e efeito de destaque ao passar o mouse.
    .event-card-header, .event-badges-row, .event-status-badges, .event-badge, .event-card-title, .event-card-content, .event-description, .event-details, .event-detail-item, .event-detail-icon organizam e destacam as informações de cada evento, como tipo, status, descrição, local, data, horário e participantes.

  • Badges de status:
    Classes como .event-badge-workshop, .event-badge-webinar, .event-badge-acao, .event-badge-hackathon, .event-badge-free, .event-badge-online aplicam cores e estilos distintos para cada tipo de evento e status, facilitando a identificação visual.

  • Ações e botões:
    .event-actions, .event-btn, .event-btn-primary, .event-btn-secondary, .event-btn-icon estilizam os botões de inscrição, detalhes e outras ações, com cores de destaque e efeitos de interação.

  • Barra de progresso:
    .event-progress-wrapper, .event-progress-bar, .event-progress-fill, .event-progress-text exibem visualmente o preenchimento de vagas de cada evento, promovendo engajamento.

  • Seção de chamada para ação (CTA):
    .events-cta-wrapper, .events-cta, .events-cta-title, .events-cta-description, .events-cta-buttons, .events-cta-btn destacam a área para incentivar a organização de novos eventos, com visual marcante e botões de ação.

  • Responsividade:
    Media queries ajustam paddings, tamanhos de fontes, espaçamentos, grid e botões para telas menores, garantindo boa usabilidade em dispositivos móveis.

Resumo

O arquivo Eventos.css é fundamental para proporcionar uma experiência de navegação e participação em eventos agradável, acessível e alinhada ao design do Mapa da Acessibilidade. Ele garante que a página de eventos seja visualmente atraente, fácil de usar e adaptada a qualquer dispositivo, promovendo o engajamento da comunidade e a divulgação de ações inclusivas.


🖌️ | ❓ FAQ

O arquivo FAQ.css localizado em (src/pages/FAQ.css) define toda a estilização visual da página de perguntas frequentes (FAQ) do frontend do projeto Mapa da Acessibilidade.

Função e contexto

Este arquivo foi desenvolvido para garantir que a página de FAQ seja moderna, acessível, responsiva e fácil de navegar. Ele contribui diretamente para a experiência do usuário, tornando a busca por informações e esclarecimento de dúvidas mais intuitivos e visualmente alinhados à identidade do sistema.

/* Arquivo (`src/pages/FAQ.css`) */

/* 
  Seção principal da FAQ, com espaçamento vertical, fundo suave e altura mínima de tela cheia.
*/
.faq-section {
  padding: 64px 0 96px;
  background-color: #f8fafc;
  min-height: 100vh;
}

/* 
  Container centralizado e responsivo para o conteúdo da FAQ.
  Ajusta o padding conforme o tamanho da tela.
*/
.faq-container {
  max-width: 896px;
  margin: 0 auto;
  padding: 0 16px;
}
@media (min-width: 640px) {
  .faq-container {
    padding: 0 24px;
  }
}
@media (min-width: 1024px) {
  .faq-container {
    padding: 0 32px;
  }
}

/* 
  Cabeçalho da FAQ, centralizado e com espaçamento inferior.
*/
.faq-header {
  text-align: center;
  margin-bottom: 64px;
}

/* 
  Wrapper para o título e ícone do cabeçalho.
*/
.faq-title-wrapper {
  display: flex;
  align-items: center;
  justify-content: center;
  margin-bottom: 16px;
}

/* 
  Ícone do título, com cor de destaque.
*/
.faq-icon {
  height: 32px;
  width: 32px;
  color: #3b82f6;
  margin-right: 12px;
}

/* 
  Título principal da FAQ.
*/
.faq-title {
  font-size: 1.875rem;
  font-weight: 700;
  color: #1e40af;
  margin: 0;
}
@media (min-width: 768px) {
  .faq-title {
    font-size: 2.25rem;
  }
}

/* 
  Subtítulo da FAQ.
*/
.faq-subtitle {
  font-size: 1.25rem;
  color: #6b7280;
  max-width: 768px;
  margin: 0 auto;
  line-height: 1.6;
}

/* 
  Accordion de perguntas e respostas.
*/
.faq-accordion {
  display: flex;
  flex-direction: column;
  gap: 16px;
}

/* 
  Item do accordion, com fundo branco, bordas arredondadas e sombra.
*/
.faq-item {
  background-color: white;
  border-radius: 12px;
  border: 1px solid #e5e7eb;
  box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06);
  overflow: hidden;
  transition: box-shadow 0.2s ease-in-out;
}
.faq-item.active {
  box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
}

/* 
  Botão de pergunta do accordion.
*/
.faq-question {
  width: 100%;
  padding: 24px;
  text-align: left;
  background: none;
  border: none;
  cursor: pointer;
  display: flex;
  justify-content: space-between;
  align-items: center;
  transition: background-color 0.2s ease-in-out;
}
.faq-question:hover {
  background-color: #f9fafb;
}
.faq-question:focus {
  outline: 2px solid #3b82f6;
  outline-offset: -2px;
}

/* 
  Texto da pergunta.
*/
.faq-question-text {
  font-size: 1.125rem;
  font-weight: 600;
  color: #1e40af;
  margin: 0;
  padding-right: 16px;
  line-height: 1.5;
}

/* 
  Ícone de chevron para expandir/recolher a resposta.
*/
.faq-chevron {
  color: #6b7280;
  transition: transform 0.2s ease-in-out;
  flex-shrink: 0;
}
.faq-item.active .faq-chevron {
  transform: rotate(180deg);
}

/* 
  Área da resposta, com transição de altura.
*/
.faq-answer {
  max-height: 0;
  overflow: hidden;
  transition: max-height 0.3s ease-in-out;
}
.faq-answer.expanded {
  max-height: 500px;
}

/* 
  Conteúdo da resposta, com espaçamento interno.
*/
.faq-answer-content {
  padding: 0 24px 24px;
}
.faq-answer-content p {
  color: #374151;
  line-height: 1.7;
  margin: 0;
  font-size: 1rem;
}

/* 
  Seção de chamada para ação (CTA) ao final da FAQ.
*/
.faq-cta {
  text-align: center;
  margin-top: 64px;
}
.faq-cta-content {
  background-color: white;
  border-radius: 12px;
  padding: 32px;
  box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
}
.faq-cta-title {
  font-size: 1.5rem;
  font-weight: 700;
  color: #1e40af;
  margin: 0 0 16px 0;
}
.faq-cta-text {
  color: #6b7280;
  margin: 0 0 24px 0;
  font-size: 1rem;
  line-height: 1.6;
}
.faq-cta-buttons {
  display: flex;
  flex-direction: column;
  gap: 16px;
  justify-content: center;
  align-items: center;
}
@media (min-width: 640px) {
  .faq-cta-buttons {
    flex-direction: row;
  }
}
.faq-button {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding: 12px 24px;
  font-size: 1rem;
  font-weight: 600;
  border-radius: 8px;
  text-decoration: none;
  transition: all 0.2s ease-in-out;
  cursor: pointer;
  min-width: 160px;
}
.faq-button-outline {
  border: 2px solid #3b82f6;
  color: #3b82f6;
  background-color: transparent;
}
.faq-button-outline:hover {
  background-color: #3b82f6;
  color: white;
}
.faq-button-outline:focus {
  outline: 2px solid #1d4ed8;
  outline-offset: 2px;
}

/* 
  Ajustes responsivos para telas pequenas.
*/
@media (max-width: 640px) {
  .faq-section {
    padding: 48px 0 72px;
  }
  .faq-header {
    margin-bottom: 48px;
  }
  .faq-title-wrapper {
    flex-direction: column;
    gap: 8px;
  }
  .faq-icon {
    margin-right: 0;
  }
  .faq-title {
    font-size: 1.5rem;
  }
  .faq-subtitle {
    font-size: 1.125rem;
  }
  .faq-question {
    padding: 20px;
  }
  .faq-question-text {
    font-size: 1rem;
  }
  .faq-answer-content {
    padding: 0 20px 20px;
  }
  .faq-cta {
    margin-top: 48px;
  }
  .faq-cta-content {
    padding: 24px;
  }
}

/* 
  Melhoria de acessibilidade para usuários que preferem menos animações.
*/
@media (prefers-reduced-motion: reduce) {
  .faq-item,
  .faq-question,
  .faq-chevron,
  .faq-answer,
  .faq-button {
    transition: none;
  }
}

/* 
  Suporte a modo de alto contraste para acessibilidade.
*/
@media (prefers-contrast: high) {
  .faq-item {
    border: 2px solid #000;
  }
  .faq-question-text {
    color: #000;
  }
  .faq-answer-content p {
    color: #000;
  }
}

Principais características e classes

  • Layout centralizado e responsivo:
    .faq-section e .faq-container organizam o conteúdo em uma largura máxima, centralizando e adaptando o layout para diferentes tamanhos de tela.

  • Cabeçalho e títulos:
    .faq-header, .faq-title-wrapper, .faq-title, .faq-icon, .faq-subtitle estilizam o topo da página, incluindo ícone, título e subtítulo, reforçando a identidade visual e a clareza das informações.

  • Accordion de perguntas:
    .faq-accordion, .faq-item, .faq-question, .faq-answer, .faq-answer-content estruturam o sistema de perguntas e respostas em formato de acordeão, permitindo expandir e recolher cada item de forma acessível e com transições suaves.

  • Acessibilidade:
    O CSS inclui melhorias para navegação por teclado, foco visível, suporte a modo de alto contraste e redução de movimento para usuários que preferem menos animações.

  • Chamada para ação (CTA):
    .faq-cta, .faq-cta-content, .faq-cta-title, .faq-cta-text, .faq-cta-buttons, .faq-button, .faq-button-outline destacam a seção de contato ao final da página, incentivando o usuário a buscar suporte caso não encontre sua dúvida.

  • Responsividade:
    Media queries ajustam paddings, tamanhos de fontes, espaçamentos e grid para telas menores, garantindo boa usabilidade em dispositivos móveis.

Resumo

O arquivo FAQ.css é fundamental para proporcionar uma experiência de consulta de dúvidas agradável, acessível e alinhada ao design do Mapa da Acessibilidade. Ele garante que a página de FAQ seja visualmente atraente, fácil de usar e adaptada a qualquer dispositivo, promovendo autonomia e suporte eficiente aos usuários da plataforma.


🖌️ | 🏠 Home

O arquivo Home.css localizado em (src/pages/Home.css) define toda a estilização visual da página inicial do frontend do projeto Mapa da Acessibilidade.

Função e contexto

Este arquivo foi desenvolvido para garantir que a página inicial seja moderna, acessível, responsiva e visualmente atraente. Ele contribui diretamente para a experiência do usuário, tornando a navegação pelo mapa, aplicação de filtros, visualização de detalhes dos locais e interação com a interface mais intuitivas e alinhadas à identidade visual do sistema.

/* Arquivo: (src/pages/Home.css) */

/* 
  Container principal da página Home, ocupa toda a largura e altura da tela,
  esconde overflow e serve de base para o layout.
*/
.home-container {
  width: 100%;
  height: 100vh;
  overflow: hidden;
  position: relative;
}

/* 
  Conteúdo principal da Home, usa flexbox para organizar mapa e sidebar,
  ocupa toda a área disponível.
*/
.main-content {
  display: flex;
  width: 100%;
  height: 100%;
  position: relative;
}

/* Sidebar de Filtros: fundo branco, borda à direita, sombra e transição suave. */
.filters-sidebar {
  background: white;
  border-right: 1px solid #e5e7eb;
  transition: all 0.3s ease;
  z-index: 1000;
  position: relative;
  box-shadow: 2px 0 10px rgba(0, 0, 0, 0.1);
}

/* Sidebar aberta: largura padrão de 320px. */
.filters-open {
  width: 320px;
  min-width: 320px;
}

/* Sidebar fechada: largura reduzida para 60px. */
.filters-closed {
  width: 60px;
  min-width: 60px;
}

/* Cabeçalho da sidebar de filtros, com padding, borda inferior e alinhamento dos itens. */
.filters-header {
  padding: 1rem;
  border-bottom: 1px solid #e5e7eb;
  display: flex;
  justify-content: space-between;
  align-items: center;
}

/* Título da sidebar de filtros, com transição de opacidade. */
.filters-title {
  font-size: 1.25rem;
  font-weight: 600;
  color: #374151;
  margin: 0;
  transition: opacity 0.3s ease;
}

/* Esconde o título quando a sidebar está fechada. */
.filters-closed .filters-title {
  opacity: 0;
  visibility: hidden;
}

/* Botão para abrir/fechar a sidebar de filtros. */
.filters-toggle {
  background: none;
  border: none;
  cursor: pointer;
  padding: 0.5rem;
  border-radius: 0.375rem;
  transition: background-color 0.2s;
}

.filters-toggle:hover {
  background-color: #f3f4f6;
}

/* Conteúdo da sidebar de filtros, com rolagem vertical e transição de opacidade. */
.filters-content {
  padding: 1rem;
  overflow-y: auto;
  height: calc(100vh - 80px);
  transition: opacity 0.3s ease;
}

/* Esconde o conteúdo quando a sidebar está fechada. */
.filters-closed .filters-content {
  opacity: 0;
  visibility: hidden;
}

/* Seção de filtros, com espaçamento inferior. */
.filter-section {
  margin-bottom: 2rem;
}

/* Título de cada seção de filtro, com ícone, fonte destacada e linha inferior. */
.filter-section-title {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  font-size: 1rem;
  font-weight: 600;
  color: #374151;
  margin-bottom: 1rem;
  padding-bottom: 0.5rem;
  border-bottom: 1px solid #e5e7eb;
}

/* Item de filtro, alinhando checkbox e label. */
.filter-item {
  display: flex;
  align-items: center;
  margin-bottom: 0.75rem;
}

/* Checkbox do filtro, com espaçamento à direita. */
.filter-checkbox {
  margin-right: 0.75rem;
  width: 1rem;
  height: 1rem;
}

/* Label do filtro, com ícone e fonte menor. */
.filter-label {
  display: flex;
  align-items: center;
  font-size: 0.875rem;
  color: #374151;
  cursor: pointer;
  gap: 0.5rem;
}

/* Ícone do filtro, com variações de cor para cada tipo. */
.filter-icon {
  width: 1rem;
  height: 1rem;
}

.filter-icon-blue { color: #3b82f6; }
.filter-icon-green { color: #10b981; }
.filter-icon-yellow { color: #f59e0b; }
.filter-icon-purple { color: #8b5cf6; }
.filter-icon-orange { color: #f97316; }

/* Seção de Distância */
.distance-section {
  margin-bottom: 2rem;
}

.distance-container {
  padding: 1rem;
  background-color: #f9fafb;
  border-radius: 0.5rem;
}

.distance-label {
  font-weight: 600;
  color: #374151;
  display: block;
  margin-bottom: 1rem;
}

.distance-slider-container {
  margin-bottom: 0.5rem;
}

.distance-slider {
  width: 100%;
  height: 0.5rem;
  background: #d1d5db;
  outline: none;
  border-radius: 0.25rem;
  cursor: pointer;
}

.distance-markers {
  display: flex;
  justify-content: space-between;
  font-size: 0.75rem;
  color: #6b7280;
}

/* Seção de Avaliação */
.rating-section {
  margin-bottom: 2rem;
}

.rating-container {
  padding: 1rem;
  background-color: #f9fafb;
  border-radius: 0.5rem;
}

.rating-label {
  font-weight: 600;
  color: #374151;
  display: block;
  margin-bottom: 1rem;
}

.rating-options {
  display: flex;
  flex-direction: column;
  gap: 0.75rem;
}

.rating-item {
  display: flex;
  align-items: center;
}

.rating-radio {
  margin-right: 0.75rem;
}

.rating-option-label {
  display: flex;
  align-items: center;
  font-size: 0.875rem;
  color: #374151;
  cursor: pointer;
}

.stars-container {
  display: flex;
  margin-right: 0.5rem;
}

.star {
  width: 1rem;
  height: 1rem;
  margin-right: 0.125rem;
}

.star-filled {
  color: #fbbf24;
}

.star-empty {
  color: #d1d5db;
}

/* Botão Aplicar Filtros */
.apply-filters-section {
  margin-top: 2rem;
}

.apply-filters-btn {
  width: 100%;
  background-color: #3b82f6;
  color: white;
  border: none;
  padding: 0.75rem 1rem;
  border-radius: 0.5rem;
  font-weight: 600;
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
  transition: background-color 0.2s;
}

.apply-filters-btn:hover {
  background-color: #2563eb;
}

.btn-icon {
  margin-right: 0.5rem;
}

/* Container do Mapa com Pesquisa */
.map-container {
  flex: 1;
  position: relative;
  transition: all 0.3s ease;
  display: flex;
  flex-direction: column;
}

.map-with-sidebar {
  width: calc(100% - 320px);
}

/* Barra de Pesquisa */
.search-container {
  position: absolute;
  top: 1rem;
  left: 1rem;
  right: 1rem;
  z-index: 1000;
}

.search-bar {
  display: flex;
  align-items: center;
  background: white;
  border-radius: 0.5rem;
  box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
  border: 1px solid #e5e7eb;
  overflow: hidden;
}

.search-icon {
  margin-left: 1rem;
  color: #6b7280;
  flex-shrink: 0;
}

.search-input {
  flex: 1;
  padding: 0.75rem 1rem;
  border: none;
  outline: none;
  font-size: 0.875rem;
  color: #374151;
}

.search-input::placeholder {
  color: #9ca3af;
}

.search-filters-btn {
  padding: 0.75rem 1rem;
  background: none;
  border: none;
  color: #6b7280;
  cursor: pointer;
  transition: background-color 0.2s;
  border-left: 1px solid #e5e7eb;
}

.search-filters-btn:hover {
  background-color: #f9fafb;
  color: #374151;
}

.leaflet-map {
  height: 100%;
  width: 100%;
  flex: 1;
}

/* Drawer de Informações */
.info-drawer {
  position: fixed;
  top: 0;
  right: 0;
  height: 100vh;
  background: white;
  border-left: 1px solid #e5e7eb;
  z-index: 1001;
  transition: transform 0.3s ease;
  box-shadow: -2px 0 10px rgba(0, 0, 0, 0.1);
  width: 400px;
  overflow-y: auto;
}

.drawer-open {
  transform: translateX(0);
}

.drawer-closed {
  transform: translateX(100%);
}

.drawer-content {
  padding: 1.5rem;
}

.drawer-header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin-bottom: 1.5rem;
  padding-bottom: 1rem;
  border-bottom: 1px solid #e5e7eb;
}

.drawer-title {
  font-size: 1.5rem;
  font-weight: 700;
  color: #111827;
  margin: 0;
}

.drawer-close-btn {
  background: none;
  border: none;
  cursor: pointer;
  padding: 0.5rem;
  border-radius: 0.375rem;
  transition: background-color 0.2s;
}

.drawer-close-btn:hover {
  background-color: #f3f4f6;
}

/* Avaliação */
.rating-display {
  display: flex;
  align-items: center;
  margin-bottom: 1.5rem;
}

.stars-rating {
  position: relative;
  display: flex;
  margin-right: 0.75rem;
}

.stars-background,
.stars-foreground {
  display: flex;
}

.stars-background {
  color: #d1d5db;
}

.stars-foreground {
  position: absolute;
  top: 0;
  left: 0;
  overflow: hidden;
  color: #fbbf24;
}

.rating-text {
  font-size: 0.875rem;
  color: #6b7280;
}

/* Score de Acessibilidade */
.accessibility-score {
  margin-bottom: 1.5rem;
  padding: 1rem;
  background-color: #f0f9ff;
  border-radius: 0.5rem;
  border: 1px solid #e0f2fe;
}

.accessibility-header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin-bottom: 0.5rem;
  font-weight: 600;
  color: #0369a1;
}

.score {
  font-size: 1.125rem;
  font-weight: 700;
}

.accessibility-bar {
  width: 100%;
  height: 0.5rem;
  background-color: #e0f2fe;
  border-radius: 0.25rem;
  overflow: hidden;
}

.accessibility-fill {
  height: 100%;
  background: linear-gradient(to right, #f59e0b, #10b981);
  transition: width 0.3s ease;
}

/* Lista de Features */
.features-list {
  display: flex;
  flex-wrap: wrap;
  gap: 0.5rem;
  margin-bottom: 1.5rem;
}

.feature-tag {
  display: flex;
  align-items: center;
  padding: 0.375rem 0.75rem;
  border-radius: 9999px;
  font-size: 0.75rem;
  font-weight: 500;
}

.feature-icon {
  width: 1rem;
  height: 1rem;
  margin-right: 0.375rem;
}

.feature-ramp {
  background-color: #dbeafe;
  color: #1e40af;
}

.feature-bathroom {
  background-color: #dcfce7;
  color: #166534;
}

.feature-tactile {
  background-color: #fef3c7;
  color: #92400e;
}

.feature-elevator {
  background-color: #ede9fe;
  color: #6b21a8;
}

.feature-default {
  background-color: #f3f4f6;
  color: #374151;
}

/* Seções de Informações */
.info-sections {
  margin-bottom: 1.5rem;
}

.info-item {
  display: flex;
  align-items: flex-start;
  margin-bottom: 1rem;
  padding: 1rem;
  background-color: #f9fafb;
  border-radius: 0.5rem;
}

.info-icon {
  width: 2.5rem;
  height: 2.5rem;
  border-radius: 0.5rem;
  display: flex;
  align-items: center;
  justify-content: center;
  margin-right: 0.75rem;
  flex-shrink: 0;
}

.info-icon-blue {
  background-color: #dbeafe;
  color: #1e40af;
}

.info-icon-green {
  background-color: #dcfce7;
  color: #166534;
}

.info-icon-purple {
  background-color: #ede9fe;
  color: #6b21a8;
}

.info-text {
  flex: 1;
}

.info-title {
  font-weight: 600;
  color: #111827;
  margin: 0 0 0.25rem 0;
}

.info-subtitle {
  color: #6b7280;
  font-size: 0.875rem;
  margin: 0.125rem 0;
}

/* Seção de Descrição */
.description-section {
  margin-bottom: 1.5rem;
}

.section-title {
  font-size: 1.125rem;
  font-weight: 600;
  color: #111827;
  margin: 0 0 0.75rem 0;
}

.description-text {
  color: #4b5563;
  line-height: 1.6;
  margin: 0;
}

/* Seção de Fotos */
.photos-section {
  margin-bottom: 1.5rem;
}

.photos-grid {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 0.5rem;
}

.photo-item {
  aspect-ratio: 1;
  overflow: hidden;
  border-radius: 0.5rem;
}

.photo-image {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform 0.2s;
}

.photo-image:hover {
  transform: scale(1.05);
}

/* Botões de Ação */
.action-buttons {
  display: flex;
  gap: 0.75rem;
}

.action-btn {
  flex: 1;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 0.75rem 1rem;
  border-radius: 0.5rem;
  font-weight: 600;
  cursor: pointer;
  transition: all 0.2s;
  border: none;
}

.action-btn-primary {
  background-color: #3b82f6;
  color: white;
}

.action-btn-primary:hover {
  background-color: #2563eb;
}

.action-btn-secondary {
  background-color: white;
  color: #374151;
  border: 1px solid #d1d5db;
}

.action-btn-secondary:hover {
  background-color: #f9fafb;
}

/* Features adicionais */
.feature-wheelchair {
  background-color: #dbeafe;
  color: #1e40af;
}

.feature-audio {
  background-color: #fef3c7;
  color: #92400e;
}

.feature-braille {
  background-color: #fed7aa;
  color: #c2410c;
}

/* Responsividade para telas menores */
@media (max-width: 768px) {
  .filters-sidebar {
    position: fixed;
    left: 0;
    top: 0;
    height: 100vh;
    z-index: 1002;
  }

  .filters-closed {
    transform: translateX(-100%);
    width: 320px;
  }

  .map-container {
    width: 100% !important;
  }

  .search-container {
    left: 0.5rem;
    right: 0.5rem;
  }

  .info-drawer {
    width: 100%;
    max-width: 400px;
  }

  .photos-grid {
    grid-template-columns: 1fr;
  }

  .action-buttons {
    flex-direction: column;
  }
}

@media (max-width: 480px) {
  .drawer-content {
    padding: 1rem;
  }

  .drawer-title {
    font-size: 1.25rem;
  }

  .info-item {
    padding: 0.75rem;
  }

  .filters-content {
    padding: 0.75rem;
  }

  .search-bar {
    border-radius: 0.375rem;
  }

  .search-input {
    padding: 0.625rem 0.75rem;
    font-size: 0.75rem;
  }

  .search-filters-btn {
    padding: 0.625rem 0.75rem;
  }
}

Principais características e classes

  • Layout principal e responsivo:
    .home-container e .main-content organizam o layout em tela cheia, centralizando o conteúdo e adaptando para diferentes tamanhos de dispositivo.

  • Sidebar de filtros:
    .filters-sidebar, .filters-open, .filters-closed, .filters-header, .filters-title, .filters-toggle, .filters-content controlam a exibição, animação e responsividade da barra lateral de filtros, permitindo ao usuário filtrar locais por recursos de acessibilidade, distância e avaliação.

  • Seções de filtro:
    .filter-section, .filter-section-title, .filter-item, .filter-checkbox, .filter-label, .filter-icon e variantes de cor organizam e destacam os diferentes tipos de filtros disponíveis.

  • Filtros de distância e avaliação:
    .distance-section, .distance-container, .distance-label, .distance-slider, .distance-markers, .rating-section, .rating-container, .rating-label, .rating-options, .stars-container, .star-filled, .star-empty estilizam os controles de distância e avaliação mínima.

  • Botão de aplicar filtros:
    .apply-filters-section, .apply-filters-btn, .btn-icon garantem destaque e acessibilidade ao botão de aplicação dos filtros.

  • Mapa interativo:
    .map-container, .map-with-sidebar, .leaflet-map controlam o posicionamento e responsividade do mapa exibido na página.

  • Barra de pesquisa:
    .search-container, .search-bar, .search-icon, .search-input, .search-filters-btn estilizam a barra de busca, tornando-a acessível e integrada ao layout.

  • Drawer de informações:
    .info-drawer, .drawer-open, .drawer-closed, .drawer-content, .drawer-header, .drawer-title, .drawer-close-btn controlam a exibição do painel lateral com detalhes do local selecionado no mapa.

  • Avaliação e score de acessibilidade:
    .rating-display, .stars-rating, .stars-background, .stars-foreground, .rating-text, .accessibility-score, .accessibility-header, .score, .accessibility-bar, .accessibility-fill exibem avaliações e indicadores visuais de acessibilidade dos locais.

  • Lista de features e informações:
    .features-list, .feature-tag, .feature-icon, .feature-ramp, .feature-bathroom, .feature-tactile, .feature-elevator, .feature-default, .info-sections, .info-item, .info-icon, .info-title, .info-subtitle organizam e destacam os recursos de acessibilidade e informações detalhadas dos locais.

  • Seção de fotos:
    .photos-section, .photos-grid, .photo-item, .photo-image organizam a exibição de imagens dos locais, com responsividade e efeito de destaque ao passar o mouse.

  • Botões de ação:
    .action-buttons, .action-btn, .action-btn-primary, .action-btn-secondary estilizam os botões para ações rápidas, como traçar rota ou avaliar local.

  • Responsividade:
    Media queries garantem que todos os elementos se adaptem a diferentes tamanhos de tela, tornando a experiência fluida em dispositivos móveis e desktops.

Resumo

O arquivo Home.css é fundamental para proporcionar uma experiência de navegação, busca e visualização de locais acessíveis agradável, acessível e alinhada ao design do Mapa da Acessibilidade. Ele garante que a página inicial seja visualmente atraente, fácil de usar e adaptada a qualquer dispositivo, promovendo a inclusão e a colaboração entre os usuários da plataforma.


🖌️ | 🔑 Login

O arquivo Login.css localizado em (src/pages/Login.css) define toda a estilização visual da página de login do frontend do projeto Mapa da Acessibilidade.

Função e contexto

Este arquivo foi desenvolvido para garantir que a página de login seja moderna, acessível, responsiva e agradável de usar. Ele contribui diretamente para a experiência do usuário, tornando o processo de autenticação mais intuitivo, seguro e visualmente alinhado à identidade do sistema.

/* Arquivo: (`src/pages/Login.css`)  */

/* 
  Container principal da página de login.
  Centraliza o conteúdo vertical e horizontalmente, ocupa toda a altura da tela,
  aplica fundo suave e padding responsivo.
*/
.login-container {
  min-height: 100vh;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 3rem 1rem;
  background: #f8fafc;
}

/* 
  Cartão principal do formulário de login.
  Fundo branco, bordas arredondadas, sombra e largura máxima para boa leitura.
*/
.login-card {
  width: 100%;
  max-width: 28rem;
  background: white;
  border-radius: 1rem;
  box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
  padding: 2rem;
}

/* 
  Cabeçalho do formulário de login, centralizado.
*/
.login-header {
  text-align: center;
  margin-bottom: 2rem;
}

/* 
  Ícone ilustrativo do topo do formulário de login.
*/
.login-icon {
  width: 5rem;
  height: 5rem;
  margin: 0 auto 1rem;
  background: #dbeafe;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  color: #2563eb;
}

.login-icon svg {
  width: 2.5rem;
  height: 2.5rem;
}

/* 
  Título e subtítulo do formulário de login.
*/
.login-title {
  font-size: 1.875rem;
  font-weight: 700;
  color: #1f2937;
  margin-bottom: 0.5rem;
}

.login-subtitle {
  color: #6b7280;
  font-size: 0.875rem;
}

/* 
  Link para cadastro ou outras páginas, com cor de destaque e efeito hover.
*/
.login-link {
  color: #2563eb;
  font-weight: 500;
  text-decoration: none;
  transition: color 0.2s;
}

.login-link:hover {
  color: #1d4ed8;
}

/* 
  Formulário de login, com espaçamento entre os campos.
*/
.login-form {
  display: flex;
  flex-direction: column;
  gap: 1.5rem;
}

/* 
  Grupo de campos do formulário.
*/
.form-group {
  display: flex;
  flex-direction: column;
}

/* 
  Wrapper para campos de entrada com ícones.
*/
.input-wrapper {
  position: relative;
  display: flex;
  align-items: center;
}

/* 
  Ícone à esquerda do campo de entrada.
*/
.input-icon {
  position: absolute;
  left: 0.75rem;
  width: 1.25rem;
  height: 1.25rem;
  color: #9ca3af;
  z-index: 10;
}

/* 
  Campo de entrada principal.
*/
.form-input {
  width: 100%;
  padding: 0.875rem 0.75rem 0.875rem 2.75rem;
  border: 1px solid #d1d5db;
  border-radius: 0.5rem;
  font-size: 1rem;
  transition: all 0.2s;
  background: white;
}

/* 
  Destaque ao focar no campo de entrada.
*/
.form-input:focus {
  outline: none;
  border-color: #2563eb;
  box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.1);
}

.form-input::placeholder {
  color: #9ca3af;
}

/* 
  Ícone à direita do campo de entrada (ex: mostrar senha).
*/
.input-flag {
  position: absolute;
  right: 2.5rem;
  font-size: 1rem;
}

/* 
  Botão para alternar exibição da senha.
*/
.toggle-password {
  position: absolute;
  right: 0.75rem;
  background: none;
  border: none;
  cursor: pointer;
  color: #9ca3af;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 0.25rem;
  border-radius: 0.25rem;
  transition: color 0.2s;
}

.toggle-password:hover {
  color: #2563eb;
}

.toggle-password svg {
  width: 1.25rem;
  height: 1.25rem;
}

/* 
  Opções de login (lembrar de mim e esqueci a senha).
*/
.login-options {
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin-top: -0.5rem;
}

/* 
  Wrapper para checkbox de "lembrar de mim".
*/
.checkbox-wrapper {
  display: flex;
  align-items: center;
  gap: 0.5rem;
}

.checkbox {
  width: 1rem;
  height: 1rem;
  accent-color: #2563eb;
}

.checkbox-label {
  font-size: 0.875rem;
  color: #4b5563;
  cursor: pointer;
}

/* 
  Link para recuperação de senha.
*/
.forgot-password {
  font-size: 0.875rem;
  color: #2563eb;
  text-decoration: none;
  font-weight: 500;
  transition: color 0.2s;
}

.forgot-password:hover {
  color: #1d4ed8;
}

/* 
  Botão principal de login.
*/
.login-button {
  width: 100%;
  padding: 0.875rem 1rem;
  background: #2563eb;
  color: white;
  border: none;
  border-radius: 0.5rem;
  font-size: 1rem;
  font-weight: 600;
  cursor: pointer;
  transition: all 0.2s;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 0.5rem;
  margin-top: 0.5rem;
}

.login-button:hover {
  background: #1d4ed8;
  transform: translateY(-1px);
  box-shadow: 0 4px 12px -2px rgba(37, 99, 235, 0.25);
}

.login-button svg {
  width: 1.25rem;
  height: 1.25rem;
}

/* 
  Divisor visual entre login tradicional e social.
*/
.divider {
  margin: 2rem 0 1.5rem;
  position: relative;
  text-align: center;
}

.divider::before {
  content: '';
  position: absolute;
  top: 50%;
  left: 0;
  right: 0;
  height: 1px;
  background: #e5e7eb;
  z-index: 1;
}

.divider span {
  background: white;
  padding: 0 1rem;
  color: #6b7280;
  font-size: 0.875rem;
  position: relative;
  z-index: 2;
}

/* 
  Botões de login social (Facebook, Google, Apple).
*/
.social-buttons {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 0.75rem;
}

.social-button {
  padding: 0.75rem;
  border: 1px solid #e5e7eb;
  background: white;
  border-radius: 0.5rem;
  cursor: pointer;
  transition: all 0.2s;
  display: flex;
  align-items: center;
  justify-content: center;
}

.social-button:hover {
  border-color: #d1d5db;
  transform: translateY(-1px);
  box-shadow: 0 4px 12px -2px rgba(0, 0, 0, 0.1);
}

.social-button svg {
  width: 1.25rem;
  height: 1.25rem;
}

.social-button.facebook svg {
  color: #1877f2;
}

.social-button.google svg {
  color: #ea4335;
}

.social-button.apple svg {
  color: #000000;
}

/* 
  Responsividade para telas pequenas.
*/
@media (max-width: 640px) {
  .login-container {
    padding: 1rem;
  }

  .login-card {
    padding: 1.5rem;
  }

  .login-title {
    font-size: 1.5rem;
  }

  .login-options {
    flex-direction: column;
    gap: 1rem;
    align-items: flex-start;
  }
}

Principais características e classes

  • Layout centralizado e responsivo:
    .login-container centraliza o formulário vertical e horizontalmente, ocupando toda a altura da tela, com fundo suave e padding adaptativo para diferentes tamanhos de dispositivo.

  • Cartão de login:
    .login-card define o bloco principal do formulário, com fundo branco, bordas arredondadas, sombra para destaque e largura máxima para boa leitura em qualquer tela.

  • Cabeçalho e ícone:
    .login-header, .login-icon, .login-title, .login-subtitle estilizam o topo do formulário, incluindo ícone ilustrativo, título e subtítulo, reforçando a identidade visual.

  • Campos de formulário:
    .form-group, .input-wrapper, .form-input, .input-icon, .toggle-password organizam e estilizam os campos de entrada, garantindo espaçamento, ícones alinhados, feedback visual ao focar e botões para exibir/ocultar senha.

  • Opções de login:
    .login-options, .checkbox-wrapper, .checkbox, .checkbox-label, .forgot-password garantem alinhamento, legibilidade e acessibilidade para opções como "Lembrar de mim" e recuperação de senha.

  • Botão de login:
    .login-button estiliza o botão principal, com cor de destaque, bordas arredondadas, fonte em negrito e efeito hover para melhor interação.

  • Divisor e login social:
    .divider, .social-buttons, .social-button organizam a separação entre login tradicional e social, com botões para Facebook, Google e Apple, cada um com cor e ícone característicos.

  • Links e navegação:
    .login-link estiliza links para cadastro e outras páginas, com cor de destaque e efeito hover.

  • Responsividade:
    Media queries ajustam paddings, tamanhos de ícones e fontes para telas menores, garantindo boa usabilidade em dispositivos móveis.

Resumo

O arquivo Login.css é essencial para proporcionar uma experiência de autenticação agradável, acessível e alinhada ao design do Mapa da Acessibilidade. Ele garante que o formulário de login seja visualmente atraente, fácil de usar e adaptado a qualquer dispositivo, contribuindo para a segurança e o engajamento dos usuários na plataforma.


🖌️ | 👤 Sobre

O arquivo Sobre.css localizado em src/pages/Sobre.css define toda a estilização visual da página "Sobre" do frontend do projeto Mapa da Acessibilidade.

Função e contexto

Este arquivo foi desenvolvido para garantir que a página "Sobre" seja moderna, acessível, responsiva e transmita profissionalismo e identidade visual. Ele contribui diretamente para a experiência do usuário, tornando a apresentação da missão, objetivos, equipe e documentação técnica mais clara, envolvente e alinhada ao propósito do sistema.

/* 
  Container principal da página Sobre.
  Centraliza o conteúdo, define largura máxima e espaçamento entre seções.
*/
.about-container {
  max-width: 1200px;
  margin: 0 auto;
  padding: 1rem 2rem;
  display: flex;
  flex-direction: column;
  gap: 4rem;
}

/* 
  Seção Hero (destaque inicial da página).
  Usa grid para alinhar texto e imagem lado a lado.
*/
.hero-section {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 2rem;
  align-items: center;
}

/* 
  Conteúdo textual da seção Hero.
  Organiza elementos em coluna e com espaçamento.
*/
.hero-content {
  display: flex;
  flex-direction: column;
  gap: 1rem;
}

/* 
  Badge de missão, com gradiente e destaque visual.
*/
.mission-badge {
  display: inline-flex;
  align-items: center;
  background: linear-gradient(135deg, #dbeafe, #e0f2fe);
  color: #1d4ed8;
  font-weight: 600;
  padding: 0.5rem 0.75rem;
  border-radius: 9999px;
  font-size: 0.875rem;
  width: fit-content;
  gap: 0.5rem;
}

/* 
  Título principal da Hero Section, com gradiente animado no texto.
*/
.hero-title {
  font-size: 3rem;
  font-weight: bold;
  color: #1f2937;
  background: linear-gradient(135deg, #2563eb, #16a34a, #059669);
  background-size: 200% 200%;
  -webkit-background-clip: text;
  background-clip: text;
  -webkit-text-fill-color: transparent;
  animation: gradient-shift 3s ease infinite;
  line-height: 1.1;
}

/* 
  Animação para o gradiente do título.
*/
@keyframes gradient-shift {
  0% { background-position: 0% 50%; }
  50% { background-position: 100% 50%; }
  100% { background-position: 0% 50%; }
}

/* 
  Descrição da missão, com cor suave e espaçamento.
*/
.hero-description {
  font-size: 1.125rem;
  color: #6b7280;
  line-height: 1.6;
}

/* 
  Imagem da Hero Section, com borda arredondada e sombra.
*/
.hero-image img {
  border-radius: 0.75rem;
  box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1);
  width: 100%;
  height: auto;
  object-fit: cover;
}

/* 
  Seção de funcionalidades e objetivos, usando grid responsivo.
*/
.features-section {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
  gap: 1.5rem;
}

/* 
  Card genérico para funcionalidades, objetivos, etc.
*/
.card {
  border-radius: 0.5rem;
  border: 1px solid #e5e7eb;
  background: #ffffff;
  box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1);
  transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}

/* 
  Conteúdo interno do card.
*/
.card-content {
  padding: 1.5rem;
}

/* 
  Efeito de destaque ao passar o mouse no card de funcionalidade.
*/
.feature-card:hover {
  box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1);
  transform: translateY(-2px);
}

/* 
  Título do card de funcionalidade.
*/
.feature-title {
  font-size: 1.25rem;
  font-weight: 600;
  color: #1f2937;
  margin-bottom: 0.75rem;
}

/* 
  Descrição do card de funcionalidade.
*/
.feature-description {
  color: #6b7280;
  line-height: 1.5;
}

/* 
  Lista de funcionalidades, com marcadores e espaçamento.
*/
.feature-list {
  list-style-type: disc;
  list-style-position: inside;
  color: #6b7280;
  display: flex;
  flex-direction: column;
  gap: 0.25rem;
}

/* 
  Seção da equipe, centralizada.
*/
.team-section {
  text-align: center;
}

/* 
  Título da seção de equipe.
*/
.team-title {
  font-size: 1.875rem;
  font-weight: bold;
  color: #1f2937;
  margin-bottom: 2rem;
}

/* 
  Carrossel de membros da equipe.
*/
.carousel {
  position: relative;
  width: 100%;
  max-width: 64rem;
  margin: 0 auto;
}

.carousel-content {
  overflow: hidden;
  border-radius: 0.5rem;
}

.carousel-track {
  display: flex;
  transition: transform 0.3s ease-in-out;
}

.carousel-item {
  flex: 0 0 33.333%;
  padding: 0.25rem;
}

/* 
  Botões de navegação do carrossel.
*/
.carousel-btn {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  width: 2rem;
  height: 2rem;
  border-radius: 50%;
  border: 1px solid #d1d5db;
  background: #ffffff;
  color: #374151;
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  transition: all 0.2s;
  z-index: 10;
}

.carousel-btn:hover {
  background: #f3f4f6;
  border-color: #9ca3af;
}

.carousel-btn:disabled {
  opacity: 0.5;
  cursor: not-allowed;
}

.carousel-prev {
  left: -3rem;
}

.carousel-next {
  right: -3rem;
}

/* 
  Card de membro da equipe, com efeito de destaque ao passar o mouse.
*/
.team-member-card {
  text-align: center;
  transition: all 0.3s;
}

.team-member-card:hover {
  box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1);
  transform: scale(1.05) translateY(-2px);
}

/* 
  Avatar do membro da equipe, com gradiente, borda e animação.
*/
.member-avatar {
  margin: 0 auto 1rem;
  height: 6rem;
  width: 6rem;
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: 50%;
  background: linear-gradient(to bottom right, #dbeafe, #dcfce7);
  border: 4px solid #ffffff;
  box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);
  position: relative;
  overflow: hidden;
}

.member-avatar::before {
  content: '';
  position: absolute;
  top: -2px;
  left: -2px;
  right: -2px;
  bottom: -2px;
  background: linear-gradient(45deg, #3b82f6, #10b981, #3b82f6);
  border-radius: 50%;
  z-index: -1;
  animation: rotate 3s linear infinite;
}

/* 
  Animação de rotação para o gradiente do avatar.
*/
@keyframes rotate {
  0% { transform: rotate(0deg); }
  100% { transform: rotate(360deg); }
}

/* 
  Iniciais do membro da equipe no avatar.
*/
.member-initials {
  font-size: 1.875rem;
  font-weight: bold;
  color: #1d4ed8;
}

/* 
  Nome do membro da equipe.
*/
.member-name {
  font-size: 1.25rem;
  font-weight: 600;
  color: #1f2937;
  margin-bottom: 0.25rem;
}

/* 
  Função do membro da equipe.
*/
.member-role {
  font-size: 0.875rem;
  color: #6b7280;
}

/* 
  Seção de documentação técnica, com destaque visual.
*/
.documentation-section {
  background: #ffffff;
  border-radius: 0.75rem;
  box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1);
  padding: 2rem;
  text-align: center;
  transition: all 0.3s;
}

.documentation-section:hover {
  box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
  transform: translateY(-4px);
}

.documentation-content {
  display: flex;
  flex-direction: column;
  align-items: center;
}

.documentation-icon {
  background: #dbeafe;
  padding: 1rem;
  border-radius: 50%;
  margin-bottom: 1rem;
  color: #2563eb;
}

.documentation-title {
  font-size: 1.5rem;
  font-weight: bold;
  color: #1f2937;
  margin-bottom: 1rem;
}

.documentation-description {
  color: #6b7280;
  margin-bottom: 1.5rem;
  max-width: 32rem;
  margin-left: auto;
  margin-right: auto;
  line-height: 1.6;
}

/* 
  Botão customizado para ações e navegação.
*/
.button {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 0.5rem;
  white-space: nowrap;
  border-radius: 0.375rem;
  font-size: 0.875rem;
  font-weight: 500;
  transition: all 0.2s;
  cursor: pointer;
  text-decoration: none;
  border: none;
  padding: 0.5rem 2rem;
  height: 2.75rem;
  background: #2563eb;
  color: #ffffff;
}

.button:hover {
  background: linear-gradient(135deg, #1d4ed8, #2563eb);
  transform: translateY(-1px);
  box-shadow: 0 4px 12px rgba(37, 99, 235, 0.4);
}

.button:focus {
  outline: 2px solid transparent;
  outline-offset: 2px;
  box-shadow: 0 0 0 2px #3b82f6;
}

/* 
  Responsividade para tablets e celulares.
*/
@media (max-width: 1024px) {
  .hero-section {
    grid-template-columns: 1fr;
    gap: 2rem;
  }

  .carousel-item {
    flex: 0 0 50%;
  }

  .carousel-prev {
    left: -2rem;
  }

  .carousel-next {
    right: -2rem;
  }
}

@media (max-width: 768px) {
  .about-container {
    padding: 1rem;
    gap: 2rem;
  }

  .hero-title {
    font-size: 2rem;
  }

  .features-section {
    grid-template-columns: 1fr;
  }

  .carousel-item {
    flex: 0 0 100%;
  }

  .carousel-prev {
    left: -1rem;
  }

  .carousel-next {
    right: -1rem;
  }
}

@media (max-width: 640px) {
  .about-container {
    padding: 0.5rem;
  }

  .documentation-section {
    padding: 1.5rem;
  }

  .carousel-btn {
    width: 1.5rem;
    height: 1.5rem;
  }

  .carousel-prev {
    left: -0.5rem;
  }

  .carousel-next {
    right: -0.5rem;
  }
}

/* 
  Utilitários para transições suaves.
*/
.transition-all {
  transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}

.transition-shadow {
  transition: box-shadow 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}

/* 
  Estados de foco aprimorados para acessibilidade.
*/
.button:focus,
.carousel-btn:focus {
  outline: 2px solid #3b82f6;
  outline-offset: 2px;
}

/* 
  Reduz animações para usuários que preferem menos movimento.
*/
@media (prefers-reduced-motion: reduce) {
  .carousel-track,
  .card,
  .button,
  .member-avatar::before {
    transition: none;
    animation: none;
  }
}
Principais características e classes

  • Layout centralizado e responsivo:
    .about-container organiza o conteúdo em uma largura máxima, centralizando e adaptando o layout para diferentes tamanhos de tela.

  • Seção Hero (Missão):
    .hero-section, .hero-content, .mission-badge, .hero-title, .hero-description, .hero-image estruturam a apresentação da missão do projeto, com destaque visual para o título, badge de missão e imagem ilustrativa.

  • Cards de Objetivos e Funcionalidades:
    .features-section, .card, .card-content, .feature-card, .feature-title, .feature-description, .feature-list organizam os objetivos, motivações e funcionalidades do sistema em cards claros e interativos.

  • Equipe:
    .team-section, .team-title, .carousel, .carousel-content, .carousel-track, .carousel-item, .carousel-btn, .team-member-card, .member-avatar, .member-initials, .member-name, .member-role apresentam os membros do time em um carrossel interativo, com destaque para avatar, nome e função.

  • Seção de Documentação Técnica:
    .documentation-section, .documentation-content, .documentation-icon, .documentation-title, .documentation-description, .button destacam o convite para acessar a documentação técnica, com botão de ação estilizado.

  • Componentes reutilizáveis e utilitários:
    Classes como .transition-all, .transition-shadow e estados de foco aprimorados garantem transições suaves e acessibilidade.

  • Responsividade:
    Media queries ajustam grid, paddings, tamanhos de fontes, espaçamentos e botões para telas menores, garantindo boa usabilidade em dispositivos móveis.

  • Acessibilidade:
    Foco aprimorado em botões e carrossel, além de suporte a usuários que preferem menos animações (prefers-reduced-motion).

Resumo

O arquivo Sobre.css é fundamental para proporcionar uma experiência institucional agradável, acessível e alinhada ao design do Mapa da Acessibilidade. Ele garante que a página "Sobre" seja visualmente atraente, transmita confiança e profissionalismo, e seja adaptada a qualquer dispositivo, promovendo o engajamento de novos usuários, colaboradores e desenvolvedores interessados no projeto.