Safely accesses a step by index, returning null if out of bounds.
Step? operator [](int index) { if (index < 0 || index >= steps.length) { return null; } return steps[index]; }