Product decision A (TASK-birth-sky-followup-20260928): - every generation path writes subject.birthFingerprint (stored-row fingerprint, same function as the chart page's profileFingerprint); never into the evidence bundle the model reads - GET /api/reports/:id compares on the server and returns only report.coverSubject (subject id or null); legacy reports never get one - report page shows the night cover above the body, paper cover alone on the first printed A4 page; silent on any failure, no waiting state - TS / JSON schema / Python contract accept the optional field - BLOCKED T5 struck through; DESIGN §17, CHANGELOG, checklist, PROGRESS Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01N4f2nya58RoRu4yEmJgRGE
32 lines
987 B
CSS
32 lines
987 B
CSS
/* Report cover (TASK-birth-sky-followup-20260928 F3). Loaded with the lazy
|
||
cover chunk on the report page only. Screen: night palette, as wide as the
|
||
reading column, 3:4. Print: paper palette, alone on the first A4 page. */
|
||
.report-sky-cover { margin: 0 0 var(--space-6); }
|
||
.report-sky-cover img {
|
||
display: block;
|
||
width: 100%;
|
||
height: auto;
|
||
aspect-ratio: 3 / 4;
|
||
border-radius: var(--radius-md);
|
||
}
|
||
.report-sky-cover-print { display: none !important; }
|
||
@media print {
|
||
.report-sky-cover {
|
||
margin: 0;
|
||
break-after: page;
|
||
page-break-after: always;
|
||
break-inside: avoid-page;
|
||
}
|
||
.report-sky-cover-screen { display: none !important; }
|
||
.report-sky-cover-print {
|
||
display: block !important;
|
||
/* A4 inside the report's @page margins is 186mm × 270mm; 3:4 at 186mm
|
||
wide is 248mm tall, so 246mm keeps it on one page. */
|
||
width: auto !important;
|
||
max-width: 100%;
|
||
height: 246mm !important;
|
||
margin: 0 auto;
|
||
border-radius: 0;
|
||
}
|
||
}
|