| /* Custom CSS for the Rust Specification. */ | 
 |  | 
 | /* Per-theme variables. */ | 
 | :root { | 
 |     --railroad-background-color: hsl(30, 20%, 95%); | 
 |     --railroad-background-image: | 
 |         linear-gradient(to right, rgba(30, 30, 30, .05) 1px, transparent 1px), | 
 |         linear-gradient(to bottom, rgba(30, 30, 30, .05) 1px, transparent 1px); | 
 |     --railroad-path-stroke: black; | 
 |     --railroad-rect-stroke: black; | 
 |     --railroad-rect-fill: hsl(-290, 70%, 90%); | 
 | } | 
 | .light { | 
 |     --alert-note-color: #0969da; | 
 |     --alert-warning-color: #9a6700; | 
 |     --alert-edition-color: #1a7f37; | 
 |     --alert-example-color: #8250df; | 
 |     --gramar-literal-bg: #fafafa; | 
 | } | 
 | .rust { | 
 |     --alert-note-color: #023b95; | 
 |     --alert-warning-color: #603700; | 
 |     --alert-edition-color: #008200; | 
 |     --alert-example-color: #8250df; | 
 |     --grammar-literal-bg: #dedede; | 
 | } | 
 | .light, .rust { | 
 |     --grammar-comment-color: lch(from var(--quote-bg) calc(l - 50) 0 0); | 
 |     --inline-code-color: var(--grammar-comment-color); | 
 | } | 
 | .coal, .navy { | 
 |     --alert-note-color: #4493f8; | 
 |     --alert-warning-color: #d29922; | 
 |     --alert-edition-color: #3fb950; | 
 |     --alert-example-color: #ab7df8; | 
 |     --grammar-literal-bg: #1d1f21; | 
 | } | 
 | .ayu { | 
 |     --alert-note-color: #74b9ff; | 
 |     --alert-warning-color: #f0b72f; | 
 |     --alert-edition-color: #2bd853; | 
 |     --alert-example-color: #d3abff; | 
 |     --gramar-literal-bg: #191f26; | 
 | } | 
 | .coal, .navy, .ayu { | 
 |     --grammar-comment-color: lch(from var(--quote-bg) calc(l + 50) 0 0); | 
 |     --inline-code-color: var(--grammar-comment-color); | 
 |     --railroad-background-color: hsl(230, 10%, 20%); | 
 |     --railroad-background-image: | 
 |         linear-gradient(to right, rgba(150, 150, 150, .05) 1px, transparent 1px), | 
 |         linear-gradient(to bottom, rgba(150, 150, 150, .05) 1px, transparent 1px); | 
 |     --railroad-path-stroke: hsl(200, 10%, 60%); | 
 |     --railroad-text-fill: hsl(230, 30%, 80%); | 
 |     --railroad-rect-stroke: hsl(200, 10%, 50%); | 
 |     --railroad-rect-fill: hsl(230, 20%, 20%); | 
 | } | 
 |  | 
 | /* | 
 | .parenthetical class used to keep e.g. "less-than symbol (<)" from wrapping | 
 | the end parenthesis onto its own line. Use in a span between the last word and | 
 | the parenthetical. So for this example, you'd use | 
 | ```less-than <span class="parenthetical">symbol (`<`)</span>``` | 
 | */ | 
 | .parenthetical { | 
 |     white-space: nowrap; | 
 | } | 
 |  | 
 | /* | 
 | Admonitions are defined with blockquotes: | 
 |  | 
 | > [!WARNING] | 
 | > This is bad! | 
 |  | 
 | See mdbook-spec/src/admonitions.rs. | 
 | */ | 
 | .alert blockquote { | 
 |     /* Add some padding to make the vertical bar a little taller than the text.*/ | 
 |     padding: 8px 0px 8px 20px; | 
 |     /* Add a solid color bar on the left side. */ | 
 |     border-inline-start-style: solid; | 
 |     border-inline-start-width: 4px; | 
 |     /* Disable the background color from mdbook for a cleaner look. */ | 
 |     background-color: inherit; | 
 |     /* Disable border blocks from mdbook. */ | 
 |     border-block-start: none; | 
 |     border-block-end: none; | 
 |     /* Reduce margin from mdbook, it uses a lot of space. */ | 
 |     margin: 10px 0; | 
 | } | 
 |  | 
 | .alert-title { | 
 |     /* Slightly increase the weight for more emphasis. */ | 
 |     font-weight: 600; | 
 |     /* Vertically center the icon with the text. */ | 
 |     display: flex; | 
 |     align-items: center; | 
 |     /* Remove default large margins for a more compact display. | 
 |        Important to override .alert p rule. */ | 
 |     margin: 0 0 8px 0 !important; | 
 | } | 
 | .alert blockquote > :nth-child(2) { | 
 |     /* Default margins of content just below the label add too much space. */ | 
 |     margin-top: 0; | 
 | } | 
 | .alert blockquote > :last-child { | 
 |     /* Default margins of content add too much space. */ | 
 |     margin-bottom: 0; | 
 | } | 
 |  | 
 | .alert-title svg { | 
 |     fill: currentColor; | 
 |     /* Add some space between the icon and the text. */ | 
 |     margin-right: 8px; | 
 | } | 
 |  | 
 | .alert-note blockquote { | 
 |     border-inline-start-color: var(--alert-note-color); | 
 | } | 
 | .alert-warning blockquote { | 
 |     border-inline-start-color: var(--alert-warning-color); | 
 | } | 
 | .alert-edition blockquote { | 
 |     border-inline-start-color: var(--alert-edition-color); | 
 | } | 
 | .alert-example blockquote { | 
 |     border-inline-start-color: var(--alert-example-color); | 
 | } | 
 | .alert-note .alert-title { | 
 |     color: var(--alert-note-color); | 
 | } | 
 | .alert-warning .alert-title { | 
 |     color: var(--alert-warning-color); | 
 | } | 
 | .alert-edition .alert-title { | 
 |     color: var(--alert-edition-color); | 
 | } | 
 | /* Puts a rounded rectangle around the edition date. */ | 
 | .alert-title-edition { | 
 |     padding: 0px 5px; | 
 |     margin-right: 1rem; | 
 |     border: 2px solid var(--alert-edition-color); | 
 |     border-radius: 15px; | 
 |     font-weight: bold; | 
 |     color: var(--alert-edition-color); | 
 | } | 
 | .alert-example .alert-title { | 
 |     color: var(--alert-example-color); | 
 | } | 
 |  | 
 | /* <kbd> tags can be used to highlight specific character elements. */ | 
 | kbd { | 
 |     border: 1px solid #999; | 
 |     display: inline-block; | 
 |     border-radius: 3px; | 
 |     padding: 0 0.6ex; | 
 |     background: #eee; | 
 |     box-shadow: inset -1px -1px 0 #999; | 
 |     vertical-align: baseline; | 
 |     color: #000; | 
 |     height: 1.55em; | 
 |     font-style: normal; | 
 |     font-weight: bold; | 
 |     font-family: inherit; | 
 |     font-size: revert; | 
 |     line-height: revert; | 
 | } | 
 | kbd.optional { | 
 |     border-style: dashed; | 
 |     background: #fff; | 
 | } | 
 | var.optional { | 
 |     border-style: dashed; | 
 | } | 
 |  | 
 | /* <var> tags can be used for non-terminals. */ | 
 | var { | 
 |     border: 1px solid #9c9; | 
 |     box-shadow: inset -1px -1px 0 #9c9; | 
 |     font-style: normal; | 
 |     display: inline-block; | 
 |     vertical-align: baseline; | 
 |     border-radius: 7px; | 
 |     padding: 0 4px; | 
 |     background: #dfd; | 
 |     margin: 2px; | 
 | } | 
 | var.type { | 
 |     box-shadow: inset -1px -1px 0 #c99; | 
 |     border-color: #c99; | 
 |     background: #fdd; | 
 | } | 
 |  | 
 | /* <span class="repeat"> can be used for a grammar production that repeats zero or more times. */ | 
 | span.repeat { | 
 |     position: relative; | 
 |     border: 1px dashed #393; | 
 |     border-radius: 10px; | 
 |     display: inline-block; | 
 |     padding: 6px; | 
 |     margin-left: 0.5ex; | 
 |     margin-top: 1em; | 
 |     margin-bottom: 0.5ex; | 
 |     min-width: 3.8em; | 
 |     text-align: center; | 
 | } | 
 | span.repeat::before { | 
 |     content: "zero or more"; | 
 |     white-space: nowrap; | 
 |     display: block; | 
 |     text-align: center; | 
 |     font-size: 0.75em; | 
 |     position: absolute; | 
 |     left: 0; | 
 |     right: 0; | 
 |     top: -1.4em; | 
 |     color: #393; | 
 | } | 
 | var > span { | 
 |     display: inline-block; | 
 |     border-right: 1px dotted green; | 
 |     padding-right: 0.5ex; | 
 |     margin-right: 0.5ex; | 
 |     font-style: italic; | 
 | } | 
 |  | 
 | /* <span class="version"> can be used to highlight a specific version of Rust. */ | 
 | span.version { | 
 |     float: right; | 
 |     margin-left: 1em; | 
 |     margin-bottom: 1em; | 
 |     background: #f7c0eb; | 
 |     padding: 0.2ex 0.5ex; | 
 |     border-radius: 5px; | 
 |     display: block; | 
 |     box-shadow: inset -1px -1px 0 #a06894; | 
 |     font-size: 0.9em; | 
 | } | 
 |  | 
 | /* <dfn> tags are used to indicate a specific word or phrase is being defined. */ | 
 | dfn { | 
 |     font-style: italic; | 
 |     text-decoration: underline; | 
 | } | 
 |  | 
 | .content main { | 
 |     /* Provides space on the left for the rule call-outs. */ | 
 |     padding-left: 4em; | 
 | } | 
 |  | 
 | /* Rules are generated via r[foo.bar] syntax, processed by mdbook-spec. */ | 
 | .rule { | 
 |     --font-size-mult: 0.8; | 
 |     --font-size: calc(1em * var(--font-size-mult)); | 
 |  | 
 |     font-size: var(--font-size); | 
 | } | 
 |  | 
 | /* included in the grid below as 20px */ | 
 | .page, .content { | 
 |     padding-left: 0; | 
 |     padding-right: 0; | 
 | } | 
 | /* required to accomodate above, somehow... */ | 
 | #menu-bar { | 
 |     margin-left: 0; | 
 | } | 
 |  | 
 | main { | 
 |     /* To nicely display rules (`[a.b.c]`) on a side of the main text body we | 
 |        use grid layout. */ | 
 |     display: grid; | 
 |     grid-template-columns: | 
 |         /* Left margin / place for rules */ | 
 |         [rules] minmax(36px, 1fr) | 
 |         /* The main text body */ | 
 |         [text] auto | 
 |         /* Right margin */ | 
 |         [margin] minmax(36px, 1fr); | 
 |  | 
 |     /* We do these by hand via the grid */ | 
 |     margin: 0; | 
 |     padding: 0 !important; | 
 |     max-width: none !important; | 
 | } | 
 |  | 
 | main > * { | 
 |     /* By default grid items can't be smaller than their content. | 
 |        That is, by default `min-width: auto`. | 
 |        We want to be able to force code blocks to be scrollable, | 
 |        so we need to overwrite `min-width`. */ | 
 |     min-width: 0; | 
 |     max-width: var(--content-max-width); | 
 |  | 
 |     /* All elements should be in the main text body... */ | 
 |     grid-column: text; | 
 | } | 
 |  | 
 | main > .rule { | 
 |     /* ... except the rules, which must be in the left margin */ | 
 |     grid-column: rules; | 
 | } | 
 |  | 
 | hr { | 
 |     /* For some reason, grid is shrinking this to a point. */ | 
 |     width: 100%; | 
 | } | 
 |  | 
 | /* Too much space with the grid. | 
 | */ | 
 | .footnote-definition { | 
 |     margin-top: 0; | 
 | } | 
 | .footnote-definition li:first-child > *:first-child { | 
 |     margin-top: 0; | 
 | } | 
 |  | 
 | /* This is quite dumb, ugh. | 
 |    CSS doesn't allow margin colapsing between grid items and anything else | 
 |    (src: <https://stackoverflow.com/a/37837971>), which means that the margins | 
 |    of li's children are not collapsed with ul's margins, adding too much margins. | 
 |  | 
 |    Ideally we'd add `<div>`s for each grid cell, so that margin collapsing happens | 
 |    as-usual inside of them. But, we don't have that kind of control over mdbook. */ | 
 | main > ul > li > *:first-child, | 
 | main > ul > li > pre:first-child > pre.playground { | 
 |     margin-top: 0; | 
 | } | 
 | main > ul > li > *:last-child, | 
 | main > ul > li > pre:last-child > pre.playground { | 
 |     margin-bottom: 0; | 
 | } | 
 |  | 
 | /* Similarly to the above, margin collapse doesn't happen between grid items, | 
 |    so we have to replace it with grid gap. (p, pre, and ul had 16px vertical margins) */ | 
 | main { | 
 |     row-gap: 16px; | 
 | } | 
 | main > p, | 
 | main > pre, | 
 | main > pre > pre.playground, | 
 | main > ul { | 
 |     margin-top: 0; | 
 |     margin-bottom: 0; | 
 | } | 
 |  | 
 | /* Values for header margin-top and blockquote margin are taken from mdbook's general.css, | 
 |    values for header margin-bottom are taken from <https://www.w3schools.com/cssref/css_default_values.php> */ | 
 | :root { | 
 |     /* 1.6 is body font-size */ | 
 |     --h2-margin-top: calc(1.5rem * 1.6 * 2.5 - 16px); | 
 |     --h3-margin-top: calc(1.17rem * 1.6 * 2.5 - 16px); | 
 |     --h4-margin-top: calc(1.00rem * 1.6 * 2 - 16px); | 
 |     --h5-margin-top: calc(0.83rem * 1.6 * 2 - 16px); | 
 |     --h6-margin-top: calc(0.67rem * 1.6 * 2 - 16px); | 
 | } | 
 | main > h2 { | 
 |     margin-top: var(--h2-margin-top); | 
 |     margin-bottom: calc(0.83em - 16px); | 
 | } | 
 | main > h3 { | 
 |     margin-top: var(--h3-margin-top); | 
 |     margin-bottom: calc(1em - 16px); | 
 | } | 
 | main > h4 { | 
 |     margin-top: var(--h4-margin-top); | 
 |     margin-bottom: calc(1.33em - 16px); | 
 | } | 
 | main > h5 { | 
 |     margin-top: var(--h5-margin-top); | 
 |     margin-bottom: calc(1.67em - 16px); | 
 | } | 
 | main > h6 { | 
 |     margin-top: var(--h6-margin-top); | 
 |     margin-bottom: calc(2.33em - 16px); | 
 | } | 
 | main > blockquote { | 
 |     margin-top: calc(20px - 16px); | 
 |     margin-bottom: calc(20px - 16px); | 
 | } | 
 |  | 
 | main > .rule { | 
 |     max-width: unset; | 
 |     justify-self: right; | 
 |     width: 100%; | 
 |     /* We use a container query to know the size of the "left margin", | 
 |        so that we can hide rules is there is not enough space. */ | 
 |     container-type: inline-size; | 
 |     container-name: rule; | 
 | } | 
 |  | 
 | .rule-link { | 
 |     float: right; | 
 |     text-align: right; | 
 |     padding-right: 10px; | 
 |     /* We add `<wbr>` ourselves and only want breaks there */ | 
 |     word-break: keep-all; | 
 |     /* Remove the blue coloring of links on rules that mdbook normally sets. */ | 
 |     color: #999 !important; | 
 | } | 
 |  | 
 | /* Test links */ | 
 | .test-link { | 
 |     float: right; | 
 |     padding-right: 10px; | 
 | } | 
 |  | 
 | .rule .popup-container > a { | 
 |     float: right; | 
 |     text-align: right; | 
 | } | 
 |  | 
 | /* When clicking a rule, it is added as a URL fragment and the browser will | 
 |    navigate to it. This adds an indicator that the linked rule is the one that | 
 |    is "current", just like normal headers are in mdbook. | 
 | */ | 
 | .rule:target .rule-link::before { | 
 |     display: inline-block; | 
 |     content: "ยป"; | 
 |     padding-right: 5px; | 
 | } | 
 |  | 
 | /* Make it bolder/easier to read when selected. */ | 
 | .rule:target .rule-link { | 
 |     color: var(--fg) !important; | 
 | } | 
 |  | 
 | /* Dodge ยป from headings */ | 
 | /* Note: Some rules have a .tests-popup in the way, so that's why this selects | 
 |          either with or without. */ | 
 | .rule:has(+ h1:target, + .tests-popup + h1:target), | 
 | .rule:has(+ h2:target, + .tests-popup + h2:target), | 
 | .rule:has(+ h3:target, + .tests-popup + h3:target), | 
 | .rule:has(+ h4:target, + .tests-popup + h4:target), | 
 | .rule:has(+ h5:target, + .tests-popup + h5:target), | 
 | .rule:has(+ h6:target, + .tests-popup + h6:target) { | 
 |     padding-right: 24px; | 
 | } | 
 |  | 
 | /* This positioning is to push the popup down over the header's top margin. | 
 |    Ideally I would like the popup to show *below* the header, but I have no idea how to do that. | 
 | */ | 
 | .tests-popup:has(+ h2) { | 
 |     position: relative; | 
 |     top: calc(var(--h2-margin-top) + 10px); | 
 | } | 
 | .tests-popup:has(+ h3) { | 
 |     position: relative; | 
 |     top: calc(var(--h3-margin-top) + 10px); | 
 | } | 
 | .tests-popup:has(+ h4) { | 
 |     position: relative; | 
 |     top: calc(var(--h4-margin-top) + 10px); | 
 | } | 
 | .tests-popup:has(+ h5) { | 
 |     position: relative; | 
 |     top: calc(var(--h5-margin-top) + 10px); | 
 | } | 
 | .tests-popup:has(+ h6) { | 
 |     position: relative; | 
 |     top: calc(var(--h6-margin-top) + 10px); | 
 | } | 
 |  | 
 | /* Hide the rules if the width of the container is too small. | 
 |    The cutoff point is chosen semi-arbitrary, it felt that | 
 |    when `width < 14em`, there are too many breaks. */ | 
 | @container rule (width < 14em) { | 
 |     main > .rule a.rule-link span, | 
 |     .test-link > a span { | 
 |         display: none; | 
 |     } | 
 |  | 
 |     main > .rule > a.rule-link::before { | 
 |         content: "[*]"; | 
 |     } | 
 |  | 
 |     .test-link > a::before { | 
 |         content: "[T]"; | 
 |     } | 
 | } | 
 |  | 
 | /* Align rules to various siblings */ | 
 | .rule:has(+ p, + .tests-popup + p), | 
 | .rule:has(+ ul, + .tests-popup + ul) { | 
 |     margin-top: calc((1em - var(--font-size)) / var(--font-size-mult) / 2); | 
 | } | 
 |  | 
 | .rule:has(+ h1, + .tests-popup + h1) { | 
 |     align-self: center; | 
 | } | 
 |  | 
 | .rule:has(+ h2, + .tests-popup + h2) { | 
 |     /* multiplying by this turns h2's em into .rule's em*/ | 
 |     --h2-em-mult: calc( | 
 |         (1 / var(--font-size-mult)) /* to main font size */ | 
 |           * 1.5 /* to h2 font size */ | 
 |     ); | 
 |  | 
 |     margin-top: calc( | 
 |         /* h2 margin top */ | 
 |         2.5em * var(--h2-em-mult) - 16px | 
 |         /* half of the font size difference */ | 
 |         + (1em * var(--h2-em-mult) - 1em) / 2 | 
 |     ); | 
 | } | 
 | .rule:has(+ h3, + .tests-popup + h3) { | 
 |     /* multiplying by this turns h3's em into .rule's em*/ | 
 |     --h3-em-mult: calc( | 
 |         (1 / var(--font-size-mult)) /* to main font size */ | 
 |           * 1.17 /* to h3 font size */ | 
 |     ); | 
 |  | 
 |     margin-top: calc( | 
 |         /* h3 margin top */ | 
 |         2.5em * var(--h3-em-mult) - 16px | 
 |         /* half of the font size difference */ | 
 |         + (1em * var(--h3-em-mult) - 1em) / 2 | 
 |     ); | 
 | } | 
 |  | 
 | .rule:has(+ h4, + .tests-popup + h4) { | 
 |     /* multiplying by this turns h4's em into .rule's em*/ | 
 |     --h4-em-mult: calc( | 
 |         (1 / var(--font-size-mult)) /* to main font size */ | 
 |           * 1 /* to h4 font size */ | 
 |     ); | 
 |  | 
 |     margin-top: calc( | 
 |         /* h4 margin top */ | 
 |         2em * var(--h4-em-mult) - 16px | 
 |         /* half of the font size difference */ | 
 |         + (1em * var(--h4-em-mult) - 1em) / 2 | 
 |     ); | 
 | } | 
 |  | 
 | .rule:has(+ h5, + .tests-popup + h5) { | 
 |     /* multiplying by this turns h5's em into .rule's em*/ | 
 |     --h5-em-mult: calc( | 
 |         (1 / var(--font-size-mult)) /* to main font size */ | 
 |           * 0.83 /* to h5 font size */ | 
 |     ); | 
 |  | 
 |     margin-top: calc( | 
 |         /* h5 margin top */ | 
 |         2em * var(--h5-em-mult) - 16px | 
 |         /* half of the font size difference */ | 
 |         + (1em * var(--h5-em-mult) - 1em) / 2 | 
 |     ); | 
 | } | 
 |  | 
 | .rule:has(+ h6, + .tests-popup + h6) { | 
 |     /* multiplying by this turns h6's em into .rule's em*/ | 
 |     --h6-em-mult: calc( | 
 |         (1 / var(--font-size-mult)) /* to main font size */ | 
 |           * 0.67 /* to h6 font size */ | 
 |     ); | 
 |  | 
 |     margin-top: calc( | 
 |         /* h6 margin top */ | 
 |         2em * var(--h6-em-mult) - 16px | 
 |         /* half of the font size difference */ | 
 |         + (1em * var(--h6-em-mult) - 1em) / 2 | 
 |     ); | 
 | } | 
 |  | 
 | /* Sets the color for [!HISTORY] blockquote admonitions. */ | 
 | .history > blockquote { | 
 |     background: #f7c0eb; | 
 | } | 
 |  | 
 | /* Provides a anchor container for positioning popups. */ | 
 | .popup-container { | 
 |     position: relative; | 
 | } | 
 | /* In the test summary page, a convenience class for toggling visibility. */ | 
 | .popup-hidden { | 
 |     display: none; | 
 | } | 
 | /* In the test summary page, the styling for the uncovered rule popup. */ | 
 | .uncovered-rules-popup { | 
 |     position: absolute; | 
 |     left: -250px; | 
 |     width: 400px; | 
 |     background: var(--bg); | 
 |     border-radius: 4px; | 
 |     border: 1px solid; | 
 |     z-index: 1000; | 
 |     padding: 1rem; | 
 | } | 
 |  | 
 | /* The popup that shows when viewing tests for a specific rule. */ | 
 | .tests-popup { | 
 |     color: var(--fg); | 
 |     background: var(--bg); | 
 |     border-radius: 4px; | 
 |     border: 1px solid; | 
 |     z-index: 1000; | 
 |     padding: 1rem; | 
 | } | 
 |  | 
 | /* The box that contains the grammar. */ | 
 | .grammar-container { | 
 |     font-family: var(--mono-font); | 
 |     /* Enable absolute positioning for the target chevron. */ | 
 |     position: relative; | 
 |     background-color: var(--quote-bg); | 
 |     border-block-start: .1em solid var(--quote-border); | 
 |     border-block-end: .1em solid var(--quote-border); | 
 |     margin-top: 4px; | 
 |     margin-bottom: 4px; | 
 |     padding: 0 20px; | 
 | } | 
 |  | 
 | /* English words inside the grammar. */ | 
 | .grammar-text { | 
 |     font-family: "Open Sans", sans-serif; | 
 | } | 
 |  | 
 | /* Comments inside the grammar. */ | 
 | .grammar-comment { | 
 |     font-family: "Open Sans", sans-serif; | 
 |     color: var(--grammar-comment-color); | 
 | } | 
 | .grammar-comment code.hljs { | 
 |     background: var(--grammar-literal-bg); | 
 | } | 
 |  | 
 | /* Places a box around literals to differentiate from other grammar punctuation like | and ( . */ | 
 | .grammar-literal { | 
 |     font-family: var(--mono-font); | 
 |     border-radius: 4px; | 
 |     border: solid 1px var(--theme-popup-border); | 
 |     font-weight: bold; | 
 |     font-size: var(--code-font-size); | 
 |     padding: 1px 4px; | 
 |     color: var(--inline-code-color); | 
 | } | 
 |  | 
 | .grammar-literal { | 
 |     background-color: var(--grammar-literal-bg); | 
 | } | 
 |  | 
 | .grammar-production:target, .railroad-production:target { | 
 |     scroll-margin-top: 50vh; | 
 | } | 
 |  | 
 | .railroad-production { | 
 |     /* Enables absolute positioning of the target chevron. */ | 
 |     position: relative; | 
 | } | 
 |  | 
 | /* Adds an indicator to the targeted production name. */ | 
 | .grammar-production:target::before, .railroad-production:target::before { | 
 |     content: "ยป"; | 
 |     position: absolute; | 
 |     left: 3px; | 
 |     font-size: 2rem; | 
 |     font-weight: bolder; | 
 |     /* For some reason, the vertical alignment is slightly off center. This helps | 
 |        with that alignment. It was too difficult to try to fix that via | 
 |        absolute positioning. */ | 
 |     line-height: 1; | 
 | } | 
 |  | 
 | /* Overrides the positioning of the chevron from the rule above. */ | 
 | .railroad-production:target::before { | 
 |     left: -20px; | 
 |     top: 8px; | 
 | } | 
 |  | 
 | /* The toggle button. */ | 
 | .grammar-toggle-railroad { | 
 |     width: 160px; | 
 |     padding: 5px 0px; | 
 |     border-radius: 5px; | 
 |     cursor: pointer; | 
 | } | 
 |  | 
 | /* This is used to toggle the hidden status of the railroad diagrams. */ | 
 | .grammar-hidden { | 
 |     display: none; | 
 | } | 
 |  | 
 | svg.railroad { | 
 |     background-color: var(--railroad-background-color); | 
 |     background-size: 15px 15px; | 
 |     background-image: var(--railroad-background-image); | 
 | } | 
 |  | 
 | svg.railroad rect.railroad_canvas { | 
 |     stroke-width: 0px; | 
 |     fill: none; | 
 | } | 
 |  | 
 | svg.railroad path { | 
 |     stroke-width: 3px; | 
 |     stroke: var(--railroad-path-stroke); | 
 |     fill: none; | 
 | } | 
 |  | 
 | svg.railroad .debug { | 
 |     stroke-width: 1px; | 
 |     stroke: red; | 
 | } | 
 |  | 
 | svg.railroad text { | 
 |     font: 14px monospace; | 
 |     text-anchor: middle; | 
 |     fill: var(--railroad-text-fill); | 
 | } | 
 |  | 
 | svg.railroad .nonterminal text { | 
 |     font-weight: bold; | 
 | } | 
 |  | 
 | svg.railroad text.comment { | 
 |     font: italic 12px monospace; | 
 | } | 
 |  | 
 | svg.railroad rect { | 
 |     stroke-width: 3px; | 
 |     stroke: var(--railroad-rect-stroke); | 
 |     fill: var(--railroad-rect-fill); | 
 | } | 
 |  | 
 | svg.railroad g.labeledbox>rect { | 
 |     stroke-width: 1px; | 
 |     stroke: grey; | 
 |     stroke-dasharray: 5px; | 
 |     fill: rgba(90, 90, 150, .1); | 
 | } | 
 |  | 
 | svg.railroad g.exceptbox > rect { | 
 |     fill:rgba(245, 160, 125, .1); | 
 | } |