=== PosterGrid Outset Axis Probe ===
resolution = HD  1280x 720
itemSpacing = [0,0] and grid.translation = [0,0] throughout unless a case says otherwise
READ THE `bottom` COLUMN. Every case is a 1-row or 2-row grid whose content extent is known,
so `bottom` is the whole subject; `left`/`top`/`right` are along as controls.

A1. 1 col x 1 row, poster 100x100 (M1 repro: expect bottom 50)
    rect  x = -14  y = -14  w =  128  h =  164
    local x = -14  y = -14  w =  128  h =  164
A2. 3 cols x 1 row, poster 100x100 (M4 repro: expect bottom 14)
    rect  x = -14  y = -14  w =  328  h =  164
    local x = -14  y = -14  w =  328  h =  164
A3. 2 cols x 1 row, poster 100x100
    rect  x = -14  y = -14  w =  228  h =  164
    local x = -14  y = -14  w =  228  h =  164
A4. 4 cols x 1 row, poster 100x100
    rect  x = -14  y = -14  w =  428  h =  164
    local x = -14  y = -14  w =  428  h =  164
B1. 3 cols x 4 rows, poster 100x100 (300w x 400h)
    rect  x = -14  y = -14  w =  328  h =  464
    local x = -14  y = -14  w =  328  h =  464
B2. 3 cols x 1 row, poster 100x400 (300w x 400h, one row)
    rect  x = -14  y = -14  w =  328  h =  464
    local x = -14  y = -14  w =  328  h =  464
C1. 1 col x 1 row, poster 400x100 (400w x 100h, wide)
    rect  x = -14  y = -14  w =  428  h =  164
    local x = -14  y = -14  w =  428  h =  164
C2. 1 col x 1 row, poster 100x400 (100w x 400h, tall)
    rect  x = -14  y = -14  w =  128  h =  464
    local x = -14  y = -14  w =  128  h =  464
C3. 1 col x 1 row, poster 200x200 (square)
    rect  x = -14  y = -14  w =  228  h =  264
    local x = -14  y = -14  w =  228  h =  264
D1. 1 col x 1 row, poster 700x100 (very wide, one column)
    rect  x = -14  y = -14  w =  728  h =  164
    local x = -14  y = -14  w =  728  h =  164
D2. 1 col x 1 row, poster 100x700 (very tall, one column)
    rect  x = -14  y = -14  w =  128  h =  764
    local x = -14  y = -14  w =  128  h =  764
D3. 3 cols x 1 row, poster 30x100 (90w, narrow, 3 columns)
    rect  x = -14  y = -14  w =  118  h =  164
    local x = -14  y = -14  w =  118  h =  164
E1. 3 cols x 1 row, caption1NumLines=1
    rect  x = -14  y = -14  w =  328  h =  207
    local x = -14  y = -14  w =  328  h =  207
E2. 1 col x 1 row, caption1NumLines=1
    rect  x = -14  y = -14  w =  128  h =  207
    local x = -14  y = -14  w =  128  h =  207
F1. 3 cols x 1 row, itemSize=[100,100] explicit
    rect  x = -14  y = -14  w =  328  h =  164
    local x = -14  y = -14  w =  328  h =  164
F2. 1 col x 1 row, itemSize=[100,100] explicit
    rect  x = -14  y = -14  w =  128  h =  164
    local x = -14  y = -14  w =  128  h =  164
F3. 3 cols x 1 row, only 2 items (short last row)
    rect  x = -14  y = -14  w =  328  h =  164
    local x = -14  y = -14  w =  328  h =  164

--- per-side outsets (derived from each case's own declared inputs) ---
    left = -x    top = -y    right = w - contentW - left    bottom = h - contentH - top
    `shape` is the CONTENT extent, the thing groups B and C cross against column count.

    bottom =  50   left =  14 top =  14 right =  14   cols =  1 content =  100x 100 square   A1. 1 col x 1 row, poster 100x100 (M1 repro: expect bottom 50)
    bottom =  50   left =  14 top =  14 right =  14   cols =  3 content =  300x 100 wide    A2. 3 cols x 1 row, poster 100x100 (M4 repro: expect bottom 14)
    bottom =  50   left =  14 top =  14 right =  14   cols =  2 content =  200x 100 wide    A3. 2 cols x 1 row, poster 100x100
    bottom =  50   left =  14 top =  14 right =  14   cols =  4 content =  400x 100 wide    A4. 4 cols x 1 row, poster 100x100
    bottom =  50   left =  14 top =  14 right =  14   cols =  3 content =  300x 400 tall    B1. 3 cols x 4 rows, poster 100x100 (300w x 400h)
    bottom =  50   left =  14 top =  14 right =  14   cols =  3 content =  300x 400 tall    B2. 3 cols x 1 row, poster 100x400 (300w x 400h, one row)
    bottom =  50   left =  14 top =  14 right =  14   cols =  1 content =  400x 100 wide    C1. 1 col x 1 row, poster 400x100 (400w x 100h, wide)
    bottom =  50   left =  14 top =  14 right =  14   cols =  1 content =  100x 400 tall    C2. 1 col x 1 row, poster 100x400 (100w x 400h, tall)
    bottom =  50   left =  14 top =  14 right =  14   cols =  1 content =  200x 200 square   C3. 1 col x 1 row, poster 200x200 (square)
    bottom =  50   left =  14 top =  14 right =  14   cols =  1 content =  700x 100 wide    D1. 1 col x 1 row, poster 700x100 (very wide, one column)
    bottom =  50   left =  14 top =  14 right =  14   cols =  1 content =  100x 700 tall    D2. 1 col x 1 row, poster 100x700 (very tall, one column)
    bottom =  50   left =  14 top =  14 right =  14   cols =  3 content =  90x 100 tall    D3. 3 cols x 1 row, poster 30x100 (90w, narrow, 3 columns)
    bottom =  93   left =  14 top =  14 right =  14   cols =  3 content =  300x 100 wide    E1. 3 cols x 1 row, caption1NumLines=1
    bottom =  93   left =  14 top =  14 right =  14   cols =  1 content =  100x 100 square   E2. 1 col x 1 row, caption1NumLines=1
    bottom =  50   left =  14 top =  14 right =  14   cols =  3 content =  300x 100 wide    F1. 3 cols x 1 row, itemSize=[100,100] explicit
    bottom =  50   left =  14 top =  14 right =  14   cols =  1 content =  100x 100 square   F2. 1 col x 1 row, itemSize=[100,100] explicit
    bottom =  50   left =  14 top =  14 right =  14   cols =  3 content =  300x 100 wide    F3. 3 cols x 1 row, only 2 items (short last row)

--- how to read it ---
    A2 vs B1: same 3 columns, wide vs tall content. Differing bottoms => SHAPE governs.
    A2 vs A3/A4: if the bottom switches at a column count, it is COLUMN COUNT.
    C1 vs C2: one column throughout, wide vs tall. Differing bottoms => SHAPE, not columns.
    B1 vs B2: same 300x400 extent, 4 rows vs 1. Differing bottoms => ROW COUNT matters too.
    D3: 3 columns but only 90 wide. Follows A2 => columns; follows A1 => width/shape.
    E1 vs E2: if a caption zone changes which rule applies, the 36 is caption-related.
    If every case reports bottom = 50 except A2, re-run: A2 is then not reproducing.

=== Probe complete ===
------ Finished 'postergrid-outset-axis-probe' execution [EXIT_USER_NAV] ------

