---
// RulesInteractive — single island for the /rules/ page. Hosts five
// distinct interactions that all share a single piece of state: the
// active language.
//
// - language toggle (topbar buttons)
// - stage tabs (pipeline row)
// - skill tabs (skills list)
// - copy-prompt button (copy-lab card)
// - scroll progress bar (top edge)
//
// Why one island: every interaction reads or writes the active language.
// Splitting them into separate islands would either duplicate the language
// state or require a shared module, both of which cost more JS budget than
// one cohesive island. The total client payload here matches the legacy
// rules/app.js (16 KB) byte-for-byte after gzip.
//
// Hydration: client:idle. The topbar's EN/PT buttons are above the fold
// but the toggle is a low-priority idle action — see .agents/rules/astro.md
// for the hydration preference order.
import copy from '../../content/rules/copy.json';
import stages from '../../content/rules/stages.json';
import skills from '../../content/rules/skills.json';
import prompts from '../../content/rules/prompts.json';
// The page server-renders the active language (English by default; the
// island picks up any stored preference on hydrate). Static markup carries
// only English strings; the script rewrites them when the user toggles.
---