/*
:filename: wexa_statics/css/wexa.css
:author: Brigitte Bigi
:contact: contact@sppas.org
:summary: a CSS framework to make nice accessible web content

-------------------------------------------------------------------------

This file is part of Whakerexa: https://github.com/brigitte-bigi/Whakerexa

Copyright (C) 2023-2026 Brigitte Bigi, CNRS
Laboratoire Parole et Langage, Aix-en-Provence, France

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU Affero General Public License for more details.

You should have received a copy of the GNU Affero General Public License
along with this program.  If not, see <https://www.gnu.org/licenses/>.

This banner notice must not be removed.

-------------------------------------------------------------------------

*/

@layer reset, base, theme, accessibility;

/* =======================================================================
                              FONTS DEFINITIONS

  See here: https://v-fonts.com/licenses/open-source for a list of open
  source variable fonts.

  In most cases, the font size is computed from the global --font-size variable.
  For example:
    font-size: calc(1.7 * var(--font-size));
  This is used instead of:
    font-size: 1.7rem;
  because rem-based values are not updated when switching to the contrast view.

  ======================================================================== */

/* Each family is split into unicode-range subsets: a block is downloaded
   only when the page holds one of its characters. These rules are generated
   by scripts/build_fonts_subsets.py -- do not edit them by hand. */

@font-face {
    font-family: SansFont;
    src: url('../fonts/Commissioner-latin.woff2') format('woff2');
    font-display: swap;
    unicode-range: U+0000, U+000D, U+0020-007E, U+00A0-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2007-200B, U+2010, U+2012-2015, U+2018-201A, U+201C-201E, U+2020-2022, U+2026, U+2030, U+2032-2033, U+2039-203A, U+2044, U+2074, U+20AC, U+2122, U+2212, U+2215;
}

@font-face {
    font-family: SansFont;
    src: url('../fonts/Commissioner-latin-ext.woff2') format('woff2');
    font-display: swap;
    unicode-range: U+0100-0130, U+0134-0148, U+014A-0151, U+0154-017E, U+018F, U+0192, U+01A0-01A1, U+01AF-01B0, U+01C4-01CC, U+01E6-01E7, U+01EA-01EB, U+01FA-021B, U+022A-022D, U+0230-0233, U+0237, U+0259, U+0300-0304, U+0306-030C, U+030F, U+0311-0312, U+031B, U+0323-0324, U+0326-0328, U+032E, U+0331, U+1E08-1E09, U+1E0C-1E0F, U+1E14-1E17, U+1E1C-1E1D, U+1E20-1E21, U+1E24-1E25, U+1E2A-1E2B, U+1E2E-1E2F, U+1E36-1E37, U+1E3A-1E3B, U+1E42-1E49, U+1E4C-1E53, U+1E5A-1E5B, U+1E5E-1E69, U+1E6C-1E6F, U+1E78-1E7B, U+1E80-1E85, U+1E8E-1E8F, U+1E92-1E93, U+1E97, U+1E9E, U+1EF2-1EF9, U+20A1, U+20A3-20A4, U+20A6-20A7, U+20A9, U+20AB, U+20AD-20AE, U+20B1-20B2, U+20B4-20B5, U+20B8-20BA, U+20BC-20BD, U+2113;
}

@font-face {
    font-family: SansFont;
    src: url('../fonts/Commissioner-vietnamese.woff2') format('woff2');
    font-display: swap;
    unicode-range: U+1EA0-1EF1;
}

@font-face {
    font-family: SansFont;
    src: url('../fonts/Commissioner-greek.woff2') format('woff2');
    font-display: swap;
    unicode-range: U+0374-0375, U+037E, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03CE, U+03D7;
}

@font-face {
    font-family: SansFont;
    src: url('../fonts/Commissioner-cyrillic.woff2') format('woff2');
    font-display: swap;
    unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}

@font-face {
    font-family: SansFont;
    src: url('../fonts/Commissioner-cyrillic-ext.woff2') format('woff2');
    font-display: swap;
    unicode-range: U+0462-0463, U+046A-046B, U+0472-0475, U+048A-048F, U+0492-04AF, U+04B2-04FF, U+0510-0513, U+051A-051D, U+0524-0529, U+052E-052F;
}

@font-face {
    font-family: SansFont;
    src: url('../fonts/Commissioner-other.woff2') format('woff2');
    font-display: swap;
    unicode-range: U+02BE-02BF, U+02C7-02CC, U+02D8-02D9, U+02DB, U+02DD, U+2070, U+2075-2079, U+2080-2089, U+2126, U+212E, U+2202, U+2205-2206, U+220F, U+2211, U+2219-221A, U+221E, U+222B, U+2248, U+2260, U+2264-2265, U+25CA, U+FB01-FB02;
}

@font-face {
    font-family: SerifFont;
    src: url('../fonts/SourceSerifPro-latin.woff2') format('woff2');
    font-display: swap;
    unicode-range: U+0020-007E, U+00A0-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2007, U+2010, U+2012-2015, U+2018-201A, U+201C-201E, U+2020-2022, U+2025-2026, U+2030, U+2032-2033, U+2039-203A, U+203C, U+2044, U+2047-2049, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215;
}

@font-face {
    font-family: SerifFont;
    src: url('../fonts/SourceSerifPro-latin-ext.woff2') format('woff2');
    font-display: swap;
    unicode-range: U+0100-012B, U+012E-0130, U+0134-0149, U+014C-0151, U+0154-0165, U+0168-017F, U+018F, U+0192, U+01A0-01A1, U+01AF-01B0, U+01CD-01DC, U+01E6-01E7, U+01F8-01F9, U+0218-021B, U+0237, U+0251, U+0259, U+0261, U+0300-0304, U+0306-030C, U+031B, U+0323-0324, U+0326-0329, U+032E, U+0331, U+1E0C-1E0F, U+1E20-1E21, U+1E24-1E25, U+1E2A-1E2B, U+1E36-1E3B, U+1E3E-1E3F, U+1E42-1E49, U+1E5A-1E63, U+1E6C-1E6F, U+1E80-1E85, U+1E8E-1E8F, U+1E92-1E93, U+1E97, U+1E9E, U+1EF2-1EF9, U+20A1, U+20A4, U+20A6-20A7, U+20A9, U+20AB, U+20AE, U+20B1-20B2, U+20B4-20B5, U+20B8-20BA, U+20BD, U+20BF, U+2113;
}

@font-face {
    font-family: SerifFont;
    src: url('../fonts/SourceSerifPro-vietnamese.woff2') format('woff2');
    font-display: swap;
    unicode-range: U+1EA0-1EF1;
}

@font-face {
    font-family: SerifFont;
    src: url('../fonts/SourceSerifPro-greek.woff2') format('woff2');
    font-display: swap;
    unicode-range: U+0374-0375, U+037E, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03CE, U+03D7, U+03D9, U+03DB, U+03DD, U+03E1;
}

@font-face {
    font-family: SerifFont;
    src: url('../fonts/SourceSerifPro-cyrillic.woff2') format('woff2');
    font-display: swap;
    unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}

@font-face {
    font-family: SerifFont;
    src: url('../fonts/SourceSerifPro-cyrillic-ext.woff2') format('woff2');
    font-display: swap;
    unicode-range: U+0462-0463, U+0472-0475, U+0492-0493, U+0496-049B, U+04A0-04A3, U+04AA-04AB, U+04AE-04AF, U+04B2-04B3, U+04B6-04B7, U+04BA-04BB, U+04C0-04C2, U+04CF-04D1, U+04D4-04D9, U+04E2-04E3, U+04E6-04E9, U+04EE-04EF, U+04F2-04F3;
}

@font-face {
    font-family: SerifFont;
    src: url('../fonts/SourceSerifPro-other.woff2') format('woff2');
    font-display: swap;
    unicode-range: U+02B0, U+02B2-02B3, U+02B7-02B8, U+02BE-02BF, U+02C7-02CC, U+02D8-02D9, U+02DB, U+02DD, U+02E1-02E3, U+1D43, U+1D47-1D49, U+1D4D, U+1D4F-1D50, U+1D52, U+1D56-1D58, U+1D5B, U+1D9C, U+1DA0, U+1DBB, U+2070-2071, U+2075-2079, U+207D-2089, U+208D-208E, U+2117, U+2120, U+2126, U+212E, U+2153-2154, U+215B-215E, U+2190, U+2192, U+2196-2199, U+2202, U+2206, U+220F, U+2211, U+2219-221A, U+221E, U+222B, U+2248, U+2260, U+2264-2265, U+25A0, U+25B2-25B3, U+25B6-25B7, U+25BC-25BD, U+25C0-25C1, U+25C6, U+25C9-25CA, U+2610-2611, U+266A, U+2713, U+2752, U+2E3A-2E3B, U+FB00-FB04, U+1F12F, U+1F16A-1F16B;
}

@font-face {
    font-family: ContrastFont;
    src: url('../fonts/AccessibleDfA-Regular-latin.woff2') format('woff2');
    font-style: normal;
    font-weight: normal;
    unicode-range: U+0020-007E, U+00A0-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2012-2022, U+2026, U+202F-2030, U+2032-2034, U+2039-203A, U+203C, U+2044, U+20AC, U+2122, U+2212, U+2215;
}

@font-face {
    font-family: ContrastFont;
    src: url('../fonts/AccessibleDfA-Regular-latin-ext.woff2') format('woff2');
    font-style: normal;
    font-weight: normal;
    unicode-range: U+0100-0130, U+0132-0151, U+0154-017F, U+0189, U+018E-018F, U+0192, U+0197, U+019A, U+019C, U+01B5-01B6, U+01BB, U+01C4-01D4, U+01D9-01DA, U+01DD, U+01E1-01E3, U+01E6-01ED, U+01F0-01F5, U+01F8-01F9, U+01FC-021B, U+021E-021F, U+0226-0229, U+022E-022F, U+0231-0233, U+0237, U+023A-023E, U+0245-0247, U+024C-024F, U+0258-025A, U+025F, U+0262, U+0268, U+026A, U+026F, U+0274, U+0276, U+0279-027A, U+0280-0281, U+0287, U+028C-028F, U+0299, U+029C, U+029E-029F, U+02A3, U+02A6-02A7, U+02AA-02AB, U+0300-0304, U+0307, U+030B-030F, U+0311-0317, U+031F-0323, U+0326-0329, U+032C-0331, U+0334-0338, U+033D, U+0348, U+034A-034C, U+0350, U+0353-0356, U+0358, U+035E-035F, U+0361, U+0363-036F, U+1E02-1E13, U+1E15, U+1E17-1E19, U+1E1E-1E25, U+1E28-1E29, U+1E30-1E4B, U+1E53, U+1E56-1E63, U+1E66-1E71, U+1E76-1E77, U+1E7E-1E7F, U+1E86-1E8B, U+1E8E-1E96, U+1E9B, U+1EF4-1EF5, U+20A0-20A9, U+20BF, U+2C7C, U+A730-A731, U+A734-A739;
}

@font-face {
    font-family: ContrastFont;
    src: url('../fonts/AccessibleDfA-Regular-vietnamese.woff2') format('woff2');
    font-style: normal;
    font-weight: normal;
    unicode-range: U+1EA0-1EA1, U+1EAC-1EAD, U+1EB8-1EB9, U+1EC6-1EC7, U+1ECA-1ECD, U+1ED8-1ED9, U+1EE4-1EE5;
}

@font-face {
    font-family: ContrastFont;
    src: url('../fonts/AccessibleDfA-Regular-greek.woff2') format('woff2');
    font-style: normal;
    font-weight: normal;
    unicode-range: U+037E, U+03D6;
}

@font-face {
    font-family: ContrastFont;
    src: url('../fonts/AccessibleDfA-Regular-cyrillic.woff2') format('woff2');
    font-style: normal;
    font-weight: normal;
    unicode-range: U+0412, U+0415, U+041C-041E, U+0420-0422, U+0425, U+0430, U+0435, U+043E, U+0440-0441, U+0445, U+0450-0451, U+0455-0457, U+2116;
}

@font-face {
    font-family: ContrastFont;
    src: url('../fonts/AccessibleDfA-Regular-cyrillic-ext.woff2') format('woff2');
    font-style: normal;
    font-weight: normal;
    unicode-range: U+04D4-04D5, U+04DA-04DB, U+04EF;
}

@font-face {
    font-family: ContrastFont;
    src: url('../fonts/AccessibleDfA-Regular-other.woff2') format('woff2');
    font-style: normal;
    font-weight: normal;
    unicode-range: U+02B0, U+02B2-02B4, U+02B6-02BA, U+02BD, U+02C2-02C5, U+02C7-02CF, U+02D6-02D9, U+02DB, U+02DD, U+02E2-02E3, U+02ED-02F2, U+02F4-02F7, U+1D00-1D07, U+1D0A-1D0D, U+1D0F, U+1D11, U+1D13-1D14, U+1D18, U+1D1B-1D1C, U+1D20-1D22, U+1D62-1D65, U+2080-208E, U+2090-209C, U+2103, U+2109, U+2126, U+2153-215E, U+2183-2184, U+2200-2211, U+2213-2214, U+2216-224D, U+2250-228B, U+228F-229D, U+229F, U+22A1-22BA, U+22BC-22CC, U+22D4, U+22D6-22FF, U+2303-2304, U+2324, U+2326-2327, U+232B, U+237B, U+237D, U+2401-2409, U+2410-2419, U+2420-2424, U+25AC-25AF, U+25C9-25CA, U+25CE, U+2610-2612, U+2639-263B, U+270E-2710, U+2713-2714, U+2726-2728, U+2A7D-2A7E, U+2B05-2B07, U+2B95, U+FB00-FB04, U+1F44D-1F44E, U+1F5D9, U+1F5F9, U+1F600-1F60D, U+1F60F, U+1F642-1F643, U+F0000-F000F;
}

@font-face {
    font-family: ContrastFont;
    src: url('../fonts/AccessibleDfA-Italic-latin.woff2') format('woff2');
    font-weight: normal;
    font-style: italic;
    unicode-range: U+0020-007E, U+00A0-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2012-2022, U+2026, U+202F-2030, U+2032-2034, U+2039-203A, U+203C, U+2044, U+20AC, U+2122, U+2212, U+2215;
}

@font-face {
    font-family: ContrastFont;
    src: url('../fonts/AccessibleDfA-Italic-latin-ext.woff2') format('woff2');
    font-weight: normal;
    font-style: italic;
    unicode-range: U+0100-0130, U+0132-0151, U+0154-017F, U+0189, U+018E-018F, U+0192, U+0197, U+019A, U+019C, U+01B5-01B6, U+01BB, U+01C4-01D4, U+01D9-01DA, U+01DD, U+01E1-01E3, U+01E6-01E9, U+01F0-01F5, U+01F8-01F9, U+01FC-021B, U+021E-021F, U+0226-0229, U+022E-022F, U+0231-0233, U+0237, U+023A-023E, U+0245-0247, U+024C-024F, U+0258-025A, U+025F, U+0262, U+0268, U+026A, U+026F, U+0274, U+0276, U+0279-027A, U+0280-0281, U+0287, U+028C-028F, U+0299, U+029C, U+029E-029F, U+02A3, U+02A6-02A7, U+02AA-02AB, U+0300-0304, U+0307, U+030B-030F, U+0311-0317, U+031F-0323, U+0326-0328, U+032C-0331, U+0334-0338, U+033D, U+0348, U+034A-034C, U+0350, U+0354-0356, U+0358, U+035E-035F, U+0361, U+0363-036F, U+1E02-1E13, U+1E15, U+1E17-1E19, U+1E1E-1E25, U+1E28-1E29, U+1E30-1E4B, U+1E53, U+1E56-1E63, U+1E66-1E71, U+1E76-1E77, U+1E7E-1E7F, U+1E84-1E8B, U+1E8E-1E96, U+1E9B, U+1EF4-1EF5, U+20A0-20A9, U+20BF, U+2C7C, U+A730-A731, U+A734-A739;
}

@font-face {
    font-family: ContrastFont;
    src: url('../fonts/AccessibleDfA-Italic-vietnamese.woff2') format('woff2');
    font-weight: normal;
    font-style: italic;
    unicode-range: U+1EA0-1EA1, U+1EAC-1EAD, U+1EB8-1EB9, U+1EC6-1EC7, U+1ECA-1ECD, U+1ED8-1ED9, U+1EE4-1EE5;
}

@font-face {
    font-family: ContrastFont;
    src: url('../fonts/AccessibleDfA-Italic-greek.woff2') format('woff2');
    font-weight: normal;
    font-style: italic;
    unicode-range: U+037E, U+03D6;
}

@font-face {
    font-family: ContrastFont;
    src: url('../fonts/AccessibleDfA-Italic-cyrillic.woff2') format('woff2');
    font-weight: normal;
    font-style: italic;
    unicode-range: U+0412, U+0415, U+041C-041E, U+0420-0422, U+0425, U+0430, U+0435, U+043E, U+0440-0441, U+0445, U+0450-0451, U+0455-0457, U+2116;
}

@font-face {
    font-family: ContrastFont;
    src: url('../fonts/AccessibleDfA-Italic-cyrillic-ext.woff2') format('woff2');
    font-weight: normal;
    font-style: italic;
    unicode-range: U+04DA-04DB, U+04EF;
}

@font-face {
    font-family: ContrastFont;
    src: url('../fonts/AccessibleDfA-Italic-other.woff2') format('woff2');
    font-weight: normal;
    font-style: italic;
    unicode-range: U+02B0, U+02B2-02B4, U+02B6-02BA, U+02BD, U+02C2-02C5, U+02C7-02CF, U+02D6-02D9, U+02DB, U+02DD, U+02E2-02E3, U+02ED-02F2, U+02F4-02F7, U+1D00-1D07, U+1D0A-1D0D, U+1D0F, U+1D11, U+1D13-1D14, U+1D18, U+1D1B-1D1C, U+1D20-1D22, U+1D62-1D65, U+2080-208E, U+2090-209C, U+2103, U+2109, U+2126, U+2153-215E, U+2183-2184, U+2200-2211, U+2213-2214, U+2216-224D, U+2250-228B, U+228F-229D, U+229F, U+22A1-22BA, U+22BC-22CC, U+22D4, U+22D6-22FF, U+2303-2304, U+2324, U+2326-2327, U+232B, U+237B, U+237D, U+2401-2409, U+2410-2419, U+2420-2424, U+25AC-25AF, U+25C9-25CA, U+25CE, U+2610-2612, U+2639-263B, U+270E-2710, U+2713-2714, U+2726-2728, U+2A7D-2A7E, U+2B05-2B07, U+2B95, U+FB00-FB04, U+1F44D-1F44E, U+1F5D9, U+1F5F9, U+1F600-1F60D, U+1F60F, U+1F642-1F643, U+F0000-F000F;
}

@font-face {
    font-family: ContrastFont;
    src: url('../fonts/AccessibleDfA-Bold-latin.woff2') format('woff2');
    font-style: normal;
    font-weight: bold;
    unicode-range: U+0020-007E, U+00A0-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2012-2022, U+2026, U+202F-2030, U+2032-2034, U+2039-203A, U+203C, U+2044, U+20AC, U+2122, U+2212, U+2215;
}

@font-face {
    font-family: ContrastFont;
    src: url('../fonts/AccessibleDfA-Bold-latin-ext.woff2') format('woff2');
    font-style: normal;
    font-weight: bold;
    unicode-range: U+0100-0130, U+0132-0151, U+0154-017F, U+0189, U+018E-018F, U+0192, U+0197, U+019A, U+019C, U+01B5-01B6, U+01BB, U+01C4-01D4, U+01D9-01DA, U+01DD, U+01E1-01E3, U+01E6-01E9, U+01F0-01F5, U+01F8-01F9, U+01FC-021B, U+021E-021F, U+0226-0229, U+022E-022F, U+0231-0233, U+0237, U+023A-023E, U+0245-0247, U+024C-024F, U+0258-025A, U+025F, U+0262, U+0268, U+026A, U+026F, U+0274, U+0276, U+0279-027A, U+0280-0281, U+0287, U+028C-028F, U+0299, U+029C, U+029E-029F, U+02A3, U+02A6-02A7, U+02AA-02AB, U+0300-0304, U+0307, U+030B-030F, U+0311-0317, U+031F-0323, U+0326-0328, U+032C-0331, U+0334-0338, U+033D, U+0348, U+034A-034C, U+0350, U+0354-0356, U+0358, U+035E-035F, U+0361, U+0363-036F, U+1E02-1E13, U+1E15, U+1E17-1E19, U+1E1E-1E25, U+1E28-1E29, U+1E30-1E31, U+1E34-1E4B, U+1E53, U+1E56-1E5F, U+1E62-1E63, U+1E66-1E71, U+1E76-1E77, U+1E7E-1E7F, U+1E84-1E8B, U+1E8E-1E96, U+1E9B, U+1EF4-1EF5, U+20A0-20A9, U+20BF, U+2C7C, U+A730-A731, U+A734-A739;
}

@font-face {
    font-family: ContrastFont;
    src: url('../fonts/AccessibleDfA-Bold-vietnamese.woff2') format('woff2');
    font-style: normal;
    font-weight: bold;
    unicode-range: U+1EA0-1EA1, U+1EAC-1EAD, U+1EB8-1EB9, U+1EC6-1EC7, U+1ECA-1ECD, U+1ED8-1ED9, U+1EE4-1EE5;
}

@font-face {
    font-family: ContrastFont;
    src: url('../fonts/AccessibleDfA-Bold-greek.woff2') format('woff2');
    font-style: normal;
    font-weight: bold;
    unicode-range: U+037E, U+03D6;
}

@font-face {
    font-family: ContrastFont;
    src: url('../fonts/AccessibleDfA-Bold-cyrillic.woff2') format('woff2');
    font-style: normal;
    font-weight: bold;
    unicode-range: U+0412, U+0415, U+041C-041E, U+0420-0422, U+0425, U+0430, U+0435, U+043E, U+0440-0441, U+0445, U+0450-0451, U+0455-0457, U+2116;
}

@font-face {
    font-family: ContrastFont;
    src: url('../fonts/AccessibleDfA-Bold-cyrillic-ext.woff2') format('woff2');
    font-style: normal;
    font-weight: bold;
    unicode-range: U+04DA-04DB, U+04EF;
}

@font-face {
    font-family: ContrastFont;
    src: url('../fonts/AccessibleDfA-Bold-other.woff2') format('woff2');
    font-style: normal;
    font-weight: bold;
    unicode-range: U+02B0, U+02B2-02B4, U+02B6-02BA, U+02BD, U+02C2-02C5, U+02C7-02CF, U+02D6-02D9, U+02DB, U+02DD, U+02E2-02E3, U+02ED-02F2, U+02F4-02F7, U+1D00-1D01, U+1D03-1D07, U+1D0A-1D0D, U+1D0F, U+1D11, U+1D13-1D14, U+1D18, U+1D1B-1D1C, U+1D20-1D22, U+1D62-1D65, U+2080-208E, U+2090-209C, U+2103, U+2109, U+2126, U+2153-215E, U+2183-2184, U+2200-2211, U+2213-2214, U+2216-224D, U+2250-228B, U+228F-229D, U+229F, U+22A1-22BA, U+22BC-22CC, U+22D4, U+22D6-22FF, U+2303-2304, U+2324, U+2326-2327, U+232B, U+237B, U+237D, U+2401-2409, U+2410-2419, U+2420-2424, U+25AC-25AF, U+25C9-25CA, U+25CE, U+2610-2612, U+2639-263B, U+270E-2710, U+2713-2714, U+2726-2728, U+2A7D-2A7E, U+2B05-2B07, U+2B95, U+FB00-FB04, U+1F44D-1F44E, U+1F5D9, U+1F5F9, U+1F600-1F60D, U+1F60F, U+1F642-1F643, U+F0000-F000F;
}

/* =======================================================================
                        KEYFRAMES DEFINITIONS
  ========================================================================
 */

@keyframes slideInFromLeft {
    0% {
        transform: translateX(-100%);
    }
    100% {
        transform: translateX(0);
    }
}

@keyframes slideInFromRight {
    0% {
        transform: translateX(100%);
    }
    100% {
        transform: translateX(0);
    }
}

@keyframes slideInFromTop {
    0% {
        transform: translateY(-100%);
    }
    100% {
        transform: translateX(0);
    }
}

@keyframes slideInFromBottom {
    0% {
        transform: translateY(100%);
    }
    100% {
        transform: translateX(0);
    }
}

@keyframes animDisabled {
    100% {
        transform: none;
    }
}

/* No display in these frames: it is a discrete property, and a first frame
   that hides the element keeps the animation from ever running -- what opens
   a details never showed itself again. */
@keyframes fadeIn {
    0% {
        opacity: 0;
        transform: scaleY(0);
    }

    100% {
        opacity: 1;
        transform: scaleY(1);
    }
}

@keyframes fadeOut {
    0% {
        opacity: 1;
        transform: scaleY(1);
        display: block;
    }

    100% {
        opacity: 0;
        transform: scaleY(0);
        display: none;
    }
}

@keyframes animprogress {
    from { background-color: var(--progress-bg-color); }
    to { background-color: var(--footer-bg-color); }
}

/* =======================================================================
                      SCREEN ADAPTATION VARIABLES
  ======================================================================== */


@layer base {

    /* The ladder below names device classes, not round numbers. The wider the
       screen, the smaller the divisors: a component grows when --size-divisor
       goes down, and the text grows when --fontsize-divisor goes down.

       1024px is the single mobile/desktop border of the framework. Under it,
       the menu is the mobile one and the text is written a bit larger, which
       is what a tablet held vertically asks for. The nav, the panels and the
       cards all switch at that very width. */

    :root {
        --size-divisor: 1.5;
        --fontsize-divisor: 1;
    }

    /* Smartphone, portrait: 320 to 430px wide */
    @media screen and (max-width: 540px) {
        :root {
            --size-divisor: 1.5;
            --fontsize-divisor: 1;
        }
    }

    /* Large smartphone in portrait, narrow smartphone in landscape */
    @media screen and (min-width: 540px) {
        :root {
            --size-divisor: 1.5;
            --fontsize-divisor: 1;
        }
    }

    /* Smartphone, landscape: 640 to 932px wide */
    @media screen and (min-width: 620px) {
        :root {
            --size-divisor: 1.4;
            --fontsize-divisor: 1.05;
        }
    }

    /* Tablet, portrait: 768 to 834px wide. Mobile menu, larger text. */
    @media screen and (min-width: 768px) {
        :root {
            --size-divisor: 1.3;
            --fontsize-divisor: 1.1;
        }
    }

    /* Widest smartphone in landscape, up to 932px, and tablet in portrait */
    @media screen and (min-width: 896px) {
        :root {
            --size-divisor: 1.2;
            --fontsize-divisor: 1.18;
        }
    }

    /* Tablet in landscape, and computer: the desktop display starts here */
    @media screen and (min-width: 1024px) {
        :root {
            --size-divisor: 1.1;
            --fontsize-divisor: 1.1;
        }
    }

    /* Laptop */
    @media screen and (min-width: 1200px) {
        :root {
            --size-divisor: 1.0;
            --fontsize-divisor: 1.0;
        }
    }

    /* Wide desktop screen */
    @media screen and (min-width: 1400px) {
        :root {
            --size-divisor: 0.9;
            --fontsize-divisor: 0.95;
        }
    }

    /* Very wide desktop screen */
    @media screen and (min-width: 1600px) {
        :root {
            --size-divisor: 0.8;
            --fontsize-divisor: 0.9;
        }
    }
} 
/* end @layer base: responsive divisors */


@layer theme {

    @media not print {
        :root {
            /* Sizes */
            /* Animations and transitions */
            --header-slidein: slideInFromBottom;
            --footer-slidein: animDisabled;
            --transition: 0.4s ease-in-out;
        }
    }

} 
/* end @layer theme: animation variables */



@layer base {

    :root {
        /* Sizes */
        --header-height: 40vh;
        --footer-height: 20vh;
        --skip-height: calc(var(--font-size) * 2);

        /* Font definitions */
        --font-family-sans: system-ui, -apple-system, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Helvetica Neue', Arial, sans-serif;
        --font-family-serif: ui-serif, Georgia, Cambria, 'Times New Roman', Times, serif;
        --font-family-mono: ui-monospace, 'DejaVu Sans Mono', 'Liberation Mono', 'Cascadia Mono', 'Segoe UI Mono', monospace;
        --font-family-pre: ui-monospace, 'DejaVu Sans Mono', 'Liberation Mono', 'Cascadia Mono', 'Segoe UI Mono', monospace;

        /* Pictures */
        --external-link-icon: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAVIAAAFSCAYAAACg1VfvAAAAxXpUWHRSYXcgcHJvZmlsZSB0eXBlIGV4aWYAAHjabVBbDsMgDPvnFDsCeQDhOHTtpN1gx58htGqrWsIxCZiQsP2+n/DqYNKgqViuOUdAq1ZuEBYdbTBFHTyQeCq65sNR6FEQxQuWPdKenxf2SA0qnYzsPQvLtVDVI9vNaD4kvSOGWKdRnUbCXqBp0PxbMVcr5y8sW7zCfIVOUob3YXLfa8H01oSkMG9CEsEi6g1IXxKkQdjgjIMkBRpHwQxD7wQDeZrTjvAH74JZJJMqBocAAAGEaUNDUElDQyBwcm9maWxlAAB4nH2RPUjDQBzFX1u1VSod7CDikKE62cUvHGsVilAh1AqtOphc+iE0aUhSXBwF14KDH4tVBxdnXR1cBUHwA8TVxUnRRUr8X1JoEePBcT/e3XvcvQP8jQpTza4EoGqWkUklhVx+RQi+IoQeRNCLKYmZ+qwopuE5vu7h4+tdnGd5n/tz9CsFkwE+gTjBdMMiXiee3rR0zvvEUVaWFOJz4jGDLkj8yHXZ5TfOJYf9PDNqZDNzxFFiodTBcgezsqESTxLHFFWjfH/OZYXzFme1UmOte/IXhgva8hLXaQ4jhQUsQoQAGTVsoAILcVo1UkxkaD/p4R9y/CK5ZHJtgJFjHlWokBw/+B/87tYsToy7SeEk0P1i2x8jQHAXaNZt+/vYtpsnQOAZuNLa/moDmPkkvd7WYkdAZBu4uG5r8h5wuQMMPumSITlSgKa/WATez+ib8sDALdC36vbW2sfpA5ClrtI3wMEhMFqi7DWPd4c6e/v3TKu/H35FcqusUZcdAAAOXmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNC40LjAtRXhpdjIiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iCiAgICB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIgogICAgeG1sbnM6R0lNUD0iaHR0cDovL3d3dy5naW1wLm9yZy94bXAvIgogICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgIHhtcE1NOkRvY3VtZW50SUQ9ImdpbXA6ZG9jaWQ6Z2ltcDo2NTQzZDNlNy00N2U4LTRmZjEtYWNmNC05ZmFiYThkNDhmMjQiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6YWQxNWFlNDgtYTU4ZC00Y2M4LTk2ODMtMGM3OTdlYWM0ZGNhIgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6OGJiMjkwNTAtZWY4My00ZjIwLWEwOTktZGI4OGI5MDY2NWRkIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJNYWMgT1MiCiAgIEdJTVA6VGltZVN0YW1wPSIxNjkxMzM0NjI3NTUzMTA1IgogICBHSU1QOlZlcnNpb249IjIuMTAuMzQiCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICB0aWZmOk9yaWVudGF0aW9uPSIxIgogICB4bXA6Q3JlYXRvclRvb2w9IkdJTVAgMi4xMCIKICAgeG1wOk1ldGFkYXRhRGF0ZT0iMjAyMzowODowNlQxNzoxMDoyNyswMjowMCIKICAgeG1wOk1vZGlmeURhdGU9IjIwMjM6MDg6MDZUMTc6MTA6MjcrMDI6MDAiPgogICA8eG1wTU06SGlzdG9yeT4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo3OTdjZjA5Yy02NzVlLTQ2OGQtYTU1ZC03YmQxNjQxMDJiYmYiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTWFjIE9TKSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyMy0wOC0wNVQxMDo1NDo1OSswMjowMCIvPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo3OGRlZmEyYS0zOTg1LTRhNWEtOGI0OS01MzkzYzhmMDVjYjIiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTWFjIE9TKSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyMy0wOC0wNlQxNzoxMDoyNyswMjowMCIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz4O3yALAAAABmJLR0QA/QD/AP6tesRlAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH5wgGDwobqVjz3AAAIABJREFUeNrtnUeQZOW5pp9Tvqs90EBjEhqE90aAQCCshBfiohuhuTF37mIWM72dhSJ6OYuMuavZZcREzNyJiZiJaxBOQGNagBAeCd/Cu67upr2pLp/uzOL7fs6ppExWVWZV5qn3icgo29VV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");
        --checked-icon: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAAw3pUWHRSYXcgcHJvZmlsZSB0eXBlIGV4aWYAAHjabVBbEsMgCPznFD0CAjF6HPPoTG/Q43cVkkky3YwLsrhRaP9+3vTqkGRk01xyzZkBq1alISnsaIMT2+CBQ8L+VqdTEJQUUeNAjv6jnk4DDw3ZdDVaQ1juQrXwLw8j8aD9Rj3fwqiGkYoLKQyaP4tzLfP1CcvOdxRf1EnWaIvm595mTG+b8B8V2TUpg1XNL6B9GWlDYoMFjQlfzxlsWsIMA/k3pwP0AxKrWWSvqOq4AAABhGlDQ1BJQ0MgcHJvZmlsZQAAeJx9kT1Iw0AcxV/TSotUHOwg4pChOtlFRQWXWoUiVAi1QqsOJpd+QZOGJMXFUXAtOPixWHVwcdbVwVUQBD9AnB2cFF2kxP+lhRYxHhz34929x907QGhUmGYF4oCm22Y6mRCzuVUx+IoABIQwi2mZWcacJKXgOb7u4ePrXYxneZ/7c/SpeYsBPpE4zgzTJt4gntq0Dc77xBFWklXic+Ixky5I/Mh1pcVvnIsuCzwzYmbS88QRYrHYxUoXs5KpEU8SR1VNp3wh22KV8xZnrVJj7XvyF4bz+soy12kOI4lFLEGCCAU1lFGBjRitOikW0rSf8PAPuX6JXAq5ymDkWEAVGmTXD/4Hv7u1ChPjraRwAuh5cZyPESC4CzTrjvN97DjNE8D/DFzpHX+1Acx8kl7vaNEjoH8buLjuaMoecLkDDD4Zsim7kp+mUCgA72f0TTlg4BboXWv11t7H6QOQoa5SN8DBITBapOx1j3eHunv790y7vx/c7XLRbqffzwAADXppVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+Cjx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDQuNC4wLUV4aXYyIj4KIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgIHhtbG5zOkdJTVA9Imh0dHA6Ly93d3cuZ2ltcC5vcmcveG1wLyIKICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIgogICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICB4bXBNTTpEb2N1bWVudElEPSJnaW1wOmRvY2lkOmdpbXA6OGViNGE0OGYtZjkxMi00NTY3LTgzMWYtNDlmNTY5NDgzMWYyIgogICB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjgxYTVkMTEwLTJlZjEtNDUyYi05ZDFmLTRhMWI0MTRjMmIzNCIKICAgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOmJhNmE1Mjc1LThlNjMtNGI2ZC1iMzI2LTRiNTNkZjUwNmU0ZiIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iTWFjIE9TIgogICBHSU1QOlRpbWVTdGFtcD0iMTcxMjA0ODQ0OTc0NDkzMCIKICAgR0lNUDpWZXJzaW9uPSIyLjEwLjM0IgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgdGlmZjpPcmllbnRhdGlvbj0iMSIKICAgeG1wOkNyZWF0b3JUb29sPSJHSU1QIDIuMTAiCiAgIHhtcDpNZXRhZGF0YURhdGU9IjIwMjQ6MDQ6MDJUMTE6MDA6NDgrMDI6MDAiCiAgIHhtcDpNb2RpZnlEYXRlPSIyMDI0OjA0OjAyVDExOjAwOjQ4KzAyOjAwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6YTNkMTI1NmMtOWFiYi00YjJiLTg4NGQtYTc4ZDFhMWVmODYyIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKE1hYyBPUykiCiAgICAgIHN0RXZ0OndoZW49IjIwMjQtMDQtMDJUMTE6MDA6NDkrMDI6MDAiLz4KICAgIDwvcmRmOlNlcT4KICAgPC94bXBNTTpIaXN0b3J5PgogIDwvcmRmOkRlc2NyaXB0aW9uPgogPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8+tdDmQwAAAAZiS0dEADcAcQCih6kfSgAAAAlwSFlzAAAuIwAALiMBeKU/dgAAAAd0SU1FB+gEAgkAMTdFZrEAAAa1SURBVHja7Z17iBVVHMc/M+22u+66q66pmfmoIFNCQaN8lpElBpaEmSU9TYLogStCBFJSgf5hWaBJEUFQSmVYUSA+0Cyzh5aWZYma2rsEdVcpc6c/Zm5ctn3cO3Pm3jkz3w/8/r1z+H7PnDvn8fsdEEIIIYQQQgiRMmpqahzHcbpJiWwyEfgCeFVSZIsBwGrAy4tbJEvKcV23ElgANLcx3wOOAYOkUnoZC3zVjvH5sbmqqsqVVCnCcZzuwHKgtQvzPWAncI5USw/XA4cKML4VeNFxnBpJlo63vgF4uQDjPeAkMEeqpYfrCnzrPeAwMEaSpeOtrwWWFWi8B2wDzpNy6WAEsKcI81dr9S89zANOFWH+4vr6ekey2T/kNwLvFmH8aWCulEsH44r40POAFmCqZEsH84O3uVDzjwYdRlg+5NcBa4ow3gtGiWFSz36GAt8Vaf4BYLCks5/ptL9711l8i7/lK2yltrbWARZR2CZO2w2dPlLQ7v/72hD/9x6w3XGcnlLQbgYFb3Gx5m9zHKde8tnNGOCnEOZ/LPPt52b8BZtizf802P4VFtMU4mPPA3Y5jtNL8llKZWWlC6wIYbwHfA+cKxXt/dLvBrwT0vyDwECpaK/5vYCtIc0/DAyRivYyENgb0vyjwHBJaC8XAz+ENL8Z7epZP8f/I6T5fwHXSEJ7uZLiN3Tyz+zfLgntZQr+2XsvZDwoCe1lZjB8hzX/WUloL3cB/0Qwf1WPHj10etdS7iXc0m4utihPz17mRjR/n9b37eW+iOb/BlwgGe0134sQJ4HxkjGbw34rMFsyZvODzwMel4x2crcB81c1NDRoumchs4AzEc3frjRtO5kK/B3R/CMoecNKJhFtbT/3xa/SLBYylvC7evmh3T0LGY5/Iieq+UslpX0Mxj+LF9X89RUVFWdJTrvoA+wzYP5+rfFbRpCkuc2A+S3ASClqEa7rng1sMGC+B9wqRe3jJUPmPy0p7eMJQ+ZvCWr0C4uYY8j8H4H+ktMurib6Eq+HfxZwouS0i0uA44be/gWS0y764pdVM2H+Wslp11y/GthiyPz9qtaR3eneKWC05LSLeYbM94CHJKddTCb6iZ5crJGcdjEEM1u7HnBA//sdUF1d7eBXxBgR3F+XhI++WmC3IfNPA1fI6YAgmXEcsATY0WaIbQU+wC9+XE5WGfzff1Su89+dtHMo/OKitWUaNh82aP76uro6HecGbqT4Wva5kubnl7CdEzCzzOvhl3rJ/JVrfYG3Igq5D+hXgrb2wcyRrlxMy7r51wK/GBLzozhz4YO6++sMmr8y6+Y/QvR0qLbxQoztXWiwnXuDWUT2cBynisIvJA4TM2Jo9kSDnfU0cFlWza/F3Pm4zqpg9jPY5l4Ud7deV7Ewq+bXBfN3rwTxusGmv22wXZ+4rluR1Te/VObnYoqBpt9vsD0t+Ne2ZY/evXs7+MmQb8Tw4ddRfBPxIOVQzOTv5aJJSz0+I4DNJeoEoapjuq5bRbgLlzo81avVvv/zANHTo7uK30NegvSkwTY0AxfJ7vYZRfiy54XGY0W2aQzm9vc9/H0D0QkDCbcHUGgcKzSZMvhYNdmWrTU1NRr6C6A/ZjJnO4pFBbbjGYPPPJnZr/6QDMLPgollcaiAb4Hxhmco2uMPwVj8U7FxdIKmLob+vQaf9aVy+aLNDuLoAD93YsoSg89pRce6E7X82lVRpZFEq8ffNpbJvuj0w9xp2/zYmf+Q4MbNHQZ//0iw5yEMcGdMo8CkvGc0Gf7tm2SbIerr6x3M5drlx3uNjY0OfnXNEwZ/9/3gd4VBLjW8KpeLYcCbhuf8Wu6Niedj6ACfG57zq0x7jPQ1PFSbjgOq1N05UStatgDdSG6plHuAXbI5RoJl3D8T+PZvkDvxjwDg35rpkqyLj1uBG/Bv6BIlGAW6J2wUWCFXSjcCgJ+PV91mIadcHHccZ3ow/RMlHAV6JmRGoPJtZWRpmc0/pPt4y8sA/PSqcnWAO2RB+XmlTObv1hm/ZDC6TB1gmqRPDqVONftQkieLGSXuAFdJ8gRRVVXlYjZtu7PYJMWTyfwSdYDxkjq5C0PNMZu/UUonm+Uxd4AJkjjZDIvR/HWS1w42GTb+DPCUlnztYaZB878mq1W8bCVI+fpVb322WRzB/D3A5ZLQbi4kXCLnEr316WFjEeYfIBmni4RBZhdo/mshi0eJJBMkaHR2a+cJ4DYplW46ur/vs+A7QaScye2Y/1xws6dIO8GRrdwlFM3ALKmSPVYCB/HLv4gMMgpdxiSEEEIIUVb+BUAB4drkw8lFAAAAAElFTkSuQmCC");

        --search-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E");
        --select-chevron: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");
        --input-valid-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E");
        --input-invalid-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12.01' y2='16'%3E%3C/line%3E%3C/svg%3E");

        /* Focus & Hover */
        --outline-focus-style: outset;
        --outline-hover-style: inset;

        /* border width adapts to contrast mode */
        --blockquote-border-width: calc(0.25 * var(--font-size));
    }
} 
/* end @layer base: global variables */


@layer base {

    /* Variables overridden by "contrast" */
    :root:not(.contrast) {

        /* Font properties */
        /* CSS3 requires to choose 100 or 200. Intermediate values are not supported */
        --font-weight-thin: 200;
        --font-weight-semithin: 300;
        --font-weight-normal: 400;
        --font-weight-semibold: 500;
        --font-weight-bold: 600;
        --font-weight-black: 750;
        --font-size: calc(16px / var(--fontsize-divisor));
        --line-height: 1.2;
        --typography-spacing-vertical: calc(1.2 * 16px / var(--size-divisor));
        --typography-spacing-horizontal: calc(0.8 * 16px / var(--size-divisor));
        --letter-spacing: 0.04rem;
        --word-spacing: 0.06rem;

        --outline-size: 3px;
        --hr-width: 1px;

    }

} 
/* end @layer base: normal mode spacing */


@layer accessibility {

    /* Re-define some global variables for disabilities */
    .contrast {
        --header-slidein: animDisabled;
        --footer-slidein: animDisabled;

        /* Font properties (source: WCAG 2.1 - section 1.4.12 Text Spacing):
        - Line height (line spacing) to at least 1.5 times the font size;
        - Spacing following paragraphs to at least 2 times the font size;
        - Letter spacing (tracking) to at least 0.12 times the font size;
        - Word spacing to at least 0.16 times the font size.

        Conforming to this criteria provides accommodation for people to modify
        their text styles according to their needs. */

        --font-family-sans: ContrastFont, SansFont, 'Verdana', sans-serif;
        --font-weight-thin: 300;
        --font-weight-semithin: 400;
        --font-weight-normal: 500;
        --font-weight-semibold: 600;
        --font-weight-bold: 750;
        --font-weight-black: 800;
        --font-size: calc(18px / var(--fontsize-divisor));
        --line-height: 1.5;
        --typography-spacing-vertical: calc(1.2 * 18px / var(--size-divisor));
        --typography-spacing-horizontal: calc(0.8 * 18px / var(--size-divisor));
        --letter-spacing: 0.12rem;
        --word-spacing: 0.16rem;

        --outline-size: 4px;
        --hr-width: 2px;

    }

} 
/* end @layer accessibility: contrast mode */


/* ------------------------------------------------ */
/*      COLORS: Default color scheme is light       */
/* ------------------------------------------------ */


@layer theme {

    /* An accent pair a theme is free to redefine. A component of the framework
       draws with it, so it holds a value even when no theme is loaded. */
    :root {
        --custom-color1: var(--border-color);
        --custom-color2: var(--border-color-alt);
    }

    :root:not(.dark) {

        /* Accessibility/Focus */
        --outline-color: rgba(0, 191, 255, 0.8);

        /* Main colors */
        --body-bg-color: rgb(255, 255, 255);
        --bg-color: rgb(242, 244, 251);
        --bg-color-alt: rgb(236, 239, 245);
        --fg-color: rgb(18, 22, 38);
        --fg-color-alt: rgb(45, 55, 80);
        --border-color: rgb(117, 130, 155);
        --border-color-alt: rgba(70, 105, 165, 0.10);
        --hr-color: rgba(128, 128, 128, 0.5);

        /* Background colors */
        --header-bg-color: linear-gradient(155deg, rgb(8, 22, 68) 0%, rgb(14, 48, 105) 50%, rgb(22, 48, 118) 100%);
        --nav-bg-color: rgb(212, 224, 246);
        --footer-bg-color: rgb(224, 228, 237);
        --buttons-bg-color: rgb(29, 74, 106);
        --buttons-bg-color-hover: rgb(64, 98, 121);
        --progress-bg-color: rgb(183, 184, 209);
        --mark-bg-color: rgba(255, 250, 100, 0.5);
        --inputs-bg-color: rgb(255, 255, 255);
        --code-bg-color: rgba(200, 195, 255, 0.35);

        /* Foreground colors */
        --header-fg-color: rgb(210, 222, 248);
        --nav-fg-color: rgb(21, 24, 69);
        --footer-fg-color: rgb(20, 25, 39);
        --progress-fg-color: rgb(32, 59, 109);
        --buttons-fg-color: rgb(255, 255, 255);
        --mark-fg-color: rgb(20, 25, 30);
        --h1-color: rgb(28, 18, 42);
        --h2-color: rgb(35, 32, 68);
        --h3-color: rgb(42, 55, 95);
        --h4-color: rgb(42, 55, 95);
        --h5-color: rgb(55, 75, 118);
        --h6-color: rgb(60, 80, 125);
        --dialog-icon-color: rgb(255, 255, 255);

        /* Table colors */
        --table-border-color: rgba(70, 105, 165, 0.15);
        --table-cell-bg-color: rgb(255, 255, 255);
        --table-row-stripped-bg-color: rgb(242, 238, 252);
        --table-head-bg-color: rgb(220, 216, 248);
        --table-head-fg-color: rgb(18, 22, 38);
        --table-caption-bg-color: rgb(220, 216, 248);
        --table-caption-fg-color: rgb(45, 55, 80);

        /* Other colors */
        --a-color: rgb(8, 92, 148);
        --li-color: rgb(95, 110, 145);
        --ins-color: rgba(20, 200, 20, 0.8);
        --del-color: rgba(240, 40, 40, 0.8);
        --s-color: rgb(100, 100, 100);
        --blockquote-border-color: rgb(22, 50, 70);
        --blockquote-footer-color: rgb(80, 115, 158);
        --shadow-color: rgba(128, 128, 128, 0.20);

        /* Alerts */
        --info-color: rgb(60, 100, 160);
        --info-bg-color: rgba(230, 240, 255, 0.75);
        --warning-color: rgb(150, 90, 0);
        --warning-bg-color: rgba(255, 240, 210, 0.75);
        --error-color: rgb(170, 30, 30);
        --error-bg-color: rgba(255, 230, 230, 0.75);
        --success-color: rgb(40, 120, 40);
        --success-bg-color: rgba(225, 245, 225, 0.75);
        --tips-color: rgb(160, 130, 40);
        --tips-bg-color: rgba(250, 245, 225, 0.75);
        --question-color: rgb(120, 60, 180);
        --question-bg-color: rgba(240, 230, 250);

    }

    /* Structural variables — mode-independent, always defined */
    :root {
        --border-width:       1px;
        --border-radius:      3px;
        --table-border-width: 1px;

        --dialog-border-width:  1px;
        --dialog-border-radius: 0.4rem;
        --dialog-box-shadow:    -0.2rem 0.2rem 0.6rem 0.2rem rgba(128, 128, 128, 0.5);
    }

    /*
    @media screen,handheld,projection,tv,tty
    or (prefers-color-scheme: dark)
    */
    @media not print {
        .dark {
            /* Main colors */
            --bg-color: rgb(14, 18, 28);
            --bg-color-alt: rgb(18, 24, 42);
            --fg-color: rgb(215, 225, 245);
            --fg-color-alt: rgb(168, 185, 218);
            --border-color: rgb(200, 227, 245);
            --border-color-alt: rgba(100, 145, 215, 0.12);
            --outline-color: rgba(0, 191, 255, 0.8);
            --hr-color: rgba(128, 128, 128, 0.5);

            /* Background colors */
            --header-bg-color: linear-gradient(155deg, rgb(4, 8, 28) 0%, rgb(10, 22, 68) 55%, rgb(18, 48, 90) 100%);
            --nav-bg-color: rgba(4, 8, 28, 0.85);
            --footer-bg-color: rgb(12, 18, 35);
            --buttons-bg-color:       rgb(30, 112, 178);
            --buttons-bg-color-hover: rgb(42, 135, 205);
            --progress-bg-color: rgb(7, 9, 13);
            --inputs-bg-color: rgb(18, 24, 42);

            /* Foreground colors */
            --header-fg-color: rgb(210, 222, 248);
            --nav-fg-color: rgb(230, 235, 244);
            --footer-fg-color: rgb(168, 185, 218);
            --buttons-fg-color: rgb(255, 255, 255);
            --progress-fg-color: rgb(62, 162, 215);
            --h1-color: rgb(215, 225, 245);
            --h2-color: rgb(195, 210, 238);
            --h3-color: rgb(175, 195, 228);
            --h4-color: rgb(175, 195, 228);
            --h5-color: rgb(155, 178, 215);
            --h6-color: rgb(135, 162, 202);

            /* Table colors */
            --table-border-color: rgba(100, 145, 215, 0.15);
            --table-cell-bg-color: rgb(18, 24, 42);
            --table-row-stripped-bg-color: rgb(18, 26, 48);
            --table-head-bg-color: rgb(14, 20, 38);
            --table-head-fg-color: rgb(215, 225, 245);
            --table-caption-bg-color: rgb(14, 20, 38);
            --table-caption-fg-color: rgb(168, 185, 218);

            /* Other colors */
            --a-color: rgb(72, 162, 218);
            --s-color: rgb(180, 180, 180);
            --li-color: rgb(62, 182, 180);
            --blockquote-border-color: rgb(62, 148, 202);
            --blockquote-footer-color: rgb(125, 162, 205);
            --blockquote-border-width: calc(0.25 * var(--font-size));
            --shadow-color: rgba(30, 90, 200, 0.25);

            /* Switch */
            --switch-bg-color:           rgb(25, 38, 65);
            --switch-slider-off-color:   rgb(85, 112, 168);
            --switch-slider-on-color:    rgb(72, 162, 218);

            /* Dialogs */
            --dialog-icon-color: rgb(14, 18, 28);

            /* Alerts */
            --info-color: rgb(130, 160, 255);
            --info-bg-color: rgb(20, 30, 60);
            --warning-color: rgb(255, 180, 90);
            --warning-bg-color: rgb(60, 40, 10);
            --error-color: rgb(255, 90, 90);
            --error-bg-color: rgb(50, 10, 10);
            --success-color: rgb(120, 255, 120);
            --success-bg-color: rgb(10, 40, 10);
            --ins-color: rgba(100, 220, 100, 0.9);
            --del-color: rgba(220, 100, 100, 0.9);
            --tips-color: rgb(255, 220, 130);
            --tips-bg-color: rgb(70, 60, 20);
            --question-color: rgb(200, 150, 255);
            --question-bg-color: rgb(40, 20, 60);
        }
    }

    /* Contrast mode */
    .contrast {
        --border-width:         2px;
        --border-radius:        3px;
        --table-border-width:   2px;
        --dialog-border-width:  2px;
        --dialog-border-radius: 0.4rem;
    }

    /* Whoever changes the palette carries the ground of that palette. On the
       root, that is the page; on an element, that is the element -- a passage
       shown in the other mode is written on the ground of the mode it shows,
       and not on the one of the page around it. */
    .dark:not(:root),
    .contrast:not(:root) {
        background-color: var(--bg-color);
    }

}
/* end @layer theme: variables */


@layer accessibility {

    /* Increase the bg/fg contrast of some colors in the default mode */
    .contrast:not(.dark) {
        --a-color: rgb(10, 80, 120);
    }

    /* WCAG 1.4.12: spacing is enforced and cannot be overridden in contrast mode */
    .contrast * {
        letter-spacing: var(--letter-spacing) !important;
        word-spacing: var(--word-spacing) !important;
    }

} 
/* end @layer accessibility: contrast color and spacing */


@layer base {

    /* Font properties for a local context usage */
    /* ----------------------------------------- */

    .font-sans {
        font-family: var(--font-family-sans);
    }

    .font-serif {
        font-family: var(--font-family-serif);
    }

    .font-mono {
        font-family: var(--font-family-mono);
    }

    .font-pre {
        font-family: var(--font-family-pre);
    }

    .font-weight-thin {
        font-weight: var(--font-weight-thin);
    }

    .font-weight-normal {
        font-weight: var(--font-weight-normal);
    }

    .font-weight-semibold {
        font-weight: var(--font-weight-semibold);
    }

    .font-weight-bold {
        font-weight: var(--font-weight-bold);
    }

    .font-weight-black {
        font-weight: var(--font-weight-black);
    }


    /* =======================================================================
                        ACCESSIBILITY SPECIFIC STYLING
    ======================================================================== */

    /* Skip-to-content link: visible only on keyboard focus, hidden on mouse hover.
    Fixed full-width at top of page, above all other content. */
    .skip,
    .focus-visible-only {
        /* A banner of its own, wherever it is written: a nav lays its children
           out as flex items, and a flex item ignores the alignment of the text
           it is given. */
        display: block;
        opacity: 0;
        pointer-events: none;
        position: fixed;
        top: var(--border-width);
        left: var(--border-width);
        width: calc(100% - 2 * var(--border-width));
        height: var(--skip-height);
        line-height: var(--skip-height);
        text-align: center;
        background-color: var(--buttons-bg-color);
        color: var(--buttons-fg-color);
        font-weight: var(--font-weight-semibold);
        padding: 0;
        margin: auto;
        z-index: 200;
        transition: opacity 0.3s ease;
    }

    .skip:focus,
    .focus-visible-only:focus {
        opacity: 1;
        pointer-events: auto;
    }

    .skip:hover,
    .focus-visible-only:hover {
        opacity: 0;
        pointer-events: none;
        cursor: default;
    }

    :is(a, video, input, area, select, button, input, textarea, summary) {
        --outline-offset: 0;
    }

    :is(a, video, input, area, select, button, input, textarea, summary):focus {
        outline: var(--outline-size) var(--outline-focus-style) var(--outline-color);
        outline-offset: var(--outline-offset, var(--outline-size));
    }

    :is(a, video, input, area, select, button, input, textarea, summary):focus-visible {
        outline: var(--outline-size) var(--outline-focus-style) var(--outline-color);
        outline-offset: var(--outline-offset, var(--outline-size));
    }

    :is(a, video, input, area, select, button, input, textarea, summary):focus:not(:focus-visible) {
        outline: none;
    }

    :is(a, video, input, area, select, button, input, textarea, summary):hover {
        outline: var(--outline-size) var(--outline-hover-style) var(--outline-color);
        outline-offset: var(--outline-offset, var(--outline-size));
        transition: none;
    }


    /* =======================================================================
                                HTML PAGE STYLING
    ======================================================================== */

    /* An element is born without a ground of its own: what is seen behind it is
       what its page, its panel or its banner is painted with. A ground given
       here would have to be taken back everywhere a container carries one, and
       that is what every 'background-color: transparent' of this framework used
       to do. */
    * {
        margin: 0;
        padding: 0;
        -webkit-text-size-adjust: 100%;
        -ms-text-size-adjust: 100%;

        color: var(--fg-color);

        font-size: var(--font-size);
        font-family: var(--font-family-sans);
        font-weight: var(--font-weight-normal);
        line-height: var(--line-height);
        letter-spacing: var(--letter-spacing);
        word-spacing: var(--word-spacing);
    }

    *, *:before, *:after {
        box-sizing: inherit;
    }

    *, ::after, ::before {
        box-sizing: border-box;
        background-repeat: no-repeat
    }

    *:disabled {
        opacity: 0.4;
        cursor: not-allowed;
    }

    *[aria-disabled=true] {
        opacity: 0.4;
        cursor: not-allowed;
        overflow: unset;
    }

    *[aria-disabled=true],
    *[aria-disabled=true]:focus {
        opacity: 0.4;
        cursor: not-allowed;
    }

    ::after, ::before {
        text-decoration: inherit;
        vertical-align: inherit
    }

    html {
        height: 100%;
        margin: auto;
        scroll-behavior: smooth;
        scrollbar-gutter: stable;
        overflow-x: hidden;
        overflow-y: scroll !important;

        /* The ground of the page is carried here, and not by the body: the body
        is a column of a fixed width, so a gradient laid on it is as tall as the
        screen and starts again below it. Laid here, it paints the canvas once,
        whatever the length of the document. */
        background: var(--body-bg-color, var(--bg-color));
        background-attachment: fixed;
    }

    body {
        margin: 0 auto;
        width: min(calc(1024px / var(--size-divisor)), 100%);
        position: relative;
        cursor: default;
        overflow: hidden;

        /* The column of the content, on the ground html carries. */
        background: var(--bg-color);
        background-clip: content-box;
        transition: all var(--border-color) 0.3s;
        transition-duration: 0.4s;

        -webkit-tap-highlight-color: transparent;
        -webkit-text-size-adjust: 100%;
        -moz-text-size-adjust: 100%;

        text-rendering: optimizeLegibility;
        overflow-wrap: break-word;

        -moz-tab-size: 4;
        tab-size: 4;
        flex-direction: column;
    }


    /* =======================================================================
                        HTML DOCUMENT STRUCTURE
    ======================================================================= */

    body > header {
        z-index: 10;
        display: flex;
        flex-direction: column;
        align-items: center;
        justify-content: center;
        width: 100%;
        max-width: none;
        margin: auto;
        text-align: center;
        min-height: var(--header-height);
        padding-bottom: var(--typography-spacing-vertical);
        animation: 1s ease-out 0s 1 var(--header-slidein);
        color: var(--header-fg-color);
        background: var(--header-bg-color);
    }

    body > main {
        z-index: 1;
    }

    body > footer {
        z-index: 10;
        text-align: center;
        margin: auto;
        padding-top: var(--typography-spacing-vertical);
        min-height: var(--footer-height);
        animation: 1s ease-out 0s 1 var(--footer-slidein);
        background: var(--footer-bg-color);
        color: var(--footer-fg-color);
    }

    /* A banner is written in one colour, its own: what it holds is not painted
       one by one, it is given the colours to inherit from. A rule reaching
       every child would also take away what a child is entitled to -- the
       ground of an image, the ink of a marked word -- which belongs to
       whoever wrote the page, never to the framework. */

    body > header {
        --fg-color:     var(--header-fg-color);
        --fg-color-alt: var(--header-fg-color);
        --a-color:      var(--header-fg-color);
        --li-color:     var(--header-fg-color);
        --h1-color:     var(--header-fg-color);
        --h2-color:     var(--header-fg-color);
        --h3-color:     var(--header-fg-color);
        --h4-color:     var(--header-fg-color);
        --h5-color:     var(--header-fg-color);
        --h6-color:     var(--header-fg-color);
    }

    body > footer {
        --fg-color:     var(--footer-fg-color);
        --fg-color-alt: var(--footer-fg-color);
        --a-color:      var(--footer-fg-color);
        --li-color:     var(--footer-fg-color);
        --h1-color:     var(--footer-fg-color);
        --h2-color:     var(--footer-fg-color);
        --h3-color:     var(--footer-fg-color);
        --h4-color:     var(--footer-fg-color);
        --h5-color:     var(--footer-fg-color);
        --h6-color:     var(--footer-fg-color);
    }

    body > header > *,
    body > footer > * {
        z-index: 1;
        text-align: center;
        padding-top: var(--typography-spacing-vertical);
    }


    /* =======================================================================
                        HTML ELEMENTS STYLING
    ======================================================================== */

    /* -------------------------------- menu --------------------------------- */

    nav, 
    [role=doc-toc] {
        color: var(--nav-fg-color);
        background: var(--nav-bg-color);
        padding-left: var(--typography-spacing-horizontal);
        padding-right: var(--typography-spacing-horizontal);
        margin: auto;
        min-height: calc(4rem / var(--size-divisor));
        z-index: 10;
        display: flex;
        flex-wrap: wrap;
        row-gap: calc(1rem / var(--size-divisor));
        column-gap: calc(1rem / var(--size-divisor));

    }

    /* A bar is written in one colour, as a banner is: what it holds inherits
       it. Only the laying out is imposed, a bar being a row of items. */

    nav,
    [role=doc-toc] {
        --fg-color:     var(--nav-fg-color);
        --fg-color-alt: var(--nav-fg-color);
        --a-color:      var(--nav-fg-color);
        --li-color:     var(--nav-fg-color);
        --h1-color:     var(--nav-fg-color);
        --h2-color:     var(--nav-fg-color);
        --h3-color:     var(--nav-fg-color);
        --h4-color:     var(--nav-fg-color);
        --h5-color:     var(--nav-fg-color);
        --h6-color:     var(--nav-fg-color);
    }

    nav *,
    [role=doc-toc] * {
        display: flex;
    }

    nav ul, 
    nav dl {
        list-style: none;
        margin: 0;
        text-align: center;
    }

    /* ---------------------------- section/article ------------------------------ */

    main > section,
    main > * section {
        padding-top: var(--typography-spacing-vertical);
        padding-bottom: var(--typography-spacing-vertical);
        padding-left: var(--typography-spacing-horizontal);
        padding-right: var(--typography-spacing-horizontal);
    }

    /* ---------------------------- head titles ------------------------------ */

    h1, h2, h3, h4, h5, h6 {
        margin-top: var(--typography-spacing-vertical);
        margin-bottom: var(--typography-spacing-vertical);
        font: var(--font-family-sans);
    }

    h1 {
        font-size: calc(2.6 * var(--font-size) / var(--size-divisor));
        line-height: calc(1.5 * var(--line-height) / var(--size-divisor));
        color: var(--h1-color);
        font-weight: var(--font-weight-black);
        letter-spacing: calc(4*var(--letter-spacing));
    }

    h2 {
        font-size: calc(2.0 * var(--font-size) / var(--size-divisor));
        line-height: calc(1.4 * var(--line-height) / var(--size-divisor));
        color: var(--h2-color);
        font-weight: var(--font-weight-bold);
        letter-spacing: calc(3*var(--letter-spacing));
    }

    h3 {
        font-size: calc(1.5 * var(--font-size) / var(--size-divisor));
        line-height: calc(1.25 * var(--line-height) / var(--size-divisor));
        font-weight: var(--font-weight-semibold);
        color: var(--h3-color);
        letter-spacing: calc(2*var(--letter-spacing));
    }

    h4 {
        font-size: calc(1.1 * var(--font-size));
        line-height: calc(1.05 * var(--line-height));
        letter-spacing: calc(1.4*var(--letter-spacing));
        color: var(--h4-color);
        font-weight: var(--font-weight-semibold);
    }

    h5 {
        font-size: calc(1.05 * var(--font-size));
        line-height: var(--line-height);
        letter-spacing: calc(1.2*var(--letter-spacing));
        color: var(--h5-color);
        font-weight: var(--font-weight-semibold);
    }

    h6 {
        font-size: var(--font-size);
        line-height: var(--line-height);
        font-weight: var(--font-weight-normal);
        color: var(--h6-color);
    }

    /* ---------------------- Text & inline text ----------------------------- */

    p {
        font: inherit;
        padding-bottom: var(--typography-spacing-vertical) !important;
        display: block;
    }

    b {
        font: inherit;
        font-weight: var(--font-weight-bold);
    }

    strong {
        font: inherit;
        font-weight: var(--font-weight-black);
    }

    mark {
        font: inherit;
        background: var(--mark-bg-color);
        color: var(--mark-fg-color);
        
    }

    small {
        font: inherit;
        font-size: calc(0.8 * var(--font-size));
    }

    sub, 
    sup {
        font: inherit;
        font-size: calc(0.75 * var(--font-size));
        line-height: 0;
        position: relative;
        vertical-align: baseline
    }

    sub {
        bottom: -0.25em
    }

    sup {
        top: -0.5em
    }

    code, kbd, samp, var, output {
        font-family: var(--font-family-mono);
        font-size: calc(0.9 * var(--font-size));
    }

    kbd {
        font-weight: bolder;
        border: var(--border-width) solid var(--border-color);
        
    }

    code {
        background: var(--code-bg-color);
        border-radius: var(--border-radius);
        line-height: var(--line-height);
        display: inline;
    }

    pre code {
        background: transparent;
    }

    pre {
        font-family: var(--font-family-pre);
        font-size: calc(0.9 * var(--font-size));
        line-height: calc(1.25 * var(--line-height));
        padding-top: calc(0.35*var(--typography-spacing-vertical));
        padding-bottom: calc(0.35*var(--typography-spacing-vertical));
        padding-left: var(--typography-spacing-horizontal);
        margin-left: var(--typography-spacing-horizontal);
        margin-top: var(--typography-spacing-horizontal);
        margin-bottom: var(--typography-spacing-horizontal);
        overflow: auto;
        border-left: calc(2*var(--border-width)) solid var(--border-color-alt);
    }
    
    ins {
        color: var(--ins-color);
        text-decoration: none;
    }

    del {
        color: var(--del-color);
    }

    s {
        color: var(--s-color);
    }

    blockquote {
        display: block;
        padding-bottom: var(--typography-spacing-vertical);
        padding-top: var(--typography-spacing-vertical);
        padding-left: var(--typography-spacing-horizontal);
        padding-right: var(--typography-spacing-horizontal);
        margin-top: calc(0.5*var(--typography-spacing-horizontal));
        margin-bottom: calc(1.5*var(--typography-spacing-vertical));
        margin-left: calc(2*var(--typography-spacing-horizontal));
        margin-right: calc(2*var(--typography-spacing-horizontal));
        border: var(--border-color) solid var(--blockquote-border-width);
        border-radius: var(--border-radius);
    }

    blockquote > cite {
        display: block;
        margin-top: var(--typography-spacing-vertical);
        color: var(--blockquote-footer-color);
    }

    blockquote {
        font-weight: var(--font-weight-semibold);
    }

    a, 
    [role=link] {
        color: var(--a-color);
        text-decoration: underline;
        -webkit-transition-duration: 0.2s;
        -moz-transition-duration: 0.2s;
        -o-transition-duration: 0.2s;
        transition-duration: 0.2s;
        line-height: var(--line-height);
        opacity: 100%;
    }

    :where(a:not([role=button])), 
    [role=link] {
        text-underline-offset: 0.25em;
    }

    /*
    a:not(:has(img)):hover,
    [role=link]:not(:has(img)):hover {
        color: var(--bg-color);
        background-size: 100% 100%;
        transition: background-size .35s ease, color 0s;
    }*/

    /* Image links: the clickable box must match the image (no extra line box). */
    a:has(> img) {
        display: inline-block;
        line-height: 0;
    }

    a > img {
        display: block;
    }

    a.external-link::after {
        position: relative;
        content: "";
        background-color: var(--a-color);
        mask-image: var(--external-link-icon);
        mask-size: 100% 100%;
        display: inline-block;
        width: calc(0.85 * var(--font-size));
        height: calc(0.85 * var(--font-size));
        padding-top: calc(0.1 * var(--font-size));
        margin-left: 0.2rem;
        margin-right: 0.2rem;
    }

    /* ----------------- Button, Label and Input tags ----------------------- */

    button, input, a[role=button], select, textarea {
        overflow: visible;
    }

    button, select, a[role=button], select, textarea {
        text-transform: none;
        text-decoration: none;
    }

    button, [type=button], [type=reset], [type=submit], [role=button] {
        -webkit-appearance: button;
    }

    button,
    *[role=button],
    *[role="menuitem"],
    .menuitem,
    summary {
        background-color: var(--buttons-bg-color);
        color: var(--buttons-fg-color);
        cursor: pointer;
        transition: all 0.4s;
        -webkit-user-select: none;
        -moz-user-select: none;
        -ms-user-select: none;
        user-select: none;
    }

    button,
    *[role=button],
    *[role="menuitem"],
    .menuitem {
        border: var(--border-width) solid var(--border-color);
        border-radius: var(--border-radius);

        /* Ensure a minimum of character + padding */
        min-height: calc(var(--font-size) * 1.2);
        min-width: calc(var(--font-size) * 1.2);

        font-weight: normal;
        font-style: normal;
        font-variant: normal;
        font-size: 0.9rem;
        overflow: hidden;

        /* a button is a box with centered elements */
        display: inline-flex;
        justify-content: center;
        align-items: center;
        flex-direction: row;

        /* for the buttons embedded in a box */
        flex-grow: 0;      /* default is 0 */
        flex-shrink: 1;    /* default is 1 */
        flex-basis: auto;  /* default is auto */
    }

    [role=button]:is(:hover,:active,:focus),
    [role=button]:is([aria-current]:not([aria-current=false])),
    [type=button]:is(:hover,:active,:focus),
    [type=button]:is([aria-current]:not([aria-current=false])),
    [type=file]::file-selector-button:is(:hover,:active,:focus),
    [type=file]::file-selector-button:is([aria-current]:not([aria-current=false])),
    [type=reset]:is(:hover,:active,:focus),
    [type=reset]:is([aria-current]:not([aria-current=false])),
    [type=submit]:is(:hover,:active,:focus),
    [type=submit]:is([aria-current]:not([aria-current=false])),
    button:enabled:is(:hover,:active,:focus),
    button:enabled:is([aria-current]:not([aria-current=false])),
    summary:is(:hover,:active,:focus) {
        background: var(--buttons-bg-color-hover);
        color: var(--buttons-fg-color);
    }

    /* Propagate button colors to its children */
    button *,
    *[role=button] *,
    *[role="menuitem"] *,
    *.menuitem * {
        background-color: transparent;
        color: var(--buttons-fg-color);
    }

    *[aria-invalid=false] {
        border-color: var(--success-color);
    }

    *[aria-invalid=true] {
        border-color: var(--error-color);
    }

    /* --------------------------------- List(s) ----------------------------- */

    ol,
    ul,
    dl {
        margin-bottom: var(--typography-spacing-vertical);
        background-color: unset;
        padding-inline-start: 0;
    }

    ul > li,
    ol > li {
        display: block;
        list-style: none;
        line-height: calc(1.2 * var(--line-height));
        padding-inline-start: calc(2 * var(--typography-spacing-horizontal));
    }

    /* Level 1 — filled square */
    ul:not(nav *) > li::before {
        content: "■";
        display: inline-block;
        width: calc(2 * var(--typography-spacing-horizontal));
        margin-inline-start: calc(-2 * var(--typography-spacing-horizontal));
        font-size: calc(0.6 * var(--font-size));
        color: var(--li-color);
    }

    /* Level 2 — open diamond */
    ul:not(nav *) > li > ul > li::before {
        content: "◇";
        display: inline-block;
        width: calc(2 * var(--typography-spacing-horizontal));
        margin-inline-start: calc(-2 * var(--typography-spacing-horizontal));
        font-size: calc(0.75 * var(--font-size));
        color: var(--li-color);
    }

    /* Level 3 — open square */
    ul:not(nav *) > li > ul > li > ul > li::before {
        content: "□";
        display: inline-block;
        width: calc(2 * var(--typography-spacing-horizontal));
        margin-inline-start: calc(-2 * var(--typography-spacing-horizontal));
        font-size: calc(0.75 * var(--font-size));
        color: var(--li-color);
    }

    ol {
        counter-reset: item;
    }

    ol > li {
        counter-increment: item;
    }

    ol > li::before {
        content: counter(item) ". ";
        display: inline-block;
        width: calc(2 * var(--typography-spacing-horizontal));
        margin-inline-start: calc(-2 * var(--typography-spacing-horizontal));
        color: var(--li-color);
        font-weight: var(--font-weight-semibold);
    }

    dl {
        display: inline-block;
    }

    dt {
        font-weight: var(--font-weight-semibold);
    }

    dd {
        padding-inline-start: calc(0.5 * var(--typography-spacing-horizontal));
    }

    dd::before {
        content: "➙ ";
        color: var(--li-color);
    }

    dd + dt {
        padding-top: calc(0.35 * var(--typography-spacing-vertical));
    }

    /* -------------------------------- Table(s) ----------------------------- */

    :where(table) {
        width: 100%;
        border-collapse: collapse;
        text-indent: 0;
        empty-cells: show;
        margin-bottom: var(--typography-spacing-vertical);
        caption-side: bottom;
    }

    td,
    th {
        background-color: var(--table-cell-bg-color);
        padding: calc(var(--typography-spacing-horizontal) / 2) var(--typography-spacing-horizontal);
        color: var(--fg-color);
        font-weight: var(--font-weight-normal);
        font-size: var(--font-size);
        border-left: var(--table-border-width) dashed var(--table-border-color);
        border-bottom: var(--table-border-width) solid var(--table-border-color);
        text-align: left;
    }

    table:not([role="presentation"]) thead * {
        background-color: var(--table-head-bg-color);
        color: var(--table-head-fg-color);
        font-weight: var(--font-weight-bold);
    }

    thead td, 
    thead th {
        padding: var(--typography-spacing-horizontal) calc(var(--typography-spacing-vertical)) ;
    }

    tfoot td, 
    tfoot th {
        border-top: var(--table-border-width) solid var(--table-border-color);
        border-bottom: 0;
    }

    table:not([role="presentation"]) tbody tr:nth-child(even) * {
        background-color: var(--table-row-stripped-bg-color);
    }

    table caption {
        background-color: var(--table-caption-bg-color);
        color: var(--table-caption-fg-color);
    }

    caption {
        font-weight: var(--font-weight-semibold);
    }

    caption span {
        color: inherit;
        background-color: transparent;
    }

    [role=presentation], 
    table[role=presentation] td {
        border: none;
        text-align: left;
    }

    table[role="grid"] {
        width: 100%;
        table-layout: fixed; /* All columns will have equal width based on the table width */
    }

    table[role="grid"] th,
    table[role="grid"] td {
        overflow: hidden;
        word-wrap: break-word;
    }

    table:not([role="presentation"]) {
        border: var(--table-border-width) solid var(--table-border-color);
        max-width: 100%;
    }

    table {
        max-width: 100%;
        overflow-x: auto;
    }


    /* ----------------- media & figure & images ----------- */

    figure {
        margin: auto;
        text-align: center;
    }

    figcaption {
        color: var(--table-caption-fg-color);
        background-color: var(--table-caption-bg-color);
    }

    video {
        margin: auto;
        max-width: 95%;
    }

    /* An image is drawn for a page that is not the one it is read on, and
       cannot answer for its own edges: it is laid on a ground of its own, in
       every mode. Which ground it is belongs to the themes: the framework has
       no colour whose meaning is the back of an image. */
    img {
        max-width: 100%;
        background-color: var(--img-bg-color);
        padding: calc(0.3 * var(--typography-spacing-horizontal));
        border-radius: var(--border-radius);
    }

    :where(svg:not([fill])) {
        fill:currentColor
    }

    svg:not(:root) {
        overflow:hidden
    }

    /* ----------------- progress ----------- */

    progress {
        -webkit-appearance: none;
        -moz-appearance: none;
        appearance: none;
        width: 100%;
        height: calc(0.75 * var(--font-size));
        border: var(--border-color) solid var(--border-width);
        border-radius: var(--border-radius);
        background-color: var(--progress-bg-color);
        color: var(--progress-fg-color);
        background: var(--progress-bg-color);
        position: relative;
        display: block;
        overflow: hidden;
    }

    progress::-webkit-progress-bar {
        background-color: var(--progress-bg-color);
        border-radius: var(--border-radius);
    }

    progress::-webkit-progress-value {
        background-color: var(--progress-fg-color);
        border-radius: var(--border-radius);
    }

    progress::-moz-progress-bar {
        background-color: var(--progress-fg-color);
        border-radius: var(--border-radius);
    }

    /* =======================================================================
                            Others
    ======================================================================= */

    hr {
        box-sizing: content-box;
        height: 0;
        overflow: visible;
        border: 0;
        border-top: var(--hr-width) solid var(--hr-color);
        margin: 1rem 0
    }

    details {
        border: var(--border-width) solid var(--border-color-alt);
        border-radius: var(--border-radius);
        margin-bottom: var(--typography-spacing-vertical);
        padding: 0;
    }

    details > *:not(summary) {
        padding-left: var(--typography-spacing-horizontal);
    }

    summary {
        border: var(--border-width) solid var(--border-color-alt);
        font-weight: var(--font-weight-semibold);
        border-radius: var(--border-radius);
        margin: 0;
        vertical-align: middle;
        /*height: 2.4rem;*/

        /* Ensure a minimum of semibold-character + padding*/
        min-height: calc(var(--font-size) * 1.2);
        min-width: calc(var(--font-size) * 3);
    }

    details[open] summary {
        margin-bottom: var(--typography-spacing-vertical);
    }

    details[open] > *:not(summary) {
        -webkit-animation: fadeIn 0.2s linear forwards;
        animation: fadeIn 0.2s linear forwards;
    }

    /* Buttons inside a summary element are at right. */
    /* -------------------- FORMS -------------------- */

    form {
        margin-bottom: var(--typography-spacing-vertical);
    }

    /* Form: fieldset */

    fieldset {
        width: 100%;
        border: var(--border-width) solid var(--border-color);
        margin: 0;
        /* border-radius, padding → @layer theme */
    }

    fieldset legend {
        max-width: 90%;
        display: block;
        margin-bottom: calc(var(--typography-spacing-vertical) * 0.5);
        font-weight: var(--font-weight-semibold);
        color: var(--progress-fg-color);
        background-color: var(--progress-bg-color);
        padding: 0.4rem;
        white-space: normal;
        border: var(--border-width) solid var(--border-color);
    }

    fieldset legend * {
        color: var(--progress-fg-color);
        background-color: transparent;
    }

    /* Form: label */

    label {
        display: block;
        margin-bottom: calc(var(--typography-spacing-vertical) * 0.5);
    }

    label > :where(input, select, textarea) {
        margin-top: calc(var(--typography-spacing-vertical) * 0.25)
    }

    label:has([type=checkbox],[type=radio]) {
        width: -moz-fit-content;
        width: fit-content;
        cursor: pointer
    }

    /* Form: any type of inputs: input, select, textarea... */

    /* input/select/textarea width: 80% → @layer theme */

    input, select, textarea {
        margin-bottom: var(--typography-spacing-vertical);
    }

    input:not([type=checkbox],[type=radio]), select, textarea {
        display: block;
        font-family: var(--font-family-serif);
        background-color: var(--inputs-bg-color);
        color: var(--fg-color-alt);
        border: var(--border-width) solid var(--border-color-alt);
        transition: 0.5s ease-in-out border-bottom;
    }

    input[type=text], select, option, optgroup, textarea {
        color: var(--fg-color-alt);
    }

    input:not([type=checkbox],[type=radio],[type=range],[type=file]), textarea {
        -webkit-appearance: none;
        -moz-appearance: none;
        appearance: none;
        padding: calc(var(--typography-spacing-vertical) * 0.5) calc(var(--typography-spacing-horizontal) * 0.5)
    }

    textarea {
        display: block;
        resize: vertical;
        overflow: auto;
    }

    /* ── Buttons / interactive elements ──────────────────────────────────── */

    button,
    input[type=submit],
    input[type=reset],
    *[role=button],
    *[role="menuitem"],
    .menuitem,
    summary {
        margin: 0;
    }

    /* Form: select */

    select::-ms-expand {
        border:0;
        background-color: transparent
    }

    select[multiple] option:checked {
        background: var(--buttons-bg-color);
    }

    select[multiple] option:checked::before {
        position: relative;
        content: "";
        background-image: var(--checked-icon);
        background-size: 100% 100%;
        display: inline-block;
        width: calc(0.85 * var(--font-size));
        height: calc(0.85 * var(--font-size));
        padding-top: calc(0.1 * var(--font-size));;
        margin-right: 0.3rem;
        text-decoration: underline;
    }

    select {
        padding: calc(var(--typography-spacing-vertical) * 0.25) calc(var(--typography-spacing-horizontal) * 0.25);
        text-transform: none;
    }

    select * {
        background-color: transparent;
    }

    /* Form: option/optgroup */

    option {
        font-family: var(--font-family-serif);
        /* font-size: 1.1rem → @layer theme */
    }

    optgroup {
        font-weight: var(--font-weight-semibold);
        border-top: var(--border-width) solid var(--fg-color-alt);
    }

    option {
        border-top: var(--border-width) solid var(--fg-color-alt);
    }

    optgroup > option {
        border: none;
        padding-left: 1rem;
    }

    /* Form: input(s) */

    input {
        overflow: visible
    }

    /* Submit, search and reset get top margin to separate from form fields above */
    input[role="button"],
    input[type="submit"],
    input[type="search"],
    input[name="search"],
    input[type="reset"] {
        margin-top: calc(0.75 * var(--typography-spacing-vertical));
        margin-bottom: calc(0.75 * var(--typography-spacing-vertical));
    }

    input[type="checkbox"],
    input[type="radio"] {
        margin-left: 0.5rem;
        margin-right: 0.5rem;
        margin-bottom: 0;
    }

    input[name=search] {
        box-sizing: border-box;
        background-image: var(--search-icon);
        background-position: left center;
        background-size: 1.5rem 1.5rem;
        background-repeat: no-repeat;
        padding-top: 0.5rem;
        padding-bottom: 0.5rem;
        padding-left: 2rem;
        transition: width 0.4s ease-in-out;
        vertical-align: center;
        width: 50%;
    }

    input[name=search]:hover {
        width: 80%;
    }

    [type=button], [type=reset], [type=submit] {
        margin-bottom:var(--typography-spacing-vertical)
    }

    :is(button,[type=submit],[type=button],[role=button]).secondary,[type=file]::file-selector-button,[type=reset] {
        cursor: pointer
    }

    [type=file] {
        padding: 0;
        border-width: 0;
    }

    input:not([type=checkbox],[type=radio],[type=range]) {
        height: calc(1rem * var(--line-height) + var(--typography-spacing-vertical) * 1.2 + var(--border-width) * 1.2)
    }

    /* Form: checkbox / radiobox */

    [type=checkbox], [type=radio] {
        width: 1.1em;
        height: 1.1em;
        cursor: pointer;
        margin-right: 0.5rem;
    }

    [type=checkbox]~label, [type=radio]~label {
        display: inline-block;
        margin-bottom: 0;
        cursor: pointer
    }

    [type=checkbox]~label:not(:last-of-type),[type=radio]~label:not(:last-of-type) {
        margin-inline-end: 1em
    }

    /* Radio/checkbox used as UI button (input inside label): hide native control */
    label > [type=checkbox],
    label > [type=radio] {
        opacity: 0;
        width: 0;
        height: 0;
    }

    /* =======================================================================
                            Dialogs
    ======================================================================= */


    dialog {
        padding-left: var(--typography-spacing-horizontal);
        padding-right: var(--typography-spacing-horizontal);
        padding-top: var(--typography-spacing-vertical);
        padding-bottom: var(--typography-spacing-vertical);
        z-index: 20;
        animation: fadeOut 0.7s ease-out;
        border-radius: var(--dialog-border-radius);
        border: var(--dialog-border-width) solid var(--border-color);
        box-shadow: var(--dialog-box-shadow);
        margin: 0;
        margin-top: var(--typography-spacing-vertical);
        margin-bottom: var(--typography-spacing-vertical);
    }

    dialog[open] {
        opacity: 1;
        position: relative;
        margin: auto;
        animation: fadeIn 0.7s ease-out;
        overscroll-behavior: contain;
    }

    dialog[role=alertdialog] {
        display: block;
        position: relative;
        border-left: calc(4*var(--dialog-border-width)) solid;
    }

    dialog[role=alertdialog].hidden-alert {
        display: none;
        position: revert;
    }

    dialog[role=alertdialog] * {
        background: transparent;
    }

    /*
    * Select only the dialogs which are 'modal' (doesn't affect dialog open by default in the html).
    * The css 'position' of modal dialog doesn't have to be relative
    * to avoid the scroll at the top of the page !
    * Default css value for modal dialog is fixed.
    :modal[open] {
        position: fixed;
    }
    */
    /* Everything behind an opened modal dialog */
    ::backdrop {
        backdrop-filter: grayscale(90%) blur(0.3rem);
    }

    /* =======================================================================
                            Wexa Accessibility
    ======================================================================= */

    .menuitem.accessibility,
    [role='menuitem'].accessibility,
    .dark [role='menuitem'].accessibility,
    .dark .menuitem.accessibility {
        color: var(--nav-fg-color);
        cursor: pointer;
        transition: transform var(--transition);
        opacity: 1;
    }

    .menuitem.accessibility svg,
    [role='menuitem'].accessibility svg {
        color: inherit;
        width: 100%;
        height: 100%;
    }

    #btn-contrast.accessibility {
        border-color: var(--border-color);
        opacity: 1;
    }

    #btn-color.accessibility {
        border-color: var(--border-color);
        opacity: 1;
    }

    /* Toggle visual effect */
    .menuitem[aria-pressed='true'].accessibility,
    [role='menuitem'][aria-pressed='true'].accessibility {
        opacity: 1;
        box-shadow: inset 0 0 calc(var(--font-size) / 3) currentColor;
    }

    .menuitem[aria-pressed='true'].accessibility svg,
    [role='menuitem'][aria-pressed='true'].accessibility svg {
        transform: scaleX(-1);
    }

}
/* end @layer base: HTML elements and structure */


/* =========================================================================

   @layer theme — DÉCORATION VISUELLE PAR DÉFAUT (thème Whakerexa)

   Ce bloc contient UNIQUEMENT des propriétés décoratives / esthétiques :
   couleurs, espacements, typographie relative, bordures, arrière-plans.

   AUCUNE règle structurelle ou comportementale n'y figure.

   Pour créer un thème alternatif (ex. extras/wexa_theme_aurora.css),
   il suffit de charger un fichier CSS après wexa.css et d'y redéfinir
   les mêmes sélecteurs à l'intérieur d'un @layer theme.
   Les règles de @layer base restent intactes.

   ========================================================================= */

@layer theme {


    /* @layer base sets background-color: var(--bg-color) on ALL elements (*).
       Override it for some descendants so the background shows through. */
    article > *,
    figcaption > * {
        background-color: transparent;
    }

    /* ── Nav ─────────────────────────────────────────────────────────────── */

    nav,
    [role=doc-toc] {
        position: sticky;
        top: 0;
        overflow: unset;
        text-align: center;
        justify-content: space-evenly;
        align-items: center;
    }

    /* ── Mark ────────────────────────────────────────────────────────────── */

    mark {
        padding: 0.1rem;
        border-radius: 0.2rem;
    }

    /* ── Kbd ─────────────────────────────────────────────────────────────── */

    kbd {
        border-radius: 0.4rem;
        border-bottom: calc(var(--border-width) * 2) solid var(--border-color);
    }

    /* ── Code ────────────────────────────────────────────────────────────── */

    code {
        padding-left: var(--typography-spacing-horizontal);
        padding-right: calc(0.5 * var(--typography-spacing-horizontal));
        padding-top: calc(0.5 * var(--typography-spacing-vertical));
        padding-bottom: calc(0.5 * var(--typography-spacing-vertical));
    }

    /* ── Blockquote ────────────────────────────────────────────────────── */

    blockquote {
        background-image: linear-gradient(to right, var(--bg-color-alt), var(--bg-color));
    }

    /* ── Buttons / interactive elements ───────────────────────────────── */

    button,
    *[role=button],
    summary {
        padding-left: calc(0.5 * var(--typography-spacing-horizontal));
        padding-right: calc(0.5 * var(--typography-spacing-horizontal));
        padding-top: calc(0.5 * var(--typography-spacing-vertical));
        padding-bottom: calc(0.5 * var(--typography-spacing-vertical));
        margin: 0;
    }

    button[type=submit],
    button[type=reset],
    input[type=submit],
    input[type=reset] {
        margin-top: var(--typography-spacing-vertical);
    }

    /* Actions inside a summary are floated right. A link is not a button:
       it is named here by its own role, next to the button ones, and the
       plain links of the summary text are left where they are. */
    summary button,
    summary a,
    summary [role=button],
    summary [role=link] {
        float: right;
        margin: 0;
        padding: 0;
        padding-left: 0.2rem;
        padding-right: 0.2rem;
        margin-left: 0.2rem;
        margin-right: 0.2rem;
        vertical-align: center;
        max-height: 90%;
        width: auto;
    }

    /* An action drawn by an image: the max-height of the action bounds the
       action, never what it holds, and an image keeps the size it is stored
       at. It is given the height of the line it sits on, the very same one
       the icons of an action already have. */
    summary :is(button, a, [role=button], [role=link]) > img {
        display: block;
        width: auto;
        height: calc(var(--font-size) * 1.4);
    }

    /* ── Aside ─────────────────────────────────────────────────────────── */

    aside {
        float: right;
        width: 35%;
    }

    /* ── Tables ────────────────────────────────────────────────────────── */

    table caption {
        text-align: center;
        margin: auto;
    }

    caption {
        padding-left: var(--typography-spacing-horizontal);
        text-align: left;
        padding-top: 0.3rem;
        padding-bottom: 0.3rem;
        font-size: 80%;
    }

    caption span {
        font-style: italic;
    }

    /* ── Figures ───────────────────────────────────────────────────────── */

    figcaption {
        font-size: 0.9rem;
        text-align: center;
    }

    /* ── Progress ──────────────────────────────────────────────────────── */

    progress {
        width: 100%;
        height: 2rem;
        border-radius: var(--border-radius);
    }

    /* ── Forms ─────────────────────────────────────────────────────────── */

    form * {
        border-radius: var(--border-radius);
    }

    fieldset {
        border-radius: var(--border-radius);
        padding: var(--typography-spacing-vertical) var(--typography-spacing-horizontal);
    }

    /* ── Search: pill shape with magnifying-glass icon ─────────────────── */

    input[type=search] {
        border-radius: calc(5 * var(--font-size));
        padding-left: calc(2.5 * var(--font-size));
        background-image: var(--search-icon);
        background-position: center left calc(0.75 * var(--font-size));
        background-repeat: no-repeat;
        background-size: calc(1 * var(--font-size)) auto;
    }

    /* ── Select: custom chevron arrow + aligned padding ─────────────────── */

    select:not([multiple],[size]) {
        -webkit-appearance: none;
        appearance: none;
        padding-top:    calc(0.5 * var(--typography-spacing-vertical));
        padding-right:  calc(2.5 * var(--font-size));
        padding-bottom: calc(0.5 * var(--typography-spacing-vertical));
        padding-left:   calc(0.5 * var(--typography-spacing-horizontal));
        background-image: var(--select-chevron);
        background-position: center right calc(0.75 * var(--font-size));
        background-repeat: no-repeat;
        background-size: calc(1 * var(--font-size)) auto;
    }

    select[multiple],
    select[size] {
        padding: calc(0.5 * var(--typography-spacing-vertical)) calc(0.5 * var(--typography-spacing-horizontal));
    }

    /* ── Form validation states ──────────────────────────────────────────── */

    input:not([type=checkbox],[type=radio],[type=range],[type=file])[aria-invalid] {
        padding-right: var(--typography-spacing-horizontal);
        background-position: center right calc(0.75 * var(--font-size));
        background-repeat: no-repeat;
        background-size: var(--font-size) auto;
    }

    input:not([type=checkbox],[type=radio],[type=range],[type=file])[aria-invalid=false] {
        background-image: var(--input-valid-icon); 
    }
    
    input:not([type=checkbox],[type=radio],[type=range],[type=file])[aria-invalid=true]  { 
        background-image: var(--input-invalid-icon); 
    }

    /* ── File input: borderless ──────────────────────────────────────────── */

    input[type=file] {
        padding: calc(0.5 * var(--typography-spacing-vertical)) 0;
        border: 0;
        background: transparent;
        color: var(--fg-color-alt);
        box-shadow: none;
        width: auto;
    }

    input[type=file]::file-selector-button {
        background-color: var(--buttons-bg-color);
        color: var(--buttons-fg-color);
        border: none;
        border-radius: var(--border-radius);
        padding: calc(0.5 * var(--typography-spacing-vertical)) var(--typography-spacing-horizontal);
        margin-right: var(--typography-spacing-horizontal);
        cursor: pointer;
        font-size: var(--font-size);
        font-family: var(--font-family-sans);
        transition: opacity 0.2s;
    }

    input[type=file]::file-selector-button:hover {
        opacity: 0.85;
    }

    /* ── Range slider ────────────────────────────────────────────────────── */

    input[type=range] {
        -webkit-appearance: none;
        appearance: none;
        background: transparent;
        padding: 0;
        border: 0;
        width: 100%;
    }

    input[type=range]::-webkit-slider-runnable-track {
        height: calc(0.375 * var(--font-size));
        border-radius: var(--border-radius);
        background-color: var(--progress-bg-color);
    }

    /* Transition on base thumb so hover scale animates back smoothly */
    input[type=range]::-webkit-slider-thumb {
        -webkit-appearance: none;
        width: calc(1.2 * var(--font-size));
        height: calc(1.2 * var(--font-size));
        margin-top: calc(-0.4375 * var(--font-size));
        border: calc(2 * var(--border-width)) solid var(--bg-color);
        border-radius: 50%;
        background-color: var(--buttons-bg-color);
        transition: width 0.15s ease, height 0.15s ease, margin-top 0.15s ease;
    }

    input[type=range]::-moz-range-track {
        height: calc(0.375 * var(--font-size));
        border-radius: var(--border-radius);
        background-color: var(--progress-bg-color);
    }

    input[type=range]::-moz-range-thumb {
        width: calc(1.2 * var(--font-size));
        height: calc(1.2 * var(--font-size));
        border: calc(2 * var(--border-width)) solid var(--bg-color);
        border-radius: 50%;
        background-color: var(--buttons-bg-color);
        transition: width 0.15s ease, height 0.15s ease;
    }

    /* Thumb enlarges on hover only — :focus removed to prevent stuck state */
    input[type=range]::-webkit-slider-thumb:hover {
        width: calc(1.5 * var(--font-size));
        height: calc(1.5 * var(--font-size));
        margin-top: calc(-0.5625 * var(--font-size));
    }

    input[type=range]::-moz-range-thumb:hover {
        width: calc(1.5 * var(--font-size));
        height: calc(1.5 * var(--font-size));
    }

    button[type=submit],
    input:not([type=checkbox],[type=radio]),
    select,
    textarea {
        width: 80%;
    }

    /* ── Group: inline form group ────────────────────────────────────────── */
    /* After the width rule — same specificity [0,2,1], later wins.          */
    /* No overflow:hidden — it clips the focus outline.                      */

    fieldset[role="group"] {
        display: flex;
        padding: 0;
        border: none;
    }

    fieldset[role="group"] > * {
        margin-top: 0;
        margin-bottom: 0;
    }

    fieldset[role="group"] > :not(:last-child) {
        flex: 1 1 auto;
        border-right: none;
        border-radius: var(--border-radius) 0 0 var(--border-radius);
    }

    fieldset[role="group"] > :last-child {
        flex: 0 0 auto;
        width: auto;
        border-radius: 0 var(--border-radius) var(--border-radius) 0;
    }

    option {
        font-size: 1.1rem;
    }

}

/* Unlayered: beats all @layer rules — these containers provide the background, their children must be transparent */
td *,
th *,
blockquote * {
    background-color: transparent;
}
