// ============================================================ // SEÇÃO · Componentes globais (em todas as telas) // Retorna um array de . Estilo ABS = artboard cresce // com o conteúdo (canvas) e height numérico cobre o foco. // ============================================================ window.ABS = { height: 'auto', overflow: 'visible', background: 'transparent' }; function globalArtboards() { return [ // ---------- G1 · Header universal (desktop) — deslogado + logado ---------- espaço reservado, não recriar a marca.' }, { pin: 2, t: '4 áreas na nav (O Clube, Vida no Iate Clube, Notícias, Serviços). Associe-se vira CTA fixo e Área do Sócio vira botão — ambos saem da navegação.' }, { pin: 3, t: 'Busca + seletor PT/EN sempre acessíveis.' }, { pin: 4, t: 'Entrar / Área do Sócio em destaque — canal oficial, não um "entrar" no canto.' }, { state: true, pin: 5, t: 'Estado logado: o botão vira atalho do painel (avatar + nome).' }, 'Sticky no scroll: cream ~85% + leve blur.' , ]}>
Estado A · Visitante (deslogado)
Estado B · Sócio autenticado (logado)
, // ---------- G1b · Header desktop · mega-menu + clima ---------- mega-menu no desktop (drawer no mobile).', { pin: 1, t: 'Clima / vento no header — utilidade náutica (componente já previsto).' }, { pin: 2, t: 'Hover numa área abre painel com sub-estruturas — mais escaneável p/ 4 áreas.' }, { pin: 3, t: 'Coluna de destaque no painel (ex.: Semana de Vela).' }, 'Náutica & Vela ganha relevo dentro de Vida no Iate Clube.', ]}>
Painel aberto no hover de "Vida no Iate Clube"
, // ---------- G2 · Header + menu drawer (mobile) ---------- drawer full-screen.', { pin: 1, t: 'Busca e PT/EN no topo do drawer.' }, { pin: 2, t: 'As 4 áreas; cada uma abre acordeão com sub-itens.' }, { pin: 3, t: 'Associe-se (CTA) e Entrar / Área do Sócio fixos e destacados no rodapé do drawer.' }, 'Hit targets ≥ 44px. Fecha no "×" ou toque fora.', ]}>
×
⌕ Buscar no site
PTEN
{NAV.concat(['Área do Sócio']).map((n, i) => (
{n} {i < 4 ? '+' : '›'}
))}
Associe-se Entrar · Área do Sócio
, // ---------- G3 · Footer universal (desktop) ---------- Contato das 3 sedes numa página só (resolve telefones espalhados).' }, { pin: 2, t: 'Patrocinadores com hierarquia visual (Master · Oficial · Apoio).' }, { pin: 3, t: 'Newsletter semanal → assinar (substitui o PDF da Revista).' }, 'Imprensa · LGPD · Cookies · selo "Desde 1956".', ]}>
, // ---------- G4 · Busca · resultados (desktop) ---------- Filtro por área e tipo (matéria, evento, documento, página).' }, { pin: 2, t: 'Resultado: tipo, título, trecho e caminho (breadcrumb).' }, { state: true, pin: 3, t: 'Prever estado vazio ("nada encontrado" + sugestões).' }, ]}>
⌕ travessia balsa horário
128 resultados
Filtrar por área
{['Todas', 'O Clube', 'Vida no Iate Clube', 'Notícias', 'Serviços'].map((x, i) =>
{x}
)}
Tipo
{['Matéria', 'Evento', 'Documento', 'Página'].map(x =>
{x}
)}
{[0, 1, 2, 3].map(i => (
{['Serviço', 'Matéria', 'Evento', 'Documento'][i]}/ServiçosTravessia
Título do resultado nº {i + 1}
))}
, // ---------- G5 · Estados de lista (mobile) ----------
{[ ['Vazio', 'empty'], ['Carregando', 'loading'], ['Erro', 'error'], ].map(([title, kind]) => (
{title}
Notícias
TodasEsportesSocial
{kind === 'empty' && (
Nada por aqui ainda
Tente outra categoria ou limpe os filtros. Limpar filtros Estado vazio
)} {kind === 'loading' && (
{[0, 1, 2].map(i => (
))} Carregando · skeleton
)} {kind === 'error' && (
Algo deu errado
Não foi possível carregar agora. Tentar de novo Estado de erro
)}
))}
Notas · estados

Todo bloco de lista prevê vazio, carregando e erro.

Paginação ou scroll infinito + filtro por categoria.

Mesma régua vale para Notícias, Agenda, Documentos e Comunicados.

, // ---------- G6 · Header sticky (scroll) ----------
Desktop · condensado
PT/EN
Entrar
conteúdo rolando sob o header (cream ~85% + blur)
Mobile · sticky
Entrar
barra fina fixa no topo
Notas · sticky

Desktop: header condensa ao rolar (cream ~85% + blur), mantém logo, busca, idioma, Entrar e mega-menu.

Mobile: barra fina sticky com logo + busca + menu; Entrar sempre à mão.

Como a nav fica sempre exposta, a Home não repete as áreas — usa jornadas por intenção.

, // ---------- G7 · Patrocínio · inventário de slots ----------
Sistema · inventário de mídia
Arquitetura de patrocínio
Slots nomeados, geridos pelo CMS
SLOTONDE · FORMATO
{[ ['home-hero-cobrand', 'Hero · "apresentado por" (sutil)'], ['home-faixa-master', 'Faixa nobre pós-hero · cota Master'], ['infeed-native', 'A cada N cards · Notícias/Agenda'], ['article-mid / sidebar', 'Dentro da matéria · retângulo'], ['editoria-apresentada', 'Rodapé de editoria · "apresentada por"'], ['event-presented-by / faixa', 'Header e base de Evento/Regata/Semana de Vela'], ['footer-apoiadores', 'Todas as páginas · grade por nível'], ['anchor-mobile', 'Faixa sticky inferior (opcional)'], ].map(([s, w], i) => (
{s}{w}
))}
{['Master', 'Oficial', 'Apoio', 'Fornecedor Oficial', 'Apoio de Evento'].map(c => {c})}
Notas · patrocínio

Um conteúdo, uma fonte: documentos Patrocinador + Inserção/Campanha (patrocinador → slots + período + criativo). CMS faz rotação.

Native sempre rotulado "Patrocinado / Apresentado por" (transparência), reusa o molde Matéria.

Afinidade por seção: náutico em Esportes/Regatas; banco na Home/institucional (sem rastreamento).

Área do Sócio sem anúncio comercial — preserva o canal oficial.

Métricas por slot (GA4 + Vercel) → alimentam o Media Kit e a renovação de cotas.

, ]; } window.globalArtboards = globalArtboards;