Thank you for your reply!
For some reason, clipping (masking) works perfectly with simple Sprite2D nodes but doesn’t seem to work with parallax layers.
However, I found a solution: a custom Parallax node available here: Parallax 2D node - Godot Asset Library
This node adjusts the position of a sprite based on the viewport’s position, allowing clipping to work seamlessly.
Here’s what I achieved using this approach:
If you know better solution, please let me know.