Files
familienarchiv/docs/specs/reader-dashboard-final.html
Marcel f34967f764
Some checks failed
CI / Unit & Component Tests (pull_request) Failing after 3m35s
CI / OCR Service Tests (pull_request) Successful in 37s
CI / Backend Unit Tests (pull_request) Failing after 3m20s
CI / Unit & Component Tests (push) Failing after 3m30s
CI / OCR Service Tests (push) Successful in 42s
CI / Backend Unit Tests (push) Failing after 3m23s
docs(spec): address review blockers and concerns in reader dashboard spec
- Fix 8 desktop + 8 mobile dark-mode CSS contrast failures (WCAG AA):
  muted #3A4568→#7080A8, labels #323850→#6070A0, dim #262E48→#5A6888
- Fix 4 light-mode contrast failures: HSTAT-LABEL/DOC-DATE/STORY-META
  #B8B4AE/#C8C4BE→#706C68; PERSONS-ALL opacity hack→direct #4A6E8A
- Fix 3 inline style="color:#262E48" dash elements in dark body HTML
- Add DK-→Tailwind dark: equivalent mapping to dark-mode CSS comment
- Add impl-ref table with exact Tailwind classes per UI region
- Add i18n key catalog annotation (10 new messages/*.json keys)
- Annotate stat link routes (/documents, /persons, /geschichten)
  and update all spec hrefs to real routes
- Update dark-mode annotation sidebar with corrected token values

Addresses Leonie's 3 blockers (WCAG contrast + impl-ref table) and
Felix's 4 suggestions.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-06 12:26:31 +02:00

1225 lines
75 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Reader Dashboard — Final · Familienarchiv</title>
<style>
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
body{font-family:'Helvetica Neue',Arial,sans-serif;background:#ECEAE4;color:#1A1A1A;line-height:1.5}
.doc{max-width:1440px;margin:0 auto;padding:48px 32px}
/* ── Masthead ─── */
.mast{background:#0D2240;border-radius:10px;padding:32px 40px;margin-bottom:48px}
.mast-top{display:flex;align-items:flex-start;justify-content:space-between;gap:24px;margin-bottom:16px}
.mast h1{font-size:22px;font-weight:900;color:#fff;letter-spacing:-.4px;margin-bottom:6px}
.mast p{font-size:12px;color:rgba(255,255,255,.5);max-width:660px;line-height:1.7}
.mast-badge{font-size:9px;font-weight:800;padding:3px 9px;border-radius:20px;text-transform:uppercase;letter-spacing:.8px;white-space:nowrap;flex-shrink:0;margin-top:4px;background:#A6DAD8;color:#002850}
.decisions{display:grid;grid-template-columns:repeat(5,1fr);gap:10px;margin-top:20px;border-top:1px solid rgba(255,255,255,.1);padding-top:16px}
.dec{background:rgba(255,255,255,.06);border-radius:6px;padding:10px 12px}
.dec-label{font-size:7px;font-weight:800;text-transform:uppercase;letter-spacing:.8px;color:rgba(255,255,255,.35);margin-bottom:5px}
.dec-value{font-size:9.5px;font-weight:700;color:#fff;line-height:1.5}
.dec-value s{color:rgba(255,255,255,.3);font-weight:400}
/* ── Section headings ─── */
.sec{margin-bottom:64px}
.sec+.sec{border-top:2px dashed #C8C4BE;padding-top:56px}
.sec-h{font-size:11px;font-weight:800;text-transform:uppercase;letter-spacing:1.2px;color:#888;margin-bottom:20px;display:flex;align-items:center;gap:10px}
.sec-h::after{content:'';flex:1;height:1px;background:#D8D4CE}
.sec-num{background:#0D2240;color:#fff;font-size:9px;font-weight:900;padding:2px 7px;border-radius:10px}
/* ── Screen grid ─── */
.sg{display:grid;gap:24px;align-items:start}
.sg-2{grid-template-columns:1fr 340px}
.sb{display:flex;flex-direction:column;gap:10px}
.sl{font-size:9px;font-weight:800;color:#888;text-transform:uppercase;letter-spacing:1.5px;margin-bottom:6px;display:flex;align-items:center;gap:6px}
.sz{background:#E8E4DF;color:#666;padding:1px 5px;border-radius:3px;font-size:8px}
/* ── Annotation callouts ─── */
.ann-block{background:#FFF7ED;border:1px solid #FDBA74;border-radius:5px;padding:8px 10px;font-size:10px;color:#7C2D12;line-height:1.5}
.ann-block strong{font-weight:800}
.ann-block ul{padding-left:14px;display:flex;flex-direction:column;gap:3px;margin-top:5px}
.note{background:#F0F9FF;border:1px solid #BAE6FD;border-radius:5px;padding:8px 10px;font-size:10px;color:#0C4A6E;line-height:1.5}
.note strong{font-weight:800}
.note ul{padding-left:14px;display:flex;flex-direction:column;gap:3px;margin-top:5px}
.ok{background:#F0FDF4;border:1px solid #86EFAC;border-radius:5px;padding:8px 10px;font-size:10px;color:#166534;line-height:1.5}
.ok strong{font-weight:800}
.ok ul{padding-left:14px;display:flex;flex-direction:column;gap:3px;margin-top:5px}
/* ── Mock browser chrome ─── */
.wf{background:#fff;border:2px solid #B8B4AE;border-radius:10px;overflow:hidden;box-shadow:0 4px 18px rgba(0,0,0,.08)}
.wf-bar{height:24px;background:#E8E4DF;border-bottom:1px solid #C8C4BE;display:flex;align-items:center;padding:0 9px;gap:4px}
.dot{width:7px;height:7px;border-radius:50%}
.dot.r{background:#F87171}.dot.y{background:#FCD34D}.dot.g{background:#4ADE80}
.urlbar{flex:1;height:11px;background:#D8D4CE;border-radius:3px;margin-left:6px;display:flex;align-items:center;padding:0 5px}
.urlbar span{font-size:7.5px;color:#888;font-family:monospace}
/* ── Nav bar ─── */
.N{height:34px;background:#002850;display:flex;align-items:center;padding:0 14px;gap:10px}
.N-accent{height:2px;background:#A6DAD8}
.logo{font-size:7.5px;font-weight:900;color:#fff;letter-spacing:1px;text-transform:uppercase}
.nl{font-size:6.5px;color:rgba(255,255,255,.45);font-weight:700;text-transform:uppercase;letter-spacing:.5px;padding:3px 6px}
.nl.on{color:#fff}
.nr{margin-left:auto;display:flex;gap:5px;align-items:center}
.av{width:18px;height:18px;background:#A6DAD8;border-radius:50%;font-size:5.5px;font-weight:900;color:#002850;display:flex;align-items:center;justify-content:center}
.nico{width:18px;height:18px;background:rgba(255,255,255,.1);border-radius:3px;display:flex;align-items:center;justify-content:center}
/* ── Page body ─── */
/* Real layout: canvas spans full viewport width; inner wrapper is max-w-7xl (1280px)
centered with px-8 (32px) / py-8 (32px). Shown here at ~55% scale → 18px/20px. */
.MAIN{background:#F5F4EF}
.PAGE-WRAP{max-width:704px;margin:0 auto;padding:18px 20px;display:flex;flex-direction:column;gap:8px}
/* ── Combined header bar — B.1: white, clean divider ─── */
.HEADER-BAR{background:#fff;border:1px solid #E0DDD5;border-radius:3px;padding:10px 14px;display:flex;align-items:center;gap:16px}
.HEADER-LEFT{flex:1;min-width:0}
.HEADER-TIME{font-size:6px;font-weight:800;text-transform:uppercase;letter-spacing:.8px;color:#C8B8A0;margin-bottom:2px}
.HEADER-NAME{font-family:Georgia,serif;font-size:12px;color:#002850}
.DIVIDER{width:1px;background:#E8E4DF;align-self:stretch;flex-shrink:0}
.HEADER-STATS{display:flex;align-items:center;gap:0}
.HSTAT{text-align:center;padding:0 12px;border-right:1px solid #F0EDE6}
.HSTAT:last-child{border-right:none;padding-right:0}
.HSTAT a{text-decoration:none;display:block}
.HSTAT-NUM{font-size:14px;font-weight:900;color:#002850;line-height:1;display:block}
.HSTAT-LABEL{font-size:5.5px;font-weight:800;text-transform:uppercase;letter-spacing:.8px;color:#706C68;display:block;margin-top:2px}
/* ── Person portrait cards — B.3 avatar, no border line, mint pill ─── */
.PERSON-GRID{display:grid;grid-template-columns:repeat(4,1fr);gap:6px}
.PCARD{
background:#fff;
border:1px solid #E0DDD5; /* plain border, no bottom accent */
border-radius:3px;
padding:10px 10px 9px;
text-decoration:none;
display:flex;flex-direction:column;align-items:center;text-align:center;gap:5px
}
.PCARD-AV{
width:34px;height:34px; /* B.3: larger avatar */
border-radius:50%;
display:flex;align-items:center;justify-content:center;
font-size:9px;font-weight:900;color:#fff;flex-shrink:0;
box-shadow:0 2px 6px rgba(0,40,80,.2) /* B.3: subtle depth */
}
.PCARD-NAME{font-size:7px;font-weight:700;color:#002850;line-height:1.3}
.PCARD-COUNT{ /* B.3: mint pill instead of grey text */
font-size:5.5px;font-weight:800;
color:#002850;background:#D4F0EE;
padding:1px 6px;border-radius:10px
}
.PERSONS-FOOTER{text-align:right;margin-top:3px}
.PERSONS-ALL{font-size:6.5px;color:#4A6E8A;font-weight:600;text-decoration:none}
/* ── Two-column 1:1 — B.1 ─── */
.CONTENT-ROW{display:grid;grid-template-columns:1fr 1fr;gap:6px}
/* ── Cards ─── */
.CARD{background:#fff;border:1px solid #E0DDD5;border-radius:3px;overflow:hidden;display:flex;flex-direction:column}
.CARD-HEAD{display:flex;align-items:center;justify-content:space-between;padding:7px 10px 6px;border-bottom:1px solid #E0DDD5}
.CARD-HEAD h3{font-size:6.5px;font-weight:800;letter-spacing:.12em;text-transform:uppercase;color:#999}
.CARD-HEAD a{font-size:6.5px;font-weight:600;color:#002850;opacity:.4;text-decoration:none}
/* ── Doc rows ─── */
.DOC-ROW{display:flex;align-items:center;gap:7px;padding:5px 10px;border-bottom:1px solid #F0EDE6}
.DOC-ROW:last-child{border-bottom:none}
.DOC-THUMB{width:20px;height:24px;background:#ECEAE4;border:1px solid #E0DDD5;border-radius:2px;flex-shrink:0;display:flex;align-items:center;justify-content:center}
.DOC-INFO{flex:1;min-width:0}
.DOC-TITLE{font-family:Georgia,serif;font-size:7.5px;color:#002850;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.DOC-SENDER{font-size:6px;color:#888;margin-top:1px}
.DOC-SENDER a{color:#002850;text-decoration:none;opacity:.7}
.DOC-DATE{font-size:6px;color:#706C68;white-space:nowrap;flex-shrink:0}
/* ── Story rows — B.1: clean 2-line excerpt ─── */
.STORY-ROW{padding:7px 10px;border-bottom:1px solid #F0EDE6}
.STORY-ROW:last-child{border-bottom:none}
.STORY-TITLE{font-family:Georgia,serif;font-size:8px;color:#002850;font-style:italic;margin-bottom:3px;line-height:1.3}
.STORY-EXCERPT{font-size:6.5px;color:#888;line-height:1.5;margin-bottom:3px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.STORY-META{font-size:6px;color:#706C68}
/* ── Drafts card ─── */
.DRAFTS-CARD{background:#fff;border:1px solid #E0DDD5;border-left:3px solid #A6DAD8;border-radius:3px;overflow:hidden}
.DRAFTS-HEAD{padding:6px 10px 5px;border-bottom:1px solid #F0EDE6;display:flex;align-items:center;justify-content:space-between}
.DRAFTS-HEAD h3{font-size:6.5px;font-weight:800;letter-spacing:.12em;text-transform:uppercase;color:#999}
.DRAFT-ROW{display:flex;align-items:center;justify-content:space-between;padding:6px 10px;border-bottom:1px solid #F0EDE6}
.DRAFT-ROW:last-child{border-bottom:none}
.DRAFT-TITLE{font-family:Georgia,serif;font-size:8px;color:#002850}
.DRAFT-META{font-size:6px;color:#AAA;margin-top:1px}
/* ── Spec disclaimer ─── */
.spec-disclaimer{background:#FFF8E1;border:1.5px solid #FFC107;border-radius:6px;padding:11px 16px;font-size:11px;color:#6D4C00;margin-bottom:32px;line-height:1.6}
.spec-disclaimer strong{font-weight:800}
/* ══════════════════════════════════
DARK THEME — DK- override classes
Compose alongside light structural classes, e.g. class="CARD DK-CARD"
Real tokens live in layout.css / Tailwind dark: variants — these are approximations.
Mapping: canvas #0F1219 · surface #161C27 · border rgba(255,255,255,.08)
text #D0CCC4 · muted #7080A8 · labels #6070A0 · dim #5A6888
mint #A6DAD8 (unchanged) · mint-pill rgba(166,218,216,.14)
DK- → Tailwind dark: equivalents (implementation guide)
DK-MAIN → dark:bg-canvas
DK-HEADER-BAR → dark:bg-surface dark:border-white/8
DK-HSTAT-LABEL → dark:text-ink-4 (#6070A0 — WCAG AA ≥ 4.5:1 on #161C27)
DK-CARD → dark:bg-surface dark:border-white/8
DK-CARD-HEAD h3 → dark:text-ink-4 (#6070A0)
DK-DOC-SENDER → dark:text-ink-3 (#7080A8 — WCAG AA ≥ 4.5:1 on #161C27)
DK-DOC-DATE → dark:text-ink-5 (#5A6888 — WCAG AA ≥ 4.5:1 on #161C27)
DK-STORY-EXCERPT → dark:text-ink-3 (#7080A8)
DK-STORY-META → dark:text-ink-5 (#5A6888)
DK-DRAFT-META → dark:text-ink-3 (#7080A8)
══════════════════════════════════ */
.wf-dark .wf-bar{background:#1C1E26;border-bottom-color:#252830}
.wf-dark .urlbar{background:#252830}
.wf-dark .urlbar span{color:#4A5068}
.DK-MAIN{background:#0F1219}
.DK-HEADER-BAR{background:#161C27 !important;border-color:rgba(255,255,255,.08) !important}
.DK-HEADER-TIME{color:#4A5880 !important}
.DK-HEADER-NAME{color:#D0CCC4 !important}
.DK-DIVIDER{background:rgba(255,255,255,.08) !important}
.DK-HSTAT{border-right-color:rgba(255,255,255,.06) !important}
.DK-HSTAT-NUM{color:#E8E4DC !important}
.DK-HSTAT-LABEL{color:#6070A0 !important}
.DK-PCARD{background:#161C27 !important;border-color:rgba(255,255,255,.08) !important}
.DK-PCARD-NAME{color:#C0BDB6 !important}
.DK-PCARD-COUNT{color:#A6DAD8 !important;background:rgba(166,218,216,.14) !important}
.DK-PERSONS-ALL{color:#A6DAD8 !important;opacity:.65 !important}
.DK-CARD{background:#161C27 !important;border-color:rgba(255,255,255,.08) !important}
.DK-CARD-HEAD{border-bottom-color:rgba(255,255,255,.06) !important}
.DK-CARD-HEAD h3{color:#6070A0 !important}
.DK-CARD-HEAD a{color:#A6DAD8 !important;opacity:.5 !important}
.DK-DOC-ROW{border-bottom-color:rgba(255,255,255,.04) !important}
.DK-DOC-THUMB{background:#1E2638 !important;border-color:rgba(255,255,255,.07) !important}
.DK-DOC-TITLE{color:#C0BDB6 !important}
.DK-DOC-SENDER{color:#7080A8 !important}
.DK-DOC-SENDER a{color:#A6DAD8 !important;opacity:.6 !important}
.DK-DOC-DATE{color:#5A6888 !important}
.DK-STORY-ROW{border-bottom-color:rgba(255,255,255,.04) !important}
.DK-STORY-TITLE{color:#C0BDB6 !important}
.DK-STORY-EXCERPT{color:#7080A8 !important}
.DK-STORY-META{color:#5A6888 !important}
.DK-DRAFTS-CARD{background:#161C27 !important;border-color:rgba(255,255,255,.08) !important}
.DK-DRAFTS-HEAD{border-bottom-color:rgba(255,255,255,.06) !important}
.DK-DRAFTS-HEAD h3{color:#6070A0 !important}
.DK-DRAFT-ROW{border-bottom-color:rgba(255,255,255,.04) !important}
.DK-DRAFT-TITLE{color:#C0BDB6 !important}
.DK-DRAFT-META{color:#7080A8 !important}
/* ══════════════════════════════════
MOBILE — phone chrome + stacked layout
Phone frame: 240 px wide ≈ 375 px at ~64 % scale
Breakpoint: < sm (< 640 px Tailwind)
Key layout changes vs desktop:
· Header bar stacks: greeting row / stats row separated by border-top
· Person grid: 2 × 2 (was 4 × 1)
· Two-column content → single column, docs above stories
══════════════════════════════════ */
.PHONE{width:240px;background:#F5F4EF;border:5px solid #1C1C18;border-radius:28px;overflow:hidden;box-shadow:0 8px 28px rgba(0,0,0,.22);flex-shrink:0}
.PHONE.dk{background:#0F1219}
.PHONE-STATUS{height:11px;background:#002850;display:flex;align-items:center;justify-content:space-between;padding:0 10px}
.PHONE-TIME{font-size:5px;font-weight:700;color:rgba(255,255,255,.8)}
.PHONE-ICONS{display:flex;align-items:center;gap:3px}
.M-NAV{height:28px;background:#002850;display:flex;align-items:center;padding:0 10px;gap:8px}
.M-ACCENT{height:2px;background:#A6DAD8}
.M-LOGO{font-size:6px;font-weight:900;color:#fff;letter-spacing:.8px;text-transform:uppercase}
.M-NAV-R{margin-left:auto;display:flex;gap:5px;align-items:center}
.M-HAM{display:flex;flex-direction:column;gap:2px}
.M-HAM span{display:block;width:11px;height:1.5px;background:rgba(255,255,255,.65);border-radius:1px}
.M-AV{width:15px;height:15px;background:#A6DAD8;border-radius:50%;font-size:4.5px;font-weight:900;color:#002850;display:flex;align-items:center;justify-content:center}
.M-MAIN{background:#F5F4EF}
.M-MAIN.dk{background:#0F1219}
.M-WRAP{padding:10px 12px;display:flex;flex-direction:column;gap:6px}
/* Mobile header — stacks vertically */
.M-HBAR{background:#fff;border:1px solid #E0DDD5;border-radius:3px;padding:8px 10px}
.M-HBAR.dk{background:#161C27;border-color:rgba(255,255,255,.08)}
.M-HTIME{font-size:5.5px;font-weight:800;text-transform:uppercase;letter-spacing:.7px;color:#C8B8A0;margin-bottom:2px}
.M-HTIME.dk{color:#4A5880}
.M-HNAME{font-family:Georgia,serif;font-size:9.5px;color:#002850;margin-bottom:6px}
.M-HNAME.dk{color:#D0CCC4}
.M-HSTATS{display:flex;border-top:1px solid #F0EDE6;padding-top:6px}
.M-HSTATS.dk{border-top-color:rgba(255,255,255,.06)}
.M-HSTAT{flex:1;text-align:center;border-right:1px solid #F0EDE6}
.M-HSTAT:last-child{border-right:none}
.M-HSTAT.dk{border-right-color:rgba(255,255,255,.06)}
.M-HSTAT a{text-decoration:none;display:block}
.M-HSTAT-NUM{font-size:11px;font-weight:900;color:#002850;line-height:1;display:block}
.M-HSTAT-NUM.dk{color:#E8E4DC}
.M-HSTAT-LBL{font-size:5px;font-weight:800;text-transform:uppercase;letter-spacing:.6px;color:#706C68;display:block;margin-top:1px}
.M-HSTAT-LBL.dk{color:#6070A0}
/* Mobile drafts */
.M-DCARD{background:#fff;border:1px solid #E0DDD5;border-left:3px solid #A6DAD8;border-radius:3px;overflow:hidden}
.M-DCARD.dk{background:#161C27;border-color:rgba(255,255,255,.08)}
.M-DCARD-HEAD{padding:5px 9px;border-bottom:1px solid #F0EDE6;display:flex;align-items:center}
.M-DCARD-HEAD.dk{border-bottom-color:rgba(255,255,255,.06)}
.M-DCARD-HEAD h3{font-size:6px;font-weight:800;letter-spacing:.1em;text-transform:uppercase;color:#999}
.M-DCARD-HEAD.dk h3{color:#6070A0}
.M-DRAFT-ROW{display:flex;align-items:center;justify-content:space-between;padding:5px 9px;border-bottom:1px solid #F0EDE6}
.M-DRAFT-ROW:last-child{border-bottom:none}
.M-DRAFT-ROW.dk{border-bottom-color:rgba(255,255,255,.04)}
.M-DRAFT-TITLE{font-family:Georgia,serif;font-size:7px;color:#002850}
.M-DRAFT-TITLE.dk{color:#C0BDB6}
.M-DRAFT-META{font-size:5.5px;color:#AAA;margin-top:1px}
.M-DRAFT-META.dk{color:#7080A8}
/* Mobile 2×2 person grid */
.M-PGRID{display:grid;grid-template-columns:1fr 1fr;gap:5px}
.M-PCARD{background:#fff;border:1px solid #E0DDD5;border-radius:3px;padding:7px 8px;text-decoration:none;display:flex;flex-direction:column;align-items:center;text-align:center;gap:3px}
.M-PCARD.dk{background:#161C27;border-color:rgba(255,255,255,.08)}
.M-PAV{width:22px;height:22px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:6.5px;font-weight:900;color:#fff;box-shadow:0 1px 4px rgba(0,40,80,.2)}
.M-PNAME{font-size:6px;font-weight:700;color:#002850;line-height:1.3}
.M-PNAME.dk{color:#C0BDB6}
.M-PCOUNT{font-size:5px;font-weight:800;color:#002850;background:#D4F0EE;padding:1px 5px;border-radius:10px}
.M-PCOUNT.dk{color:#A6DAD8;background:rgba(166,218,216,.14)}
.M-PALL{font-size:5.5px;color:#4A6E8A;text-decoration:none;display:block;text-align:right;margin-top:1px}
.M-PALL.dk{color:#A6DAD8;opacity:.65}
/* Mobile single-column cards */
.M-CARD{background:#fff;border:1px solid #E0DDD5;border-radius:3px;overflow:hidden}
.M-CARD.dk{background:#161C27;border-color:rgba(255,255,255,.08)}
.M-CARD-HEAD{display:flex;align-items:center;justify-content:space-between;padding:5px 9px;border-bottom:1px solid #E0DDD5}
.M-CARD-HEAD.dk{border-bottom-color:rgba(255,255,255,.06)}
.M-CARD-HEAD h3{font-size:6px;font-weight:800;letter-spacing:.1em;text-transform:uppercase;color:#999}
.M-CARD-HEAD.dk h3{color:#6070A0}
.M-CARD-HEAD a{font-size:6px;color:#002850;opacity:.4;text-decoration:none;font-weight:600}
.M-CARD-HEAD.dk a{color:#A6DAD8;opacity:.5}
.M-DROW{display:flex;align-items:center;gap:6px;padding:4px 9px;border-bottom:1px solid #F0EDE6}
.M-DROW:last-child{border-bottom:none}
.M-DROW.dk{border-bottom-color:rgba(255,255,255,.04)}
.M-DINFO{flex:1;min-width:0}
.M-DTITLE{font-family:Georgia,serif;font-size:7px;color:#002850;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.M-DTITLE.dk{color:#C0BDB6}
.M-DSENDER{font-size:5.5px;color:#888}
.M-DSENDER.dk{color:#7080A8}
.M-DDATE{font-size:5.5px;color:#706C68;white-space:nowrap;flex-shrink:0}
.M-DDATE.dk{color:#5A6888}
.M-SROW{padding:6px 9px;border-bottom:1px solid #F0EDE6}
.M-SROW:last-child{border-bottom:none}
.M-SROW.dk{border-bottom-color:rgba(255,255,255,.04)}
.M-STITLE{font-family:Georgia,serif;font-size:7.5px;color:#002850;font-style:italic;margin-bottom:2px;line-height:1.3}
.M-STITLE.dk{color:#C0BDB6}
.M-SEXCERPT{font-size:6px;color:#888;line-height:1.5;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;margin-bottom:2px}
.M-SEXCERPT.dk{color:#7080A8}
.M-SMETA{font-size:5.5px;color:#706C68}
.M-SMETA.dk{color:#5A6888}
/* Phone layout helper */
.phones-row{display:flex;gap:20px;align-items:start;flex-wrap:wrap}
.phone-label{font-size:8px;font-weight:800;color:#888;text-transform:uppercase;letter-spacing:1px;margin-bottom:8px;display:flex;align-items:center;gap:6px}
.phone-col{display:flex;flex-direction:column}
/* ── impl-ref table ─── */
.impl-ref-section{margin-top:64px;border-top:2px dashed #C8C4BE;padding-top:56px}
.impl-ref-section .sec-h{font-size:11px;font-weight:800;text-transform:uppercase;letter-spacing:1.2px;color:#888;margin-bottom:20px;display:flex;align-items:center;gap:10px}
.impl-ref-section .sec-h::after{content:'';flex:1;height:1px;background:#D8D4CE}
.impl-ref-table{width:100%;border-collapse:collapse;font-size:11px;margin-bottom:24px}
.impl-ref-table th{text-align:left;font-size:9px;font-weight:800;text-transform:uppercase;letter-spacing:.8px;color:#888;padding:6px 12px 6px 0;border-bottom:2px solid #E0DDD5}
.impl-ref-table td{padding:7px 12px 7px 0;border-bottom:1px solid #F0EDE6;vertical-align:top;color:#1A1A1A}
.impl-ref-table tr:last-child td{border-bottom:none}
.impl-ref-table td:first-child{font-weight:700;color:#002850;white-space:nowrap;width:180px}
.impl-ref-table td code{font-family:monospace;font-size:10px;background:#F0EDE6;padding:1px 4px;border-radius:3px;white-space:nowrap}
.impl-ref-table td .note-cell{font-size:10px;color:#888;font-style:italic}
</style>
</head>
<body>
<div class="doc">
<div class="mast">
<div class="mast-top">
<div>
<h1>Reader Dashboard — Final</h1>
<p>Zusammenführung von B.1 und B.3. Gesamtgestaltung aus B.1: weißer Header-Balken mit vertikaler Trennlinie, 1:1-Spaltenraster, Geschichten mit 2-Zeilen-Auszug, minimale Chrome-Dichte. Personen-Kacheln aus B.3: größerer Avatar (34 px, mit Schatten), mintgrüne Pill-Badge für die Dokumentzahl — kein unterer Akzentstreifen.</p>
</div>
<span class="mast-badge">Final · Bereit zur Umsetzung</span>
</div>
<div class="decisions">
<div class="dec">
<div class="dec-label">Header-Balken</div>
<div class="dec-value">B.1 — Weiß · vertikale Trennlinie</div>
</div>
<div class="dec">
<div class="dec-label">Personen-Avatar</div>
<div class="dec-value">B.3 — 34 px · rund · Schatten<br><s>B.1: 28 px, kein Schatten</s></div>
</div>
<div class="dec">
<div class="dec-label">Dokumentzahl</div>
<div class="dec-value">B.3 — Mint Pill (#D4F0EE)<br><s>B.1: Grau-Text, kein Badge</s></div>
</div>
<div class="dec">
<div class="dec-label">Kachel-Rand</div>
<div class="dec-value">Einfacher Border · kein Akzentstreifen<br><s>B.1: Mint Bottom-Border</s></div>
</div>
<div class="dec">
<div class="dec-label">Seitenlayout</div>
<div class="dec-value">max-w-7xl (1280 px) · px-8 py-8 (32 px) · Canvas vollbreit</div>
</div>
</div>
</div>
<div class="spec-disclaimer">
<strong>📐 Mockup-Skalierung —</strong> alle Schriftgrößen, Abstände und Höhen sind auf ca. 55 % der Implementierungswerte skaliert. <strong>Werte nicht aus dem Mockup-CSS kopieren.</strong>
</div>
<!-- ══ SECTION 1: LESER ══ -->
<div class="sec">
<div class="sec-h"><span class="sec-num">1</span> Desktop · READ_ALL — ohne BLOG_WRITE</div>
<div class="sg sg-2">
<div class="sb">
<div class="sl">Vollansicht <span class="sz">≥ 1024 px</span></div>
<div class="wf">
<div class="wf-bar">
<div class="dot r"></div><div class="dot y"></div><div class="dot g"></div>
<div class="urlbar"><span>familienarchiv.local /</span></div>
</div>
<div class="N">
<span class="logo">Familienarchiv</span>
<span class="nl on">Startseite</span>
<span class="nl">Dokumente</span>
<span class="nl">Personen</span>
<span class="nl">Geschichten</span>
<div class="nr">
<div class="nico"><svg width="9" height="9" viewBox="0 0 24 24" fill="none" stroke="rgba(255,255,255,.5)" stroke-width="2"><path d="M18 8A6 6 0 006 8c0 7-3 9-3 9h18s-3-2-3-9"/><path d="M13.73 21a2 2 0 01-3.46 0"/></svg></div>
<div class="av">BK</div>
</div>
</div>
<div class="N-accent"></div>
<div class="MAIN">
<div class="PAGE-WRAP">
<!-- Zone 1+2: white header bar with divider (B.1) -->
<div class="HEADER-BAR">
<div class="HEADER-LEFT">
<div class="HEADER-TIME">Guten Abend</div>
<div class="HEADER-NAME">Herzlich willkommen, Brigitte.</div>
</div>
<div class="DIVIDER"></div>
<div class="HEADER-STATS">
<div class="HSTAT"><a href="/documents"><span class="HSTAT-NUM">847</span><span class="HSTAT-LABEL">Dokumente</span></a></div>
<div class="HSTAT"><a href="/persons"><span class="HSTAT-NUM">94</span><span class="HSTAT-LABEL">Personen</span></a></div>
<div class="HSTAT"><a href="/geschichten"><span class="HSTAT-NUM">12</span><span class="HSTAT-LABEL">Geschichten</span></a></div>
</div>
</div>
<!-- Zone 4: person cards — B.3 avatar + mint pill, no bottom line -->
<div>
<div class="PERSON-GRID">
<a class="PCARD" href="#">
<div class="PCARD-AV" style="background:#002850">KR</div>
<div class="PCARD-NAME">Käthe Raddatz</div>
<div class="PCARD-COUNT">47 Dok.</div>
</a>
<a class="PCARD" href="#">
<div class="PCARD-AV" style="background:#1A4A6B">ER</div>
<div class="PCARD-NAME">Ernst Raddatz</div>
<div class="PCARD-COUNT">31 Dok.</div>
</a>
<a class="PCARD" href="#">
<div class="PCARD-AV" style="background:#3D5A7A">FM</div>
<div class="PCARD-NAME">Frieda Müller</div>
<div class="PCARD-COUNT">28 Dok.</div>
</a>
<a class="PCARD" href="#">
<div class="PCARD-AV" style="background:#4A7A5A">HW</div>
<div class="PCARD-NAME">Heinrich Weber</div>
<div class="PCARD-COUNT">19 Dok.</div>
</a>
</div>
<div class="PERSONS-FOOTER"><a class="PERSONS-ALL" href="/persons">Alle 94 Personen →</a></div>
</div>
<!-- Zone 5: 1:1 split (B.1) -->
<div class="CONTENT-ROW">
<div class="CARD">
<div class="CARD-HEAD"><h3>Zuletzt aktualisiert</h3><a href="/documents">Alle Dokumente</a></div>
<div class="DOC-ROW">
<div class="DOC-THUMB"><svg width="8" height="10" viewBox="0 0 20 26" fill="none" stroke="#C8C4BE" stroke-width="1.5"><path d="M3 1h9l5 5v19H3V1z"/><polyline points="12 1 12 6 18 6"/></svg></div>
<div class="DOC-INFO"><div class="DOC-TITLE">Brief von Ernst an Käthe, März 1923</div><div class="DOC-SENDER">von <a href="#">Käthe Raddatz</a></div></div>
<div class="DOC-DATE">vor 2 Tagen</div>
</div>
<div class="DOC-ROW">
<div class="DOC-THUMB"><svg width="8" height="10" viewBox="0 0 20 26" fill="none" stroke="#C8C4BE" stroke-width="1.5"><path d="M3 1h9l5 5v19H3V1z"/><polyline points="12 1 12 6 18 6"/></svg></div>
<div class="DOC-INFO"><div class="DOC-TITLE">Heiratsurkunde Raddatz-Müller, 1898</div><div class="DOC-SENDER" style="color:#E0DDD5"></div></div>
<div class="DOC-DATE">vor 4 Tagen</div>
</div>
<div class="DOC-ROW">
<div class="DOC-THUMB"><svg width="10" height="10" viewBox="0 0 24 24" fill="none" stroke="#A6DAD8" stroke-width="1.5"><rect x="2" y="2" width="20" height="20" rx="2"/><circle cx="8" cy="8" r="2"/><polyline points="22 14 16 9 4 22"/></svg></div>
<div class="DOC-INFO"><div class="DOC-TITLE">Familienfoto, Sommer 1928</div><div class="DOC-SENDER">von <a href="#">Ernst Raddatz</a></div></div>
<div class="DOC-DATE">vor 1 Woche</div>
</div>
<div class="DOC-ROW">
<div class="DOC-THUMB"><svg width="8" height="10" viewBox="0 0 20 26" fill="none" stroke="#C8C4BE" stroke-width="1.5"><path d="M3 1h9l5 5v19H3V1z"/><polyline points="12 1 12 6 18 6"/></svg></div>
<div class="DOC-INFO"><div class="DOC-TITLE">Taufregister Heinrich Weber, 1902</div><div class="DOC-SENDER" style="color:#E0DDD5"></div></div>
<div class="DOC-DATE">vor 2 Wo.</div>
</div>
<div class="DOC-ROW">
<div class="DOC-THUMB"><svg width="10" height="10" viewBox="0 0 24 24" fill="none" stroke="#A6DAD8" stroke-width="1.5"><rect x="2" y="2" width="20" height="20" rx="2"/><circle cx="8" cy="8" r="2"/><polyline points="22 14 16 9 4 22"/></svg></div>
<div class="DOC-INFO"><div class="DOC-TITLE">Postkarte aus Berlin, 1930</div><div class="DOC-SENDER">von <a href="#">Frieda Müller</a></div></div>
<div class="DOC-DATE">vor 3 Wo.</div>
</div>
</div>
<div class="CARD">
<div class="CARD-HEAD"><h3>Geschichten</h3><a href="/geschichten">Alle Geschichten</a></div>
<div class="STORY-ROW">
<div class="STORY-TITLE">Die Reise nach Berlin</div>
<div class="STORY-EXCERPT">Im Frühjahr 1921 bestieg Ernst Raddatz erstmals den Zug nach Berlin, um Arbeit in der aufstrebenden Metropole zu finden …</div>
<div class="STORY-META">vor 3 Tagen</div>
</div>
<div class="STORY-ROW">
<div class="STORY-TITLE">Sommer 1934 in Köln</div>
<div class="STORY-EXCERPT">Die Sommerferien 1934 verbrachte die Familie Raddatz bei Verwandten in Köln — die letzte unbeschwerte Reise vor dem Krieg …</div>
<div class="STORY-META">vor 2 Wochen</div>
</div>
<div class="STORY-ROW">
<div class="STORY-TITLE">Briefe aus dem Krieg</div>
<div class="STORY-EXCERPT">Zwischen 1914 und 1918 schrieb Ernst Raddatz insgesamt 47 Briefe aus dem Feld an seine Frau Käthe in der Heimat …</div>
<div class="STORY-META">vor 1 Monat</div>
</div>
</div>
</div>
</div><!-- /PAGE-WRAP -->
</div><!-- /MAIN -->
</div>
</div>
<div style="display:flex;flex-direction:column;gap:10px;padding-top:40px">
<div class="ann-block">
<strong>Header-Balken — unverändert B.1</strong>
<ul>
<li>Weißer Hintergrund, 1 px vertikale Trennlinie (#E8E4DF)</li>
<li>Gruß links in Georgia Serif, Stats rechts mit Inline-Trennern</li>
</ul>
</div>
<div class="ann-block">
<strong>Personen-Kacheln — B.3 Avatar, B.3 Pill, kein Streifen</strong>
<ul>
<li>Avatar: 34 px (statt 28 px), gleicher border-radius: 50 %</li>
<li>Avatar box-shadow: 0 2 px 6 px rgba(0,40,80,.2) — leichte Tiefe</li>
<li>Dokumentzahl: Mint Pill (#D4F0EE bg, #002850 text) statt grauem Plain-Text</li>
<li>Kein border-bottom-Akzent — plain 1 px #E0DDD5 rundum</li>
</ul>
</div>
<div class="note">
<strong>Seitenlayout — reale Werte</strong>
<ul>
<li>Canvas (#F5F4EF) läuft vollbreit bis zum Viewport-Rand</li>
<li>Inhalts-Wrapper: <code>max-w-7xl</code> (1280 px) + <code>px-8 py-8</code> (32 px) zentriert</li>
<li>Mockup-Äquivalent: max-width 704 px, padding 20 px links/rechts, 18 px oben</li>
<li>Nav-Bar bleibt vollbreit — kein max-width-Constraint</li>
</ul>
</div>
<div class="ok">
<strong>Alle anderen Elemente unverändert aus B.1</strong>
<ul>
<li>1:1 Spaltenbreite, Docs-Thumb, Absender-Link, Datum</li>
<li>Story: kursiver Titel, 2-Zeilen-Auszug, Datum</li>
<li>Drafts-Card: white mit mint left-border (BLOG_WRITE-Variante)</li>
</ul>
</div>
<div class="note">
<strong>Stat-Links — Zielrouten</strong>
<ul>
<li>Dokumente-Zahl → <code>/documents</code></li>
<li>Personen-Zahl → <code>/persons</code></li>
<li>Geschichten-Zahl → <code>/geschichten</code></li>
<li>„Alle N Personen →" → <code>/persons</code></li>
<li>„Alle Dokumente" / „Alle" in Card-Head → <code>/documents</code></li>
<li>„Alle Geschichten" / „Alle" in Card-Head → <code>/geschichten</code></li>
<li>Personen-Kacheln → <code>/persons/{id}</code> (Instanz-spezifisch)</li>
</ul>
</div>
</div>
</div>
</div>
<!-- ══ SECTION 2: BLOG_WRITE ══ -->
<div class="sec">
<div class="sec-h"><span class="sec-num">2</span> Variante · BLOG_WRITE — Zone 3 „Meine Entwürfe"</div>
<div class="sg sg-2">
<div class="sb">
<div class="sl">READ_ALL + BLOG_WRITE</div>
<div class="wf">
<div class="wf-bar"><div class="dot r"></div><div class="dot y"></div><div class="dot g"></div><div class="urlbar"><span>familienarchiv.local /</span></div></div>
<div class="N"><span class="logo">Familienarchiv</span><span class="nl on">Startseite</span><span class="nl">Dokumente</span><span class="nl">Personen</span><span class="nl">Geschichten</span><div class="nr"><div class="av">MR</div></div></div>
<div class="N-accent"></div>
<div class="MAIN">
<div class="PAGE-WRAP">
<div class="HEADER-BAR">
<div class="HEADER-LEFT"><div class="HEADER-TIME">Guten Morgen</div><div class="HEADER-NAME">Herzlich willkommen, Marcel.</div></div>
<div class="DIVIDER"></div>
<div class="HEADER-STATS">
<div class="HSTAT"><a href="/documents"><span class="HSTAT-NUM">847</span><span class="HSTAT-LABEL">Dokumente</span></a></div>
<div class="HSTAT"><a href="/persons"><span class="HSTAT-NUM">94</span><span class="HSTAT-LABEL">Personen</span></a></div>
<div class="HSTAT"><a href="/geschichten"><span class="HSTAT-NUM">12</span><span class="HSTAT-LABEL">Geschichten</span></a></div>
</div>
</div>
<div class="DRAFTS-CARD">
<div class="DRAFTS-HEAD"><h3>Meine Entwürfe</h3></div>
<div class="DRAFT-ROW">
<div><div class="DRAFT-TITLE">Onkel Friedrichs Wanderjahre</div><div class="DRAFT-META">Entwurf · zuletzt bearbeitet vor 1 Tag</div></div>
<svg width="7" height="7" viewBox="0 0 24 24" fill="none" stroke="#CCC" stroke-width="2"><polyline points="9 18 15 12 9 6"/></svg>
</div>
<div class="DRAFT-ROW">
<div><div class="DRAFT-TITLE">Die Raddatz-Kinder</div><div class="DRAFT-META">Entwurf · zuletzt bearbeitet vor 5 Tagen</div></div>
<svg width="7" height="7" viewBox="0 0 24 24" fill="none" stroke="#CCC" stroke-width="2"><polyline points="9 18 15 12 9 6"/></svg>
</div>
</div>
<div>
<div class="PERSON-GRID">
<a class="PCARD" href="#"><div class="PCARD-AV" style="background:#002850">KR</div><div class="PCARD-NAME">Käthe Raddatz</div><div class="PCARD-COUNT">47 Dok.</div></a>
<a class="PCARD" href="#"><div class="PCARD-AV" style="background:#1A4A6B">ER</div><div class="PCARD-NAME">Ernst Raddatz</div><div class="PCARD-COUNT">31 Dok.</div></a>
<a class="PCARD" href="#"><div class="PCARD-AV" style="background:#3D5A7A">FM</div><div class="PCARD-NAME">Frieda Müller</div><div class="PCARD-COUNT">28 Dok.</div></a>
<a class="PCARD" href="#"><div class="PCARD-AV" style="background:#4A7A5A">HW</div><div class="PCARD-NAME">Heinrich Weber</div><div class="PCARD-COUNT">19 Dok.</div></a>
</div>
<div class="PERSONS-FOOTER"><a class="PERSONS-ALL" href="/persons">Alle 94 Personen →</a></div>
</div>
<div class="CONTENT-ROW">
<div class="CARD">
<div class="CARD-HEAD"><h3>Zuletzt aktualisiert</h3><a href="/documents">Alle Dokumente</a></div>
<div class="DOC-ROW"><div class="DOC-THUMB"><svg width="8" height="10" viewBox="0 0 20 26" fill="none" stroke="#C8C4BE" stroke-width="1.5"><path d="M3 1h9l5 5v19H3V1z"/><polyline points="12 1 12 6 18 6"/></svg></div><div class="DOC-INFO"><div class="DOC-TITLE">Brief von Ernst an Käthe, März 1923</div><div class="DOC-SENDER">von <a href="#">Käthe Raddatz</a></div></div><div class="DOC-DATE">vor 2 Tagen</div></div>
<div class="DOC-ROW"><div class="DOC-THUMB"><svg width="8" height="10" viewBox="0 0 20 26" fill="none" stroke="#C8C4BE" stroke-width="1.5"><path d="M3 1h9l5 5v19H3V1z"/><polyline points="12 1 12 6 18 6"/></svg></div><div class="DOC-INFO"><div class="DOC-TITLE">Heiratsurkunde Raddatz-Müller, 1898</div><div class="DOC-SENDER" style="color:#E0DDD5"></div></div><div class="DOC-DATE">vor 4 Tagen</div></div>
<div class="DOC-ROW"><div class="DOC-THUMB"><svg width="10" height="10" viewBox="0 0 24 24" fill="none" stroke="#A6DAD8" stroke-width="1.5"><rect x="2" y="2" width="20" height="20" rx="2"/><circle cx="8" cy="8" r="2"/><polyline points="22 14 16 9 4 22"/></svg></div><div class="DOC-INFO"><div class="DOC-TITLE">Familienfoto, Sommer 1928</div><div class="DOC-SENDER">von <a href="#">Ernst Raddatz</a></div></div><div class="DOC-DATE">vor 1 Woche</div></div>
<div style="padding:5px 10px;font-size:6px;color:#C8C4BE;border-top:1px solid #F0EDE6">+ 2 weitere Dokumente …</div>
</div>
<div class="CARD">
<div class="CARD-HEAD"><h3>Geschichten</h3><a href="/geschichten">Alle</a></div>
<div class="STORY-ROW"><div class="STORY-TITLE">Die Reise nach Berlin</div><div class="STORY-EXCERPT">Im Frühjahr 1921 bestieg Ernst Raddatz erstmals den Zug nach Berlin, um Arbeit in der aufstrebenden Metropole zu finden …</div><div class="STORY-META">vor 3 Tagen</div></div>
<div class="STORY-ROW"><div class="STORY-TITLE">Sommer 1934 in Köln</div><div class="STORY-EXCERPT">Die Sommerferien 1934 verbrachte die Familie Raddatz bei Verwandten in Köln — die letzte unbeschwerte Reise vor dem Krieg …</div><div class="STORY-META">vor 2 Wochen</div></div>
</div>
</div>
</div><!-- /PAGE-WRAP -->
</div><!-- /MAIN -->
</div>
</div>
<div style="display:flex;flex-direction:column;gap:10px;padding-top:40px">
<div class="ann-block">
<strong>Entwürfe-Card — unverändert B.1</strong>
<ul>
<li>Weiß mit 3 px mint Left-Border — gleiche Sprache wie restliche Cards</li>
<li>Titel in Georgia Serif, Metazeile in gedämpftem Grau</li>
<li>Nur sichtbar für BLOG_WRITE-Nutzer (isReader &amp;&amp; canBlogWrite)</li>
</ul>
</div>
</div>
</div>
</div>
<!-- ══ SECTION 3: DARK THEME ══ -->
<div class="sec">
<div class="sec-h"><span class="sec-num">3</span> Desktop · Dark Theme — READ_ALL</div>
<div class="sg sg-2">
<div class="sb">
<div class="sl">Vollansicht <span class="sz">≥ 1024 px · dark mode</span></div>
<div class="wf wf-dark">
<div class="wf-bar">
<div class="dot r"></div><div class="dot y"></div><div class="dot g"></div>
<div class="urlbar"><span>familienarchiv.local /</span></div>
</div>
<div class="N">
<span class="logo">Familienarchiv</span>
<span class="nl on">Startseite</span>
<span class="nl">Dokumente</span>
<span class="nl">Personen</span>
<span class="nl">Geschichten</span>
<div class="nr">
<div class="nico"><svg width="9" height="9" viewBox="0 0 24 24" fill="none" stroke="rgba(255,255,255,.5)" stroke-width="2"><path d="M18 8A6 6 0 006 8c0 7-3 9-3 9h18s-3-2-3-9"/><path d="M13.73 21a2 2 0 01-3.46 0"/></svg></div>
<div class="av">BK</div>
</div>
</div>
<div class="N-accent"></div>
<div class="MAIN DK-MAIN">
<div class="PAGE-WRAP">
<div class="HEADER-BAR DK-HEADER-BAR">
<div class="HEADER-LEFT">
<div class="HEADER-TIME DK-HEADER-TIME">Guten Abend</div>
<div class="HEADER-NAME DK-HEADER-NAME">Herzlich willkommen, Brigitte.</div>
</div>
<div class="DIVIDER DK-DIVIDER"></div>
<div class="HEADER-STATS">
<div class="HSTAT DK-HSTAT"><a href="/documents"><span class="HSTAT-NUM DK-HSTAT-NUM">847</span><span class="HSTAT-LABEL DK-HSTAT-LABEL">Dokumente</span></a></div>
<div class="HSTAT DK-HSTAT"><a href="/persons"><span class="HSTAT-NUM DK-HSTAT-NUM">94</span><span class="HSTAT-LABEL DK-HSTAT-LABEL">Personen</span></a></div>
<div class="HSTAT DK-HSTAT"><a href="/geschichten"><span class="HSTAT-NUM DK-HSTAT-NUM">12</span><span class="HSTAT-LABEL DK-HSTAT-LABEL">Geschichten</span></a></div>
</div>
</div>
<div>
<div class="PERSON-GRID">
<a class="PCARD DK-PCARD" href="#">
<div class="PCARD-AV" style="background:#002850">KR</div>
<div class="PCARD-NAME DK-PCARD-NAME">Käthe Raddatz</div>
<div class="PCARD-COUNT DK-PCARD-COUNT">47 Dok.</div>
</a>
<a class="PCARD DK-PCARD" href="#">
<div class="PCARD-AV" style="background:#1A4A6B">ER</div>
<div class="PCARD-NAME DK-PCARD-NAME">Ernst Raddatz</div>
<div class="PCARD-COUNT DK-PCARD-COUNT">31 Dok.</div>
</a>
<a class="PCARD DK-PCARD" href="#">
<div class="PCARD-AV" style="background:#3D5A7A">FM</div>
<div class="PCARD-NAME DK-PCARD-NAME">Frieda Müller</div>
<div class="PCARD-COUNT DK-PCARD-COUNT">28 Dok.</div>
</a>
<a class="PCARD DK-PCARD" href="#">
<div class="PCARD-AV" style="background:#4A7A5A">HW</div>
<div class="PCARD-NAME DK-PCARD-NAME">Heinrich Weber</div>
<div class="PCARD-COUNT DK-PCARD-COUNT">19 Dok.</div>
</a>
</div>
<div class="PERSONS-FOOTER"><a class="PERSONS-ALL DK-PERSONS-ALL" href="/persons">Alle 94 Personen →</a></div>
</div>
<div class="CONTENT-ROW">
<div class="CARD DK-CARD">
<div class="CARD-HEAD DK-CARD-HEAD"><h3>Zuletzt aktualisiert</h3><a href="/documents">Alle Dokumente</a></div>
<div class="DOC-ROW DK-DOC-ROW">
<div class="DOC-THUMB DK-DOC-THUMB"><svg width="8" height="10" viewBox="0 0 20 26" fill="none" stroke="#4A5880" stroke-width="1.5"><path d="M3 1h9l5 5v19H3V1z"/><polyline points="12 1 12 6 18 6"/></svg></div>
<div class="DOC-INFO"><div class="DOC-TITLE DK-DOC-TITLE">Brief von Ernst an Käthe, März 1923</div><div class="DOC-SENDER DK-DOC-SENDER">von <a href="#">Käthe Raddatz</a></div></div>
<div class="DOC-DATE DK-DOC-DATE">vor 2 Tagen</div>
</div>
<div class="DOC-ROW DK-DOC-ROW">
<div class="DOC-THUMB DK-DOC-THUMB"><svg width="8" height="10" viewBox="0 0 20 26" fill="none" stroke="#4A5880" stroke-width="1.5"><path d="M3 1h9l5 5v19H3V1z"/><polyline points="12 1 12 6 18 6"/></svg></div>
<div class="DOC-INFO"><div class="DOC-TITLE DK-DOC-TITLE">Heiratsurkunde Raddatz-Müller, 1898</div><div class="DOC-SENDER DK-DOC-SENDER" style="color:#5A6888"></div></div>
<div class="DOC-DATE DK-DOC-DATE">vor 4 Tagen</div>
</div>
<div class="DOC-ROW DK-DOC-ROW">
<div class="DOC-THUMB DK-DOC-THUMB"><svg width="10" height="10" viewBox="0 0 24 24" fill="none" stroke="#A6DAD8" stroke-width="1.5"><rect x="2" y="2" width="20" height="20" rx="2"/><circle cx="8" cy="8" r="2"/><polyline points="22 14 16 9 4 22"/></svg></div>
<div class="DOC-INFO"><div class="DOC-TITLE DK-DOC-TITLE">Familienfoto, Sommer 1928</div><div class="DOC-SENDER DK-DOC-SENDER">von <a href="#">Ernst Raddatz</a></div></div>
<div class="DOC-DATE DK-DOC-DATE">vor 1 Woche</div>
</div>
<div class="DOC-ROW DK-DOC-ROW">
<div class="DOC-THUMB DK-DOC-THUMB"><svg width="8" height="10" viewBox="0 0 20 26" fill="none" stroke="#4A5880" stroke-width="1.5"><path d="M3 1h9l5 5v19H3V1z"/><polyline points="12 1 12 6 18 6"/></svg></div>
<div class="DOC-INFO"><div class="DOC-TITLE DK-DOC-TITLE">Taufregister Heinrich Weber, 1902</div><div class="DOC-SENDER DK-DOC-SENDER" style="color:#5A6888"></div></div>
<div class="DOC-DATE DK-DOC-DATE">vor 2 Wo.</div>
</div>
<div class="DOC-ROW DK-DOC-ROW">
<div class="DOC-THUMB DK-DOC-THUMB"><svg width="10" height="10" viewBox="0 0 24 24" fill="none" stroke="#A6DAD8" stroke-width="1.5"><rect x="2" y="2" width="20" height="20" rx="2"/><circle cx="8" cy="8" r="2"/><polyline points="22 14 16 9 4 22"/></svg></div>
<div class="DOC-INFO"><div class="DOC-TITLE DK-DOC-TITLE">Postkarte aus Berlin, 1930</div><div class="DOC-SENDER DK-DOC-SENDER">von <a href="#">Frieda Müller</a></div></div>
<div class="DOC-DATE DK-DOC-DATE">vor 3 Wo.</div>
</div>
</div>
<div class="CARD DK-CARD">
<div class="CARD-HEAD DK-CARD-HEAD"><h3>Geschichten</h3><a href="/geschichten">Alle Geschichten</a></div>
<div class="STORY-ROW DK-STORY-ROW">
<div class="STORY-TITLE DK-STORY-TITLE">Die Reise nach Berlin</div>
<div class="STORY-EXCERPT DK-STORY-EXCERPT">Im Frühjahr 1921 bestieg Ernst Raddatz erstmals den Zug nach Berlin, um Arbeit in der aufstrebenden Metropole zu finden …</div>
<div class="STORY-META DK-STORY-META">vor 3 Tagen</div>
</div>
<div class="STORY-ROW DK-STORY-ROW">
<div class="STORY-TITLE DK-STORY-TITLE">Sommer 1934 in Köln</div>
<div class="STORY-EXCERPT DK-STORY-EXCERPT">Die Sommerferien 1934 verbrachte die Familie Raddatz bei Verwandten in Köln — die letzte unbeschwerte Reise vor dem Krieg …</div>
<div class="STORY-META DK-STORY-META">vor 2 Wochen</div>
</div>
<div class="STORY-ROW DK-STORY-ROW">
<div class="STORY-TITLE DK-STORY-TITLE">Briefe aus dem Krieg</div>
<div class="STORY-EXCERPT DK-STORY-EXCERPT">Zwischen 1914 und 1918 schrieb Ernst Raddatz insgesamt 47 Briefe aus dem Feld an seine Frau Käthe in der Heimat …</div>
<div class="STORY-META DK-STORY-META">vor 1 Monat</div>
</div>
</div>
</div>
</div><!-- /PAGE-WRAP -->
</div><!-- /MAIN -->
</div>
</div>
<div style="display:flex;flex-direction:column;gap:10px;padding-top:40px">
<div class="ann-block">
<strong>Dark Canvas — DK-MAIN</strong>
<ul>
<li>Hintergrund: <code>#0F1219</code> (tief dunkelblau, kein reines Schwarz)</li>
<li>Browser-Chromleiste: <code>#1C1E26</code> · URL-Bar: <code>#252830</code></li>
<li>Nav-Bar bleibt <code>#002850</code> — keine Änderung im Dark Mode</li>
</ul>
</div>
<div class="ann-block">
<strong>Karten &amp; Trennlinien — DK-CARD / DK-HEADER-BAR</strong>
<ul>
<li>Surface: <code>#161C27</code> (dunkleres Blaugrau)</li>
<li>Rand: <code>rgba(255,255,255,.08)</code> — subtile Trennung statt Linie</li>
<li>Zeilentrennlinien: <code>rgba(255,255,255,.04)</code></li>
</ul>
</div>
<div class="note">
<strong>Typografie-Token im Dark Mode — WCAG AA</strong>
<ul>
<li>Primär-Text: <code>#D0CCC4</code> / <code>#C0BDB6</code> (warm, kein reines Weiß)</li>
<li>Gedämpft (muted): <code>#7080A8</code> — Absender, Excerpts, Entwurfs-Meta (≥ 4.5:1)</li>
<li>Labels/Überschriften: <code>#6070A0</code> — HSTAT-Label, Card-Head h3 (≥ 4.5:1)</li>
<li>Dim: <code>#5A6888</code> — Datum-Felder (≥ 4.5:1)</li>
<li>Mint: <code>#A6DAD8</code> — unverändert, auch im Dark Mode</li>
<li>Mint-Pill Hintergrund: <code>rgba(166,218,216,.14)</code></li>
</ul>
</div>
<div class="ok">
<strong>Kompositions-Muster — DK- als Zusatzklasse</strong>
<ul>
<li>Klassen addieren sich: <code>class="CARD DK-CARD"</code></li>
<li>DK- nutzt <code>!important</code> zum Überschreiben von Light-Werten</li>
<li>Strukturelle Klassen bleiben unverändert — kein doppelter Markup</li>
<li>Impl.: Tailwind <code>dark:</code>-Varianten oder CSS-Variable-Swap</li>
</ul>
</div>
</div>
</div>
</div>
<!-- ══ SECTION 4: MOBILE ══ -->
<div class="sec">
<div class="sec-h"><span class="sec-num">4</span> Mobile — 3 Varianten (375 px · ≈ 64 % Mockup-Skala)</div>
<div class="sg" style="grid-template-columns:1fr 340px;align-items:start">
<div class="sb">
<div class="sl">Alle drei Varianten nebeneinander</div>
<div class="phones-row">
<!-- Phone 1: Light · READ_ALL -->
<div class="phone-col">
<div class="phone-label">
<span style="background:#E8E4DF;border-radius:3px;padding:1px 5px;font-size:7px">READ_ALL</span>
Hell
</div>
<div class="PHONE">
<div class="PHONE-STATUS">
<span class="PHONE-TIME">19:43</span>
<div class="PHONE-ICONS">
<svg width="9" height="6" viewBox="0 0 18 12" fill="rgba(255,255,255,.8)"><rect x="0" y="3" width="3" height="9" rx=".5"/><rect x="4" y="2" width="3" height="10" rx=".5"/><rect x="8" y="1" width="3" height="11" rx=".5"/><rect x="12" y="0" width="3" height="12" rx=".5"/></svg>
<svg width="8" height="6" viewBox="0 0 20 14" fill="none" stroke="rgba(255,255,255,.8)" stroke-width="1.8"><path d="M1 4.5C4.2 1.8 8 .5 10 .5s5.8 1.3 9 4"/><path d="M4 7.5C6.2 5.7 8 5 10 5s3.8.7 6 2.5"/><circle cx="10" cy="11" r="1.5"/></svg>
<svg width="11" height="6" viewBox="0 0 22 12" fill="none"><rect x="0" y="1" width="18" height="10" rx="1.5" stroke="rgba(255,255,255,.8)" stroke-width="1.2"/><rect x="2" y="3" width="12" height="6" rx=".5" fill="rgba(255,255,255,.8)"/><path d="M19 4v4" stroke="rgba(255,255,255,.5)" stroke-width="1.5" stroke-linecap="round"/></svg>
</div>
</div>
<div class="M-NAV">
<span class="M-LOGO">Familienarchiv</span>
<div class="M-NAV-R">
<div class="M-HAM"><span></span><span></span><span></span></div>
<div class="M-AV">BK</div>
</div>
</div>
<div class="M-ACCENT"></div>
<div class="M-MAIN">
<div class="M-WRAP">
<div class="M-HBAR">
<div class="M-HTIME">Guten Abend</div>
<div class="M-HNAME">Herzlich willkommen, Brigitte.</div>
<div class="M-HSTATS">
<div class="M-HSTAT"><a href="/documents"><span class="M-HSTAT-NUM">847</span><span class="M-HSTAT-LBL">Dok.</span></a></div>
<div class="M-HSTAT"><a href="/persons"><span class="M-HSTAT-NUM">94</span><span class="M-HSTAT-LBL">Pers.</span></a></div>
<div class="M-HSTAT"><a href="/geschichten"><span class="M-HSTAT-NUM">12</span><span class="M-HSTAT-LBL">Gesch.</span></a></div>
</div>
</div>
<div>
<div class="M-PGRID">
<a class="M-PCARD" href="#"><div class="M-PAV" style="background:#002850">KR</div><div class="M-PNAME">Käthe Raddatz</div><div class="M-PCOUNT">47 Dok.</div></a>
<a class="M-PCARD" href="#"><div class="M-PAV" style="background:#1A4A6B">ER</div><div class="M-PNAME">Ernst Raddatz</div><div class="M-PCOUNT">31 Dok.</div></a>
<a class="M-PCARD" href="#"><div class="M-PAV" style="background:#3D5A7A">FM</div><div class="M-PNAME">Frieda Müller</div><div class="M-PCOUNT">28 Dok.</div></a>
<a class="M-PCARD" href="#"><div class="M-PAV" style="background:#4A7A5A">HW</div><div class="M-PNAME">Heinrich Weber</div><div class="M-PCOUNT">19 Dok.</div></a>
</div>
<a class="M-PALL" href="/persons">Alle 94 Personen →</a>
</div>
<div class="M-CARD">
<div class="M-CARD-HEAD"><h3>Zuletzt aktualisiert</h3><a href="/documents">Alle</a></div>
<div class="M-DROW">
<div style="width:15px;height:18px;background:#ECEAE4;border:1px solid #E0DDD5;border-radius:2px;flex-shrink:0;display:flex;align-items:center;justify-content:center"><svg width="6" height="8" viewBox="0 0 20 26" fill="none" stroke="#C8C4BE" stroke-width="1.5"><path d="M3 1h9l5 5v19H3V1z"/><polyline points="12 1 12 6 18 6"/></svg></div>
<div class="M-DINFO"><div class="M-DTITLE">Brief von Ernst an Käthe, März 1923</div><div class="M-DSENDER">von Käthe Raddatz</div></div>
<div class="M-DDATE">vor 2 T.</div>
</div>
<div class="M-DROW">
<div style="width:15px;height:18px;background:#ECEAE4;border:1px solid #E0DDD5;border-radius:2px;flex-shrink:0;display:flex;align-items:center;justify-content:center"><svg width="6" height="8" viewBox="0 0 20 26" fill="none" stroke="#C8C4BE" stroke-width="1.5"><path d="M3 1h9l5 5v19H3V1z"/><polyline points="12 1 12 6 18 6"/></svg></div>
<div class="M-DINFO"><div class="M-DTITLE">Heiratsurkunde Raddatz-Müller, 1898</div><div class="M-DSENDER" style="color:#E0DDD5"></div></div>
<div class="M-DDATE">vor 4 T.</div>
</div>
<div class="M-DROW">
<div style="width:15px;height:18px;background:#ECEAE4;border:1px solid #E0DDD5;border-radius:2px;flex-shrink:0;display:flex;align-items:center;justify-content:center"><svg width="8" height="8" viewBox="0 0 24 24" fill="none" stroke="#A6DAD8" stroke-width="1.5"><rect x="2" y="2" width="20" height="20" rx="2"/><circle cx="8" cy="8" r="2"/><polyline points="22 14 16 9 4 22"/></svg></div>
<div class="M-DINFO"><div class="M-DTITLE">Familienfoto, Sommer 1928</div><div class="M-DSENDER">von Ernst Raddatz</div></div>
<div class="M-DDATE">vor 1 W.</div>
</div>
</div>
<div class="M-CARD">
<div class="M-CARD-HEAD"><h3>Geschichten</h3><a href="/geschichten">Alle</a></div>
<div class="M-SROW">
<div class="M-STITLE">Die Reise nach Berlin</div>
<div class="M-SEXCERPT">Im Frühjahr 1921 bestieg Ernst Raddatz erstmals den Zug nach Berlin …</div>
<div class="M-SMETA">vor 3 Tagen</div>
</div>
<div class="M-SROW">
<div class="M-STITLE">Sommer 1934 in Köln</div>
<div class="M-SEXCERPT">Die Sommerferien 1934 verbrachte die Familie Raddatz bei Verwandten …</div>
<div class="M-SMETA">vor 2 Wochen</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Phone 2: Light · BLOG_WRITE -->
<div class="phone-col">
<div class="phone-label">
<span style="background:#D4F0EE;border-radius:3px;padding:1px 5px;font-size:7px;color:#002850">BLOG_WRITE</span>
Hell + Entwürfe
</div>
<div class="PHONE">
<div class="PHONE-STATUS">
<span class="PHONE-TIME">08:17</span>
<div class="PHONE-ICONS">
<svg width="9" height="6" viewBox="0 0 18 12" fill="rgba(255,255,255,.8)"><rect x="0" y="3" width="3" height="9" rx=".5"/><rect x="4" y="2" width="3" height="10" rx=".5"/><rect x="8" y="1" width="3" height="11" rx=".5"/><rect x="12" y="0" width="3" height="12" rx=".5"/></svg>
<svg width="11" height="6" viewBox="0 0 22 12" fill="none"><rect x="0" y="1" width="18" height="10" rx="1.5" stroke="rgba(255,255,255,.8)" stroke-width="1.2"/><rect x="2" y="3" width="12" height="6" rx=".5" fill="rgba(255,255,255,.8)"/><path d="M19 4v4" stroke="rgba(255,255,255,.5)" stroke-width="1.5" stroke-linecap="round"/></svg>
</div>
</div>
<div class="M-NAV">
<span class="M-LOGO">Familienarchiv</span>
<div class="M-NAV-R">
<div class="M-HAM"><span></span><span></span><span></span></div>
<div class="M-AV">MR</div>
</div>
</div>
<div class="M-ACCENT"></div>
<div class="M-MAIN">
<div class="M-WRAP">
<div class="M-HBAR">
<div class="M-HTIME">Guten Morgen</div>
<div class="M-HNAME">Herzlich willkommen, Marcel.</div>
<div class="M-HSTATS">
<div class="M-HSTAT"><a href="/documents"><span class="M-HSTAT-NUM">847</span><span class="M-HSTAT-LBL">Dok.</span></a></div>
<div class="M-HSTAT"><a href="/persons"><span class="M-HSTAT-NUM">94</span><span class="M-HSTAT-LBL">Pers.</span></a></div>
<div class="M-HSTAT"><a href="/geschichten"><span class="M-HSTAT-NUM">12</span><span class="M-HSTAT-LBL">Gesch.</span></a></div>
</div>
</div>
<div class="M-DCARD">
<div class="M-DCARD-HEAD"><h3>Meine Entwürfe</h3></div>
<div class="M-DRAFT-ROW">
<div><div class="M-DRAFT-TITLE">Onkel Friedrichs Wanderjahre</div><div class="M-DRAFT-META">Entwurf · vor 1 Tag</div></div>
<svg width="6" height="6" viewBox="0 0 24 24" fill="none" stroke="#CCC" stroke-width="2"><polyline points="9 18 15 12 9 6"/></svg>
</div>
<div class="M-DRAFT-ROW">
<div><div class="M-DRAFT-TITLE">Die Raddatz-Kinder</div><div class="M-DRAFT-META">Entwurf · vor 5 Tagen</div></div>
<svg width="6" height="6" viewBox="0 0 24 24" fill="none" stroke="#CCC" stroke-width="2"><polyline points="9 18 15 12 9 6"/></svg>
</div>
</div>
<div>
<div class="M-PGRID">
<a class="M-PCARD" href="#"><div class="M-PAV" style="background:#002850">KR</div><div class="M-PNAME">Käthe Raddatz</div><div class="M-PCOUNT">47 Dok.</div></a>
<a class="M-PCARD" href="#"><div class="M-PAV" style="background:#1A4A6B">ER</div><div class="M-PNAME">Ernst Raddatz</div><div class="M-PCOUNT">31 Dok.</div></a>
<a class="M-PCARD" href="#"><div class="M-PAV" style="background:#3D5A7A">FM</div><div class="M-PNAME">Frieda Müller</div><div class="M-PCOUNT">28 Dok.</div></a>
<a class="M-PCARD" href="#"><div class="M-PAV" style="background:#4A7A5A">HW</div><div class="M-PNAME">Heinrich Weber</div><div class="M-PCOUNT">19 Dok.</div></a>
</div>
<a class="M-PALL" href="/persons">Alle 94 Personen →</a>
</div>
<div class="M-CARD">
<div class="M-CARD-HEAD"><h3>Zuletzt aktualisiert</h3><a href="/documents">Alle</a></div>
<div class="M-DROW">
<div style="width:15px;height:18px;background:#ECEAE4;border:1px solid #E0DDD5;border-radius:2px;flex-shrink:0;display:flex;align-items:center;justify-content:center"><svg width="6" height="8" viewBox="0 0 20 26" fill="none" stroke="#C8C4BE" stroke-width="1.5"><path d="M3 1h9l5 5v19H3V1z"/><polyline points="12 1 12 6 18 6"/></svg></div>
<div class="M-DINFO"><div class="M-DTITLE">Brief von Ernst an Käthe, März 1923</div><div class="M-DSENDER">von Käthe Raddatz</div></div>
<div class="M-DDATE">vor 2 T.</div>
</div>
<div class="M-DROW">
<div style="width:15px;height:18px;background:#ECEAE4;border:1px solid #E0DDD5;border-radius:2px;flex-shrink:0;display:flex;align-items:center;justify-content:center"><svg width="6" height="8" viewBox="0 0 20 26" fill="none" stroke="#C8C4BE" stroke-width="1.5"><path d="M3 1h9l5 5v19H3V1z"/><polyline points="12 1 12 6 18 6"/></svg></div>
<div class="M-DINFO"><div class="M-DTITLE">Familienfoto, Sommer 1928</div><div class="M-DSENDER">von Ernst Raddatz</div></div>
<div class="M-DDATE">vor 1 W.</div>
</div>
</div>
<div class="M-CARD">
<div class="M-CARD-HEAD"><h3>Geschichten</h3><a href="/geschichten">Alle</a></div>
<div class="M-SROW">
<div class="M-STITLE">Die Reise nach Berlin</div>
<div class="M-SEXCERPT">Im Frühjahr 1921 bestieg Ernst Raddatz erstmals den Zug nach Berlin …</div>
<div class="M-SMETA">vor 3 Tagen</div>
</div>
<div class="M-SROW">
<div class="M-STITLE">Sommer 1934 in Köln</div>
<div class="M-SEXCERPT">Die Sommerferien 1934 verbrachte die Familie Raddatz bei Verwandten …</div>
<div class="M-SMETA">vor 2 Wochen</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Phone 3: Dark · READ_ALL -->
<div class="phone-col">
<div class="phone-label">
<span style="background:#1C1E26;border-radius:3px;padding:1px 5px;font-size:7px;color:#A6DAD8">READ_ALL</span>
Dunkel
</div>
<div class="PHONE dk">
<div class="PHONE-STATUS">
<span class="PHONE-TIME">19:43</span>
<div class="PHONE-ICONS">
<svg width="9" height="6" viewBox="0 0 18 12" fill="rgba(255,255,255,.8)"><rect x="0" y="3" width="3" height="9" rx=".5"/><rect x="4" y="2" width="3" height="10" rx=".5"/><rect x="8" y="1" width="3" height="11" rx=".5"/><rect x="12" y="0" width="3" height="12" rx=".5"/></svg>
<svg width="11" height="6" viewBox="0 0 22 12" fill="none"><rect x="0" y="1" width="18" height="10" rx="1.5" stroke="rgba(255,255,255,.8)" stroke-width="1.2"/><rect x="2" y="3" width="10" height="6" rx=".5" fill="rgba(255,255,255,.8)"/><path d="M19 4v4" stroke="rgba(255,255,255,.5)" stroke-width="1.5" stroke-linecap="round"/></svg>
</div>
</div>
<div class="M-NAV">
<span class="M-LOGO">Familienarchiv</span>
<div class="M-NAV-R">
<div class="M-HAM"><span></span><span></span><span></span></div>
<div class="M-AV">BK</div>
</div>
</div>
<div class="M-ACCENT"></div>
<div class="M-MAIN dk">
<div class="M-WRAP">
<div class="M-HBAR dk">
<div class="M-HTIME dk">Guten Abend</div>
<div class="M-HNAME dk">Herzlich willkommen, Brigitte.</div>
<div class="M-HSTATS dk">
<div class="M-HSTAT dk"><a href="#"><span class="M-HSTAT-NUM dk">847</span><span class="M-HSTAT-LBL dk">Dok.</span></a></div>
<div class="M-HSTAT dk"><a href="#"><span class="M-HSTAT-NUM dk">94</span><span class="M-HSTAT-LBL dk">Pers.</span></a></div>
<div class="M-HSTAT dk"><a href="#"><span class="M-HSTAT-NUM dk">12</span><span class="M-HSTAT-LBL dk">Gesch.</span></a></div>
</div>
</div>
<div>
<div class="M-PGRID">
<a class="M-PCARD dk" href="#"><div class="M-PAV" style="background:#002850">KR</div><div class="M-PNAME dk">Käthe Raddatz</div><div class="M-PCOUNT dk">47 Dok.</div></a>
<a class="M-PCARD dk" href="#"><div class="M-PAV" style="background:#1A4A6B">ER</div><div class="M-PNAME dk">Ernst Raddatz</div><div class="M-PCOUNT dk">31 Dok.</div></a>
<a class="M-PCARD dk" href="#"><div class="M-PAV" style="background:#3D5A7A">FM</div><div class="M-PNAME dk">Frieda Müller</div><div class="M-PCOUNT dk">28 Dok.</div></a>
<a class="M-PCARD dk" href="#"><div class="M-PAV" style="background:#4A7A5A">HW</div><div class="M-PNAME dk">Heinrich Weber</div><div class="M-PCOUNT dk">19 Dok.</div></a>
</div>
<a class="M-PALL dk" href="#">Alle 94 Personen →</a>
</div>
<div class="M-CARD dk">
<div class="M-CARD-HEAD dk"><h3>Zuletzt aktualisiert</h3><a href="#">Alle</a></div>
<div class="M-DROW dk">
<div style="width:15px;height:18px;background:#1E2638;border:1px solid rgba(255,255,255,.07);border-radius:2px;flex-shrink:0;display:flex;align-items:center;justify-content:center"><svg width="6" height="8" viewBox="0 0 20 26" fill="none" stroke="#4A5880" stroke-width="1.5"><path d="M3 1h9l5 5v19H3V1z"/><polyline points="12 1 12 6 18 6"/></svg></div>
<div class="M-DINFO"><div class="M-DTITLE dk">Brief von Ernst an Käthe, März 1923</div><div class="M-DSENDER dk">von Käthe Raddatz</div></div>
<div class="M-DDATE dk">vor 2 T.</div>
</div>
<div class="M-DROW dk">
<div style="width:15px;height:18px;background:#1E2638;border:1px solid rgba(255,255,255,.07);border-radius:2px;flex-shrink:0;display:flex;align-items:center;justify-content:center"><svg width="6" height="8" viewBox="0 0 20 26" fill="none" stroke="#4A5880" stroke-width="1.5"><path d="M3 1h9l5 5v19H3V1z"/><polyline points="12 1 12 6 18 6"/></svg></div>
<div class="M-DINFO"><div class="M-DTITLE dk">Heiratsurkunde Raddatz-Müller, 1898</div><div class="M-DSENDER dk" style="color:#5A6888"></div></div>
<div class="M-DDATE dk">vor 4 T.</div>
</div>
<div class="M-DROW dk">
<div style="width:15px;height:18px;background:#1E2638;border:1px solid rgba(255,255,255,.07);border-radius:2px;flex-shrink:0;display:flex;align-items:center;justify-content:center"><svg width="8" height="8" viewBox="0 0 24 24" fill="none" stroke="#A6DAD8" stroke-width="1.5"><rect x="2" y="2" width="20" height="20" rx="2"/><circle cx="8" cy="8" r="2"/><polyline points="22 14 16 9 4 22"/></svg></div>
<div class="M-DINFO"><div class="M-DTITLE dk">Familienfoto, Sommer 1928</div><div class="M-DSENDER dk">von Ernst Raddatz</div></div>
<div class="M-DDATE dk">vor 1 W.</div>
</div>
</div>
<div class="M-CARD dk">
<div class="M-CARD-HEAD dk"><h3>Geschichten</h3><a href="#">Alle</a></div>
<div class="M-SROW dk">
<div class="M-STITLE dk">Die Reise nach Berlin</div>
<div class="M-SEXCERPT dk">Im Frühjahr 1921 bestieg Ernst Raddatz erstmals den Zug nach Berlin …</div>
<div class="M-SMETA dk">vor 3 Tagen</div>
</div>
<div class="M-SROW dk">
<div class="M-STITLE dk">Sommer 1934 in Köln</div>
<div class="M-SEXCERPT dk">Die Sommerferien 1934 verbrachte die Familie Raddatz bei Verwandten …</div>
<div class="M-SMETA dk">vor 2 Wochen</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div><!-- /phones-row -->
</div>
<div style="display:flex;flex-direction:column;gap:10px;padding-top:40px">
<div class="ann-block">
<strong>Header — stacked layout</strong>
<ul>
<li>Desktop: Greeting + Stats nebeneinander (Flexbox row, 1 px Divider)</li>
<li>Mobile: Greeting oben, Stats darunter nach <code>border-top</code> — kein Divider</li>
<li>Stat-Labels kürzen auf „Dok." / „Pers." / „Gesch." (Platzmangel)</li>
</ul>
</div>
<div class="ann-block">
<strong>Personen — 2×2 Grid (statt 4×1)</strong>
<ul>
<li>Desktop: <code>grid-template-columns: repeat(4, 1fr)</code></li>
<li>Mobile: <code>grid-template-columns: 1fr 1fr</code> — Avatar 22 px (statt 34 px)</li>
<li>„Alle N Personen →" als Inline-Link unter dem Grid</li>
</ul>
</div>
<div class="ann-block">
<strong>Inhalt — einspaltig, Docs zuerst</strong>
<ul>
<li>Desktop: <code>grid-template-columns: 1fr 1fr</code> nebeneinander</li>
<li>Mobile: Spalten aufgelöst — Dokumente-Card oben, Geschichten-Card darunter</li>
<li>Breakpoint: Tailwind <code>sm</code> = 640 px</li>
</ul>
</div>
<div class="note">
<strong>Navigation — Hamburger-Menü</strong>
<ul>
<li>Desktop: inline Nav-Links sichtbar</li>
<li>Mobile: Links ausgeblendet, stattdessen Hamburger-Icon (3 Striche) links neben Avatar</li>
<li>Nav-Bar Höhe und Farbe (#002850) bleiben identisch</li>
</ul>
</div>
<div class="ok">
<strong>Dark Mobile — .dk Modifier-Klasse</strong>
<ul>
<li>Selbe M- Strukturklassen + <code>.dk</code> für Dark-Werte</li>
<li>Nav-Bar bleibt #002850 — kein .dk nötig</li>
<li>PHONE-Status-Bar bleibt #002850 — unverändert</li>
<li>Avatare behalten ihre Farbe — Eigenfarbe, kein Token</li>
</ul>
</div>
<div class="ann-block">
<strong>Neue i18n-Schlüssel — messages/{de,en,es}.json</strong>
<ul>
<li><code>dashboard.greeting.morning</code> — „Guten Morgen" (vor 12:00)</li>
<li><code>dashboard.greeting.afternoon</code> — „Guten Tag" (12:0018:00)</li>
<li><code>dashboard.greeting.evening</code> — „Guten Abend" (ab 18:00)</li>
<li><code>dashboard.welcome</code> — „Herzlich willkommen, {name}." (parametrisch)</li>
<li><code>dashboard.persons.viewAll</code> — „Alle {count} Personen →" (parametrisch)</li>
<li><code>dashboard.recentlyUpdated</code> — „Zuletzt aktualisiert"</li>
<li><code>dashboard.myDrafts</code> — „Meine Entwürfe"</li>
<li><code>dashboard.stat.documents</code> — „Dokumente" / mobil: „Dok."</li>
<li><code>dashboard.stat.persons</code> — „Personen" / mobil: „Pers."</li>
<li><code>dashboard.stat.stories</code> — „Geschichten" / mobil: „Gesch."</li>
</ul>
</div>
</div>
</div>
</div>
<!-- ══ IMPL-REF TABLE ══ -->
<div class="impl-ref-section">
<div class="sec-h"><span class="sec-num" style="background:#4A6E8A"></span> Implementierungsreferenz — Tailwind-Klassen je Region</div>
<p style="font-size:11px;color:#888;margin-bottom:20px">Exakte Tailwind CSS 4-Klassen und Pixel-Werte für jeden UI-Bereich. <strong>Diese Werte gelten für die Implementierung</strong>, nicht die skalierten Mockup-Werte.</p>
<table class="impl-ref-table">
<thead>
<tr>
<th>Region</th>
<th>Tailwind-Klassen</th>
<th>Hinweise</th>
</tr>
</thead>
<tbody>
<tr>
<td>Seiten-Canvas</td>
<td><code>bg-canvas w-full</code></td>
<td class="note-cell">Vollbreite Viewport; Farbe: <code>--palette-sand</code> / <code>bg-canvas</code></td>
</tr>
<tr>
<td>Inhalts-Wrapper</td>
<td><code>max-w-7xl mx-auto px-8 py-8</code></td>
<td class="note-cell">1280 px max-width, 32 px padding allseitig</td>
</tr>
<tr>
<td>Header-Balken</td>
<td><code>bg-white border border-line rounded-sm px-4 py-3 flex items-center gap-4</code></td>
<td class="note-cell">Explizit <code>bg-white</code>, nicht <code>bg-surface</code> — weißer Hintergrund ist intentionell (B.1-Entscheidung)</td>
</tr>
<tr>
<td>Header: Gruß-Zeit</td>
<td><code>text-[6px] font-bold uppercase tracking-[.8px] text-[#C8B8A0]</code></td>
<td class="note-cell">Warm-beige, kein Design-Token — kandidiert für <code>--color-greeting-time</code></td>
</tr>
<tr>
<td>Header: Begrüßungsname</td>
<td><code>font-serif text-xl text-brand-navy</code></td>
<td class="note-cell">Georgia/Tinos; <code>text-xl</code> (20 px real)</td>
</tr>
<tr>
<td>Header: Trennlinie</td>
<td><code>w-px self-stretch bg-line flex-shrink-0</code></td>
<td class="note-cell">1 px vertikal; <code>--palette-line</code> = <code>#E8E4DF</code></td>
</tr>
<tr>
<td>Stat-Zahl</td>
<td><code>text-2xl font-black text-brand-navy leading-none block</code></td>
<td class="note-cell">Numerischer Wert; Block damit Label darunter sitzt</td>
</tr>
<tr>
<td>Stat-Label</td>
<td><code>text-[11px] font-bold uppercase tracking-[.8px] text-ink-3 block mt-0.5</code></td>
<td class="note-cell">Licht: <code>#706C68</code> (WCAG AA); Tailwind-Token <code>text-ink-3</code> TBD</td>
</tr>
<tr>
<td>Personen-Grid</td>
<td><code>grid grid-cols-4 gap-1.5</code></td>
<td class="note-cell">Mobile: <code>grid-cols-2</code> bei <code>sm:</code> (640 px)</td>
</tr>
<tr>
<td>Personen-Kachel</td>
<td><code>bg-surface border border-line rounded-sm p-2.5 flex flex-col items-center text-center gap-1.5 no-underline</code></td>
<td class="note-cell"><code>bg-surface</code> = <code>--palette-surface</code>; kein Bottom-Accent</td>
</tr>
<tr>
<td>Personen-Avatar</td>
<td><code>w-9 h-9 rounded-full flex items-center justify-center font-black text-white text-[9px] shadow-sm flex-shrink-0</code></td>
<td class="note-cell">34 px real ≈ <code>w-9</code> (36 px) — nächster Tailwind-Step; Avatar-Farbe per Person-Eigenfarbe</td>
</tr>
<tr>
<td>Mint-Pill Badge</td>
<td><code>text-[11px] font-bold text-brand-navy bg-[#D4F0EE] px-1.5 py-px rounded-full</code></td>
<td class="note-cell">Token-Kandidat: <code>--color-mint-pill</code> / <code>bg-mint-soft</code></td>
</tr>
<tr>
<td>„Alle N Personen →"</td>
<td><code>text-xs font-semibold text-[#4A6E8A] no-underline text-right block mt-1</code></td>
<td class="note-cell">Direkte Farbe (kein opacity-Trick) — WCAG AA auf <code>bg-canvas</code></td>
</tr>
<tr>
<td>Content-Card</td>
<td><code>bg-surface border border-line rounded-sm overflow-hidden flex flex-col</code></td>
<td class="note-cell">Gleiche Card-Sprache wie restliche App</td>
</tr>
<tr>
<td>Card-Kopfzeile</td>
<td><code>flex items-center justify-between px-3 py-1.5 border-b border-line</code></td>
<td class="note-cell">h3: <code>text-[11px] font-bold uppercase tracking-[.12em] text-ink-3</code></td>
</tr>
<tr>
<td>Dok.-Datum</td>
<td><code>text-[12px] text-ink-3 whitespace-nowrap flex-shrink-0</code></td>
<td class="note-cell">Licht: <code>#706C68</code> (WCAG AA); nicht <code>#C8C4BE</code></td>
</tr>
<tr>
<td>Story-Excerpt</td>
<td><code>text-xs text-ink-2 leading-relaxed line-clamp-2</code></td>
<td class="note-cell">2 Zeilen max via Tailwind <code>line-clamp-2</code></td>
</tr>
<tr>
<td>Story-Meta</td>
<td><code>text-[11px] text-ink-3</code></td>
<td class="note-cell">Licht: <code>#706C68</code> (WCAG AA)</td>
</tr>
<tr>
<td>Entwürfe-Card</td>
<td><code>bg-surface border border-line border-l-[3px] border-l-brand-mint rounded-sm overflow-hidden</code></td>
<td class="note-cell">Mint Left-Border als visueller Anker für BLOG_WRITE-Zone</td>
</tr>
<tr>
<td>Dark Mode</td>
<td><code>dark:bg-surface dark:border-white/8 dark:text-ink</code> (via Tailwind <code>dark:</code>)</td>
<td class="note-cell">Nicht <code>!important</code>-Overrides aus Spec — spec-DK- Klassen sind Annäherungen</td>
</tr>
</tbody>
</table>
</div>
</div>
</body>
</html>