GraphicsStack
Mutable stack façade. Holds the current state plus a save stack for q/Q.
Callers update via the typed mutators (replaceCtm, setFillColor, etc.) or read the current state directly. The stack is bounded by maxDepth to defend against pathological PDFs that q-spam without Q.