Just in case you face a browser that doesn't support external stylesheets your script could decide whether to insert a link to a script that produces the stylesheet (as
suggested) or to write the stylesheet within style tags directly into the document to deliver .
You probably don't need to use CSS::Parser as you know the possible fields in your stylesheet template that can have values. So simply read from the template, let Text::Template fill in the vars for you (which you might get via DBI::CSV or DBI::* whatever is comfy for you)
So all together with CGI.pm for the forms you need only "a needle" to put those parts together