Ho provato a caricare quel codice in una pagina e l'ho testata nel browser (FF3.01 sotto linux).

Ho notato vari errori di semantica, che potrebbero diventare importanti qualora la cosa dovesse funzionare in brwoser diversi da quelli in cui testi.
Ed ho notato attributi di formattazione HTML, che possono impedire il normale funzionamento del CSS (ma dipende da come i brwoser interpretano i conflitti tra formattazioni diverse).

Comunque sostituendo il display con visibility, il menu non funziona piu`.

Quello che puoi provare e` sostituire gli attributi display con il colore trasparente (sia del font che dello sfondo).