I know CSS and HTML
If you want to make some CSS changes that's fine. If you want to restructure your site, then you will need to know PHP as well.
How is this framework organized?
That is a very generic question. Please, be more precise, otherwise, it would be hard to find the motivation and time to answer it.
What is outputting what?
That's a funny question. Themes and layers output HTML, CSS and JS, as you can check in the docs: http://docs.question2answer.org
How are CSS classes for php/html elements determined in themes - SnowFlat theme?
I'm not sure what you mean by "determined" but the classes are usually dynamically built, starting from the base theme, overridden, if necessary (but not advisable) by the themes, and then by the plugin layers. This also applies to the PHP methods in them.
Cannot seem to find what is outputting the a tags
I just did a text search in my IDE of <h1. That yielded around 10 results and one was the base theme and the other filenames were considerably irrelevant. Probably, you're not using the right tool to work.
when I change the h1 title color and background color of a single question page, I am also affecting h1 elements of other pages [...] because they are all using the same class
The first C of CSS stands for Cascade. That means you can have 2 classes, tags, etc., with the same name inside different DOM hierarchies. If you style the <h1> tag you are styling everything. If you style the selector body.qa-template-question h1 you would be styling only for the question display. You can perform more advanced styling using PHP as explained here: http://docs.question2answer.org/themes
Conclusions and advice:
- If you want to change CSS you just need to know CSS
- If you want to restructure the HTML, you will most likely need to know PHP as well. The more PHP you know the more complex customizations you will be able to do
- You should read the documentation. It is not much but it helps
- You should read and understand the base theme code, a theme code and some layers code
- A lot of trial and error is a must
- The more radical the change in the HTML structure, the more chances you will have to break a plugin