<pre class=metadata>
Title: CSS Counter Styles Module Level 3
Shortname: css-counter-styles
Level: 3
Status: ED
Work Status: Testing
Group: csswg
ED: https://drafts.csswg.org/css-counter-styles/
TR: https://www.w3.org/TR/css-counter-styles-3/
Previous Version: https://www.w3.org/TR/2017/CR-css-counter-styles-3-20171214/
Previous Version: https://www.w3.org/TR/2015/CR-css-counter-styles-3-20150611/
Previous Version: https://www.w3.org/TR/2014/WD-css-counter-styles-3-20140826/
Previous Version: https://www.w3.org/TR/2013/WD-css-counter-styles-3-20130718/
Previous Version: https://www.w3.org/TR/2013/WD-css-counter-styles-3-20130221/
Previous Version: https://www.w3.org/TR/2012/WD-css-counter-styles-3-20121009/
Editor: Tab Atkins Jr., Google, http://xanthir.com/contact/, w3cid 42199
Abstract: This module introduces the ''@counter-style'' rule, which allows authors to define their own custom counter styles for use with CSS list-marker and generated-content counters [[CSS-LISTS-3]]. It also predefines a set of common counter styles, including the ones present in CSS2 and CSS2.1.
Link Defaults: css-text-3 (dfn) grapheme cluster, css-pseudo-4 (selector) ::marker, dom-ls (dfn) ASCII case-insensitive
Deadline: 2015-05-03
At Risk: the <<image>> value in <<symbol>>
WPT Path Prefix: css/css-counter-styles/
WPT Display: open
</pre>
<style>
pre.stylesheet { white-space: pre-wrap; }
code.inline { display: inline-block; }
</style>

<pre class=link-defaults>
spec:css-text-3; type:dfn; text: grapheme cluster
spec:css-pseudo-4; type:selector; text: ::marker
spec:dom; type:dfn; text: ASCII case-insensitive
spec:css-values-3; type:dfn; text:identifier
</pre>

<h2 id='intro'>
Introduction</h2>

	CSS 1 defined a handful of useful counter styles based on the styles that HTML traditionally allowed on ordered and unordered lists.
	While this was expanded slightly by CSS2.1,
	it doesn't address the needs of worldwide typography.

	This module introduces the ''@counter-style'' rule which 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.
	It also defines some additional predefined counter styles,
	particularly ones which are common but complicated to represent with ''@counter-style''.


<h2 id='counter-styles'>
Counter Styles</h2>

	A <dfn export>counter style</dfn> defines how to convert a counter value into a string.
	Counter styles are composed of:

	<ul>
		<li>
			a name,
			to identify the style

		<li>
			an algorithm,
			which transforms integer counter values into a basic string representation

		<li>
			a negative sign,
			which is prepended or appended to the representation of a negative counter value.

		<li>
			a prefix,
			to prepend to the representation

		<li>
			a suffix
			to append to the representation

		<li>
			a range,
			which limits the values that a counter style handles

		<li>
			a spoken form,
			which describes how to read out the counter style in a speech synthesizer

		<li>
			and a fallback style,
			to render the representation with when the counter value is outside the counter style's range
			or the counter style otherwise can't render the counter value
	</ul>

	When asked to <dfn export lt='generate a counter|generate a counter representation'>generate a counter representation</dfn>
	using a particular counter style for a particular counter value,
	follow these steps:

	<ol>
		<li>
			If the counter style is unknown,
			exit this algorithm and instead <a>generate a counter representation</a>
			using the ''decimal'' style and the same counter value.

		<li>
			If the counter value is outside the '@counter-style/range' of the counter style,
			exit this algorithm and instead <a>generate a counter representation</a>
			using the counter style's fallback style and the same counter value.

		<li>
			Using the counter value and the counter algorithm for the counter style,
			generate an <dfn>initial representation for the counter value</dfn>.
			If the counter value is negative
			and the counter style <a>uses a negative sign</a>,
			instead generate an initial representation using the absolute value of the counter value.

		<li>
			Prepend symbols to the representation as specified in the '@counter-style/pad' descriptor.

		<li>
			If the counter value is negative
			and the counter style <a>uses a negative sign</a>,
			wrap the representation in the counter style's negative sign
			as specified in the '@counter-style/negative' descriptor.

		<li>
			Return the representation.
	</ol>

	<wpt title="General tests for counter styles">
		counter-style-at-rule/descriptor-calc.html
		counter-suffix.html
		idlharness.html
	</wpt>

	Note: '@counter-style/prefix' and '@counter-style/suffix' don't play a part in this algorithm.
	This is intentional;
	the prefix and suffix aren't part of the string returned by the counter() or counters() functions.
	Instead, the prefix and suffix are added by the algorithm that constructs the value of the 'content' property
	for the ''::marker'' pseudo-element.
	This also implies that the prefix and suffix always come from the specified counter-style,
	even if the actual representation is constructed by a fallback style.

	Some values of '@counter-style/system' (''symbolic'', ''additive'')
	and some descriptors ('@counter-style/pad')
	can generate representations with size linear to an author-supplied number.
	This can potentially be abused to generate excessively large representations
	and consume undue amounts of the user's memory or even hang their browser.
	User agents must support representations at least 60 Unicode codepoints long,
	but they may choose to instead use the fallback style for representations that would be longer than 60 codepoints.

<!--
 ███████   ██████   ███████  ██     ██ ██    ██ ████████ ████████ ████████           ██████  ████████ ██    ██ ██       ████████
██     ██ ██    ██ ██     ██ ██     ██ ███   ██    ██    ██       ██     ██         ██    ██    ██     ██  ██  ██       ██
██ ███ ██ ██       ██     ██ ██     ██ ████  ██    ██    ██       ██     ██         ██          ██      ████   ██       ██
██ ███ ██ ██       ██     ██ ██     ██ ██ ██ ██    ██    ██████   ████████  ███████  ██████     ██       ██    ██       ██████
██ █████  ██       ██     ██ ██     ██ ██  ████    ██    ██       ██   ██                 ██    ██       ██    ██       ██
██        ██    ██ ██     ██ ██     ██ ██   ███    ██    ██       ██    ██          ██    ██    ██       ██    ██       ██
 ███████   ██████   ███████   ███████  ██    ██    ██    ████████ ██     ██          ██████     ██       ██    ████████ ████████
-->

<h2 id='the-counter-style-rule'>
Defining Custom Counter Styles: the ''@counter-style'' rule</h2>

	The <dfn at-rule>@counter-style</dfn> rule allows authors to define a custom <a>counter style</a>.
	The components of a <a>counter style</a> are specified by descriptors in the ''@counter-style'' rule.
	The algorithm is specified implicitly by a combination of the ''@counter-style/system'', ''@counter-style/symbols'', and ''@counter-style/additive-symbols'' properties.

	The general form of an ''@counter-style'' rule is:

	<pre class=prod>
		@counter-style <<counter-style-name>> { <<declaration-list>> }
	</pre>

	<wpt>
		counter-name-case-sensitive.html
		counter-style-at-rule/access-from-shadow-dom.html
		counter-style-at-rule/override-in-shadow-dom.html
		counter-style-at-rule/redefine-attr-mapping.html
		counter-style-at-rule/redefine-builtin.html
		counter-style-at-rule/shadow-dom-part.html
	</wpt>

	<dfn>&lt;counter-style-name></dfn> is a <<custom-ident>>
	that is not an <a>ASCII case-insensitive</a> match for ''list-style-type/none''.
	When used here, to define a counter style,
	it also cannot be any of the [=non-overridable counter-style names=]
	(in other uses that merely reference a counter style,
	such as the ''extend'' system,
	these are allowed).
	The <<counter-style-name>> is a [=tree-scoped name=].

	<wpt>
		counter-style-at-rule/name-syntax.html
	</wpt>

	The <dfn>non-overridable counter-style names</dfn> are
	the keywords ''decimal'', ''disc'', ''square'', ''circle'', ''disclosure-open'', and ''disclosure-closed''.

	Note: Note that <<custom-ident>> also automatically excludes the <a spec=css-values>CSS-wide keywords</a>.
	In addition, some names, like ''list-style-position/inside'',
	are valid as counter style names,
	but conflict with the existing values of properties like 'list-style',
	and so won't be usable there.

	Counter style names are case-sensitive.
	However, the names defined in this specification are ASCII lowercased on parse
	wherever they are used as counter styles, e.g.
	in the 'list-style' set of properties,
	in the ''@counter-style'' rule,
	and in the ''counter()'' functions.

	<wpt>
		counter-style-at-rule/name-case-sensitivity.html
	</wpt>

	Each ''@counter-style'' rule specifies a value for every counter-style descriptor,
	either implicitly or explicitly.
	Those not given explicit value in the rule take the initial value listed with each descriptor in this specification.
	These descriptors apply solely within the context of the ''@counter-style'' rule in which they are defined,
	and do not apply to document language elements.
	There is no notion of which elements the descriptors apply to or whether the values are inherited by child elements.
	When a given descriptor occurs multiple times in a given ''@counter-style'' rule,
	only the last-specified valid value is used;
	all prior values for that descriptor must be ignored.

	Defining a ''@counter-style'' makes it available to the entire document in which it is included.
	If multiple ''@counter-style'' rules are defined with the same name,
	only one wins,
	according to standard cascade rules.
	''@counter-style'' rules cascade "atomically":
	if one replaces another of the same name,
	it replaces it <em>entirely</em>,
	rather than just replacing the specific descriptors it specifies.

	Note: Note that even the predefined counter styles can be overridden;
	the UA stylesheet occurs before any other stylesheets,
	so the predefined ones always lose in the cascade.

	This at-rule conforms with the forward-compatible parsing requirement of CSS;
	conformant parsers that don't understand these rules will ignore them without error.
	Any descriptors that are not recognized or implemented by a given user agent,
	or whose value does not match the grammars given here or in a future version of this specification,
	must be ignored in their entirety;
	they do not make the ''@counter-style'' rule invalid.

<!--
 ██████  ██    ██  ██████  ████████ ████████ ██     ██
██    ██  ██  ██  ██    ██    ██    ██       ███   ███
██         ████   ██          ██    ██       ████ ████
 ██████     ██     ██████     ██    ██████   ██ ███ ██
      ██    ██          ██    ██    ██       ██     ██
██    ██    ██    ██    ██    ██    ██       ██     ██
 ██████     ██     ██████     ██    ████████ ██     ██
-->

<h3 id='counter-style-system'>
Counter algorithms: the '@counter-style/system' descriptor</h3>

	<pre class='descdef'>
	Name: system
	For: @counter-style
	Value: cyclic | numeric | alphabetic | symbolic | additive | <span class=nobr>[fixed <<integer>>?]</span> | <span class=nobr>[ extends <<counter-style-name>> ]</span>
	Initial: symbolic
	</pre>

	<wpt>
		counter-style-at-rule/system-syntax.html
	</wpt>

	The '@counter-style/system' descriptor specifies which algorithm will be used to construct
	the counter's representation based on the counter value.  For example,
	''cyclic'' counter styles just cycle through their symbols repeatedly,
	while ''system/numeric'' counter styles interpret their symbols as digits and
	build their representation accordingly.
	The systems are defined in the following subsections.

	Each '@counter-style/system' value is associated with either the '@counter-style/symbols' or '@counter-style/additive-symbols' descriptors,
	and has a minimum length that the appropriate descriptor must have;
	each entry below defines what this is.
	If a ''@counter-style'' rule fails to meet this requirement,
	it does not define a [=counter style=].
	(The rule is still syntactically valid, but has no effect.)

<!--
 ██████  ██    ██  ██████  ██       ████  ██████
██    ██  ██  ██  ██    ██ ██        ██  ██    ██
██         ████   ██       ██        ██  ██
██          ██    ██       ██        ██  ██
██          ██    ██       ██        ██  ██
██    ██    ██    ██    ██ ██        ██  ██    ██
 ██████     ██     ██████  ████████ ████  ██████
-->

<h4 id="cyclic-system">
Cycling Symbols: the ''cyclic'' system</h4>

	The <dfn value for="@counter-style/system">cyclic</dfn> counter system cycles repeatedly through its provided symbols,
	looping back to the beginning when it reaches the end of the list.
	It can be used for simple bullets
	(just provide a single <a>counter symbol</a>),
	or for cycling through multiple symbols.
	The first <a>counter symbol</a> is used as the representation of the value 1,
	the second <a>counter symbol</a> (if it exists) is used as the representation of the value 2, etc.

	If the system is ''cyclic'',
	the '@counter-style/symbols' descriptor must contain at least one <a>counter symbol</a>,
	otherwise the rule does not define a counter style (but is still a valid rule).
	This system is defined over all counter values.

	<div class=example>
		A "triangle bullet" counter style can be defined as:

		<pre>
		@counter-style <dfn noexport>triangle</dfn> {
			system: cyclic;
			symbols: ‣;
			suffix: " ";
		}
		</pre>

		It will then produce lists that look like:

		<pre>
		‣  One
		‣  Two
		‣  Three
		</pre>
	</div>

	If there are <var>N</var> <a>counter symbols</a>
	and a representation is being constructed for the integer <var>value</var>,
	the representation is the <a>counter symbol</a>
	at index ( (<var>value</var>-1) mod <var>N</var>)
	of the list of <a>counter symbols</a> (0-indexed).

	<wpt>
		counter-style-at-rule/system-cyclic.html
		counter-style-at-rule/system-cyclic-invalid.html
	</wpt>

<!--
████████ ████ ██     ██ ████████ ████████
██        ██   ██   ██  ██       ██     ██
██        ██    ██ ██   ██       ██     ██
██████    ██     ███    ██████   ██     ██
██        ██    ██ ██   ██       ██     ██
██        ██   ██   ██  ██       ██     ██
██       ████ ██     ██ ████████ ████████
-->

<h4 id="fixed-system">
Exhaustible Symbols: the ''system/fixed'' system</h4>

	The <dfn value for="@counter-style/system">fixed</dfn> counter system runs through its list of counter symbols once,
	then falls back.
	It is useful 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.

	If the system is ''system/fixed'',
	the '@counter-style/symbols' descriptor must contain at least one <a>counter symbol</a>,
	otherwise the rule does not define a counter style (but is still a valid rule).
	This system is defined over counter values in a finite range,
	starting with the <a>first symbol value</a> and having a length equal to the length of the list of <a>counter symbols</a>.

	When this system is specified,
	it may optionally have an integer provided after it,
	which sets the <dfn export>first symbol value</dfn>.
	If it is omitted, the <a>first symbol value</a> is 1.

	<div class=example>
		A "box-corner" counter style can be defined as:

		<pre>
		@counter-style <dfn noexport>box-corner</dfn> {
			system: fixed;
			symbols: ◰ ◳ ◲ ◱;
			suffix: ': ';
		}
		</pre>

		It will then produce lists that look like:

		<pre>
		◰:  One
		◳:  Two
		◲:  Three
		◱:  Four
		5:  Five
		6:  Six
		</pre>
	</div>

	The first <a>counter symbol</a> is the representation for the <a>first symbol value</a>,
	and subsequent counter values are represented by subsequent <a>counter symbols</a>.
	Once the list of <a>counter symbols</a> is exhausted,
	further values cannot be represented by this counter style,
	and must instead be represented by the fallback counter style.

	<wpt>
		counter-style-at-rule/system-fixed.html
		counter-style-at-rule/system-fixed-invalid.html
	</wpt>

<!--
 ██████  ██    ██ ██     ██ ████████   ███████  ██       ████  ██████
██    ██  ██  ██  ███   ███ ██     ██ ██     ██ ██        ██  ██    ██
██         ████   ████ ████ ██     ██ ██     ██ ██        ██  ██
 ██████     ██    ██ ███ ██ ████████  ██     ██ ██        ██  ██
      ██    ██    ██     ██ ██     ██ ██     ██ ██        ██  ██
██    ██    ██    ██     ██ ██     ██ ██     ██ ██        ██  ██    ██
 ██████     ██    ██     ██ ████████   ███████  ████████ ████  ██████
-->

<h4 id="symbolic-system">
Repeating Symbols: the ''symbolic'' system</h4>

	The <dfn value for="system">symbolic</dfn> counter system cycles repeatedly through its provided symbols,
	doubling, tripling, etc. the symbols on each successive pass through the list.
	For example, if the original symbols were "*" and "†",
	then on the second pass they would instead be "**" and "††",
	while on the third they would be "***"and "†††", etc.
	It can be used for footnote-style markers,
	and is also sometimes used for alphabetic-style lists for a slightly different presentation than what the ''system/alphabetic'' system presents.

	If the system is ''symbolic'',
	the '@counter-style/symbols' descriptor must contain at least one <a>counter symbol</a>,
	otherwise the rule does not define a counter style (but is still a valid rule).
	This system is defined only over strictly positive counter values.

	<div class=example>
		An "footnote" counter style can be defined as:

		<pre>
		@counter-style <dfn noexport>footnote</dfn> {
			system: symbolic;
			symbols: '*' ⁑ † ‡;
			suffix: " ";
		}
		</pre>

		It will then produce lists that look like:

		<pre>
		*   One
		⁑   Two
		†   Three
		‡   Four
		**  Five
		⁑⁑  Six
		</pre>
	</div>

	<div class=example>
		Some style guides mandate a list numbering that looks similar to ''upper-alpha'',
		but repeats differently after the first 26 values,
		instead going "AA", "BB", "CC", etc.
		This can be achieved with the symbolic system:

		<pre>
		@counter-style <dfn noexport>upper-alpha-legal</dfn> {
			system: symbolic;
			symbols: 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;
		}
		</pre>

		This style is identical to ''upper-alpha'' through the first 27 values,
		but they diverge after that, with ''upper-alpha'' going "AB", "AC", "AD", etc.
		Starting at the 53rd value, ''upper-alpha'' goes "BA", "BB", "BC", etc.,
		while this style jumps into triple digits with "AAA", "BBB", "CCC", etc.
	</div>

	To construct the representation, run the following algorithm:

	Let <var>N</var> be the length of the list of <a>counter symbols</a>,
	<var>value</var> initially be the counter value,
	<var>S</var> initially be the empty string,
	and <var>symbol(n)</var> be the nth <a>counter symbol</a> in the list of <a>counter symbols</a> (0-indexed).

	<ol>
		<li>Let the <var>chosen symbol</var> be <code class='inline'>symbol( (<var>value</var> - 1) mod <var>N</var>)</code>.

		<li>Let the <var>representation length</var> be <code class='inline'>ceil( <var>value</var> / <var>N</var> )</code>.

		<li>Append the <var>chosen symbol</var> to <var>S</var> a number of times equal to the <var>representation length</var>.
	</ol>

	Finally, return <var>S</var>.

	<wpt>
		counter-style-at-rule/system-symbolic.html
		counter-style-at-rule/system-symbolic-invalid.html
	</wpt>

<!--
   ███    ██       ████████  ██     ██    ███    ████████  ████████ ████████ ████  ██████
  ██ ██   ██       ██     ██ ██     ██   ██ ██   ██     ██ ██          ██     ██  ██    ██
 ██   ██  ██       ██     ██ ██     ██  ██   ██  ██     ██ ██          ██     ██  ██
██     ██ ██       ████████  █████████ ██     ██ ████████  ██████      ██     ██  ██
█████████ ██       ██        ██     ██ █████████ ██     ██ ██          ██     ██  ██
██     ██ ██       ██        ██     ██ ██     ██ ██     ██ ██          ██     ██  ██    ██
██     ██ ████████ ██        ██     ██ ██     ██ ████████  ████████    ██    ████  ██████
-->

<h4 id="alphabetic-system">
Bijective Numerals: the ''alphabetic'' system</h4>

	The <dfn value for="@counter-style/system">alphabetic</dfn> counter system interprets the list of <a>counter symbols</a> as digits to an <em>alphabetic</em> numbering system,
	similar to the default ''lower-alpha'' counter style,
	which wraps from "a", "b", "c", to "aa", "ab", "ac".
	Alphabetic numbering systems do not contain a digit representing 0;
	so the first value when a new digit is added is composed solely of the first digit.
	Alphabetic numbering systems are commonly used for lists,
	and also appear in many spreadsheet programs to number columns.
	The first <a>counter symbol</a> in the list is interpreted as the digit 1,
	the second as the digit 2,
	and so on.

	If the system is ''system/alphabetic'',
	the '@counter-style/symbols' descriptor must contain at least two <a>counter symbols</a>,
	otherwise the rule does not define a counter style (but is still a valid rule).
	This system is defined only over strictly positive counter values.

	<div class=example>
		A counter style using go stones can be defined as:

		<pre>
		@counter-style <dfn noexport>go</dfn> {
			system: alphabetic;
			symbols: url(white.svg) url(black.svg);
			suffix: " ";
		}
		</pre>

		It will then produce lists that look like:

		<div class='alphabetic-example'>
			<span><img src=images/white.svg width=16 height=16 alt=""></span> One<br>
			<span><img src=images/black.svg width=16 height=16 alt=""></span> Two<br>
			<span><img src=images/white.svg width=16 height=16 alt=""><img src=images/white.svg width=16 height=16 alt=""></span>  Three<br>
			<span><img src=images/white.svg width=16 height=16 alt=""><img src=images/black.svg width=16 height=16 alt=""></span>  Four<br>
			<span><img src=images/black.svg width=16 height=16 alt=""><img src=images/white.svg width=16 height=16 alt=""></span>  Five<br>
			<span><img src=images/black.svg width=16 height=16 alt=""><img src=images/black.svg width=16 height=16 alt=""></span>  Six<br>
			<span><img src=images/white.svg width=16 height=16 alt=""><img src=images/white.svg width=16 height=16 alt=""><img src=images/white.svg width=16 height=16 alt=""></span> Seven
		</div>

		Note: This example requires support for SVG images to display correctly.
	</div>

	If there are <var>N</var> <a>counter symbols</a>,
	the representation is a base <var>N</var> alphabetic number using the <a>counter symbols</a> as digits.
	To construct the representation, run the following algorithm:

	Let <var>N</var> be the length of the list of <a>counter symbols</a>,
	<var>value</var> initially be the counter value,
	<var>S</var> initially be the empty string,
	and <var>symbol(n)</var> be the nth <a>counter symbol</a> in the list of <a>counter symbols</a> (0-indexed).

	While <var>value</var> is not equal to 0:

	<ol>
		<li>Set <var>value</var> to <code><var>value</var> - 1</code>.

		<li>Prepend <var>symbol( <var>value</var> mod <var>N</var> )</var>
		to <var>S</var>.

		<li>Set <var>value</var> to <code>floor( <var>value</var> / <var>N</var> )</code>.
	</ol>

	Finally, return <var>S</var>.

	<wpt>
		counter-style-at-rule/system-alphabetic.html
		counter-style-at-rule/system-alphabetic-invalid.html
	</wpt>

<!--
██    ██ ██     ██ ██     ██ ████████ ████████  ████  ██████
███   ██ ██     ██ ███   ███ ██       ██     ██  ██  ██    ██
████  ██ ██     ██ ████ ████ ██       ██     ██  ██  ██
██ ██ ██ ██     ██ ██ ███ ██ ██████   ████████   ██  ██
██  ████ ██     ██ ██     ██ ██       ██   ██    ██  ██
██   ███ ██     ██ ██     ██ ██       ██    ██   ██  ██    ██
██    ██  ███████  ██     ██ ████████ ██     ██ ████  ██████
-->

<h4 id="numeric-system">
Positional Numerals: the ''numeric'' system</h4>

	The <dfn value for="@counter-style/system">numeric</dfn> counter system interprets the list of <a>counter symbols</a>
	as digits to a "place-value" numbering system,
	similar to the default ''decimal'' counter style.
	The first <a>counter symbol</a> in the list is interpreted as the digit 0,
	the second as the digit 1,
	and so on.

	If the system is ''system/numeric'',
	the '@counter-style/symbols' descriptor must contain at least two <a>counter symbols</a>,
	otherwise the rule does not define a counter style (but is still a valid rule).
	This system is defined over all counter values.

	<div class=example>
		A "trinary" counter style can be defined as:

		<pre>
		@counter-style <dfn noexport>trinary</dfn> {
			system: numeric;
			symbols: '0' '1' '2';
		}
		</pre>

		It will then produce lists that look like:

		<pre>
		1.   One
		2.   Two
		10.  Three
		11.  Four
		12.  Five
		20.  Six
		</pre>
	</div>

	If there are <var>N</var> <a>counter symbols</a>,
	the representation is a base <var>N</var> number using the <a>counter symbols</a> as digits.
	To construct the representation, run the following algorithm:

	Let <var>N</var> be the length of the list of <a>counter symbols</a>,
	<var>value</var> initially be the counter value,
	<var>S</var> initially be the empty string,
	and <var>symbol(n)</var> be the nth <a>counter symbol</a> in the list of <a>counter symbols</a> (0-indexed).

	<ol>
		<li>If <var>value</var> is 0, append <code>symbol(0)</code> to
		<var>S</var> and return <var>S</var>.

		<li>While <var>value</var> is not equal to 0:

			<ol>
				<li>Prepend <var>symbol( <var>value</var> mod <var>N</var> )</var>
				to <var>S</var>.

				<li>Set <var>value</var> to <code>floor( <var>value</var> / <var>N</var> )</code>.
			</ol>

		<li>Return <var>S</var>.
	</ol>

	<wpt>
		counter-style-at-rule/system-numeric.html
		counter-style-at-rule/system-numeric-invalid.html
	</wpt>

<!--
   ███    ████████  ████████  ████ ████████ ████ ██     ██ ████████
  ██ ██   ██     ██ ██     ██  ██     ██     ██  ██     ██ ██
 ██   ██  ██     ██ ██     ██  ██     ██     ██  ██     ██ ██
██     ██ ██     ██ ██     ██  ██     ██     ██  ██     ██ ██████
█████████ ██     ██ ██     ██  ██     ██     ██   ██   ██  ██
██     ██ ██     ██ ██     ██  ██     ██     ██    ██ ██   ██
██     ██ ████████  ████████  ████    ██    ████    ███    ████████
-->

<h4 id="additive-system">
Accumulating Numerals: the ''additive'' system</h4>

	The <dfn value for="@counter-style/system">additive</dfn> counter system is used to represent "sign-value" numbering systems,
	which, rather than reusing digits in different positions to change their value,
	define additional digits with much larger values,
	so that the value of the number can be obtained by adding all the digits together.
	This is used in Roman numerals
	and other numbering systems around the world.

	If the system is ''additive'',
	the '@counter-style/additive-symbols' descriptor must contain at least one <a>additive tuple</a>,
	otherwise the rule does not define a counter style (but is still a valid rule).
	This system is nominally defined over all counter values
	(see algorithm, below, for exact details).

	<div class=example>
		A "dice" counter style can be defined as:

		<pre>
		@counter-style <dfn noexport>dice</dfn> {
			system: additive;
			additive-symbols: 6 ⚅, 5 ⚄, 4 ⚃, 3 ⚂, 2 ⚁, 1 ⚀;
			suffix: " ";
		}
		</pre>

		It will then produce lists that look like:

		<pre>
		  ⚀  One
		  ⚁  Two
		  ⚂  Three
		...
		 ⚅⚄  Eleven
		 ⚅⚅  Twelve
		⚅⚅⚀  Thirteen
		</pre>
	</div>

	<div algorithm="additive representation">
		To construct the representation:

		1. Let |value| initially be the counter value,
			|S| initially be the empty string,
			and |symbol list| initially be the list of <a>additive tuples</a>.

		2. If |value| is zero:

			1. If |symbol list| contains a tuple with a weight of zero,
				append that tuple's <a>counter symbol</a> to |S| and return |S|.

			2. Otherwise, the given counter value cannot be represented by this counter style,
				and must instead be represented by the fallback counter style.

		3. For each |tuple| in |symbol list|:

			1. Let |symbol| and |weight| be |tuple|'s [=counter symbol=] and weight, respectively.

			2. If |weight| is zero, or |weight| is greater than |value|,
				[=iteration/continue=].

			3. Let |reps| be <code>floor( |value| / |weight| )</code>.

			4. Append |symbol| to |S| |reps| times.

			5. Decrement |value| by <code>|weight| * |reps|</code>.

			6. If |value| is zero, return |S|.

		4. Assertion: |value| is still non-zero.

			The given counter value cannot be represented by this counter style,
			and must instead be represented by the fallback counter style.
	</div>

	<wpt>
		counter-style-at-rule/system-additive.html
		counter-style-at-rule/system-additive-invalid.html
	</wpt>

	Note: All of the predefined additive ''@counter-style'' rules in this specification
	produce representations for every value in their range,
	but it's possible to produce values for ''@counter-style/additive-symbols'' that will fail to find a representation
	with the algorithm defined above,
	even though theoretically a representation could be found.
	For example, if a ''@counter-style'' was defined with ''additive-symbols: 3 "a", 2 "b";'',
	the algorithm defined above will fail to find a representation for a counter value of 4,
	even though theoretically a "bb" representation would work.
	While unfortunate, this is required to maintain the property that the algorithm runs in linear time
	relative to the size of the counter value.

<!--
████████ ██     ██ ████████ ████████ ██    ██ ████████   ██████
██        ██   ██     ██    ██       ███   ██ ██     ██ ██    ██
██         ██ ██      ██    ██       ████  ██ ██     ██ ██
██████      ███       ██    ██████   ██ ██ ██ ██     ██  ██████
██         ██ ██      ██    ██       ██  ████ ██     ██       ██
██        ██   ██     ██    ██       ██   ███ ██     ██ ██    ██
████████ ██     ██    ██    ████████ ██    ██ ████████   ██████
-->

<h4 id="extends-system">
Building from Existing Counter Styles: the ''extends'' system
<span id='override-system'></span></h4>

	The <dfn value for="@counter-style/system">extends</dfn> system allows an author to use the algorithm of another counter style,
	but alter other aspects,
	such as the negative sign or the suffix.
	If a counter style uses the ''extends'' system,
	any unspecified descriptors must be taken from the extended counter style specified,
	rather than taking their initial values.

	If a ''@counter-style'' uses the ''extends'' system,
	it must not contain a '@counter-style/symbols' or '@counter-style/additive-symbols' descriptor,
	otherwise the rule does not define a counter style (but is still a valid rule).

	If the specified <<counter-style-name>> is an [=ASCII case-insensitive=] match
	for ''disc'', ''circle'', ''square'', ''disclosure-open'', or ''disclosure-closed''
	(any of the predefined symbolic counter styles),
	using ''extend'' extends from the “standard” definition of the rules
	provided in the normative stylesheet
	(rather than the exception allowing them to be drawn in a different, user-agent-specific fashion.)

	If the specified counter style name isn't the name of any defined counter style,
	it must be treated as if it was extending the ''decimal'' counter style.
	If one or more ''@counter-style'' rules form a cycle with their ''extends'' values,
	all of the counter styles participating in the cycle
	must be treated as if they were extending the ''decimal'' counter style instead.

	<div class='example'>
		For example, if you wanted a counter style that was identical to decimal,
		but used a parenthesis rather than a period after it, like:

		<pre>
		1) first item
		2) second item
		3) third item
		</pre>

		Rather than writing up an entirely new counter style,
		this can be done by just extending ''decimal'':

		<pre>
		@counter-style decimal-paren {
			system: extends decimal;
			suffix: ") ";
		}
		</pre>
	</div>

	<wpt>
		counter-style-at-rule/dependent-builtin.html
		counter-style-at-rule/system-extends.html
		counter-style-at-rule/system-extends-fixed.html
		counter-style-at-rule/system-extends-invalid.html
	</wpt>

<!--
██    ██ ████████  ██████      ███    ████████ ████ ██     ██ ████████
███   ██ ██       ██    ██    ██ ██      ██     ██  ██     ██ ██
████  ██ ██       ██         ██   ██     ██     ██  ██     ██ ██
██ ██ ██ ██████   ██   ████ ██     ██    ██     ██  ██     ██ ██████
██  ████ ██       ██    ██  █████████    ██     ██   ██   ██  ██
██   ███ ██       ██    ██  ██     ██    ██     ██    ██ ██   ██
██    ██ ████████  ██████   ██     ██    ██    ████    ███    ████████
-->

<h3 id='counter-style-negative'>
Formatting negative values: the '@counter-style/negative' descriptor</h3>

	<pre class='descdef'>
	Name: negative
	For: @counter-style
	Value: <<symbol>> <<symbol>>?
	Initial: "-"
	</pre>

	<wpt>
		counter-style-at-rule/descriptor-negative.html
		counter-style-at-rule/descriptor-negative-invalid.html
		counter-style-at-rule/negative-syntax.html
	</wpt>

	The '@counter-style/negative' descriptor defines how to alter the representation when
	the counter value is negative.

	The first <<symbol>> in the value is prepended to the representation when the
	counter value is negative.  The second <<symbol>>, if specified, is appended
	to the representation when the counter value is negative.

	<div class='example'>
		For example, specifying ''negative: "(" ")";'' will make negative
		values be wrapped in parentheses, which is sometimes used in financial
		contexts, like "(2) (1) 0 1 2 3...".
	</div>

	Not all '@counter-style/system' values use a negative sign.
	In particular, a counter style <dfn export lt="use a negative sign|uses a negative sign">uses a negative sign</dfn>
	if its '@counter-style/system' value is
	''symbolic'',
	''system/alphabetic'',
	''system/numeric'',
	''additive'',
	or ''extends'' if the extended counter style itself <a>uses a negative sign</a>.
	If a counter style does not <a>use a negative sign</a>,
	it ignores the negative sign when <a lt="generate a counter representation">generating a counter representation</a>.

<!--
████████  ████████  ████████ ████████ ████ ██     ██
██     ██ ██     ██ ██       ██        ██   ██   ██
██     ██ ██     ██ ██       ██        ██    ██ ██
████████  ████████  ██████   ██████    ██     ███
██        ██   ██   ██       ██        ██    ██ ██
██        ██    ██  ██       ██        ██   ██   ██
██        ██     ██ ████████ ██       ████ ██     ██
-->

<h3 id='counter-style-prefix'>
Symbols before the marker: the '@counter-style/prefix' descriptor</h3>

	<pre class='descdef'>
	Name: prefix
	For: @counter-style
	Value: <<symbol>>
	Initial: ""
	</pre>

	<wpt>
		counter-style-at-rule/descriptor-prefix.html
		counter-style-at-rule/descriptor-prefix-invalid.html
		counter-style-at-rule/prefix-suffix-syntax.html
	</wpt>

	The '@counter-style/prefix' descriptor specifies a <<symbol>>
	that is prepended to the marker representation.
	Prefixes come before any negative sign.

	Note: Prefixes are only added by the algorithm for constructing
	the default contents of the ''::marker'' pseudo-element; the prefix is not
	added automatically when the ''counter()'' or ''counters()'' functions are used.

<!--
 ██████  ██     ██ ████████ ████████ ████ ██     ██
██    ██ ██     ██ ██       ██        ██   ██   ██
██       ██     ██ ██       ██        ██    ██ ██
 ██████  ██     ██ ██████   ██████    ██     ███
      ██ ██     ██ ██       ██        ██    ██ ██
██    ██ ██     ██ ██       ██        ██   ██   ██
 ██████   ███████  ██       ██       ████ ██     ██
-->

<h3 id='counter-style-suffix'>
Symbols after the marker: the '@counter-style/suffix' descriptor</h3>

	<pre class='descdef'>
	Name: suffix
	For: @counter-style
	Value: <<symbol>>
	Initial: ". "
	</pre>

	<wpt>
		counter-style-at-rule/descriptor-suffix.html
		counter-style-at-rule/descriptor-suffix-invalid.html
	</wpt>

	The '@counter-style/suffix' descriptor specifies a <<symbol>>
	that is appended to the marker representation.
	Suffixes are added to the representation after negative signs.

	Note: Suffixes are only added by the algorithm for constructing
	the default contents of the ''::marker'' pseudo-element; the suffix is not
	added automatically when the counter() or counters() functions are used.

<!--
████████     ███    ██    ██  ██████   ████████
██     ██   ██ ██   ███   ██ ██    ██  ██
██     ██  ██   ██  ████  ██ ██        ██
████████  ██     ██ ██ ██ ██ ██   ████ ██████
██   ██   █████████ ██  ████ ██    ██  ██
██    ██  ██     ██ ██   ███ ██    ██  ██
██     ██ ██     ██ ██    ██  ██████   ████████
-->

<h3 id='counter-style-range'>
Limiting the counter scope: the '@counter-style/range' descriptor</h3>

	<pre class='descdef'>
	Name: range
	For: @counter-style
	Value: [ [ <<integer>> | infinite ]{2} ]# | auto
	Initial: auto
	</pre>

	<wpt>
		counter-style-at-rule/descriptor-range.html
		counter-style-at-rule/descriptor-range-invalid.html
		counter-style-at-rule/range-syntax.html
	</wpt>

	The '@counter-style/range' descriptor defines the ranges over which the counter style is defined.
	If a counter style is used to represent a counter value outside of its ranges,
	the counter style instead drops down to its fallback counter style.

	<dl dfn-for="@counter-style/range">
		<dt><dfn value>auto</dfn>
		<dd>
			The range depends on the counter system:

			<ul>
				<li>
					For ''cyclic'', ''system/numeric'', and ''system/fixed'' systems,
					the range is negative infinity to positive infinity.

				<li>
					For ''system/alphabetic'' and ''symbolic'' systems,
					the range is 1 to positive infinity.

				<li>
					For ''additive'' systems,
					the range is 0 to positive infinity.

				<li>
					For ''extends'' systems,
					the range is whatever ''range/auto'' would produce for the extended system;
					if extending a complex predefined style (<a section href="#complex-predefined-counters"></a>),
					the range is the style's defined range.
			</ul>

		<dt>[ [ <<integer>> | infinite ]{2} ]#
		<dd>
			This defines a comma-separated list of ranges.
			For each individual range,
			the first value is the lower bound
			and the second value is the upper bound.
			This range is inclusive - it contains both the lower and upper bound numbers.
			If ''range/infinite'' is used as the first value in a range,
			it represents negative infinity;
			if used as the second value,
			it represents positive infinity.
			The range of the counter style is the union of all the ranges defined in the list.

			If the lower bound of any range is higher than the upper bound,
			the entire descriptor is invalid and must be ignored.
	</dl>

	Implementations must support ranges with a lower bound of at least -2<sup>15</sup>
	and an upper bound of at least 2<sup>15</sup>-1
	(the range of a signed 2-byte int).
	They may support higher ranges.
	If any specified bound is outside of the implementation's supported bounds,
	it must be treated as the closest bound that the implementation does support.

<!--
████████     ███    ████████
██     ██   ██ ██   ██     ██
██     ██  ██   ██  ██     ██
████████  ██     ██ ██     ██
██        █████████ ██     ██
██        ██     ██ ██     ██
██        ██     ██ ████████
-->

<h3 id='counter-style-pad'>
Zero-Padding and Constant-Width Representations: the '@counter-style/pad' descriptor</h3>

	<pre class='descdef'>
	Name: pad
	For: @counter-style
	Value: <<integer [0,∞]>> && <<symbol>>
	Initial: 0 ""
	</pre>

	<wpt>
		counter-style-at-rule/descriptor-pad.html
		counter-style-at-rule/descriptor-pad-invalid.html
		counter-style-at-rule/pad-syntax.html
	</wpt>

	The '@counter-style/pad' descriptor allows an author to specify a "fixed-width" counter style,
	where representations shorter than the pad value are padded with a particular <<symbol>>.
	Representations larger than the specified pad value are constructed as normal.

	<dl>
		<dt><<integer [0,∞]>> &amp;&amp; <<symbol>>
		<dd>
			The <<integer>> specifies a minimum length that all counter representations must reach.

			Let <var>difference</var> be the provided <<integer>>
			minus the number of <a>grapheme clusters</a> in the <a>initial representation for the counter value</a>.
			<span class='note'>(Note that, per the algorithm to <a>generate a counter representation</a>,
			this occurs before adding prefixes/suffixes/negatives.)</span>
			If the counter value is negative
			and the counter style <a>uses a negative sign</a>,
			further reduce <var>difference</var>
			by the number of <a>grapheme clusters</a> in the counter style’s '@counter-style/negative' descriptor’s <<symbol>>(s).

			If <var>difference</var> is greater than zero,
			prepend <var>difference</var> copies of the specified <<symbol>> to the representation.

			Negative <<integer>> values are not allowed.

	</dl>

	<div class='example'>
		The most common example of "fixed-width" numbering is zero-padded decimal numbering.
		If an author knows that the numbers used will be less than a thousand, for example,
		it can be zero-padded with a simple ''pad: 3 "0";'' descriptor,
		ensuring that all of the representations are 3 digits wide.

			This will cause, for example,
			1 to be represented as "001",
			20 to be represented as "020",
			300 to be represented as "300",
			4000 to be represented as "4000",
			and -5 to be represented as "-05".
	</div>

	Note: The '@counter-style/pad' descriptor counts the number of <a>grapheme clusters</a> in the representation,
	but pads it with <<symbol>>s.
	If the specified '@counter-style/pad' <<symbol>> is multi-character,
	this will likely not have the desired effect.
	Unfortunately, there's no way to use the number of <a>grapheme clusters</a> in the '@counter-style/pad' <<symbol>>
	without violating useful constraints.
	It is recommended that authors only specify <<symbol>>s of a single <a>grapheme cluster</a>
	in the '@counter-style/pad' descriptor.

<!--
████████    ███    ██       ██       ████████     ███     ██████  ██    ██
██         ██ ██   ██       ██       ██     ██   ██ ██   ██    ██ ██   ██
██        ██   ██  ██       ██       ██     ██  ██   ██  ██       ██  ██
██████   ██     ██ ██       ██       ████████  ██     ██ ██       █████
██       █████████ ██       ██       ██     ██ █████████ ██       ██  ██
██       ██     ██ ██       ██       ██     ██ ██     ██ ██    ██ ██   ██
██       ██     ██ ████████ ████████ ████████  ██     ██  ██████  ██    ██
-->

<h3 id='counter-style-fallback'>
Defining fallback: the '@counter-style/fallback' descriptor</h3>

	<pre class='descdef'>
	Name: fallback
	For: @counter-style
	Value: <<counter-style-name>>
	Initial: decimal
	</pre>

	<wpt>
		counter-style-at-rule/descriptor-fallback.html
		counter-style-at-rule/descriptor-fallback-invalid.html
		counter-style-at-rule/fallback.html
		counter-style-at-rule/fallbacks-in-shadow-dom.html
	</wpt>

	The '@counter-style/fallback' descriptor specifies a fallback counter style to be used
	when the current counter style can't create a representation for a given
	counter value.  For example, if a counter style defined with a range of 1-10
	is asked to represent a counter value of 11, the counter value's representation
	is instead constructed with the fallback counter style (or possibly the
	fallback style's fallback style, if the fallback style can't represent that
	value, etc.).

	If the value of the '@counter-style/fallback' descriptor isn't the name of any
	defined counter style, the used value of the '@counter-style/fallback' descriptor
	is ''decimal'' instead.  Similarly, while following fallbacks to find
	a counter style that can render the given counter value, if a loop in the
	specified fallbacks is detected, the ''decimal'' style must be used instead.

	<p class='note'>Note that it is not necessarily an error to specify fallback
	loops.  For example, if an author desires a counter style with significantly
	different representations for even and odd counter values, they may find it
	easiest to define one style that can only represent odd values and one that
	can only represent even values, and specify each as the fallback for the
	other one.  Though the fallback graph is circular, at no point do you encounter
	a loop while following these fallbacks - every counter value is represented
	by one or the other counter style.

<!--
 ██████  ██    ██ ██     ██ ████████   ███████  ██        ██████
██    ██  ██  ██  ███   ███ ██     ██ ██     ██ ██       ██    ██
██         ████   ████ ████ ██     ██ ██     ██ ██       ██
 ██████     ██    ██ ███ ██ ████████  ██     ██ ██        ██████
      ██    ██    ██     ██ ██     ██ ██     ██ ██             ██
██    ██    ██    ██     ██ ██     ██ ██     ██ ██       ██    ██
 ██████     ██    ██     ██ ████████   ███████  ████████  ██████
-->

<h3 id='counter-style-symbols'>
Marker characters: the '@counter-style/symbols' and '@counter-style/additive-symbols' descriptors</h3>

	<pre class='descdef'>
	Name: symbols
	For: @counter-style
	Value: <<symbol>>+
	Initial: n/a
	</pre>

	<pre class='descdef'>
	Name: additive-symbols
	For: @counter-style
	Value: [ <<integer [0,∞]>> &amp;&amp; <<symbol>> ]#
	Initial: n/a
	</pre>

	<wpt>
		counter-style-at-rule/additive-symbols-syntax.html
		counter-style-at-rule/descriptor-symbols.html
		counter-style-at-rule/descriptor-symbols-invalid.html
		counter-style-at-rule/symbols-syntax.html
	</wpt>

	<pre class='prod'><dfn>&lt;symbol></dfn> = <<string>> | <<image>> | <<custom-ident>></pre>

	<wpt>
		counter-style-at-rule/broken-symbols.html
		counter-style-at-rule/empty-string-symbol.html
	</wpt>

	The '@counter-style/symbols' and '@counter-style/additive-symbols' descriptors specify the symbols
	used by the marker-construction algorithm specified by the '@counter-style/system' descriptor.
	The ''@counter-style'' rule must have a valid '@counter-style/symbols' descriptor
	if the counter system is
	''cyclic'', ''system/numeric'', ''system/alphabetic'', ''symbolic'', or ''system/fixed'',
	or a valid '@counter-style/additive-symbols' descriptor
	if the counter system is ''additive'';
	otherwise, the ''@counter-style'' does not define a <a>counter style</a>
	(but is still a valid <a>at-rule</a>).

	Some counter systems specify that the '@counter-style/symbols' descriptor must have at least two entries.
	If the counter style's system is such,
	and the '@counter-style/symbols' descriptor has only a single entry,
	the ''@counter-style'' rule does not define a [=counter style=].

	Each entry in the '@counter-style/symbols' descriptor's value defines a <dfn export>counter symbol</dfn>,
	which is interpreted differently based on the counter style's system.
	Each entry in the '@counter-style/additive-symbols' descriptor's value defines an <dfn export>additive tuple</dfn>,
	which consists of a <a>counter symbol</a> and an integer weight.
	Each weight must be a non-negative integer,
	and the <a>additive tuples</a> must be specified in order of strictly descending weight;
	otherwise, the declaration is invalid and must be ignored.

	<a>Counter symbols</a> may be strings, images, or identifiers,
	and the three types can be mixed in a single descriptor.
	Counter representations are constructed by concatenating counter symbols together.
	Identifiers are rendered as strings containing the same characters.
	Images are rendered as inline replaced elements.
	The <a>default object size</a> of an image <a>counter symbol</a>
	is a 1em by 1em square.

	Note: The <<image>> syntax in <<symbol>> is currently at-risk.
	No implementations have plans to implement it currently,
	and it complicates some usages of ''counter()''
	in ways that haven't been fully handled.

	Note: If using identifiers rather than strings to define the symbols,
	be aware of the syntax of identifiers.
	In particular, ascii non-letters like "*" are not identifiers,
	and so must be quoted in a string.
	Hex escapes,
	used in several of the counter styles defined in this specification,
	"eat" the following space
	(to allow a digit to follow a hex escape without ambiguity),
	so two spaces must be put after a hex escape
	to separate it from the following one,
	or else they'll be considered adjacent,
	and part of the same identifier.
	For example, ''symbols: \660 \661;'' only defines a single symbol,
	consisting of the U+0660 and U+0661 characters,
	rather than the two that were intended;
	either quote the escapes in strings,
	like ''symbols: "\660" "\661"'',
	or put two spaces between the escapes.

<!--
 ██████  ████████  ████████    ███    ██    ██            ███     ██████
██    ██ ██     ██ ██         ██ ██   ██   ██            ██ ██   ██    ██
██       ██     ██ ██        ██   ██  ██  ██            ██   ██  ██
 ██████  ████████  ██████   ██     ██ █████    ███████ ██     ██  ██████
      ██ ██        ██       █████████ ██  ██           █████████       ██
██    ██ ██        ██       ██     ██ ██   ██          ██     ██ ██    ██
 ██████  ██        ████████ ██     ██ ██    ██         ██     ██  ██████
-->

<h3 id='counter-style-speak-as'>
Speech Synthesis: the '@counter-style/speak-as' descriptor</h3>

	<pre class='descdef'>
	Name: speak-as
	For: @counter-style
	Value: auto | bullets | numbers | words | spell-out | <<counter-style-name>>
	Initial: auto
	</pre>

	<wpt>
		counter-style-at-rule/speak-as-manual.html
		counter-style-at-rule/speak-as-syntax.html
	</wpt>

	A counter style can be constructed with a meaning that is obvious visually,
	but impossible to meaningfully represent via a speech synthesizer or other non-visual means,
	or possible but nonsensical when naively read out loud.
	The '@counter-style/speak-as' descriptor describes how to synthesize the spoken form of a counter formatted with the given counter style.
	Assistive technologies should use this spoken form when reading out the counter style,
	and may use the '@counter-style/speak-as' value
	to inform transformations to outputs other than speech.
	Values have the following meanings:

	<dl dfn-for="@counter-style/speak-as" dfn-type=value>
		<dt><dfn>auto</dfn>
		<dd>
			If the counter style's '@counter-style/system' is ''alphabetic'',
			this value has the same effect as ''spell-out''.
			If the '@counter-style/system' is ''cyclic'',
			this value has the same effect as ''bullets''.
			If the '@counter-style/system' is ''extends'',
			this value has the same effect as ''speak-as/auto'' would have for the extended style.
			Otherwise, this value has the same effect as ''numbers''.

		<dt><dfn>bullets</dfn>
		<dd>
			The UA speaks a UA-defined phrase or audio cue that represents an unordered list item being read out.

		<dt><dfn>numbers</dfn>
		<dd>
			The counter's numeric value is spoken as a number in the <a>content language</a>.

		<dt><dfn>words</dfn>
		<dd>
			<a>Generate a counter representation</a> for the value as normal,
			then speak it as normal text in the <a>content language</a>.
			If the counter representation contains images,
			instead handle the value as for ''numbers''.

		<dt><dfn>spell-out</dfn>
		<dd>
			<a>Generate a counter representation</a> for the value as normal,
			then spell it out letter-by-letter in the <a>content language</a>.
			If the UA does not know how to pronounce the symbols
			(or the counter representation contains images),
			it must instead handle the value as for ''numbers''.

			For example, ''lower-greek'' in English would be read out as "alpha", "beta", "gamma", etc.
			Conversely, ''upper-latin'' in French would be read out as (in phonetic notation) /a/, /be/, /se/, etc.


		<dt><dfn><<counter-style-name>></dfn>
		<dd>
			The counter's value is instead spoken out in the specified style
			(similar to the behavior of the '@counter-style/fallback' descriptor when generating representations for a counter value).
			If the specified style does not exist,
			this value is treated as ''speak-as/auto''.
			If a loop is detected when following '@counter-style/speak-as' references,
			this value is treated as ''speak-as/auto''
			for the counter styles participating in the loop.
	</dl>

	<div class='example'>
		The ability to defer pronunciation to another counter style can help when the symbols being used aren't actually letters.
		For example, here's a possible definition of a ''circled-lower-latin'' counter-style, using some special Unicode characters:

		<pre class='stylesheet'>
		@counter-style <dfn noexport>circled-lower-latin</dfn> {
		  system: alphabetic;
		  speak-as: lower-latin;
		  symbols: ⓐ ⓑ ⓒ ⓓ ⓔ ⓕ ⓖ ⓗ ⓘ ⓙ ⓚ ⓛ ⓜ ⓝ ⓞ ⓟ ⓠ ⓡ ⓢ ⓣ ⓤ ⓥ ⓦ ⓧ ⓨ ⓩ;
		  suffix: " ";
		}
		</pre>

		Setting its '@counter-style/system' to ''system/alphabetic'' would normally make the UA try to read out the names of the characters,
		but in this case that might be something like "Circled Letter A",
		which is unlikely to make sense.
		Instead, explicitly setting '@counter-style/speak-as' to ''lower-latin'' ensures that they get read out as their corresponding latin letters, as intended.
	</div>

<!--
 ██████  ██    ██ ██     ██ ████████   ███████  ██        ██████    ███ ███
██    ██  ██  ██  ███   ███ ██     ██ ██     ██ ██       ██    ██  ██     ██
██         ████   ████ ████ ██     ██ ██     ██ ██       ██       ██       ██
 ██████     ██    ██ ███ ██ ████████  ██     ██ ██        ██████  ██       ██
      ██    ██    ██     ██ ██     ██ ██     ██ ██             ██ ██       ██
██    ██    ██    ██     ██ ██     ██ ██     ██ ██       ██    ██  ██     ██
 ██████     ██    ██     ██ ████████   ███████  ████████  ██████    ███ ███
-->

<h2 id='symbols-function'>
Defining Anonymous Counter Styles: the ''symbols()'' function</h2>

	The ''symbols()'' function allows a <a>counter style</a> to be defined inline in a property value,
	for when a style is used only once in a stylesheet and defining a full ''@counter-style'' rule would be overkill.
	It does not provide the full feature-set of the ''@counter-style'' rule,
	but provides a sufficient subset to still be useful.
	The syntax of the ''symbols()'' rule is:

	<pre class='prod'>
		<dfn>symbols()</dfn> = symbols( <<symbols-type>>? [ <<string>> | <<image>> ]+ )
		<dfn>&lt;symbols-type></dfn> = cyclic | numeric | alphabetic | symbolic | fixed
	</pre>

	<wpt>
		counter-style-at-rule/symbols-function.html
		counter-style-at-rule/symbols-function-invalid.html
	</wpt>

	The ''symbols()'' function defines an anonymous counter style
	with no name,
	a '@counter-style/prefix' of ''""'' (empty string)
	and '@counter-style/suffix' of ''" "'' (U+0020 SPACE),
	a '@counter-style/range' of ''range/auto'',
	a '@counter-style/fallback' of ''decimal'',
	a '@counter-style/negative' of ''"\2D"'' ("-" hyphen-minus),
	a '@counter-style/pad' of ''0 ""'',
	and a '@counter-style/speak-as' of ''speak-as/auto''.
	The counter style's algorithm is constructed
	by consulting the previous chapter using the provided system&nbsp;&mdash;
	or ''symbolic'' if the system was omitted&nbsp;&mdash;
	and the provided <<string>>s and <<image>>s as the value of the '@counter-style/symbols' property.
	If the system is ''system/fixed'', the <a>first symbol value</a> is ''1''.

	If the system is ''system/alphabetic'' or ''system/numeric'',
	there must be at least two <<string>>s or <<image>>s,
	or else the function is invalid.

	<div class='example'>
		This code:

		<pre>ol { list-style: symbols("*" "\2020" "\2021" "\A7"); }</pre>

		will produce lists that look like:

		<pre>
		*   One
		†   Two
		‡   Three
		§   Four
		**  Five
		††  Six
		‡‡  Seven
		</pre>

		On the other hand, specifying the system of counter, like so:

		<pre>ol { list-style: symbols(cyclic "*" "\2020" "\2021" "\A7"); }</pre>

		will produce lists that look like:

		<pre>
		*   One
		†   Two
		‡   Three
		§   Four
		*   Five
		†   Six
		‡   Seven
		</pre>
	</div>

	Note: the ''symbols()'' function only allows strings and images,
	while the '@counter-style/symbols' descriptor of a ''@counter-style'' rule also allows identifiers.

<!--
████████ ██     ██ ████████ ████████ ██    ██ ████████  ████ ██    ██  ██████
██        ██   ██     ██    ██       ███   ██ ██     ██  ██  ███   ██ ██    ██
██         ██ ██      ██    ██       ████  ██ ██     ██  ██  ████  ██ ██
██████      ███       ██    ██████   ██ ██ ██ ██     ██  ██  ██ ██ ██ ██   ████
██         ██ ██      ██    ██       ██  ████ ██     ██  ██  ██  ████ ██    ██
██        ██   ██     ██    ██       ██   ███ ██     ██  ██  ██   ███ ██    ██
████████ ██     ██    ██    ████████ ██    ██ ████████  ████ ██    ██  ██████
-->

<h2 id='extending-css2'>
Extending 'list-style-type', ''counter()'', and ''counters()''</h2>

	In CSS Level 2 [[!CSS21]] the 'list-style-type' property and the ''counter()'' and ''counters()'' notations
	accept various pre-defined keywords, each identifying a counter style.
	This module extends these features to take instead the <<counter-style>> type, defined below:

	<pre class='prod'>
		<dfn type>&lt;counter-style></dfn> = <<counter-style-name>> | <<symbols()>>
	</pre>

	If a <<counter-style-name>> is used that does not refer to any existing counter style,
	it must act identically to the ''decimal'' counter style
	(but does not <em>[=computed value|compute=]</em> to ''decimal'').

	When used in these contexts, a <<counter-style-name>> is a [=tree-scoped reference=].


<!--
 ██████  ████████ ██    ██ ██       ████████  ██████
██    ██    ██     ██  ██  ██       ██       ██    ██
██          ██      ████   ██       ██       ██
 ██████     ██       ██    ██       ██████    ██████
      ██    ██       ██    ██       ██             ██
██    ██    ██       ██    ██       ██       ██    ██
 ██████     ██       ██    ████████ ████████  ██████
-->


<h2 id='predefined-counters'>
Simple Predefined Counter Styles</h2>

	The following stylesheet uses the ''@counter-style'' rule
	to redefine all of the counter styles defined in CSS 2 and CSS 2.1.
	This stylesheet is normative--
	UAs must include it in their UA stylesheet
	(or at least act as if these rules were defined at that level).


<h3 id='simple-numeric'>
Numeric: ''decimal'', ''decimal-leading-zero'', ''arabic-indic'', ''armenian'', ''upper-armenian'', ''lower-armenian'', ''bengali'', ''cambodian'', ''khmer'', ''cjk-decimal'', ''devanagari'', ''georgian'', ''gujarati'', ''gurmukhi'', ''hebrew'', ''kannada'', ''lao'', ''malayalam'', ''mongolian'', ''myanmar'', ''oriya'', ''persian'', ''lower-roman'', ''upper-roman'', ''tamil'', ''telugu'', ''thai'', ''tibetan''</h3>

	<dl dfn-type=value dfn-for="<counter-style-name>">
		<dt><dfn id=decimal>decimal</dfn>
		<dd>
			Western decimal numbers
			(e.g., 1, 2, 3, ..., 98, 99, 100).

		<dt><dfn id=decimal-leading-zero>decimal-leading-zero</dfn>
		<dd>
			Decimal numbers padded by initial zeros
			(e.g., 01, 02, 03, ..., 98, 99, 100).

		<dt><dfn>arabic-indic</dfn>
		<dd>
			Arabic-indic numbering
			(e.g., ١&lrm;, ٢&lrm;, ٣&lrm;, ٤&lrm;, ..., ٩٨&lrm;, ٩٩&lrm;, ١٠٠&lrm;).

			<wpt>
				arabic-indic/css3-counter-styles-101.html
				arabic-indic/css3-counter-styles-102.html
				arabic-indic/css3-counter-styles-103.html
			</wpt>

		<dt><dfn id=armenian>armenian</dfn>
		<dt><dfn>upper-armenian</dfn>
		<dd>
			Traditional uppercase Armenian numbering
			(e.g., Ա, Բ, Գ, ..., ՂԸ, ՂԹ, Ճ).

			<wpt>
				armenian/css3-counter-styles-006.html
				armenian/css3-counter-styles-007.html
				armenian/css3-counter-styles-008.html
				armenian/css3-counter-styles-009.html
				upper-armenian/css3-counter-styles-107.html
				upper-armenian/css3-counter-styles-108.html
				upper-armenian/css3-counter-styles-109.html
				upper-armenian/css3-counter-styles-110.html
			</wpt>

		<dt><dfn>lower-armenian</dfn>
		<dd>
			Lowercase Armenian numbering
			(e.g., ա, բ, գ, ..., ղը, ղթ, ճ).

			<wpt>
				lower-armenian/css3-counter-styles-111.html
				lower-armenian/css3-counter-styles-112.html
				lower-armenian/css3-counter-styles-114.html
				lower-armenian/css3-counter-styles-115.html
			</wpt>

		<dt><dfn>bengali</dfn>
		<dd>
			Bengali numbering
			(e.g., ১, ২, ৩, ..., ৯৮, ৯৯, ১০০).

			<wpt>
				bengali/css3-counter-styles-116.html
				bengali/css3-counter-styles-117.html
				bengali/css3-counter-styles-118.html
			</wpt>

		<dt><dfn>cambodian</dfn>
		<dt><dfn>khmer</dfn>
		<dd>
			Cambodian/Khmer numbering
			(e.g., ១, ២, ៣, ..., ៩៨, ៩៩, ១០០).

			<wpt>
				cambodian/css3-counter-styles-158.html
				cambodian/css3-counter-styles-159.html
				cambodian/css3-counter-styles-160.html
				khmer/css3-counter-styles-161.html
				khmer/css3-counter-styles-162.html
				khmer/css3-counter-styles-163.html
			</wpt>

		<dt><dfn id=cjk-decimal>cjk-decimal</dfn>
		<dd>
			Han decimal numbers
			(e.g., 一, 二, 三, ..., 九八, 九九, 一〇〇).

			<wpt>
				cjk-decimal/counter-cjk-decimal.html
				cjk-decimal/css3-counter-styles-001.html
				cjk-decimal/css3-counter-styles-004.html
				cjk-decimal/css3-counter-styles-005.html
			</wpt>

		<dt><dfn>devanagari</dfn>
		<dd>
			devanagari numbering
			(e.g., १, २, ३, ..., ९८, ९९, १००).

			<wpt>
				devanagari/css3-counter-styles-119.html
				devanagari/css3-counter-styles-120.html
				devanagari/css3-counter-styles-121.html
			</wpt>

		<dt><dfn id=georgian>georgian</dfn>
		<dd>
			Traditional Georgian numbering
			(e.g., ა, ბ, გ, ..., ჟჱ, ჟთ, რ).

			<wpt>
				georgian/css3-counter-styles-010.html
				georgian/css3-counter-styles-011.html
				georgian/css3-counter-styles-012.html
				georgian/css3-counter-styles-014.html
			</wpt>

		<dt><dfn>gujarati</dfn>
		<dd>
			Gujarati numbering
			(e.g., ૧, ૨, ૩, ..., ૯૮, ૯૯, ૧૦૦).

			<wpt>
				gujarati/css3-counter-styles-122.html
				gujarati/css3-counter-styles-123.html
				gujarati/css3-counter-styles-124.html
			</wpt>

		<dt><dfn>gurmukhi</dfn>
		<dd>
			Gurmukhi numbering
			(e.g., ੧, ੨, ੩, ..., ੯੮, ੯੯, ੧੦੦).

			<wpt>
				gurmukhi/css3-counter-styles-125.html
				gurmukhi/css3-counter-styles-126.html
				gurmukhi/css3-counter-styles-127.html
			</wpt>

		<dt><dfn id=hebrew>hebrew</dfn>
		<dd>
			Traditional Hebrew numbering
			(e.g., א&lrm;, ב&lrm;, ג&lrm;, ..., צח&lrm;, צט&lrm;, ק&lrm;).

			<wpt>
				hebrew/counter-hebrew-nested.html
				hebrew/css3-counter-styles-015.html
				hebrew/css3-counter-styles-016.html
				hebrew/css3-counter-styles-016a.html
				hebrew/css3-counter-styles-017.html
			</wpt>

		<dt><dfn>kannada</dfn>
		<dd>
			Kannada numbering
			(e.g., ೧, ೨, ೩, ..., ೯೮, ೯೯, ೧೦೦).

			<wpt>
				kannada/css3-counter-styles-128.html
				kannada/css3-counter-styles-129.html
				kannada/css3-counter-styles-130.html
			</wpt>

		<dt><dfn>lao</dfn>
		<dd>
			Laotian numbering
			(e.g., ໑, ໒, ໓, ..., ໙໘, ໙໙, ໑໐໐).

			<wpt>
				lao/css3-counter-styles-131.html
				lao/css3-counter-styles-132.html
				lao/css3-counter-styles-133.html
			</wpt>

		<dt><dfn>malayalam</dfn>
		<dd>
			Malayalam numbering
			(e.g., ൧, ൨, ൩, ..., ൯൮, ൯൯, ൧൦൦).

			<wpt>
				malayalam/css3-counter-styles-134.html
				malayalam/css3-counter-styles-135.html
				malayalam/css3-counter-styles-136.html
			</wpt>

		<dt><dfn>mongolian</dfn>
		<dd>
			Mongolian numbering
			(e.g., ᠑, ᠒, ᠓, ..., ᠙᠘, ᠙᠙, ᠑᠐᠐).

			<wpt>
				mongolian/css3-counter-styles-137.html
				mongolian/css3-counter-styles-138.html
				mongolian/css3-counter-styles-139.html
			</wpt>

		<dt><dfn>myanmar</dfn>
		<dd>
			Myanmar (Burmese) numbering
			(e.g., ၁, ၂, ၃, ..., ၉၈, ၉၉, ၁၀၀).

			<wpt>
				myanmar/css3-counter-styles-140.html
				myanmar/css3-counter-styles-141.html
				myanmar/css3-counter-styles-142.html
			</wpt>

		<dt><dfn>oriya</dfn>
		<dd>
			Oriya (Odia) numbering
			(e.g., ୧, ୨, ୩, ..., ୯୮, ୯୯, ୧୦୦).

			<wpt>
				oriya/css3-counter-styles-143.html
				oriya/css3-counter-styles-144.html
				oriya/css3-counter-styles-145.html
			</wpt>

		<dt><dfn>persian</dfn>
		<dd>
			Persian numbering
			(e.g., ۱, ۲, ۳, ۴, ..., ۹۸, ۹۹, ۱۰۰).

			<wpt>
				persian/css3-counter-styles-104.html
				persian/css3-counter-styles-105.html
				persian/css3-counter-styles-106.html
			</wpt>

		<dt><dfn id=lower-roman>lower-roman</dfn>
		<dd>
			Lowercase ASCII Roman numerals
			(e.g., i, ii, iii, ..., xcviii, xcix, c).

			<wpt>
				lower-roman/css3-counter-styles-019.html
				lower-roman/css3-counter-styles-020.html
				lower-roman/css3-counter-styles-020a.html
				lower-roman/css3-counter-styles-020b.html
				lower-roman/css3-counter-styles-021.html
				lower-roman/css3-counter-styles-022.html
			</wpt>

		<dt><dfn id=upper-roman>upper-roman</dfn>
		<dd>
			Uppercase ASCII Roman numerals
			(e.g., I, II, III, ..., XCVIII, XCIX, C).

			<wpt>
				upper-roman/css3-counter-styles-023.html
				upper-roman/css3-counter-styles-024.html
				upper-roman/css3-counter-styles-024a.html
				upper-roman/css3-counter-styles-025.html
				upper-roman/css3-counter-styles-026.html
			</wpt>

		<dt><dfn>tamil</dfn>
		<dd>
			Tamil numbering
			(e.g., ௧, ௨, ௩, ..., ௯௮, ௯௯, ௧௦௦).

			<wpt>
				tamil/css3-counter-styles-146.html
				tamil/css3-counter-styles-147.html
				tamil/css3-counter-styles-148.html
			</wpt>

		<dt><dfn>telugu</dfn>
		<dd>
			Telugu numbering
			(e.g., ౧, ౨, ౩, ..., ౯౮, ౯౯, ౧౦౦).

			<wpt>
				telugu/css3-counter-styles-149.html
				telugu/css3-counter-styles-150.html
				telugu/css3-counter-styles-151.html
			</wpt>

		<dt><dfn>thai</dfn>
		<dd>
			Thai (Siamese) numbering
			(e.g., ๑, ๒, ๓, ..., ๙๘, ๙๙, ๑๐๐).

			<wpt>
				thai/css3-counter-styles-152.html
				thai/css3-counter-styles-153.html
				thai/css3-counter-styles-154.html
			</wpt>

		<dt><dfn>tibetan</dfn>
		<dd>
			Tibetan numbering
			(e.g., ༡, ༢, ༣, ..., ༩༨, ༩༩, ༡༠༠).

			<wpt>
				tibetan/css3-counter-styles-155.html
				tibetan/css3-counter-styles-156.html
				tibetan/css3-counter-styles-157.html
			</wpt>
	</dl>

	The following stylesheet fragment provides the normative definition of these predefined counter styles:

	<pre class='stylesheet'><bdo dir=ltr>
	@counter-style decimal {
		system: numeric;
		symbols: '0' '1' '2' '3' '4' '5' '6' '7' '8' '9';
	}

	@counter-style decimal-leading-zero {
		system: extends decimal;
		pad: 2 '0';
	}

	@counter-style arabic-indic {
		system: numeric;
		symbols: "\660" "\661" "\662" "\663" "\664" "\665" "\666" "\667" "\668" "\669";
		/* ٠ ١ ٢ ٣ ٤ ٥ ٦ ٧ ٨ ٩ */
	}

	@counter-style armenian {
		system: additive;
		range: 1 9999;
		additive-symbols: 9000 \554, 8000 \553, 7000 \552, 6000 \551, 5000 \550, 4000 \54F, 3000 \54E, 2000 \54D, 1000 \54C, 900 \54B, 800 \54A, 700 \549, 600 \548, 500 \547, 400 \546, 300 \545, 200 \544, 100 \543, 90 \542, 80 \541, 70 \540, 60 \53F, 50 \53E, 40 \53D, 30 \53C, 20 \53B, 10 \53A, 9 \539, 8 \538, 7 \537, 6 \536, 5 \535, 4 \534, 3 \533, 2 \532, 1 \531;
		/* 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 {
		system: extends armenian;
	}

	@counter-style lower-armenian {
		system: additive;
		range: 1 9999;
		additive-symbols: 9000 "\584", 8000 "\583", 7000 "\582", 6000 "\581", 5000 "\580", 4000 "\57F", 3000 "\57E", 2000 "\57D", 1000 "\57C", 900 "\57B", 800 "\57A", 700 "\579", 600 "\578", 500 "\577", 400 "\576", 300 "\575", 200 "\574", 100 "\573", 90 "\572", 80 "\571", 70 "\570", 60 "\56F", 50 "\56E", 40 "\56D", 30 "\56C", 20 "\56B", 10 "\56A", 9 "\569", 8 "\568", 7 "\567", 6 "\566", 5 "\565", 4 "\564", 3 "\563", 2 "\562", 1 "\561";
		/* 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 bengali {
		system: numeric;
		symbols: "\9E6" "\9E7" "\9E8" "\9E9" "\9EA" "\9EB" "\9EC" "\9ED" "\9EE" "\9EF";
		/* ০ ১ ২ ৩ ৪ ৫ ৬ ৭ ৮ ৯ */
	}

	@counter-style cambodian {
		system: numeric;
		symbols: "\17E0" "\17E1" "\17E2" "\17E3" "\17E4" "\17E5" "\17E6" "\17E7" "\17E8" "\17E9";
		/* ០ ១ ២ ៣ ៤ ៥ ៦ ៧ ៨ ៩ */
	}

	@counter-style khmer {
		system: extends cambodian;
	}

	@counter-style cjk-decimal {
		system: numeric;
		range: 0 infinite;
		symbols: \3007  \4E00  \4E8C  \4E09  \56DB  \4E94  \516D  \4E03  \516B  \4E5D;
		/* 〇 一 二 三 四 五 六 七 八 九 */
		suffix: "\3001";
		/* "、" */
	}

	@counter-style devanagari {
		system: numeric;
		symbols: "\966" "\967" "\968" "\969" "\96A" "\96B" "\96C" "\96D" "\96E" "\96F";
		/* ० १ २ ३ ४ ५ ६ ७ ८ ९ */
	}

	@counter-style georgian {
		system: additive;
		range: 1 19999;
		additive-symbols: 10000 \10F5, 9000 \10F0, 8000 \10EF, 7000 \10F4, 6000 \10EE, 5000 \10ED, 4000 \10EC, 3000 \10EB, 2000 \10EA, 1000 \10E9, 900 \10E8, 800 \10E7, 700 \10E6, 600 \10E5, 500 \10E4, 400 \10F3, 300 \10E2, 200 \10E1, 100 \10E0, 90 \10DF, 80 \10DE, 70 \10DD, 60 \10F2, 50 \10DC, 40 \10DB, 30 \10DA, 20 \10D9, 10 \10D8, 9 \10D7, 8 \10F1, 7 \10D6, 6 \10D5, 5 \10D4, 4 \10D3, 3 \10D2, 2 \10D1, 1 \10D0;
		/* 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 gujarati {
		system: numeric;
		symbols: "\AE6" "\AE7" "\AE8" "\AE9" "\AEA" "\AEB" "\AEC" "\AED" "\AEE" "\AEF";
		/* ૦ ૧ ૨ ૩ ૪ ૫ ૬ ૭ ૮ ૯ */
	}

	@counter-style gurmukhi {
		system: numeric;
		symbols: "\A66" "\A67" "\A68" "\A69" "\A6A" "\A6B" "\A6C" "\A6D" "\A6E" "\A6F";
		/* ੦ ੧ ੨ ੩ ੪ ੫ ੬ ੭ ੮ ੯ */
	}

	@counter-style hebrew {
		system: additive;
		range: 1 10999;
		additive-symbols: 10000 \5D9\5F3, 9000 \5D8\5F3, 8000 \5D7\5F3, 7000 \5D6\5F3, 6000 \5D5\5F3, 5000 \5D4\5F3, 4000 \5D3\5F3, 3000 \5D2\5F3, 2000 \5D1\5F3, 1000 \5D0\5F3, 400 \5EA, 300 \5E9, 200 \5E8, 100 \5E7, 90 \5E6, 80 \5E4, 70 \5E2, 60 \5E1, 50 \5E0, 40 \5DE, 30 \5DC, 20 \5DB, 19 \5D9\5D8, 18 \5D9\5D7, 17 \5D9\5D6, 16 \5D8\5D6, 15 \5D8\5D5, 10 \5D9, 9 \5D8, 8 \5D7, 7 \5D6, 6 \5D5, 5 \5D4, 4 \5D3, 3 \5D2, 2 \5D1, 1 \5D0;
		/* 10000 י׳, 9000 ט׳, 8000 ח׳, 7000 ז׳, 6000 ו׳, 5000 ה׳, 4000 ד׳, 3000 ג׳, 2000 ב׳, 1000 א׳, 400 ת, 300 ש, 200 ר, 100 ק, 90 צ, 80 פ, 70 ע, 60 ס, 50 נ, 40 מ, 30 ל, 20 כ, 19 יט, 18 יח, 17 יז, 16 טז, 15 טו, 10 י, 9 ט, 8 ח, 7 ז, 6 ו, 5 ה, 4 ד, 3 ג, 2 ב, 1 א */
		/* This system manually specifies the values for 19-15 to force the correct display of 15 and 16, which are commonly rewritten to avoid a close resemblance to the Tetragrammaton. */
		/* Implementations MAY choose to implement this manually to a higher range; see note below. */
	}

	@counter-style kannada {
		system: numeric;
		symbols: "\CE6" "\CE7" "\CE8" "\CE9" "\CEA" "\CEB" "\CEC" "\CED" "\CEE" "\CEF";
		/* ೦ ೧ ೨ ೩ ೪ ೫ ೬ ೭ ೮ ೯ */
	}

	@counter-style lao {
		system: numeric;
		symbols: "\ED0" "\ED1" "\ED2" "\ED3" "\ED4" "\ED5" "\ED6" "\ED7" "\ED8" "\ED9";
		/* ໐ ໑ ໒ ໓ ໔ ໕ ໖ ໗ ໘ ໙ */
	}

	@counter-style malayalam {
		system: numeric;
		symbols: "\D66" "\D67" "\D68" "\D69" "\D6A" "\D6B" "\D6C" "\D6D" "\D6E" "\D6F";
		/* ൦ ൧ ൨ ൩ ൪ ൫ ൬ ൭ ൮ ൯ */
	}

	@counter-style mongolian {
		system: numeric;
		symbols: "\1810" "\1811" "\1812" "\1813" "\1814" "\1815" "\1816" "\1817" "\1818" "\1819";
		/* ᠐ ᠑ ᠒ ᠓ ᠔ ᠕ ᠖ ᠗ ᠘ ᠙ */
	}

	@counter-style myanmar {
		system: numeric;
		symbols: "\1040" "\1041" "\1042" "\1043" "\1044" "\1045" "\1046" "\1047" "\1048" "\1049";
		/* ၀ ၁ ၂ ၃ ၄ ၅ ၆ ၇ ၈ ၉ */
	}

	@counter-style oriya {
		system: numeric;
		symbols: "\B66" "\B67" "\B68" "\B69" "\B6A" "\B6B" "\B6C" "\B6D" "\B6E" "\B6F";
		/* ୦ ୧ ୨ ୩ ୪ ୫ ୬ ୭ ୮ ୯ */
	}

	@counter-style persian {
		system: numeric;
		symbols: "\6F0" "\6F1" "\6F2" "\6F3" "\6F4" "\6F5" "\6F6" "\6F7" "\6F8" "\6F9";
		/* ۰ ۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ */
	}

	@counter-style lower-roman {
		system: additive;
		range: 1 3999;
		additive-symbols: 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 upper-roman {
		system: additive;
		range: 1 3999;
		additive-symbols: 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 tamil {
		system: numeric;
		symbols: "\BE6" "\BE7" "\BE8" "\BE9" "\BEA" "\BEB" "\BEC" "\BED" "\BEE" "\BEF";
		/* ௦ ௧ ௨ ௩ ௪ ௫ ௬ ௭ ௮ ௯ */
	}

	@counter-style telugu {
		system: numeric;
		symbols: "\C66" "\C67" "\C68" "\C69" "\C6A" "\C6B" "\C6C" "\C6D" "\C6E" "\C6F";
		/* ౦ ౧ ౨ ౩ ౪ ౫ ౬ ౭ ౮ ౯ */
	}

	@counter-style thai {
		system: numeric;
		symbols: "\E50" "\E51" "\E52" "\E53" "\E54" "\E55" "\E56" "\E57" "\E58" "\E59";
		/* ๐ ๑ ๒ ๓ ๔ ๕ ๖ ๗ ๘ ๙ */
	}

	@counter-style tibetan {
		system: numeric;
		symbols: "\F20" "\F21" "\F22" "\F23" "\F24" "\F25" "\F26" "\F27" "\F28" "\F29";
		/* ༠ ༡ ༢ ༣ ༤ ༥ ༦ ༧ ༨ ༩ */
	}
	</bdo></pre>

	Implementations must implement ''hebrew'' at least to the range specified in the ''@counter-style'' rule above,
	but may implement it to a higher range.
	If they do so,
	the corresponding '@counter-style/range' descriptor must reflect the implemented range.


<h3 id='simple-alphabetic'>
Alphabetic: ''lower-alpha'', ''lower-latin'', ''upper-alpha'', ''upper-latin'', ''lower-greek'', ''hiragana'', ''hiragana-iroha'', ''katakana'', ''katakana-iroha''</h3>

	<dl dfn-type=value dfn-for="<counter-style-name>">
		<dt><dfn id=lower-alpha>lower-alpha</dfn>
		<dt><dfn id=lower-latin>lower-latin</dfn>
		<dd>
			Lowercase ASCII letters
			(e.g., a, b, c, ..., z, aa, ab).

		<dt><dfn id=upper-alpha>upper-alpha</dfn>
		<dt><dfn id=upper-latin>upper-latin</dfn>
		<dd>
			Uppercase ASCII letters
			(e.g., A, B, C, ..., Z, AA, AB).

		<dt><dfn id=lower-greek>lower-greek</dfn>
		<dd>
			Lowercase classical Greek
			(e.g., α, β, γ, ..., ω, αα, αβ).

			<wpt>
				lower-greek/css3-counter-styles-027.html
				lower-greek/css3-counter-styles-028.html
				lower-greek/css3-counter-styles-029.html
			</wpt>

		<dt><dfn id=hiragana>hiragana</dfn>
		<dd>
			Dictionary-order hiragana lettering
			(e.g., あ, い, う, ..., ん, ああ, あい).

			<wpt>
				hiragana/css3-counter-styles-030.html
				hiragana/css3-counter-styles-031.html
				hiragana/css3-counter-styles-032.html
			</wpt>

		<dt><dfn id=hiragana-iroha>hiragana-iroha</dfn>
		<dd>
			Iroha-order hiragana lettering
			(e.g., い, ろ, は, ..., す, いい, いろ).

			<wpt>
				hiragana-iroha/css3-counter-styles-033.html
				hiragana-iroha/css3-counter-styles-034.html
				hiragana-iroha/css3-counter-styles-035.html
			</wpt>

		<dt><dfn id=katakana>katakana</dfn>
		<dd>
			Dictionary-order katakana lettering
			(e.g., ア, イ, ウ, ..., ン, アア, アイ).

			<wpt>
				katakana/css3-counter-styles-036.html
				katakana/css3-counter-styles-037.html
				katakana/css3-counter-styles-038.html
			</wpt>

		<dt><dfn id=katakana-iroha>katakana-iroha</dfn>
		<dd>
			Iroha-order katakana lettering
			(e.g., イ, ロ, ハ, ..., ス, イイ, イロ)

			<wpt>
				katakana-iroha/css3-counter-styles-039.html
				katakana-iroha/css3-counter-styles-040.html
				katakana-iroha/css3-counter-styles-041.html
			</wpt>
	</dl>

	The following stylesheet fragment provides the normative definition of these predefined counter styles:

	<pre class='stylesheet'><bdo dir=ltr>
	@counter-style lower-alpha {
		system: alphabetic;
		symbols: 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-latin {
		system: extends lower-alpha;
	}

	@counter-style upper-alpha {
		system: alphabetic;
		symbols: 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-latin {
		system: extends upper-alpha;
	}

	@counter-style lower-greek {
		system: alphabetic;
		symbols: "\3B1" "\3B2" "\3B3" "\3B4" "\3B5" "\3B6" "\3B7" "\3B8" "\3B9" "\3BA" "\3BB" "\3BC" "\3BD" "\3BE" "\3BF" "\3C0" "\3C1" "\3C3" "\3C4" "\3C5" "\3C6" "\3C7" "\3C8" "\3C9";
		/* α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ τ υ φ χ ψ ω */
	}

	@counter-style hiragana {
		system: alphabetic;
		symbols: "\3042" "\3044" "\3046" "\3048" "\304A" "\304B" "\304D" "\304F" "\3051" "\3053" "\3055" "\3057" "\3059" "\305B" "\305D" "\305F" "\3061" "\3064" "\3066" "\3068" "\306A" "\306B" "\306C" "\306D" "\306E" "\306F" "\3072" "\3075" "\3078" "\307B" "\307E" "\307F" "\3080" "\3081" "\3082" "\3084" "\3086" "\3088" "\3089" "\308A" "\308B" "\308C" "\308D" "\308F" "\3090" "\3091" "\3092" "\3093";
		/* あ い う え お か き く け こ さ し す せ そ た ち つ て と な に ぬ ね の は ひ ふ へ ほ ま み む め も や ゆ よ ら り る れ ろ わ ゐ ゑ を ん */
		suffix: "、";
	}

	@counter-style hiragana-iroha {
		system: alphabetic;
		symbols: "\3044" "\308D" "\306F" "\306B" "\307B" "\3078" "\3068" "\3061" "\308A" "\306C" "\308B" "\3092" "\308F" "\304B" "\3088" "\305F" "\308C" "\305D" "\3064" "\306D" "\306A" "\3089" "\3080" "\3046" "\3090" "\306E" "\304A" "\304F" "\3084" "\307E" "\3051" "\3075" "\3053" "\3048" "\3066" "\3042" "\3055" "\304D" "\3086" "\3081" "\307F" "\3057" "\3091" "\3072" "\3082" "\305B" "\3059";
		/* い ろ は に ほ へ と ち り ぬ る を わ か よ た れ そ つ ね な ら む う ゐ の お く や ま け ふ こ え て あ さ き ゆ め み し ゑ ひ も せ す */
		suffix: "、";
	}

	@counter-style katakana {
		system: alphabetic;
		symbols: "\30A2" "\30A4" "\30A6" "\30A8" "\30AA" "\30AB" "\30AD" "\30AF" "\30B1" "\30B3" "\30B5" "\30B7" "\30B9" "\30BB" "\30BD" "\30BF" "\30C1" "\30C4" "\30C6" "\30C8" "\30CA" "\30CB" "\30CC" "\30CD" "\30CE" "\30CF" "\30D2" "\30D5" "\30D8" "\30DB" "\30DE" "\30DF" "\30E0" "\30E1" "\30E2" "\30E4" "\30E6" "\30E8" "\30E9" "\30EA" "\30EB" "\30EC" "\30ED" "\30EF" "\30F0" "\30F1" "\30F2" "\30F3";
		/* ア イ ウ エ オ カ キ ク ケ コ サ シ ス セ ソ タ チ ツ テ ト ナ ニ ヌ ネ ノ ハ ヒ フ ヘ ホ マ ミ ム メ モ ヤ ユ ヨ ラ リ ル レ ロ ワ ヰ ヱ ヲ ン */
		suffix: "、";
	}

	@counter-style katakana-iroha {
		system: alphabetic;
		symbols: "\30A4" "\30ED" "\30CF" "\30CB" "\30DB" "\30D8" "\30C8" "\30C1" "\30EA" "\30CC" "\30EB" "\30F2" "\30EF" "\30AB" "\30E8" "\30BF" "\30EC" "\30BD" "\30C4" "\30CD" "\30CA" "\30E9" "\30E0" "\30A6" "\30F0" "\30CE" "\30AA" "\30AF" "\30E4" "\30DE" "\30B1" "\30D5" "\30B3" "\30A8" "\30C6" "\30A2" "\30B5" "\30AD" "\30E6" "\30E1" "\30DF" "\30B7" "\30F1" "\30D2" "\30E2" "\30BB" "\30B9";
		/* イ ロ ハ ニ ホ ヘ ト チ リ ヌ ル ヲ ワ カ ヨ タ レ ソ ツ ネ ナ ラ ム ウ ヰ ノ オ ク ヤ マ ケ フ コ エ テ ア サ キ ユ メ ミ シ ヱ ヒ モ セ ス */
		suffix: "、";
	}
	</bdo></pre>


<h3 id='simple-symbolic'>
Symbolic: ''disc'', ''circle'', ''square'', ''disclosure-open'', ''disclosure-closed''</h3>

	<dl dfn-type=value dfn-for="<counter-style-name>">
		<dt><dfn id=disc>disc</dfn>
		<dd>A filled circle, similar to • U+2022 BULLET.

		<dt><dfn id=circle>circle</dfn>
		<dd>A hollow circle, similar to ◦ U+25E6 WHITE BULLET.

		<dt><dfn id=square>square</dfn>
		<dd>A filled square, similar to ▪ U+25AA BLACK SMALL SQUARE.

		<dt><dfn id=disclosure-open>disclosure-open</dfn>
		<dt><dfn id=disclosure-closed>disclosure-closed</dfn>
		<dd>
			Symbols appropriate for indicating an open or closed disclosure widget,
			such as the HTML <{details}> element.

			<wpt>
				counter-style-at-rule/disclosure-styles.html
			</wpt>
	</dl>

	The following stylesheet fragment provides the normative definition of these predefined counter styles:

	<pre class='stylesheet'>
	@counter-style disc {
		system: cyclic;
		symbols: \2022;
		/* • */
		suffix: " ";
	}

	@counter-style circle {
		system: cyclic;
		symbols: \25E6;
		/* ◦ */
		suffix: " ";
	}

	@counter-style square {
		system: cyclic;
		symbols: \25AA;
		/* ▪ */
		suffix: " ";
	}

	@counter-style disclosure-open {
		system: cyclic;
		suffix: " ";
		/* for symbols, see normative text below */
	}

	@counter-style disclosure-closed {
		system: cyclic;
		suffix: " ";
		/* for symbols, see normative text below */
	}
	</pre>

	When used in 'list-style-type',
	a UA may instead render these styles using a UA-generated image or a UA-chosen font
	instead of rendering the specified character in the element’s own font.
	If using an image, it must look similar to the character,
	and must be sized to attractively fill a 1em by 1em square.

	For the ''disclosure-open'' and ''disclosure-closed'' counter styles,
	the marker must be an image or character suitable for indicating
	the open and closed states of a disclosure widget,
	such as HTML's <{details}> element.
	If the image is directional,
	it must respond to the <a>writing mode</a> of the element,
	similar to the <a href="https://drafts.csswg.org/css4-images/#bidi-images">bidi-sensitive images</a> feature of the Images 4 module.
	For example, the ''disclosure-closed'' style might use the characters
	U+25B8 BLACK RIGHT-POINTING SMALL TRIANGLE (▸)
	and U+25C2 BLACK LEFT-POINTING SMALL TRIANGLE (◂),
	while the ''disclosure-open'' style might use the character
	U+25BE BLACK DOWN-POINTING SMALL TRIANGLE (▾).

<h3 id='simple-fixed'>
Fixed: ''cjk-earthly-branch'', ''cjk-heavenly-stem''</h3>

	<dl dfn-type=value dfn-for="<counter-style-name>">
		<dt><dfn>cjk-earthly-branch</dfn>
		<dd>
			Han "Earthly Branch" ordinals
			(e.g., 子, 丑, 寅, ..., 亥).

			<wpt>
				cjk-earthly-branch/css3-counter-styles-201.html
				cjk-earthly-branch/css3-counter-styles-202.html
				cjk-earthly-branch/css3-counter-styles-203.html
			</wpt>

		<dt><dfn>cjk-heavenly-stem</dfn>
		<dd>
			Han "Heavenly Stem" ordinals
			(e.g., 甲, 乙, 丙, ..., 癸)

			<wpt>
				cjk-heavenly-stem/css3-counter-styles-204.html
				cjk-heavenly-stem/css3-counter-styles-205.html
				cjk-heavenly-stem/css3-counter-styles-206.html
			</wpt>
	</dl>

	The following stylesheet fragment provides the normative definition of these predefined counter styles:

	<pre class='stylesheet'><bdo dir=ltr>
	@counter-style cjk-earthly-branch {
		system: fixed;
		symbols: "\5B50" "\4E11" "\5BC5" "\536F" "\8FB0" "\5DF3" "\5348" "\672A" "\7533" "\9149" "\620C" "\4EA5";
		/* 子 丑 寅 卯 辰 巳 午 未 申 酉 戌 亥 */
		suffix: "、";
		fallback: cjk-decimal;
	}

	@counter-style cjk-heavenly-stem {
		system: fixed;
		symbols: "\7532" "\4E59" "\4E19" "\4E01" "\620A" "\5DF1" "\5E9A" "\8F9B" "\58EC" "\7678";
		/* 甲 乙 丙 丁 戊 己 庚 辛 壬 癸 */
		suffix: "、";
		fallback: cjk-decimal;
	}
	</bdo></pre>

<!-- ======================================================================= -->

<h2 id='complex-predefined-counters'>
Complex Predefined Counter Styles</h2>

	While authors may define their own counter styles using the ''@counter-style'' rule
	or rely on the set of predefined counter styles,
	a few counter styles are described by rules that are too complex to be captured by the predefined algorithms.
	These counter styles are described in this section.

	Some of the counter styles specified in this section
	have custom algorithms for generating counter values,
	but are otherwise identical to a counter style defined via the ''@counter-style'' rule.
	For example, an author can reference one of these styles in an ''extends'' system,
	reusing the algorithm but swapping out some of the other descriptors.

	All of the counter styles defined in this section have a <a lt='speak-as' descriptor>spoken form</a> of ''numbers'',
	and <a>use a negative sign</a>.

<!--
████████  ████████  ████████ ████████  ████████ ████████        ██████        ██ ██    ██
██     ██ ██     ██ ██       ██     ██ ██       ██             ██    ██       ██ ██   ██
██     ██ ██     ██ ██       ██     ██ ██       ██             ██             ██ ██  ██
████████  ████████  ██████   ██     ██ ██████   ██████         ██             ██ █████
██        ██   ██   ██       ██     ██ ██       ██             ██       ██    ██ ██  ██
██        ██    ██  ██       ██     ██ ██       ██             ██    ██ ██    ██ ██   ██
██        ██     ██ ████████ ████████  ████████ ██              ██████   ██████  ██    ██
-->

<h3 id='complex-cjk'>
Longhand East Asian Counter Styles</h3>

	Chinese, Japanese, and Korean have counter styles
	which have a “longhand” nature,
	similar to “thirteen thousand one hundred and twenty-three” in English.
	Each has both formal and informal variants.
	The formal styles are typically used in financial and legal documents,
	as their characters are more difficult to alter into each other.

	<div class="example">
		The following table shows examples of these styles,
		particularly some ways in which they differ.

		<table class="data">
			<thead>
				<tr><th>Counter Style
				    <th>0
				    <th>1
				    <th>2
				    <th>3
				    <th>10
				    <th>11
				    <th>99
				    <th>100
				    <th>101
				    <th>6001
			
			<tbody>
				<tr><th scope="row">''japanese-informal''
				    <td>〇
				    <td>一
				    <td>二
				    <td>三
				    <td>十
				    <td>十一
				    <td>九十九
				    <td>百
				    <td>百一
				    <td>六千一
				<tr><th scope="row">''japanese-formal''
				    <td>零
				    <td>壱
				    <td>弐
				    <td>参
				    <td>壱拾
				    <td>壱拾壱
				    <td>九拾九
				    <td>壱百
				    <td>壱百壱
				    <td>六阡壱
				<tr><th scope="row">''korean-hangul-formal''
				    <td>영
				    <td>일
				    <td>이
				    <td>삼
				    <td>일십
				    <td>일십일
				    <td>구십구
				    <td>일백
				    <td>일백일
				    <td>육천일
				<tr><th scope="row">''korean-hanja-informal''
				    <td>零
				    <td>一
				    <td>二
				    <td>三
				    <td>十
				    <td>十一
				    <td>九十九
				    <td>百
				    <td>百一
				    <td>六千一
				<tr><th scope="row">''korean-hanja-formal''
				    <td>零
				    <td>壹
				    <td>貳
				    <td>參
				    <td>壹拾
				    <td>壹拾壹
				    <td>九拾九
				    <td>壹百
				    <td>壹百壹
				    <td>六仟壹
				<tr><th scope="row">''simp-chinese-informal''
				    <td>零
				    <td>一
				    <td>二
				    <td>三
				    <td>十
				    <td>十一
				    <td>九十九
				    <td>一百
				    <td>一百零一
				    <td>六千零一
				<tr><th scope="row">''simp-chinese-formal''
				    <td>零
				    <td>壹
				    <td>贰
				    <td>叁
				    <td>壹拾
				    <td>壹拾壹
				    <td>玖拾玖
				    <td>壹佰
				    <td>壹佰零壹
				    <td>陆仟零壹
				<tr><th scope="row">''trad-chinese-informal''
				    <td>零
				    <td>一
				    <td>二
				    <td>三
				    <td>十
				    <td>十一
				    <td>九十九
				    <td>一百
				    <td>一百零一
				    <td>六千零一
				<tr><th scope="row">''trad-chinese-formal''
				    <td>零
				    <td>壹
				    <td>貳
				    <td>參
				    <td>壹拾
				    <td>壹拾壹
				    <td>玖拾玖
				    <td>壹佰
				    <td>壹佰零壹
				    <td>陸仟零壹
			
		</table>
	</div>

	Because opinions differ on how best to represent numbers 10,000 or greater
	using the longhand CJK styles,
	the implementation details are split into two sections.
	The Korean and Japanese variants of these counter styles can,
	if limited to the range of -9999 to 9999,
	be expressed as ''@counter-style'' rules.
	The Chinese variants use a [[#limited-chinese|specialized algorithm]],
	regardless of range.
	The required implementation is described in [[#limited-range-required]],
	which defines the styles over these limited ranges,
	and the optional implementation is described in [[#extended-range-optional]],
	which defines them over a larger range using custom algorithms.
	Outside the implementation-supported range,
	the fallback is ''cjk-decimal''.

<!--
██       ████ ██     ██ ████ ████████ ████████ ████████         ██████        ██ ██    ██
██        ██  ███   ███  ██     ██    ██       ██     ██       ██    ██       ██ ██   ██
██        ██  ████ ████  ██     ██    ██       ██     ██       ██             ██ ██  ██
██        ██  ██ ███ ██  ██     ██    ██████   ██     ██       ██             ██ █████
██        ██  ██     ██  ██     ██    ██       ██     ██       ██       ██    ██ ██  ██
██        ██  ██     ██  ██     ██    ██       ██     ██       ██    ██ ██    ██ ██   ██
████████ ████ ██     ██ ████    ██    ████████ ████████         ██████   ██████  ██    ██
-->

<h4 id='limited-range-required'>Limited-range Implementation (required)</h4>
<h5 id='limited-japanese'>
Japanese: ''japanese-informal'' and ''japanese-formal''</h5>

	<dl dfn-type="value" dfn-for="<counter-style-name>">
		<dt><dfn id="japanese-informal">japanese-informal</dfn>
		<dd>
			Informal Japanese Kanji numbering
			(e.g., 千百十一)

			<wpt>
				japanese-informal/counter-japanese-informal-extended.html
				japanese-informal/counter-japanese-informal.html
				japanese-informal/css3-counter-styles-042.html
				japanese-informal/css3-counter-styles-043.html
				japanese-informal/css3-counter-styles-044.html
				japanese-informal/css3-counter-styles-045.html
				japanese-informal/css3-counter-styles-046.html
			</wpt>

		<dt><dfn id="japanese-formal">japanese-formal</dfn>
		<dd>
			Formal Japanese Kanji numbering
			(e.g. 壱阡壱百壱拾壱)

			<wpt>
				japanese-formal/counter-japanese-formal-extended.html
				japanese-formal/counter-japanese-formal.html
				japanese-formal/css3-counter-styles-047.html
				japanese-formal/css3-counter-styles-048.html
				japanese-formal/css3-counter-styles-049.html
				japanese-formal/css3-counter-styles-050.html
				japanese-formal/css3-counter-styles-051.html
			</wpt>
	</dl>

	<pre class=stylesheet>
	@counter-style japanese-informal {
		system: additive;
		range: -9999 9999;
		additive-symbols: 9000 \4E5D\5343, 8000 \516B\5343, 7000 \4E03\5343, 6000 \516D\5343, 5000 \4E94\5343, 4000 \56DB\5343, 3000 \4E09\5343, 2000 \4E8C\5343, 1000 \5343, 900 \4E5D\767E, 800 \516B\767E, 700 \4E03\767E, 600 \516D\767E, 500 \4E94\767E, 400 \56DB\767E, 300 \4E09\767E, 200 \4E8C\767E, 100 \767E, 90 \4E5D\5341, 80 \516B\5341, 70 \4E03\5341, 60 \516D\5341, 50 \4E94\5341, 40 \56DB\5341, 30 \4E09\5341, 20 \4E8C\5341, 10 \5341, 9 \4E5D, 8 \516B, 7 \4E03, 6 \516D, 5 \4E94, 4 \56DB, 3 \4E09, 2 \4E8C, 1 \4E00, 0 \3007;
		/* 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 一, 0 〇 */
		suffix: '\3001';
		/* 、 */
		negative: "\30DE\30A4\30CA\30B9";
		/* マイナス */
		fallback: cjk-decimal;
	}

	@counter-style japanese-formal {
		system: additive;
		range: -9999 9999;
		additive-symbols: 9000 \4E5D\9621, 8000 \516B\9621, 7000 \4E03\9621, 6000 \516D\9621, 5000 \4F0D\9621, 4000 \56DB\9621, 3000 \53C2\9621, 2000 \5F10\9621, 1000 \58F1\9621, 900 \4E5D\767E, 800 \516B\767E, 700 \4E03\767E, 600 \516D\767E, 500 \4F0D\767E, 400 \56DB\767E, 300 \53C2\767E, 200 \5F10\767E, 100 \58F1\767E, 90 \4E5D\62FE, 80 \516B\62FE, 70 \4E03\62FE, 60 \516D\62FE, 50 \4F0D\62FE, 40 \56DB\62FE, 30 \53C2\62FE, 20 \5F10\62FE, 10 \58F1\62FE, 9 \4E5D, 8 \516B, 7 \4E03, 6 \516D, 5 \4F0D, 4 \56DB, 3 \53C2, 2 \5F10, 1 \58F1, 0 \96F6;
		/* 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 壱, 0 零 */
		suffix: '\3001';
		/* 、 */
		negative: "\30DE\30A4\30CA\30B9";
		/* マイナス */
		fallback: cjk-decimal;
	}
	</pre>


<h5 id=limited-korean>
Korean: ''korean-hangul-formal'', ''korean-hanja-informal'', and ''korean-hanja-formal''</h5>

	<dl dfn-for="<counter-style-name>" dfn-type="value">
		<dt><dfn id="korean-hangul-formal">korean-hangul-formal</dfn>
		<dd>
			Korean Hangul numbering
			(e.g., 일천일백일십일)

			<wpt>
				korean-hangul-formal/counter-korean-hangul-formal-extended.html
				korean-hangul-formal/counter-korean-hangul-formal.html
				korean-hangul-formal/css3-counter-styles-052.html
				korean-hangul-formal/css3-counter-styles-053.html
				korean-hangul-formal/css3-counter-styles-054.html
				korean-hangul-formal/css3-counter-styles-055.html
				korean-hangul-formal/css3-counter-styles-056.html
			</wpt>

		<dt><dfn id="korean-hanja-informal">korean-hanja-informal</dfn>
		<dd>
			Informal Korean Hanja numbering
			(e.g., 千百十一)

			<wpt>
				korean-hanja-informal/counter-korean-hanja-informal-extended.html
				korean-hanja-informal/counter-korean-hanja-informal.html
				korean-hanja-informal/css3-counter-styles-057.html
				korean-hanja-informal/css3-counter-styles-058.html
				korean-hanja-informal/css3-counter-styles-059.html
				korean-hanja-informal/css3-counter-styles-060.html
				korean-hanja-informal/css3-counter-styles-061.html
			</wpt>

		<dt><dfn id="korean-hanja-formal">korean-hanja-formal</dfn>
		<dd>
			Formal Korean Han (Hanja) numbering
			(e.g., 壹仟壹百壹拾壹)

			<wpt>
				korean-hanja-formal/counter-korean-hanja-formal-extended.html
				korean-hanja-formal/counter-korean-hanja-formal.html
				korean-hanja-formal/css3-counter-styles-062.html
				korean-hanja-formal/css3-counter-styles-063.html
				korean-hanja-formal/css3-counter-styles-064.html
				korean-hanja-formal/css3-counter-styles-065.html
				korean-hanja-formal/css3-counter-styles-066.html
			</wpt>
	</dl>

	<pre class=stylesheet>
	@counter-style korean-hangul-formal {
		system: additive;
		range: -9999 9999;
		additive-symbols: 9000 \AD6C\CC9C, 8000 \D314\CC9C, 7000 \CE60\CC9C, 6000 \C721\CC9C, 5000 \C624\CC9C, 4000 \C0AC\CC9C, 3000 \C0BC\CC9C, 2000 \C774\CC9C, 1000 \C77C\CC9C, 900 \AD6C\BC31, 800 \D314\BC31, 700 \CE60\BC31, 600 \C721\BC31, 500 \C624\BC31, 400 \C0AC\BC31, 300 \C0BC\BC31, 200 \C774\BC31, 100 \C77C\BC31, 90 \AD6C\C2ED, 80 \D314\C2ED, 70 \CE60\C2ED, 60 \C721\C2ED, 50 \C624\C2ED, 40 \C0AC\C2ED, 30 \C0BC\C2ED, 20 \C774\C2ED, 10 \C77C\C2ED, 9 \AD6C, 8 \D314, 7 \CE60, 6 \C721, 5 \C624, 4 \C0AC, 3 \C0BC, 2 \C774, 1 \C77C, 0 \C601;
		/* 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 일, 0 영 */
		suffix: ', ';
		negative: "\B9C8\C774\B108\C2A4  ";
		/* 마이너스 (followed by a space) */
		fallback: cjk-decimal;
	}

	@counter-style korean-hanja-informal {
		system: additive;
		range: -9999 9999;
		additive-symbols: 9000 \4E5D\5343, 8000 \516B\5343, 7000 \4E03\5343, 6000 \516D\5343, 5000 \4E94\5343, 4000 \56DB\5343, 3000 \4E09\5343, 2000 \4E8C\5343, 1000 \5343, 900 \4E5D\767E, 800 \516B\767E, 700 \4E03\767E, 600 \516D\767E, 500 \4E94\767E, 400 \56DB\767E, 300 \4E09\767E, 200 \4E8C\767E, 100 \767E, 90 \4E5D\5341, 80 \516B\5341, 70 \4E03\5341, 60 \516D\5341, 50 \4E94\5341, 40 \56DB\5341, 30 \4E09\5341, 20 \4E8C\5341, 10 \5341, 9 \4E5D, 8 \516B, 7 \4E03, 6 \516D, 5 \4E94, 4 \56DB, 3 \4E09, 2 \4E8C, 1 \4E00, 0 \96F6;
		/* 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 一, 0 零 */
		suffix: ', ';
		negative: "\B9C8\C774\B108\C2A4  ";
		/* 마이너스 (followed by a space) */
		fallback: cjk-decimal;
	}

	@counter-style korean-hanja-formal {
		system: additive;
		range: -9999 9999;
		additive-symbols: 9000 \4E5D\4EDF, 8000 \516B\4EDF, 7000 \4E03\4EDF, 6000 \516D\4EDF, 5000 \4E94\4EDF, 4000 \56DB\4EDF, 3000 \53C3\4EDF, 2000 \8CB3\4EDF, 1000 \58F9\4EDF, 900 \4E5D\767E, 800 \516B\767E, 700 \4E03\767E, 600 \516D\767E, 500 \4E94\767E, 400 \56DB\767E, 300 \53C3\767E, 200 \8CB3\767E, 100 \58F9\767E, 90 \4E5D\62FE, 80 \516B\62FE, 70 \4E03\62FE, 60 \516D\62FE, 50 \4E94\62FE, 40 \56DB\62FE, 30 \53C3\62FE, 20 \8CB3\62FE, 10 \58F9\62FE, 9 \4E5D, 8 \516B, 7 \4E03, 6 \516D, 5 \4E94, 4 \56DB, 3 \53C3, 2 \8CB3, 1 \58F9, 0 \96F6;
		/* 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 壹, 0 零 */
		suffix: ', ';
		negative: "\B9C8\C774\B108\C2A4  ";
		/* 마이너스 (followed by a space) */
		fallback: cjk-decimal;
	}
	</pre>


<h5 id='limited-chinese'>
Chinese: ''simp-chinese-informal'', ''simp-chinese-formal'', ''trad-chinese-informal'', and ''trad-chinese-formal''</h5>

	<dl dfn-type="value" dfn-for="<counter-style>">
		<dt><dfn id="simp-chinese-informal">simp-chinese-informal</dfn>
		<dd>
			Simplified Chinese informal numbering
			(e.g., 一千一百一十一)

			<wpt>
				simp-chinese-informal/counter-simp-chinese-informal.html
				simp-chinese-informal/css3-counter-styles-071.html
				simp-chinese-informal/css3-counter-styles-072.html
				simp-chinese-informal/css3-counter-styles-073.html
				simp-chinese-informal/css3-counter-styles-074.html
				simp-chinese-informal/css3-counter-styles-075.html
			</wpt>

		<dt><dfn id="simp-chinese-formal">simp-chinese-formal</dfn>
		<dd>
			Simplified Chinese formal numbering
			(e.g. 壹仟壹佰壹拾壹)

			<wpt>
				simp-chinese-formal/counter-simp-chinese-formal.html
				simp-chinese-formal/css3-counter-styles-076.html
				simp-chinese-formal/css3-counter-styles-077.html
				simp-chinese-formal/css3-counter-styles-078.html
				simp-chinese-formal/css3-counter-styles-079.html
				simp-chinese-formal/css3-counter-styles-080.html
			</wpt>

		<dt><dfn id="trad-chinese-informal">trad-chinese-informal</dfn>
		<dd>
			Traditional Chinese informal numbering
			(e.g., 一千一百一十一)

			<wpt>
				trad-chinese-informal/counter-trad-chinese-informal.html
				trad-chinese-informal/css3-counter-styles-081.html
				trad-chinese-informal/css3-counter-styles-082.html
				trad-chinese-informal/css3-counter-styles-083.html
				trad-chinese-informal/css3-counter-styles-084.html
				trad-chinese-informal/css3-counter-styles-085.html
			</wpt>

		<dt><dfn id="trad-chinese-formal">trad-chinese-formal</dfn>
		<dd>
			Traditional Chinese formal numbering
			(e.g., 壹仟壹佰壹拾壹)

			<wpt>
				trad-chinese-formal/counter-trad-chinese-formal.html
				trad-chinese-formal/css3-counter-styles-086.html
				trad-chinese-formal/css3-counter-styles-087.html
				trad-chinese-formal/css3-counter-styles-088.html
				trad-chinese-formal/css3-counter-styles-089.html
				trad-chinese-formal/css3-counter-styles-090.html
			</wpt>

		<dt><dfn id="cjk-ideographic">cjk-ideographic</dfn>
		<dd>
			This counter style is identical to ''trad-chinese-informal''.
			(It exists for legacy reasons.)
	</dl>

	The Chinese longhand styles are defined by almost identical algorithms
	(specified as a single algorithm here,
	with the differences called out when relevant),
	but use different sets of characters,
	as specified by the table following the algorithm.

	<ol>
		<li>If the counter value is 0,
		the representation is the character for 0 specified for the given counter style.
		Skip the rest of this algorithm.

		<li>If the counter value is negative,
		instead use the absolute value of the counter value for the remaining steps of this algorithm.

		<li>Initially represent the counter value as a decimal number.
		For each digit that is not 0,
		append the appropriate digit marker to the digit.
		The ones digit has no marker.

		<li>For the informal styles,
		if the counter value is between ten and nineteen,
		remove the tens digit (leave the digit marker).

		<li>Drop any trailing zeros
		and collapse any remaining zeros into a single zero digit.

		<li>Replace the digits 0-9 with the appropriate character
		for the given counter style.

		<li>If the counter value was negative,
		prepend the appropriate negative sign character for the given counter style
		as specified in the table of characters for each style.

		<li>Return the resultant string as the representation of the counter value.
	</ol>

	For all of these counter styles,
	the '@counter-style/suffix' is "、" U+3001,
	the '@counter-style/fallback' is ''cjk-decimal'',
	the '@counter-style/range' is ''-9999 9999'',
	and the '@counter-style/negative' value is given in the table of symbols for each style.

	The following tables define the characters used in these styles:

	<table class='data'>
		<thead>
			<tr>
				<th rowspan=2 scope=col>Values
				<th colspan=4 scope=col>Codepoints
			<tr>
				<th>simp-chinese-informal
				<th>simp-chinese-formal
				<th>trad-chinese-informal
				<th>trad-chinese-formal
		
		<tbody>
			<tr>
				<th scope=row>Digit 0
				<td>零 U+96F6
				<td>零 U+96F6
				<td>零 U+96F6
				<td>零 U+96F6
			<tr>
				<th scope=row>Digit 1
				<td>一 U+4E00
				<td>壹 U+58F9
				<td>一 U+4E00
				<td>壹 U+58F9
			<tr>
				<th scope=row>Digit 2
				<td>二 U+4E8C
				<td>贰 U+8D30
				<td>二 U+4E8C
				<td>貳 U+8CB3
			<tr>
				<th scope=row>Digit 3
				<td>三 U+4E09
				<td>叁 U+53C1
				<td>三 U+4E09
				<td>參 U+53C3
			<tr>
				<th scope=row>Digit 4
				<td>四 U+56DB
				<td>肆 U+8086
				<td>四 U+56DB
				<td>肆 U+8086
			<tr>
				<th scope=row>Digit 5
				<td>五 U+4E94
				<td>伍 U+4F0D
				<td>五 U+4E94
				<td>伍 U+4F0D
			<tr>
				<th scope=row>Digit 6
				<td>六 U+516D
				<td>陆 U+9646
				<td>六 U+516D
				<td>陸 U+9678
			<tr>
				<th scope=row>Digit 7
				<td>七 U+4E03
				<td>柒 U+67D2
				<td>七 U+4E03
				<td>柒 U+67D2
			<tr>
				<th scope=row>Digit 8
				<td>八 U+516B
				<td>捌 U+634C
				<td>八 U+516B
				<td>捌 U+634C
			<tr>
				<th scope=row>Digit 9
				<td>九 U+4E5D
				<td>玖 U+7396
				<td>九 U+4E5D
				<td>玖 U+7396
			<tr>
				<th scope=row>Tens Digit Marker
				<td>十 U+5341
				<td>拾 U+62FE
				<td>十 U+5341
				<td>拾 U+62FE
			<tr>
				<th scope=row>Hundreds Digit Marker
				<td>百 U+767E
				<td>佰 U+4F70
				<td>百 U+767E
				<td>佰 U+4F70
			<tr>
				<th scope=row>Thousands Digit Marker
				<td>千 U+5343
				<td>仟 U+4EDF
				<td>千 U+5343
				<td>仟 U+4EDF
			<tr>
				<th scope=row>Negative Sign
				<td>负 U+8D1F
				<td>负 U+8D1F
				<td>負 U+8CA0
				<td>負 U+8CA0
		
	</table>

	<div class='note'>
		For reference, here are the first 120 values for the ''simp-chinese-informal'' style:

		<pre>
		  1　　　　 一    41　　 四十一    81　　 八十一
		  2　　　　 二    42　　 四十二    82　　 八十二
		  3　　　　 三    43　　 四十三    83　　 八十三
		  4　　　　 四    44　　 四十四    84　　 八十四
		  5　　　　 五    45　　 四十五    85　　 八十五
		  6　　　　 六    46　　 四十六    86　　 八十六
		  7　　　　 七    47　　 四十七    87　　 八十七
		  8　　　　 八    48　　 四十八    88　　 八十八
		  9　　　　 九    49　　 四十九    89　　 八十九
		 10　　　　 十    50　　　 五十    90　　　 九十
		 11　　　 十一    51　　 五十一    91　　 九十一
		 12　　　 十二    52　　 五十二    92　　 九十二
		 13　　　 十三    53　　 五十三    93　　 九十三
		 14　　　 十四    54　　 五十四    94　　 九十四
		 15　　　 十五    55　　 五十五    95　　 九十五
		 16　　　 十六    56　　 五十六    96　　 九十六
		 17　　　 十七    57　　 五十七    97　　 九十七
		 18　　　 十八    58　　 五十八    98　　 九十八
		 19　　　 十九    59　　 五十九    99　　 九十九
		 20　　　 二十    60　　　 六十   100　　　 一百
		 21　　 二十一    61　　 六十一   101　 一百零一
		 22　　 二十二    62　　 六十二   102　 一百零二
		 23　　 二十三    63　　 六十三   103　 一百零三
		 24　　 二十四    64　　 六十四   104　 一百零四
		 25　　 二十五    65　　 六十五   105　 一百零五
		 26　　 二十六    66　　 六十六   106　 一百零六
		 27　　 二十七    67　　 六十七   107　 一百零七
		 28　　 二十八    68　　 六十八   108　 一百零八
		 29　　 二十九    69　　 六十九   109　 一百零九
		 30　　　 三十    70　　　 七十   110　 一百一十
		 31　　 三十一    71　　 七十一   111 一百一十一
		 32　　 三十二    72　　 七十二   112 一百一十二
		 33　　 三十三    73　　 七十三   113 一百一十三
		 34　　 三十四    74　　 七十四   114 一百一十四
		 35　　 三十五    75　　 七十五   115 一百一十五
		 36　　 三十六    76　　 七十六   116 一百一十六
		 37　　 三十七    77　　 七十七   117 一百一十七
		 38　　 三十八    78　　 七十八   118 一百一十八
		 39　　 三十九    79　　 七十九   119 一百一十九
		 40　　　 四十    80　　　 八十   120　 一百二十
		</pre>
	</div>

<h4 id='extended-range-optional'>Extended Implementation (optional)</h4>

	Some counter styles described in earlier chapters have been limited to an artifically small (though still useful) range
	to reduce the overall complexity of the spec and the task of implementing those styles.
	However, some implementations might consider the extra complexity worthwhile
	for the additional range it offers to authors.
	To accomodate this,
	this section describes how to extend the limited counter-styles to a larger range.

	This entire section is normative, but <strong>optional</strong>.
	User-agents may ignore it and still be conformant.
	If a user-agent implements some of the extended forms described in this section,
	they must be implemented as described here.


	All of the Chinese, Japanese, and Korean styles are defined here
	for all numbers between -10<sup>16</sup> and 10<sup>16</sup>, exclusive.
	For numbers outside this range, the ''cjk-decimal'' style is used.
	All of the styles are defined by almost identical algorithms
	(specified as a single algorithm here,
	with the differences called out when relevant),
	but use different sets of characters.
	The list following the algorithm gives the name of each counter style using this algorithm,
	and the individual character sets used by each style.

	<ol>
		<li>If the counter value is 0,
		the representation is the character for 0 specified for the given counter style.
		Skip the rest of this algorithm.

		<li>If the counter value is negative,
		instead use the absolute value of the counter value for the remaining steps of this algorithm.

		<li>Initially represent the counter value as a decimal number.
		Starting from the right (ones place),
		split the decimal number into groups of four digits.

		<li>For each group with a non-zero value,
		append the appropriate group marker to the group.
		The ones group has no marker.

		<li>Within each group,
		for each digit that is not 0,
		append the appropriate digit marker to the digit.
		The ones digit of each group has no marker.

		<li>Drop ones:
			<ul>
				<li>For the Chinese informal styles,
				for any group with a value between ten and nineteen,
				remove the tens digit (leave the digit marker).

				<li>For the Japanese informal and Korean informal styles,
				if any of the digit markers are preceded by the digit 1,
				and that digit is not the first digit of the group,
				remove the digit (leave the digit marker).

				<li>For Korean informal styles,
				if the value of the ten-thousands group is 1,
				drop the digit (leave the digit marker).
			</ul>
		

		<li>Drop zeros:
			<ul>
				<li>For the Japanese and Korean styles,
				drop all zero digits.

				<li>For the Chinese styles,
				drop any trailing zeros for all non-zero groups
				and collapse (across groups) each remaining consecutive group of zeros
				into a single zero digit.
			</ul>

		<li>For the Korean styles,
		insert a space (" " U+0020) between each group.

		<li>Replace the digits 0-9 with the appropriate character
		for the given counter style.

		<li>If the counter value was negative,
		prepend the appropriate negative sign character for the given counter style
		as specified in the table of characters for each style.

		<li>Return the resultant string as the representation of the counter value.
	</ol>

	For all of these counter styles, the descriptors are the same as for the [[#limited-range-required|limited range variants]],
	except for the '@counter-style/range', which is ''calc(-1 * pow(10, 16) + 1) calc(pow(10, 16) - 1)''.

	The following tables define the characters used in these styles:
	<table class="data">
		<thead>
			<tr>
				<th rowspan="2" scope="col">Values
				</th><th colspan="4" scope="col">Codepoints
			</th><tr>
				<th>simp-chinese-informal
				</th><th>simp-chinese-formal
				</th><th>trad-chinese-informal
				</th><th>trad-chinese-formal
				<tbody>
			<tr>
				<th scope="row">Digit 0
				</th><td>零 U+96F6
				<td>零 U+96F6
				<td>零 U+96F6
				<td>零 U+96F6
			<tr>
				<th scope="row">Digit 1
				</th><td>一 U+4E00
				<td>壹 U+58F9
				<td>一 U+4E00
				<td>壹 U+58F9
			<tr>
				<th scope="row">Digit 2
				</th><td>二 U+4E8C
				<td>贰 U+8D30
				<td>二 U+4E8C
				<td>貳 U+8CB3
			<tr>
				<th scope="row">Digit 3
				</th><td>三 U+4E09
				<td>叁 U+53C1
				<td>三 U+4E09
				<td>參 U+53C3
			<tr>
				<th scope="row">Digit 4
				</th><td>四 U+56DB
				<td>肆 U+8086
				<td>四 U+56DB
				<td>肆 U+8086
			<tr>
				<th scope="row">Digit 5
				</th><td>五 U+4E94
				<td>伍 U+4F0D
				<td>五 U+4E94
				<td>伍 U+4F0D
			<tr>
				<th scope="row">Digit 6
				</th><td>六 U+516D
				<td>陆 U+9646
				<td>六 U+516D
				<td>陸 U+9678
			<tr>
				<th scope="row">Digit 7
				</th><td>七 U+4E03
				<td>柒 U+67D2
				<td>七 U+4E03
				<td>柒 U+67D2
			<tr>
				<th scope="row">Digit 8
				</th><td>八 U+516B
				<td>捌 U+634C
				<td>八 U+516B
				<td>捌 U+634C
			<tr>
				<th scope="row">Digit 9
				</th><td>九 U+4E5D
				<td>玖 U+7396
				<td>九 U+4E5D
				<td>玖 U+7396
			<tr>
				<th scope="row">Second Digit Marker
				</th><td>十 U+5341
				<td>拾 U+62FE
				<td>十 U+5341
				<td>拾 U+62FE
			<tr>
				<th scope="row">Third Digit Marker
				</th><td>百 U+767E
				<td>佰 U+4F70
				<td>百 U+767E 
				<td>佰 U+4F70
			<tr>
				<th scope="row">Fourth Digit Marker
				</th><td>千 U+5343
				<td>仟 U+4EDF
				<td>千 U+5343
				<td>仟 U+4EDF
			<tr>
				<th scope="row">Second Group Marker
				</th><td>万 U+4E07
				<td>万 U+4E07
				<td>萬 U+842C
				<td>萬 U+842C
			<tr>
				<th scope="row">Third Group Marker
				</th><td>亿 U+4EBF
				<td>亿 U+4EBF
				<td>億 U+5104
				<td>億 U+5104
			<tr>
				<th scope="row">Fourth Group Marker
				</th><td>万亿 U+4E07 U+4EBF
				<td>万亿 U+4E07 U+4EBF
				<td>兆 U+5146
				<td>兆 U+5146
			<tr>
				<th scope="row">Negative Sign
				</th><td>负 U+8D1F
				<td>负 U+8D1F
				<td>負 U+8CA0
				<td>負 U+8CA0
		
	</table>

	<table class="data">
		<thead>
			<tr>
				<th rowspan="2" scope="col">Values
				</th><th colspan="2" scope="col">Codepoints
			</th><tr>
				<th>japanese-informal
				</th><th>japanese-formal
				<tbody>
			<tr>
				<th scope="row">Digit 0
				</th><td>〇 U+3007
				<td>零 U+96F6
			<tr>
				<th scope="row">Digit 1
				</th><td>一 U+4E00
				<td>壱 U+58F1
			<tr>
				<th scope="row">Digit 2
				</th><td>二 U+4E8C
				<td>弐 U+5F10
			<tr>
				<th scope="row">Digit 3
				</th><td>三 U+4E09
				<td>参 U+53C2
			<tr>
				<th scope="row">Digit 4
				</th><td>四 U+56DB
				<td>四 U+56DB
			<tr>
				<th scope="row">Digit 5
				</th><td>五 U+4E94
				<td>伍 U+4f0D
			<tr>
				<th scope="row">Digit 6
				</th><td>六 U+516D
				<td>六 U+516D
			<tr>
				<th scope="row">Digit 7
				</th><td>七 U+4E03
				<td>七 U+4E03
			<tr>
				<th scope="row">Digit 8
				</th><td>八 U+516B
				<td>八 U+516B
			<tr>
				<th scope="row">Digit 9
				</th><td>九 U+4E5D
				<td>九 U+4E5D
			<tr>
				<th scope="row">Second Digit Marker
				</th><td>十 U+5341
				<td>拾 U+62FE
			<tr>
				<th scope="row">Third Digit Marker
				</th><td>百 U+767E
				<td>百 U+767E
			<tr>
				<th scope="row">Fourth Digit Marker
				</th><td>千 U+5343
				<td>阡 U+9621
			<tr>
				<th scope="row">Second Group Marker
				</th><td>万 U+4E07
				<td>萬 U+842C
			<tr>
				<th scope="row">Third Group Marker
				</th><td>億 U+5104
				<td>億 U+5104
			<tr>
				<th scope="row">Fourth Group Marker
				</th><td>兆 U+5146
				<td>兆 U+5146
			<tr>
				<th scope="row">Negative Sign
				</th><td colspan="2">マイナス U+30DE U+30A4 U+30CA U+30B9
		
	</table>

	<table class="data">
		<thead>
			<tr>
				<th rowspan="2" scope="col">Values
				</th><th colspan="3" scope="col">Codepoints
			</th><tr>
				<th>korean-hangul-formal
				</th><th>korean-hanja-informal
				</th><th>korean-hanja-formal
				<tbody>
			<tr>
				<th scope="row">Digit 0
				</th><td>영 U+C601
				<td>零 U+96F6
				<td>零 U+96F6
			<tr>
				<th scope="row">Digit 1
				</th><td>일 U+C77C
				<td>一 U+4E00
				<td>壹 U+58F9
			<tr>
				<th scope="row">Digit 2
				</th><td>이 U+C774
				<td>二 U+4E8C
				<td>貳 U+8CB3
			<tr>
				<th scope="row">Digit 3
				</th><td>삼 U+C0BC
				<td>三 U+4E09
				<td>參 U+53C3
			<tr>
				<th scope="row">Digit 4
				</th><td>사 U+C0AC
				<td>四 U+56DB
				<td>四 U+56DB
			<tr>
				<th scope="row">Digit 5
				</th><td>오 U+C624
				<td>五 U+4E94
				<td>五 U+4E94
			<tr>
				<th scope="row">Digit 6
				</th><td>육 U+C721
				<td>六 U+516D
				<td>六 U+516D
			<tr>
				<th scope="row">Digit 7
				</th><td>칠 U+CE60
				<td>七 U+4E03
				<td>七 U+4E03
			<tr>
				<th scope="row">Digit 8
				</th><td>팔 U+D314
				<td>八 U+516B
				<td>八 U+516B
			<tr>
				<th scope="row">Digit 9
				</th><td>구 U+AD6C
				<td>九 U+4E5D
				<td>九 U+4E5D
			<tr>
				<th scope="row">Second Digit Marker
				</th><td>십 U+C2ED
				<td>十 U+5341
				<td>拾 U+62FE
			<tr>
				<th scope="row">Third Digit Marker
				</th><td>백 U+BC31
				<td>百 U+767E
				<td>百 U+767E
			<tr>
				<th scope="row">Fourth Digit Marker
				</th><td>천 U+CC9C
				<td>千 U+5343
				<td>仟 U+4EDF
			<tr>
				<th scope="row">Second Group Marker
				</th><td>만 U+B9CC
				<td>萬 U+842C
				<td>萬 U+842C
			<tr>
				<th scope="row">Third Group Marker
				</th><td>억 U+C5B5
				<td>億 U+5104
				<td>億 U+5104
			<tr>
				<th scope="row">Fourth Group Marker
				</th><td>조 U+C870
				<td>兆 U+5146
				<td>兆 U+5146
		<tr>
				<th scope="row">Negative Sign
				</th><td colspan="2">마이너스 U+B9C8 U+C774 U+B108 U+C2A4
		
	</table>

<!--
████████ ████████ ██     ██ ████  ███████  ████████  ████  ██████
██          ██    ██     ██  ██  ██     ██ ██     ██  ██  ██    ██
██          ██    ██     ██  ██  ██     ██ ██     ██  ██  ██
██████      ██    █████████  ██  ██     ██ ████████   ██  ██
██          ██    ██     ██  ██  ██     ██ ██         ██  ██
██          ██    ██     ██  ██  ██     ██ ██         ██  ██    ██
████████    ██    ██     ██ ████  ███████  ██        ████  ██████
-->

<h3 id='ethiopic-numeric-counter-style'>
Ethiopic Numeric Counter Style: ''ethiopic-numeric''</h3>

	The <dfn value for="<counter-style-name>">ethiopic-numeric</dfn> counter style is defined for all positive non-zero numbers.
	The following algorithm converts decimal digits to ethiopic numbers:

	<ol>
		<li>
			If the number is 1,
			return "፩" (U+1369).

		<li>
			Split the number into groups of two digits,
			starting with the least significant decimal digit.

		<li>
			Index each group sequentially,
			starting from the least significant as group number zero.

		<li>
			If the group has the value zero,
			or if the group is the most significant one and has the value 1,
			or if the group has an odd index (as given in the previous step) and has the value 1,
			then remove the digits
			(but leave the group, so it still has a separator appended below).

		<li>
			For each remaining digit,
			substitute the relevant ethiopic character from the list below.

			<table class=data>
				<thead>
					<tr>
						<th colspan="3">Tens
						<th colspan="3">Units
					<tr>
						<th>Values
						<th colspan="2">Codepoints
						<th>Values
						<th colspan="2">Codepoints
				<tbody>
					<tr>
						<td>10
						<td>፲
						<td>U+1372
						<td>1
						<td>፩
						<td>U+1369
					<tr>
						<td>20
						<td>፳
						<td>U+1373
						<td>2
						<td>፪
						<td>U+136A
					<tr>
						<td>30
						<td>፴
						<td>U+1374
						<td>3
						<td>፫
						<td>U+136B
					<tr>
						<td>40
						<td>፵
						<td>U+1375
						<td>4
						<td>፬
						<td>U+136C
					<tr>
						<td>50
						<td>፶
						<td>U+1376
						<td>5
						<td>፭
						<td>U+136D
					<tr>
						<td>60
						<td>፷
						<td>U+1377
						<td>6
						<td>፮
						<td>U+136E
					<tr>
						<td>70
						<td>፸
						<td>U+1378
						<td>7
						<td>፯
						<td>U+136F
					<tr>
						<td>80
						<td>፹
						<td>U+1379
						<td>8
						<td>፰
						<td>U+1370
					<tr>
						<td>90
						<td>፺
						<td>U+137A
						<td>9
						<td>፱
						<td>U+1371
			</table>


		<li>
			For each group with an odd index (as given in the second step),
			except groups which originally had a value of zero,
			append ፻ U+137B.

		<li>
			For each group with an even index (as given in the second step),
			except the group with index 0,
			append ፼ U+137C.

		<li>
			Concatenate the groups into one string,
			and return it.
	</ol>

	For this system, the name is "ethiopic-numeric",
	the '@counter-style/range' is ''1 infinite'',
	the '@counter-style/suffix' is <code>"/ "</code> (U+002F SOLIDUS followed by a U+0020 SPACE),
	and the rest of the descriptors have their initial value.

	<div class="example">
		The decimal number 100, in ethiopic, is ፻ U+137B <!-- odd -->

		The decimal number 78010092, in ethiopic, is
		፸፰፻፩፼፺፪
		U+1378 U+1370 U+137B <!-- 70 8 odd --> U+1369 U+137C <!-- 1 even --> U+137A U+136A. <!-- 90 2 -->

		The decimal number 780100000092, in ethiopic, is
		፸፰፻፩፼፼፺፪
		U+1378 U+1370 U+137B <!-- 70 8 odd --> U+1369 U+137C <!-- 1 even --> U+137C <!-- even --> U+137A U+136A. <!-- 90 2 -->
	</div>

	<wpt>
		ethiopic-numeric/counter-ethiopic-numeric.html
		ethiopic-numeric/css3-counter-styles-068.html
		ethiopic-numeric/css3-counter-styles-069.html
		ethiopic-numeric/css3-counter-styles-070.html
	</wpt>

<!--
   ███    ████████  ████████ ██
  ██ ██   ██     ██    ██    ██
 ██   ██  ██     ██    ██    ██
██     ██ ██     ██    ██    ██
█████████ ██     ██    ██    ██
██     ██ ██     ██    ██    ██
██     ██ ████████     ██    ████████
-->

<h2 id='additional-predefined'>
Additional “Ready-made” Counter Styles</h2>

	The <a href="https://www.w3.org/International/">Internationalization Working Group</a>
	maintains a collection of additional ''@counter-style'' rules for various world languages
	in <a href="https://www.w3.org/TR/predefined-counter-styles/">Ready-made Counter Styles</a>.
	[[predefined-counter-styles]]

	As with the counter styles defined in [[#predefined-counters]],
	UAs must include these in their UA stylesheet
	(or at least act as if these rules were defined at that level).

	Note: Authors can use the <a href="https://www.w3.org/TR/predefined-counter-styles/">Ready-made Counter Styles</a>
	even in UAs that don't support them
	by copying the rules directly into their style sheets.

<!--
   ███    ████████  ████  ██████
  ██ ██   ██     ██  ██  ██    ██
 ██   ██  ██     ██  ██  ██
██     ██ ████████   ██   ██████
█████████ ██         ██        ██
██     ██ ██         ██  ██    ██
██     ██ ██        ████  ██████
-->

<h2 id="apis">APIs</h2>

<h3 id='extensions-to-cssrule-interface'>
Extensions to the <code>CSSRule</code> interface</h3>

	The <code>CSSRule</code> interface is extended as follows:

	<pre class='idl'>
	partial interface CSSRule {
	    const unsigned short <dfn const for=CSSRule>COUNTER_STYLE_RULE</dfn> = 11;
	};
	</pre>


<h3 id="the-csscounterstylerule-interface">
The <code>CSSCounterStyleRule</code> interface</h3>

	The <a interface>CSSCounterStyleRule</a> interface represents a ''@counter-style'' rule.

	<pre class='idl'>
	[Exposed=Window]
	interface CSSCounterStyleRule : CSSRule {
	  attribute CSSOMString name;
	  attribute CSSOMString system;
	  attribute CSSOMString symbols;
	  attribute CSSOMString additiveSymbols;
	  attribute CSSOMString negative;
	  attribute CSSOMString prefix;
	  attribute CSSOMString suffix;
	  attribute CSSOMString range;
	  attribute CSSOMString pad;
	  attribute CSSOMString speakAs;
	  attribute CSSOMString fallback;
	};
	</pre>

	<wpt>
		cssom/cssom-additive-symbols-setter-invalid.html
		cssom/cssom-additive-symbols-setter.html
		cssom/cssom-fallback-setter-invalid.html
		cssom/cssom-fallback-setter.html
		cssom/cssom-name-setter-invalid.html
		cssom/cssom-name-setter.html
		cssom/cssom-negative-setter-invalid.html
		cssom/cssom-negative-setter.html
		cssom/cssom-pad-setter-invalid.html
		cssom/cssom-pad-setter.html
		cssom/cssom-prefix-suffix-setter-invalid.html
		cssom/cssom-prefix-suffix-setter.html
		cssom/cssom-range-setter-invalid.html
		cssom/cssom-range-setter.html
		cssom/cssom-symbols-setter-invalid.html
		cssom/cssom-symbols-setter.html
		cssom/cssom-system-setter-1.html
		cssom/cssom-system-setter-2.html
		cssom/cssom-system-setter-invalid.html
	</wpt>

	<dl dfn-type=attribute dfn-for=CSSCounterStyleRule>
		<dt><dfn>name</dfn>
		<dd>
			The <var>name</var> attribute on getting must return a <code>CSSOMString</code> object
			that contains the serialization of the <<counter-style-name>> defined for the associated rule.

			On setting the <var>name</var> attribute, run the following steps:

			1. If the value is an [=ASCII case-insensitive=] match
				for "none"
				or one of the [=non-overridable counter-style names=],
				do nothing and return.

			2. If the value is an <a>ASCII case-insensitive</a> match
				for any of the predefined <a>counter styles</a>,
				lowercase it.

			3. Replace the associated rule's name with an <a>identifier</a> equal to the value.

		<dt><dfn>system</dfn>
		<dt><dfn>symbols</dfn>
		<dt><dfn>additiveSymbols</dfn>
		<dt><dfn>negative</dfn>
		<dt><dfn>prefix</dfn>
		<dt><dfn>suffix</dfn>
		<dt><dfn>range</dfn>
		<dt><dfn>pad</dfn>
		<dt><dfn>speakAs</dfn>
		<dt><dfn>fallback</dfn>
		<dd>
			The remaining attributes on getting must return a <code>CSSOMString</code> object
			that contains the serialization of the associated descriptor defined for the associated rule.
			If the descriptor was not specified in the associated rule,
			the attribute must return an empty string.

			On setting, run the following steps:

			1. [=CSS/parse=] [=the given value=] as the descriptor associated with the attribute.

			2. If the result is invalid according to the given descriptor's grammar,
				or would cause the ''@counter-style'' rule to not define a counter style,
				do nothing and abort these steps.
				(For example, some systems require the '@counter-style/symbols' descriptor to contain two values.)

			3. If the attribute being set is <a idl>system</a>,
				and the new value would change the algorithm used,
				do nothing and abort these steps.
				<span class='note'>It's okay to change an aspect of the algorithm,
				like the <a>first symbol value</a> of a ''system/fixed'' system.</span>

			4. Set the descriptor to the value.
	</dl>

<h2 id='ua-stylesheet'>
Sample style sheet for HTML</h2>

	This section is informative, not normative.
	HTML itself defines the styles that apply to its elements,
	and in some cases defers to the user agent's discretion.

	<pre>
	details > summary {
		display: list-item;
		list-style: disclosure-closed inside;
	}

	details[open] > summary {
		list-style: disclosure-open inside;
	}
	</pre>


<h2 class='no-num' id='changes'>
Changes</h2>

<h3 id='changes-2021'>
Changes since the July 2021 Candidate Recommendation</h3>

	Significant changes since the <a href="https://www.w3.org/TR/2021/CR-css-counter-styles-3-20210727/">July 27 2021 Candidate Recommendation</a>:

	* Added ''fallback: cjk-decimal'' descriptor
		to ''cjk-earthly-branch'' and ''cjk-heavenly-stem''.
		(<a href="https://github.com/w3c/csswg-drafts/issues/8975">Issue 8975</a>)

	* Restored the <css>fallback: cjk-decimal</css> descriptor
		to the Korean styles
		which was accidentally dropped in
		<a href="https://github.com/w3c/csswg-drafts/commit/20a3d9ca02f235d8af13aa2bb05f725448371ad2">this commit</a>.
		(<a href="https://github.com/w3c/csswg-drafts/issues/8870">Issue 8870</a>)

	* Fixed the accidental desync between disallowed name keywords in the syntax vs the OM.
		(<a href="https://github.com/w3c/csswg-drafts/issues/8186">Issue 8186</a>)

	* Added conformance requirement to support <a href="https://www.w3.org/TR/predefined-counter-styles/">Ready-made Counter Styles</a>.
		(<a href="https://github.com/w3c/csswg-drafts/issues/8636">Issue 8636</a>)

	* Added Web Platform Tests coverage.

<h3 id='changes-2017'>
Changes since the December 2017 Candidate Recommendation</h3>

	Significant changes since the <a href="https://www.w3.org/TR/2017/CR-css-counter-styles-3-20171214/">December 14 2017 Candidate Recommendation</a>:

	* Made ''list-style-type/none'', ''decimal'', ''disc'', ''circle'', ''square'', ''disclosure-open'', ''disclosure-close'' non-overridable.
		(<a href="https://github.com/w3c/csswg-drafts/issues/3584">Issue 3584</a>)
	* Clarified counter-style lookups in Shadow DOM.
		(<a href="https://github.com/w3c/csswg-drafts/issues/5693">Issue 5693</a>)
	* Clarified what happens in various invalid ''@counter-style'' situations.
		(<a href="https://github.com/w3c/csswg-drafts/issues/5698">Issue 5698</a>,
		 <a href="https://github.com/w3c/csswg-drafts/issues/5717">Issue 5717</a>)
	* Fixed divide-by-zero error in additive algorithm.
		(<a href="https://github.com/w3c/csswg-drafts/issues/5784">Issue 5784</a>)
	* Fixed ''square'' symbol to not use an emoji symbol.
		(<a href="https://github.com/w3c/csswg-drafts/issues/6200">Issue 6200</a>)
	* Allowed UAs to override the font choice of predefined symbolic counter styles.
		(<a href="https://github.com/w3c/csswg-drafts/issues/6201">Issue 6201</a>)
	* Restricted special rendering of predefined symbolic counter styles
		to usage as a list marker via 'list-style-type'.
		(<a href="https://github.com/w3c/csswg-drafts/issues/6201">Issue 6201</a>)
	* Clarified that '@counter-style/speak-as' represents spoken output; it may be used for other AT.
		(<a href="https://github.com/w3c/csswg-drafts/issues/6040">Issue 6040</a>)
		<blockquote>
			<p>A counter style can be constructed with a meaning that is obvious visually,
			but impossible to meaningfully represent via a speech synthesizer or other non-visual means,
			or possible but nonsensical when naively read out <ins>loud</ins>.
			The '@counter-style/speak-as' descriptor describes how to synthesize
			the spoken form of a counter formatted with the given counter style.
			<ins>Assistive technologies should use this spoken form when reading out the counter style,
			and may use the '@counter-style/speak-as' value
			to inform transformations to outputs other than speech.</ins>
		</blockquote>

	A <a href="https://drafts.csswg.org/css-counter-styles-3/issues-cr-2017">Disposition of Comments</a> is available.

<h3 id='changes-jun-2015'>
Changes since the June 2015 Candidate Recommendation</h3>

	Significant changes since the <a href="https://www.w3.org/TR/2015/CR-css-counter-styles-3-20150611/">June 11 2015 Candidate Recommendation</a>:

	* Exclude ''list-style-type/none'' and ''disc'' from being the name of a counter style.
	* When setting CSSCounterStyle.name, take the string directly; don't [=CSS/parse=] it as an ident.
	* Clarify that counter styles are read out in the element's <a>content language</a>.
	* Clarified that '@counter-style/additive-symbols' tuples must be of <em>strictly</em> decreasing weight.
	* Specified that invalid values just invalidate the declaration, not the whole rule.
	* ''@counter-style'' rules that are invalid due to missing descriptors just fail to create a <a>counter style</a>;
		they're otherwise still valid rules.
	* Changed syntax to use [=CSS bracketed range notation=] to reflect
		the prose restrictions on negative values.

	A <a href="https://drafts.csswg.org/css-counter-styles-3/issues-cr-20150611">Disposition of Comments</a> is available.

<h3 id='changes-feb-2015'>
Changes since the Feb 2015 Candidate Recommendation</h3>

	* Allowed UAs to extend the ''hebrew'' style past the spec-defined limits
		(since the current limits are mostly just an artifact of how annoying it is to go higher with the ''@counter-style''-based definition).


<h2 class="no-num" id="acknowledgments">
Acknowledgments</h2>

	The following people and documentation they wrote were very useful for defining the numbering systems:
	<!-- alphabetical by full name -->
	Alexander Savenkov,
	Arron Eicholz,
	Aryeh Gregor,
	Christopher Hoess,
	Daniel Yacob,
	Frank Tang,
	Jonathan Rosenne,
	Karl Ove Hufthammer,
	Musheg Arakelyan,
	Nariné Renard Karapetyan,
	Randall Bart,
	Richard Ishida,
	Simon Montagu (Mozilla, smontagu@smontagu.org)

	Special thanks to Xidorn Quan for <em>extensive</em> reviews of all aspects of the spec,
	and also to Simon Sapin and Håkon Wium Lie for their review comments.

	<!-- see http://www.damowmow.com/temp/csswg/lists/part2.html
	     http://www.qsm.co.il/Hebrew/Gimatria.htm
	     http://people.netscape.com/smontagu/writings/HebrewNumbers.html
	     http://www.ethiopic.org/Collation/OrderedLists.html
	     http://bugzilla.mozilla.org/show_bug.cgi?id=102252
	     http://www.geez.org/Numerals/ -->

<h2 class="no-num" id="privacy">
Privacy Considerations</h2>

	This specification introduces no new privacy considerations.


<h2 class="no-num" id="security">
Security Considerations</h2>

	This specification introduces no new security considerations.
