@namespace "http://www.w3.org/1998/Math/MathML";

:any-link {
    color: -webkit-link;
    cursor: auto;
}

:any-link:active {
    color: -webkit-activelink;
}

:focus {
    outline: auto 5px -webkit-focus-ring-color
}

math {
    display: inline;

    /*
    We use the exact bounding boxes of glyphs to avoid excessive gaps in mathematical formulas.
    FIXME: Should we replace this with a more general handling of ink/logical ascent/descent?
    See http://webkit.org/b/130326, http://webkit.org/b/156841 and
    http://www.mathml-association.org/MathMLinHTML5/S3.html#SS1.SSS1
    */
    -webkit-line-box-contain: glyphs replaced;

    /*
    Inheriting the following properties can cause excessive spacing of mathematical formulas so we
    just reset them to their default values.
    */
    text-indent: 0;
    line-height: normal;
    word-spacing: normal;
    letter-spacing: normal;

    /*
    In some countries and languages, text is written from right-to-left while mathematical formulas
    are written from left-to-write. Hence it is wrong to inherit the direction and we reset that
    property to left-to-write. Per the MathML specification, authors should explicitly use the "dir"
    attribute on the <math> element if they want to force the overall direction of the mathematical
    formulas.
    */
    direction: ltr;

    /*
    Mathematical formula inside an italic paragraph should not inherit the font-style as this gives
    poor rendering and is confusing with the mathvariant italic.
    */
    font-style: normal;

    /* Fonts with appropriate Unicode coverage and OpenType features are required for good math
    rendering. These requirements as well as the up-to-date list of known math fonts to fulfill
    these requirements are listed on http://trac.webkit.org/wiki/MathML/Fonts.
    Inheriting the font-family is likely to make MathML use text fonts that are not designed for
    math layout and thus would cause very poor mathematical rendering. Consequently, the default
    font-family on the <math> tag is set to a list of recommended math fonts.
    For best rendering, authors and readers are encouraged to use text and math fonts with consistent
    style (appearance, size...), see http://trac.webkit.org/wiki/MathML/Fonts#CustomizingMathFont
    FIXME: Should we make math font properties configurable (http://webkit.org/b/156843)?
    */
    font-family:
       /*
       This font has Computer Modern style and is provided with most TeX & Linux distributions.
       We put it as the default because its style is familiar to TeX, Wikipedia and math people.
       */
       "Latin Modern Math",

       /*
       The following fonts have Times style and are provided with most TeX & Linux distributions.
       We put XITS & STIX as a second option because they have very good unicode coverage.
       STIX Two is a complete redesign of STIX that fixes serious bugs in version one so we put it in first position.
       XITS is a fork of STIX with bug fixes and more Arabic/RTL features so we put it in second position.
       */
       "STIX Two Math",
       "XITS Math",
       "STIX Math",
       "Libertinus Math",
       "TeX Gyre Termes Math",

       /*
       These fonts respectively have style compatible with Bookman Old and Century Schoolbook.
       They are provided with most TeX & Linux distributions.
       */
       "TeX Gyre Bonum Math",
       "TeX Gyre Schola",

       /*
       DejaVu is pre-installed on many Linux distributions and is included in LibreOffice.
       */
       "DejaVu Math TeX Gyre",

       /*
       The following fonts have Palatino style and are provided with most TeX & Linux distributions.
       Asana Math has some rendering issues (e.g. missing italic correction) so we put it after.
       */
       "TeX Gyre Pagella Math",
       "Asana Math",

       /*
       The following fonts are proprietary and have not much been tested so we put them at the end.
       Cambria Math it is pre-installed on Windows 7 and higher.
       */
       "Cambria Math",
       "Lucida Bright Math",
       "Minion Math",

       /*
       The following fonts do not satisfy the requirements for good mathematical rendering.
       These are pre-installed on Mac and iOS so we list them to provide minimal unicode-based
       mathematical rendering. For more explanation of fallback mechanisms and missing features see
       http://trac.webkit.org/wiki/MathML/Fonts#ObsoleteFontsandFallbackMechanisms.
       STIX fonts have best unicode coverage so we put them first. */
       STIXGeneral,
       STIXSizeOneSym,
       Symbol,
       "Times New Roman",

       /* Mathematical fonts generally use "serif" style. Hence we append the generic "serif" family
       as a fallback in order to increase our chance to find a mathematical font. */
       serif;

    /* FIXME: Should we reset more CSS properties (http://webkit.org/b/156839)? */
}

math[display="block"] {
    display: block;
    page-break-inside: avoid;
}

ms, mspace, mtext, mi, mn, mo, mrow, mfenced, mfrac, msub, msup, msubsup, mmultiscripts, mprescripts, none, munder, mover, munderover, msqrt, mroot, merror, mphantom, mstyle, menclose, semantics, mpadded, maction {
    display: block;
}

ms, mtext, mi, mn, mo, annotation, mtd {
    white-space: nowrap !important;
}

msub > * + *, msup > * + *, msubsup > * + *, mmultiscripts > * + *, munder > * + *, mover > * + *, munderover > * + * {
    font-size: 0.75em; /* FIXME: MathML standard is 0.71em */
}
mroot > *:last-child {
    font-size: 0.5625em; /* This 0.75^2 since the scriptlevel is incremented by 2 in the index. */
}

mi {
    -webkit-padding-end: 0.1em;
}
msub > mi:first-child, msubsup > mi:first-child {
    -webkit-padding-end: 0;
}
msubsup > mi:first-child + * + * {
    -webkit-margin-start: 0.14em; /* This is larger than 0.1em because the child's font-size is smaller than the <msubsup>'s. */
}

math[mathsize="small"], mstyle[mathsize="small"], mo[mathsize="small"], mn[mathsize="small"], mi[mathsize="small"], mtext[mathsize="small"], mspace[mathsize="small"], ms[mathsize="small"] {
    font-size: 0.75em;
}

math[mathsize="normal"], mstyle[mathsize="normal"], mo[mathsize="normal"], mn[mathsize="normal"], mi[mathsize="normal"], mtext[mathsize="normal"], mspace[mathsize="normal"], ms[mathsize="normal"] {
    font-size: 1em;
}

math[mathsize="big"], mstyle[mathsize="big"], mo[mathsize="big"], mn[mathsize="big"], mi[mathsize="big"], mtext[mathsize="big"], mspace[mathsize="big"], ms[mathsize="big"] {
    font-size: 1.5em;
}
 
mphantom {
    visibility: hidden;
}

/* This is a special style for erroneous markup. */
merror {
    outline: solid thin red;
    font-weight: bold;
    font-family: sans-serif;
    background-color: lightYellow;
}

mtable {
    display: inline-table;
    text-align: center;
}

mtr {
    display: table-row;
}

mtd {
    display: table-cell;
    padding: 0.5ex;
}
/* Use inline-block for children so that the text-align property is taken into account */
mtd > * {
    display: inline-block;
}

mtable[columnalign="left"], mtr[columnalign="left"], mtd[columnalign="left"] {
    text-align: left;
}

mtable[columnalign="right"], mtr[columnalign="right"], mtd[columnalign="right"] {
    text-align: right;
}

mtable[rowalign="top"] mtd, mtable mtr[rowalign="top"] mtd, mtable mtr mtd[rowalign="top"] {
    vertical-align: top;
}

mtable[rowalign="bottom"] mtd, mtable mtr[rowalign="bottom"] mtd, mtable mtr mtd[rowalign="bottom"] {
    vertical-align: bottom;
}

mtable[rowalign="center"] mtd, mtable mtr[rowalign="center"] mtd, mtable mtr mtd[rowalign="center"] {
    vertical-align: middle;
}

mtable[frame="solid"] {
    border: solid thin;
}

mtable[frame="dashed"] {
    border: dashed thin;
}

mtable[rowlines="solid"], mtable[rowlines="dashed"], mtable[columnlines="solid"], mtable[columnlines="dashed"] {
    border-collapse: collapse;
}

mtable[rowlines="solid"] > mtr + mtr {
    border-top: solid thin;
}

mtable[rowlines="dashed"] > mtr + mtr {
    border-top: dashed thin;
}

mtable[columnlines="solid"] > mtr > mtd + mtd {
    border-left: solid thin;
}

mtable[columnlines="dashed"] > mtr > mtd + mtd {
    border-left: dashed thin;
}
