1) Tem algumas coisas "desnecessárias" no css:
- input[type="text"],[type="nome"],[type="sobrenome"]: nenhum input tem o type "nome" ou "sobrenome". Vc pode colocar essa condição soh commo:
- input[type="text"]
2) Vc fez td como um código estático em HTML, no entanto, tem MTA coisa repetitiva lá. Qdo eh assim, EU prefiro (gosto pessoal), criar os elementos em JavaScript. O código original (com o "style" dentro do código) tem mais de 200 linhas, enquanto o código alterado tem menos de 80. Eu prefiro desta forma, mas eh uma questão de gosto pessoal.
Basicamente, tdos os inputs são criados em um objeto:
let inpputs = [
[
{id: 'nome', type: 'text', class: 'rotulo'},
{id: 'sobrenome', type: 'text', class: 'rotulo'},
],
[
{id: 'masculino', name: 'sexo', type: 'radio', value: 'Masculino'},
{id: 'feminino', name: 'sexo', type: 'radio', value: 'Feminino'},
],
[{id: 'email', type: 'text', class: 'rotulo'}],
[{id: 'telefone', type: 'text', class: 'rotulo'}],
[
{id: 'estado', tag: 'select' },
{id: 'codade', type: 'text', class: 'rotulo'}
]
];
E uma função cria os elementos no DOM com base nesse objeto. A manutenção é mais simples, e o código é bem mais compacto.
3) Quanto a dxar as linhas lado a lado, vc tem q colocar cada "linha" dentro de um div com {display: flex}, e cada coluna desta linha com {display: grid}. O script que eu mandei já faz isso:
- Cada linha de "inputs" eh uma lista de objetos
- Cada object desta lista de objetos é uma coluna da linha
4) Esta versão está BEEEEM crua. Não me preocupei com detalhes adicionais como alinhamento, distanciamento, etc. A idéia é só dar uma possível solução para o seu problema (soh a dica "3" seria suficiente pra resolver), mas se vc quiser se aprodundar mais, podemos marcar uma aula.
Um arquivo funcionando está em: https://1drv.ms/u/s!Ap0t_qN6guxq1eZm-CT6abw1nm9MVw?e=dNJ5Wh