Grüße,
float führt dazu, dass der box aus dem fluß fällt und margin auf ihn nicht angewendet wird. du musst den ersten div um einen elemt ergänzen, der den float cleart, dodass die erste div sich mitvergößert und der marginabstand gehalten wird.
der wird eigentlich auch so eingehalten - bloß dass er zwischen den sub_cat gilt, ist die innere box größer, schaut die "über den rand".
MFG
bleicher