Raw HTML body (localization key or literal), split on newlines.
OptionalcontrolFor a value gate: the selector (scoped to the open sheet) of the control whose value feeds the gate. Defaults to TourStepBase.selector.
OptionaldriveDrive actions this step performs before it is shown, run in order and
each awaited (see sohl.entity.tour.runDrive). Only a railroaded/driven tour uses
these; a coach-and-wait step never does. Executed by SohlTour before its
nav navigation, so navigation can target documents a drive created.
OptionalgateThe gate whose predicate must pass before Next is enabled. Required for a value- or state-gated step; absent for a free step.
Machine-friendly id, unique within the tour.
OptionalkindOptionalnavScene-setting navigation performed before the step.
OptionalreadFor a state gate: reads the current document/DOM state the gate's
predicate inspects. Receives the running tour so it can reach the open
sheet, the navigated document, etc. Its return value becomes
ctx.state.
OptionalresolveDynamic navigation target: resolves the document whose sheet to open,
overriding the step's nav.uuid when a fixed UUID isn't known ahead of
time (e.g. "the actor the user is currently building"). The tab still comes
from SohlTourStepConfig.nav.
OptionalrestrictedWhether the step is GM-only.
OptionalselectorCSS selector of the element to highlight; centered if omitted.
OptionalspotlightCSS selector of an element to spotlight (ring with the fade "hole") while the step's card stays centered and stable — unlike selector, which anchors the card to the target via Foundry's shared tooltip. Use this to point at an element that itself has hover-tooltips or re-renders (a sidebar tab, a directory button): the card can't be hijacked or lost because it isn't tooltip-anchored, yet the target is still clearly indicated. Ignored when selector is set.
Tooltip header (localization key or literal).
OptionaltooltipPreferred tooltip direction relative to the target.
A SoHL tour step: the pure SohlTourStepConfig plus the one Foundry-coupled hook the pure layer can't carry — a
readStatereader that inspects the live document/DOM to build the TourGateContext for a state gate. Keeping this reader out of the pure config is what lets the gate decision stay Foundry-free and unit-tested.