Solution 2: Otherwise you could try to use CSS modules (Vite supports them out-of-the-box I think).
Solution 3: Otherwise you could try one of the many "CSS-in-JS" libraries like styled-components.
Personally I'm using the solution 1, did for more than a decade, works fine, scales well, nothing to install and learn, just old straightforward CSS.
Separation of concerns with what are essentially totally different markup languages is best when you can. We tolerate it with JSX because there isn't a fantastic first-class declarative way to express an object, a list of objects, or filtering in HTML. (I have seen WebComponents and the MDN tutorial seemed like taking a step back.)
I use TailwindCSS [1] for all my styling needs and couldn't be happier.
If you really want scoped CSS in React this approach [2] can also work, and it makes it easy to use tailwind if you want.
[2] https://miyauchi.dev/posts/lib-vite-tailwindcss/#css-modules