Shared composer

Purpose: One partial renders every writing form (new post, compact board and QDB add, reply) so field names, signing, drafts, Outbox and attachments behave the same everywhere, while each placement chooses only what it shows. Scenario: On the New post page a member sees the body first, then the Post row with the ··· menu, then the optional Title and the tags (and event, when enabled) below it. On a phone the body starts at the compact form's height and nothing is reserved between it and Post, so when the keyboard opens both stay on screen; long drafts scroll inside the body. The paned board's New Thread dialog renders the same full form. The board, board list and QDB add render the compact form (body and Post only, Title and tags hidden). Replies render body and Post reply, with the phone reply docking on top where enabled. Sources: the composer partial (source unavailable) (order and modes), new post options (source unavailable), reply options (source unavailable), compose styles (source unavailable) (phone rules under 640px), composer browser test (source unavailable) (order assertion), layout stability test (source unavailable) (--phone-fit-only: 13 themes at phone and desktop sizes). Placements may fix fields: the calendar day page sets the event date read-only and presets the tag, and gives the form its own draft scope (data-compose-draft-scope) so a draft from another composer never overwrites those fields (calendar). Format: the composer's collapsed Options section (beside tags and event on New post, its own row under Post elsewhere) holds a Markdown box (unticked by default; markdown_detect.js ticks it when the draft looks like Markdown until the author sets it by hand; unticked posts are plain) a Formatting help link and the thread theme choice; its summary shows what is set; signed, unsigned and Outbox submissions all carry the choice as body_format (post body formatting).