Read the annotations sidecar next to an HTML-dialect source: for
foo.html, foo.annotations.json holding {"annotations": [...]} (same
annotation object format as JSON scenarios’ annotations field; the studio
writes it because HTML sources can’t carry the array inline). A missing
sidecar is fine (empty); a present-but-invalid one is an error — never
silently ignored.
Load a scenario authored in the HTML/CSS dialect: transpile to the scenario
JSON value, merge the annotations sidecar (if any), deserialize into
Scenario, then resolve includes — reusing the exact same pipeline as the
JSON loader.
Like load_scenario but injects runtime variable overrides before substitution.
Delegates to variables::apply_variables which handles both declared (config-based)
and undeclared (HTML/no-config) overrides.
Set/replace a plain attribute on an HTML-dialect element by JSON pointer
(studio inspector, component root fields). An empty value removes the
attribute. Attributes are strings; transpile coercion re-types them.