Análise concluída

Pass the Salt

passthesalt.com

Pass the Salt constrói uma linguagem visual Estrutura com forte presença de mídia e Hierarquia orientada por tipografia, apoiada por uma base escuro e pela tipografia Good Sans. Sua experiência de studio coloca o ritmo editorial e a narrativa de conteúdo no centro da composição.

/ 01 . Color

Paleta de cores

Sistema visual extraído de estilos computados, variáveis CSS e usos recorrentes de foreground/background na página analisada.

Background

#15171a

Page canvas · Observado

TextPrimary

#ffffff

Primary text · Observado

Neutral family 1

#000000

Observado família da paleta

Neutral family 2

#fdfaf1

Observado família da paleta

Neutral family 3

#c4c4c4

Observado família da paleta

Pink family 1

#350016

Observado família da paleta

Pink family 2

#5d0f3e

Observado família da paleta

Pink family 3

#ebccdf

Observado família da paleta

Blue family 1

#007cba

Observado família da paleta

Blue family 2

#006ba1

Observado família da paleta

Blue family 3

#005a87

Observado família da paleta

Red family 1

#f78da7

Observado família da paleta

/ 02 . Typography

Sistema tipográfico

utilityHeading

Aa Linguagem visual

Família
Good Sans
Tamanho
16px
Peso
400
Linha
24px

bodyStrong

Aa Linguagem visual

Família
Integral
Tamanho
45px
Peso
700
Linha
45px

caption

Aa Linguagem visual

Família
Good Sans
Tamanho
13px
Peso
400
Linha
19.5px

body

Aa Linguagem visual

Família
Good Sans
Tamanho
15px
Peso
400
Linha
22.5px

button

Aa Linguagem visual

Família
Good Sans
Tamanho
45px
Peso
400
Linha
54px

smallHeading

Aa Linguagem visual

Família
Good Sans
Tamanho
12px
Peso
400
Linha
12px

/ 03 . System

Espaçamento e forma

Ritmo de espaçamento

controlGap1

10px

controlGap2

100px

contentGap1

50px

contentGap2

60px

sectionGap1

75px

sectionGap2

120px

space-xs

5px

space-sm

7.5px

Raios de canto

fullRadius

9999px

Linguagem de bordas

defaultBorder

1px solid rgb(21, 23, 26)

/ 04 . Components

Padrões de interface

Header

inferred

Reusable header pattern.

Large Navigation Link

observed

Primary navigation between major destinations.

"Good Sans", Arial, sans-serif | 35px | 400 | 42px | normal

Small Navigation Link

observed

Primary navigation between major destinations.

"Good Sans", Arial, sans-serif | 16px | 400 | 24px | normal36x36px

Navigation Control

inferred

Compact control within site navigation.

"Good Sans", Arial, sans-serif | 16px | 400 | 24px | normal

Display Heading

inferred

Primary page statement.

"Good Sans", Arial, sans-serif | 16px | 400 | 24px | normal

Inline Text Link

inferred

Text navigation embedded in compact content flow.

"Good Sans", Arial, sans-serif | 16px | 400 | 24px | normal
Ver conteúdo completo do DESIGN.md
# DESIGN.md

## 1. Visão geral

Interface orientada por hierarquia visual clara, superfícies consistentes e uma paleta semântica controlada.
Use os tokens e contratos abaixo como fonte normativa para implementação responsiva e acessível.

> Contrato normativo de implementação: preserve os nomes semânticos dos tokens, regras de responsividade e estados de interação ao estender a interface.

## 2. Cores e acessibilidade

### Tokens semânticos de cor

| Token | Valor Hex | Finalidade |
|---|---|---|
| background | `#15171a` | Canvas principal |
| surface | `#15171a` | Superfícies elevadas |
| text-primary | `#ffffff` | Texto principal |
| text-secondary | `#ffffff` | Texto secundário |
| text-muted | `#ffffff` | Texto auxiliar |
| text-on-brand | `#ffffff` | Texto sobre a marca |
| border | `#d1d5db` | Bordas e divisores |
| brand | `#2563eb` | Ação principal da marca |
| success | `#166534` | Estado positivo |
| danger | `#b91c1c` | Estado destrutivo |
| warning | `#92400e` | Estado de alerta |
| info | `#075985` | Estado informativo |
| focus | `#1d4ed8` | Anel de foco |

### Regras WCAG AA

- Texto normal deve atingir contraste mínimo de 4,5:1.
- Texto grande e elementos de interface devem atingir contraste mínimo de 3:1.
- O foco visível deve manter contraste mínimo de 3:1 e nunca depender apenas de cor.
- Use somente combinações entre tokens semânticos que cumpram essas taxas.

## 3. Tipografia

### Família

| Token | Família | Uso |
|---|---|---|
| font-primaryfont | `'Good Sans', sans-serif` | Body and interface text |
| font-bodyfont | `'Integral', sans-serif` | Body and interface text |

### Escala tipográfica

| Token | Família | Tamanho | Peso | Altura de linha |
|---|---|---:|---:|---:|
| type-utilityheading | `'Good Sans', sans-serif` | `16px` | `400` | `24px` |
| type-bodystrong | `'Integral', sans-serif` | `45px` | `700` | `45px` |
| type-caption | `'Good Sans', sans-serif` | `13px` | `400` | `19.5px` |
| type-body | `'Good Sans', sans-serif` | `15px` | `400` | `22.5px` |
| type-button | `'Good Sans', sans-serif` | `45px` | `400` | `54px` |
| type-smallheading | `'Good Sans', sans-serif` | `12px` | `400` | `12px` |

## 4. Layout e espaçamento

### Breakpoints

- **Mobile:** `< 768px` — grid de 1 coluna, gutters de 16px/24px e navegação empilhada.
- **Tablet:** `768px–1023px` — grid adaptativo e gutters de 32px/48px.
- **Desktop:** `>= 1024px` — gutters de 120px e container com largura máxima definida pelo layout.

### Regras responsivas

- **Header:** empilhe navegação e ações no mobile; mantenha a navegação principal em linha a partir do tablet.
- **Hero:** use uma coluna no mobile, composição equilibrada em duas colunas no tablet e o container completo no desktop.
- **Cards:** ocupe a largura do grid no mobile, use duas colunas no tablet e o grid definido no desktop.
- **Grid de navegação: use uma coluna no mobile, colunas adaptativas no tablet e a composição completa no desktop.

### Escala de espaçamento

| Token | Valor | Uso |
|---|---:|---|
| space-xs | `5px` | Escala de layout |
| space-sm | `7.5px` | Escala de layout |
| space-md | `10px` | Escala de layout |
| space-lg | `20px` | Escala de layout |
| space-xl | `25px` | Escala de layout |

## 5. Formas, bordas e profundidade

### Raios

| Token | Valor | Uso |
|---|---:|---|
| radius-sm | `4px` | Controles compactos |
| radius-md | `12px` | Cards e superfícies |
| radius-full | `9999px` | Pills e controles circulares |

### Bordas e profundidade

- Largura da borda: `var(--ds-border-width)`.
- Estilo da borda: `solid`.
- Cor da borda: `var(--ds-color-border)`.
- Use `var(--ds-shadow-sm)` para elevação baixa e `var(--ds-shadow-inner)` para separação interna.

## 6. Especificação de componentes

### Header

- **Componente:** Reusable header pattern.
- **Tipografia:** `var(--ds-type-body)`
- **Cores:** `var(--ds-color-text-primary)` e `var(--ds-color-text-on-brand)` sobre a marca
- **Geometria:** `var(--ds-radius-md)` e `var(--ds-space-sm)` de espaçamento interno
- **Borda:** `var(--ds-border-width) solid var(--ds-color-border)`

### Navigation Link — Large

- **Componente:** Primary navigation between major destinations.
- **Tipografia:** `var(--ds-type-body)`
- **Cores:** `var(--ds-color-brand)` e `var(--ds-color-text-on-brand)` sobre a marca
- **Geometria:** `var(--ds-radius-md)` e `var(--ds-space-sm)` de espaçamento interno
- **Borda:** `var(--ds-border-width) solid var(--ds-color-border)`

### Navigation Control

- **Componente:** Compact control within site navigation.
- **Tipografia:** `var(--ds-type-body)`
- **Cores:** `var(--ds-color-text-primary)` e `var(--ds-color-text-on-brand)` sobre a marca
- **Geometria:** `var(--ds-radius-md)` e `var(--ds-space-sm)` de espaçamento interno
- **Borda:** `var(--ds-border-width) solid var(--ds-color-border)`

### Display Heading

- **Componente:** Primary page statement.
- **Tipografia:** `var(--ds-type-heading-medium)`
- **Cores:** `var(--ds-color-text-primary)` e `var(--ds-color-text-on-brand)` sobre a marca
- **Geometria:** `var(--ds-radius-md)` e `var(--ds-space-sm)` de espaçamento interno
- **Borda:** `var(--ds-border-width) solid var(--ds-color-border)`

### Inline Text Link

- **Componente:** Text navigation embedded in compact content flow.
- **Tipografia:** `var(--ds-type-body)`
- **Cores:** `var(--ds-color-brand)` e `var(--ds-color-text-on-brand)` sobre a marca
- **Geometria:** `var(--ds-radius-md)` e `var(--ds-space-sm)` de espaçamento interno
- **Borda:** `var(--ds-border-width) solid var(--ds-color-border)`

## 7. Contrato de interação

### Regras universais de estado

| Estado | Comportamento visual |
|---|---|
| Estado inicial | Use `var(--ds-color-surface)`, `var(--ds-color-text-primary)`, `var(--ds-color-border)`, `var(--ds-type-body)` e `var(--ds-radius-md)`. |
| `:hover` | Aumente a ênfase com `var(--ds-color-brand-hover)` ou `var(--ds-color-surface-hover)`; preserve geometria e layout. |
| `:active` | Aplique `var(--ds-color-brand-active)` ou `var(--ds-color-surface-active)`; preserve dimensões. |
| `:focus-visible` | Exiba anel de `var(--ds-focus-ring-width)` usando `var(--ds-color-focus)`, com afastamento `var(--ds-focus-ring-offset)`. |
| `:disabled` | Use `var(--ds-state-disabled-opacity)`, `cursor: not-allowed` e `pointer-events: none`; remova eventos de ponteiro. |

## 8. Design tokens

```css
:root {
  --ds-color-background: #15171a;
  --ds-color-surface: #15171a;
  --ds-color-text-primary: #ffffff;
  --ds-color-text-secondary: #ffffff;
  --ds-color-text-muted: #ffffff;
  --ds-color-text-on-brand: #ffffff;
  --ds-color-border: #d1d5db;
  --ds-color-brand: #2563eb;
  --ds-color-brand-hover: color-mix(in srgb, var(--ds-color-brand) 86%, var(--ds-color-text-primary));
  --ds-color-brand-active: color-mix(in srgb, var(--ds-color-brand) 72%, var(--ds-color-text-primary));
  --ds-color-surface-hover: color-mix(in srgb, var(--ds-color-surface) 92%, var(--ds-color-text-primary));
  --ds-color-surface-active: color-mix(in srgb, var(--ds-color-surface) 84%, var(--ds-color-text-primary));
  --ds-color-success: #166534;
  --ds-color-danger: #b91c1c;
  --ds-color-warning: #92400e;
  --ds-color-info: #075985;
  --ds-color-focus: #1d4ed8;
  --ds-font-body: 'Good Sans', sans-serif;
  --ds-type-body: 'Good Sans', sans-serif 16px 400 / 24px;
  --ds-type-heading-large: 'Good Sans', sans-serif 48px 700 / 1.1;
  --ds-type-heading-medium: 'Good Sans', sans-serif 32px 600 / 1.2;
  --ds-type-heading-small: 'Good Sans', sans-serif 24px 600 / 1.25;
  --ds-type-caption: 'Integral', sans-serif 12px 500 / 16px;
  --ds-space-xs: 4px;
  --ds-space-sm: 8px;
  --ds-space-md: 16px;
  --ds-space-lg: 24px;
  --ds-space-xl: 40px;
  --ds-border-width: 1px;
  --ds-radius-sm: 4px;
  --ds-radius-md: 12px;
  --ds-radius-full: 9999px;
  --ds-shadow-sm: 0 2px 8px rgb(0 0 0 / 0.12);
  --ds-shadow-inner: inset 0 1px 2px rgb(0 0 0 / 0.12);
  --ds-breakpoint-tablet: 768px;
  --ds-breakpoint-desktop: 1024px;
  --ds-gutter-mobile: 16px;
  --ds-gutter-mobile-large: 24px;
  --ds-gutter-tablet: 32px;
  --ds-gutter-tablet-large: 48px;
  --ds-gutter-desktop: 120px;
  --ds-focus-ring-width: 2px;
  --ds-focus-ring-offset: 2px;
  --ds-state-disabled-opacity: 0.5;
  --ds-transition-fast: 150ms ease-out;
}
```