From 9a6e783252bf220a1baf5484b007dceba9b510ed Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 16 Dec 2025 22:27:39 +0000 Subject: [PATCH 1/5] Initial plan From 01ce47f999e945061c273064eb6c88d3b8a25989 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 16 Dec 2025 22:30:46 +0000 Subject: [PATCH 2/5] Add comprehensive README.md for BrainBridge project Co-authored-by: Carolpm28 <129198772+Carolpm28@users.noreply.github.com> --- README.md | 687 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 687 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..e2a75cf --- /dev/null +++ b/README.md @@ -0,0 +1,687 @@ +# 🧠 BrainBridge - Jogo de Memória Acessível e Cooperativo + +![WCAG 2.1 AA](https://img.shields.io/badge/WCAG-2.1%20AA-blue) +![License](https://img.shields.io/badge/license-ISC-green) +![Node.js](https://img.shields.io/badge/Node.js-v18+-brightgreen) +![React](https://img.shields.io/badge/React-18-blue) + +**BrainBridge** é um jogo de memória inovador desenvolvido com foco total em **acessibilidade web**, seguindo as diretrizes **WCAG 2.1 AA**. O projeto oferece dois modos de jogo (Individual e Cooperativo) com 8 níveis progressivos de dificuldade, sistema de autenticação, rankings e estatísticas detalhadas. + +--- + +## 📋 Índice + +- [Características](#-características) +- [Tecnologias Utilizadas](#-tecnologias-utilizadas) +- [Pré-requisitos](#-pré-requisitos) +- [Instalação](#-instalação) +- [Configuração](#-configuração) +- [Como Executar](#-como-executar) +- [Estrutura do Projeto](#-estrutura-do-projeto) +- [Acessibilidade](#-acessibilidade) +- [API Endpoints](#-api-endpoints) +- [Base de Dados](#-base-de-dados) +- [Contribuir](#-contribuir) +- [Licença](#-licença) + +--- + +## ✨ Características + +### 🎮 Modos de Jogo + +- **Modo Individual**: Jogue sozinho e supere 8 níveis progressivos +- **Modo Cooperativo**: Jogue com um amigo e trabalhem em equipa + +### 🎯 Funcionalidades Principais + +- ✅ **8 Níveis de Dificuldade** com bónus progressivos +- ✅ **Sistema de Autenticação** com JWT +- ✅ **Rankings Globais** por modo de jogo +- ✅ **Estatísticas Detalhadas** (total de jogos, pontuação média, melhor tempo) +- ✅ **Configurações Personalizáveis** (som, modo daltónico) +- ✅ **Limite de Tempo** nos níveis avançados (5-8) +- ✅ **Progressão de Níveis** automática baseada em performance +- ✅ **Responsive Design** - funciona em desktop, tablet e mobile + +### ♿ Acessibilidade (WCAG 2.1 AA) + +- 🔍 **Skip Links** sempre visíveis (G1: WCAG 2.4.1) +- 🎨 **Alto Contraste** e modo daltónico +- ⌨️ **Navegação por Teclado** completa +- 🔊 **Suporte para Leitores de Ecrã** (ARIA labels) +- 📱 **Design Responsivo** e adaptável +- 🏷️ **Estrutura Semântica** HTML5 +- 🎯 **Foco Visível** em todos os elementos interativos + +--- + +## 🛠️ Tecnologias Utilizadas + +### Frontend +- **React 18** (via CDN) +- **Babel** (transpilação JSX) +- **Tailwind CSS** (via CDN) +- **HTML5/CSS3** +- **JavaScript ES6+** + +### Backend +- **Node.js** (v18+) +- **Express.js** (v5.1.0) +- **JWT** (autenticação) +- **bcrypt** (hash de passwords) + +### Base de Dados +- **Microsoft SQL Server** +- **mssql** (driver Node.js) + +### Ferramentas de Desenvolvimento +- **nodemon** (desenvolvimento) +- **dotenv** (variáveis de ambiente) +- **CORS** (Cross-Origin Resource Sharing) + +--- + +## 📦 Pré-requisitos + +Antes de começar, certifique-se de ter instalado: + +- **Node.js** (v18 ou superior) - [Download](https://nodejs.org/) +- **Microsoft SQL Server** (2019 ou superior) - [Download](https://www.microsoft.com/sql-server) +- **npm** (vem incluído com Node.js) +- **Git** - [Download](https://git-scm.com/) + +--- + +## 🚀 Instalação + +### 1. Clone o Repositório + +```bash +git clone https://github.com/Carolpm28/BrainBridge.git +cd BrainBridge/BrainBridgev_final +``` + +### 2. Instale as Dependências do Backend + +```bash +cd brainbridge-backend +npm install +``` + +### 3. Configure a Base de Dados + +#### 3.1. Crie a Base de Dados + +Execute o script SQL para criar a base de dados: + +```bash +# No SQL Server Management Studio (SSMS) ou via sqlcmd +sqlcmd -S localhost -i create-database.sql +``` + +#### 3.2. Crie as Tabelas + +```bash +sqlcmd -S localhost -d BrainBridge -i create-tables.sql +``` + +#### 3.3. (Opcional) Adicione Tabela de Estatísticas + +```bash +sqlcmd -S localhost -d BrainBridge -i tabelastatistics.sql +``` + +--- + +## ⚙️ Configuração + +### 1. Configure as Variáveis de Ambiente + +Crie um ficheiro `.env` na pasta `brainbridge-backend`: + +```env +# Servidor +PORT=3000 + +# Base de Dados +DB_SERVER=localhost +DB_NAME=BrainBridge +DB_USER=seu_usuario +DB_PASSWORD=sua_password +DB_PORT=1433 + +# JWT +JWT_SECRET=brainbridge_super_secret_key_2025 + +# Ambiente +NODE_ENV=development +``` + +⚠️ **IMPORTANTE**: Altere `JWT_SECRET` para uma chave secreta forte em produção! + +### 2. Configuração do SQL Server + +Certifique-se de que: +- O SQL Server está em execução +- A autenticação SQL está ativada +- O utilizador tem permissões na base de dados `BrainBridge` + +--- + +## 🎯 Como Executar + +### Modo Desenvolvimento + +#### 1. Inicie o Backend + +```bash +cd brainbridge-backend +npm run dev +``` + +O servidor estará disponível em: `http://localhost:3000` + +#### 2. Abra o Frontend + +Abra o ficheiro `index.html` no navegador ou use um servidor local: + +```bash +# Opção 1: Abrir diretamente +open index.html + +# Opção 2: Usar um servidor HTTP simples +# Na pasta BrainBridgev_final +npx http-server -p 8080 +``` + +O jogo estará disponível em: `http://localhost:8080` + +### Modo Produção + +```bash +cd brainbridge-backend +npm start +``` + +--- + +## 📁 Estrutura do Projeto + +``` +BrainBridge/ +├── BrainBridgev_final/ +│ ├── brainbridge-backend/ # Backend Node.js +│ │ ├── src/ +│ │ │ ├── server.js # Servidor principal +│ │ │ ├── config/ +│ │ │ │ └── database.js # Configuração da BD +│ │ │ └── routes/ # Rotas da API +│ │ │ ├── games.js +│ │ │ ├── profile.js +│ │ │ ├── rankings.js +│ │ │ └── statistics2.js +│ │ ├── package.json +│ │ └── .env # Variáveis de ambiente +│ │ +│ ├── index.html # Frontend principal +│ ├── script.js # Lógica React do jogo +│ ├── styles.css # Estilos personalizados +│ │ +│ ├── create-database.sql # Script criação BD +│ ├── create-tables.sql # Script criação tabelas +│ └── tabelastatistics.sql # Script estatísticas +│ +├── IPC_DESAFIO_3_FASE_3.pdf # Documentação do desafio +└── README.md # Este ficheiro +``` + +--- + +## ♿ Acessibilidade + +O BrainBridge foi desenvolvido seguindo rigorosamente as **Diretrizes de Acessibilidade para Conteúdo Web (WCAG 2.1)** nível **AA**. + +### Conformidade WCAG 2.1 + +#### ✅ Princípio 1: Perceptível +- **1.3.1 Informação e Relações**: Estrutura hierárquica de cabeçalhos (H42) +- **1.4.1 Uso de Cor**: Modo daltónico disponível +- **1.4.3 Contraste**: Rácio mínimo de 4.5:1 + +#### ✅ Princípio 2: Operável +- **2.1.1 Teclado**: Totalmente navegável por teclado +- **2.4.1 Ignorar Blocos**: Skip link sempre visível (G1) +- **2.4.5 Múltiplas Formas**: Links relacionados e navegação alternativa +- **2.4.7 Foco Visível**: Indicadores de foco em todos os elementos + +#### ✅ Princípio 3: Compreensível +- **3.1.1 Idioma da Página**: `lang="pt-PT"` +- **3.2.1 Em Foco**: Sem mudanças de contexto inesperadas +- **3.3.2 Etiquetas**: Labels descritivos em formulários + +#### ✅ Princípio 4: Robusto +- **4.1.2 Nome, Função, Valor**: ARIA labels apropriados +- **4.1.3 Mensagens de Estado**: `role="status"`, `aria-live` + +### Recursos de Acessibilidade + +- 🎹 **Atalhos de Teclado** +- 🔊 **Feedback Sonoro** (pode ser desativado) +- 👁️ **Modo Daltónico** +- 📢 **Anúncios para Leitores de Ecrã** +- 🎯 **Foco Visível** com contornos de alto contraste + +--- + +## 🌐 API Endpoints + +### Autenticação + +#### Registar Novo Utilizador +```http +POST /api/users +Content-Type: application/json + +{ + "username": "jogador1", + "email": "jogador@exemplo.com", + "password": "senha_segura" +} +``` + +#### Login +```http +POST /api/login +Content-Type: application/json + +{ + "email": "jogador@exemplo.com", + "password": "senha_segura" +} +``` + +**Resposta:** +```json +{ + "success": true, + "data": { + "token": "eyJhbGciOiJIUzI1NiIs...", + "user": { + "userId": 1, + "username": "jogador1", + "email": "jogador@exemplo.com" + } + } +} +``` + +#### Logout +```http +POST /api/logout +Authorization: Bearer {token} +``` + +#### Verificar Token +```http +GET /api/auth/verify +Authorization: Bearer {token} +``` + +#### Obter Dados do Utilizador +```http +GET /api/me +Authorization: Bearer {token} +``` + +--- + +### Jogos + +#### Iniciar Novo Jogo +```http +POST /api/games/start +Authorization: Bearer {token} +Content-Type: application/json + +{ + "gameMode": "individual", + "level": 1 +} +``` + +#### Finalizar Jogo +```http +POST /api/games/finish +Authorization: Bearer {token} +Content-Type: application/json + +{ + "gameMode": "individual", + "level": 1, + "score": 1500, + "timeSeconds": 45, + "completed": true +} +``` + +#### Completar Jogo (Atualizar Estatísticas) +```http +POST /api/games/complete +Authorization: Bearer {token} +Content-Type: application/json + +{ + "gameMode": "individual", + "level": 1, + "score": 1500, + "timeSeconds": 45, + "completed": true +} +``` + +#### Listar Jogos do Utilizador +```http +GET /api/games?gameMode=individual&limit=10&offset=0 +Authorization: Bearer {token} +``` + +#### Obter Estatísticas Detalhadas +```http +GET /api/games/statistics2 +Authorization: Bearer {token} +``` + +#### Obter Jogos Recentes +```http +GET /api/games/recent +``` + +--- + +### Perfil + +#### Obter Perfil Próprio +```http +GET /api/profile +Authorization: Bearer {token} +``` + +#### Obter Perfil por ID +```http +GET /api/profile/:id +``` + +#### Atualizar Progresso +```http +POST /api/profile/progress +Authorization: Bearer {token} +Content-Type: application/json + +{ + "individualLevel": 2, + "individualHighscore": 2500, + "cooperativeLevel": 1, + "cooperativeHighscore": 1800 +} +``` + +--- + +### Rankings + +#### Obter Rankings +```http +GET /api/rankings?gameMode=individual&limit=10 +``` + +--- + +### Configurações de Níveis + +#### Listar Configurações +```http +GET /api/levelConfigurations +``` + +#### Adicionar/Atualizar Configuração +```http +POST /api/levelConfigurations +Authorization: Bearer {token} +Content-Type: application/json + +{ + "gameMode": "individual", + "level": 1, + "name": "Iniciante", + "cards": 12, + "bonus": 500, + "timeLimit": 0 +} +``` + +--- + +## 🗄️ Base de Dados + +### Tabelas Principais + +#### **Users** +Armazena informações dos utilizadores e seu progresso. + +| Campo | Tipo | Descrição | +|-------|------|-----------| +| UserID | INT (PK) | Identificador único | +| Username | NVARCHAR(100) | Nome do utilizador | +| Email | NVARCHAR(255) | Email (único) | +| PasswordHash | NVARCHAR(255) | Hash da senha | +| Salt | NVARCHAR(100) | Salt do bcrypt | +| IndividualLevel | INT | Nível individual atual | +| IndividualHighscore | INT | Recorde individual | +| CooperativeLevel | INT | Nível cooperativo atual | +| CooperativeHighscore | INT | Recorde cooperativo | +| TotalGamesPlayed | INT | Total de jogos | +| SoundEnabled | BIT | Som ativado | +| ColorBlindMode | BIT | Modo daltónico | + +#### **Games** +Regista cada jogo concluído. + +| Campo | Tipo | Descrição | +|-------|------|-----------| +| GameID | INT (PK) | Identificador único | +| UserID | INT (FK) | Referência ao utilizador | +| GameMode | NVARCHAR(20) | individual/cooperative | +| Level | INT | Nível jogado | +| Score | INT | Pontuação obtida | +| TimeSeconds | INT | Tempo em segundos | +| Completed | BIT | Jogo concluído | +| Player1Score | INT | Pontuação jogador 1 (coop) | +| Player2Score | INT | Pontuação jogador 2 (coop) | +| Winner | INT | Vencedor (coop): 0=empate, 1=P1, 2=P2 | +| LevelBonus | INT | Bónus do nível | +| PlayedAt | DATETIME | Data/hora do jogo | + +#### **UserStatistics2** +Estatísticas agregadas dos utilizadores. + +| Campo | Tipo | Descrição | +|-------|------|-----------| +| UserID | INT (FK) | Referência ao utilizador | +| TotalGames | INT | Total de jogos | +| IndividualGames | INT | Jogos individuais | +| CooperativeGames | INT | Jogos cooperativos | +| BestTimeIndividual | INT | Melhor tempo (individual) | +| BestTimeCooperative | INT | Melhor tempo (cooperativo) | +| AverageScore | FLOAT | Pontuação média | +| BestScore | INT | Melhor pontuação | +| StreakCurrent | INT | Sequência atual | +| StreakBest | INT | Melhor sequência | + +#### **LevelConfigurations** +Configurações de cada nível. + +| Campo | Tipo | Descrição | +|-------|------|-----------| +| ConfigID | INT (PK) | Identificador único | +| GameMode | NVARCHAR(20) | individual/cooperative | +| Level | INT | Número do nível | +| Name | NVARCHAR(100) | Nome do nível | +| Cards | INT | Quantidade de cartas | +| Bonus | INT | Bónus do nível | +| TimeLimit | INT | Limite de tempo (segundos, 0=sem limite) | + +#### **Rankings** +Melhores pontuações globais. + +| Campo | Tipo | Descrição | +|-------|------|-----------| +| RankingID | INT (PK) | Identificador único | +| UserID | INT (FK) | Referência ao utilizador | +| GameMode | NVARCHAR(20) | individual/cooperative | +| Score | INT | Pontuação | +| Level | INT | Nível | +| PlayedAt | DATETIME | Data/hora | + +--- + +## 🎮 Como Jogar + +### Modo Individual + +1. **Registe-se** ou **faça login** +2. Selecione **"Modo Individual"** +3. Escolha o **nível** (começa no 1) +4. **Encontre os pares** de cartas idênticas +5. **Complete o nível** para avançar automaticamente +6. Níveis 5-8 têm **limite de tempo**! + +### Modo Cooperativo + +1. Selecione **"Modo Cooperativo"** +2. **Dois jogadores** alternam turnos +3. Cada jogador tenta encontrar pares +4. Quem encontrar **mais pares vence**! + +### Pontuação + +- **Par correto**: +100 pontos +- **Bónus de nível**: varia por nível (500-10000) +- **Bónus de tempo**: nos níveis com limite +- **Penalização**: -10 por erro + +### Níveis + +| Nível | Nome | Cartas | Bónus | Tempo Limite | +|-------|------|--------|-------|--------------| +| 1 | Iniciante | 12 | 500 | Sem limite | +| 2 | Aprendiz | 16 | 750 | Sem limite | +| 3 | Intermediário | 20 | 1000 | Sem limite | +| 4 | Avançado | 24 | 1500 | Sem limite | +| 5 | Especialista | 24 | 2000 | 3 minutos | +| 6 | Mestre | 24 | 3000 | 2 minutos | +| 7 | Grande Mestre | 24 | 5000 | 1.5 minutos | +| 8 | Lendário | 24 | 10000 | 1 minuto | + +--- + +## 🧪 Testes de Acessibilidade + +### Ferramentas Recomendadas + +- **[AccessMonitor](https://accessmonitor.acessibilidade.gov.pt/)** - Validador automático português +- **[WAVE WebAIM](https://wave.webaim.org/)** - Ferramenta de avaliação +- **[axe DevTools](https://www.deque.com/axe/)** - Extensão para navegador +- **[Lighthouse](https://web.dev/lighthouse/)** - Auditoria Google + +### Teste Manual + +1. **Navegação por Teclado**: Use `Tab`, `Enter`, `Espaço`, setas +2. **Leitor de Ecrã**: Teste com NVDA (Windows) ou VoiceOver (Mac) +3. **Contraste**: Verifique no modo alto contraste do SO +4. **Zoom**: Teste com 200% de zoom +5. **Sem Rato**: Jogue apenas com teclado + +--- + +## 🤝 Contribuir + +Contribuições são bem-vindas! Para contribuir: + +1. **Fork** o projeto +2. Crie uma **branch** para sua feature (`git checkout -b feature/MinhaFeature`) +3. **Commit** suas mudanças (`git commit -m 'Adiciona MinhaFeature'`) +4. **Push** para a branch (`git push origin feature/MinhaFeature`) +5. Abra um **Pull Request** + +### Diretrizes + +- Mantenha a conformidade **WCAG 2.1 AA** +- Adicione testes quando aplicável +- Documente novas funcionalidades +- Siga o estilo de código existente + +--- + +## 📝 Licença + +Este projeto está sob a licença **ISC**. + +--- + +## 👥 Autores + +- **Carolina** - [@Carolpm28](https://github.com/Carolpm28) + +--- + +## 📚 Recursos de Acessibilidade + +### Documentação Oficial + +- [Portal da Acessibilidade PT](https://www.acessibilidade.gov.pt/) +- [WCAG 2.1 Guidelines](https://www.w3.org/WAI/WCAG21/quickref/) +- [MDN Web Accessibility](https://developer.mozilla.org/pt-BR/docs/Web/Accessibility) +- [Decreto-Lei n.º 83/2018](https://www.acessibilidade.gov.pt/decreto/) + +### Jogos Inclusivos + +- [Game Accessibility Guidelines](https://gameaccessibilityguidelines.com/) +- [Includification](https://www.includification.com/) +- [Accessible Games](https://accessible.games/) + +--- + +## 🐛 Reportar Problemas + +Encontrou um bug? Tem uma sugestão? + +- Abra uma [Issue](https://github.com/Carolpm28/BrainBridge/issues) +- Envie email: suporte@brainbridge.pt + +--- + +## 📞 Contacto + +- **Email**: suporte@brainbridge.pt +- **GitHub**: [@Carolpm28](https://github.com/Carolpm28) + +--- + +## 🌟 Agradecimentos + +Agradecimentos especiais a: + +- Comunidade WCAG pela documentação excelente +- Portal da Acessibilidade de Portugal +- Todos os testadores que ajudaram a melhorar a acessibilidade + +--- + +
+ +**BrainBridge** © 2025 - Jogo de memória desenvolvido seguindo as diretrizes WCAG 2.1 AA + +[⬆ Voltar ao topo](#-brainbridge---jogo-de-memória-acessível-e-cooperativo) + +
From 8e0a911367bdc04f073434ec5651b7fda5968ca1 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 16 Dec 2025 22:31:45 +0000 Subject: [PATCH 3/5] Improve README: clarify WCAG technique references and remove placeholder emails Co-authored-by: Carolpm28 <129198772+Carolpm28@users.noreply.github.com> --- README.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index e2a75cf..fa0762d 100644 --- a/README.md +++ b/README.md @@ -245,13 +245,13 @@ O BrainBridge foi desenvolvido seguindo rigorosamente as **Diretrizes de Acessib ### Conformidade WCAG 2.1 #### ✅ Princípio 1: Perceptível -- **1.3.1 Informação e Relações**: Estrutura hierárquica de cabeçalhos (H42) +- **1.3.1 Informação e Relações**: Estrutura hierárquica de cabeçalhos (H42: Using h1-h6 to identify headings) - **1.4.1 Uso de Cor**: Modo daltónico disponível - **1.4.3 Contraste**: Rácio mínimo de 4.5:1 #### ✅ Princípio 2: Operável - **2.1.1 Teclado**: Totalmente navegável por teclado -- **2.4.1 Ignorar Blocos**: Skip link sempre visível (G1) +- **2.4.1 Ignorar Blocos**: Skip link sempre visível (G1: Adding a link at the top of each page that goes directly to the main content area) - **2.4.5 Múltiplas Formas**: Links relacionados e navegação alternativa - **2.4.7 Foco Visível**: Indicadores de foco em todos os elementos @@ -657,14 +657,13 @@ Este projeto está sob a licença **ISC**. Encontrou um bug? Tem uma sugestão? - Abra uma [Issue](https://github.com/Carolpm28/BrainBridge/issues) -- Envie email: suporte@brainbridge.pt --- ## 📞 Contacto -- **Email**: suporte@brainbridge.pt - **GitHub**: [@Carolpm28](https://github.com/Carolpm28) +- **Issues**: [Reportar Problema](https://github.com/Carolpm28/BrainBridge/issues) --- From 8d6629141e8d10a5e993a2f9e031ca6083b0fa97 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 16 Dec 2025 22:38:38 +0000 Subject: [PATCH 4/5] Remove emojis, horizontal lines, and requested sections from README Co-authored-by: Carolpm28 <129198772+Carolpm28@users.noreply.github.com> --- README.md | 458 +++++++----------------------------------------------- 1 file changed, 52 insertions(+), 406 deletions(-) diff --git a/README.md b/README.md index fa0762d..fa7efde 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# 🧠 BrainBridge - Jogo de Memória Acessível e Cooperativo +# BrainBridge - Jogo de Memória Acessível e Cooperativo ![WCAG 2.1 AA](https://img.shields.io/badge/WCAG-2.1%20AA-blue) ![License](https://img.shields.io/badge/license-ISC-green) @@ -7,56 +7,49 @@ **BrainBridge** é um jogo de memória inovador desenvolvido com foco total em **acessibilidade web**, seguindo as diretrizes **WCAG 2.1 AA**. O projeto oferece dois modos de jogo (Individual e Cooperativo) com 8 níveis progressivos de dificuldade, sistema de autenticação, rankings e estatísticas detalhadas. ---- +## Índice -## 📋 Índice +- [Características](#características) +- [Tecnologias Utilizadas](#tecnologias-utilizadas) +- [Pré-requisitos](#pré-requisitos) +- [Instalação](#instalação) +- [Configuração](#configuração) +- [Como Executar](#como-executar) +- [Estrutura do Projeto](#estrutura-do-projeto) +- [Acessibilidade](#acessibilidade) +- [Como Jogar](#como-jogar) +- [Testes de Acessibilidade](#testes-de-acessibilidade) +- [Recursos de Acessibilidade](#recursos-de-acessibilidade) -- [Características](#-características) -- [Tecnologias Utilizadas](#-tecnologias-utilizadas) -- [Pré-requisitos](#-pré-requisitos) -- [Instalação](#-instalação) -- [Configuração](#-configuração) -- [Como Executar](#-como-executar) -- [Estrutura do Projeto](#-estrutura-do-projeto) -- [Acessibilidade](#-acessibilidade) -- [API Endpoints](#-api-endpoints) -- [Base de Dados](#-base-de-dados) -- [Contribuir](#-contribuir) -- [Licença](#-licença) +## Características ---- - -## ✨ Características - -### 🎮 Modos de Jogo +### Modos de Jogo - **Modo Individual**: Jogue sozinho e supere 8 níveis progressivos - **Modo Cooperativo**: Jogue com um amigo e trabalhem em equipa -### 🎯 Funcionalidades Principais - -- ✅ **8 Níveis de Dificuldade** com bónus progressivos -- ✅ **Sistema de Autenticação** com JWT -- ✅ **Rankings Globais** por modo de jogo -- ✅ **Estatísticas Detalhadas** (total de jogos, pontuação média, melhor tempo) -- ✅ **Configurações Personalizáveis** (som, modo daltónico) -- ✅ **Limite de Tempo** nos níveis avançados (5-8) -- ✅ **Progressão de Níveis** automática baseada em performance -- ✅ **Responsive Design** - funciona em desktop, tablet e mobile +### Funcionalidades Principais -### ♿ Acessibilidade (WCAG 2.1 AA) +- **8 Níveis de Dificuldade** com bónus progressivos +- **Sistema de Autenticação** com JWT +- **Rankings Globais** por modo de jogo +- **Estatísticas Detalhadas** (total de jogos, pontuação média, melhor tempo) +- **Configurações Personalizáveis** (som, modo daltónico) +- **Limite de Tempo** nos níveis avançados (5-8) +- **Progressão de Níveis** automática baseada em performance +- **Responsive Design** - funciona em desktop, tablet e mobile -- 🔍 **Skip Links** sempre visíveis (G1: WCAG 2.4.1) -- 🎨 **Alto Contraste** e modo daltónico -- ⌨️ **Navegação por Teclado** completa -- 🔊 **Suporte para Leitores de Ecrã** (ARIA labels) -- 📱 **Design Responsivo** e adaptável -- 🏷️ **Estrutura Semântica** HTML5 -- 🎯 **Foco Visível** em todos os elementos interativos +### Acessibilidade (WCAG 2.1 AA) ---- +- **Skip Links** sempre visíveis (G1: WCAG 2.4.1) +- **Alto Contraste** e modo daltónico +- **Navegação por Teclado** completa +- **Suporte para Leitores de Ecrã** (ARIA labels) +- **Design Responsivo** e adaptável +- **Estrutura Semântica** HTML5 +- **Foco Visível** em todos os elementos interativos -## 🛠️ Tecnologias Utilizadas +## Tecnologias Utilizadas ### Frontend - **React 18** (via CDN) @@ -80,9 +73,7 @@ - **dotenv** (variáveis de ambiente) - **CORS** (Cross-Origin Resource Sharing) ---- - -## 📦 Pré-requisitos +## Pré-requisitos Antes de começar, certifique-se de ter instalado: @@ -91,9 +82,7 @@ Antes de começar, certifique-se de ter instalado: - **npm** (vem incluído com Node.js) - **Git** - [Download](https://git-scm.com/) ---- - -## 🚀 Instalação +## Instalação ### 1. Clone o Repositório @@ -132,9 +121,7 @@ sqlcmd -S localhost -d BrainBridge -i create-tables.sql sqlcmd -S localhost -d BrainBridge -i tabelastatistics.sql ``` ---- - -## ⚙️ Configuração +## Configuração ### 1. Configure as Variáveis de Ambiente @@ -167,9 +154,7 @@ Certifique-se de que: - A autenticação SQL está ativada - O utilizador tem permissões na base de dados `BrainBridge` ---- - -## 🎯 Como Executar +## Como Executar ### Modo Desenvolvimento @@ -204,9 +189,7 @@ cd brainbridge-backend npm start ``` ---- - -## 📁 Estrutura do Projeto +## Estrutura do Projeto ``` BrainBridge/ @@ -236,316 +219,41 @@ BrainBridge/ └── README.md # Este ficheiro ``` ---- - -## ♿ Acessibilidade +## Acessibilidade O BrainBridge foi desenvolvido seguindo rigorosamente as **Diretrizes de Acessibilidade para Conteúdo Web (WCAG 2.1)** nível **AA**. ### Conformidade WCAG 2.1 -#### ✅ Princípio 1: Perceptível +#### Princípio 1: Perceptível - **1.3.1 Informação e Relações**: Estrutura hierárquica de cabeçalhos (H42: Using h1-h6 to identify headings) - **1.4.1 Uso de Cor**: Modo daltónico disponível - **1.4.3 Contraste**: Rácio mínimo de 4.5:1 -#### ✅ Princípio 2: Operável +#### Princípio 2: Operável - **2.1.1 Teclado**: Totalmente navegável por teclado - **2.4.1 Ignorar Blocos**: Skip link sempre visível (G1: Adding a link at the top of each page that goes directly to the main content area) - **2.4.5 Múltiplas Formas**: Links relacionados e navegação alternativa - **2.4.7 Foco Visível**: Indicadores de foco em todos os elementos -#### ✅ Princípio 3: Compreensível +#### Princípio 3: Compreensível - **3.1.1 Idioma da Página**: `lang="pt-PT"` - **3.2.1 Em Foco**: Sem mudanças de contexto inesperadas - **3.3.2 Etiquetas**: Labels descritivos em formulários -#### ✅ Princípio 4: Robusto +#### Princípio 4: Robusto - **4.1.2 Nome, Função, Valor**: ARIA labels apropriados - **4.1.3 Mensagens de Estado**: `role="status"`, `aria-live` ### Recursos de Acessibilidade -- 🎹 **Atalhos de Teclado** -- 🔊 **Feedback Sonoro** (pode ser desativado) -- 👁️ **Modo Daltónico** -- 📢 **Anúncios para Leitores de Ecrã** -- 🎯 **Foco Visível** com contornos de alto contraste - ---- - -## 🌐 API Endpoints +- **Atalhos de Teclado** +- **Feedback Sonoro** (pode ser desativado) +- **Modo Daltónico** +- **Anúncios para Leitores de Ecrã** +- **Foco Visível** com contornos de alto contraste -### Autenticação - -#### Registar Novo Utilizador -```http -POST /api/users -Content-Type: application/json - -{ - "username": "jogador1", - "email": "jogador@exemplo.com", - "password": "senha_segura" -} -``` - -#### Login -```http -POST /api/login -Content-Type: application/json - -{ - "email": "jogador@exemplo.com", - "password": "senha_segura" -} -``` - -**Resposta:** -```json -{ - "success": true, - "data": { - "token": "eyJhbGciOiJIUzI1NiIs...", - "user": { - "userId": 1, - "username": "jogador1", - "email": "jogador@exemplo.com" - } - } -} -``` - -#### Logout -```http -POST /api/logout -Authorization: Bearer {token} -``` - -#### Verificar Token -```http -GET /api/auth/verify -Authorization: Bearer {token} -``` - -#### Obter Dados do Utilizador -```http -GET /api/me -Authorization: Bearer {token} -``` - ---- - -### Jogos - -#### Iniciar Novo Jogo -```http -POST /api/games/start -Authorization: Bearer {token} -Content-Type: application/json - -{ - "gameMode": "individual", - "level": 1 -} -``` - -#### Finalizar Jogo -```http -POST /api/games/finish -Authorization: Bearer {token} -Content-Type: application/json - -{ - "gameMode": "individual", - "level": 1, - "score": 1500, - "timeSeconds": 45, - "completed": true -} -``` - -#### Completar Jogo (Atualizar Estatísticas) -```http -POST /api/games/complete -Authorization: Bearer {token} -Content-Type: application/json - -{ - "gameMode": "individual", - "level": 1, - "score": 1500, - "timeSeconds": 45, - "completed": true -} -``` - -#### Listar Jogos do Utilizador -```http -GET /api/games?gameMode=individual&limit=10&offset=0 -Authorization: Bearer {token} -``` - -#### Obter Estatísticas Detalhadas -```http -GET /api/games/statistics2 -Authorization: Bearer {token} -``` - -#### Obter Jogos Recentes -```http -GET /api/games/recent -``` - ---- - -### Perfil - -#### Obter Perfil Próprio -```http -GET /api/profile -Authorization: Bearer {token} -``` - -#### Obter Perfil por ID -```http -GET /api/profile/:id -``` - -#### Atualizar Progresso -```http -POST /api/profile/progress -Authorization: Bearer {token} -Content-Type: application/json - -{ - "individualLevel": 2, - "individualHighscore": 2500, - "cooperativeLevel": 1, - "cooperativeHighscore": 1800 -} -``` - ---- - -### Rankings - -#### Obter Rankings -```http -GET /api/rankings?gameMode=individual&limit=10 -``` - ---- - -### Configurações de Níveis - -#### Listar Configurações -```http -GET /api/levelConfigurations -``` - -#### Adicionar/Atualizar Configuração -```http -POST /api/levelConfigurations -Authorization: Bearer {token} -Content-Type: application/json - -{ - "gameMode": "individual", - "level": 1, - "name": "Iniciante", - "cards": 12, - "bonus": 500, - "timeLimit": 0 -} -``` - ---- - -## 🗄️ Base de Dados - -### Tabelas Principais - -#### **Users** -Armazena informações dos utilizadores e seu progresso. - -| Campo | Tipo | Descrição | -|-------|------|-----------| -| UserID | INT (PK) | Identificador único | -| Username | NVARCHAR(100) | Nome do utilizador | -| Email | NVARCHAR(255) | Email (único) | -| PasswordHash | NVARCHAR(255) | Hash da senha | -| Salt | NVARCHAR(100) | Salt do bcrypt | -| IndividualLevel | INT | Nível individual atual | -| IndividualHighscore | INT | Recorde individual | -| CooperativeLevel | INT | Nível cooperativo atual | -| CooperativeHighscore | INT | Recorde cooperativo | -| TotalGamesPlayed | INT | Total de jogos | -| SoundEnabled | BIT | Som ativado | -| ColorBlindMode | BIT | Modo daltónico | - -#### **Games** -Regista cada jogo concluído. - -| Campo | Tipo | Descrição | -|-------|------|-----------| -| GameID | INT (PK) | Identificador único | -| UserID | INT (FK) | Referência ao utilizador | -| GameMode | NVARCHAR(20) | individual/cooperative | -| Level | INT | Nível jogado | -| Score | INT | Pontuação obtida | -| TimeSeconds | INT | Tempo em segundos | -| Completed | BIT | Jogo concluído | -| Player1Score | INT | Pontuação jogador 1 (coop) | -| Player2Score | INT | Pontuação jogador 2 (coop) | -| Winner | INT | Vencedor (coop): 0=empate, 1=P1, 2=P2 | -| LevelBonus | INT | Bónus do nível | -| PlayedAt | DATETIME | Data/hora do jogo | - -#### **UserStatistics2** -Estatísticas agregadas dos utilizadores. - -| Campo | Tipo | Descrição | -|-------|------|-----------| -| UserID | INT (FK) | Referência ao utilizador | -| TotalGames | INT | Total de jogos | -| IndividualGames | INT | Jogos individuais | -| CooperativeGames | INT | Jogos cooperativos | -| BestTimeIndividual | INT | Melhor tempo (individual) | -| BestTimeCooperative | INT | Melhor tempo (cooperativo) | -| AverageScore | FLOAT | Pontuação média | -| BestScore | INT | Melhor pontuação | -| StreakCurrent | INT | Sequência atual | -| StreakBest | INT | Melhor sequência | - -#### **LevelConfigurations** -Configurações de cada nível. - -| Campo | Tipo | Descrição | -|-------|------|-----------| -| ConfigID | INT (PK) | Identificador único | -| GameMode | NVARCHAR(20) | individual/cooperative | -| Level | INT | Número do nível | -| Name | NVARCHAR(100) | Nome do nível | -| Cards | INT | Quantidade de cartas | -| Bonus | INT | Bónus do nível | -| TimeLimit | INT | Limite de tempo (segundos, 0=sem limite) | - -#### **Rankings** -Melhores pontuações globais. - -| Campo | Tipo | Descrição | -|-------|------|-----------| -| RankingID | INT (PK) | Identificador único | -| UserID | INT (FK) | Referência ao utilizador | -| GameMode | NVARCHAR(20) | individual/cooperative | -| Score | INT | Pontuação | -| Level | INT | Nível | -| PlayedAt | DATETIME | Data/hora | - ---- - -## 🎮 Como Jogar +## Como Jogar ### Modo Individual @@ -583,9 +291,7 @@ Melhores pontuações globais. | 7 | Grande Mestre | 24 | 5000 | 1.5 minutos | | 8 | Lendário | 24 | 10000 | 1 minuto | ---- - -## 🧪 Testes de Acessibilidade +## Testes de Acessibilidade ### Ferramentas Recomendadas @@ -602,40 +308,7 @@ Melhores pontuações globais. 4. **Zoom**: Teste com 200% de zoom 5. **Sem Rato**: Jogue apenas com teclado ---- - -## 🤝 Contribuir - -Contribuições são bem-vindas! Para contribuir: - -1. **Fork** o projeto -2. Crie uma **branch** para sua feature (`git checkout -b feature/MinhaFeature`) -3. **Commit** suas mudanças (`git commit -m 'Adiciona MinhaFeature'`) -4. **Push** para a branch (`git push origin feature/MinhaFeature`) -5. Abra um **Pull Request** - -### Diretrizes - -- Mantenha a conformidade **WCAG 2.1 AA** -- Adicione testes quando aplicável -- Documente novas funcionalidades -- Siga o estilo de código existente - ---- - -## 📝 Licença - -Este projeto está sob a licença **ISC**. - ---- - -## 👥 Autores - -- **Carolina** - [@Carolpm28](https://github.com/Carolpm28) - ---- - -## 📚 Recursos de Acessibilidade +## Recursos de Acessibilidade ### Documentação Oficial @@ -650,37 +323,10 @@ Este projeto está sob a licença **ISC**. - [Includification](https://www.includification.com/) - [Accessible Games](https://accessible.games/) ---- - -## 🐛 Reportar Problemas - -Encontrou um bug? Tem uma sugestão? - -- Abra uma [Issue](https://github.com/Carolpm28/BrainBridge/issues) - ---- - -## 📞 Contacto - -- **GitHub**: [@Carolpm28](https://github.com/Carolpm28) -- **Issues**: [Reportar Problema](https://github.com/Carolpm28/BrainBridge/issues) - ---- - -## 🌟 Agradecimentos - -Agradecimentos especiais a: - -- Comunidade WCAG pela documentação excelente -- Portal da Acessibilidade de Portugal -- Todos os testadores que ajudaram a melhorar a acessibilidade - ---- -
**BrainBridge** © 2025 - Jogo de memória desenvolvido seguindo as diretrizes WCAG 2.1 AA -[⬆ Voltar ao topo](#-brainbridge---jogo-de-memória-acessível-e-cooperativo) +[Voltar ao topo](#brainbridge---jogo-de-memória-acessível-e-cooperativo)
From 92c687ffe7a4c508d8d55777e4f9cc2aa7a5e1c5 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 16 Dec 2025 22:45:48 +0000 Subject: [PATCH 5/5] Change header levels to remove underlines (h2 to h3) Co-authored-by: Carolpm28 <129198772+Carolpm28@users.noreply.github.com> --- README.md | 90 +++++++++++++++++++++++++++---------------------------- 1 file changed, 45 insertions(+), 45 deletions(-) diff --git a/README.md b/README.md index fa7efde..de4d31d 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ **BrainBridge** é um jogo de memória inovador desenvolvido com foco total em **acessibilidade web**, seguindo as diretrizes **WCAG 2.1 AA**. O projeto oferece dois modos de jogo (Individual e Cooperativo) com 8 níveis progressivos de dificuldade, sistema de autenticação, rankings e estatísticas detalhadas. -## Índice +### Índice - [Características](#características) - [Tecnologias Utilizadas](#tecnologias-utilizadas) @@ -21,14 +21,14 @@ - [Testes de Acessibilidade](#testes-de-acessibilidade) - [Recursos de Acessibilidade](#recursos-de-acessibilidade) -## Características +### Características -### Modos de Jogo +#### Modos de Jogo - **Modo Individual**: Jogue sozinho e supere 8 níveis progressivos - **Modo Cooperativo**: Jogue com um amigo e trabalhem em equipa -### Funcionalidades Principais +#### Funcionalidades Principais - **8 Níveis de Dificuldade** com bónus progressivos - **Sistema de Autenticação** com JWT @@ -39,7 +39,7 @@ - **Progressão de Níveis** automática baseada em performance - **Responsive Design** - funciona em desktop, tablet e mobile -### Acessibilidade (WCAG 2.1 AA) +#### Acessibilidade (WCAG 2.1 AA) - **Skip Links** sempre visíveis (G1: WCAG 2.4.1) - **Alto Contraste** e modo daltónico @@ -49,31 +49,31 @@ - **Estrutura Semântica** HTML5 - **Foco Visível** em todos os elementos interativos -## Tecnologias Utilizadas +### Tecnologias Utilizadas -### Frontend +#### Frontend - **React 18** (via CDN) - **Babel** (transpilação JSX) - **Tailwind CSS** (via CDN) - **HTML5/CSS3** - **JavaScript ES6+** -### Backend +#### Backend - **Node.js** (v18+) - **Express.js** (v5.1.0) - **JWT** (autenticação) - **bcrypt** (hash de passwords) -### Base de Dados +#### Base de Dados - **Microsoft SQL Server** - **mssql** (driver Node.js) -### Ferramentas de Desenvolvimento +#### Ferramentas de Desenvolvimento - **nodemon** (desenvolvimento) - **dotenv** (variáveis de ambiente) - **CORS** (Cross-Origin Resource Sharing) -## Pré-requisitos +### Pré-requisitos Antes de começar, certifique-se de ter instalado: @@ -82,25 +82,25 @@ Antes de começar, certifique-se de ter instalado: - **npm** (vem incluído com Node.js) - **Git** - [Download](https://git-scm.com/) -## Instalação +### Instalação -### 1. Clone o Repositório +#### 1. Clone o Repositório ```bash git clone https://github.com/Carolpm28/BrainBridge.git cd BrainBridge/BrainBridgev_final ``` -### 2. Instale as Dependências do Backend +#### 2. Instale as Dependências do Backend ```bash cd brainbridge-backend npm install ``` -### 3. Configure a Base de Dados +#### 3. Configure a Base de Dados -#### 3.1. Crie a Base de Dados +##### 3.1. Crie a Base de Dados Execute o script SQL para criar a base de dados: @@ -109,21 +109,21 @@ Execute o script SQL para criar a base de dados: sqlcmd -S localhost -i create-database.sql ``` -#### 3.2. Crie as Tabelas +##### 3.2. Crie as Tabelas ```bash sqlcmd -S localhost -d BrainBridge -i create-tables.sql ``` -#### 3.3. (Opcional) Adicione Tabela de Estatísticas +##### 3.3. (Opcional) Adicione Tabela de Estatísticas ```bash sqlcmd -S localhost -d BrainBridge -i tabelastatistics.sql ``` -## Configuração +### Configuração -### 1. Configure as Variáveis de Ambiente +#### 1. Configure as Variáveis de Ambiente Crie um ficheiro `.env` na pasta `brainbridge-backend`: @@ -147,18 +147,18 @@ NODE_ENV=development ⚠️ **IMPORTANTE**: Altere `JWT_SECRET` para uma chave secreta forte em produção! -### 2. Configuração do SQL Server +#### 2. Configuração do SQL Server Certifique-se de que: - O SQL Server está em execução - A autenticação SQL está ativada - O utilizador tem permissões na base de dados `BrainBridge` -## Como Executar +### Como Executar -### Modo Desenvolvimento +#### Modo Desenvolvimento -#### 1. Inicie o Backend +##### 1. Inicie o Backend ```bash cd brainbridge-backend @@ -167,7 +167,7 @@ npm run dev O servidor estará disponível em: `http://localhost:3000` -#### 2. Abra o Frontend +##### 2. Abra o Frontend Abra o ficheiro `index.html` no navegador ou use um servidor local: @@ -182,14 +182,14 @@ npx http-server -p 8080 O jogo estará disponível em: `http://localhost:8080` -### Modo Produção +#### Modo Produção ```bash cd brainbridge-backend npm start ``` -## Estrutura do Projeto +### Estrutura do Projeto ``` BrainBridge/ @@ -219,33 +219,33 @@ BrainBridge/ └── README.md # Este ficheiro ``` -## Acessibilidade +### Acessibilidade O BrainBridge foi desenvolvido seguindo rigorosamente as **Diretrizes de Acessibilidade para Conteúdo Web (WCAG 2.1)** nível **AA**. -### Conformidade WCAG 2.1 +#### Conformidade WCAG 2.1 -#### Princípio 1: Perceptível +##### Princípio 1: Perceptível - **1.3.1 Informação e Relações**: Estrutura hierárquica de cabeçalhos (H42: Using h1-h6 to identify headings) - **1.4.1 Uso de Cor**: Modo daltónico disponível - **1.4.3 Contraste**: Rácio mínimo de 4.5:1 -#### Princípio 2: Operável +##### Princípio 2: Operável - **2.1.1 Teclado**: Totalmente navegável por teclado - **2.4.1 Ignorar Blocos**: Skip link sempre visível (G1: Adding a link at the top of each page that goes directly to the main content area) - **2.4.5 Múltiplas Formas**: Links relacionados e navegação alternativa - **2.4.7 Foco Visível**: Indicadores de foco em todos os elementos -#### Princípio 3: Compreensível +##### Princípio 3: Compreensível - **3.1.1 Idioma da Página**: `lang="pt-PT"` - **3.2.1 Em Foco**: Sem mudanças de contexto inesperadas - **3.3.2 Etiquetas**: Labels descritivos em formulários -#### Princípio 4: Robusto +##### Princípio 4: Robusto - **4.1.2 Nome, Função, Valor**: ARIA labels apropriados - **4.1.3 Mensagens de Estado**: `role="status"`, `aria-live` -### Recursos de Acessibilidade +#### Recursos de Acessibilidade - **Atalhos de Teclado** - **Feedback Sonoro** (pode ser desativado) @@ -253,9 +253,9 @@ O BrainBridge foi desenvolvido seguindo rigorosamente as **Diretrizes de Acessib - **Anúncios para Leitores de Ecrã** - **Foco Visível** com contornos de alto contraste -## Como Jogar +### Como Jogar -### Modo Individual +#### Modo Individual 1. **Registe-se** ou **faça login** 2. Selecione **"Modo Individual"** @@ -264,21 +264,21 @@ O BrainBridge foi desenvolvido seguindo rigorosamente as **Diretrizes de Acessib 5. **Complete o nível** para avançar automaticamente 6. Níveis 5-8 têm **limite de tempo**! -### Modo Cooperativo +#### Modo Cooperativo 1. Selecione **"Modo Cooperativo"** 2. **Dois jogadores** alternam turnos 3. Cada jogador tenta encontrar pares 4. Quem encontrar **mais pares vence**! -### Pontuação +#### Pontuação - **Par correto**: +100 pontos - **Bónus de nível**: varia por nível (500-10000) - **Bónus de tempo**: nos níveis com limite - **Penalização**: -10 por erro -### Níveis +#### Níveis | Nível | Nome | Cartas | Bónus | Tempo Limite | |-------|------|--------|-------|--------------| @@ -291,16 +291,16 @@ O BrainBridge foi desenvolvido seguindo rigorosamente as **Diretrizes de Acessib | 7 | Grande Mestre | 24 | 5000 | 1.5 minutos | | 8 | Lendário | 24 | 10000 | 1 minuto | -## Testes de Acessibilidade +### Testes de Acessibilidade -### Ferramentas Recomendadas +#### Ferramentas Recomendadas - **[AccessMonitor](https://accessmonitor.acessibilidade.gov.pt/)** - Validador automático português - **[WAVE WebAIM](https://wave.webaim.org/)** - Ferramenta de avaliação - **[axe DevTools](https://www.deque.com/axe/)** - Extensão para navegador - **[Lighthouse](https://web.dev/lighthouse/)** - Auditoria Google -### Teste Manual +#### Teste Manual 1. **Navegação por Teclado**: Use `Tab`, `Enter`, `Espaço`, setas 2. **Leitor de Ecrã**: Teste com NVDA (Windows) ou VoiceOver (Mac) @@ -308,16 +308,16 @@ O BrainBridge foi desenvolvido seguindo rigorosamente as **Diretrizes de Acessib 4. **Zoom**: Teste com 200% de zoom 5. **Sem Rato**: Jogue apenas com teclado -## Recursos de Acessibilidade +### Recursos de Acessibilidade -### Documentação Oficial +#### Documentação Oficial - [Portal da Acessibilidade PT](https://www.acessibilidade.gov.pt/) - [WCAG 2.1 Guidelines](https://www.w3.org/WAI/WCAG21/quickref/) - [MDN Web Accessibility](https://developer.mozilla.org/pt-BR/docs/Web/Accessibility) - [Decreto-Lei n.º 83/2018](https://www.acessibilidade.gov.pt/decreto/) -### Jogos Inclusivos +#### Jogos Inclusivos - [Game Accessibility Guidelines](https://gameaccessibilityguidelines.com/) - [Includification](https://www.includification.com/)