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:
2026-08-07 10:15:03 -04:00
parent 190a8e36f1
commit d5ad21c3da
37 changed files with 1182 additions and 76 deletions
+19 -4
View File
@@ -90,19 +90,28 @@ enum Accommodations {
/// appear").
///
/// The design's own example (the card face carousel's page dots) died with the carousel
/// (03-board-ui.md § Card face's no-carousel resettlement), so the rule's one surviving subject
/// on the board is the transient search bar's `.bar` material. It is stated as a type anyway
/// rather than inlined at that one call site, because "wherever they appear" is a standing rule
/// and the next material to arrive should find the answer already written.
/// (03-board-ui.md § Card face's no-carousel resettlement), so the rule's subjects on the board
/// are the transient search bar's `.bar` material and the backdrop's title-bar frost the
/// "next material to arrive" this type was stated for, and it found the answer already written.
enum Underlay: Equatable {
/// `Material.bar` the find-bar's own backdrop, translucent over the board beneath it.
case glass
/// `Material.thin` the title-bar frost over a custom board backdrop
/// (`BoardView.boardBackground`). Deliberately not `.bar` the find-bar sits over lanes
/// the board's own plates have already calmed, where the frost sits directly on an image
/// the author may well have chosen *for* its busyness and deliberately not the heavier
/// notches either, tried and retired: `.ultraThick` read as a cloudy plate where a backdrop
/// should still show through, and `.regular` still veiled it more than the chrome needs.
/// The thin weight carries the chrome, and the dissolve below it (`BoardView.frostStrip`)
/// is what keeps the strip from reading as a bar.
case frost
/// The window's own background colour, opaque.
case solid
var style: AnyShapeStyle {
switch self {
case .glass: AnyShapeStyle(.bar)
case .frost: AnyShapeStyle(.thinMaterial)
case .solid: AnyShapeStyle(Color(nsColor: .windowBackgroundColor))
}
}
@@ -112,6 +121,12 @@ enum Accommodations {
reduceTransparency ? .solid : .glass
}
/// The title-bar frost's own reading of the same rule heavier glass, identical accommodation:
/// under Reduce Transparency both underlays take the one solid.
static func frost(reduceTransparency: Bool) -> Underlay {
reduceTransparency ? .solid : .frost
}
/// A **translucent wash** a tint laid over whatever happens to be behind it, and the shape
/// every non-material translucency on the board takes: every lane's plate, the trash column's
/// plate and hatched header, and the drag shadow's fill.