2x2 grid, 16:9, do this for 4 non-copyrighted books: type Share = Float
data Constituent = C { name:: Text, share:: Share } -- Σ shares = 1 (R₃)
-- R₁+R₂: a partition of the shape region that preserves measure and conforms to the boundary
partition:: Region -> [Constituent] -> [SubRegion]
-- |Ω_i| = share_i - |Ω| (area‑preserving)
-- disjoint Ω_i; ∪Ω_i = Ω; ∂(∪Ω_i) = ∂Ω (shape‑conforming, clean edge)
reads_as:: Image -> (Silhouette, Recipe) -- far = the SHAPE, near = the proportions
forbidden:: [Regex]
forbidden = [ /equal_sized_parts/, /wrong_proportions/, /missing_component/, /broken_silhouette/,
/overlap/, /tilt/, /hands/, /glare/ ]
render:: Subject -> Shape -> Image
render s sh = let d = constituents s; Ω = region sh
in assert (sum(share <$> d)==1 && measure_preserving (partition Ω d) Ω) $
flat_lay (partition Ω d) overhead_softbox matte soft_shadows (tiny_pct d)