diff --git a/Kanban/UI/Card/CardWindowView.swift b/Kanban/UI/Card/CardWindowView.swift index daa7dc7..edb4c99 100644 --- a/Kanban/UI/Card/CardWindowView.swift +++ b/Kanban/UI/Card/CardWindowView.swift @@ -398,7 +398,16 @@ struct CardWindowView: View { // MARK: - Attributes sidebar - /// The sidebar's sections, **in 05's settled order**: Attachments, Style, Details, Actions. + /// The sidebar's sections, **reordered 2026-08-09** (Pipeline card 8f26b029) so **Attachments + /// sits at the bottom of the stack**: Style, Details, Actions, Attachments. Section internals are + /// untouched — this is ordering only, and it is exactly the `VStack`'s child order, so keyboard + /// Tab order and VoiceOver's reading order follow it for free; ⇧⌘A (`AddAttachmentCommand`) + /// still opens the same file panel regardless of where the section sits in the stack, since it + /// reaches the window through the focus system rather than through this view's layout. + /// + /// 05-card-window.md ▸ The attributes sidebar still documents the pathfinder's original order + /// (Attachments, Style, Details, Actions) — an owed amendment, tracked on that card's own thread + /// rather than made here. /// /// One of the four is conditional, and the condition is the section's own rather than a rule /// restated here: **Details** renders nothing when the card carries no unknown frontmatter keys @@ -411,8 +420,6 @@ struct CardWindowView: View { private var sidebar: some View { ScrollView(.vertical) { VStack(alignment: .leading, spacing: bodyPointSize * 1.25) { - CardAttachmentsSection(attachments: attachments, thumbnails: thumbnails) - CardStyleSection(store: store, recents: recents, cardID: card.id, undo: undo) // The snapshot's own document, not a re-read: the loader parsed this file, unknown @@ -420,6 +427,8 @@ struct CardWindowView: View { CardDetailsSection(rows: CardDetails.rows(of: card.document)) CardActionsSection(store: store, cardID: card.id, cardFolder: cardFolder) + + CardAttachmentsSection(attachments: attachments, thumbnails: thumbnails) } .frame(maxWidth: .infinity, alignment: .leading) .padding(CardWindowMetrics.gutter(bodyPointSize: bodyPointSize))