From ec75894e1498401b69565bc95a66fa877c0a1c01 Mon Sep 17 00:00:00 2001 From: ymote <151983+ymote@users.noreply.github.com> Date: Sun, 30 Aug 2026 00:40:13 -0700 Subject: [PATCH] feat(l0 kit): palettes for the vibrant and minimal moods MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 43 corpus cards declare one of these two and could not realize. The catalog entry lands in Splash; this is the kit's answer to the names. Both are deltas from dark and both keep the panel-lift ratio every shipped mood converges on — measured at 1.12:1 in light and dark alike, and stated here as an alpha so it self-scales to whatever ground the mood sets. `vibrant` puts the colour in the PAGE rather than in an accent, which is the one thing the accent axis cannot do: accent reaches a bar, a highlight and a button and never a surface. Ink stays near-white — tinting the text as well is how a vibrant mood becomes an unreadable one. `minimal` withdraws colour entirely and lets a hairline do the separating. Its brief is restraint, and one measurement this session says what restraint must NOT mean: in an eight-way blind comparison the emptiest mockup lost all seven of its pairs, with both judges calling its space "void", "empty, not a pause", "unmotivated". So the budget goes into a wider ink range and a slightly airier rhythm, not into removing things. Co-Authored-By: Claude Opus 5 (1M context) --- components/l0/_palette_minimal.splash | 40 +++++++++++++++++++++++++++ components/l0/_palette_vibrant.splash | 39 ++++++++++++++++++++++++++ 2 files changed, 79 insertions(+) create mode 100644 components/l0/_palette_minimal.splash create mode 100644 components/l0/_palette_vibrant.splash diff --git a/components/l0/_palette_minimal.splash b/components/l0/_palette_minimal.splash new file mode 100644 index 0000000..2840791 --- /dev/null +++ b/components/l0/_palette_minimal.splash @@ -0,0 +1,40 @@ +// Mood delta: minimal — near-monochrome, hairlines, and air. +// +// 19 corpus cards declare `theme minimal` and none of them could realize. +// +// The brief is restraint, and the measurement this session says exactly what +// that must NOT mean: the emptiest mockup in an eight-way blind comparison lost +// all seven of its pairs, with the judges calling its space "void", "empty, not +// a pause", "unmotivated". Restraint is a confident hierarchy with nothing +// competing, not an absence of things. So this mood spends its budget on the +// type scale and takes it out of colour — one near-neutral ground, no accent +// hue at all, and dividers instead of fills. + +let l0_base = argb(255, 16, 17, 19) // #101113 a warm-neutral near-black +let l0_base_2 = argb(255, 6, 7, 8) // #060708 away from the panel +let l0_sheet = argb(255, 22, 23, 26) // #16171a over a map — opaque + +// Panels barely lift; a rule does the separating instead of a fill. Still the +// 1.12:1 the other moods land on, just carried by the hairline rather than +// the surface. +let l0_fill = argb( 12, 255, 255, 255) // #ffffff0c +let l0_hairline = argb( 46, 255, 255, 255) // #ffffff2e the load-bearing element +let l0_stroke = argb( 46, 255, 255, 255) // #ffffff2e +let l0_active = argb( 40, 255, 255, 255) // #ffffff28 + +// No accent hue. Emphasis comes from weight and size, which `emphasis` and the +// derive step already control — a mood that also shouted would be two knobs +// fighting over the same job. +let l0_bar = argb(255, 235, 235, 238) // #ebebee +let l0_bar_rail = argb( 30, 255, 255, 255) // #ffffff1e +let l0_go = argb(255, 235, 235, 238) // #ebebee +let l0_ondark = argb(255, 16, 17, 19) // #101113 ink on a lit fill + +// A wider ink range than dark: with colour withdrawn, the only thing left to +// build a hierarchy out of is how bright each level is. +let l0_text = argb(255, 255, 255, 255) // #ffffff +let l0_soft = argb(214, 255, 255, 255) // #ffffffd6 +let l0_dim = argb(130, 255, 255, 255) // #ffffff82 + +let radius_factor = 0.5 +let space_factor = 1.15 diff --git a/components/l0/_palette_vibrant.splash b/components/l0/_palette_vibrant.splash new file mode 100644 index 0000000..f9ab635 --- /dev/null +++ b/components/l0/_palette_vibrant.splash @@ -0,0 +1,39 @@ +// Mood delta: vibrant — a saturated ground and one loud accent. +// +// 24 corpus cards declare `theme vibrant` and none of them could realize: L0 +// admitted four moods and this was not one, so the card was refused before it +// reached a colour. The name is the whole brief — a card that commits to a hue +// rather than defaulting to neutral dark. +// +// Concatenated after the base and before `_derive`, so a factor moved here +// still propagates. Every value it does not name is inherited from dark. + +// A deep indigo, not black. The point of this mood is that the PAGE carries the +// colour, which is the one thing an accent axis cannot do — accent reaches a +// bar, a highlight and a button, and never a surface. +let l0_base = argb(255, 26, 20, 56) // #1a1438 +let l0_base_2 = argb(255, 12, 9, 30) // #0c091e deepens AWAY from the panel; + // a gradient ending on the card fill + // has separation zero. +let l0_sheet = argb(255, 34, 27, 70) // #221b46 over a map — opaque + +// Panels lift by the same ratio every shipped mood uses — measured at 1.12:1 +// in both dark and light. Stated as an alpha so it self-scales to the ground. +let l0_fill = argb( 30, 255, 255, 255) // #ffffff1e +let l0_hairline = argb( 38, 255, 255, 255) // #ffffff26 +let l0_active = argb( 66, 255, 255, 255) // #ffffff42 + +// The loud part. One hue, used only where direction and emphasis live, so the +// screen reads as committed rather than as a colour scheme. +let l0_bar = argb(255, 255, 122, 182) // #ff7ab6 +let l0_bar_rail = argb( 41, 255, 255, 255) // #ffffff29 +let l0_go = argb(255, 255, 122, 182) // #ff7ab6 +let l0_ondark = argb(255, 22, 10, 30) // #160a1e ink on a lit fill + +// Ink stays near-white: the ground is doing the colour work, and tinting the +// text as well is how a vibrant mood turns into an unreadable one. +let l0_text = argb(255, 255, 252, 255) // #fffcff +let l0_soft = argb(232, 255, 252, 255) // #fffcffe8 +let l0_dim = argb(158, 255, 252, 255) // #fffcff9e + +let radius_factor = 1.2