Hopping in too (Hello!)
There is a fun thing about buttons which is often overlooked -- All buttons can store a value, not just checkboxes.
So you don't need a second button to be a checkbox at all.
We often talk about checkboxes because the mark is visible and easier to understand but if you don't want to have a separate hidden checkbox you can change your button back to what it was originally and use this script in it:
on click do me.value:1 end
When you use "me" like this in a script it refers to the widget the script is attached to... so the button (of any style you like and any name) will set it's own value to "1" when this script is inside of it and the button is clicked.
One more small correction, in the beginning of your progress checking script:
on click do if puzzleroom.widgets.button1.value & puzzleroom2.widgets.button2.value
Putting .widgets. between the card name and the widget name is an important part of telling Decker where to find your widget.
Of course, use the correct names for your particular buttons and cards at this moment!
A side note about setting the value in a hidden or non-checkbox button:
Doing it this way has a side effect of being a little harder to uncheck the buttons when you want to reset the game while testing it.... but you could set these two particular buttons as 'Volatile' if you wanted to.
That makes it so you can clear their .value anytime using [ File > Purge Volatiles ] in the menu.
This would also remove their .value when the project is saved.
Volatile is dangerous to use on anything precious and irreplaceable -- but it's fine for temporary things like progress checkmarks.
If you feel comfortable using it you can select the widget you're using to store this progress .value and use [Widgets > Volatile] to make it Volatile.
(Again, this is not for anything precious like your art assets! Disposable .values only here!)
This whole project sounds lovely :D We're all rooting for you.