The solution you're reaching for is simpler than you think, and the frustration you hit with checkboxes is a textbook example of why conditional formatting needs a better mental model.
You've already done the hard work. Your three rules are clean, logical, and perfectly suited for blank cells. The problem isn't your formulas, it's that a checkbox cell is never blank. When a checkbox is inserted, Google Sheets stores a boolean value: `TRUE` for checked, `FALSE` for unchecked. `ISBLANK` returns `FALSE` either way, so your green rule (neither blank) fires for every row. That's not a bug; it's a mismatch between what you're testing and what the cells actually contain.
The fix is direct: replace `ISBLANK` with a check for `FALSE`. For red (both unchecked), use `=AND(G4=FALSE, H4=FALSE)`. For yellow (one unchecked), `=OR(G4=FALSE, H4=FALSE)`. For green (both checked), `=AND(G4=TRUE, H4=TRUE)`. That's it. No nested logic, no workarounds. The error you got probably came from the equals signs inside the parentheses, remove those, and you're good.
What this really reveals is a deeper pattern. Conditional formatting is often treated as a visual afterthought, but it's actually a live logic engine. When you change the data type (blank text → boolean checkbox), the rules must adapt. The same principle applies when you transition from a static range to a table: your reference changes from `G4` to `[@G]` or a structured reference. The logic stays the same; the syntax just needs to match the container.
If you're building a tool for others, or for your future self, consider this: checkboxes make intent explicit. A blank cell is ambiguous (did they forget, or is it truly not applicable?). A checkbox forces a binary decision. That clarity is worth the extra formula adjustment. Your three-color system will still work, but now it will reflect actual choices, not just emptiness.
Go ahead and update those rules. Then test each scenario: both unchecked, one unchecked, both checked. You'll see red, yellow, and green fire correctly across the entire table. And next time you reach for a checkbox, you'll know exactly how to write the rule that reads it.