diff --git a/.gitignore b/.gitignore
index 290ab2e..0e0abfb 100644
--- a/.gitignore
+++ b/.gitignore
@@ -77,6 +77,7 @@ o6.txt
o7.txt
t6.txt
t7.txt
+tmp/design-qa/
# TS build cache
*.tsbuildinfo
diff --git a/VERSION b/VERSION
index af0b7dd..238d6e8 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-1.0.6
+1.0.7
diff --git a/design-qa.md b/design-qa.md
new file mode 100644
index 0000000..0928ec4
--- /dev/null
+++ b/design-qa.md
@@ -0,0 +1,78 @@
+# CASAN report redesign — Design QA
+
+## Comparison target
+
+- Source visual truth:
+ - `/Users/thanhnguyen/Downloads/hình ảnh (1).png` — 1844 × 862 px.
+ - `/Users/thanhnguyen/Downloads/hình ảnh (2).png` — 1796 × 795 px.
+- Rendered implementation:
+ - `tmp/design-qa/h6-default-final.png` — 866 × 2165 px.
+- Product state: Core Local Assurance Viewer, H6, stale/insufficient telemetry,
+ six successful runs, technical disclosures collapsed.
+- Browser viewport: 866 × 1043 CSS px, DPR 2. The browser capture is stored at
+ CSS-pixel width; the reference screens are wider desktop compositions, so
+ comparison is by hierarchy, density and visualization pattern rather than
+ pixel-identical scaling.
+- Responsive verification: 390 × 844 CSS px, document `scrollWidth` 390 px.
+
+## Full-view comparison evidence
+
+The two reference reports and the final implementation were opened together in
+one comparison input. CASAN intentionally preserves the references' strongest
+patterns—headline metrics, measured distributions, explicit provenance and
+forensic detail—while moving from an all-dark engineering sheet to the existing
+CASAN light decision workspace.
+
+## Required fidelity surfaces
+
+- Fonts and typography: the references use dense monospace throughout. CASAN
+ intentionally uses the existing system sans hierarchy for decision content
+ and reserves monospace for IDs, timestamps and evidence values. Headings,
+ labels and body copy wrap without clipping.
+- Spacing and layout rhythm: four executive metrics, decision findings, outcome
+ distribution and evidence quality form a consistent vertical sequence.
+ Technical content is removed from the default reading path.
+- Colors and tokens: navy, cyan, green, amber and red follow the existing CASAN
+ semantic palette. Every colored state also has a visible label or value.
+- Image and asset fidelity: neither reference contains raster product imagery.
+ No placeholder image, generated asset or replacement illustration is needed.
+- Copy and content: all values and warnings come from canonical report data.
+ Missing token/cost values remain unavailable and no maturity claim is inferred.
+
+## Focused-region comparison
+
+The final full-page capture is readable at original resolution, including the
+executive metrics, decision findings, outcome bar, coverage bars and collapsed
+technical disclosure. A separate crop was not needed.
+
+## Interaction and accessibility checks
+
+- Filter and technical sections are native `details`/`summary` controls.
+- Technical telemetry becomes visible when expanded and hidden when collapsed.
+- Responsive navigation opens from one labeled button and closes with Escape.
+- At 390 px the document has no horizontal overflow.
+- Reduced-motion CSS remains present.
+- Browser console warning/error check returned no entries.
+
+## Comparison history
+
+### Iteration 1
+
+- Finding: **P2 — tablet navigation consumed too much report width** at the
+ default 866 px browser viewport.
+- Evidence: `tmp/design-qa/h6-default.png`.
+- Fix: raised the local viewer navigation-collapse breakpoint from 820 px to
+ 960 px.
+
+### Iteration 2
+
+- Post-fix evidence: `tmp/design-qa/h6-default-final.png`.
+- Result: the report uses the full tablet canvas, the menu remains keyboard
+ operable, all content is readable, and no actionable P0/P1/P2 mismatch remains.
+
+## Follow-up polish
+
+- A multi-run trend chart can be added only after the report contract exposes a
+ truthful ordered series. It must not be inferred from incomplete snapshots.
+
+final result: passed
diff --git a/docs/packaging/CORE_LOCAL_ASSURANCE_VIEWER.md b/docs/packaging/CORE_LOCAL_ASSURANCE_VIEWER.md
index 45c3aa5..95919e2 100644
--- a/docs/packaging/CORE_LOCAL_ASSURANCE_VIEWER.md
+++ b/docs/packaging/CORE_LOCAL_ASSURANCE_VIEWER.md
@@ -78,6 +78,25 @@ Control Plane. `casan view` remains the predictable Core single-project viewer.
The UI shell itself is non-sensitive and may load without a token. All project
metadata, evidence and exports require the session token.
+## Presentation and disclosure policy
+
+Reports use two information layers:
+
+1. the executive layer shows verdict, governed volume, reliability, latency,
+ evidence quality, decision findings and measured distributions;
+2. the technical layer preserves filters, provider counters, canonical paths,
+ event history, sanitized manifests and raw breakdown tables behind native
+ disclosure controls.
+
+The technical layer is collapsed by default in interactive viewers. It remains
+available for investigation and is included in print-ready export appendices.
+This is progressive disclosure, not evidence deletion.
+
+Every visual must be derived from the report contract. Missing token, cost,
+freshness or provenance values remain unavailable; the UI must not invent a
+zero, trend, governance verdict or maturity claim. Charts include visible
+labels and values so meaning does not depend on color alone.
+
## Production acceptance gate
The Core viewer is releasable only when all of these pass:
diff --git a/packages/casan-control-panel/backend/src/reports/h6-report.html.ts b/packages/casan-control-panel/backend/src/reports/h6-report.html.ts
index 206ed4b..5519ce5 100644
--- a/packages/casan-control-panel/backend/src/reports/h6-report.html.ts
+++ b/packages/casan-control-panel/backend/src/reports/h6-report.html.ts
@@ -32,6 +32,18 @@ function coverage(label: string, value: number, detail: string): string {
`;
}
+function distributionRows(report: H6Report): string {
+ const maximum = Math.max(...report.details.by_status.map((row) => row.count), 1);
+ if (report.details.by_status.length === 0) return '