The board wears a picture — background becomes a mapping, and the window chrome follows it under a thin frost
background is {color:, image:} and only a mapping at every level; the board's image paints the full window under a transparent title bar, with a thin-material frost strip keeping the chrome legible and the standard accommodations intact.
Claude-Session: https://claude.ai/code/session_014PtZdPwqZuqEDLc6wZMtEy
This commit is contained in:
@@ -88,6 +88,21 @@ public struct BoardModel: Sendable, Equatable {
|
||||
public let deleted: FieldValue<Date>
|
||||
|
||||
public let background: FieldValue<String>
|
||||
|
||||
/// The `background` mapping's `image` subkey — a path **relative to `rootURL`**
|
||||
/// (01-storage-format.md § Frontmatter; 03-board-ui.md § Styling ▸ Capabilities).
|
||||
///
|
||||
/// **Board-level only**, which is why `Lane` and `Card` carry no twin: a lane's and a card's
|
||||
/// colour are edge accents, and there is nothing at those levels an image could fill. The
|
||||
/// shared reader still accepts the mapping at every level for the colour's sake — one key, one
|
||||
/// reading — but this half has exactly one consumer, the board window's backdrop.
|
||||
///
|
||||
/// A **reading, not a location**: the path is resolved (and required to stay inside the board)
|
||||
/// where it is drawn, `BoardBackdrop.imageURL(named:inBoardRoot:)`, so a value that leads
|
||||
/// nowhere paints nothing and stays on disk exactly as written — the same lenient degrade an
|
||||
/// unrecognized colour gets.
|
||||
public let backgroundImage: FieldValue<String>
|
||||
|
||||
public let icon: FieldValue<String>
|
||||
public let iconColor: FieldValue<String>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user