button states & hide/show