Quaternion rotation to face camera based on child normal?

So here is my dilemma. Please look at the following screen:

I want to be able to rotate the entire object (Puzzle) based on the selected face (Front). Front is a child object with a normal that points outwards. I have faces for all sides (6) that point outwards. Given the selected face’s world normal, I want to be able to create a Quaternion to rotate the entire puzzle so that the select face is facing the camera.

Just an update to this. I used the following code so far to get the plane to face the camera:

Puzzle.transform.rotation = Quaternion.FromToRotation(focus.transform.forward, -Camera.main.transform.forward) * Puzzle.transform.rotation;

Where the focus object consists of the child (Front). Below is what it looks like after applying the code.

Now I just need to figure out how to also rotate it so it is perpendicular to the cameras view frustum…

Depending on how your getting your faces and setting the focus normal… you might be able to do this: Each face is linked with a side face. This side face has to be pointing along the positive X direction. So top links to right, back to left, right with the back, etc
have another object setup like focus, but called sideFocus. And set its normal to the linked face’s normal. Then i think this code should do the trick.:

Puzzle.transform.rotation = Quaternion.FromToRotation(focus.transform.forward, -Camera.main.transform.forward) * Puzzle.transform.rotation;
Puzzle.transform.rotation = Quaternion.FromToRotation(sideFocus.transform.forward, Camera.main.transform.right) * Puzzle.transform.rotation;

To be clear when the program decides that the front face is the focus, it looks up in its table and sees that the right face should be the normal to set sideFocus too.