$npx -y skills add transilienceai/communitytools --skill transilience-report-styleThreat Intelligence Report Design System — ReportLab-based PDF generation for A4 reports with Transilience branding, typography, and layout standards.
| 1 | # Transilience AI — Threat Intelligence Report Design System |
| 2 | |
| 3 | **Version:** 5.0 — **Light theme** (modern, minimal, professional) |
| 4 | **Format:** PDF (A4), ReportLab |
| 5 | **Last Updated:** July 7, 2026 |
| 6 | |
| 7 | --- |
| 8 | |
| 9 | ## 0. Theme (v5.0) |
| 10 | |
| 11 | The report now renders a **light theme by default** (white page, dark ink, brand accents). Both palettes live |
| 12 | in the `THEME` dict in `generate_report.py`; select with **`--theme light|dark`** (or `engagement.theme`). |
| 13 | **Precedence:** `--theme` > `engagement.theme` > `light`; an unknown value falls back to `light` (never errors). |
| 14 | The pentest-engagement finalize gate passes no `--theme`, so all gated PDFs are light. The sections below marked |
| 15 | "(dark fallback)" describe the retained `--theme dark` palette. |
| 16 | |
| 17 | ### 0.1 Light palette (brand: purple `#6941C6` → magenta `#C9317C`) |
| 18 | |
| 19 | | Token | Hex | Use | |
| 20 | |---|---|---| |
| 21 | | `PAGE` / `SURFACE` | `#FFFFFF` | page + card background | |
| 22 | | `TINT` / `ALT` | `#F6F4FB` / `#FBFAFE` | KPI boxes · table headers/tracks · zebra rows | |
| 23 | | `INK` | `#1B1725` | headings + body text | |
| 24 | | `INK_SOFT` | `#5A5568` | secondary text | |
| 25 | | `LBL` | `#6B7280` | small labels / captions | |
| 26 | | `BORDER` | `#E7E3F0` | hairlines, card borders, table grid | |
| 27 | | `BRAND` / `BRAND2` | `#6941C6` / `#C9317C` | section numbers, rules, subheads / gradient end | |
| 28 | | `CODE_BG` / `CODE_INK` / `CODE_BORDER` | `#F5F4F8` / `#2A2536` / `#E4E0EE` | **boxed code / samples** (`codebox`) | |
| 29 | | `GREEN` / `BLUE` / `AMBER` | `#15803D` / `#2563EB` / `#B45309` | remediation / refs·CVE / caveat labels | |
| 30 | | `SEV` | Critical `#DC2626` · High `#EA580C` · Medium `#CA8A04` · Low `#16A34A` · Info `#64748B` | severity | |
| 31 | |
| 32 | ### 0.2 What v5 adds / changes |
| 33 | |
| 34 | - **Light, airy layout** — white surfaces, hairline separators, generous padding/leading; colour used only |
| 35 | semantically (severity / score / status). |
| 36 | - **Colour-coded risk & score** — severity via the finding-card **left stripe** + `[SEV]` tag; and in every |
| 37 | risk table (**findings summary, CVE register, per-finding CVE table**) **both the severity label and the |
| 38 | CVSS score cell are band-coloured + bold** — the label by its severity, the score by `score_band(score)`. |
| 39 | `tbl(..., sevcol=, scorecol=)` selects the columns; the colour is emitted as an inline `<font>` tag inside |
| 40 | the cell (a `TableStyle` `TEXTCOLOR` is **ignored** on ReportLab `Paragraph` cells, so it must live in the |
| 41 | cell markup). Empty/non-numeric score cells stay uncoloured. |
| 42 | - **Highlighted code/samples** — `codebox()` renders CVSS vectors, PoC/test requests, affected assets, and |
| 43 | endpoints in a bordered light-grey monospace block; **screenshots are framed** with a border + caption. |
| 44 | - **Finding cards** are a **single-column multi-row `Table`** (severity left-stripe + hairline box + padding) |
| 45 | so tall Critical findings **split cleanly across pages** (border redrawn per fragment). |
| 46 | - **Logo** is drawn at its **true aspect ratio** (1024×468 → 0.457; ~48mm wide) — never squished. |
| 47 | - Graphical (severity-bar chart) + Tabular (findings index) summaries, DURATION cover row, per-finding Ease of |
| 48 | Exploitation + References, and a Conclusion section are all light-themed. |
| 49 | |
| 50 | --- |
| 51 | |
| 52 | ## 1. Page & Document Configuration |
| 53 | |
| 54 | | Property | Value | |
| 55 | |---|---| |
| 56 | | Page Size | A4 (595.28 × 841.89 pt) | |
| 57 | | Margins | 20mm all sides | |
| 58 | | Content Width (CW) | 555.28 pt (A4 width − 2 × 20mm) | |
| 59 | | Top Margin Offset | +8 pt (28mm effective top) | |
| 60 | | Bottom Margin Offset | +10 pt (30mm effective bottom) | |
| 61 | | Background Color | **`#FFFFFF` (light default)** · `#07040B` under `--theme dark` | |
| 62 | | Output | Embedded fonts, single PDF file | |
| 63 | |
| 64 | --- |
| 65 | |
| 66 | ## 2. Typography |
| 67 | |
| 68 | ### 2.1 Font Stack |
| 69 | |
| 70 | | Alias | Font | Weight | Role | |
| 71 | |---|---|---|---| |
| 72 | | `FH` | Poppins-Bold | 700 | Headlines, metric values, section numbers, score values | |
| 73 | | `FM` | Poppins-Medium | 500 | Subheads, section labels, card section headers, sidebar labels | |
| 74 | | `FR` | Poppins (Regular) | 400 | Footer text, metadata labels, TOC sub-items | |
| 75 | | `FL` | Poppins-Light | 300 | Reserved (registered, not actively used) | |
| 76 | | `FI` | Poppins-Italic | 400i | Reserved (registered, not actively used) | |
| 77 | | `FB` | Carlito (Regular) | 400 | Body text, card summaries, table cells, bullet content | |
| 78 | | `FBB` | Carlito-Bold | 700 | Bold inline emphasis within body paragraphs | |
| 79 | | `FBI` | Carlito-Italic | 400i | Confidentiality notices, closing statement | |
| 80 | | `FBBI` | Carlito-BoldItalic | 700i | Registered for `<b><i>` combinations within Carlito | |
| 81 | | `FMONO` | Courier | — | MITRE technique IDs, CVE identifiers, subdomain names | |
| 82 | |
| 83 | **Family Registration:** Carlito is registered as a full family (`normal`, `bold`, `italic`, `boldItalic`) enabling automatic style switching via ReportLab's `<b>` and `<i>` XML tags. |
| 84 | |
| 85 | ### 2.2 Type Scale |
| 86 | |
| 87 | | Style Key | Font | Size | Leading | Color | Alignment | Usage | |
| 88 | |---|---|---|---|---|---|---| |
| 89 | | `ct` | Popp |