data-grafloria-instance on its root and writes ONLY its own scoped variable block
([data-grafloria-instance="grafloria-3"] { --grafloria-node-fill: … }). So the light one and
the dark one never clobber each other — the classic bug was a global rule keyed by theme name,
where the last inject won for both.