<!doctype html>
<html>
<head>
<style>
    /* Specificity (2, 0, 2). */
    #f#f > padding > target {
        background-color: purple;
    }

    /* Specificity (1, 0, 2). */
    #f > padding > target {
        background-color: red;
        color: green;
    }

    /* Specificity (0, 0, 5) */
    padding padding foo padding target {
        color: green;
    }

    /* Specificity (0, 0, 4) */
    padding padding padding target {
        border: 5px blue solid;
    }

    :matches(aBlock, #b) > :matches(#c, d) > :matches(e, #f) target {
        background-color: green;
        color: white;
        border: none;
    }
</style>
</head>
<body>
    <p>This test the dynamic specificity of :matches() with a simple descendant backtracking case. The test pass if each block has style matching its description. None of the result should have a border.</p>

    <!--
     This case should match ":matches(a, #b) > :matches(#c, d) > matches(e, #f) target"
     like "#a > #c > e target"
     with the specificity (2, 0, 2).
     -->
    <foo id="b">
        <foo id="c">
            <e> <!-- Success case from here. -->
                <padding>
                    <b> <!-- Fail here as we need <aBlock> or #b -->
                        <d>
                            <e>
                                <padding>
                                    <aBlock>
                                        <c> <!-- Fail here as we need <d> or #c -->
                                            <foo id="f">
                                                <padding>
                                                    <target>White text on green background.</target>
                                                </padding>
                                            </foo>
                                        </c>
                                    </aBlock>
                                </padding>
                            </e>
                        </d>
                    </b>
                <padding>
            </e>
        </foo>
    </foo>

    <!--
     This case should match ":matches(a, #b) > :matches(#c, d) > matches(e, #f) target"
     like "#a > d > e target"
     with the specificity (1, 0, 3).
     -->
    <foo id="b">
        <d>
            <e> <!-- Success case from here. -->
                <padding>
                    <b> <!-- Fail here as we need <aBlock> or #b -->
                        <d>
                            <e>
                                <padding>
                                    <aBlock>
                                        <c> <!-- Fail here as we need <d> or #c -->
                                            <foo id="f">
                                                <padding>
                                                    <target>White text on purple background.</target>
                                                </padding>
                                            </foo>
                                        </c>
                                    </aBlock>
                                </padding>
                            </e>
                        </d>
                    </b>
                <padding>
            </e>
        </d>
    </foo>

    <!--
     This case should match ":matches(a, #b) > :matches(#c, d) > matches(e, #f) target"
     like "a > d > e target"
     with the specificity (0, 0, 4).
     -->
    <aBlock>
        <d>
            <e> <!-- Success case from here. -->
                <padding>
                    <b> <!-- Fail here as we need <aBlock> or #b -->
                        <d>
                            <e>
                                <padding>
                                    <a>
                                        <c> <!-- Fail here as we need <d> or #c -->
                                            <foo id="f">
                                                <padding>
                                                    <target>Green text on purple background.</target>
                                                </padding>
                                            </foo>
                                        </c>
                                    </a>
                                </padding>
                            </e>
                        </d>
                    </b>
                <padding>
            </e>
        </d>
    </aBlock>
</body>
</html>
