Styling components without using css

When I evaluated various Java web application frameworks, I had 3 basic requirements:
1 - no need to write html pages
2 - no need to write Javascript code
3 - no need to mess around with css

I have chosen Vaadin, because it promised to fulfil all 3 requirements.
After having built my first non-trivial Vaadin application, I can look back at my original assessment and re-evaluate it.
My assessment now is that Vaadin delivers what it promises on requirement 1 and 2: I’ve built a fully functional Vaadin web application that fulfils the sw requirements I had, without having write a single line of HTML or Javascript, and that’s great.
However, I have soon realised that, in order to develop a non-trivial application, i.e. an application that satisfies specific look-and-feel requirements, rather than simply inheriting the default theme, I had to start messing around with css.
And I use the term “messing around” because I find that introducing customizations to the Valo theme is a bit of a mess, in that it requires an in-depth knowledge of css and scss and that’s not what I expected.
After spending a lot of time, I have managed to introduce some customizations (e.g. default font size, background colour of a text field), but I was unable to introduce some other customizations that in my opinion should have been easy to do. For example, the Valo theme comes with a default font size for column headers in a grid that is smaller than the font size of the contents of the cells in the grid. I wanted to increase the font size of the column headers and make it bold, but I couldn’t find a way to do it using css.
I think it would be very useful to add the possibility of styling the components by calling dedicated methods of the components.
At least for simple customizations, e.g. the font size, style and colour, the background and foreground colour of components, like we do with Swing components.
Probably these customizations are simple for someone who knows css well, but since I have chosen Vaadin to avoid working with css, this feature is a turn-off for me.

One problem with providing a Java API for styling (beyond adding classnames, for example theme constants like ValoTheme.XYZ) is that this will split the styling into two different places - the theme and the code. Achieving a consistent, manageable look and feel won’t happen if you need to change code every time the designer decides things should look different.

That being said, if you feel that e.g. Valo doesn’t provide a good customization interface for some feature, you should
file a bug ticket.

-Olli