feat: custom frontmatter headers in compose and replies

Adds Key: value header rows under the subject, validated with carrier's
rules: keys of 1-64 letters, digits and dashes, unique case-insensitively,
none of the fields the client sets itself, and the whole block inside the
reader's budget. A reply to a message with the sender's own fields asks
whether to carry copies over.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
randogoth 2026-10-15 15:10:50 +03:00
parent d19568c1c0
commit 0ee4a7a65f
5 changed files with 178 additions and 9 deletions

View file

@ -437,6 +437,11 @@ dialog::backdrop { background: var(--backdrop); }
#compose form { display: flex; flex-direction: column; gap: 10px; padding: 20px 22px; }
#compose input, #compose textarea { width: 100%; }
#compose textarea { font-family: inherit; resize: vertical; }
#compose-headers { display: flex; flex-direction: column; gap: 6px; }
#compose-headers:empty { display: none; }
#compose .header-row { display: flex; gap: 4px; align-items: center; }
#compose .header-row input { font-family: var(--mono); font-size: 13px; }
#compose .add-header { align-self: flex-start; padding: 4px 10px; font-size: 13px; }
#compose .seed-card { margin: 0; }
#compose .actions { display: flex; gap: 8px; margin: 4px 0; }
#compose footer { display: flex; gap: 8px; align-items: center; justify-content: flex-end; padding-top: 4px; flex-wrap: wrap; }