Ordenar por especificidad CSS

Mi objetivo principal es tratar de reordenar un bloque de estilo CSS basado en la especificidad. Previamente había ayudado desdeASI QUE Y me las arreglé para producir esta función.Ver gist.

Aquí hay un ejemplo:

function specificity($selector){
// https://gist.github.com/2774085
}

$compare = function($a, $b) use ($specificity) {
    return $specificity($a) - $specificity($b)
};

$array = css_array();

uksort($array, $compare);

Lo anterior ha estado funcionando muy bien hasta que encontré este CSS:

html, body, body div{
    background: transparent;
}
body {
    background-color: #D96F02;
}

Esto se reordena en esto:

body { // 1 point
    background-color: #D96F02;
}
html, body, body div{ // 4 points
    background: transparent;
}

Sin embargo, no es así como el navegador aplica el CSS.

¿Creo que a mi función de especificidad le puede faltar la importancia del orden de CSS en lugar del orden basado en la especificidad del selector? ¿Es esto cierto?

Actualizar

Creo que lo que debo hacer es en mi función de comparación, siempre debo agregar puntos de opinión adicionales10 porque la especificidad no solo se basa en selectores, también se basa en el orden del selector. Así que algo como esto:

 $compare = function($a, $b) use ($specificity) {
        return ($specificity($a) + 10) - $specificity($b)
    };

¿Cómo se ve y cómo puedo determinar la cantidad de puntos que debo dar en este caso?

Respuestas a la pregunta(1)

Su respuesta a la pregunta