aboutsummaryrefslogtreecommitdiffstats
path: root/components/layout/stylesheets
diff options
context:
space:
mode:
Diffstat (limited to 'components/layout/stylesheets')
-rw-r--r--components/layout/stylesheets/presentational-hints.css267
-rw-r--r--components/layout/stylesheets/quirks-mode.css44
-rw-r--r--components/layout/stylesheets/servo.css259
-rw-r--r--components/layout/stylesheets/user-agent.css433
4 files changed, 1003 insertions, 0 deletions
diff --git a/components/layout/stylesheets/presentational-hints.css b/components/layout/stylesheets/presentational-hints.css
new file mode 100644
index 00000000000..36a0175bd45
--- /dev/null
+++ b/components/layout/stylesheets/presentational-hints.css
@@ -0,0 +1,267 @@
+/*
+https://html.spec.whatwg.org/multipage/#presentational-hints
+*/
+
+@namespace url(http://www.w3.org/1999/xhtml);
+
+
+pre[wrap] { white-space: pre-wrap; }
+
+div[align=left i] { text-align: -moz-left; }
+div[align=right i] { text-align: -moz-right; }
+div[align=center i], div[align=middle i] { text-align: -moz-center; }
+div[align=justify i] { text-align: justify; }
+
+
+br[clear=left i] { clear: left; }
+br[clear=right i] { clear: right; }
+br[clear=all i], br[clear=both i] { clear: both; }
+
+
+ol[type="1"], li[type="1"] { list-style-type: decimal; }
+ol[type=a s], li[type=a s] { list-style-type: lower-alpha; }
+ol[type=A s], li[type=A s] { list-style-type: upper-alpha; }
+ol[type=i s], li[type=i s] { list-style-type: lower-roman; }
+ol[type=I s], li[type=I s] { list-style-type: upper-roman; }
+ul[type=none i], li[type=none i] { list-style-type: none; }
+ul[type=disc i], li[type=disc i] { list-style-type: disc; }
+ul[type=circle i], li[type=circle i] { list-style-type: circle; }
+ul[type=square i], li[type=square i] { list-style-type: square; }
+
+
+table[align=left i] { float: left; }
+table[align=right i] { float: right; }
+table[align=center i] { margin-left: auto; margin-right: auto; }
+:matches(thead, tbody, tfoot, tr, td, th)[align=absmiddle i] {
+ text-align: center;
+}
+
+caption[align=bottom i] { caption-side: bottom; }
+p[align=left i], h1[align=left i], h2[align=left i], h3[align=left i], h4[align=left i], h5[align=left i], h6[align=left i] { text-align: left; }
+p[align=right i], h1[align=right i], h2[align=right i], h3[align=right i], h4[align=right i], h5[align=right i], h6[align=right i] { text-align: right; }
+p[align=center i], h1[align=center i], h2[align=center i], h3[align=center i], h4[align=center i], h5[align=center i], h6[align=center i] { text-align: center; }
+p[align=justify i], h1[align=justify i], h2[align=justify i], h3[align=justify i], h4[align=justify i], h5[align=justify i], h6[align=justify i] { text-align: justify; }
+thead[valign=top i], tbody[valign=top i], tfoot[valign=top i], tr[valign=top i], td[valign=top i], th[valign=top i] { vertical-align: top; }
+thead[valign=middle i], tbody[valign=middle i], tfoot[valign=middle i], tr[valign=middle i], td[valign=middle i], th[valign=middle i] { vertical-align: middle; }
+thead[valign=bottom i], tbody[valign=bottom i], tfoot[valign=bottom i], tr[valign=bottom i], td[valign=bottom i], th[valign=bottom i] { vertical-align: bottom; }
+thead[valign=baseline i], tbody[valign=baseline i], tfoot[valign=baseline i], tr[valign=baseline i], td[valign=baseline i], th[valign=baseline i] { vertical-align: baseline; }
+
+td[nowrap], th[nowrap] { white-space: nowrap; }
+
+table[rules=none i], table[rules=groups i], table[rules=rows i], table[rules=cols i], table[rules=all i] {
+ border-style: hidden;
+ border-collapse: collapse;
+}
+
+table:-servo-nonzero-border {
+ border-style: outset;
+}
+table[frame=void i] { border-style: hidden; }
+table[frame=above i] { border-style: outset hidden hidden hidden; }
+table[frame=below i] { border-style: hidden hidden outset hidden; }
+table[frame=hsides i] { border-style: outset hidden outset hidden; }
+table[frame=lhs i] { border-style: hidden hidden hidden outset; }
+table[frame=rhs i] { border-style: hidden outset hidden hidden; }
+table[frame=vsides i] { border-style: hidden outset; }
+table[frame=box i], table[frame=border i] { border-style: outset; }
+
+
+table:-servo-nonzero-border > tr > td,
+table:-servo-nonzero-border > tr > th,
+table:-servo-nonzero-border > thead > tr > td,
+table:-servo-nonzero-border > thead > tr > th,
+table:-servo-nonzero-border > tbody > tr > td,
+table:-servo-nonzero-border > tbody > tr > th,
+table:-servo-nonzero-border > tfoot > tr > td,
+table:-servo-nonzero-border > tfoot > tr > th {
+ border-width: 1px;
+ border-style: inset;
+}
+
+table[rules=none i] > tr > td, table[rules=groups i] > tr > td, table[rules=rows i] > tr > td, table[rules=none i] > tr > th, table[rules=groups i] > tr > th, table[rules=rows i] > tr > th,
+table[rules=none i] > thead > tr > td, table[rules=groups i] > thead > tr > td, table[rules=rows i] > thead > tr > td, table[rules=none i] > thead > tr > th, table[rules=groups i] > thead > tr > th, table[rules=rows i] > thead > tr > th,
+table[rules=none i] > tbody > tr > td, table[rules=groups i] > tbody > tr > td, table[rules=rows i] > tbody > tr > td, table[rules=none i] > tbody > tr > th, table[rules=groups i] > tbody > tr > th, table[rules=rows i] > tbody > tr > th,
+table[rules=none i] > tfoot > tr > td, table[rules=groups i] > tfoot > tr > td, table[rules=rows i] > tfoot > tr > td, table[rules=none i] > tfoot > tr > th, table[rules=groups i] > tfoot > tr > th, table[rules=rows i] > tfoot > tr > th {
+ border-width: 1px;
+ border-style: none;
+}
+table[rules=cols i] > tr > td, table[rules=cols i] > tr > th,
+table[rules=cols i] > thead > tr > td, table[rules=cols i] > thead > tr > th,
+table[rules=cols i] > tbody > tr > td, table[rules=cols i] > tbody > tr > th,
+table[rules=cols i] > tfoot > tr > td, table[rules=cols i] > tfoot > tr > th {
+ border-width: 1px;
+ border-style: none solid;
+}
+table[rules=all i] > tr > td, table[rules=all i] > tr > th,
+table[rules=all i] > thead > tr > td, table[rules=all i] > thead > tr > th,
+table[rules=all i] > tbody > tr > td, table[rules=all i] > tbody > tr > th,
+table[rules=all i] > tfoot > tr > td, table[rules=all i] > tfoot > tr > th {
+ border-width: 1px;
+ border-style: solid;
+}
+
+table[rules=groups i] > colgroup {
+ border-left-width: 1px;
+ border-left-style: solid;
+ border-right-width: 1px;
+ border-right-style: solid;
+}
+table[rules=groups i] > tr,
+table[rules=groups i] > thead > tr,
+table[rules=groups i] > tbody > tr,
+table[rules=groups i] > tfoot > tr {
+ border-top-width: 1px;
+ border-top-style: solid;
+ border-bottom-width: 1px;
+ border-bottom-style: solid;
+}
+table[rules=rows i] > tr,
+table[rules=rows i] > thead > tr,
+table[rules=rows i] > tbody > tr,
+table[rules=rows i] > tfoot > tr {
+ border-top-width: 1px;
+ border-top-style: solid;
+ border-bottom-width: 1px;
+ border-bottom-style: solid;
+}
+
+
+hr[align=left] { margin-left: 0; margin-right: auto; }
+hr[align=right] { margin-left: auto; margin-right: 0; }
+hr[align=center] { margin-left: auto; margin-right: auto; }
+hr[color], hr[noshade] { border-style: solid; }
+
+
+
+iframe[frameborder="0"], iframe[frameborder=no i] { border: none; }
+
+embed[align=left i], iframe[align=left i], img[type=image i][align=left i], object[align=left i] {
+ float: left;
+}
+embed[align=right i], iframe[align=right i], img[type=image i][align=right i], object[align=right i] {
+ float: right;
+}
+embed[align=top i], iframe[align=top i], img[type=image i][align=top i], object[align=top i] {
+ vertical-align: top;
+}
+embed[align=baseline i], iframe[align=baseline i], img[type=image i][align=baseline i], object[align=baseline i] {
+ vertical-align: baseline;
+}
+embed[align=texttop i], iframe[align=texttop i], img[type=image i][align=texttop i], object[align=texttop i] {
+ vertical-align: text-top;
+}
+embed[align=absmiddle i], iframe[align=absmiddle i], img[type=image i][align=absmiddle i], object[align=absmiddle i],
+embed[align=abscenter i], iframe[align=abscenter i], img[type=image i][align=abscenter i], object[align=abscenter i] {
+ vertical-align: middle;
+}
+embed[align=bottom i], iframe[align=bottom i], img[type=image i][align=bottom i], object[align=bottom i] {
+ vertical-align: bottom;
+}
+/*
+FIXME:
+:matches(embed, iframe, img, input[type=image i], object):matches([align=center i], [align=middle i]) {
+ vertical-align: "aligns the vertical middle of the element with the parent element's baseline."
+}
+*/
+
+/*
+
+Presentational attributes which can not currently be expressed in CSS.
+FIXME: Deal with them with attr(foo dimension) and the like?
+
+body
+ marginheight
+ marginwidth
+ topmargin
+ rightmargin
+ bottommargin
+ leftmargin
+ background
+ bgcolor
+ text
+ link
+ vlink
+ alink
+
+frame, iframe
+ marginheight
+ marginwidth
+
+font
+ face
+ color
+ size
+
+table
+ cellspacing
+ cellpadding
+ hspace
+ vspace
+ height
+ width
+ bordercolor
+ border
+
+col
+ width
+
+tr
+ height
+
+td, th
+ width
+ height
+
+caption, thead, tbody, tfoot, tr, td, and th
+ align
+
+table, thead, tbody, tfoot, tr, td, or th
+ background
+ bgcolor
+
+(quirks mode) th, td
+ nowrap
+
+hr
+ color
+ noshade
+ size
+ width
+
+legend
+ align
+
+embed, iframe, img, input[type=image i], object
+ hspace
+ vspace
+
+img, input[type=image i], object
+ border
+
+embed, iframe, img, input[type=image i], object, video
+ width
+ height
+
+*/
+
+/*
+
+Extra
+ ol > li
+ https://html.spec.whatwg.org/multipage/#ordinal-value
+ col
+ span
+ colgroup (if not col child)
+ span
+ td, th
+ colspan
+ rowspan
+
+ :computed-value(text-align is initial) > th {
+ text-align: center;
+ }
+
+ https://html.spec.whatwg.org/multipage/#rendered-legend
+
+*/
+
diff --git a/components/layout/stylesheets/quirks-mode.css b/components/layout/stylesheets/quirks-mode.css
new file mode 100644
index 00000000000..cb8d3028441
--- /dev/null
+++ b/components/layout/stylesheets/quirks-mode.css
@@ -0,0 +1,44 @@
+/*
+
+https://html.spec.whatwg.org/multipage/#flow-content-3
+
+> In quirks mode, the following rules are also expected to apply:
+
+*/
+
+@namespace url(http://www.w3.org/1999/xhtml);
+
+
+form { margin-bottom: 1em; }
+
+
+table {
+ font-weight: initial;
+ font-style: initial;
+ font-variant: initial;
+ font-size: initial;
+ line-height: initial;
+ white-space: initial;
+ /* text-align: initial; -- see FIXME below */
+}
+
+/*
+ * FIXME(pcwalton): Actually saying `text-align: initial` above breaks `<table>` inside `<center>`
+ * in quirks mode. This is because we (following Gecko, WebKit, and Blink) implement the HTML5
+ * align-descendants rules with a special `text-align: -moz-center`. `text-align: initial`, if
+ * placed on the `<table>` element per the spec, would break this behavior. So we place it on
+ * `<tbody>` instead.
+ */
+tbody {
+ text-align: initial;
+}
+
+
+/* FIXME: https://html.spec.whatwg.org/multipage/#margin-collapsing-quirks */
+
+
+input:not([type=image]), textarea { box-sizing: border-box; }
+
+
+img[align=left i] { margin-right: 3px; }
+img[align=right i] { margin-left: 3px; }
diff --git a/components/layout/stylesheets/servo.css b/components/layout/stylesheets/servo.css
new file mode 100644
index 00000000000..bc72f01cc56
--- /dev/null
+++ b/components/layout/stylesheets/servo.css
@@ -0,0 +1,259 @@
+button {
+ cursor: default;
+}
+
+button,
+input {
+ background: white;
+ border: solid lightgrey 1px;
+ color: black;
+ font-family: sans-serif;
+ font-size: 0.8333em;
+}
+
+textarea {
+ background: white;
+ border: solid lightgrey 1px;
+ color: black;
+ font-family: sans-serif;
+ font-size: 0.8333em;
+}
+
+input::selection,
+textarea::selection {
+ background: rgba(176, 214, 255, 1.0);
+ color: black;
+}
+
+button,
+input[type="button"],
+input[type="submit"],
+input[type="reset"] {
+ background: lightgrey;
+ border-top: solid 1px #EEEEEE;
+ border-left: solid 1px #CCCCCC;
+ border-right: solid 1px #999999;
+ border-bottom: solid 1px #999999;
+ color: black;
+}
+
+input[type="hidden"] { display: none !important }
+
+input[type="checkbox"],
+input[type="radio"] {
+ font-family: monospace !important;
+ border: none !important;
+ background: transparent;
+}
+
+input[type="checkbox"]::before {
+ display: inline-block;
+ border: solid currentcolor 1px;
+ content: "";
+ padding: 0;
+ width: 1em;
+ height: 1em;
+ text-align: center;
+}
+
+input[type="checkbox"]:checked::before { content: "✓"; }
+input[type="checkbox"]:indeterminate::before { content: "-"; }
+
+input[type="radio"]::before {
+ display: inline-block;
+ border: solid currentcolor 1px;
+ content: "";
+ padding: 0;
+ width: 1em;
+ height: 1em;
+ border-radius: 50%;
+ text-align: center;
+}
+
+input[type="radio"]:checked::before { content: "●"; line-height: 1em; }
+
+input[type="file"]::before {
+ content: "Choose File";
+ background: lightgrey;
+ border-top: solid 1px #EEEEEE;
+ border-left: solid 1px #CCCCCC;
+ border-right: solid 1px #999999;
+ border-bottom: solid 1px #999999;
+}
+
+input[type="file"] {
+ text-align: center;
+ color: black;
+ border-style: none;
+}
+
+td[align="left"] { text-align: left; }
+td[align="center"] { text-align: center; }
+td[align="right"] { text-align: right; }
+
+center { text-align: -moz-center; }
+
+label { cursor: default; }
+
+img {
+ overflow: clip !important;
+ overflow-clip-margin: 0 !important;
+}
+
+input:not([type=radio i]):not([type=checkbox i]):not([type=reset i]):not([type=button i]):not([type=submit i]) {
+ cursor: text;
+ overflow: hidden !important;
+ white-space: pre;
+}
+
+textarea {
+ cursor: text;
+ overflow: auto;
+}
+
+/* https://html.spec.whatwg.org/multipage/rendering.html#the-details-and-summary-elements */
+details {
+ display: block;
+}
+
+details::-servo-details-summary {
+ margin-left: 40px;
+ display: list-item;
+ list-style: disclosure-closed;
+}
+
+details[open]::-servo-details-summary {
+ list-style: disclosure-open;
+}
+
+*|*::-servo-details-content {
+ margin-left: 40px;
+ overflow: hidden;
+ display: block;
+}
+
+/*
+ * Until servo supports svg properly, make sure to at least prevent svg
+ * children from being layed out and rendered like usual html.
+ * https://github.com/servo/servo/issues/10646
+ */
+svg > * {
+ display: none;
+}
+
+*|*::-servo-anonymous-box {
+ unicode-bidi: inherit;
+ direction: inherit;
+ writing-mode: inherit;
+}
+
+*|*::-servo-anonymous-table {
+ display: table;
+}
+
+*|*::-servo-anonymous-table-row {
+ display: table-row;
+}
+
+*|*::-servo-anonymous-table-cell {
+ display: table-cell;
+}
+
+*|*::-servo-table-grid {
+ all: inherit;
+ margin: unset;
+ float: unset;
+ clear: unset;
+ position: unset;
+ z-index: unset;
+ page-break-before: unset;
+ page-break-after: unset;
+ page-break-inside: unset;
+ vertical-align: unset;
+ line-height: unset;
+ transform: unset;
+ transform-origin: unset;
+ backface-visibility: unset;
+ clip: unset;
+ transform-style: unset;
+ rotate: unset;
+ scale: unset;
+ translate: unset;
+ align-self: unset;
+ justify-self: unset;
+ grid-column-start: unset;
+ grid-column-end: unset;
+ grid-row-start: unset;
+ grid-row-end: unset;
+ order: unset;
+ outline: unset;
+ outline-offset: unset;
+ column-span: unset;
+ contain: unset;
+ container: unset;
+ scroll-margin: unset;
+
+ /* The grid needs to be block-level, so avoid inheriting `display: inline-table`. */
+ display: table;
+}
+
+meter {
+ display: inline-block;
+ width: 100px;
+ height: 12px;
+ border-radius: 6px;
+ background: linear-gradient(#e6e6e6, #e6e6e6, #eeeeee 20%, #cccccc 45%, #cccccc 55%);
+ overflow: clip;
+}
+
+/* FIXME: These should use the ::-moz-meter-bar pseudo element */
+meter div {
+ height: 100%;
+}
+
+meter:-moz-meter-optimum div {
+ background: linear-gradient(#ad7, #ad7, #cea 20%, #7a3 45%, #7a3 55%);
+}
+meter:-moz-meter-sub-optimum div {
+ background: linear-gradient(#fe7, #fe7, #ffc 20%, #db3 45%, #db3 55%);
+}
+meter:-moz-meter-sub-sub-optimum div {
+ background: linear-gradient(#f77, #f77, #fcc 20%, #d44 45%, #d44 55%);
+}
+
+/* https://html.spec.whatwg.org/#the-details-and-summary-elements */
+details, summary {
+ display: block;
+}
+details > summary:first-of-type {
+ display: list-item;
+ counter-increment: list-item 0;
+ list-style: disclosure-closed inside;
+}
+details[open] > summary:first-of-type {
+ list-style-type: disclosure-open;
+}
+
+/* Styles for the <progress> element */
+progress {
+ display: inline-block;
+ width: 200px;
+ height: 6px;
+ border-radius: 3px;
+ border: 1px solid rgba(0, 0, 0, 0.5);
+}
+/* FIXME: This should use ::-moz-progress-bar */
+progress #-servo-progress-bar {
+ display: block;
+ height: 100%;
+ background-color: #7a3;
+}
+
+select {
+ background-color: lightgrey;
+ border-radius: 5px;
+ border: 1px solid gray;
+ padding: 0 0.25em;
+ /* Don't show a text cursor when hovering selected option */
+ cursor: default;
+} \ No newline at end of file
diff --git a/components/layout/stylesheets/user-agent.css b/components/layout/stylesheets/user-agent.css
new file mode 100644
index 00000000000..cea14741d30
--- /dev/null
+++ b/components/layout/stylesheets/user-agent.css
@@ -0,0 +1,433 @@
+/*
+https://html.spec.whatwg.org/multipage/#form-controls
+*/
+
+@namespace url(http://www.w3.org/1999/xhtml);
+
+[hidden], area, base, basefont, datalist, head, link, menu[type=popup i], meta,
+noembed, noframes, param, rp, script, source, style, template, track, title {
+ display: none;
+}
+
+embed[hidden] { display: inline; height: 0; width: 0; }
+
+/* FIXME: only if scripting is enabled */
+noscript { display: none !important; }
+
+input[type=hidden i] { display: none !important; }
+
+
+html, body { display: block; }
+
+body { margin: 8px; }
+
+
+address, blockquote, center, div, figure, figcaption, footer, form, header, hr,
+legend, listing, main, p, plaintext, pre, summary, xmp {
+ display: block;
+}
+
+blockquote, figure, listing, p, plaintext, pre, xmp {
+ margin-top: 1em; margin-bottom: 1em;
+}
+
+blockquote, figure { margin-left: 40px; margin-right: 40px; }
+
+address { font-style: italic; }
+listing, plaintext, pre, xmp {
+ font-family: monospace; white-space: pre;
+}
+
+dialog:not([open]) { display: none; }
+dialog {
+ position: absolute;
+ left: 0; right: 0;
+ /* FIXME: support fit-content */
+ width: fit-content;
+ height: fit-content;
+ margin: auto;
+ border: solid;
+ padding: 1em;
+ background: white;
+ color: black;
+}
+/* FIXME: support ::backdrop */
+dialog::backdrop {
+ position: fixed;
+ top: 0; right: 0; bottom: 0; left: 0;
+ background: rgba(0,0,0,0.1);
+}
+
+/* for small devices, modal dialogs go full-screen */
+@media screen and (max-width: 540px) {
+ /* FIXME: support :modal */
+ dialog:modal {
+ top: 0;
+ width: auto;
+ margin: 1em;
+ }
+}
+
+
+cite, dfn, em, i, var { font-style: italic; }
+b, strong { font-weight: bolder; }
+code, kbd, samp, tt { font-family: monospace; }
+big { font-size: larger; }
+small { font-size: smaller; }
+
+sub { vertical-align: sub; }
+sup { vertical-align: super; }
+sub, sup { line-height: normal; font-size: smaller; }
+
+ruby { display: ruby; }
+rt { display: ruby-text; }
+
+/*
+ * All tag names that can be links are listed here, because applying pseudo-class selectors
+ * disables style sharing, so we want to apply pseudo-class selectors to as few elements as
+ * possible.
+ */
+a:link, area:link, link:link { color: #0000EE; }
+a:visited, area:visited, link:visited { color: #551A8B; }
+a:link, a:visited,
+area:link, area:visited,
+link:link, link:visited { text-decoration: underline; cursor: pointer; }
+a:link[rel~=help], a:visited[rel~=help],
+area:link[rel~=help], area:visited[rel~=help],
+link:link[rel~=help], link:visited[rel~=help] { cursor: help; }
+
+/*
+ * FIXME: use `outline: auto;`
+ */
+a:focus, area:focus {
+ outline: thin dotted;
+}
+
+input:focus, textarea:focus, button:focus {
+ outline: thin solid black;
+}
+
+mark { background: yellow; color: black; }
+
+abbr[title], acronym[title] { text-decoration: dotted underline; }
+ins, u { text-decoration: underline; }
+del, s, strike { text-decoration: line-through; }
+blink { text-decoration: blink; }
+
+q::before { content: open-quote; }
+q::after { content: close-quote; }
+
+/*br { display-outside: newline; } /* this also has bidi implications */
+br::before { content: "\A"; white-space: pre }
+
+nobr { white-space: nowrap; }
+wbr { display-outside: break-opportunity; } /* this also has bidi implications */
+nobr wbr { white-space: normal; }
+
+
+/* Eventually we will want the following, but currently Servo does not
+ properly parse the :dir pseudo-selector.
+[dir=ltr i], bdi:dir(ltr), input[type=tel]:dir(ltr) { direction: ltr; }
+*/
+[dir=ltr i] { direction: ltr; }
+[dir=rtl i] { direction: rtl; }
+[dir=ltr i], [dir=rtl i], [dir=auto i] { unicode-bidi: isolate; }
+
+/* To ensure http://www.w3.org/TR/REC-html40/struct/dirlang.html#style-bidi:
+ *
+ * "When a block element that does not have a dir attribute is transformed to
+ * the style of an inline element by a style sheet, the resulting presentation
+ * should be equivalent, in terms of bidirectional formatting, to the
+ * formatting obtained by explicitly adding a dir attribute (assigned the
+ * inherited value) to the transformed element."
+ *
+ * and the rules in http://dev.w3.org/html5/spec/rendering.html#rendering
+ */
+address,
+article,
+aside,
+blockquote,
+body,
+caption,
+center,
+col,
+colgroup,
+dd,
+dir,
+div,
+dl,
+dt,
+fieldset,
+figcaption,
+figure,
+footer,
+form,
+h1,
+h2,
+h3,
+h4,
+h5,
+h6,
+header,
+hgroup,
+hr,
+html,
+legend,
+li,
+listing,
+main,
+marquee,
+menu,
+nav,
+noframes,
+ol,
+p,
+plaintext,
+pre,
+search,
+section,
+summary,
+table,
+tbody,
+td,
+tfoot,
+th,
+thead,
+tr,
+ul,
+xmp
+{
+ unicode-bidi: isolate;
+}
+
+bdi, output {
+ unicode-bidi: isolate;
+}
+
+bdo, bdo[dir] { unicode-bidi: isolate-override; }
+
+textarea[dir=auto i], pre[dir=auto i] { unicode-bidi: plaintext; }
+
+
+article, aside, h1, h2, h3, h4, h5, h6, hgroup, nav, section {
+ display: block;
+}
+
+h1 { margin-top: 0.67em; margin-bottom: 0.67em; font-size: 2.00em; font-weight: bold; }
+h2 { margin-top: 0.83em; margin-bottom: 0.83em; font-size: 1.50em; font-weight: bold; }
+h3 { margin-top: 1.00em; margin-bottom: 1.00em; font-size: 1.17em; font-weight: bold; }
+h4 { margin-top: 1.33em; margin-bottom: 1.33em; font-size: 1.00em; font-weight: bold; }
+h5 { margin-top: 1.67em; margin-bottom: 1.67em; font-size: 0.83em; font-weight: bold; }
+h6 { margin-top: 2.33em; margin-bottom: 2.33em; font-size: 0.67em; font-weight: bold; }
+
+:matches(article, aside, nav, section) h1 { margin-top: 0.83em; margin-bottom: 0.83em; font-size: 1.50em; }
+:matches(article, aside, nav, section) :matches(article, aside, nav, section) h1 { margin-top: 1.00em; margin-bottom: 1.00em; font-size: 1.17em; }
+:matches(article, aside, nav, section) :matches(article, aside, nav, section) :matches(article, aside, nav, section) h1 { margin-top: 1.33em; margin-bottom: 1.33em; font-size: 1.00em; }
+:matches(article, aside, nav, section) :matches(article, aside, nav, section) :matches(article, aside, nav, section) :matches(article, aside, nav, section) h1 { margin-top: 1.67em; margin-bottom: 1.67em; font-size: 0.83em; }
+:matches(article, aside, nav, section) :matches(article, aside, nav, section) :matches(article, aside, nav, section) :matches(article, aside, nav, section) :matches(article, aside, nav, section) h1 { margin-top: 2.33em; margin-bottom: 2.33em; font-size: 0.67em; }
+
+:matches(article, aside, nav, section) hgroup > h1 ~ h2 { margin-top: 1.00em; margin-bottom: 1.00em; font-size: 1.17em; }
+:matches(article, aside, nav, section) :matches(article, aside, nav, section) hgroup > h1 ~ h2 { margin-top: 1.33em; margin-bottom: 1.33em; font-size: 1.00em; }
+:matches(article, aside, nav, section) :matches(article, aside, nav, section) :matches(article, aside, nav, section) hgroup > h1 ~ h2 { margin-top: 1.67em; margin-bottom: 1.67em; font-size: 0.83em; }
+:matches(article, aside, nav, section) :matches(article, aside, nav, section) :matches(article, aside, nav, section) :matches(article, aside, nav, section) hgroup > h1 ~ h2 { margin-top: 2.33em; margin-bottom: 2.33em; font-size: 0.67em; }
+
+:matches(article, aside, nav, section) hgroup > h1 ~ h3 { margin-top: 1.33em; margin-bottom: 1.33em; font-size: 1.00em; }
+:matches(article, aside, nav, section) :matches(article, aside, nav, section) hgroup > h1 ~ h3 { margin-top: 1.67em; margin-bottom: 1.67em; font-size: 0.83em; }
+:matches(article, aside, nav, section) :matches(article, aside, nav, section) :matches(article, aside, nav, section) hgroup > h1 ~ h3 { margin-top: 2.33em; margin-bottom: 2.33em; font-size: 0.67em; }
+
+:matches(article, aside, nav, section) hgroup > h1 ~ h4 { margin-top: 1.67em; margin-bottom: 1.67em; font-size: 0.83em; }
+:matches(article, aside, nav, section) :matches(article, aside, nav, section) hgroup > h1 ~ h4 { margin-top: 2.33em; margin-bottom: 2.33em; font-size: 0.67em; }
+
+:matches(article, aside, nav, section) hgroup > h1 ~ h5 { margin-top: 2.33em; margin-bottom: 2.33em; font-size: 0.67em; }
+
+
+dir, dd, dl, dt, menu, ol, ul { display: block; }
+li { display: list-item; }
+
+dir, dl, menu, ol, ul { margin-top: 1em; margin-bottom: 1em; }
+
+:matches(dir, dl, menu, ol, ul) :matches(dir, dl, menu, ol, ul) {
+ margin-top: 0; margin-bottom: 0;
+}
+
+dd { margin-left: 40px; } /* FIXME: use margin-inline-start when supported */
+dir, menu, ol, ul { padding-left: 40px; } /* FIXME: use padding-inline-start when supported */
+
+ol { list-style-type: decimal; }
+
+dir, menu, ul { list-style-type: disc; }
+
+:matches(dir, menu, ol, ul) :matches(dir, menu, ul) {
+ list-style-type: circle;
+}
+
+:matches(dir, menu, ol, ul) :matches(dir, menu, ol, ul) :matches(dir, menu, ul) {
+ list-style-type: square;
+}
+
+
+table { display: table; }
+caption {
+ display: table-caption;
+ text-align: center;
+}
+colgroup, colgroup[hidden] { display: table-column-group; }
+col, col[hidden] { display: table-column; }
+thead, thead[hidden] { display: table-header-group; }
+tbody, tbody[hidden] { display: table-row-group; }
+tfoot, tfoot[hidden] { display: table-footer-group; }
+tr, tr[hidden] { display: table-row; }
+td, th, td[hidden], th[hidden] { display: table-cell; }
+
+colgroup[hidden], col[hidden], thead[hidden], tbody[hidden],
+tfoot[hidden], tr[hidden], td[hidden], th[hidden] {
+ visibility: collapse;
+}
+
+table {
+ box-sizing: border-box;
+ border-spacing: 2px;
+ border-collapse: separate;
+ text-indent: initial;
+}
+td, th { padding: 1px; }
+th {
+ font-weight: bold;
+ text-align: -moz-center-or-inherit;
+}
+
+thead, tbody, tfoot, table > tr { vertical-align: middle; }
+tr, td, th { vertical-align: inherit; }
+
+
+table, td, th { border-color: gray; }
+thead, tbody, tfoot, tr { border-color: inherit; }
+table:matches(
+ [rules=none i], [rules=groups i], [rules=rows i],
+ [rules=cols i], [rules=all i],
+ [frame=void i], [frame=above i], [frame=below i],
+ [frame=hsides i], [frame=lhs i], [frame=rhs i],
+ [frame=vsides i], [frame=box i], [frame=border i]
+),
+table:matches(
+ [rules=none i], [rules=groups i], [rules=rows i],
+ [rules=cols i], [rules=all i]
+) > tr > :matches(td, th),
+table:matches(
+ [rules=none i], [rules=groups i], [rules=rows i],
+ [rules=cols i], [rules=all i]
+) > :matches(thead, tbody, tfoot) > tr > :matches(td, th) {
+ border-color: black;
+}
+
+
+:matches(table, thead, tbody, tfoot, tr) > form {
+ display: none !important;
+}
+
+input, select, button, textarea {
+ letter-spacing: initial;
+ word-spacing: initial;
+ line-height: initial;
+ text-transform: initial;
+ text-indent: initial;
+ text-shadow: initial;
+ appearance: auto;
+}
+
+input:not([type=image i], [type=range i], [type=checkbox i], [type=radio i]) {
+ overflow: clip !important;
+ overflow-clip-margin: 0 !important;
+}
+
+input, select, textarea {
+ text-align: initial;
+}
+
+:autofill {
+ field-sizing: fixed !important;
+}
+
+input:is([type=reset i], [type=button i], [type=submit i]), button {
+ text-align: center;
+}
+
+input, textarea, select, button { display: inline-block; }
+
+input[type=hidden i], input[type=file i], input[type=image i] {
+ appearance: none;
+}
+
+input[type=radio i], input[type=checkbox i], input[type=reset i], input[type=button i], input[type=submit i],
+input[type=color i], input[type=search i], select, button {
+ box-sizing: border-box;
+}
+
+textarea { white-space: pre-wrap; }
+
+hr {
+ color: gray;
+ border-style: inset;
+ border-width: 1px;
+ margin-block-start: 0.5em;
+ margin-inline-end: auto;
+ margin-block-end: 0.5em;
+ margin-inline-start: auto;
+ overflow: hidden;
+}
+
+
+fieldset {
+ display: block; /* https://www.w3.org/Bugs/Public/show_bug.cgi?id=27018 */
+ margin-left: 2px; margin-right: 2px;
+ border: groove 2px;
+ border-color: ThreeDFace; /* FIXME: system color */
+ padding: 0.35em 0.625em 0.75em;
+ min-width: min-content;
+}
+
+legend {
+ padding-left: 2px; padding-right: 2px;
+}
+
+iframe:not([seamless]) { border: 2px inset; }
+iframe[seamless] { display: block; }
+video { object-fit: contain; }
+
+
+textarea { white-space: pre-wrap; }
+
+*|*:not(:root):fullscreen {
+ position:fixed !important;
+ top:0 !important; right:0 !important; bottom:0 !important; left:0 !important;
+ margin:0 !important;
+ box-sizing:border-box !important;
+ min-width:0 !important;
+ max-width:none !important;
+ min-height:0 !important;
+ max-height:none !important;
+ width:100% !important;
+ height:100% !important;
+ transform:none !important;
+
+ /* intentionally not !important */
+ object-fit:contain;
+
+ /* The internal-only -servo-top-layer property is used
+ to implement https://fullscreen.spec.whatwg.org/#top-layer */
+ -servo-top-layer: top;
+}
+
+iframe:fullscreen {
+ border:none !important;
+ padding:0 !important;
+}
+
+/* https://drafts.csswg.org/css-lists-3/#ua-stylesheet */
+*::marker {
+ text-align: end;
+ text-transform: none;
+ unicode-bidi: isolate;
+ font-variant-numeric: tabular-nums;
+ white-space: pre;
+}