HTML Standard Tracker

Filter

File a bug

SVNBugCommentTime (UTC)
2876Make it possible to hide implementation requirements with an alternative style sheet. Add author documentation for most of the APIs. Fix minor typos and oversights here and there.2009-03-18 06:49
@@ -36,25 +36,25 @@
   vague subject referred to as Web Applications. This specification
   attempts to rectify this, while at the same time updating the HTML
   specifications to address issues raised in the past few years.</p>
 
 
   <h3>Audience</h3>
 
   <p><em>This section is non-normative.</em></p>
 
   <p>This specification is intended for authors of documents and
-  scripts that use the features defined in this specification, and
-  implementors of tools that are intended to conform to this
-  specification, and individuals wishing to establish the correctness
-  of documents or implementations with respect to the requirements of
-  this specification.</p>
+  scripts that use the features defined in this specification<span
+  class="impl">, and implementors of tools that are intended to
+  conform to this specification, and individuals wishing to establish
+  the correctness of documents or implementations with respect to the
+  requirements of this specification</span>.</p>
 
   <p>This document is probably not suited to readers who do not
   already have at least a passing familiarity with Web technologies,
   as in places it sacrifices clarity for precision, and brevity for
   completeness. More approachable tutorials and authoring guides can
   provide a gentler introduction to the topic.</p>
 
   <p>In particular, readers should be familiar with the basics of DOM
   Core and DOM Events before reading this specification. An
   understanding of WebIDL, HTTP, XML, Unicode, character encodings,
@@ -260,23 +260,23 @@
 
    <dd>Documents are built from elements. These elements form a tree
    using the DOM. This section defines the features of this DOM, as
    well as introducing the features common to all elements, and the
    concepts used in defining elements.</dd>
 
 
    <dt><a href="#semantics">Elements</a></dt>
 
    <dd>Each element has a predefined meaning, which is explained in
-   this section. User agent requirements for how to handle each
-   element are also given, along with rules for authors on how to use
-   the element.</dd>
+   this section. Rules for authors on how to use the element<span
+   class="impl">, along with user agent requirements for how to handle
+   each element,</span> are also given.</dd>
 
 
    <dt><a href="#browsers">Web Browsers</a></dt>
 
    <dd>HTML documents do not exist in a vacuum &mdash; this section
    defines many of the features that affect environments that deal
    with multiple pages, links between pages, and running scripts.</dd>
 
 
    <dt><a href="#editing">User Interaction</a></dt>
@@ -324,39 +324,54 @@
   <p>This is a definition, requirement, or explanation.</p>
 
   <p class="note">This is a note.</p>
 
   <p class="example">This is an example.</p>
 
   <p class="XXX">This is an open issue.</p>
 
   <p class="warning">This is a warning.</p>
 
+  <pre class="idl">interface <dfn title="">Example</dfn> {
+  // this is an IDL definition
+};</pre>
+
+  <dl class="domintro">
+
+   <dt><var title="">variable</var> = <var title="">object</var> . <code title="">method</code>( [ <var title="">optionalArgument</var> ] )</dt>
+
+   <dd>
+
+    <p>This is a note to authors describing the usage of an interface.</p>
+
+   </dd>
+
+  </dl>
+
+  <pre class="css">/* this is a CSS fragment */</pre>
+
   <p>The defining instance of a term is marked up like <dfn
   title="x-this">this</dfn>. Uses of that term are marked up like
   <span title="x-this">this</span> or like <i
   title="x-this">this</i>.</p>
 
   <p>The defining instance of an element, attribute, or API is marked
   up like <dfn title="x-that"><code>this</code></dfn>. References to
   that element, attribute, or API are marked up like <code
   title="x-that">this</code>.</p>
 
   <p>Other code fragments are marked up <code title="">like
   this</code>.</p>
 
   <p>Variables are marked up like <var title="">this</var>.</p>
 
-  <pre class="idl">interface <dfn title="">Example</dfn> {
-  // this is an IDL definition
-};</pre>
-
+  <p class="impl">This is an implementation requirement.</p>
 
 
   <h2 id="infrastructure">Common infrastructure</h2>
 
   <h3>Terminology</h3>
 
   <p>This specification refers to both HTML and XML attributes and DOM
   attributes, often in the same context. When it is not clear which is
   being referred to, they are referred to as <dfn>content
   attributes</dfn> for HTML and XML attributes, and <dfn>DOM
@@ -381,27 +396,28 @@
   refer to any use of HTML, ranging from short static documents to
   long essays or reports with rich multimedia, as well as to
   fully-fledged interactive applications.</p>
 
   <p>For simplicity, terms such as <i>shown</i>, <i>displayed</i>,
   and <i>visible</i> might sometimes be used when referring to the
   way a document is rendered to the user. These terms are not meant to
   imply a visual medium; they must be considered to apply to other
   media in equivalent ways.</p>
 
-  <p>Some of the algorithms in this specification, for historical
-  reasons, require the user agent to <dfn>pause</dfn> until some
-  condition has been met. While a user agent is paused, it must ensure
-  that no scripts execute (e.g. no event handlers, no timers,
+  <p class="impl">Some of the algorithms in this specification, for
+  historical reasons, require the user agent to <dfn>pause</dfn> until
+  some condition has been met. While a user agent is paused, it must
+  ensure that no scripts execute (e.g. no event handlers, no timers,
   etc). User agents should remain responsive to user input while
   paused, however, albeit without letting the user interact with Web
-  pages where that would involve invoking any <span title="concept-script">script</span>.</p>
+  pages where that would involve invoking any <span
+  title="concept-script">script</span>.</p>
 
 
   <h4>XML</h4>
 
   <p id="html-namespace">To ease migration from HTML to XHTML, UAs
   conforming to this specification will place elements in HTML in the
   <code>http://www.w3.org/1999/xhtml</code> namespace, at least for
   the purposes of the DOM and CSS. The term "<dfn>elements in the HTML
   namespace</dfn>", or "<dfn>HTML elements</dfn>" for short, when used
   in this specification, thus refers to both HTML and XHTML
@@ -464,46 +480,47 @@
   <code>Document</code>.</p>
 
   <p>The term <dfn>tree order</dfn> means a pre-order, depth-first
   traversal of DOM nodes involved (through the <code
   title="">parentNode</code>/<code title="">childNodes</code>
   relationship).</p>
 
   <p>When it is stated that some element or attribute is <dfn
   title="ignore">ignored</dfn>, or treated as some other value, or
   handled as if it was something else, this refers only to the
-  processing of the node after it is in the DOM. A user agent must not
-  mutate the DOM in such situations.</p>
+  processing of the node after it is in the DOM. <span class="impl">A
+  user agent must not mutate the DOM in such situations.</span></p>
 
   <p>The term <dfn>text node</dfn> refers to any <code>Text</code>
   node, including <code>CDATASection</code> nodes; specifically, any
   <code>Node</code> with node type <code title="">TEXT_NODE</code> (3)
   or <code title="">CDATA_SECTION_NODE</code> (4). <a
   href="#refsDOM3CORE">[DOM3CORE]</a></p>
 
 
   <h4>Scripting</h4>
 
   <p>The construction "a <code>Foo</code> object", where
   <code>Foo</code> is actually an interface, is sometimes used instead
   of the more accurate "an object implementing the interface
   <code>Foo</code>".</p>
 
   <p>A DOM attribute is said to be <i>getting</i> when its value is
   being retrieved (e.g. by author script), and is said to be
   <i>setting</i> when a new value is assigned to it.</p>
 
   <p>If a DOM object is said to be <dfn>live</dfn>, then that means
-  that any attributes returning that object must always return the
-  same object (not a new object each time), and the attributes and
-  methods on that object must operate on the actual underlying data,
-  not a snapshot of the data.</p>
+  that any attributes returning that object <span
+  class="impl">must</span> always return the same object (not a new
+  object each time), and the attributes and methods on that object
+  <span class="impl">must</span> operate on the actual underlying
+  data, not a snapshot of the data.</p>
 
   <p>The terms <i>fire</i> and <i>dispatch</i> are used
   interchangeably in the context of events, as in the DOM Events
   specifications. <a href="#refsDOM3EVENTS">[DOM3EVENTS]</a></p>
 
 
   <h4>Plugins</h4>
 
   <p>The term <dfn>plugin</dfn> is used to mean any content handler,
   typically a third-party content handler, for Web content types that
@@ -553,38 +570,40 @@
   non-normative, as are all sections explicitly marked non-normative.
   Everything else in this specification is normative.</p>
 
   <p>The key words "MUST", "MUST NOT", "REQUIRED", <!--"SHALL", "SHALL
   NOT",--> "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and
   "OPTIONAL" in the normative parts of this document are to be
   interpreted as described in RFC2119. For readability, these words do
   not appear in all uppercase letters in this specification. <a
   href="#refsRFC2119">[RFC2119]</a></p>
 
-  <p>Requirements phrased in the imperative as part of algorithms
-  (such as "strip any leading space characters" or "return false and
-  abort these steps") are to be interpreted with the meaning of the
-  key word ("must", "should", "may", etc) used in introducing the
-  algorithm.</p>
+  <p class="impl">Requirements phrased in the imperative as part of
+  algorithms (such as "strip any leading space characters" or "return
+  false and abort these steps") are to be interpreted with the meaning
+  of the key word ("must", "should", "may", etc) used in introducing
+  the algorithm.</p>
 
-  <p>This specification describes the conformance criteria for user
-  agents (relevant to implementors) and documents (relevant to
-  authors and authoring tool implementors).</p>
+  <p>This specification describes the conformance criteria for <span
+  class="impl">user agents (relevant to implementors) and</span>
+  documents<span class="impl"> (relevant to authors and authoring tool
+  implementors)</span>.</p>
 
-  <p class="note">There is no implied relationship between document
-  conformance requirements and implementation conformance
+  <p class="note impl">There is no implied relationship between
+  document conformance requirements and implementation conformance
   requirements. User agents are not free to handle non-conformant
   documents as they please; the processing model described in this
   specification applies to implementations regardless of the
   conformity of the input documents.</p>
 
 
+  <div class="impl">
 
   <!-- put this list into its own section -->
 
   <p>User agents fall into several (overlapping) categories with
   different conformance requirements.</p>
 
   <dl>
 
    <dt id="interactive">Web browsers and other interactive user agents</dt>
 
@@ -807,53 +826,58 @@
   may be implemented in any manner, so long as the end result is
   equivalent. (In particular, the algorithms defined in this
   specification are intended to be easy to follow, and not intended to
   be performant.)</p>
 
   <p id="hardwareLimitations">User agents may impose
   implementation-specific limits on otherwise unconstrained inputs,
   e.g. to prevent denial of service attacks, to guard against running
   out of memory, or to work around platform-specific limitations.</p>
 
+  </div>
+
   <p>For compatibility with existing content and prior specifications,
   this specification describes two authoring formats: one based on XML
   (referred to as <dfn id="xhtml5" title="XHTML">XHTML5</dfn>), and
   one using a <a href="#parsing">custom format</a> inspired by SGML
-  (referred to as <dfn id="html5">HTML5</dfn>). Implementations may
-  support only one of these two formats, although supporting both is
-  encouraged.</p>
+  (referred to as <dfn id="html5">HTML5</dfn>). <span
+  class="impl">Implementations may support only one of these two
+  formats, although supporting both is encouraged.</span></p>
 
   <p id="authors-using-xhtml"><span>XHTML</span> documents (<span>XML
   documents</span> using elements from the <span>HTML
   namespace</span>) that use the new features described in this
   specification and that are served over the wire (e.g. by HTTP) must
   be sent using an XML MIME type such as <code>application/xml</code>
   or <code>application/xhtml+xml</code> and must not be served as
   <code>text/html</code>. <a href="#refsRFC3023">[RFC3023]</a></p>
 
   <p id="authors-using-html"><span title="HTML5">HTML
   documents</span>, if they are served over the wire (e.g. by HTTP)
   must be labeled with the <code>text/html</code> MIME type.</p> <!--
   XXX update RFC 2854 -->
 
-  <p id="entity-references">The language in this specification assumes
-  that the user agent expands all entity references, and therefore
-  does not include entity reference nodes in the DOM. If user agents
-  do include entity reference nodes in the DOM, then user agents must
-  handle them as if they were fully expanded when implementing this
-  specification. For example, if a requirement talks about an
-  element's child text nodes, then any text nodes that are children of
-  an entity reference that is a child of that element would be used as
-  well. Entity references to unknown entities must be treated as if
-  they contained just an empty text node for the purposes of the
-  algorithms defined in this specification.</p>
+  <p id="entity-references" class="impl">The language in this
+  specification assumes that the user agent expands all entity
+  references, and therefore does not include entity reference nodes in
+  the DOM. If user agents do include entity reference nodes in the
+  DOM, then user agents must handle them as if they were fully
+  expanded when implementing this specification. For example, if a
+  requirement talks about an element's child text nodes, then any text
+  nodes that are children of an entity reference that is a child of
+  that element would be used as well. Entity references to unknown
+  entities must be treated as if they contained just an empty text
+  node for the purposes of the algorithms defined in this
+  specification.</p>
+
 
+  <div class="impl">
 
   <h4>Dependencies</h4>
 
   <p>This specification relies on several other underlying
   specifications.</p>
 
   <dl>
 
    <dt>XML</dt>
 
@@ -878,21 +902,21 @@
     <a href="#refsDOM3CORE">[DOM3CORE]</a></p>
 
     <p>Implementations must support some version of DOM Core and DOM
     Events, because this specification is defined in terms of the DOM,
     and some of the features are defined as extensions to the DOM Core
     interfaces. <a href="#refsDOM3CORE">[DOM3CORE]</a> <a
     href="#refsDOM3CORE">[DOM3EVENTS]</a></p>
 
    </dd>
 
-   <dt>ECMAScript</dt>
+   <dt>WebIDL</dt>
 
    <dd>
 
     <p>The IDL fragments in this specification must be interpreted as
     required for conforming IDL fragments, as described in the Web IDL
     specification. <a href="#refsWebIDL">[WebIDL]</a></p>
 
    </dd>
 
    <dt id="mq">Media Queries</dt>
@@ -912,20 +936,24 @@
   described above. However, the language described by this
   specification is biased towards CSS as the styling language,
   ECMAScript as the scripting language, and HTTP as the network
   protocol, and several features assume that those languages and
   protocols are in use.</p>
 
   <p class="note">This specification might have certain additional
   requirements on character encodings, image formats, audio formats,
   and video formats in the respective sections.</p>
 
+  </div>
+
+
+  <div class="impl">
 
   <h4>Features defined in other specifications</h4>
 
   <p class="XXX">this section will be removed at some point</p>
 
   <p>Some elements are defined in terms of their DOM
   <dfn><code>textContent</code></dfn> attribute. This is an attribute
   defined on the <code>Node</code> interface in DOM3 Core. <a
   href="#refsDOM3CORE">[DOM3CORE]</a></p>
 
@@ -937,20 +965,24 @@
 
   <p id="alternate-style-sheets">The rules for handling alternative
   style sheets are defined in the CSS object model specification. <a
   href="#refsCSSOM">[CSSOM]</a></p>
 
   <p class="XXX">See <a
   href="http://dev.w3.org/cvsweb/~checkout~/csswg/cssom/Overview.html?content-type=text/html;%20charset=utf-8">http://dev.w3.org/cvsweb/~checkout~/csswg/cssom/Overview.html?content-type=text/html;%20charset=utf-8</a></p>
   <!--XXX empty title attribute is equivalent to missing attribute for
   purposes of alternative style sheet processing -->
 
+  </div>
+
+
+  <div class="impl">
 
   <h4>Common conformance requirements for APIs exposed to
   JavaScript</h4>
 
   <p class="XXX">This section will eventually be removed in favour of WebIDL.</p>
 
   <p class="XXX">A lot of arrays/lists/<span title="collections">collection</span>s
   in this spec assume zero-based indexes but use the term "<var
   title="">index</var>th" liberally. We should define those to be
   zero-based and be clearer about this.</p>
@@ -970,22 +1002,22 @@
   <!-- XXX DOMB -->
   <p>Unless otherwise specified, if a method is passed fewer
   arguments than is defined for that method in its IDL definition,
   a <code class="XXX">NOT_SUPPORTED_ERR</code> exception must be
   raised.</p>
 
   <!-- XXX DOMB -->
   <p>Unless otherwise specified, if a method is passed more arguments than
   is defined for that method in its IDL definition, the excess
   arguments must be ignored.</p>
-  
 
+  </div>  
 
 
   <h3>Case-sensitivity and string comparison</h3>
 
   <p>This specification defines several comparison operators for
   strings.</p>
 
   <p>Comparing two strings in a <dfn>case-sensitive</dfn> manner means
   comparing them exactly, codepoint for codepoint.</p>
 
@@ -995,57 +1027,64 @@
   CAPITAL LETTER A to LATIN CAPITAL LETTER Z) and the corresponding
   characters in the range U+0061 .. U+007A (i.e. LATIN SMALL LETTER A
   to LATIN SMALL LETTER Z) are considered to also match.</p>
 
   <p>Comparing two strings in a <dfn>compatibility caseless</dfn>
   manner means using the Unicode <i>compatibility caseless match</i>
   operation to compare the two strings. <a
   href="#refsUNICODECASE">[UNICODECASE]</a></p> <!-- XXX refs to
   Unicode Standard Annex #21, Case Mappings -->
 
+
+  <div class="impl">
+
   <p><dfn title="converted to uppercase">Converting a string to
   uppercase</dfn> means replacing all characters in the range U+0061
   .. U+007A (i.e. LATIN SMALL LETTER A to LATIN SMALL LETTER Z) with
   the corresponding characters in the range U+0041 .. U+005A
   (i.e. LATIN CAPITAL LETTER A to LATIN CAPITAL LETTER Z).</p>
 
   <p><dfn title="converted to lowercase">Converting a string to
   lowercase</dfn> means replacing all characters in the range U+0041
   .. U+005A (i.e. LATIN CAPITAL LETTER A to LATIN CAPITAL LETTER Z)
   with the corresponding characters in the range U+0061 .. U+007A
   (i.e. LATIN SMALL LETTER A to LATIN SMALL LETTER Z).</p>
 
+  </div>
+
+
   <p>A string <var title="">pattern</var> is a <dfn>prefix match</dfn>
   for a string <var title="">s</var> when <var title="">pattern</var>
   is not longer than <var title="">s</var> and truncating <var
   title="">s</var> to <var title="">pattern</var>'s length leaves the
   two strings as matches of each other.</p>
 
 
-
   <h3>Common microsyntaxes</h3>
 
   <p>There are various places in HTML that accept particular data
   types, such as dates or numbers. This section describes what the
   conformance criteria for content in those formats is, and how to
   parse them.</p>
 
   <!-- XXX need to define how to handle U+000A LINE FEED and U+000D
   CARRIAGE RETURN in attributes (for HTML) -->
 
   <p class="XXX">Need to go through the whole spec and make sure
   all the attribute values are clearly defined either in terms of
   microsyntaxes or in terms of other specs, or as "Text" or some
   such.</p>
 
 
 
+  <div class="impl">
+
   <h4>Common parser idioms</h4>
 
   <p>The <dfn title="space character">space characters</dfn>, for the
   purposes of this specification, are U+0020 SPACE, U+0009 CHARACTER
   TABULATION (tab), U+000A LINE FEED (LF), U+000C FORM FEED (FF), and
   U+000D CARRIAGE RETURN (CR).</p>
 
   <p>The <dfn title="White_Space">White_Space characters</dfn> are
   those that have the Unicode property "White_Space". <a
   href="#refsUNICODE">[UNICODE]</a></p>
@@ -1088,20 +1127,22 @@
   <span>White_Space</span> characters. In both cases, the collected
   characters are not used. <a href="#refsUNICODE">[UNICODE]</a></p>
 
   <p>When a user agent is to <dfn>strip line breaks</dfn> from a
   string, the user agent must remove any U+000A LINE FEED (LF) and
   U+000D CARRIAGE RETURN (CR) characters from that string.</p>
 
   <p>The <dfn>codepoint length</dfn> of a string is the number of
   Unicode codepoints in that string.</p>
 
+  </div>
+
 
 
   <h4>Boolean attributes</h4>
 
   <p>A number of attributes in HTML5 are <dfn title="boolean
   attribute">boolean attributes</dfn>. The presence of a boolean
   attribute on an element represents the true value, and the absence
   of the attribute represents the false value.</p>
 
   <p>If the attribute is present, its value must either be the empty
@@ -1118,20 +1159,22 @@
 
   <h5>Non-negative integers</h5>
 
   <p>A string is a <dfn>valid non-negative integer</dfn> if it
   consists of one of more characters in the range U+0030 DIGIT ZERO
   (0) to U+0039 DIGIT NINE (9).</p>
 
   <p>A <span>valid non-negative integer</span> represents the number
   that is represented in base ten by that string of digits.</p>
 
+  <div class="impl">
+
   <p>The <dfn>rules for parsing non-negative integers</dfn> are as
   given in the following algorithm. When invoked, the steps must be
   followed in the order given, aborting at the first step that returns
   a value. This algorithm will either return zero, a positive integer,
   or an error. Leading spaces are ignored. Trailing spaces and indeed
   any trailing garbage characters are ignored.</p>
 
   <ol>
 
    <li><p>Let <var title="">input</var> be the string being
@@ -1182,35 +1225,39 @@
      themselves).</li>
 
     </ol>
 
    </li>
 
    <li><p>Return <var title="">value</var>.</p></li>
 
   </ol>
 
+  </div>
+
 
   <h5>Signed integers</h5>
 
   <p>A string is a <dfn>valid integer</dfn> if it consists of one of
   more characters in the range U+0030 DIGIT ZERO (0) to U+0039 DIGIT
   NINE (9), optionally prefixed with a U+002D HYPHEN-MINUS ("-")
   character.</p>
 
   <p>A <span>valid integer</span> without a U+002D HYPHEN-MINUS ("-")
   prefix represents the number that is represented in base ten by that
   string of digits. A <span>valid integer</span> <em>with</em> a
   U+002D HYPHEN-MINUS ("-") prefix represents the number represented
   in base ten by the string of digits that follows the U+002D
   HYPHEN-MINUS, subtracted from zero.</p>
 
+  <div class="impl">
+
   <p>The <dfn>rules for parsing integers</dfn> are similar to the
   <span title="rules for parsing non-negative integers">rules for
   non-negative integers</span>, and are as given in the following
   algorithm. When invoked, the steps must be followed in the order
   given, aborting at the first step that returns a value. This
   algorithm will either return an integer or an error. Leading spaces
   are ignored. Trailing spaces and trailing garbage characters are
   ignored.</p>
 
   <ol>
@@ -1281,20 +1328,22 @@
     </ol>
 
    </li>
 
    <li><p>If <var title="">sign</var> is "positive", return <var
    title="">value</var>, otherwise return 0-<var
    title="">value</var>.</p></li>
 
   </ol>
 
+  </div>
+
 
   <h5>Real numbers</h5>
 
   <p>A string is a <dfn>valid floating point number</dfn> if it
   consists of:</p>
 
   <ol class="brief">
 
    <li>Optionally, a U+002D HYPHEN-MINUS ("-") character.</li>
 
@@ -1344,20 +1393,22 @@
   negative number if there is a U+002D HYPHEN-MINUS ("-") character
   between the E and the number and the number is not zero, or else
   ignoring a U+002B PLUS SIGN ("+") character between the E and the
   number if there is one). If there is no E, then the exponent is
   treated as zero.</p>
 
   <p class="note">The values &plusmn;Infinity and NaN are not <span
   title="valid floating point number">valid floating point
   numbers</span>.</p>
 
+  <div class="impl">
+
   <p>The <dfn>best representation of the floating point number</dfn>
   <var title="">n</var> is the string obtained from applying the
   ECMAScript operator ToString to <var title="">n</var>.</p>
 
   <p>The <dfn>rules for parsing floating point number values</dfn> are
   as given in the following algorithm. As with the previous
   algorithms, when this one is invoked, the steps must be followed in
   the order given, aborting at the first step that returns
   something. This algorithm will either return a number or an
   error. Leading spaces are ignored. Trailing spaces and garbage
@@ -1514,20 +1565,22 @@
      <var title="">exponent</var>th power.</p></li>
 
     </ol>
 
    </li>
 
    <li><p>Return <var title="">value</var>.</p></li>
 
   </ol>
 
+  </div>
+
 
   <h5>Ratios</h5>
 
   <p class="note">The algorithms described in this section are used by
   the <code>progress</code> and <code>meter</code> elements.</p>
 
   <p>A <dfn>valid denominator punctuation character</dfn> is one of
   the characters from the table below. There is <dfn title="values
   associated with denominator punctuation characters">a value
   associated with each denominator punctuation character</dfn>, as
@@ -1567,20 +1620,22 @@
      <td>1000</td>
     </tr>
     <tr>
      <td>U+2031 PER TEN THOUSAND SIGN</td>
      <td>&#x2031;</td>
      <td>10000</td>
     </tr>
    </tbody>
   </table>
 
+  <div class="impl">
+
   <p>The <dfn>steps for finding one or two numbers of a ratio in a
   string</dfn> are as follows:</p>
 
   <ol>
 
    <li>If the string is empty, then return nothing and abort these
    steps.</li>
 
    <li><span>Find a number</span> in the string according to the
    algorithm below, starting at the start of the string.</li>
@@ -1668,23 +1723,26 @@
    <li>Parse <var title="">string</var> according to the <span>rules
    for parsing floating point number values</span>, to obtain <var
    title="">number</var>. This step cannot fail (<var
    title="">string</var> is guaranteed to be a <span>valid floating
    point number</span>).</li>
 
    <li>Return <var title="">number</var>.</li>
 
   </ol>
 
+  </div>
+
 
+<div class="impl">
   <h5 id="percentages-and-dimensions">Percentages and lengths</h5>
-<!--(percentages are not used in html5)
+<!--(percentages are not used in valid html5)
   <p>A string is a <dfn>valid dimension value</dfn> if it consists of
   a character in the range U+0031 DIGIT ONE (1) to U+0039 DIGIT NINE
   (9), optionally followed by zero of more characters in the range
   U+0030 DIGIT ZERO (0) to U+0039 DIGIT NINE (9), optionally followed
   by a U+002E FULL STOP character (.) and one of more characters in
   the range U+0030 DIGIT ZERO (0) to U+0039 DIGIT NINE (9), and
   optionally suffixed by a U+0025 PERCENT SIGN character (%).</p>
 
   <p>A <span>valid dimension value</span> represents the number that
   is represented in base ten by that string of digits, optionally with
@@ -1773,31 +1831,34 @@
    title="">input</var>, return <var title="">value</var> as a
    length.</p></li>
 
    <li><p>If the next character is a U+0025 PERCENT SIGN character
    (%), return <var title="">value</var> as a percentage.</p></li>
 
    <li><p>Return <var title="">value</var> as a length.</p></li>
 
   </ol>
 
+  </div>
 
 
   <h5>Lists of integers</h5>
 
   <p>A <dfn>valid list of integers</dfn> is a number of <span
   title="valid integer">valid integers</span> separated by U+002C
   COMMA characters, with no other characters (e.g. no <span
   title="space character">space characters</span>). In addition, there
   might be restrictions on the number of integers that can be given,
   or on the range of values allowed.</p>
 
+  <div class="impl">
+
   <p>The <dfn>rules for parsing a list of integers</dfn> are as
   follows:</p>
 
   <ol>
 
    <li><p>Let <var title="">input</var> be the string being
    parsed.</p></li>
 
    <li><p>Let <var title="">position</var> be a pointer into <var
    title="">input</var>, initially pointing at the start of the
@@ -2083,20 +2144,24 @@
    title="">value</var>.</li>
 
    <li><p>If <var title="">got number</var> is true, then append <var
    title="">value</var> to the <var title="">numbers</var> list.</li>
 
    <li><p>Return the <var title="">numbers</var> list and
    abort.</p></li>
 
   </ol>
 
+  </div>
+
+
+  <div class="impl">
 
   <h5>Lists of dimensions</h5>
 
   <!-- no definition of a type since no conforming feature uses this
   syntax (it's only used in cols="" and rows="" on <frameset> -->
 
   <p>The <dfn>rules for parsing a list of dimensions</dfn> are as
   follows. These rules return a list of zero or more pairs consisting
   of a number and a unit, the unit being one of <i>percentage</i>,
   <i>relative</i>, and <i>absolute</i>.</p>
@@ -2209,20 +2274,22 @@
      by <var title="">unit</var>.</p></li>
 
     </ol>
 
    </li>
 
    <li><p>Return the list <var title="">result</var>.</p></li>
 
   </ol>
 
+  </div>
+
 
   <h4>Dates and times</h4>
 
   <p>In the algorithms below, the <dfn>number of days in month <var
   title="">month</var> of year <var title="">year</var></dfn> is:
   <em>31</em> if <var title="">month</var> is 1, 3, 5, 7, 8, 10, or
   12; <em>30</em> if <var title="">month</var> is 4, 6, 9, or 11;
   <em>29</em> if <var title="">month</var> is 2 and <var
   title="">year</var> is a number divisible by 400, or if <var
   title="">year</var> is a number divisible by 4 but not by 100; and
@@ -2256,20 +2323,22 @@
 
    <li>A U+002D HYPHEN-MINUS character (-)</li>
 
    <li>Two <span title="concept-datetime-digit">digits</span>,
    representing the month <var title="">month</var>, in the range
    1&nbsp;&le;&nbsp;<var
    title="">month</var>&nbsp;&le;&nbsp;12</li>
 
   </ol>
 
+  <div class="impl">
+
   <p>The rules to <dfn>parse a month string</dfn> are as follows. This
   will either return a year and month, or nothing. If at any point the
   algorithm says that it "fails", this means that it is aborted at
   that point and returns nothing.</p>
 
   <ol>
 
    <li><p>Let <var title="">input</var> be the string being
    parsed.</p></li>
 
@@ -2320,20 +2389,22 @@
 
    <li><p>If <var title="">month</var> is not a number in the range
    1&nbsp;&le;&nbsp;<var title="">month</var>&nbsp;&le;&nbsp;12, then
    fail.</p></li>
 
    <li><p>Return <var title="">year</var> and <var
    title="">month</var>.</p></li>
 
   </ol>
 
+  </div>
+
 
   <h5>Dates</h5>
 
   <p>A <dfn title="concept-date">date</dfn> consists of a specific
   proleptic Gregorian date with no timezone information, consisting of
   a year, a month, and a day. <a
   href="#refsGREGORIAN">[GREGORIAN]</a></p>
 
   <p>A string is a <dfn>valid date string</dfn> representing a year
   <var title="">year</var>, month <var title="">month</var>, and day
@@ -2350,20 +2421,22 @@
    <li>Two <span title="concept-datetime-digit">digits</span>,
    representing <var title="">day</var>, in the range
    1&nbsp;&le;&nbsp;<var title="">day</var>&nbsp;&le;&nbsp;<var
    title="">maxday</var> where <var title="">maxday</var> is the <span
    title="number of days in month month of year year">number of days
    in the month <var title="">month</var> and year <var
    title="">year</var></span></li>
 
   </ol>
 
+  <div class="impl">
+
   <p>The rules to <dfn>parse a date string</dfn> are as follows. This
   will either return a date, or nothing. If at any point the algorithm
   says that it "fails", this means that it is aborted at that point
   and returns nothing.</p>
 
   <ol>
 
    <li><p>Let <var title="">input</var> be the string being
    parsed.</p></li>
 
@@ -2416,20 +2489,22 @@
 
    <li><p>If <var title="">day</var> is not a number in the range
    1&nbsp;&le;&nbsp;<var title="">month</var>&nbsp;&le;&nbsp;<var
    title="">maxday</var>, then fail.</li>
 
    <li><p>Return <var title="">year</var>, <var title="">month</var>,
    and <var title="">day</var>.</p></li>
 
   </ol>
 
+  </div>
+
 
   <h5>Times</h5>
 
   <p>A <dfn title="concept-time">time</dfn> consists of a specific
   time with no timezone information, consisting of an hour, a minute,
   a second, and a fraction of a second.</p>
 
   <p>A string is a <dfn>valid time string</dfn> representing an hour
   <var title="">hour</var>, a minute <var title="">minute</var>, and a
   second <var title="">second</var> if it consists of the following
@@ -2475,20 +2550,22 @@
 
     </ol>
 
    </li>
 
   </ol>
 
   <p class="note">The <var title="">second</var> component cannot be
   60 or 61; leap seconds cannot be represented.</p>
 
+  <div class="impl">
+
   <p>The rules to <dfn>parse a time string</dfn> are as follows. This
   will either return a time, or nothing. If at any point the algorithm
   says that it "fails", this means that it is aborted at that point
   and returns nothing.</p>
 
   <ol>
 
    <li><p>Let <var title="">input</var> be the string being
    parsed.</p></li>
 
@@ -2586,20 +2663,21 @@
 
    <li><p>If <var title="">second</var> is not a number in the range
    0&nbsp;&le;&nbsp;<var title="">second</var>&nbsp;&lt;&nbsp;60, then
    fail.</p></li>
 
    <li><p>Return <var title="">hour</var>, <var title="">minute</var>,
    and <var title="">second</var>.</p></li>
 
   </ol>
 
+  </div>
 
 
   <h5>Local dates and times</h5>
 
   <p>A <dfn title="concept-datetime-local">local date and time</dfn>
   consists of a specific proleptic Gregorian date, consisting of a
   year, a month, and a day, and a time, consisting of an hour, a
   minute, a second, and a fraction of a second, but expressed without
   a time zone. <a href="#refsGREGORIAN">[GREGORIAN]</a></p>
 
@@ -2610,20 +2688,22 @@
   <ol>
 
    <li>A <span>valid date string</span> representing the date.</li>
 
    <li>A U+0054 LATIN CAPITAL LETTER T character.</li>
 
    <li>A <span>valid time string</span> representing the time.</li>
 
   </ol>
 
+  <div class="impl">
+
   <p>The rules to <dfn>parse a local date and time string</dfn> are as
   follows. This will either return a date and time, or nothing. If at
   any point the algorithm says that it "fails", this means that it is
   aborted at that point and returns nothing.</p>
 
   <ol>
 
    <li><p>Let <var title="">input</var> be the string being
    parsed.</p></li>
 
@@ -2654,20 +2734,22 @@
 
    <li><p>Let <var title="">time</var> be the time with hour <var
    title="">hour</var>, minute <var title="">minute</var>, and second
    <var title="">second</var>.</p></li>
 
    <li><p>Return <var title="">date</var> and <var
    title="">time</var>.</p></li>
 
   </ol>
 
+  </div>
+
 
 
   <h5>Global dates and times</h5>
 
   <p>A <dfn title="concept-datetime">global date and time</dfn>
   consists of a specific proleptic Gregorian date, consisting of a
   year, a month, and a day, and a time, consisting of an hour, a
   minute, a second, and a fraction of a second, expressed with a time
   zone, consisting of a number of hours and minutes. <a
   href="#refsGREGORIAN">[GREGORIAN]</a></p>
@@ -2780,20 +2862,22 @@
 
     <li>Dates before the year zero can't be represented as a datetime
     in this version of HTML.</li>
 
     <li>Time zones differ based on daylight savings time.</li>
 
    </ul>
 
   </div>
 
+  <div class="impl">
+
   <p>The rules to <dfn>parse a global date and time string</dfn> are
   as follows. This will either return a time in UTC, with associated
   timezone information for round tripping or display purposes, or
   nothing. If at any point the algorithm says that it "fails", this
   means that it is aborted at that point and returns nothing.</p>
 
   <ol>
 
    <li><p>Let <var title="">input</var> be the string being
    parsed.</p></li>
@@ -2925,20 +3009,22 @@
 
     </ol>
 
    </li>
 
    <li><p>Return <var title="">timezone<sub title="">hours</sub></var>
    and <var title="">timezone<sub
    title="">minutes</sub></var>.</p></li>
 
   </ol>
+  
+  </div>
 
 
   <h5>Weeks</h5>
 
   <p>A <dfn title="concept-week">week</dfn> consists of a week-year
   number and a week number representing a seven day period. Each
   week-year in this calendaring system has either 52 weeks or 53
   weeks, as defined below. A week is a seven-day period. The week
   starting on the Gregorian date Monday December 29th 1969
   (1969-12-29) is defined as week number 1 in week-year
@@ -2982,20 +3068,22 @@
 
    <li>Two <span title="concept-datetime-digit">digits</span>,
    representing the week <var title="">week</var>, in the range
    1&nbsp;&le;&nbsp;<var title="">week</var>&nbsp;&le;&nbsp;<var
    title="">maxweek</var>, where <var title="">maxweek</var> is the
    <span>week number of the last day</span> of week-year <var
    title="">year</var></li>
 
   </ol>
 
+  <div class="impl">
+
   <p>The rules to <dfn>parse a week string</dfn> are as follows. This
   will either return a week-year number and week number, or
   nothing. If at any point the algorithm says that it "fails", this
   means that it is aborted at that point and returns nothing.</p>
 
   <ol>
 
    <li><p>Let <var title="">input</var> be the string being
    parsed.</p></li>
 
@@ -3037,20 +3125,22 @@
    1&nbsp;&le;&nbsp;<var title="">week</var>&nbsp;&le;&nbsp;<var
    title="">maxweek</var>, then fail.</p></li>
 
    <li><p>If <var title="">position</var> is <em>not</em> beyond the
    end of <var title="">input</var>, then fail.</p></li>
 
    <li><p>Return the week-year number <var title="">year</var> and the
    week number <var title="">week</var>.</p></li>
 
   </ol>
+  
+  </div>
 
 
   <h5>Vaguer moments in time</h5>
 
   <p>A <dfn>date or time string</dfn> consists of either a <span
   title="concept-date">date</span>, a <span
   title="concept-time">time</span>, or a <span
   title="concept-datetime">global date and time</span>.</p>
 
   <p>A string is a <dfn>valid date or time string</dfn> if it is also
@@ -3064,20 +3154,22 @@
 
    <li>A <span>valid global date and time string</span>.</li>
 
   </ul>
 
   <p>A string is a <dfn>valid date or time string in content</dfn> if
   it consists of zero or more <span>White_Space</span> characters,
   followed by a <span>valid date or time string</span>, followed by
   zero or more further <span>White_Space</span> characters.</p>
 
+  <div class="impl">
+
   <p>The rules to <dfn>parse a date or time string</dfn> are as
   follows. The algorithm is invoked with a flag indicating if the
   <i>in attribute</i> variant or the <i>in content</i> variant is to
   be used. The algorithm will either return a <span
   title="concept-date">date</span>, a <span
   title="concept-time">time</span>, a <span
   title="concept-datetime">global date and time</span>, or nothing. If
   at any point the algorithm says that it "fails", this means that it
   is aborted at that point and returns nothing.</p>
 
@@ -3175,20 +3267,22 @@
     title="">minutes</sub></var> minutes, that moment in time being a
     moment in the UTC timezone; let <var title="">timezone</var> be
     <var title="">timezone<sub title="">hours</sub></var> hours and
     <var title="">timezone<sub title="">minutes</sub></var> minutes
     from UTC; and return <var title="">time</var> and <var
     title="">timezone</var>.</p>
 
    </li>
 
   </ol>
+  
+  </div>
 
 
   <h4>Colors</h4>
 
   <p>A <dfn>simple color</dfn> consists of three 8-bit numbers in the
   range 0..255, representing the red, green, and blue components of
   the color respectively, in the sRGB color space. <a
   href="#refsSRGB">[SRGB]</a></p>
 
   <p>A string is a <dfn>valid simple color</dfn> if it is exactly
@@ -3199,20 +3293,22 @@
   SMALL LETTER A .. U+0066 LATIN SMALL LETTER F, with the first two
   digits representing the red component, the middle two digits
   representing the green component, and the last two digits
   representing the blue component, in hexadecimal.</p>
 
   <p>A string is a <dfn>valid lowercase simple color</dfn> if it is a
   <span>valid simple color</span> and doesn't use any characters in
   the range U+0041 LATIN CAPITAL LETTER A .. U+0046 LATIN CAPITAL
   LETTER F.</p>
 
+  <div class="impl">
+
   <p>The <dfn>rules for parsing simple color values</dfn> are as given
   in the following algorithm. When invoked, the steps must be followed
   in the order given, aborting at the first step that returns a
   value. This algorithm will either return a <span>simple color</span>
   or an error.</p>
 
   <ol>
 
    <li><p>Let <var title="">input</var> be the string being
    parsed.</p></li>
@@ -3387,20 +3483,22 @@
    number.</p></li>
 
    <li><p>Interpret the third component as a hexadecimal number; let
    the blue component of <var title="">result</var> be the resulting
    number.</p></li>
 
    <li><p>Return <var title="">result</var>.</p>
 
   </ol>
 
+  </div>
+
   <hr>
 
   <p class="note">The <span title="canvas-context-2d">2D graphics
   context</span> has a separate color syntax that also handles
   opacity.</p>
 
 
   <h4>Space-separated tokens</h4>
 
   <p>A <dfn>set of space-separated tokens</dfn> is a set of zero or
@@ -3421,20 +3519,22 @@
   <span>set of space-separated tokens</span> where none of the words
   are duplicated but where the order of the tokens is meaningful.</p>
 
   <p><span title="set of space-separated tokens">Sets of
   space-separated tokens</span> sometimes have a defined set of
   allowed values. When a set of allowed values is defined, the tokens
   must all be from that list of allowed values; other values are
   non-conforming. If no such set of allowed values is provided, then
   all values are conforming.</p>
 
+  <div class="impl">
+
   <p>When a user agent has to <dfn>split a string on spaces</dfn>, it
   must use the following algorithm:</p>
 
   <ol>
 
    <li><p>Let <var title="">input</var> be the string being
    parsed.</p></li>
 
    <li><p>Let <var title="">position</var> be a pointer into <var
    title="">input</var>, initially pointing at the start of the
@@ -3536,20 +3636,22 @@
    title="">output</var>.</p></li>
 
    <li><p>Return to step 6 in the overall set of steps.</p></li>
 
   </ol>
 
   <p class="note">This causes any occurrences of the token to be
   removed from the string, and any spaces that were surrounding the
   token to be collapsed to a single space, except at the start and end
   of the string, where such spaces are removed.</p>
+  
+  </div>
 
 
 
   <h4>Comma-separated tokens</h4>
 
   <p>A <dfn>set of comma-separated tokens</dfn> is a set of zero or
   more tokens each separated from the next by a single U+002C COMMA
   character (<code title="">,</code>), where tokens consist of any
   string of zero or more characters, neither beginning nor ending with
   <span title="space character">space characters</span>, nor
@@ -3563,20 +3665,22 @@
   trailing whitespace around each token doesn't count as part of the
   token, and the empty string can be a token.</p>
 
   <p><span title="set of comma-separated tokens">Sets of
   comma-separated tokens</span> sometimes have further restrictions on
   what consists a valid token. When such restrictions are defined, the
   tokens must all fit within those restrictions; other values are
   non-conforming. If no such restrictions are specified, then all
   values are conforming.</p>
 
+  <div class="impl">
+
   <p>When a user agent has to <dfn>split a string on commas</dfn>, it
   must use the following algorithm:</p>
 
   <ol>
 
    <li><p>Let <var title="">input</var> be the string being
    parsed.</p></li>
 
    <li><p>Let <var title="">position</var> be a pointer into <var
    title="">input</var>, initially pointing at the start of the
@@ -3604,20 +3708,22 @@
    title="">input</var>, then the character at <var
    title="">position</var> is a U+002C COMMA character (<code
    title="">,</code>); advance <var title="">position</var> past that
    character.</p></li>
 
    <li><p>Jump back to the step labeled <i>token</i>.</p></li>
 
    <li><p>Return <var title="">tokens</var>.</p></li>  
 
   </ol>
+  
+  </div>
 
 
 
   <h4>Keywords and enumerated attributes</h4>
 
   <p>Some attributes are defined as taking one of a finite set of
   keywords. Such attributes are called <dfn title="enumerated
   attribute">enumerated attributes</dfn>. The keywords are each
   defined to map to a particular <em>state</em> (several keywords
   might map to the same state, in which case some of the keywords are
@@ -3663,20 +3769,22 @@
 
   <h4 id="syntax-references">References</h4>
 
   <p>A <dfn>valid hash-name reference</dfn> to an element of type <var
   title="">type</var> is a string consisting of a U+0023 NUMBER SIGN
   (<code title="">#</code>) character followed by a string which
   exactly matches the value of the <code title="">name</code>
   attribute of an element in the document with type <var
   title="">type</var>.</p>
 
+  <div class="impl">
+
   <p>The <dfn>rules for parsing a hash-name reference</dfn> to an
   element of type <var title="">type</var> are as follows:</p>
 
   <ol>
 
    <li><p>If the string being parsed does not contain a U+0023 NUMBER
    SIGN character, or if the first such character in the string is the
    last character in the string, then return null and abort these
    steps.</p></li>
 
@@ -3694,22 +3802,22 @@
    <!--
    IE is also doing case-insensitive id="" matching.
    Tests:
    http://software.hixie.ch/utilities/js/live-dom-viewer/?%3C!DOCTYPE%20html%3E%0A%3Cmap%20name%3D%22T%26eacute%3B%26%23x01F1%3B%26%23x2075%3B%22%3E%3Carea%20href%3D%22%2F%22%20shape%3Drect%20coords%3D0%2C0%2C200%2C200%3E%3C%2Fmap%3E%0A%3Cimg%20usemap%3D%22%23t%26Eacute%3BDZ5%22%20src%3Dimage%3E
    ...except that doesn't explain why this fails:
    http://software.hixie.ch/utilities/js/live-dom-viewer/?%3C!DOCTYPE%20html%3E%0A%3Cmap%20name%3D%22T%26eacute%3B%26%23x01F1%3B%26%23x2075%3B%26%23xFB01%3B%22%3E%3Carea%20href%3D%22%2F%22%20shape%3Drect%20coords%3D0%2C0%2C200%2C200%3E%3C%2Fmap%3E%0A%3Cimg%20usemap%3D%22%23t%26Eacute%3BDZ5F%26%23x0131%3B%26%23x0307%3B%22%20src%3Dimage%3E
    maybe they just don't know about combining dot above?
    -->
 
   </ol>
-
-
+  
+  </div>
 
 
   <h3>URLs</h3>
 
   <p>This specification defines the term <span>URL</span>, and defines
   various algorithms for dealing with URLs, because for historical
   reasons the rules defined by the URI and IRI specifications are not
   a complete description of what HTML user agents need to implement to
   be compatible with Web content.</p>
 
@@ -3733,20 +3841,22 @@
    component contains no unescaped non-ASCII characters. <a
    href="#refsRFC3987">[RFC3987]</a></p></li>
 
    <li><p>The <span>URL</span> is a valid IRI reference and the <span
    title="document's character encoding">character encoding</span> of
    the URL's <code>Document</code> is UTF-8 or UTF-16. <a
    href="#refsRFC3987">[RFC3987]</a></p></li>
 
   </ul>
 
+  <div class="impl">
+
   <p>A <span>URL</span> has an associated <dfn>URL character
   encoding</dfn>, determined as follows:</p>
 
   <dl class="switch">
 
    <dt>If the URL came from a script (e.g. as an argument to a
    method)</dt>
 
    <dd>The URL character encoding is the <span>script's character
    encoding</span>.</dd>
@@ -3762,20 +3872,24 @@
    <dd>The URL character encoding is as defined.</dd>
 
   </dl>
 
   <p class="note">The term "URL" in this specification is used in a
   manner distinct from the precise technical meaning it is given in
   RFC 3986. Readers familiar with that RFC will find it easier to read
   <em>this</em> specification if they pretend the term "URL" as used
   herein is really called something else altogether.</p>
 
+  </div>
+
+
+  <div class="impl">
 
   <h4>Parsing URLs</h4>
 
   <p>To <dfn>parse a URL</dfn> <var title="">url</var> into its
   component parts, the user agent must use the following steps:</p>
 
   <ol>
 
    <li><p>Strip leading and trailing <span title="space
    character">space characters</span> from <var
@@ -3903,21 +4017,25 @@
     </dl>
 
    </li>
 
   </ol>
 
   <!-- XXX we might want to define "server-based naming authority",
   it's not clear RFC3986 does a good job of defining that anymore
   (earlier URI specs did) -->
 
+  </div>
+
+
 
+  <div class="impl">
 
   <h4>Resolving URLs</h4>
 
   <p>To <dfn>resolve a URL</dfn> to an <span>absolute URL</span>
   relative to either another <span>absolute URL</span> or an element,
   the user agent must use the following steps. Resolving a URL can
   result in an error, in which case the URL is not resolvable.</p>
 
   <ol>
 
@@ -4124,20 +4242,24 @@
    (/) characters.</p></li>
 
    <li><p>Return <var title="">result</var>.</p></li>
 
   </ol>
 
   <p>A <span>URL</span> is an <dfn>absolute URL</dfn> if <span
   title="resolve a URL">resolving</span> it results in the same
   URL without an error.</p>
 
+  </div>
+
+
+  <div class="impl">
 
   <h4>Dynamic changes to base URLs</h4>
 
   <p>When an <code title="attr-xml-base">xml:base</code> attribute
   changes, the attribute's element, and all descendant elements, are
   <span>affected by a base URL change</span>.</p>
 
   <p>When a document's <span>document base URL</span> changes, all
   elements in that document are <span>affected by a base URL
   change</span>.</p>
@@ -4203,38 +4325,93 @@
     <p class="example">Changing the base URL doesn't affect the image
     displayed by <code>img</code> elements, although subsequent
     accesses of the <code title="dom-img-src">src</code> DOM attribute
     from script will return a new <span>absolute URL</span> that might
     no longer correspond to the image being shown.</p>
 
    </dd>
 
   </dl>
 
+  </div>
+
 
 
   <h4>Interfaces for URL manipulation</h4>
 
- <p>An interface that has a complement of <dfn>URL decomposition
+  <p>An interface that has a complement of <dfn>URL decomposition
   attributes</dfn> will have seven attributes with the following
   definitions:</p>
 
 <pre class="idl">
            attribute DOMString <span title="dom-uda-protocol">protocol</span>;
            attribute DOMString <span title="dom-uda-host">host</span>;
            attribute DOMString <span title="dom-uda-hostname">hostname</span>;
            attribute DOMString <span title="dom-uda-port">port</span>;
            attribute DOMString <span title="dom-uda-pathname">pathname</span>;
            attribute DOMString <span title="dom-uda-search">search</span>;
            attribute DOMString <span title="dom-uda-hash">hash</span>;
 </pre>
 
+  <dl class="domintro">
+
+   <dt><var title="">o</var> . <code title="dom-uda-protocol">protocol</code> [ = <var title="">value</var> ]</dt>
+   <dd>
+    <p>Returns the current scheme of the underlying URL.</p>
+    <p>Can be set, to change the underlying URL's scheme.</p>
+   </dd>
+
+   <dt><var title="">o</var> . <code title="dom-uda-host">host</code> [ = <var title="">value</var> ]</dt>
+   <dd>
+    <p>Returns the current host and port (if it's not the default port) in the underlying URL.</p>
+    <p>Can be set, to change the underlying URL's host and port.</p>
+    <p>The host and the port are separated by a colon. The port part,
+    if omitted, will be assumed to be the current scheme's default
+    port.</p>
+   </dd>
+
+   <dt><var title="">o</var> . <code title="dom-uda-hostname">hostname</code> [ = <var title="">value</var> ]</dt>
+   <dd>
+    <p>Returns the current host in the underlying URL.</p>
+    <p>Can be set, to change the underlying URL's host.</p>
+   </dd>
+
+   <dt><var title="">o</var> . <code title="dom-uda-port">port</code> [ = <var title="">value</var> ]</dt>
+   <dd>
+    <p>Returns the current port in the underlying URL.</p>
+    <p>Can be set, to change the underlying URL's port.</p>
+   </dd>
+
+   <dt><var title="">o</var> . <code title="dom-uda-pathname">pathname</code> [ = <var title="">value</var> ]</dt>
+   <dd>
+    <p>Returns the current path in the underlying URL.</p>
+    <p>Can be set, to change the underlying URL's path.</p>
+   </dd>
+
+   <dt><var title="">o</var> . <code title="dom-uda-search">search</code> [ = <var title="">value</var> ]</dt>
+   <dd>
+    <p>Returns the current query component in the underlying URL.</p>
+    <p>Can be set, to change the underlying URL's query component.</p>
+   </dd>
+
+   <dt><var title="">o</var> . <code title="dom-uda-hash">hash</code> [ = <var title="">value</var> ]</dt>
+   <dd>
+    <p>Returns the current fragment identifier in the underlying URL.</p>
+    <p>Can be set, to change the underlying URL's fragment identifier.</p>
+   </dd>
+
+  </dl>
+
+  <div class="impl">
+
+  <hr>
+
   <p>The attributes defined to be URL decomposition attributes must
   act as described for the attributes with the same corresponding
   names in this section.</p>
 
   <p>In addition, an interface with a complement of URL decomposition
   attributes will define an <dfn
   title="concept-uda-input">input</dfn>, which is a <span>URL</span>
   that the attributes act on, and a <dfn
   title="concept-uda-setter">common setter action</dfn>, which is a
   set of steps invoked when any of the attributes' setters are
@@ -4353,54 +4530,59 @@
      <td>Remove one leading U+0023 NUMBER SIGN ("<code title="">#</code>") character, if any
      <td>&mdash;
   </table>
 
 <!--
   http://www.hixie.ch/tests/adhoc/dom/level0/location/components/
   http://lxr.mozilla.org/seamonkey/source/dom/src/base/nsLocation.cpp
   http://wp.netscape.com/eng/mozilla/3.0/handbook/javascript/ref_h-l.htm#84722
 -->
 
+  </div>
+
   <div class="example">
 
-   <p>The table below demonstrates how the getter condition for <code
+   <p>The table below demonstrates how the getter <span
+   class="impl">condition</span> for <code
    title="dom-uda-search">search</code> results in different results
    depending on the exact original syntax of the URL:</p>
 
    <table>
     <thead>
      <tr>
       <th> Input URL
       <th> <code title="dom-uda-search">search</code> value
       <th> Explanation
     <tbody>
      <tr>
       <td> <code title="">http://example.com/</code>
       <td> <i>empty string</i>
       <td> No <span title="url-query">&lt;query&gt;</span> component in input URL.
      <tr>
       <td> <code title="">http://example.com/?</code>
       <td> <code title="">?</code>
-      <td> There is a <span title="url-query">&lt;query&gt;</span> component, but it is empty. The question mark in the resulting value is the prefix.
+      <td> There is a <span title="url-query">&lt;query&gt;</span> component, but it is empty.
+           <span class="impl">The question mark in the resulting value is the prefix.</span>
      <tr>
       <td> <code title="">http://example.com/?test</code>
       <td> <code title="">?test</code>
       <td> The <span title="url-query">&lt;query&gt;</span> component has the value "<code title="">test</code>".
      <tr>
       <td> <code title="">http://example.com/?test#</code>
       <td> <code title="">?test</code>
       <td> The (empty) <span title="url-fragment">&lt;fragment&gt;</span> component is not part of the <span title="url-query">&lt;query&gt;</span> component.
    </table>
 
   </div>
 
 
+  <div class="impl">
 
   <h3>Fetching resources</h3>
 
   <p>When a user agent is to <dfn>fetch</dfn> a resource, the
   following steps must be run:</p>
 
   <ol>
 
    <li><p>If the resource is identified by the <span>URL</span>
    <dfn><code>about:blank</code></dfn>, then return the empty string
@@ -4512,22 +4694,25 @@
    page then refers to an external resource that has an expired
    certificate, then the user agent will act as if the resource was
    unavailable, possibly also reporting the problem to the user. If
    the user agent instead allowed the resource to be used, then an
    attacker could just look for "secure" sites that used resources
    from a different host and only apply man-in-the-middle attacks to
    that host, for example taking over scripts in the page.</p>
 
   </div>
 
+  </div>
 
 
+  <div class="impl">
+
   <h3 id="content-type-sniffing">Determining the type of a resource</h3>
 
   <p class="warning">It is imperative that the rules in this section
   be followed exactly. When a user agent uses different heuristics for
   content type detection than the server expects, security problems
   can occur. For example, if a server believes that the client will
   treat a contributed file as an image (and thus treat it as benign),
   but a Web browser believes the content to be HTML (and thus execute
   any scripts contained therein), the end user can be exposed to
   malicious content, making the user vulnerable to cookie theft
@@ -5292,21 +5477,23 @@
 
    <li><p>Otherwise, the sniffed type of the resource is
    "text/html".</p></li>
 
   </ol>
 
   <p class="note">For efficiency reasons, implementations may wish to
   implement this algorithm and the algorithm for detecting the
   character encoding of HTML documents in parallel.</p>
 
+  </div>
 
+  <div class="impl">
 
   <h3>Character encodings</h3>
 
   <p>User agents must at a minimum support the UTF-8 and Windows-1252
   encodings, but may support more.</p>
 
   <p class="note">It is not unusual for Web browsers to support dozens
   if not upwards of a hundred distinct character encodings.</p>
 
   <p>User agents must support the preferred MIME name of every
@@ -5388,33 +5575,39 @@
   encoding is rarely used for publicly-facing Web content.</p>
 
   <p>Support for UTF-32 is not recommended. This encoding is rarely
   used, and frequently misimplemented.</p>
 
   <p class="note">This specification does not make any attempt to
   support EBCDIC-based encodings and UTF-32 in its algorithms; support
   and use of these encodings can thus lead to unexpected behavior in
   implementations of this specification.</p>
 
+  </div>
 
 
   <h3>Common DOM interfaces</h3>
 
   <h4>Reflecting content attributes in DOM attributes</h4>
 
   <p>Some <span title="DOM attribute">DOM attributes</span> are
   defined to <dfn>reflect</dfn> a particular <span>content
   attribute</span>. This means that on getting, the DOM attribute
   returns the current value of the content attribute, and on setting,
   the DOM attribute changes the value of the content attribute to the
   given value.</p>
 
+  <p class="note">A list of <span>reflecting DOM attributes</span> and
+  their corresponding content attributes is given in the index.</p>
+
+  <div class="impl">
+
   <p>If a reflecting DOM attribute is a <code>DOMString</code>
   attribute whose content attribute is defined to contain a
   <span>URL</span>, then on getting, the DOM attribute must <span
   title="resolve a url">resolve</span> the value of the content
   attribute relative to the element and return the resulting
   <span>absolute URL</span> if that was successful, or the empty
   string otherwise; and on setting, must set the content attribute to
   the specified literal value. If the content attribute is absent, the
   DOM attribute must return the default value, if the content
   attribute has one, or else the empty string.</p>
@@ -5557,20 +5750,21 @@
    <li>Otherwise, it must return <var title="">candidate</var>.</li>
 
   </ol>
 
   <p>On setting, if the given element has an <code
   title="attr-id">id</code> attribute, then the content attribute must
   be set to the value of that <code title="attr-id">id</code>
   attribute. Otherwise, the DOM attribute must be set to the empty
   string.</p><!-- XXX or raise an exception? -->
 
+  </div>
 
 
   <h4>Collections</h4>
 
   <p>The <code>HTMLCollection</code>,
   <code>HTMLFormControlsCollection</code>, and
   <code>HTMLOptionsCollection</code> interfaces represent various
   lists of DOM nodes. Collectively, objects implementing these
   interfaces are called <dfn>collections</dfn>.</p>
 
@@ -5581,43 +5775,81 @@
   object for the <code
   title="dom-document-images">document.images</code> attribute is
   created, it is associated with a filter that selects only
   <code>img</code> elements, and rooted at the root of the
   document.</p>
 
   <p>The <span title="collections">collection</span> then <dfn
   title="represented by the collection">represents</dfn> a
   <span>live</span> view of the subtree rooted at the collection's
   root, containing only nodes that match the given filter. The view is
-  linear. In the absence of specific requirements to the contrary, the
-  nodes within the collection must be sorted in <span>tree
-  order</span>.</p>
+  linear. <span class="impl">In the absence of specific requirements
+  to the contrary, the nodes within the collection must be sorted in
+  <span>tree order</span>.</span></p>
+
+  <div class="impl">
 
   <p class="note">The <code title="dom-table-rows">rows</code> list is
   not in tree order.</p>
 
   <p>An attribute that returns a collection must return the same
   object every time it is retrieved.</p>
 
+  </div>
+
 
   <h5>HTMLCollection</h5>
 
   <p>The <code>HTMLCollection</code> interface represents a generic
   <span title="collections">collection</span> of elements.</p>
 
   <pre class="idl">[Callable=<span title="dom-HTMLCollection-namedItem">namedItem</span>]
 interface <dfn>HTMLCollection</dfn> {
   readonly attribute unsigned long <span title="dom-HTMLCollection-length">length</span>;
   [IndexGetter] Element <span title="dom-HTMLCollection-item">item</span>(in unsigned long index);
   [NameGetter] Element <span title="dom-HTMLCollection-namedItem">namedItem</span>(in DOMString name);
 };</pre>
 
+  <dl class="domintro">
+
+   <dt><var title="">collection</var> . <code title="dom-HTMLCollection-length">length</code></dt>
+   <dd>
+    <p>Returns the number of elements in the collection.</p>
+   </dd>
+
+   <dt><var title="">element</var> = <var title="">collection</var> . <code title="dom-HTMLCollection-item">item</code>(<var title="">index</var>)</dt>
+   <dt><var title="">collection</var>[<var title="">index</var>]</dt>
+   <dd>
+    <p>Returns the item with index <var title="">index</var> from the collection. The items are sorted in <span>tree order</span>.</p>
+    <p>Returns null if <var title="">index</var> is out of range.</p>
+   </dd>
+
+   <dt><var title="">element</var> = <var title="">collection</var> . <code title="dom-HTMLCollection-item">namedItem</code>(<var title="">name</var>)</dt>
+   <dt><var title="">collection</var>[<var title="">name</var>]</dt>
+   <dd>
+    <p>Returns the first item with ID or name <var title="">name</var>
+    from the collection.</p>
+    <p>Returns null if no element with that ID or name could be found.</p>
+    <p>Only <code>a</code>, <code>applet</code>, <code>area</code>,
+    <code>embed</code>, <code>form</code>, <code>frame</code>,
+    <code>frameset</code>, <code>iframe</code>, <code>img</code>, and
+    <code>object</code> elements can have a name for the purpose of
+    this method; their name is given by the value of their <code
+    title="">name</code> attribute.</p>
+   </dd>
+
+  </dl>
+
+  <div class="impl">
+
+  <hr>
+
   <p>The object's <span>indices of the supported indexed
   properties</span> are the numbers in the range zero to one less than
   the number of nodes <span>represented by the collection</span>. If
   there are no such elements, then there are no <span>supported
   indexed properties</span>.</p>
 
   <p>The <dfn
   title="dom-HTMLCollection-length"><code>length</code></dfn>
   attribute must return the number of nodes <span>represented by the
   collection</span>.</p>
@@ -5652,36 +5884,65 @@ interface <dfn>HTMLCollection</dfn> {
    title="">name</code> attribute equal to <var title="">key</var>,
    or,</li>
 
    <li>It is an element with an ID <var title="">key</var>.</li>
 
   </ul>
 
   <p>If no such elements are found, then the method must return
   null.</p>
 
+  </div>
 
 
   <h5>HTMLFormControlsCollection</h5>
 
   <p>The <code>HTMLFormControlsCollection</code> interface represents
   a <span title="collections">collection</span> of <span
   title="category-listed">listed</span> elements in <code>form</code>
   and <code>fieldset</code> elements.</p>
 
   <pre class="idl">[Callable=<span title="dom-HTMLFormControlsCollection-namedItem">namedItem</span>]
 interface <dfn>HTMLFormControlsCollection</dfn> {
   readonly attribute unsigned long <span title="dom-HTMLFormControlsCollection-length">length</span>;
   [IndexGetter] <span>HTMLElement</span> <span title="dom-HTMLFormControlsCollection-item">item</span>(in unsigned long index);
   [NameGetter] Object <span title="dom-HTMLFormControlsCollection-namedItem">namedItem</span>(in DOMString name);
 };</pre>
 
+  <dl class="domintro">
+
+   <dt><var title="">collection</var> . <code title="dom-HTMLFormControlsCollection-length">length</code></dt>
+   <dd>
+    <p>Returns the number of elements in the collection.</p>
+   </dd>
+
+   <dt><var title="">element</var> = <var title="">collection</var> . <code title="dom-HTMLFormControlsCollection-item">item</code>(<var title="">index</var>)</dt>
+   <dt><var title="">collection</var>[<var title="">index</var>]</dt>
+   <dd>
+    <p>Returns the item with index <var title="">index</var> from the collection. The items are sorted in <span>tree order</span>.</p>
+    <p>Returns null if <var title="">index</var> is out of range.</p>
+   </dd>
+
+   <dt><var title="">element</var> = <var title="">collection</var> . <code title="dom-HTMLFormControlsCollection-item">namedItem</code>(<var title="">name</var>)</dt>
+   <dt><var title="">collection</var>[<var title="">name</var>]</dt>
+   <dd>
+    <p>Returns the item with ID or <code title="attr-fe-name">name</code> <var title="">name</var> from the collection.</p>
+    <p>If there are multiple matching items, then a <code>NodeList</code> object containing all those elements is returned.</p>
+    <p>Returns null if no element with that ID or <code title="attr-fe-name">name</code> could be found.</p>
+   </dd>
+
+  </dl>
+
+  <div class="impl">
+
+  <hr>
+
   <p>The object's <span>indices of the supported indexed
   properties</span> are the numbers in the range zero to one less than
   the number of nodes <span>represented by the collection</span>. If
   there are no such elements, then there are no <span>supported
   indexed properties</span>.</p>
 
   <p>The <dfn
   title="dom-HTMLFormControlsCollection-length"><code>length</code></dfn>
   attribute must return the number of nodes <span>represented by the
   collection</span>.</p>
@@ -5724,43 +5985,89 @@ interface <dfn>HTMLFormControlsCollection</dfn> {
    <code>NodeList</code> object are those that have either an <code
    title="attr-id">id</code> attribute or a <code
    title="attr-fe-name">name</code> attribute equal to <var
    title="">name</var>. The nodes in the <code>NodeList</code> object
    must be sorted in <span>tree order</span>.</li>
 
    <li>Return that <code>NodeList</code> object.</li>
 
   </ol>
 
-
 <!--
 http://software.hixie.ch/utilities/js/live-dom-viewer/?%3C%21DOCTYPE%20html%3E...%0A%3Cform%20name%3D%22a%22%3E%3Cinput%20id%3D%22x%22%20name%3D%22y%22%3E%3Cinput%20name%3D%22x%22%20id%3D%22y%22%3E%3C/form%3E%0A%3Cscript%3E%0A%20%20var%20x%3B%0A%20%20w%28x%20%3D%20document.forms%5B%27a%27%5D%5B%27x%27%5D%29%3B%0A%20%20w%28x.length%29%3B%0A%20%20x%5B0%5D.parentNode.removeChild%28x%5B0%5D%29%3B%0A%20%20w%28x.length%29%3B%0A%20%20w%28x%20%3D%3D%20document.forms%5B%27a%27%5D%5B%27x%27%5D%29%3B%0A%3C/script%3E%0A
 -->
 
+  </div>
+
 
   <h5>HTMLOptionsCollection</h5>
 
   <p>The <code>HTMLOptionsCollection</code> interface represents a
   list of <code>option</code> elements. It is always rooted on a
   <code>select</code> element and has attributes and methods that
   manipulate that element's descendants.</p>
 
   <pre class="idl">[Callable=<span title="dom-HTMLOptionsCollection-namedItem">namedItem</span>]
 interface <dfn>HTMLOptionsCollection</dfn> {
            attribute unsigned long <span title="dom-HTMLOptionsCollection-length">length</span>;
   [IndexGetter] <span>HTMLOptionElement</span> <span title="dom-HTMLOptionsCollection-item">item</span>(in unsigned long index);
   [NameGetter] Object <span title="dom-HTMLOptionsCollection-namedItem">namedItem</span>(in DOMString name);
   void <span title="dom-HTMLOptionsCollection-add">add</span>(in <span>HTMLElement</span> element, in <span>HTMLElement</span> before);
   void <span title="dom-HTMLOptionsCollection-add">add</span>(in <span>HTMLElement</span> element, in long before);
   void <span title="dom-HTMLOptionsCollection-remove">remove</span>(in long index);
 };</pre>
 
+  <dl class="domintro">
+
+   <dt><var title="">collection</var> . <code title="dom-HTMLOptionsCollection-length">length</code> [ = <var title="">value</var> ]</dt>
+   <dd>
+    <p>Returns the number of elements in the collection.</p>
+    <p>When set to a smaller number, truncates the number of <code>option</code> elements in the corresponding container.</p>
+    <p>When set to a greater number, adds new blank <code>option</code> elements to that container.</p>
+   </dd>
+
+   <dt><var title="">element</var> = <var title="">collection</var> . <code title="dom-HTMLOptionsCollection-item">item</code>(<var title="">index</var>)</dt>
+   <dt><var title="">collection</var>[<var title="">index</var>]</dt>
+   <dd>
+    <p>Returns the item with index <var title="">index</var> from the collection. The items are sorted in <span>tree order</span>.</p>
+    <p>Returns null if <var title="">index</var> is out of range.</p>
+   </dd>
+
+   <dt><var title="">element</var> = <var title="">collection</var> . <code title="dom-HTMLOptionsCollection-item">namedItem</code>(<var title="">name</var>)</dt>
+   <dt><var title="">collection</var>[<var title="">name</var>]</dt>
+   <dd>
+    <p>Returns the item with ID or <code title="attr-option-name">name</code> <var title="">name</var> from the collection.</p>
+    <p>If there are multiple matching items, then a <code>NodeList</code> object containing all those elements is returned.</p>
+    <p>Returns null if no element with that ID could be found.</p>
+   </dd>
+
+   <dt><var title="">collection</var> . <code title="dom-HTMLOptionsCollection-add">add</code>(<var title="">element</var>, <var title="">before</var>)</dt>
+   <dd>
+    <p>Inserts <var title="">element</var> before the node given by <var title="">before</var>.</p>
+    <p>The <var title="">before</var> argument can be a number, in
+    which case <var title="">element</var> is inserted before the item
+    with that number, or an element from the collection, in which case
+    <var title="">element</var> is inserted before that element.</p>
+    <p>If <var title="">before</var> is null or a number out of range,
+    then <var title="">element</var> will be added at the end of the
+    list.</p>
+    <p>This method will throw a <code>HIERARCHY_REQUEST_ERR</code>
+    exception if <var title="">element</var> is an ancestor of the
+    element into which it is to be inserted. If <var
+    title="">element</var> is not an <code>option</code> or
+    <code>optgroup</code> element, then the method does nothing.</p>
+   </dd>
+
+  </dl>
+
+  <div class="impl">
+
   <p>The object's <span>indices of the supported indexed
   properties</span> are the numbers in the range zero to one less than
   the number of nodes <span>represented by the collection</span>. If
   there are no such elements, then there are no <span>supported
   indexed properties</span>.</p>
 
   <p>On getting, the <dfn
   title="dom-HTMLOptionsCollection-length"><code>length</code></dfn>
   attribute must return the number of nodes <span>represented by the
   collection</span>.</p>
@@ -5891,20 +6198,21 @@ interface <dfn>HTMLOptionsCollection</dfn> {
    title="">element</var> be the <var title="">index</var>th element
    in the collection.</p></li>
 
    <li><p>Remove <var title="">element</var> from its parent
    node.</p></li>
 
   </ol>
 
   <!-- see also http://ln.hixie.ch/?start=1161042744&count=1 -->
 
+  </div>
 
 
   <h4>DOMTokenList</h4>
 
   <p>The <code>DOMTokenList</code> interface represents an interface
   to an underlying string that consists of an <span>unordered set of
   unique space-separated tokens</span>.</p>
 
   <p>Which string underlies a particular <code>DOMTokenList</code>
   object is defined when the object is created. It might be a content
@@ -5917,20 +6225,66 @@ interface <dfn>HTMLOptionsCollection</dfn> {
 
   <pre class="idl">[<span title="dom-tokenlist-toString">Stringifies</span>] interface <dfn>DOMTokenList</dfn> {
   readonly attribute unsigned long <span title="dom-tokenlist-length">length</span>;
   [IndexGetter] DOMString <span title="dom-tokenlist-item">item</span>(in unsigned long index);
   boolean <span title="dom-tokenlist-has">has</span>(in DOMString token);
   void <span title="dom-tokenlist-add">add</span>(in DOMString token);
   void <span title="dom-tokenlist-remove">remove</span>(in DOMString token);
   boolean <span title="dom-tokenlist-toggle">toggle</span>(in DOMString token);
 };</pre>
 
+  <dl class="domintro">
+
+   <dt><var title="">tokenlist</var> . <code title="dom-tokenlist-length">length</code></dt>
+   <dd>
+    <p>Returns the number of tokens in the string.</p>
+   </dd>
+
+   <dt><var title="">element</var> = <var title="">tokenlist</var> . <code title="dom-tokenlist-item">item</code>(<var title="">index</var>)</dt>
+   <dt><var title="">tokenlist</var>[<var title="">index</var>]</dt>
+   <dd>
+    <p>Returns the token with index <var title="">index</var>. The tokens are sorted alphabetically.</p>
+    <p>Returns null if <var title="">index</var> is out of range.</p>
+   </dd>
+
+   <dt><var title="">has-p</var> = <var title="">tokenlist</var> . <code title="dom-tokenlist-has">has</code>(<var title="">token</var>)</dt>
+   <dd>
+    <p>Returns true if the <var title="">token</var> is present; false otherwise.</p>
+    <p>Throws an <code>INVALID_CHARACTER_ERR</code> exception if <var title="">token</var> contains any spaces.</p>
+   </dd>
+
+   <dt><var title="">tokenlist</var> . <code title="dom-tokenlist-add">add</code>(<var title="">token</var>)</dt>
+   <dd>
+    <p>Adds <var title="">token</var>, unless it is already present.</p>
+    <p>Throws an <code>INVALID_CHARACTER_ERR</code> exception if <var title="">token</var> contains any spaces.</p>
+   </dd>
+
+   <dt><var title="">tokenlist</var> . <code title="dom-tokenlist-remove">remove</code>(<var title="">token</var>)</dt>
+   <dd>
+    <p>Removes <var title="">token</var> if it is present.</p>
+    <p>Throws an <code>INVALID_CHARACTER_ERR</code> exception if <var title="">token</var> contains any spaces.</p>
+   </dd>
+
+   <dt><var title="">has-p</var> = <var title="">tokenlist</var> . <code title="dom-tokenlist-toggle">toggle</code>(<var title="">token</var>)</dt>
+   <dd>
+    <p>Adds <var title="">token</var> if it is not present, or removes it if it is.</p>
+    <p>Throws an <code>INVALID_CHARACTER_ERR</code> exception if <var title="">token</var> contains any spaces.</p>
+   </dd>
+
+   <!-- eventually someone will complain about the has-p variable
+   names above, and we'll replace them with something better that they
+   suggest -->
+
+  </dl>
+
+  <div class="impl">
+
   <p>The <dfn title="dom-tokenlist-length"><code>length</code></dfn>
   attribute must return the number of <em>unique</em> tokens that
   result from <span title="split a string on spaces">splitting the
   underlying string on spaces</span>. This is the <var
   title="dom-tokenlist-length">length</var>.</p>
 
   <p>The object's <span>indices of the supported indexed
   properties</span> are the numbers in the range zero to <span><var
   title="dom-tokenlist-length">length</var>-1</span>, unless the <var
   title="dom-tokenlist-length">length</var> is zero, in which case
@@ -6047,20 +6401,23 @@ interface <dfn>HTMLOptionsCollection</dfn> {
    <code>DOMTokenList</code> object's underlying string.</li>
 
    <li>Return true.</li>
 
   </ol>
 
   <p>Objects implementing the <code>DOMTokenList</code> interface must
   <dfn title="dom-tokenlist-toString">stringify</dfn> to the object's
   underlying string representation.</p>
 
+  </div>
+
+  <div class="impl">
 
   <h4>Safe passing of structured data</h4>
 
   <p>When a user agent is required to obtain a <dfn>structured
   clone</dfn> of an object, it must run the following algorithm, which
   either returns a separate object, or throws an exception.</p>
 
   <ol>
 
    <li><p>Let <var title="">input</var> be the object being
@@ -6147,29 +6504,36 @@ interface <dfn>HTMLOptionsCollection</dfn> {
      objects must be the same.</p></li>
 
      <li><p>Return <var title="">output</var>.</p></li>
 
     </ol>
 
    </dd>
 
   </dl>
 
+  </div>
+
 
 
   <h4>DOMStringMap</h4>
 
   <p>The <code>DOMStringMap</code> interface represents a set of
-  name-value pairs. When a <code>DOMStringMap</code> object is
-  instantiated, it is associated with three algorithms, one for
-  getting getting the list of name-value pairs, one for setting names
-  to certain values, and one for deleting names.</p>
+  name-value pairs. It exposes these using the scripting language's
+  native mechanisms for property access.</p>
+
+  <div class="impl">
+
+  <p>When a <code>DOMStringMap</code> object is instantiated, it is
+  associated with three algorithms, one for getting getting the list
+  of name-value pairs, one for setting names to certain values, and
+  one for deleting names.</p>
 
   <pre class="idl">[NameCreator, NameDeleter, NameGetter, NameSetter]
 interface <dfn>DOMStringMap</dfn> {};</pre>
 
   <p>The <span>names of the supported named properties</span> on a
   <code>DOMStringMap</code> object at any instant are the names of
   each pair returned from the algorithm for getting the list of
   name-value pairs at that instant.</p>
 
   <p>When a <code>DOMStringMap</code> object is indexed to retrieve a
@@ -6188,46 +6552,82 @@ interface <dfn>DOMStringMap</dfn> {};</pre>
   <p>When a <code>DOMStringMap</code> object is indexed to delete a
   named property named <var title="">name</var>, the algorithm for
   deleting names must be run, passing <var title="">name</var> as the
   name.</p>
 
   <p class="note">The <code>DOMStringMap</code> interface definition
   here is only intended for JavaScript environments. Other language
   bindings will need to define how <code>DOMStringMap</code> is to be
   implemented for those languages.</p>
 
+  </div>
+
+  <div class="example">
+
+   <p>The <code title="dom-dataset">dataset</code> attribute on
+   elements exposes the <code title="attr-data-*">data-*</code>
+   attributes on the element.</p>
+
+   <p>Given the following fragment and elements with similar
+   constructions:</p>
+
+   <pre>&lt;img class="tower" id="tower5" data-x="12" data-y="5"
+     data-ai="robotarget" data-hp="46" data-ability="flames"
+     src="towers/rocket.png alt="Rocket Tower"></pre>
+
+   <p>...one could imagine a function <code
+   title="">splashDamage()</code> that takes some arguments, the first
+   of which is the element to process:</p>
+
+   <pre>function splashDamage(node, x, y, damage) {
+  if (node.classList.has('tower') && // checking the 'class' attribute
+      node.dataset.x == x && // reading the 'data-x' attribute
+      node.dataset.y == y) { // reading the 'data-y' attribute
+    var hp = parseInt(node.dataset.hp); // reading the 'data-hp' attribute
+    hp = hp - damage;
+    if (hp &lt; 0) {
+      hp = 0;
+      node.dataset.ai = 'dead'; // setting the 'data-ai' attribute
+      delete node.dataset.ability; // removing the 'data-ability' attribute
+    }
+    node.dataset.hp = hp; // setting the 'data-hp' attribute
+  }
+}</pre>
+
+  </div>
+
 
   <h4>DOM feature strings</h4>
 
   <p>DOM3 Core defines mechanisms for checking for interface support,
   and for obtaining implementations of interfaces, using <a
   href="http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMFeatures">feature
   strings</a>. <a href="#refsDOM3CORE">[DOM3CORE]</a></p>
 
   <p>A DOM application can use the <dfn
   title="hasFeature"><code>hasFeature(<var title="">feature</var>,
   <var title="">version</var>)</code></dfn> method of the
   <code>DOMImplementation</code> interface with parameter values
   "<code title="">HTML</code>" and "<code>5.0</code>" (respectively)
   to determine whether or not this module is supported by the
   implementation. In addition to the feature string "<code
   title="">HTML</code>", the feature string "<code
   title="">XHTML</code>" (with version string "<code>5.0</code>") can
-  be used to check if the implementation supports XHTML. User agents
-  should respond with a true value when the <code>hasFeature</code>
-  method is queried with these values. Authors are cautioned, however,
-  that UAs returning true might not be perfectly compliant, and that
-  UAs returning false might well have support for features in this
-  specification; in general, therefore, use of this method is
-  discouraged.</p>
-
-  <p>The values "<code title="">HTML</code>" and "<code
+  be used to check if the implementation supports XHTML. <span
+  title="impl">User agents should respond with a true value when the
+  <code>hasFeature</code> method is queried with these values.</span>
+  Authors are cautioned, however, that UAs returning true might not be
+  perfectly compliant, and that UAs returning false might well have
+  support for features in this specification; in general, therefore,
+  use of this method is discouraged.</p>
+
+  <p class="impl">The values "<code title="">HTML</code>" and "<code
   title="">XHTML</code>" (both with version "<code>5.0</code>") should
   also be supported in the context of the <code>getFeature()</code>
   and <code>isSupported()</code> methods, as defined by DOM3 Core.</p>
 
   <p class="note">The interfaces defined in this specification are not
   always supersets of the interfaces defined in DOM2 HTML; some
   features that were formerly deprecated, poorly supported, rarely
   used or considered unnecessary have been removed. Therefore it is
   not guaranteed that an implementation that supports "<code
   title="">HTML</code>" "<code>5.0</code>" also supports "<code
@@ -6263,36 +6663,39 @@ interface <dfn>DOMStringMap</dfn> {};</pre>
    <li value="19"><dfn><code>NETWORK_ERR</code></dfn></li> <!-- actually in XHR for now -->
    <li value="20"><dfn><code>ABORT_ERR</code></dfn></li> <!-- actually in XHR for now -->
    <li value="21"><dfn><code>URL_MISMATCH_ERR</code></dfn></li> <!-- actually in workers for now -->
    <li value="22"><dfn><code>QUOTA_EXCEEDED_ERR</code></dfn></li> <!-- actually defined right here for now -->
    <li value="23"><dfn><code>UNAVAILABLE_SCRIPT_ERR</code></dfn></li> <!-- actually defined right here for now -->
    <li value="81"><dfn><code>PARSE_ERR</code></dfn></li> <!-- actually defined in dom3ls -->
    <li value="82"><dfn><code>SERIALISE_ERR</code></dfn></li> <!-- actually defined in dom3ls -->
   </ol>
 
 
+  <div class="impl">
+
   <h4>Garbage collection</h4>
 
   <p>There is an <dfn>implied strong reference</dfn> from any DOM
   attribute that returns a pre-existing object to that object.</p>
 
   <div class="example">
 
    <p>For example, the <code>document.location</code> attribute means
    that there is a strong reference from a <code>Document</code>
    object to its <code>Location</code> object. Similarly, there is
    always a strong reference from a <code>Document</code> to any
    descendant nodes, and from any node to its owner
    <code>Document</code>.</p>
 
   </div>
 
+  </div>
 
 
 
   <h2 id="dom">Semantics and structure of HTML documents</h2>
 
   <h3 id="semantics-intro">Introduction</h3>
 
   <p><em>This section is non-normative.</em></p>
 
   <p class="XXX">An introduction to marking up a document.</p>
@@ -6327,31 +6730,33 @@ interface <dfn>DOMStringMap</dfn> {};</pre>
   <code>DOMImplementation</code> object is initially an <span
   title="XML documents">XML document</span>, but can be made into an
   <span title="HTML documents">HTML document</span> by calling <code
   title="dom-document-open">document.open()</code> on it.</p>
 
 
 
   <h4>Documents in the DOM</h4>
 
   <p>All <code>Document</code> objects (in user agents implementing
-  this specification) must also implement the
-  <code>HTMLDocument</code> interface, available using
+  this specification) <span class="impl">must</span> also implement
+  the <code>HTMLDocument</code> interface, available using
   binding-specific methods. (This is the case whether or not the
   document in question is an <span title="HTML documents">HTML
   document</span> or indeed whether it contains any <span>HTML
-  elements</span> at all.) <code>Document</code> objects must also
-  implement the document-level interface of any other namespaces found
-  in the document that the UA supports. For example, if an HTML
-  implementation also supports SVG, then the <code>Document</code>
-  object must implement <code>HTMLDocument</code> and
-  <code>SVGDocument</code>.</p>
+  elements</span> at all.) <code>Document</code> objects <span
+  class="impl">must</span> also implement the document-level interface
+  of any other namespaces found in the document that the UA
+  supports.</p>
+
+  <p class="example">For example, if an HTML implementation also
+  supports SVG, then the <code>Document</code> object implements both
+  <code>HTMLDocument</code> and <code>SVGDocument</code>.</p>
 
   <p class="note">Because the <code>HTMLDocument</code> interface is
   now obtained using binding-specific casting methods instead of
   simply being the primary interface of the document object, it is no
   longer defined as inheriting from <code>Document</code>.</p>
 
   <pre class="idl">[<span title="dom-document-namedItem">NameGetter</span>=OverrideBuiltins, ImplementedOn=<span>Document</span>]
 interface <dfn>HTMLDocument</dfn> {
   // <span>resource metadata management</span>
   [PutForwards=href] readonly attribute <span>Location</span> <span title="dom-document-location">location</span>;
@@ -6404,30 +6809,52 @@ interface <dfn>HTMLDocument</dfn> {
   readonly attribute <span>HTMLCollection</span> <span title="dom-document-commands">commands</span>;
 };</pre>
 
   <p>Since the <code>HTMLDocument</code> interface holds methods and
   attributes related to a number of disparate features, the members of
   this interface are described in various different sections.</p>
 
 
   <h4>Security</h4>
 
-  <p>User agents must raise a <code>SECURITY_ERR</code> exception whenever
-  any of the members of an <code>HTMLDocument</code> object are
-  accessed by scripts whose <span>effective script origin</span> is
-  not the <span title="same origin">same</span> as the
-  <code>Document</code>'s <span>effective script origin</span>.</p>
+  <p>User agents <span class="impl">must</span> raise a
+  <code>SECURITY_ERR</code> exception whenever any of the members of
+  an <code>HTMLDocument</code> object are accessed by scripts whose
+  <span>effective script origin</span> is not the <span title="same
+  origin">same</span> as the <code>Document</code>'s <span>effective
+  script origin</span>.</p>
 
 
 
   <h4><dfn>Resource metadata management</dfn></h4>
 
+  <dl class="domintro">
+
+   <dt><var title="">document</var> . <code title="dom-document-URL">URL</code></dt>
+   <dd>
+    <p>Returns <span>the document's address</span>.</p>
+   </dd>
+
+   <dt><var title="">document</var> . <code title="dom-document-referrer">referrer</code></dt>
+   <dd>
+    <p>Returns <span title="the document's address">the address</span>
+    of the <code>Document</code> from which the user navigated to this
+    one, unless it was blocked or there was no such document, in which
+    case it returns the empty string.</p>
+    <p>The <code title="link-type-noreferrer">noreferrer</code> link
+    type can be used to block the referrer.</p>
+   </dd>
+
+  </dl>
+
+  <div class="impl">
+
   <p>The <dfn title="dom-document-URL"><code>URL</code></dfn>
   attribute must return <span>the document's address</span>.</p>
 
   <p>The <dfn
   title="dom-document-referrer"><code>referrer</code></dfn> attribute
   must return either the <span title="the document's
   address">address</span> of the <span>active document</span> of the
   <span>source browsing context</span> at the time the navigation was
   started (that is, the page which <span
   title="navigate">navigated</span> the <span>browsing context</span>
@@ -6444,20 +6871,42 @@ interface <dfn>HTMLDocument</dfn> {
   page.</p>
 
   <p class="note">Typically user agents are configured to not report
   referrers in the case where the referrer uses an encrypted protocol
   and the current page does not (e.g. when navigating from an <code
   title="">https:</code> page to an <code title="">http:</code>
   page).</p>
 
   <hr>
 
+  </div>
+
+  <dl class="domintro">
+
+   <dt><var title="">document</var> . <code title="dom-document-cookie">cookie</code> [ = <var title="">value</var> ]</dt>
+   <dd>
+    <p>Returns the HTTP cookies that apply to the
+    <code>Document</code>. If there are no cookies or cookies can't be
+    applied to this resource, the empty string will be returned.</p>
+    <p>Can be set, to add a new cookie to the element's set of HTTP
+    cookies.</p>
+    <p>If the <code>Document</code> has no <span>browsing
+    context</span> an <code>INVALID_STATE_ERR</code> exception will be
+    thrown. If the contents are <span title="sandboxed origin browsing
+    context flag">sandboxed into a unique origin</span>, a
+    <code>SECURITY_ERR</code> exception will be thrown.</p>
+   </dd>
+
+  </dl>
+
+  <div class="impl">
+
   <p>The <dfn title="dom-document-cookie"><code>cookie</code></dfn>
   attribute represents the cookies of the resource.</p>
 
   <p id="sandboxCookies">On getting, if the document is not associated
   with a <span>browsing context</span> then the user agent must raise
   an <code>INVALID_STATE_ERR</code> exception. Otherwise, if the
   <span>sandboxed origin browsing context flag</span> was set on the
   <span>browsing context</span> of the <code>Document</code> when the
   <code>Document</code> was created, the user agent must raise a
   <code>SECURITY_ERR</code> exception. Otherwise, if <span>the
@@ -6497,20 +6946,37 @@ interface <dfn>HTMLDocument</dfn> {
   causes the cookie to be hidden from script.</p>
 
   <p class="note">Since the <code
   title="dom-document-cookie">cookie</code> attribute is accessible
   across frames, the path restrictions on cookies are only a tool to
   help manage which cookies are sent to which parts of the site, and
   are not in any way a security feature.</p>
 
   <hr> 
 
+  </div>
+
+  <dl class="domintro">
+
+   <dt><var title="">document</var> . <code title="dom-document-lastmodified">lastModified</code></dt>
+   <dd>
+    <p>Returns the date of the last modification to the document, as
+    reported by the server, in the form "<code
+    title="">MM/DD/YYYY&nbsp;hh:mm:ss</code>".</p>
+    <p>If the last modification date is not known, it is reported as
+    "<code title="">01/01/1970&nbsp;00:00:00</code>"
+   </dd>
+
+  </dl>
+
+  <div class="impl">
+
   <p>The <dfn
   title="dom-document-lastModified"><code>lastModified</code></dfn>
   attribute, on getting, must return the date and time of the
   <code>Document</code>'s source file's last modification, in the
   user's local timezone, in the following format:</p>
 
   <ol>
 
    <li> The month component of the date. </li>
 
@@ -6532,30 +6998,50 @@ interface <dfn>HTMLDocument</dfn> {
 
    <li> A U+003A COLON character (':'). </li>
 
    <li> The seconds component of the time. </li>
 
   </ol>
 
   <p>All the numeric components above, other than the year, must be
   given as two digits in the range U+0030 DIGIT ZERO to U+0039 DIGIT
   NINE representing the number in base ten, zero-padded if
-  necessary.</p>
+  necessary. The year must be given as four or more digits in the
+  range U+0030 DIGIT ZERO to U+0039 DIGIT NINE representing the number
+  in base ten, zero-padded if necessary.</p>
 
   <p>The <code>Document</code>'s source file's last modification date
   and time must be derived from relevant features of the networking
   protocols used, e.g. from the value of the HTTP <code
   title="">Last-Modified</code> header of the document, or from
   metadata in the file system for local files. If the last modification
   date and time are not known, the attribute must return the string
-  <code title="">01/01/1970 00:00:00</code>.</p>
+  "<code title="">01/01/1970&nbsp;00:00:00</code>".</p>
+
+  <hr>
+
+  </div>
+
+  <dl class="domintro">
+
+   <dt><var title="">document</var> . <code title="dom-document-compatmode">compatMode</code></dt>
+   <dd>
+    <p>In a conforming document, returns the string "<code
+    title="">CSS1Compat</code>". (In <span>quirks mode</span>
+    documents, returns the string "<code title="">BackCompat</code>",
+    but a conforming document can never trigger <span>quirks
+    mode</span>.)</p>
+   </dd>
 
+  </dl>
+
+  <div class="impl">
 
   <p>A <code>Document</code> is always set to one of three modes:
   <dfn>no quirks mode</dfn>, the default; <dfn>quirks mode</dfn>, used
   typically for legacy documents; and <dfn>limited quirks mode</dfn>,
   also known as "almost standards" mode. The mode is only ever changed
   from the default by the <span>HTML parser</span>, based on the
   presence, absence, or value of the DOCTYPE string.</p>
 
   <p>The <dfn
   title="dom-document-compatMode"><code>compatMode</code></dfn> DOM
@@ -6576,21 +7062,47 @@ interface <dfn>HTMLDocument</dfn> {
     <li><code>p</code> can contain <code>table</code></li>
 
     <li>Safari and IE have special parsing rules for &lt;% ... %&gt;
     (even in standards mode, though clearly this should be
     quirks-only).</li>
 
    </ul>
 
   </div>
 
+  <hr>
+
+  </div>
+
+  <dl class="domintro">
+
+   <dt><var title="">document</var> . <code title="dom-document-charset">charset</code> [ = <var title="">value</var> ]</dt>
+   <dd>
+    <p>Returns the <span>document's character encoding</span>.</p>
+    <p>Can be set, to dynamically change the <span>document's
+    character encoding</span>.</p>
+    <p>New values that are not IANA-registered aliases are ignored.</p>
+   </dd>
+
+   <dt><var title="">document</var> . <code title="dom-document-characterSet">characterSet</code></dt>
+   <dd>
+    <p>Returns the <span>document's character encoding</span>.</p>
+   </dd>
+
+   <dt><var title="">document</var> . <code title="dom-document-defaultCharset">defaultCharset</code></dt>
+   <dd>
+    <p>Returns what might be the user agent's default character encoding.</p>
+   </dd>
+
+  </dl>
 
+  <div class="impl">
 
   <p>Documents have an associated <dfn title="document's character
   encoding">character encoding</dfn>. When a <code>Document</code>
   object is created, the <span>document's character encoding</span>
   must be initialized to UTF-16. Various algorithms during page
   loading affect this value, as does the <code
   title="dom-document-charset">charset</code> setter.  <a
   href="#refsIANACHARSET">[IANACHARSET]</a> <!-- XXX
   http://www.iana.org/assignments/character-sets --></p>
 
@@ -6606,56 +7118,91 @@ interface <dfn>HTMLDocument</dfn> {
   DOM attribute must, on getting, return the preferred MIME name of
   the <span>document's character encoding</span>.</p>
 
   <p>The <dfn
   title="dom-document-defaultCharset"><code>defaultCharset</code></dfn>
   DOM attribute must, on getting, return the preferred MIME name of a
   character encoding, possibly the user's default encoding, or an
   encoding associated with the user's current geographical location,
   or any arbitrary encoding name.</p>
 
+  <hr>
+
+  </div>
+
+  <dl class="domintro">
+
+   <dt><var title="">document</var> . <code title="dom-document-readyState">readyState</code></dt>
+   <dd>
+    <p>Returns "loading" while the <code>Document</code> is loading, and "complete" once it has loaded.</p>
+    <p>The <code title="event-readystatechange">readystatechange</code> event fires on the <code>Document</code> object when this value changes.</p>
+   </dd>
+
+  </dl>
+
+  <div class="impl">
+
   <p>Each document has a <dfn>current document readiness</dfn>. When a
   <code>Document</code> object is created, it must have its
   <span>current document readiness</span> set to the string "loading"
   if the document is associated with an <span>HTML parser</span> or an
   <span>XML parser</span>, or to the string "complete"
   otherwise. Various algorithms during page loading affect this
   value. When the value is set, the user agent must <span>fire a
   simple event</span> called <code
   title="event-readystatechange">readystatechange</code> at the
   <code>Document</code> object.</p> <!-- XXX define
   document.onreadystatechange -->
 
   <p>The <dfn
   title="dom-document-readyState"><code>readyState</code></dfn> DOM
   attribute must, on getting, return the <span>current document
   readiness</span>.</p>
 
+  </div>
+
 
 
   <h4><dfn>DOM tree accessors</dfn></h4>
 
   <p><dfn>The <code>html</code> element</dfn> of a document is the
   document's root element, if there is one and it's an
   <code>html</code> element, or null otherwise.</p>
 
   <p><dfn>The <code>head</code> element</dfn> of a document is the
   first <code>head</code> element that is a child of <span>the
   <code>html</code> element</span>, if there is one, or null
   otherwise.</p>
 
   <hr>
 
+  <dl class="domintro">
+
+   <dt><var title="">document</var> . <code title="dom-document-title">title</code> [ = <var title="">value</var> ]</dt>
+   <dd>
+    <p>Returns the document's title, as given by <span>the
+    <code>title</code> element</span>.</p>
+    <p>Can be set, to update the document's title. If there is no
+    <span title="the head element"><code>head</code> element</span>,
+    the new value is ignored.</p>
+    <p>In SVG documents, the <code>SVGDocument</code> interface's
+    <code title="">title</code> attribute takes precedence.</p>
+   </dd>
+
+  </dl>
+
   <p><dfn>The <code>title</code> element</dfn> of a document is the
   first <code>title</code> element in the document (in tree order), if
   there is one, or null otherwise.</p>
 
+  <div class="impl">
+
   <p>The <dfn id="document.title"
   title="dom-document-title"><code>title</code></dfn> attribute must,
   on getting, run the following algorithm:</p>
 
   <ol>
 
    <li><p>If the <span>root element</span> is an <code>svg</code>
    element in the "<code title="">http://www.w3.org/2000/svg</code>"
    namespace, and the user agent supports SVG, then the getter must
    return the value that would have been returned by the DOM attribute
@@ -6699,29 +7246,44 @@ interface <dfn>HTMLDocument</dfn> {
    being assigned must be appended to <span>the <code>title</code>
    element</span>.</li>
 
   </ol>
 
   <p>The <code title="dom-document-title">title</code> attribute on
   the <code>HTMLDocument</code> interface should shadow the attribute
   of the same name on the <code>SVGDocument</code> interface when the
   user agent supports both HTML and SVG.</p>
 
+  </div>
+
   <hr>
 
+  <dl class="domintro">
+
+   <dt><var title="">document</var> . <code title="dom-document-body">body</code> [ = <var title="">value</var> ]</dt>
+   <dd>
+    <p>Returns <span>the body element</span>.</p>
+    <p>Can be set, to replace <span>the body element</span>.</p>
+    <p>If the new value is not a <code>body</code> or <code>frameset</code> element, this will throw a <code>HIERARCHY_REQUEST_ERR</code> exception.</p>
+   </dd>
+
+  </dl>
+
   <p><dfn>The body element</dfn> of a document is the first child of
   <span>the <code>html</code> element</span> that is either a
   <code>body</code> element or a <code>frameset</code> element. If
-  there is no such element, it is null. If the body element is null,
-  then when the specification requires that events be fired at "the
-  body element", they must instead be fired at the
-  <code>Document</code> object.</p>
+  there is no such element, it is null. <span class="impl">If the body
+  element is null, then when the specification requires that events be
+  fired at "the body element", they must instead be fired at the
+  <code>Document</code> object.</span></p>
+
+  <div class="impl">
 
   <p>The <dfn title="dom-document-body"><code>body</code></dfn>
   attribute, on getting, must return <span>the body element</span> of
   the document (either a <code>body</code> element, a
   <code>frameset</code> element, or null). On setting, the following
   algorithm must be run:</p>
 
   <ol>
 
    <li>If the new value is not a <code>body</code> or
@@ -6746,22 +7308,56 @@ interface <dfn>HTMLDocument</dfn> {
 
   <!--XXX
     http://lxr.mozilla.org/seamonkey/source/content/html/document/src/nsHTMLDocument.cpp
     search for ::GetBody ::SetBody
     http://trac.webkit.org/projects/webkit/browser/trunk/WebCore/html/HTMLDocument.cpp
     search for ::setBody
     http://trac.webkit.org/projects/webkit/browser/trunk/WebCore/dom/Document.cpp
     search for ::body
   -->
 
+  </div>
+
   <hr>
 
+  <dl class="domintro">
+
+   <dt><var title="">document</var> . <code title="dom-document-images">images</code></dt>
+   <dd>
+    <p>Returns an <code>HTMLCollection</code> of the <code>img</code> elements in the <code>Document</code>.</p>
+   </dd>
+
+   <dt><var title="">document</var> . <code title="dom-document-embeds">embeds</code></dt>
+   <dt><var title="">document</var> . <code title="dom-document-plugins">plugins</code></dt>
+   <dd>
+    <p>Return an <code>HTMLCollection</code> of the <code>embed</code> elements in the <code>Document</code>.</p>
+   </dd>
+
+   <dt><var title="">document</var> . <code title="dom-document-links">links</code></dt>
+   <dd>
+    <p>Returns an <code>HTMLCollection</code> of the <code>a</code> and <code>area</code> elements in the <code>Document</code> that have <code title="attr-hyperlink-href">href</code> attributes.</p>
+   </dd>
+
+   <dt><var title="">document</var> . <code title="dom-document-forms">forms</code></dt>
+   <dd>
+    <p>Return an <code>HTMLCollection</code> of the <code>form</code> elements in the <code>Document</code>.</p>
+   </dd>
+
+   <dt><var title="">document</var> . <code title="dom-document-scripts">scripts</code></dt>
+   <dd>
+    <p>Return an <code>HTMLCollection</code> of the <code>script</code> elements in the <code>Document</code>.</p>
+   </dd>
+
+  </dl>
+
+  <div class="impl">
+
   <!-- these all return the same object each time because of a rule in
   the collection section -->
 
   <p>The <dfn title="dom-document-images"><code>images</code></dfn>
   attribute must return an <code>HTMLCollection</code> rooted at the
   <code>Document</code> node, whose filter matches only
   <code>img</code> elements.</p>
 
   <p>The <dfn title="dom-document-embeds"><code>embeds</code></dfn>
   attribute must return an <code>HTMLCollection</code> rooted at the
@@ -6781,70 +7377,105 @@ interface <dfn>HTMLDocument</dfn> {
 
   <p>The <dfn title="dom-document-forms"><code>forms</code></dfn>
   attribute must return an <code>HTMLCollection</code> rooted at the
   <code>Document</code> node, whose filter matches only
   <code>form</code> elements.</p>
 
   <p>The <dfn title="dom-document-anchors"><code>anchors</code></dfn>
   attribute must return an <code>HTMLCollection</code> rooted at the
   <code>Document</code> node, whose filter matches only <code>a</code>
   elements with <code title="attr-a-name">name</code>
-  attributes.</p><!-- XXX note that such elements are non-conforming
-  -->
+  attributes.</p><!-- XXX move this to the obsolete APIs section or
+  add it to the domintro bit above, noting that such elements are
+  invalid -->
 
   <p>The <dfn title="dom-document-scripts"><code>scripts</code></dfn>
   attribute must return an <code>HTMLCollection</code> rooted at the
   <code>Document</code> node, whose filter matches only
   <code>script</code> elements.</p>
 
   <hr>
 
+  </div>
+
+  <dl class="domintro">
+
+   <dt><var title="">collection</var> = <var title="">document</var> . <code title="dom-document-getElementsByName">getElementsByName</code>(<var title="">name</var>)</dt>
+   <dd>
+    <p>Returns a <code>NodeList</code> of <code>a</code>,
+    <code>applet</code>, <code>button</code>, <code>form</code>,
+    <code>frame</code>, <code>frameset</code>, <code>iframe</code>,
+    <code>img</code>, <code>input</code>, <code>map</code>,
+    <code>meta</code>, <code>object</code>, <!-- not param, per IE8
+    --> <code>select</code>, and <code>textarea</code> elements in the
+    <code>Document</code> that have a <code title="">name</code>
+    attribute with the value <var title="">name</var>.</p>
+   </dd>
+
+   <dt><var title="">collection</var> = <var title="">document</var> . <code title="dom-document-getElementsByClassName">getElementsByClassName(<var title="">classes</var>)</code></dt>
+   <dt><var title="">collection</var> = <var title="">element</var> . <code title="dom-getElementsByClassName">getElementsByClassName(<var title="">classes</var>)</code></dt>
+   <dd>
+    <p>Returns a <code>NodeList</code> of the elements in the object
+    on which the method was invoked (a <code>Document</code> or an
+    <code>Element</code>) that have all the classes given by <var
+    title="">classes</var>.</p>
+    <p>The <var title="">classes</var> argument is interpreted as a
+    space-separated list of classes.</p>
+   </dd>
+
+  </dl>
+
+  <div class="impl">
+
   <p>The <dfn
   title="dom-document-getElementsByName"><code>getElementsByName(<var
   title="">name</var>)</code></dfn> method takes a string <var
   title="">name</var>, and must return a live <code>NodeList</code>
   containing all the <code>a</code>, <code>applet</code>,
   <code>button</code>, <code>form</code>, <code>frame</code>,
   <code>frameset</code>, <code>iframe</code>, <code>img</code>,
   <code>input</code>, <code>map</code>, <code>meta</code>,
-  <code>object</code>,<!-- param?  XXX--> <code>select</code>, and
-  <code>textarea</code> elements in that document that have a <code
-  title="">name</code> attribute whose value is equal to the <var
-  title="">name</var> argument (in a <span>case-sensitive</span>
-  manner), in <span>tree order</span>.</p>
+  <code>object</code>, <!-- not param, per IE8 -->
+  <code>select</code>, and <code>textarea</code> elements in that
+  document that have a <code title="">name</code> attribute whose
+  value is equal to the <var title="">name</var> argument (in a
+  <span>case-sensitive</span> manner), in <span>tree order</span>.</p>
 
   <p>The <dfn
   title="dom-document-getElementsByClassName"><code>getElementsByClassName(<var
   title="">classNames</var>)</code></dfn> method takes a string that
   contains an <span>unordered set of unique space-separated
   tokens</span> representing classes. When called, the method must
   return a live <code>NodeList</code> object containing all the
   elements in the document, in <span>tree order</span>, that have all
   the classes specified in that argument, having obtained the classes
   by <span title="split a string on spaces">splitting a string on
   spaces</span>. If there are no tokens specified in the argument,
   then the method must return an empty <code>NodeList</code>. If the
   document is in <span>quirks mode</span>, then the comparisons for
   the classes must be done in an <span>ASCII case-insensitive</span>
   manner, otherwise, the comparisons must be done in a
   <span>case-sensitive</span> manner.</p>
 
   <p>The <dfn
-  title="dom-getElementsByClassName"><code>getElementsByClassName()</code></dfn>
-  method on the <code>HTMLElement</code> interface must return a live
+  title="dom-getElementsByClassName"><code>getElementsByClassName(<var
+  title="">classNames</var>)</code></dfn> method on the
+  <code>HTMLElement</code> interface must return a live
   <code>NodeList</code> with the nodes that the
   <code>HTMLDocument</code> <code
   title="dom-document-getElementsByClassName">getElementsByClassName()</code>
   method would return when passed the same argument(s), excluding any
   elements that are not descendants of the <code>HTMLElement</code>
   object on which the method was invoked.</p>
 
+  </div>
+
   <p>HTML, SVG, and MathML elements define which classes they are in
   by having an attribute in the per-element partition with the name
   <code title="">class</code> containing a space-separated list of
   classes to which the element belongs. Other specifications may also
   allow elements in their namespaces to be labeled as being in
   specific classes.</p>
 
   <div class="example">
 
    <p>Given the following XHTML fragment:</p>
@@ -6871,20 +7502,22 @@ interface <dfn>HTMLDocument</dfn> {
    class.</p>
 
   </div>
 
 <!-- XXX
 >         * xGetParentElementByClassName(rootElement, className, tagName) -
 > Navigates upwards until we hit a parent element with the given class name and
 > optional tag name.
 -->
 
+  <div class="impl">
+
   <hr>
 
   <p>The <code>HTMLDocument</code> interface <span title="support
   named properties">supports named properties</span>. The <span>names
   of the supported named properties</span> at any moment consist of
   the values of the <code title="attr-name">name</code> content
   attributes of all the <code>applet</code>, <code>embed</code>,
   <code>form</code>, <code>iframe</code>, <code>img</code>, and
   <span>fallback-free</span> <code>object</code> elements in the
   <code>Document</code> that have <code title="attr-name">name</code>
@@ -6974,20 +7607,22 @@ interface <dfn>HTMLDocument</dfn> {
    title="">name</var>, and that have a <code
    title="attr-name">name</code> content attribute present also.</li>
 
   </ul>
 
   <p>An <code>object</code> element is said to be
   <dfn>fallback-free</dfn> if it has no element descendants other than
   <code>param</code> elements, and no <span>text node</span>
   descendants that are not <span>inter-element whitespace</span>.</p>
 
+  </div>
+
   <hr>
 
   <p class="note">The <code title="dom-document-dir">dir</code>
   attribute on the <code>HTMLDocument</code> interface is defined
   along with the <code title="attr-dir">dir</code> content
   attribute.</p>
 
 
 
   <h3>Elements</h3>
@@ -7064,49 +7699,50 @@ interface <dfn>HTMLDocument</dfn> {
  ...</pre>
 
   </div>
 
   <p>Through scripting and using other mechanisms, the values of
   attributes, text, and indeed the entire structure of the document
   may change dynamically while a user agent is processing it. The
   semantics of a document at an instant in time are those represented
   by the state of the document at that instant in time, and the
   semantics of a document can therefore change over time. User agents
-  must update their presentation of the document as this occurs.</p>
+  <span class="impl">must</span> update their presentation of the
+  document as this occurs.</p>
 
   <p class="example">HTML has a <code>progress</code> element that
   describes a progress bar. If its "value" attribute is dynamically
   updated by a script, the UA would update the rendering to show the
   progress changing.</p>
 
 
 
   <h4>Elements in the DOM</h4>
 
-  <p>The nodes representing <span>HTML elements</span> in the DOM must
-  implement, and expose to scripts, the interfaces listed for them in
-  the relevant sections of this specification. This includes
-  <span>HTML elements</span> in <span>XML documents</span>, even when
-  those documents are in another context (e.g. inside an XSLT
-  transform).</p>
+  <p>The nodes representing <span>HTML elements</span> in the DOM
+  <span class="impl">must</span> implement, and expose to scripts, the
+  interfaces listed for them in the relevant sections of this
+  specification. This includes <span>HTML elements</span> in <span>XML
+  documents</span>, even when those documents are in another context
+  (e.g. inside an XSLT transform).</p>
 
   <p>Elements in the DOM <span title="represents">represent</span>
   things; that is, they have intrinsic <em>meaning</em>, also known as
   semantics.</p>
 
   <p class="example">For example, an <code>ol</code> element
   represents an ordered list.</p>
 
   <p>The basic interface, from which all the <span>HTML
-  elements</span>' interfaces inherit, and which must be used by
-  elements that have no additional requirements, is the
-  <code>HTMLElement</code> interface.</p>
+  elements</span>' interfaces inherit, <span class="impl">and which
+  must be used by elements that have no additional
+  requirements,</span> is the <code>HTMLElement</code> interface.</p>
 
   <pre class="idl">interface <dfn>HTMLElement</dfn> : <span>Element</span> {
   // <span>DOM tree accessors</span>
   NodeList <span title="dom-getElementsByClassName">getElementsByClassName</span>(in DOMString classNames);
 
   // <span>dynamic markup insertion</span>
            attribute DOMString <span title="dom-innerHTML">innerHTML</span>;
            attribute DOMString <span title="dom-outerHTML">outerHTML</span>;
   void <span title="dom-insertAdjacentHTML">insertAdjacentHTML</span>(in DOMString position, in DOMString text);
 
@@ -7170,22 +7806,22 @@ interface <dfn>HTMLDocument</dfn> {
   <p>The <code>HTMLElement</code> interface holds methods and
   attributes related to a number of disparate features, and the
   members of this interface are therefore described in various
   different sections of this specification.</p>
 
 
 
   <h4><dfn>Global attributes</dfn></h4>
 
   <p>The following attributes are common to and may be specified on
-  all <span>HTML elements</span> (even those not defined in this
-  specification):</p>
+  all <span>HTML elements</span><span class="impl"> (even those not
+  defined in this specification)</span>:</p>
 
   <ul class="brief">
    <li><code title="attr-class">class</code></li>
    <li><code title="attr-contenteditable">contenteditable</code></li>
    <li><code title="attr-contextmenu">contextmenu</code></li>
    <li><code title="attr-dir">dir</code></li>
    <li><code title="attr-draggable">draggable</code></li>
    <li><code title="attr-id">id</code></li>
    <li><code title="attr-hidden">hidden</code></li>
    <li><code title="attr-lang">lang</code></li>
@@ -7266,39 +7902,43 @@ interface <dfn>HTMLDocument</dfn> {
 
   <p>The <code title="attr-id">id</code> attribute
   <span>represents</span> its element's unique identifier. The value
   must be unique in the element's <span>home subtree</span> and must
   contain at least one character. The value must not contain any <span
   title="space character">space characters</span>.</p>
 
   <!-- space characters are disallowed because space-separated lists
   of IDs otherwise would not be able to reach all valid IDs -->
 
+  <div class="impl">
+
   <p>If the value is not the empty string, user agents must associate
   the element with the given value (exactly, including any space
   characters) for the purposes of ID matching within the element's
   <span>home subtree</span> (e.g. for selectors in CSS or for the
   <code>getElementById()</code> method in the DOM).</p>
 
   <p>Identifiers are opaque strings. Particular meanings should not be
   derived from the value of the <code title="attr-id">id</code>
   attribute.</p>
 
   <p>This specification doesn't preclude an element having multiple
   IDs, if other mechanisms (e.g. DOM Core methods) can set an
   element's ID in a way that doesn't conflict with the <code
   title="attr-id">id</code> attribute.</p>
 
   <p>The <dfn title="dom-id"><code>id</code></dfn> DOM attribute must
   <span>reflect</span> the <code title="attr-id">id</code> content
   attribute.</p>
 
+  </div>
+
 
   <h5>The <dfn title="attr-title"><code>title</code></dfn> attribute</h5>
 
   <p>The <code title="attr-title">title</code> attribute
   <span>represents</span> advisory information for the element, such
   as would be appropriate for a tooltip. On a link, this could be the
   title or a description of the target resource; on an image, it could
   be the image credit or a description of the image; on a paragraph,
   it could be a footnote or commentary on the text; on a citation, it
   could be further information about the source; and so forth. The
@@ -7316,24 +7956,30 @@ interface <dfn>HTMLDocument</dfn> {
   <p>If the <code title="attr-title">title</code> attribute's value
   contains U+000A LINE FEED (LF) characters, the content is split into
   multiple lines. Each U+000A LINE FEED (LF) character represents a
   line break.</p>
 
   <p>Some elements, such as <code>link</code>, <code>abbr</code>, and
   <code>input</code>, define additional semantics for the <code
   title="attr-title">title</code> attribute beyond the semantics
   described above.</p>
 
+  <div class="impl">
+
+  <hr>
+
   <p>The <dfn title="dom-title"><code>title</code></dfn> DOM attribute
   must <span>reflect</span> the <code title="attr-title">title</code>
   content attribute.</p>
 
+  </div>
+
 
   <h5>The <dfn title="attr-lang"><code>lang</code></dfn> and <dfn
   title="attr-xml-lang"><code>xml:lang</code></dfn>
   attributes</h5>
 
   <p>The <code title="attr-lang">lang</code> attribute specifies the
   primary <dfn>language</dfn> for the element's contents and for any
   of the element's attributes that contain text. Its value must be a
   valid RFC 3066 language code, or the empty string. <a
   href="#refsRFC3066">[RFC3066]</a></p>
@@ -7371,20 +8017,22 @@ interface <dfn>HTMLDocument</dfn> {
   title="">http://www.w3.org/XML/1998/namespace</code> namespace) in
   <span>HTML documents</span>. To ease migration to and from XHTML,
   authors may specify an attribute in no namespace with no prefix and
   with the localname <code title="">xml:lang</code> on <span>HTML
   elements</span> in <span>HTML documents</span>, but such attributes
   must only be specified if a <code title="attr-lang">lang</code>
   attribute is also specified, and both attributes must have the same
   value when compared in an <span>ASCII case-insensitive</span>
   manner.</p>
 
+  <div class="impl">
+
   <hr>
 
   <p>To determine the language of a node, user agents must look at the
   nearest ancestor element (including the element itself if the node
   is an element) that has an <code
   title="attr-xml-lang">xml:lang</code> attribute set or is an <span
   title="HTML elements">HTML element</span> and has a <code
   title="attr-lang">lang</code> attribute set. That attribute
   specifies the language of the node.</p>
 
@@ -7412,24 +8060,28 @@ interface <dfn>HTMLDocument</dfn> {
 
   <hr>
 
   <p>User agents may use the element's language to determine proper
   processing or rendering (e.g. in the selection of appropriate
   fonts or pronunciations, or for dictionary selection). <!--User
   agents must not use the element's language to determine text
   directionality. (commented out because text directionality is a
   rendering-level concern.)--></p>
 
+  <hr>
+
   <p>The <dfn title="dom-lang"><code>lang</code></dfn> DOM attribute
   must <span>reflect</span> the <code title="attr-lang">lang</code>
   content attribute.</p>
 
+  </div>
+
 
   <h5>The <dfn title="attr-xml-base"><code>xml:base</code></dfn>
   attribute (XML only)</h5>
 
   <p>The <code title="attr-xml-base">xml:base</code> attribute is
   defined in XML Base. <a href="#refsXMLBASE">[XMLBASE]</a></p>
 
   <p>The <code title="attr-xml-base">xml:base</code> attribute may be
   used on elements of <span>XML documents</span>.  Authors must not
   use the <code title="attr-xml-base">xml:base</code> attribute in
@@ -7438,133 +8090,184 @@ interface <dfn>HTMLDocument</dfn> {
 
   <h5>The <dfn title="attr-dir"><code>dir</code></dfn> attribute</h5>
 
   <p>The <code title="attr-dir">dir</code> attribute specifies the
   element's text directionality. The attribute is an <span>enumerated
   attribute</span> with the keyword <code title="">ltr</code> mapping
   to the state <i>ltr</i>, and the keyword <code title="">rtl</code>
   mapping to the state <i>rtl</i>. The attribute has no
   defaults.</p>
 
+  <div class="impl">
+
   <p>The processing of this attribute is primarily performed by the
   presentation layer. For example, the rendering section in this
   specification defines a mapping from this attribute to the CSS
   'direction' and 'unicode-bidi' properties, and CSS defines rendering
   in terms of those properties.</p>
 
+  </div>
+
   <p><dfn>The directionality</dfn> of an element, which is used in
   particular by the <code>canvas</code> element's text rendering API,
   is either 'ltr' or 'rtl'. If the user agent supports CSS and the
   'direction' property on this element has a computed value of either
   'ltr' or 'rtl', then that is <span>the directionality</span> of the
   element. Otherwise, if the element is being rendered, then <span>the
   directionality</span> of the element is the directionality used by
   the presentation layer, potentially determined from the value of the
   <code title="attr-dir">dir</code> attribute on the
   element. Otherwise, if the element's <code
   title="attr-dir">dir</code> attribute has the state <i>ltr</i>,
   the element's directionality is 'ltr' (left-to-right); if the
   attribute has the state <i>rtl</i>, the element's directionality
   is 'rtl' (right-to-left); and oherwise, the element's directionality
   is the same as its parent element, or 'ltr' if there is no parent
   element.</p>
 
+  <hr>
+
+  <dl class="domintro">
+
+   <dt><var title="">document</var> . <code title="dom-dir">dir</code> [ = <var title="">value</var> ]</dt>
+   <dd>
+    <p>Returns <span>the <code>html</code> element</span>'s <code title="attr-dir">dir</code> attribute's value, if any.</p>
+    <p>Can be set, to either "<code title="">ltr</code>" or "<code title="">rtl</code>", to replace <span>the <code>html</code> element</span>'s <code title="attr-dir">dir</code> attribute's value.</p>
+    <p>If there is no <span title="the html element"><code>html</code> element</span>, returns the empty string and ignores new values.</p>
+   </dd>
+
+  </dl>
+
+  <div class="impl">
+
   <p>The <dfn title="dom-dir"><code>dir</code></dfn> DOM attribute on
   an element must <span>reflect</span> the <code
   title="attr-dir">dir</code> content attribute of that element,
   <span>limited to only known values</span>.</p>
 
   <p>The <dfn title="dom-document-dir"><code>dir</code></dfn> DOM
   attribute on <code>HTMLDocument</code> objects must
   <span>reflect</span> the <code title="attr-dir">dir</code> content
   attribute of <span>the <code>html</code> element</span>, if any,
   <span>limited to only known values</span>. If there is no such
   element, then the attribute must return the empty string and do
   nothing on setting.</p>
 
+  </div>
+
   <p class="note">Authors are strongly encouraged to use the <code
   title="attr-dir">dir</code> attribute to indicate text direction
   rather than using CSS, since that way their documents will continue
   to render correctly even in the absence of CSS (e.g. as interpreted
   by search engines).</p>
 
 
   <h5 id="classes">The <dfn title="attr-class"><code>class</code></dfn> attribute</h5>
 
   <p>Every <span title="HTML elements">HTML element</span> may have a
   <code title="attr-class">class</code> attribute specified.</p>
 
   <p>The attribute, if specified, must have a value that is an
   <span>unordered set of unique space-separated tokens</span>
   representing the various classes that the element belongs to.</p>
 
+  <div class="impl">
+
   <p>The classes that an <span title="HTML elements">HTML
   element</span> has assigned to it consists of all the classes
   returned when the value of the <code title="attr-class">class</code>
   attribute is <span title="split a string on spaces">split on
   spaces</span>.</p>
 
+  </div>
+
   <p class="note">Assigning classes to an element affects class
   matching in selectors in CSS, the <code
   title="dom-document-getElementsByClassName">getElementsByClassName()</code>
   method in the DOM, and other such features.</p>
 
   <p>Authors may use any value in the <code
   title="attr-class">class</code> attribute, but are encouraged to use
   the values that describe the nature of the content, rather than
   values that describe the desired presentation of the
   content.</p>
 
+  <div class="impl">
+
+  <hr>
+
   <p>The <dfn title="dom-className"><code>className</code></dfn> and
   <dfn title="dom-classList"><code>classList</code></dfn> DOM
   attributes must both <span>reflect</span> the <code
   title="attr-class">class</code> content attribute.</p>
 
+  </div>
+
 
 
   <h5>The <dfn title="attr-style"><code>style</code></dfn> attribute</h5>
 
   <p>All elements may have the <code title="attr-style">style</code>
   content attribute set. If specified, the attribute must contain only
   a list of zero or more semicolon-separated (;) CSS declarations. <a
   href="#refsCSS21">[CSS21]</a></p>
 
+  <div class="impl">
+
   <p>In user agents that support CSS, the attribute's value must be
   parsed when the attribute is added or has its value changed, with
   its value treated as the body (the part inside the curly brackets)
   of a declaration block in a rule whose selector matches just the
   element on which the attribute is set. All <span
   title="URL">URLs</span> in the value must be <span title="resolve a
   url">resolved</span> relative to the element when the attribute is
   parsed.<!-- so dynamic changes to the base URL don't affect the CSS
   --> For the purposes of the CSS cascade, the attribute must be
-  considered to be a 'style' attribute at the author level. </p>
+  considered to be a 'style' attribute at the author level.</p>
+
+  </div>
 
   <p>Documents that use <code title="attr-style">style</code>
   attributes on any of their elements must still be comprehensible and
   usable if those attributes were removed.</p>
 
   <p class="note">In particular, using the <code
   title="attr-style">style</code> attribute to hide and show content,
   or to convey meaning that is otherwise not included in the document,
-  is non-conforming.</p>
+  is non-conforming. (To hide and show content, use the <code
+  title="attr-hidden">hidden</code> attribute.)</p>
+
+  <hr>
+  
+  <dl class="domintro">
+
+   <dt><var title="">element</var> . <code title="dom-style">style</code></dt>
+   <dd>
+    <p>Returns a <code>CSSStyleDeclaration</code> object for the element's <code title="attr-style">style</code> attribute.</p>
+   </dd>
+
+  </dl>
+
+  <div class="impl">
 
   <p>The <dfn title="dom-style"><code>style</code></dfn> DOM attribute
   must return a <code>CSSStyleDeclaration</code> whose value
   represents the declarations specified in the attribute, if
   present. Mutating the <code>CSSStyleDeclaration</code> object must
   create a <code title="attr-font-style">style</code> attribute on the
   element (if there isn't one already) and then change its value to be
   a value representing the serialized form of the
   <code>CSSStyleDeclaration</code> object. <a
   href="#refsCSSOM">[CSSOM]</a>
 
+  </div>
+
   <div class="example">
 
    <p>In the following example, the words that refer to colors are
    marked up using the <code>span</code> element and the <code
    title="attr-style">style</code> attribute to make those words show
    up in the relevant colors in visual media.</p>
 
    <pre>&lt;p>My sweat suit is &lt;span style="color: green; background:
 transparent">green&lt;/span> and my eyes are &lt;span style="color: blue;
 background: transparent">blue&lt;/span>.&lt;/p></pre>
@@ -7614,20 +8317,33 @@ background: transparent">blue&lt;/span>.&lt;/p></pre>
    <p>This is because these attributes are intended for use by the
    site's own scripts, and are not a generic extension mechanism for
    publicly-usable metadata.</p>
 
   </div>
 
   <p>Every <span title="HTML elements">HTML element</span> may have
   any number of <span title="custom data attribute">custom data
   attributes</span> specified, with any value.</p>
 
+  <hr>
+
+  <dl class="domintro">
+
+   <dt><var title="">element</var> . <code title="dom-dataset">dataset</code></dt>
+   <dd>
+    <p>Returns a <code>DOMStringMap</code> object for the element's <code title="attr-data-*">data-*</code> attributes.</p>
+   </dd>
+
+  </dl>
+
+  <div class="impl">
+
   <p>The <dfn title="dom-dataset"><code>dataset</code></dfn> DOM
   attribute provides convenient accessors for all the <code
   title="attr-data-*">data-*</code> attributes on an element.  On
   getting, the <code title="dom-dataset">dataset</code> DOM attribute
   must return a <code>DOMStringMap</code> object, associated with the
   following algorithms, which expose these attributes on their
   element:</p>
 
   <dl>
 
@@ -7683,20 +8399,22 @@ background: transparent">blue&lt;/span>.&lt;/p></pre>
      algorithm.</li>
 
      <li>Remove the attribute with the name <var title="">name</var>,
      if such an attribute exists. Do nothing otherwise.</li>
 
     </ol>
    </dd>
 
   </dl>
 
+  </div>
+
   <div class="example">
 
    <p>If a Web page wanted an element to represent a space ship,
    e.g. as part of a game, it would have to use the <code
    class="attr-class">class</code> attribute along with <code
    title="attr-data-*">data-*</code> attributes:</p>
 
    <pre>
 &lt;div class="spaceship" data-id="92432"
      data-weapons="laser 2" data-shields="50%"
@@ -7707,24 +8425,28 @@ background: transparent">blue&lt;/span>.&lt;/p></pre>
  &lt;/button>
 &lt;/div>
 </pre>
 
   </div>
 
   <p>Authors should carefully design such extensions so that when the
   attributes are ignored and any associated CSS dropped, the page is
   still usable.</p>
 
+  <div class="impl">
+
   <p>User agents must not derive any implementation behavior from
   these attributes or values. Specifications intended for user agents
   must not define these attributes to have any meaningful values.</p>
 
+  </div>
+
 
 
   <h3>Content models</h3>
 
   <p>All the elements in this specification have a defined content
   model, which describes what nodes are allowed inside the elements,
   and thus what the structure of an HTML document or fragment must
   look like.</p>
 
   <p class="note">As noted in the conformance and terminology
@@ -7962,27 +8684,36 @@ TESTS:
 http://software.hixie.ch/utilities/js/live-dom-viewer/?%3C%21DOCTYPE%20html%3E%0A%3Cp%20tabindex%3D1%3Etest%20%3Ca%20href%3D%22%22%3E%20%3Cem%3Etest%3C/em%3E%20%3C/a%3E%0A%3Cscript%3E%0A%20function%20test%20%28e%29%20%7B%20w%28e.type%20+%20%27%20on%20%27%20+%20e.target.tagName%20+%20%27%20through%20%27%20+%20e.currentTarget.tagName%29%3B%20%7D%0A%20document.getElementsByTagName%28%27a%27%29%5B0%5D.addEventListener%28%27click%27%2C%20test%2C%20false%29%3B%0A%20document.getElementsByTagName%28%27a%27%29%5B0%5D.addEventListener%28%27DOMActivate%27%2C%20test%2C%20false%29%3B%0A%20document.getElementsByTagName%28%27p%27%29%5B0%5D.addEventListener%28%27click%27%2C%20test%2C%20false%29%3B%0A%20document.getElementsByTagName%28%27p%27%29%5B0%5D.addEventListener%28%27DOMActivate%27%2C%20test%2C%20false%29%3B%0A%3C/script%3E%0A
 http://software.hixie.ch/utilities/js/live-dom-viewer/?%3C%21DOCTYPE%20HTML%3E%0A%3Ca%20href%3Dhttp%3A//google.com/%20target%3Da%3EA%3C/a%3E%3Ca%20href%3Dhttp%3A//yahoo.com/%20target%3Db%3EB%3C/a%3E%3Cbr%3E%0A%3Ciframe%20name%3Da%3E%3C/iframe%3E%3Ciframe%20name%3Db%3E%3C/iframe%3E%0A%3Cscript%3E%0A%20var%20a%20%3D%20document.getElementsByTagName%28%27a%27%29%5B0%5D%3B%0A%20var%20b%20%3D%20document.getElementsByTagName%28%27a%27%29%5B1%5D%3B%0A%20a.appendChild%28b%29%3B%0A%3C/script%3E
 http://software.hixie.ch/utilities/js/live-dom-viewer/?%3C%21DOCTYPE%20HTML%3E%0A%3Cform%20action%3D%22http%3A//google.com/%22%20onsubmit%3D%22w%28%27onsubmit%27%29%22%3E%3Cem%3EA%3C/em%3E%3C/form%3E%0A%3Cscript%3E%0Adocument.getElementsByTagName%28%27form%27%29%5B0%5D.attachEvent%28%27onsubmit%27%2C%20function%20%28%29%20%7B%20w%28%27submit%20fired%27%29%20%7D%29%3B%0Adocument.getElementsByTagName%28%27form%27%29%5B0%5D.fireEvent%28%27onsubmit%27%29%3B%0A%3C/script%3E
 http://software.hixie.ch/utilities/js/live-dom-viewer/?%3C%21DOCTYPE%20HTML%3E%0A%3Cform%20action%3D%22http%3A//google.com/%22%3EX%3C/form%3E%0A%3Cscript%3E%0Avar%20evt%20%3D%20document.createEvent%28%22Events%22%29%3B%0Aevt.initEvent%28%22submit%22%2C%20true%2C%20true%29%3B%0Adocument.getElementsByTagName%28%27form%27%29%5B0%5D.dispatchEvent%28evt%29%3B%0A%3C/script%3E
 -->
 
   <p><dfn>Interactive content</dfn> is content that is specifically
   intended for user interaction.</p>
 
   <p>Certain elements in HTML have an <span>activation
-  behavior</span>, which means the user agent should allow the user to
-  manually trigger them in some way, for instance using keyboard or
-  voice input, or through mouse clicks. When the user triggers an
-  element with a defined <span>activation behavior</span> in a manner
-  other than clicking it, the default action of the interaction
-  event<!-- XXX --> must be to <span>run synthetic click activation
-  steps</span> on the element.</p>
+  behavior</span>, which means that the user can activate them. This
+  triggers a sequence of events dependent on the activation mechanism,
+  and normally culminating in a <code title="event-click">click</code>
+  event followed by a <code
+  title="event-DOMActivate">DOMActivate</code> event<span
+  title="impl">, as described below</span>.</p>
+
+  <div class="impl">
+
+  <p>The user agent should allow the user to manually trigger elements
+  that have an <span>activation behavior</span>, for instance using
+  keyboard or voice input, or through mouse clicks. When the user
+  triggers an element with a defined <span>activation behavior</span>
+  in a manner other than clicking it, the default action of the
+  interaction event<!-- XXX --> must be to <span>run synthetic click
+  activation steps</span> on the element.</p>
 
   <p>When a user agent is to <dfn>run synthetic click activation
   steps</dfn> on an element, the user agent must <span>run pre-click
   activation steps</span> on the element, then <span>fire a <code
   title="event-click">click</code> event</span> at the element. The
   default action of this <span title="event-click">click</span> event
   must be to <span>run post-click activation steps</span> on the
   element. If the event is canceled, the user agent must <span>run
   canceled activation steps</span> on the element instead.</p>
 
@@ -8060,20 +8791,21 @@ http://software.hixie.ch/utilities/js/live-dom-viewer/?%3C%21DOCTYPE%20HTML%3E%0
   on an element, it must run the <dfn>canceled activation steps</dfn>
   defined for that element, if any.</p>
 
   <p>When a user agent is to <dfn>run final activation steps</dfn> on
   an element, it must run the <dfn>activation behavior</dfn> defined
   for that element. Activation behaviors can refer to the <code
   title="event-click">click</code> and <code
   title="event-DOMActivate">DOMActivate</code> events that were fired
   by the steps above leading up to this point.</p>
 
+  </div>
 
 
   <h4>Transparent content models</h4>
 
   <p>Some elements are described as <dfn>transparent</dfn>; they have
   "transparent" in the description of their content model.</p>
 
   <p>When a content model includes a part that is "transparent", those
   parts must not contain content that would not be conformant if all
   transparent elements in the tree were replaced, in their parent
@@ -8178,149 +8910,204 @@ http://software.hixie.ch/utilities/js/live-dom-viewer/?%3C%21DOCTYPE%20HTML%3E%0
  Falcon's innermost secrets.&lt;/p>
 &lt;/aside></pre>
 
   </div>
 
   <p class="note">Generally, having elements straddle paragraph
   boundaries is best avoided. Maintaining such markup can be
   difficult.</p>
 
 
+
   <h3>APIs in HTML documents</h3>
 
   <p>For <span>HTML documents</span>, and for <span>HTML
   elements</span> in <span>HTML documents</span>, certain APIs defined
   in DOM3 Core become case-insensitive or case-changing, as sometimes
-  defined in DOM3 Core, and as summarized or required below. <a
-  href="#refsDOM3CORE">[DOM3CORE]</a>.</p>
+  defined in DOM3 Core, and as summarized <span class="impl">or
+  required</span> below. <a href="#refsDOM3CORE">[DOM3CORE]</a>.</p>
 
   <p>This does not apply to <span>XML documents</span> or to elements
   that are not in the <span>HTML namespace</span> despite being in
   <span>HTML documents</span>.</p>
 
   <dl>
 
    <dt><code title="">Element.tagName</code> and <code
    title="">Node.nodeName</code></dt>
 
    <dd>
 
-    <p>These attributes must return element names <span>converted to
-    uppercase</span>, regardless of the case with which they were
-    created.</p>
+    <p>These attributes <span class="impl">must</span> return element
+    names <span>converted to uppercase</span>, regardless of the case
+    with which they were created.</p>
 
    </dd>
 
 
    <dt><code title="">Document.createElement()</code></dt>
 
    <dd>
 
     <p>The canonical form of HTML markup is all-lowercase; thus, this
     method will <span title="converted to lowercase">lowercase</span>
-    the argument before creating the requisite element. Also, the
-    element created must be in the <span>HTML namespace</span>.</p>
+    the argument before creating the requisite element. <span
+    title="impl">Also, the element created must be in the <span>HTML
+    namespace</span></span>.</p>
 
     <p class="note">This doesn't apply to <code
     title="">Document.createElementNS()</code>. Thus, it is possible,
     by passing this last method a tag name in the wrong case, to
     create an element that claims to have the tag name of an element
     defined in this specification, but doesn't support its interfaces,
     because it really has another tag name not accessible from the DOM
     APIs.</p>
 
    </dd>
 
 
+   <dt><code title="">Element.setAttribute()</code></dt>
    <dt><code title="">Element.setAttributeNode()</code></dt>
 
    <dd>
 
-    <p>When an <code>Attr</code> node is set on an <span title="HTML
-    elements">HTML element</span>, it must have its name
-    <span>converted to lowercase</span> before the element is
-    affected.</p>
+    <p>Attribute names are <span>converted to lowercase</span>.</p>
 
-    <p class="note">This doesn't apply to <code
-    title="">Document.setAttributeNodeNS()</code>.</p>
+    <div class="impl">
 
-   </dd>
-
-
-   <dt><code title="">Element.setAttribute()</code></dt>
+     <p>Specifically: when an attribute is set on an <span title="HTML
+     elements">HTML element</span> using <code
+     title="">Element.setAttribute()</code>, the name argument must be
+     <span>converted to lowercase</span> before the element is
+     affected; and when an <code>Attr</code> node is set on an <span
+     title="HTML elements">HTML element</span> using <code
+     title="">Element.setAttributeNode()</code>, it must have its name
+     <span>converted to lowercase</span> before the element is
+     affected.</p>
 
-   <dd>
-
-    <p>When an attribute is set on an <span title="HTML elements">HTML
-    element</span>, the name argument must be <span>converted to
-    lowercas</span> before the element is affected.</p>
+    </div>
 
     <p class="note">This doesn't apply to <code
-    title="">Document.setAttributeNS()</code>.</p>
+    title="">Document.setAttributeNS()</code> and <code
+    title="">Document.setAttributeNodeNS()</code>.</p>
 
    </dd>
 
 
-   <dt><code title="">Document.getElementsByTagName()</code> and <code
-   title="">Element.getElementsByTagName()</code></dt>
+   <dt><code title="">Document.getElementsByTagName()</code></dt>
+   <dt><code title="">Element.getElementsByTagName()</code></dt>
 
    <dd>
 
-    <p>These methods (but not their namespaced counterparts) must
-    compare the given argument in an <span>ASCII
-    case-insensitive</span> manner when looking at <span title="HTML
-    elements">HTML elements</span>, and in a
+    <p>These methods (but not their namespaced counterparts) <span
+    class="impl">must</span> compare the given argument in an
+    <span>ASCII case-insensitive</span> manner when looking at <span
+    title="HTML elements">HTML elements</span>, and in a
     <span>case-sensitive</span> manner otherwise.</p>
 
     <p class="note">Thus, in an <span title="HTML documents">HTML
     document</span> with nodes in multiple namespaces, these methods
     will be both case-sensitive and case-insensitive at the same
     time.</p>
 
    </dd>
 
 
    <dt><code title="">Document.renameNode()</code></dt>
 
    <dd>
 
-    <p>If the new namespace is the <span>HTML namespace</span>, then
-    the new qualified name must be <span>converted to lowercase</span>
-    before the rename takes place.</p>
+    <p>HTML element names are <span>converted to lowercase</span> when
+    the elements are created. <span class="impl">Thus, if the new
+    namespace passed to the <code
+    title="">Document.renameNode()</code> method is the <span>HTML
+    namespace</span>, the new qualified name must be <span>converted
+    to lowercase</span> before the rename takes place.</span></p>
 
    </dd>
    
 
   </dl>
 
 
-
   <h3><dfn>Dynamic markup insertion</dfn></h3>
 
   <p class="note">APIs for dynamically inserting markup into the
   document interact with the parser, and thus their behavior, varies
   depending on whether they are used with <span>HTML documents</span>
   (and the <span>HTML parser</span>) or XHTML in <span>XML
   documents</span> (and the <span>XML parser</span>).</p>
 
   <!-- XXX must make sure we spec that innerHTML et al causes mutation
   events to fire, but document.write() doesn't. (the latter is already
   req-stated in the parser section, btw) -->
 
 
 
   <h4>Controlling the input stream</h4>
 
   <p>The <dfn title="dom-document-open"><code>open()</code></dfn>
   method comes in several variants with different numbers of
   arguments.</p>
 
+  <dl class="domintro">
+
+   <dt><var title="">document</var> = <var title="">document</var> . <code title="dom-document-open">open</code>( [ <var title="">type</var> [, <var title="">replace</var> ] ] )</dt>
+
+   <dd>
+
+    <p>Causes the <code>Document</code> to be replaced in-place, as if
+    it was a new <code>Document</code> object, but reusing the
+    previous object, which is then returned.</p>
+
+    <p>If the <var title="">type</var> argument is omitted or has the
+    value "<code title="">text/html</code>", then the resulting
+    <code>Document</code> has an HTML parser associated with it, which
+    can be given data to parse using <code
+    title="dom-document-write">document.write()</code>. Otherwise, all
+    content passed to <code
+    title="dom-document-write">document.write()</code> will be parsed
+    as plain text.</p>
+
+    <p>If the <var title="">replace</var> argument is absent or false,
+    a new entry is added to the session history to represent this
+    entry, and the previous entries for this <code>Document</code> are
+    all collapsed into one entry with a new <code>Document</code>
+    object.</p>
+
+    <p>The method has no effect if the <code>Document</code> is still
+    being parsed.</p>
+
+   </dd>
+
+   <dt><var title="">window</var> = <var title="">document</var> . <code title="dom-document-open">open</code>( <var title="">url</var>, <var title="">name</var>, <var title="">features</var> [, <var title="">replace</var> ] )</dt>
+
+   <dd>
+
+    <p>Works like the <code title="dom-open">window.open()</code>
+    method.</p>
+
+   </dd>
+
+   <dt><var title="">document</var> . <code title="dom-document-close">close</code>()</dt>
+
+   <dd>
+
+    <p>Closes the input stream that was opened by the <code
+    title="dom-document-open">document.open()</code> method.</p>
+
+   </dd>
+
+  </dl>
+
+  <div class="impl">
+
   <p>When called with two or fewer arguments, the method must act as
   follows:</p>
 
   <ol>
 
    <li><p>Let <var title="">type</var> be the value of the first
    argument, if there is one, or "<code>text/html</code>"
    otherwise.</p></li>
 
    <li><p>Let <var title="">replace</var> be true if there is a second
@@ -8474,25 +9261,46 @@ http://software.hixie.ch/utilities/js/live-dom-viewer/?%3C%21DOCTYPE%20HTML%3E%0
   <code>Window</code> object, then the method must raise an
   <code>INVALID_ACCESS_ERR</code> exception.</p>
 
   <p>The <dfn title="dom-document-close"><code>close()</code></dfn>
   method must do nothing if there is no <span>script-created
   parser</span> associated with the document. If there is such a
   parser, then, when the method is called, the user agent must insert
   an <span>explicit "EOF" character</span> at the end of the parser's
   <span>input stream</span>.</p>
 
+  </div>
 
 
 
   <h4><code title="dom-document-write">document.write()</code></h4>
 
+  <dl class="domintro">
+
+   <dt><var title="">document</var> . <code title="dom-document-write">write</code>(<var title="">text</var>...)</dt>
+
+   <dd>
+
+    <p>Adds the given string(s) to the <code>Document</code>'s input
+    stream. If necessary, calls the <code
+    title="dom-document-open">open()</code> method implicitly
+    first.</p>
+
+    <p>This method throws an <code>INVALID_ACCESS_ERR</code> exception
+    when invoked on <span>XML documents</span>.</p>
+
+   </dd>
+
+  </dl>
+
+  <div class="impl">
+
   <p>The <dfn
   title="dom-document-write"><code>document.write(...)</code></dfn>
   method must act as follows:</p>
 
   <ol>
 
    <li>
 
     <p>If the method was invoked on an <span title="XML documents">XML
     document</span>, throw an <code>INVALID_ACCESS_ERR</code>
@@ -8553,38 +9361,99 @@ http://software.hixie.ch/utilities/js/live-dom-viewer/?%3C%21DOCTYPE%20HTML%3E%0
    </li>
 
    <li>
 
     <p>Finally, the method must return.</p>
 
    </li>
 
   </ol>
 
+  </div>
+
 
   <h4><code title="dom-document-writeln">document.writeln()</code></h4>
 
+  <dl class="domintro">
+
+   <dt><var title="">document</var> . <code title="dom-document-writeln">writeln</code>(<var title="">text</var>...)</dt>
+
+   <dd>
+
+    <p>Adds the given string(s) to the <code>Document</code>'s input
+    stream, followed by a newline character. If necessary, calls the
+    <code title="dom-document-open">open()</code> method implicitly
+    first.</p>
+
+    <p>This method throws an <code>INVALID_ACCESS_ERR</code> exception
+    when invoked on <span>XML documents</span>.</p>
+
+   </dd>
+
+  </dl>
+
+  <div class="impl">
+
   <p>The <dfn
   title="dom-document-writeln"><code>document.writeln(...)</code></dfn>
   method, when invoked, must act as if the <code
   title="dom-document-write">document.write()</code> method had been
   invoked with the same argument(s), plus an extra argument consisting
   of a string containing a single line feed character (U+000A).</p>
 
+  </div>
 
 
 
   <h4><code title="dom-innerHTML">innerHTML</code></h4>
 
   <p>The <dfn title="dom-innerHTML"><code>innerHTML</code></dfn> DOM
   attribute represents the markup of the node's contents.</p>
 
+  <dl class="domintro">
+
+   <dt><var title="">document</var> . <code title="dom-innerHTML">innerHTML</code> [ = <var title="">value</var> ]</dt>
+
+   <dd>
+
+    <p>Returns a fragment of HTML or XML that represents the
+    <code>Document</code>.</p>
+
+    <p>Can be set, to replace the <code>Document</code>'s contents
+    with the result of parsing the given string.</p>
+
+    <p>In the case of <span>XML documents</span>, will throw a
+    <code>SYNTAX_ERR</code> if the <code>Document</code> cannot be
+    serialized to XML, or if the given string is not well-formed.</p>
+
+   </dd>
+
+   <dt><var title="">element</var> . <code title="dom-innerHTML">innerHTML</code> [ = <var title="">value</var> ]</dt>
+
+   <dd>
+
+    <p>Returns a fragment of HTML or XML that represents the element's
+    contents.</p>
+
+    <p>Can be set, to replace the contents of the element with nodes
+    parsed from the given string.</p>
+
+    <p>In the case of <span>XML documents</span>, will throw a
+    <code>SYNTAX_ERR</code> if the element cannot be serialized to
+    XML, or if the given string is not well-formed.</p>
+
+   </dd>
+
+  </dl>
+
+  <div class="impl">
+
   <p>On getting, if the node's document is an <span title="HTML
   documents">HTML document</span>, then the attribute must return the
   result of running the <span>HTML fragment serialization
   algorithm</span> on the node; otherwise, the node's document is an
   <span title="XML documents">XML document</span>, and the attribute
   must return the result of running the <span>XML fragment
   serialization algorithm</span> on the node instead (this might raise
   an exception instead of returning a string).</p>
 
   <p>On setting, the following steps must be run:</p>
@@ -8657,27 +9526,51 @@ http://software.hixie.ch/utilities/js/live-dom-viewer/?%3C%21DOCTYPE%20HTML%3E%0
 
     <p>Append all the <var title="">new children</var> nodes to the
     node whose <code title="dom-innerHTML">innerHTML</code> attribute
     is being set, preserving their order, without firing any mutation
     events.</p>
 
    </li>
 
   </ol>
 
+  </div>
+
 
 
   <h4><code title="dom-outerHTML">outerHTML</code></h4>
 
   <p>The <dfn title="dom-outerHTML"><code>outerHTML</code></dfn> DOM
   attribute represents the markup of the element and its contents.</p>
 
+  <dl class="domintro">
+
+   <dt><var title="">element</var> . <code title="dom-outerHTML">outerHTML</code> [ = <var title="">value</var> ]</dt>
+
+   <dd>
+
+    <p>Returns a fragment of HTML or XML that represents the element
+    and its contents.</p>
+
+    <p>Can be set, to replace the element with nodes parsed from the
+    given string.</p>
+
+    <p>In the case of <span>XML documents</span>, will throw a
+    <code>SYNTAX_ERR</code> if the element cannot be serialized to
+    XML, or if the given string is not well-formed.</p>
+
+   </dd>
+
+  </dl>
+
+  <div class="impl">
+
   <p>On getting, if the node's document is an <span title="HTML
   documents">HTML document</span>, then the attribute must return the
   result of running the <span>HTML fragment serialization
   algorithm</span> on a fictional node whose only child is the node on
   which the attribute was invoked; otherwise, the node's document is
   an <span title="XML documents">XML document</span>, and the
   attribute must return the result of running the <span>XML fragment
   serialization algorithm</span> on that fictional node instead (this
   might raise an exception instead of returning a string).</p>
 
@@ -8754,24 +9647,62 @@ http://software.hixie.ch/utilities/js/live-dom-viewer/?%3C%21DOCTYPE%20HTML%3E%0
 
     <p>Remove <var title="">target</var> from its parent node and
     insert in its place all the <var title="">new children</var>
     nodes, preserving their order, without firing any mutation
     events.</p>
 
    </li>
 
   </ol>
 
+  </div>
+
 
 
   <h4><code title="dom-insertAdjacentHTML">insertAdjacentHTML()</code></h4>
 
+  <dl class="domintro">
+
+   <dt><var title="">element</var> . <code title="dom-insertAdjacentHTML">insertAdjacentHTML</code>(<var title="">position</var>, <var title="">text</var>)</dt>
+
+   <dd>
+
+    <p>Parsed the given string <var title="">text</var> as HTML or XML
+    and inserts the resulting nodes into the tree in the position
+    given by the <var title="">position</var> argument, as
+    follows:</p>
+
+    <dl>
+     <dt>"beforebegin"</dt>
+     <dd>Before the element itself.</dd>
+     <dt>"afterbegin"</dt>
+     <dd>Just inside the element, before its first child.</dd>
+     <dt>"beforeend"</dt>
+     <dd>Just inside the element, after its last child.</dd>
+     <dt>"afterend"</dt>
+     <dd>After the element itself.</dd>
+    </dl>
+
+    <p>Throws a <code>SYNTAX_ERR</code> exception the arguments have
+    invalid values (e.g., in the case of <span>XML documents</span>,
+    if the given string is not well-formed).</p>
+
+    <p>Throws a <code>NO_MODIFICATION_ALLOWED_ERR</code> exception if
+    the given position isn't possible (e.g. inserting elements after
+    the root element of a <code>Document</code>).</p>
+
+   </dd>
+
+  </dl>
+
+  <div class="impl">
+
   <p>The <dfn
   title="dom-insertAdjacentHTML"><code>insertAdjacentHTML(<var
   title="">position</var>, <var title="">text</var>)</code></dfn>
   method, when invoked, must run the following algorithm:</p>
 
   <ol>
 
    <li>
 
     <p>Let <var title="">position</var> and <var title="">text</var>
@@ -8918,20 +9849,21 @@ http://software.hixie.ch/utilities/js/live-dom-viewer/?%3C%21DOCTYPE%20HTML%3E%0
 
     </dl>
 
     <p>The above mutations must be performed without firing any
     mutation events.</p>
 
    </li>
 
   </ol>
 
+  </div>
 
 
 
   <h2 id="semantics">The elements of HTML</h2>
 
   <h3>The root element</h3>
 
   <h4>The <dfn><code>html</code></dfn> element</h4>
 
   <dl class="element">
@@ -9046,23 +9978,24 @@ http://software.hixie.ch/utilities/js/live-dom-viewer/?%3C%21DOCTYPE%20HTML%3E%0
    header assumes the reader knowns what the context is and therefore
    won't wonder if the dances are Salsa or Waltz:</p>
 
    <pre>  &lt;title>Dances used during bee mating rituals&lt;/title>
     ...
   &lt;h1>The Dances&lt;/h1></pre>
 
   </div>
 
   <p>The string to use as the document's title is given by the <code
-  title="dom-document-title">document.title</code> DOM attribute. User
-  agents should use the document's title when referring to the
-  document in their user interface.</p>
+  title="dom-document-title">document.title</code> DOM
+  attribute. <span title="impl">User agents should use the document's
+  title when referring to the document in their user
+  interface.</span></p>
 
 
   <h4>The <dfn><code>base</code></dfn> element</h4>
 
   <dl class="element">
    <dt>Categories</dt>
    <dd><span>Metadata content</span>.</dd>
    <dt>Contexts in which this element may be used:</dt>
    <dd>In a <code>head</code> element containing no other <code>base</code> elements.</dd>
    <dt>Content model:</dt>
@@ -9098,43 +10031,55 @@ http://software.hixie.ch/utilities/js/live-dom-viewer/?%3C%21DOCTYPE%20HTML%3E%0
   <p>The <dfn title="attr-base-href"><code>href</code></dfn> content
   attribute, if specified, must contain a <span>valid URL</span>.</p>
 
   <p>A <code>base</code> element, if it has an <code
   title="attr-base-href">href</code> attribute, must come before any
   other elements in the tree that have attributes defined as taking
   <span title="URL">URLs</span>, except the <code>html</code> element
   (its <code title="attr-html-manifest">manifest</code> attribute
   isn't affected by <code>base</code> elements).</p>
 
+  <div class="impl">
+
   <p class="note">If there are multiple <code>base</code> elements
   with <code title="attr-base-href">href</code> attributes, all but the
   first are ignored.</p>
 
+  </div>
+
   <p>The <dfn title="attr-base-target"><code>target</code></dfn>
   attribute, if specified, must contain a <span>valid browsing context
-  name or keyword</span>. User agents use this name when
-  <span>following hyperlinks</span>.</p>
+  name or keyword</span>, which specifies which <span>browsing
+  context</span> is to be used as the default when <span
+  title="hyperlink">hyperlinks</span> and <span
+  title="form">forms</span> in the <code>Document</code> cause <span
+  title="navigate">navigation</span>.</p>
 
   <p>A <code>base</code> element, if it has a <code
   title="attr-base-target">target</code> attribute, must come before
   any elements in the tree that represent <span
   title="hyperlink">hyperlinks</span>.</p>
 
+  <div class="impl">
+
   <p class="note">If there are multiple <code>base</code> elements
   with <code title="attr-base-target">target</code> attributes, all but
   the first are ignored.</p>
 
   <p>The <dfn title="dom-base-href"><code>href</code></dfn> and <dfn
   title="dom-base-target"><code>target</code></dfn> DOM attributes
   must <span>reflect</span> the respective content attributes of the
   same name.</p>
 
+  </div>
+
+
 
   <h4>The <dfn><code>link</code></dfn> element</h4>
 
   <dl class="element">
    <dt>Categories</dt>
    <dd><span>Metadata content</span>.</dd>
    <dt>Contexts in which this element may be used:</dt>
    <dd>Where <span>metadata content</span> is expected.</dd>
    <dd>In a <code>noscript</code> element that is a child of a <code>head</code> element.</dd>
    <dt>Content model:</dt>
@@ -9201,31 +10146,33 @@ http://software.hixie.ch/utilities/js/live-dom-viewer/?%3C%21DOCTYPE%20HTML%3E%0
 
   <p class="note">Each link is handled separately. For instance, if
   there are two <code>link</code> elements with <code
   title="">rel="stylesheet"</code>, they each count as a separate
   external resource, and each is affected by its own attributes
   independently.</p>
 
   <p>The exact behavior for links to external resources depends on the
   exact relationship, as defined for the relevant link type. Some of
   the attributes control whether or not the external resource is to be
-  applied (as defined below). For external resources that are
-  represented in the DOM (for example, style sheets), the DOM
-  representation must be made available even if the resource is not
-  applied. To obtain the resource, the user agent must <span
-  title="resolve a url">resolve</span> the <span>URL</span> given by
-  the <code title="attr-link-href">href</code> attribute, relative to
-  the element, and then <span>fetch</span> the resulting
+  applied (as defined below). <Span class="impl">For external
+  resources that are represented in the DOM (for example, style
+  sheets), the DOM representation must be made available even if the
+  resource is not applied. To obtain the resource, the user agent must
+  <span title="resolve a url">resolve</span> the <span>URL</span>
+  given by the <code title="attr-link-href">href</code> attribute,
+  relative to the element, and then <span>fetch</span> the resulting
   <span>absolute URL</span>. User agents may opt to only
   <span>fetch</span> such resources when they are needed, instead of
   pro-actively <span title="fetch">fetching</span> all the external
-  resources that are not applied.</p>
+  resources that are not applied.</span></p>
+
+  <div class="impl">
 
   <p>The semantics of the protocol used (e.g. HTTP) must be followed
   when fetching external resources. (For example, redirects must be
   followed and 404 responses must cause the external resource to not
   be applied.)</p>
 
   <p>Interactive user agents should provide users with a means to
   <span title="following hyperlinks">follow the hyperlinks</span>
   created using the <code>link</code> element, somewhere within their
   user interface. The exact interface is not defined by this
@@ -9250,83 +10197,92 @@ http://software.hixie.ch/utilities/js/live-dom-viewer/?%3C%21DOCTYPE%20HTML%3E%0
 
    <li>The optimum media for the resource (given by the <code
    title="attr-link-media">media</code> attribute).</li>
 
   </ul>
 
   <p>User agents may also include other information, such as the type
   of the resource (as given by the <code
   title="attr-link-type">type</code> attribute).</p>
 
+  </div>
+
   <p class="note">Hyperlinks created with the <code>link</code>
   element and its <code title="attr-link-rel">rel</code> attribute
   apply to the whole page. This contrasts with the <code
   title="attr-hyperlink-rel">rel</code> attribute of <code>a</code>
   and <code>area</code> elements, which indicates the type of a link
   whose context is given by the link's location within the
   document.</p>
 
   <p>The <dfn title="attr-link-media"><code>media</code></dfn>
   attribute says which media the resource applies to. The value must
   be a valid <a href="#mq">media query</a>. <a
   href="#refsMQ">[MQ]</a></p>
 
+  <div class="impl">
+
   <p>If the link is a <span title="hyperlink link">hyperlink</span>
   then the <code title="attr-link-media">media</code> attribute is
   purely advisory, and describes for which media the document in
   question was designed.</p>
 
   <p>However, if the link is an <span>external resource link</span>,
   then the <code title="attr-link-media">media</code> attribute is
   prescriptive. The user agent must apply the external resource to
   <span title="view">views</span> while their state match the listed
   media and the other relevant conditions apply, and must not apply
   them otherwise.</p><!-- note similar text in <style> section -->
 
   <p class="note">The external resource might have further
   restrictions defined within that limit its applicability. For
   example, a CSS style sheet might have some <code
   title="">@media</code> blocks. This specification does not override
   such further restrictions or requirements.</p><!-- note similar text
   in <style> section -->
 
+  </div>
+
   <p id="default-media">The default, if the <code
   title="attr-link-media">media</code> attribute is omitted, is
   <code>all</code>, meaning that by default links apply to all
   media.</p>
 
   <p>The <dfn title="attr-link-hreflang"><code>hreflang</code></dfn>
   attribute on the <code>link</code> element has the same semantics as
   the <span title="attr-hyperlink-hreflang"><code>hreflang</code>
   attribute on hyperlink elements</span>.</p>
 
   <p>The <dfn title="attr-link-type"><code>type</code></dfn> attribute
   gives the MIME type of the linked resource. It is purely advisory.
   The value must be a valid MIME type, optionally with parameters. <a
   href="#refsRFC2046">[RFC2046]</a></p>
 
   <p>For <span title="external resource link">external resource
   links</span>, the <code title="attr-link-type">type</code> attribute
   is used as a hint to user agents so that they can avoid fetching
-  resources they do not support. If the attribute is present, then the
-  user agent must assume that the resource is of the given type. If
-  the attribute is omitted, but the external resource link type has a
-  default type defined, then the user agent must assume that the
-  resource is of that type. If the UA does not support the given MIME
-  type for the given link relationship, then the UA should not fetch
-  the resource; if the UA does support the given MIME type for the
-  given link relationship, then the UA should <span>fetch</span> the
-  resource. If the attribute is omitted, and the external resource
-  link type does not have a default type defined, but the user agent
-  would fetch the resource if the type was known and supported, then
-  the user agent should <span>fetch</span> the resource under the
-  assumption that it will be supported.</p>
+  resources they do not support. <span class="impl">If the attribute
+  is present, then the user agent must assume that the resource is of
+  the given type. If the attribute is omitted, but the external
+  resource link type has a default type defined, then the user agent
+  must assume that the resource is of that type. If the UA does not
+  support the given MIME type for the given link relationship, then
+  the UA should not fetch the resource; if the UA does support the
+  given MIME type for the given link relationship, then the UA should
+  <span>fetch</span> the resource. If the attribute is omitted, and
+  the external resource link type does not have a default type
+  defined, but the user agent would fetch the resource if the type was
+  known and supported, then the user agent should <span>fetch</span>
+  the resource under the assumption that it will be
+  supported.</span></p>
+
+  <div class="impl">
 
   <p>User agents must not consider the <code
   title="attr-link-type">type</code> attribute authoritative &mdash;
   upon fetching the resource, user agents must not use the <code
   title="attr-link-type">type</code> attribute to determine its actual
   type. Only the actual type (as defined in the next paragraph) is
   used to determine whether to <em>apply</em> the resource, not the
   aforementioned assumed type.</p>
 
   <p id="concept-link-type-sniffing">If the resource is expected to be
@@ -9369,38 +10325,42 @@ http://software.hixie.ch/utilities/js/live-dom-viewer/?%3C%21DOCTYPE%20HTML%3E%0
    <p>If one the two files was returned without a
    <span>Content-Type</span> metadata, or with a syntactically
    incorrect type like <code
    title="">Content-Type:&nbsp;"null"</code>, then the default type
    for <code title="rel-stylesheet">stylesheet</code> links would kick
    in. Since that default type is <code title="">text/css</code>, the
    style sheet <em>would</em> nonetheless be applied.</p>
 
   </div>
 
+  </div>
+
   <p>The <dfn title="attr-link-title"><code>title</code></dfn>
   attribute gives the title of the link. With one exception, it is
   purely advisory. The value is text. The exception is for style sheet
   links, where the <code title="attr-link-title">title</code>
   attribute defines <span>alternative style sheet sets</span>.</p>
 
   <p class="note">The <code title="attr-link-title">title</code>
   attribute on <code>link</code> elements differs from the global
   <code title="attr-title">title</code> attribute of most other
   elements in that a link without a title does not inherit the title
   of the parent element: it merely has no title.</p>
 
   <p>The <code title="attr-link-sizes">sizes</code> attribute is used
   with the <code title="rel-icon">icon</code> link type. The attribute
   must not be specified on <code>link</code> elements that do not have
   a <code title="attr-link-rel">rel</code> attribute that specifies
   the <code title="rel-icon">icon</code> keyword.</p>
 
+  <div class="impl">
+
   <p>Some versions of HTTP defined a <code title="">Link:</code>
   header, to be processed like a series of <code>link</code> elements.
   If supported, for the purposes of ordering links defined by HTTP
   headers must be assumed to come before any links in the document, in
   the order that they were given in the HTTP entity header.  (URIs in
   these headers are to be processed and resolved according to the
   rules given in HTTP; the rules of <em>this</em> specification don't
   apply.) <a href="#refsRFC2616">[RFC2616]</a> <a
   href="#refsRFC2068">[RFC2068]</a></p>
 
@@ -9408,36 +10368,39 @@ http://software.hixie.ch/utilities/js/live-dom-viewer/?%3C%21DOCTYPE%20HTML%3E%0
   title="dom-link-href"><code>href</code></dfn>, <dfn
   title="dom-link-rel"><code>rel</code></dfn>, <dfn
   title="dom-link-media"><code>media</code></dfn>, <dfn
   title="dom-link-hreflang"><code>hreflang</code></dfn>, and <dfn
   title="dom-link-type"><code>type</code></dfn>, and <dfn
   title="dom-link-sizes"><code>sizes</code></dfn> each must
   <span>reflect</span> the respective content attributes of the same
   name.</p>
 
   <p>The DOM attribute <dfn
-  title="dom-link-rellist"><code>relList</code></dfn> must
-  <span>reflect</span> the <code title="attr-link-rel">rel</code>
-  content attribute.</p>
+  title="dom-link-rellist"><code>relList</code></dfn> <span
+  class="impl">must</span> <span title="reflect">reflect</span> the <code
+  title="attr-link-rel">rel</code> content attribute.</p>
+
+  </div>
 
   <p>The DOM attribute <dfn
   title="dom-link-disabled"><code>disabled</code></dfn> only applies
   to style sheet links. When the <code>link</code> element defines a
   style sheet link, then the <code
   title="dom-link-disabled">disabled</code> attribute behaves as
   defined <span title="dom-linkstyle-disabled">for the alternative
   style sheets DOM</span>. For all other <code>link</code> elements it
   always return false and does nothing on setting.</p> <!-- that is
   normatively required in the definition of dom-linkstyle-disabled -->
 
 
 
+
   <h4 id="meta">The <dfn><code>meta</code></dfn> element</h4>
 
   <dl class="element">
    <dt>Categories</dt>
    <dd><span>Metadata content</span>.</dd>
    <dt>Contexts in which this element may be used:</dt>
    <dd>If the <code title="attr-meta-charset">charset</code> attribute is present, or if the element is in the <span title="attr-meta-http-equiv-content-type">Encoding declaration state</span>: in a <code>head</code> element.</dd>
    <dd>If the <code title="attr-meta-http-equiv">http-equiv</code> attribute is present, and the element is not in the <span title="attr-meta-http-equiv-content-type">Encoding declaration state</span>: in a <code>head</code> element.</dd>
    <dd>If the <code title="attr-meta-http-equiv">http-equiv</code> attribute is present, and the element is not in the <span title="attr-meta-http-equiv-content-type">Encoding declaration state</span>: in a <code>noscript</code> element that is a child of a <code>head</code> element.</dd>
    <dd>If the <code title="attr-meta-name">name</code> attribute is present: where <span>metadata content</span> is expected.</dd>
@@ -9521,49 +10484,54 @@ http://software.hixie.ch/utilities/js/live-dom-viewer/?%3C%21DOCTYPE%20HTML%3E%0
   string.</p>
 
   <p>If a <code>meta</code> element has the <code
   title="attr-meta-http-equiv">http-equiv</code> attribute specified,
   it must be either in a <code>head</code> element or in a
   <code>noscript</code> element that itself is in a <code>head</code>
   element. If a <code>meta</code> element does not have the <code
   title="attr-meta-http-equiv">http-equiv</code> attribute specified,
   it must be in a <code>head</code> element.</p>
 
+  <div class="impl">
+
   <p>The DOM attributes <dfn
   title="dom-meta-name"><code>name</code></dfn> and <dfn
   title="dom-meta-content"><code>content</code></dfn> must
   <span>reflect</span> the respective content attributes of the same
   name. The DOM attribute <dfn
   title="dom-meta-httpEquiv"><code>httpEquiv</code></dfn> must
   <span>reflect</span> the content attribute <code
   title="attr-meta-http-equiv">http-equiv</code>.</p>
 
+  </div>
+
 
   <h5>Standard metadata names</h5>
 
   <p>This specification defines a few names for the <code
   title="attr-meta-name">name</code> attribute of the
   <code>meta</code> element.</p>
 
   <dl>
 
    <dt><dfn title="meta-application-name">application-name</dfn></dt>
 
    <dd><p>The value must be a short free-form string that giving the
    name of the Web application that the page represents. If the page
    is not a Web application, the <code
    title="meta-application-name">application-name</code> metadata name
-   must not be used. User agents may use the application name in UI in
-   preference to the page's <code>title</code>, since the title might
-   include status messages and the like relevant to the status of the
-   page at a particular moment in time instead of just being the name
-   of the application.</p></dd>
+   must not be used. <span class="impl">User agents may use the
+   application name in UI in preference to the page's
+   <code>title</code>, since the title might include status messages
+   and the like relevant to the status of the page at a particular
+   moment in time instead of just being the name of the
+   application.</span></p></dd>
 
    <dt><dfn title="meta-description">description</dfn></dt>
 
    <dd><p>The value must be a free-form string that describes the
    page. The value must be appropriate for use in a directory of
    pages, e.g. in a search engine.</p></dd>
 
    <dt><dfn title="meta-generator">generator</dfn></dt>
 
    <dd><p>The value must be a free-form string that identifies the
@@ -9644,87 +10612,92 @@ http://software.hixie.ch/utilities/js/live-dom-viewer/?%3C%21DOCTYPE%20HTML%3E%0
     </dl>
 
     <p>If a metadata name is added with the "proposal" status and
     found to be redundant with existing values, it should be removed
     and listed as a synonym for the existing value.</p>
 
    </dd>
 
   </dl>
 
+  <div class="impl">
+
   <p>Conformance checkers must use the information given on the WHATWG
   Wiki MetaExtensions page to establish if a value not explicitly
   defined in this specification is allowed or not. When an author uses
   a new type not defined by either this specification or the Wiki
   page, conformance checkers should offer to add the value to the
   Wiki, with the details described above, with the "proposal"
   status.</p>
 
+  </div>
+
   <p>This specification does not define how new values will get
   approved. It is expected that the Wiki will have a community that
   addresses this.</p>
 
   <p>Metadata names whose values are to be <span
   title="URL">URLs</span> must not be proposed or accepted. Links must
   be represented using the <code>link</code> element, not the
   <code>meta</code> element.</p>
 
 
+
+
   <h5>Pragma directives</h5>
 
   <p>When the <dfn
   title="attr-meta-http-equiv"><code>http-equiv</code></dfn> attribute
   is specified on a <code>meta</code> element, the element is a pragma
   directive.</p>
 
-  <p>The <code
-  title="attr-meta-http-equiv">http-equiv</code> attribute
-  is an <span>enumerated attribute</span>. The following table lists
-  the keywords defined for this attribute. The states given in the
-  first cell of the rows with keywords give the states to which
-  those keywords map. Some of the keywords are non-conforming, as
-  noted in the last column.</p>
+  <p>The <code title="attr-meta-http-equiv">http-equiv</code>
+  attribute is an <span>enumerated attribute</span>. The following
+  table lists the keywords defined for this attribute. The states
+  given in the first cell of the rows with keywords give the states to
+  which those keywords map. <span class="impl">Some of the keywords
+  are non-conforming, as noted in the last column.</span></p>
 
 <!-- things that are neither conforming nor do anything are commented out -->
   <table>
    <thead>
     <tr>
      <th>State
      <th>Keywords
-     <th>Notes
+     <th class="impl">Notes
    <tbody>
-    <tr>
+    <tr class="impl">
      <td><span title="attr-meta-http-equiv-content-language">Content Language</span>
      <td><code title="">content-language</code>
-     <td>Non-conforming 
+     <td class="impl">Non-conforming 
     <tr>
      <td><span title="attr-meta-http-equiv-content-type">Encoding declaration</span>
      <td><code title="">content-type</code>
-     <td>
+     <td class="impl">
 <!--
-    <tr>
+    <tr class="impl">
      <td><span title="attr-meta-http-equiv-content-script-type">Content-Script-Type</span>
      <td><code title="">Content-Script-Type</code>
-     <td>Non-conforming
-    <tr>
+     <td class="impl">Non-conforming
+    <tr class="impl">
      <td><span title="attr-meta-http-equiv-content-style-type">Content-Style-Type</span>
      <td><code title="">Content-Style-Type</code>
-     <td>Non-conforming
+     <td class="impl">Non-conforming
 -->
     <tr>
      <td><span title="attr-meta-http-equiv-default-style">Default style</span>
      <td><code title="">default-style</code>
-     <td>
+     <td class="impl">
     <tr>
      <td><span title="attr-meta-http-equiv-refresh">Refresh</span>
      <td><code title="">refresh</code>
-     <td>
+     <td class="impl">
   </table>
 
 <!--
 DATA: According to Henri's validator stats, here are common
 non-conforming values used by people who validate (sample of 400
 pages):
 
 COUNT ERROR
    20 Bad value "Content-Language" for attribute "http-equiv" on element "meta".
    17 Bad value "Content-Style-Type" for attribute "http-equiv" on element "meta".
@@ -9753,37 +10726,43 @@ Here's some more data, this time from Philip`, on a sample of 15k pages.
     116 description
     106 reply-to
     102 Cache-Control
    [...]
 http://philip.html5.org/data/meta-http-equiv.txt
 
 These numbers are low; further study is required to establish what
 people expect to have work and what is necessary.
 -->
 
+  <div class="impl">
+
   <p>When a <code>meta</code> element is <span title="insert an
   element into a document">inserted into the document</span>, if its
   <code title="attr-meta-http-equiv">http-equiv</code> attribute is
   present and represents one of the above states, then the user agent
   must run the algorithm appropriate for that state, as described in
   the following list:</p>
 
+  </div>
+
   <dl>
 
-   <dt><dfn title="attr-meta-http-equiv-content-language">Content language</dfn>
+   <dt class="impl"><dfn title="attr-meta-http-equiv-content-language">Content language</dfn>
 
-   <dd>
+   <dd class="impl">
 
     <p>This non-conforming pragma sets the <dfn>document-wide default
     language</dfn>. Until the pragma is successfully processed, there
     is no <span>document-wide default language</span>.</p>
 
+    <div class="impl">
+
     <ol>
 
      <li><p>If another <code>meta</code> element in the <span
      title="attr-meta-http-equiv-content-language">Content Language
      state</span> has already been successfully processed (i.e. when
      it was inserted the user agent processed it and reached the last
      step of this list of steps), then abort these steps.</p></li>
 
      <li><p>If the <code>meta</code> element has no <code
      title="attr-meta-content">content</code> attribute, or if that
@@ -9802,42 +10781,44 @@ people expect to have work and what is necessary.
      <li><p><span title="collect a sequence of characters">Collect a
      sequence of characters</span> that are neither <span title="space
      character">space characters</span> nor a U+002C COMMA character
      (",").</p></li>
 
      <li><p>Let the <span>document-wide default language</span> be the
      string that resulted from the previous step.</p></li>
 
     </ol>
 
+    </div>
+
     <p>For <code>meta</code> elements in the <span
     title="attr-meta-http-equiv-content-language">Content Language
     state</span>, the <code title="attr-meta-content">content</code>
     attribute must have a value consisting of a valid RFC 3066
     language code. <a href="#refsRFC3066">[RFC3066]</a></p>
 
     <p class="note">This pragma is not exactly equivalent to the HTTP
     <code>Content-Language</code> header, for instance it only
     supports one language. <a href="#refsRFC2616">[RFC2616]</a></p>
 
    </dd>
 
    <dt><dfn title="attr-meta-http-equiv-content-type">Encoding declaration state</dfn>
 
    <dd>
 
     <p>The <span title="attr-meta-http-equiv-content-type">Encoding
-    declaration state's</span> user agent requirements are all handled
-    by the parsing section of the specification. The state is just an
-    alternative form of setting the <code
-    title="meta-charset">charset</code> attribute: it is a
-    <span>character encoding declaration</span>.</p>
+    declaration state</span> is just an alternative form of setting
+    the <code title="meta-charset">charset</code> attribute: it is a
+    <span>character encoding declaration</span>. <span
+    class="impl">This state's user agent requirements are all handled
+    by the parsing section of the specification.</span></p>
 
     <p>For <code>meta</code> elements in the <span
     title="attr-meta-http-equiv-content-type">Encoding declaration
     state</span>, the <code title="attr-meta-content">content</code>
     attribute must have a value that is an <span>ASCII
     case-insensitive</span> match for a string that consists of: the
     literal string "<code title="">text/html;</code>", optionally
     followed by any number of <span title="space character">space
     characters</span>, followed by the literal string "<code
     title="">charset=</code>", followed by the character encoding name
@@ -9853,32 +10834,44 @@ people expect to have work and what is necessary.
     declaration state</span> may be used in <span title="HTML5">HTML
     documents</span> only, elements in that state must not be used in
     <span title="XHTML">XML documents</span>.</p>
 
    </dd>
 
    <dt><dfn title="attr-meta-http-equiv-default-style">Default style state</dfn>
 
    <dd>
 
+    <p>This pragma sets the name of the default <span
+    title="alternative style sheet sets">alternative style sheet
+    set</span>.</p>
+
+    <div class="impl">
+
     <ol>
 
      <li class="XXX">...</li>
 
     </ol>
 
+    </div>
+
    </dd>
 
    <dt><dfn title="attr-meta-http-equiv-refresh">Refresh state</dfn>
 
    <dd>
 
+    <p>This pragma acts as timed redirect.</p>
+
+    <div class="impl">
+
     <ol>
      <!-- TESTS: http://www.hixie.ch/tests/adhoc/html/meta/refresh/ -->
 
      <li><p>If another <code>meta</code> element in the <span
      title="attr-meta-http-equiv-refresh">Refresh state</span> has
      already been successfully processed (i.e. when it was inserted
      the user agent processed it and reached the last step of this
      list of steps), then abort these steps.</p></li>
 
      <li><p>If the <code>meta</code> element has no <code
@@ -9989,20 +10982,22 @@ people expect to have work and what is necessary.
 
       <p>In addition, the user agent may, as with anything, inform the
       user of any and all aspects of its operation, including the
       state of any timers, the destinations of any timed redirects,
       and so forth.</p>
 
      </li>
 
     </ol>
 
+    </div>
+
     <p>For <code>meta</code> elements in the <span
     title="attr-meta-http-equiv-refresh">Refresh state</span>, the
     <code title="attr-meta-content">content</code> attribute must have
     a value consisting either of:
 
     <ul>
 
      <li> just a <span>valid non-negative integer</span>, or</li>
 
      <li> a <span>valid non-negative integer</span>, followed by a
@@ -10183,111 +11178,141 @@ people expect to have work and what is necessary.
   model</span>. The element does not <span
   title="represents">represent</span> content for the user.</p>
 
   <p>If the <dfn title="attr-style-type"><code>type</code></dfn>
   attribute is given, it must contain a valid MIME type, optionally
   with parameters, that designates a styling language. <a
   href="#refsRFC2046">[RFC2046]</a> If the attribute is absent, the
   type defaults to <code>text/css</code>. <a
   href="#refsRFC2318">[RFC2138]</a></p>
 
+  <div class="impl">
+
   <!-- XXX this is the second time we have this paragraph here... -->
   <p>When examining types to determine if they support the language,
   user agents must not ignore unknown MIME parameters &mdash; types
   with unknown parameters must be assumed to be unsupported.</p>
 
+  </div>
+
   <p>The <dfn title="attr-style-media"><code>media</code></dfn>
   attribute says which media the styles apply to. The value must be a
-  valid <a href="#mq">media query</a>. <a href="#refsMQ">[MQ]</a> User
-  agents must apply the styles to <span title="view">views</span>
-  while their state match the listed media, and must not apply them
-  otherwise.</p><!-- note similar text in <link> section -->
+  valid <a href="#mq">media query</a>. <a href="#refsMQ">[MQ]</a>
+  <span class="impl">User agents must apply the styles to <span
+  title="view">views</span> while their state match the listed media,
+  and must not apply them otherwise.</span></p><!-- note similar text
+  in <link> section -->
+
+  <div class="impl">
 
   <p class="note">The styles might be further limited in scope,
   e.g. in CSS with the use of <code title="">@media</code>
   blocks. This specification does not override such further
   restrictions or requirements.</p><!-- note similar text in <link>
   section -->
 
+  </div>
+
   <p id="style-default-media">The default, if the <code
   title="attr-style-media">media</code> attribute is omitted, is
   <code>all</code>, meaning that by default styles apply to all
   media.</p>
 
   <p>The <dfn title="attr-style-scoped"><code>scoped</code></dfn>
-  attribute is a <span>boolean attribute</span>. If the attribute is
+  attribute is a <span>boolean attribute</span>. If set, it indicates
+  that the styles are intended just for the subtree rooted at the
+  <code>style</code> element's parent element, as opposed to the whole
+  <code>Document</code>.</p>
+
+  <div class="impl">
+
+  <p>If the <code title="attr-style-scoped">scoped</code> attribute is
   present, then the user agent must apply the specified style
   information only to the <code>style</code> element's parent element
   (if any), and that element's child nodes. Otherwise, the specified
   styles must, if applied, be applied to the entire document.</p>
 
+  </div>
+
   <p id="title-on-style">The <dfn
   title="attr-style-title"><code>title</code></dfn> attribute on
   <code>style</code> elements defines <span>alternative style sheet
   sets</span>. If the <code>style</code> element has no <code
   title="attr-style-title">title</code> attribute, then it has no
   title; the <code title="attr-title">title</code> attribute of
   ancestors does not apply to the <code>style</code> element.</p> <!--
   XXX xref -->
 
   <p class="note">The <code title="attr-style-title">title</code>
   attribute on <code>style</code> elements, like the <code
   title="attr-link-title">title</code> attribute on <code>link</code>
   elements, differs from the global <code
   title="attr-title">title</code> attribute in that a
   <code>style</code> block without a title does not inherit the title
   of the parent element: it merely has no title.</p>
 
+  <div class="impl">
+
   <p>All descendant elements must be processed, according to their
   semantics, before the <code>style</code> element itself is
   evaluated. For styling languages that consist of pure text, user
   agents must evaluate <code>style</code> elements by passing the
   concatenation of the contents of all the <span title="text
   node">text nodes</span> that are direct children of the
   <code>style</code> element (not any other nodes such as comments or
   elements), in <span>tree order</span>, to the style system. For
   XML-based styling languages, user agents must pass all the child
   nodes of the <code>style</code> element to the style system.</p>
 
   <p>All <span title="URL">URLs</span> found by the styling language's
   processor must be <span title="resolve a url">resolved</span>,
   relative to the element (or as defined by the styling language),
   when the processor is invoked.<!-- so dynamic changes to the base
   URL don't affect the CSS --></p>
 
+  </div>
+
   <p class="note">This specification does not specify a style system,
   but CSS is expected to be supported by most Web browsers. <a
   href="#refsCSS21">[CSS21]</a></p>
 
+  <div class="impl">
+
   <p>The <dfn title="dom-style-media"><code>media</code></dfn>, <dfn
   title="dom-style-type"><code>type</code></dfn> and <dfn
   title="dom-style-scoped"><code>scoped</code></dfn> DOM attributes
   must <span>reflect</span> the respective content attributes of the
   same name.</p>
 
+  </div>
+
   <p>The DOM <dfn
   title="dom-style-disabled"><code>disabled</code></dfn> attribute
   behaves as defined <span title="dom-linkstyle-disabled">for the
   alternative style sheets DOM</span>.</p>
 
+
+
   <h4 id="styling"><dfn title="styling processing model">Styling</dfn></h4>
 
   <p>The <code>link</code> and <code>style</code> elements can provide
   styling information for the user agent to use when rendering the
   document. The DOM Styling specification specifies what styling
   information is to be used by the user agent and how it is to be
   used. <a href="#refsCSSOM">[CSSOM]</a></p>
 
   <p>The <code>style</code> and <code>link</code> elements implement
   the <code>LinkStyle</code> interface. <a
   href="#refsCSSOM">[CSSOM]</a></p>
 
+  <div class="impl">
+
   <p>For <code>style</code> elements, if the user agent does not
   support the specified styling language, then the <code
   title="dom-LinkStyle-sheet">sheet</code> attribute of the element's
   <code>LinkStyle</code> interface must return null. Similarly,
   <code>link</code> elements that do not represent <span
   title="rel-stylesheet">external resource links that contribute to
   the styling processing model</span> (i.e. that do not have a <code
   title="rel-stylesheet">stylesheet</code> keyword in their <code
   title="attr-link-rel">rel</code> attribute), and <code>link</code>
   elements whose specified resource has not yet been fetched, or is
@@ -10347,20 +11372,22 @@ people expect to have work and what is necessary.
   title="dom-stylesheet-disabled">disabled</code> attribute on
   getting, and forward the new value to that same attribute on
   setting.</p>
 
   <!-- <p class="XXX">Need more here - defining preferred
   stylesheets, alternative stylesheets, persistent stylesheets, ordering
   of stylesheets, dynamic additions/removals, how it maps to
   .styleSheets, HTTP Link: headers, and the stuff about the alternative
   stylesheet API.</p> XXX that will all be covered by Anne's spec -->
 
+  </div>
+
 
 
 
   <h3>Scripting</h3>
 
   <p>Scripts allow authors to add interactivity to their documents.</p>
 
   <p>Authors are encouraged to use declarative alternatives to
   scripting where possible, as declarative mechanisms are often more
   maintainable, and many users disable scripting.</p>
@@ -10493,20 +11520,22 @@ people expect to have work and what is necessary.
   <p>Changing the <code title="attr-script-src">src</code>, <code
   title="attr-script-type">type</code>, <code
   title="attr-script-charset">charset</code>, <code
   title="attr-script-async">async</code>, and <code
   title="attr-script-defer">defer</code> attributes dynamically has no
   direct effect; these attribute are only used at specific times
   described below (namely, when the element is <span title="insert an
   element into a document">inserted into the document</span>).</p>
   <!-- by implication, changes to the base URL also have no effect -->
 
+  <div class="impl">
+
   <p><code>script</code> elements have four associated pieces of
   metadata. The first is a flag indicating whether or not the script
   block has been <dfn>"already executed"</dfn>. Initially,
   <code>script</code> elements must have this flag unset (script
   blocks, when created, are not "already executed"). When a
   <code>script</code> element is cloned, the "already executed" flag,
   if set, must be propagated to the clone when it is created. The
   second is a flag indicating whether the element was
   <dfn>"parser-inserted"</dfn>. This flag is set by the <span>HTML
   parser</span> and is used to handle <code
@@ -11005,28 +12034,50 @@ people expect to have work and what is necessary.
 
   <p>The DOM attributes <dfn
   title="dom-script-src"><code>src</code></dfn>, <dfn
   title="dom-script-type"><code>type</code></dfn>, <dfn
   title="dom-script-charset"><code>charset</code></dfn>, <dfn
   title="dom-script-async"><code>async</code></dfn>, and <dfn
   title="dom-script-defer"><code>defer</code></dfn>, each must
   <span>reflect</span> the respective content attributes of the same
   name.</p>
 
+  </div>
+
+  <dl class="domintro">
+
+   <dt><var title="">script</var> . <code title="dom-script-text">text</code> [ = <var title="">value</var> ]</dt>
+
+   <dd>
+
+    <p>Returns the contents of the element, ignoring child nodes that
+    aren't <span title="text node">text nodes</span>.</p>
+
+    <p>Can be set, to replace the element's children with the given
+    value.</p>
+
+   </dd>
+
+  </dl>
+
+  <div class="impl">
+
   <p>The DOM attribute <dfn
   title="dom-script-text"><code>text</code></dfn> must return a
   concatenation of the contents of all the <span title="text
   node">text nodes</span> that are direct children of the
   <code>script</code> element (ignoring any other nodes such as
   comments or elements), in tree order. On setting, it must act the
   same way as the <code>textContent</code> DOM attribute.</p>
 
+  </div>
+
 
   <div class="example">
 
    <p>In this example, two <code>script</code> elements are used. One
    embeds an external script, and the other includes some data.</p>
 
    <pre>&lt;script src="game-engine.js">&lt;/script>
 &lt;script type="text/x-game-map">
 ........U.........e
 o............A....e
@@ -11049,50 +12100,58 @@ o............A....e
   when inserted using <code
   title="dom-innerHTML">innerHTML</code> and <code
   title="dom-outerHTML">outerHTML</code> attributes, they do not
   execute at all.</p>
 
 
 
 
   <h5 id="scriptingLanguages">Scripting languages</h5>
 
+  <div class="impl">
+
   <p>A user agent is said to <dfn>support the scripting language</dfn>
   if <var>the script block's type</var> matches the MIME type of a
   scripting language that the user agent implements.</p>
 
+  </div>
+
   <p>The following lists some MIME types and the languages to which
   they refer:</p>
 
   <dl>
 
    <dt><code>text/javascript</code></dt>
    <dt><code>text/javascript1.1</code></dt>
    <dt><code>text/javascript1.2</code></dt>
    <dt><code>text/javascript1.3</code></dt>
    <dd>ECMAScript. <a href="#refsECMA262">[ECMA262]</a></dd>
 
    <dt><code>text/javascript;e4x=1</code></dt>
    <dd>ECMAScript with ECMAScript for XML. <a href="#refsECMA357">[ECMA357]</a></dd>
 
   </dl>
 
+  <div class="impl">
+
   <p>User agents may support other MIME types and other languages.</p>
 
   <p>When examining types to determine if they support the language,
   user agents must not ignore unknown MIME parameters &mdash; types
   with unknown parameters must be assumed to be unsupported.</p>
 
   <!--
    XXX we should reference #refsRFC4329 http://www.ietf.org/rfc/rfc4329
   -->
 
+  </div>
+
 
   <h5><dfn title="script documentation">Inline documentation for external scripts</dfn></h5>
 
   <p>If a <code>script</code> element's <code
   title="attr-script-src">src</code> attribute is specified, then the
   contents of the <code>script</code> element, if any, must be such
   that the value of the DOM <code title="dom-script-text">text</code>
   attribute, which is derived from the element's contents, matches the
   <code title="">documentation</code> production in the following
   ABNF, the character set for which is Unicode. <a
@@ -11273,26 +12332,30 @@ not-slash     = %x0000-002E / %x0030-%10FFFF
   would not have the desired effect.</p>
 
   <p>The <code>noscript</code> element must not be used in <span>XML
   documents</span>.</p>
 
   <p class="note"><strong>The <code>noscript</code> element is only
   effective in the <span>HTML serialization</span><!-- XXX xref -->,
   it has no effect in the <span>XML serialization</span><!-- XXX xref
   -->.</strong></p>
 
+  <div class="impl">
+
   <p>The <code>noscript</code> element has no other requirements. In
   particular, children of the <code>noscript</code> element are not
   exempt from <span>form submission</span>, scripting, and so forth,
   even when <span title="concept-n-script">scripting is enabled</span>
   for the element.</p>
 
+  </div>
+
 
 
   <h3>Sections</h3>
 
   <p id="applyToSection">Some elements, for example
   <code>address</code> elements, are scoped to their nearest ancestor
   <span>sectioning content</span>. For such elements <var
   title="">x</var>, the elements that apply to a <span>sectioning
   content</span> element <var title="">e</var> are all the <var
   title="">x</var> elements whose nearest <span>sectioning
@@ -11340,26 +12403,30 @@ not-slash     = %x0000-002E / %x0030-%10FFFF
   </dl>
 
   <p>The <code>body</code> element <span>represents</span> the main
   content of the document.</p>
 
   <p>In conforming documents, there is only one <code>body</code>
   element. The <code title="dom-document-body">document.body</code>
   DOM attribute provides scripts with easy access to a document's
   <code>body</code> element.</p>
 
+  <div class="impl">
+
   <p class="note">Some DOM operations (for example, parts of the
   <span>drag and drop</span> model) are defined in terms of "<span>the
   body element</span>". This refers to a particular element in the
   DOM, as per the definition of the term, and not any arbitrary
   <code>body</code> element.</p>
 
+  </div>
+
   <p>The <code>body</code> element exposes as <span>event handler
   content attributes</span> a number of the <span>event handler
   attributes</span> of the <code>Window</code> object. It also mirrors
   their <span>event handler DOM attributes</span>.</p>
 
   <p>The <code title="handler-window-onerror">onerror</code> and <code
   title="handler-window-onload">onload</code> <span>event handler
   attributes</span> of the <code>Window</code> object, exposed on the
   <code>body</code> element, shadow the generic <code
   title="handler-onerror">onerror</code> and <code
@@ -11431,20 +12498,21 @@ not-slash     = %x0000-002E / %x0030-%10FFFF
  &lt;/section>
  &lt;section>
   &lt;h1>Granny Smith&lt;/h1>
   &lt;p>These juicy, green apples and make a great filling for
   apple pies.&lt;/p>
  &lt;/section>
 &lt;/article></pre>
 
   </div>
 
+
   <h4>The <dfn><code>nav</code></dfn> element</h4>
 
   <dl class="element">
    <dt>Categories</dt>
    <dd><span>Flow content</span>.</dd>
    <dd><span>Sectioning content</span>.</dd>
    <dt>Contexts in which this element may be used:</dt>
    <dd>Where <span>flow content</span> is expected.</dd>
    <dt>Content model:</dt>
    <dd><span>Flow content</span>.</dd>
@@ -11824,36 +12892,40 @@ isn't his only passion. He also enjoys other pleasures.&lt;/p>
   arbitrary addresses (e.g. postal addresses), unless those addresses
   are contact information for the section. (The <code>p</code> element
   is the appropriate element for marking up such addresses.)</p>
 
   <p>The <code>address</code> element must not contain information
   other than contact information.</p>
 
   <div class="example">
    <p>For example, the following is non-conforming use of the
    <code>address</code> element:</p>
-   <pre>&lt;ADDRESS>Last Modified: 1999/12/24 23:37:50&lt;/ADDRESS></pre>
+   <pre class="bad">&lt;ADDRESS>Last Modified: 1999/12/24 23:37:50&lt;/ADDRESS></pre>
   </div>
 
   <p>Typically, the <code>address</code> element would be included
   with other information in a <code>footer</code> element.</p>
 
+  <div class="impl">
+
   <p>To determine the contact information for a <span>sectioning
   content</span> element (such as a document's <code>body</code>
   element, which would give the contact information for the page), UAs
   must collect all the <code>address</code> elements that <a
   href="#applyToSection">apply</a> to that <span>sectioning
   content</span> element and its ancestor <span>sectioning
   content</span> elements. The contact information is the collection
   of all the information given by those elements.</p> <!-- XXX
   exception for nested article elements? -->
 
+  </div>
+
   <p class="note">Contact information for one <span>sectioning
   content</span> element, e.g.  an <code>aside</code> element, does
   not apply to its ancestor elements, e.g. the page's
   <code>body</code>.</p>
 
 
 
   <h4><dfn>Headings and sections</dfn></h4>
 
   <p>The <code>h1</code>&ndash;<code>h6</code> elements and the
@@ -11962,41 +13034,46 @@ isn't his only passion. He also enjoys other pleasures.&lt;/p>
 &lt;/body&gt;</pre>
 
    <p>Both of the documents above are semantically identical and would
    produce the same outline in compliant user agents.</p>
 
   </div>
 
 
   <h5 id="outlines">Creating an outline</h5>
 
+  <div class="impl">
+
   <!-- v2 idea: It would be nice if there was a way to use this to
   autogenerate a table of contents or some such -->
 
   <p>This section defines an algorithm for creating an outline for a
   <span>sectioning content</span> element or a <span>sectioning
   root</span> element. It is defined in terms of a walk over the nodes
   of a DOM tree, in tree order, with each node being visited when it
   is <i>entered</i> and when it is <i>exited</i> during the walk.</p>
 
+  </div>
+
   <p>The <dfn>outline</dfn> for a <span>sectioning content</span>
   element or a <span>sectioning root</span> element consists of a list
   of one or more potentially nested <span
   title="concept-section">sections</span>. A <dfn
   title="concept-section">section</dfn> is a container that
   corresponds to some nodes in the original DOM tree. Each section can
   have one heading associated with it, and can contain any number of
-  further nested sections. The algorithm for the outline also
-  associates each node in the DOM tree with a particular section and
-  potentially a heading. (The sections in the outline aren't
-  <code>section</code> elements, though some may correspond to such
-  elements &mdash; they are merely conceptual sections.)</p>
+  further nested sections. <span class="impl">The algorithm for the
+  outline also associates each node in the DOM tree with a particular
+  section and potentially a heading.</span> (The sections in the
+  outline aren't <code>section</code> elements, though some may
+  correspond to such elements &mdash; they are merely conceptual
+  sections.)</p>
 
   <div class="example">
 
    <p>The following markup fragment:</p>
 
    <pre>&lt;body>
  &lt;h1>A&lt;/h1>
  &lt;p>B&lt;/p>
  &lt;h2>C&lt;/h2>
  &lt;p>D&lt;/p>
@@ -12025,20 +13102,22 @@ isn't his only passion. He also enjoys other pleasures.&lt;/p>
        <p>Associated with heading "E".</p>
        <p>Also associated with paragraph "F".</p>
        <p>No nested sections.</p>
       </li>
      </ol>
     </li>
    </ol>
 
   </div>
 
+  <div class="impl">
+
   <p>The algorithm that must be followed during a walk of a DOM
   subtree rooted at a <span>sectioning content</span> element or a
   <span>sectioning root</span> element to determine that element's
   <span>outline</span> is as follows:</p>
 
   <ol>
 
    <li><p>Let <var title="">current outlinee</var> be null. (It holds
    the element whose <span>outline</span> is being created.)</p></li>
 
@@ -12310,33 +13389,39 @@ isn't his only passion. He also enjoys other pleasures.&lt;/p>
       if (node == root)
         node = null;
       else
         node = node.parentNode;
     }
   }
 }</pre>
 
   </div>
 
+  </div>
+
 
   <h5>Distinguishing site-wide headings from page headings</h5>
 
+  <div class="impl">
+
   <p>Given the <span>outline</span> of a document, but ignoring any
   sections created for <code>nav</code> and <code>aside</code>
   elements, and any of their descendants, if the only root of the tree
   is <span>the body element</span>'s <span
   title="concept-section">section</span>, and it has only a single
   subsection which is created by an <code>article</code> element, then
   the heading of <span>the body element</span> should be assumed to be
   a site-wide heading, and the heading of the <code>article</code>
   element should be assumed to be the page's heading.</p>
 
+  </div>
+
   <p>If a page starts with a heading that is common to the whole site,
   the document must be authored such that, in the document's
   <span>outline</span>, ignoring any sections created for
   <code>nav</code> and <code>aside</code> elements and any of their
   descendants, the tree has only one root <span
   title="concept-section">section</span>, <span>the body
   element</span>'s section, its heading is the site-wide heading,
   <span>the body element</span> has just one subsection, that
   subsection is created by an <code>article</code> element, and that
   <code>article</code>'s heading is the page heading.</p>
@@ -12351,20 +13436,21 @@ isn't his only passion. He also enjoys other pleasures.&lt;/p>
   there is more than one <span title="concept-section">section</span>
   at the root of the outline.</p>
 
   <p class="note">Conceptually, a site is thus a document with many
   articles &mdash; when those articles are split into many pages, the
   heading of the original single page becomes the heading of the site,
   repeated on every page.</p>
 
 
 
+
   <h3>Grouping content</h3><!-- XXX ew, find a better section name -->
 
   <h4>The <dfn><code>p</code></dfn> element</h4>
 
   <dl class="element">
    <dt>Categories</dt>
    <dd><span>Flow content</span>.</dd>
    <dt>Contexts in which this element may be used:</dt>
    <dd>Where <span>flow content</span> is expected.</dd>
    <dt>Content model:</dt>
@@ -12512,25 +13598,21 @@ Address: &lt;input name="address"&gt;&lt;/p&gt;</pre>
    <pre>&lt;p&gt;Name: &lt;input name="name"&gt;&lt;/p&gt;
 &lt;p&gt;Address: &lt;input name="address"&gt;&lt;/p&gt;</pre>
 
    <!-- XXX should have labels in the examples above -->
 
   </div>
 
   <p>If a <span>paragraph</span> consists of nothing but a single
   <code>br</code> element, it represents a placeholder blank line
   (e.g. as in a template). Such blank lines must not be used for
-  presentation purposes.</p> <!-- XXX i'm uncomfortable about
-  this. The use case is editing, e.g. contentEditable, where a user
-  has created a new paragraph but not added any text to it yet. Such
-  content shouldn't go over the wire, though. We need to make it
-  illegal while still defining what it means. Maybe. -->
+  presentation purposes.</p>
 
 
   <h4>The <dfn><code>pre</code></dfn> element</h4>
 
   <dl class="element">
    <dt>Categories</dt>
    <dd><span>Flow content</span>.</dd>
    <dt>Contexts in which this element may be used:</dt>
    <dd>Where <span>flow content</span> is expected.</dd>
    <dt>Content model:</dt>
@@ -12711,30 +13793,34 @@ a friend lost to the
 
   <p>The <code>blockquote</code> element <span>represents</span> a
   section that is quoted from another source.</p>
 
   <p>Content inside a <code>blockquote</code> must be quoted from
   another source, whose address, if it has one, should be cited in the
   <dfn title="attr-blockquote-cite"><code>cite</code></dfn>
   attribute.</p>
 
   <p>If the <code title="attr-blockquote-cite">cite</code> attribute
-  is present, it must be a <span>valid URL</span>. To obtain the
-  corresponding citation link, the value of the attribute must be
-  <span title="resolve a url">resolved</span> relative to the
-  element. User agents should allow users to follow such citation
-  links.</p>
+  is present, it must be a <span>valid URL</span>. <span
+  title="impl">To obtain the corresponding citation link, the value of
+  the attribute must be <span title="resolve a url">resolved</span>
+  relative to the element. User agents should allow users to follow
+  such citation links.</span></p>
+
+  <div class="impl">
 
   <p>The <dfn title="dom-quote-cite"><code>cite</code></dfn> DOM
   attribute must <span>reflect</span> the element's <code
   title="">cite</code> content attribute.</p>
 
+  </div>
+
   <p class="note">The best way to represent a conversation is not with
   the <code>cite</code> and <code>blockquote</code> elements, but with
   the <code>dialog</code> element.</p>
 
   <div class="example">
 
    <p>This next example shows the use of <code>cite</code> alongside
    <code>blockquote</code>:</p>
 
    <pre>&lt;p>His next piece was the aptly named &lt;cite>Sonnet 130&lt;/cite>:&lt;/p>
@@ -12779,20 +13865,22 @@ a friend lost to the
   <p>The <dfn title="attr-ol-reversed"><code>reversed</code></dfn>
   attribute is a <span>boolean attribute</span>. If present, it
   indicates that the list is a descending list (..., 3, 2, 1). If the
   attribute is omitted, the list is an ascending list (1, 2, 3,
   ...).</p>
 
   <p>The <dfn title="attr-ol-start"><code>start</code></dfn>
   attribute, if present, must be a <span>valid integer</span> giving
   the ordinal value of the first list item.</p>
 
+  <div class="impl">
+
   <p>If the <code title="attr-ol-start">start</code> attribute is
   present, user agents must <span title="rules for parsing
   integers">parse it as an integer</span>, in order to determine the
   attribute's value. The default value, used if the attribute is
   missing or if the value cannot be converted to a number according to
   the referenced algorithm, is 1 if the element has no <code
   title="attr-ol-reversed">reversed</code> attribute, and is the
   number of child <code>li</code> elements otherwise.</p>
 
   <p>The first item in the list has the ordinal value given by the
@@ -12809,21 +13897,23 @@ a friend lost to the
   or minus one if it is present.</p>
 
   <p>The <dfn title="dom-ol-reversed"><code>reversed</code></dfn> DOM
   attribute must <span>reflect</span> the value of the <code
   title="attr-ol-reversed">reversed</code> content attribute.</p>
 
   <p>The <dfn title="dom-ol-start"><code>start</code></dfn> DOM
   attribute must <span>reflect</span> the value of the <code
   title="attr-ol-start">start</code> content attribute.</p>
 
-  <!-- XXX resuming numbering of lists from previous lists? -->
+  </div>
+
+  <!-- v2: resuming numbering of lists from previous lists? -->
 
   <div class="example">
 
    <p>The following markup shows a list where the order matters, and
    where the <code>ol</code> element is therefore appropriate. Compare
    this list to the equivalent list in the <code>ul</code> section to
    see an example of the same items using the <code>ul</code>
    element.</p>
 
    <pre>&lt;p>I have lived in the following countries (given in the order of when
@@ -12934,36 +14024,40 @@ I first lived there):&lt;/p>
   item. If its parent element is an <code>ol</code>, <code>ul</code>,
   or <code>menu</code> element, then the element is an item of the
   parent element's list, as defined for those elements. Otherwise, the
   list item has no defined list-related relationship to any other
   <code>li</code> element.</p>
 
   <p>The <dfn title="attr-li-value"><code>value</code></dfn>
   attribute, if present, must be a <span>valid integer</span> giving
   the ordinal value of the list item.</p>
 
+  <div class="impl">
+
   <p>If the <code title="attr-li-value">value</code> attribute is
   present, user agents must <span title="rules for parsing
   integers">parse it as an integer</span>, in order to determine the
   attribute's value. If the attribute's value cannot be converted to a
   number, the attribute must be treated as if it was absent. The
   attribute has no default value.</p>
 
   <p>The <code title="attr-li-value">value</code> attribute is
   processed relative to the element's parent <code>ol</code> element
   (q.v.), if there is one. If there is not, the attribute has no
   effect.</p>
 
   <p>The <dfn title="dom-li-value"><code>value</code></dfn> DOM
   attribute must <span>reflect</span> the value of the <code
   title="dom-li-value">value</code> content attribute.</p>
 
+  </div>
+
   <div class="example">
    <p>The following example, the top ten movies are listed (in reverse
    order). Note the way the list is given a title by using a
    <code>figure</code> element and its <code>legend</code>.</p>
    <pre>&lt;figure>
  &lt;legend>The top 10 movies of all time&lt;/legend>
  &lt;ol>
   &lt;li value="10">&lt;cite>Josie and the Pussycats&lt;/cite>, 2001&lt;/li>
   &lt;li value="9">&lt;cite lang="sh">&#x0426;&#x0440;&#x043d;&#x0430; &#x043c;&#x0430;&#x0447;&#x043a;&#x0430;, &#x0431;&#x0435;&#x043b;&#x0438; &#x043c;&#x0430;&#x0447;&#x043e;&#x0440;&lt;/cite>, 1998&lt;/li>
   &lt;li value="8">&lt;cite>A Bug's Life&lt;/cite>, 1998&lt;/li>
@@ -13034,20 +14128,22 @@ I first lived there):&lt;/p>
   <p>Name-value groups may be terms and definitions, metadata topics
   and values, or any other groups of name-value data.</p>
 
   <p>The values within a group are alternatives; multiple paragraphs
   forming part of the same value must all be given within the same
   <code>dd</code> element.</p>
 
   <p>The order of the list of groups, and of the names and values
   within each group, may be significant.</p>
 
+  <div class="impl">
+
   <p>If a <code>dl</code> element is empty, it contains no groups.</p>
 
   <p>If a <code>dl</code> element contains non-<span
   title="inter-element whitespace">whitespace</span> <span title="text
   node">text nodes</span>, or elements other than <code>dt</code> and
   <code>dd</code>, then those elements or <span title="text node">text
   nodes</span> do not form part of any groups in that
   <code>dl</code>.</p>
 
   <p>If a <code>dl</code> element contains only <code>dt</code>
@@ -13065,20 +14161,21 @@ I first lived there):&lt;/p>
   <p>If a <code>dl</code> element ends with one or more
   <code>dt</code> elements, then the last group has no associated
   value.</p>
 
   <p class="note">When a <code>dl</code> element doesn't match its
   content model, it is often due to accidentally using <code>dd</code>
   elements in the place of <code>dt</code> elements and vice
   versa. Conformance checkers can spot such mistakes and might be able
   to advise authors how to correctly use the markup.</p>
 
+  </div>
 
   <div class="example">
    <p>In the following example, one entry ("Authors") is linked to two
    values ("John" and "Luke").</p>
    <pre>&lt;dl&gt;
  &lt;dt&gt; Authors
  &lt;dd&gt; John
  &lt;dd&gt; Luke
  &lt;dt&gt; Editor
  &lt;dd&gt; Frank
@@ -13303,21 +14400,20 @@ first matching case):&lt;/p&gt;
    <p>The <code title="rel-tag">tag</code> <code
    title="attr-hyperlink-rel">rel</code>-keyword is <em>not</em> used
    on these <code>a</code> elements because they do not represent tags
    that apply to the page itself; they are just part of an index
    listing the tags themselves.</p>
 
   </div>
 
 
 
-
   <h3>Text-level semantics</h3><!-- XXX ew, find a better section name -->
 
   <h4>The <dfn><code>a</code></dfn> element</h4>
 
   <dl class="element">
    <dt>Categories</dt>
    <dd><span>Interactive content</span>.</dd>
    <dd><span>Flow content</span>.</dd>
    <dd>When the element only contains <span>phrasing content</span>: <span>phrasing content</span>.</dd>
    <dt>Contexts in which this element may be used:</dt>
@@ -13382,20 +14478,22 @@ first matching case):&lt;/p&gt;
    <pre>&lt;nav>
  &lt;ul>
   &lt;li> &lt;a href="/">Home&lt;/a> &lt;/li>
   &lt;li> &lt;a href="/news">News&lt;/a> &lt;/li>
   &lt;li> &lt;a>Examples&lt;/a> &lt;/li>
   &lt;li> &lt;a href="/legal">Legal&lt;/a> &lt;/li>
  &lt;/ul>
 &lt;/nav></pre>
   </div>
 
+  <div class="impl">
+
   <p>Interactive user agents should allow users to <span
   title="following hyperlinks">follow hyperlinks</span> created using
   the <code>a</code> element. The <code
   title="attr-hyperlink-href">href</code>, <code
   title="attr-hyperlink-target">target</code> and <code
   title="attr-hyperlink-ping">ping</code> attributes decide how the
   link is followed. The <code title="attr-hyperlink-rel">rel</code>,
   <code title="attr-hyperlink-media">media</code>, <code
   title="attr-hyperlink-hreflang">hreflang</code>, and <code
   title="attr-hyperlink-type">type</code> attributes may be used to
@@ -13467,20 +14565,22 @@ first matching case):&lt;/p&gt;
   title="dom-a-hreflang"><code>hreflang</code></dfn>, and <dfn
   title="dom-a-type"><code>type</code></dfn>, must
   <span>reflect</span> the respective content attributes of the same
   name.</p>
 
   <p>The DOM attribute <dfn
   title="dom-a-rellist"><code>relList</code></dfn> must
   <span>reflect</span> the <code title="attr-hyperlink-rel">rel</code>
   content attribute.</p>
 
+  </div>
+
   <div class="example">
 
    <p>The <code>a</code> element may be wrapped around entire
    paragraphs, lists, tables, and so forth, even entire sections, so
    long as there is no interactive content within (e.g. buttons or
    other links). This example shows how this can be used to make an
    entire advertising block into a link:</p>
 
    <pre>&lt;aside class="advertising">
  &lt;h1>Advertising&lt;/h1>
@@ -13530,27 +14630,31 @@ first matching case):&lt;/p&gt;
   <p>Quotation punctuation (such as quotation marks) must not appear
   immediately before, after, or inside <code>q</code> elements; they
   will be inserted into the rendering by the user agent.</p>
 
   <p>Content inside a <code>q</code> element must be quoted from
   another source, whose address, if it has one, should be cited in the
   <dfn title="attr-q-cite"><code>cite</code></dfn> attribute. The
   source may be fictional, as when quoting characters in a novel or
   screenplay.</p>
 
+  <div class="impl">
+
   <p>If the <code title="attr-q-cite">cite</code> attribute is
   present, it must be a <span>valid URL</span>. To obtain the
   corresponding citation link, the value of the attribute must be
   <span title="resolve a url">resolved</span> relative to the
   element. User agents should allow users to follow such citation
   links.</p>
 
+  </div>
+
   <p>The <code>q</code> element must not be used in place of quotation
   marks that do not represent quotes; for example, it is inappropriate
   to use the <code>q</code> element for marking up sarcastic
   statements.</p>
 
   <p>The use of <code>q</code> elements to mark up quotations is
   entirely optional; using explicit quotation punctuation without
   <code>q</code> elements is just as correct.</p>
 
   <div class="example">
@@ -14298,20 +15402,22 @@ this specification: the &lt;abbr>WHATWG&lt;/abbr> and the
   <p>The <dfn title="attr-time-datetime"><code>datetime</code></dfn>
   attribute, if present, must contain a <span>valid date or time
   string</span> that identifies the date or time being specified.</p>
 
   <p>If the <code title="attr-time-datetime">datetime</code> attribute
   is not present, then the date or time must be specified in the
   content of the element, such that the element's
   <code>textContent</code> is a <span>valid date or time string in
   content</span>.</p>
 
+  <div class="impl">
+
   <p>The <dfn title="dom-time-datetime"><code>dateTime</code></dfn> DOM
   attribute must <span>reflect</span> the <code
   title="attr-time-datetime">datetime</code> content attribute.</p>
 
   <p>User agents, to obtain the <dfn
   title="concept-time-date">date</dfn>, <dfn
   title="concept-time-time">time</dfn>, and <dfn
   title="concept-time-timezone">timezone</dfn> represented by a
   <code>time</code> element, must follow these steps:</p>
 
@@ -14338,20 +15444,64 @@ this specification: the &lt;abbr>WHATWG&lt;/abbr> and the
    that is the <span title="concept-time-date">date</span>; if <var
    title="">result</var> contains a time, then that is the <span
    title="concept-time-time">time</span>; and if <var
    title="">result</var> contains a timezone, then the timezone is the
    element's <span title="concept-time-timezone">timezone</span>. (A
    timezone can only be present if both a date and a time are also
    present.)</li>
 
   </ol>
 
+  </div>
+
+  <dl class="domintro">
+
+   <dt><var title="">time</var> . <code title="dom-time-date">date</code></dt>
+
+   <dd>
+
+    <p>Returns a <code>Date</code> object representing the date
+    component of the element's value, at midnight in the UTC
+    timezone.</p>
+
+    <p>Returns null if there is no date.</p>
+
+   </dd>
+
+   <dt><var title="">time</var> . <code title="dom-time-time">time</code></dt>
+
+   <dd>
+
+    <p>Returns a <code>Date</code> object representing the time
+    component of the element's value, on 1970-01-01 in the UTC
+    timezone.</p>
+
+    <p>Returns null if there is no time.</p>
+
+   </dd>
+
+   <dt><var title="">time</var> . <code title="dom-time-timezone">timezone</code></dt>
+
+   <dd>
+
+    <p>Returns a <code>Date</code> object representing the time
+    corresponding to 1970-01-01 00:00 UTC in the timezone given by the
+    element's value.</p>
+
+    <p>Returns null if there is no timezone.</p>
+
+   </dd>
+
+  </dl>
+
+  <div>
+
   <p>The <dfn title="dom-time-date"><code>date</code></dfn> DOM
   attribute must return null if the <span
   title="concept-time-date">date</span> is unknown, and otherwise must
   return the time corresponding to midnight UTC (i.e. the first
   second) of the given <span
   title="concept-time-date">date</span>.</p>
 
   <p>The <dfn title="dom-time-time"><code>time</code></dfn> DOM attribute
   must return null if the <span title="concept-time-time">time</span> is
   unknown, and otherwise must return the time corresponding to the
@@ -14359,20 +15509,22 @@ this specification: the &lt;abbr>WHATWG&lt;/abbr> and the
   the timezone UTC.</p>
 
   <p>The <dfn title="dom-time-timezone"><code>timezone</code></dfn> DOM
   attribute must return null if the <span
   title="concept-time-timezone">timezone</span> is unknown, and otherwise
   must return the time corresponding to 1970-01-01 00:00 UTC in the
   given <span title="concept-time-timezone">timezone</span>, with the
   timezone set to UTC (i.e. the time corresponding to 1970-01-01 at
   00:00 UTC plus the offset corresponding to the timezone).</p>
 
+  </div>
+
   <div class="example">
 
    <p>In the following snippet:</p>
 
    <pre>&lt;p>Our first date was &lt;time datetime="2006-09-23">a Saturday&lt;/time>.&lt;/p></pre>
 
    <p>...the <code>time</code> element's <code
    title="dom-time-date">date</code> attribute would have the value
    1,158,969,600,000ms, and the <code title="dom-time-time">time</code>
    and <code title="dom-time-timezone">timezone</code> attributes would
@@ -14470,38 +15622,40 @@ this specification: the &lt;abbr>WHATWG&lt;/abbr> and the
   function updateProgress(newValue) {
     progressBar.textContent = newValue;
   }
  &lt;/script>
 &lt;/section></pre>
    <p>(The <code>updateProgress()</code> method in this example would
    be called by some other code on the page to update the actual
    progress bar as the task progressed.)</p>
   </div>
 
-  <p><strong>Author requirements</strong>: The <code
+  <p><strong class="impl">Author requirements:</strong> The <code
   title="attr-progress-max">max</code> and <code
   title="attr-progress-value">value</code> attributes, when present,
   must have values that are <span title="valid floating point
   number">valid floating point numbers</span>. The <code
   title="attr-progress-max">max</code> attribute, if present, must
   have a value greater than zero. The <code
   title="attr-progress-value">value</code> attribute, if present, must
   have a value equal to or greater than zero, and less than or equal
   to the value of the <code title="attr-progress-max">max</code>
   attribute, if present, or 1, otherwise.</p>
 
   <p class="note">The <code>progress</code> element is the wrong
   element to use for something that is just a gauge, as opposed to
   task progress. For instance, indicating disk space usage using
   <code>progress</code> would be inappropriate. Instead, the
   <code>meter</code> element is available for such use cases.</p>
 
+  <div class="impl">
+
   <p><strong>User agent requirements</strong>: User agents must parse
   the <code title="attr-progress-max">max</code> and <code
   title="attr-progress-value">value</code> attributes' values
   according to the <span>rules for parsing floating point number
   values</span>.</p>
 
   <p>If the <code title="attr-progress-value">value</code> attribute
   is omitted, then user agents must also parse the
   <code>textContent</code> of the <code>progress</code> element in
   question using the <span>steps for finding one or two numbers of a
@@ -14580,29 +15734,44 @@ this specification: the &lt;abbr>WHATWG&lt;/abbr> and the
   progress bar, and in the former case, should indicate the relative
   position of the current value relative to the maximum value.</p>
 
   <p>The <dfn title="dom-progress-max"><code>max</code></dfn> and <dfn
   title="dom-progress-value"><code>value</code></dfn> DOM attributes
   must <span>reflect</span> the respective content attributes of the
   same name. When the relevant content attributes are absent, the DOM
   attributes must return zero. The value parsed from the
   <code>textContent</code> never affects the DOM values.</p>
 
-  <p class="XXX">Would be cool to have the <code
-  title="dom-progress-value">value</code> DOM attribute update the
-  <code>textContent</code> in-line...</p>
+  </div>
+
+  <dl class="domintro">
+
+   <dt><var title="">progress</var> . <code title="dom-progress-position">position</code></dt>
+
+   <dd>
+
+    <p>For a determinate progress bar (one with known current and
+    maximum values), returns the result of dividing the current value
+    by the maximum value.</p>
+
+    <p>For an indeterminate progress bar, returns &#x2212;1.</p>
+
+  </dl>
+
+  <div>
 
   <p>If the progress bar is an indeterminate progress bar, then the
   <dfn title="dom-progress-position"><code>position</code></dfn> DOM
   attribute must return &#x2212;1. Otherwise, it must return the result of
   dividing the current value by the maximum value.</p>
 
+  </div>
 
 
   <h4>The <dfn><code>meter</code></dfn> element</h4>
   <!-- Keep this after <progress> and NOT close to <time> -->
 
   <dl class="element">
    <dt>Categories</dt>
    <dd><span>Flow content</span>.</dd>
    <dd><span>Phrasing content</span>.</dd>
    <dt>Contexts in which this element may be used:</dt>
@@ -14664,27 +15833,27 @@ this specification: the &lt;abbr>WHATWG&lt;/abbr> and the
   the range that is considered to be the "low" part, and the <dfn
   title="attr-meter-high"><code>high</code></dfn> attribute specifies
   the range that is considered to be the "high" part. The <dfn
   title="attr-meter-optimum"><code>optimum</code></dfn> attribute
   gives the position that is "optimum"; if that is higher than the
   "high" value  then this indicates that the higher the value, the
   better; if it's lower than the "low" mark then it indicates that
   lower values are better, and naturally if it is in between then it
   indicates that neither high nor low values are good.</p>
 
-  <p><strong>Authoring requirements</strong>: The recommended way of
-  giving the value is to include it as contents of the element, either
-  as two numbers (the higher number represents the maximum, the other
-  number the current value, and the minimum is assumed to be zero), or
-  as a percentage or similar (using one of the characters such as
-  "%"), or as a fraction. However, it is also possible to use the
-  attributes to specify these values.</p>
+  <p><strong class="impl">Authoring requirements:</strong> The
+  recommended way of giving the value is to include it as contents of
+  the element, either as two numbers (the higher number represents the
+  maximum, the other number the current value, and the minimum is
+  assumed to be zero), or as a percentage or similar (using one of the
+  characters such as "%"), or as a fraction. However, it is also
+  possible to use the attributes to specify these values.</p>
 
   <p>One of the following conditions, along with all the requirements
   that are listed with that condition, must be met:</p>
 
   <dl>
 
    <dt>There are exactly two numbers in the contents of the element,
    and the <code title="attr-meter-value">value</code>, <code
    title="attr-meter-min">min</code>, and <code
    title="attr-meter-max">max</code> attributes are all omitted</dt>
@@ -14832,20 +16001,22 @@ and a height of &lt;meter>2cm&lt;/meter>.&lt;/p> &lt;!-- <strong>BAD!</strong> -
 
    <p>The example above could be extended to mention the units:</p>
 
    <pre>&lt;dl>
  &lt;dt>Radius: &lt;dd> &lt;meter min=0 max=20 value=12 title="centimeters">12cm&lt;/meter>
  &lt;dt>Height: &lt;dd> &lt;meter min=0 max=10 value=2 title="centimeters">2cm&lt;/meter>
 &lt;/dl></pre>
 
   </div>
 
+  <div class="impl">
+
   <p><strong>User agent requirements</strong>: User agents must parse
   the <code title="attr-meter-min">min</code>, <code
   title="attr-meter-max">max</code>, <code
   title="attr-meter-value">value</code>, <code
   title="attr-meter-low">low</code>, <code
   title="attr-meter-high">high</code>, and <code
   title="attr-meter-optimum">optimum</code> attributes using the
   <span>rules for parsing floating point number values</span>.</p>
 
   <p>If the <code title="attr-meter-value">value</code> attribute has
@@ -15074,29 +16245,22 @@ and a height of &lt;meter>2cm&lt;/meter>.&lt;/p> &lt;!-- <strong>BAD!</strong> -
   title="dom-meter-max"><code>max</code></dfn>, <dfn
   title="dom-meter-value"><code>value</code></dfn>, <dfn
   title="dom-meter-low"><code>low</code></dfn>, <dfn
   title="dom-meter-high"><code>high</code></dfn>, and <dfn
   title="dom-meter-optimum"><code>optimum</code></dfn> DOM attributes
   must <span>reflect</span> the respective content attributes of the
   same name. When the relevant content attributes are absent, the DOM
   attributes must return zero. The value parsed from the
   <code>textContent</code> never affects the DOM values.</p>
 
-  <p class="XXX">Would be cool to have the <code
-  title="dom-meter-value">value</code> DOM attribute update the
-  <code>textContent</code> in-line...</p>
+  </div>
 
-<!-- XXX
-should we also look inside the title="" attribute?
-   Disk usage: &lt;meter title="985MB of 986MB total" high="980">Full!&lt;/meter>
-should we make the contents accessible in some way, e.g. as a tooltip?
--->
 
 
 
   <h4>The <dfn><code>code</code></dfn> element</h4>
 
   <dl class="element">
    <dt>Categories</dt>
    <dd><span>Flow content</span>.</dd>
    <dd><span>Phrasing content</span>.</dd>
    <dt>Contexts in which this element may be used:</dt>
@@ -15549,40 +16713,44 @@ brighter. A &lt;b>rat&lt;/b> scurries past the corner wall.&lt;/p></pre>
   <p>The <code>bdo</code> element <span>represents</span> explicit
   text directionality formatting control for its children. It allows
   authors to override the Unicode bidi algorithm by explicitly
   specifying a direction override. <a href="#refsBIDI">[BIDI]</a></p>
 
   <p>Authors must specify the <code title="attr-dir">dir</code>
   attribute on this element, with the value <code>ltr</code> to
   specify a left-to-right override and with the value <code>rtl</code>
   to specify a right-to-left override.</p>
 
+  <div class="impl">
+
   <p>If the element has the <code title="attr-dir">dir</code>
   attribute set to the exact value <code>ltr</code>, then for the
   purposes of the bidi algorithm, the user agent must act as if there
   was a U+202D LEFT-TO-RIGHT OVERRIDE character at the start of the
   element, and a U+202C POP DIRECTIONAL FORMATTING at the end of the
   element.</p>
 
   <p>If the element has the <code title="attr-dir">dir</code>
   attribute set to the exact value <code>rtl</code>, then for the
   purposes of the bidi algorithm, the user agent must act as if there
   was a U+202E RIGHT-TO-LEFT OVERRIDE character at the start of the
   element, and a U+202C POP DIRECTIONAL FORMATTING at the end of the
   element.</p>
 
   <p>The requirements on handling the <code>bdo</code> element for the
   bidi algorithm may be implemented indirectly through the style
   layer. For example, an HTML+CSS user agent should implement these
   requirements by implementing the CSS <code>unicode-bidi</code>
   property. <a href="#refsCSS21">[CSS21]</a></p>
 
+  </div>
+
   <!-- XXX need examples -->
 
 
 
   <h4>The <dfn><code>ruby</code></dfn> element</h4>
 
   <dl class="element">
    <dt>Categories</dt>
    <dd><span>Flow content</span>.</dd>
    <dd><span>Phrasing content</span>.</dd>
@@ -15688,30 +16856,34 @@ brighter. A &lt;b>rat&lt;/b> scurries past the corner wall.&lt;/p></pre>
    <dd><span>Phrasing content</span>.</dd>
    <dt>Content attributes:</dt>
    <dd><span>Global attributes</span></dd>
    <dt>DOM interface:</dt>
    <dd>Uses <code>HTMLElement</code>.</dd>
   </dl>
 
   <p>The <code>rt</code> element marks the ruby text component of a
   ruby annotation.</p>
 
-  <p>An <code>rt</code> element that is a child of a <code>ruby</code>
-  element <span>represents</span> an annotation (given by its
-  children) for the zero or more nodes of phrasing content that
-  immediately precedes it in the <code>ruby</code> element, ignoring
-  <code>rp</code> elements.</p>
+  <p>An <code>rt</code> element <span class="impl">that is a child of
+  a <code>ruby</code> element</span> <span>represents</span> an
+  annotation (given by its children) for the zero or more nodes of
+  phrasing content that immediately precedes it in the
+  <code>ruby</code> element, ignoring <code>rp</code> elements.</p>
+
+  <div class="impl">
 
   <p>An <code>rt</code> element that is not a child of a
   <code>ruby</code> element represents the same thing as its
   children.</p>
 
+  </div>
+
 
   <h4>The <dfn><code>rp</code></dfn> element</h4>
 
   <dl class="element">
    <dt>Categories</dt>
    <dd>None.</dd>
    <dt>Contexts in which this element may be used:</dt>
    <dd>As a child of a <code>ruby</code> element, either immediately before or immediately after an <code>rt</code> element.</dd>
    <dt>Content model:</dt>
    <dd>If the <code>rp</code> element is immediately after an <code>rt</code> element that is immediately preceded by another <code>rp</code> element: a single character from Unicode character class Pe.</dd>
@@ -15719,24 +16891,26 @@ brighter. A &lt;b>rat&lt;/b> scurries past the corner wall.&lt;/p></pre>
    <dt>Content attributes:</dt>
    <dd><span>Global attributes</span></dd>
    <dt>DOM interface:</dt>
    <dd>Uses <code>HTMLElement</code>.</dd>
   </dl>
 
   <p>The <code>rp</code> element can be used to provide parentheses
   around a ruby text component of a ruby annotation, to be shown by
   user agents that don't support ruby annotations.</p>
 
-  <p>An <code>rp</code> element that is a child of a <code>ruby</code>
-  element <span>represents</span> nothing and it and its contents must
-  be ignored. An <code>rp</code> element whose parent element is not a
-  <code>ruby</code> element <span>represents</span> its children.</p>
+  <p>An <code>rp</code> element <span class="impl">that is a child of
+  a <code>ruby</code> element</span> <span>represents</span>
+  nothing<span class="impl"> and its contents must be
+  ignored</span>. <span class="impl">An <code>rp</code> element whose
+  parent element is not a <code>ruby</code> element
+  <span>represents</span> its children.</span></p>
 
   <div class="example">
 
    <p>The example above, in which each ideograph in the text <span
    lang="ja">&#28450;&#23383;</span> is annotated with its kanji
    reading, could be expanded to use <code>rp</code> so that in legacy
    user agents the readings are in parentheses:</p>
 
    <pre lang="ja">... 
 &lt;ruby>
@@ -15972,59 +17146,72 @@ brighter. A &lt;b>rat&lt;/b> scurries past the corner wall.&lt;/p></pre>
 
   <h4>Attributes common to <code>ins</code> and <code>del</code> elements</h4>
 
   <p>The <dfn title="attr-mod-cite"><code>cite</code></dfn> attribute
   may be used to specify the address of a document that explains the
   change. When that document is long, for instance the minutes of a
   meeting, authors are encouraged to include a fragment identifier
   pointing to the specific part of that document that discusses the
   change.</p>
 
+  <div class="impl">
+
   <p>If the <code title="attr-mod-cite">cite</code> attribute is
   present, it must be a <span>valid URL</span> that explains the
   change. To obtain the corresponding citation link, the value of the
   attribute must be <span title="resolve a url">resolved</span>
   relative to the element. User agents should allow users to follow
   such citation links.</p>
 
+  </div>
+
   <p>The <dfn title="attr-mod-datetime"><code>datetime</code></dfn>
   attribute may be used to specify the time and date of the change.</p>
 
   <p>If present, the <code title="attr-mod-datetime">datetime</code>
   attribute must be a <span>valid global date and time string</span>
   value.</p>
 
+  <div class="impl">
+
   <p>User agents must parse the <code
   title="attr-mod-datetime">datetime</code> attribute according to the
   <span>parse a global date and time string</span> algorithm. If that
   doesn't return a time, then the modification has no associated
   timestamp (the value is non-conforming; it is not a <span>valid
   global date and time string</span>). Otherwise, the modification is
   marked as having been made at the given datetime. User agents should
   use the associated timezone information to determine which timezone
   to present the given datetime in.</p>
 
-  <p>The <code>ins</code> and <code>del</code> elements must implement
-  the <code>HTMLModElement</code> interface:</p>
+  </div>
+
+  <p>The <code>ins</code> and <code>del</code> elements <span
+  class="impl">must</span> implement the <code>HTMLModElement</code>
+  interface:</p>
 
   <pre class="idl">interface <dfn>HTMLModElement</dfn> : <span>HTMLElement</span> {
            attribute DOMString <span title="dom-mod-cite">cite</span>;
            attribute DOMString <span title="dom-mod-datetime">dateTime</span>;
 };</pre>
 
+  <div class="impl">
+
   <p>The <dfn title="dom-mod-cite"><code>cite</code></dfn> DOM
   attribute must <span>reflect</span> the element's <code
   title="attr-mod-cite">cite</code> content attribute. The <dfn
   title="dom-mod-datetime"><code>dateTime</code></dfn> DOM attribute
   must <span>reflect</span> the element's <code
   title="">datetime</code> content attribute.</p>
 
+  </div>
+
 
   <h4>Edits and paragraphs</h4>
 
   <p>Since the <code>ins</code> and <code>del</code> elements do not
   affect <span title="paragraph">paragraphing</span>, it is possible,
   in some cases where paragraphs are <span
   title="paragraph">implied</span> (without explicit <code>p</code>
   elements), for an <code>ins</code> or <code>del</code> element to
   span both an entire paragraph or other non-<span>phrasing
   content</span> elements and part of another paragraph.</p>
@@ -16344,20 +17531,22 @@ interface <dfn>HTMLImageElement</dfn> : <span>HTMLElement</span> {
   title="">longdesc</code> attribute from HTML4 should be
   included. This has been considered and rejected in the past, but if
   new evidence is found showing the attribute to actually help users
   rather than harm them, it may be reconsidered.</p>
 
   <p>The <code>img</code> must not be used as a layout tool. In
   particular, <code>img</code> elements should not be used to display
   fully transparent images, as they rarely convey meaning and rarely
   add anything useful to the document.</p>
 
+  <div class="impl">
+
   <hr>
 
   <p>Unless the user agent cannot support images, or its support for
   images has been disabled, or the user agent only fetches elements on
   demand, or the element's <code title="attr-img-src">src</code>
   attribute has a value that is an <i>ignored self-reference</i>,
   then, when an <code>img</code> is created with a <code
   title="attr-img-src">src</code> attribute, and whenever the <code
   title="attr-img-src">src</code> attribute is set subsequently, the
   user agent must <span title="resolve a url">resolve</span> the value
@@ -16588,20 +17777,22 @@ interface <dfn>HTMLImageElement</dfn> : <span>HTMLElement</span> {
   display any image, or to prevent any image from being
   displayed. User agents may also apply image analysis heuristics to
   help the user make sense of the image when the user is unable to
   make direct use of the image, e.g. due to a visual disability or
   because they are using a text terminal with no graphics
   capabilities.</p>
 
   <p>The <em>contents</em> of <code>img</code> elements, if any, are
   ignored for the purposes of rendering.</p>
 
+  </div>
+
   <hr>
 
   <p>The <code title="attr-hyperlink-usemap">usemap</code> attribute,
   if present, can indicate that the image has an associated
   <span>image map</span>.</p>
 
   <p>The <dfn title="attr-img-ismap"><code>ismap</code></dfn>
   attribute, when used on an element that is a descendant of an
   <code>a</code> element with an <code
   title="attr-hyperlink-href">href</code> attribute, indicates by its
@@ -16610,38 +17801,85 @@ interface <dfn>HTMLImageElement</dfn> : <span>HTMLElement</span> {
   <code>a</code> element.</p>
 
   <p>The <code title="attr-img-ismap">ismap</code> attribute is a
   <span>boolean attribute</span>. The attribute must not be specified
   on an element that does not have an ancestor <code>a</code> element
   with an <code title="attr-hyperlink-href">href</code> attribute.</p>
 
   <p>The <code>img</code> element supports <span>dimension
   attributes</span>.</p>
 
+  <div class="impl">
+
   <p>The DOM attributes <dfn
   title="dom-img-alt"><code>alt</code></dfn>, <dfn
   title="dom-img-src"><code>src</code></dfn>, <dfn
   title="dom-img-useMap"><code>useMap</code></dfn>, and <dfn
   title="dom-img-isMap"><code>isMap</code></dfn> each must
   <span>reflect</span> the respective content attributes of the same
   name.</p>
 
+  </div>
+
+  <dl class="domintro">
+
+   <dt><var title="">image</var> . <code title="dom-img-width">width</code> [ = <var title="">value</var> ]</dt>
+   <dt><var title="">image</var> . <code title="dom-img-height">height</code> [ = <var title="">value</var> ]</dt>
+
+   <dd>
+
+    <p>These attributes return the actual rendered dimensions of the
+    image, or zero if the dimensions are not known.</p>
+
+    <p>They can be set, to change the corresponding content
+    attributes.</p>
+
+   </dd>
+
+   <dt><var title="">image</var> . <code title="dom-img-complete">complete</code></dt>
+
+   <dd>
+
+    <p>Returns true if the image has been downloaded, decoded, and
+    found to be valid; otherwise, returns false.</p>
+
+   </dd>
+
+   <dt><var title="">image</var> = new <code title="dom-image">Image</code>( [ <var title="">width</var> [, <var title="">height</var> ] ] )</dt>
+
+   <dd>
+
+    <p>Returns a new <code>img</code> element, with the <code
+    title="attr-dim-width">width</code> and <code
+    title="attr-dim-height">height</code> attributes set to the values
+    passed in the relevant arguments, if applicable.</p>
+
+   </dd>
+
+  </dl>
+
+  <div class="impl">
+
   <p>The DOM attributes <dfn
   title="dom-img-width"><code>width</code></dfn> and <dfn
   title="dom-img-height"><code>height</code></dfn> must return the
   rendered width and height of the image, in CSS pixels, if the image
   is being rendered, and is being rendered to a visual medium; or else
   the intrinsic width and height of the image, in CSS pixels, if the
   image is <i>available</i> but not being rendered to a visual medium;
   or else 0, if the image is not <i>available</i> or its dimensions
   are not known. <a href="#refsCSS21">[CSS21]</a></p>
 
+  <p>On setting, they must act as if they <span
+  title="reflect">reflected</span> the respective content attributes
+  of the same name.</p>
+
   <p>The DOM attribute <dfn
   title="dom-img-complete"><code>complete</code></dfn> must return
   true if the user agent has fetched the image specified in the <code
   title="attr-img-src">src</code> attribute, and it is a valid image,
   even if the final <span title="concept-task">task</span> queued by
   the <span>networking task source</span> for the <span
   title="fetch">fetching</span> of the image resource has not yet been
   processed. Otherwise, the attribute must return false.</p>
 
   <p class="note">The value of <code
@@ -16659,20 +17897,21 @@ interface <dfn>HTMLImageElement</dfn> : <span>HTMLElement</span> {
   title="">height</var>)</code></dfn>. When invoked as constructors,
   these must return a new <code>HTMLImageElement</code> object (a new
   <code>img</code> element). If the <var title="">width</var> argument
   is present, the new object's <code
   title="attr-dim-width">width</code> content attribute must be set to
   <var title="">width</var>. If the <var title="">height</var>
   argument is also present, the new object's <code
   title="attr-dim-height">height</code> content attribute must be set
   to <var title="">height</var>.</p>
 
+  </div>
 
   <div class="example">
 
    <p>A single image can have different appropriate alternative text
    depending on the context.</p>
 
    <p>In each of the following cases, the same image is used, yet the
    <code title="attr-img-alt">alt</code> text is different each
    time. The image is the coat of arms of the Canton Geneva in
    Switzerland.</p>
@@ -17584,20 +18823,21 @@ href="?audio">audio&lt;/a> test instead.)&lt;/p></pre>
   title="attr-title">title</code> attribute can be used for
   supplemental information.</p>
 
   <p class="note">One way to think of alternative text is to think
   about how you would read the page containing the image to someone
   over the phone, without mentioning that there is an image
   present. Whatever you say instead of the image is typically a good
   start for writing the alternative text.</p>
 
 
+  <div class="impl">
 
   <h6>Guidance for markup generators</h6>
 
   <p>Markup generators (such as WYSIWYG authoring tools) should,
   wherever possible, obtain alternative text from their
   users. However, it is recognised that in many cases, this will not
   be possible.</p>
 
   <p>For images that are the sole contents of links, markup generators
   should examine the link target to determine the title of the target,
@@ -17608,20 +18848,21 @@ href="?audio">audio&lt;/a> test instead.)&lt;/p></pre>
   title="attr-img-alt">alt</code> attribute to the empty string, under
   the assumption that the image is a purely decorative image that
   doesn't add any information but is still specific to the surrounding
   content, or omit the <code title="attr-img-alt">alt</code> attribute
   altogther, under the assumption that the image is a key part of the
   content.</p>
 
   <p>Markup generators should generally avoid using the image's own
   file name as the alternative text.</p>
 
+  </diV>
 
 
 
   <h4>The <dfn><code>iframe</code></dfn> element</h4>
 
   <dl class="element">
    <dt>Categories</dt>
    <dd><span>Flow content</span>.</dd>
    <dd><span>Phrasing content</span>.</dd>
    <dd><span>Embedded content</span>.</dd>
@@ -17644,67 +18885,78 @@ href="?audio">audio&lt;/a> test instead.)&lt;/p></pre>
            attribute DOMString <span title="dom-iframe-name">name</span>;
            attribute DOMString <span title="dom-iframe-sandbox">sandbox</span>;
            attribute boolean <span title="dom-iframe-seamless">seamless</span>;
            attribute DOMString <span title="dom-dim-width">width</span>;
            attribute DOMString <span title="dom-dim-height">height</span>;
 <!-- XXX we should bring these back since the Window spec has atrophied
   readonly attribute Document <span title="dom-iframe-contentDocument">contentDocument</span>;
   readonly attribute <span>WindowProxy</span> <span title="dom-iframe-contentWindow">contentWindow</span>;
 -->};</pre>
     <p>Objects implementing the <code>HTMLIFrameElement</code>
-    interface must also implement the <code>EmbeddingElement</code>
-    interface defined in the Window Object specification. <a
-    href="#refsWINDOW">[WINDOW]</a></p> <!-- XXX -->
+    interface <span class="impl">must</span> also implement the
+    <code>EmbeddingElement</code> interface defined in the Window
+    Object specification. <a href="#refsWINDOW">[WINDOW]</a></p> <!--
+    XXX -->
    </dd>
   </dl>
 
   <p>The <code>iframe</code> element <span>represents</span> a
   <span>nested browsing context</span>.</p>
 
   <p>The <dfn title="attr-iframe-src"><code>src</code></dfn> attribute
   gives the address of a page that the <span>nested browsing
   context</span> is to contain. The attribute, if present, must be a
-  <span>valid URL</span>. When the browsing context is created, if the
-  attribute is present, the user agent must <span title="resolve a
-  url">resolve</span> the value of that attribute, relative to the
-  element, and if that is successful, must then <span>navigate</span>
-  the element's browsing context to the resulting <span>absolute
-  URL</span>, with <span>replacement enabled</span>, and with the
-  <code>iframe</code> element's document's <span>browsing
-  context</span> as the <span>source browsing context</span>. If the
-  user <span title="navigate">navigates</span> away from this page,
-  the <code>iframe</code>'s corresponding <code>WindowProxy</code>
-  object will proxy new <code>Window</code> objects for new
+  <span>valid URL</span>. <span class="impl">When the browsing context
+  is created, if the attribute is present, the user agent must <span
+  title="resolve a url">resolve</span> the value of that attribute,
+  relative to the element, and if that is successful, must then
+  <span>navigate</span> the element's browsing context to the
+  resulting <span>absolute URL</span>, with <span>replacement
+  enabled</span>, and with the <code>iframe</code> element's
+  document's <span>browsing context</span> as the <span>source
+  browsing context</span>. If the user <span
+  title="navigate">navigates</span> away from this page, the
+  <code>iframe</code>'s corresponding <code>WindowProxy</code> object
+  will proxy new <code>Window</code> objects for new
   <code>Document</code> objects, but the <code
-  title="attr-iframe-src">src</code> attribute will not change.</p>
+  title="attr-iframe-src">src</code> attribute will not
+  change.</span></p>
+
+  <div class="impl">
 
   <p>Whenever the <code title="attr-iframe-src">src</code> attribute
   is set, the user agent must <span title="resolve a
   url">resolve</span> the value of that attribute, relative to the
   element, and if that is successful, the nested <span>browsing
   context</span> must be <span title="navigate">navigated</span> to
   the resulting <span>absolute URL</span>, with the
   <code>iframe</code> element's document's <span>browsing
   context</span> as the <span>source browsing context</span>.</p> <!--
   It doesn't happen when the base URL is changed, though. -->
 
   <p>If the <code title="attr-iframe-src">src</code> attribute is not
   set when the element is created, or if its value cannot be <span
   title="resolve a url">resolved</span>, the browsing context will
   remain at the initial <code>about:blank</code> page.</p>
 
+  </div>
+
   <p>The <dfn title="attr-iframe-name"><code>name</code></dfn>
   attribute, if present, must be a <span>valid browsing context
-  name</span>. When the browsing context is created, if the attribute
-  is present, the <span>browsing context name</span> must be set to
-  the value of this attribute; otherwise, the <span>browsing context
-  name</span> must be set to the empty string.</p>
+  name</span>. The given value is used to name the <span>nested
+  browsing context</span>. <span class="impl">When the browsing
+  context is created, if the attribute is present, the <span>browsing
+  context name</span> must be set to the value of this attribute;
+  otherwise, the <span>browsing context name</span> must be set to the
+  empty string.</span></p>
+
+  <div class="impl">
 
   <p>Whenever the <code title="attr-iframe-name">name</code> attribute
   is set, the nested <span>browsing context</span>'s <span
   title="browsing context name">name</span> must be changed to the new
   value. If the attribute is removed, the <span>browsing context
   name</span> must be set to the empty string.</p>
 
   <p>When content loads in an <code>iframe</code>, after any <code
   title="event-load">load</code> events are fired within the content
   itself, the user agent must <span>fire a <code
@@ -17720,36 +18972,47 @@ href="?audio">audio&lt;/a> test instead.)&lt;/p></pre>
   event</span> in the <code>iframe</code>'s <span>browsing
   context</span>, the <code>iframe</code> must <span>delay the <code
   title="event-load">load</code> event</span>.</p>
 
   <p class="note">If, during the handling of the <code
   title="event-load">load</code> event, the <span>browsing
   context</span> in the <code>iframe</code> is again <span
   title="navigate">navigated</span>, that will further <span>delay the
   <code title="event-load">load</code> event</span>.</p>
 
-
+  </div>
 
   <hr>
 
-
-
   <p>The <dfn title="attr-iframe-sandbox"><code>sandbox</code></dfn>
   attribute, when specified, enables a set of extra restrictions on
   any content hosted by the <code>iframe</code>. Its value must be an
   <span>unordered set of unique space-separated tokens</span>. The
   allowed values are <code
   title="attr-iframe-sandbox-allow-same-origin">allow-same-origin</code>,
-  <code
-  title="attr-iframe-sandbox-allow-forms">allow-forms</code>,
+  <code title="attr-iframe-sandbox-allow-forms">allow-forms</code>,
   and <code
-  title="attr-iframe-sandbox-allow-scripts">allow-scripts</code>.</p>
+  title="attr-iframe-sandbox-allow-scripts">allow-scripts</code>. When
+  the attribute is set, the content is treated as being from a unique
+  <span>origin</span>, forms and scripts are disabled, links are
+  prevented from targetting other <span title="browsing
+  context">browsing contexts</span>, and plugins are disabled. The
+  <code
+  title="attr-iframe-sandbox-allow-same-origin">allow-same-origin</code>
+  token allows the content to be treated as being from the same origin
+  instead of forcing it into a unique origin, and the <code
+  title="attr-iframe-sandbox-allow-forms">allow-forms</code> and <code
+  title="attr-iframe-sandbox-allow-scripts">allow-scripts</code>
+  tokens re-enable forms and scripts respectively (though scripts are
+  still prevented from creating popups).</p>
+
+  <div class="impl">
 
   <p>While the <code title="attr-iframe-sandbox">sandbox</code>
   attribute is specified, the <code>iframe</code> element's
   <span>nested browsing context</span>, and all the browsing contexts
   <span title="nested browsing context">nested</span> within it
   (either directly or indirectly through other nested browsing
   contexts) must have the following flags set:</p>
 
   <dl>
 
@@ -17883,20 +19146,22 @@ href="?audio">audio&lt;/a> test instead.)&lt;/p></pre>
     <em>new</em> scripts will be prevented from executing by this
     flag.</p>
 
    </dd>
 
   </dl>
 
   <p>These flags must not be set unless the conditions listed above
   define them as being set.</p>
 
+  </div>
+
   <div class="example">
 
    <p>In this example, some completely-unknown, potentially hostile,
    user-provided HTML content is embedded in a page. Because it is
    sandboxed, it is treated by the user agent as being from a unique
    origin, despite the content being served from the same site. Thus
    it is affected by all the normal cross-site restrictions. In
    addition, the embedded page has scripting disabled, plugins
    disabled, forms disabled, and it cannot navigate any frames or
    windows other than itself (or any frames or windows it itself
@@ -17933,28 +19198,30 @@ href="?audio">audio&lt;/a> test instead.)&lt;/p></pre>
 
   <!-- v2: Might be interesting to have a value on seamless that
   allowed event propagation of some sort, maybe based on the WICD
   work: http://www.w3.org/TR/WICD/ -->
 
   <p>The <dfn title="attr-iframe-seamless"><code>seamless</code></dfn>
   attribute is a boolean attribute. When specified, it indicates that
   the <code>iframe</code> element's <span>browsing context</span> is
   to be rendered in a manner that makes it appear to be part of the
   containing document (seamlessly included in the parent
-  document). Specifically, when the attribute is set on an element and
-  while the <span>browsing context</span>'s <span>active
-  document</span> has the <span>same origin</span> as the
+  document). <span class="impl">Specifically, when the attribute is
+  set on an element and while the <span>browsing context</span>'s
+  <span>active document</span> has the <span>same origin</span> as the
   <code>iframe</code> element's document, or the <span>browsing
   context</span>'s <span>active document</span>'s <em><span title="the
   document's address">address</span><!-- XXX xref --></em> has the
   <span>same origin</span> as the <code>iframe</code> element's
-  document, the following requirements apply:</p>
+  document, the following requirements apply:</span></p>
+
+  <div class="impl">
 
   <ul>
 
    <li><p>The user agent must set the <dfn>seamless browsing
    context flag</dfn> to true for that <span>browsing
    context</span>. This will <a href="#seamlessLinks">cause links to
    open in the parent browsing context</a>.</p></li>
 
    <li><p>In a CSS-supporting user agent: the user agent must add all
    the style sheets that apply to the <code>iframe</code> element to
@@ -18030,20 +19297,22 @@ href="?audio">audio&lt;/a> test instead.)&lt;/p></pre>
   and the <span>seamless browsing context flag</span> must be set to
   false for that <span>browsing context</span>.</p>
 
   <p class="warning">It is important that user agents recheck the
   above conditions whenever the <span>active document</span> of the
   <span>nested browsing context</span> of the <code>iframe</code>
   changes, such that the <span>seamless browsing context flag</span>
   gets unset if the <span>nested browsing context</span> is <span
   title="navigate">navigated</span> to another origin.</p>
 
+  </div>
+
   <p class="note">The attribute can be set or removed dynamically,
   with the rendering updating in tandem.</p>
 
   <div class="example">
 
    <p>In this example, the site's navigation is embedded using a
    client-side include using an <code>iframe</code>. Any links in the
    <code>iframe</code> will, in new user agents, be automatically
    opened in the <code>iframe</code>'s parent browsing context; for
    legacy user agents, the site could also include a <code>base</code>
@@ -18081,28 +19350,32 @@ href="?audio">audio&lt;/a> test instead.)&lt;/p></pre>
   have any bright ideas?</span></p>
   <!--XXX
     Gotta handle <script> elements inside <iframe>s that screw around with the DOM on the fly, or that use document.write().
     Gotta handle <iframe> elements created from script with text contents.
     Gotta handle the XML case.
    -->
 
   <p class="note">The <span>HTML parser</span> treats markup inside
   <code>iframe</code> elements as text.</p>
 
+  <div class="impl">
+
   <p>The DOM attributes <dfn
   title="dom-iframe-src"><code>src</code></dfn>, <dfn
   title="dom-iframe-name"><code>name</code></dfn>, <dfn
   title="dom-iframe-sandbox"><code>sandbox</code></dfn>, and <dfn
   title="dom-iframe-seamless"><code>seamless</code></dfn> must
   <span>reflect</span> the respective content attributes of the same
   name.</p>
 
+  </div>
+
 
   <h4>The <dfn><code>embed</code></dfn> element</h4>
 
 <!--
  XXX we have all kinds of quirks we should define, as e.g. shown in:
  http://mxr.mozilla.org/mozilla-central/source/layout/generic/nsObjectFrame.cpp
  http://trac.webkit.org/browser/trunk/WebCore/html/HTMLEmbedElement.cpp
  http://trac.webkit.org/browser/trunk/WebCore/rendering/RenderPartObject.cpp (updateWidget)
  e.g. - 240x200 default
       - the attributes/params are sent in a name/value pair list as follows (for Gecko):
@@ -18132,23 +19405,25 @@ href="?audio">audio&lt;/a> test instead.)&lt;/p></pre>
    <dd><code title="attr-dim-height">height</code></dd>
    <dd>Any other attribute that has no namespace (see prose).</dd>
    <dt>DOM interface:</dt>
    <dd>
 <pre class="idl">interface <dfn>HTMLEmbedElement</dfn> : <span>HTMLElement</span> {
            attribute DOMString <span title="dom-embed-src">src</span>;
            attribute DOMString <span title="dom-embed-type">type</span>;
            attribute DOMString <span title="dom-dim-width">width</span>;
            attribute DOMString <span title="dom-dim-height">height</span>;
 };</pre>
+    <div class="impl">
     <p>Depending on the type of content instantiated by the
     <code>embed</code> element, the node may also support other
     interfaces.</p>
+    </div>
    </dd>
   </dl>
 
   <p>The <code>embed</code> element <span>represents</span> an
   integration point for an external (typically non-HTML) application
   or interactive content.</p>
 
   <p>The <dfn title="attr-embed-src"><code>src</code></dfn> attribute
   gives the address of the resource being embedded. The attribute, if
   present, must contain a <span>valid URL</span>.</p>
@@ -18157,20 +19432,22 @@ href="?audio">audio&lt;/a> test instead.)&lt;/p></pre>
   attribute, if present, gives the MIME type of the plugin to
   instantiate.  The value must be a valid MIME type, optionally with
   parameters. If both the <code title="attr-embed-type">type</code>
   attribute and the <code title="attr-embed-src">src</code> attribute
   are present, then the <code title="attr-embed-type">type</code>
   attribute must specify the same type as the <span
   title="Content-Type">explicit Content-Type metadata</span> of the
   resource given by the <code title="attr-embed-src">src</code>
   attribute. <a href="#refsRFC2046">[RFC2046]</a></p>
 
+  <div class="impl">
+
   <p>When the element is created with neither a <code
   title="attr-embed-src">src</code> attribute nor a <code
   title="attr-embed-type">type</code> attribute, and when attributes
   are removed such that neither attribute is present on the element
   anymore, any plugins instantiated for the element must be removed,
   and the <code>embed</code> element represents nothing.</p>
 
   <p id="sandboxPluginEmbed">When the <span>sandboxed plugins browsing
   context flag</span> is set on the <span>browsing context</span> for
   which the <code>embed</code> element's document is the <span>active
@@ -18266,53 +19543,63 @@ href="?audio">audio&lt;/a> test instead.)&lt;/p></pre>
   title="attr-embed-src">src</code> attribute, and whenever the <code
   title="attr-embed-type">type</code> attribute is subsequently set,
   so long as no <code title="attr-embed-src">src</code> attribute is
   set, and whenever the <code title="attr-embed-src">src</code>
   attribute is removed when the element has a <code
   title="attr-embed-type">type</code> attribute, if the element is not
   in a sandboxed browsing context, user agents should find and
   instantiate an appropriate <span>plugin</span> based on the value of
   the <code title="attr-embed-type">type</code> attribute.</p>
 
+  </div>
+
   <p>Any (namespace-less) attribute may be specified on the
   <code>embed</code> element, so long as its name is
   <span>XML-compatible</span> and contains no characters in the range
   U+0041 .. U+005A (LATIN CAPITAL LETTER A LATIN CAPITAL LETTER
   Z).</p>
 
   <p class="note">All attributes in <span>HTML documents</span> get
   lowercased automatically, so the restriction on uppercase letters
   doesn't affect such documents.</p>
 
+  <div class="impl">
+
   <p>The user agent should pass the names and values of all the
   attributes of the <code>embed</code> element that have no namespace
   to the <span>plugin</span> used, when it is instantiated.</p>
 
   <p>If the <span>plugin</span> instantiated for the
   <code>embed</code> element supports a scriptable interface, the
   <code>HTMLEmbedElement</code> object representing the element should
   expose that interface while the element is instantiated.</p>
 
   <p>The <code>embed</code> element has no <span>fallback
   content</span>. If the user agent can't find a suitable plugin, then
   the user agent must use a default plugin. (This default could be as
   simple as saying "Unsupported Format".)</p>
 
+  </div>
+
   <p>The <code>embed</code> element supports <span>dimension
   attributes</span>.</p>
 
+  <div class="impl">
+
   <p>The DOM attributes <dfn
   title="dom-embed-src"><code>src</code></dfn> and <dfn
   title="dom-embed-type"><code>type</code></dfn> each must
   <span>reflect</span> the respective content attributes of the same
   name.</p>
 
+  </div>
+
 
   <h4>The <dfn><code>object</code></dfn> element</h4>
 
   <dl class="element">
    <dt>Categories</dt>
    <dd><span>Flow content</span>.</dd>
    <dd><span>Phrasing content</span>.</dd>
    <dd><span>Embedded content</span>.</dd>
    <dd><span title="category-listed">Listed</span>,  <span title="category-submit">submittable</span>, <span>form-associated element</span>.</dd>
    <dt>Contexts in which this element may be used:</dt>
@@ -18336,51 +19623,56 @@ href="?audio">audio&lt;/a> test instead.)&lt;/p></pre>
            attribute DOMString <span title="dom-object-name">name</span>;
            attribute DOMString <span title="dom-object-useMap">useMap</span>;
   readonly attribute <span>HTMLFormElement</span> <span title="dom-fae-form">form</span>;
            attribute DOMString <span title="dom-dim-width">width</span>;
            attribute DOMString <span title="dom-dim-height">height</span>;
 <!-- XXX we should bring these back since the Window spec has atrophied
   readonly attribute Document <span title="dom-object-contentDocument">contentDocument</span>;
   readonly attribute <span>WindowProxy</span> <span title="dom-object-contentWindow">contentWindow</span>;
 -->};</pre>
     <p>Objects implementing the <code>HTMLObjectElement</code>
-    interface must also implement the <code>EmbeddingElement</code>
-    interface defined in the Window Object specification. <a
-    href="#refsWINDOW">[WINDOW]</a></p>
+    interface <span class="impl">must</span> also implement the
+    <code>EmbeddingElement</code> interface defined in the Window
+    Object specification. <a href="#refsWINDOW">[WINDOW]</a></p>
+    <div class="impl">
     <p>Depending on the type of content instantiated by the
     <code>object</code> element, the node may also support other
     interfaces.</p>
+    </div>
    </dd>
   </dl>
 
   <p>The <code>object</code> element can represent an external
   resource, which, depending on the type of the resource, will either
-  be treated as an image, as a nested <span>browsing context</span>,
+  be treated as an image, as a <span>nested browsing context</span>,
   or as an external resource to be processed by a
   <span>plugin</span>.</p>
 
   <p>The <dfn title="attr-object-data"><code>data</code></dfn>
   attribute, if present, specifies the address of the resource. If
   present, the attribute must be a <span>valid URL</span>.</p>
 
   <p>The <dfn title="attr-object-type"><code>type</code></dfn>
   attribute, if present, specifies the type of the resource. If
   present, the attribute must be a valid MIME type, optionally with
   parameters. <a href="#refsRFC2046">[RFC2046]</a></p>
 
   <p>One or both of the <code title="attr-object-data">data</code> and
   <code title="attr-object-type">type</code> attributes must be
   present.</p>
 
   <p>The <dfn title="attr-object-name"><code>name</code></dfn>
   attribute, if present, must be a <span>valid browsing context
-  name</span>.</p>
+  name</span>. The given value is used to name the <span>nested
+  browsing context</span>, if applicable.</p>
+
+  <div class="impl">
 
   <p>When the element is created, and subsequently whenever the <code
   title="attr-object-classid">classid</code> attribute changes or is
   removed, or, if the <code title="attr-object-classid">classid</code>
   attribute is not present, whenever the <code
   title="attr-object-data">data</code> attribute changes or is
   removed, or, if neither <code
   title="attr-object-classid">classid</code> attribute nor the <code
   title="attr-object-data">data</code> attribute are present, whenever
   the <code title="attr-object-type">type</code> attribute changes or
@@ -18688,45 +19980,55 @@ href="?audio">audio&lt;/a> test instead.)&lt;/p></pre>
 -->
 
   <p>Whenever the <code title="attr-object-name">name</code> attribute
   is set, if the <code>object</code> element has a nested
   <span>browsing context</span>, its <span title="browsing context
   name">name</span> must be changed to the new value. If the attribute
   is removed, if the <code>object</code> element has a <span>browsing
   context</span>, the <span>browsing context name</span> must be set
   to the empty string.</p>
 
+  </div>
+
   <p>The <code title="attr-hyperlink-usemap">usemap</code> attribute,
   if present while the <code>object</code> element represents an
   image, can indicate that the object has an associated <span>image
-  map</span>. The attribute must be ignored if the <code>object</code>
-  element doesn't represent an image.</p>
+  map</span>. <span class="impl">The attribute must be ignored if the
+  <code>object</code> element doesn't represent an image.</span></p>
 
   <p>The <code title="attr-fae-form">form</code> attribute is used to
   explicitly associate the <code>object</code> element with its
   <span>form owner</span>.</p>
 
+  <div class="impl">
+
   <p><strong>Constraint validation:</strong> <code>object</code>
   elements are always <span>barred from constraint
   validation</span>.</p>
 
+  </div>
+
   <p>The <code>object</code> element supports <span>dimension
   attributes</span>.</p>
 
+  <div class="impl">
+
   <p>The DOM attributes <dfn
   title="dom-object-data"><code>data</code></dfn>, <dfn
   title="dom-object-type"><code>type</code></dfn>, <dfn
   title="dom-object-name"><code>name</code></dfn>, and <dfn
   title="dom-object-useMap"><code>useMap</code></dfn> each must
   <span>reflect</span> the respective content attributes of the same
   name.</p>
 
+  </div>
+
   <div class="example">
 
    <p>In the following example, a Java applet is embedded in a page
    using the <code>object</code> element. (Generally speaking, it is
    better to avoid using applets like these and instead use native
    JavaScript and HTML to provide the functionality, since that way
    the application will work on all Web browsers without requiring a
    third-party plugin. Many devices, especially embedded devices, do
    not support third-party technologies like Java.)</p>
 
@@ -18747,21 +20049,20 @@ href="?audio">audio&lt;/a> test instead.)&lt;/p></pre>
 
    <pre>&lt;figure>
  &lt;object data="clock.html">&lt;/object>
  &lt;legend>My HTML Clock&lt;/legend>
 &lt;/figure></pre>
 
   </div>
 
 
 
-
   <h4>The <dfn><code>param</code></dfn> element</h4>
 
   <dl class="element">
    <dt>Categories</dt>
    <dd>None.</dd>
    <dt>Contexts in which this element may be used:</dt>
    <dd>As a child of an <code>object</code> element, before any <span>flow content</span>.</dd>
    <dt>Content model:</dt>
    <dd>Empty.</dd>
    <dt>Content attributes:</dt>
@@ -18782,32 +20083,36 @@ href="?audio">audio&lt;/a> test instead.)&lt;/p></pre>
   title="represents">represent</span> anything on its own.</p>
 
   <p>The <dfn title="attr-param-name"><code>name</code></dfn>
   attribute gives the name of the parameter.</p>
 
   <p>The <dfn title="attr-param-value"><code>value</code></dfn>
   attribute gives the value of the parameter.</p>
 
   <p>Both attributes must be present. They may have any value.</p>
 
+  <div class="impl">
+
   <p>If both attributes are present, and if the parent element of the
   <code>param</code> is an <code>object</code> element, then the
   element defines a <dfn
   title="concept-param-parameter">parameter</dfn> with the given
   name/value pair.</p>
 
   <p>The DOM attributes <dfn
   title="dom-param-name"><code>name</code></dfn> and <dfn
   title="dom-param-value"><code>value</code></dfn> must both
   <span>reflect</span> the respective content attributes of the same
   name.</p>
 
+  </div>
+
 
 
   <h4 id="video">The <dfn><code>video</code></dfn> element</h4>
 
   <dl class="element">
    <dt>Categories</dt>
    <dd><span>Flow content</span>.</dd>
    <dd><span>Phrasing content</span>.</dd>
    <dd><span>Embedded content</span>.</dd>
    <dd>If the element has a <code title="attr-media-controls">controls</code> attribute: <span>Interactive content</span>.</dd>
@@ -18834,25 +20139,25 @@ href="?audio">audio&lt;/a> test instead.)&lt;/p></pre>
   readonly attribute unsigned long <span title="dom-video-videoWidth">videoWidth</span>;
   readonly attribute unsigned long <span title="dom-video-videoHeight">videoHeight</span>;
            attribute DOMString <span title="dom-video-poster">poster</span>;
 };</pre>
    </dd>
   </dl>
 
   <p>A <code>video</code> element represents a video or movie.</p>
 
   <p>Content may be provided inside the <code>video</code>
-  element. User agents should not show this content to the user; it is
-  intended for older Web browsers which do not support
-  <code>video</code>, so that legacy video plugins can be tried, or to
-  show text to the users of these older browser informing them of how
-  to access the video contents.</p>
+  element<span class="impl">. User agents should not show this content
+  to the user</span>; it is intended for older Web browsers which do
+  not support <code>video</code>, so that legacy video plugins can be
+  tried, or to show text to the users of these older browser informing
+  them of how to access the video contents.</p>
 
   <p class="note">In particular, this content is not <i>fallback
   content</i> intended to address accessibility concerns. To make
   video content accessible to the blind, deaf, and those with other
   physical or cognitive disabilities, authors are expected to provide
   alternative media streams and/or to embed accessibility aids (such
   as caption or subtitle tracks) into their media streams.</p>
 
   <p>The <code>video</code> element is a <span>media element</span>
   whose <span>media data</span> is ostensibly video data, possibly
@@ -18862,36 +20167,38 @@ href="?audio">audio&lt;/a> test instead.)&lt;/p></pre>
   title="attr-media-autobuffer">autobuffer</code>, <code
   title="attr-media-autoplay">autoplay</code>, <code
   title="attr-media-loop">loop</code>, and <code
   title="attr-media-controls">controls</code> attributes are <span
   title="media element attributes">the attributes common to all media
   elements</span>.</p>
 
   <p>The <dfn title="attr-video-poster"><code>poster</code></dfn>
   attribute gives the address of an image file that the user agent can
   show while no video data is available. The attribute, if present,
-  must contain a <span>valid URL</span>. If the specified resource is
-  to be used, then, when the element is created or when the <code
-  title="attr-video-poster">poster</code> attribute is set, its value
-  must be <span title="resolve a url">resolved</span> relative to the
-  element, and if that is successful, the resulting <span>absolute
-  URL</span> must be <span title="fetch">fetched</span>. The
-  <dfn>poster frame</dfn> is then the image obtained from that
-  resource, if any.</p> <!-- thus it is unaffected by changes to the
-  base URL. -->
+  must contain a <span>valid URL</span>. <span class="impl">If the
+  specified resource is to be used, then, when the element is created
+  or when the <code title="attr-video-poster">poster</code> attribute
+  is set, its value must be <span title="resolve a
+  url">resolved</span> relative to the element, and if that is
+  successful, the resulting <span>absolute URL</span> must be <span
+  title="fetch">fetched</span>. The <dfn>poster frame</dfn> is then
+  the image obtained from that resource, if any.</span></p> <!-- thus
+  it is unaffected by changes to the base URL. -->
 
   <p class="note">The image given by the <code
   title="attr-video-poster">poster</code> attribute, the <i>poster
   frame</i>, is intended to be a representative frame of the video
   (typically one of the first non-blank frames) that gives the user an
   idea of what the video is like.</p>
 
+  <div class="impl">
+
   <p>The <dfn title="dom-video-poster"><code>poster</code></dfn> DOM
   attribute must <span>reflect</span> the <code
   title="attr-video-poster">poster</code> content attribute.</p>
 
   <hr>
 
   <p>When no video data is available (the element's <code
   title="dom-media-readyState">readyState</code> attribute is either
   <code title="dom-media-HAVE_NOTHING">HAVE_NOTHING</code>, or <code
   title="dom-media-HAVE_METADATA">HAVE_METADATA</code> but no video
@@ -18946,20 +20253,38 @@ href="?audio">audio&lt;/a> test instead.)&lt;/p></pre>
   detailed information) by overlaying text or icons on the video or
   other areas of the element's playback area, or in another
   appropriate manner.</p>
 
   <p>User agents that cannot render the video may instead make the
   element <span title="represents">represent</span> a link to an
   external video playback utility or to the video data itself.</p>
 
   <hr>
 
+  </div>
+
+  <dl class="domintro">
+
+   <dt><var title="">video</var> . <code title="dom-video-videoWidth">videoWidth</code></dt>
+   <dt><var title="">video</var> . <code title="dom-video-videoHeight">videoHeight</code></dt>
+
+   <dd>
+
+    <p>These attributes return the intrinsic dimensions of the video,
+    or zero if the dimensions are not known.</p>
+
+   </dd>
+
+  </dl>
+
+  <div class="impl">
+
   <p>The <dfn title="concept-video-intrinsic-width">intrinsic
   width</dfn> and <dfn
   title="concept-video-intrinsic-height">intrinsic height</dfn> of the
   <span>media resource</span> are the dimensions of the resource in
   CSS pixels after taking into account the resource's dimensions,
   aspect ratio, clean aperture, resolution, and so forth, as defined
   for the format used by the resource.</p>
 
   <p>The <dfn
   title="dom-video-videoWidth"><code>videoWidth</code></dfn> DOM
@@ -18967,23 +20292,27 @@ href="?audio">audio&lt;/a> test instead.)&lt;/p></pre>
   title="concept-video-intrinsic-width">intrinsic width</span> of the
   video in CSS pixels. The <dfn
   title="dom-video-videoHeight"><code>videoHeight</code></dfn> DOM
   attribute must return the <span
   title="concept-video-intrinsic-height">intrinsic height</span> of
   the video in CSS pixels. If the element's <code
   title="dom-media-readyState">readyState</code> attribute is <code
   title="dom-media-HAVE_NOTHING">HAVE_NOTHING</code>, then the
   attributes must return 0.</p>
 
+  </div>
+
   <p>The <code>video</code> element supports <span>dimension
   attributes</span>.</p>
 
+  <div class="impl">
+
   <p>Video content should be rendered inside the element's playback
   area such that the video content is shown centered in the playback
   area at the largest possible size that fits completely within it,
   with the video content's aspect ratio being preserved. Thus, if the
   aspect ratio of the playback area does not match the aspect ratio of
   the video, the video will be shown letterboxed or pillarboxed. Areas
   of the element's playback area that do not contain the video
   represent nothing.</p>
 
   <p>The intrinsic width of a <code>video</code> element's playback
@@ -19029,22 +20358,26 @@ href="?audio">audio&lt;/a> test instead.)&lt;/p></pre>
   <p class="warning">User agents should not provide a public API to
   cause videos to be shown full-screen. A script, combined with a
   carefully crafted video file, could trick the user into thinking a
   system-modal dialog had been shown, and prompt the user for a
   password. There is also the danger of "mere" annoyance, with pages
   launching full-screen videos when links are clicked or pages
   navigated. Instead, user-agent specific interface features may be
   provided to easily allow the user to obtain a full-screen playback
   mode.</p>
 
+  </div>
+
 
 
+  <div class="impl">
+
   <h5>Video and audio codecs for <code>video</code> elements</h5>
 
   <p>User agents may support any video and audio codecs and container
   formats.</p>
 
   <p class="XXX">It would be helpful for interoperability if all
   browsers could support the same codecs. However, there are no known
   codecs that satisfy all the current players: we need a codec that is
   known to not require per-unit or per-distributor licensing, that is
   compatible with the open source development model, that is of
@@ -19052,20 +20385,21 @@ href="?audio">audio&lt;/a> test instead.)&lt;/p></pre>
   submarine patent risk for large companies. This is an ongoing issue
   and this section will be updated once more information is
   available.</p>
 
   <!-- XXX mention that this spec doesn't require native support or
   plugin support, either is fine -->
 
   <p class="note">Certain user agents might support no codecs at all,
   e.g. text browsers running over SSH connections.</p>
 
+  </div>
 
 
 
 
 
   <h4 id="audio">The <dfn><code>audio</code></dfn> element</h4>
 
   <dl class="element">
    <dt>Categories</dt>
    <dd><span>Flow content</span>.</dd>
@@ -19091,82 +20425,106 @@ href="?audio">audio&lt;/a> test instead.)&lt;/p></pre>
 interface <dfn>HTMLAudioElement</dfn> : <span>HTMLMediaElement</span> {
   // no members
 };</pre>
    </dd>
   </dl>
 
   <p>An <code>audio</code> element <span>represents</span> a sound or
   audio stream.</p>
 
   <p>Content may be provided inside the <code>audio</code>
-  element. User agents should not show this content to the user; it is
-  intended for older Web browsers which do not support
-  <code>audio</code>, so that legacy audio plugins can be tried, or to
-  show text to the users of these older browser informing them of how
-  to access the audio contents.</p>
+  element<span class="impl">. User agents should not show this content
+  to the user</span>; it is intended for older Web browsers which do
+  not support <code>audio</code>, so that legacy audio plugins can be
+  tried, or to show text to the users of these older browser informing
+  them of how to access the audio contents.</p>
 
   <p class="note">In particular, this content is not <i>fallback
   content</i> intended to address accessibility concerns. To make
   audio content accessible to the deaf or to those with other physical
   or cognitive disabilities, authors are expected to provide
   alternative media streams and/or to embed accessibility aids (such
   as transcriptions) into their media streams.</p>
 
   <p>The <code>audio</code> element is a <span>media element</span>
   whose <span>media data</span> is ostensibly audio data.</p>
 
   <p>The <code title="attr-media-src">src</code>, <code
   title="attr-media-autobuffer">autobuffer</code>, <code
   title="attr-media-autoplay">autoplay</code>, <code
   title="attr-media-loop">loop</code>, and <code
   title="attr-media-controls">controls</code> attributes are <span
   title="media element attributes">the attributes common to all media
   elements</span>.</p>
- 
+
+  <div class="impl">
+
   <p>When an <code>audio</code> element is <span>potentially
   playing</span>, it must have its audio data played synchronized with
   the <span>current playback position</span>, at the specified <span
   title="dom-media-volume">volume</span> with the specified <span
   title="dom-media-muted">mute state</span>.</p>
 
   <p>When an <code>audio</code> element is not <span>potentially
   playing</span>, audio must not play for the element.</p>
 
+  </div>
+
+  <dl class="domintro">
+
+   <dt><var title="">audio</var> = new <code title="dom-Audio">Audio</code>( [ <var title="">url</var> ] )</dt>
+
+   <dd>
+
+    <p>Returns a new <code>audio</code> element, with the <code
+    title="attr-media-src">src</code> attribute set to the value
+    passed in the argument, if applicable.</p>
+
+   </dd>
+
+  </dl>
+
+  <div class="impl">
+
   <p>Two constructors are provided for creating
   <code>HTMLAudioElement</code> objects (in addition to the factory
   methods from DOM Core such as <code
   title="">createElement()</code>): <dfn
   title="dom-Audio"><code>Audio()</code></dfn> and <dfn
   title="dom-Audio-s"><code>Audio(<var
   title="">src</var>)</code></dfn>. When invoked as constructors,
   these must return a new <code>HTMLAudioElement</code> object (a new
   <code>audio</code> element). If the <var title="">src</var> argument
   is present, the object created must have its <code
   title="dom-media-src">src</code> content attribute set to the
   provided value, and the user agent must asynchronously invoke the
   object's <span title="concept-media-load-algorithm">resource
   selection algorithm</span> before returning.</p>
 
+  </div>
 
 
 
+  <div class="impl">
+
   <h5>Audio codecs for <code>audio</code> elements</h5>
 
   <p>User agents may support any audio codecs and container
   formats.</p>
 
   <p>User agents must support the WAVE container format with audio
   encoded using the PCM format. <!-- XXX references? #refs --> </p>
 
   <!-- XXX mention that this spec doesn't require native support or
   plugin support, either is fine -->
 
+  </div>
 
 
   <h4>The <dfn><code>source</code></dfn> element</h4>
 
   <dl class="element">
    <dt>Categories</dt>
    <dd>None.</dd>
    <dt>Contexts in which this element may be used:</dt>
    <dd>As a child of a <span>media element</span>, before any <span>flow content</span>.</dd>
    <dt>Content model:</dt>
@@ -19299,27 +20657,31 @@ interface <dfn>HTMLAudioElement</dfn> : <span>HTMLMediaElement</span> {
 
   </div>
 
   <p>The <dfn title="attr-source-media"><code>media</code></dfn>
   attribute gives the intended media type of the <span>media
   resource</span>, to help the user agent determine if this
   <span>media resource</span> is useful to the user before fetching
   it. Its value must be a valid <a href="#mq">media query</a>. <a
   href="#refsMQ">[MQ]</a></p>
 
+  <div class="impl">
+
   <p>The DOM attributes <dfn
   title="dom-source-src"><code>src</code></dfn>, <dfn
   title="dom-source-type"><code>type</code></dfn>, and <dfn
   title="dom-source-media"><code>media</code></dfn> must
   <span>reflect</span> the respective content attributes of the same
   name.</p>
 
+  </div>
+
 
 
   <h4>Media elements</h4>
 
   <p><dfn title="media element">Media elements</dfn> implement the
   following interface:</p>
 
   <pre class="idl">interface <dfn>HTMLMediaElement</dfn> : <span>HTMLElement</span> {
 
   // error state
@@ -19429,49 +20791,89 @@ interface <dfn>CueRangeCallback</dfn> {
   -->
 
   <p><span title="media element">Media elements</span> are used to
   present audio data, or video and audio data, to the user. This is
   referred to as <dfn>media data</dfn> in this section, since this
   section applies equally to <span title="media element">media
   elements</span> for audio or for video. The term <dfn>media
   resource</dfn> is used to refer to the complete set of media data,
   e.g. the complete video file, or complete audio file.</p>
 
+  <div class="impl">
+
   <p>Unless otherwise specified, the <span>task source</span> for all
   the tasks <span title="queue a task">queued</span> in this section
   and its subsections is the <dfn>media element event task
   source</dfn>.</p>
 
+  </div>
+
+
 
   <h5>Error codes</h5>
 
+  <dl class="domintro">
+
+   <dt><var title="">media</var> . <code title="dom-media-error">error</code></dt>
+
+   <dd>
+
+    <p>Returns a <code>MediaError</code> object representing the
+    current error state of the element.</p>
+
+    <p>Returns null if there is no error.</p>
+
+   </dd>
+
+  </dl>
+
+  <div class="impl">
+
   <p>All <span title="media element">media elements</span> have an
   associated error status, which records the last error the element
   encountered since its <span
   title="concept-media-load-algorithm">resource selection
   algorithm</span> was last invoked. The <dfn
   title="dom-media-error"><code>error</code></dfn> attribute, on
   getting, must return the <code>MediaError</code> object created for
   this last error, or null if there has not been an error.</p>
 
+  </div>
+
   <pre class="idl">interface <dfn>MediaError</dfn> {
   const unsigned short <span title="dom-MediaError-MEDIA_ERR_ABORTED">MEDIA_ERR_ABORTED</span> = 1;
   const unsigned short <span title="dom-MediaError-MEDIA_ERR_NETWORK">MEDIA_ERR_NETWORK</span> = 2;
   const unsigned short <span title="dom-MediaError-MEDIA_ERR_DECODE">MEDIA_ERR_DECODE</span> = 3;
   const unsigned short <span title="dom-MediaError-MEDIA_ERR_NONE_SUPPORTED">MEDIA_ERR_NONE_SUPPORTED</span> = 4;
   readonly attribute unsigned short <span title="dom-MediaError-code">code</span>;
 };</pre>
 
+  <dl class="domintro">
+
+   <dt><var title="">media</var> . <code title="dom-media-error">error</code> . <code title="dom-MediaError-code">code</code></dt>
+
+   <dd>
+
+    <p>Returns the current error's error code, from the list below.</p>
+
+   </dd>
+
+  </dl>
+
+  <div class="impl">
+
   <p>The <dfn title="dom-MediaError-code"><code>code</code></dfn>
   attribute of a <code>MediaError</code> object must return the code
   for the error, which must be one of the following:</p>
 
+  </div>
+
   <dl>
 
    <dt><dfn title="dom-MediaError-MEDIA_ERR_ABORTED"><code>MEDIA_ERR_ABORTED</code></dfn> (numeric value 1)</dt>
 
    <dd>The fetching process for the <span>media resource</span> was
    aborted by the user agent at the user's request.</dd>
 
    <dt><dfn title="dom-MediaError-MEDIA_ERR_NETWORK"><code>MEDIA_ERR_NETWORK</code></dfn> (numeric value 2)</dt>
 
    <dd>A network error of some description caused the user agent to
@@ -19492,31 +20894,53 @@ interface <dfn>CueRangeCallback</dfn> {
 
 
 
   <h5>Location of the media resource</h5>
 
   <p>The <dfn title="attr-media-src"><code>src</code></dfn> content
   attribute on <span title="media element">media elements</span> gives
   the address of the media resource (video, audio) to show. The
   attribute, if present, must contain a <span>valid URL</span>.</p>
 
+  <div class="impl">
+
   <p>The <dfn title="dom-media-src"><code>src</code></dfn> DOM
   attribute on <span title="media element">media elements</span> must
   <span>reflect</span> the respective content attribute of the same
   name.</p>
 
+  </div>
+
+  <dl class="domintro">
+
+   <dt><var title="">media</var> . <code title="dom-media-currentSrc">currentSrc</code></dt>
+
+   <dd>
+
+    <p>Returns the address of the current <span>media resource</span>.</p>
+
+    <p>Returns the empty string when there is no <span>media resource</span>.</p>
+
+   </dd>
+
+  </dl>
+
+  <div class="impl">
+
   <p>The <dfn
   title="dom-media-currentSrc"><code>currentSrc</code></dfn> DOM
   attribute is initially the empty string. Its value is changed by the
   <span title="concept-media-load-algorithm">resource selection
   algorithm</span> defined below.</p>
 
+  </div>
+
   <p class="note">There are two ways to specify a <span>media
   resource</span>, the <code title="attr-media-src">src</code>
   attribute, or <code>source</code> elements. The attribute overrides
   the elements.</p>
 
 
 
   <h5>Media types</h5>
 
   <p>A <span>media resource</span> can be described in terms of its
@@ -19533,34 +20957,52 @@ interface <dfn>CueRangeCallback</dfn> {
   bitrate (only the maximum bitrate). Thus, given a type, a user agent
   can often only know whether it <em>might</em> be able to play
   media of that type (with varying levels of confidence), or whether
   it definitely <em>cannot</em> play media of that type.</p>
 
   <p><dfn>A type that the user agent knows it cannot render</dfn> is
   one that describes a resource that the user agent definitely does
   not support, for example because it doesn't recognise the container
   type, or it doesn't support the listed codecs.</p>
 
+  <dl class="domintro">
+
+   <dt><var title="">media</var> . <code title="dom-navigator-canPlayType">canPlayType</code>(<var title="">type</var>)</dt>
+
+   <dd>
+
+    <p>Returns "no", "maybe", or "probably" based on how confident the
+    user agent is that it can play media resources of the given
+    type.</p>
+
+   </dd>
+
+  </dl>
+
+  <div class="impl">
+
   <p>The <dfn title="dom-navigator-canPlayType"><code>canPlayType(<var
   title="">type</var>)</code></dfn> method must return the string
   "<code title="">no</code>" if <var title="">type</var> is <span>a
   type that the user agent knows it cannot render</span>; it must
   return "<code title="">probably</code>" if the user agent is
   confident that the type represents a <span>media resource</span>
   that it can render if used in with this <code>audio</code> or
   <code>video</code> element; and it must return "<code
   title="">maybe</code>" otherwise. Implementors are encouraged to
   return "<code title="">maybe</code>" unless the type can be
   confidently established as being supported or not. Generally, a user
   agent should never return "<code title="">probably</code>" if the
   type doesn't have a <code title="">codecs</code> parameter.</p>
 
+  </div>
+
   <div class="example">
 
    <p>This script tests to see if the user agent supports a
    (fictional) new format to dynamically decide whether to use a
    <code>video</code> element or a plugin:</p>
 
    <pre>&lt;section id="video">
  &lt;p>&lt;a href="playing-cats.nfv">Download video&lt;/a>&lt;/p>
 &lt;/section>
 &lt;script>
@@ -19588,72 +21030,111 @@ interface <dfn>CueRangeCallback</dfn> {
   </div>
 
   <p class="note">To express the type of a <span>media resource</span>
   to allow the user agent to avoid downloading resources it can't
   render, authors can use the <code>source</code> element's <code
   title="attr-source-type">type</code> attribute.</p>
 
 
   <h5>Network states</h5>
 
+  <dl class="domintro">
+
+   <dt><var title="">media</var> . <code title="dom-media-networkState">networkState</code></dt>
+
+   <dd>
+
+    <p>Returns the current state of network activity for the element,
+    from the codes in the list below.</p>
+
+   </dd>
+
+  </dl>
+
+  <div class="impl">
+
   <p>As <span title="media element">media elements</span> interact
   with the network, their current network activity is represented by
   the <dfn
   title="dom-media-networkState"><code>networkState</code></dfn>
   attribute. On getting, it must return the current network state of
   the element, which must be one of the following values:</p>
 
+  </div>
+
   <dl>
 
    <dt><dfn title="dom-media-NETWORK_EMPTY"><code>NETWORK_EMPTY</code></dfn> (numeric value 0)</dt>
 
    <dd>The element has not yet been initialized. All attributes are in
    their initial states.</dd>
 
    <dt><dfn title="dom-media-NETWORK_IDLE"><code>NETWORK_IDLE</code></dfn> (numeric value 1)</dt>
 
-   <dd>The element's <span
+   <dd>The element<span class="impl">'s <span
    title="concept-media-load-algorithm">resource selection
-   algorithm</span> is active and has selected a resource, but it is
-   not actually using the network at this time.</dd>
+   algorithm</span> is active and</span> has selected a <span
+   title="media resource">resource</span>, but it is not actually
+   using the network at this time.</dd>
 
    <dt><dfn title="dom-media-NETWORK_LOADING"><code>NETWORK_LOADING</code></dfn> (numeric value 2)</dt>
 
    <dd>The user agent is actively trying to download data.</dd>
 
    <dt><dfn title="dom-media-NETWORK_LOADED"><code>NETWORK_LOADED</code></dfn> (numeric value 3)</dt>
 
    <dd>The entire <span>media resource</span> has been obtained and is
    available to the user agent locally. Network connectivity could be
    lost without affecting the media playback.</dd>
 
    <dt><dfn title="dom-media-NETWORK_NO_SOURCE"><code>NETWORK_NO_SOURCE</code></dfn> (numeric value 4)</dt>
 
-   <dd>The element's <span
+   <dd>The element<span class="impl">'s <span
    title="concept-media-load-algorithm">resource selection
-   algorithm</span> is active, but it has failed to find a resource to
-   use.</dd>
+   algorithm</span> is active, but it</span> has failed to find a
+   <span title="media resource">resource</span> to use.</dd>
 
   </dl>
 
+  <div class="impl">
+
   <p>The <span title="concept-media-load-algorithm">resource selection
   algorithm</span> defined below describes exactly when the <code
   title="dom-media-networkState">networkState</code> attribute changes
   value and what events fire to indicate changes in this state.</p>
 
+  </div>
+
   <p class="note">Some resources, e.g. streaming Web radio, can never
   reach the <code
   title="dom-media-NETWORK_LOADED">NETWORK_LOADED</code> state.</p>
 
 
+
+
   <h5>Loading the media resource</h5>
 
+  <dl class="domintro">
+
+   <dt><var title="">media</var> . <code title="dom-media-load">load</code>()</dt>
+
+   <dd>
+
+    <p>Causes the element to reset and start selecting and loading a
+    new <span>media resource</span> from scratch.</p>
+
+   </dd>
+
+  </dl>
+
+  <div class="impl">
+
   <p>All <span title="media element">media elements</span> have an
   <dfn>autoplaying flag</dfn>, which must begin in the true state, and
   a <dfn>delaying-the-load-event flag</dfn>, which must begin in the
   false state. While the <span>delaying-the-load-event flag</span> is
   true, the element must <span>delay the load event</span>.</p>
 
   <p>When the <dfn title="dom-media-load"><code>load()</code></dfn>
   method on a <span>media element</span> is invoked, the user agent
   must run the following steps. Note that this algorithm might get
   aborted, e.g. if the <code title="dom-media-load">load()</code>
@@ -20406,77 +21887,135 @@ interface <dfn>CueRangeCallback</dfn> {
 
   <p>If a <span>media element</span> whose <code
   title="dom-media-networkState">networkState</code> has the value
   <code title="dom-media-NETWORK_EMPTY">NETWORK_EMPTY</code> is <span
   title="insert an element into a document">inserted into a
   document</span>, the user agent must asynchronously invoke the
   <span>media element</span>'s <span
   title="concept-media-load-algorithm">resource selection
   algorithm</span>.</p>
 
+  </div>
+
   <p>The <dfn
   title="attr-media-autobuffer"><code>autobuffer</code></dfn>
   attribute is a <span>boolean attribute</span>. Its presence hints to
   the user agent that the author believes that the <span>media
   element</span> will likely be used, even though the element does not
   have an <code title="attr-media-autoplay">autoplay</code>
   attribute. (The attribute has no effect if used in conjunction with
   the <code title="attr-media-autoplay">autoplay</code> attribute,
-  though including both is not an error.) This attribute may be
-  ignored altogether. The attribute must be ignored if the <code
-  title="attr-media-autoplay">autoplay</code> attribute is
-  present.</p>
+  though including both is not an error.) <span class="impl">This
+  attribute may be ignored altogether. The attribute must be ignored
+  if the <code title="attr-media-autoplay">autoplay</code> attribute
+  is present.</span></p>
+
+  <div class="impl">
 
   <p>The <dfn
   title="dom-media-autobuffer"><code>autobuffer</code></dfn> DOM
   attribute must <span>reflect</span> the content attribute of the
   same name.</p>
 
-<!--v3BUF
+  </div>
+
+<!--v3BUF (when readding this, also add a domintro block)
   <p>The <dfn
   title="dom-media-bufferingRate"><code>bufferingRate</code></dfn>
   attribute must return the average number of bits received per second
   for the current download over the past few seconds. If there is no
   download in progress, the attribute must return 0.</p>
 
   <p>The <dfn
   title="dom-media-bufferingThrottled"><code>bufferingThrottled</code></dfn>
   attribute must return true if the user agent is intentionally
   throttling the bandwidth used by the download (including when
   throttling to zero to pause the download altogether), and false
   otherwise.</p>
 -->
 
+  <dl class="domintro">
+
+   <dt><var title="">media</var> . <code title="dom-media-buffered">buffered</code></dt>
+
+   <dd>
+
+    <p>Returns a <code>TimeRanges</code> object that represents the
+    ranges of the <span>media resource</span> that the user agent has
+    buffered.</p>
+
+   </dd>
+
+  </dl>
+
+  <div class="impl">
+
   <p>The <dfn title="dom-media-buffered"><code>buffered</code></dfn>
   attribute must return a new static <span>normalized
   <code>TimeRanges</code> object</span> that represents the ranges of
   the <span>media resource</span>, if any, that the user agent has
   buffered, at the time the attribute is evaluated. Users agents must
   accurately determine the ranges available, even for media streams
   where this can only be determined by tedious inspection.</p>
 
   <p class="note">Typically this will be a single range anchored at
   the zero point, but if, e.g. the user agent uses HTTP range requests
   in response to seeking, then there could be multiple ranges.</p>
 
   <p>User agents may discard previously buffered data.</p>
 
   <p class="note">Thus, a time position included within a range of the
   objects return by the <code
   title="dom-media-buffered">buffered</code> attribute at one time can
   end up being not included in the range(s) of objects returned by the
   same attribute at later times.</p>
 
+  </div>
+
 
 
   <h5>Offsets into the media resource</h5>
 
+  <dl class="domintro">
+
+   <dt><var title="">media</var> . <code title="dom-media-duration">duration</code></dt>
+
+   <dd>
+
+    <p>Returns the length of the <span>media resource</span>, in
+    seconds.</p>
+
+    <p>Returns NaN if the duration isn't available.<p>
+
+    <p>Returns Infinity for unbounded streams.</p>
+
+   </dd>
+
+   <dt><var title="">media</var> . <code title="dom-media-currentTime">currentTime</code> [ = <var title="">value</var> ]</dt>
+
+   <dd>
+
+    <p>Returns the <span>current playback position</span>, in seconds.</p>
+
+    <p>Can be set, to seek to the given time.<p>
+
+    <p>Will throw an <code>INVALID_STATE_ERR</code> exception if there
+    is no selected <span>media resources</span>. Will throw an
+    <code>INDEX_SIZE_ERR</code> exception if the given time is not
+    within the ranges to which the user agent can seek.</p>
+
+   </dd>
+
+  </dl>
+
+  <div class="impl">
+
   <p>The <dfn title="dom-media-duration"><code>duration</code></dfn>
   attribute must return the length of the <span>media resource</span>,
   in seconds. If no <span>media data</span> is available, then the
   attributes must return the Not-a-Number (NaN) value. If the
   <span>media resource</span> is known to be unbounded (e.g. a
   streaming radio), then the attribute must return the positive
   Infinity value.</p>
 
   <p>The user agent must determine the duration of the <span>media
   resource</span> before playing any part of the <span>media
@@ -20521,45 +22060,69 @@ interface <dfn>CueRangeCallback</dfn> {
   <dfn><var>earliest possible position</var></dfn> is the earliest
   position in the stream that the user agent can ever obtain
   again.</p>
 
   <p>When the <var>earliest possible position</var> changes, if the
   the <span>current playback position</span> is before the
   <var>earliest possible position</var>, the user agent must <span
   title="dom-media-seek">seek</span> to the <var>earliest possible
   position</var>.</p>
 
+  </div>
+
   <p>The <dfn title="attr-media-loop"><code>loop</code></dfn>
   attribute is a <span>boolean attribute</span> that, if specified,
   indicates that the <span>media element</span> is to seek back to the
   start of the <span>media resource</span> upon reaching the end.</p>
 
+  <div class="impl">
+
   <p>The <dfn title="dom-media-loop"><code>loop</code></dfn> DOM
   attribute must <span>reflect</span> the content attribute of the
   same name.</p>
 
+  </div>
+
 
 
   <h5>The ready states</h5>
 
+  <dl class="domintro">
+
+   <dt><var title="">media</var> . <code title="dom-media-readyState">readyState</code></dt>
+
+   <dd>
+
+    <p>Returns a value that expresses the current state of the element
+    with respect to rendering the <span>current playback
+    position</span>, from the codes in the list below.</p>
+
+   </dd>
+
+  </dl>
+
+  <div class="impl">
+
   <p><span title="media element">Media elements</span> have a
   <i>ready state</i>, which describes to what degree they are ready
   to be rendered at the <span>current playback position</span>. The
   possible values are as follows; the ready state of a media element
   at any particular time is the greatest value describing the state of
   the element:</p>
 
+  </div>
+
   <dl>
 
    <dt><dfn title="dom-media-HAVE_NOTHING"><code>HAVE_NOTHING</code></dfn> (numeric value 0)</dt>
 
-   <dd>No information regardig the <span>media resource</span> is
+   <dd>No information regarding the <span>media resource</span> is
    available. No data for the <span>current playback position</span>
    is available. <span title="media element">Media elements</span>
    whose <code title="dom-media-networkState">networkState</code>
    attribute is <code
    title="dom-media-NETWORK_EMPTY">NETWORK_EMPTY</code> are always in
    the <code title="dom-media-HAVE_NOTHING">HAVE_NOTHING</code>
    state.</dd>
 
    <dt><dfn title="dom-media-HAVE_METADATA"><code>HAVE_METADATA</code></dfn> (numeric value 1)</dt>
 
@@ -20599,20 +22162,22 @@ interface <dfn>CueRangeCallback</dfn> {
    title="dom-media-HAVE_METADATA">HAVE_METADATA</code> state, and,
    in addition, the user agent estimates that data is being fetched at
    a rate where the <span>current playback position</span>, if it were
    to advance at the rate given by the <code
    title="dom-media-defaultPlaybackRate">defaultPlaybackRate</code>
    attribute, would not overtake the available data before playback
    reaches the end of the <span>media resource</span>.</dd>
 
   </dl>
 
+  <div class="impl">
+
   <p>When the ready state of a <span>media element</span> whose <code
   title="dom-media-networkState">networkState</code> is not <code
   title="dom-media-NETWORK_EMPTY">NETWORK_EMPTY</code> changes, the
   user agent must follow the steps given below:</p>
 
   <dl class="switch">
 
    <!-- going up to metadata -->
    <dt>If the previous ready state was <code
    title="dom-media-HAVE_NOTHING">HAVE_NOTHING</code>, and the new
@@ -20714,52 +22279,92 @@ interface <dfn>CueRangeCallback</dfn> {
     to override the behavior if so desired.</p>
 
     <p>In any case, the user agent must finally <span>queue a
     task</span> to <span>fire a simple event</span> called <code
     title="event-canplaythrough">canplaythrough</code>.</p>
 
    </dd>
 
   </dl>
 
+  </div>
+
   <p class="note">It is possible for the ready state of a media
   element to jump between these states discontinuously. For example,
   the state of a media element can jump straight from <code
   title="dom-media-HAVE_METADATA">HAVE_METADATA</code> to <code
   title="dom-media-HAVE_ENOUGH_DATA">HAVE_ENOUGH_DATA</code> without
   passing through the <code
   title="dom-media-HAVE_CURRENT_DATA">HAVE_CURRENT_DATA</code> and
   <code title="dom-media-HAVE_FUTURE_DATA">HAVE_FUTURE_DATA</code>
   states.</p>
 
+  <div class="impl">
+
   <p>The <dfn
   title="dom-media-readyState"><code>readyState</code></dfn> DOM
   attribute must, on getting, return the value described above that
   describes the current ready state of the <span>media
   element</span>.</p>
 
+  </div>
+
   <p>The <dfn title="attr-media-autoplay"><code>autoplay</code></dfn>
   attribute is a <span>boolean attribute</span>. When present, the
-  algorithm described herein will cause the user agent to
-  automatically begin playback of the <span>media resource</span> as
-  soon as it can do so without stopping.</p>
+  user agent <span class="impl">(as described in the algorithm
+  described herein)</span> will automatically begin playback of the
+  <span>media resource</span> as soon as it can do so without
+  stopping.</p>
+
+  <div class="impl">
 
   <p>The <dfn title="dom-media-autoplay"><code>autoplay</code></dfn>
   DOM attribute must <span>reflect</span> the content attribute of the
   same name.</p>
 
-
+  </div>
 
 
 
   <h5>Cue ranges</h5>
 
+  <dl class="domintro">
+
+   <dt><var title="">media</var> . <code title="dom-media-addCueRange">addCueRange</code>(<var title="">className</var>, <var title="">id</var>, <var title="">start</var>, <var title="">end</var>, <var title="">pauseOnExit</var>, <var title="">enterCallback</var>, <var title="">exitCallback</var>)</dt>
+
+   <dd>
+
+    <p>Registers a range of time, given in seconds, and a pair of
+    callbacks, the first of which will be invoked when the
+    <span>current playback position</span> enters the range, and the
+    second of which will be invoked when it exits the range. The
+    callbacks are invoked with the given ID as their argument.</p>
+
+    <p>In addition, if the <var title="">pauseOnExit</var> argument is
+    true, then playback will pause when it reaches the end of the
+    range.</p>
+
+   </dd>
+
+   <dt><var title="">media</var> . <code title="dom-media-removeCueRange">removeCueRange</code>(<var title="">className</var>)</dt>
+
+   <dd>
+
+    <p>Removes all the ranges that were registered with the given
+    class name.</p>
+
+   </dd>
+
+  </dl>
+
+  <div class="impl">
+
   <p><span title="media element">Media elements</span> have a set of
   <dfn title="cue range">cue ranges</dfn>. Each cue range is made up
   of the following information:</p>
 
   <dl>
 
    <dt>A class name</dt>
    <dd>A group of related ranges can be given the same class name so
    that they can all be removed at the same time.</dd>
 
@@ -20806,24 +22411,105 @@ interface <dfn>CueRangeCallback</dfn> {
   than the start time and less than the end time, and false
   otherwise.</p>
 
   <p>The <dfn
   title="dom-media-removeCueRanges"><code>removeCueRanges(<var
   title="">className</var>)</code></dfn> method must, when called,
   remove all the <span title="cue range">cue ranges</span> of the
   <span>media element</span> which have the class name <var
   title="">className</var>.</p>
 
+  </div>
+
 
 
   <h5>Playing the media resource</h5>
 
+  <dl class="domintro">
+
+   <dt><var title="">media</var> . <code title="dom-media-paused">paused</code></dt>
+
+   <dd>
+
+    <p>Returns true if playback is paused; false otherwise.</p>
+
+   </dd>
+
+   <dt><var title="">media</var> . <code title="dom-media-ended">ended</code></dt>
+
+   <dd>
+
+    <p>Returns true if playback has reached the end of the <span>media resource</span>.</p>
+
+   </dd>
+
+   <dt><var title="">media</var> . <code title="dom-media-defaultPlaybackRate">defaultPlaybackRate</code> [ = <var title="">value</var> ]</dt>
+
+   <dd>
+
+    <p>Returns the default rate of playback, for when the user is not
+    fast-forwarding or reversing through the <span>media
+    resource</span>.</p>
+
+    <p>Can be set, to change the default rate of playback.</p>
+
+    <p>The default rate has no direct effect on playback, but if the
+    user switches to a fast-forward mode, when they return to the
+    normal playback mode, it is expected that the rate of playback
+    will be returned to the default rate of playback.</p>
+
+   </dd>
+
+   <dt><var title="">media</var> . <code title="dom-media-playbackRate">playbackRate</code> [ = <var title="">value</var> ]</dt>
+
+   <dd>
+
+    <p>Returns the current rate playback, where 1.0 is normal speed.</p>
+
+    <p>Can be set, to change the rate of playback.</p>
+
+   </dd>
+
+   <dt><var title="">media</var> . <code title="dom-media-played">played</code></dt>
+
+   <dd>
+
+    <p>Returns a <code>TimeRanges</code> object that represents the
+    ranges of the <span>media resource</span> that the user agent has
+    played.</p>
+
+   </dd>
+
+   <dt><var title="">media</var> . <code title="dom-media-play">play</code>()</dt>
+
+   <dd>
+
+    <p>Sets the <code title="dom-media-paused">paused</code> attribute
+    to false, loading the <span>media resource</span> and beginning
+    playback if necessary. If the playback had ended, will restart it
+    from the start.</p>
+
+   </dd>
+
+   <dt><var title="">media</var> . <code title="dom-media-pause">pause</code>()</dt>
+
+   <dd>
+
+    <p>Sets the <code title="dom-media-paused">paused</code> attribute
+    to true, loading the <span>media resource</span> if necessary.</p>
+
+   </dd>
+
+  </dl>
+
+  <div class="impl">
+
   <p>The <dfn title="dom-media-paused"><code>paused</code></dfn>
   attribute represents whether the <span>media element</span> is
   paused or not. The attribute must initially be true.</p>
 
   <p>A <span>media element</span> is said to be <dfn>potentially
   playing</dfn> when its <code title="dom-media-paused">paused</code>
   attribute is false, the <code
   title="dom-media-readyState">readyState</code> attribute is either
   <code title="dom-media-HAVE_FUTURE_DATA">HAVE_FUTURE_DATA</code> or
   <code title="dom-media-HAVE_ENOUGH_DATA">HAVE_ENOUGH_DATA</code>,
@@ -21137,45 +22823,45 @@ interface <dfn>CueRangeCallback</dfn> {
    are greater than the <span>current playback position</span>, in the
    order they were added to the element.</p></li>
 
    <li><p>Let <var title="">other ranges</var> be an ordered list of
    <span title="cue range">cue ranges</span>, initialized to contain
    all the <span title="cue range">cue ranges</span> of the
    <span>media element</span> that are not present in <var
    title="">current ranges</var>, in the order they were added to the
    element.</p></li>
 
-   <li><p>If none of the <span title="cue range">cue ranges</span> in
-   <var title="">current ranges</var> have their "active" boolean set
-   to "false" (inactive) and none of the <span title="cue range">cue
-   ranges</span> in <var title="">other ranges</var> have their
-   "active" boolean set to "true" (active), then abort these
-   steps.</p></li>
-
    <li><p>If the time was reached through the usual monotonic increase
    of the current playback position during normal playback, and if the
    user agent has not fired a <code
    title="event-timeupdate">timeupdate</code> event at the element in
    the past 15 to 250ms, then the user agent must <span>queue a
    task</span> to <span>fire a simple event</span> called <code
    title="event-timeupdate">timeupdate</code> at the element. (In the
    other cases, such as explicit seeks, relevant events get fired as
    part of the overall process of changing the current playback
    position.)</p>
 
    <p class="note">The event thus is not to be fired faster than about
    66Hz or slower than 4Hz. User agents are encouraged to vary the
    frequency of the event based on the system load and the average
    cost of processing the event each time, so that the UI updates are
    not any more frequent than the user agent can comfortably handle
    while decoding the video.</p></li>
 
+   <li><p>If none of the <span title="cue range">cue ranges</span> in
+   <var title="">current ranges</var> have their "active" boolean set
+   to "false" (inactive) and none of the <span title="cue range">cue
+   ranges</span> in <var title="">other ranges</var> have their
+   "active" boolean set to "true" (active), then abort these
+   steps.</p></li>
+
    <li><p>If the time was reached through the usual monotonic increase
    of the current playback position during normal playback, and there
    are <span title="cue range">cue ranges</span> in <var
    title="">other ranges</var> that have both their "active" boolean
    and their "pause" boolean set to "true", then immediately act as if
    the element's <code title="dom-media-pause">pause()</code> method
    had been invoked. <!-- pause() can in theory call load(), but never
    can it do so as part of this invokation, since we wouldn't be in
    this algorithm if the media element was empty. So, no need to couch
    all this in a task. --> (In the other cases, such as explicit
@@ -21207,29 +22893,54 @@ interface <dfn>CueRangeCallback</dfn> {
   <p>When a <span>media element</span> is <span>removed from a
   <code>Document</code><!-- XXX xref removed --></span>, if the
   <span>media element</span>'s <code
   title="dom-media-networkState">networkState</code> attribute has a
   value other than <code
   title="dom-media-NETWORK_EMPTY">NETWORK_EMPTY</code> then the user
   agent must act as if the <code
   title="dom-media-pause">pause()</code> method had been invoked.</p>
 
   <p class="note">If the <span>media element</span>'s
-  <code>Document</code> stops being an active document, then the
-  playback will <a href="#media-playback">stop</a> until the document
-  is active again.</p>
+  <code>Document</code> stops being a <span>fully active</span>
+  document, then the playback will <a href="#media-playback">stop</a>
+  until the document is active again.</p>
 
+  </div>
 
 
 
   <h5>Seeking</h5>
 
+  <dl class="domintro">
+
+   <dt><var title="">media</var> . <code title="dom-media-seeking">seeking</code></dt>
+
+   <dd>
+
+    <p>Returns true if the user agent is currently seeking.</p>
+
+   </dd>
+
+   <dt><var title="">media</var> . <code title="dom-media-seekable">seekable</code></dt>
+
+   <dd>
+
+    <p>Returns a <code>TimeRanges</code> object that represents the
+    ranges of the <span>media resource</span> to which it is possible
+    for the user agent to seek.</p>
+
+   </dd>
+
+  </dl>
+
+  <div class="impl">
+
   <p>The <dfn title="dom-media-seeking"><code>seeking</code></dfn>
   attribute must initially have the value false.</p>
 
   <p>When the user agent is required to <dfn
   title="dom-media-seek">seek</dfn> to a particular <var title="">new
   playback position</var> in the <span>media resource</span>, it means
   that the user agent must run the following steps:</p>
 
   <ol>
 
@@ -21321,35 +23032,41 @@ interface <dfn>CueRangeCallback</dfn> {
   instance.</p>
 
   <p><span title="media resource">Media resources</span> might be
   internally scripted or interactive. Thus, a <span>media
   element</span> could play in a non-linear fashion. If this happens,
   the user agent must act as if the algorithm for <span
   title="dom-media-seek">seeking</span> was used whenever the
   <span>current playback position</span> changes in a discontinuous
   fashion (so that the relevant events fire).</p>
 
+  </div>
 
 
   <h5>User interface</h5>
 
   <p>The <dfn title="attr-media-controls"><code>controls</code></dfn>
-  attribute is a <span>boolean attribute</span>. If the attribute is
-  present, or if <span title="concept-n-noscript">scripting is
-  disabled</span> for the <span>media element</span>, then the user
-  agent should <dfn>expose a user interface to the user</dfn>. This
-  user interface should include features to begin playback, pause
-  playback, seek to an arbitrary position in the content (if the
-  content supports arbitrary seeking), change the volume, and show the
-  media content in manners more suitable to the user (e.g. full-screen
-  video or in an independent resizable window). Other controls may
-  also be made available.</p>
+  attribute is a <span>boolean attribute</span>. If present, it
+  indicates that the author has not provided a scripted controller and
+  would like the user agent to provide its own set of controls.</p>
+
+  <div class="impl">
+
+  <p>If the attribute is present, or if <span
+  title="concept-n-noscript">scripting is disabled</span> for the
+  <span>media element</span>, then the user agent should <dfn>expose a
+  user interface to the user</dfn>. This user interface should include
+  features to begin playback, pause playback, seek to an arbitrary
+  position in the content (if the content supports arbitrary seeking),
+  change the volume, and show the media content in manners more
+  suitable to the user (e.g. full-screen video or in an independent
+  resizable window). Other controls may also be made available.</p>
 
   <p>If the attribute is absent, then the user agent should avoid
   making a user interface available that could conflict with an
   author-provided user interface. User agents may make the following
   features available, however, even when the attribute is absent:</p>
 
   <p>User agents may provide controls to affect playback of the media
   resource (e.g. play, pause, seeking, and volume controls), but such
   features should not interfere with the page's normal rendering. For
   example, such features could be exposed in the <span>media
@@ -21358,20 +23075,57 @@ interface <dfn>CueRangeCallback</dfn> {
   <p>Where possible (specifically, for starting, stopping, pausing,
   and unpausing playback, for muting or changing the volume of the
   audio, and for seeking), user interface features exposed by the user
   agent must be implemented in terms of the DOM API described above,
   so that, e.g., all the same events fire.</p>
 
   <p>The <dfn title="dom-media-controls"><code>controls</code></dfn>
   DOM attribute must <span>reflect</span> the content attribute of the
   same name.</p>
 
+  <hr>
+
+  </div>
+
+  <dl class="domintro">
+
+   <dt><var title="">media</var> . <code title="dom-media-volume">volume</code> [ = <var title="">value</var> ]</dt>
+
+   <dd>
+
+    <p>Returns the current playback volume, as a number in the range
+    0.0 to 1.0, where 0.0 is the quietest and 1.0 the loudest.</p>
+
+    <p>Can be set, to change the volume.</p>
+
+    <p>Throws an <code>INDEX_SIZE_ERR</code> if the new value is not
+    in the range 0.0 .. 1.0.</p>
+
+   </dd>
+
+   <dt><var title="">media</var> . <code title="dom-media-muted">muted</code> [ = <var title="">value</var> ]</dt>
+
+   <dd>
+
+    <p>Returns true if audio is muted, overriding the <code
+    title="dom-media-volume">volume</code> attribute, and false if the
+    <code title="dom-media-volume">volume</code> attribute is being
+    honored.</p>
+
+    <p>Can be set, to change whether the audio is muted or not.</p>
+
+   </dd>
+
+  </dl>
+
+  <div class="impl">
+
   <p>The <dfn title="dom-media-volume"><code>volume</code></dfn>
   attribute must return the playback volume of any audio portions of
   the <span>media element</span>, in the range 0.0 (silent) to 1.0
   (loudest). Initially, the volume must be 1.0, but user agents may
   remember the last set value across sessions, on a per-site basis or
   otherwise, so the volume may start at other values. On setting, if
   the new value is in the range 0.0 to 1.0 inclusive, the attribute
   must be set to the new value and the playback volume must be
   correspondingly adjusted as soon as possible after setting the
   attribute, with 0.0 being silent, and 1.0 being the loudest setting,
@@ -21392,33 +23146,70 @@ interface <dfn>CueRangeCallback</dfn> {
   <span>media resource</span> must then be muted, and if false, audio
   playback must then be enabled.</p>
 
   <p>Whenever either the <code title="dom-media-muted">muted</code> or
   <code title="dom-media-volume">volume</code> attributes are changed,
   the user agent must <span>queue a task</span> to <span>fire a simple
   event</span> called <code
   title="event-volumechange">volumechange</code> at the <span>media
   element</span>.</p>
 
+  </div>
+
+
 
 
   <h5>Time ranges</h5>
 
   <p>Objects implementing the <code>TimeRanges</code> interface
   represent a list of ranges (periods) of time.</p>
 
   <pre class="idl">interface <dfn>TimeRanges</dfn> {
   readonly attribute unsigned long <span title="dom-TimeRanges-length">length</span>;
   float <span title="dom-TimeRanges-start">start</span>(in unsigned long index);
   float <span title="dom-TimeRanges-end">end</span>(in unsigned long index);
 };</pre>
 
+  <dl class="intro">
+
+   <dt><var title="">media</var> . <code title="dom-TimeRanges-length">length</code></dt>
+
+   <dd>
+
+    <p>Returns the number of ranges in the object.</p>
+
+   </dd>
+
+   <dt><var title="">time</var> = <var title="">media</var> . <code title="dom-TimeRanges-start">start</code>(<var title="">index</var>)</dt>
+
+   <dd>
+
+    <p>Returns the time for the start of the range with the given index.</p>
+
+    <p>Throws an <code>INDEX_SIZE_ERR</code> if the index is out of range.</p>
+
+   </dd>
+
+   <dt><var title="">time</var> = <var title="">media</var> . <code title="dom-TimeRanges-end">end</code>(<var title="">index</var>)</dt>
+
+   <dd>
+
+    <p>Returns the time for the end of the range with the given index.</p>
+
+    <p>Throws an <code>INDEX_SIZE_ERR</code> if the index is out of range.</p>
+
+   </dd>
+
+  </dl>
+
+  <div class="impl">
+
   <p>The <dfn title="dom-TimeRanges-length"><code>length</code></dfn>
   DOM attribute must return the number of ranges represented by the object.</p>
 
   <p>The <dfn title="dom-TimeRanges-start"><code>start(<var
   title="">index</var>)</code></dfn> method must return the position
   of the start of the <var title="">index</var>th range represented by
   the object, in seconds measured from the start of the timeline that
   the object covers.</p>
 
   <p>The <dfn title="dom-TimeRanges-end"><code>end(<var
@@ -21449,20 +23240,21 @@ interface <dfn>CueRangeCallback</dfn> {
   overlap, aren't empty, and don't touch (adjacent ranges are folded
   into one bigger range).</p>
 
   <p>The timelines used by the objects returned by the <code
   title="dom-media-buffered">buffered</code>, <code
   title="dom-media-seekable">seekable</code> and <code
   title="dom-media-played">played</code> DOM attributes of <span
   title="media element">media elements</span> must be the same as that
   element's <span>media resource</span>'s timeline.</p>
 
+  </div>
 
 
   <h5 id="mediaevents">Event summary</h5>
 
   <p>The following events fire on <span title="media element">media
   elements</span> as part of the processing model described above:</p>
 
   <table>
    <thead>
     <tr>
@@ -21593,20 +23385,22 @@ interface <dfn>CueRangeCallback</dfn> {
      <td>The <code title="dom-media-duration">duration</code> attribute has just been updated.
      <td>
     <tr>
      <td><dfn title="event-volumechange"><code>volumechange</code></dfn>
      <td><code>Event</code>
      <td>Either the <code title="dom-media-volume">volume</code> attribute or the <code title="dom-media-muted">muted</code> attribute has changed. Fired after the relevant attribute's setter has returned.
      <td>
   </table>
 
 
+  <div class="impl">
+
   <h5>Security and privacy considerations</h5>
 
   <p>The main security and privacy implications of the
   <code>video</code> and <code>audio</code> elements come from the
   ability to embed media cross-origin. There are two directions that
   threats can flow: from hostile content to a victim page, and from a
   hostile page to victim content.</p>
 
   <hr>
 
@@ -21643,22 +23437,21 @@ interface <dfn>CueRangeCallback</dfn> {
   content's site has opted in to exposing such information. <a
   href="#refsCORS">[CORS]</a></p>
 
   <p class="example">An attacker could trick a user running within a
   corporate network into visiting a site that attempts to load a video
   from a previously leaked location on the corporation's intranet. If
   such a video included confidential plans for a new product, then
   being able to read the subtitles would present a confidentiality
   breach.</p>
 
-
-
+  </div>
 
 
   <h4>The <dfn id="canvas"><code>canvas</code></dfn> element</h4>
 
   <dl class="element">
    <dt>Categories</dt>
    <dd><span>Flow content</span>.</dd>
    <dd><span>Phrasing content</span>.</dd>
    <dd><span>Embedded content</span>.</dd>
    <dt>Contexts in which this element may be used:</dt>
@@ -21719,101 +23512,145 @@ interface <dfn>CueRangeCallback</dfn> {
   title="concept-n-noscript">scripting is disabled</span> for the
   <code>canvas</code> element, the <code>canvas</code> element
   represents its <span>fallback content</span> instead.</p>
 
   <p>The <code>canvas</code> element has two attributes to control the
   size of the coordinate space: <dfn
   title="attr-canvas-width"><code>width</code></dfn> and <dfn
   title="attr-canvas-height"><code>height</code></dfn>. These
   attributes, when specified, must have values that are <span
   title="valid non-negative integer">valid non-negative
-  integers</span>. The <span>rules for parsing non-negative
-  integers</span> must be used to obtain their numeric values. If an
-  attribute is missing, or if parsing its value returns an error, then
-  the default value must be used instead. The <code
-  title="attr-canvas-width">width</code> attribute defaults to 300,
-  and the <code title="attr-canvas-height">height</code> attribute
-  defaults to 150.</p>
+  integers</span>. <span class="impl">The <span>rules for parsing
+  non-negative integers</span> must be used to obtain their numeric
+  values. If an attribute is missing, or if parsing its value returns
+  an error, then the default value must be used instead.</span> The
+  <code title="attr-canvas-width">width</code> attribute defaults to
+  300, and the <code title="attr-canvas-height">height</code>
+  attribute defaults to 150.</p>
 
   <p>The intrinsic dimensions of the <code>canvas</code> element equal
   the size of the coordinate space, with the numbers interpreted in
   CSS pixels. However, the element can be sized arbitrarily by a
   style sheet. During rendering, the image is scaled to fit this layout
   size.</p>
 
+  <div class="impl">
+
   <p>The size of the coordinate space does not necessarily represent
   the size of the actual bitmap that the user agent will use
   internally or during rendering. On high-definition displays, for
   instance, the user agent may internally use a bitmap with two device
   pixels per unit in the coordinate space, so that the rendering
   remains at high quality throughout.</p>
 
   <p>Whenever the <code title="attr-canvas-width">width</code> and
   <code title="attr-canvas-height">height</code> attributes are set
   (whether to a new value or to the previous value), the bitmap and
   any associated contexts must be cleared back to their initial state
   and reinitialized with the newly specified coordinate space
   dimensions.</p>
 
   <p>The <dfn title="dom-canvas-width"><code>width</code></dfn> and
   <dfn title="dom-canvas-height"><code>height</code></dfn> DOM
   attributes must <span>reflect</span> the respective content
   attributes of the same name.</p>
 
+  </div>
+
   <div class="example">
    <p>Only one square appears to be drawn in the following example:</p>
    <pre>
   // canvas is a reference to a &lt;canvas> element
   var context = canvas.getContext('2d');
   context.fillRect(0,0,50,50);
   canvas.setAttribute('width', '300'); // clears the canvas
   context.fillRect(0,100,50,50);
   canvas.width = canvas.width; // clears the canvas
   context.fillRect(100,0,50,50); // only this square remains</pre>
   </div>
 
+  <div class="impl">
 
   <p>When the canvas is initialized it must be set to fully
   transparent black.</p>
 
+  </div>
 
   <p>To draw on the canvas, authors must first obtain a reference to a
   <dfn>context</dfn> using the <dfn
   title="dom-canvas-getContext"><code>getContext(<var
   title="">contextId</var>)</code></dfn> method of the
   <code>canvas</code> element.</p>
 
+  <dl class="domintro">
+
+   <dt><var title="">context</var> = <var title="">canvas</var> . <code title="dom-canvas-getContext">getContext</code>(<var title="">contextId</var>)</dt>
+
+   <dd>
+
+    <p>Returns an object that exposes an API for drawing on the canvas.</p>
+
+    <p>Returns null if the given context ID is not supported.</p>
+
+   </dd>
+
+  </dl>
+
   <p>This specification only defines one context, with the name "<code
-  title="canvas-context-2d">2d</code>". If <code
+  title="canvas-context-2d">2d</code>". <span class="impl">If <code
   title="dom-canvas-getContext">getContext()</code> is called with
   that exact string for its <var title="">contextId</var> argument,
   then the UA must return a reference to an object implementing
   <code>CanvasRenderingContext2D</code>. Other specifications may
-  define their own contexts, which would return different objects.</p>
+  define their own contexts, which would return different
+  objects.</span></p>
+
+  <div class="impl">
 
   <p>Vendors may also define experimental contexts using the syntax
   <code><var title="">vendorname</var>-<var
   title="">context</var></code>, for example, <code>moz-3d</code>.</p>
 
   <p>When the UA is passed an empty string or a string specifying a
   context that it does not support, then it must return null. String
   comparisons must be <span>case-sensitive</span>.</p>
 
-  <p>Arguments other than the <var title="">contextId</var> must be
-  ignored.</p>
+  </div>
 
   <p class="note">A future version of this specification will probably
   define a <code>3d</code> context (probably based on the OpenGL ES
   API).</p>
 
   <hr>
 
+  <dl class="domintro">
+
+   <dt><var title="">url</var> = <var title="">canvas</var> . <code title="dom-canvas-toDataURL">toDataURL</code>( [ <var title="">type</var>, ... ])</dt>
+
+   <dd>
+
+    <p>Returns a <code title="">data:</code> URL for the image in the
+    canvas.</p>
+
+    <p>The first argument, if provided, controls the type of the image
+    to be returned (e.g. PNG or JPEG). The default is <code
+    title="">image/png</code>; that type is also used if the given
+    type isn't supported. The other arguments are specific to the
+    type, and control the way that the image is generated, as given in
+    the table below.</p>
+
+   </dd>
+
+  </dl>
+
+  <div class="impl">
+
   <p>The <dfn
   title="dom-canvas-toDataURL"><code>toDataURL()</code></dfn> method
   must, when called with no arguments, return a <code
   title="">data:</code> URL containing a representation of the image
   as a PNG file. <a href="#refsPNG">[PNG]</a>.</p>
 
   <p>If the canvas has no pixels (i.e. either its horizontal dimension
   or its vertical dimension is zero) then the method must return the
   string "<code title="">data:,</code>". (This is the shortest <code
   title="">data:</code> URL; it represents the empty string in a <code
@@ -21837,70 +23674,85 @@ interface <dfn>CueRangeCallback</dfn> {
 
   <p>Only support for <code>image/png</code> is required. User agents
   may support other types. If the user agent does not support the
   requested type, it must return the image using the PNG format.</p>
 
   <p>User agents must <span title="converted to lowercase">convert the
   provided type to lower case</span> before establishing if they
   support that type and before creating the <code
   title="">data:</code> URL.</p>
 
+  </div>
+
   <p class="note">When trying to use types other than
   <code>image/png</code>, authors can check if the image was really
   returned in the requested format by checking to see if the returned
   string starts with one the exact strings "<code
   title="">data:image/png,</code>" or "<code
   title="">data:image/png;</code>". If it does, the image is PNG, and
   thus the requested type was not supported. (The one exception to
   this is if the canvas has either no height or no width, in which
   case the result might simply be "<code title="">data:,</code>".)</p>
 
+  <div class="impl">
+
   <p>If the method is invoked with the first argument giving a type
   corresponding to one of the types given in the first column of the
   following table, and the user agent supports that type, then the
   subsequent arguments, if any, must be treated as described in the
   second cell of that row.</p>
 
+  </div>
+
   <table>
    <thead>
     <tr> <th> Type <th> Other arguments
    <tbody>
     <tr>
      <td> image/jpeg
-     <td> The second argument, if it is a number between 0.0 and 1.0,
-     must be treated as the desired quality level. If it is not a
-     number or is outside that range, the user agent must use its
-     default value, as if the argument had been omitted.
+     <td> The second argument<span title="impl">, if it</span> is a
+     number between 0.0 and 1.0<span class="impl">, must be</span>
+     treated as the desired quality level. <span class="impl">If it is
+     not a number or is outside that range, the user agent must use
+     its default value, as if the argument had been omitted.</span>
   </table>
 
+  <div class="impl">
+
   <p>Other arguments must be ignored and must not cause the user agent
   to raise an exception. A future version of this specification will
   probably define other parameters to be passed to <code
   title="dom-canvas-toDataURL">toDataURL()</code> to allow authors to
   more carefully control compression settings, image metadata,
   etc.</p>
 
+  </div>
+
 
   <h5>The 2D context</h5>
   <!-- v2: we're on v3. suggestions for next version are marked v4. -->
 
   <p>When the <code title="dom-canvas-getContext">getContext()</code>
   method of a <code>canvas</code> element is invoked with <dfn
   title="canvas-context-2d"><code>2d</code></dfn> as the argument, a
   <code>CanvasRenderingContext2D</code> object is returned.</p>
 
+  <div class="impl">
+
   <p>There is only one <code>CanvasRenderingContext2D</code> object
   per canvas, so calling the <code
   title="dom-canvas-getContext">getContext()</code> method with the
   <code title="canvas-context-2d">2d</code> argument a second time
   must return the same object.</p>
 
+  </div>
+
   <p>The 2D context represents a flat Cartesian surface whose origin
   (0,0) is at the top left corner, with the coordinate space having
   <var title="">x</var> values increasing when going right, and <var
   title="">y</var> values increasing when going down.</p>
 
   <pre class="idl">interface <dfn>CanvasRenderingContext2D</dfn> {
 
   // back-reference to the canvas
   readonly attribute <span>HTMLCanvasElement</span> <span title="dom-context-2d-canvas">canvas</span>;
 
@@ -22009,56 +23861,69 @@ interface <dfn>ImageData</dfn> {
   readonly attribute unsigned long <span title="dom-imagedata-width">width</span>;
   readonly attribute unsigned long <span title="dom-imagedata-height">height</span>;
   readonly attribute <span>CanvasPixelArray</span> <span title="dom-imagedata-data">data</span>;
 };
 
 [<span title="dom-CanvasPixelArray-get">IndexGetter</span>, <span title="dom-CanvasPixelArray-set">IndexSetter</span>]
 interface <dfn>CanvasPixelArray</dfn> {
   readonly attribute unsigned long <span title="dom-canvaspixelarray-length">length</span>;
 };</pre>
 
+  <dl class="domintro">
+
+   <dt><var title="">context</var> . <code title="dom-context-2d-canvas">canvas</code></dt>
+
+   <dd>
+
+    <p>Returns the <code>canvas</code> element.</p>
+
+   </dd>
+
+  </dl>
+
+  <div class="impl">
+
   <p>The <dfn title="dom-context-2d-canvas"><code>canvas</code></dfn>
   attribute must return the <code>canvas</code> element that the
   context paints on.</p>
 
-
   <p>Unless otherwise stated, for the 2D context interface, any method
   call with a numeric argument whose value is infinite or a NaN value
   must be ignored.</p>
 
   <!--
    Philip Taylor wrote:
    > My experience with some 3d canvas code is that infinities come up in
    > naturally harmless places, e.g. having a function that scales by x then
    > translates by 1/x and wanting it to work when x=0 (which ought to draw
    > nothing, since anything it draws is zero pixels wide), and it's a bit
    > annoying to track down and fix those issues, so I'd probably like it if
    > they were harmless in canvas methods. Opera appears to silently not draw
    > anything if the transformation matrix is not finite, but Firefox throws
    > exceptions when passing in non-finite arguments.
   -->
 
-
   <p>Whenever the CSS value <code title="">currentColor</code> is used
   as a color in this API, the "computed value of the 'color' property"
   for the purposes of determining the computed value of the <code
   title="">currentColor</code> keyword is the computed value of the
   'color' property on the element in question at the time that the
   color is specified (e.g. when the appropriate attribute is set, or
   when the method is called; not when the color is rendered or
   otherwise used). If the computed value of the 'color' property is
   undefined for a particular case (e.g. because the element is not in
   a document), then the "computed value of the 'color' property" for
   the purposes of determining the computed value of the <code
   title="">currentColor</code> keyword is fully opaque black. <a
   href="#refsCSS3COLOR">[CSS3COLOR]</a></p>
 
+  </div>
 
 
 
   <h6>The canvas state</h6>
 
   <p>Each context maintains a stack of drawing states. <dfn
   title="drawing state">Drawing states</dfn> consist of:</p>
 
   <ul class="brief">
    <li>The current <span title="dom-context-2d-transformation">transformation matrix</span>.</li>
@@ -22081,20 +23946,42 @@ interface <dfn>CanvasPixelArray</dfn> {
    title="dom-context-2d-textBaseline">textBaseline</code>.</li>
   </ul>
 
   <p class="note">The current path and the current bitmap are not part
   of the drawing state. The current path is persistent, and can only
   be reset using the <code
   title="dom-context-2d-beginPath">beginPath()</code> method. The
   current bitmap is <span title="concept-canvas-image">a property of
   the canvas</span><!-- XXX xref -->, not the context.</p>
 
+  <dl class="domintro">
+
+   <dt><var title="">context</var> . <code title="dom-context-2d-save">save</code>()</dt>
+
+   <dd>
+
+    <p>Pushes the current state onto the stack.</p>
+
+   </dd>
+
+   <dt><var title="">context</var> . <code title="dom-context-2d-restore">restore</code>()</dt>
+
+   <dd>
+
+    <p>Pops the top state on the stack, restoring the context to that state.</p>
+
+   </dd>
+
+  </dl>
+
+  <div class="impl">
+
   <p>The <dfn title="dom-context-2d-save"><code>save()</code></dfn>
   method must push a copy of the current drawing state onto the
   drawing state stack.</p>
 
   <p>The <dfn
   title="dom-context-2d-restore"><code>restore()</code></dfn> method
   must pop the top entry in the drawing state stack, and reset the
   drawing state it describes. If there is no saved state, the method
   must do nothing.</p>
 
@@ -22109,38 +23996,90 @@ idea from Mihai:
 > restore().
 >
 > Currently, it's not trivial to save and restore a specific state.
 ...and from Philip:
 > I think a more convenient syntax would be:
 >   var state = ctx.save();
 >   ctx.restore(state);
 > But how would it interact with normal calls to ctx.restore()?
   -->
 
+  </div>
+
 
   <h6><dfn title="dom-context-2d-transformation">Transformations</dfn></h6>
 
   <p>The transformation matrix is applied to coordinates when creating
   shapes and paths.</p> <!-- conformance criteria for actual drawing
   are described in the various sections below -->
 
+  <div class="impl">
+
   <p>When the context is created, the transformation matrix must
   initially be the identity transform. It may then be adjusted using
   the transformation methods.</p>
 
   <p>The transformations must be performed in reverse order. For
   instance, if a scale transformation that doubles the width is
   applied, followed by a rotation transformation that rotates drawing
   operations by a quarter turn, and a rectangle twice as wide as it is
   tall is then drawn on the canvas, the actual result will be a
   square.</p>
 
+  </div>
+
+  <dl class="domintro">
+
+   <dt><var title="">context</var> . <code title="dom-context-2d-scale">scale</code>(<var title="">x</var>, <var title="">y</var>)</dt>
+
+   <dd>
+
+    <p>Changes the transformation matrix to apply a scaling transformation with the given characteristics.</p>
+
+   </dd>
+
+   <dt><var title="">context</var> . <code title="dom-context-2d-rotate">rotate</code>(<var title="">angle</var>)</dt>
+
+   <dd>
+
+    <p>Changes the transformation matrix to apply a rotation transformation with the given characteristics.</p>
+
+   </dd>
+
+   <dt><var title="">context</var> . <code title="dom-context-2d-translate">translate</code>(<var title="">x</var>, <var title="">y</var>)</dt>
+
+   <dd>
+
+    <p>Changes the transformation matrix to apply a translation transformation with the given characteristics.</p>
+
+   </dd>
+
+   <dt><var title="">context</var> . <code title="dom-context-2d-transform">transform</code>(<var title="">m11</var>, <var title="">m12</var>, <var title="">m21</var>, <var title="">m22</var>, <var title="">dx</var>, <var title="">dy</var>)</dt>
+
+   <dd>
+
+    <p>Changes the transformation matrix to apply the matrix given by the arguments as described below.</p>
+
+   </dd>
+
+   <dt><var title="">context</var> . <code title="dom-context-2d-setTransform">setTransform</code>(<var title="">m11</var>, <var title="">m12</var>, <var title="">m21</var>, <var title="">m22</var>, <var title="">dx</var>, <var title="">dy</var>)</dt>
+
+   <dd>
+
+    <p>Changes the transformation matrix <em>to</em> the matrix given by the arguments as described below.</p>
+
+   </dd>
+
+  </dl>
+
+  <div class="impl">
+
   <p>The <dfn title="dom-context-2d-scale"><code>scale(<var
   title="">x</var>, <var title="">y</var>)</code></dfn> method must
   add the scaling transformation described by the arguments to the
   transformation matrix. The <var title="">x</var> argument represents
   the scale factor in the horizontal direction and the <var
   title="">y</var> argument represents the scale factor in the
   vertical direction. The factors are multiples.</p>
 
   <p>The <dfn title="dom-context-2d-rotate"><code>rotate(<var
   title="">angle</var>)</code></dfn> method must add the rotation
@@ -22155,52 +24094,87 @@ idea from Mihai:
   the translation distance in the horizontal direction and the <var
   title="">y</var> argument represents the translation distance in the
   vertical direction. The arguments are in coordinate space units.</p>
 
   <p>The <dfn title="dom-context-2d-transform"><code>transform(<var
   title="">m11</var>, <var title="">m12</var>, <var
   title="">m21</var>, <var title="">m22</var>, <var title="">dx</var>,
   <var title="">dy</var>)</code></dfn> method must multiply the
   current transformation matrix with the matrix described by:</p>
 
+  </div>
+
   <table class="matrix">
    <tr>
     <td><var title="">m11</var></td>
     <td><var title="">m21</var></td>
     <td><var title="">dx</var></td>
    </tr>
    <tr>
     <td><var title="">m12</var></td>
     <td><var title="">m22</var></td>
     <td><var title="">dy</var></td>
    </tr>
    <tr>
     <td>0</td>
     <td>0</td>
     <td>1</td>
    </tr>
   </table>
 
+  <div class="impl">
+
   <p>The <dfn
   title="dom-context-2d-setTransform"><code>setTransform(<var
   title="">m11</var>, <var title="">m12</var>, <var
   title="">m21</var>, <var title="">m22</var>, <var title="">dx</var>,
   <var title="">dy</var>)</code></dfn> method must reset the current
   transform to the identity matrix, and then invoke the <code><span
   title="dom-context-2d-transform">transform</span>(<var
   title="">m11</var>, <var title="">m12</var>, <var
   title="">m21</var>, <var title="">m22</var>, <var title="">dx</var>,
   <var title="">dy</var>)</code> method with the same arguments.</p>
 
+  </div>
+
 
   <h6>Compositing</h6>
 
+  <dl class="domintro">
+
+   <dt><var title="">context</var> . <code title="dom-context-2d-globalAlpha">globalAlpha</code> [ = <var title="">value</var> ]</dt>
+
+   <dd>
+
+    <p>Returns the current alpha value applied to rendering operations.</p>
+
+    <p>Can be set, to change the alpha value. Values outside of the
+    range 0.0 .. 1.0 are ignored.</p>
+
+   </dd>
+
+
+   <dt><var title="">context</var> . <code title="dom-context-2d-globalCompositeOperation">globalCompositeOperation</code> [ = <var title="">value</var> ]</dt>
+
+   <dd>
+
+    <p>Returns the current composition operation, from the list below.</p>
+
+    <p>Can be set, to change the composition operation. Unknown values
+    are ignored.</p>
+
+   </dd>
+
+  </dl>
+
+  <div class="impl">
+
   <p>All drawing operations are affected by the global compositing
   attributes, <code
   title="dom-context-2d-globalAlpha">globalAlpha</code> and <code
   title="dom-context-2d-globalCompositeOperation">globalCompositeOperation</code>.</p>
 
   <!-- conformance criteria for painting are described in the "drawing
   model" section below -->
 
   <p>The <dfn
   title="dom-context-2d-globalAlpha"><code>globalAlpha</code></dfn>
@@ -22217,20 +24191,22 @@ idea from Mihai:
   title="dom-context-2d-globalCompositeOperation"><code>globalCompositeOperation</code></dfn>
   attribute sets how shapes and images are drawn onto the existing
   bitmap, once they have had <code
   title="dom-context-2d-globalAlpha">globalAlpha</code> and the
   current transformation matrix applied. It must be set to a value
   from the following list. In the descriptions below, the source
   image, <var title="">A</var>, is the shape or image being rendered,
   and the destination image, <var title="">B</var>, is the current
   state of the bitmap.</p>
 
+  </div>
+
   <dl>
 
    <dt><dfn title="gcop-source-atop"><code>source-atop</code></dfn></dt>
 
    <dd><var title="">A</var> atop <var title="">B</var>. Display the
    source image wherever both images are opaque.  Display the
    destination image wherever the destination image is opaque but the
    source image is transparent. Display transparency elsewhere.</dd>
 
    <dt><dfn title="gcop-source-in"><code>source-in</code></dfn></dt>
@@ -22298,27 +24274,29 @@ idea from Mihai:
    ignored). Display the source image instead of the destination
    image.</dd>
 
 
    <dt><dfn title="gcop-xor"><code>xor</code></dfn></dt>
 
    <dd><var title="">A</var> xor <var title="">B</var>. Exclusive OR
    of the source image and destination image.</dd>
 
 
-   <dt><code><var title="">vendorName</var>-<var title="">operationName</var></code></dt>
+   <dt class="impl"><code><var title="">vendorName</var>-<var title="">operationName</var></code></dt>
 
-   <dd>Vendor-specific extensions to the list of composition operators
-   should use this syntax.</dd>
+   <dd class="impl">Vendor-specific extensions to the list of
+   composition operators should use this syntax.</dd>
 
   </dl>
 
+  <div class="impl">
+
   <p>These values are all case-sensitive &mdash; they must be used
   exactly as shown. User agents must not recognize values that are not
   a <span>case-sensitive</span> match for one of the values given
   above.</p>
 
   <p>The operators in the above list must be treated as described by
   the Porter-Duff operator given at the start of their description
   (e.g. <var title="">A</var> over <var title="">B</var>). <a
   href="#refsPORTERDUFF">[PORTERDUFF]</a></p>
   <!--
@@ -22329,23 +24307,59 @@ idea from Mihai:
   <p>On setting, if the user agent does not recognize the specified
   value, it must be ignored, leaving the value of <code
   title="dom-context-2d-globalCompositeOperation">globalCompositeOperation</code>
   unaffected.</p>
 
   <p>When the context is created, the <code
   title="dom-context-2d-globalCompositeOperation">globalCompositeOperation</code>
   attribute must initially have the value
   <code>source-over</code>.</p>
 
+  </div>
+
 
   <h6>Colors and styles</h6>
 
+  <dl class="domintro">
+
+   <dt><var title="">context</var> . <code title="dom-context-2d-strokeStyle">strokeStyle</code> [ = <var title="">value</var> ]</dt>
+
+   <dd>
+
+    <p>Returns the current style used for stroking shapes.</p>
+
+    <p>Can be set, to change the stroke style.</p>
+
+    <p>The style can be either a string containing a CSS color, or a
+    <code>CanvasGradient</code> or <code>CanvasPattern</code>
+    object. Invalid values are ignored.</p>
+
+   </dd>
+
+   <dt><var title="">context</var> . <code title="dom-context-2d-fillStyle">fillStyle</code> [ = <var title="">value</var> ]</dt>
+
+   <dd>
+
+    <p>Returns the current style used for filling shapes.</p>
+
+    <p>Can be set, to change the fill style.</p>
+
+    <p>The style can be either a string containing a CSS color, or a
+    <code>CanvasGradient</code> or <code>CanvasPattern</code>
+    object. Invalid values are ignored.</p>
+
+   </dd>
+
+  </dl>
+
+  <div class="impl">
+
   <p>The <dfn
   title="dom-context-2d-strokeStyle"><code>strokeStyle</code></dfn>
   attribute represents the color or style to use for the lines around
   shapes, and the <dfn
   title="dom-context-2d-fillStyle"><code>fillStyle</code></dfn>
   attribute represents the color or style to use inside the
   shapes.</p>
 
   <p>Both attributes can be either strings,
   <code>CanvasGradient</code>s, or <code>CanvasPattern</code>s. On
@@ -22385,35 +24399,85 @@ idea from Mihai:
   U+0030 DIGIT ZERO, a U+002E FULL STOP (representing the decimal
   point), one or more digits in the range 0-9 (U+0030 to U+0039)
   representing the fractional part of the alpha value, and finally a
   U+0029 RIGHT PARENTHESIS.</p>
 
   <p>When the context is created, the <code
   title="dom-context-2d-strokeStyle">strokeStyle</code> and <code
   title="dom-context-2d-fillStyle">fillStyle</code> attributes must
   initially have the string value <code title="">#000000</code>.</p>
 
+  </div>
+
+  <hr>
 
   <p>There are two types of gradients, linear gradients and radial
   gradients, both represented by objects implementing the opaque
   <code>CanvasGradient</code> interface.</p>
 
   <p id="interpolation">Once a gradient has been created (see below),
   stops are placed along it to define how the colors are distributed
-  along the gradient. The color of the gradient at each stop is the
-  color specified for that stop. Between each such stop, the colors
-  and the alpha component must be linearly interpolated over the RGBA
-  space without premultiplying the alpha value to find the color to
-  use at that offset. Before the first stop, the color must be the
-  color of the first stop. After the last stop, the color must be the
-  color of the last stop. When there are no stops, the gradient is
-  transparent black.</p>
+  along the gradient. <span class="impl">The color of the gradient at
+  each stop is the color specified for that stop. Between each such
+  stop, the colors and the alpha component must be linearly
+  interpolated over the RGBA space without premultiplying the alpha
+  value to find the color to use at that offset. Before the first
+  stop, the color must be the color of the first stop. After the last
+  stop, the color must be the color of the last stop. When there are
+  no stops, the gradient is transparent black.</span></p>
+
+  <dl class="domintro">
+
+   <dt><var title="">gradient</var> . <code title="dom-canvasgradient-addColorStop">addColorStop</code>(<var title="">offset</var>, <var title="">color</var>)</dt>
+
+   <dd>
+
+    <p>Adds a color stop with the given color to the gradient at the
+    given offset. 0.0 is the offset at one end of the gradient, 1.0 is
+    the offset at the other end.</p>
+
+    <p>Throws an <code>INDEX_SIZE_ERR</code> exception if the offset
+    it out of range. Throws a <code>SYNTAX_ERR</code> exception if the
+    color cannot be parsed.</p>
+
+   </dd>
+
+   <dt><var title="">gradient</var> = <var title="">context</var> . <code title="dom-context-2d-createLinearGradient">createLinearGradient</code>(<var title="">x0</var>, <var title="">y0</var>, <var title="">x1</var>, <var title="">y1</var>)</dt>
+
+   <dd>
+
+    <p>Returns a <code>CanvasGradient</code> object that represents a
+    linear gradient that paints along the line given by the
+    coordinates represented by the arguments.</p>
+
+    <p>If any of the arguments are not finite numbers, throws a
+    <code>NOT_SUPPORTED_ERR</code> exception.</p>
+
+   </dd>
+
+   <dt><var title="">gradient</var> = <var title="">context</var> . <code title="dom-context-2d-createRadialGradient">createRadialGradient</code>(<var title="">x0</var>, <var title="">y0</var>, <var title="">r0</var>, <var title="">x1</var>, <var title="">y1</var>, <var title="">r1</var>)</dt>
+
+   <dd>
+
+    <p>Returns a <code>CanvasGradient</code> object that represents a
+    radial gradient that paints along the cone given by the circles
+    represented by the arguments.</p>
+
+    <p>If any of the arguments are not finite numbers, throws a
+    <code>NOT_SUPPORTED_ERR</code> exception. If either of the radii
+    are negative throws an <code>INDEX_SIZE_ERR</code> exception.</p>
+
+   </dd>
+
+  </dl>
+
+  <div class="impl">
 
   <p>The <dfn
   title="dom-canvasgradient-addColorStop"><code>addColorStop(<var
   title="">offset</var>, <var title="">color</var>)</code></dfn>
   method on the <code>CanvasGradient</code> interface adds a new stop
   to a gradient. If the <var title="">offset</var> is less than 0,
   greater than 1, infinite, or NaN, then an
   <code>INDEX_SIZE_ERR</code> exception must be raised. If the <var
   title="">color</var> cannot be parsed as a CSS color, then a
   <code>SYNTAX_ERR</code> exception must be raised.  Otherwise, the
@@ -22442,26 +24506,24 @@ idea from Mihai:
 
   <p>Linear gradients must be rendered such that all points on a line
   perpendicular to the line that crosses the start and end points have
   the color at the point where those two lines cross (with the colors
   coming from the <a href="#interpolation">interpolation and
   extrapolation</a> described above). The points in the linear
   gradient must be transformed as described by the <span
   title="dom-context-2d-transformation">current transformation
   matrix</span> when rendering.</p>
 
-  <p>If <span><var title="">x<sub>0</sub></var>&nbsp;=&nbsp;<var
-  title="">x<sub>1</sub></var></span> and <span><var
-  title="">y<sub>0</sub></var>&nbsp;=&nbsp;<var
-  title="">y<sub>1</sub></var></span>, then the linear gradient must
-  paint nothing.</p> <!-- XXX could make this paint the start color,
-  or the end color, or raise an exception -->
+  <p>If <span><var title="">x0</var>&nbsp;=&nbsp;<var
+  title="">x1</var></span> and <span><var
+  title="">y0</var>&nbsp;=&nbsp;<var title="">y1</var></span>, then
+  the linear gradient must paint nothing.</p>
 
   <p>The <dfn
   title="dom-context-2d-createRadialGradient"><code>createRadialGradient(<var
   title="">x0</var>, <var title="">y0</var>, <var title="">r0</var>,
   <var title="">x1</var>, <var title="">y1</var>, <var
   title="">r1</var>)</code></dfn> method takes six arguments, the
   first three representing the start circle with origin (<var
   title="">x0</var>, <var title="">y0</var>) and radius <var
   title="">r0</var>, and the last three representing the end circle
   with origin (<var title="">x1</var>, <var title="">y1</var>) and
@@ -22546,24 +24608,58 @@ idea from Mihai:
 <!--
   <p>Support for actually painting gradients is optional. Instead of
   painting the gradients, user agents may instead just paint the first
   stop's color. However, <code
   title="dom-context-2d-createLinearGradient">createLinearGradient()</code>
   and <code
   title="dom-context-2d-createRadialGradient">createRadialGradient()</code>
   must always return objects when passed valid arguments.</p>
 -->
 
+  </div>
+
+  <hr>
 
   <p>Patterns are represented by objects implementing the opaque
   <code>CanvasPattern</code> interface.</p>
 
+  <dl class="domintro">
+
+   <dt><var title="">pattern</var> = <var title="">context</var> . <code title="dom-context-2d-createPattern">createPattern</code>(<var title="">image</var>, <var title="">repetition</var>)</dt>
+
+   <dd>
+
+    <p>Returns a <code>CanvasPattern</code> object that uses the given image
+    and repeats in the direction(s) given by the <var
+    title="">repetition</var> argument.</p>
+
+    <p>The allowed values for <code title="">repeat</code> are <code
+    title="">repeat</code> (both directions), <code
+    title="">repeat-x</code> (horizontal only), <code
+    title="">repeat-y</code> (vertical only), and <code
+    title="">no-repeat</code> (neither). If the <var
+    title="">repetition</var> argument is empty or null, the value
+    <code title="">repeat</code> is used.</p>
+
+    <p>If the first argument isn't an image, throws a
+    <code>TYPE_MISMATCH_ERR</code> exception. If the image is not
+    fully decoded yet, or has no image data, throws an
+    <code>INVALID_STATE_ERR</code> exception. If the second argument
+    isn't one of the allowed values, throws a <code>SYNTAX_ERR</code>
+    exception.</p>
+
+   </dd>
+
+  </dl>
+
+  <div class="impl">
+
   <p>To create objects of this type, the <dfn
   title="dom-context-2d-createPattern"><code>createPattern(<var
   title="">image</var>, <var title="">repetition</var>)</code></dfn>
   method is used. The first argument gives the image to use as the
   pattern (either an <code>HTMLImageElement</code> or an
   <code>HTMLCanvasElement</code>). Modifying this image after calling
   the <code
   title="dom-context-2d-createPattern">createPattern()</code> method
   must not affect the pattern. The second argument must be a string
   with one of the following values: <code title="">repeat</code>,
@@ -22616,24 +24712,82 @@ idea from Mihai:
   animation if there is no poster frame, must be used.</p>
   <!-- drawImage() has an equivalent paragraph -->
 
   <!--
    Requests for v4 features:
     * apply transforms to patterns, so you don't have to create
       transformed patterns manually by rendering them to an off-screen
       canvas then using that canvas as the pattern.
   -->
 
+  </div>
+
 
 
   <h6>Line styles</h6>
 
+  <dl class="domintro">
+
+   <dt><var title="">context</var> . <code title="dom-context-2d-lineWidth">lineWidth</code> [ = <var title="">value</var> ]</dt>
+
+   <dd>
+
+    <p>Returns the current line width.</p>
+
+    <p>Can be set, to change the line width. Values that are not
+    finite values greater than zero are ignored.</p>
+
+   </dd>
+
+   <dt><var title="">context</var> . <code title="dom-context-2d-lineCap">lineCap</code> [ = <var title="">value</var> ]</dt>
+
+   <dd>
+
+    <p>Returns the current line cap style.</p>
+
+    <p>Can be set, to change the line cap style.</p>
+
+    <p>The possible line cap styles are <code>butt</code>,
+    <code>round</code>, and <code>square</code>. Other values are
+    ignored.</p>
+
+   </dd>
+
+   <dt><var title="">context</var> . <code title="dom-context-2d-lineJoin">lineJoin</code> [ = <var title="">value</var> ]</dt>
+
+   <dd>
+
+    <p>Returns the current line join style.</p>
+
+    <p>Can be set, to change the line join style.</p>
+
+    <p>The possible line join styles are <code>bevel</code>,
+    <code>round</code>, and <code>miter</code>. Other values are
+    ignored.</p>
+
+   </dd>
+
+   <dt><var title="">context</var> . <code title="dom-context-2d-miterLimit">miterLimit</code> [ = <var title="">value</var> ]</dt>
+
+   <dd>
+
+    <p>Returns the current miter limit ratio.</p>
+
+    <p>Can be set, to change the miter limit ratio. Values that are
+    not finite values greater than zero are ignored.</p>
+
+   </dd>
+
+  </dl>
+
+  <div class="impl">
+
   <p>The <dfn
   title="dom-context-2d-lineWidth"><code>lineWidth</code></dfn>
   attribute gives the width of lines, in coordinate space units. On
   setting, zero, negative, infinite, and NaN values must be ignored,
   leaving the value unchanged.</p>
 
   <p>When the context is created, the <code
   title="dom-context-2d-lineWidth">lineWidth</code> attribute must
   initially have the value <code>1.0</code>.</p>
 
@@ -22742,26 +24896,65 @@ notes on what would need to be defined for dashed lines:
 > array later. But after that, what does it do when stroking multiple
 > subpaths, in terms of offsetting the dashes? When you use strokeRect,
 > where is offset 0? Does moveTo reset the offset? How does it interact
 > with lineCap/lineJoin? All the potential issues need test cases too,
 > and the implementations need to make sure they handle any edge cases
 > that the underlying graphics library does differently. (SVG Tiny 1.2
 > appears to skip some of the problems by leaving things undefined and
 > allowing whatever behavior the graphics library has.)
   -->
 
+  </div>
+
 
   <h6><dfn>Shadows</dfn></h6>
 
   <p>All drawing operations are affected by the four global shadow
   attributes.</p>
 
+  <dl class="domintro">
+
+   <dt><var title="">context</var> . <code title="dom-context-2d-shadowColor">shadowColor</code> [ = <var title="">value</var> ]</dt>
+
+   <dd>
+
+    <p>Returns the current shadow color.</p>
+
+    <p>Can be set, to change the shadow color. Values that cannot be parsed as CSS colors are ignored.</p>
+
+   </dd>
+
+   <dt><var title="">context</var> . <code title="dom-context-2d-shadowOffsetX">shadowOffsetX</code> [ = <var title="">value</var> ]</dt>
+   <dt><var title="">context</var> . <code title="dom-context-2d-shadowOffsetY">shadowOffsetY</code> [ = <var title="">value</var> ]</dt>
+
+   <dd>
+
+    <p>Returns the current shadow offset.</p>
+
+    <p>Can be set, to change the shadow offset. Values that are not finite numbers are ignored.</p>
+
+   </dd>
+
+   <dt><var title="">context</var> . <code title="dom-context-2d-shadowBlur">shadowBlur</code> [ = <var title="">value</var> ]</dt>
+
+   <dd>
+
+    <p>Returns the current level of blur applied to shadows.</p>
+
+    <p>Can be set, to change the blur level. Values that are not finite numbers greater than or equal to zero are ignored.</p>
+
+   </dd>
+
+  </dl>
+
+  <div class="impl">
+
   <p>The <dfn
   title="dom-context-2d-shadowColor"><code>shadowColor</code></dfn>
   attribute sets the color of the shadow.</p>
 
   <p>When the context is created, the <code
   title="dom-context-2d-shadowColor">shadowColor</code> attribute
   initially must be fully-transparent black.</p>
 
   <p>On getting, the <span title="serialization of a
   color">serialization of the color</span> must be returned.</p>
@@ -22855,50 +25048,86 @@ notes on what would need to be defined for dashed lines:
 
    <li> <p>Multiply the alpha component of every pixel in <var
    title="">B</var> by the alpha component of the color of <code
    title="dom-context-2d-shadowColor">shadowColor</code>.</p> </li>
 
    <li> <p>The shadow is in the bitmap <var title="">B</var>, and is
    rendered as part of the drawing model described below.</p> </li>
 
   </ol>
 
+  </div>
+
 
   <h6>Simple shapes (rectangles)</h6>
 
   <p>There are three methods that immediately draw rectangles to the
   bitmap. They each take four arguments; the first two give the <var
   title="">x</var> and <var title="">y</var> coordinates of the top
   left of the rectangle, and the second two give the width <var
   title="">w</var> and height <var title="">h</var> of the rectangle,
   respectively.</p>
 
+  <div class="impl">
+
   <p>The <span title="dom-context-2d-transformation">current
   transformation matrix</span> must be applied to the following four
   coordinates, which form the path that must then be closed to get the
   specified rectangle: <span>(<var title="">x</var>, <var
   title="">y</var>)</span>, <span>(<span><var title="">x</var>+<var
   title="">w</var></span>, <var title="">y</var>)</span>,
   <span>(<span><var title="">x</var>+<var title="">w</var></span>,
   <span><var title="">y</var>+<var title="">h</var></span>)</span>,
   <span>(<var title="">x</var>, <span><var title="">y</var>+<var
   title="">h</var></span>)</span>.</p>
 
   <p>Shapes are painted without affecting the current path, and are
   subject to the <span title="clipping region">clipping region</span>,
   and, with the exception of <code
   title="dom-context-2d-clearRect">clearRect()</code>, also <span
   title="shadows">shadow effects</span>, <span
   title="dom-context-2d-globalAlpha">global alpha</span>, and <span
   title="dom-context-2d-globalCompositeOperation">global composition
   operators</span>.</p>
 
+  </div>
+
+  <dl class="domintro">
+
+   <dt><var title="">context</var> . <code title="dom-context-2d-clearRect">clearRect</code>(<var title="">x</var>, <var title="">y</var>, <var title="">w</var>, <var title="">h</var>)</dt>
+
+   <dd>
+
+    <p>Clears all pixels on the canvas in the given rectangle to transparent black.</p>
+
+   </dd>
+
+   <dt><var title="">context</var> . <code title="dom-context-2d-fillRect">fillRect</code>(<var title="">x</var>, <var title="">y</var>, <var title="">w</var>, <var title="">h</var>)</dt>
+
+   <dd>
+
+    <p>Paints the given rectangle onto the canvas, using the current fill style.</p>
+
+   </dd>
+
+   <dt><var title="">context</var> . <code title="dom-context-2d-strokeRect">strokeRect</code>(<var title="">x</var>, <var title="">y</var>, <var title="">w</var>, <var title="">h</var>)</dt>
+
+   <dd>
+
+    <p>Paints the box that outlines the given rectangle onto the canvas, using the current stroke style.</p>
+
+   </dd>
+
+  </dl>
+
+  <div class="impl">
+
   <p>The <dfn title="dom-context-2d-clearRect"><code>clearRect(<var
   title="">x</var>, <var title="">y</var>, <var title="">w</var>, <var
   title="">h</var>)</code></dfn> method must clear the pixels in the
   specified rectangle that also intersect the current clipping region
   to a fully transparent black, erasing any previous image. If either
   height or width are zero, this method has no effect.</p>
 
   <p>The <dfn title="dom-context-2d-fillRect"><code>fillRect(<var
   title="">x</var>, <var title="">y</var>, <var title="">w</var>, <var
   title="">h</var>)</code></dfn> method must paint the specified
@@ -22913,35 +25142,159 @@ notes on what would need to be defined for dashed lines:
   title="dom-context-2d-strokeStyle">strokeStyle</code>, <code
   title="dom-context-2d-lineWidth">lineWidth</code>, <code
   title="dom-context-2d-lineJoin">lineJoin</code>, and (if
   appropriate) <code
   title="dom-context-2d-miterLimit">miterLimit</code> attributes. If
   both height and width are zero, this method has no effect, since
   there is no path to stroke (it's a point). If only one of the two is
   zero, then the method will draw a line instead (the path for the
   outline is just a straight line along the non-zero dimension).</p>
 
+  </div>
+
 
   <h6>Complex shapes (paths)</h6>
 
   <p>The context always has a current path. There is only one current
-  path, it is not part of the <span title="dom-context-2d-">drawing
-  state</span>.</p>
+  path, it is not part of the <span>drawing state</span>.</p>
 
   <p>A <dfn>path</dfn> has a list of zero or more subpaths. Each
   subpath consists of a list of one or more points, connected by
   straight or curved lines, and a flag indicating whether the subpath
   is closed or not. A closed subpath is one where the last point of
   the subpath is connected to the first point of the subpath by a
   straight line. Subpaths with fewer than two points are ignored when
   painting the path.</p>
 
+  <dl class="domintro">
+
+   <dt><var title="">context</var> . <code title="dom-context-2d-beginPath">beginPath</code>()</dt>
+
+   <dd>
+
+    <p>Resets the current path.</p>
+
+   </dd>
+
+   <dt><var title="">context</var> . <code title="dom-context-2d-moveTo">moveTo</code>(<var title="">x</var>, <var title="">y</var>)</dt>
+
+   <dd>
+
+    <p>Creates a new subpath with the given point.</p>
+
+   </dd>
+
+   <dt><var title="">context</var> . <code title="dom-context-2d-closePath">closePath</code>()</dt>
+
+   <dd>
+
+    <p>Marks the current subpath as closed, and starts a new subpath with a point the same as the start and end of the newly closed subpath.</p>
+
+   </dd>
+
+   <dt><var title="">context</var> . <code title="dom-context-2d-lineTo">lineTo</code>(<var title="">x</var>, <var title="">y</var>)</dt>
+
+   <dd>
+
+    <p>Adds the given point to the current subpath, connected to the previous one by a straight line.</p>
+
+   </dd>
+
+   <dt><var title="">context</var> . <code title="dom-context-2d-quadraticCurveTo">quadraticCurveTo</code>(<var title="">cpx</var>, <var title="">cpy</var>, <var title="">x</var>, <var title="">y</var>)</dt>
+
+   <dd>
+
+    <p>Adds the given point to the current path, connected to the previous one by a quadratic B&eacute;zier curve with the given control point.</p>
+
+   </dd>
+
+   <dt><var title="">context</var> . <code title="dom-context-2d-bezierCurveTo">bezierCurveTo</code>(<var title="">cpx</var>, <var title="">cpy</var>, <var title="">x</var>, <var title="">y</var>)</dt>
+
+   <dd>
+
+    <p>Adds the given point to the current path, connected to the previous one by a cubic B&eacute;zier curve with the given control points.</p>
+
+   </dd>
+
+   <dt><var title="">context</var> . <code title="dom-context-2d-arcTo">arcTo</code>(<var title="">x1</var>, <var title="">y1</var>, <var title="">x2</var>, <var title="">y2</var>, <var title="">radius</var>)</dt>
+
+   <dd>
+
+    <p>Adds a point to the current path, connected to the previous one
+    by a straight line, then adds a second point to the current path,
+    connected to the previous one by an arc whose properties are
+    described by the arguments.</p>
+
+    <p>Throws an <code>INDEX_SIZE_ERR</code> exception if the given
+    radius is negative.</p>
+
+   </dd>
+
+   <dt><var title="">context</var> . <code title="dom-context-2d-arc">arc</code>(<var title="">x</var>, <var title="">y</var>, <var title="">radius</var>, <var title="">startAngle</var>, <var title="">endAngle</var>, <var title="">anticlockwise</var>)</dt>
+
+   <dd>
+
+    <p>Adds points to the subpath such that the arc described by the
+    circumference of the circle described by the arguments, starting
+    at the given start angle and ending at the given end angle, going
+    in the given direction, is added the the path, connected to the
+    previous point by a straight line.</p>
+
+    <p>Throws an <code>INDEX_SIZE_ERR</code> exception if the given
+    radius is negative.</p>
+
+   </dd>
+
+   <dt><var title="">context</var> . <code title="dom-context-2d-rect">rect</code>(<var title="">x</var>, <var title="">y</var>, <var title="">w</var>, <var title="">h</var>)</dt>
+
+   <dd>
+
+    <p>Adds a new closed subpath to the path, representing the given rectangle.</p>
+
+   </dd>
+
+   <dt><var title="">context</var> . <code title="dom-context-2d-fill">fill</code>()</dt>
+
+   <dd>
+
+    <p>Fills the subpaths with the current fill style.</p>
+
+   </dd>
+
+   <dt><var title="">context</var> . <code title="dom-context-2d-stroke">stroke</code>()</dt>
+
+   <dd>
+
+    <p>Strokes the subpaths with the current stroke style.</p>
+
+   </dd>
+
+   <dt><var title="">context</var> . <code title="dom-context-2d-clip">clip</code>()</dt>
+
+   <dd>
+
+    <p>Further constrains the clipping region to the given path.</p>
+
+   </dd>
+
+   <dt><var title="">context</var> . <code title="dom-context-2d-isPointInPath">isPointInPath</code>(<var title="">x</var>, <var title="">y</var>)</dt>
+
+   <dd>
+
+    <p>Returns true if the given point is in the current path.</p>
+
+   </dd>
+
+  </dl>
+
+  <div class="impl">
+
   <p>Initially, the context's path must have zero subpaths.</p>
 
   <p>The points and lines added to the path by these methods must be
   transformed according to the <span
   title="dom-context-2d-transformation">current transformation
   matrix</span> as they are added.</p>
 
 
   <p>The <dfn
   title="dom-context-2d-beginPath"><code>beginPath()</code></dfn>
@@ -23212,23 +25565,101 @@ notes on what would need to be defined for dashed lines:
   title="">x</var>, <var title="">y</var>)</code></dfn> method must
   return true if the point given by the <var title="">x</var> and <var
   title="">y</var> coordinates passed to the method, when treated as
   coordinates in the canvas coordinate space unaffected by the current
   transformation, is inside the current path as determined by the
   non-zero winding number rule; and must return false
   otherwise. Points on the path itself are considered to be inside the
   path. If either of the arguments is infinite or NaN, then the method
   must return false.</p>
 
+  </div>
+
 
   <h6>Text</h6> <!-- a v3 feature -->
 
+  <dl class="domintro">
+
+   <dt><var title="">context</var> . <code title="dom-context-2d-font">font</code> [ = <var title="">value</var> ]</dt>
+
+   <dd>
+
+    <p>Returns the current font settings.</p>
+
+    <p>Can be set, to change the font. The syntax is the same as for
+    the CSS 'font' property; values that cannot be parsed as CSS font
+    values are ignored.</p>
+
+    <p>Relative keywords and lengths are computed relative to the
+    default font, 10px sans-serif.</p>
+
+   </dd>
+
+   <dt><var title="">context</var> . <code title="dom-context-2d-textAlign">textAlign</code> [ = <var title="">value</var> ]</dt>
+
+   <dd>
+
+    <p>Returns the current text alignment settings.</p>
+
+    <p>Can be set, to change the alignment. The possible values are
+    <code title="">start</code>, <code title="">end</code>, <code
+    title="">left</code>, <code title="">right</code>, and <code
+    title="">center</code>. The default is <code
+    title="">start</code>. Other values are ignored.</p>
+
+   </dd>
+
+   <dt><var title="">context</var> . <code title="dom-context-2d-textBaseline">textBaseline</code> [ = <var title="">value</var> ]</dt>
+
+   <dd>
+
+    <p>Returns the current baseline alignment settings.</p>
+
+    <p>Can be set, to change the baseline alignment. The possible
+    values and their meanings are given below. The default is <code
+    title="">alphabetic</code>. Other values are ignored.</p>
+
+   </dd>
+
+   <dt><var title="">context</var> . <code title="dom-context-2d-fillText">fillText</code>(<var title="">text</var>, <var title="">x</var>, <var title="">y</var> [, <var title="">maxWidth</var> ] )</dt>
+   <dt><var title="">context</var> . <code title="dom-context-2d-strokeText">strokeText</code>(<var title="">text</var>, <var title="">x</var>, <var title="">y</var> [, <var title="">maxWidth</var> ] )</dt>
+
+   <dd>
+
+    <p>Fills or strokes (respectively) the given text at the given
+    position. If a maximum width is provided, the text will be scaled
+    to fit that width if necessary.</p>
+
+   </dd>
+
+   <dt><var title="">metrics</var> = <var title="">context</var> . <code title="dom-context-2d-measureText">measureText</code>(<var title="">text</var>)</dt>
+
+   <dd>
+
+    <p>Returns a <code>TextMetrics</code> object with the metrics of the given text in the current font.</p>
+
+   </dd>
+
+   <dt><var title="">metrics</var> . <code title="dom-textmetrics-width">width</code></dt>
+
+   <dd>
+
+    <p>Returns the advance width of the text that was passed to the
+    <code title="dom-context-2d-measureText">measureText()</code>
+    method.</p>
+
+   </dd>
+
+  </dl>
+
+  <div class="impl">
+
   <p>The <dfn title="dom-context-2d-font"><code>font</code></dfn> DOM
   attribute, on setting, must be parsed the same way as the 'font'
   property of CSS (but without supporting property-independent
   stylesheet syntax like 'inherit'), and the resulting font must be
   assigned to the context, with the 'line-height' component forced to
   'normal'. If the new value is syntactically incorrect, then it must
   be ignored, without assigning a new font value. <a
   href="#refsCSS">[CSS]</a><!-- XXX generic version-independent
   reference --></p>
 
@@ -23281,20 +25712,22 @@ notes on what would need to be defined for dashed lines:
   title="dom-context-2d-textBaseline-middle">middle</code>, <code
   title="dom-context-2d-textBaseline-alphabetic">alphabetic</code>,
   <code
   title="dom-context-2d-textBaseline-ideographic">ideographic</code>,
   or <code title="dom-context-2d-textBaseline-bottom">bottom</code>,
   then the value must be changed to the new value. Otherwise, the new
   value must be ignored. When the context is created, the <code
   title="dom-context-2d-textBaseline">textBaseline</code> attribute
   must initially have the value <code title="">alphabetic</code>.</p>
 
+  </div>
+
   <p>The <code title="dom-context-2d-textBaseline">textBaseline</code>
   attribute's allowed keywords correspond to alignment points in the
   font:</p>
 
   <p><img src="images/baselines.png" alt="The top of the em square is
   roughly at the top of the glyphs in a font, the hanging baseline is
   where some glyphs like &#x0906; are anchored, the middle is half-way
   between the top of the em square and the bottom of the em square,
   the alphabetic baseline is where characters like &#x00C1;, &#x00FF;,
   &#x0066;, and &#x03A9; are anchored, the ideographic baseline is
@@ -23320,20 +25753,22 @@ notes on what would need to be defined for dashed lines:
    <dd>The alphabetic baseline</dd>
 
    <dt><dfn title="dom-context-2d-textBaseline-ideographic"><code>ideographic</code></dfn>
    <dd>The ideographic baseline</dd>
 
    <dt><dfn title="dom-context-2d-textBaseline-bottom"><code>bottom</code></dfn>
    <dd>The bottom of the em square</dd>
 
   </dl>
 
+  <div class="impl">
+
   <p>The <dfn
   title="dom-context-2d-fillText"><code>fillText()</code></dfn> and
   <dfn
   title="dom-context-2d-strokeText"><code>strokeText()</code></dfn>
   methods take three or four arguments, <var title="">text</var>, <var
   title="">x</var>, <var title="">y</var>, and optionally <var
   title="">maxWidth</var>, and render the given <var
   title="">text</var> at the given (<var title="">x</var>, <var
   title="">y</var>) coordinates ensuring that the text isn't wider
   than <var title="">maxWidth</var> if specified, using the current
@@ -23701,45 +26136,64 @@ v4DVT (also check for '- -' bits in the part above) -->
   obtain the bounding box dimensions of the text. If the text is to be
   rendered and removed, care needs to be taken to replace the entire
   area of the canvas that the clipping region covers, not just the box
   given by the em square height and measured text width.</p>
 
   <!-- v4: Drawing text along a given path -->
   <!-- v4: Adding text to a path -->
   <!-- see also: http://www.w3.org/TR/SVG11/text.html#TextpathLayoutRules -->
   <!-- see also: http://developer.mozilla.org/en/docs/Drawing_text_using_a_canvas -->
 
+  </div>
+
   <p class="note">A future version of the 2D context API may provide a
   way to render fragments of documents, rendered using CSS, straight
   to the canvas. This would be provided in preference to a dedicated
   way of doing multiline layout.</p>
 
 
+
   <h6>Images</h6>
 
   <p>To draw images onto the canvas, the <dfn
   title="dom-context-2d-drawImage"><code>drawImage</code></dfn> method
   can be used.</p>
 
   <p>This method can be invoked with three different sets of argments:</p>
 
   <ul class="brief">
    <li><code title="">drawImage(<var title="">image</var>, <var title="">dx</var>, <var title="">dy</var>)</code>
    <li><code title="">drawImage(<var title="">image</var>, <var title="">dx</var>, <var title="">dy</var>, <var title="">dw</var>, <var title="">dh</var>)</code>
    <li><code title="">drawImage(<var title="">image</var>, <var title="">sx</var>, <var title="">sy</var>, <var title="">sw</var>, <var title="">sh</var>, <var title="">dx</var>, <var title="">dy</var>, <var title="">dw</var>, <var title="">dh</var>)</code>
   </ul>
 
   <p>Each of those three can take either an
   <code>HTMLImageElement</code>, an <code>HTMLCanvasElement</code>, or
   an <code>HTMLVideoElement</code> for the <var title="">image</var>
   argument.</p>
 
+  <dl class="domintro">
+
+   <dt><var title="">context</var> . <code title="">drawImage</code>(<var title="">image</var>, <var title="">dx</var>, <var title="">dy</var>)</dt>
+   <dt><var title="">context</var> . <code title="">drawImage</code>(<var title="">image</var>, <var title="">dx</var>, <var title="">dy</var>, <var title="">dw</var>, <var title="">dh</var>)</dt>
+   <dt><var title="">context</var> . <code title="">drawImage</code>(<var title="">image</var>, <var title="">sx</var>, <var title="">sy</var>, <var title="">sw</var>, <var title="">sh</var>, <var title="">dx</var>, <var title="">dy</var>, <var title="">dw</var>, <var title="">dh</var>)</dt>
+
+   <dd>
+
+    <p>Draws the given image onto the canvas. The arguments are interpreted as per the diagram below.</p>
+
+   </dd>
+
+  </dl>
+
+  <div class="impl">
+
   <p>If not specified, the <var title="">dw</var> and <var
   title="">dh</var> arguments must default to the values of <var
   title="">sw</var> and <var title="">sh</var>, interpreted such that
   one CSS pixel in the image is treated as one unit in the canvas
   coordinate space. If the <var title="">sx</var>, <var
   title="">sy</var>, <var title="">sw</var>, and <var
   title="">sh</var> arguments are omitted, they must default to 0, 0,
   the image's intrinsic width in image pixels, and the image's
   intrinsic height in image pixels, respectively.</p>
 
@@ -23795,24 +26249,28 @@ v4DVT (also check for '- -' bits in the part above) -->
   title="">dh</var></span>), (<var title="">dx</var>, <span><var
   title="">dy</var>+<var title="">dh</var></span>).</p>
 
   <p>When <code title="dom-context-2d-drawImage">drawImage()</code> is
   invoked, the region of the image specified by the source rectangle
   must be painted on the region of the canvas specified by the
   destination rectangle, after applying the <span
   title="dom-context-2d-transformation">current transformation
   matrix</span> to the points of the destination rectangle.</p>
 
+  </div>
+
   <p><img src="images/drawImage.png" alt=""></p> <!-- no alt="" text
   since the image is just repeating what was stated in the previous
   paragraph. -->
 
+  <div class="impl">
+
   <p class="note">When a canvas is drawn onto itself, the drawing
   model requires the source to be copied before the image is drawn
   back onto the canvas, so it is possible to copy parts of a canvas
   onto overlapping parts of itself.</p>
 
   <p>When the <code
   title="dom-context-2d-drawImage">drawImage()</code> method is
   passed, as its <var title="">image</var> argument, an
   <code>HTMLImageElement</code> representing an animated image, the
   poster frame of the animation, or the first frame of the animation
@@ -23827,24 +26285,89 @@ v4DVT (also check for '- -' bits in the part above) -->
   subject to <span title="shadows">shadow effects</span>, <span
   title="dom-context-2d-globalAlpha">global alpha</span>, the <span
   title="clipping region">clipping region</span>, and <span
   title="dom-context-2d-globalCompositeOperation">global composition
   operators</span>.</p>
 
   <!-- XXX should somehow say that the image used is the actual image
   of the target element, not the rendered image (e.g. height/width
   attributes don't affect it -->
 
+  </div>
+
 
 
   <h6><dfn>Pixel manipulation</dfn></h6>
 
+  <dl class="domintro">
+
+   <dt><var title="">imagedata</var> = <var title="">context</var> . <code title="dom-context-2d-createImageData">createImageData</code>(<var title="">sw</var>, <var title="">sh</var>)</dt>
+
+   <dd>
+
+    <p>Returns an <code>ImageData</code> object with the given
+    dimensions in CSS pixels (which might map to a different number of
+    actual device pixels exposed by the object itself). All the pixels
+    in the returned object are transparent black.</p>
+
+   </dd>
+
+   <dt><var title="">imagedata</var> = <var title="">context</var> . <code title="dom-context-2d-getImageData">getImageData</code>(<var title="">sx</var>, <var title="">sy</var>, <var title="">sw</var>, <var title="">sh</var>)</dt>
+
+   <dd>
+
+    <p>Returns an <code>ImageData</code> object containing the image
+    data for the given rectangle of the canvas.</p>
+
+    <p>Throws a <code>NOT_SUPPORTED_ERR</code> exception if any of the
+    arguments are not finite. Throws an <code>INDEX_SIZE_ERR</code>
+    exception if the either of the width or height arguments are
+    zero.</p>
+
+   </dd>
+
+   <dt><var title="">imagedata</var> . <code title="dom-imagedata-width">width</code></dt>
+   <dt><var title="">imagedata</var> . <code title="dom-imagedata-height">height</code></dt>
+
+   <dd>
+
+    <p>Returns the actual dimensions of the data in the <code>ImageData</code> object, in device pixels.</p>
+
+   </dd>
+
+   <dt><var title="">imagedata</var> . <code title="dom-imagedata-data">data</code></dt>
+
+   <dd>
+
+    <p>Returns the one-dimensional array containing the data.</p>
+
+   </dd>
+
+   <dt><var title="">context</var> . <code title="dom-context-2d-putImageData">putImageData</code>(<var title="">imagedata</var>, <var title="">dx</var>, <var title="">dy</var> [, <var title="">dirtyX</var>, <var title="">dirtyY</var>, <var title="">dirtyWidth</var>, <var title="">dirtyHeight</var> ])</dt>
+
+   <dd>
+
+    <p>Paints the data from the given <code>ImageData</code> object
+    onto the canvas. If a dirty rectangle is provided, only the pixels
+    from that rectangle are painted.</p>
+
+    <p>If the first argument isn't an <code>ImageData</code> object,
+    throws a <code>TYPE_MISMATCH_ERR</code> exception. Throws a
+    <code>NOT_SUPPORTED_ERR</code> exception if any of the other
+    arguments are not finite.</p>
+
+   </dd>
+
+  </dl>
+
+  <div class="impl">
+
   <p>The <dfn
   title="dom-context-2d-createImageData"><code>createImageData(<var
   title="">sw</var>, <var title="">sh</var>)</code></dfn> method must
   return an <code>ImageData</code> object representing a rectangle
   with a width in CSS pixels equal to the absolute magnitude of <var
   title="">sw</var> and a height in CSS pixels equal to the absolute
   magnitude of <var title="">sh</var>, filled with transparent
   black.</p>
 
   <p>The <dfn
@@ -24082,20 +26605,22 @@ context.getImageData(0, 0, w, h);</pre>
   title="dom-context-2d-transformation">transformation matrix</span>,
   <span title="shadows">shadow attributes</span>, <span
   title="dom-context-2d-globalAlpha">global alpha</span>, the <span
   title="clipping region">clipping region</span>, and <span
   title="dom-context-2d-globalCompositeOperation">global composition
   operator</span> must not affect the <code
   title="dom-context-2d-getImageData">getImageData()</code> and <code
   title="dom-context-2d-putImageData">putImageData()</code>
   methods.</p>
 
+  </div>
+
   <div class="example">
 
    <p>The data returned by <code
    title="dom-context-2d-getImageData">getImageData()</code> is at the
    resolution of the canvas backing store, which is likely to not be
    one device pixel to each CSS pixel if the display used is a high
    resolution display.</p>
 
    <p>In the following example, the script generates an
    <code>ImageData</code> object so that it can draw onto it.</p>
@@ -24178,20 +26703,22 @@ function AddCloud(data, x, y) { ... }</pre>
   &lt;/script>
  &lt;/head>
  &lt;body onload="init()">
   &lt;canvas>&lt;/canvas>
  &lt;/body>
 &lt;/html></pre>
 
   </div>
 
 
+  <div class="impl">
+
   <h6>Drawing model</h6>
 
   <p>When a shape or image is painted, user agents must follow these
   steps, in the order given (or act as if they do):</p>
 
   <ol>
 
    <li><p>Render the shape or image, creating image <var
    title="">A</var>, as described in the previous sections. For
    shapes, the current fill, stroke, and line styles must be honored,
@@ -24215,30 +26742,33 @@ function AddCloud(data, x, y) { ... }</pre>
    title="dom-context-2d-globalAlpha">globalAlpha</code>.</p></li>
 
    <li><p>Within the clipping region, composite <var title="">A</var>
    over the current canvas bitmap using the current composition
    operator.</p></li>
 
   </ol>
 
   <!-- XXX add xrefs in the list above -->
 
+  </div>
+
 
 
 <!--
   <h5 id="3d">The 3D context</h5>
 
   <p class="XXX">Well, one day.</p>
 -->
 
 
 
+  <div class="impl">
 
   <h5>Color spaces and color correction</h5>
 
   <p>The <code>canvas</code> APIs must perform color correction at
   only two points: when rendering images with their own gamma
   correction and color space information onto the canvas, to convert
   the image to the color space used by the canvas (e.g. using the
   <code title="dom-context-2d-drawImage">drawImage()</code> method
   with an <code>HTMLImageElement</code> object), and when rendering
   the actual canvas bitmap to the output device.</p>
@@ -24269,20 +26799,24 @@ function AddCloud(data, x, y) { ... }</pre>
   correction information (such as those returned by the <code
   title="dom-canvas-toDataURL">toDataURL()</code> method) must be
   rendered with no color correction.</p>
 
   <p class="note">Thus, in the 2D context, calling the <code
   title="dom-context-2d-drawImage">drawImage()</code> method to render
   the output of the <code
   title="dom-canvas-toDataURL">toDataURL()</code> method to the
   canvas, given the appropriate dimensions, has no visible effect.</p>
 
+  </div>
+
+
+  <div class="impl">
 
   <h5>Security with <code>canvas</code> elements</h5>
 
   <p><strong>Information leakage</strong> can occur if scripts from
   one <span>origin</span> can access information (e.g. read pixels)
   from images from another origin (one that isn't the <span
   title="same origin">same</span>).</p>
 
   <p>To mitigate this, <code>canvas</code> elements are defined to
   have a flag indicating whether they are <i>origin-clean</i>. All
@@ -24345,20 +26879,22 @@ function AddCloud(data, x, y) { ... }</pre>
   the 2D context of a <code>canvas</code> element whose
   <i>origin-clean</i> flag is set to false is called with otherwise
   correct arguments, the method must raise a <code>SECURITY_ERR</code>
   exception.</p>
 
   <p class="note">Even resetting the canvas state by changing its
   <code title="attr-canvas-width">width</code> or <code
   title="attr-canvas-height">height</code> attributes doesn't reset
   the <i>origin-clean</i> flag.</p>
 
+  </div>
+
 
 
   <h4>The <dfn><code>map</code></dfn> element</h4>
 
   <dl class="element">
    <dt>Categories</dt>
    <dd><span>Flow content</span>.</dd>
    <dt>Contexts in which this element may be used:</dt>
    <dd>Where <span>flow content</span> is expected.</dd>
    <dt>Content model:</dt>
@@ -24380,36 +26916,60 @@ function AddCloud(data, x, y) { ... }</pre>
   <code>area</code> element descendants, defines an <span>image
   map</span>. The element <span>represents</span> its children.</p>
 
   <p>The <dfn title="attr-map-name"><code>name</code></dfn> attribute
   gives the map a name so that it can be referenced. The attribute
   must be present and must have a non-empty value with no <span
   title="space character">space characters</span>. If the <code
   title="attr-id">id</code> attribute is also specified, both
   attributes must have the same value.</p>
 
+  <dl class="domintro">
+
+   <dt><var title="">map</var> . <code title="dom-map-areas">areas</code></dt>
+
+   <dd>
+
+    <p>Returns an <code>HTMLCollection</code> of the <code>area</code> elements in the <code>map</code>.</p>
+
+   </dd>
+
+   <dt><var title="">map</var> . <code title="dom-map-images">images</code></dt>
+
+   <dd>
+
+    <p>Returns an <code>HTMLCollection</code> of the <code>img</code> and <code>object</code> elements that use the <code>map</code>.</p>
+
+   </dd>
+
+  </dl>
+
+  <div class="impl">
+
   <p>The <dfn title="dom-map-areas"><code>areas</code></dfn> attribute
   must return an <code>HTMLCollection</code> rooted at the
   <code>map</code> element, whose filter matches only
   <code>area</code> elements.</p>
 
   <p>The <dfn title="dom-map-images"><code>images</code></dfn>
   attribute must return an <code>HTMLCollection</code> rooted at the
   <code>Document</code> node, whose filter matches only
   <code>img</code> and <code>object</code> elements that are
   associated with this <code>map</code> element according to the
   <span>image map</span> processing model.</p>
 
   <p>The DOM attribute <dfn
   title="dom-map-name"><code>name</code></dfn> must
   <span>reflect</span> the content attribute of the same name.</p>
-  
+
+  </div>
+
 
 
   <h4>The <dfn><code>area</code></dfn> element</h4>
 
   <dl class="element">
    <dt>Categories</dt>
    <dd><span>Flow content</span>.</dd>
    <dd><span>Phrasing content</span>.</dd>
    <dt>Contexts in which this element may be used:</dt>
    <dd>Where <span>phrasing content</span> is expected, but only if there is a <code>map</code> element ancestor.</dd>
@@ -24470,67 +27030,68 @@ function AddCloud(data, x, y) { ... }</pre>
   represented by the element cannot be selected, and the <code
   title="attr-area-alt">alt</code> attribute must be omitted.</p>
 
   <p>In both cases, the <code title="attr-area-shape">shape</code> and
   <code title="attr-area-coords">coords</code> attributes specify the
   area.</p>
 
   <p>The <dfn title="attr-area-shape"><code>shape</code></dfn>
   attribute is an <span>enumerated attribute</span>. The following
   table lists the keywords defined for this attribute. The states
-  given in the first cell of the rows with keywords give the
-  states to which those keywords map. Some of the keywords are
-  non-conforming, as noted in the last column.</p>
+  given in the first cell of the rows with keywords give the states to
+  which those keywords map. <span class="impl">Some of the keywords
+  are non-conforming, as noted in the last column.</span></p>
 
   <table>
    <thead>
     <tr>
      <th>State
      <th>Keywords
-     <th>Notes
+     <th class="impl">Notes
    <tbody>
     <tr>
      <td rowspan=2><span title="attr-area-shape-circle">Circle state</span>
-     <td><dfn title="attr-area-shape-keyword-circ"><code>circ</code></dfn>
-     <td>Non-conforming
-    <tr>
      <td><dfn title="attr-area-shape-keyword-circle"><code>circle</code></dfn>
-     <td>
+     <td class="impl">
+    <tr>
+     <td class="impl"><dfn title="attr-area-shape-keyword-circ"><code>circ</code></dfn>
+     <td class="impl">Non-conforming
     <tr>
      <td><span title="attr-area-shape-default">Default state</span>
      <td><dfn title="attr-area-shape-keyword-default"><code>default</code></dfn>
-     <td>
+     <td class="impl">
     <tr>
      <td rowspan=2><span title="attr-area-shape-poly">Polygon state</span>
      <td><dfn title="attr-area-shape-keyword-poly"><code>poly</code></dfn>
-     <td>
+     <td class="impl">
     <tr>
-     <td><dfn title="attr-area-shape-keyword-polygon"><code>polygon</code></dfn>
-     <td>Non-conforming
+     <td class="impl"><dfn title="attr-area-shape-keyword-polygon"><code>polygon</code></dfn>
+     <td class="impl">Non-conforming
     <tr>
      <td rowspan=2><span title="attr-area-shape-rect">Rectangle state</span>
      <td><dfn title="attr-area-shape-keyword-rect"><code>rect</code></dfn>
-     <td>
+     <td class="impl">
     <tr>
-     <td><dfn title="attr-area-shape-keyword-rectangle"><code>rectangle</code></dfn>
-     <td>Non-conforming
+     <td class="impl"><dfn title="attr-area-shape-keyword-rectangle"><code>rectangle</code></dfn>
+     <td class="impl">Non-conforming
   </table>
 
   <p>The attribute may be omitted. The <i>missing value default</i> is
   the <span title="attr-area-shape-rect">rectangle</span> state.</p>
 
   <p>The <dfn title="attr-area-coords"><code>coords</code></dfn>
   attribute must, if specified, contain a <span>valid list of
   integers</span>. This attribute gives the coordinates for the shape
   described by the <code title="attr-area-shape">shape</code>
-  attribute. The processing for this attribute is described as part of
-  the <span>image map</span> processing model.</p>
+  attribute. <span title="impl">The processing for this attribute is
+  described as part of the <span>image map</span> processing
+  model.</span></p>
 
   <!-- v2: It was suggested by John S. Urban that coords should
   support percentages as well as pixels, so that one could use the
   same image map for images of various sizes. -->
 
   <p>In the <dfn title="attr-area-shape-circle">circle state</dfn>,
   <code>area</code> elements must have a <code
   title="attr-area-coords">coords</code> attribute present, with three
   integers, the last of which must be non-negative. The first integer
   must be the distance in CSS pixels from the left edge of the image
@@ -24557,42 +27118,48 @@ function AddCloud(data, x, y) { ... }</pre>
   <code>area</code> elements must have a <code
   title="attr-area-coords">coords</code> attribute with exactly four
   integers, the first of which must be less than the third, and the
   second of which must be less than the fourth. The four points must
   represent, respectively, the distance from the left edge of the
   image to the left side of the rectangle, the distance from the
   top edge to the top side, the distance from the left edge to the
   right side, and the distance from the top edge to the bottom side,
   all in CSS pixels.</p>
 
+  <div class="impl">
+
   <p>When user agents allow users to <span title="following
   hyperlinks">follow hyperlinks</span> created using the
   <code>area</code> element, as described in the next section, the
   <code title="attr-hyperlink-href">href</code>,
   <code title="attr-hyperlink-target">target</code> and <code
   title="attr-hyperlink-ping">ping</code> attributes decide how the
   link is followed. The <code title="attr-hyperlink-rel">rel</code>,
   <code title="attr-hyperlink-media">media</code>, <code
   title="attr-hyperlink-hreflang">hreflang</code>, and <code
   title="attr-hyperlink-type">type</code> attributes may be used to
   indicate to the user the likely nature of the target resource before
   the user follows the link.</p>
 
+  </div>
+
   <p>The <code title="attr-hyperlink-target">target</code>, <code
   title="attr-hyperlink-ping">ping</code>, <code
   title="attr-hyperlink-rel">rel</code>, <code
   title="attr-hyperlink-media">media</code>, <code
   title="attr-hyperlink-hreflang">hreflang</code>, and <code
   title="attr-hyperlink-type">type</code> attributes must be omitted
   if the <code title="attr-hyperlink-href">href</code> attribute is
   not present.</p>
 
+  <div class="impl">
+
   <p>The <span>activation behavior</span> of <code>area</code>
   elements is to run the following steps:</p>
 
   <ol>
 
    <li>If the <code title="event-DOMActivate">DOMActivate</code> event
    in question is not <span
    title="concept-events-trusted">trusted</span> (i.e. a <code
    title="dom-click">click()</code> method call was the reason for the
    event being dispatched), and the <code>area</code> element's <code
@@ -24622,33 +27189,38 @@ function AddCloud(data, x, y) { ... }</pre>
   <p>The DOM attribute <dfn
   title="dom-area-shape"><code>shape</code></dfn> must
   <span>reflect</span> the <code title="attr-area-shape">shape</code>
   content attribute, <span>limited to only known values</span>.</p>
 
   <p>The DOM attribute <dfn
   title="dom-area-rellist"><code>relList</code></dfn> must
   <span>reflect</span> the <code title="attr-hyperlink-rel">rel</code>
   content attribute.</p>
 
+  </div>
 
 
   <h4 id="image-maps">Image maps</h4>
 
   <!-- TESTS
   http://software.hixie.ch/utilities/js/live-dom-viewer/?%3C%21DOCTYPE%20html%3E%0A%3Cimg%20src%3D%22http%3A//hixie.ch/resources/images/smallcats%22%20usemap%3D%23a%20onclick%3Dw%28%27img%27%29%3E%0A%3Cmap%20name%3Da%3E%0A%20%3Carea%20onclick%3Dw%28%271%27%29%20coords%3D%270%25%200%25%20100%25%20100%25%27%20href%3Djavascript%3A%3E%0A%3C/map%3E
   http://software.hixie.ch/utilities/js/live-dom-viewer/?%3C%21DOCTYPE%20html%3E%0A%3Cbody%20onfocus%3D%22w%28document.activeElement.tagName%29%22%3E%0A%3Cimg%20src%3D%22http%3A//hixie.ch/resources/images/smallcats%22%20usemap%3D%23a%20onclick%3Dw%28%27img%27%29%20onfocus%3D%22w%28document.activeElement.tagName%29%22%3E%0A%3Cimg%20src%3D%22http%3A//hixie.ch/resources/images/sample%22%20usemap%3D%23a%20onclick%3Dw%28%27img%27%29%20onfocus%3D%22w%28document.activeElement.tagName%29%22%3E%0A%3Cmap%20name%3Da%20onfocus%3D%22w%28document.activeElement.tagName%29%22%3E%0A%20%3Carea%20onclick%3Dw%28%271%27%29%20coords%3D%270%200%2050%2050%27%20href%3Djavascript%3A%20onfocus%3D%22w%28document.activeElement.tagName%29%22%3E%0A%3C/map%3E%0A%3Cscript%3E%0A%20var%20x%20%3D%20document.getElementsByTagName%28%27img%27%29%5B0%5D%3B%0A%20x.parentNode.appendChild%28x%29%3B%0A%20document.getElementsByTagName%28%27area%27%29%5B0%5D.focus%28%29%3B%0A%3C/script%3E
   http://software.hixie.ch/utilities/js/live-dom-viewer/?%3C%21DOCTYPE%20html%3Ex%3Cmap%3E%3Carea%20shape%3Dpolyg%20coords%3D%221%2C2%203%22%3E%3C/map%3E%0A%3Cscript%3Ex%20%3D%20document.getElementsByTagName%28%27area%27%29%5B0%5D%3B%20w%28x.shape%20+%20%27%20%27%20+%20x.coords%29%3C/script%3E
   http://software.hixie.ch/utilities/js/live-dom-viewer/?%3C%21DOCTYPE%20html%3E%0D%0A%3Cp%3E%3Cimg%20src%3D%22http%3A//hixie.ch/resources/images/astrophy/128%22%20usemap%3D%23a%3E%0D%0A%3Cmap%20name%3Da%3E%3Carea%20shape%3Dcirc%20coords%3D%2220%2C20%2C10%25%22%20href%3D%23%3E%3Carea%20shape%3Dcirc%20coords%3D%2220%2C20%2C10%22%20href%3D%23%3E%3C/map%3E%0D%0A%3Cscript%3Edocument.write%28document.getElementsByTagName%28%27area%27%29%5B0%5D.coords%29%3C/script%3E
   -->
 
+  <div class="impl">
+
   <h5>Authoring</h5>
 
+  </div>
+
   <p>An <dfn>image map</dfn> allows geometric areas on an image to be
   associated with <span title="hyperlink">hyperlinks</span>.</p>
 
   <p>An image, in the form of an <code>img</code> element or an
   <code>object</code> element representing an image, may be associated
   with an image map (in the form of a <code>map</code> element) by
   specifying a <dfn
   title="attr-hyperlink-usemap"><code>usemap</code></dfn> attribute on
   the <code>img</code> or <code>object</code> element. The <code
   title="attr-area-usemap">usemap</code> attribute, if specified, must
@@ -24673,20 +27245,21 @@ function AddCloud(data, x, y) { ... }</pre>
   &lt;area shape=rect coords="25,25,125,125" href="red.html" alt="Red box.">
   &lt;area shape=circle coords="200,75,50" href="green.html" alt="Green circle.">
   &lt;area shape=poly coords="325,25,262,125,388,125" href="blue.html" alt="Blue triangle.">
   &lt;area shape=poly coords="450,25,435,60,400,75,435,90,450,125,465,90,500,75,465,60"
         href="yellow.html" alt="Yellow star.">
  &lt;/map>
 &lt;/p></pre>
 
   </div>
 
+  <div class="impl">
 
   <h5>Processing model</h5>
 
   <p>If an <code>img</code> element or an <code>object</code> element
   representing an image has a <code
   title="attr-area-usemap">usemap</code> attribute specified, user
   agents must process it as follows:</p>
 
   <ol>
 
@@ -24936,70 +27509,80 @@ function AddCloud(data, x, y) { ... }</pre>
   <p class="note">Because a <code>map</code> element (and its
   <code>area</code> elements) can be associated with multiple
   <code>img</code> and <code>object</code> elements, it is possible
   for an <code>area</code> element to correspond to multiple focusable
   areas of the document.</p>
 
   <p>Image maps are <em>live</em>; if the DOM is mutated, then the
   user agent must act as if it had rerun the algorithms for image
   maps.</p>
 
+  </div>
+
 
 
   <h4>MathML</h4>
 
   <p>The <code>math</code> element from the <span>MathML
   namespace</span> falls into the <span>embedded content</span>
   category for the purposes of the content models in this
   specification.</p>
 
+  <div class="impl">
+
   <!-- apparently we get to define error handling, so: -->
 
   <p>User agents must handle text other than <span>inter-element
   whitespace</span> found in MathML elements whose content models do
   not allow raw text by pretending for the purposes of MathML content
   models, layout, and rendering that that text is actually wrapped in
   an <code title="">mtext</code> element in the <span>MathML
   namespace</span>. (Such text is not, however, conforming.)</p>
 
   <p>User agents must act as if any MathML element whose contents does
   not match the element's content model was replaced, for the purposes
   of MathML layout and rendering, by an <code title="">merror</code>
   element in the <span>MathML namespace</span> containing some
   appropriate error message.</p>
 
   <p>To enable authors to use MathML tools that only accept MathML in
   its XML form, interactive HTML user agents are encouraged to
   provide a way to export any MathML fragment as a
   namespace-well-formed XML fragment.</p>
 
+  </div>
+
 
   <h4>SVG</h4>
 
   <p>The <code>svg</code> element from the <span>SVG namespace</span>
   falls into the <span>embedded content</span> category for the
   purposes of the content models in this specification.</p>
 
+  <div class="impl">
+
   <p>To enable authors to use SVG tools that only accept SVG in its
   XML form, interactive HTML user agents are encouraged to provide a
   way to export any SVG fragment as a namespace-well-formed XML
   fragment.</p>
 
+  </div>
+
   <p>When the SVG <code>foreignObject</code> element contains elements
   from the HTML namespace, such elements must all be <span>flow
   content</span> and must not be interleaved with non-HTML
   elements. <a href="#refsSVG">[SVG]</a></p>
 
 
   <h4><dfn>Dimension attributes</dfn></h4>
 
-  <p><strong>Author requirements:</strong> The <dfn
+  <p><strong class="impl">Author requirements:</strong> The <dfn
   title="attr-dim-width"><code>width</code></dfn> and <dfn
   title="attr-dim-height"><code>height</code></dfn> attributes on
   <code>img</code>, <code>iframe</code>, <code>embed</code>,
   <code>object</code>, <code>video</code>, and, when their <code
   title="attr-input-type">type</code> attribute is in the <span
   title="attr-input-type-image">Image Button</span> state,
   <code>input</code> elements may be specified to give the dimensions
   of the visual content of the element (the width and height
   respectively, relative to the nominal direction of the output
   medium), in CSS pixels. The attributes, if specified, must have
@@ -25031,31 +27614,34 @@ function AddCloud(data, x, y) { ... }</pre>
   height</var> are the values of the <code
   title="attr-dim-width">width</code> and <code
   title="attr-dim-height">height</code> attributes respectively.</p>
 
   <p>The two attributes must be omitted if the resource in question
   does not have both an intrinsic width and an intrinsic height.</p>
 
   <p class="note">Basically, the dimension attributes can't be used to
   stretch the image.</p>
 
+  <div class="impl">
+
   <p><strong>User agent requirements:</strong> User agents are
   expected to use these attributes <a href="#dimRendering">as hints
   for the rendering</a>.</p>
 
   <p>The <dfn title="dom-dim-width"><code>width</code></dfn> and <dfn
   title="dom-dim-height"><code>height</code></dfn> DOM attributes on
   the <code>iframe</code>, <code>embed</code>, <code>object</code>,
   and <code>video</code> elements must <span>reflect</span> the
   respective content attributes of the same name.</p> <!-- XXX check
   that this is defined right in the face of percentages -->
 
+  </div>
 
 
 
   <h3>Tabular data</h3>
 
   <h4 id="table-intro">Introduction</h4>
 
   <p><em>This section is non-normative.</em></p>
 
   <p class="XXX">...examples, how to write tables accessibly, a
@@ -25098,48 +27684,151 @@ function AddCloud(data, x, y) { ... }</pre>
   <span>HTMLElement</span> <span title="dom-table-insertRow">insertRow</span>([Optional] in long index);
   void <span title="dom-table-deleteRow">deleteRow</span>(in long index);
 };</pre>
    </dd>
   </dl>
 
   <p>The <code>table</code> element <span>represents</span> data with
   more than one dimension, in the form of a <span
   title="concept-table">table</span>.</p>
 
+  <div class="impl">
+
   <p>The <code>table</code> element takes part in the <span>table
   model</span>.</p>
 
+  </div>
+
   <p>Tables must not be used as layout aids. Historically, some Web
   authors have misused tables in HTML as a way to control their page
   layout. This usage is non-conforming, because tools attempting to
   extract tabular data from such documents would obtain very confusing
   results. In particular, users of accessibility tools like screen
   readers are likely to find it very difficult to navigate pages with
   tables used for layout.</p>
 
   <p class="note">There are a variety of alternatives to using HTML
   tables for layout, primarily using CSS positioning and CSS
   tables.</p>
 
   <p>User agents that do table analysis on arbitrary content are
   encouraged to find heuristics to determine which tables actually
   contain data and which are merely being used for layout. This
   specification does not define a precise heuristic.</p>
 
+  <p>Tables have rows and columns given by their descendants. A table
+  must not have an empty row or column<span title="impl">, as
+  described in the description of the <span>table
+  model</span></span>. <!-- conformance criteria for detecting this
+  are in the table model section --></p>
+
+  <div class="impl">
+
   <p>If a <code>table</code> element has a <code
   title="attr-table-summary">summary</code> attribute, the user agent
   may report the contents of that attribute to the user.</p>
 
   <p class="note">Authors are encouraged to use the
   <code>caption</code> element instead of the <code
   title="attr-table-summary">summary</code> attribute.</p>
 
+  </div>
+
+  <dl class="domintro">
+
+   <dt><var title="">table</var> . <code title="dom-table-caption">caption</code> [ = <var title="">value</var> ]</dt>
+   <dd>
+    <p>Returns the table's <code>caption</code> element.</p>
+    <p>Can be set, to replace the <code>caption</code> element. If the
+    new value is not a <code>caption</code> element, throws a
+    <code>HIERARCHY_REQUEST_ERR</code> exception.</p>
+   <dd>
+
+   <dt><var title="">caption</var> = <var title="">table</var> . <code title="dom-table-createCaption">createCaption</code>()</dt>
+   <dd>
+    <p>Ensures the table has a <code>caption</code> element, and returns it.</p>
+   <dd>
+
+   <dt><var title="">table</var> . <code title="dom-table-deleteCaption">deleteCaption</code>()</dt>
+   <dd>
+    <p>Ensures the table does not have a <code>caption</code> element.</p>
+   <dd>
+
+   <dt><var title="">table</var> . <code title="dom-table-tHead">tHead</code> [ = <var title="">value</var> ]</dt>
+   <dd>
+    <p>Returns the table's <code>thead</code> element.</p>
+    <p>Can be set, to replace the <code>thead</code> element. If the
+    new value is not a <code>thead</code> element, throws a
+    <code>HIERARCHY_REQUEST_ERR</code> exception.</p>
+   <dd>
+
+   <dt><var title="">thead</var> = <var title="">table</var> . <code title="dom-table-createTHead">createTHead</code>()</dt>
+   <dd>
+    <p>Ensures the table has a <code>thead</code> element, and returns it.</p>
+   <dd>
+
+   <dt><var title="">table</var> . <code title="dom-table-deleteTHead">deleteTHead</code>()</dt>
+   <dd>
+    <p>Ensures the table does not have a <code>thead</code> element.</p>
+   <dd>
+
+   <dt><var title="">table</var> . <code title="dom-table-tFoot">tFoot</code> [ = <var title="">value</var> ]</dt>
+   <dd>
+    <p>Returns the table's <code>tfoot</code> element.</p>
+    <p>Can be set, to replace the <code>tfoot</code> element. If the
+    new value is not a <code>tfoot</code> element, throws a
+    <code>HIERARCHY_REQUEST_ERR</code> exception.</p>
+   <dd>
+
+   <dt><var title="">tfoot</var> = <var title="">table</var> . <code title="dom-table-createTFoot">createTFoot</code>()</dt>
+   <dd>
+    <p>Ensures the table has a <code>tfoot</code> element, and returns it.</p>
+   <dd>
+
+   <dt><var title="">table</var> . <code title="dom-table-deleteTFoot">deleteTFoot</code>()</dt>
+   <dd>
+    <p>Ensures the table does not have a <code>tfoot</code> element.</p>
+   <dd>
+
+   <dt><var title="">table</var> . <code title="dom-table-tBodies">tBodies</code></dt>
+   <dd>
+    <p>Returns an <code>HTMLCollection</code> of the <code>tbody</code> elements of the table.</p>
+   <dd>
+
+   <dt><var title="">tbody</var> = <var title="">table</var> . <code title="dom-table-createTBody">createTBody</code>()</dt>
+   <dd>
+    <p>Creates a <code>tbody</code> element, inserts it into the table, and returns it.</p>
+   <dd>
+
+   <dt><var title="">table</var> . <code title="dom-table-rows">rows</code></dt>
+   <dd>
+    <p>Returns an <code>HTMLCollection</code> of the <code>tr</code> elements of the table.</p>
+   <dd>
+
+   <dt><var title="">tr</var> = <var title="">table</var> . <code title="dom-table-insertRow">insertRow</code>(<var title="">index</var>)</dt>
+   <dd>
+    <p>Creates a <code>tr</code> element, along with a <code>tbody</code> if required, inserts them into the table at the position given by the argument, and returns the <code>tr</code>.</p>
+    <p>The position is relative to the rows in the table. The index &#x2212;1 is equivalent to inserting at the end of the table.</p>
+    <p>If the given position is less than &#x2212;1 or greater than the number of rows, throws an <code>INDEX_SIZE_ERR</code> exception.</p>
+   <dd>
+
+   <dt><var title="">table</var> . <code title="dom-table-deleteRow">deleteRow</code>(<var title="">index</var>)</dt>
+   <dd>
+    <p>Removes the <code>tr</code> element with the given position in the table.</p>
+    <p>The position is relative to the rows in the table. The index &#x2212;1 is equivalent to deleting the last row of the table.</p>
+    <p>If the given position is less than &#x2212;1 or greater than the index of the last row, or if there are no rows, throws an <code>INDEX_SIZE_ERR</code> exception.</p>
+   <dd>
+
+  </dl>
+
+  <div class="impl"> 
+
   <p>The <dfn title="dom-table-caption"><code>caption</code></dfn> DOM
   attribute must return, on getting, the first <code>caption</code>
   element child of the <code>table</code> element, if any, or null
   otherwise. On setting, if the new value is a <code>caption</code>
   element, the first <code>caption</code> element child of the
   <code>table</code> element, if any, must be removed, and the new
   value must be inserted as the first node of the <code>table</code>
   element. If the new value is not a <code>caption</code> element,
   then a <code>HIERARCHY_REQUEST_ERR</code> DOM exception must be
   raised instead.</p>
@@ -25311,43 +28000,49 @@ function AddCloud(data, x, y) { ... }</pre>
    title="dom-table-rows">rows</code> collection, the method must
    instead raise an <code>INDEX_SIZE_ERR</code> exception, and these
    steps must be aborted.</p></li>
 
    <li><p>Otherwise, the method must remove the <var
    title="">index</var>th element in the <code
    title="dom-table-rows">rows</code> collection from its parent.</p>
 
   </ol>
 
+  </div>
+
 
   <h4>The <dfn><code>caption</code></dfn> element</h4>
 
   <dl class="element">
    <dt>Categories</dt>
    <dd>None.</dd>
    <dt>Contexts in which this element may be used:</dt>
    <dd>As the first element child of a <code>table</code> element.</dd>
    <dt>Content model:</dt>
    <dd><span>Phrasing content</span>.</dd>
    <dt>Content attributes:</dt>
    <dd><span>Global attributes</span></dd>
    <dt>DOM interface:</dt>
    <dd>Uses <code>HTMLElement</code>.</dd>
   </dl>
 
   <p>The <code>caption</code> element <span>represents</span> the title of the
   <code>table</code> that is its parent, if it has a parent and that
   is a <code>table</code> element.</p>
 
+  <div class="impl">
+
   <p>The <code>caption</code> element takes part in the <span>table
   model</span>.</p>
 
+  </div>
+
   <p>The <code>caption</code> element should be included for any table
   where the reader might have difficulty understanding the content or
   where the table's structure would not be obvious to the user of a
   screen reader. The element's contents should describe what the
   purpose of the table is, along with any information that could be
   useful for understanding and using the table.</p>
 
   <p>When a <code>table</code> element is in a <code>figure</code>
   element alone but for the <code>figure</code>'s <code>legend</code>,
   the <code>caption</code> element should be omitted in favor of the
@@ -25431,29 +28126,33 @@ that corresponds to the values of the two dice.
   title="concept-column">columns</span> in the <code>table</code> that
   is its parent, if it has a parent and that is a <code>table</code>
   element.</p>
 
   <p>If the <code>colgroup</code> element contains no <code>col</code>
   elements, then the element may have a <dfn
   title="attr-colgroup-span"><code>span</code></dfn> content attribute
   specified, whose value must be a <span>valid non-negative
   integer</span> greater than zero.</p>
 
+  <div class="impl">
+
   <p>The <code>colgroup</code> element and its <code
   title="attr-colgroup-span">span</code> attribute take part in the
   <span>table model</span>.</p>
 
   <p>The <dfn title="dom-colgroup-span"><code>span</code></dfn> DOM
   attribute must <span>reflect</span> the respective content attribute
   of the same name. The value must be <span>limited to only positive
   non-zero numbers</span>.</p>
 
+  </div>
+
 
   <h4>The <dfn><code>col</code></dfn> element</h4>
 
   <dl class="element">
    <dt>Categories</dt>
    <dd>None.</dd>
    <dt>Contexts in which this element may be used:</dt>
    <dd>As a child of a <code>colgroup</code> element that doesn't have
    a <code title="attr-col-span">span</code> attribute.</dd>
    <dt>Content model:</dt>
@@ -25466,38 +28165,43 @@ that corresponds to the values of the two dice.
    <dd>
     <p><code>HTMLTableColElement</code>, same as for
     <code>colgroup</code> elements. This interface defines one member,
     <code title="dom-col-span">span</code>.</p>
    </dd>
   </dl>
 
   <p>If a <code>col</code> element has a parent and that is a
   <code>colgroup</code> element that itself has a parent that is a
   <code>table</code> element, then the <code>col</code> element
-  <span>represents</span> one or more <span title="concept-column">columns</span>
-  in the <span title="concept-column-group">column group</span>
-  represented by that <code>colgroup</code>.</p>
+  <span>represents</span> one or more <span
+  title="concept-column">columns</span> in the <span
+  title="concept-column-group">column group</span> represented by that
+  <code>colgroup</code>.</p>
 
   <p>The element may have a <dfn
   title="attr-col-span"><code>span</code></dfn> content attribute
   specified, whose value must be a <span>valid non-negative
   integer</span> greater than zero.</p>
 
+  <div class="impl">
+
   <p>The <code>col</code> element and its <code
   title="attr-col-span">span</code> attribute take part in the
   <span>table model</span>.</p>
 
   <p>The <dfn title="dom-col-span"><code>span</code></dfn> DOM
   attribute must <span>reflect</span> the content attribute of the
   same name. The value must be <span>limited to only positive non-zero
   numbers</span>.</p>
 
+  </div>
+
 
   <h4>The <dfn><code>tbody</code></dfn> element</h4>
 
   <dl class="element">
    <dt>Categories</dt>
    <dd>None.</dd>
    <dt>Contexts in which this element may be used:</dt>
    <dd>As a child of a <code>table</code> element, after any
    <code>caption</code>, <code>colgroup</code>, and
    <code>thead</code> elements, but only if there are no
@@ -25518,23 +28222,52 @@ that corresponds to the values of the two dice.
     used for <code>thead</code> and <code>tfoot</code> elements.</p>
    </dd>
   </dl>
 
   <p>The <code>tbody</code> element <span>represents</span> a <span
   title="concept-row-group">block</span> of <span
   title="concept-row">rows</span> that consist of a body of data for
   the parent <code>table</code> element, if the <code>tbody</code>
   element has a parent and it is a <code>table</code>.</p>
 
+  <div class="impl">
+
   <p>The <code>tbody</code> element takes part in the <span>table
   model</span>.</p>
 
+  </div>
+
+  <dl class="domintro">
+
+   <dt><var title="">tbody</var> . <code title="dom-tbody-rows">rows</code></dt>
+   <dd>
+    <p>Returns an <code>HTMLCollection</code> of the <code>tr</code> elements of the table section.</p>
+   <dd>
+
+   <dt><var title="">tr</var> = <var title="">tbody</var> . <code title="dom-tbody-insertRow">insertRow</code>( [ <var title="">index</var> ] )</dt>
+   <dd>
+    <p>Creates a <code>tr</code> element, inserts it into the table section at the position given by the argument, and returns the <code>tr</code>.</p>
+    <p>The position is relative to the rows in the table section. The index &#x2212;1, which is the default if the argument is omitted, is equivalent to inserting at the end of the table section.</p>
+    <p>If the given position is less than &#x2212;1 or greater than the number of rows, throws an <code>INDEX_SIZE_ERR</code> exception.</p>
+   <dd>
+
+   <dt><var title="">tbody</var> . <code title="dom-tbody-deleteRow">deleteRow</code>(<var title="">index</var>)</dt>
+   <dd>
+    <p>Removes the <code>tr</code> element with the given position in the table section.</p>
+    <p>The position is relative to the rows in the table section. The index &#x2212;1 is equivalent to deleting the last row of the table section.</p>
+    <p>If the given position is less than &#x2212;1 or greater than the index of the last row, or if there are no rows, throws an <code>INDEX_SIZE_ERR</code> exception.</p>
+   <dd>
+
+  </dl>
+
+  <div class="impl">
+
   <p>The <dfn title="dom-tbody-rows"><code>rows</code></dfn> attribute
   must return an <code>HTMLCollection</code> rooted at the element,
   whose filter matches only <code>tr</code> elements that are children
   of the element.</p>
 
   <p>The <dfn title="dom-tbody-insertRow"><code>insertRow(<var
   title="">index</var>)</code></dfn> method must, when invoked on an
   element <var title="">table section</var>, act as follows:</p>
 
   <p>If <var title="">index</var> is less than &#x2212;1 or greater than the
@@ -25558,20 +28291,21 @@ that corresponds to the values of the two dice.
 
   <p>The <dfn title="dom-tbody-deleteRow"><code>deleteRow(<var
   title="">index</var>)</code></dfn> method must remove the <var
   title="">index</var>th element in the <code
   title="dom-tbody-rows">rows</code> collection from its parent. If
   <var title="">index</var> is less than zero or greater than or equal
   to the number of elements in the <code
   title="dom-tbody-rows">rows</code> collection, the method must
   instead raise an <code>INDEX_SIZE_ERR</code> exception.</p>
 
+  </div>
 
 
   <h4>The <dfn><code>thead</code></dfn> element</h4>
 
   <dl class="element">
    <dt>Categories</dt>
    <dd>None.</dd>
    <dt>Contexts in which this element may be used:</dt>
    <dd>As a child of a <code>table</code> element, after any
    <code>caption</code>, and <code>colgroup</code>
@@ -25588,23 +28322,27 @@ that corresponds to the values of the two dice.
    <code>tbody</code> elements.</dd>
   </dl>
 
   <p>The <code>thead</code> element <span>represents</span> the <span
   title="concept-row-group">block</span> of <span
   title="concept-row">rows</span> that consist of the column labels
   (headers) for the parent <code>table</code> element, if the
   <code>thead</code> element has a parent and it is a
   <code>table</code>.</p>
 
+  <div class="impl">
+
   <p>The <code>thead</code> element takes part in the <span>table
   model</span>.</p>
 
+  </div>
+
 
   <h4>The <dfn><code>tfoot</code></dfn> element</h4>
 
   <dl class="element">
    <dt>Categories</dt>
    <dd>None.</dd>
    <dt>Contexts in which this element may be used:</dt>
    <dd>As a child of a <code>table</code> element, after any
    <code>caption</code>, <code>colgroup</code>, and <code>thead</code>
    elements and before any <code>tbody</code> and <code>tr</code>
@@ -25624,23 +28362,27 @@ that corresponds to the values of the two dice.
    <code>tbody</code> elements.</dd>
   </dl>
 
   <p>The <code>tfoot</code> element <span>represents</span> the <span
   title="concept-row-group">block</span> of <span
   title="concept-row">rows</span> that consist of the column summaries
   (footers) for the parent <code>table</code> element, if the
   <code>tfoot</code> element has a parent and it is a
   <code>table</code>.</p>
 
+  <div class="impl">
+
   <p>The <code>tfoot</code> element takes part in the <span>table
   model</span>.</p>
 
+  </div>
+
 
   <h4>The <dfn><code>tr</code></dfn> element</h4>
 
   <dl class="element">
    <dt>Categories</dt>
    <dd>None.</dd>
    <dt>Contexts in which this element may be used:</dt>
    <dd>As a child of a <code>thead</code> element.</dd>
    <dd>As a child of a <code>tbody</code> element.</dd>
    <dd>As a child of a <code>tfoot</code> element.</dd>
@@ -25652,33 +28394,105 @@ that corresponds to the values of the two dice.
    <dd>Zero or more <code>td</code> or <code>th</code> elements</dd>
    <dt>Content attributes:</dt>
    <dd><span>Global attributes</span></dd>
    <dt>DOM interface:</dt>
    <dd>
     <pre class="idl">interface <dfn>HTMLTableRowElement</dfn> : <span>HTMLElement</span> {
   readonly attribute long <span title="dom-tr-rowIndex">rowIndex</span>;
   readonly attribute long <span title="dom-tr-sectionRowIndex">sectionRowIndex</span>;
   readonly attribute <span>HTMLCollection</span> <span title="dom-tr-cells">cells</span>;
   <span>HTMLElement</span> <span title="dom-tr-insertCell">insertCell</span>([Optional] in long index);
-  void <span>deleteCell</span>(in long index);
+  void <span title="dom-tr-deleteCell">deleteCell</span>(in long index);
 };</pre>
    </dd>
   </dl>
 
   <p>The <code>tr</code> element <span>represents</span> a <span
   title="concept-row">row</span> of <span
   title="concept-cell">cells</span> in a <span
   title="concept-table">table</span>.</p>
 
+  <div class="impl">
+
   <p>The <code>tr</code> element takes part in the <span>table
   model</span>.</p>
 
+  </div>
+
+  <dl class="intro">
+
+   <dt><var title="">tr</var> . <code title="dom-tr-rowIndex">rowIndex</code></dt>
+
+   <dd>
+
+    <p>Returns the position of the row in the table's <code
+    title="dom-table-rows">rows</code> list.</p>
+
+    <p>Returns &#x2212;1 if the element isn't in a table.</p>
+
+   </dd>
+
+   <dt><var title="">tr</var> . <code title="dom-tr-sectionRowIndex">sectionRowIndex</code></dt>
+
+   <dd>
+
+    <p>Returns the position of the row in the table section's <code
+    title="dom-tbody-rows">rows</code> list.</p>
+
+    <p>Returns &#x2212;1 if the element isn't in a table section.</p>
+
+   </dd>
+
+   <dt><var title="">tr</var> . <code title="dom-tr-cells">cells</code></dt>
+   <dd>
+
+    <p>Returns an <code>HTMLCollection</code> of the <code>td</code> and <code>th</code> elements of the row.</p>
+
+   <dd>
+
+   <dt><var title="">cell</var> = <var title="">tr</var> . <code title="dom-tr-insertCell">insertCell</code>( [ <var title="">index</var> ] )</dt>
+
+   <dd>
+
+    <p>Creates a <code>td</code> element, inserts it into the table
+    row at the position given by the argument, and returns the
+    <code>td</code>.</p>
+
+    <p>The position is relative to the cells in the row. The
+    index &#x2212;1, which is the default if the argument is omitted,
+    is equivalent to inserting at the end of the row.</p>
+
+    <p>If the given position is less than &#x2212;1 or greater than
+    the number of cells, throws an <code>INDEX_SIZE_ERR</code>
+    exception.</p>
+
+   </dd>
+
+   <dt><var title="">tr</var> . <code title="dom-tr-deleteCell">deleteCell</code>(<var title="">index</var>)</dt>
+   <dd>
+
+    <p>Removes the <code>td</code> or <code>th</code> element with the
+    given position in the row.</p>
+
+    <p>The position is relative to the cells in the row. The index
+    &#x2212;1 is equivalent to deleting the last cell of the row.</p>
+
+    <p>If the given position is less than &#x2212;1 or greater than
+    the index of the last cell, or if there are no cells, throws an
+    <code>INDEX_SIZE_ERR</code> exception.</p>
+
+   <dd>
+
+  </dl>
+
+  <div class="impl">
+
   <p>The <dfn title="dom-tr-rowIndex"><code>rowIndex</code></dfn>
   attribute must, if the element has a parent <code>table</code>
   element, or a parent <code>tbody</code>, <code>thead</code>, or
   <code>tfoot</code> element and a <em>grandparent</em>
   <code>table</code> element, return the index of the <code>tr</code>
   element in that <code>table</code> element's <code
   title="dom-table-rows">rows</code> collection. If there is no such
   <code>table</code> element, then the attribute must return
   &#x2212;1.</p>
 
@@ -25722,20 +28536,22 @@ that corresponds to the values of the two dice.
 
   <p>The <dfn title="dom-tr-deleteCell"><code>deleteCell(<var
   title="">index</var>)</code></dfn> method must remove the <var
   title="">index</var>th element in the <code
   title="dom-tr-cells">cells</code> collection from its parent. If
   <var title="">index</var> is less than zero or greater than or equal
   to the number of elements in the <code
   title="dom-tr-cells">cells</code> collection, the method must
   instead raise an <code>INDEX_SIZE_ERR</code> exception.</p>
 
+  </div>
+
 
   <h4>The <dfn><code>td</code></dfn> element</h4>
 
   <dl class="element">
    <dt>Categories</dt>
    <dd><span>Sectioning root</span>.</dd>
    <dt>Contexts in which this element may be used:</dt>
    <dd>As a child of a <code>tr</code> element.</dd>
    <dt>Content model:</dt>
    <dd><span>Flow content</span>.</dd>
@@ -25747,26 +28563,30 @@ that corresponds to the values of the two dice.
    <!-- v2 char, to specify the decimal character used in numeric cells -->
    <dt>DOM interface:</dt>
    <dd>
     <pre class="idl">interface <dfn>HTMLTableDataCellElement</dfn> : <span>HTMLTableCellElement</span> {};</pre>
    </dd>
   </dl>
 
   <p>The <code>td</code> element <span>represents</span> a data <span
   title="concept-cell">cell</span> in a table.</p>
 
-  <p class="note">The <code>td</code> element and its <code
+  <div class="impl">
+
+  <p>The <code>td</code> element and its <code
   title="attr-tdth-colspan">colspan</code>, <code
   title="attr-tdth-rowspan">rowspan</code>, and <code
   title="attr-tdth-headers">headers</code> attributes take part in the
   <span>table model</span>.</p>
 
+  </div>
+
 
   <h4>The <dfn><code>th</code></dfn> element</h4>
 
   <dl class="element">
    <dt>Categories</dt>
    <dd>None.</dd>
    <dt>Contexts in which this element may be used:</dt>
    <dd>As a child of a <code>tr</code> element.</dd>
    <dt>Content model:</dt>
    <dd><span>Phrasing content</span>.</dd>
@@ -25832,90 +28652,125 @@ that corresponds to the values of the two dice.
    <dt>The <dfn title="attr-th-scope-auto">auto</dfn> state</dt>
 
    <dd>The <i>auto</i> state makes the header cell apply to a set of
    cells selected based on context.</dd>
 
   </dl>
 
   <p>The <code title="attr-th-scope">scope</code> attribute's
   <i>missing value default</i> is the <i>auto</i> state.</p>
 
-  <p class="note">The <code>th</code> element and its <code
+  <div class="impl">
+
+  <p>The <code>th</code> element and its <code
   title="attr-tdth-colspan">colspan</code>, <code
   title="attr-tdth-rowspan">rowspan</code>, <code
   title="attr-tdth-headers">headers</code>, and <code
   title="attr-th-scope">scope</code> attributes take part in the
   <span>table model</span>.</p>
 
   <p>The <dfn title="dom-th-scope"><code>scope</code></dfn> DOM
   attribute must <span>reflect</span> the content attribute of the
   same name.</p>
 
+  </div>
+
+
 
   <h4>Attributes common to <code>td</code> and <code>th</code> elements</h4>
 
   <p>The <code>td</code> and <code>th</code> elements may have a <dfn
   title="attr-tdth-colspan"><code>colspan</code></dfn> content
   attribute specified, whose value must be a <span>valid non-negative
   integer</span> greater than zero.</p>
 
   <p>The <code>td</code> and <code>th</code> elements may also have a
   <dfn title="attr-tdth-rowspan"><code>rowspan</code></dfn> content
   attribute specified, whose value must be a <span>valid non-negative
   integer</span>.</p>
 
+  <p>These attributes give the number of columns and rows respectively
+  that the cell is to span. These attributes must not be used to
+  overlap cells<span title="impl">, as described in the description of
+  the <span>table model</span></span>.</p> <!-- conformance criteria
+  for determining when this is violated are given in the processing
+  model -->
+
+  <hr>
+
   <p>The <code>td</code> and <code>th</code> element may have a <dfn
   title="attr-tdth-headers"><code>headers</code></dfn> content
   attribute specified. The <code
   title="attr-tdth-headers">headers</code> attribute, if specified,
   must contain a string consisting of an <span>unordered set of unique
   space-separated tokens</span>, each of which must have the value of
   an ID of a <code>th</code> element taking part in the same <span
   title="concept-table">table</span> as the <code>td</code> or
-  <code>th</code> element (as defined by the <span>table
-  model</span>).</p>
+  <code>th</code> element<span class="impl"> (as defined by the
+  <span>table model</span>)</span>.</p>
 
   <p>A <code>th</code> element with ID <var title="">id</var> is said
   to be <i>directly targetted</i> by all <code>td</code> and
   <code>th</code> elements in the same <span
   title="concept-table">table</span> that have <code
   title="attr-tdth-headers">headers</code> attributes whose values
   include as one of their tokens the ID <var title="">id</var>. A
   <code>th</code> element <var title="">A</var> is said to be
   <i>targetted</i> by a <code>th</code> or <code>td</code> element
   <var title="">B</var> if either <var title="">A</var> is <i>directly
   targetted</i> by <var title="">B</var> or if there exists an element
   <var title="">C</var> that is itself <i>targetted</i> by the element
   <var title="">B</var> and <var title="">A</var> is <i>directly
   targetted</i> by <var title="">C</var>.</p>
 
   <p>A <code>th</code> element must not be <i>targetted</i> by
   itself.</p>
 
-  <p class="note">The <code title="attr-tdth-colspan">colspan</code>,
-  <code title="attr-tdth-rowspan">rowspan</code>, and <code
+  <div class="impl">
+
+  <p>The <code title="attr-tdth-colspan">colspan</code>, <code
+  title="attr-tdth-rowspan">rowspan</code>, and <code
   title="attr-tdth-headers">headers</code> attributes take part in the
   <span>table model</span>.</p>
 
+  </div>
+
   <hr>
 
   <p>The <code>td</code> and <code>th</code> elements implement
   interfaces that inherit from the <code>HTMLTableCellElement</code>
   interface:</p>
 
   <pre class="idl">interface <dfn>HTMLTableCellElement</dfn> : <span>HTMLElement</span> {
            attribute long <span title="dom-tdth-colSpan">colSpan</span>;
            attribute long <span title="dom-tdth-rowSpan">rowSpan</span>;
            attribute DOMString <span title="dom-tdth-headers">headers</span>;
   readonly attribute long <span title="dom-tdth-cellIndex">cellIndex</span>;
 };</pre>
 
+  <dl class="domintro">
+
+   <dt><var title="">cell</var> . <code title="dom-tdth-cellIndex">cellIndex</code></dt>
+
+   <dd>
+
+    <p>Returns the position of the cell in the row's <code
+    title="dom-tr-cells">cells</code> list.</p>
+
+    <p>Returns 0 if the element isn't in a row.</p>
+
+   </dd>
+
+  </dl>
+
+  <div class="impl">
+
   <p>The <dfn title="dom-tdth-colSpan"><code>colSpan</code></dfn> DOM
   attribute must <span>reflect</span> the content attribute of the
   same name. The value must be <span>limited to only positive non-zero
   numbers</span>.</p>
 
   <p>The <dfn title="dom-tdth-rowSpan"><code>rowSpan</code></dfn> DOM
   attribute must <span>reflect</span> the content attribute of the
   same name. Its default value, which must be used if <span
   title="rules for parsing non-negative integers">parsing the
   attribute as a non-negative integer</span> returns an error, is also
@@ -25925,20 +28780,24 @@ that corresponds to the values of the two dice.
   attribute must <span>reflect</span> the content attribute of the
   same name.</p>
 
   <p>The <dfn title="dom-tdth-cellIndex"><code>cellIndex</code></dfn>
   DOM attribute must, if the element has a parent <code>tr</code>
   element, return the index of the cell's element in the parent
   element's <code title="dom-tr-cells">cells</code> collection. If
   there is no such parent element, then the attribute must return
   0.</p>
 
+  </div>
+
+
+  <div class="impl">
 
   <h4>Processing model</h4>
 
   <p>The various table elements and their content attributes together
   define the <dfn>table model</dfn>.</p>
 
   <p>A <dfn title="concept-table">table</dfn> consists of cells
   aligned on a two-dimensional grid of <dfn
   title="concept-slots">slots</dfn> with coordinates (<var
   title="">x</var>, <var title="">y</var>). The grid is finite, and is
@@ -27171,21 +30030,21 @@ that corresponds to the values of the two dice.
   <span title="attr-th-scope-colgroup">column group</span> state.</p>
 
   <p>A header cell is said to be a <dfn>row group header</dfn> if
   its <code title="attr-th-scope">scope</code> attribute is in the
   <span title="attr-th-scope-rowgroup">row group</span> state.</p>
 
   <p>A cell is said to be an <dfn>empty cell</dfn> if it contains no
   elements and its text content, if any, consists only of
   <span>White_Space</span> characters.</p>
 
-
+  </div>
 
 
 
   <h3 id="forms">Forms</h3>
 
   <p>Forms allow unscripted client-server interaction: given a form, a
   user can provide data, submit it to the server, and have the server
   act on it accordingly (e.g. returning the results of a search or
   calculation). The elements used in forms can also be used for user
   interaction with no associated submission mechanism, in conjunction
@@ -27332,45 +30191,144 @@ interface <dfn>HTMLFormElement</dfn> : <span>HTMLElement</span> {
   their <span>resulting autocompletion state</span> set to <i
   title="">on</i>.</p>
 
   <p>The <code title="attr-fs-action">action</code>, <code
   title="attr-fs-enctype">enctype</code>, <code
   title="attr-fs-method">method</code>, <code
   title="attr-fs-novalidate">novalidate</code>, and <code
   title="attr-fs-target">target</code> attributes are <span>attributes
   for form submission</span>.</p>
 
+  <dl class="domintro">
+
+   <dt><var title="">form</var> . <code title="dom-form-elements">elements</code></dt>
+
+   <dd>
+
+    <p>Returns an <code>HTMLCollection</code> of the form controls in
+    the form (excluding image buttons for historical reasons).</p>
+
+   </dd>
+
+   <dt><var title="">form</var> . <code title="dom-form-length">length</code></dt>
+
+   <dd>
+
+    <p>Returns the number of form controls in the form (excluding
+    image buttons for historical reasons).</p>
+
+   </dd>
+
+   <dt><var title="">element</var> = <var title="">form</var> . <code title="dom-form-item">item</code>(<var title="">index</var>)</dt>
+   <dt><var title="">form</var>[<var title="">index</var>]</dt>
+
+   <dd>
+
+    <p>Returns the <var title="">index</var>th element in the form
+    (excluding image buttons for historical reasons).</p>
+
+   </dd>
+
+   <dt><var title="">element</var> = <var title="">form</var> . <code title="dom-form-namedItem">namedItem</code>(<var title="">name</var>)</dt>
+   <dt><var title="">form</var>[<var title="">name</var>]</dt>
+
+   <dd>
+
+    <p>Returns the form control in the form with the given ID or <code
+    title="attr-fe-name">name</code> (excluding image buttons for
+    historical reasons).</p>
+
+    <p>Once an element has been referenced using a particular name,
+    that name will continue being available as a way to reference that
+    element in this method, even if the element's actual ID or <code
+    title="attr-fe-name">name</code> changes, for as long as the
+    element remains in the <code>Document</code>.</p>
+
+    <p>If there are multiple matching items, then a
+    <code>NodeList</code> object containing all those elements is
+    returned.</p>
+
+    <p>Returns null if no element with that ID or <code
+    title="attr-fe-name">name</code> could be found.</p>
+
+   </dd>
+
+   <dt><var title="">form</var> . <code title="dom-form-submit">submit</code>()</dt>
+
+   <dd>
+
+    <p>Submits the form.</p>
+
+   </dd>
+
+   <dt><var title="">form</var> . <code title="dom-form-reset">reset</code>()</dt>
+
+   <dd>
+
+    <p>Resets the form.</p>
+
+   </dd>
+
+   <dt><var title="">form</var> . <code title="dom-form-checkValidity">checkValidity</code>()</dt>
+
+   <dd>
+
+    <p>Returns true if the form's controls are all valid; otherwise,
+    returns false.</p>
+
+   </dd>
+
+   <dt><var title="">form</var> . <code title="dom-form-dispatchFormInput">dispatchFormInput</code>()</dt>
+
+   <dd>
+
+    <p>Dispatches a <code title="event-forminput">forminput</code> event at all the form controls.</p>
+
+   </dd>
+
+   <dt><var title="">form</var> . <code title="dom-form-dispatchFormChange">dispatchFormChange</code>()</dt>
+
+   <dd>
+
+    <p>Dispatches a <code title="event-formchange">formchange</code> event at all the form controls.</p>
+
+   </dd>
+
+  </dl>
+
+  <div class="impl">
+
   <p>The <dfn
   title="dom-form-autocomplete"><code>autocomplete</code></dfn> and
   <dfn title="dom-form-name"><code>name</code></dfn> DOM attributes
   must <span>reflect</span> the respective content attributes of the
   same name.</p>
 
   <p>The <dfn
   title="dom-form-acceptCharset"><code>acceptCharset</code></dfn> DOM
   attribute must <span>reflect</span> the <code
   title="attr-form-accept-charset">accept-charset</code> content
   attribute.</p>
 
+  <hr>
+
   <p>The <dfn title="dom-form-elements"><code>elements</code></dfn>
   DOM attribute must return an <code>HTMLFormControlsCollection</code>
   rooted at the <code>Document</code> node, whose filter matches <span
   title="category-listed">listed</span> elements whose <span>form
   owner</span> is the <code>form</code> element, with the exception of
   <code>input</code> elements whose <code
   title="attr-input-type">type</code> attribute is in the <span
   title="attr-input-type-image">Image Button</span> state, which must,
   for historical reasons, be excluded from this particular
   collection.</p>
 
-  <hr>
-
   <p>The <dfn title="dom-form-length"><code>length</code></dfn> DOM
   attribute must return the number of nodes <span title="represented
   by the collection">represented</span> by the <code
   title="dom-form-elements">elements</code> collection.</p>
 
   <p>The
   <span>indices of the supported indexed properties</span> at any
   instant are the indicies supported by the object returned by the
   <code title="dom-form-elements">elements</code> attribute at that
   instant.</p>
@@ -27482,20 +30440,23 @@ interface <dfn>HTMLFormElement</dfn> : <span>HTMLElement</span> {
   method is invoked, the user agent must <span>broadcast <code
   title="event-forminput">forminput</code> events</span> from the
   <code>form</code> element.</p>
 
   <p>If the <dfn
   title="dom-form-dispatchFormChange"><code>dispatchFormChange()</code></dfn>
   method is invoked, the user agent must <span>broadcast <code
   title="event-formchange">formchange</code> events</span> from the
   <code>form</code> element.</p>
 
+  </div>
+
+
 
   <h4>The <dfn><code>fieldset</code></dfn> element</h4>
 
   <dl class="element">
    <dt>Categories</dt>
    <dd><span>Flow content</span>.</dd>
    <dd><span title="category-listed">Listed</span> <span>form-associated element</span>.</dd>
    <dt>Contexts in which this element may be used:</dt>
    <dd>Where <span>flow content</span> is expected.</dd>
    <dt>Content model:</dt>
@@ -27536,20 +30497,43 @@ interface <dfn>HTMLFormElement</dfn> : <span>HTMLElement</span> {
   title="attr-fieldset-disabled"><code>disabled</code></dfn>
   attribute, when specified, causes all the form control descendants
   of the <code>fieldset</code> element to be <span
   title="concept-fe-disabled">disabled</span>.</p>
 
   <p>The <code title="attr-fae-form">form</code> attribute is used to
   explicitly associate the <code>fieldset</code> element with its
   <span>form owner</span>. The <code title="attr-fe-name">name</code>
   attribute represents the element's name.</p>
 
+  <dl class="domintro">
+
+   <dt><var title="">fieldset</var> . <code title="dom-fieldset-type">type</code></dt>
+
+   <dd>
+
+    <p>Returns the string "fieldset".</p>
+
+   </dd>
+
+   <dt><var title="">fieldset</var> . <code title="dom-form-elements">elements</code></dt>
+
+   <dd>
+
+    <p>Returns an <code>HTMLCollection</code> of the form controls in
+    the element.</p>
+
+   </dd>
+
+  </dl>
+
+  <div class="impl">
+
   <p>The <dfn
   title="dom-fieldset-disabled"><code>disabled</code></dfn> DOM
   attribute must <span>reflect</span> the content attribute of the
   same name.</p>
 
   <p>The <dfn title="dom-fieldset-type"><code>type</code></dfn> DOM
   attribute must return the string "<code
   title="">fieldset</code>".</p>
 
   <p>The <dfn
@@ -27564,20 +30548,22 @@ interface <dfn>HTMLFormElement</dfn> : <span>HTMLElement</span> {
   attributes, and the <code
   title="dom-cva-checkValidatity">checkValidity()</code> and
   <code
   title="dom-cva-setCustomValidity">setCustomValidity()</code>
   methods, are part of the <span>constraint validation API</span>.</p>
 
   <p><strong>Constraint validation:</strong> <code>fieldset</code>
   elements are always <span>barred from constraint
   validation</span>.</p>
 
+  </div>
+
 
 
   <h4>The <dfn><code>label</code></dfn> element</h4>
 
   <dl class="element">
    <dt>Categories</dt>
    <dd><span>Flow content</span>.</dd>
    <dd><span>Phrasing content</span>.</dd>
    <dd><span>Interactive content</span>.</dd>
    <dd><span>Form-associated element</span>.</dd>
@@ -27592,40 +30578,48 @@ interface <dfn>HTMLFormElement</dfn> : <span>HTMLElement</span> {
    <dt>DOM interface:</dt>
    <dd>
 <pre class="idl">interface <dfn>HTMLLabelElement</dfn> : <span>HTMLElement</span> {
   readonly attribute <span>HTMLFormElement</span> <span title="dom-fae-form">form</span>;
            attribute DOMString <span title="dom-label-htmlFor">htmlFor</span>;
   readonly attribute <span>HTMLElement</span> <span title="dom-label-control">control</span>;
 };</pre>
    </dd> 
   </dl>
 
-  <p>The <code>label</code> <span>represents</span> a caption in a user
-  interface. The caption can be associated with a specific form
-  control, known as the <code>label</code> element's <dfn>labeled
-  control</dfn>.</p>
+  <p>The <code>label</code> <span>represents</span> a caption in a
+  user interface. The caption can be associated with a specific form
+  control<span class="impl">, known as the <code>label</code>
+  element's <dfn>labeled control</dfn></span>, either using <code
+  title="attr-label-for">for</code> attribute, or by putting the form
+  control inside the <code>label</code> element itself.</p>
+
+  <div class="impl">
 
   <p>Unless otherwise specified by the following rules, a
   <code>label</code> element has no <span>labeled control</span>.</p>
 
+  </div>
+
   <p>The <dfn title="attr-label-for"><code>for</code></dfn> attribute
   may be specified to indicate a form control with which the caption
   is to be associated. If the attribute is specified, the attribute's
   value must be the ID of a <span title="category-label">labelable
   form-associated element</span> in the same <code>Document</code> as
-  the <code>label</code> element. If the attribute is specified and
-  there is an element in the <code>Document</code> whose ID is equal
-  to the value of the <code title="attr-label-for">for</code>
-  attribute, and the first such element is a <span
-  title="category-label">labelable form-associated element</span>,
-  then that element is the <code>label</code> element's <span>labeled
-  control</span>.</p>
+  the <code>label</code> element. <span class="impl">If the attribute
+  is specified and there is an element in the <code>Document</code>
+  whose ID is equal to the value of the <code
+  title="attr-label-for">for</code> attribute, and the first such
+  element is a <span title="category-label">labelable form-associated
+  element</span>, then that element is the <code>label</code>
+  element's <span>labeled control</span>.</span></p>
+
+  <div class="impl">
 
   <p>If the <code title="attr-label-for">for</code> attribute is not
   specified, but the <code>label</code> element has a <span>labelable
   form-associated element</span> descendant, then the first such
   descendant in <span>tree order</span> is the <code>label</code>
   element's <span>labeled control</span>.</p>
 
   <p>The <code>label</code> element's exact default presentation and
   behavior, in particular what its <span>activation behavior</span>
   might be, if anything, should match the platform's label
@@ -27639,44 +30633,80 @@ interface <dfn>HTMLFormElement</dfn> : <span>HTMLElement</span> {
    activation steps</span> on the <code>input</code> element, as if
    the element itself had been triggered by the user:</p>
 
    <pre>&lt;label>&lt;input type=checkbox name=lost> Lost&lt;/label></pre>
 
    <p>On other platforms, the behavior might be just to focus the
    control, or do nothing.</p>
 
   </div>
 
+  </div>
+
+  <dl class="domintro">
+
+   <dt><var title="">label</var> . <code title="dom-label-control">control</code></dt>
+
+   <dd>
+
+    <p>Returns the form control that is associated with this element.</p>
+
+   </dd>
+
+  </dl>
+
+  <div class="impl">
+
   <p>The <code title="attr-fae-form">form</code> attribute is used to
   explicitly associate the <code>label</code> element with its
   <span>form owner</span>.</p>
 
   <p>The <dfn title="dom-label-htmlFor"><code>htmlFor</code></dfn> DOM
   attribute must <span>reflect</span> the <code
   title="attr-label-for">for</code> content attribute.</p>
 
   <p>The <dfn title="dom-label-control"><code>control</code></dfn> DOM
   attribute must return the <code>label</code> element's <span>labeled
   control</span>, if any, or null if there isn't one.</p>
 
+  </div>
+
   <hr>
 
+  <dl class="domintro">
+
+   <dt><var title="">control</var> . <code title="dom-lfe-labels">labels</code></dt>
+
+   <dd>
+
+    <p>Returns a <code>NodeList</code> of all the <code>label</code>
+    elements that the form control is associated with.</p>
+
+   </dd>
+
+  </dl>
+
+  <div class="impl">
+
   <p><span title="category-label">Labelable form-associated
   elements</span> have a <code>NodeList</code> object associated with
   them that represents the list of <code>label</code> elements, in
   <span>tree order</span>, whose <span>labeled control</span> is the
   element in question. The <dfn
   title="dom-lfe-labels"><code>labels</code></dfn> DOM attribute of
   <span title="category-label">labelable form-associated
   elements</span>, on getting, must return that <code>NodeList</code>
   object.</p>
 
+  </div>
+
+
 
   <h4>The <dfn><code>input</code></dfn> element</h4>
 
   <dl class="element">
    <dt>Categories</dt>
    <dd><span>Flow content</span>.</dd>
    <dd><span>Phrasing content</span>.</dd>
    <dd>If the <code title="attr-input-type">type</code> attribute is <em>not</em> in the <span title="attr-input-type-hidden">Hidden</span> state: <span>Interactive content</span>.</dd>
    <dd><span title="category-listed">Listed</span>, <span title="category-label">labelable</span>, <span title="category-submit">submittable</span>, and <span title="category-reset">resettable</span> <span>form-associated element</span>.</dd>
    <dt>Contexts in which this element may be used:</dt>
@@ -27929,23 +30959,23 @@ interface <dfn>HTMLFormElement</dfn> : <span>HTMLElement</span> {
   title="attr-dim-width">width</code> attributes apply to an
   <code>input</code> element depends on the state of its <code
   title="attr-input-type">type</code> attribute. Similarly, the <code
   title="dom-input-checked">checked</code>, <code
   title="dom-input-valueAsDate">valueAsDate</code>, <code
   title="dom-input-valueAsNumber">valueAsNumber</code>, <code
   title="dom-input-list">list</code>, and <code
   title="dom-input-selectedOption">selectedOption</code> DOM
   attributes, and the <code title="dom-input-stepUp">stepUp()</code>
   and <code title="dom-input-stepDown">stepDown()</code> methods, are
-  specific to certain states. The following table is non-normative and
-  summarises which content attributes, DOM attrbutes, and methods
-  apply to each state:</p>
+  specific to certain states. The following table <span
+  class="impl">is non-normative and</span> summarises which content
+  attributes, DOM attrbutes, and methods apply to each state:</p>
 
   <table class="applies">
    <thead>
     <tr>
      <td>
      <th> <span title=""><span title="attr-input-type-hidden">Hidden</span></span>
      <th> <span title=""><span title="attr-input-type-text">Text</span>,</span>
           <span title=""><span title="attr-input-type-search">Search</span>,</span>
           <span title=""><span title="attr-input-type-url">URL</span></span>
      <th> <span title=""><span title="attr-input-type-email">E-mail</span></span>
@@ -28563,21 +31593,21 @@ interface <dfn>HTMLFormElement</dfn> : <span>HTMLElement</span> {
      <td class="no"> &middot; <!-- Range -->
      <td class="no"> &middot; <!-- Color -->
      <td class="yes"> Yes     <!-- Checkbox -->
 <!-- <td class="yes"> Yes          Radio Button -->
      <td class="no"> &middot; <!-- File Upload -->
      <td class="no"> &middot; <!-- Submit Button -->
      <td class="no"> &middot; <!-- Image Button -->
      <td class="no"> &middot; <!-- Reset Button -->
 <!-- <td class="no"> &middot;      Button -->
 
-    <tr>
+    <tr class="impl">
      <th> <code title="dom-input-value">value</code>
      <td class="yes"> <span title="dom-input-value-value">value</span> <!-- Hidden -->
      <td class="yes"> <span title="dom-input-value-value">value</span> <!-- Text -->
 <!-- <td class="yes"> <span title="dom-input-value-value">value</span>      Search -->
 <!-- <td class="yes"> <span title="dom-input-value-value">value</span>      URL -->
      <td class="yes"> <span title="dom-input-value-value">value</span> <!-- E-mail -->
      <td class="yes"> <span title="dom-input-value-value">value</span> <!-- Password -->
      <td class="yes"> <span title="dom-input-value-value">value</span> <!-- Date and Time -->
 <!-- <td class="yes"> <span title="dom-input-value-value">value</span>      Date -->
 <!-- <td class="yes"> <span title="dom-input-value-value">value</span>      Month -->
@@ -28890,20 +31920,22 @@ interface <dfn>HTMLFormElement</dfn> : <span>HTMLElement</span> {
      <td class="yes"> Yes     <!-- Checkbox -->
 <!-- <td class="yes"> Yes          Radio Button -->
      <td class="yes"> Yes     <!-- File Upload -->
      <td class="no"> &middot; <!-- Submit Button -->
      <td class="no"> &middot; <!-- Image Button -->
      <td class="no"> &middot; <!-- Reset Button -->
 <!-- <td class="no"> &middot; Button -->
 
   </table>
 
+  <div class="impl">
+
   <p>When an <code>input</code> element's <code
   title="attr-input-type">type</code> attribute changes state, and
   when the element is first created, the element's rendering and
   behaviour must change to the new state's accordingly and the
   <dfn>value sanitization algorithm</dfn>, if one is defined for the
   <code title="attr-input-type">type</code> attribute's new state,
   must be invoked.</p>
 
   <p>Each <code>input</code> element has a <span
   title="concept-fe-value">value</span>, which is exposed by the <code
@@ -28926,63 +31958,73 @@ interface <dfn>HTMLFormElement</dfn> : <span>HTMLElement</span> {
 
   <p>Each <code>input</code> element has a boolean <dfn
   title="concept-input-value-dirty-flag">dirty value flag</dfn>. When
   it is true, the element is said to have a <dfn
   title="concept-input-value-dirty"><i>dirty value</i></dfn>. The
   <span title="concept-input-value-dirty-flag">dirty value flag</span>
   must be initially set to false when the element is created, and must
   be set to true whenever the user interacts with the control in a way
   that changes the <span title="concept-fe-value">value</span>.</p>
 
+  </div>
+
   <p>The <dfn title="attr-input-value"><code>value</code></dfn>
   content attribute gives the default <span
   title="concept-fe-value">value</span> of the <code>input</code>
-  element. When the <code title="attr-input-value">value</code>
-  content attribute is added, set, or removed, if the control does not
-  have a <i title="concept-input-value-dirty">dirty value</i>, the
-  user agent must set the <span title="concept-fe-value">value</span>
-  of the element to the value of the <code
+  element. <span class="impl">When the <code
+  title="attr-input-value">value</code> content attribute is added,
+  set, or removed, if the control does not have a <i
+  title="concept-input-value-dirty">dirty value</i>, the user agent
+  must set the <span title="concept-fe-value">value</span> of the
+  element to the value of the <code
   title="attr-input-value">value</code> content attribute, if there is
   one, or the empty string otherwise, and then run the current
-  <span>value sanitization algorithm</span>, if one is defined.</p>
+  <span>value sanitization algorithm</span>, if one is
+  defined.</span></p>
+
+  <div class="impl">
 
   <p>Each <code>input</code> element has a <span
   title="concept-fe-checked">checkedness</span>, which is exposed by
   the <code title="dom-input-checked">checked</code> DOM
   attribute.</p>
 
   <p>Each <code>input</code> element has a boolean <dfn
   title="concept-input-checked-dirty-flag">dirty checkedness
   flag</dfn>. When it is true, the element is said to have a <dfn
   title="concept-input-checked-dirty"><i>dirty
   checkedness</i></dfn>. The <span
   title="concept-input-checked-dirty-flag">dirty checkedness
   flag</span> must be initially set to false when the element is
   created, and must be set to true whenever the user interacts with
   the control in a way that changes the <span
   title="concept-fe-checked">checkedness</span>.</p>
 
+  </div>
+
   <p>The <dfn title="attr-input-checked"><code>checked</code></dfn>
   content attribute gives the default <span
   title="concept-fe-checked">checkedness</span> of the
-  <code>input</code> element. When the <code
+  <code>input</code> element. <span class="impl">When the <code
   title="attr-input-checked">checked</code> content attribute is
   added, if the control does not have <i
   title="concept-input-checked-dirty">dirty checkedness</i>, the user
   agent must set the <span
   title="concept-fe-checked">checkedness</span> of the element to
   true; when the <code title="attr-input-checked">checked</code>
   content attribute is removed, if the control does not have <i
   title="concept-input-checked-dirty">dirty checkedness</i>, the user
   agent must set the <span
   title="concept-fe-checked">checkedness</span> of the element to
-  false.</p>
+  false.</span></p>
+
+  <div class="impl">
 
   <p>The <span title="concept-form-reset-control">reset
   algorithm</span> for <code>input</code> elements is to set the <span
   title="concept-input-value-dirty-flag">dirty value flag</span> and
   <span title="concept-input-checked-dirty-flag">dirty checkedness
   flag</span> back to false, set the <span
   title="concept-fe-value">value</span> of the element to the value of
   the <code title="attr-input-value">value</code> content attribute,
   if there is one, or the empty string otherwise, set the <span
   title="concept-fe-checked">checkedness</span> of the element to true
@@ -29015,29 +32057,33 @@ interface <dfn>HTMLFormElement</dfn> : <span>HTMLElement</span> {
   this affect shadow trees in XBL2? -->
 
   <p class="note">The <code
   title="attr-input-readonly">readonly</code> attribute can also in
   some cases (e.g. for the <span
   title="attr-input-type-date">Date</span> state, but not the <span
   title="attr-input-type-checkbox">Checkbox</span> state) make an
   <code>input</code> element <i
   title="concept-input-immutable">immutable</i>.</p>
 
+  </div>
+
   <p>The <code title="attr-fae-form">form</code> attribute is used to
   explicitly associate the <code>input</code> element with its
   <span>form owner</span>. The <code title="attr-fe-name">name</code>
   attribute represents the element's name. The <code
   title="attr-fe-disabled">disabled</code> attribute is used to make
   the control non-interactive and to prevent its value from being
   submitted. The <code title="attr-fe-autofocus">autofocus</code>
   attribute controls focus.</p>
 
+  <div class="impl">
+
   <p>The <dfn
   title="dom-input-indeterminate"><code>indeterminate</code></dfn> DOM
   attribute must initially be set to false. On getting, it must return
   the last value it was set to. On setting, it must be set to the new
   value. It has no effect except for changing the appearance of <span
   title="attr-input-type-checkbox">checkbox</span> controls.</p>
 
   <p>The <dfn title="dom-input-accept"><code>accept</code></dfn>, <dfn
   title="dom-input-alt"><code>alt</code></dfn>, <dfn
   title="dom-input-autocomplete"><code>autocomplete</code></dfn>, <dfn
@@ -29076,54 +32122,63 @@ interface <dfn>HTMLFormElement</dfn> : <span>HTMLElement</span> {
   methods, are part of the <span>constraint validation API</span>. The
   <code title="dom-lfe-labels">labels</code> attribute provides a list
   of the element's <code>label</code>s. The <code
   title="dom-textarea/input-select">select()</code>, <code
   title="dom-textarea/input-selectionStart">selectionStart</code>,
   <code title="dom-textarea/input-selectionEnd">selectionEnd</code>,
   and <code
   title="dom-textarea/input-setSelectionRange">setSelectionRange()</code>
   methods and attributes expose the element's text selection.</p>
 
+  </div>
 
 
 
   <h5>States of the <code title="attr-input-type">type</code> attribute</h5>
 
   <!-- XXX for things that say "express it as a valid foo", make sure
   that valid foo is unambiguous, and if not, define a canonical
   serialisation. e.g. should it be 2008-01-01T00:00 or
   2008-01-01t00:00? should it be 1e2 or 100? -->
 
 
 
   <h6><dfn title="attr-input-type-hidden">Hidden</dfn> state</h6>
 
+  <div class="impl">
+
   <p>When an <code>input</code> element's <code
   title="attr-input-type">type</code> attribute is in the <span
   title="attr-input-type-hidden">Hidden</span> state, the rules in
   this section apply.</p>
 
-  <p>The <code>input</code> element <span>represents</span> a value that is not
-  intended to be examined or manipulated by the user.</p>
+  </div>
+
+  <p>The <code>input</code> element <span>represents</span> a value
+  that is not intended to be examined or manipulated by the user.</p>
+
+  <div class="impl">
 
   <p><strong>Constraint validation:</strong> If an <code>input</code>
   element's <code title="attr-input-type">type</code> attribute is in
   the <span title="attr-input-type-hidden">Hidden</span> state, it is
   <span>barred from constraint validation</span>.</p>
 
+  </div>
+
   <p>If the <code title="attr-input-value">name</code> attribute is
   present and has a value that is a <span>case-sensitive</span> match
   for the string "<code title="">_charset_</code>", then the element's
   <code title="attr-input-value">value</code> attribute must be
   omitted.</p>
 
-  <div class="bookkeeping">
+  <div class="bookkeeping impl">
 
    <p>The 
    <code title="dom-input-value">value</code>
    DOM attribute applies to this element and is
    in mode <span title="dom-input-value-value">value</span>.</p>
 
    <p>The following content attributes must not be specified and do not
    apply to the element:
    <code class="no-backref" title="attr-input-accept">accept</code>,
    <code class="no-backref" title="attr-fs-action">action</code>,
@@ -29169,45 +32224,55 @@ interface <dfn>HTMLFormElement</dfn> : <span>HTMLElement</span> {
 
   </div>
 
 
   <h6><dfn title="attr-input-type-text">Text</dfn> state and <dfn title="attr-input-type-search">Search</dfn> state</h6>
 
   <!-- v2 idea: applying input masks to <input>, e.g. for entering
        data with slashes and dashes (ack Greg Kilwein)
   -->
 
+  <div class="impl">
+
   <p>When an <code>input</code> element's <code
   title="attr-input-type">type</code> attribute is in the <span
   title="attr-input-type-text">Text</span> state or the <span
   title="attr-input-type-search">Search</span> state, the rules in
   this section apply.</p>
+  </div>
 
-  <p>The <code>input</code> element <span>represents</span> a one line plain text
-  edit control for the element's <span
+  <p>The <code>input</code> element <span>represents</span> a one line
+  plain text edit control for the element's <span
   title="concept-fe-value">value</span>.</p>
 
+  <div class="impl">
+
   <p>If the element is <i title="concept-input-mutable">mutable</i>,
   its <span title="concept-fe-value">value</span> should be editable
   by the user. User agents must not allow users to insert U+000A LINE
   FEED (LF) or U+000D CARRIAGE RETURN (CR) characters into the
   element's <span title="concept-fe-value">value</span>.</p>
+  </div>
 
   <p>The <code title="attr-input-value">value</code> attribute, if
   specified, must have a value that contains no U+000A LINE FEED (LF)
   or U+000D CARRIAGE RETURN (CR) characters.</p>
 
+  <div class="impl">
+
   <p><strong>The <span>value sanitization algorithm</span> is as
   follows:</strong> <span>Strip line breaks</span> from the <span
   title="concept-fe-value">value</span>.</p>
 
-  <div class="bookkeeping">
+  </div>
+
+  <div class="bookkeeping impl">
 
    <p>The following common <code>input</code> element content
    attributes, DOM attributes, and methods apply to the element:
    <code title="attr-input-autocomplete">autocomplete</code>,
    <code title="attr-input-list">list</code>,
    <code title="attr-input-maxlength">maxlength</code>,
    <code title="attr-input-pattern">pattern</code>,
    <code title="attr-input-placeholder">placeholder</code>,
    <code title="attr-input-readonly">readonly</code>,
    <code title="attr-input-required">required</code>, and
@@ -29250,59 +32315,71 @@ interface <dfn>HTMLFormElement</dfn> : <span>HTMLElement</span> {
    <code class="no-backref" title="dom-input-valueAsDate">valueAsDate</code>, and
    <code class="no-backref" title="dom-input-valueAsNumber">valueAsNumber</code> DOM attributes;
    <code class="no-backref" title="dom-input-stepDown">stepDown()</code> and
    <code class="no-backref" title="dom-input-stepUp">stepUp()</code> methods.</p>
 
   </div>
 
 
   <h6><dfn title="attr-input-type-url">URL</dfn> state</h6>
 
+  <div class="impl">
+
   <p>When an <code>input</code> element's <code
   title="attr-input-type">type</code> attribute is in the <span
   title="attr-input-type-url">URL</span> state, the rules in this
   section apply.</p>
 
-  <p>The <code>input</code> element <span>represents</span> a control for editing a
-  single <span>absolute URL</span> given in the element's <span
-  title="concept-fe-value">value</span>.</p>
+  </div>
+
+  <p>The <code>input</code> element <span>represents</span> a control
+  for editing a single <span>absolute URL</span> given in the
+  element's <span title="concept-fe-value">value</span>.</p>
+
+  <div class="impl">
 
   <p>If the is <i title="concept-input-mutable">mutable</i>, the user
   agent should allow the user to change the URL represented by its
   <span title="concept-fe-value">value</span>. User agents may allow
   the user to set the <span title="concept-fe-value">value</span> to a
   string that is not a <span title="valid URL">valid</span>
   <span>absolute URL</span>, but may also or instead automatically
   escape characters entered by the user so that the <span
   title="concept-fe-value">value</span> is always a <span title="valid
   URL">valid</span> <span>absolute URL</span> (even if that isn't the
   actual value seen and edited by the user in the interface). User
   agents should allow the user to set the <span
   title="concept-fe-value">value</span> to the empty string. User
   agents must not allow users to insert U+000A LINE FEED (LF) or
   U+000D CARRIAGE RETURN (CR) characters into the <span
   title="concept-fe-value">value</span>.</p>
+  
+  </div>
 
   <p>The <code title="attr-input-value">value</code> attribute, if
   specified, must have a value that is a <span title="valid
   URL">valid</span> <span>absolute URL</span>.</p>
 
+  <div class="impl">
+
   <p><strong>The <span>value sanitization algorithm</span> is as
   follows:</strong> <span>Strip line breaks</span> from the <span
   title="concept-fe-value">value</span>.</p>
 
   <p><strong>Constraint validation:</strong> While the <span
   title="concept-fe-value">value</span> of the element is not a <span
   title="valid URL">valid</span> <span>absolute URL</span>, the
   element is <span>suffering from a type mismatch</span>.</p>
+  
+  </div>
 
-  <div class="bookkeeping">
+  <div class="bookkeeping impl">
 
    <p>The following common <code>input</code> element content
    attributes, DOM attributes, and methods apply to the element:
    <code title="attr-input-autocomplete">autocomplete</code>,
    <code title="attr-input-list">list</code>,
    <code title="attr-input-maxlength">maxlength</code>,
    <code title="attr-input-pattern">pattern</code>,
    <code title="attr-input-placeholder">placeholder</code>,
    <code title="attr-input-readonly">readonly</code>,
    <code title="attr-input-required">required</code>, and
@@ -29345,84 +32422,96 @@ interface <dfn>HTMLFormElement</dfn> : <span>HTMLElement</span> {
    <code class="no-backref" title="dom-input-valueAsDate">valueAsDate</code>, and
    <code class="no-backref" title="dom-input-valueAsNumber">valueAsNumber</code> DOM attributes;
    <code class="no-backref" title="dom-input-stepDown">stepDown()</code> and
    <code class="no-backref" title="dom-input-stepUp">stepUp()</code> methods.</p>
 
   </div>
 
 
   <h6><dfn title="attr-input-type-email">E-mail</dfn> state</h6>
 
+  <div class="impl">
+
   <p>When an <code>input</code> element's <code
   title="attr-input-type">type</code> attribute is in the <span
   title="attr-input-type-email">E-mail</span> state, the rules in this
   section apply.</p>
+  
+  </div>
 
-  <p>The <code>input</code> element <span>represents</span> a control for editing a
-  list of e-mail addresses given in the element's <span
+  <p>The <code>input</code> element <span>represents</span> a control
+  for editing a list of e-mail addresses given in the element's <span
   title="concept-fe-value">value</span>.</p>
 
+  <div class="impl">
+
   <p>If the element is <i title="concept-input-mutable">mutable</i>,
   the user agent should allow the user to change the e-mail addresses
   represented by its <span title="concept-fe-value">value</span>. If
   the <code title="attr-input-multiple">multiple</code> attribute is
   specified, then the user agent should allow the user to select or
   provide multiple addresses; otherwise, the user agent should act in
   a manner consistent with expecting the user to provide a single
   e-mail address. User agents may allow the user to set the <span
   title="concept-fe-value">value</span> to a string that is not an
   <span>valid e-mail address list</span>. User agents should allow the
   user to set the <span title="concept-fe-value">value</span> to the
   empty string. User agents must not allow users to insert U+000A LINE
   FEED (LF) or U+000D CARRIAGE RETURN (CR) characters into the <span
   title="concept-fe-value">value</span>. User agents may transform the
   <span title="concept-fe-value">value</span> for display and editing
   (e.g. converting punycode in the <span
   title="concept-fe-value">value</span> to IDN in the display and vice
   versa).</p>
+  
+  </div>
 
   <p>If the <code title="attr-input-multiple">multiple</code>
   attribute is specified on the element, then the <code
   title="attr-input-value">value</code> attribute, if specified, must
   have a value that is a <span>valid e-mail address list</span>;
   otherwise, the <code title="attr-input-value">value</code>
   attribute, if specified, must have a value that is a single
   <span>valid e-mail address</span>.</p>
 
+  <div class="impl">
+
   <p><strong>The <span>value sanitization algorithm</span> is as
   follows:</strong> <span>Strip line breaks</span> from the <span
   title="concept-fe-value">value</span>.</p>
 
   <p><strong>Constraint validation:</strong> If the <code
   title="attr-input-multiple">multiple</code> attribute is specified
   on the element, then, while the <span
   title="concept-fe-value">value</span> of the element is not a
   <span>valid e-mail address list</span>, the element is
   <span>suffering from a type mismatch</span>; otherwise, while the
   <span title="concept-fe-value">value</span> of the element is not a
   single <span>valid e-mail address</span>, the element is
   <span>suffering from a type mismatch</span>.</p>
+  
+  </div>
 
   <p>A <dfn>valid e-mail address list</dfn> is a <span>set of
   comma-separated tokens</span>, where each token is itself a
-  <span>valid e-mail address</span>. To obtain the list of tokens from
-  a <span>valid e-mail address list</span>, the user agent must <span
-  title="split a string on commas">split the string on
-  commas</span>.</p>
+  <span>valid e-mail address</span>. <span class="impl">To obtain the
+  list of tokens from a <span>valid e-mail address list</span>, the
+  user agent must <span title="split a string on commas">split the
+  string on commas</span>.</span></p>
 
   <p>A <dfn>valid e-mail address</dfn> is a string that matches the
   production <code title="">dot-atom&nbsp;"@"&nbsp;dot-atom</code>
   where <code title="">dot-atom</code> is defined in RFC 2822 section
   3.2.4, excluding the <code>CFWS</code> production everywhere. <a
   href="#refsRFC2822">[RFC2822]</a></p>
 
-  <div class="bookkeeping">
+  <div class="bookkeeping impl">
 
    <p>The following common <code>input</code> element content
    attributes, DOM attributes, and methods apply to the element:
    <code title="attr-input-autocomplete">autocomplete</code>,
    <code title="attr-input-list">list</code>,
    <code title="attr-input-maxlength">maxlength</code>,
    <code title="attr-input-multiple">multiple</code>,
    <code title="attr-input-pattern">pattern</code>,
    <code title="attr-input-placeholder">placeholder</code>,
    <code title="attr-input-readonly">readonly</code>,
@@ -29465,45 +32554,57 @@ interface <dfn>HTMLFormElement</dfn> : <span>HTMLElement</span> {
    <code class="no-backref" title="dom-input-valueAsDate">valueAsDate</code>, and
    <code class="no-backref" title="dom-input-valueAsNumber">valueAsNumber</code> DOM attributes;
    <code class="no-backref" title="dom-input-stepDown">stepDown()</code> and
    <code class="no-backref" title="dom-input-stepUp">stepUp()</code> methods.</p>
 
   </div>
 
 
   <h6><dfn title="attr-input-type-password">Password</dfn> state</h6>
 
+  <div class="impl">
+
   <p>When an <code>input</code> element's <code
   title="attr-input-type">type</code> attribute is in the <span
   title="attr-input-type-password">Password</span> state, the rules in
   this section apply.</p>
+  
+  </div>
 
-  <p>The <code>input</code> element <span>represents</span> a one line plain text
-  edit control for the element's <span
+  <p>The <code>input</code> element <span>represents</span> a one line
+  plain text edit control for the element's <span
   title="concept-fe-value">value</span>. The user agent should obscure
   the value so that people other than the user cannot see it.</p>
 
+  <div class="impl">
+
   <p>If the element is <i title="concept-input-mutable">mutable</i>,
   its <span title="concept-fe-value">value</span> should be editable
   by the user. User agents must not allow users to insert U+000A LINE
   FEED (LF) or U+000D CARRIAGE RETURN (CR) characters into the <span
   title="concept-fe-value">value</span>.</p>
+  
+  </div>
 
   <p>The <code title="attr-input-value">value</code> attribute, if
   specified, must have a value that contains no U+000A LINE FEED (LF)
   or U+000D CARRIAGE RETURN (CR) characters.</p>
 
+  <div class="impl">
+
   <p><strong>The <span>value sanitization algorithm</span> is as
   follows:</strong> <span>Strip line breaks</span> from the <span
   title="concept-fe-value">value</span>.</p>
+  
+  </div>
 
-  <div class="bookkeeping">
+  <div class="bookkeeping impl">
 
    <p>The following common <code>input</code> element content
    attributes, DOM attributes, and methods apply to the element:
    <code title="attr-input-autocomplete">autocomplete</code>,
    <code title="attr-input-maxlength">maxlength</code>,
    <code title="attr-input-pattern">pattern</code>,
    <code title="attr-input-placeholder">placeholder</code>,
    <code title="attr-input-readonly">readonly</code>,
    <code title="attr-input-required">required</code>, and
    <code title="attr-input-size">size</code> content attributes;
@@ -29543,74 +32644,90 @@ interface <dfn>HTMLFormElement</dfn> : <span>HTMLElement</span> {
    <code class="no-backref" title="dom-input-valueAsDate">valueAsDate</code>, and
    <code class="no-backref" title="dom-input-valueAsNumber">valueAsNumber</code> DOM attributes;
    <code class="no-backref" title="dom-input-stepDown">stepDown()</code> and
    <code class="no-backref" title="dom-input-stepUp">stepUp()</code> methods.</p>
 
   </div>
 
 
   <h6><dfn title="attr-input-type-datetime">Date and Time</dfn> state</h6>
 
+  <div class="impl">
+
   <p>When an <code>input</code> element's <code
   title="attr-input-type">type</code> attribute is in the <span
   title="attr-input-type-datetime">Date and Time</span> state, the
   rules in this section apply.</p>
+  
+  </div>
 
-  <p>The <code>input</code> element <span>represents</span> a control for setting
-  the element's <span title="concept-fe-value">value</span> to a
-  string representing a specific <span title="concept-datetime">global
-  date and time</span>. User agents may display the date and time in
-  whatever timezone is appropriate for the user.</p>
+  <p>The <code>input</code> element <span>represents</span> a control
+  for setting the element's <span
+  title="concept-fe-value">value</span> to a string representing a
+  specific <span title="concept-datetime">global date and
+  time</span>. <span class="impl">User agents may display the date and
+  time in whatever timezone is appropriate for the user.</span></p>
+
+  <div class="impl">
 
   <p>If the element is <i title="concept-input-mutable">mutable</i>,
   the user agent should allow the user to change the <span
   title="concept-datetime">global date and time</span> represented by
   its <span title="concept-fe-value">value</span>, as obtained by
   <span title="parse a global date and time string">parsing a global
   date and time</span> from it. User agents must not allow the user to
   set the <span title="concept-fe-value">value</span> to a string that
   is not a <span>valid global date and time string</span> expressed in
   UTC, though user agents may allow the user to set and view the time
   in another timezone and silently translate the time to and from the
   UTC timezone in the <span title="concept-fe-value">value</span>. If
   the user agent provides a user interface for selecting a <span
   title="concept-datetime">global date and time</span>, then the <span
   title="concept-fe-value">value</span> must be set to a <span>valid
   global date and time string</span> expressed in UTC representing the
   user's selection. User agents should allow the user to set the <span
   title="concept-fe-value">value</span> to the empty string.</p>
+  
+  </div>
 
   <p>The <code title="attr-input-value">value</code> attribute, if
   specified, must have a value that is a <span>valid global date and
   time string</span>.</p> <!-- ok to set out-of-range value, we never
   know when we might have to represent bogus input -->
 
+  <div class="impl">
+
   <p><strong>The <span>value sanitization algorithm</span> is as
   follows:</strong> If the <span title="concept-fe-value">value</span>
   of the element is a <span>valid global date and time string</span>,
   then adjust the time so that the <span
   title="concept-fe-value">value</span> represents the same point in
   time but expressed in the UTC timezone, otherwise, set it to the
   empty string instead.</p>
+  
+  </div>
 
   <p>The <code title="attr-input-min">min</code> attribute, if
   specified, must have a value that is a <span>valid global date and
   time string</span>. The <code title="attr-input-max">max</code>
   attribute, if specified, must have a value that is a <span>valid
   global date and time string</span>.</p>
 
   <p>The <code title="attr-input-step">step</code> attribute is
-  expressed in seconds. The <span
+  expressed in seconds. <span class="impl">The <span
   title="concept-input-step-scale">step scale factor</span> is 1000
   (which converts the seconds to milliseconds, as used in the other
-  algorithms). The <span title="concept-input-step-default">default
-  step</span> is 60 seconds.</p>
+  algorithms).</span> The <span
+  title="concept-input-step-default">default step</span> is 60
+  seconds.</p>
+
+  <div class="impl">
 
   <p>When the element is <span>suffering from a step mismatch</span>,
   the user agent may round the element's <span
   title="concept-fe-value">value</span> to the nearest <span
   title="concept-datetime">global date and time</span> for which the
   element would not <span title="suffering from a step
   mismatch">suffer from a step mismatch</span>.</p>
 
   <p><strong>The <span
   title="concept-input-value-string-number">algorithm to convert a
@@ -29645,22 +32762,24 @@ interface <dfn>HTMLFormElement</dfn> : <span>HTMLElement</span> {
   expressed in UTC.</p>
 
   <p><strong>The <span
   title="concept-input-value-date-string">algorithm to convert a
   <code>Date</code> object to a string</span>, given a
   <code>Date</code> object <var title="">input</var>, is as
   follows:</strong> Return a <span>valid global date and time
   string</span> expressed in UTC that represents the <span
   title="concept-datetime">global date and time</span> that is
   represented by <var title="">input</var>.</p>
+  
+  </div>
 
-  <div class="bookkeeping">
+  <div class="bookkeeping impl">
 
    <p>The following common <code>input</code> element content
    attributes, DOM attributes, and methods apply to the element:
    <code title="attr-input-autocomplete">autocomplete</code>,
    <code title="attr-input-list">list</code>,
    <code title="attr-input-max">max</code>,
    <code title="attr-input-min">min</code>,
    <code title="attr-input-readonly">readonly</code>,
    <code title="attr-input-required">required</code>, and
    <code title="attr-input-step">step</code> content attributes;
@@ -29703,66 +32822,81 @@ interface <dfn>HTMLFormElement</dfn> : <span>HTMLElement</span> {
    <code class="no-backref" title="dom-textarea/input-selectionStart">selectionStart</code>, and
    <code class="no-backref" title="dom-textarea/input-selectionEnd">selectionEnd</code> DOM attributes;
    <code class="no-backref" title="dom-textarea/input-select">select()</code> and
    <code class="no-backref" title="dom-textarea/input-setSelectionRange">setSelectionRange()</code> methods.</p>
 
   </div>
 
 
   <h6><dfn title="attr-input-type-date">Date</dfn> state</h6>
 
+  <div class="impl">
+
   <p>When an <code>input</code> element's <code
   title="attr-input-type">type</code> attribute is in the <span
   title="attr-input-type-date">Date</span> state, the rules in this
   section apply.</p>
+  
+  </div>
+
+  <p>The <code>input</code> element <span>represents</span> a control
+  for setting the element's <span
+  title="concept-fe-value">value</span> to a string representing a
+  specific <span title="concept-date">date</span>.</p>
 
-  <p>The <code>input</code> element <span>represents</span> a control for setting
-  the element's <span title="concept-fe-value">value</span> to a
-  string representing a specific <span
-  title="concept-date">date</span>.</p>
+  <div class="impl">
 
   <p>If the element is <i title="concept-input-mutable">mutable</i>,
   the user agent should allow the user to change the <span
   title="concept-date">date</span> represented by its <span
   title="concept-fe-value">value</span>, as obtained by <span
   title="parse a date string">parsing a date</span> from it. User
   agents must not allow the user to set the <span
   title="concept-fe-value">value</span> to a string that is not a
   <span>valid date string</span>. If the user agent provides a user
   interface for selecting a <span title="concept-date">date</span>,
   then the <span title="concept-fe-value">value</span> must be set to
   a <span>valid date string</span> representing the user's
   selection. User agents should allow the user to set the <span
   title="concept-fe-value">value</span> to the empty string.</p>
+  
+  </div>
 
   <p>The <code title="attr-input-value">value</code> attribute, if
   specified, must have a value that is a <span>valid date
   string</span>.</p> <!-- ok to set out-of-range value, we never know
   when we might have to represent bogus input -->
 
+  <div class="impl">
+
   <p><strong>The <span>value sanitization algorithm</span> is as
   follows:</strong> If the <span title="concept-fe-value">value</span>
   of the element is not a <span>valid date string</span>, then set it
   to the empty string instead.</p>
+  
+  </div>
 
   <p>The <code title="attr-input-min">min</code> attribute, if
   specified, must have a value that is a <span>valid date
   string</span>. The <code title="attr-input-max">max</code>
   attribute, if specified, must have a value that is a <span>valid
   date string</span>.</p>
 
   <p>The <code title="attr-input-step">step</code> attribute is
-  expressed in days. The <span title="concept-input-step-scale">step
-  scale factor</span> is 86,400,000 (which converts the days to
-  milliseconds, as used in the other algorithms). The <span
+  expressed in days. <span class="impl">The <span
+  title="concept-input-step-scale">step scale factor</span> is
+  86,400,000 (which converts the days to milliseconds, as used in the
+  other algorithms).</span> The <span
   title="concept-input-step-default">default step</span> is 1 day.</p>
 
+  <div class="impl">
+
   <p>When the element is <span>suffering from a step mismatch</span>,
   the user agent may round the element's <span
   title="concept-fe-value">value</span> to the nearest <span
   title="concept-date">date</span> for which the element would not
   <span title="suffering from a step mismatch">suffer from a step
   mismatch</span>.</p>
 
   <p><strong>The <span
   title="concept-input-value-string-number">algorithm to convert a
   string to a number</span>, given a string <var title="">input</var>,
@@ -29794,22 +32928,24 @@ interface <dfn>HTMLFormElement</dfn> : <span>HTMLElement</span> {
   the parsed <span title="concept-date">date</span>.</p>
 
   <p><strong>The <span
   title="concept-input-value-date-string">algorithm to convert a
   <code>Date</code> object to a string</span>, given a
   <code>Date</code> object <var title="">input</var>, is as
   follows:</strong> Return a <span>valid date string</span> that
   represents the <span title="concept-date">date</span> current at the
   time represented by <var title="">input</var> in the UTC
   timezone.</p>
+  
+  </div>
 
-  <div class="bookkeeping">
+  <div class="bookkeeping impl">
 
    <p>The following common <code>input</code> element content
    attributes, DOM attributes, and methods apply to the element:
    <code title="attr-input-autocomplete">autocomplete</code>,
    <code title="attr-input-list">list</code>,
    <code title="attr-input-max">max</code>,
    <code title="attr-input-min">min</code>,
    <code title="attr-input-readonly">readonly</code>,
    <code title="attr-input-required">required</code>, and
    <code title="attr-input-step">step</code> content attributes;
@@ -29852,66 +32988,80 @@ interface <dfn>HTMLFormElement</dfn> : <span>HTMLElement</span> {
    <code class="no-backref" title="dom-textarea/input-selectionStart">selectionStart</code>, and
    <code class="no-backref" title="dom-textarea/input-selectionEnd">selectionEnd</code> DOM attributes;
    <code class="no-backref" title="dom-textarea/input-select">select()</code> and
    <code class="no-backref" title="dom-textarea/input-setSelectionRange">setSelectionRange()</code> methods.</p>
 
   </div>
 
 
   <h6><dfn title="attr-input-type-month">Month</dfn> state</h6>
 
+  <div class="impl">
+
   <p>When an <code>input</code> element's <code
   title="attr-input-type">type</code> attribute is in the <span
   title="attr-input-type-month">Month</span> state, the rules in this
   section apply.</p>
+  
+  </div>
 
-  <p>The <code>input</code> element <span>represents</span> a control for setting
-  the element's <span title="concept-fe-value">value</span> to a
-  string representing a specific <span
-  title="concept-month">month</span>.</p>
+  <p>The <code>input</code> element <span>represents</span> a control
+  for setting the element's <span
+  title="concept-fe-value">value</span> to a string representing a
+  specific <span title="concept-month">month</span>.</p>
+
+  <div class="impl">
 
   <p>If the element is <i title="concept-input-mutable">mutable</i>,
   the user agent should allow the user to change the <span
   title="concept-month">month</span> represented by its <span
   title="concept-fe-value">value</span>, as obtained by <span
   title="parse a month string">parsing a month</span> from it. User
   agents must not allow the user to set the <span
   title="concept-fe-value">value</span> to a string that is not a
   <span>valid month string</span>. If the user agent provides a user
   interface for selecting a <span title="concept-month">month</span>,
   then the <span title="concept-fe-value">value</span> must be set to
   a <span>valid month string</span> representing the user's
   selection. User agents should allow the user to set the <span
   title="concept-fe-value">value</span> to the empty string.</p>
+  
+  </div>
 
   <p>The <code title="attr-input-value">value</code> attribute, if
   specified, must have a value that is a <span>valid month
   string</span>.</p> <!-- ok to set out-of-range value, we never know
   when we might have to represent bogus input -->
 
+  <div class="impl">
+
   <p><strong>The <span>value sanitization algorithm</span> is as
   follows:</strong> If the <span title="concept-fe-value">value</span>
   of the element is not a <span>valid month string</span>, then set it
   to the empty string instead.</p>
+  
+  </div>
 
   <p>The <code title="attr-input-min">min</code> attribute, if
   specified, must have a value that is a <span>valid month
   string</span>. The <code title="attr-input-max">max</code>
   attribute, if specified, must have a value that is a <span>valid
   month string</span>.</p>
 
   <p>The <code title="attr-input-step">step</code> attribute is
-  expressed in months. The <span title="concept-input-step-scale">step
-  scale factor</span> is 1 (there is no conversion needed as the
-  algorithms use months). The <span
-  title="concept-input-step-default">default step</span> is 1
-  month.</p>
+  expressed in months. <span class="impl">The <span
+  title="concept-input-step-scale">step scale factor</span> is 1
+  (there is no conversion needed as the algorithms use months).</span>
+  The <span title="concept-input-step-default">default step</span> is
+  1 month.</p>
+
+  <div class="impl">
 
   <p>When the element is <span>suffering from a step mismatch</span>,
   the user agent may round the element's <span
   title="concept-fe-value">value</span> to the nearest <span
   title="concept-month">month</span> for which the element would not
   <span title="suffering from a step mismatch">suffer from a step
   mismatch</span>.</p>
 
   <p><strong>The <span
   title="concept-input-value-string-number">algorithm to convert a
@@ -29945,22 +33095,24 @@ interface <dfn>HTMLFormElement</dfn> : <span>HTMLElement</span> {
   title="concept-month">month</span>.</p>
 
   <p><strong>The <span
   title="concept-input-value-date-string">algorithm to convert a
   <code>Date</code> object to a string</span>, given a
   <code>Date</code> object <var title="">input</var>, is as
   follows:</strong> Return a <span>valid month string</span> that
   represents the <span title="concept-month">month</span> current at
   the time represented by <var title="">input</var> in the UTC
   timezone.</p>
+  
+  </div>
 
-  <div class="bookkeeping">
+  <div class="bookkeeping impl">
 
    <p>The following common <code>input</code> element content
    attributes, DOM attributes, and methods apply to the element:
    <code title="attr-input-autocomplete">autocomplete</code>,
    <code title="attr-input-list">list</code>,
    <code title="attr-input-max">max</code>,
    <code title="attr-input-min">min</code>,
    <code title="attr-input-readonly">readonly</code>,
    <code title="attr-input-required">required</code>, and
    <code title="attr-input-step">step</code> content attributes;
@@ -30003,67 +33155,82 @@ interface <dfn>HTMLFormElement</dfn> : <span>HTMLElement</span> {
    <code class="no-backref" title="dom-textarea/input-selectionStart">selectionStart</code>, and
    <code class="no-backref" title="dom-textarea/input-selectionEnd">selectionEnd</code> DOM attributes;
    <code class="no-backref" title="dom-textarea/input-select">select()</code> and
    <code class="no-backref" title="dom-textarea/input-setSelectionRange">setSelectionRange()</code> methods.</p>
 
   </div>
 
 
   <h6><dfn title="attr-input-type-week">Week</dfn> state</h6>
 
+  <div class="impl">
+
   <p>When an <code>input</code> element's <code
   title="attr-input-type">type</code> attribute is in the <span
   title="attr-input-type-week">Week</span> state, the rules in this
   section apply.</p>
+  
+  </div>
 
-  <p>The <code>input</code> element <span>represents</span> a control for setting
-  the element's <span title="concept-fe-value">value</span> to a
-  string representing a specific <span
-  title="concept-week">week</span>.</p>
+  <p>The <code>input</code> element <span>represents</span> a control
+  for setting the element's <span
+  title="concept-fe-value">value</span> to a string representing a
+  specific <span title="concept-week">week</span>.</p>
+
+  <div class="impl">
 
   <p>If the element is <i title="concept-input-mutable">mutable</i>,
   the user agent should allow the user to change the <span
   title="concept-week">week</span> represented by its <span
   title="concept-fe-value">value</span>, as obtained by <span
   title="parse a week string">parsing a week</span> from it. User
   agents must not allow the user to set the <span
   title="concept-fe-value">value</span> to a string that is not a
   <span>valid week string</span>. If the user agent provides a user
   interface for selecting a <span title="concept-week">week</span>,
   then the <span title="concept-fe-value">value</span> must be set to
   a <span>valid week string</span> representing the user's
   selection. User agents should allow the user to set the <span
   title="concept-fe-value">value</span> to the empty string.</p>
+  
+  </div>
 
   <p>The <code title="attr-input-value">value</code> attribute, if
   specified, must have a value that is a <span>valid week
   string</span>.</p> <!-- ok to set out-of-range value, we never know
   when we might have to represent bogus input -->
 
+  <div class="impl">
+
   <p><strong>The <span>value sanitization algorithm</span> is as
   follows:</strong> If the <span title="concept-fe-value">value</span>
   of the element is not a <span>valid week string</span>, then set it
   to the empty string instead.</p>
+  
+  </div>
 
   <p>The <code title="attr-input-min">min</code> attribute, if
   specified, must have a value that is a <span>valid week
   string</span>. The <code title="attr-input-max">max</code>
   attribute, if specified, must have a value that is a <span>valid
   week string</span>.</p>
 
   <p>The <code title="attr-input-step">step</code> attribute is
-  expressed in weeks. The <span title="concept-input-step-scale">step
-  scale factor</span> is 604,800,000 (which converts the weeks to
-  milliseconds, as used in the other algorithms). The <span
+  expressed in weeks. <span class="impl">The <span
+  title="concept-input-step-scale">step scale factor</span> is
+  604,800,000 (which converts the weeks to milliseconds, as used in
+  the other algorithms).</span> The <span
   title="concept-input-step-default">default step</span> is 1
   week.</p>
 
+  <div class="impl">
+
   <p>When the element is <span>suffering from a step mismatch</span>,
   the user agent may round the element's <span
   title="concept-fe-value">value</span> to the nearest <span
   title="concept-week">week</span> for which the element would not
   <span title="suffering from a step mismatch">suffer from a step
   mismatch</span>.</p>
 
   <p><strong>The <span
   title="concept-input-value-string-number">algorithm to convert a
   string to a number</span>, given a string <var title="">input</var>,
@@ -30095,22 +33262,24 @@ interface <dfn>HTMLFormElement</dfn> : <span>HTMLElement</span> {
   the Monday of the parsed <span title="concept-week">week</span>.</p>
 
   <p><strong>The <span
   title="concept-input-value-date-string">algorithm to convert a
   <code>Date</code> object to a string</span>, given a
   <code>Date</code> object <var title="">input</var>, is as
   follows:</strong> Return a <span>valid week string</span> that
   represents the <span title="concept-week">week</span> current at the
   time represented by <var title="">input</var> in the UTC
   timezone.</p>
+  
+  </div>
 
-  <div class="bookkeeping">
+  <div class="bookkeeping impl">
 
    <p>The following common <code>input</code> element content
    attributes, DOM attributes, and methods apply to the element:
    <code title="attr-input-autocomplete">autocomplete</code>,
    <code title="attr-input-list">list</code>,
    <code title="attr-input-max">max</code>,
    <code title="attr-input-min">min</code>,
    <code title="attr-input-readonly">readonly</code>,
    <code title="attr-input-required">required</code>, and
    <code title="attr-input-step">step</code> content attributes;
@@ -30153,66 +33322,81 @@ interface <dfn>HTMLFormElement</dfn> : <span>HTMLElement</span> {
    <code class="no-backref" title="dom-textarea/input-selectionStart">selectionStart</code>, and
    <code class="no-backref" title="dom-textarea/input-selectionEnd">selectionEnd</code> DOM attributes;
    <code class="no-backref" title="dom-textarea/input-select">select()</code> and
    <code class="no-backref" title="dom-textarea/input-setSelectionRange">setSelectionRange()</code> methods.</p>
 
   </div>
 
 
   <h6><dfn title="attr-input-type-time">Time</dfn> state</h6>
 
+  <div class="impl">
+
   <p>When an <code>input</code> element's <code
   title="attr-input-type">type</code> attribute is in the <span
   title="attr-input-type-time">Time</span> state, the rules in this
   section apply.</p>
+  
+  </div>
+
+  <p>The <code>input</code> element <span>represents</span> a control
+  for setting the element's <span
+  title="concept-fe-value">value</span> to a string representing a
+  specific <span title="concept-time">time</span>.</p>
 
-  <p>The <code>input</code> element <span>represents</span> a control for setting
-  the element's <span title="concept-fe-value">value</span> to a
-  string representing a specific <span
-  title="concept-time">time</span>.</p>
+  <div class="impl">
 
   <p>If the element is <i title="concept-input-mutable">mutable</i>,
   the user agent should allow the user to change the <span
   title="concept-time">time</span> represented by its <span
   title="concept-fe-value">value</span>, as obtained by <span
   title="parse a time string">parsing a time</span> from it. User
   agents must not allow the user to set the <span
   title="concept-fe-value">value</span> to a string that is not a
   <span>valid time string</span>. If the user agent provides a user
   interface for selecting a <span title="concept-time">time</span>,
   then the <span title="concept-fe-value">value</span> must be set to
   a <span>valid time string</span> representing the user's
   selection. User agents should allow the user to set the <span
   title="concept-fe-value">value</span> to the empty string.</p>
+  
+  </div>
 
   <p>The <code title="attr-input-value">value</code> attribute, if
   specified, must have a value that is a <span>valid time
   string</span>.</p> <!-- ok to set out-of-range value, we never know
   when we might have to represent bogus input -->
 
+  <div class="impl">
+
   <p><strong>The <span>value sanitization algorithm</span> is as
   follows:</strong> If the <span title="concept-fe-value">value</span>
   of the element is not a <span>valid time string</span>, then set it
   to the empty string instead.</p>
+  
+  </div>
 
   <p>The <code title="attr-input-min">min</code> attribute, if
   specified, must have a value that is a <span>valid time
   string</span>. The <code title="attr-input-max">max</code>
   attribute, if specified, must have a value that is a <span>valid
   time string</span>.</p>
 
   <p>The <code title="attr-input-step">step</code> attribute is
-  expressed in seconds. The <span
+  expressed in seconds. <span class="impl">The <span
   title="concept-input-step-scale">step scale factor</span> is 1000
   (which converts the seconds to milliseconds, as used in the other
-  algorithms). The <span title="concept-input-step-default">default
-  step</span> is 60 seconds.</p>
+  algorithms).</span> The <span
+  title="concept-input-step-default">default step</span> is 60
+  seconds.</p>
+
+  <div class="impl">
 
   <p>When the element is <span>suffering from a step mismatch</span>,
   the user agent may round the element's <span
   title="concept-fe-value">value</span> to the nearest <span
   title="concept-time">time</span> for which the element would not
   <span title="suffering from a step mismatch">suffer from a step
   mismatch</span>.</p>
 
   <p><strong>The <span
   title="concept-input-value-string-number">algorithm to convert a
@@ -30240,22 +33424,24 @@ interface <dfn>HTMLFormElement</dfn> : <span>HTMLElement</span> {
   <code>Date</code> object representing the parsed <span
   title="concept-time">time</span> in UTC on 1970-01-01.</p>
 
   <p><strong>The <span
   title="concept-input-value-date-string">algorithm to convert a
   <code>Date</code> object to a string</span>, given a
   <code>Date</code> object <var title="">input</var>, is as
   follows:</strong> Return a <span>valid time string</span> that
   represents the UTC <span title="concept-time">time</span> component
   that is represented by <var title="">input</var>.</p>
+  
+  </div>
 
-  <div class="bookkeeping">
+  <div class="bookkeeping impl">
 
    <p>The following common <code>input</code> element content
    attributes, DOM attributes, and methods apply to the element:
    <code title="attr-input-autocomplete">autocomplete</code>,
    <code title="attr-input-list">list</code>,
    <code title="attr-input-max">max</code>,
    <code title="attr-input-min">min</code>,
    <code title="attr-input-readonly">readonly</code>,
    <code title="attr-input-required">required</code>, and
    <code title="attr-input-step">step</code> content attributes;
@@ -30298,67 +33484,83 @@ interface <dfn>HTMLFormElement</dfn> : <span>HTMLElement</span> {
    <code class="no-backref" title="dom-textarea/input-selectionStart">selectionStart</code>, and
    <code class="no-backref" title="dom-textarea/input-selectionEnd">selectionEnd</code> DOM attributes;
    <code class="no-backref" title="dom-textarea/input-select">select()</code> and
    <code class="no-backref" title="dom-textarea/input-setSelectionRange">setSelectionRange()</code> methods.</p>
 
   </div>
 
 
   <h6><dfn title="attr-input-type-datetime-local">Local Date and Time</dfn> state</h6>
 
+  <div class="impl">
+
   <p>When an <code>input</code> element's <code
   title="attr-input-type">type</code> attribute is in the <span
   title="attr-input-type-datetime-local">Local Date and Time</span>
   state, the rules in this section apply.</p>
+  
+  </div>
+
+  <p>The <code>input</code> element <span>represents</span> a control
+  for setting the element's <span
+  title="concept-fe-value">value</span> to a string representing a
+  <span title="concept-datetime-local">local date and time</span>,
+  with no time zone information.</p>
 
-  <p>The <code>input</code> element <span>represents</span> a control for setting
-  the element's <span title="concept-fe-value">value</span> to a
-  string representing a <span title="concept-datetime-local">local
-  date and time</span>, with no time zone information.</p>
+  <div class="impl">
 
   <p>If the element is <i title="concept-input-mutable">mutable</i>,
   the user agent should allow the user to change the <span
   title="concept-datetime-local">date and time</span> represented by
   its <span title="concept-fe-value">value</span>, as obtained by
   <span title="parse a local date and time string">parsing a date and
   time</span> from it. User agents must not allow the user to set the
   <span title="concept-fe-value">value</span> to a string that is not
   a <span>valid local date and time string</span>. If the user agent
   provides a user interface for selecting a <span
   title="concept-datetime-local">local date and time</span>, then the
   <span title="concept-fe-value">value</span> must be set to a
   <span>valid local date and time string</span> representing the
   user's selection. User agents should allow the user to set the <span
   title="concept-fe-value">value</span> to the empty string.</p>
+  
+  </div>
 
   <p>The <code title="attr-input-value">value</code> attribute, if
   specified, must have a value that is a <span>valid local date and
   time string</span>.</p> <!-- ok to set out-of-range value, we never
   know when we might have to represent bogus input -->
 
+  <div class="impl">
+
   <p><strong>The <span>value sanitization algorithm</span> is as
   follows:</strong> If the <span title="concept-fe-value">value</span>
   of the element is not a <span>valid local date and time
   string</span>, then set it to the empty string instead.</p>
+  
+  </div>
 
   <p>The <code title="attr-input-min">min</code> attribute, if
   specified, must have a value that is a <span>valid local date and
   time string</span>. The <code title="attr-input-max">max</code>
   attribute, if specified, must have a value that is a <span>valid
   local date and time string</span>.</p>
 
   <p>The <code title="attr-input-step">step</code> attribute is
-  expressed in seconds. The <span
+  expressed in seconds. <span class="impl">The <span
   title="concept-input-step-scale">step scale factor</span> is 1000
   (which converts the seconds to milliseconds, as used in the other
-  algorithms). The <span title="concept-input-step-default">default
-  step</span> is 60 seconds.</p>
+  algorithms).</span> The <span
+  title="concept-input-step-default">default step</span> is 60
+  seconds.</p>
+
+  <div class="impl">
 
   <p>When the element is <span>suffering from a step mismatch</span>,
   the user agent may round the element's <span
   title="concept-fe-value">value</span> to the nearest <span
   title="concept-datetime-local">local date and time</span> for which
   the element would not <span title="suffering from a step
   mismatch">suffer from a step mismatch</span>.</p>
 
   <p><strong>The <span
   title="concept-input-value-string-number">algorithm to convert a
@@ -30373,22 +33575,24 @@ interface <dfn>HTMLFormElement</dfn> : <span>HTMLElement</span> {
   leap seconds.</p>
 
   <p><strong>The <span
   title="concept-input-value-number-string">algorithm to convert a
   number to a string</span>, given a number <var title="">input</var>,
   is as follows:</strong> Return a <span>valid local date and time
   string</span> that represents the date and time that is <var
   title="">input</var> milliseconds after midnight on the morning of
   1970-01-01 (the time represented by the value "<code
   title="">1970-01-01T00:00:00.0</code>").</p>
+  
+  </div>
 
-  <div class="bookkeeping">
+  <div class="bookkeeping impl">
 
    <p>The following common <code>input</code> element content
    attributes, DOM attributes, and methods apply to the element:
    <code title="attr-input-autocomplete">autocomplete</code>,
    <code title="attr-input-list">list</code>,
    <code title="attr-input-max">max</code>,
    <code title="attr-input-min">min</code>,
    <code title="attr-input-readonly">readonly</code>,
    <code title="attr-input-required">required</code>, and
    <code title="attr-input-step">step</code> content attributes;
@@ -30431,86 +33635,103 @@ interface <dfn>HTMLFormElement</dfn> : <span>HTMLElement</span> {
    <code class="no-backref" title="dom-textarea/input-selectionEnd">selectionEnd</code>, and
    <code class="no-backref" title="dom-input-valueAsDate">valueAsDate</code> DOM attributes;
    <code class="no-backref" title="dom-textarea/input-select">select()</code> and
    <code class="no-backref" title="dom-textarea/input-setSelectionRange">setSelectionRange()</code> methods.</p>
 
   </div>
 
 
   <h6><dfn title="attr-input-type-number">Number</dfn> state</h6>
 
+  <div class="impl">
+
   <p>When an <code>input</code> element's <code
   title="attr-input-type">type</code> attribute is in the <span
   title="attr-input-type-number">Number</span> state, the rules in
   this section apply.</p>
+  
+  </div>
 
-  <p>The <code>input</code> element <span>represents</span> a control for setting
-  the element's <span title="concept-fe-value">value</span> to a
-  string representing a number.</p>
+  <p>The <code>input</code> element <span>represents</span> a control
+  for setting the element's <span
+  title="concept-fe-value">value</span> to a string representing a
+  number.</p>
+
+  <div class="impl">
 
   <p>If the element is <i title="concept-input-mutable">mutable</i>,
   the user agent should allow the user to change the number
   represented by its <span title="concept-fe-value">value</span>, as
   obtained from applying the <span>rules for parsing floating point
   number values</span> to it. User agents must not allow the user to
   set the <span title="concept-fe-value">value</span> to a string that
   is not a <span>valid floating point number</span>. If the user agent
   provides a user interface for selecting a number, then the <span
   title="concept-fe-value">value</span> must be set to the <span>best
   representation of the floating point number</span> representing the
   user's selection. User agents should allow the user to set the <span
   title="concept-fe-value">value</span> to the empty string.</p>
+  
+  </div>
 
   <p>The <code title="attr-input-value">value</code> attribute, if
   specified, must have a value that is a <span>valid floating point
   number</span>.</p> <!-- ok to set out-of-range value, we never know
   when we might have to represent bogus input -->
 
+  <div class="impl">
+
   <p><strong>The <span>value sanitization algorithm</span> is as
   follows:</strong> If the <span title="concept-fe-value">value</span>
   of the element is not a <span>valid floating point number</span>,
   then set it to the empty string instead.</p>
+  
+  </div>
 
   <p>The <code title="attr-input-min">min</code> attribute, if
   specified, must have a value that is a <span>valid floating point
   number</span>. The <code title="attr-input-max">max</code>
   attribute, if specified, must have a value that is a <span>valid
   floating point number</span>.</p>
 
-  <p>The <span title="concept-input-step-scale">step scale
-  factor</span> is 1. The <span
-  title="concept-input-step-default">default step</span> is 1
-  (allowing only integers, unless the <code
+  <p><span class="impl">The <span
+  title="concept-input-step-scale">step scale factor</span> is
+  1.</span> The <span title="concept-input-step-default">default
+  step</span> is 1 (allowing only integers, unless the <code
   title="attr-input-min">min</code> attribute has a non-integer
   value).</p>
 
+  <div class="impl">
+
   <p>When the element is <span>suffering from a step mismatch</span>,
   the user agent may round the element's <span
   title="concept-fe-value">value</span> to the nearest number for
   which the element would not <span title="suffering from a step
   mismatch">suffer from a step mismatch</span>.</p>
 
   <p><strong>The <span
   title="concept-input-value-string-number">algorithm to convert a
   string to a number</span>, given a string <var title="">input</var>,
   is as follows:</strong> If applying the <span>rules for parsing
   floating point number values</span> to <var title="">input</var>
   results in an error, then return an error; otherwise, return the
   resulting number.</p>
 
   <p><strong>The <span
   title="concept-input-value-number-string">algorithm to convert a
   number to a string</span>, given a number <var title="">input</var>,
   is as follows:</strong> Return a <span>valid floating point
   number</span> that represents <var title="">input</var>.</p>
+  
+  </div>
 
-  <div class="bookkeeping">
+  <div class="bookkeeping impl">
 
    <p>The following common <code>input</code> element content
    attributes, DOM attributes, and methods apply to the element:
    <code title="attr-input-autocomplete">autocomplete</code>,
    <code title="attr-input-list">list</code>,
    <code title="attr-input-max">max</code>,
    <code title="attr-input-min">min</code>,
    <code title="attr-input-readonly">readonly</code>,
    <code title="attr-input-required">required</code>, and
    <code title="attr-input-step">step</code> content attributes;
@@ -30553,100 +33774,118 @@ interface <dfn>HTMLFormElement</dfn> : <span>HTMLElement</span> {
    <code class="no-backref" title="dom-textarea/input-selectionEnd">selectionEnd</code>, and
    <code class="no-backref" title="dom-input-valueAsDate">valueAsDate</code> DOM attributes;
    <code class="no-backref" title="dom-textarea/input-select">select()</code> and
    <code class="no-backref" title="dom-textarea/input-setSelectionRange">setSelectionRange()</code> methods.</p>
 
   </div>
 
 
   <h6><dfn title="attr-input-type-range">Range</dfn> state</h6>
 
+  <div class="impl">
+
   <p>When an <code>input</code> element's <code
   title="attr-input-type">type</code> attribute is in the <span
   title="attr-input-type-range">Range</span> state, the rules in this
   section apply.</p>
+  
+  </div>
 
-  <p>The <code>input</code> element <span>represents</span> a control for setting
-  the element's <span title="concept-fe-value">value</span> to a
-  string representing a number, but with the caveat that the exact
-  value is not important, letting UAs provide a simpler interface than
-  they do for the <span title="attr-input-type-number">Number</span>
-  state.</p>
+  <p>The <code>input</code> element <span>represents</span> a control
+  for setting the element's <span
+  title="concept-fe-value">value</span> to a string representing a
+  number, but with the caveat that the exact value is not important,
+  letting UAs provide a simpler interface than they do for the <span
+  title="attr-input-type-number">Number</span> state.</p>
+
+  <div class="impl">
 
   <p class="note">In this state, the range and step constraints are
   enforced even during user input, and there is no way to set the
   value to the empty string.</p>
 
   <p>If the element is <i title="concept-input-mutable">mutable</i>,
   the user agent should allow the user to change the number
   represented by its <span title="concept-fe-value">value</span>, as
   obtained from applying the <span>rules for parsing floating point
   number values</span> to it. User agents must not allow the user to
   set the <span title="concept-fe-value">value</span> to a string that
   is not a <span>valid floating point number</span>. If the user agent
   provides a user interface for selecting a number, then the <span
   title="concept-fe-value">value</span> must be set to a <span>best
   representation of the floating point number</span> representing the
   user's selection. User agents must not allow the user to set the
   <span title="concept-fe-value">value</span> to the empty string.</p>
+  
+  </div>
 
   <p>The <code title="attr-input-value">value</code> attribute, if
   specified, must have a value that is a <span>valid floating point
   number</span>.</p> <!-- ok to set out-of-range value, we never know
   when we might have to represent bogus input -->
 
+  <div class="impl">
+
   <p><strong>The <span>value sanitization algorithm</span> is as
   follows:</strong> If the <span title="concept-fe-value">value</span>
   of the element is not a <span>valid floating point number</span>,
   then set it to a <span>valid floating point number</span> that
   represents the <span
   title="concept-input-value-default-range">default value</span>.</p>
+  
+  </div>
 
   <p>The <code title="attr-input-min">min</code> attribute, if
   specified, must have a value that is a <span>valid floating point
   number</span>. The <span title="concept-input-min-default">default
   minimum</span> is 0. The <code title="attr-input-max">max</code>
   attribute, if specified, must have a value that is a <span>valid
   floating point number</span>. The <span
   title="concept-input-max-default">default maximum</span> is 100.</p>
 
   <p>The <dfn title="concept-input-value-default-range">default
   value</dfn> is the <span title="concept-input-min">minimum</span>
   plus half the difference between the <span
   title="concept-input-min">minimum</span> and the <span
   title="concept-input-max">maximum</span>, unless the <span
   title="concept-input-max">maximum</span> is less than the <span
   title="concept-input-min">minimum</span>, in which case the <span
   title="concept-input-value-default-range">default value</span> is
   the <span title="concept-input-min">minimum</span>.</p>
 
+  <div class="impl">
+
   <p>When the element is <span>suffering from a range
   underflow</span>, the user agent must set the element's <span
   title="concept-fe-value">value</span> to a <span>valid floating point
   number</span> that represents the <span
   title="concept-input-min">minimum</span>.</p>
 
   <p>When the element is <span>suffering from a range overflow</span>,
   if the <span title="concept-input-max">maximum</span> is not less
   than the <span title="concept-input-min">minimum</span>, the user
   agent must set the element's <span
   title="concept-fe-value">value</span> to a <span>valid floating point
   number</span> that represents the <span
   title="concept-input-max">maximum</span>.</p>
+  
+  </div>
 
-  <p>The <span title="concept-input-step-scale">step scale
-  factor</span> is 1. The <span
-  title="concept-input-step-default">default step</span> is 1
-  (allowing only integers, unless the <code
+  <p><span class="impl">The <span
+  title="concept-input-step-scale">step scale factor</span> is
+  1.</span> The <span title="concept-input-step-default">default
+  step</span> is 1 (allowing only integers, unless the <code
   title="attr-input-min">min</code> attribute has a non-integer
   value).</p>
 
+  <div class="impl">
+
   <p>When the element is <span>suffering from a step mismatch</span>,
   the user agent must round the element's <span
   title="concept-fe-value">value</span> to the nearest number for
   which the element would not <span title="suffering from a step
   mismatch">suffer from a step mismatch</span>, and which is greater
   than or equal to the <span title="concept-input-min">minimum</span>,
   and, if the <span title="concept-input-max">maximum</span> is not
   less than the <span title="concept-input-min">minimum</span>, which
   is less than or equal to the <span
   title="concept-input-max">maximum</span>.</p>
@@ -30657,22 +33896,24 @@ interface <dfn>HTMLFormElement</dfn> : <span>HTMLElement</span> {
   is as follows:</strong> If applying the <span>rules for parsing
   floating point number values</span> to <var title="">input</var>
   results in an error, then return an error; otherwise, return the
   resulting number.</p>
 
   <p><strong>The <span
   title="concept-input-value-number-string">algorithm to convert a
   number to a string</span>, given a number <var title="">input</var>,
   is as follows:</strong> Return a <span>valid floating point
   number</span> that represents <var title="">input</var>.</p>
+  
+  </div>
 
-  <div class="bookkeeping">
+  <div class="bookkeeping impl">
 
    <p>The following common <code>input</code> element content
    attributes, DOM attributes, and methods apply to the element:
    <code title="attr-input-autocomplete">autocomplete</code>,
    <code title="attr-input-list">list</code>,
    <code title="attr-input-max">max</code>,
    <code title="attr-input-min">min</code>, and
    <code title="attr-input-step">step</code> content attributes;
    <code title="dom-input-list">list</code>,
    <code title="dom-input-value">value</code>,
@@ -30715,58 +33956,70 @@ interface <dfn>HTMLFormElement</dfn> : <span>HTMLElement</span> {
    <code class="no-backref" title="dom-textarea/input-selectionEnd">selectionEnd</code>, and
    <code class="no-backref" title="dom-input-valueAsDate">valueAsDate</code> DOM attributes;
    <code class="no-backref" title="dom-textarea/input-select">select()</code> and
    <code class="no-backref" title="dom-textarea/input-setSelectionRange">setSelectionRange()</code> methods.</p>
 
   </div>
 
 
   <h6><dfn title="attr-input-type-color">Color</dfn> state</h6>
 
+  <div class="impl">
+
   <p>When an <code>input</code> element's <code
   title="attr-input-type">type</code> attribute is in the <span
   title="attr-input-type-color">Color</span> state, the rules in this
   section apply.</p>
+  
+  </div>
 
-  <p>The <code>input</code> element <span>represents</span> a color well control,
-  for setting the element's <span
+  <p>The <code>input</code> element <span>represents</span> a color
+  well control, for setting the element's <span
   title="concept-fe-value">value</span> to a string representing a
   <span>simple color</span>.</p>
 
+  <div class="impl">
+
   <p class="note">In this state, there is always a color picked, and
   there is no way to set the value to the empty string.</p>
 
   <p>If the element is <i title="concept-input-mutable">mutable</i>,
   the user agent should allow the user to change the color represented
   by its <span title="concept-fe-value">value</span>, as obtained from
   applying the <span>rules for parsing simple color values</span> to
   it. User agents must not allow the user to set the <span
   title="concept-fe-value">value</span> to a string that is not a
   <span>valid lowercase simple color</span>. If the user agent
   provides a user interface for selecting a color, then the <span
   title="concept-fe-value">value</span> must be set to the result of
   using the <span>rules for serialising simple color values</span> to
   the user's selection. User agents must not allow the user to set the
   <span title="concept-fe-value">value</span> to the empty string.</p>
+  
+  </div>
 
   <p>The <code title="attr-input-value">value</code> attribute, if
   specified, must have a value that is a <span>valid simple
   color</span>.</p>
 
+  <div class="impl">
+
   <p><strong>The <span>value sanitization algorithm</span> is as
   follows:</strong> If the <span title="concept-fe-value">value</span>
   of the element is a <span>valid simple color</span>, then set it to
   the <span title="concept-fe-value">value</span> of the element
   <span>converted to lowercase</span>; otherwise, set it to the string
   "<code title="">#000000</code>".</p>
+  
+  </div>
 
-  <div class="bookkeeping">
+  <div class="bookkeeping impl">
 
    <p>The following common <code>input</code> element content
    attributes, DOM attributes, and methods apply to the element:
    <code title="attr-input-autocomplete">autocomplete</code> and
    <code title="attr-input-list">list</code> content attributes;
    <code title="dom-input-list">list</code>,
    <code title="dom-input-value">value</code>, and
    <code title="dom-input-selectedOption">selectedOption</code> DOM attributes.</p>
 
    <p>The <code title="dom-input-value">value</code> DOM attribute is
@@ -30809,42 +34062,48 @@ interface <dfn>HTMLFormElement</dfn> : <span>HTMLElement</span> {
    <code class="no-backref" title="dom-textarea/input-select">select()</code>,
    <code class="no-backref" title="dom-textarea/input-setSelectionRange">setSelectionRange()</code>,
    <code class="no-backref" title="dom-input-stepDown">stepDown()</code>, and
    <code class="no-backref" title="dom-input-stepUp">stepUp()</code> methods.</p>
 
   </div>
 
 
   <h6><dfn title="attr-input-type-checkbox">Checkbox</dfn> state</h6>
 
+  <div class="impl">
+
   <p>When an <code>input</code> element's <code
   title="attr-input-type">type</code> attribute is in the <span
   title="attr-input-type-checkbox">Checkbox</span> state, the rules in
   this section apply.</p>
+  
+  </div>
 
-  <p>The <code>input</code> element <span>represents</span> a two-state control
-  that represents the element's <span
+  <p>The <code>input</code> element <span>represents</span> a
+  two-state control that represents the element's <span
   title="concept-fe-checked">checkedness</span> state. If the
   element's <span title="concept-fe-checked">checkedness</span> state
   is true, the control represents a positive selection, and if it is
   false, a negative selection. If the element's <code
   title="dom-input-indeterminate">indeterminate</code> DOM attribute
   is set to true, then the control's selection should be obscured as
   if the control was in a third, indeterminate, state.</p>
 
   <p class="note">The control is never a true tri-state control, even
   if the element's <code
   title="dom-input-indeterminate">indeterminate</code> DOM attribute
   is set to true. The <code
   title="dom-input-indeterminate">indeterminate</code> DOM attribute
   only gives the appearance of a third state.</p>
 
+  <div class="impl">
+
   <p>If the element is <i title="concept-input-mutable">mutable</i>,
   then: The <span>pre-click activation steps</span> consist of setting
   the element's <span title="concept-fe-checked">checkedness</span> to
   its opposite value (i.e. true if it is false, false if it is true),
   and of setting the element's <code
   title="dom-input-indeterminate">indeterminate</code> DOM attribute
   to false. The <span>canceled activation steps</span> consist of
   setting the <span title="concept-fe-checked">checkedness</span> and
   the element's <code
   title="dom-input-indeterminate">indeterminate</code> DOM attribute
@@ -30852,22 +34111,38 @@ interface <dfn>HTMLFormElement</dfn> : <span>HTMLElement</span> {
   steps</span> were run. The <span>activation behavior</span> is to
   <span>fire a simple event</span> called <code
   title="event-change">change</code> at the element, then
   <span>broadcast <code title="event-formchange">formchange</code>
   events</span> at the element's <span>form owner</span>.</p>
 
   <p><strong>Constraint validation:</strong> If the element is <i
   title="concept-input-required">required</i> and its <span
   title="concept-fe-checked">checkedness</span> is false, then the
   element is <span>suffering from being missing</span>.</p>
+  
+  </div>
+
+  <dl class="domintro">
+
+   <dt><var title="">input</var> . <code title="dom-input-indeterminate">indeterminate</code> [ = <var title="">value</var> ]</dt>
+
+   <dd>
+
+    <p>When set, overrides the rendering of <span
+    title="attr-input-type-checkbox">checkbox</span> controls so that
+    the current value is not visible.</p>
 
-  <div class="bookkeeping">
+   </dd>
+
+  </dl>
+
+  <div class="bookkeeping impl">
 
    <p>The following common <code>input</code> element content
    attributes and DOM attributes apply to the element:
    <code title="attr-input-checked">checked</code>, and
    <code title="attr-input-required">required</code> content attributes;
    <code title="dom-input-checked">checked</code> and
    <code title="dom-input-value">value</code> DOM attributes.</p>
 
    <p>The <code title="dom-input-value">value</code> DOM attribute is
    in mode <span title="dom-input-value-default-on">default/on</span>.</p>
@@ -30910,35 +34185,41 @@ interface <dfn>HTMLFormElement</dfn> : <span>HTMLElement</span> {
    <code class="no-backref" title="dom-textarea/input-setSelectionRange">setSelectionRange()</code>,
    <code class="no-backref" title="dom-input-stepDown">stepDown()</code>, and
    <code class="no-backref" title="dom-input-stepUp">stepUp()</code> methods.</p>
 
    <p>The <code title="event-input-input">input</code> event does not
    apply.</p>
 
   </div>
 
 
+
   <h6><dfn title="attr-input-type-radio">Radio Button</dfn> state</h6>
 
+  <div class="impl">
+
   <p>When an <code>input</code> element's <code
   title="attr-input-type">type</code> attribute is in the <span
   title="attr-input-type-radio">Radio Button</span> state, the rules
   in this section apply.</p>
+  
+  </div>
 
-  <p>The <code>input</code> element <span>represents</span> a control that, when
-  used in conjunction with other <code>input</code> elements, forms a
-  <i>radio button group</i> in which only one control can have its
-  <span title="concept-fe-checked">checkedness</span> state set to
-  true. If the element's <span
-  title="concept-fe-checked">checkedness</span> state is true, the
-  control represents the selected control in the group, and if it is
-  false, it indicates a control in the group that is not selected.</p>
+  <p>The <code>input</code> element <span>represents</span> a control
+  that, when used in conjunction with other <code>input</code>
+  elements, forms a <i>radio button group</i> in which only one
+  control can have its <span
+  title="concept-fe-checked">checkedness</span> state set to true. If
+  the element's <span title="concept-fe-checked">checkedness</span>
+  state is true, the control represents the selected control in the
+  group, and if it is false, it indicates a control in the group that
+  is not selected.</p>
 
   <p>The <dfn><i>radio button group</i></dfn> that contains an
   <code>input</code> element <var title="">a</var> also contains all
   the other <code>input</code> elements <var title="">b</var> that
   fulfill all of the following conditions:</p>
 
   <ul>
 
    <li>The <code>input</code> element <var title="">b</var>'s <code
    title="attr-input-type">type</code> attribute is in the <span
@@ -30953,20 +34234,22 @@ interface <dfn>HTMLFormElement</dfn> : <span>HTMLElement</span> {
    title="attr-fe-name">name</code> attribute is a
    <span>compatibility caseless</span> match for the value of <var
    title="">b</var>'s <code title="attr-fe-name">name</code>
    attribute.</li>
 
   </ul>
 
   <p>A document must not contain an <code>input</code> element whose
   <i>radio button group</i> contains only that element.</p>
 
+  <div class="impl">
+
   <p>When any of the following events occur, if the element's <span
   title="concept-fe-checked">checkedness</span> state is true after
   the event, the <span
   title="concept-fe-checked">checkedness</span> state of all the
   other elements in the same <i>radio button group</i> must be set to
   false:</p>
 
   <ul>
 
    <li>The element's <span
@@ -30992,27 +34275,29 @@ interface <dfn>HTMLFormElement</dfn> : <span>HTMLElement</span> {
   title="event-formchange">formchange</code> events</span> at the
   element's <span>form owner</span>.</p>
 
   <p><strong>Constraint validation:</strong> If the element is <i
   title="concept-input-required">required</i> and all of the
   <code>input</code> elements in the <i>radio button group</i> have a
   <span title="concept-fe-checked">checkedness</span> that is
   false, then the element is <span>suffering from being
   missing</span>.</p>
 
+  </div>
+
   <p class="note">If none of the radio buttons in a <span>radio button
   group</span> are checked when they are inserted into the document,
   then they will all be initially unchecked in the interface, until
   such time as one of them is checked (either by the user or by
   script).</p>
 
-  <div class="bookkeeping">
+  <div class="bookkeeping impl">
 
    <p>The following common <code>input</code> element content
    attributes and DOM attributes apply to the element:
    <code title="attr-input-checked">checked</code> and
    <code title="attr-input-required">required</code> content attributes;
    <code title="dom-input-checked">checked</code> and
    <code title="dom-input-value">value</code> DOM attributes.</p>
 
    <p>The <code title="dom-input-value">value</code> DOM attribute is
    in mode <span title="dom-input-value-default-on">default/on</span>.</p>
@@ -31058,46 +34343,54 @@ interface <dfn>HTMLFormElement</dfn> : <span>HTMLElement</span> {
 
    <p>The <code title="event-input-input">input</code> event does not
    apply.</p>
 
   </div>
 
 
 
   <h6><dfn title="attr-input-type-file">File Upload</dfn> state</h6>
 
+  <div class="impl">
+
   <p>When an <code>input</code> element's <code
   title="attr-input-type">type</code> attribute is in the <span
   title="attr-input-type-file">File Upload</span> state, the rules in this
   section apply.</p>
+  
+  </div>
+
+  <p>The <code>input</code> element <span>represents</span> a list of
+  <dfn title="concept-input-type-file-selected">selected files</dfn>,
+  each file consisting of a file name, a file type, and a file body
+  (the contents of the file).</p>
 
-  <p>The <code>input</code> element <span>represents</span> a list of <dfn
-  title="concept-input-type-file-selected">selected files</dfn>, each
-  file consisting of a file name, a file type, and a file body (the
-  contents of the file).</p>
+  <div class="impl">
 
   <p>If the element is <i title="concept-input-mutable">mutable</i>,
   the user agent should allow the user to change the files on the
   list, e.g. adding or removing files. Files can be from the
   filesystem or created on the fly, e.g. a picture taken from a camera
   connected to the user's device.</p>
 
   <p><strong>Constraint validation:</strong> If the element is <i
   title="concept-input-required">required</i> and the list of <span
   title="concept-input-type-file-selected">selected files</span> is
   empty, then the element is <span>suffering from being
   missing</span>.</p>
 
   <p>Unless the <code title="attr-input-multiple">multiple</code>
   attribute is set, there must be no more than one file in the list of
   <span title="concept-input-type-file-selected">selected
   files</span>.</p>
+  
+  </div>
 
   <hr>
 
   <p>The <dfn title="attr-input-accept"><code>accept</code></dfn>
   attribute may be specified to provide user agents with a hint of
   what file types the server will be able to accept.</p>
 
   <p>If specified, the attribute must consist of a <span>set of
   comma-separated tokens</span>, each of which must be an <span>ASCII
   case-insensitive</span> match for one of the following:</p>
@@ -31119,30 +34412,34 @@ interface <dfn>HTMLFormElement</dfn> : <span>HTMLElement</span> {
    <dd>Indicates that image files are accepted.</dd>
 
    <dt>A valid MIME type, with no parameters</dt>
 
    <dd>Indicates that files of the specified type are accepted. <a href="#refsRFC2046">[RFC2046]</a></dd>
 
   </dl>
 
   <p>The tokens must not be <span>ASCII case-insensitive</span>
   matches for any of the other tokens (i.e. duplicates are not
-  allowed). To obtain the list of tokens from the attribute, the user
-  agent must <span title="split a string on commas">split the
-  attribute value on commas</span>.</p>
+  allowed). <span class="impl">To obtain the list of tokens from the
+  attribute, the user agent must <span title="split a string on
+  commas">split the attribute value on commas</span>.</span></p>
+
+  <div class="impl">
 
   <p>User agents should prevent the user from selecting files that are
   not accepted by one (or more) of these tokens.</p>
+  
+  </div>
 
   <hr>
 
-  <div class="bookkeeping">
+  <div class="bookkeeping impl">
 
    <p>The following common <code>input</code> element content
    attributes apply to the element:
    <code title="attr-input-accept">accept</code>,
    <code title="attr-input-multiple">multiple</code>, and
    <code title="attr-input-required">required</code>.</p>
 
    <p>The <code title="dom-input-value">value</code> DOM attribute is
    in mode <span title="dom-input-value-filename">filename</span>.</p>
 
@@ -31190,51 +34487,59 @@ interface <dfn>HTMLFormElement</dfn> : <span>HTMLElement</span> {
 
    <p>The <code title="event-input-input">input</code> event does not
    apply.</p>
 
   </div>
 
 
 
   <h6><dfn title="attr-input-type-submit">Submit Button</dfn> state</h6>
 
+  <div class="impl">
+
   <p>When an <code>input</code> element's <code
   title="attr-input-type">type</code> attribute is in the <span
   title="attr-input-type-submit">Submit Button</span> state, the rules
   in this section apply.</p>
+  
+  </div>
 
-  <p>The <code>input</code> element <span>represents</span> a button that, when
-  activated, submits the form. If the element has a <code
-  title="attr-input-value">value</code> attribute, the button's label
-  must be the value of that attribute; otherwise, it must be an
-  implementation-defined string that means "Submit" or some such. The
-  element is a <span title="concept-button">button</span>,
-  specifically a <span title="concept-submit-button">submit
-  button</span>.</p>
+  <p>The <code>input</code> element <span>represents</span> a button
+  that, when activated, submits the form. <span class="impl">If the
+  element has a <code title="attr-input-value">value</code> attribute,
+  the button's label must be the value of that attribute; otherwise,
+  it must be an implementation-defined string that means "Submit" or
+  some such.</span> The element is a <span
+  title="concept-button">button</span>, specifically a <span
+  title="concept-submit-button">submit button</span>.</p>
+
+  <div class="impl">
 
   <p>If the element is <i title="concept-input-mutable">mutable</i>,
   the user agent should allow the user to activate the element.</p>
 
   <p>The element's <span>activation behavior</span>, if the element
   has a <span>form owner</span>, is to <span
   title="concept-form-submit">submit</span> the <span>form
   owner</span> from the <code>input</code> element; otherwise, it is
   to do nothing.</p>
+  
+  </div>
 
   <p>The <code title="attr-fs-action">action</code>, <code
   title="attr-fs-enctype">enctype</code>, <code
   title="attr-fs-method">method</code>, <code
   title="attr-fs-novalidate">novalidate</code>, and <code
   title="attr-fs-target">target</code> attributes are <span>attributes
   for form submission</span>.</p>
 
-  <div class="bookkeeping">
+  <div class="bookkeeping impl">
 
    <p>The following common <code>input</code> element content
    attributes and DOM attributes apply to the element:
    <code title="attr-fs-action">action</code>,
    <code title="attr-fs-enctype">enctype</code>,
    <code title="attr-fs-method">method</code>,
    <code title="attr-fs-novalidate">novalidate</code>, and
    <code title="attr-fs-target">target</code> content attributes;
    <code title="dom-input-value">value</code> DOM attribute.</p>
 
@@ -31278,41 +34583,47 @@ interface <dfn>HTMLFormElement</dfn> : <span>HTMLElement</span> {
 
    <p>The <code class="no-backref"
    title="event-input-input">input</code> and <code class="no-backref"
    title="event-input-change">change</code> events do not apply.</p>
 
   </div>
 
 
   <h6><dfn title="attr-input-type-image">Image Button</dfn> state</h6>
 
+  <div class="impl">
+
   <p>When an <code>input</code> element's <code
   title="attr-input-type">type</code> attribute is in the <span
   title="attr-input-type-image">Image Button</span> state, the rules
   in this section apply.</p>
+  
+  </div>
 
-  <p>The <code>input</code> element <span>represents</span> either an image from
-  which a user can select a coordinate and submit the form, or
-  alternatively a button from which the user can submit the form. The
-  element is a <span title="concept-button">button</span>,
+  <p>The <code>input</code> element <span>represents</span> either an
+  image from which a user can select a coordinate and submit the form,
+  or alternatively a button from which the user can submit the
+  form. The element is a <span title="concept-button">button</span>,
   specifically a <span title="concept-submit-button">submit
   button</span>.</p>
 
   <hr>
 
   <p>The image is given by the <dfn
   title="attr-input-src"><code>src</code></dfn> attribute. The <code
   title="attr-input-src">src</code> attribute must be present, and
   must contain a <span>valid URL</span> referencing a non-interactive,
   optionally animated, image resource that is neither paged nor
   scripted.</p>
 
+  <div class="impl">
+
   <p>When any of the following events occur, unless the user agent
   cannot support images, or its support for images has been disabled,
   or the user agent only fetches elements on demand, the user agent
   must <span title="resolve a url">resolve</span> the value of the
   <code title="attr-input-src">src</code> attribute, relative to the
   element, and if that is successful, must <span>fetch</span> the
   resulting <span>absolute URL</span>:</p> <!-- Note how this does NOT
   happen when the base URL changes. -->
 
   <ul>
@@ -31374,55 +34685,59 @@ interface <dfn>HTMLFormElement</dfn> : <span>HTMLElement</span> {
   and the image is <i>available</i>, <span>queue a task</span> to
   <span>fire a <code title="event-load">load</code> event</span> on
   the <code>input</code> element; and otherwise, if the fetching
   process fails without a response from the remote server, or
   completes but the image is not a valid or supported image,
   <span>queue a task</span> to <span>fire an <code
   title="event-error">error</code> event</span> on the
   <code>input</code> element.</p>
 
   <hr>
+  
+  </div>
 
   <p>The <dfn title="attr-input-alt"><code>alt</code></dfn> attribute
   provides the textual label for the alternative button for users and
   user agents who cannot use the image. The <code
   title="attr-input-alt">alt</code> attribute must also be present,
   and must contain a non-empty string.</p>
 
   <p>The <code>input</code> element supports <span>dimension
   attributes</span>.</p>
 
+  <div class="impl">
+
   <hr>
 
   <p>If the <code title="attr-input-src">src</code> attribute is set,
   and the image is <i>available</i> and the user agent is configured
-  to display that image, then: The element <span>represents</span> a control for
-  selecting a <span
+  to display that image, then: The element <span>represents</span> a
+  control for selecting a <span
   title="concept-input-type-image-coordinate">coordinate</span> from
   the image specified by the <code title="attr-input-src">src</code>
   attribute; if the element is <i
   title="concept-input-mutable">mutable</i>, the user agent should
   allow the user to select this <span
   title="concept-input-type-image-coordinate">coordinate</span>. The
   <span>activation behavior</span> in this case consists of taking the
   user's selected <span
   title="concept-input-type-image-coordinate">coordinate</span>, and
   then, if the element has a <span>form owner</span>, <span
   title="concept-form-submit">submitting</span> the <code>input</code>
   element's <span>form owner</span> from the <code>input</code>
   element. If the user activates the control without explicitly
   selecting a coordinate, then the coordinate (0,0) must be
   assumed.</p>
 
-  <p>Otherwise, the element <span>represents</span> a submit button whose label is
-  given by the value of the <code title="attr-input-alt">alt</code>
-  attribute; if the element is <i
+  <p>Otherwise, the element <span>represents</span> a submit button
+  whose label is given by the value of the <code
+  title="attr-input-alt">alt</code> attribute; if the element is <i
   title="concept-input-mutable">mutable</i>, the user agent should
   allow the user to activate the button. The <span>activation
   behavior</span> in this case consists of setting the <span
   title="concept-input-type-image-coordinate">selected
   coordinate</span> to (0,0), and then, if the element has a
   <span>form owner</span>, <span
   title="concept-form-submit">submitting</span> the <code>input</code>
   element's <span>form owner</span> from the <code>input</code>
   element.</p>
 
@@ -31434,29 +34749,31 @@ interface <dfn>HTMLFormElement</dfn> : <span>HTMLElement</span> {
   image, plus the widths of the left and right borders rendered around
   the image, if any. The <var title="">y</var>-component must be
   greater than or equal to zero, and less than or equal to the
   rendered height, in CSS pixels, of the image, plus the widths of the
   top and bottom bordered rendered around the image, if any. The
   coordinates must be relative to the image's borders, where there are
   any, and the edge of the image otherwise.</p> <!-- legacy browser
   behavior sometimes does some sure wacky things. -->
 
   <hr>
+  
+  </div>
 
   <p>The <code title="attr-fs-action">action</code>, <code
   title="attr-fs-enctype">enctype</code>, <code
   title="attr-fs-method">method</code>, <code
   title="attr-fs-novalidate">novalidate</code>, and <code
   title="attr-fs-target">target</code> attributes are <span>attributes
   for form submission</span>.</p>
 
-  <div class="bookkeeping">
+  <div class="bookkeeping impl">
 
    <p>The following common <code>input</code> element content
    attributes and DOM attributes apply to the element:
    <code title="attr-fs-action">action</code>,
    <code title="attr-input-alt">alt</code>,
    <code title="attr-fs-enctype">enctype</code>,
    <code title="attr-dim-height">height</code>,
    <code title="attr-fs-method">method</code>, 
    <code title="attr-fs-novalidate">novalidate</code>,
    <code title="attr-input-src">src</code>,
@@ -31509,48 +34826,57 @@ interface <dfn>HTMLFormElement</dfn> : <span>HTMLElement</span> {
 
   <p class="note">Many aspects of this state's behavior are similar to
   the behavior of the <code>img</code> element. Readers are encouraged
   to read that section, where many of the same requirements are
   described in more detail.</p>
 
 
 
   <h6><dfn title="attr-input-type-reset">Reset Button</dfn> state</h6>
 
+  <div class="impl">
+
   <p>When an <code>input</code> element's <code
   title="attr-input-type">type</code> attribute is in the <span
   title="attr-input-type-reset">Reset Button</span> state, the rules
   in this section apply.</p>
+  
+  </div>
 
-  <p>The <code>input</code> element <span>represents</span> a button that, when
-  activated, resets the form. If the element has a <code
-  title="attr-input-value">value</code> attribute, the button's label
-  must be the value of that attribute; otherwise, it must be an
-  implementation-defined string that means "Reset" or some such. The
-  element is a <span title="concept-button">button</span>.</p>
+  <p>The <code>input</code> element <span>represents</span> a button
+  that, when activated, resets the form. <span class="impl">If the
+  element has a <code title="attr-input-value">value</code> attribute,
+  the button's label must be the value of that attribute; otherwise,
+  it must be an implementation-defined string that means "Reset" or
+  some such.</span> The element is a <span
+  title="concept-button">button</span>.</p>
+
+  <div class="impl">
 
   <p>If the element is <i title="concept-input-mutable">mutable</i>,
   the user agent should allow the user to activate the element.</p>
 
   <p>The element's <span>activation behavior</span>, if the element
   has a <span>form owner</span>, is to <span
   title="concept-form-reset">reset</span> the <span>form owner</span>;
   otherwise, it is to do nothing.</p>
 
   <p><strong>Constraint validation:</strong> The element is
   <span>barred from constraint validation</span>.</p>
+  
+  </div>
 
-  <p>The <code title="dom-input-value">value</code> DOM attribute
-  applies to this element and is in mode <span
-  title="dom-input-value-default">default</span>.</p>
+  <div class="bookkeeping impl">
 
-  <div class="bookkeeping">
+   <p>The <code title="dom-input-value">value</code> DOM attribute
+   applies to this element and is in mode <span
+   title="dom-input-value-default">default</span>.</p>
 
    <p>The following content attributes must not be specified and do not
    apply to the element:
    <code class="no-backref" title="attr-input-accept">accept</code>,
    <code class="no-backref" title="attr-fs-action">action</code>,
    <code class="no-backref" title="attr-input-alt">alt</code>,
    <code class="no-backref" title="attr-input-autocomplete">autocomplete</code>,
    <code class="no-backref" title="attr-input-checked">checked</code>,
    <code class="no-backref" title="attr-fs-enctype">enctype</code>,
    <code class="no-backref" title="attr-dim-height">height</code>,
@@ -31587,44 +34913,52 @@ interface <dfn>HTMLFormElement</dfn> : <span>HTMLElement</span> {
 
    <p>The <code class="no-backref"
    title="event-input-input">input</code> and <code class="no-backref"
    title="event-input-change">change</code> events do not apply.</p>
 
   </div>
 
 
   <h6><dfn title="attr-input-type-button">Button</dfn> state</h6>
 
+  <div class="impl">
+
   <p>When an <code>input</code> element's <code
   title="attr-input-type">type</code> attribute is in the <span
   title="attr-input-type-button">Button</span> state, the rules in
   this section apply.</p>
+  
+  </div>
 
-  <p>The <code>input</code> element <span>represents</span> a button with no
-  default behavior. If the element has a <code
-  title="attr-input-value">value</code> attribute, the button's label
-  must be the value of that attribute; otherwise, it must be the empty
-  string. The element is a <span
+  <p>The <code>input</code> element <span>represents</span> a button
+  with no default behavior. <span class="impl">If the element has a
+  <code title="attr-input-value">value</code> attribute, the button's
+  label must be the value of that attribute; otherwise, it must be the
+  empty string.</span> The element is a <span
   title="concept-button">button</span>.</p>
 
+  <div class="impl">
+
   <p>If the element is <i title="concept-input-mutable">mutable</i>,
   the user agent should allow the user to activate the element. The
   element's <span>activation behavior</span> is to do nothing.</p>
 
   <p><strong>Constraint validation:</strong> The element is
   <span>barred from constraint validation</span>.</p>
+  
+  </div>
 
-  <p>The <code title="dom-input-value">value</code> DOM attribute
-  applies to this element and is in mode <span
-  title="dom-input-value-default">default</span>.</p>
+  <div class="bookkeeping impl">
 
-  <div class="bookkeeping">
+   <p>The <code title="dom-input-value">value</code> DOM attribute
+   applies to this element and is in mode <span
+   title="dom-input-value-default">default</span>.</p>
 
    <p>The following content attributes must not be specified and do not
    apply to the element:
    <code class="no-backref" title="attr-input-accept">accept</code>,
    <code class="no-backref" title="attr-fs-action">action</code>,
    <code class="no-backref" title="attr-input-alt">alt</code>,
    <code class="no-backref" title="attr-input-autocomplete">autocomplete</code>,
    <code class="no-backref" title="attr-input-checked">checked</code>,
    <code class="no-backref" title="attr-fs-enctype">enctype</code>,
    <code class="no-backref" title="attr-dim-height">height</code>,
@@ -31660,29 +34994,32 @@ interface <dfn>HTMLFormElement</dfn> : <span>HTMLElement</span> {
    <code class="no-backref" title="dom-input-stepUp">stepUp()</code> methods.</p>
 
    <p>The <code class="no-backref"
    title="event-input-input">input</code> and <code class="no-backref"
    title="event-input-change">change</code> events do not apply.</p>
 
   </div>
 
 
 
-
   <h5>Common <code>input</code> element attributes</h5>
 
+  <div class="impl">
+
   <p>These attributes only apply to an <code>input</code> element if
   its <code title="attr-input-type">type</code> attribute is in a
   state whose definition declares that the attribute applies. When an
   attribute doesn't apply to an <code>input</code> element, user
   agents must <span>ignore</span> the attribute.</p>
 
+  </div>
+
 
   <h6>The <code title="attr-input-autocomplete">autocomplete</code> attribute</h6>
 
   <p>The <dfn
   title="attr-input-autocomplete"><code>autocomplete</code></dfn>
   attribute is an <span>enumerated attribute</span>. The attribute has
   three states. The <code title="attr-input-autocomplete-on">on</code>
   keyword maps to the <dfn
   title="attr-input-autocomplete-on-state">on</dfn> state, and the
   <code title="attr-input-autocomplete-off">off</code> keyword maps to
@@ -31705,20 +35042,22 @@ interface <dfn>HTMLFormElement</dfn> : <span>HTMLElement</span> {
   that the value is not particularly sensitive and the user can expect
   to be able to rely on his user agent to remember values he has
   entered for that control.</p>
 
   <p>The <span
   title="attr-input-autocomplete-default-state">default</span> state
   indicates that the user agent is to use the <code
   title="attr-form-autocomplete">autocomplete</code> attribute on the
   element's <span>form owner</span> instead.</p>
 
+  <div class="impl">
+
   <p>Each <code>input</code> element has a <dfn>resulting
   autocompletion state</dfn>, which is either <i title="">on</i> or <i
   title="">off</i>.</p>
 
   <p>When an <code>input</code> element's <code
   title="attr-input-autocomplete">autocomplete</code> attribute is in
   the <span title="attr-input-autocomplete-on-state">on</span> state,
   when an <code>input</code> element's <code
   title="attr-input-autocomplete">autocomplete</code> attribute is in
   the <span
@@ -31744,50 +35083,58 @@ interface <dfn>HTMLFormElement</dfn> : <span>HTMLElement</span> {
   title="concept-fe-value">value</span>.</p>
 
   <p>The autocompletion mechanism must be implemented by the user
   agent acting as if the user had modified the element's <span
   title="concept-fe-value">value</span>, and must be done at a time
   where the element is <i title="concept-input-mutable">mutable</i>
   (e.g. just after the element has been inserted into the document, or
   when the user agent <span title="stop parsing">stops
   parsing</span>).</p>
 
+  </div>
+
   <div class="example">
 
    <p>Banks frequently do not want UAs to prefill login
    information:</p>
 
    <pre>&lt;p>Account: &lt;input type="text" name="ac" autocomplete="off">&lt;/p>
 &lt;p>PIN: &lt;input type="text" name="pin" autocomplete="off">&lt;/p></pre>
 
   </div>
 
+  <div class="impl">
+
   <p>A user agent may allow the user to override the <span>resulting
   autocompletion state</span> and set it to always <i title="">on</i>,
   always allowing values to be remembered and prefilled), or always <i
   title="">off</i>, never remembering values. However, the ability to
   override the <span>resulting autocompletion state</span> to <i
   title="">on</i> should not be trivially accessible, as there are
   significant security implications for the user if all values are
   always remembered, regardless of the site's preferences.</p>
 
+  </div>
+
 
 
   <h6>The <code title="attr-input-list">list</code> attribute</h6>
 
   <p>The <dfn title="attr-input-list"><code>list</code></dfn>
   attribute is used to identify an element that lists predefined
   options suggested to the user.</p>
 
   <p>If present, its value must be the ID of a <code>datalist</code>
   element in the same document.</p>
 
+  <div class="impl">
+
   <p>The <dfn title="concept-input-list">suggestions source
   element</dfn> is the first element in the document in <span>tree
   order</span> to have an ID equal to the value of the <code
   title="attr-input-list">list</code> attribute, if that element is a
   <code>datalist</code> element. If there is no <code
   title="attr-input-list">list</code> attribute, or if there is no
   element with that ID, or if the first element with that ID is not a
   <code>datalist</code> element, then there is no <span
   title="concept-input-list">suggestions source element</span>.</p>
 
@@ -31818,128 +35165,150 @@ interface <dfn>HTMLFormElement</dfn> : <span>HTMLElement</span> {
   <p>User agents should filter the suggestions to hide suggestions
   that would cause the element to not <span
   title="concept-fv-valid">satisfy its constraints</span>.</p>
 
   <hr>
 
   <p>If the <code title="attr-input-list">list</code> attribute does
   not apply, there is no <span title="concept-input-list">suggestions
   source element</span>.</p>
 
+  </div>
+
 
   <h6>The <code title="attr-input-readonly">readonly</code> attribute</h6>
 
   <p>The <dfn title="attr-input-readonly"><code>readonly</code></dfn>
-  attribute is a <span>boolean attribute</span>. When specified, the
-  element is <i title="concept-input-immutable">immutable</i>.</p>
+  attribute is a <span>boolean attribute</span> that controls whether
+  or not the use can edit the form control. <span class="impl">When
+  specified, the element is <i
+  title="concept-input-immutable">immutable</i>.</span></p>
+
+  <div class="impl">
 
   <p><strong>Constraint validation:</strong> If the <code
   title="attr-input-readonly">readonly</code> attribute is specified
   on an <code>input</code> element, the element is <span>barred from
   constraint validation</span>.</p>
 
+  </div>
+
 
 
   <h6>The <code title="attr-input-size">size</code> attribute</h6>
 
   <p>The <dfn title="attr-input-size"><code>size</code></dfn>
   attribute gives the number of characters that, in a visual
   rendering, the user agent is to allow the user to see while editing
   the element's <span title="concept-fe-value">value</span>.</p>
 
   <p>The <code title="attr-input-size">size</code> attribute, if
   specified, must have a value that is a <span>valid non-negative
   integer</span> greater than zero.</p>
 
+  <div class="impl">
+
   <p>If the attribute is present, then its value must be parsed using
   the <span>rules for parsing non-negative integers</span>, and if the
   result is a number greater than zero, then the user agent should
   ensure that at least that many characters are visible.</p>
 
   <p>The <code title="dom-input-size">size</code> DOM attribute
   <span>limited to only positive non-zero numbers</span>.</p>
 
+  </div>
+
 
 
   <h6>The <code title="attr-input-required">required</code> attribute</h6>
 
   <p>The <dfn title="attr-input-required"><code>required</code></dfn>
   attribute is a <span>boolean attribute</span>. When specified, the
   element is <dfn
   title="concept-input-required"><i>required</i></dfn>.</p>
 
+  <div class="impl">
+
   <p><strong>Constraint validation:</strong> If the element is <i
   title="concept-input-required">required</i>, and its <code
   title="dom-input-value">value</code> DOM attribute applies and is in
   the mode <span title="dom-input-value-value">value</span>, and the
   element is <i title="concept-input-mutable">mutable</i>, and the
   element's <span title="concept-fe-value">value</span> is the empty
   string, then the element is <span>suffering from being
   missing</span>.</p>
 
+  </div>
+
 
 
   <h6>The <code title="attr-input-multiple">multiple</code> attribute</h6>
 
   <p>The <dfn title="attr-input-multiple"><code>multiple</code></dfn>
   attribute is a <span>boolean attribute</span> that indicates whether
   the user is to be allowed to specify more than one value.</p>
 
 
 
   <h6>The <code title="attr-input-maxlength">maxlength</code> attribute</h6>
 
   <p>The <dfn
-  title="attr-input-maxlength"><code>maxlength</code></dfn> attribute,
-  when it applies, is a <span title="attr-fe-maxlength">form control
-  <code title="">maxlength</code> attribute</span> controlled by the
-  <code>input</code> element's <span
-  title="concept-input-value-dirty-flag">dirty value flag</span>.</p>
+  title="attr-input-maxlength"><code>maxlength</code></dfn>
+  attribute<span class="impl">, when it applies,</span> is a <span
+  title="attr-fe-maxlength">form control <code
+  title="">maxlength</code> attribute</span><span class="impl">
+  controlled by the <code>input</code> element's <span
+  title="concept-input-value-dirty-flag">dirty value
+  flag</span></span>.</p>
 
   <p>If the <code>input</code> element has a <span>maximum allowed
   value length</span>, then the <span>codepoint length</span> of the
   value of the element's <code title="attr-input-value">value</code>
   attribute must be equal to or less than the element's <span>maximum
   allowed value length</span>.</p>
 
 
 
   <h6>The <code title="attr-input-pattern">pattern</code> attribute</h6>
 
   <p>The <dfn title="attr-input-pattern"><code>pattern</code></dfn>
   attribute specifies a regular expression against which the control's
   <span title="concept-fe-value">value</span> is to be checked.</p>
 
   <p>If specified, the attribute's value must match the <i
   title="">Pattern</i> production of ECMA 262's grammar. <a
   href="#refsECMA262">[ECMA262]</a></p>
 
+  <div class="impl">
+
   <p><strong>Constraint validation:</strong> If the element's <span
   title="concept-fe-value">value</span> is not the empty string, and
   the element's <code title="attr-input-pattern">pattern</code>
   attribute is specified and the attribute's value, when compiled as
   an ECMA 262 regular expression with the <code
   title="">global</code>, <code title="">ignoreCase</code>, and <code
   title="">multiline</code> flags <em>disabled</em> (see ECMA 262,
   sections 15.10.7.2 through 15.10.7.4), compiles successfully but the
   resulting regular expression does not match the entirety of the
   element's <span title="concept-fe-value">value</span>, then the
   element is <span>suffering from a pattern mismatch</span>. <a
   href="#refsECMA262">[ECMA262]</a></p>
 
   <p class="note">This implies that the regular expression language
   used for this attribute is the same as that defined in ECMA 262,
   except that the <code title="attr-input-pattern">pattern</code>
   attribute must match the entire value, not just any subset (somewhat
   as if it implied a <code title="">^(?:</code> at the start of the
   pattern and a <code title="">)$</code> at the end).</p>
 
+  </div>
+
   <p>When an <code>input</code> element has a <code
   title="attr-input-pattern">pattern</code> attribute specified,
   authors should include a <code title="attr-title">title</code>
   attribute to give a description of the pattern. User agents may use
   the contents of this attribute, if it is present, when informing the
   user that the pattern is not matched, or at any other suitable time,
   such as in a tooltip or read out by assistive technology when the
   control gains focus.</p>
 
   <div class="example">
@@ -31959,34 +35328,40 @@ You cannot complete this form until the field is correct.</samp></pre>
   <code>title</code> attribute, if used, must describe the pattern.
   Additional information could also be included, so long as it assists
   the user in filling in the control. Otherwise, assistive technology
   would be impaired.</p>
 
   <p class="example">For instance, if the title attribute contained
   the caption of the control, assistive technology could end up saying
   something like <samp>The text you have entered does not match the
   required pattern. Birthday</samp>, which is not useful.</p>
 
+  <div class="impl">
+
   <p>UAs may still show the <code>title</code> in non-error situations
   (for example, as a tooltip when hovering over the control), so
   authors should be careful not to word <code>title</code>s as if an
   error has necessarily occurred.</p>
 
+  </div>
+
 
 
   <h6>The <code title="attr-input-min">min</code> and <code
   title="attr-input-max">max</code> attributes</h6>
 
   <p>The <dfn title="attr-input-min"><code>min</code></dfn> and <dfn
   title="attr-input-max"><code>max</code></dfn> attributes indicate
   the allowed range of values for the element.</p>
 
+  <div class="impl">
+
   <p>Their syntax is defined by the section that defines the <code
   title="attr-input-type">type</code> attribute's current state.</p>
 
   <p>If the element has a <code title="attr-input-min">min</code>
   attribute, and the result of applying the <span
   title="concept-input-value-string-number">algorithm to convert a
   string to a number</span> to the value of the <code
   title="attr-input-min">min</code> attribute is a a number, then that
   number is the element's <dfn
   title="concept-input-min">minimum</dfn>; otherwise, if the the <code
@@ -32038,41 +35413,45 @@ You cannot complete this form until the field is correct.</samp></pre>
   less than the <code title="attr-input-min">min</code> attribute's
   value (its <span title="concept-input-min">minimum</span>).</p>
 
   <p class="note">If an element has a <span
   title="attr-input-max">maximum</span> that is less than its <span
   title="attr-input-min">minimum</span>, then so long as the element
   has a <span title="concept-fe-value">value</span>, it will either be
   <span>suffering from an underflow</span> or <span>suffering from an
   overflow</span>.</p>
 
+  </div>
+
 
   <h6>The <code title="attr-input-step">step</code> attribute</h6>
 
   <p>The <dfn title="attr-input-step"><code>step</code></dfn>
   attribute indicates the granularity that is expected (and required)
-  of the <span title="concept-fe-value">value</span>, by limiting
-  the allowed values. The section that defines the <code
-  title="attr-input-type">type</code> attribute's current state also
-  defines the <dfn title="concept-input-step-default">default
-  step</dfn> and the <dfn title="concept-input-step-scale">step
-  scale factor</dfn>, which are used in processing the attribute as
-  described below.</p>
+  of the <span title="concept-fe-value">value</span>, by limiting the
+  allowed values. <span class="impl">The section that defines the
+  <code title="attr-input-type">type</code> attribute's current state
+  also defines the <dfn title="concept-input-step-default">default
+  step</dfn> and the <dfn title="concept-input-step-scale">step scale
+  factor</dfn>, which are used in processing the attribute as
+  described below.</span></p>
 
   <p>The <code title="attr-input-step">step</code> attribute, if
   specified, must either have a value that is a <span>valid floating
   point number</span> that <span title="rules for parsing floating
   point number values">parses</span> to a number that is greater than
   zero, or must have a value that is an <span>ASCII
   case-insensitive</span> match for the string "<code
   title="">any</code>".</p>
 
+  <div class="impl">
+
   <p>The attribute provides the <dfn
   title="concept-input-step">allowed value step</dfn> for the element,
   as follows:</p>
 
   <ol>
 
    <li>If the attribute is absent, then the <span
    title="concept-input-step">allowed value step</span> is the <span
    title="concept-input-step-default">default step</span> multiplied
    by the <span title="concept-input-step-scale">step scale
@@ -32113,65 +35492,173 @@ You cannot complete this form until the field is correct.</samp></pre>
   <span title="concept-input-step">allowed value step</span>, and the
   result of applying the <span
   title="concept-input-value-string-number">algorithm to convert a
   string to a number</span> to the string given by the element's <span
   title="concept-fe-value">value</span> is a number, and that
   number subtracted from the <span title="concept-input-min-zero">step
   base</span> is not an integral multiple of the <span
   title="concept-input-step">allowed value step</span>, the element is
   <span>suffering from a step mismatch</span>.</p>
 
+  </div>
+
 
 
   <h6>The <code title="attr-input-placeholder">placeholder</code> attribute</h6>
 
   <p>The <dfn
   title="attr-input-placeholder"><code>placeholder</code></dfn>
   attribute represents a <em>short</em> hint (a word or short phrase)
   intended to aid the user with data entry. A hint could be a sample
   value or a brief description of the expected format. The attribute,
   if specified, must have a value that contains no U+000A LINE FEED
   (LF) or U+000D CARRIAGE RETURN (CR) characters.</p>
 
   <p class="note">For a longer hint or other advisory text, the <code
   title="attr-title">title</code> attribute is more appropriate.</p>
 
   <p>The <code title="attr-input-placeholder">placeholder</code>
   attribute should not be used as an alternative to a
   <code>label</code>.</p>
 
+  <div class="impl">
+
   <p>User agents should present this hint to the user, after having
   <span title="strip line breaks">stripped line breaks</span> from it,
   when the element's <span title="concept-fe-value">value</span> is
   the empty string and the control is not focused (e.g. by displaying
   it inside a blank unfocused control).</p>
 
+  </div>
+
   <div class="example">
 
    <p>Here is an example of a mail configuration user interface that
    uses the <code title="attr-input-placeholder">placeholder</code>
    attribute:</p>
 
    <pre>&lt;fieldset>
  &lt;legend>Mail Account&lt;/legend>
  &lt;p>&lt;label>Name: &lt;input type="text" name="fullname" placeholder="John Ratzenberger">&lt;/label>&lt;/p>
  &lt;p>&lt;label>Address: &lt;input type="email" name="address" placeholder="john@example.net">&lt;/label>&lt;/p>
  &lt;p>&lt;label>Password: &lt;input type="password" name="password">&lt;/label>&lt;/p>
  &lt;p>&lt;label>Description: &lt;input type="text" name="desc" placeholder="My Email Account">&lt;/label>&lt;/p>
 &lt;/fieldset></pre>
 
   </div>
 
 
 
   <h5>Common <code>input</code> element APIs</h5>
 
+  <dl class="domintro">
+
+   <dt><var title="">input</var> . <code title="dom-input-value">value</code> [ = <var title="">value</var> ]</dt>
+
+   <dd>
+
+    <p>Returns the current <span title="concept-fe-value">value</span>
+    of the form control.</p>
+
+    <p>Can be set, to change the value.</p>
+
+    <p>Throws an <code>INVALID_ACCESS_ERR</code> exception if it is
+    set when the control is a file upload control.</p>
+
+   </dd>
+
+   <dt><var title="">input</var> . <code title="dom-input-checked">checked</code> [ = <var title="">value</var> ]</dt>
+
+   <dd>
+
+    <p>Returns the current <span
+    title="concept-fe-checked">checkedness</span> of the form
+    control.</p>
+
+    <p>Can be set, to change the <span
+    title="concept-fe-checked">checkedness</span>.</p>
+
+   </dd>
+
+   <dt><var title="">input</var> . <code title="dom-input-valueAsDate">valueAsDate</code> [ = <var title="">value</var> ]</dt>
+
+   <dd>
+
+    <p>Returns a <code>Date</code> object representing the form
+    control's <span title="concept-fe-value">value</span>, if
+    applicable; otherwise, returns null.</p>
+
+    <p>Can be set, to change the value.</p>
+
+    <p>Throws an <code>INVALID_ACCESS_ERR</code> exception if the
+    control isn't date- or time-based.</p>
+
+   </dd>
+
+   <dt><var title="">input</var> . <code title="dom-input-valueAsNumber">valueAsNumber</code> [ = <var title="">value</var> ]</dt>
+
+   <dd>
+
+    <p>Returns a number representing the form control's <span
+    title="concept-fe-value">value</span>, if applicable; otherwise,
+    returns null.</p>
+
+    <p>Can be set, to change the value.</p>
+
+    <p>Throws an <code>INVALID_ACCESS_ERR</code> exception if the
+    control is neither date- or time-based nor numeric.</p>
+
+   </dd>
+
+   <dt><var title="">input</var> . <code title="dom-input-stepUp">stepUp</code>()</dt>
+   <dt><var title="">input</var> . <code title="dom-input-stepDown">stepDown</code>()</dt>
+
+   <dd>
+
+    <p>Changes the the form control's <span
+    title="concept-fe-value">value</span> by the value given in the
+    <code title="attr-input-step">step</code> attribute.</p>
+
+    <p>Throws <code>INVALID_ACCESS_ERR</code> exception if the control
+    is neither date- or time-based nor numeric, if the <code
+    title="attr-input-step">step</code> attribute's value is "<code
+    title="">any</code>", if the current <span
+    title="concept-fe-value">value</span> could not be parsed, or if
+    stepping in the given direction would take the value out of
+    range.</p>
+
+   </dd>
+
+   <dt><var title="">input</var> . <code title="dom-input-list">list</code></dt>
+
+   <dd>
+
+    <p>Returns the <code>datalist</code> element indicated by the
+    <code title="attr-input-list">list</code> attribute.</p>
+
+   </dd>
+
+   <dt><var title="">input</var> . <code title="dom-input-selectedOption">selectedOption</code></dt>
+
+   <dd>
+
+    <p>Returns the <code>option</code> element from the
+    <code>datalist</code> element indicated by the <code
+    title="attr-input-list">list</code> attribute that matches the
+    form control's <span title="concept-fe-value">value</span>.</p>
+
+   </dd>
+
+  </dl>
+
+  <div class="impl">
+
   <p>The <dfn title="dom-input-value"><code>value</code></dfn> DOM
   attribute allows scripts to manipulate the <span
   title="concept-fe-value">value</span> of an <code>input</code>
   element. The attribute is in one of the following modes, which
   define its behavior:</p>
 
   <dl>
 
    <dt><dfn title="dom-input-value-value">value</dfn>
 
@@ -32324,47 +35811,49 @@ You cannot complete this form until the field is correct.</samp></pre>
    steps.</p></li>
 
    <li><p>If applying the <span
    title="concept-input-value-string-number">algorithm to convert a
    string to a number</span> to the string given by the element's
    <span title="concept-fe-value">value</span> results in an error,
    then throw an <code>INVALID_ACCESS_ERR</code> exception, and abort
    these steps; otherwise, let <var title="">value</var> be the result
    of that algorithm.</p></li>
 
+   <li><p>Let <var title="">delta</var> be the <span
+   title="concept-input-step">allowed value step</span>.</p></li>
+
    <li><p>If the method invoked was the <code
    title="dom-input-stepDown">stepDown()</code> method, negate <var
-   title="">value</var>.</p></li>
+   title="">delta</var>.</p></li>
 
-   <li><p>Let <var title="">value</var> be the result of adding the
-   <span title="concept-input-step">allowed value step</span> to <var
-   title="">value</var>.</p></li>
-
-   <li><p>Let <var title="">value as string</var> be the result of
-   running the <span
-   title="concept-input-value-number-string">algorithm to convert a
-   number to a string</span>, as defined for the <code>input</code>
-   element's <code title="attr-input-type">type</code> attribute's
-   current state, on <var title="">value</var>.</p></li>
+   <li><p>Let <var title="">value</var> be the result of adding <var
+   title="">delta</var> to <var title="">value</var>.</p></li>
 
    <li><p>If the element has a <span
    title="concept-input-min">minimum</span>, and the <var
    title="">value</var> is less than that <span
    title="concept-input-min">minimum</span>, then throw a
    <code>INVALID_ACCESS_ERR</code> exception.</p></li>
 
    <li><p>If the element has a <span
    title="concept-input-max">maximum</span>, and the <var
    title="">value</var> is greater than that <span
    title="concept-input-max">maximum</span>, then throw a
    <code>INVALID_ACCESS_ERR</code> exception.</p></li>
 
+   <li><p>Let <var title="">value as string</var> be the result of
+   running the <span
+   title="concept-input-value-number-string">algorithm to convert a
+   number to a string</span>, as defined for the <code>input</code>
+   element's <code title="attr-input-type">type</code> attribute's
+   current state, on <var title="">value</var>.</p></li>
+
    <li><p>Set the <span title="concept-fe-value">value</span> of the
    element to <var title="">value as string</var>.</p></li>
 
   </ol>
 
   <hr>
 
   <p>The <dfn title="dom-input-list"><code>list</code></dfn> DOM
   attribute must return the current <span
   title="concept-input-list">suggestions source element</span>, if
@@ -32376,20 +35865,24 @@ You cannot complete this form until the field is correct.</samp></pre>
   <span>tree order</span>, to be a child of the <span
   title="concept-input-list">suggestions source element</span> and
   whose <span title="concept-option-value">value</span> matches the
   <code>input</code> element's <span
   title="concept-fe-value">value</span>, if any. If there is no <span
   title="concept-input-list">suggestions source element</span>, or if
   it contains no matching <code>option</code> element, then the <code
   title="dom-input-selectedOption">selectedOption</code> attribute
   must return null.</p>
 
+  </div>
+
+
+  <div class="impl">
 
   <h5>Common event behaviors</h5>
 
   <p>When the <dfn title="event-input-input"><code>input</code></dfn>
   event applies, any time the user causes the element's <span
   title="concept-fe-value">value</span> to change, the user agent must
   <span>queue a task</span> to <span>fire a simple event</span> called
   <code title="event-input">input</code> at the <code>input</code>
   element, then <span>broadcast <code
   title="event-forminput">forminput</code> events</span> at the
@@ -32470,20 +35963,22 @@ You cannot complete this form until the field is correct.</samp></pre>
   <p class="note">In addition, when the <code
   title="event-input-change">change</code> event applies, <code
   title="event-change">change</code> events can also be fired as part
   of the element's <span>activation behavior</span> and as part of the
   <span>unfocusing steps</span>.</p>
 
   <p>The <span>task source</span> for these <span
   title="concept-tasks">task</span> is the <span>user interaction task
   source</span>.</p>
 
+  </div>
+
 
 
   <h4>The <dfn><code>button</code></dfn> element</h4>
 
   <dl class="element">
    <dt>Categories</dt>
    <dd><span>Flow content</span>.</dd>
    <dd><span>Phrasing content</span>.</dd>
    <dd><span>Interactive content</span>.</dd>
    <dd><span title="category-listed">Listed</span>, <span title="category-label">labelable</span>, and <span title="category-submit">submittable</span> <span>form-associated element</span>.</dd>
@@ -32523,24 +36018,24 @@ You cannot complete this form until the field is correct.</samp></pre>
   readonly attribute <span>ValidityState</span> <span title="dom-cva-validity">validity</span>;
   readonly attribute DOMString <span title="dom-cva-validationMessage">validationMessage</span>;
   boolean <span title="dom-cva-checkValidatity">checkValidity</span>();
   void <span title="dom-cva-setCustomValidity">setCustomValidity</span>(in DOMString error);
 
   readonly attribute <span>NodeList</span> <span title="dom-lfe-labels">labels</span>;
 };</pre>
    </dd> 
   </dl>
 
-  <p>The <code>button</code> element <span>represents</span> a button. If the
-  element is not <span title="concept-fe-disabled">disabled</span>,
-  then the user agent should allow the user to activate the
-  button.</p>
+  <p>The <code>button</code> element <span>represents</span> a
+  button. <span class="impl">If the element is not <span
+  title="concept-fe-disabled">disabled</span>, then the user agent
+  should allow the user to activate the button.</span></p>
 
   <p>The element is a <span title="concept-button">button</span>.</p>
 
   <p>The <dfn title="attr-button-type"><code>type</code></dfn>
   attribute controls the behavior of the button when it is activated.
   It is an <span>enumerated attribute</span>. The following table
   lists the keywords and states for the attribute &mdash; the keywords
   in the left column map to the states in the cell in the second
   column on the same row as the keyword.</p>
 
@@ -32567,20 +36062,22 @@ You cannot complete this form until the field is correct.</samp></pre>
 
   <p>The <i>missing value default</i> is the <span
   title="attr-button-type-submit-state">Submit Button</span>
   state.</p>
 
   <p>If the <code title="attr-button-type">type</code> attribute is in
   the <span title="attr-button-type-submit-state">Submit Button</span>
   state, the element is specifically a <span
   title="concept-submit-button">submit button</span>.</p>
 
+  <div class="impl">
+
   <p>If the element is not <span
   title="concept-fe-disabled">disabled</span>, the <span>activation
   behavior</span> of the <code>button</code> element is to run the
   steps defined in the following list for the current state of the
   element's <code title="attr-button-type">type</code> attribute.</p>
 
   <dl>
 
    <dt> <dfn title="attr-button-type-submit-state">Submit Button</dfn> </dt>
 
@@ -32593,20 +36090,22 @@ You cannot complete this form until the field is correct.</samp></pre>
    <dd><p>If the element has a <span>form owner</span>, the element
    must <span title="concept-form-reset">reset</span> the <span>form
    owner</span>.</p></dd>
 
    <dt> <dfn title="attr-button-type-button-state">Button</dfn>
 
    <dd><p>Do nothing.</p></dd>
 
   </dl>
 
+  </div>
+
   <p>The <code title="attr-fae-form">form</code> attribute is used to
   explicitly associate the <code>button</code> element with its
   <span>form owner</span>. The <code title="attr-fe-name">name</code>
   attribute represents the element's name. The <code
   title="attr-fe-disabled">disabled</code> attribute is used to make
   the control non-interactive and to prevent its value from being
   submitted. The <code title="attr-fe-autofocus">autofocus</code>
   attribute controls focus. The <code
   title="attr-fs-action">action</code>, <code
   title="attr-fs-enctype">enctype</code>, <code
@@ -32621,35 +36120,40 @@ You cannot complete this form until the field is correct.</samp></pre>
   attribute must not be present unless the <code
   title="attr-fae-form">form</code> attribute is present. The
   element's <span title="concept-fe-value">value</span> is the value
   of the element's <code title="attr-button-value">value</code>
   attribute, if there is one, or the empty string otherwise.</p>
 
   <p class="note">A button (and its value) is only included in the
   form submission if the button itself was used to initiate the form
   submission.</p>
 
+  <div class="impl">
+
   <p>The <dfn title="dom-button-value"><code>value</code></dfn> and
   <dfn title="dom-button-type"><code>type</code></dfn> DOM attributes
   must <span>reflect</span> the respective content attributes of the
   same name.</p>
 
   <p>The <code title="dom-cva-willValidate">willValidate</code>, <code
   title="dom-cva-validity">validity</code>, and <code
   title="dom-cva-validationMessage">validationMessage</code>
   attributes, and the <code
   title="dom-cva-checkValidatity">checkValidity()</code> and <code
   title="dom-cva-setCustomValidity">setCustomValidity()</code>
   methods, are part of the <span>constraint validation API</span>. The
   <code title="dom-lfe-labels">labels</code> attribute provides a list
   of the element's <code>label</code>s.</p>
 
+  </div>
+
+
 
 
   <h4>The <dfn><code>select</code></dfn> element</h4>
 
   <dl class="element">
    <dt>Categories</dt>
    <dd><span>Flow content</span>.</dd>
    <dd><span>Phrasing content</span>.</dd>
    <dd><span>Interactive content</span>.</dd>
    <dd><span title="category-listed">Listed</span>, <span title="category-label">labelable</span>, <span title="category-submit">submittable</span>, and <span title="category-reset">resettable</span> <span>form-associated element</span>.</dd>
@@ -32711,25 +36215,26 @@ interface <dfn>HTMLSelectElement</dfn> : <span>HTMLElement</span> {
        * once we can have no default, a way to require="" a value.
        ack Weston Ruter: http://weston.ruter.net/projects/test-cases/html-select-element/
        q.v. http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2008-November/017583.html
     -->
 
   <p>The <code>select</code> element represents a control for
   selecting amongst a set of options.</p>
 
   <p>The <dfn title="attr-select-multiple"><code>multiple</code></dfn>
   attribute is a <span>boolean attribute</span>. If the attribute is
-  present, then the <code>select</code> element <span>represents</span> a control
-  for selecting zero or more options from the <span
-  title="concept-select-option-list">list of options</span>. If the
-  attribute is absent, then the <code>select</code> element <span>represents</span>
-  a control for selecting a single option from the <span
+  present, then the <code>select</code> element
+  <span>represents</span> a control for selecting zero or more options
+  from the <span title="concept-select-option-list">list of
+  options</span>. If the attribute is absent, then the
+  <code>select</code> element <span>represents</span> a control for
+  selecting a single option from the <span
   title="concept-select-option-list">list of options</span>.</p>
 
   <p>The <dfn title="concept-select-option-list">list of options</dfn>
   for a <code>select</code> element consists of all the
   <code>option</code> element children of the <code>select</code>
   element, and all the <code>option</code> element children of all the
   <code>optgroup</code> element children of the <code>select</code>
   element, in <span>tree order</span>.</p>
 
   <p>The <dfn title="attr-select-size"><code>size</code></dfn>
@@ -32737,20 +36242,22 @@ interface <dfn>HTMLSelectElement</dfn> : <span>HTMLElement</span> {
   title="attr-input-size">size</code> attribute, if specified, must
   have a value that is a <span>valid non-negative integer</span>
   greater than zero. If the <code
   title="attr-select-multiple">multiple</code> attribute is present,
   then the <code title="attr-input-size">size</code> attribute's
   default value is 4. If the <code
   title="attr-select-multiple">multiple</code> attribute is absent,
   then the <code title="attr-input-size">size</code> attribute's
   default value is 1.</p>
 
+  <div class="impl">
+
   <p>If the <code title="attr-select-multiple">multiple</code>
   attribute is absent, and the element is not <span
   title="concept-fe-disabled">disabled</span>, then the user agent
   should allow the user to pick an <code>option</code> element in its
   <span title="concept-select-option-list">list of options</span> that
   is itself not <span
   title="concept-option-disabled">disabled</span>. Upon this
   <code>option</code> element being <dfn
   title="concept-select-pick">picked</dfn> (either through a click, or
   through unfocusing the element after changing its value, or through
@@ -32820,57 +36327,160 @@ interface <dfn>HTMLSelectElement</dfn> : <span>HTMLElement</span> {
 
   <p>The <span title="concept-form-reset-control">reset
   algorithm</span> for <code>select</code> elements is to go through
   all the <code>option</code> elements in the element's <span
   title="concept-select-option-list">list of options</span>, and set
   their <span title="concept-option-selectedness">selectedness</span>
   to true if the <code>option</code> element has a <code
   title="attr-option-selected">selected</code> attribute, and false
   otherwise.</p>
 
+  </div>
+
   <p>The <code title="attr-fae-form">form</code> attribute is used to
   explicitly associate the <code>select</code> element with its
   <span>form owner</span>. The <code title="attr-fe-name">name</code>
   attribute represents the element's name. The <code
   title="attr-fe-disabled">disabled</code> attribute is used to make
   the control non-interactive and to prevent its value from being
   submitted. The <code title="attr-fe-autofocus">autofocus</code>
   attribute controls focus.</p>
 
+  <dl class="domintro">
+
+   <dt><var title="">select</var> . <code title="dom-select-type">type</code></dt>
+
+   <dd>
+
+    <p>Returns "<code title="">select-multiple</code>" if the element
+    has a <code title="attr-select-multiple">multiple</code>
+    attribute, and "<code title="">select-one</code>"
+    otherwise.</p>
+
+   </dd>
+
+   <dt><var title="">select</var> . <code title="dom-select-options">options</code></dt>
+
+   <dd>
+
+    <p>Returns an <code>HTMLOptionsCollection</code> of the <span
+    title="concept-select-option-list">list of options</span>.</p>
+
+   </dd>
+
+   <dt><var title="">select</var> . <code title="dom-select-length">length</code> [ = <var title="">value</var> ]</dt>
+   <dd>
+    <p>Returns the number of elements in the <span title="concept-select-option-list">list of options</span>.</p>
+    <p>When set to a smaller number, truncates the number of <code>option</code> elements in the <code>select</code>.</p>
+    <p>When set to a greater number, adds new blank <code>option</code> elements to the <code>select</code>.</p>
+   </dd>
+
+   <dt><var title="">element</var> = <var title="">select</var> . <code title="dom-select-item">item</code>(<var title="">index</var>)</dt>
+   <dt><var title="">select</var>[<var title="">index</var>]</dt>
+   <dd>
+    <p>Returns the item with index <var title="">index</var> from the <span title="concept-select-option-list">list of options</span>. The items are sorted in <span>tree order</span>.</p>
+    <p>Returns null if <var title="">index</var> is out of range.</p>
+   </dd>
+
+   <dt><var title="">element</var> = <var title="">select</var> . <code title="dom-select-item">namedItem</code>(<var title="">name</var>)</dt>
+   <dt><var title="">select</var>[<var title="">name</var>]</dt>
+   <dd>
+    <p>Returns the item with ID or <code title="attr-option-name">name</code> <var title="">name</var> from the <span title="concept-select-option-list">list of options</span>.</p>
+    <p>If there are multiple matching items, then a <code>NodeList</code> object containing all those elements is returned.</p>
+    <p>Returns null if no element with that ID could be found.</p>
+   </dd>
+
+   <dt><var title="">select</var> . <code title="dom-select-add">add</code>(<var title="">element</var>, <var title="">before</var>)</dt>
+   <dd>
+    <p>Inserts <var title="">element</var> before the node given by <var title="">before</var>.</p>
+    <p>The <var title="">before</var> argument can be a number, in
+    which case <var title="">element</var> is inserted before the item
+    with that number, or an element from the <span title="concept-select-option-list">list of options</span>, in which case
+    <var title="">element</var> is inserted before that element.</p>
+    <p>If <var title="">before</var> is null or a number out of range,
+    then <var title="">element</var> will be added at the end of the
+    list.</p>
+    <p>This method will throw a <code>HIERARCHY_REQUEST_ERR</code>
+    exception if <var title="">element</var> is an ancestor of the
+    element into which it is to be inserted. If <var
+    title="">element</var> is not an <code>option</code> or
+    <code>optgroup</code> element, then the method does nothing.</p>
+   </dd>
+
+   <dt><var title="">select</var> . <code title="dom-select-selectedOptions">selectedOptions</code></dt>
+
+   <dd>
+
+    <p>Returns an <code>HTMLCollection</code> of the <span
+    title="concept-select-option-list">list of options</span> that are
+    selected.</p>
+
+   </dd>
+
+   <dt><var title="">select</var> . <code title="dom-select-selectedIndex">selectedIndex</code> [ = <var title="">value</var> ]</dt>
+
+   <dd>
+
+    <p>Returns the index of the first selected item, if any, or
+    &#x2212;1 if there is no selected item.</p>
+
+    <p>Can be set, to change the selection.</p>
+
+   </dd>
+
+   <dt><var title="">select</var> . <code title="dom-select-value">value</code> [ = <var title="">value</var> ]</dt>
+
+   <dd>
+
+    <p>Returns the <span title="concept-fe-value">value</span> of the
+    first selected item, if any, or the empty string if there is no
+    selected item.</p>
+
+    <p>Can be set, to change the selection.</p>
+
+   </dd>
+
+  </dl>
+
+  <div class="impl">
+
   <p>The <dfn title="dom-select-type"><code>type</code></dfn> DOM
   attribute, on getting, must return the string "<code
   title="">select-one</code>" if the <code
   title="attr-select-multiple">multiple</code> attribute is absent,
   and the string "<code title="">select-multiple</code>" if the <code
   title="attr-select-multiple">multiple</code> attribute is
   present.</p>
 
   <p>The <dfn title="dom-select-options"><code>options</code></dfn>
   DOM attribute must return an <code>HTMLOptionsCollection</code>
   rooted at the <code>select</code> node, whose filter matches the
   elements in the <span title="concept-select-option-list">list of
   options</span>.</p>
 
   <p>The <code title="dom-select-options">options</code> collection is
-  also mirrored on the <code>HTMLSelectElement</code> object. The <dfn
-  title="dom-select-length"><code>length</code></dfn> DOM attribute
-  must return the number of nodes <span title="represented by the
-  collection">represented</span> by the <code
-  title="dom-select-options">options</code> collection. The
+  also mirrored on the <code>HTMLSelectElement</code> object. The
   <span>indices of the supported indexed properties</span> at any
   instant are the indicies supported by the object returned by the
   <code title="dom-select-options">options</code> attribute at that
   instant. The <span>names of the supported named properties</span> at
   any instant are the names supported by the object returned by the
   <code title="dom-select-options">options</code> attribute at that
   instant.</p>
 
+  <p>The <dfn title="dom-select-length"><code>length</code></dfn> DOM
+  attribute must return the number of nodes <span title="represented
+  by the collection">represented</span> by the <code
+  title="dom-select-options">options</code> collection. On setting, it
+  must act like the attribute of the same name on the <code
+  title="dom-select-options">options</code> collection.</p>
+
   <p>The <dfn title="dom-select-item"><code>item(<var
   title="">index</var>)</code></dfn> method must return the value
   returned by the method of the same name on the <code
   title="dom-select-options">options</code> collection, when invoked
   with the same argument.</p>
 
   <p>The <dfn title="dom-select-namedItem"><code>namedItem(<var
   title="">name</var>)</code></dfn> method must return the value
   returned by the method of the same name on the <code
   title="dom-select-options">options</code> collection, when invoked
@@ -32892,21 +36502,21 @@ interface <dfn>HTMLSelectElement</dfn> : <span>HTMLElement</span> {
   true.</p>
 
   <p>The <dfn
   title="dom-select-selectedIndex"><code>selectedIndex</code></dfn>
   DOM attribute, on getting, must return the <span
   title="concept-option-index">index</span> of the first
   <code>option</code> element in the <span
   title="concept-select-option-list">list of options</span> in
   <span>tree order</span> that has its <span
   title="concept-option-selectedness">selectedness</span> set to true,
-  if any. If there isn't one, then it must return -1.</p>
+  if any. If there isn't one, then it must return &#x2212;1.</p>
 
   <p>On setting, the <code
   title="dom-select-selectedIndex">selectedIndex</code> attribute must
   set the <span
   title="concept-option-selectedness">selectedness</span> of all the
   <code>option</code> elements in the <span
   title="concept-select-option-list">list of options</span> to false,
   and then the <code>option</code> element in the <span
   title="concept-select-option-list">list of options</span> whose
   <span title="concept-option-index">index</span> is the given new
@@ -32947,20 +36557,21 @@ interface <dfn>HTMLSelectElement</dfn> : <span>HTMLElement</span> {
   <p>The <code title="dom-cva-willValidate">willValidate</code>, <code
   title="dom-cva-validity">validity</code>, and <code
   title="dom-cva-validationMessage">validationMessage</code>
   attributes, and the <code
   title="dom-cva-checkValidatity">checkValidity()</code> and <code
   title="dom-cva-setCustomValidity">setCustomValidity()</code>
   methods, are part of the <span>constraint validation API</span>. The
   <code title="dom-lfe-labels">labels</code> attribute provides a list
   of the element's <code>label</code>s.</p>
 
+  </div>
 
 
   <h4>The <dfn><code>datalist</code></dfn> element</h4>
 
   <dl class="element">
    <dt>Categories</dt>
    <dd><span>Flow content</span>.</dd>
    <dd><span>Phrasing content</span>.</dd>
    <dt>Contexts in which this element may be used:</dt>
    <dd>Where <span>phrasing content</span> is expected.</dd>
@@ -32975,37 +36586,52 @@ interface <dfn>HTMLSelectElement</dfn> : <span>HTMLElement</span> {
   readonly attribute <span>HTMLCollection</span> <span title="dom-datalist-options">options</span>;
 };</pre>
    </dd> 
   </dl>
 
   <p>The <code>datalist</code> element represents a set of
   <code>option</code> elements that represent predefined options for
   other controls. The contents of the element represents fallback
   content for legacy user agents, intermixed with <code>option</code>
   elements that represent the predefined options. In the rendering,
-  the <code>datalist</code> element <span>represents</span> nothing and it, along
-  with its children, should be hidden.</p>
+  the <code>datalist</code> element <span>represents</span>
+  nothing<span class="impl"> and it, along with its children, should
+  be hidden</span>.</p>
 
   <p>The <code>datalist</code> element is hooked up to an
   <code>input</code> element using the <code
   title="attr-input-list">list</code> attribute on the
   <code>input</code> element.</p>
 
+  <dl class="domintro">
+
+   <dt><var title="">datalist</var> . <code title="dom-datalist-options">options</code></dt>
+
+   <dd>
+    <p>Returns an <code>HTMLCollection</code> of the <code>options</code> elements of the table.</p>
+   </dd>
+
+  </dl>
+
+  <div class="impl">
+
   <p>The <dfn title="dom-datalist-options"><code>options</code></dfn>
   DOM attribute must return an <code>HTMLCollection</code> rooted at
   the <code>datalist</code> node, whose filter matches
   <code>option</code> elements.</p>
 
   <p><strong>Constraint validation:</strong> If an element has a
   <code>datalist</code> element ancestor, it is <span>barred from
   constraint validation</span>.</p>
 
+  </div>
+
 
   <h4>The <dfn><code>optgroup</code></dfn> element</h4>
 
   <dl class="element">
    <dt>Categories</dt>
    <dd>None.</dd>
    <dt>Contexts in which this element may be used:</dt>
    <dd>As a child of a <code>select</code> element.</dd>
    <dt>Content model:</dt>
    <dd>Zero or more <code>option</code> elements.</dd>
@@ -33022,43 +36648,52 @@ interface <dfn>HTMLSelectElement</dfn> : <span>HTMLElement</span> {
    </dd> 
   </dl>
 
   <p>The <code>optgroup</code> element <span>represents</span> a group of
   <code>option</code> elements with a common label.</p>
 
   <p>The element's group of <code>option</code> elements consists of
   the <code>option</code> elements that are children of the
   <code>optgroup</code> element.</p>
 
+  <Div class="impl">
+
   <p>When showing <code>option</code> elements in <code>select</code>
   elements, user agents should show the <code>option</code> elements
   of such groups as being related to each other and separate from
   other <code>option</code> elements.</p>
 
+  </div>
+
   <p>The <dfn
   title="attr-optgroup-disabled"><code>disabled</code></dfn> attribute
   is a <span>boolean attribute</span> and can be used to <span
   title="concept-option-disabled">disable</span> a group of
   <code>option</code> elements together.</p>
 
   <p>The <dfn title="attr-optgroup-label"><code>label</code></dfn>
   attribute must be specified. Its value gives the name of the group,
-  for the purposes of the user interface. User agents should use this
-  attribute's value when labelling the group of <code>option</code>
-  elements in a <code>select</code> element.</p>
+  for the purposes of the user interface. <span class="impl">User
+  agents should use this attribute's value when labelling the group of
+  <code>option</code> elements in a <code>select</code>
+  element.</span></p>
+
+  <div class="impl">
 
   <p>The <dfn
   title="dom-optgroup-disabled"><code>disabled</code></dfn> and <dfn
   title="dom-optgroup-label"><code>label</code></dfn> attributes must
   <span>reflect</span> the respective content attributes of the same
   name.</p>
 
+  </div>
+
 
   <h4>The <dfn><code>option</code></dfn> element</h4>
 
   <dl class="element">
    <dt>Categories</dt>
    <dd>None.</dd>
    <dt>Contexts in which this element may be used:</dt>
    <dd>As a child of a <code>select</code> element.</dd>
    <dd>As a child of a <code>datalist</code> element.</dd>
    <dd>As a child of an <code>optgroup</code> element.</dd>
@@ -33084,64 +36719,70 @@ interface <dfn>HTMLOptionElement</dfn> : <span>HTMLElement</span> {
            attribute boolean <span title="dom-option-defaultSelected">defaultSelected</span>;
            attribute boolean <span title="dom-option-selected">selected</span>;
            attribute DOMString <span title="dom-option-value">value</span>;
 
   readonly attribute DOMString <span title="dom-option-text">text</span>;
   readonly attribute long <span title="dom-option-index">index</span>;
 };</pre>
    </dd> 
   </dl>
 
-  <p>The <code>option</code> element <span>represents</span> an option in a
-  <code>select</code> element or as part of a list of suggestions in a
-  <code>datalist</code> element.</p>
+  <p>The <code>option</code> element <span>represents</span> an option
+  in a <code>select</code> element or as part of a list of suggestions
+  in a <code>datalist</code> element.</p>
 
   <p>The <dfn title="attr-option-disabled"><code>disabled</code></dfn>
   attribute is a <span>boolean attribute</span>. An
   <code>option</code> element is <dfn
   title="concept-option-disabled">disabled</dfn> if its <code
   title="attr-option-disabled">disabled</code> attribute is present or
   if it is a child of an <code>optgroup</code> element whose <code
   title="attr-optgroup-disabled">disabled</code> attribute is
   present.</p>
 
+  <div class="impl">
+
   <p>An <code>option</code> element that is <span
   title="attr-option-disabled">disabled</span> must prevent any <code
   title="event-click">click</code> events that are <span title="queue
   a task">queued</span> on the <span>user interaction task
   source</span> from being dispatched on the element.</p>
 
+  </div>
+
   <p>The <dfn title="attr-option-label"><code>label</code></dfn>
   attribute provides a label for element. The <dfn
   title="concept-option-label">label</dfn> of an <code>option</code>
   element is the value of the <code
   title="attr-option-label">label</code> attribute, if there is one,
   or the <code>textContent</code> of the element, if there isn't.</p>
 
   <p>The <dfn title="attr-option-value"><code>value</code></dfn>
   attribute provides a value for element. The <dfn
   title="concept-option-value">value</dfn> of an <code>option</code>
   element is the value of the <code
   title="attr-option-value">value</code> attribute, if there is one,
   or the <code>textContent</code> of the element, if there isn't.</p>
 
   <p>The <dfn title="attr-option-selected"><code>selected</code></dfn>
   attribute represents the default <span
   title="concept-option-selectedness">selectedness</span> of the
   element.</p>
 
+  <div class="impl">
+
   <p>The <dfn title="concept-option-selectedness">selectedness</dfn>
   of an <code>option</code> element is a boolean state, initially
   false. If the element is <span
   title="concept-option-disabled">disabled</span>, then the element's
   <span title="concept-option-selectedness">selectedness</span> is
-  always false and cannot be set to true. Unless othewise specified,
+  always false and cannot be set to true. Unless otherwise specified,
   when the element is created, its <span
   title="concept-option-selectedness">selectedness</span> must be set
   to true if the element has a <code
   title="attr-option-selected">selected</code> attribute. Whenever an
   <code>option</code> element's <code
   title="attr-option-selected">selected</code> attribute is added, its
   <span title="concept-option-selectedness">selectedness</span> must
   be set to true.</p>
 
   <p class="note">The <code title="dom-option-tvd">Option()</code>
@@ -33154,20 +36795,68 @@ interface <dfn>HTMLOptionElement</dfn> : <span>HTMLElement</span> {
   <p>An <code>option</code> element's <dfn
   title="concept-option-index">index</dfn> is the number of
   <code>option</code> element that are in the same <span
   title="concept-select-option-list">list of options</span> but that
   come before it in <span>tree order</span>. If the
   <code>option</code> element is not in a <span
   title="concept-select-option-list">list of options</span>, then the
   <code>option</code> element's <span
   title="concept-option-index">index</span> is zero.</p>
 
+  </div>
+
+  <dl class="domintro">
+
+   <dt><var title="">option</var> . <code title="dom-option-selected">selected</code></dt>
+
+   <dd>
+
+    <p>Returns true if the element is selected, and false otherwise.</p>
+
+   </dd>
+
+   <dt><var title="">option</var> . <code title="dom-option-index">index</code></dt>
+
+   <dd>
+
+    <p>Returns the index of the element in its <code>select</code>
+    element's <code title="dom-select-options">options</code>
+    list.</p>
+
+   </dd>
+
+   <dt><var title="">option</var> . <code title="dom-option-form">form</code></dt>
+
+   <dd>
+
+    <p>Returns the element's <code>form</code> element, if any, or
+    null otherwise.</p>
+
+   </dd>
+
+   <dt><var title="">option</var> = new <code title="dom-option">Option</code>( [ <var title="">text</var> [, <var title="">value</var> [, <var title="">defaultSelected</var> [, <var title="">selected</var> ] ] ] ] )</dt>
+
+   <dd>
+
+    <p>Returns a new <code>option</code> element.</p>
+
+    <p>The <var title="">text</var> argument sets the contents of the element.</p>
+    <p>The <var title="">value</var> argument sets the <code title="attr-option-value">value</code> attribute.</p>
+    <p>The <var title="">defaultSelected</var> argument sets the <code title="attr-option-selected">selected</code> attribute.</p>
+    <p>The <var title="">selected</var> argument sets whether or not the element is selected. If it is omitted, even if the <var title="">defaultSelected</var> argument is true, the element is not selected.</p>
+
+   </dd>
+
+  </dl>
+
+  <div class="impl">
+
   <p>The <dfn title="dom-option-disabled"><code>disabled</code></dfn>,
   <dfn title="dom-option-label"><code>label</code></dfn>, and <dfn
   title="dom-option-value"><code>value</code></dfn> DOM attributes
   must <span>reflect</span> the respective content attributes of the
   same name. The <dfn
   title="dom-option-defaultSelected"><code>defaultSelected</code></dfn>
   DOM attribute must <span>reflect</span> the <code
   title="attr-option-selected">selected</code> content attribute.</p>
 
   <p>The <dfn title="dom-option-selected"><code>selected</code></dfn>
@@ -33223,20 +36912,23 @@ interface <dfn>HTMLOptionElement</dfn> : <span>HTMLElement</span> {
   object must have a <code
   title="attr-option-selected">selected</code> attribute set with no
   value. If the <var title="">selected</var> argument is present and
   true, the new object must have its <span
   title="concept-option-selectedness">selectedness</span> set to true;
   otherwise the fouth argument is absent or false, and the <span
   title="concept-option-selectedness">selectedness</span> must be set
   to false, even if the <var title="">defaultSelected</var> argument
   is present and true.</p>
 
+  </div>
+
+
 
   <h4>The <dfn><code>textarea</code></dfn> element</h4>
 
   <dl class="element">
    <dt>Categories</dt>
    <dd><span>Flow content</span>.</dd>
    <dd><span>Phrasing content</span>.</dd>
    <dd><span>Interactive content</span>.</dd>
    <dd><span title="category-listed">Listed</span>, <span title="category-label">labelable</span>, <span title="category-submit">submittable</span>, and <span title="category-reset">resettable</span> <span>form-associated element</span>.</dd>
    <dt>Contexts in which this element may be used:</dt>
@@ -33282,34 +36974,41 @@ interface <dfn>HTMLOptionElement</dfn> : <span>HTMLElement</span> {
   readonly attribute <span>NodeList</span> <span title="dom-lfe-labels">labels</span>;
 
   void <span title="dom-textarea/input-select">select</span>();
            attribute unsigned long <span title="dom-textarea/input-selectionStart">selectionStart</span>;
            attribute unsigned long <span title="dom-textarea/input-selectionEnd">selectionEnd</span>;
   void <span title="dom-textarea/input-setSelectionRange">setSelectionRange</span>(in unsigned long start, in unsigned long end);
 };</pre>
    </dd> 
   </dl>
 
-  <p>The <code>textarea</code> element <span>represents</span> a multiline plain
-  text edit control for the element's <dfn
-  title="concept-textarea-raw-value">raw value</dfn>. The contents of
-  the control represent the control's default value.</p>
+  <p>The <code>textarea</code> element <span>represents</span> a
+  multiline plain text edit control<span class="impl"> for the
+  element's <dfn title="concept-textarea-raw-value">raw
+  value</dfn></span>. The contents of the control represent the
+  control's default value.</p>
+
+  <div class="impl">
 
   <p>The <span title="concept-textarea-raw-value">raw value</span> of
   a <code>textarea</code> control must be initially the empty
   string.</p>
 
+  </div>
+
   <p>The <dfn
   title="attr-textarea-readonly"><code>readonly</code></dfn> attribute
   is a <span>boolean attribute</span> used to control whether the text
   can be edited by the user or not.</p>
 
+  <div class="impl">
+
   <p><strong>Constraint validation:</strong> If the <code
   title="attr-textarea-readonly">readonly</code> attribute is
   specified on a <code>textarea</code> element, the element is
   <span>barred from constraint validation</span>.</p>
 
   <p>A <code>textarea</code> element is <dfn
   title="concept-textarea-mutable">mutable</dfn> if it is neither
   <span title="concept-fe-disabled">disabled</span> nor has a <code
   title="attr-textarea-readonly">readonly</code> attribute
   specified.</p>
@@ -33342,70 +37041,82 @@ interface <dfn>HTMLOptionElement</dfn> : <span>HTMLElement</span> {
   then the element's <span title="concept-textarea-raw-value">raw
   value</span> must be set to the value of the element's
   <code>textContent</code> DOM attribute.</p>
 
   <p>The <span title="concept-form-reset-control">reset
   algorithm</span> for <code>textarea</code> elements is to set the
   element's <span title="concept-textarea-raw-value">value</span> to
   the value of the element's <code>textContent</code> DOM
   attribute.</p>
 
+  </div>
+
   <p>The <dfn title="attr-textarea-cols"><code>cols</code></dfn>
   attribute specifies the expected maximum number of characters per
   line. If the <code title="attr-textarea-cols">cols</code> attribute
   is specified, its value must be a <span>valid non-negative
-  integer</span> greater than zero. If applying the <span>rules for
-  parsing non-negative integers</span> to the attribute's value
-  results in a number greater than zero, then the element's <dfn
-  title="attr-textarea-cols-value">character width</dfn> is that value;
-  otherwise, it is 20.</p>
+  integer</span> greater than zero. <span class="impl">If applying the
+  <span>rules for parsing non-negative integers</span> to the
+  attribute's value results in a number greater than zero, then the
+  element's <dfn title="attr-textarea-cols-value">character
+  width</dfn> is that value; otherwise, it is 20.</span></p>
+
+  <div class="impl">
 
   <p>The user agent may use the <code>textarea</code> element's <span
   title="attr-textarea-cols-value">character width</span> as a hint to
   the user as to how many characters the server prefers per line
   (e.g. for visual user agents by making the width of the control be
   that many characters). In visual renderings, the user agent should
   wrap the user's input in the rendering so that each line is no wider
   than this number of characters.</p>
 
+  </div>
+
   <p>The <dfn title="attr-textarea-rows"><code>rows</code></dfn>
   attribute specifies the number of lines to show. If the <code
   title="attr-textarea-rows">rows</code> attribute is specified, its
   value must be a <span>valid non-negative integer</span> greater than
-  zero. If applying the <span>rules for parsing non-negative
-  integers</span> to the attribute's value results in a number greater
-  than zero, then the element's <dfn
+  zero. <span class="impl">If applying the <span>rules for parsing
+  non-negative integers</span> to the attribute's value results in a
+  number greater than zero, then the element's <dfn
   title="attr-textarea-rows-value">character height</dfn> is that
-  value; otherwise, it is 2.</p>
+  value; otherwise, it is 2.</span></p>
+
+  <div class="impl">
 
   <p>Visual user agents should set the height of the control to the
   number of lines given by <span
   title="attr-textarea-rows-value">character height</span>.</p>
 
+  </div>
+
   <p>The <dfn title="attr-textarea-wrap"><code>wrap</code></dfn>
   attribute is an <span>enumerated attribute</span> with two keywords
   and states: the <dfn
   title="attr-textarea-wrap-soft"><code>soft</code></dfn> keyword
   which maps to the <dfn
   title="attr-textarea-wrap-soft-state">Soft</dfn> state, and the the
   <dfn title="attr-textarea-wrap-hard"><code>hard</code></dfn> keyword
   which maps to the <dfn
   title="attr-textarea-wrap-hard-state">Hard</dfn> state. The
   <i>missing value default</i> is the <span
   title="attr-textarea-wrap-soft-state">Soft</span> state.</p>
 
   <p>If the element's <code title="attr-textarea-wrap">wrap</code>
   attribute is in the <span
   title="attr-textarea-wrap-hard-state">Hard</span> state, the <code
   title="attr-textarea-cols">cols</code> attribute must be
   specified.</p>
 
+  <div class="impl">
+
   <p>The element's <span title="concept-fe-value">value</span> is
   defined to be the element's <span
   title="concept-textarea-raw-value">raw value</span> with the
   following transformation applied:</p>
 
   <ol>
 
    <li><p>Replace every occurance of a U+000D CARRIAGE RETURN (CR)
    character not followed by a U+000A LINE FEED (LF) character, and
    every occurance of a U+000A LINE FEED (LF) character not proceeded
@@ -33433,40 +37144,71 @@ interface <dfn>HTMLOptionElement</dfn> : <span>HTMLElement</span> {
   title="">maxlength</code> attribute</span> controlled by the
   <code>textarea</code> element's <span
   title="concept-textarea-dirty">dirty value flag</span>.</p>
 
   <p>If the <code>textarea</code> element has a <span>maximum allowed
   value length</span>, then the element's children must be such that
   the <span>codepoint length</span> of the value of the element's
   <code>textContent</code> DOM attribute is equal to or less than the
   element's <span>maximum allowed value length</span>.</p>
 
+  </div>
+
   <p>The <dfn
   title="attr-textarea-required"><code>required</code></dfn> attribute
-  is a <span>boolean attribute</span>.</p>
+  is a <span>boolean attribute</span>. When specified, the user will
+  be required to enter a value before submitting the form.</p>
+
+  <div class="impl">
 
   <p><strong>Constraint validation:</strong> If the element has its
   <code title="attr-textarea-required">required</code> attribute
   specified, and the element is <span
   title="concept-textarea-mutable">mutable</span>, and the element's
   <span title="concept-fe-value">value</span> is the empty string,
   then the element is <span>suffering from being missing</span>.</p>
 
+  </div>
+
   <p>The <code title="attr-fae-form">form</code> attribute is used to
   explicitly associate the <code>textarea</code> element with its
   <span>form owner</span>. The <code title="attr-fe-name">name</code>
   attribute represents the element's name. The <code
   title="attr-fe-disabled">disabled</code> attribute is used to make
   the control non-interactive and to prevent its value from being
   submitted. The <code title="attr-fe-autofocus">autofocus</code>
   attribute controls focus.</p>
 
+  <dl class="domintro">
+
+   <dt><var title="">textarea</var> . <code title="attr-textarea-type">type</code></dt>
+
+   <dd>
+
+    <p>Returns the string "<code title="">textarea</code>".</p>
+
+   </dd>
+
+   <dt><var title="">textarea</var> . <code title="attr-textarea-value">value</code></dt>
+
+   <dd>
+
+    <p>Returns the current value of the element.</p>
+
+    <p>Can be set, to change the value.</p>
+
+   </dd>
+
+  </dl>
+
+  <div class="impl">
+
   <p>The <dfn title="dom-textarea-cols"><code>cols</code></dfn>, <dfn
   title="dom-textarea-required"><code>required</code></dfn>, <dfn
   title="dom-textarea-rows"><code>rows</code></dfn>, and <dfn
   title="dom-textarea-wrap"><code>wrap</code></dfn> attributes must
   <span>reflect</span> the respective content attributes of the same
   name. The <code title="dom-textarea-cols">cols</code> and <code
   title="dom-textarea-rows">rows</code> attributes are <span>limited
   to only positive non-zero numbers</span>. The <dfn
   title="dom-textarea-maxLength"><code>maxLength</code></dfn> DOM
   attribute must <span>reflect</span> the <code
@@ -33499,20 +37241,22 @@ interface <dfn>HTMLOptionElement</dfn> : <span>HTMLElement</span> {
   methods, are part of the <span>constraint validation API</span>. The
   <code title="dom-lfe-labels">labels</code> attribute provides a list
   of the element's <code>label</code>s. The <code
   title="dom-textarea/input-select">select()</code>, <code
   title="dom-textarea/input-selectionStart">selectionStart</code>,
   <code title="dom-textarea/input-selectionEnd">selectionEnd</code>,
   and <code
   title="dom-textarea/input-setSelectionRange">setSelectionRange()</code>
   methods and attributes expose the element's text selection.</p>
 
+  </div>
+
 
 
   <h4>The <dfn><code>output</code></dfn> element</h4>
 
   <dl class="element">
    <dt>Categories</dt>
    <dd><span>Flow content</span>.</dd>
    <dd><span>Phrasing content</span>.</dd>
    <dd><span title="category-listed">Listed</span> and <span title="category-reset">resettable</span> <span>form-associated element</span>.</dd>
    <dt>Contexts in which this element may be used:</dt>
@@ -33555,20 +37299,22 @@ interface <dfn>HTMLOptionElement</dfn> : <span>HTMLElement</span> {
   if specified, must contain a string consisting of an <span>unordered
   set of unique space-separated tokens</span>, each of which must have
   the value of an ID of an element in the same
   <code>Document</code>.</p>
 
   <p>The <code title="attr-fae-form">form</code> attribute is used to
   explicitly associate the <code>output</code> element with its
   <span>form owner</span>. The <code title="attr-fe-name">name</code>
   attribute represents the element's name.</p>
 
+  <div class="impl">
+
   <p>The element has a <dfn title="concept-output-mode">value mode
   flag</dfn> which is either <i
   title="concept-output-mode-value">value</i> or <i
   title="concept-output-mode-default">default</i>. Initially the <span
   title="concept-output-mode">value mode flag</span> must be set to <i
   title="concept-output-mode-default">default</i>.</p>
 
   <p>When the to <span title="concept-output-mode">value mode
   flag</span> is in mode <i
   title="concept-output-mode-default">default</i>, the contents of the
@@ -33595,20 +37341,56 @@ interface <dfn>HTMLOptionElement</dfn> : <span>HTMLElement</span> {
 
   <p>The <span title="concept-form-reset-control">reset
   algorithm</span> for <code>textarea</code> elements is to set the
   element's <code>textContent</code> DOM attribute to the value of the
   element's <code title="dom-output-defaultValue">defaultValue</code>
   DOM attribute (thus replacing the element's child nodes), and then
   to set the element's <span title="concept-output-mode">value mode
   flag</span> to <i
   title="concept-output-mode-default">default</i>.</p>
 
+  </div>
+
+  <dl class="domintro">
+
+   <dt><var title="">output</var> . <code title="dom-output-value">value</code> [ = <var title="">value</var> ]</dt>
+
+   <dd>
+
+    <p>Returns the element's current value.</p>
+
+    <p>Can be set, to change the value.</p>
+
+   </dd>
+
+   <dt><var title="">output</var> . <code title="dom-output-defaultValue">defaultValue</code> [ = <var title="">value</var> ]</dt>
+
+   <dd>
+
+    <p>Returns the element's current default value.</p>
+
+    &l