N’arrêtez jamais d’apprendre !
On écrit « bonjour » en un seul mot car il s’agit d’une fusion historique, alors que « bonne nuit » est resté composé.
Autrefois, on disait « bon jour » pour souhaiter une bonne journée, tout comme « bonne nuit » pour la nuit. Mais avec le temps, « bonjour » s’est tellement utilisé qu’il est devenu un mot unique, comme « salut » ou « coucou ».
En revanche, « bonne nuit » n’a jamais subi ce même rapprochement : on continue de le traiter comme une expression composée (adjectif + nom). C’est donc l’usage qui a fait la différence, et non une règle fixe de grammaire.
Il existe d’autres exemples de fusion : on écrivait autrefois « aujourd’hui » en trois mots (« au jour d’hui ») !