--- /* The wireframe landing page every option screen previews its answer on. One copy so a change to the page's anatomy lands on every screen at once. mode: 'bars' fills the hero with bar stacks, which is what a screen judging color, layout, or depth needs. 'type' swaps them for real text elements and adds the data-type-* hooks the font screen writes specimen copy into; that screen is judging glyphs, so bars would tell it nothing. Every body is drawn both ways for the same reason. The slots stay one tree and one set of class names; what changes is whether a slot holds a data-type-* hook or the bars that stand in for the words. Only the font screen's boards are filled, so a hook on any other board would promise copy that never arrives, and a paragraph is a stack of bars rather than one because the block a structural answer acts on is the shape of the passage, not a single line. phone: false drops the handset and leaves the desktop artboard alone in the frame, for a screen whose answer only reads at desktop width. */ interface Props { mode?: 'bars' | 'type'; /* Which surface the board draws. The chrome and the frame are shared and only the two bodies change, the same arrangement the four wireframes on the surface question already use, so a change to the nav lands on all of them at once. Named boards are the ones the font screen switches between. */ surface?: 'persuade' | 'operate' | 'read' | 'experience'; phone?: boolean; class?: string; strategyHook?: boolean; typeHook?: boolean; cursor?: boolean; /* Marks an artboard as one that accumulates the structural answers. The committed layout, boundary, corner, and depth selectors key on it, which is how each screen shows the page as decided so far without those answers reaching back to the screens that came before them. */ carry?: boolean; /* The layout screen's boards carry parts no other board draws: the shared alignment-grid component on every desktop and handset body, and on the index a pagination rail for the handset plus the project rail and support row that only the freeform answer places (layout-portfolio.css parks them until it does). The index projects also take the data-project-index and data-project-tone hooks that screen's sheet keys plate placement and image treatment on. Mounted only where asked, because the motion screen reads the same index body through :nth-of-type and an extra sibling would shift its scenes. */ portfolioExtras?: boolean; motionCell?: string; } const { mode = 'bars', surface, phone = true, class: className = '', strategyHook = false, typeHook = false, cursor = false, carry = false, portfolioExtras = false, motionCell, } = Astro.props; const type = mode === 'type'; const ops = surface === 'operate'; const docs = surface === 'read'; const index = surface === 'experience'; const classes = ['picker-artboard', className].filter(Boolean).join(' '); // Empty string renders the bare attribute the font screen's selectors expect; // undefined drops it entirely on the other screens. const hook = type ? '' : undefined; ---