Lantern architecture
Two entries:
@jolly-pixel/lantern:Tour,TargetPath,TourRun,LanternSeen,Lantern. No Lit.@jolly-pixel/lantern/element: the Litjolly-lanternoverlay.
The element imports the root, never the reverse, so tour declarations and the step machine run under node --test.
tour/:TourparsesTourStepOptionsinto frozenTourSteps with azod/minischema, whose issue path becomesTourDefinitionError.field;parseBodysplits body text. InTourRun, one promise chain ordersenter, cleanups and calls made whileenteris pending.TargetSeekholds one step's search for its target: the one-second wait, the single warning, the late find.LanternSeen: the version per tour id, through aStorageAdapter.element/:TargetTrackercallsrun.seekeach animation frame and measures what it finds, through a pane'schromeElement.spotlight/SpotlightPlacementturns that frame into the hole and the card position and paints the scrim, ring and card; the element repaints only when the new placement differs from the last one.StepInputholds the keys and theinputLayerslayer of a passive step.- The hole is a
clip-pathwith theevenoddrule becauseclip-pathalso clips hit testing. Passive steps add a transparent shield over the hole.