CSS Lists and Counters Module Level 3

[LONGSTATUS] [DATE]

This version:
http://dev.w3.org/csswg/css3-lists/
Latest version:
http://www.w3.org/TR/css3-lists/
Previous version:
http://www.w3.org/TR/2002/WD-css3-lists-20021107/
Editor:
Tab Atkins Jr., Google Inc.
Previous Editors:
Ian Hickson, ian@hixie.ch
Tantek Çelı̇k, Microsoft Corporation, tantekc@microsoft.com
Contributors:
Simon Montagu, AOL-TW/Netscape, smontagu@netscape.com
Daniel Yacob, yacob@geez.org
Christopher Hoess, choess@stwing.upenn.edu
Daniel Glazman, AOL-TW/Netscape, glazman@netscape.com

Abstract

CSS is a language for describing the rendering of structured documents (such as HTML and XML) on screen, on paper, in speech, etc. This draft contains the features of CSS level 3 relating to list styling. It includes and extends the functionality of CSS level 2 [[!CSS21]], which builds on CSS level 1 [[CSS1]]. The main extensions compared to level 2 are a pseudo-element representing the list marker, a new ''hanging'' value for 'list-style-position', and a method for authors to define their own list-styles.

Status of this document

Table of contents


Introduction

The list model in this module differs in some important ways from the list model in CSS2, specifically in its handling of markers. Implementation experience suggested the CSS2 model overloaded the ::before and ::after pseudo-elements with too much behavior, while at the same time introducing new properties when existing properties were sufficient.

Most block-level elements in CSS generate one principal block box. In this module, we discuss two CSS mechanisms that cause an element to have an associated marker: one method associates one principal block box (for the element's content) with a separate marker box (for decoration such as a bullet, image, or number), and the other inserts a marker box into the principal box. Unlike :before and :after content, the marker box cannot affect the position of the principal box, whatever the positioning scheme.

For instance, the following example illustrates how markers may be used to add parentheses around each numbered list item. This HTML application and style sheet:

<!doctype html>
<html>
 <head>
  <title>Creating a list with markers</title>
  <style>
   li::marker { content: "(" counter(list-item, lower-roman) ")"; }
   li { display: list-item; }
  </style>
 </head>
 <body>
  <ol>
   <li>This is the first item.</li>
   <li>This is the second item.</li>
   <li>This is the third item.</li>
  </ol>
 </body>
</html>
		

should produce something like this:

  (i) This is the first item.
 (ii) This is the second item.
(iii) This is the third item.

With descendant selectors and child selectors, it's possible to specify different marker types depending on the depth of embedded lists.

A future release of this module will probably include ways to render tree lists.

Declaring a List Item

To declare a list item, the 'display' property should be set to ''list-item''. This, in addition to generating a ''::marker'' pseudo-element and enabling the properties described below for that element, causes that element to increment the list item counter ''list-item''. (This does not affect the specified or computed values of the counter properties.)

The ''list-item'' counter is a real counter, and can be directly affected using the 'counter-increment' and ''counter-reset'' properties. It can also be used in the ''counter()'' and ''counters()'' functions.

The CSS3 box module may define other 'display' values which generate a list marker. These should also affect the ''list-item'' counter.

Note that this new model makes the ''marker'' display type redundant. That display type is therefore obsolete in the CSS3 Lists model.

List Content: The 'list-style-type' property

Name: list-style-type
Value: <string> | <counter-style> | none
Initial: disc
Applies To: all elements with ''display: list-item''
Inherited: yes
Media: visual
Computed Value: specified value

This property specifies the default contents of the list item marker if 'list-style-image' has the value 'none' or if the image pointed to by the URI cannot be displayed. The value 'none' specifies no marker, and a string value uses the given string; otherwise, the value specifies a <counter-style> which is used to format the value of the ''list-item'' counter.

<string>
The ''::marker'' pseudoelement must use the provided string as its default contents.
none
The ''::marker'' pseudoelement must have no default contents. This will suppress the creation of a marker unless the ''::marker'' has its contents specified directly through the 'content' property.
<counter-style>

The ''::marker'' pseudoelement's default contents must be the value of the ''list-item'' counter, formatted according to the given counter style. Algorithms for formatting a value according to a counter style are given later in this spec.

The UA style sheet given later in this spec provides a large list of counter style definitions, and authors or users may define their own counter styles as well.

Predefined Counter Styles

While authors may define their own counter styles using the ''@counter-style'' rule defined in this spec, there are many counter styles that CSS already defined in previous levels, and many more that can be usefully predefined. Appendix A contains a required UA stylesheet which defines a large number of counter styles using the ''@counter-style'' rule. A few styles require special handling beyond what can be expressed in a stylesheet, though. Those counter styles are described in this section.

The ''decimal'' counter style

The ''decimal'' counter style is the default fallback counter style for the ''@counter-style'' rule, and is also used in extraordinary situations like fallback loop. As such, it has to be well-defined at all times, so that a counter can always be formatted regardless of the validity of the defined counter styles.

UAs must not allow the definition of the ''decimal'' counter style given in Appendix A to be overridden.

Glyphs

CSS 2.1 defined three single-glyph counter styles (''circle'', ''disc'', and ''square''), but didn't define precisely how to render them, instead opting to describe generally how they should look and leaving it up to the UA to decide how to render the markers.

Appendix A gives normative definitions for these styles, but UAs may instead default to rendering these styles using a browser-generated image matching the description below. If the styles are overridden, the new style must be honored; this relaxation of the rendering requirements applies only to the default value of each counter style.

If the UA chooses to use an image for the default rendering of these counter styles, the image must be scalable and designed to attractively fill a box 1em wide and 1em tall.

circle
A hollow circle, similar to ◦ U+25E6 WHITE BULLET.
disc
A filled circle, similar to • U+2022 BULLET.
square
A filled square, similar to ■ U+25A0 BLACK SQUARE.

Complex counter styles

Some real-life counter styles are unfortunately too complex to be accurately described using the ''@counter-style'' rule. The following styles must be supported as default counter styles as if they were defined by theoretical ''@counter-style'' rules placed at the end of the UA stylesheet defined in Appendix A, using the given name as the counter style name and the given algorithm to format counter values. They must be overrideable like any other predefined counter style.

The 'hebrew' counter style

This is a simple additive system defined for the range 1 to 999999. The digits are split into two groups of three. Within each group, appropriate digits are picked from the following list (at most one per column) and written in descending order by value (hundreds first). If there is more than one group, the first group is followed by U+05F3 HEBREW PUNCTUATION GERESH.

Hebrew numbering system
Hundreds Tens Units
Values Codepoints Values Codepoints Values Codepoints
100 ק U+05E7 10 י U+05D9 1 א U+05D0
200 ר U+05E8 20 כ U+05DB 2 ב U+05D1
300 ש U+05E9 30 ל U+05DC 3 ג U+05D2
400 ת U+05EA 40 מ U+05DE 4 ד U+05D3
500 תק U+05EA U+05E7 50 נ U+05E0 5 ה U+05D4
600 תר U+05EA U+05E8 60 ס U+05E1 6 ו U+05D5
700 תש U+05EA U+05E9 70 ע U+05E2 7 ז U+05D6
800 תת U+05EA U+05EA 80 פ U+05E4 8 ח U+05D7
900 תתק U+05EA U+05EA U+05E7 90 צ U+05E6 9 ט U+05D8

If the last two digits of a group (when represented in decimal) are 15 or 16, they should be expressed not as יה U+05D9 U+05D4 (10+5) and יו U+05D9 U+05D5 (10+6), but as טו U+05D8 U+05D5 (9+6) and טז U+05D8 U+05D6 (9+7). This is done to avoid a close resemblance to the Tetragrammaton (four-letter name of God) יהוה U+05D9 U+05D4 U+05D5 U+05D4. Although this convention is originally derived from religious practice, it is universally used even in completely secular contexts.

The suffix for the hebrew numbering system is a dot (. U+002E FULL STOP).

Numbers outside the range of the Hebrew system are rendered using the ''decimal'' counter style.

This table shows the decimal number in the first cell, and the equivalent hebrew number in the second.

Decimal Hebrew
-3 -3
-2 -2
-1 -1
0 0
1 א
2 ב
3 ג
4 ד
5 ה
97 צז
98 צח
99 צט
100 ק
101 קא
944 תתקמד
945 תתקמה
946 תתקמו
999 תתקצט
1000 א׳
1001 א׳א
1998 א׳תתקצח
1999 א׳תתקצט
2000 ב׳
2001 ב׳א
2003 ב׳ג
2748 ב׳תשמח
2750 ב׳תשנ

This example (like all other examples) is non-normative. If one of the numbers above is inconsistent with the rules described above, then the example should be disregarded.

The 'ethiopic-numeric' counter style

The Ethiopian numbering system is defined for all positive non-zero numbers. The following algorithm converts decimal digits to ethiopic numbers.

  1. Split the number into groups of two digits, starting with the least significant decimal digit.
  2. Index each group sequentially, starting from the least significant as group number zero.
  3. If the group has an odd index (as given in the previous step) and has the value 1, or if the group is the most significant one and has the value 1, or if the group has the value zero, then remove the digit (but leave the group, so it still has a separator appended below).
  4. For each remaining digit, substitute the relevant ethiopic character from the list below.
    Ethiopic numbering system
    Tens Units
    Values Codepoints Values Codepoints
    10 U+1372 1 U+1369
    20 U+1373 2 U+136A
    30 U+1374 3 U+136B
    40 U+1375 4 U+136C
    50 U+1376 5 U+136D
    60 U+1377 6 U+136E
    70 U+1378 7 U+136F
    80 U+1379 8 U+1370
    90 U+137A 9 U+1371
  5. For each group with an odd index (as given in the second step) that did not have its digits removed in the third step, append ፻ U+137B.
  6. For each group with an even index (as given in the second step), except the group with number 0, append ፼ U+137C.
  7. Concatenate the groups into one string.

This system is defined for all numbers greater than zero. For zero and negative numbers, the decimal system is used instead.

The suffix for the ethiopic-numeric numbering systems is a dot (. U+002E FULL STOP). Is there a better suffix to use? The alphabetic ethiopic systems use a different suffix.

The decimal number 100, in ethiopic, is ፻ U+137B

The decimal number 78010092, in ethiopic, is ፸፰፻፩፼፻፺፪ U+1378 U+1370 U+137B U+1369 U+137C U+137B U+137A U+136A.

The decimal number 780000001092, in ethiopic, is ፸፰፻፩፼፻፼፻፺፪ U+1378 U+1370 U+137B U+1369 U+137C U+137B U+137C U+137B U+137A U+136A.

The Chinese "spoken-out" counter styles

The Chinese "spoken-out" counter styles define a style of numbering roughly similar to using "one, two, three..." in English. The "financial" variant is commonly used for writing out quantities of money, as it is somewhat difficult to modify one "financial" character into another. These styles are defined for all numbers between -1016 and 1016, exclusive. There are four Chinese counter styles which are constructed using the same algorithm, but different sets of characters (given below). The following algorithm converts decimal digits into Chinese numbers:

  1. If the counter value is 0, the representation is simply the character for 0 from the counter style's table, below. End this algorithm.
  2. If the counter value is negative, set the negative flag and run the rest of this algorithm with the absolute value of the counter value.
  3. Split the decimal number into groups of four digits, starting with the least significant digit.
  4. Ignoring groups that have the value 0, append the second group marker to the second group, the third group marker to the third group, and the fourth group marker to the fourth group. The first group has no marker.
  5. For each group, ignoring digits that have the value 0, append the second digit marker to the second digit, the third digit marker to the third digit, and the fourth digit marker to the fourth digit. The first digit has no marker.
  6. For each group, drop any trailing 0s. As well, drop any leading 0s for the largest group.
  7. Concatenate the groups back into a single string, least significant group first (on the right).
  8. Collapse any runs of consecutive 0s into a single 0. This can cross the previous group boundaries.
  9. Replace each digit with the relevant character from the counter style's table, below.
  10. If the negative flag is set, prepend 負 U+8D1F to the string.

The following tables define the characers used in the four Chinese counter styles:

simp-chinese-informal
Values Codepoints
Digit 0 零 U+96F6
Digit 1 一 U+4E00
Digit 2 二 U+4E8C
Digit 3 三 U+4E09
Digit 4 四 U+56DB
Digit 5 五 U+4E94
Digit 6 六 U+516D
Digit 7 七 U+4E03
Digit 8 八 U+516B
Digit 9 九 U+4E5D
Second Digit Marker 十 U+5341
Third Digit Marker 百 U+767E
Fourth Digit Marker 千 U+5343
Second Group Marker 万 U+4E07
Third Group Marker 亿 U+4EBF
Fourth Group Marker 万亿 U+4E07 U+4EBF
simp-chinese-financial
Values Codepoints
Digit 0 零 U+96F6
Digit 1 壹 U+58F9
Digit 2 贰 U+8D30
Digit 3 叁 U+53C1
Digit 4 肆 U+8086
Digit 5 伍 U+4F0D
Digit 6 陆 U+9646
Digit 7 柒 U+67D2
Digit 8 捌 U+634C
Digit 9 玖 U+7396
Second Digit Marker 拾 U+62FE
Third Digit Marker 佰 U+4F70
Fourth Digit Marker 仟 U+4EDF
Second Group Marker 万 U+4E07
Third Group Marker 亿 U+4EBF
Fourth Group Marker 万亿 U+4E07 U+4EBF
trad-chinese-informal
Fill this in.
trad-chinese-financial
Fill this in.

Note: Chinese, Japanese, and Korean spoken-out numbering (what this section defines) is actually defined up to 1072. Numbers higher than 1016 are usually written in scientific notation, however, and there is some variation in the group markers used for such numbers, so the algorithm has been intentionally defined only to 1016.

The Japanese "spoken-out" counter styles

The Japanese "spoken-out" counter styles are similar to the Chinese "spoken-out" counter styles, except that they use different characters, use a slightly different algorithm, and are not defined for negative numbers. The following algorithm converts decimal digits into Japanese numbers:

  1. If the original number is 0, the representation is simply the character for 0 from the counter style's table, below. End this algorithm.
  2. Split the decimal number into groups of four digits, starting with the least significant digit.
  3. Ignoring groups that have the value 0, append the second group marker to the second group, the third group marker to the third group, and the fourth group marker to the fourth group. The first group has no marker.
  4. For each group, ignoring digits that have the value 0, append the second digit marker to the second digit, the third digit marker to the third digit, and the fourth digit marker to the fourth digit. The first digit has no marker.
  5. If the second, third, or fourth digit of any group was a 1, remove the 1 (leave the digit marker). If any digit was a 0, remove it.
  6. Concatenate the groups back into a single string, least significant group first (on the right).
  7. Replace each digit with the relevant character from the counter style's table, below.

The following tables define the characters used in the two Japanese counter styles:

japanese-informal
Values Codepoints
Digit 0 零 U+96F6
Digit 1 一 U+4E00
Digit 2 二 U+4E8C
Digit 3 三 U+4E09
Digit 4 四 U+56DB
Digit 5 五 U+4E94
Digit 6 六 U+516D
Digit 7 七 U+4E03
Digit 8 八 U+516B
Digit 9 九 U+4E5D
Second Digit Marker 十 U+5341
Third Digit Marker 百 U+767E
Fourth Digit Marker 千 U+5343
Second Group Marker 万 U+4E07
Third Group Marker 億 U+5104
Fourth Group Marker 兆 U+5146
japanese-financial
Values Codepoints
Digit 0 零 U+96F6
Digit 1 壱 U+58F1
Digit 2 弐 U+5F10
Digit 3 参 U+53C2
Digit 4 四 U+56DB
Digit 5 伍 U+4f0D
Digit 6 六 U+516D
Digit 7 七 U+4E03
Digit 8 八 U+516B
Digit 9 九 U+4E5D
Second Digit Marker 拾 U+62FE
Third Digit Marker 百 U+767E
Fourth Digit Marker 阡 U+9621
Second Group Marker 萬 U+842C
Third Group Marker 億 U+5104
Fourth Group Marker 兆 U+5146

The Korean "spoken-out" counter styles

The Korean "spoken-out" counter styles are similar to the Chinese "spoken-out" counter styles, except that they use different characters, use a slightly different algorithm, and are not defined for negative numbers. The following algorithm converts decimal digits into Korean numbers:

  1. If the original number is 0, the representation is simply the character for 0 from the counter style's table, below. End this algorithm.
  2. Split the decimal number into groups of four digits, starting with the least significant digit.
  3. Ignoring groups that have the value 0, append the second group marker to the second group, the third group marker to the third group, and the fourth group marker to the fourth group. The first group has no marker.
  4. For each group, ignoring digits that have the value 0, append the second digit marker to the second digit, the third digit marker to the third digit, and the fourth digit marker to the fourth digit. The first digit has no marker.
  5. If the second, third, or fourth digit of any group is a 1, remove the 1 (leave the digit marker). If the first digit of the second group is a 1 and all other digits of the second group are 0, remove the 1 (leave the group marker). If any digit was a 0, remove it.
  6. Concatenate the groups back into a single string, least significant group first (on the right), with a space (" " U+0020) inserted between each group.
  7. Replace each digit with the relevant character from the counter style's table, below.

The following tables define the characters used in the Korean counter styles:

korean-hangul-financial
Values Codepoints
Digit 0 영 U+C601
Digit 1 일 U+C77C
Digit 2 이 U+C774
Digit 3 삼 U+C0BC
Digit 4 사 U+C0AC
Digit 5 오 U+C624
Digit 6 육 U+C721
Digit 7 칠 U+CE60
Digit 8 팔 U+D314
Digit 9 구 U+AD6C
Second Digit Marker 십 U+C2ED
Third Digit Marker 백 U+BC31
Fourth Digit Marker 천 U+CC9C
Second Group Marker 만 U+B9CC
Third Group Marker 억 U+C5B5
Fourth Group Marker 조 U+C870
korean-hanja-informal
Values Codepoints'
Digit 0 零 U+96F6
Digit 1 一 U+4E00
Digit 2 二 U+4E8C
Digit 3 三 U+4E09
Digit 4 四 U+56DB
Digit 5 五 U+4E94
Digit 6 六 U+516D
Digit 7 七 U+4E03
Digit 8 八 U+516B
Digit 9 九 U+4E5D
Second Digit Marker 十 U+5341
Third Digit Marker 百 U+767E
Fourth Digit Marker 千 U+5343
Second Group Marker 萬 U+842C
Third Group Marker 億 U+5104
Fourth Group Marker 兆 U+5146
korean-hanja-financial
Values Codepoints'
Digit 0 零 U+96F6
Digit 1 壹 U+58F9
Digit 2 貳 U+8CB3
Digit 3 參 U+53C3
Digit 4 四 U+56DB
Digit 5 五 U+4E94
Digit 6 六 U+516D
Digit 7 七 U+4E03
Digit 8 八 U+516B
Digit 9 九 U+4E5D
Second Digit Marker 拾 U+62FE
Third Digit Marker 百 U+767E
Fourth Digit Marker 仟 U+4EDF
Second Group Marker 萬 U+842C
Third Group Marker 億 U+5104
Fourth Group Marker 兆 U+5146

List Content: The 'list-style-image' property

Name: list-style-image
Value: <image> | none
Initial none
Applies To: all elements with ''display: list-item''
Inherited: yes
Media: visual
Computed Value: specified value

This property sets the image that will be used as the list item marker. When the <image> resolves to a valid image, it is used as the default contents of ''::marker'' instead of the value specified by 'list-style-type'.

If the value ''none'' is provided, or the <image> doesn't resolve to a valid image, then the default contents are given by 'list-style-type' instead.

The following example sets the marker at the beginning of each list item to be the image "ellipse.png".

LI { list-style-image: url("http://www.example.com/ellipse.png") }

List Content: Generating the computed value of the 'content' property

If a ''::marker'' pseudo-element has its 'content' property set to ''normal'', the following algorithm should be used to generate the computed value of the property.

  1. If the computed value of 'list-style-image' is not ''none'', and if the image is valid, then the computed value of the 'content' property is the value of the 'list-style-image' property.
  2. Otherwise, if the computed value of 'list-style-type' is a string, then the computed value of the 'content' property is that string.
  3. Otherwise, if the computed value of 'list-style-type' is not ''none'', then the computed value of the 'content' property is ''counter(list-item, <counter-style>)'', where <counter-style> is the computed value of the 'list-style-type' property, followed by a string that is the suffix for the counter style in question (which may be empty).
  4. Otherwise the computed value is ''none''.

Given the following style sheet:

li { display: list-item; list-style-type: decimal /* initial value */; }
li::marker { content: normal /* initial value */; }
		

And the following document fragment:

<li>List Item</li>
		

The computed value of the 'content' property on the ''::marker'' pseudo-element of the list item element is:

counter(list-item, decimal) "."

Marker Position: The 'list-style-position' property

Name: list-style-position
Value: inside | hanging | outside
Initial: outside
Applies To: all elements with ''display: list-item''
Inherited: yes
Media: visual
Computed Value: specified value

This property specifies the position of the ''::marker'' pseudo-element's box in the list item. Values have the following meanings:

inside
The ''::marker'' pseudo-element is an inline-block element placed immediately before the ''::before'' pseudo-element in the list item's principle box, after which the element's content flows. Note that if there is no inline content, this will create a line box, just as content in an inline ''::before'' pseudo-element would. Also note that all the properties that apply to inline elements apply to the ''::marker'' pseudo-element in this state, and this ''::marker'' box participates in the inline box model in the normal manner.

Inline markers have some special behavior wrt white-space collapsing at the beginning of the list-item. I need to figure this out and spec it. (Since I have hanging and outside markers be abspos, it doesn't apply to them.)

hanging
As ''inside'', except the marker is absolutely positioned. The marker's static position is such that its baseline is aligned with the baseline of the first line box in the list item, and its "end" edge is flush with the "start" edge of the first line box in the list item. Note that, per the Positioned Layout spec, absolutely positioned boxes leave behind a 'placeholder' in their original position in the box tree, which may have an effect on line-box generation.
outside
As ''inside'', except the marker is absolutely positioned and has the same directionality as the list item's parent box. The marker's static position is such that its "over" edge is flush with the edge of the list item corresponding with the "over" edge of the list item's parent box, and it's "end" edge is flush with the edge fo the list item corresponding to the "start" edge of the list item's parent box.

Are the positioning rules for ''hanging'' and ''outside'' good?

Note that a marker is only generated if the computed value of the 'content' property for the element's ''::marker'' pseudo-element is not ''none''.

For example:

<!doctype html>
<html>
 <head>
  <title>Comparison of inside/outside position</title>
  <style>
   ul         { list-style: outside; }
   ul.compact { list-style: inside; }
  </style>
 </head>
 <body>
  <ul>
   <li>first list item comes first</li>
   <li>second list item comes second</li>
  </ul>
  <ul class=compact>
   <li>first list item comes first</li>
   <li>second list item comes second</li>
  </ul>
 </body>
</html>
		

The above example may be formatted as:

list with bullets to the left of it and list with bullets inside

In right-to-left text, the markers would have been on the right side of the box.

The 'list-style' shorthand property

Name: list-style
Value: <'list-style-type'> || <'list-style-position'> || <'list-style-image'>
Initial: N/A (shorthand property)
Applies To: all elements with ''display: list-item''
Media: visual
Computed Value; N/A (shorthand property)

The 'list-style' property is a shorthand notation for setting the three properties 'list-style-type', 'list-style-image', and 'list-style-position' at the same place in the style sheet.

For example:

UL { list-style: upper-roman inside }  /* Any UL */
UL > UL { list-style: circle outside } /* Any UL child of a UL */
		

Using a value of ''none'' in the shorthand is potentially ambiguous, as ''none'' is a valid value for both 'list-style-image' and 'list-style-type'; to resolve this ambiguity, a value of ''none'' in the shorthand must be applied to whichever of the two properties aren't otherwise set by the shorthand.

list-style: none disc;
/* Sets the image to ''none'' and the type to ''disc''. */

list-style: none url(bullet.png);
/* Sets the image to ''url(bullet.png)'' and the type to ''none''. */

list-style: none;
/* Sets both image and type to ''none''. */

list-style: none disc url(bullet.png);
/* Syntax error */
	

Although authors may specify 'list-style' information directly on list item elements (e.g., LI in HTML), they should do so with care. The following rules look similar, but the first declares a descendant selector and the second a (more specific) child selector.

	OL.alpha LI   { list-style: lower-alpha } /* Any LI descendant of an OL */
	OL.alpha > LI { list-style: lower-alpha } /* Any LI child of an OL */
		

Authors who use only the descendant selector may not achieve the results they expect. Consider the following rules:

<!doctype html>
<html>
 <head>
  <title>WARNING: Unexpected results due to cascade</title>
  <style>
    ol.alpha li { list-style: lower-alpha; }
    ul li       { list-style: disc; }
  </style>
 </head>
 <body>
  <ol class=alpha>
   <li>level 1
    <ul>
     <li>level 2</li>
    </ul>
   </li>
  </ol>
 </body>
</html>
	

The desired rendering would have level 1 list items with 'lower-alpha' labels and level 2 items with 'disc' labels. However, the cascading order will cause the first style rule (which includes specific class information) to mask the second. The following rules solve the problem by employing a child selector instead:

OL.alpha > LI   { list-style: lower-alpha }
UL LI           { list-style: disc }

Another solution would be to specify 'list-style' information only on the list type elements:

OL.alpha   { list-style: lower-alpha }
UL         { list-style: disc }

Inheritance will transfer the 'list-style' values from OL and UL elements to LI elements. This is the recommended way to specify list style information.

Markers: The ''::marker'' pseudo-element

Markers are created by setting an element's 'display' property to ''list-item''. The ''list-item'' display type is, in every other respect, identical to the ''block'' display type. The marker box is only created if the computed value of the 'content' property for the pseudo-element is not ''none''.

Just like other generated content, markers generate a box when they're created, which has margins, border, padding, and everything else a box normally has. Markers are placed at the beginning of their superior parent's content, immediately before a ''::before'' pseudo-element on the same superior parent. Marker boxes are inline-block by default, and so a value of ''auto'' for 'width' resolves to the width of the marker's content. The value of 'list-style-position' on the marker's superior parent can vary the marker's directionality and the initial value of its ''position'' property.

In the following example, the content is centered within a marker box of a fixed width. This document:

<!doctype html>
<html>
 <head>
  <title>Content alignment in the marker box</title>
  <style>
   LI::marker { 
     content: "(" counter(counter) ")";
     width: 6em;
     text-align: center;
   }
   LI {
     display: list-item;
     counter-increment: counter;
   }
  </style>
 </head>
 <body>
  <ol>
   <li>This is the first item.</li>
   <li>This is the second item.</li>
   <li>This is the third item.</li>
  </ol>
 </body>
</html>
		

should render something like this:

  (1)    This is the 
         first item.
  (2)    This is the 
         second item.
  (3)    This is the 
         third item.
		

The next example uses markers to number notes (paragraphs).

The following document:

<!doctype html>
<html>
 <head>
  <title>Markers to create numbered notes</title>
  <style>
   P { margin-left: 12 em; }
   P.Note::marker { 
      content: url("note.gif") "Note " counter(note-counter) ":";
      text-align: left;
      width: 10em;
   }
   P.Note {
     display: list-item;
     counter-increment: note-counter;
   }
  </style>
 </head>
 <body>
  <p>This is the first paragraph in this document.</p>
  <p class="Note">This is a very short document.</p>
  <p>This is the end.</p>
 </body>
</html>
		

should render something like this:

            This is the first paragraph 
            in this document.

  Note 1:   This is a very short 
            document.
           
            This is the end.

The following example illustrates how markers may be offset from their element. This HTML application and style sheet:

<!doctype html>
<html>
 <head>
  <title>Marker example</title>
  <style>
   P { margin-left: 8em } /* Make space for counters */
   LI::marker { margin: 0 3em 0 0; content: counter(list-item, lower-roman) "."; }
   LI { display: list-item }
  </style>
 </head>
 <body>
  <p>This is a long preceding paragraph ...</p>
  <ol>
   <li>This is the first item.</li>
   <li>This is the second item.</li>
   <li>This is the third item.</li>
  </ol>
  <p>This is a long following paragraph ...</p>
 </body>
</html>
		

should render something like this:

        This is a long preceding
        paragraph ...
      
   i.   This is the first item.
  ii.   This is the second item.
 iii.   This is the third item.

        This is a long following
        paragraph ...

(Note the use of the implicit counter increment.)

Defining Custom Counter Styles: the ''@counter-style'' rule

CSS 2.1 defined a handful of useful counter styles based on the styles that HTML traditionally allowed on ordered and unordered lists. This tiny set, though, is quite inadequate for modern web pages; displaying an ordered list with markers based on the latin alphabet while the content is Arabic seems quite incongruous!

Unfortunately, the set of potentially useful list styles is too large to specify ahead-of-time - the world contains thousands of languages and hundreds of scripts, not to mention the near-infinite stylistic variations found on the web that go beyond mere languaged-based variation. The ''@counter-style'' rule allows CSS to address this in an open-ended manner, by allowing the author to define their own counter styles. These styles can then be used in the 'list-style-type' property or in the ''counter()'' and ''counters()'' functions, exactly like the predefined counter styles in CSS.

@counter-style Syntax

The ''@counter-style'' rule is defined as:

@counter-style <counter-style-name> {
	type:
	range:
	glyphs:
	additive-glyphs:
	cjk-glyphs:
	prefix:
	suffix:
	fallback:
}
	

Copy the way other specs define new @-rules that contain decl blocks, like @font-face.

The <counter-style-name> must be be a valid identifier, and must not be ''decimal'', ''inside'', ''outside'', or ''hanging''; violating these rules is a syntax error and must cause the @counter-style block to be ignored.

Omitting the 'type' property in a @counter-style block is a syntax error and must cause the @counter-style block to be ignored. A @counter-style block must contain exactly one of 'glyphs', 'additive-glyphs', or 'cjk-glyphs'; containing none of them or more than one of them is a syntax error and must cause the @counter-style block to be ignored. Further, which of those three is present must match the 'type' value: if the type is ''additive'', the 'additive-glyphs' property must be present; if the type is ''cjk'', the 'cjk-glyphs' property must be present; if the type is any other valid type, the 'glyphs' property must be present. Violating any of the conditions in the preceding sentence is a syntax error and must cause the @counter-style block to be ignored. Individual types may impose additional requirements on the value of the 'glyphs' property; if so, violating these requirements is a syntax error and must cause the @counter-style block to be ignored.

The meaning and values of each of the properties are defined in the following section.

The 'type' Property

The 'type' property specifies which algorithm will be used to construct the counter's representation based on the counter value. For example, ''repeating'' type counter styles just cycle through their glyphs repeatedly, while ''numeric'' type counter styles interpret their glyphs as digits and build their representation accordingly. It is defined as:

<counter-type> = repeating | numeric | alphabetic | symbolic | [ non-repeating <integer>? ] | cjk | additive
	
repeating

If the type is ''repeating'', the 'glyphs' property must contain at least one counter glyph. This type is defined over all counter values.

The ''repeating'' counter type cycles repeatedly through its provided glyphs, looping back to the beginning when it falls off the end of the list. It can be used for simple bullets (just provide a single counter glyph), or for cycling through multiple bullets. The first counter glyph is used as the representation of the value 1, the second counter glyph (if it exists) is used as the representation of the value 2, etc.

In general, if there are N counter glyphs and a representation is being constructed for the value I, the representation is the counter glyph at index I mod N of the list of counter glyphs (indexed from 0). The mod must return a non-negative number for these purposes. If an implementation of mod returns a negative value for negative inputs, add N to the resultant value to make it non-negative.

A 'triangle bullet' list style can be defined with code like:

@counter-style triangle {
	type: repeating;
	glyphs: "▶";
}
				

It will then produce lists that look like:

 ▶  First item
 ▶  Second item
 ▶  Third item
				
numeric

If the type is ''numeric'', the 'glyphs' property must contain at least two counter glyphs. This type is defined over all counter values.

The ''numeric'' counter type cycles interprets the list of counter glyphs as digits to a number system.

The first counter glyph in the list is interpreted as the digit 0, the second as the digit 1, and so on. If there are N counter glyphs, the representation is a base N number using the counter glyphs as digits.

To construct the representation, run the following algorithm. Let N be the length of the list of counter glyphs, I initially be the counter value, S initially be the empty string, negative be a boolean flag that is initially false, and glyph(n) be the nth counter glyph in the list of counter glyphs (0-indexed).

  1. If I is 0, append glyph(0) to S and return S.
  2. If I is negative, set negative to true and I to its absolute value.
  3. While I is not equal to 0:
    1. Prepend glyph( I mod N ) to S.
    2. Set I to floor( I / N ).
  4. If negative is true, prepend "-" U+XXXX HYPHEN MINUS to S.
  5. Return S.

Example here.

alphabetic

If the type is ''alphabetic'', the 'glyphs' property must contain at least two counter glyphs. This type is defined only over positive counter values.

The ''alphabetic'' counter type interprets the list of counter glyphs as digits to an alphabetic numbering system. Alphabetic numbering systems do not contain a digit representing 0. Alphabetic numbering systems are sometimes used, for example, to number spreadsheet cells

The first counter glyph in the list is interpreted as the digit 1, the second as the digit 2, and so on. If there are N counter glyphs, the representation is a base N alphabetic number using the counter glyphs as digits.

To construct the representation, run the following algorithm. Let N be the length of the list of counter glyphs, I initially be the counter value, S initially be the empty string, and glyph(n) be the nth counter glyph in the list of counter glyphs (0-indexed).

While I is not equal to 0:

  1. Set I to I - 1.
  2. Prepend glyph( I mod N ) to S.
  3. Set I to floor( I / N ).

Finally, return S.

Example here.

symbolic

If the type is ''symbolic'', the 'glyphs' property must contain at least one counter glyph. This type is defined over positive counter values.

The ''symbolic'' counter type is meant to simulate "footnote"-style counters and similar. It cycles through its list of glyphs repeatedly, first just presenting the glyph itself, then the glyph doubled, then tripled, etc.

To construct the representation, let N be the length of the list of counter glyphs,I initially be the counter value, S initially be the empty string, and glyph(n) be the nth counter glyph in the list of counter glyphs (0-indexed). Append glyph( I mod N ) to S floor( (I - 1) / N ) times, then return S.

Example here.

non-repeating

If the type is ''non-repeating'', the 'glyphs' property must contain at least one counter glyph. This type is defined over counter values in a finite range, starting with the first glyph value and having a length equal to the length of the list of counter glyphs.

When this type is specified, it may optionally have an integer provided after it, which sets the first glyph value. If it is omitted, the first glyph value is 1.

The ''non-repeating'' counter type is for representing counter styles that only have a finite number of representations. For example, Unicode defines several limited-length runs of special characters meant for lists, such as circled digits.

The first counter glyph is the representation for the first glyph value, and subsequent counter values are represented by subsequent counter glyphs. Once the list of counter glyphs is exhausted, further values cannot be represented by this type, and must drop down to the fallback counter style.

Example here.

additive

If the type is ''additive'', the 'additive-glyphs' property must contain at least one additive tuple. This type is nominally defined over all positive counter values (see algorith, below, for exact details)

The ''additive'' counter type can be used to implement roman numerals, and additionally is used to represent the numbering system of several languages which use different digits for each position in a number.

To construct the representation, let I initially be the counter value, S initially be the empty string, and glyph list initially be the list of additive tuples.

If I is initially 0, and there is an additive tuple with a weight of 0, append that tuple's counter glyph to S and return S.

Otherwise, while I is greater than 0 and there are elements left in the glyph list:

  1. Pop the first additive tuple from the glyph list. This is the current tuple.
  2. Append the current tuple's counter glyph to S floor( I / current tuple's weight ) times (this may be 0).

If the loop ended because I is 0, return S. If the loop ended because there were no elements left in the glyph list but I is not 0, then the counter style cannot represent this value, and must instead drop down to its fallback counter style.

Example here.

cjk

The ''cjk'' counter type is defined for all counter values between 1 and 10^XXX - 1. It is used to represent the counter styles commonly used in Chinese, Japanese, and Korean script lists.

Describe the algorithm here. Apparently, the spec algorithm is wrong for both japanese forms, and at least chinese-trad-informal. I'll have to figure out if it's even possible to handle this with a generic algorithm, or if I should just put them all in the special-case list.

The 'range' property

The 'range' property defines the range over which the counter style is defined. If a counter style is used to represent a counter value outside of its range, the counter style instead drops down to its fallback counter style. The property is defined as:

<counter-range> = [<integer> | infinite]{2}
	

The first value represents the lower bound of the range (with 'infinite' representing negative infinity), and the second value represents the upper bound of the range (with 'infinite' representing positive infinity). This is an inclusive range - it includes both the lower and upper bound numbers. It is a syntax error for the lower bound to be higher than the upper bound, and must cause the @counter-style block to be ignored.

Some counter style types have their own implicit ranges, specified above in the individual descriptions for each type. The range specified by the 'range' property is applied after the implicit type-based range, and can only tighten the range (that is, make the lower bound higher or the upper bound lower). It is not an error to specify a 'range' value larger than the implicit range; the part of the range outside the implicit range simply has no effect.

The 'glyphs' property

The 'glyphs' property specifies the counter glyphs used by several of the counter style types to construct their representations. It is defined as:

<counter-glyphs> = [ <string> | <image> ]+
	

Some counter style types specify that the 'glyphs' property must have at least two entries. If the counter style's type is set to such a type, it is a syntax error to have less than two entries in the 'glyphs' property and must cause the @counter-style block to be ignored.

Each entry in the 'glyphs' property is a counter glyph.

Add example of string glyphs.

Add example of image glyphs.

The 'prefix' property

The 'prefix' property specifies a string that is placed before the representation of the counter value when constructing the default contents of the ::marker pseudo-element. It is defined as:

<counter-prefix> = <string>
	

If the 'prefix' property is omitted or invalid, its initial value is "" (the empty string).

The 'suffix' property

The 'suffix' property specifies a string that is placed after the representation of the counter value when constructing the default contents of the ::marker pseudo-element. It is defined as:

<counter-suffix> = <string>
	

If the 'suffix' property is omitted or invalid, its initial value is "." U+002E FULL STOP.

The 'fallback' property

The 'fallback' property specifies a fallback counter style. When the given counter style cannot generate a representation for a counter value (for example, if the counter value is outside the range for the counter style), the representation is instead generated by the fallback counter style. It is defined as:

<counter-style-fallback> = <counter-style-name>
	

If the 'fallback' property is omitted, invalid, or refers to a non-existent counter style, its initial value is 'decimal' (which is guaranteed to be defined).

Profiles

This module has two profiles: CSS Level 1 and Full. There is no CSS2 profile because this module is incompatible with the CSS2 list model.

The CSS Level 1 module consists of 'list-style', 'list-style-position', 'list-style-image', and 'list-style-type' (but only the following values: 'disc', 'circle, square', 'decimal', 'lower-roman', 'upper-roman', 'lower-alpha', 'upper-alpha', 'none'). It does not include the ::marker pseudo element.

The Full profile contains everything.

Sample style sheet for HTML

This section is informative, nor normative. HTML itself defines the actual default properties that apply to HTML lists.

/* Set up list items */
li { 
	display: list-item; 
	/* counter-increment: list-item; (implied by display: list-item) */ 
}

/* Set up ol and ul so that they reset the list-item counter */
ol, ul { 
	counter-reset: list-item; 
}

/* Default list style types for ordered lists */
ol { 
	list-style-type: decimal; 
}

/* Default list style types for unordered lists up to 3 deep */
ul { list-style-type: disc; }
ul ul { list-style-type: square; }
ul ul ul { list-style-type: circle; }

/* The type attribute on ol and ul elements */
ul[type="disc"] { list-style-type: disc; }
ul[type="circle"] { list-style-type: circle; }
ul[type="square"] { list-style-type: square; }
ol[type="1"] { list-style-type: decimal; }
ol[type="a"] { list-style-type: lower-alpha; }
ol[type="A"] { list-style-type: upper-alpha; }
ol[type="i"] { list-style-type: lower-roman; }
ol[type="I"] { list-style-type: upper-roman; }

/* The start attribute on ol elements */
ol[start] { 
	counter-reset: list-item attr(start, integer, 1); 
	counter-increment: list-item -1; 
}

/* The value attribute on li elements */
li[value] { 
	counter-reset: list-item attr(value, integer, 1); 
	counter-increment: none; 
}

/* Box Model Rules */
ol, ul { 
	display: block; 
	margin: 1em 0; 
	padding-left: 40px; 
}
 
ol ol, ol ul, ul ul, ul ol { 
	margin-top: 0; 
	margin-bottom: 0; 
}

li {
	text-align: match-parent;
}
 
li::marker { 
	display: inline-block;
	margin-right: 1em;
	text-align: end;
	/* 'position' implied by list-style-position */
}
	

Appendix A: Required Predefined Counter Styles

While this specification defines a mechanism to allow authors to define almost any counter style they would want, forcing authors to redefine common styles every time they are used would be unnecessarily onerous. To aid in this regard, this specification predefines a large set of counter styles. User agents must include the following stylesheet as a user-agent stylesheet, so authors can depend on these styles being present.

As with any ''@counter-style'' rule, the counter style definitions given here can be overridden by the author if they desire to attach a different style to a counter style name defined in this stylesheet.


/* Glyph-based  */

@counter-style box {
	type: repeating;
	glyphs: '\u25A0';
	/* '■' */
	suffix: '';
}

@counter-style check {
	type: repeating;
	glyphs: '\u2713';
	/* '✓' */
	suffix: '';
}

@counter-style circle {
	type: repeating;
	glyphs: '\u25E6';
	/* '◦' */
	suffix: '';
}

@counter-style diamond {
	type: repeating;
	glyphs: '\u25C6';
	/* '◆' */
	suffix: '';
}

@counter-style disc {
	type: repeating;
	glyphs: '\u2022';
	/* '•' */
	suffix: '';
}

@counter-style dash {
	type: repeating;
	glyphs: '\u2014';
	/* '—' */
	suffix: '';
}

@counter-style square {
	type: repeating;
	glyphs: '\u25A0';
	/* '■' */
	suffix: '';
}

/* Numeric  */

@counter-style arabic-indic {
	type: numeric;
	glyphs: '\u660' '\u661' '\u662' '\u663' '\u664' '\u665' '\u666' '\u667' '\u668' '\u669';
	/* '٠' '١' '٢' '٣' '٤' '٥' '٦' '٧' '٨' '٩' */
}

@counter-style bengali {
	type: numeric;
	glyphs: '\u9E6' '\u9E7' '\u9E8' '\u9E9' '\u9EA' '\u9EB' '\u9EC' '\u9ED' '\u9EE' '\u9EF';
	/* '০' '১' '২' '৩' '৪' '৫' '৬' '৭' '৮' '৯' */
}

@counter-style binary {
	type: numeric;
	glyphs: '\u30' '\u31';
	/* '0' '1' */
}

@counter-style burmese {
	type: numeric;
	glyphs: '\u1040' '\u1041' '\u1042' '\u1043' '\u1044' '\u1045' '\u1046' '\u1047' '\u1048' '\u1049';
	/* '၀' '၁' '၂' '၃' '၄' '၅' '၆' '၇' '၈' '၉' */
}

@counter-style cambodian {
	type: numeric;
	glyphs: '\u17E0' '\u17E1' '\u17E2' '\u17E3' '\u17E4' '\u17E5' '\u17E6' '\u17E7' '\u17E8' '\u17E9';
	/* '០' '១' '២' '៣' '៤' '៥' '៦' '៧' '៨' '៩' */
}

@counter-style cjk-decimal {
	type: numeric;
	glyphs: '\u3007' '\u4E00' '\u4E8C' '\u4E09' '\u56DB' '\u4E94' '\u516D' '\u4E03' '\u516B' '\u4E5D';
	/* '〇' '一' '二' '三' '四' '五' '六' '七' '八' '九' */
}

@counter-style decimal {
	type: numeric;
	glyphs: '\u30' '\u31' '\u32' '\u33' '\u34' '\u35' '\u36' '\u37' '\u38' '\u39';
	/* '0' '1' '2' '3' '4' '5' '6' '7' '8' '9' */
}

@counter-style devanagari {
	type: numeric;
	glyphs: '\u966' '\u967' '\u968' '\u969' '\u96A' '\u96B' '\u96C' '\u96D' '\u96E' '\u96F';
	/* '०' '१' '२' '३' '४' '५' '६' '७' '८' '९' */
}

@counter-style eastern-nagari {
	type: numeric;
	glyphs: '\u9E6' '\u9E7' '\u9E8' '\u9E9' '\u9EA' '\u9EB' '\u9EC' '\u9ED' '\u9EE' '\u9EF';
	/* '০' '১' '২' '৩' '৪' '৫' '৬' '৭' '৮' '৯' */
}

@counter-style fullwidth-decimal {
	type: numeric;
	glyphs: '\uFF10' '\uFF11' '\uFF12' '\uFF13' '\uFF14' '\uFF15' '\uFF16' '\uFF17' '\uFF18' '\uFF19';
	/* '0' '1' '2' '3' '4' '5' '6' '7' '8' '9' */
}

@counter-style gujarati {
	type: numeric;
	glyphs: '\uAE6' '\uAE7' '\uAE8' '\uAE9' '\uAEA' '\uAEB' '\uAEC' '\uAED' '\uAEE' '\uAEF';
	/* '૦' '૧' '૨' '૩' '૪' '૫' '૬' '૭' '૮' '૯' */
}

@counter-style gurmukhi {
	type: numeric;
	glyphs: '\uA66' '\uA67' '\uA68' '\uA69' '\uA6A' '\uA6B' '\uA6C' '\uA6D' '\uA6E' '\uA6F';
	/* '੦' '੧' '੨' '੩' '੪' '੫' '੬' '੭' '੮' '੯' */
}

@counter-style kannada {
	type: numeric;
	glyphs: '\uCE6' '\uCE7' '\uCE8' '\uCE9' '\uCEA' '\uCEB' '\uCEC' '\uCED' '\uCEE' '\uCEF';
	/* '೦' '೧' '೨' '೩' '೪' '೫' '೬' '೭' '೮' '೯' */
}

@counter-style khmer {
	type: numeric;
	glyphs: '\u17E0' '\u17E1' '\u17E2' '\u17E3' '\u17E4' '\u17E5' '\u17E6' '\u17E7' '\u17E8' '\u17E9';
	/* '០' '១' '២' '៣' '៤' '៥' '៦' '៧' '៨' '៩' */
}

@counter-style lower-hexadecimal {
	type: numeric;
	glyphs: '\u30' '\u31' '\u32' '\u33' '\u34' '\u35' '\u36' '\u37' '\u38' '\u39' '\u61' '\u62' '\u63' '\u64' '\u65' '\u66';
	/* '0' '1' '2' '3' '4' '5' '6' '7' '8' '9' 'a' 'b' 'c' 'd' 'e' 'f' */
}

@counter-style lao {
	type: numeric;
	glyphs: '\uED0' '\uED1' '\uED2' '\uED3' '\uED4' '\uED5' '\uED6' '\uED7' '\uED8' '\uED9';
	/* '໐' '໑' '໒' '໓' '໔' '໕' '໖' '໗' '໘' '໙' */
}

@counter-style lepcha {
	type: numeric;
	glyphs: '\u1C40' '\u1C41' '\u1C42' '\u1C43' '\u1C44' '\u1C45' '\u1C46' '\u1C47' '\u1C48' '\u1C49';
	/* '᱀' '᱁' '᱂' '᱃' '᱄' '᱅' '᱆' '᱇' '᱈' '᱉' */
}

@counter-style malayalam {
	type: numeric;
	glyphs: '\uD66' '\uD67' '\uD68' '\uD69' '\uD6A' '\uD6B' '\uD6C' '\uD6D' '\uD6E' '\uD6F';
	/* '൦' '൧' '൨' '൩' '൪' '൫' '൬' '൭' '൮' '൯' */
}

@counter-style marathi {
	type: numeric;
	glyphs: '\u966' '\u967' '\u968' '\u969' '\u96A' '\u96B' '\u96C' '\u96D' '\u96E' '\u96F';
	/* '०' '१' '२' '३' '४' '५' '६' '७' '८' '९' */
}

@counter-style mongolian {
	type: numeric;
	glyphs: '\u1810' '\u1811' '\u1812' '\u1813' '\u1814' '\u1815' '\u1816' '\u1817' '\u1818' '\u1819';
	/* '᠐' '᠑' '᠒' '᠓' '᠔' '᠕' '᠖' '᠗' '᠘' '᠙' */
}

@counter-style myanmar {
	type: numeric;
	glyphs: '\u1040' '\u1041' '\u1042' '\u1043' '\u1044' '\u1045' '\u1046' '\u1047' '\u1048' '\u1049';
	/* '၀' '၁' '၂' '၃' '၄' '၅' '၆' '၇' '၈' '၉' */
}

@counter-style new-base-60 {
	type: numeric;
	glyphs: '\u30' '\u31' '\u32' '\u33' '\u34' '\u35' '\u36' '\u37' '\u38' '\u39' '\u41' '\u42' '\u43' '\u44' '\u45' '\u46' '\u47' '\u48' '\u4A' '\u4B' '\u4C' '\u4D' '\u4E' '\u50' '\u51' '\u52' '\u53' '\u54' '\u55' '\u56' '\u57' '\u58' '\u59' '\u5A' '\u5F' '\u61' '\u62' '\u63' '\u64' '\u65' '\u66' '\u67' '\u68' '\u69' '\u6A' '\u6B' '\u6D' '\u6E' '\u6F' '\u70' '\u71' '\u72' '\u73' '\u74' '\u75' '\u76' '\u77' '\u78' '\u79' '\u7A';
	/* '0' '1' '2' '3' '4' '5' '6' '7' '8' '9' 'A' 'B' 'C' 'D' 'E' 'F' 'G' 'H' 'J' 'K' 'L' 'M' 'N' 'P' 'Q' 'R' 'S' 'T' 'U' 'V' 'W' 'X' 'Y' 'Z' '_' 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 'u' 'v' 'w' 'x' 'y' 'z' */
}

@counter-style octal {
	type: numeric;
	glyphs: '\u30' '\u31' '\u32' '\u33' '\u34' '\u35' '\u36' '\u37';
	/* '0' '1' '2' '3' '4' '5' '6' '7' */
}

@counter-style oriya {
	type: numeric;
	glyphs: '\uB66' '\uB67' '\uB68' '\uB69' '\uB6A' '\uB6B' '\uB6C' '\uB6D' '\uB6E' '\uB6F';
	/* '୦' '୧' '୨' '୩' '୪' '୫' '୬' '୭' '୮' '୯' */
}

@counter-style persian {
	type: numeric;
	glyphs: '\u6F0' '\u6F1' '\u6F2' '\u6F3' '\u6F4' '\u6F5' '\u6F6' '\u6F7' '\u6F8' '\u6F9';
	/* '۰' '۱' '۲' '۳' '۴' '۵' '۶' '۷' '۸' '۹' */
}

@counter-style super-decimal {
	type: numeric;
	glyphs: '\u2070' '\uB9' '\uB2' '\uB3' '\u2074' '\u2075' '\u2076' '\u2077' '\u2078' '\u2079';
	/* '⁰' '¹' '²' '³' '⁴' '⁵' '⁶' '⁷' '⁸' '⁹' */
}

@counter-style tamil {
	type: numeric;
	glyphs: '\uBE6' '\uBE7' '\uBE8' '\uBE9' '\uBEA' '\uBEB' '\uBEC' '\uBED' '\uBEE' '\uBEF';
	/* '௦' '௧' '௨' '௩' '௪' '௫' '௬' '௭' '௮' '௯' */
}

@counter-style telugu {
	type: numeric;
	glyphs: '\uC66' '\uC67' '\uC68' '\uC69' '\uC6A' '\uC6B' '\uC6C' '\uC6D' '\uC6E' '\uC6F';
	/* '౦' '౧' '౨' '౩' '౪' '౫' '౬' '౭' '౮' '౯' */
}

@counter-style tibetan {
	type: numeric;
	glyphs: '\uF20' '\uF21' '\uF22' '\uF23' '\uF24' '\uF25' '\uF26' '\uF27' '\uF28' '\uF29';
	/* '༠' '༡' '༢' '༣' '༤' '༥' '༦' '༧' '༨' '༩' */
}

@counter-style thai {
	type: numeric;
	glyphs: '\uE50' '\uE51' '\uE52' '\uE53' '\uE54' '\uE55' '\uE56' '\uE57' '\uE58' '\uE59';
	/* '๐' '๑' '๒' '๓' '๔' '๕' '๖' '๗' '๘' '๙' */
}

@counter-style upper-hexadecimal {
	type: numeric;
	glyphs: '\u30' '\u31' '\u32' '\u33' '\u34' '\u35' '\u36' '\u37' '\u38' '\u39' '\u41' '\u42' '\u43' '\u44' '\u45' '\u46';
	/* '0' '1' '2' '3' '4' '5' '6' '7' '8' '9' 'A' 'B' 'C' 'D' 'E' 'F' */
}

/* Alphabetic  */

@counter-style afar {
	type: alphabetic;
	glyphs: '\u1200' '\u1208' '\u1210' '\u1218' '\u1228' '\u1230' '\u1260' '\u1270' '\u1290' '\u12A0' '\u12A8' '\u12C8' '\u12D0' '\u12E8' '\u12F0' '\u12F8' '\u1308' '\u1338' '\u1348';
	/* 'ሀ' 'ለ' 'ሐ' 'መ' 'ረ' 'ሰ' 'በ' 'ተ' 'ነ' 'አ' 'ከ' 'ወ' 'ዐ' 'የ' 'ደ' 'ዸ' 'ገ' 'ጸ' 'ፈ' */
	suffix: '/';
}

@counter-style agaw {
	type: alphabetic;
	glyphs: '\u1200' '\u1208' '\u1210' '\u1218' '\u1228' '\u1230' '\u1238' '\u1240' '\u1250' '\u1260' '\u1268' '\u1270' '\u1278' '\u1290' '\u1298' '\u1300' '\u1308' '\u1318' '\u1320' '\u1328' '\u1330' '\u1338' '\u1348' '\u1350';
	/* 'ሀ' 'ለ' 'ሐ' 'መ' 'ረ' 'ሰ' 'ሸ' 'ቀ' 'ቐ' 'በ' 'ቨ' 'ተ' 'ቸ' 'ነ' 'ኘ' 'ጀ' 'ገ' 'ጘ' 'ጠ' 'ጨ' 'ጰ' 'ጸ' 'ፈ' 'ፐ' */
	suffix: '/';
}

@counter-style ari {
	type: alphabetic;
	glyphs: '\u1200' '\u1208' '\u1218' '\u1228' '\u1230' '\u1238' '\u1260' '\u1268' '\u1270' '\u1278' '\u1290' '\u1300' '\u1308' '\u1328' '\u1340' '\u1350';
	/* 'ሀ' 'ለ' 'መ' 'ረ' 'ሰ' 'ሸ' 'በ' 'ቨ' 'ተ' 'ቸ' 'ነ' 'ጀ' 'ገ' 'ጨ' 'ፀ' 'ፐ' */
	suffix: '/';
}

@counter-style blin {
	type: alphabetic;
	glyphs: '\u1200' '\u1208' '\u1210' '\u1218' '\u1230' '\u1238' '\u1228' '\u1240' '\u1250' '\u1260' '\u1270' '\u1290' '\u1300' '\u1308' '\u1318' '\u1320' '\u1328' '\u1348' '\u1278' '\u1298' '\u1338' '\u1330' '\u1350';
	/* 'ሀ' 'ለ' 'ሐ' 'መ' 'ሰ' 'ሸ' 'ረ' 'ቀ' 'ቐ' 'በ' 'ተ' 'ነ' 'ጀ' 'ገ' 'ጘ' 'ጠ' 'ጨ' 'ፈ' 'ቸ' 'ኘ' 'ጸ' 'ጰ' 'ፐ' */
	suffix: '/';
}

@counter-style cjk-earthly-branch {
	type: alphabetic;
	glyphs: '\u5B50' '\u4E11' '\u5BC5' '\u536F' '\u8FB0' '\u5DF3' '\u5348' '\u672A' '\u7533' '\u9149' '\u620C' '\u4EA5';
	/* '子' '丑' '寅' '卯' '辰' '巳' '午' '未' '申' '酉' '戌' '亥' */
	suffix: '、';
}

@counter-style cjk-heavenly-stem {
	type: alphabetic;
	glyphs: '\u7532' '\u4E59' '\u4E19' '\u4E01' '\u620A' '\u5DF1' '\u5E9A' '\u8F9B' '\u58EC' '\u7678';
	/* '甲' '乙' '丙' '丁' '戊' '己' '庚' '辛' '壬' '癸' */
	suffix: '、';
}

@counter-style dizi {
	type: alphabetic;
	glyphs: '\u1200' '\u1208' '\u1218' '\u1228' '\u1230' '\u1238' '\u1240' '\u1260' '\u1270' '\u1278' '\u1290' '\u1298' '\u1300' '\u1308' '\u1320' '\u1328' '\u1338' '\u1340' '\u1348';
	/* 'ሀ' 'ለ' 'መ' 'ረ' 'ሰ' 'ሸ' 'ቀ' 'በ' 'ተ' 'ቸ' 'ነ' 'ኘ' 'ጀ' 'ገ' 'ጠ' 'ጨ' 'ጸ' 'ፀ' 'ፈ' */
	suffix: '/';
}

@counter-style fullwidth-lower-alpha {
	type: alphabetic;
	glyphs: '\uFF41' '\uFF42' '\uFF43' '\uFF44' '\uFF45' '\uFF46' '\uFF47' '\uFF48' '\uFF49' '\uFF4A' '\uFF4B' '\uFF4C' '\uFF4D' '\uFF4E' '\uFF4F' '\uFF50' '\uFF51' '\uFF52' '\uFF53' '\uFF54' '\uFF55' '\uFF56' '\uFF57' '\uFF58' '\uFF59' '\uFF5A';
	/* 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 'u' 'v' 'w' 'x' 'y' 'z' */
	suffix: '.';
}

@counter-style fullwidth-upper-alpha {
	type: alphabetic;
	glyphs: '\uFF21' '\uFF22' '\uFF23' '\uFF24' '\uFF25' '\uFF26' '\uFF27' '\uFF28' '\uFF29' '\uFF2A' '\uFF2B' '\uFF2C' '\uFF2D' '\uFF2E' '\uFF2F' '\uFF30' '\uFF31' '\uFF32' '\uFF33' '\uFF34' '\uFF35' '\uFF36' '\uFF37' '\uFF38' '\uFF39' '\uFF3A';
	/* 'A' 'B' 'C' 'D' 'E' 'F' 'G' 'H' 'I' 'J' 'K' 'L' 'M' 'N' 'O' 'P' 'Q' 'R' 'S' 'T' 'U' 'V' 'W' 'X' 'Y' 'Z' */
	suffix: '.';
}

@counter-style gedeo {
	type: alphabetic;
	glyphs: '\u1200' '\u1208' '\u1218' '\u1228' '\u1230' '\u1238' '\u1240' '\u1260' '\u1270' '\u1278' '\u1290' '\u1300' '\u1308' '\u1320' '\u1328' '\u1330' '\u1338' '\u1348' '\u1350';
	/* 'ሀ' 'ለ' 'መ' 'ረ' 'ሰ' 'ሸ' 'ቀ' 'በ' 'ተ' 'ቸ' 'ነ' 'ጀ' 'ገ' 'ጠ' 'ጨ' 'ጰ' 'ጸ' 'ፈ' 'ፐ' */
	suffix: '/';
}

@counter-style gumuz {
	type: alphabetic;
	glyphs: '\u1200' '\u1210' '\u1208' '\u1210' '\u1218' '\u1228' '\u1230' '\u1238' '\u1240' '\u1260' '\u1268' '\u1270' '\u1278' '\u1290' '\u1298' '\u1308' '\u1328' '\u1330' '\u1340' '\u1350';
	/* 'ሀ' 'ሐ' 'ለ' 'ሐ' 'መ' 'ረ' 'ሰ' 'ሸ' 'ቀ' 'በ' 'ቨ' 'ተ' 'ቸ' 'ነ' 'ኘ' 'ገ' 'ጨ' 'ጰ' 'ፀ' 'ፐ' */
	suffix: '/';
}

@counter-style hadiyya {
	type: alphabetic;
	glyphs: '\u1200' '\u1208' '\u1218' '\u1228' '\u1230' '\u1238' '\u1240' '\u1260' '\u1270' '\u1278' '\u1290' '\u1300' '\u1308' '\u1320' '\u1328' '\u1330' '\u1348' '\u1350';
	/* 'ሀ' 'ለ' 'መ' 'ረ' 'ሰ' 'ሸ' 'ቀ' 'በ' 'ተ' 'ቸ' 'ነ' 'ጀ' 'ገ' 'ጠ' 'ጨ' 'ጰ' 'ፈ' 'ፐ' */
	suffix: '/';
}

@counter-style harari {
	type: alphabetic;
	glyphs: '\u1210' '\u1208' '\u1218' '\u1228' '\u1230' '\u1238' '\u1240' '\u1260' '\u1270' '\u1278' '\u1290' '\u1298' '\u1300' '\u1308' '\u1320' '\u1328' '\u1348';
	/* 'ሐ' 'ለ' 'መ' 'ረ' 'ሰ' 'ሸ' 'ቀ' 'በ' 'ተ' 'ቸ' 'ነ' 'ኘ' 'ጀ' 'ገ' 'ጠ' 'ጨ' 'ፈ' */
	suffix: '/';
}

@counter-style hiragana-iroha {
	type: alphabetic;
	glyphs: '\u3044' '\u308D' '\u306F' '\u306B' '\u307B' '\u3078' '\u3068' '\u3061' '\u308A' '\u306C' '\u308B' '\u3092' '\u308F' '\u304B' '\u3088' '\u305F' '\u308C' '\u305D' '\u3064' '\u306D' '\u306A' '\u3089' '\u3080' '\u3046' '\u3090' '\u306E' '\u304A' '\u304F' '\u3084' '\u307E' '\u3051' '\u3075' '\u3053' '\u3048' '\u3066' '\u3042' '\u3055' '\u304D' '\u3086' '\u3081' '\u307F' '\u3057' '\u3091' '\u3072' '\u3082' '\u305B' '\u3059' '\u3093';
	/* 'い' 'ろ' 'は' 'に' 'ほ' 'へ' 'と' 'ち' 'り' 'ぬ' 'る' 'を' 'わ' 'か' 'よ' 'た' 'れ' 'そ' 'つ' 'ね' 'な' 'ら' 'む' 'う' 'ゐ' 'の' 'お' 'く' 'や' 'ま' 'け' 'ふ' 'こ' 'え' 'て' 'あ' 'さ' 'き' 'ゆ' 'め' 'み' 'し' 'ゑ' 'ひ' 'も' 'せ' 'す' 'ん' */
	suffix: '、';
}

@counter-style hiragana {
	type: alphabetic;
	glyphs: '\u3042' '\u3044' '\u3046' '\u3048' '\u304A' '\u304B' '\u304D' '\u304F' '\u3051' '\u3053' '\u3055' '\u3057' '\u3059' '\u305B' '\u305D' '\u305F' '\u3061' '\u3064' '\u3066' '\u3068' '\u306A' '\u306B' '\u306C' '\u306D' '\u306E' '\u306F' '\u3072' '\u3075' '\u3078' '\u307B' '\u307E' '\u307F' '\u3080' '\u3081' '\u3082' '\u3084' '\u3086' '\u3088' '\u3089' '\u308A' '\u308B' '\u308C' '\u308D' '\u308F' '\u3092' '\u3093';
	/* 'あ' 'い' 'う' 'え' 'お' 'か' 'き' 'く' 'け' 'こ' 'さ' 'し' 'す' 'せ' 'そ' 'た' 'ち' 'つ' 'て' 'と' 'な' 'に' 'ぬ' 'ね' 'の' 'は' 'ひ' 'ふ' 'へ' 'ほ' 'ま' 'み' 'む' 'め' 'も' 'や' 'ゆ' 'よ' 'ら' 'り' 'る' 'れ' 'ろ' 'わ' 'を' 'ん' */
	suffix: '、';
}

@counter-style kaffa {
	type: alphabetic;
	glyphs: '\u1200' '\u1208' '\u1210' '\u1218' '\u1220' '\u1228' '\u1230' '\u1238' '\u1240' '\u1260' '\u1270' '\u1278' '\u1280' '\u1290' '\u1300' '\u1308' '\u1320' '\u1328' '\u1330' '\u1348' '\u1350';
	/* 'ሀ' 'ለ' 'ሐ' 'መ' 'ሠ' 'ረ' 'ሰ' 'ሸ' 'ቀ' 'በ' 'ተ' 'ቸ' 'ኀ' 'ነ' 'ጀ' 'ገ' 'ጠ' 'ጨ' 'ጰ' 'ፈ' 'ፐ' */
	suffix: '/';
}

@counter-style katakana-iroha {
	type: alphabetic;
	glyphs: '\u30A4' '\u30ED' '\u30CF' '\u30CB' '\u30DB' '\u30D8' '\u30C8' '\u30C1' '\u30EA' '\u30CC' '\u30EB' '\u30F2' '\u30EF' '\u30AB' '\u30E8' '\u30BF' '\u30EC' '\u30BD' '\u30C4' '\u30CD' '\u30CA' '\u30E9' '\u30E0' '\u30A6' '\u30F0' '\u30CE' '\u30AA' '\u30AF' '\u30E4' '\u30DE' '\u30B1' '\u30D5' '\u30B3' '\u30A8' '\u30C6' '\u30A2' '\u30B5' '\u30AD' '\u30E6' '\u30E1' '\u30DF' '\u30B7' '\u30F1' '\u30D2' '\u30E2' '\u30BB' '\u30B9' '\u30F3';
	/* 'イ' 'ロ' 'ハ' 'ニ' 'ホ' 'ヘ' 'ト' 'チ' 'リ' 'ヌ' 'ル' 'ヲ' 'ワ' 'カ' 'ヨ' 'タ' 'レ' 'ソ' 'ツ' 'ネ' 'ナ' 'ラ' 'ム' 'ウ' 'ヰ' 'ノ' 'オ' 'ク' 'ヤ' 'マ' 'ケ' 'フ' 'コ' 'エ' 'テ' 'ア' 'サ' 'キ' 'ユ' 'メ' 'ミ' 'シ' 'ヱ' 'ヒ' 'モ' 'セ' 'ス' 'ン' */
	suffix: '、';
}

@counter-style katakana {
	type: alphabetic;
	glyphs: '\u30A2' '\u30A4' '\u30A6' '\u30A8' '\u30AA' '\u30AB' '\u30AD' '\u30AF' '\u30B1' '\u30B3' '\u30B5' '\u30B7' '\u30B9' '\u30BB' '\u30BD' '\u30BF' '\u30C1' '\u30C4' '\u30C6' '\u30C8' '\u30CA' '\u30CB' '\u30CC' '\u30CD' '\u30CE' '\u30CF' '\u30D2' '\u30D5' '\u30D8' '\u30DB' '\u30DE' '\u30DF' '\u30E0' '\u30E1' '\u30E2' '\u30E4' '\u30E6' '\u30E8' '\u30E9' '\u30EA' '\u30EB' '\u30EC' '\u30ED' '\u30EF' '\u30F2' '\u30F3';
	/* 'ア' 'イ' 'ウ' 'エ' 'オ' 'カ' 'キ' 'ク' 'ケ' 'コ' 'サ' 'シ' 'ス' 'セ' 'ソ' 'タ' 'チ' 'ツ' 'テ' 'ト' 'ナ' 'ニ' 'ヌ' 'ネ' 'ノ' 'ハ' 'ヒ' 'フ' 'ヘ' 'ホ' 'マ' 'ミ' 'ム' 'メ' 'モ' 'ヤ' 'ユ' 'ヨ' 'ラ' 'リ' 'ル' 'レ' 'ロ' 'ワ' 'ヲ' 'ン' */
	suffix: '、';
}

@counter-style kebena {
	type: alphabetic;
	glyphs: '\u1200' '\u1208' '\u1218' '\u1228' '\u1230' '\u1238' '\u1240' '\u1260' '\u1270' '\u1278' '\u1290' '\u1300' '\u1308' '\u1320' '\u1328' '\u1330' '\u1348' '\u1350';
	/* 'ሀ' 'ለ' 'መ' 'ረ' 'ሰ' 'ሸ' 'ቀ' 'በ' 'ተ' 'ቸ' 'ነ' 'ጀ' 'ገ' 'ጠ' 'ጨ' 'ጰ' 'ፈ' 'ፐ' */
	suffix: '/';
}

@counter-style kembata {
	type: alphabetic;
	glyphs: '\u1200' '\u1208' '\u1218' '\u1228' '\u1230' '\u1238' '\u1240' '\u1260' '\u1268' '\u1270' '\u1278' '\u1290' '\u1300' '\u1308' '\u1320' '\u1328' '\u1330' '\u1348';
	/* 'ሀ' 'ለ' 'መ' 'ረ' 'ሰ' 'ሸ' 'ቀ' 'በ' 'ቨ' 'ተ' 'ቸ' 'ነ' 'ጀ' 'ገ' 'ጠ' 'ጨ' 'ጰ' 'ፈ' */
	suffix: '/';
}

@counter-style konso {
	type: alphabetic;
	glyphs: '\u1200' '\u1208' '\u1218' '\u1228' '\u1230' '\u1238' '\u1240' '\u1260' '\u1270' '\u1278' '\u1290' '\u1298' '\u1300' '\u1348' '\u1350';
	/* 'ሀ' 'ለ' 'መ' 'ረ' 'ሰ' 'ሸ' 'ቀ' 'በ' 'ተ' 'ቸ' 'ነ' 'ኘ' 'ጀ' 'ፈ' 'ፐ' */
	suffix: '/';
}

@counter-style korean-consonant {
	type: alphabetic;
	glyphs: '\u3131' '\u3134' '\u3137' '\u3139' '\u3141' '\u3142' '\u3145' '\u3147' '\u3148' '\u314A' '\u314B' '\u314C' '\u314D' '\u314E';
	/* 'ㄱ' 'ㄴ' 'ㄷ' 'ㄹ' 'ㅁ' 'ㅂ' 'ㅅ' 'ㅇ' 'ㅈ' 'ㅊ' 'ㅋ' 'ㅌ' 'ㅍ' 'ㅎ' */
}

@counter-style korean-syllable {
	type: alphabetic;
	glyphs: '\uAC00' '\uB098' '\uB2E4' '\uB77C' '\uB9C8' '\uBC14' '\uC0AC' '\uC544' '\uC790' '\uCC28' '\uCE74' '\uD0C0' '\uD30C' '\uD558';
	/* '가' '나' '다' '라' '마' '바' '사' '아' '자' '차' '카' '타' '파' '하' */
}

@counter-style kunama {
	type: alphabetic;
	glyphs: '\u1200' '\u1208' '\u1218' '\u1228' '\u1230' '\u1238' '\u1260' '\u1270' '\u1278' '\u1290' '\u1298' '\u1300' '\u1308';
	/* 'ሀ' 'ለ' 'መ' 'ረ' 'ሰ' 'ሸ' 'በ' 'ተ' 'ቸ' 'ነ' 'ኘ' 'ጀ' 'ገ' */
	suffix: '/';
}

@counter-style lower-alpha {
	type: alphabetic;
	glyphs: '\u61' '\u62' '\u63' '\u64' '\u65' '\u66' '\u67' '\u68' '\u69' '\u6A' '\u6B' '\u6C' '\u6D' '\u6E' '\u6F' '\u70' '\u71' '\u72' '\u73' '\u74' '\u75' '\u76' '\u77' '\u78' '\u79' '\u7A';
	/* 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 'u' 'v' 'w' 'x' 'y' 'z' */
}

@counter-style lower-belorussian {
	type: alphabetic;
	glyphs: '\u430' '\u431' '\u432' '\u433' '\u434' '\u435' '\u451' '\u436' '\u437' '\u456' '\u439' '\u43A' '\u43B' '\u43C' '\u43D' '\u43E' '\u43F' '\u440' '\u441' '\u442' '\u443' '\u45E' '\u444' '\u445' '\u446' '\u447' '\u448' '\u44B' '\u44C' '\u44D' '\u44E' '\u44F';
	/* 'а' 'б' 'в' 'г' 'д' 'е' 'ё' 'ж' 'з' 'і' 'й' 'к' 'л' 'м' 'н' 'о' 'п' 'р' 'с' 'т' 'у' 'ў' 'ф' 'х' 'ц' 'ч' 'ш' 'ы' 'ь' 'э' 'ю' 'я' */
	suffix: ')';
}

@counter-style lower-bulgarian {
	type: alphabetic;
	glyphs: '\u430' '\u431' '\u432' '\u433' '\u434' '\u435' '\u436' '\u437' '\u438' '\u439' '\u43A' '\u43B' '\u43C' '\u43D' '\u43E' '\u43F' '\u440' '\u441' '\u442' '\u443' '\u444' '\u445' '\u446' '\u447' '\u448' '\u449' '\u44A' '\u44C' '\u44E' '\u44F';
	/* 'а' 'б' 'в' 'г' 'д' 'е' 'ж' 'з' 'и' 'й' 'к' 'л' 'м' 'н' 'о' 'п' 'р' 'с' 'т' 'у' 'ф' 'х' 'ц' 'ч' 'ш' 'щ' 'ъ' 'ь' 'ю' 'я' */
	suffix: ')';
}

@counter-style lower-greek {
	type: alphabetic;
	glyphs: '\u3B1' '\u3B2' '\u3B3' '\u3B4' '\u3B5' '\u3B6' '\u3B7' '\u3B8' '\u3B9' '\u3BA' '\u3BB' '\u3BC' '\u3BD' '\u3BE' '\u3BF' '\u3C0' '\u3C1' '\u3C3' '\u3C4' '\u3C5' '\u3C6' '\u3C7' '\u3C8' '\u3C9';
	/* 'α' 'β' 'γ' 'δ' 'ε' 'ζ' 'η' 'θ' 'ι' 'κ' 'λ' 'μ' 'ν' 'ξ' 'ο' 'π' 'ρ' 'σ' 'τ' 'υ' 'φ' 'χ' 'ψ' 'ω' */
}

@counter-style lower-latin {
	type: alphabetic;
	glyphs: '\u61' '\u62' '\u63' '\u64' '\u65' '\u66' '\u67' '\u68' '\u69' '\u6A' '\u6B' '\u6C' '\u6D' '\u6E' '\u6F' '\u70' '\u71' '\u72' '\u73' '\u74' '\u75' '\u76' '\u77' '\u78' '\u79' '\u7A';
	/* 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 'u' 'v' 'w' 'x' 'y' 'z' */
}

@counter-style lower-macedonian {
	type: alphabetic;
	glyphs: '\u430' '\u431' '\u432' '\u433' '\u434' '\u453' '\u435' '\u436' '\u437' '\u455' '\u438' '\u458' '\u43A' '\u43B' '\u459' '\u43C' '\u43D' '\u45A' '\u43E' '\u43F' '\u440' '\u441' '\u442' '\u45C' '\u443' '\u444' '\u445' '\u446' '\u447' '\u45F' '\u448';
	/* 'а' 'б' 'в' 'г' 'д' 'ѓ' 'е' 'ж' 'з' 'ѕ' 'и' 'ј' 'к' 'л' 'љ' 'м' 'н' 'њ' 'о' 'п' 'р' 'с' 'т' 'ќ' 'у' 'ф' 'х' 'ц' 'ч' 'џ' 'ш' */
	suffix: ')';
}

@counter-style lower-norwegian {
	type: alphabetic;
	glyphs: '\u61' '\u62' '\u63' '\u64' '\u65' '\u66' '\u67' '\u68' '\u69' '\u6A' '\u6B' '\u6C' '\u6D' '\u6E' '\u6F' '\u70' '\u71' '\u72' '\u73' '\u74' '\u75' '\u76' '\u77' '\u78' '\u79' '\u7A' '\uE6' '\uF8' '\uE5';
	/* 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 'u' 'v' 'w' 'x' 'y' 'z' 'æ' 'ø' 'å' */
}

@counter-style lower-oromo-qubee {
	type: alphabetic;
	glyphs: '\u61' '\u61\u61' '\u62' '\u63' '\u64' '\u65' '\u65\u65' '\u66' '\u67' '\u68' '\u69' '\u69\u69' '\u6A' '\u6B' '\u6C' '\u6D' '\u6E' '\u6F' '\u6F\u6F' '\u70' '\u71' '\u72' '\u73' '\u74' '\u75' '\u75\u75' '\u76' '\u77' '\u78' '\u79' '\u7A' '\u63\u68' '\u64\u68' '\u6B\u68' '\u6E\u79' '\u70\u68' '\u73\u68';
	/* 'a' 'aa' 'b' 'c' 'd' 'e' 'ee' 'f' 'g' 'h' 'i' 'ii' 'j' 'k' 'l' 'm' 'n' 'o' 'oo' 'p' 'q' 'r' 's' 't' 'u' 'uu' 'v' 'w' 'x' 'y' 'z' 'ch' 'dh' 'kh' 'ny' 'ph' 'sh' */
}

@counter-style lower-russian {
	type: alphabetic;
	glyphs: '\u430' '\u431' '\u432' '\u433' '\u434' '\u435' '\u436' '\u437' '\u438' '\u43A' '\u43B' '\u43C' '\u43D' '\u43E' '\u43F' '\u440' '\u441' '\u442' '\u443' '\u444' '\u445' '\u446' '\u447' '\u448' '\u449' '\u44D' '\u44E' '\u44F';
	/* 'а' 'б' 'в' 'г' 'д' 'е' 'ж' 'з' 'и' 'к' 'л' 'м' 'н' 'о' 'п' 'р' 'с' 'т' 'у' 'ф' 'х' 'ц' 'ч' 'ш' 'щ' 'э' 'ю' 'я' */
	suffix: ')';
}

@counter-style lower-russian-full {
	type: alphabetic;
	glyphs: '\u430' '\u431' '\u432' '\u433' '\u434' '\u435' '\u451' '\u436' '\u437' '\u438' '\u439' '\u43A' '\u43B' '\u43C' '\u43D' '\u43E' '\u43F' '\u440' '\u441' '\u442' '\u443' '\u444' '\u445' '\u446' '\u447' '\u448' '\u449' '\u44A' '\u44B' '\u44C' '\u44D' '\u44E' '\u44F';
	/* 'а' 'б' 'в' 'г' 'д' 'е' 'ё' 'ж' 'з' 'и' 'й' 'к' 'л' 'м' 'н' 'о' 'п' 'р' 'с' 'т' 'у' 'ф' 'х' 'ц' 'ч' 'ш' 'щ' 'ъ' 'ы' 'ь' 'э' 'ю' 'я' */
	suffix: ')';
}

@counter-style lower-serbo-croatian {
	type: alphabetic;
	glyphs: '\u430' '\u431' '\u432' '\u433' '\u434' '\u452' '\u435' '\u436' '\u437' '\u438' '\u458' '\u43A' '\u43B' '\u459' '\u43C' '\u43D' '\u45A' '\u43E' '\u43F' '\u440' '\u441' '\u442' '\u45B' '\u443' '\u444' '\u445' '\u446' '\u447' '\u45F' '\u448';
	/* 'а' 'б' 'в' 'г' 'д' 'ђ' 'е' 'ж' 'з' 'и' 'ј' 'к' 'л' 'љ' 'м' 'н' 'њ' 'о' 'п' 'р' 'с' 'т' 'ћ' 'у' 'ф' 'х' 'ц' 'ч' 'џ' 'ш' */
	suffix: ')';
}

@counter-style lower-ukrainian {
	type: alphabetic;
	glyphs: '\u430' '\u431' '\u432' '\u433' '\u434' '\u435' '\u454' '\u436' '\u437' '\u438' '\u456' '\u43A' '\u43B' '\u43C' '\u43D' '\u43E' '\u43F' '\u440' '\u441' '\u442' '\u443' '\u444' '\u445' '\u446' '\u447' '\u448' '\u44E' '\u44F';
	/* 'а' 'б' 'в' 'г' 'д' 'е' 'є' 'ж' 'з' 'и' 'і' 'к' 'л' 'м' 'н' 'о' 'п' 'р' 'с' 'т' 'у' 'ф' 'х' 'ц' 'ч' 'ш' 'ю' 'я' */
	suffix: ')';
}

@counter-style lower-ukrainian-full {
	type: alphabetic;
	glyphs: '\u430' '\u431' '\u432' '\u433' '\u491' '\u434' '\u435' '\u454' '\u436' '\u437' '\u438' '\u456' '\u457' '\u439' '\u43A' '\u43B' '\u43C' '\u43D' '\u43E' '\u43F' '\u440' '\u441' '\u442' '\u443' '\u444' '\u445' '\u446' '\u447' '\u448' '\u449' '\u44C' '\u44E' '\u44F';
	/* 'а' 'б' 'в' 'г' 'ґ' 'д' 'е' 'є' 'ж' 'з' 'и' 'і' 'ї' 'й' 'к' 'л' 'м' 'н' 'о' 'п' 'р' 'с' 'т' 'у' 'ф' 'х' 'ц' 'ч' 'ш' 'щ' 'ь' 'ю' 'я' */
	suffix: ')';
}

@counter-style meen {
	type: alphabetic;
	glyphs: '\u1200' '\u1208' '\u1218' '\u1228' '\u1230' '\u1238' '\u1240' '\u1260' '\u1270' '\u1278' '\u1280' '\u1290' '\u1298' '\u1300' '\u1308' '\u1320' '\u1328' '\u1330' '\u1350' '\u1340';
	/* 'ሀ' 'ለ' 'መ' 'ረ' 'ሰ' 'ሸ' 'ቀ' 'በ' 'ተ' 'ቸ' 'ኀ' 'ነ' 'ኘ' 'ጀ' 'ገ' 'ጠ' 'ጨ' 'ጰ' 'ፐ' 'ፀ' */
	suffix: '/';
}

@counter-style oromo {
	type: alphabetic;
	glyphs: '\u1200' '\u1208' '\u1218' '\u1228' '\u1230' '\u1238' '\u1240' '\u1260' '\u1270' '\u1278' '\u1290' '\u1298' '\u12A0' '\u12A8' '\u12C8' '\u12E8' '\u12F0' '\u12F8' '\u1300' '\u1308' '\u1320' '\u1328' '\u1330' '\u1338' '\u1348';
	/* 'ሀ' 'ለ' 'መ' 'ረ' 'ሰ' 'ሸ' 'ቀ' 'በ' 'ተ' 'ቸ' 'ነ' 'ኘ' 'አ' 'ከ' 'ወ' 'የ' 'ደ' 'ዸ' 'ጀ' 'ገ' 'ጠ' 'ጨ' 'ጰ' 'ጸ' 'ፈ' */
	suffix: '/';
}

@counter-style saho {
	type: alphabetic;
	glyphs: '\u1200' '\u1208' '\u1210' '\u1218' '\u1228' '\u1230' '\u1240' '\u1260' '\u1270' '\u1290' '\u1308' '\u1320' '\u1328' '\u1330' '\u1338' '\u1348';
	/* 'ሀ' 'ለ' 'ሐ' 'መ' 'ረ' 'ሰ' 'ቀ' 'በ' 'ተ' 'ነ' 'ገ' 'ጠ' 'ጨ' 'ጰ' 'ጸ' 'ፈ' */
	suffix: '/';
}

@counter-style sidama {
	type: alphabetic;
	glyphs: '\u1200' '\u1208' '\u1218' '\u1228' '\u1230' '\u1238' '\u1240' '\u1260' '\u1270' '\u1278' '\u1290' '\u1298' '\u12A0' '\u12A8' '\u12C8' '\u12E8' '\u12F0' '\u12F8' '\u1300' '\u1308' '\u1320' '\u1328' '\u1330' '\u1338' '\u1348';
	/* 'ሀ' 'ለ' 'መ' 'ረ' 'ሰ' 'ሸ' 'ቀ' 'በ' 'ተ' 'ቸ' 'ነ' 'ኘ' 'አ' 'ከ' 'ወ' 'የ' 'ደ' 'ዸ' 'ጀ' 'ገ' 'ጠ' 'ጨ' 'ጰ' 'ጸ' 'ፈ' */
	suffix: '/';
}

@counter-style silti {
	type: alphabetic;
	glyphs: '\u1200' '\u1208' '\u1218' '\u1228' '\u1230' '\u1238' '\u1240' '\u1260' '\u1270' '\u1278' '\u1290' '\u1298' '\u1300' '\u1308' '\u1320' '\u1328' '\u1330' '\u1348';
	/* 'ሀ' 'ለ' 'መ' 'ረ' 'ሰ' 'ሸ' 'ቀ' 'በ' 'ተ' 'ቸ' 'ነ' 'ኘ' 'ጀ' 'ገ' 'ጠ' 'ጨ' 'ጰ' 'ፈ' */
	suffix: '/';
}

@counter-style thai-alphabetic {
	type: alphabetic;
	glyphs: '\uE01' '\uE02' '\uE04' '\uE07' '\uE08' '\uE09' '\uE0A' '\uE0B' '\uE0C' '\uE0D' '\uE0E' '\uE0F' '\uE10' '\uE11' '\uE12' '\uE13' '\uE14' '\uE15' '\uE16' '\uE17' '\uE18' '\uE19' '\uE1A' '\uE1B' '\uE1C' '\uE1D' '\uE1E' '\uE1F' '\uE20' '\uE21' '\uE22' '\uE23' '\uE25' '\uE27' '\uE28' '\uE29' '\uE2A' '\uE2B' '\uE2C' '\uE2D' '\uE2E';
	/* 'ก' 'ข' 'ค' 'ง' 'จ' 'ฉ' 'ช' 'ซ' 'ฌ' 'ญ' 'ฎ' 'ฏ' 'ฐ' 'ฑ' 'ฒ' 'ณ' 'ด' 'ต' 'ถ' 'ท' 'ธ' 'น' 'บ' 'ป' 'ผ' 'ฝ' 'พ' 'ฟ' 'ภ' 'ม' 'ย' 'ร' 'ล' 'ว' 'ศ' 'ษ' 'ส' 'ห' 'ฬ' 'อ' 'ฮ' */
}

@counter-style tigre {
	type: alphabetic;
	glyphs: '\u1200' '\u1208' '\u1210' '\u1218' '\u1228' '\u1230' '\u1238' '\u1240' '\u1260' '\u1270' '\u1278' '\u1290' '\u12A0' '\u12A8' '\u12C8' '\u12D0' '\u12D8' '\u12E8' '\u12F0' '\u1300' '\u1308' '\u1320' '\u1328' '\u1330' '\u1338' '\u1348' '\u1350';
	/* 'ሀ' 'ለ' 'ሐ' 'መ' 'ረ' 'ሰ' 'ሸ' 'ቀ' 'በ' 'ተ' 'ቸ' 'ነ' 'አ' 'ከ' 'ወ' 'ዐ' 'ዘ' 'የ' 'ደ' 'ጀ' 'ገ' 'ጠ' 'ጨ' 'ጰ' 'ጸ' 'ፈ' 'ፐ' */
	suffix: '/';
}

@counter-style upper-alpha {
	type: alphabetic;
	glyphs: '\u41' '\u42' '\u43' '\u44' '\u45' '\u46' '\u47' '\u48' '\u49' '\u4A' '\u4B' '\u4C' '\u4D' '\u4E' '\u4F' '\u50' '\u51' '\u52' '\u53' '\u54' '\u55' '\u56' '\u57' '\u58' '\u59' '\u5A';
	/* 'A' 'B' 'C' 'D' 'E' 'F' 'G' 'H' 'I' 'J' 'K' 'L' 'M' 'N' 'O' 'P' 'Q' 'R' 'S' 'T' 'U' 'V' 'W' 'X' 'Y' 'Z' */
}

@counter-style upper-belorussian {
	type: alphabetic;
	glyphs: '\u410' '\u411' '\u412' '\u413' '\u414' '\u415' '\u401' '\u416' '\u417' '\u406' '\u419' '\u41A' '\u41B' '\u41C' '\u41D' '\u41E' '\u41F' '\u420' '\u421' '\u422' '\u423' '\u40E' '\u424' '\u425' '\u426' '\u427' '\u428' '\u42B' '\u42C' '\u42D' '\u42E' '\u42F';
	/* 'А' 'Б' 'В' 'Г' 'Д' 'Е' 'Ё' 'Ж' 'З' 'І' 'Й' 'К' 'Л' 'М' 'Н' 'О' 'П' 'Р' 'С' 'Т' 'У' 'Ў' 'Ф' 'Х' 'Ц' 'Ч' 'Ш' 'Ы' 'Ь' 'Э' 'Ю' 'Я' */
}

@counter-style upper-bulgarian {
	type: alphabetic;
	glyphs: '\u410' '\u411' '\u412' '\u413' '\u414' '\u415' '\u416' '\u417' '\u418' '\u419' '\u41A' '\u41B' '\u41C' '\u41D' '\u41E' '\u41F' '\u420' '\u421' '\u422' '\u423' '\u424' '\u425' '\u426' '\u427' '\u428' '\u429' '\u42A' '\u42C' '\u42E' '\u42F';
	/* 'А' 'Б' 'В' 'Г' 'Д' 'Е' 'Ж' 'З' 'И' 'Й' 'К' 'Л' 'М' 'Н' 'О' 'П' 'Р' 'С' 'Т' 'У' 'Ф' 'Х' 'Ц' 'Ч' 'Ш' 'Щ' 'Ъ' 'Ь' 'Ю' 'Я' */
}

@counter-style upper-greek {
	type: alphabetic;
	glyphs: '\u391' '\u392' '\u393' '\u394' '\u395' '\u396' '\u397' '\u398' '\u399' '\u39A' '\u39B' '\u39C' '\u39D' '\u39E' '\u39F' '\u3A0' '\u3A1' '\u3A3' '\u3A4' '\u3A5' '\u3A6' '\u3A7' '\u3A8' '\u3A9';
	/* 'Α' 'Β' 'Γ' 'Δ' 'Ε' 'Ζ' 'Η' 'Θ' 'Ι' 'Κ' 'Λ' 'Μ' 'Ν' 'Ξ' 'Ο' 'Π' 'Ρ' 'Σ' 'Τ' 'Υ' 'Φ' 'Χ' 'Ψ' 'Ω' */
}

@counter-style upper-latin {
	type: alphabetic;
	glyphs: '\u41' '\u42' '\u43' '\u44' '\u45' '\u46' '\u47' '\u48' '\u49' '\u4A' '\u4B' '\u4C' '\u4D' '\u4E' '\u4F' '\u50' '\u51' '\u52' '\u53' '\u54' '\u55' '\u56' '\u57' '\u58' '\u59' '\u5A';
	/* 'A' 'B' 'C' 'D' 'E' 'F' 'G' 'H' 'I' 'J' 'K' 'L' 'M' 'N' 'O' 'P' 'Q' 'R' 'S' 'T' 'U' 'V' 'W' 'X' 'Y' 'Z' */
}

@counter-style upper-macedonian {
	type: alphabetic;
	glyphs: '\u410' '\u411' '\u412' '\u413' '\u414' '\u403' '\u415' '\u416' '\u417' '\u405' '\u418' '\u408' '\u41A' '\u41B' '\u409' '\u41C' '\u41D' '\u40A' '\u41E' '\u41F' '\u420' '\u421' '\u422' '\u40C' '\u423' '\u424' '\u425' '\u426' '\u427' '\u40F' '\u428';
	/* 'А' 'Б' 'В' 'Г' 'Д' 'Ѓ' 'Е' 'Ж' 'З' 'Ѕ' 'И' 'Ј' 'К' 'Л' 'Љ' 'М' 'Н' 'Њ' 'О' 'П' 'Р' 'С' 'Т' 'Ќ' 'У' 'Ф' 'Х' 'Ц' 'Ч' 'Џ' 'Ш' */
}

@counter-style upper-norwegian {
	type: alphabetic;
	glyphs: '\u41' '\u42' '\u43' '\u44' '\u45' '\u46' '\u47' '\u48' '\u49' '\u4A' '\u4B' '\u4C' '\u4D' '\u4E' '\u4F' '\u50' '\u51' '\u52' '\u53' '\u54' '\u55' '\u56' '\u57' '\u58' '\u59' '\u5A' '\uC6' '\uD8' '\uC5';
	/* 'A' 'B' 'C' 'D' 'E' 'F' 'G' 'H' 'I' 'J' 'K' 'L' 'M' 'N' 'O' 'P' 'Q' 'R' 'S' 'T' 'U' 'V' 'W' 'X' 'Y' 'Z' 'Æ' 'Ø' 'Å' */
}

@counter-style upper-oromo-qubee {
	type: alphabetic;
	glyphs: '\u41' '\u41\u41' '\u42' '\u43' '\u44' '\u45' '\u45\u45' '\u46' '\u47' '\u48' '\u49' '\u49\u49' '\u4A' '\u4B' '\u4C' '\u4D' '\u4E' '\u4F' '\u4F\u4F' '\u50' '\u51' '\u52' '\u53' '\u54' '\u55' '\u55\u55' '\u56' '\u57' '\u58' '\u59' '\u5A' '\u43\u48' '\u44\u48' '\u4B\u48' '\u4E\u59' '\u50\u48' '\u53\u48';
	/* 'A' 'AA' 'B' 'C' 'D' 'E' 'EE' 'F' 'G' 'H' 'I' 'II' 'J' 'K' 'L' 'M' 'N' 'O' 'OO' 'P' 'Q' 'R' 'S' 'T' 'U' 'UU' 'V' 'W' 'X' 'Y' 'Z' 'CH' 'DH' 'KH' 'NY' 'PH' 'SH' */
}

@counter-style upper-russian {
	type: alphabetic;
	glyphs: '\u410' '\u411' '\u412' '\u413' '\u414' '\u415' '\u416' '\u417' '\u418' '\u41A' '\u41B' '\u41C' '\u41D' '\u41E' '\u41F' '\u420' '\u421' '\u422' '\u423' '\u424' '\u425' '\u426' '\u427' '\u428' '\u429' '\u42D' '\u42E' '\u42F';
	/* 'А' 'Б' 'В' 'Г' 'Д' 'Е' 'Ж' 'З' 'И' 'К' 'Л' 'М' 'Н' 'О' 'П' 'Р' 'С' 'Т' 'У' 'Ф' 'Х' 'Ц' 'Ч' 'Ш' 'Щ' 'Э' 'Ю' 'Я' */
}

@counter-style upper-russian-full {
	type: alphabetic;
	glyphs: '\u410' '\u411' '\u412' '\u413' '\u414' '\u415' '\u401' '\u416' '\u417' '\u418' '\u419' '\u41A' '\u41B' '\u41C' '\u41D' '\u41E' '\u41F' '\u420' '\u421' '\u422' '\u423' '\u424' '\u425' '\u426' '\u427' '\u428' '\u429' '\u42A' '\u42B' '\u42C' '\u42D' '\u42E' '\u42F';
	/* 'А' 'Б' 'В' 'Г' 'Д' 'Е' 'Ё' 'Ж' 'З' 'И' 'Й' 'К' 'Л' 'М' 'Н' 'О' 'П' 'Р' 'С' 'Т' 'У' 'Ф' 'Х' 'Ц' 'Ч' 'Ш' 'Щ' 'Ъ' 'Ы' 'Ь' 'Э' 'Ю' 'Я' */
}

@counter-style upper-serbo-croatian {
	type: alphabetic;
	glyphs: '\u410' '\u411' '\u412' '\u413' '\u414' '\u402' '\u415' '\u416' '\u417' '\u418' '\u408' '\u41A' '\u41B' '\u409' '\u41C' '\u41D' '\u40A' '\u41E' '\u41F' '\u420' '\u421' '\u422' '\u40B' '\u423' '\u424' '\u425' '\u426' '\u427' '\u40F' '\u428';
	/* 'А' 'Б' 'В' 'Г' 'Д' 'Ђ' 'Е' 'Ж' 'З' 'И' 'Ј' 'К' 'Л' 'Љ' 'М' 'Н' 'Њ' 'О' 'П' 'Р' 'С' 'Т' 'Ћ' 'У' 'Ф' 'Х' 'Ц' 'Ч' 'Џ' 'Ш' */
}

@counter-style upper-ukrainian {
	type: alphabetic;
	glyphs: '\u410' '\u411' '\u412' '\u413' '\u414' '\u415' '\u404' '\u416' '\u417' '\u418' '\u406' '\u41A' '\u41B' '\u41C' '\u41D' '\u41E' '\u41F' '\u420' '\u421' '\u422' '\u423' '\u424' '\u425' '\u426' '\u427' '\u428' '\u42E' '\u42F';
	/* 'А' 'Б' 'В' 'Г' 'Д' 'Е' 'Є' 'Ж' 'З' 'И' 'І' 'К' 'Л' 'М' 'Н' 'О' 'П' 'Р' 'С' 'Т' 'У' 'Ф' 'Х' 'Ц' 'Ч' 'Ш' 'Ю' 'Я' */
}

@counter-style upper-ukrainian-full {
	type: alphabetic;
	glyphs: '\u410' '\u411' '\u412' '\u413' '\u490' '\u414' '\u415' '\u404' '\u416' '\u417' '\u418' '\u406' '\u407' '\u419' '\u41A' '\u41B' '\u41C' '\u41D' '\u41E' '\u41F' '\u420' '\u421' '\u422' '\u423' '\u424' '\u425' '\u426' '\u427' '\u428' '\u429' '\u42C' '\u42E' '\u42F';
	/* 'А' 'Б' 'В' 'Г' 'Ґ' 'Д' 'Е' 'Є' 'Ж' 'З' 'И' 'І' 'Ї' 'Й' 'К' 'Л' 'М' 'Н' 'О' 'П' 'Р' 'С' 'Т' 'У' 'Ф' 'Х' 'Ц' 'Ч' 'Ш' 'Щ' 'Ь' 'Ю' 'Я' */
}

@counter-style wolaita {
	type: alphabetic;
	glyphs: '\u1200' '\u1208' '\u1218' '\u1228' '\u1230' '\u1238' '\u1240' '\u1260' '\u1270' '\u1278' '\u1290' '\u1298' '\u1230' '\u1308' '\u1320' '\u1328' '\u1330' '\u1338' '\u1340' '\u1348' '\u1350';
	/* 'ሀ' 'ለ' 'መ' 'ረ' 'ሰ' 'ሸ' 'ቀ' 'በ' 'ተ' 'ቸ' 'ነ' 'ኘ' 'ሰ' 'ገ' 'ጠ' 'ጨ' 'ጰ' 'ጸ' 'ፀ' 'ፈ' 'ፐ' */
	suffix: '/';
}

@counter-style yemsa {
	type: alphabetic;
	glyphs: '\u1200' '\u1208' '\u1218' '\u1228' '\u1230' '\u1238' '\u1240' '\u1260' '\u1268' '\u1270' '\u1278' '\u1290' '\u1298' '\u1300' '\u1308' '\u1318' '\u1320' '\u1328' '\u1330' '\u1348' '\u1350';
	/* 'ሀ' 'ለ' 'መ' 'ረ' 'ሰ' 'ሸ' 'ቀ' 'በ' 'ቨ' 'ተ' 'ቸ' 'ነ' 'ኘ' 'ጀ' 'ገ' 'ጘ' 'ጠ' 'ጨ' 'ጰ' 'ፈ' 'ፐ' */
	suffix: '/';
}

/* Symbolic  */

@counter-style asterisks {
	type: symbolic;
	glyphs: '\u2A';
	/* '*' */
	suffix: '';
}

@counter-style footnotes {
	type: symbolic;
	glyphs: '\u2A' '\u2051' '\u2020' '\u2021';
	/* '*' '⁑' '†' '‡' */
	suffix: '';
}

/* Non-repeating  */

@counter-style circled-decimal {
	type: non-repeating 0;
	glyphs: '\u24EA' '\u2460' '\u2461' '\u2462' '\u2463' '\u2464' '\u2465' '\u2466' '\u2467' '\u2468' '\u2469' '\u246A' '\u246B' '\u246C' '\u246D' '\u246E' '\u246F' '\u2470' '\u2471' '\u2472' '\u2473';
	/* '⓪' '①' '②' '③' '④' '⑤' '⑥' '⑦' '⑧' '⑨' '⑩' '⑪' '⑫' '⑬' '⑭' '⑮' '⑯' '⑰' '⑱' '⑲' '⑳' */
	suffix: '';
}

@counter-style circled-lower-latin {
	type: non-repeating 1;
	glyphs: '\u24D0' '\u24D1' '\u24D2' '\u24D3' '\u24D4' '\u24D5' '\u24D6' '\u24D7' '\u24D8' '\u24D9' '\u24DA' '\u24DB' '\u24DC' '\u24DD' '\u24DE' '\u24DF' '\u24E0' '\u24E1' '\u24E2' '\u24E3' '\u24E4' '\u24E5' '\u24E6' '\u24E7' '\u24E8' '\u24E9';
	/* 'ⓐ' 'ⓑ' 'ⓒ' 'ⓓ' 'ⓔ' 'ⓕ' 'ⓖ' 'ⓗ' 'ⓘ' 'ⓙ' 'ⓚ' 'ⓛ' 'ⓜ' 'ⓝ' 'ⓞ' 'ⓟ' 'ⓠ' 'ⓡ' 'ⓢ' 'ⓣ' 'ⓤ' 'ⓥ' 'ⓦ' 'ⓧ' 'ⓨ' 'ⓩ' */
	suffix: '';
}

@counter-style circled-upper-latin {
	type: non-repeating 1;
	glyphs: '\u24B6' '\u24B7' '\u24B8' '\u24B9' '\u24BA' '\u24BB' '\u24BC' '\u24BD' '\u24BE' '\u24BF' '\u24C0' '\u24C1' '\u24C2' '\u24C3' '\u24C4' '\u24C5' '\u24C6' '\u24C7' '\u24C8' '\u24C9' '\u24CA' '\u24CB' '\u24CC' '\u24CD' '\u24CE' '\u24CF';
	/* 'Ⓐ' 'Ⓑ' 'Ⓒ' 'Ⓓ' 'Ⓔ' 'Ⓕ' 'Ⓖ' 'Ⓗ' 'Ⓘ' 'Ⓙ' 'Ⓚ' 'Ⓛ' 'Ⓜ' 'Ⓝ' 'Ⓞ' 'Ⓟ' 'Ⓠ' 'Ⓡ' 'Ⓢ' 'Ⓣ' 'Ⓤ' 'Ⓥ' 'Ⓦ' 'Ⓧ' 'Ⓨ' 'Ⓩ' */
	suffix: '';
}

@counter-style circled-korean-consonants {
	type: non-repeating 1;
	glyphs: '\u3260' '\u3261' '\u3262' '\u3263' '\u3264' '\u3265' '\u3266' '\u3267' '\u3268' '\u3269' '\u326A' '\u326B' '\u326C' '\u326D';
	/* '㉠' '㉡' '㉢' '㉣' '㉤' '㉥' '㉦' '㉧' '㉨' '㉩' '㉪' '㉫' '㉬' '㉭' */
	suffix: '';
}

@counter-style circled-korean-syllables {
	type: non-repeating 1;
	glyphs: '\u326E' '\u326F' '\u3270' '\u3271' '\u3272' '\u3273' '\u3274' '\u3275' '\u3276' '\u3277' '\u3278' '\u3279' '\u327A' '\u327B';
	/* '㉮' '㉯' '㉰' '㉱' '㉲' '㉳' '㉴' '㉵' '㉶' '㉷' '㉸' '㉹' '㉺' '㉻' */
	suffix: '';
}

@counter-style decimal-leading-zero {
	type: non-repeating -9;
	glyphs: '\u2D\u30\u39' '\u2D\u30\u38' '\u2D\u30\u37' '\u2D\u30\u36' '\u2D\u30\u35' '\u2D\u30\u34' '\u2D\u30\u33' '\u2D\u30\u32' '\u2D\u30\u31' '\u30\u30' '\u30\u31' '\u30\u32' '\u30\u33' '\u30\u34' '\u30\u35' '\u30\u36' '\u30\u37' '\u30\u38' '\u30\u39';
	/* '-09' '-08' '-07' '-06' '-05' '-04' '-03' '-02' '-01' '00' '01' '02' '03' '04' '05' '06' '07' '08' '09' */
	suffix: '';
}

@counter-style dotted-decimal {
	type: non-repeating 1;
	glyphs: '\u2488' '\u2489' '\u248A' '\u248B' '\u248C' '\u248D' '\u248E' '\u248F' '\u2490' '\u2491' '\u2492' '\u2493' '\u2494' '\u2495' '\u2496' '\u2497' '\u2498' '\u2499' '\u249A' '\u249B';
	/* '⒈' '⒉' '⒊' '⒋' '⒌' '⒍' '⒎' '⒏' '⒐' '⒑' '⒒' '⒓' '⒔' '⒕' '⒖' '⒗' '⒘' '⒙' '⒚' '⒛' */
	suffix: '';
}

@counter-style double-circled-decimal {
	type: non-repeating 1;
	glyphs: '\u24F5' '\u24F6' '\u24F7' '\u24F8' '\u24F9' '\u24FA' '\u24FB' '\u24FC' '\u24FD' '\u24FE';
	/* '⓵' '⓶' '⓷' '⓸' '⓹' '⓺' '⓻' '⓼' '⓽' '⓾' */
	suffix: '';
}

@counter-style filled-circled-decimal {
	type: non-repeating 11;
	glyphs: '\u24EB' '\u24EC' '\u24ED' '\u24EE' '\u24EF' '\u24F0' '\u24F1' '\u24F2' '\u24F3' '\u24F4';
	/* '⓫' '⓬' '⓭' '⓮' '⓯' '⓰' '⓱' '⓲' '⓳' '⓴' */
	suffix: '';
}

@counter-style fullwidth-upper-roman {
	type: non-repeating 1;
	glyphs: '\u2160' '\u2161' '\u2162' '\u2163' '\u2164' '\u2165' '\u2166' '\u2167' '\u2168' '\u2169' '\u216A' '\u216B';
	/* 'Ⅰ' 'Ⅱ' 'Ⅲ' 'Ⅳ' 'Ⅴ' 'Ⅵ' 'Ⅶ' 'Ⅷ' 'Ⅸ' 'Ⅹ' 'Ⅺ' 'Ⅻ' */
	suffix: '';
}

@counter-style fullwidth-lower-roman {
	type: non-repeating 1;
	glyphs: '\u2170' '\u2171' '\u2172' '\u2173' '\u2174' '\u2175' '\u2176' '\u2177' '\u2178' '\u2179' '\u217A' '\u217B';
	/* 'ⅰ' 'ⅱ' 'ⅲ' 'ⅳ' 'ⅴ' 'ⅵ' 'ⅶ' 'ⅷ' 'ⅸ' 'ⅹ' 'ⅺ' 'ⅻ' */
	suffix: '';
}

@counter-style parenthesized-decimal {
	type: non-repeating 1;
	glyphs: '\u2474' '\u2475' '\u2476' '\u2477' '\u2478' '\u2479' '\u247A' '\u247B' '\u247C' '\u247D' '\u247E' '\u247F' '\u2480' '\u2481' '\u2482' '\u2483' '\u2484' '\u2485' '\u2486' '\u2487';
	/* '⑴' '⑵' '⑶' '⑷' '⑸' '⑹' '⑺' '⑻' '⑼' '⑽' '⑾' '⑿' '⒀' '⒁' '⒂' '⒃' '⒄' '⒅' '⒆' '⒇' */
	suffix: '';
}

@counter-style parenthesized-lower-latin {
	type: non-repeating 1;
	glyphs: '\u249C' '\u249D' '\u249E' '\u249F' '\u24A0' '\u24A1' '\u24A2' '\u24A3' '\u24A4' '\u24A5' '\u24A6' '\u24A7' '\u24A8' '\u24A9' '\u24AA' '\u24AB' '\u24AC' '\u24AD' '\u24AE' '\u24AF' '\u24B0' '\u24B1' '\u24B2' '\u24B3' '\u24B4' '\u24B5';
	/* '⒜' '⒝' '⒞' '⒟' '⒠' '⒡' '⒢' '⒣' '⒤' '⒥' '⒦' '⒧' '⒨' '⒩' '⒪' '⒫' '⒬' '⒭' '⒮' '⒯' '⒰' '⒱' '⒲' '⒳' '⒴' '⒵' */
	suffix: '';
}

@counter-style parenthesized-hangul-consonants {
	type: non-repeating 1;
	glyphs: '\u3200' '\u3201' '\u3202' '\u3203' '\u3204' '\u3205' '\u3206' '\u3207' '\u3208' '\u3209' '\u320A' '\u320B' '\u320C' '\u320D';
	/* '㈀' '㈁' '㈂' '㈃' '㈄' '㈅' '㈆' '㈇' '㈈' '㈉' '㈊' '㈋' '㈌' '㈍' */
	suffix: '';
}

@counter-style parenthesized-hangul-syllable {
	type: non-repeating 1;
	glyphs: '\u320E' '\u320F' '\u3210' '\u3211' '\u3212' '\u3213' '\u3214' '\u3215' '\u3216' '\u3217' '\u3218' '\u3219' '\u321A';
	/* '㈎' '㈏' '㈐' '㈑' '㈒' '㈓' '㈔' '㈕' '㈖' '㈗' '㈘' '㈙' '㈚' */
	suffix: '';
}

@counter-style persian-abjad {
	type: non-repeating 1;
	glyphs: '\u627' '\u628' '\u62C' '\u62F' '\u647\u200D' '\u648' '\u632' '\u62D' '\u637' '\u6CC' '\u6A9' '\u644' '\u645' '\u646' '\u633' '\u639' '\u641' '\u635' '\u642' '\u631' '\u634' '\u62A' '\u62B' '\u62E' '\u630' '\u636' '\u638' '\u63A';
	/* 'ا' 'ب' 'ج' 'د' 'ه‍' 'و' 'ز' 'ح' 'ط' 'ی' 'ک' 'ل' 'م' 'ن' 'س' 'ع' 'ف' 'ص' 'ق' 'ر' 'ش' 'ت' 'ث' 'خ' 'ذ' 'ض' 'ظ' 'غ' */
}

@counter-style persian-alphabetic {
	type: non-repeating 1;
	glyphs: '\u627' '\u628' '\u67E' '\u62A' '\u62B' '\u62C' '\u686' '\u62D' '\u62E' '\u62F' '\u630' '\u631' '\u632' '\u698' '\u633' '\u634' '\u635' '\u636' '\u637' '\u638' '\u639' '\u63A' '\u641' '\u642' '\u6A9' '\u6AF' '\u644' '\u645' '\u646' '\u648' '\u647\u200D' '\u6CC';
	/* 'ا' 'ب' 'پ' 'ت' 'ث' 'ج' 'چ' 'ح' 'خ' 'د' 'ذ' 'ر' 'ز' 'ژ' 'س' 'ش' 'ص' 'ض' 'ط' 'ظ' 'ع' 'غ' 'ف' 'ق' 'ک' 'گ' 'ل' 'م' 'ن' 'و' 'ه‍' 'ی' */
}

/* Additive  */

@counter-style simple-upper-roman {
	type: additive;
	range: 1 4999;
	additive-glyphs: 1000 '\u4D', 500 '\u44', 100 '\u43', 50 '\u4C', 10 '\u58', 5 '\u56', 1 '\u49';
	/* 1000 'M', 500 'D', 100 'C', 50 'L', 10 'X', 5 'V', 1 'I' */
}

@counter-style simple-lower-roman {
	type: additive;
	range: 1 4999;
	additive-glyphs: 1000 '\u6D', 500 '\u64', 100 '\u63', 50 '\u6C', 10 '\u78', 5 '\u76', 1 '\u69';
	/* 1000 'm', 500 'd', 100 'c', 50 'l', 10 'x', 5 'v', 1 'i' */
}

@counter-style upper-roman {
	type: additive;
	range: 1 4999;
	additive-glyphs: 1000 '\u4D', 900 '\u43\u4D', 500 '\u44', 400 '\u43\u44', 100 '\u43', 90 '\u58\u43', 50 '\u4C', 40 '\u58\u4C', 10 '\u58', 9 '\u49\u58', 5 '\u56', 4 '\u49\u56', 1 '\u49';
	/* 1000 'M', 900 'CM', 500 'D', 400 'CD', 100 'C', 90 'XC', 50 'L', 40 'XL', 10 'X', 9 'IX', 5 'V', 4 'IV', 1 'I' */
}

@counter-style lower-roman {
	type: additive;
	range: 1 4999;
	additive-glyphs: 1000 '\u6D', 900 '\u63\u6D', 500 '\u64', 400 '\u63\u64', 100 '\u63', 90 '\u78\u63', 50 '\u6C', 40 '\u78\u6C', 10 '\u78', 9 '\u69\u78', 5 '\u76', 4 '\u69\u76', 1 '\u69';
	/* 1000 'm', 900 'cm', 500 'd', 400 'cd', 100 'c', 90 'xc', 50 'l', 40 'xl', 10 'x', 9 'ix', 5 'v', 4 'iv', 1 'i' */
}

@counter-style lower-armenian {
	type: additive;
	range: 1 9999;
	additive-glyphs: 9000 '\u584', 8000 '\u583', 7000 '\u582', 6000 '\u581', 5000 '\u580', 4000 '\u57F', 3000 '\u57E', 2000 '\u57D', 1000 '\u57C', 900 '\u57B', 800 '\u57A', 700 '\u579', 600 '\u578', 500 '\u577', 400 '\u576', 300 '\u575', 200 '\u574', 100 '\u573', 90 '\u572', 80 '\u571', 70 '\u570', 60 '\u56F', 50 '\u56E', 40 '\u56D', 30 '\u56C', 20 '\u56B', 10 '\u56A', 9 '\u569', 8 '\u568', 7 '\u567', 6 '\u566', 5 '\u565', 4 '\u564', 3 '\u563', 2 '\u562', 1 '\u561';
	/* 9000 'ք', 8000 'փ', 7000 'ւ', 6000 'ց', 5000 'ր', 4000 'տ', 3000 'վ', 2000 'ս', 1000 'ռ', 900 'ջ', 800 'պ', 700 'չ', 600 'ո', 500 'շ', 400 'ն', 300 'յ', 200 'մ', 100 'ճ', 90 'ղ', 80 'ձ', 70 'հ', 60 'կ', 50 'ծ', 40 'խ', 30 'լ', 20 'ի', 10 'ժ', 9 'թ', 8 'ը', 7 'է', 6 'զ', 5 'ե', 4 'դ', 3 'գ', 2 'բ', 1 'ա' */
}

@counter-style upper-armenian {
	type: additive;
	range: 1 9999;
	additive-glyphs: 9000 '\u554', 8000 '\u553', 7000 '\u552', 6000 '\u551', 5000 '\u550', 4000 '\u54F', 3000 '\u54E', 2000 '\u54D', 1000 '\u54C', 900 '\u54B', 800 '\u54A', 700 '\u549', 600 '\u548', 500 '\u547', 400 '\u546', 300 '\u545', 200 '\u544', 100 '\u543', 90 '\u542', 80 '\u541', 70 '\u540', 60 '\u53F', 50 '\u53E', 40 '\u53D', 30 '\u53C', 20 '\u53B', 10 '\u53A', 9 '\u539', 8 '\u538', 7 '\u537', 6 '\u536', 5 '\u535', 4 '\u534', 3 '\u533', 2 '\u532', 1 '\u531';
	/* 9000 'Ք', 8000 'Փ', 7000 'Ւ', 6000 'Ց', 5000 'Ր', 4000 'Տ', 3000 'Վ', 2000 'Ս', 1000 'Ռ', 900 'Ջ', 800 'Պ', 700 'Չ', 600 'Ո', 500 'Շ', 400 'Ն', 300 'Յ', 200 'Մ', 100 'Ճ', 90 'Ղ', 80 'Ձ', 70 'Հ', 60 'Կ', 50 'Ծ', 40 'Խ', 30 'Լ', 20 'Ի', 10 'Ժ', 9 'Թ', 8 'Ը', 7 'Է', 6 'Զ', 5 'Ե', 4 'Դ', 3 'Գ', 2 'Բ', 1 'Ա' */
}

@counter-style armenian {
	type: additive;
	range: 1 9999;
	additive-glyphs: 9000 '\u554', 8000 '\u553', 7000 '\u552', 6000 '\u551', 5000 '\u550', 4000 '\u54F', 3000 '\u54E', 2000 '\u54D', 1000 '\u54C', 900 '\u54B', 800 '\u54A', 700 '\u549', 600 '\u548', 500 '\u547', 400 '\u546', 300 '\u545', 200 '\u544', 100 '\u543', 90 '\u542', 80 '\u541', 70 '\u540', 60 '\u53F', 50 '\u53E', 40 '\u53D', 30 '\u53C', 20 '\u53B', 10 '\u53A', 9 '\u539', 8 '\u538', 7 '\u537', 6 '\u536', 5 '\u535', 4 '\u534', 3 '\u533', 2 '\u532', 1 '\u531';
	/* 9000 'Ք', 8000 'Փ', 7000 'Ւ', 6000 'Ց', 5000 'Ր', 4000 'Տ', 3000 'Վ', 2000 'Ս', 1000 'Ռ', 900 'Ջ', 800 'Պ', 700 'Չ', 600 'Ո', 500 'Շ', 400 'Ն', 300 'Յ', 200 'Մ', 100 'Ճ', 90 'Ղ', 80 'Ձ', 70 'Հ', 60 'Կ', 50 'Ծ', 40 'Խ', 30 'Լ', 20 'Ի', 10 'Ժ', 9 'Թ', 8 'Ը', 7 'Է', 6 'Զ', 5 'Ե', 4 'Դ', 3 'Գ', 2 'Բ', 1 'Ա' */
}

@counter-style georgian {
	type: additive;
	range: 1 19999;
	additive-glyphs: 10000 '\u10F5', 9000 '\u10F0', 8000 '\u10EF', 7000 '\u10F4', 6000 '\u10EE', 5000 '\u10ED', 4000 '\u10EC', 3000 '\u10EB', 2000 '\u10EA', 1000 '\u10E9', 900 '\u10E8', 800 '\u10E7', 700 '\u10E6', 600 '\u10E5', 500 '\u10E4', 400 '\u10F3', 300 '\u10E2', 200 '\u10E1', 100 '\u10E0', 90 '\u10DF', 80 '\u10DE', 70 '\u10DD', 60 '\u10F2', 50 '\u10DC', 40 '\u10DB', 30 '\u10DA', 20 '\u10D9', 10 '\u10D8', 9 '\u10D7', 8 '\u10F1', 7 '\u10D6', 6 '\u10D5', 5 '\u10D4', 4 '\u10D3', 3 '\u10D2', 2 '\u10D1', 1 '\u10D0';
	/* 10000 'ჵ', 9000 'ჰ', 8000 'ჯ', 7000 'ჴ', 6000 'ხ', 5000 'ჭ', 4000 'წ', 3000 'ძ', 2000 'ც', 1000 'ჩ', 900 'შ', 800 'ყ', 700 'ღ', 600 'ქ', 500 'ფ', 400 'ჳ', 300 'ტ', 200 'ს', 100 'რ', 90 'ჟ', 80 'პ', 70 'ო', 60 'ჲ', 50 'ნ', 40 'მ', 30 'ლ', 20 'კ', 10 'ი', 9 'თ', 8 'ჱ', 7 'ზ', 6 'ვ', 5 'ე', 4 'დ', 3 'გ', 2 'ბ', 1 'ა' */
}

@counter-style ancient-tamil {
	type: additive;
	range: 1 9999;
	additive-glyphs: 9000 '\uBEF\uBF2', 8000 '\uBEE\uBF2', 7000 '\uBED\uBF2', 6000 '\uBEC\uBF2', 5000 '\uBEB\uBF2', 4000 '\uBEA\uBF2', 3000 '\uBE9\uBF2', 2000 '\uBE8\uBF2', 1000 '\uBF2', 900 '\uBEF\uBF1', 800 '\uBEE\uBF1', 700 '\uBED\uBF1', 600 '\uBEC\uBF1', 500 '\uBEB\uBF1', 400 '\uBEA\uBF1', 300 '\uBE9\uBF1', 200 '\uBE8\uBF1', 100 '\uBF1', 90 '\uBEF\uBF0', 80 '\uBEE\uBF0', 70 '\uBED\uBF0', 60 '\uBEC\uBF0', 50 '\uBEB\uBF0', 40 '\uBEA\uBF0', 30 '\uBE9\uBF0', 20 '\uBE8\uBF0', 10 '\uBF0', 9 '\uBEF', 8 '\uBEE', 7 '\uBED', 6 '\uBEC', 5 '\uBEB', 4 '\uBEA', 3 '\uBE9', 2 '\uBE8', 1 '\uBE7';
	/* 9000 '௯௲', 8000 '௮௲', 7000 '௭௲', 6000 '௬௲', 5000 '௫௲', 4000 '௪௲', 3000 '௩௲', 2000 '௨௲', 1000 '௲', 900 '௯௱', 800 '௮௱', 700 '௭௱', 600 '௬௱', 500 '௫௱', 400 '௪௱', 300 '௩௱', 200 '௨௱', 100 '௱', 90 '௯௰', 80 '௮௰', 70 '௭௰', 60 '௬௰', 50 '௫௰', 40 '௪௰', 30 '௩௰', 20 '௨௰', 10 '௰', 9 '௯', 8 '௮', 7 '௭', 6 '௬', 5 '௫', 4 '௪', 3 '௩', 2 '௨', 1 '௧' */
}
	

Per http://www.ethiopic.org/w3c/css/WD-css3-lists-20020220-comments.html#armenianlists, we should have upper-coptic, lower-coptic, and coptic-numeric styles. The Coptic script was split out in Unicode 4.1 to occupy the block from U+2C80 to U+2CFF. Which characters should I use for each?

Per http://www.ethiopic.org/w3c/css/WD-css3-lists-20020220-comments.html#armenianlists, putting the circumflex above a digit in armenian numbering multiplies the digit by 1000. The draft currently states a 10,000 multiplier. Which is correct? (Having the multiplier be 1000 means that you can potentially write the thousands digit two ways, using either the set of thousands digits or the set of ones digits with a circumflex. The examples given in the note appear to use the former.)

Acknowledgments

The following people and documentation they wrote were very useful for defining the numbering systems: Alexander Savenkov, Aryeh Gregor, Frank Tang, Jonathan Rosenne, Karl Ove Hufthammer, Musheg Arakelyan, Nariné Renard Karapetyan, Randall Bart, Richard Ishida Simon Montagu

Changes From CSS2

As described in the introduction section, there are significant changes in this module when compared to CSS2.

  1. ''display:marker'' has been replaced with ''::marker''
  2. It is no longer possible to make end markers.
  3. The 'marker-offset' property is obsoleted.
  4. Markers are now aligned relative to the line box edge, rather than the border edge.
  5. Markers now have margins.
  6. The introduction of many new list style types as well as explicit algorithms for all list style types.
  7. Error handling rules for unknown list style types were changed to be consistent with the normal parsing error handling rules.
  8. The list-item predefined counter identifier has been introduced.

References

Normative references

Other references

Property index

Index