# Changelog — Revisão Global do Portal (2026-07-24)

55 arquivos modificados, 2729 inserções, 1477 deleções.

---

## 1. Support Module — Expansão de Tokens CSS

### 1.1. Nova variável `--tenant-secondary`
- **Motivo**: A variável `--tenant-secondary` era referenciada no CSS (`header-logo.blade.php`, `portal.css`) mas nunca definida.
- **Adicionado** `theme_secondary_color` (default `#0a4c8c`) em:
  - `PortalConfigsService.php` — defaults + grupo TEMA
  - `ModuleProvider.php` — mapeamento no ViewComposer
  - `tema-portal.blade.php` — seletor de cor no CMS
  - `colors.blade.php` — declaração `--tenant-secondary` no `:root`

### 1.2. Padronização de fallbacks `--tenant-primary`
- **Problema**: Havia **3 fallbacks diferentes** para a mesma variável:
  - `#1d4ed8` (header-nav, header-search-area, accessibility/styles, portal.css)
  - `#1a3c6e` (Agenda, Parceiros, Historia, controllers)
  - `#1075ad` (Support module default)
- **Corrigido**: Todos os fallbacks unificados para `#1075ad`.

### 1.3. Bootstrap 5 Theme Override
- **Adicionado** em `colors.blade.php`:
  ```css
  --bs-primary: var(--tenant-primary);
  --bs-primary-rgb: [calculado do hex]
  ```
- **Efeito**: `btn-primary`, `btn-outline-primary`, `text-primary`, `bg-primary`, `badge bg-primary`, `border-primary` passam a usar a cor do portal automaticamente.

---

## 2. Portal Header — Correções e Restauração

### 2.1. SleHeaderSeeder — Hamburger funcional + restauração completa
- **Problema original**: O hamburger `.sidebar__toggle` não tinha JavaScript atrelado — não funcionava.
- **Solução híbrida**: Restaurado o HTML completo do header escuro SUCESU (barra superior, logo, navegação, telefone, redes sociais, search overlay) substituindo **apenas** o hamburger quebrado por um `<button>` Bootstrap Offcanvas com `data-bs-toggle="offcanvas"`.
- **Offcanvas panel**: Novo `#sleOffcanvasNav` com fundo escuro, navegação em lista, `btn-close-white`.
- **Sticky fix**: Adicionado CSS `.sticky .sle-navbar-toggler { color: var(--header) !important; }` para o hamburger ficar visível na versão branca ao scroll.
- **Data fixa**: Corrigido `date('d') de abril` para `date('d') de F' de date('Y')` (mês dinâmico).

### 2.2. `@stack('late-styles')` — Correção de pipeline CSS
- **Problema**: `@stack('styles')` estava no `<head>` (linha 87), mas todo `@push('styles')` em módulos renderizados via SLE `eval()` acontecia depois — o CSS era perdido.
- **Solução**: 
  - Adicionado `@stack('late-styles')` antes de `</body>` em `base.blade.php`
  - Todos os `@push('styles')` em partials renderizados dentro de `@yield('layout-content')` foram migrados para `@push('late-styles')`
  - Afetou: header partials, footer partials, módulos Notícias, Diretoria, Agenda, Parceiros, AssocieSe, ActivityLogger, LandingSectionsEditor

### 2.3. Acessibilidade — Skip Links ocultos
- **Problema**: Ao usar o botão "Voltar ao Topo", a barra de skip links `visually-hidden-focusable` aparecia.
- **Solução**: Removida a regra `:focus-within` que revelava a barra. Os links continuam no DOM e funcionam via `accesskey` e Tab, mas nunca são exibidos.
- **Arquivos**: `accessibility-skips.blade.php`, `portal-base.css`, `portal.css`

---

## 3. Mobile UX

### 3.1. Widget de Acessibilidade — Gerenciamento de Foco
- `scripts.blade.php`: Ao abrir o widget, o foco vai para o primeiro botão interativo. Ao fechar, retorna ao botão de toggle.

### 3.2. Botões A+/A- — Tamanho em Mobile
- `bar-buttons.blade.php`: `font-size: 16px` em mobile (evita zoom automático no iOS).

### 3.3. Back-to-top — Touch Manipulation
- `app-layout.blade.php`: Adicionado `touch-action: manipulation` ao botão (remove delay de 300ms).

### 3.4. Search Dropdown — Fecha ao Scroll
- `header-search-area.blade.php`: Em viewport < 992px, o dropdown de busca fecha automaticamente ao scrollar.

### 3.5. Footer Grid — Breakpoint Mobile
- `footer.blade.php`: `minmax(180px, 1fr)` → `minmax(140px, 1fr)` para telas estreitas.

---

## 4. Módulos — Cores Hardcoded

### 4.1. Diretoria
- `index.blade.php` e `bio.blade.php`: Gradientes hero substituídos por `var(--tenant-secondary)` / `var(--tenant-primary)` com `color-mix()`.
- Cores fixas `.btn-overlay`, `.director-name-link` → `var(--tenant-secondary)`.
- `prefers-reduced-motion: reduce` — staggered entrance animation ignorada.

### 4.2. História
- `index.blade.php`: `#1a3c6e` → `var(--tenant-primary, #1075ad)`.
- `cms/preview.blade.php`: Mesma correção.

### 4.3. Agenda
- `show.blade.php`: Inline styles convertidos para classes CSS (`.evento-title`, `.evento-icon`, `.evento-section-title`, `.evento-sidebar`, `.evento-badge`).
- Fallbacks `#1a3c6e` removidos.

### 4.4. Associados
- `instituicoes.blade.php` e `instituicao.blade.php`: `$pc` e `style="color:{{ $pc }}"` substituídos por `class="text-primary"` e `var(--tenant-primary)`.
- `AssociadosPortalController.php`: Removida DB query duplicada para `theme_primary_color`.

### 4.5. UnidadeRegional
- `index.blade.php` e `show.blade.php`: Mesmo padrão — `$themeColor` removido, uso de `$portalTheme['primary_color']`.
- `UnidadeRegionalPortalController.php`: Removida DB query duplicada.

### 4.6. Parceiros
- `index.blade.php`: `color: #1a3c6e` → `var(--tenant-primary, #1075ad)`.
- `cms/preview.blade.php`: Mesma correção.

### 4.7. Legacy `color.css`
- `--theme: #1a3c6e` → `--theme: #1075ad`.
- `.footer-section { background-color: #1a3c6e }` → `var(--theme)`.

---

## 5. Módulos — Estilos Inline → `@push`

### 5.1. Parceiros/index
- Bloco `<style>` inline movido para `@push('late-styles')`.

### 5.2. AssocieSe/index
- Bloco `<style>` inline movido para `@push('late-styles')`.
- Código jQuery `.nice-select` envolvido em guard `typeof jQuery !== 'undefined'`.

### 5.3. Notícias — Extração CSS
- `portal-noticias.css` (554 linhas) e `portal-noticias-show.css` (306 linhas) extraídos para arquivos separados em `public/assets/css/modules/noticias/`.
- Notícias show: CSS adicionado para `overflow-x: auto` em tabelas de conteúdo rico.
- **Correção de path**: Path movido de `V2/Modules/Publicacoes/Noticias/assets/` (inacessível via web) para `public/assets/css/modules/noticias/`.

---

## 6. Portal CSS — Divisão e Limpeza

### 6.1. `portal.css` dividido em 4 arquivos
| Arquivo | Conteúdo |
|---|---|
| `portal-base.css` | Layer utilities, classes utilitárias |
| `portal-nav.css` | Navegação `.lotep-nav`, offcanvas responsive |
| `portal-a11y.css` | Widget de acessibilidade `.accessibility-widget` |
| `portal-components.css` | Demais componentes (back-to-top, search, footer, pagination) |

### 6.2. Classes legadas removidas
- `.search-input-rounded` e `.search-btn-rounded` (substituídas por `rounded-start-pill`/`rounded-end-pill` do Bootstrap).

### 6.3. Service Worker
- Registro movido de `window.addEventListener('load', ...)` para `window.addEventListener('DOMContentLoaded', ...)`.

---

## 7. Breadcrumbs — Centralização

- **Agenda/show**: Breadcrumb removido de `@section('main-header-area')` e convertido para `@section('breadcrumbs')`, usando o `main-header` do layout.
- **TrabalheConosco/show**: Mesma conversão.
- **main-header.blade.php**: `@if(trim(yieldContent('header-actions')))` → `@hasSection('header-actions')`.

---

## 8. Acessibilidade

### 8.1. VLibras — Fallback de CDN
- `vlibras.blade.php`: Adicionado `s.onerror` handler que exibe "Tradutor Libras temporariamente indisponível." se o script do CDN falhar.

### 8.2. Modal Parceiros — Atributos ARIA
- `parceiros/index.blade.php`: Modal com `role="dialog"`, `aria-modal="true"`, `aria-labelledby`, e foco gerenciado após carregamento AJAX.

### 8.3. Sobre (Homepage) — Contraste
- `lse/render/about.blade.php`: Parágrafo descritivo com `text-white` para legibilidade em fundo escuro (`--header: #6c757d`).

---

## 9. Testes

- **306 testes, 737 assertions — 0 regressões.**
- 2 erros pré-existentes no módulo `GestaoPermissoes` (não relacionados).

---

## Arquivos Modificados (55)

```
V2/Modules/Institucional/Associados/Controllers/AssociadosPortalController.php
V2/Modules/Institucional/Associados/Views/portal/instituicao.blade.php
V2/Modules/Institucional/Associados/Views/portal/instituicoes.blade.php
V2/Modules/Institucional/AssocieSe/Views/portal/index.blade.php
V2/Modules/Institucional/Diretoria/Views/portal/index.blade.php
V2/Modules/Institucional/Diretoria/Views/portal/bio.blade.php
V2/Modules/Institucional/Historia/Views/portal/index.blade.php
V2/Modules/Institucional/Historia/Views/cms/preview.blade.php
V2/Modules/Institucional/UnidadeRegional/Controllers/UnidadeRegionalPortalController.php
V2/Modules/Institucional/UnidadeRegional/Views/portal/index.blade.php
V2/Modules/Institucional/UnidadeRegional/Views/portal/show.blade.php
V2/Modules/Layouts/BasicPage/Views/portal/runtime.blade.php
V2/Modules/Layouts/Homepage/Views/lse/render/about.blade.php
V2/Modules/Publicacoes/Agenda/Views/portal/show.blade.php
V2/Modules/Publicacoes/Noticias/Views/portal/index.blade.php
V2/Modules/Publicacoes/Noticias/Views/portal/show.blade.php
V2/Modules/Publicacoes/Parceiros/Views/portal/index.blade.php
V2/Modules/Publicacoes/Parceiros/Views/cms/preview.blade.php
V2/Modules/Publicacoes/TrabalheConosco/Views/portal/show.blade.php
V2/Modules/Support/StructuralLandingEditor/Views/cms/tabs/userconfigs/tema-portal.blade.php
V2/Modules/Support/SupportConfigs/ModuleProvider.php
V2/Modules/Support/SupportConfigs/Services/PortalConfigsService.php
V2/Seeds/SleHeaderSeeder.php
V2/Services/ActivityLogger/Views/portal/last-updated.blade.php
V2/Services/LandingSectionsEditor/Views/components/landing-sections-viewer.blade.php
V2/layouts/portal/app-layout.blade.php
V2/layouts/portal/base.blade.php
V2/layouts/portal/base-struct/accessibility-skips.blade.php
V2/layouts/portal/base-struct/colors.blade.php
V2/layouts/portal/base-struct/global-banner.blade.php
V2/layouts/portal/base-struct/normalize.blade.php
V2/layouts/portal/base-struct/vlibras.blade.php
V2/layouts/portal/footer/footer.blade.php
V2/layouts/portal/footer/footer-cms-metadata.blade.php
V2/layouts/portal/footer/footer-social-network.blade.php
V2/layouts/portal/header/header.blade.php
V2/layouts/portal/header/header-logo.blade.php
V2/layouts/portal/header/header-nav.blade.php
V2/layouts/portal/header/header-search-area.blade.php
V2/layouts/portal/header/accessibility/bar-buttons.blade.php
V2/layouts/portal/header/accessibility/scripts.blade.php
V2/layouts/portal/header/accessibility/styles.blade.php
V2/layouts/portal/main-section/main-header.blade.php
V2/layouts/portal/search/index.blade.php
public/assets/css/portal.css
public/assets/sucesu/css/color.css
```

### Arquivos Criados (7)
```
public/assets/css/modules/noticias/portal-noticias.css
public/assets/css/modules/noticias/portal-noticias-show.css
public/assets/css/portal/portal-base.css
public/assets/css/portal/portal-nav.css
public/assets/css/portal/portal-a11y.css
public/assets/css/portal/portal-components.css
V2/Modules/Publicacoes/Noticias/assets/portal-noticias.css      (intermediário, substituído)
V2/Modules/Publicacoes/Noticias/assets/portal-noticias-show.css (intermediário, substituído)
```
