[data-foo=test],[data-foo=Test],[data-foo=tEst],[data-foo=TEst],[data-foo=teSt],[data-foo=TeSt],[data-foo=tESt],[data-foo=TESt],[data-foo=tesT],[data-foo=TesT],[data-foo=tEsT],[data-foo=TEsT],[data-foo=teST],[data-foo=TeST],[data-foo=tEST],[data-foo=TEST] {
	order: 1;
}

[data-foo=test i] {
	order: 1;
}

[foo="a b"],[foo="A b"],[foo="a B"],[foo="A B"] {
	order: 2;
}

[foo="a b" i] {
	order: 2;
}

[foo=a]{
	order: 3;
}

[foobar=b],[foo=a],[foo=A],[bar=c],[bar=C]{
	order: 4;
}

[foo=a i],[foobar=b],[bar=c i]{
	order: 4;
}

[foo="a"],[foo="A"] {
	order: 5.0;
}

[foo="a" i] {
	order: 5.0;
}

[foo="b"],[foo="B"] {
	order: 5.1;
}

[foo="b" I] {
	order: 5.1;
}

[foo="c"],[foo="C"] {
	order: 5.2;
}

[foo="c"i] {
	order: 5.2;
}

[foo="d"],[foo="D"] {
	order: 5.3;
}

[foo="d"I] {
	order: 5.3;
}

[foo="e"],[foo="E"] {
	order: 5.4;
}

[foo="e" i ] {
	order: 5.4;
}

[foo="f"],[foo="F"] {
	order: 5.5;
}

[foo="f" I ] {
	order: 5.5;
}

[foo="g"],[foo="G"] {
	order: 5.6;
}

[foo="g" i
] {
	order: 5.6;
}

[foo="h"],[foo="H"] {
	order: 5.7;
}

[foo="h" I
] {
	order: 5.7;
}

[foo="a b"],[foo="A b"],[foo="a B"],[foo="A B"] {
	to-clone: 1;
}

[foo="a b" i] {
	to-clone: 1;
}

[foo="ab"]:not([foo="ab" i], :is(:is([foo="ab" i]))),[foo="Ab"]:not([foo="ab" i], :is(:is([foo="ab" i]))),[foo="aB"]:not([foo="ab" i], :is(:is([foo="ab" i]))),[foo="AB"]:not([foo="ab" i], :is(:is([foo="ab" i]))) {
	/* Case insenstive attribute matching is quite old, it's fine that we don't support this in pseudo class functions */
	/* However, we must ensure that we don't have infinite loops when authors write selectors like this one */
	order: 6;
}

[foo="ab" i]:not([foo="ab" i], :is(:is([foo="ab" i]))) {
	/* Case insenstive attribute matching is quite old, it's fine that we don't support this in pseudo class functions */
	/* However, we must ensure that we don't have infinite loops when authors write selectors like this one */
	order: 6;
}
