How to prevent unwanted reading of variables

If you are requesting technical assistance with Twine, please specify:
Twine Version: Twine 2.3.14
Story Format: Harlowe 3.2.3

Hello, I have been struggling with this problem for a long time.
I’m still learning from this discussion and discovering new ways to write Macros.
I’ve used it before in a story where the player chooses one of the spells and then rolls a die to see if the spell succeeds.
The code looks like this:

(link-repead: "Spell A")[(set: $A to it – 1)]
(link-repead: "Spell B")[(set: $B to it – 1)]
(link-repead: "Spell C")[(set: $C to it – 1)]
Roll of the dice:
(link-repeat: "Cube")[
(random: 1, 6)]
Number 1, 2, 3, sends you to passage 14.
Number 4, 5, 6 sends you to passage 25.

And here is the problem. The player does not have to play by the rules and chooses the passage he wants.
So I started using this code:

(link-goto: "Charm A", (either: "14", "14", "14", "25", "25", "25", ))[(set: $A to it - 1) ]
(link-goto: "Spell B", (either: "14", "14", "14", "25", "25", "25", ))[(set: $B to it - 1) ]
(link-goto: "Spell C", (either: "14", "14", "14", "25", "25", "25", ))[(set: $C to it - 1) ]

But, against the first example, where the charm is subtracted only after clicking, in the second example, the variable charm is subtracted even without clicking.
Variables are read from each spell as soon as the passage opens.
Any idea how to simply write it so that the variables are read only when clicked?
I have one more question.
In the first example, you can also add sound to clicking on the charm.
Here is the code:

(link-repeat: “Charm A”)[
    (track: "sound", "play")
(set: $A to it – 1)]

In the second example, I can’t figure out how to write the dimension for the audio.
Thank you and I wish you all a nice day

[Code-formatting fixed by Mod]