The HTML is impressively valid! Kudos for that!
What kind of grid are you trying to use, if any?
CSS stands for Cascading Style Sheet. Cascading means that if two selectors are identical, the rules in the last selector supplement or override those in the earler selector.
All (both) of the HTML elements with the CSS class "half-width" will "float:left" because it overrides the one with "float:right"
You may need to explain why there are so many floats in your code. Floats are not as common today as they once were and are probably causing the border problem that you are experiencing.
There's much more to talk about that one would normally have learned in a basic HTML/CSS class, but I need to eat something now, so someone else may join this conversation before I return.
EDIT: Already joined by Ray.H. Thank you, sir.