一、④段整套同步(用户选候选 A)
- 新增 `references/stage-proto-doc/assets/产品文档模板.html`(16 KB/247 行,从备份拷、转 LF)。
- ④段 SKILL.md 换成备份 15:28 那版,并按模板口径改齐:
· 「产品文档框架」从「四块+一附录」改成**六节** —— 页面结构/功能清单/使用场景/操作流程/
跨页与界面状态/待确认与偏离;与模板同构,⛔ 不从空白页重写结构。
· 编号从 R/S/F 改成 **P 页面/S 场景/F 功能/J 二级功能**,各自唯一、按展示顺序通排。
· 保留旧版有价值的要求:每项功能补齐 做什么/入口在哪/输入边界/异常与恢复;重点功能三处标红;
横向流程图每步写清页面/功能/操作/完成判据。
· 完成标准「七节」→「六节」,自查清单同步换掉「需求」那批条目,补模板与配图两条。
· 路径 `designs/<项目>/` → `docs/pm/<项目>/ui/`(2 处)。
· 补回本机那条「每份产出文档开头都要有一张图」的引用(指向主 skill,段内不复述)。
- 主 skill 同步:四段结构表④行、④段沿革、画图小节(④段画页面结构图 + 用户路径)。
二、open-design 移到技能根(用户选候选 A)
- `git mv product-planning/references/stage-delivery/assets/open-design → open-design/`(4178 文件)。
- `.gitignore` 白名单加 `!/open-design/` —— 否则移出去就不再纳入版本控制。
- 引用改 11 处:路径形态 `assets/open-design/...` → `<技能根>/open-design/...`;
「随段携带的自带件」改称「同根技能」;「路径怎么找」那条改成自带件(段内相对路径)与
同根技能(`<技能根>/<技能名>/`)两类分开写。
- open-design 自己的 ATTRIBUTION.md 两处同步(它现在与 oil-ui-pro 同层)。
- 副作用(有益):命名闸门读数由 2063 降到 225 —— 此前它把 open-design 里 919 个第三方 md
当成规则一起扫了;现在只扫本包 23 个 md。已确认④段的 H1 与 4a/4b/4c 子步仍在检查范围内。
三、验收
- check_naming.py --ws E:/ProgramData/AIProject/contentm_agent = 通过 225 / 失败 0 / 提示 27。
- 活文件里 `assets/open-design` 残留 0;工作区 CRLF 文件 0。
364 lines
14 KiB
Markdown
364 lines
14 KiB
Markdown
# Sistema di design ispirato a Slack
|
||
|
||
> Category: Produttività e SaaS
|
||
> Piattaforma di comunicazione aziendale. Palette primaria melanzana, palette multi-accento del logo, superfici chiare con barra laterale scura, tono caldo e accessibile.
|
||
|
||
## 1. Tema visivo e atmosfera
|
||
|
||
L'identità di Slack si costruisce attorno all'idea che il lavoro debba sembrare umano e persino un po' divertente. La superficie canonica è **chiara** — aree di contenuto bianche con una profonda barra laterale melanzana (`#4A154B`) — l'opposto degli strumenti a dominante scura. Questo contrasto è intenzionale: la barra laterale è un'ancora di navigazione tranquilla e sempre presente, mentre l'area del contenuto è luminosa e aperta.
|
||
|
||
La palette del logo — blu, verde, giallo, rosso — appare principalmente nell'icona del cancelletto e nei contesti di marketing, non disseminata nell'interfaccia. Nel prodotto stesso, Slack utilizza un sistema di colori sobrio e professionale con il melanzana come unico ancoraggio del brand.
|
||
|
||
**Caratteristiche principali:**
|
||
- Superfici di contenuto prevalentemente chiare: bianco `#FFFFFF` e quasi bianco `#F8F8F8`
|
||
- Profonda barra laterale melanzana `#4A154B` — l'elemento di interfaccia più riconoscibile del brand
|
||
- Quattro colori di accento del logo (blu, verde, giallo, rosso) usati con parsimonia, solo come evidenziazioni
|
||
- Larsseit per i titoli (marketing), sans-serif di sistema per l'interfaccia
|
||
- Arrotondato ma non cartoonesco: raggio di 4–8px sulla maggior parte dei componenti
|
||
- Denso ma respirabile: righe di messaggi compatte con chiara gerarchia dei thread
|
||
- Tono caldo e conversazionale — emoji, reazioni e illustrazioni sono elementi di prima classe
|
||
|
||
---
|
||
|
||
## 2. Palette di colori e ruoli
|
||
|
||
### Colore primario del brand
|
||
| Token | Hex | Ruolo |
|
||
|---|---|---|
|
||
| `--color-aubergine` | `#4A154B` | Sfondo della barra laterale, colore principale del brand |
|
||
| `--color-aubergine-dark` | `#350d36` | Stati di hover su superfici melanzana |
|
||
| `--color-aubergine-light` | `#611f69` | Evidenziazione dell'elemento attivo nella barra laterale |
|
||
|
||
### Colori di accento del logo (usare con parsimonia — solo evidenziazioni, icone, marketing)
|
||
| Token | Hex | Nome | Ruolo |
|
||
|---|---|---|---|
|
||
| `--color-blue` | `#36C5F0` | Azzurro cielo | Icone di canale, link, stati informativi |
|
||
| `--color-green` | `#2EB67D` | Verde acqua | Stato online, stati di successo |
|
||
| `--color-yellow` | `#ECB22E` | Oro | Stato assente, avvisi, evidenziazioni |
|
||
| `--color-red` | `#E01E5A` | Rubino | Notifiche, errori, badge menzioni |
|
||
|
||
### Superficie e sfondo
|
||
| Token | Hex | Ruolo |
|
||
|---|---|---|
|
||
| `--bg-primary` | `#FFFFFF` | Area principale dei messaggi, modali |
|
||
| `--bg-secondary` | `#F8F8F8` | Pannelli dei thread, superfici secondarie |
|
||
| `--bg-tertiary` | `#F1F1F1` | Sfondi dei campi di input, stati di hover |
|
||
| `--bg-sidebar` | `#4A154B` | Barra laterale sinistra (melanzana) |
|
||
| `--bg-sidebar-hover` | `rgba(255,255,255,0.1)` | Hover su elemento della barra laterale |
|
||
| `--bg-sidebar-active` | `rgba(255,255,255,0.2)` | Elemento attivo della barra laterale |
|
||
| `--bg-message-hover` | `#F8F8F8` | Hover su riga del messaggio |
|
||
|
||
### Colori del testo
|
||
| Token | Hex | Ruolo |
|
||
|---|---|---|
|
||
| `--text-primary` | `#1D1C1D` | Testo principale del corpo (quasi nero) |
|
||
| `--text-secondary` | `#616061` | Timestamp, etichette attenuate |
|
||
| `--text-sidebar` | `rgba(255,255,255,0.9)` | Nomi dei canali nella barra laterale |
|
||
| `--text-sidebar-muted` | `rgba(255,255,255,0.6)` | Elementi inattivi della barra laterale |
|
||
| `--text-link` | `#1264A3` | Link in linea nei messaggi |
|
||
| `--text-mention` | `#1264A3` | Colore del testo delle @menzioni |
|
||
|
||
### Colori semantici
|
||
| Token | Hex | Ruolo |
|
||
|---|---|---|
|
||
| `--color-success` | `#2EB67D` | Notifiche di successo, stati positivi |
|
||
| `--color-warning` | `#ECB22E` | Stati di avviso |
|
||
| `--color-danger` | `#E01E5A` | Stati di errore, azioni distruttive |
|
||
| `--color-info` | `#36C5F0` | Evidenziazioni informative |
|
||
|
||
### Bordo e divisore
|
||
| Token | Hex | Ruolo |
|
||
|---|---|---|
|
||
| `--border-default` | `#DDDDDD` | Divisori standard, bordi delle schede |
|
||
| `--border-subtle` | `#F1F1F1` | Separatori sottili tra le righe |
|
||
| `--border-focus` | `#1264A3` | Colore dell'anello di focus |
|
||
|
||
---
|
||
|
||
## 3. Regole tipografiche
|
||
|
||
### Caratteri tipografici
|
||
| Ruolo | Ufficiale | Alternativa web |
|
||
|---|---|---|
|
||
| Titoli di visualizzazione / Marketing | Larsseit | `'Larsseit', 'Helvetica Neue', Arial, sans-serif` |
|
||
| Interfaccia / Corpo / Chrome | Slack Lato (personalizzato) | `system-ui, -apple-system, BlinkMacSystemFont, sans-serif` |
|
||
| Codice / Monospaziato | — | `'Monaco', 'Menlo', 'Courier New', monospace` |
|
||
|
||
> Slack usa **Larsseit** per i titoli di marketing e una variante personalizzata di Lato per l'interfaccia del prodotto. Per l'uso web, `system-ui` è l'alternativa più sicura.
|
||
|
||
### Scala tipografica
|
||
|
||
| Livello | Dimensione | Peso | Altezza di riga | Spaziatura lettere | Utilizzo |
|
||
|---|---|---|---|---|---|
|
||
| Visualizzazione XL | 48px | 800 | 1.1 | -1px | Titoli hero di marketing |
|
||
| Visualizzazione L | 36px | 700 | 1.15 | -0.5px | Hero di sezione |
|
||
| Titolo 1 | 28px | 700 | 1.25 | normal | Titoli di modali, intestazioni di pagina |
|
||
| Titolo 2 | 22px | 700 | 1.3 | normal | Titoli di schede, sezioni delle impostazioni |
|
||
| Titolo 3 | 18px | 700 | 1.35 | normal | Intestazioni di sottosezione |
|
||
| Corpo L | 16px | 400 | 1.5 | normal | Testo dei messaggi, descrizioni |
|
||
| Corpo | 15px | 400 | 1.46667 | normal | Testo di interfaccia predefinito (dimensione base di Slack) |
|
||
| Corpo SM | 13px | 400 | 1.38462 | normal | Metadati secondari |
|
||
| Didascalia | 12px | 400 | 1.33 | normal | Timestamp, suggerimenti |
|
||
| Codice | 12px | 400 | 1.5 | normal | Codice in linea, blocchi di codice |
|
||
|
||
### Regole tipografiche
|
||
- La dimensione di corpo base di Slack è **15px** — leggermente inferiore a 16px per maggiore densità
|
||
- Canali non letti: peso 700 — il grassetto è il principale indicatore di non letto
|
||
- Timestamp: 12px `--text-secondary`, mostrati solo al passaggio del cursore
|
||
- Blocchi di codice: sfondo `#F8F8F8`, bordo `1px solid #DDDDDD`, border-radius 4px
|
||
- Non usare mai dimensioni di font inferiori a 12px
|
||
- Titoli di marketing: spaziatura lettere `-1px` per le grandi dimensioni di visualizzazione
|
||
|
||
---
|
||
|
||
## 4. Stili dei componenti
|
||
|
||
### Pulsanti
|
||
|
||
```css
|
||
/* Primary */
|
||
.btn-primary {
|
||
background: #4A154B;
|
||
color: #FFFFFF;
|
||
border-radius: 4px;
|
||
padding: 0 16px;
|
||
height: 36px;
|
||
font-size: 15px;
|
||
font-weight: 700;
|
||
border: none;
|
||
}
|
||
.btn-primary:hover { background: #611f69; }
|
||
|
||
/* Secondary */
|
||
.btn-secondary {
|
||
background: #FFFFFF;
|
||
color: #1D1C1D;
|
||
border: 1px solid #DDDDDD;
|
||
border-radius: 4px;
|
||
padding: 0 16px;
|
||
height: 36px;
|
||
font-size: 15px;
|
||
font-weight: 700;
|
||
}
|
||
.btn-secondary:hover { background: #F8F8F8; }
|
||
|
||
/* Danger */
|
||
.btn-danger {
|
||
background: #E01E5A;
|
||
color: #FFFFFF;
|
||
border-radius: 4px;
|
||
}
|
||
.btn-danger:hover { background: #B3114A; }
|
||
```
|
||
|
||
### Campi di input
|
||
```css
|
||
.input {
|
||
background: #FFFFFF;
|
||
border: 1px solid #DDDDDD;
|
||
border-radius: 4px;
|
||
color: #1D1C1D;
|
||
font-size: 15px;
|
||
padding: 8px 12px;
|
||
height: 36px;
|
||
}
|
||
.input:focus {
|
||
border-color: #1264A3;
|
||
box-shadow: 0 0 0 2px rgba(18,100,163,0.25);
|
||
outline: none;
|
||
}
|
||
```
|
||
|
||
### Elemento di canale nella barra laterale
|
||
```css
|
||
.channel-item {
|
||
height: 28px;
|
||
padding: 0 16px;
|
||
border-radius: 6px;
|
||
color: rgba(255,255,255,0.7);
|
||
font-size: 15px;
|
||
font-weight: 400;
|
||
}
|
||
.channel-item:hover {
|
||
background: rgba(255,255,255,0.1);
|
||
color: #FFFFFF;
|
||
}
|
||
.channel-item.active {
|
||
background: rgba(255,255,255,0.2);
|
||
color: #FFFFFF;
|
||
}
|
||
.channel-item.unread {
|
||
color: #FFFFFF;
|
||
font-weight: 700;
|
||
}
|
||
```
|
||
|
||
### Badge messaggi non letti
|
||
```css
|
||
.badge {
|
||
background: #E01E5A;
|
||
color: #FFFFFF;
|
||
border-radius: 8px;
|
||
font-size: 11px;
|
||
font-weight: 700;
|
||
padding: 1px 6px;
|
||
min-width: 18px;
|
||
}
|
||
```
|
||
|
||
### Allegati messaggi / Schede
|
||
```css
|
||
.attachment {
|
||
border-left: 4px solid #DDDDDD;
|
||
background: #F8F8F8;
|
||
border-radius: 0 4px 4px 0;
|
||
padding: 8px 12px;
|
||
margin: 4px 0;
|
||
}
|
||
```
|
||
|
||
### Reazioni
|
||
```css
|
||
.reaction {
|
||
border: 1px solid #DDDDDD;
|
||
border-radius: 24px;
|
||
background: #F8F8F8;
|
||
padding: 2px 8px;
|
||
font-size: 13px;
|
||
cursor: pointer;
|
||
}
|
||
.reaction:hover { background: #F1F1F1; }
|
||
.reaction.active {
|
||
background: rgba(18,100,163,0.1);
|
||
border-color: #1264A3;
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 5. Principi di layout
|
||
|
||
### Layout a tre colonne
|
||
```
|
||
┌──────────────┬──────────────────────────────┬─────────────┐
|
||
│ Sidebar │ Message Area │ Thread │
|
||
│ (240px) │ (flex: 1) │ (400px) │
|
||
│ #4A154B │ #FFFFFF │ optional │
|
||
└──────────────┴──────────────────────────────┴─────────────┘
|
||
```
|
||
|
||
### Sistema di spaziatura (base 4px)
|
||
| Token | Valore | Utilizzo |
|
||
|---|---|---|
|
||
| `--space-1` | 4px | Spazi ridotti |
|
||
| `--space-2` | 8px | Padding del componente |
|
||
| `--space-3` | 12px | Padding dei campi di input |
|
||
| `--space-4` | 16px | Padding standard |
|
||
| `--space-6` | 24px | Padding delle schede |
|
||
| `--space-8` | 32px | Spazi tra sezioni |
|
||
|
||
### Struttura della barra laterale
|
||
```
|
||
[Workspace Name ▼]
|
||
────────────────────
|
||
Threads
|
||
All DMs
|
||
Drafts & Sent
|
||
────────────────────
|
||
▼ Channels
|
||
# general
|
||
# random
|
||
# design ● (unread)
|
||
────────────────────
|
||
▼ Direct Messages
|
||
John Doe
|
||
Jane Smith
|
||
```
|
||
|
||
### Compositore di messaggi
|
||
- Fissato in fondo all'area dei messaggi
|
||
- `border: 1px solid #DDDDDD`, `border-radius: 8px`, `margin: 0 16px 16px`
|
||
- Barra degli strumenti: emoji, allegato, formato, pulsante di invio
|
||
|
||
---
|
||
|
||
## 6. Profondità ed elevazione
|
||
|
||
Slack usa ombre leggere su una superficie chiara:
|
||
|
||
| Livello | Utilizzo | Ombra |
|
||
|---|---|---|
|
||
| Piatto | Righe dei messaggi, elementi della barra laterale | none |
|
||
| Basso | Schede, campi di input | `0 1px 3px rgba(0,0,0,0.08)` |
|
||
| Medio | Menu a discesa, popover | `0 4px 12px rgba(0,0,0,0.12)` |
|
||
| Alto | Modali, finestre di dialogo | `0 8px 24px rgba(0,0,0,0.15)` |
|
||
| Sovrapposizione | Sfondi delle modali | `rgba(0,0,0,0.5)` |
|
||
|
||
---
|
||
|
||
## 7. Cosa fare e cosa non fare
|
||
|
||
### ✅ Fare
|
||
- Usare il melanzana `#4A154B` per la barra laterale — è l'elemento di interfaccia più iconico di Slack
|
||
- Mantenere l'area di contenuto principale bianca e chiara
|
||
- Usare `#1D1C1D` (quasi nero) per tutto il testo del corpo, non il nero puro
|
||
- Mettere in grassetto i nomi dei canali per indicare lo stato non letto — il peso è l'indicatore
|
||
- Usare i quattro colori di accento solo per ruoli semantici (successo, avviso, pericolo, informazione)
|
||
- Applicare `border-left: 4px` agli allegati e alle incorporazioni dei messaggi
|
||
- Mostrare i timestamp solo al passaggio del cursore
|
||
- Usare `#1264A3` per link e stati di focus
|
||
- Mantenere gli elementi della barra laterale compatti: altezza 28px, border-radius 6px
|
||
|
||
### ❌ Non fare
|
||
- Non usare un'area di contenuto principale scura — Slack è prevalentemente chiaro
|
||
- Non disseminare blu/verde/giallo/rosso come accenti decorativi
|
||
- Non usare il nero puro `#000000` per il testo
|
||
- Non usare fumetti — i messaggi sono righe piatte
|
||
- Non fare pulsanti con raggio grande — 4px è lo standard
|
||
- Non mostrare i timestamp in modo permanente
|
||
- Non usare MAIUSCOLO per i nomi dei canali
|
||
- Non usare dimensioni di font inferiori a 12px
|
||
|
||
---
|
||
|
||
## 8. Comportamento responsivo
|
||
|
||
### Breakpoint
|
||
| Breakpoint | Larghezza | Layout |
|
||
|---|---|---|
|
||
| Mobile | < 768px | Pannello singolo, barra laterale come cassetto sinistro |
|
||
| Tablet | 768–1024px | Solo barra laterale + area messaggi |
|
||
| Desktop | > 1024px | Layout completo a tre colonne |
|
||
|
||
### Adattamenti per mobile
|
||
- Barra laterale: cassetto sinistro, scorrere a destra per aprire
|
||
- Barra delle schede inferiore: Home, MD, Attività, Tu
|
||
- Pannello thread: sovrapposizione a schermo intero
|
||
- Compositore: fissato sopra la tastiera
|
||
- Elementi dell'elenco canali: altezza del target di tocco 44px
|
||
- Barra dell'intestazione melanzana superiore mantenuta su mobile
|
||
|
||
---
|
||
|
||
## 9. Guida ai prompt per agente
|
||
|
||
Quando si generano design in stile Slack, seguire questo approccio:
|
||
|
||
**Applicazione dei colori:**
|
||
> Impostare `background: #FFFFFF` come tela principale. Usare `#4A154B` (melanzana) per la barra laterale. Tutto il testo principale è `#1D1C1D`. Link e anelli di focus usano `#1264A3`. I quattro colori del logo — `#36C5F0`, `#2EB67D`, `#ECB22E`, `#E01E5A` — sono esclusivamente semantici: informazione, successo, avviso, pericolo.
|
||
|
||
**Tipografia:**
|
||
> Usare `system-ui, -apple-system, sans-serif` per tutta l'interfaccia. La dimensione base è 15px. Canali non letti: peso 700. Testo del corpo: peso 400. Timestamp: 12px `#616061`, solo al passaggio del cursore. Codice: `Monaco, Menlo, monospace`, 12px, sfondo `#F8F8F8`.
|
||
|
||
**Layout:**
|
||
> Tre colonne: barra laterale melanzana da 240px + area messaggi bianca flessibile + pannello thread opzionale da 400px. Elementi della barra laterale: altezza 28px, raggio 6px, grassetto quando non letti. Compositore: fissato in basso, `border: 1px solid #DDDDDD`, `border-radius: 8px`.
|
||
|
||
**Componenti:**
|
||
> Pulsanti: raggio 4px, altezza 36px, melanzana primario. Campi di input: bordo `1px solid #DDDDDD`, anello di focus `#1264A3`. Righe dei messaggi: piatte, senza fumetti, avatar circolare da 36px. Reazioni: pillola `border: 1px solid #DDDDDD`, `border-radius: 24px`.
|
||
|
||
**Tono:**
|
||
> Slack è caldo, professionale e umano. Gli stati vuoti usano illustrazioni amichevoli. Le chiamate all'azione sono dirette: «Invia messaggio», «Inizia». I messaggi di errore sono chiari e utili. Mai allarmante.
|
||
|
||
**Antipattern da evitare:**
|
||
> Nessuna area di contenuto scura. Nessun fumetto. Nessun testo nero puro. Nessun accento multicolore disseminato. Nessun nome di canale in MAIUSCOLO. Nessun font inferiore a 12px. Nessun raggio di pulsante grande.
|