New button designs

Holding this open for review at the moment.
Some code duplication here... you could create another function that calls itself recursively if it's not an `object`.