From: Vladimír Vondruš Date: Sat, 18 Nov 2017 17:42:00 +0000 (+0100) Subject: Initial implementation of the Doxygen theme generator. X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~cjwatson/git?a=commitdiff_plain;h=c5f3cc2f44b388b7cd5dd45efc1afaaeb78f0dc0;p=blog.git Initial implementation of the Doxygen theme generator. --- diff --git a/css/m-dark+doxygen.compiled.css b/css/m-dark+doxygen.compiled.css new file mode 100644 index 00000000..284b6e3c --- /dev/null +++ b/css/m-dark+doxygen.compiled.css @@ -0,0 +1,1897 @@ +/* Generated using `./postprocess.py m-dark.css m-doxygen.css -o m-dark+doxygen.compiled.css`. Do not edit. */ + +/* + This file is part of m.css. + + Copyright © 2017 Vladimír VondruÅ¡ + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + DEALINGS IN THE SOFTWARE. +*/ + +*, ::before, ::after { box-sizing: border-box; } +body { margin: 0; } +.m-container { + width: 100%; + margin: auto; + padding-left: 1rem; + padding-right: 1rem; +} +.m-row { + margin-left: -1rem; + margin-right: -1rem; +} +.m-row:after { + content: ' '; + clear: both; + display: table; +} +[class*='m-col-'] { + position: relative; + padding: 1rem; +} +[class*='m-clearfix-']::after { + display: block; + content: ' '; + clear: both; +} +[class*='m-show-'] { + display: none; +} +[class*='m-col-'].m-left-s, [class*='m-col-'].m-right-s, [class*='m-col-'].m-center-s, +[class*='m-col-'].m-left-m, [class*='m-col-'].m-right-m, [class*='m-col-'].m-center-m, +[class*='m-col-'].m-left-l, [class*='m-col-'].m-right-l, [class*='m-col-'].m-center-l { + margin-left: -1rem; + margin-right: -1rem; +} +.m-row > [class*='m-col-'].m-left-s, .m-row > [class*='m-col-'].m-right-s, .m-row > [class*='m-col-'].m-center-s, +.m-row > [class*='m-col-'].m-left-m, .m-row > [class*='m-col-'].m-right-m, .m-row > [class*='m-col-'].m-center-m, +.m-row > [class*='m-col-'].m-left-l, .m-row > [class*='m-col-'].m-right-l .m-row > [class*='m-col-'].m-center-l { + margin-left: 0; + margin-right: 0; +} +.m-container.m-nopad, [class*='m-col-'].m-nopad, +.m-container.m-nopadx, [class*='m-col-'].m-nopadx, +.m-container.m-nopadl, [class*='m-col-'].m-nopadl { + padding-left: 0; +} +.m-container.m-nopad, [class*='m-col-'].m-nopad, +.m-container.m-nopadx, [class*='m-col-'].m-nopadx, +.m-container.m-nopadr, [class*='m-col-'].m-nopadr { + padding-right: 0; +} +[class*='m-col-'].m-nopad, [class*='m-col-'].m-nopady, [class*='m-col-'].m-nopadt { + padding-top: 0; +} +[class*='m-col-'].m-nopad, [class*='m-col-'].m-nopady, [class*='m-col-'].m-nopadb { + padding-bottom: 0; +} +[class*='m-col-t-'] { float: left; } +[class*='m-col-t-'].m-left-t, [class*='m-col-t-'].m-right-t { + padding-top: 0px; + padding-bottom: 0px; +} +.m-left-t { + float: left; +} +.m-right-t, [class*='m-col-t-'].m-right-t { + float: right; +} +.m-center-t, [class*='m-col-t-'].m-center-t { + float: none; +} +[class*='m-col-t-'].m-left-t { + margin-left: -1rem; +} +[class*='m-col-t-'].m-right-t { + margin-right: -1rem; +} +.m-row > [class*='m-col-t-'].m-left-t { + margin-left: 0; +} +.m-row > [class*='m-col-t-'].m-right-t { + margin-right: 0; +} +.m-center-t, [class*='m-col-t-'].m-center-t { + margin-left: auto; + margin-right: auto; + float: none; +} +.m-col-t-1 { width: calc(1 * 100% / 12); } +.m-col-t-2 { width: calc(2 * 100% / 12); } +.m-col-t-3 { width: calc(3 * 100% / 12); } +.m-col-t-4 { width: calc(4 * 100% / 12); } +.m-col-t-5 { width: calc(5 * 100% / 12); } +.m-col-t-6 { width: calc(6 * 100% / 12); } +.m-col-t-7 { width: calc(7 * 100% / 12); } +.m-col-t-8 { width: calc(8 * 100% / 12); } +.m-col-t-9 { width: calc(9 * 100% / 12); } +.m-col-t-10 { width: calc(10 * 100% / 12); } +.m-col-t-11 { width: calc(11 * 100% / 12); } +.m-col-t-12 { width: calc(12 * 100% / 12); } +.m-push-t-1 { left: calc(1 * 100% / 12); } +.m-push-t-2 { left: calc(2 * 100% / 12); } +.m-push-t-3 { left: calc(3 * 100% / 12); } +.m-push-t-4 { left: calc(4 * 100% / 12); } +.m-push-t-5 { left: calc(5 * 100% / 12); } +.m-push-t-6 { left: calc(6 * 100% / 12); } +.m-push-t-7 { left: calc(7 * 100% / 12); } +.m-push-t-8 { left: calc(8 * 100% / 12); } +.m-push-t-9 { left: calc(9 * 100% / 12); } +.m-push-t-10 { left: calc(10 * 100% / 12); } +.m-push-t-11 { left: calc(11 * 100% / 12); } +.m-pull-t-1 { right: calc(1 * 100% / 12); } +.m-pull-t-2 { right: calc(2 * 100% / 12); } +.m-pull-t-3 { right: calc(3 * 100% / 12); } +.m-pull-t-4 { right: calc(4 * 100% / 12); } +.m-pull-t-5 { right: calc(5 * 100% / 12); } +.m-pull-t-6 { right: calc(6 * 100% / 12); } +.m-pull-t-7 { right: calc(7 * 100% / 12); } +.m-pull-t-8 { right: calc(8 * 100% / 12); } +.m-pull-t-9 { right: calc(9 * 100% / 12); } +.m-pull-t-10 { right: calc(10 * 100% / 12); } +.m-pull-t-11 { right: calc(11 * 100% / 12); } +@media screen and (min-width: 576px) { + .m-container { width: 560px; } + .m-container-inflatable .m-col-s-10 .m-container-inflate { + margin-left: -10%; + margin-right: -10%; + } + [class*='m-col-s-'] { float: left; } + [class*='m-col-s-'].m-left-s, [class*='m-col-s-'].m-right-s { + padding-top: 0px; + padding-bottom: 0px; + } + .m-left-s { + float: left; + } + .m-right-s, [class*='m-col-s-'].m-right-s { + float: right; + } + [class*='m-col-s-'].m-left-s { + margin-left: -1rem; + margin-right: 0; + } + [class*='m-col-s-'].m-right-s { + margin-left: 0; + margin-right: -1rem; + } + .m-row > [class*='m-col-s-'].m-left-s { + margin-left: 0; + } + .m-row > [class*='m-col-s-'].m-right-s { + margin-right: 0; + } + .m-center-s, [class*='m-col-s-'].m-center-s { + margin-left: auto; + margin-right: auto; + float: none; + } + .m-col-s-1 { width: calc(1 * 100% / 12); } + .m-col-s-2 { width: calc(2 * 100% / 12); } + .m-col-s-3 { width: calc(3 * 100% / 12); } + .m-col-s-4 { width: calc(4 * 100% / 12); } + .m-col-s-5 { width: calc(5 * 100% / 12); } + .m-col-s-6 { width: calc(6 * 100% / 12); } + .m-col-s-7 { width: calc(7 * 100% / 12); } + .m-col-s-8 { width: calc(8 * 100% / 12); } + .m-col-s-9 { width: calc(9 * 100% / 12); } + .m-col-s-10 { width: calc(10 * 100% / 12); } + .m-col-s-11 { width: calc(11 * 100% / 12); } + .m-col-s-12 { width: calc(12 * 100% / 12); } + .m-push-s-0 { left: calc(0 * 100% / 12); } + .m-push-s-1 { left: calc(1 * 100% / 12); } + .m-push-s-2 { left: calc(2 * 100% / 12); } + .m-push-s-3 { left: calc(3 * 100% / 12); } + .m-push-s-4 { left: calc(4 * 100% / 12); } + .m-push-s-5 { left: calc(5 * 100% / 12); } + .m-push-s-6 { left: calc(6 * 100% / 12); } + .m-push-s-7 { left: calc(7 * 100% / 12); } + .m-push-s-8 { left: calc(8 * 100% / 12); } + .m-push-s-9 { left: calc(9 * 100% / 12); } + .m-push-s-10 { left: calc(10 * 100% / 12); } + .m-push-s-11 { left: calc(11 * 100% / 12); } + .m-pull-s-0 { right: calc(0 * 100% / 12); } + .m-pull-s-1 { right: calc(1 * 100% / 12); } + .m-pull-s-2 { right: calc(2 * 100% / 12); } + .m-pull-s-3 { right: calc(3 * 100% / 12); } + .m-pull-s-4 { right: calc(4 * 100% / 12); } + .m-pull-s-5 { right: calc(5 * 100% / 12); } + .m-pull-s-6 { right: calc(6 * 100% / 12); } + .m-pull-s-7 { right: calc(7 * 100% / 12); } + .m-pull-s-8 { right: calc(8 * 100% / 12); } + .m-pull-s-9 { right: calc(9 * 100% / 12); } + .m-pull-s-10 { right: calc(10 * 100% / 12); } + .m-pull-s-11 { right: calc(11 * 100% / 12); } + .m-clearfix-t::after { display: none; } + .m-hide-s { display: none; } + .m-show-s { display: block; } + .m-col-s-none { + width: auto; + float: none; + } +} +@media screen and (min-width: 768px) { + .m-container { width: 750px; } + .m-container-inflatable .m-col-m-10 .m-container-inflate { + margin-left: -10%; + margin-right: -10%; + } + [class*='m-col-m-'] { float: left; } + [class*='m-col-m-'].m-left-m, [class*='m-col-m-'].m-right-m { + padding-top: 0px; + padding-bottom: 0px; + } + .m-left-m { + float: left; + } + .m-right-m, [class*='m-col-m-'].m-right-m { + float: right; + } + [class*='m-col-m-'].m-left-m { + margin-left: -1rem; + margin-right: 0; + } + [class*='m-col-m-'].m-right-m { + margin-left: 0; + margin-right: -1rem; + } + .m-row > [class*='m-col-m-'].m-left-m { + margin-left: 0; + } + .m-row > [class*='m-col-m-'].m-right-m { + margin-right: 0; + } + .m-center-m, [class*='m-col-m-'].m-center-m { + margin-left: auto; + margin-right: auto; + float: none; + } + .m-col-m-1 { width: calc(1 * 100% / 12); } + .m-col-m-2 { width: calc(2 * 100% / 12); } + .m-col-m-3 { width: calc(3 * 100% / 12); } + .m-col-m-4 { width: calc(4 * 100% / 12); } + .m-col-m-5 { width: calc(5 * 100% / 12); } + .m-col-m-6 { width: calc(6 * 100% / 12); } + .m-col-m-7 { width: calc(7 * 100% / 12); } + .m-col-m-8 { width: calc(8 * 100% / 12); } + .m-col-m-9 { width: calc(9 * 100% / 12); } + .m-col-m-10 { width: calc(10 * 100% / 12); } + .m-col-m-11 { width: calc(11 * 100% / 12); } + .m-col-m-12 { width: calc(12 * 100% / 12); } + .m-push-m-0 { left: calc(0 * 100% / 12); } + .m-push-m-1 { left: calc(1 * 100% / 12); } + .m-push-m-2 { left: calc(2 * 100% / 12); } + .m-push-m-3 { left: calc(3 * 100% / 12); } + .m-push-m-4 { left: calc(4 * 100% / 12); } + .m-push-m-5 { left: calc(5 * 100% / 12); } + .m-push-m-6 { left: calc(6 * 100% / 12); } + .m-push-m-7 { left: calc(7 * 100% / 12); } + .m-push-m-8 { left: calc(8 * 100% / 12); } + .m-push-m-9 { left: calc(9 * 100% / 12); } + .m-push-m-10 { left: calc(10 * 100% / 12); } + .m-push-m-11 { left: calc(11 * 100% / 12); } + .m-pull-m-0 { right: calc(0 * 100% / 12); } + .m-pull-m-1 { right: calc(1 * 100% / 12); } + .m-pull-m-2 { right: calc(2 * 100% / 12); } + .m-pull-m-3 { right: calc(3 * 100% / 12); } + .m-pull-m-4 { right: calc(4 * 100% / 12); } + .m-pull-m-5 { right: calc(5 * 100% / 12); } + .m-pull-m-6 { right: calc(6 * 100% / 12); } + .m-pull-m-7 { right: calc(7 * 100% / 12); } + .m-pull-m-8 { right: calc(8 * 100% / 12); } + .m-pull-m-9 { right: calc(9 * 100% / 12); } + .m-pull-m-10 { right: calc(10 * 100% / 12); } + .m-pull-m-11 { right: calc(11 * 100% / 12); } + .m-clearfix-s::after { display: none; } + .m-hide-m { display: none; } + .m-show-m { display: block; } + .m-col-m-none { + width: auto; + float: none; + } +} +@media screen and (min-width: 992px) { + .m-container { width: 960px; } + .m-container-inflatable .m-col-l-10 .m-container-inflate { + margin-left: -10%; + margin-right: -10%; + } + [class*='m-col-l-'] { float: left; } + [class*='m-col-l-'].m-left-l, [class*='m-col-l-'].m-right-l { + padding-top: 0px; + padding-bottom: 0px; + } + .m-left-l { + float: left; + } + .m-right-l, [class*='m-col-l-'].m-right-l { + float: right; + } + [class*='m-col-l-'].m-left-l { + margin-left: -1rem; + margin-right: 0; + } + [class*='m-col-l-'].m-right-l { + margin-left: 0; + margin-right: -1rem; + } + .m-row > [class*='m-col-l-'].m-left-l { + margin-left: 0; + } + .m-row > [class*='m-col-l-'].m-right-l { + margin-right: 0; + } + .m-center-l, [class*='m-col-l-'].m-center-l { + margin-left: auto; + margin-right: auto; + float: none; + } + .m-col-l-1 { width: calc(1 * 100% / 12); } + .m-col-l-2 { width: calc(2 * 100% / 12); } + .m-col-l-3 { width: calc(3 * 100% / 12); } + .m-col-l-4 { width: calc(4 * 100% / 12); } + .m-col-l-5 { width: calc(5 * 100% / 12); } + .m-col-l-6 { width: calc(6 * 100% / 12); } + .m-col-l-7 { width: calc(7 * 100% / 12); } + .m-col-l-8 { width: calc(8 * 100% / 12); } + .m-col-l-9 { width: calc(9 * 100% / 12); } + .m-col-l-10 { width: calc(10 * 100% / 12); } + .m-col-l-11 { width: calc(11 * 100% / 12); } + .m-col-l-12 { width: calc(12 * 100% / 12); } + .m-push-l-0 { left: calc(0 * 100% / 12); } + .m-push-l-1 { left: calc(1 * 100% / 12); } + .m-push-l-2 { left: calc(2 * 100% / 12); } + .m-push-l-3 { left: calc(3 * 100% / 12); } + .m-push-l-4 { left: calc(4 * 100% / 12); } + .m-push-l-5 { left: calc(5 * 100% / 12); } + .m-push-l-6 { left: calc(6 * 100% / 12); } + .m-push-l-7 { left: calc(7 * 100% / 12); } + .m-push-l-8 { left: calc(8 * 100% / 12); } + .m-push-l-9 { left: calc(9 * 100% / 12); } + .m-push-l-10 { left: calc(10 * 100% / 12); } + .m-push-l-11 { left: calc(11 * 100% / 12); } + .m-pull-l-0 { right: calc(0 * 100% / 12); } + .m-pull-l-1 { right: calc(1 * 100% / 12); } + .m-pull-l-2 { right: calc(2 * 100% / 12); } + .m-pull-l-3 { right: calc(3 * 100% / 12); } + .m-pull-l-4 { right: calc(4 * 100% / 12); } + .m-pull-l-5 { right: calc(5 * 100% / 12); } + .m-pull-l-6 { right: calc(6 * 100% / 12); } + .m-pull-l-7 { right: calc(7 * 100% / 12); } + .m-pull-l-8 { right: calc(8 * 100% / 12); } + .m-pull-l-9 { right: calc(9 * 100% / 12); } + .m-pull-l-10 { right: calc(10 * 100% / 12); } + .m-pull-l-11 { right: calc(11 * 100% / 12); } + .m-clearfix-m::after { display: none; } + .m-hide-l { display: none; } + .m-show-l { display: block; } + .m-col-l-none { + width: auto; + float: none; + } +} + +html { + font-size: 16px; + background-color: #2f363f; +} +body { + font-family: 'Source Sans Pro', sans-serif; + font-size: 1rem; + color: #dcdcdc; +} +h1, h2, h3, h4, h5, h6 { + margin-top: 0; + font-weight: bold; +} +h1 { + margin-bottom: 1rem; +} +h2, h3, h4, h5, h6 { + margin-bottom: 0.5rem; +} +p, ul, ol, dl { + margin-top: 0; +} +ul, ol { + padding-left: 2rem; +} +ul ol, ul ul, ol ol, ol ul { + margin-bottom: 0; +} +main p { + text-indent: 1.5rem; + text-align: justify; +} +main p.m-noindent, li p, table.m-table td p { + text-indent: 0; + text-align: left; +} +blockquote { + margin-top: 0; + margin-left: 1rem; + margin-right: 1rem; + padding: 1rem; + border-left-style: solid; + border-left-width: 0.25rem; +} +hr { + width: 75%; + border-width: 0.0625rem; + border-style: solid; +} +blockquote, hr { + border-color: #405363; +} +pre { + font-family: 'Source Code Pro', monospace, monospace, monospace; /* https://en.wikipedia.org/wiki/User:Davidgothberg/Test59 */ + font-size: 0.9rem; + padding: 0.5rem 1rem; + color: #e6e6e6; + background-color: #22272e; + border-radius: 0.2rem; + overflow-x: auto; + margin-top: 0; +} +pre.m-console { + background-color: #000000; +} +abbr { + cursor: help; + text-decoration: underline dotted; +} +sub, sup { + font-size: 0.75rem; + line-height: 0; + position: relative; + vertical-align: baseline; +} +sup { top: -0.35rem; } +sub { bottom: -0.2rem; } +a { + color: #5b9dd9; +} +a:hover, a:focus, a:active { + color: #a5c9ea; +} +a img { border: 0; } +mark { + padding: 0.0625rem; + background-color: #c7cf2f; + color: #2f83cc; +} +code { + font-family: 'Source Code Pro', monospace, monospace, monospace; + font-size: 0.9rem; + padding: 0.125rem; + color: #e6e6e6; + background-color: #22272e; +} +code.m-console { + background-color: #000000; +} +body > header > nav { + width: 100%; + background-color: #22272e; + min-height: 3rem; +} +body > header > nav.m-navbar-landing, +body > header > nav.m-navbar-jumbo { + background-color: transparent; + position: relative; +} +body > header > nav.m-navbar-landing { + opacity: 0.8; +} +body > header > nav.m-navbar-jumbo { + background-color: rgba(34, 39, 46, 0.25); + opacity: 1; +} +body > header > nav.m-navbar-landing:hover, +body > header > nav.m-navbar-jumbo:hover { + background-color: rgba(34, 39, 46, 0.75); + opacity: 1; +} +body> header > nav.m-navbar-landing:target, +body> header > nav.m-navbar-jumbo:target { + background-color: #22272e; + opacity: 1; +} +body > header > nav.m-navbar-landing a#m-navbar-brand.m-navbar-brand-hidden { + visibility: hidden; +} +body > header > nav.m-navbar-landing:target a#m-navbar-brand.m-navbar-brand-hidden { + visibility: visible; +} +body > header > nav { + margin-left: auto; + margin-right: auto; + color: #ffffff; +} +body > header > nav a { + text-decoration: none; + text-transform: none; + line-height: 1.5rem; + display: inline-block; + vertical-align: middle; + color: #ffffff; +} +body > header > nav a#m-navbar-brand, body > header > nav a#m-navbar-show, body > header > nav a#m-navbar-hide { + text-transform: uppercase; + font-weight: bold; + font-size: 1.125rem; + line-height: 3rem; +} +body > header > nav a#m-navbar-brand .m-thin { + font-weight: normal; +} +body > header > nav a#m-navbar-show:before, body > header > nav a#m-navbar-hide:before { + content:'\2630'; +} +body > header > nav #m-navbar-collapse { + padding-bottom: 1rem; +} +body > header > nav #m-navbar-collapse li { + border-style: solid; + border-color: transparent; + border-width: 0 0 0 0.25rem; + margin-left: -1rem; +} +body > header > nav #m-navbar-collapse li a { + border-style: solid; + border-color: transparent; + margin-left: -0.25rem; + padding-left: 0.75rem; + border-width: 0 0 0 0.25rem; + width: 100%; +} +body > header > nav #m-navbar-collapse li a#m-navbar-current { + color: #5b9dd9; + border-color: #5b9dd9; +} +body > header > nav ol { + list-style-type: none; + margin: 0; +} +body > header > nav ol ol { + padding-left: 1.5rem; +} +body > header > nav [class*='m-col-'] { + padding-top: 0; + padding-bottom: 0; +} +body > header > nav a:hover, body > header > nav a:focus, body > header > nav a:active { + color: #a5c9ea; +} +body > header > nav #m-navbar-collapse li:hover { + border-color: #a5c9ea; +} +body > header > nav #m-navbar-collapse li a:hover, +body > header > nav #m-navbar-collapse li a:focus, +body > header > nav #m-navbar-collapse li a:active { + border-color: #a5c9ea; + background-color: #292f37; +} +body > header > nav.m-navbar-landing #m-navbar-collapse li a:hover, +body > header > nav.m-navbar-jumbo #m-navbar-collapse li a:hover, +body > header > nav.m-navbar-landing #m-navbar-collapse li a:focus, +body > header > nav.m-navbar-jumbo #m-navbar-collapse li a:focus, +body > header > nav.m-navbar-landing #m-navbar-collapse li a:active, +body > header > nav.m-navbar-jumbo #m-navbar-collapse li a:active { + background-color: rgba(41, 47, 55, 0.5); +} +body > header > nav #m-navbar-hide { + display: none; +} +body > header > nav:target #m-navbar-collapse { + display: block; +} +body > header > nav:target #m-navbar-show { + display: none; +} +body > header > nav:target #m-navbar-hide { + display: inline-block; +} +@media screen and (min-width: 768px) { + body > header > nav #m-navbar-show, body > header > nav #m-navbar-hide, + body > header > nav:target #m-navbar-show, body > header > nav:target #m-navbar-hide { + display: none; + } + body > header > nav a { + line-height: 3rem; + margin-left: 0; + padding-left: 1rem; + padding-right: 1rem; + white-space: nowrap; + } + body > header > nav #m-navbar-collapse { + padding-bottom: 0; + } + body > header > nav #m-navbar-collapse li ol { + background-color: #22272e; + } + body > header > nav #m-navbar-collapse ol ol li { + margin-left: 0; + padding-left: 0; + border-left-width: 0; + } + body > header > nav #m-navbar-collapse ol ol li a { + margin-left: 0; + padding-left: 0.75rem; + } + body > header > nav #m-navbar-collapse > .m-row > ol > li { + margin-left: 0; + border-left-width: 0; + } + body > header > nav a#m-navbar-brand, body > header > nav #m-navbar-collapse > .m-row > ol > li > a { + line-height: 2.75rem; + margin-left: 0; + border-width: 0 0 0.25rem 0; + } + body > header > nav #m-navbar-collapse ol { + padding-left: 0; + padding-right: 0; + } + body > header > nav #m-navbar-collapse > .m-row > ol, body > header > nav #m-navbar-collapse > .m-row > ol > li { + float: left; + } + body > header > nav #m-navbar-collapse ol ol { + z-index: 99999; + position: absolute; + visibility: hidden; + min-width: 7.5rem; + } + body > header > nav #m-navbar-collapse li:hover ol { + visibility: visible; + } +} +body > footer { + width: 100%; +} +body > footer > nav { + padding-top: 1rem; + padding-bottom: 1rem; + font-size: 0.85rem; + text-align: center; + color: #c5c5c5; + background-color: #444e5c; +} +body > footer > nav h3, body > footer > nav h3 a { + text-transform: uppercase; + font-weight: normal; +} +body > footer > nav ul { + list-style-type: none; + padding: 0; + margin: 0; +} +body > footer > nav a { + text-decoration: none; + text-transform: none; + color: #ffffff; +} +body > footer > nav a:hover, body > footer > nav a:focus, body > footer > nav a:active { + color: #a5c9ea; +} +body > main { + padding-top: 1rem; + padding-bottom: 1rem; +} +article h1 { + font-size: 1.75rem; +} +article h1 .m-breadcrumb { + color: #747474; + font-weight: normal; +} +article h1 .m-breadcrumb a { + color: #a5c9ea; +} +article h1 .m-breadcrumb a:hover, article h1 a:focus, article h1 a:active { + color: #dcdcdc; +} +article > header h1 { + font-size: 2rem; + margin-bottom: 0.5rem; +} +article h1 a, article > header h1, article > header h1 a, +article section > h2, article section > h2 a, +article section > h3, article section > h3 a, +article section > h4, article section > h4 a, +article section > h5, article section > h5 a, +article section > h6, article section > h6 a { + color: #a5c9ea; +} +article h1 a:hover, article > header h1 a:hover, article > header h1 a:focus, article > header h1 a:active, +article section > h2 a:hover, article section > h2 a:focus, article section > h2 a:active, +article section > h3 a:hover, article section > h3 a:focus, article section > h3 a:active, +article section > h4 a:hover, article section > h4 a:focus, article section > h4 a:active, +article section > h5 a:hover, article section > h5 a:focus, article section > h5 a:active, +article section > h6 a:hover, article section > h6 a:focus, article section > h6 a:active { + color: #dcdcdc; +} +article > header .m-date { + display: block; + width: 2.5rem; + float: left; + text-align: center; + line-height: 95%; + font-size: 0.75rem; + font-weight: normal; + white-space: nowrap; + border-right-style: solid; + border-right-width: 0.125rem; + border-color: #a5c9ea; + padding-right: 0.75rem; + margin-top: -0.1rem; + margin-right: 0.75rem; + margin-bottom: 0.25rem; +} +article > header .m-date-day { + display: block; + font-weight: bold; + padding-top: 0.2rem; + padding-bottom: 0.15rem; + font-size: 1.25rem; +} +article > header p { + color: #f0f0f0; + font-size: 1.125rem; +} +article > header h1::after { + content: " "; + clear: both; + display: table; +} +article > footer { + color: #c5c5c5; +} +article > footer p { + font-style: italic; + font-size: 0.85rem; + text-indent: 0; +} +article section:target { + margin-left: -1.0rem; + border-left-style: solid; + border-left-width: 0.25rem; + padding-left: 0.75rem; + border-color: #a5c9ea; +} +article h1 a, article > header h1 a, article section > h2 a, article section > h3 a, +article section > h4 a, article section > h5 a, article section > h6 a { + text-decoration: none; +} +#m-landing-image { + background-size: cover; + background-color: #222222; + background-position: center center; + background-repeat: no-repeat; + margin-top: -4rem; + padding-top: 5rem; + color: #ffffff; +} +#m-landing-cover { + padding-bottom: 7rem; + margin-bottom: -3rem; +} +article#m-jumbo { + margin-top: -1rem; +} +article#m-jumbo > header #m-jumbo-image { + background-size: cover; + background-color: #222222; + background-position: center center; + background-repeat: no-repeat; + font-size: 2.5vh; + height: 60vh; + margin-top: -4rem; + margin-bottom: 1rem; + padding-top: 5rem; +} +article#m-jumbo > header #m-jumbo-cover, #m-landing-cover { + background: linear-gradient(transparent 0%, transparent 50%, #2f363f 100%); + width: 100%; + height: 100%; +} +article#m-jumbo > header h1, article#m-jumbo > header h2 { + text-align: center; + font-weight: bold; +} +article#m-jumbo > header h1 { + font-size: 10vh; +} +article#m-jumbo > header h2 { + font-size: 3vh; +} +article#m-jumbo > header a { + text-decoration: none; +} +article#m-jumbo > header, article#m-jumbo > header h1, article#m-jumbo > header a { + color: #ffffff; +} +article#m-jumbo > header a:hover, article#m-jumbo > header a:focus, article#m-jumbo > header a:active { + color: #f0f0f0; +} +article#m-jumbo.m-inverted > header, article#m-jumbo.m-inverted > header h1, article#m-jumbo.m-inverted > header a { + color: #000000; +} +article#m-jumbo.m-inverted > header a:hover, article#m-jumbo.m-inverted > header a:focus, article#m-jumbo.m-inverted > header a:active { + color: #0f0f0f; +} +.m-article-pagination { + text-align: center; + padding: 1rem; +} +nav.m-navpanel { + text-align: center; +} +nav.m-navpanel h3 { + text-transform: uppercase; + font-weight: normal; +} +nav.m-navpanel ol { + text-transform: lowercase; +} +nav.m-navpanel ol, nav.m-navpanel ul { + list-style-type: none; + padding: 0; +} +nav.m-navpanel a { + color: #ffffff; + text-decoration: none; +} +nav.m-navpanel a:hover, nav.m-navpanel a:focus, nav.m-navpanel a:active { + color: #a5c9ea; +} +ul.m-tagcloud li { display: inline; } +ul.m-tagcloud li.m-tag-1 { font-size: 0.75rem; } +ul.m-tagcloud li.m-tag-2 { font-size: 0.825rem; } +ul.m-tagcloud li.m-tag-3 { font-size: 1rem; } +ul.m-tagcloud li.m-tag-4 { font-size: 1.25rem; } +ul.m-tagcloud li.m-tag-5 { font-size: 1.5rem; } +div.m-scroll { + max-width: 100%; + overflow-x: auto; +} +.m-fullwidth { + width: 100%; +} +.m-text-center, .m-text-center.m-noindent, table.m-table th.m-text-center, .m-text-center p { + text-align: center; +} +.m-text-left, .m-text-left.m-noindent, table.m-table th.m-text-left, .m-text-right p { + text-align: left; +} +.m-text-right, .m-text-right.m-noindent, table.m-table th.m-text-right, .m-text-right p { + text-align: right; +} +.m-text.m-small { + font-size: 85.4%; +} +.m-text.m-big { + font-size: 117%; +} +.m-text.m-strong { + font-weight: bold; +} +.m-text.m-em { + font-style: italic; +} +h1 .m-thin, h2 .m-thin, h3 .m-thin, h4 .m-thin, h5 .m-thin, h6 .m-thin { + font-weight: normal; +} +ul.m-unstyled, ol.m-unstyled { + list-style-type: none; + padding-left: 0; +} +ul[class*='m-block-'], ol[class*='m-block-'] { + padding-left: 0; +} +ul[class*='m-block-'] li, ol[class*='m-block-'] li { + display: inline; +} +ul[class*='m-block-bar-'] li:not(:last-child)::after, ol[class*='m-block-bar-'] li:not(:last-child)::after { + content: " | "; +} +@media screen and (min-width: 576px) { + ul.m-block-bar-s, ol.m-block-bar-s { padding-left: 2rem; } + ul.m-block-bar-s li, ol.m-block-bar-s li { display: list-item; } + ul.m-block-bar-s li:not(:last-child)::after, ol.m-block-bar-s li:not(:last-child)::after { content: ""; } +} +@media screen and (min-width: 768px) { + ul.m-block-bar-m, ol.m-block-bar-m { padding-left: 2rem; } + ul.m-block-bar-m li, ol.m-block-bar-m li { display: list-item; } + ul.m-block-bar-m li:not(:last-child)::after, ol.m-block-bar-m li:not(:last-child)::after { content: ""; } +} +@media screen and (min-width: 992px) { + ul.m-block-bar-l, ol.m-block-bar-l { padding-left: 2rem; } + ul.m-block-bar-l li, ol.m-block-bar-l li { display: list-item; } + ul.m-block-bar-l li:not(:last-child)::after, ol.m-block-bar-l li:not(:last-child)::after { content: ""; } +} +p.m-poem { + text-indent: 0; + text-align: left; + margin-left: 1.5rem; +} +p.m-transition { + color: #405363; + text-indent: 0; + text-align: center; + font-size: 2rem; +} +dl.m-diary { + margin-bottom: 1.25rem; +} +dl.m-diary:last-child { + margin-bottom: 0.25rem; +} +dl.m-diary dt { + font-weight: bold; + width: 3.5rem; + float: left; + clear: both; + padding-top: 0.25rem; +} +dl.m-diary dd { + padding-top: 0.25rem; + padding-left: 3.5rem; +} +.m-note { + border-radius: 0.2rem; + padding: 1rem; +} +.m-frame { + background-color: #2f363f; + border-style: solid; + border-width: 0.125rem; + border-radius: 0.2rem; + border-color: #405363; + padding: 0.875rem; +} +.m-block { + border-style: solid; + border-width: 0.0625rem; + border-left-width: 0.25rem; + border-radius: 0.2rem; + border-color: #405363; + padding: 0.9375rem 0.9375rem 0.9375rem 0.75rem; +} +.m-block.m-badge::after { + content: ' '; + display: block; + clear: both; +} +.m-block.m-badge h3 { + margin-left: 5rem; +} +.m-block.m-badge p { + margin-left: 5rem; + text-indent: 0; +} +.m-block.m-badge img { + width: 4rem; + height: 4rem; + border-radius: 2rem; + float: left; +} +a.m-button { + display: inline-block; + border-radius: 0.2rem; + padding-top: 0.75rem; + padding-bottom: 0.75rem; + padding-left: 1.5rem; + padding-right: 1.5rem; + text-decoration: none; + text-align: center; + font-size: 1.17rem; +} +a.m-button.m-fullwidth { + display: block; + padding-left: 0; + padding-right: 0; +} +a.m-button .m-big:first-child { + font-size: 1.37rem; + font-weight: bold; +} +a.m-button .m-small:last-child { + font-size: 0.854rem; +} +.m-label { + border-radius: 0.2rem; + font-size: 75%; + font-weight: normal; + padding: 0.125rem 0.25rem; + vertical-align: 7.5%; +} +.m-label.m-flat { + border-width: 0.0625rem; + border-style: solid; + border-color: #747474; + padding: 0.0625rem 0.1875rem; +} +table.m-table { + border-collapse: collapse; + margin-left: auto; + margin-right: auto; +} +div.m-scroll > table.m-table:last-child { + margin-bottom: 0.0625rem; +} +table.m-table:not(.m-flat) tbody tr:hover { + background-color: #405363; +} +table.m-table th, table.m-table td { + vertical-align: top; + border-style: solid; + border-top-width: 0.0625rem; + border-left-width: 0; + border-right-width: 0; + border-bottom-width: 0; + border-color: #405363; +} +table.m-table caption { + padding-bottom: 0.5rem; +} +table.m-table thead tr:first-child th, table.m-table thead tr:first-child td { + border-top-width: 0.125rem; +} +table.m-table thead th, table.m-table thead td { + border-bottom-width: 0.125rem; + vertical-align: bottom; +} +table.m-table tfoot th, table.m-table tfoot td { + border-top-width: 0.125rem; +} +table.m-table th, table.m-table td { + padding: 0.5rem; +} +table.m-table th { + text-align: left; +} +table.m-table td.m-default, th.m-default, +table.m-table td.m-primary, th.m-primary, +table.m-table td.m-success, th.m-success, +table.m-table td.m-warning, th.m-warning, +table.m-table td.m-danger, th.m-danger, +table.m-table td.m-info, th.m-info, +table.m-table td.m-dim, th.m-dim { + padding-left: 0.4375rem; + padding-right: 0.4375rem; + border-left-width: 0.0625rem; +} +table.m-table tr.m-default td, table.m-table td.m-default, +table.m-table tr.m-default th, table.m-table th.m-default, +table.m-table tr.m-primary td, table.m-table td.m-primary, +table.m-table tr.m-primary th, table.m-table th.m-primary, +table.m-table tr.m-success td, table.m-table td.m-success, +table.m-table tr.m-success th, table.m-table th.m-success, +table.m-table tr.m-warning td, table.m-table td.m-warning, +table.m-table tr.m-warning th, table.m-table th.m-warning, +table.m-table tr.m-danger td, table.m-table td.m-danger, +table.m-table tr.m-danger th, table.m-table th.m-danger, +table.m-table tr.m-info td, table.m-table td.m-info, +table.m-table tr.m-info th, table.m-table th.m-info, +table.m-table tr.m-dim td, table.m-table td.m-dim, +table.m-table tr.m-dim th, table.m-table th.m-dim { + border-color: #2f363f; +} +.m-block.m-default { border-left-color: #405363; } +.m-block.m-default h3, .m-block.m-default h4, .m-block.m-default h5, .m-block.m-default h6 { + color: #dcdcdc; +} +.m-block.m-primary { border-left-color: #a5c9ea; } +.m-block.m-primary h3, .m-block.m-primary h4, .m-block.m-primary h5, .m-block.m-primary h6 { + color: #a5c9ea; +} +.m-block.m-success { border-left-color: #3bd267; } +.m-block.m-success h3, .m-block.m-success h4, .m-block.m-success h5, .m-block.m-success h6 { + color: #3bd267; +} +.m-block.m-warning { border-left-color: #c7cf2f; } +.m-block.m-warning h3, .m-block.m-warning h4, .m-block.m-warning h5, .m-block.m-warning h6 { + color: #c7cf2f; +} +.m-block.m-danger { border-left-color: #cd3431; } +.m-block.m-danger h3, .m-block.m-danger h4, .m-block.m-danger h5, .m-block.m-danger h6 { + color: #cd3431; +} +.m-block.m-info { border-left-color: #2f83cc; } +.m-block.m-info h3, .m-block.m-info h4, .m-block.m-info h5, .m-block.m-info h6 { + color: #2f83cc; +} +.m-block.m-dim { + border-left-color: #747474; + color: #747474; +} +.m-block.m-dim a { color: #acacac; } +.m-block.m-dim a:hover, .m-block.m-dim a:focus, .m-block.m-dim a:active { + color: #747474; +} +.m-block.m-flat { border-color: transparent; } +.m-block.m-flat h3, .m-block.m-flat h4, .m-block.m-flat h5. .m-block.m-flat h6 { + color: #dcdcdc; +} +.m-note.m-default { background-color: #34424d; } +.m-note.m-default, table.m-table tr.m-default td, table.m-table td.m-default, + table.m-table tr.m-default th, table.m-table th.m-default { + color: #dcdcdc; +} +.m-note.m-default a:hover, table.m-table tr.m-default td a:hover, table.m-table td.m-default a:hover, + table.m-table tr.m-default th a:hover, table.m-table th.m-default a:hover, +.m-note.m-default a:focus, table.m-table tr.m-default td a:focus, table.m-table td.m-default a:focus, + table.m-table tr.m-default th a:focus, table.m-table th.m-default a:focus, +.m-note.m-default a:active, table.m-table tr.m-default td a:active, table.m-table td.m-default a:active, + table.m-table tr.m-default th a:active, table.m-table th.m-default a:active { + color: #a5c9ea; +} +.m-note.m-primary a, table.m-table tr.m-primary td a, table.m-table td.m-primary a, + table.m-table tr.m-primary th a, table.m-table th.m-primary a { + color: #5b9dd9; +} +.m-note.m-primary, table.m-table tr.m-primary td, table.m-table td.m-primary, + table.m-table tr.m-primary th, table.m-table th.m-primary { + background-color: #a5c2db; + color: #2f363f; +} +.m-note.m-primary a, table.m-table tr.m-primary td a, table.m-table td.m-primary a, + table.m-table tr.m-primary th a, table.m-table th.m-primary a { + color: #2a75b6; +} +.m-note.m-primary a:hover, table.m-table tr.m-primary td a:hover, table.m-table td.m-primary a:hover, + table.m-table tr.m-primary th a:hover, table.m-table th.m-primary a:hover, +.m-note.m-primary a:focus, table.m-table tr.m-primary td a:focus, table.m-table td.m-primary a:focus, + table.m-table tr.m-primary th a:focus, table.m-table th.m-primary a:focus, +.m-note.m-primary a:active, table.m-table tr.m-primary td a:active, table.m-table td.m-primary a:active, + table.m-table tr.m-primary th a:active, table.m-table th.m-primary a:active { + color: #2f363f; +} +.m-note.m-success, table.m-table tr.m-success td, table.m-table td.m-success, + table.m-table tr.m-success th, table.m-table th.m-success { + background-color: #2a703f; + color: #acecbe; +} +.m-note.m-success a, table.m-table tr.m-success td a, table.m-table td.m-success a, + table.m-table tr.m-success th a, table.m-table th.m-success a { + color: #3bd267; +} +.m-note.m-success a:hover, table.m-table tr.m-success td a:hover, table.m-table td.m-success a:hover, + table.m-table tr.m-success th a:hover, table.m-table th.m-success a:hover, +.m-note.m-success a:focus, table.m-table tr.m-success td a:focus, table.m-table td.m-success a:focus, + table.m-table tr.m-success th a:focus, table.m-table th.m-success a:focus, +.m-note.m-success a:active, table.m-table tr.m-success td a:active, table.m-table td.m-success a:active, + table.m-table tr.m-success th a:active, table.m-table th.m-success a:active { + color: #acecbe; +} +.m-note.m-warning, table.m-table tr.m-warning td, table.m-table td.m-warning, + table.m-table tr.m-warning th, table.m-table th.m-warning { + background-color: #6d702a; + color: #e9ecae; +} +.m-note.m-warning a, table.m-table tr.m-warning td a, table.m-table td.m-warning a, + table.m-table tr.m-warning th a, table.m-table th.m-warning a { + color: #b8bf2b; +} +.m-note.m-warning a:hover, table.m-table tr.m-warning td a:hover, table.m-table td.m-warning a:hover, + table.m-table tr.m-warning th a:hover, table.m-table th.m-warning a:hover, +.m-note.m-warning a:focus, table.m-table tr.m-warning td a:focus, table.m-table td.m-warning a:focus, + table.m-table tr.m-warning th a:focus, table.m-table th.m-warning a:focus, +.m-note.m-warning a:active, table.m-table tr.m-warning td a:active, table.m-table td.m-warning a:active, + table.m-table tr.m-warning th a:active, table.m-table th.m-warning a:active { + color: #e9ecae; +} +.m-note.m-danger, table.m-table tr.m-danger td, table.m-table td.m-danger, + table.m-table tr.m-danger th, table.m-table th.m-danger { + background-color: #702b2a; + color: #ff9391; +} +.m-note.m-danger a, table.m-table tr.m-danger td a, table.m-table td.m-danger a, + table.m-table tr.m-danger th a, table.m-table th.m-danger a { + color: #d85c59; +} +.m-note.m-danger a:hover, table.m-table tr.m-danger td a:hover, table.m-table td.m-danger a:hover, + table.m-table tr.m-danger th a:hover, table.m-table th.m-danger a:hover, +.m-note.m-danger a:focus, table.m-table tr.m-danger td a:focus, table.m-table td.m-danger a:focus, + table.m-table tr.m-danger th a:focus, table.m-table th.m-danger a:focus, +.m-note.m-danger a:active, table.m-table tr.m-danger td a:active, table.m-table td.m-danger a:active, + table.m-table tr.m-danger th a:active, table.m-table th.m-danger a:active { + color: #ff9391; +} +.m-note.m-info, table.m-table tr.m-info td, table.m-table td.m-info, + table.m-table tr.m-info th, table.m-table th.m-info { + background-color: #2a4f70; + color: #a5caeb; +} +.m-note.m-info a, table.m-table tr.m-info td a, table.m-table td.m-info a, + table.m-table tr.m-info th a, table.m-table th.m-info a { + color: #5297d7; +} +.m-note.m-info a:hover, table.m-table tr.m-info td a:hover, table.m-table td.m-info a:hover, + table.m-table tr.m-info th a:hover, table.m-table th.m-info a:hover, +.m-note.m-info a:focus, table.m-table tr.m-info td a:focus, table.m-table td.m-info a:focus, + table.m-table tr.m-info th a:focus, table.m-table th.m-info a:focus, +.m-note.m-info a:active, table.m-table tr.m-info td a:active, table.m-table td.m-info a:active, + table.m-table tr.m-info th a:active, table.m-table th.m-info a:active { + color: #a5caeb; +} +.m-note.m-dim, table.m-table tr.m-dim td, table.m-table td.m-dim, + table.m-table tr.m-dim th, table.m-table th.m-dim { + background-color: #2d3236; + color: #747474; +} +.m-note.m-dim a, table.m-table tr.m-dim td a, table.m-table td.m-dim a, + table.m-table tr.m-dim th a, table.m-table th.m-dim a { + color: #acacac; +} +.m-note.m-dim a:hover, table.m-table tr.m-dim td a:hover, table.m-table td.m-dim a:hover, + table.m-table tr.m-dim th a:hover, table.m-table th.m-dim a:hover, +.m-note.m-dim a:focus, table.m-table tr.m-dim td a:focus, table.m-table td.m-dim a:focus, + table.m-table tr.m-dim th a:focus, table.m-table th.m-dim a:focus, +.m-note.m-dim a:active, table.m-table tr.m-dim td a:active, table.m-table td.m-dim a:active, + table.m-table tr.m-dim th a:active, table.m-table th.m-dim a:active { + color: #747474; +} +.m-text.m-default, .m-label.m-flat.m-default { color: #dcdcdc; } +.m-text.m-primary, .m-label.m-flat.m-primary { color: #a5c9ea; } +.m-text.m-success, .m-label.m-flat.m-success { color: #3bd267; } +.m-text.m-warning, .m-label.m-flat.m-warning { color: #c7cf2f; } +.m-text.m-danger, .m-label.m-flat.m-danger { color: #cd3431; } +.m-text.m-info, .m-label.m-flat.m-info { color: #2f83cc; } +.m-text.m-dim, .m-label.m-flat.m-dim { color: #747474; } +.m-text.m-dim a { color: #acacac; } +.m-text.m-dim a:hover, .m-text.m-dim a:focus, .m-text.m-dim a:active { + color: #747474; +} +a.m-button, .m-label { color: #2f363f; } +a.m-button.m-default, .m-label:not(.m-flat).m-default { background-color: #dcdcdc; } +a.m-button.m-primary, .m-label:not(.m-flat).m-primary { background-color: #a5c9ea; } +a.m-button.m-success, .m-label:not(.m-flat).m-success { background-color: #3bd267; } +a.m-button.m-warning, .m-label:not(.m-flat).m-warning { background-color: #c7cf2f; } +a.m-button.m-danger, .m-label:not(.m-flat).m-danger { background-color: #cd3431; } +a.m-button.m-info, .m-label:not(.m-flat).m-info { background-color: #2f83cc; } +a.m-button.m-dim, .m-label:not(.m-flat).m-dim { background-color: #747474; } +a.m-button.m-default:hover, a.m-button.m-default:focus, a.m-button.m-default:active { + background-color: #a5c9ea; +} +a.m-button.m-primary:hover, a.m-button.m-primary:focus, a.m-button.m-primary:active { + background-color: #dcdcdc; +} +a.m-button.m-success:hover, a.m-button.m-success:focus, a.m-button.m-success:active { + background-color: #acecbe; +} +a.m-button.m-warning:hover, a.m-button.m-warning:focus, a.m-button.m-warning:active { + background-color: #e9ecae; +} +a.m-button.m-danger:hover, a.m-button.m-danger:focus, a.m-button.m-danger:active { + background-color: #ff9391; +} +a.m-button.m-info:hover, a.m-button.m-info:focus, a.m-button.m-info:active { + background-color: #5297d7; +} +a.m-button.m-dim:hover, a.m-button.m-dim:focus, a.m-button.m-dim:active { + background-color: #acacac; +} +img.m-image { + display: block; + margin-left: auto; + margin-right: auto; +} +div.m-image { + text-align: center; +} +img.m-image, div.m-image img { + max-width: 100%; + border-radius: 0.2rem; +} +div.m-image.m-fullwidth img { + width: 100%; +} +figure.m-figure { + max-width: 100%; + margin-top: 0; + margin-left: auto; + margin-right: auto; + position: relative; + display: table; +} +figure.m-figure:before { + position: absolute; + content: ' '; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: -1; + border-style: solid; + border-width: 0.125rem; + border-radius: 0.2rem; + border-color: #405363; +} +figure.m-figure.m-flat:before { + border-color: transparent; +} +figure.m-figure > * { + margin-left: 1rem; + margin-right: 1rem; + display: table-caption; + caption-side: bottom; +} +figure.m-figure > *:first-child { + display: inline; +} +figure.m-figure > *:last-child { + margin-bottom: 1rem; +} +figure.m-figure img { + position: relative; + margin-left: 0; + margin-right: 0; + margin-bottom: 0; + border-top-left-radius: 0.2rem; + border-top-right-radius: 0.2rem; + max-width: 100%; +} +figure.m-figure figcaption { + margin-top: 0.5rem; + margin-bottom: 0.5rem; + font-weight: bold; + font-size: 1.17rem; +} +figure.m-figure a img { + margin-left: -1rem; + margin-right: -1rem; +} +figure.m-figure.m-fullwidth, figure.m-figure.m-fullwidth > * { + display: block; +} +figure.m-figure.m-fullwidth > *:first-child { + display: inline; +} +figure.m-figure.m-fullwidth img { + width: 100%; +} +figure.m-figure.m-fullwidth:after { + content: ' '; + display: block; + margin-top: 1rem; + height: 1px; +} +figure.m-code-figure, figure.m-console-figure { + margin-top: 0; + margin-left: 0; + margin-right: 0; + position: relative; + padding: 1rem; +} +figure.m-code-figure:before, figure.m-console-figure:before { + position: absolute; + content: ' '; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: -1; + border-style: solid; + border-width: 0.125rem; + border-radius: 0.2rem; +} +figure.m-code-figure:before { + border-color: #22272e; +} +figure.m-console-figure:before { + border-color: #000000; +} +figure.m-code-figure.m-flat:before, figure.m-console-figure.m-flat:before { + border-color: transparent; +} +figure.m-code-figure > pre:first-child, figure.m-console-figure > pre:first-child { + position: relative; + margin: -1rem -1rem 1rem -1rem; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; +} +article section:target figure.m-code-figure, article section:target figure.m-console-figure { + z-index: 1; +} +.m-imagegrid > div { + background-color: #2f363f; /* to avoid section HL shining through */ +} +.m-imagegrid > div > figure { + display: block; + float: left; + position: relative; + margin: 0; +} +.m-imagegrid > div > figure > div, +.m-imagegrid > div > figure > figcaption, +.m-imagegrid > div > figure > a > div, +.m-imagegrid > div > figure > a > figcaption { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + border-color: #2f363f; + border-style: solid; + border-width: 0.25rem; + padding: 0.5rem; +} +.m-imagegrid > div > figure:first-child > div, +.m-imagegrid > div > figure:first-child > figcaption, +.m-imagegrid > div > figure:first-child > a > div, +.m-imagegrid > div > figure:first-child > a > figcaption { + border-left-width: 0; +} +.m-imagegrid > div > figure:last-child > div, +.m-imagegrid > div > figure:last-child > figcaption, +.m-imagegrid > div > figure:last-child > a > div, +.m-imagegrid > div > figure:last-child > a > figcaption { + border-right-width: 0; +} +.m-imagegrid > div > figure > figcaption, +.m-imagegrid > div > figure > a > figcaption { + color: transparent; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + font-size: 0.75rem; +} +.m-imagegrid > div > figure > div::before, +.m-imagegrid > div > figure > figcaption::before, +.m-imagegrid > div > figure > a > div::before, +.m-imagegrid > div > figure > a > figcaption::before { + content: ''; + display: inline-block; + height: 100%; + vertical-align: bottom; + width: 0; +} +.m-imagegrid > div > figure:hover > figcaption, +.m-imagegrid > div > figure:hover > a > figcaption { + background: linear-gradient(transparent 0%, transparent 75%, rgba(0, 0, 0, 0.85) 100%); + color: #ffffff; +} +.m-imagegrid > div > figure > img, +.m-imagegrid > div > figure > a > img { + width: 100%; + height: 100%; +} +.m-imagegrid > div::after { + display: block; + content: ' '; + clear: both; +} +@media screen and (max-width: 767px) { + .m-imagegrid > div > figure { + float: none; + width: 100% !important; + } + .m-imagegrid > div > figure > div, + .m-imagegrid > div > figure > figcaption, + .m-imagegrid > div > figure > a > div, + .m-imagegrid > div > figure > a > figcaption { + border-left-width: 0; + border-right-width: 0; + } +} +.m-container-inflatable > .m-row > [class*='m-col-'] > .m-note, +.m-container-inflatable > .m-row > [class*='m-col-'] > .m-frame, +.m-container-inflatable > .m-row > [class*='m-col-'] > .m-block, +.m-container-inflatable > .m-row > [class*='m-col-'] > .m-imagegrid, +.m-container-inflatable > .m-row > [class*='m-col-'] > pre, +.m-container-inflatable > .m-row > [class*='m-col-'] > figure.m-code-figure, +.m-container-inflatable > .m-row > [class*='m-col-'] > figure.m-console-figure, +.m-container-inflatable > .m-row > [class*='m-col-'] section > .m-note, +.m-container-inflatable > .m-row > [class*='m-col-'] section > .m-frame, +.m-container-inflatable > .m-row > [class*='m-col-'] section > .m-block, +.m-container-inflatable > .m-row > [class*='m-col-'] section > .m-imagegrid, +.m-container-inflatable > .m-row > [class*='m-col-'] section > pre, +.m-container-inflatable > .m-row > [class*='m-col-'] section > figure.m-code-figure, +.m-container-inflatable > .m-row > [class*='m-col-'] section > figure.m-console-figure { + margin-left: -1rem; + margin-right: -1rem; +} +@media screen and (min-width: 576px) { + .m-container-inflatable > .m-row > .m-col-s-10 > .m-imagegrid.m-container-inflate, + .m-container-inflatable > .m-row > .m-col-s-10 section > .m-imagegrid.m-container-inflate { + margin-left: -10%; + margin-right: -10%; + } +} +@media screen and (min-width: 768px) { + .m-container-inflatable > .m-row > .m-col-m-10 > .m-imagegrid.m-container-inflate, + .m-container-inflatable > .m-row > .m-col-m-10 section > .m-imagegrid.m-container-inflate { + margin-left: -10%; + margin-right: -10%; + } +} +@media screen and (min-width: 992px) { + .m-container-inflatable > .m-row > .m-col-l-10 > .m-imagegrid.m-container-inflate, + .m-container-inflatable > .m-row > .m-col-l-10 section > .m-imagegrid.m-container-inflate { + margin-left: -10%; + margin-right: -10%; + } +} +.m-container-inflatable section:target > .m-note, +.m-container-inflatable section:target > .m-frame, +.m-container-inflatable section:target > .m-block, +.m-container-inflatable section:target > pre, +.m-container-inflatable section:target > figure.m-code-figure > pre:first-child, +.m-container-inflatable section:target > figure.m-console-figure > pre:first-child, +.m-container-inflatable section:target section > .m-note, +.m-container-inflatable section:target section > .m-frame, +.m-container-inflatable section:target section > .m-block, +.m-container-inflatable section:target section > pre, +.m-container-inflatable section:target section > figure.m-code-figure > pre:first-child, +.m-container-inflatable section:target section > figure.m-console-figure > pre:first-child { + margin-left: -1.0rem; + border-left-style: solid; + border-left-width: 0.25rem; + border-top-left-radius: 0; + border-bottom-left-radius: 0; + padding-left: 0.75rem; +} +.m-container-inflatable section:target > figure.m-code-figure::before, +.m-container-inflatable section:target > figure.m-console-figure::before, +.m-container-inflatable section:target section > figure.m-code-figure::before, +.m-container-inflatable section:target section > figure.m-console-figure::before { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + border-left-width: 0.25rem; +} +.m-container-inflatable section:target > pre, +.m-container-inflatable section:target > figure.m-code-figure > pre:first-child, +.m-container-inflatable section:target > figure.m-console-figure > pre:first-child, +.m-container-inflatable section:target section > pre, +.m-container-inflatable section:target section > figure.m-code-figure > pre:first-child, +.m-container-inflatable section:target section > figure.m-console-figure > pre:first-child { + border-color: #405363; +} +.m-container-inflatable section:target > figure.m-code-figure::before, +.m-container-inflatable section:target > figure.m-console-figure::before, +.m-container-inflatable section:target > .m-note.m-default, +.m-container-inflatable section:target section > figure.m-code-figure::before, +.m-container-inflatable section:target section > figure.m-console-figure::before, +.m-container-inflatable section:target section > .m-note.m-default { + border-left-color: #405363; +} +.m-container-inflatable section:target > .m-note.m-primary, +.m-container-inflatable section:target section > .m-note.m-primary { + border-left-color: #a5c9ea; +} +.m-container-inflatable section:target > .m-note.m-success, +.m-container-inflatable section:target section > .m-note.m-success { + border-left-color: #3bd267; +} +.m-container-inflatable section:target > .m-note.m-warning, +.m-container-inflatable section:target section > .m-note.m-warning { + border-left-color: #c7cf2f; +} +.m-container-inflatable section:target > .m-note.m-danger, +.m-container-inflatable section:target section > .m-note.m-danger { + border-left-color: #cd3431; +} +.m-container-inflatable section:target > .m-note.m-info, +.m-container-inflatable section:target section > .m-note.m-info { + border-left-color: #2f83cc; +} +.m-container-inflatable section:target > .m-note.m-dim, +.m-container-inflatable section:target section > .m-note.m-dim { + border-left-color: #747474; +} +pre.m-code span.hll { + margin-left: -1.0rem; + margin-right: -1.0rem; + padding-left: 1.0rem; +} +pre.m-code.m-inverted { + color: rgba(230, 230, 230, 0.33); +} +pre.m-code.m-inverted > span { + opacity: 0.3333; +} +pre.m-code.m-inverted > span.hll { + color: #dcdcdc; + opacity: 1; + background-color: transparent; + border-color: transparent; +} +div.m-math { + overflow-x: auto; + overflow-y: hidden; + text-align: center; +} +div.m-math svg, svg.m-math { fill: #dcdcdc; } +div.m-math.m-default svg, svg.m-math.m-default { fill: #dcdcdc; } +div.m-math.m-primary svg, svg.m-math.m-primary { fill: #a5c9ea; } +div.m-math.m-success svg, svg.m-math.m-success { fill: #3bd267; } +div.m-math.m-warning svg, svg.m-math.m-warning { fill: #c7cf2f; } +div.m-math.m-danger svg, svg.m-math.m-danger { fill: #cd3431; } +div.m-math.m-info svg, svg.m-math.m-info { fill: #2f83cc; } +div.m-math.m-dim svg, svg.m-math.m-dim { fill: #747474; } +p, ul, ol, dl, blockquote, pre, figure.m-code-figure, figure.m-console-figure, +hr, article, article > header, article section, +.m-note, .m-frame, .m-block, .m-button, +div.m-scroll, table.m-table, div.m-image, img.m-image, +figure.m-figure, .m-imagegrid, div.m-math { + margin-bottom: 1rem; +} +p:last-child, ul:last-child, ol:last-child, dl:last-child, blockquote:last-child, +pre:last-child, figure.m-code-figure:last-child, figure.m-console-figure:last-child, +hr:last-child, article:last-child, article section:last-child, +.m-note:last-child, .m-frame:last-child, .m-block:last-child, .m-button:last-child, +table.m-table:last-child, img.m-image:last-child, div.m-image:last-child, +figure.m-figure:last-child, .m-imagegrid:last-child, div.m-math:last-child { + margin-bottom: 0; +} +li > p:last-child, li > blockquote:last-child, li > pre:last-child, +li > figure.m-code-figure:last-child, li > figure.m-console-figure:last-child, +li > .m-note:last-child, li > .m-frame:last-child, li > .m-block:last-child, +li > .m-button:last-child, li > div.m-scroll:last-child, +li > table.m-table:last-child, li > div.m-image:last-child, +li > img.m-image:last-child, li > figure.m-figure:last-child, +li > div.m-math:last-child { + margin-bottom: 1rem; +} +li > p:last-child, li:last-child > blockquote:last-child, li:last-child > pre:last-child, +li:last-child > figure.m-code-figure:last-child, li:last-child > figure.m-console-figure:last-child, +li:last-child > .m-note:last-child, li:last-child > .m-frame:last-child, li:last-child > .m-block:last-child, +li:last-child > .m-button:last-child, li:last-child > div.m-scroll:last-child, +li:last-child > table.m-table:last-child, li:last-child > div.m-image:last-child, +li:last-child > img.m-image:last-child, li:last-child > figure.m-figure:last-child, +li:last-child > div.m-math:last-child { + margin-bottom: 0; +} + +.m-code .hll { background-color: #34424d } +.m-code .c { color: #a5c9ea } +.m-code .k { color: #ffffff; font-weight: bold } +.m-code .n { color: #dcdcdc } +.m-code .o { color: #aaaaaa } +.m-code .p { color: #aaaaaa } +.m-code .ch { color: #a5c9ea } +.m-code .cm { color: #a5c9ea } +.m-code .cp { color: #3bd267 } +.m-code .cpf { color: #c7cf2f } +.m-code .c1 { color: #a5c9ea } +.m-code .cs { color: #a5c9ea } +.m-code .ge { color: #e6e6e6; font-style: italic } +.m-code .gh { color: #ffffff; font-weight: bold } +.m-code .gs { color: #e6e6e6; font-weight: bold } +.m-code .kc { color: #ffffff; font-weight: bold } +.m-code .kd { color: #ffffff; font-weight: bold } +.m-code .kn { color: #ffffff; font-weight: bold } +.m-code .kp { color: #ffffff; font-weight: bold } +.m-code .kr { color: #ffffff; font-weight: bold } +.m-code .kt { color: #ffffff; font-weight: bold } +.m-code .m { color: #c7cf2f } +.m-code .s { color: #e07f7c } +.m-code .na { color: #dcdcdc; font-weight: bold } +.m-code .nb { color: #ffffff; font-weight: bold } +.m-code .nc { color: #dcdcdc; font-weight: bold } +.m-code .no { color: #dcdcdc } +.m-code .nd { color: #dcdcdc } +.m-code .ni { color: #dcdcdc } +.m-code .ne { color: #dcdcdc } +.m-code .nf { color: #dcdcdc } +.m-code .nl { color: #dcdcdc } +.m-code .nn { color: #dcdcdc } +.m-code .nx { color: #dcdcdc } +.m-code .py { color: #dcdcdc } +.m-code .nt { color: #dcdcdc; font-weight: bold } +.m-code .nv { color: #c7cf2f } +.m-code .ow { color: #dcdcdc; font-weight: bold } +.m-code .mb { color: #c7cf2f } +.m-code .mf { color: #c7cf2f } +.m-code .mh { color: #c7cf2f } +.m-code .mi { color: #c7cf2f } +.m-code .mo { color: #c7cf2f } +.m-code .sa { color: #e07f7c } +.m-code .sb { color: #e07f7c } +.m-code .sc { color: #e07cdc } +.m-code .dl { color: #e07f7c } +.m-code .sd { color: #e07f7c } +.m-code .s2 { color: #e07f7c } +.m-code .se { color: #e07f7c } +.m-code .sh { color: #e07f7c } +.m-code .si { color: #e07f7c } +.m-code .sx { color: #e07f7c } +.m-code .sr { color: #e07f7c } +.m-code .s1 { color: #e07f7c } +.m-code .ss { color: #e07f7c } +.m-code .bp { color: #ffffff; font-weight: bold } +.m-code .fm { color: #dcdcdc } +.m-code .vc { color: #c7cf2f } +.m-code .vg { color: #c7cf2f } +.m-code .vi { color: #c7cf2f } +.m-code .vm { color: #c7cf2f } +.m-code .il { color: #c7cf2f } + +.m-console .hll { background-color: #ffffcc } +.m-console .g-AnsiBlack { color: #000000 } +.m-console .g-AnsiBlue { color: #3f3fd1 } +.m-console .g-AnsiBrightBlack { color: #686868; font-weight: bold } +.m-console .g-AnsiBrightBlue { color: #5454ff; font-weight: bold } +.m-console .g-AnsiBrightCyan { color: #54ffff; font-weight: bold } +.m-console .g-AnsiBrightDefault { color: #ffffff; font-weight: bold } +.m-console .g-AnsiBrightGreen { color: #54ff54; font-weight: bold } +.m-console .g-AnsiBrightMagenta { color: #ff54ff; font-weight: bold } +.m-console .g-AnsiBrightRed { color: #ff5454; font-weight: bold } +.m-console .g-AnsiBrightWhite { color: #ffffff; font-weight: bold } +.m-console .g-AnsiBrightYellow { color: #ffff54; font-weight: bold } +.m-console .g-AnsiCyan { color: #18b2b2 } +.m-console .g-AnsiDefault { color: #b2b2b2 } +.m-console .g-AnsiGreen { color: #18b218 } +.m-console .g-AnsiMagenta { color: #b218b2 } +.m-console .g-AnsiRed { color: #b21818 } +.m-console .g-AnsiWhite { color: #b2b2b2 } +.m-console .g-AnsiYellow { color: #b26818 } +.m-console .go { color: #b2b2b2 } +.m-console .gp { color: #54ffff; font-weight: bold } +.m-console .w { color: #b2b2b2 } + +a.m-dox, a.m-dox-self, a.m-dox-external, +ul.m-dox li.m-dox-expansible > a:first-child, ul.m-dox li.m-dox-collapsible > a:first-child { + text-decoration: none; +} +a.m-dox, a.m-dox-self { + font-weight: bold; +} +ul.m-dox li.m-dox-expansible > a:first-child, +ul.m-dox li.m-dox-collapsible > a:first-child, +ul.m-dox li.m-dox-expansible > a:first-child:hover, +ul.m-dox li.m-dox-expansible > a:first-child:focus, +ul.m-dox li.m-dox-expansible > a:first-child:active, +ul.m-dox li.m-dox-collapsible > a:first-child:hover, +ul.m-dox li.m-dox-collapsible > a:first-child:focus, +ul.m-dox li.m-dox-collapsible > a:first-child:active { + color: #dcdcdc; +} +a.m-dox-self, +ul.m-dox li.m-dox-expansible > a:first-child:before, +ul.m-dox li.m-dox-collapsible > a:first-child:before { + color: #a5c9ea; +} +a.m-dox-self:hover, a.m-dox-self:focus, a.m-dox-self:active, +ul.m-dox li.m-dox-expansible > a:first-child:hover::before, +ul.m-dox li.m-dox-expansible > a:first-child:focus::before, +ul.m-dox li.m-dox-expansible > a:first-child:active::before, +ul.m-dox li.m-dox-collapsible > a:first-child:hover::before, +ul.m-dox li.m-dox-collapsible > a:first-child:focus::before, +ul.m-dox li.m-dox-collapsible > a:first-child:active::before { + color: #dcdcdc; +} +h3 a.m-dox-external { + font-weight: normal; +} +span.m-dox-wrap-bumper { + margin-right: -1rem; +} +span.m-dox-wrap { + padding-left: 1rem; + display: inline-block; + vertical-align: text-top; + white-space: pre-line; + max-width: 100%; +} +dl.m-dox dd { + margin-bottom: 0.5rem; +} +ul.m-dox { + list-style: none; + margin-left: 1.0375rem; + padding-left: 0.9rem; + border-left-color: #405363; + border-left-width: 0.0625rem; + border-left-style: solid; +} +ul.m-dox li { + text-indent: -1rem; + padding-left: 1rem; +} +ul.m-dox li.m-dox-expansible > ul { + display: none; +} +ul.m-dox li.m-dox-expansible, ul.m-dox li.m-dox-collapsible { + padding-left: 0.6rem; +} +ul.m-dox li.m-dox-expansible > ul.m-dox, ul.m-dox li.m-dox-collapsible > ul.m-dox { + margin-left: 0.5rem; +} +ul.m-dox li.m-dox-expansible > a:first-child:before, ul.m-dox li.m-dox-collapsible > a:first-child:before { + background-color: #2f363f; + display: inline-block; + width: 0.4rem; + font-weight: bold; +} +ul.m-dox li.m-dox-expansible > a:first-child:before { content: '⊕'; } +ul.m-dox li.m-dox-collapsible > a:first-child:before { content: '⊖'; } +h1 .m-dox-template { + font-size: 1.3rem; + font-weight: normal; +} +h3 .m-dox-template { + font-size: 1rem; + font-weight: normal; +} +.m-dox-template, dl.m-dox dd, ul.m-dox li > span.m-dox { + color: #747474; +} +.m-dox-template a, dl.m-dox dd a, ul.m-dox li > span.m-dox a { + color: #acacac; +} +.m-dox-template a:hover, .m-dox-template a:focus, .m-dox-template a:active, +dl.m-dox dd a:hover, dl.m-dox dd a:focus, dl.m-dox dd a:active, +ul.m-dox li > span.m-dox a:hover, ul.m-dox li > span.m-dox a:focus, ul.m-dox li > span.m-dox a:active { + color: #747474; +} +article section.m-dox-details > div { + margin-top: 0; + margin-left: 0; + margin-right: 0; + position: relative; + padding: 1rem; +} +article section.m-dox-details > div::before { + position: absolute; + content: ' '; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: -1; + border-style: solid; + border-width: 0.125rem; + border-radius: 0.2rem; + border-color: #22272e; +} +article section.m-dox-details > div > h3:first-child { + position: relative; + margin: -1rem -1rem 1rem -1rem; + padding: 0.5rem 1rem; + background-color: #22272e; + border-top-left-radius: 0.2rem; + border-top-right-radius: 0.2rem; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; +} +article section.m-dox-details:target { + border-color: transparent; +} +article section.m-dox-details:target > div { + z-index: 1; +} +.m-container-inflatable > .m-row > [class*='m-col-'] section.m-dox-details > div { + margin-left: -1rem; + margin-right: -1rem; +} +.m-container-inflatable section.m-dox-details:target > div > h3:first-child, +.m-container-inflatable section.m-dox-details:target section > div > h3:first-child { + margin-left: -1.0rem; + border-left-style: solid; + border-left-color: #dcdcdc; + border-left-width: 0.25rem; + padding-left: 0.75rem; +} +.m-container-inflatable section.m-dox-details:target > div::before, +.m-container-inflatable section-dox-details:target section > div.m::before { + border-left-width: 0.25rem; + border-left-color: #a5c9ea; +} diff --git a/css/m-dark.doxygen.compiled.css b/css/m-dark.doxygen.compiled.css new file mode 100644 index 00000000..cc91775b --- /dev/null +++ b/css/m-dark.doxygen.compiled.css @@ -0,0 +1,174 @@ +/* Generated using `./postprocess.py m-dark.css m-doxygen.css --no-import -o m-dark.doxygen.compiled.css`. Do not edit. */ + +/* + This file is part of m.css. + + Copyright © 2017 Vladimír VondruÅ¡ + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + DEALINGS IN THE SOFTWARE. +*/ + +a.m-dox, a.m-dox-self, a.m-dox-external, +ul.m-dox li.m-dox-expansible > a:first-child, ul.m-dox li.m-dox-collapsible > a:first-child { + text-decoration: none; +} +a.m-dox, a.m-dox-self { + font-weight: bold; +} +ul.m-dox li.m-dox-expansible > a:first-child, +ul.m-dox li.m-dox-collapsible > a:first-child, +ul.m-dox li.m-dox-expansible > a:first-child:hover, +ul.m-dox li.m-dox-expansible > a:first-child:focus, +ul.m-dox li.m-dox-expansible > a:first-child:active, +ul.m-dox li.m-dox-collapsible > a:first-child:hover, +ul.m-dox li.m-dox-collapsible > a:first-child:focus, +ul.m-dox li.m-dox-collapsible > a:first-child:active { + color: #dcdcdc; +} +a.m-dox-self, +ul.m-dox li.m-dox-expansible > a:first-child:before, +ul.m-dox li.m-dox-collapsible > a:first-child:before { + color: #a5c9ea; +} +a.m-dox-self:hover, a.m-dox-self:focus, a.m-dox-self:active, +ul.m-dox li.m-dox-expansible > a:first-child:hover::before, +ul.m-dox li.m-dox-expansible > a:first-child:focus::before, +ul.m-dox li.m-dox-expansible > a:first-child:active::before, +ul.m-dox li.m-dox-collapsible > a:first-child:hover::before, +ul.m-dox li.m-dox-collapsible > a:first-child:focus::before, +ul.m-dox li.m-dox-collapsible > a:first-child:active::before { + color: #dcdcdc; +} +h3 a.m-dox-external { + font-weight: normal; +} +span.m-dox-wrap-bumper { + margin-right: -1rem; +} +span.m-dox-wrap { + padding-left: 1rem; + display: inline-block; + vertical-align: text-top; + white-space: pre-line; + max-width: 100%; +} +dl.m-dox dd { + margin-bottom: 0.5rem; +} +ul.m-dox { + list-style: none; + margin-left: 1.0375rem; + padding-left: 0.9rem; + border-left-color: #405363; + border-left-width: 0.0625rem; + border-left-style: solid; +} +ul.m-dox li { + text-indent: -1rem; + padding-left: 1rem; +} +ul.m-dox li.m-dox-expansible > ul { + display: none; +} +ul.m-dox li.m-dox-expansible, ul.m-dox li.m-dox-collapsible { + padding-left: 0.6rem; +} +ul.m-dox li.m-dox-expansible > ul.m-dox, ul.m-dox li.m-dox-collapsible > ul.m-dox { + margin-left: 0.5rem; +} +ul.m-dox li.m-dox-expansible > a:first-child:before, ul.m-dox li.m-dox-collapsible > a:first-child:before { + background-color: #2f363f; + display: inline-block; + width: 0.4rem; + font-weight: bold; +} +ul.m-dox li.m-dox-expansible > a:first-child:before { content: '⊕'; } +ul.m-dox li.m-dox-collapsible > a:first-child:before { content: '⊖'; } +h1 .m-dox-template { + font-size: 1.3rem; + font-weight: normal; +} +h3 .m-dox-template { + font-size: 1rem; + font-weight: normal; +} +.m-dox-template, dl.m-dox dd, ul.m-dox li > span.m-dox { + color: #747474; +} +.m-dox-template a, dl.m-dox dd a, ul.m-dox li > span.m-dox a { + color: #acacac; +} +.m-dox-template a:hover, .m-dox-template a:focus, .m-dox-template a:active, +dl.m-dox dd a:hover, dl.m-dox dd a:focus, dl.m-dox dd a:active, +ul.m-dox li > span.m-dox a:hover, ul.m-dox li > span.m-dox a:focus, ul.m-dox li > span.m-dox a:active { + color: #747474; +} +article section.m-dox-details > div { + margin-top: 0; + margin-left: 0; + margin-right: 0; + position: relative; + padding: 1rem; +} +article section.m-dox-details > div::before { + position: absolute; + content: ' '; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: -1; + border-style: solid; + border-width: 0.125rem; + border-radius: 0.2rem; + border-color: #22272e; +} +article section.m-dox-details > div > h3:first-child { + position: relative; + margin: -1rem -1rem 1rem -1rem; + padding: 0.5rem 1rem; + background-color: #22272e; + border-top-left-radius: 0.2rem; + border-top-right-radius: 0.2rem; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; +} +article section.m-dox-details:target { + border-color: transparent; +} +article section.m-dox-details:target > div { + z-index: 1; +} +.m-container-inflatable > .m-row > [class*='m-col-'] section.m-dox-details > div { + margin-left: -1rem; + margin-right: -1rem; +} +.m-container-inflatable section.m-dox-details:target > div > h3:first-child, +.m-container-inflatable section.m-dox-details:target section > div > h3:first-child { + margin-left: -1.0rem; + border-left-style: solid; + border-left-color: #dcdcdc; + border-left-width: 0.25rem; + padding-left: 0.75rem; +} +.m-container-inflatable section.m-dox-details:target > div::before, +.m-container-inflatable section-dox-details:target section > div.m::before { + border-left-width: 0.25rem; + border-left-color: #a5c9ea; +} diff --git a/css/m-doxygen.css b/css/m-doxygen.css new file mode 100644 index 00000000..51678039 --- /dev/null +++ b/css/m-doxygen.css @@ -0,0 +1,178 @@ +/* + This file is part of m.css. + + Copyright © 2017 Vladimír VondruÅ¡ + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + DEALINGS IN THE SOFTWARE. +*/ + +a.m-dox, a.m-dox-self, a.m-dox-external, +ul.m-dox li.m-dox-expansible > a:first-child, ul.m-dox li.m-dox-collapsible > a:first-child { + text-decoration: none; +} +a.m-dox, a.m-dox-self { + font-weight: bold; +} +ul.m-dox li.m-dox-expansible > a:first-child, +ul.m-dox li.m-dox-collapsible > a:first-child, +ul.m-dox li.m-dox-expansible > a:first-child:hover, +ul.m-dox li.m-dox-expansible > a:first-child:focus, +ul.m-dox li.m-dox-expansible > a:first-child:active, +ul.m-dox li.m-dox-collapsible > a:first-child:hover, +ul.m-dox li.m-dox-collapsible > a:first-child:focus, +ul.m-dox li.m-dox-collapsible > a:first-child:active { + color: var(--color); +} +a.m-dox-self, +ul.m-dox li.m-dox-expansible > a:first-child:before, +ul.m-dox li.m-dox-collapsible > a:first-child:before { + color: var(--article-heading-color); +} +a.m-dox-self:hover, a.m-dox-self:focus, a.m-dox-self:active, +ul.m-dox li.m-dox-expansible > a:first-child:hover::before, +ul.m-dox li.m-dox-expansible > a:first-child:focus::before, +ul.m-dox li.m-dox-expansible > a:first-child:active::before, +ul.m-dox li.m-dox-collapsible > a:first-child:hover::before, +ul.m-dox li.m-dox-collapsible > a:first-child:focus::before, +ul.m-dox li.m-dox-collapsible > a:first-child:active::before { + color: var(--article-heading-active-color); +} +h3 a.m-dox-external { + font-weight: normal; +} +span.m-dox-wrap-bumper { + margin-right: -1rem; +} +span.m-dox-wrap { + padding-left: 1rem; + display: inline-block; + vertical-align: text-top; + white-space: pre-line; + max-width: 100%; /* otherwise horizontal scrollbars, wtf */ +} +dl.m-dox dd { + margin-bottom: 0.5rem; +} +ul.m-dox { + list-style: none; + margin-left: 1.0375rem; + padding-left: 0.9rem; + border-left-color: var(--line-color); + border-left-width: 0.0625rem; + border-left-style: solid; +} +ul.m-dox li { + text-indent: -1rem; + padding-left: 1rem; +} +ul.m-dox li.m-dox-expansible > ul { + display: none; +} +ul.m-dox li.m-dox-expansible, ul.m-dox li.m-dox-collapsible { + padding-left: 0.6rem; +} +ul.m-dox li.m-dox-expansible > ul.m-dox, ul.m-dox li.m-dox-collapsible > ul.m-dox { + margin-left: 0.5rem; +} +ul.m-dox li.m-dox-expansible > a:first-child:before, ul.m-dox li.m-dox-collapsible > a:first-child:before { + background-color: var(--background-color); + display: inline-block; + width: 0.4rem; + font-weight: bold; +} +ul.m-dox li.m-dox-expansible > a:first-child:before { content: '⊕'; } +ul.m-dox li.m-dox-collapsible > a:first-child:before { content: '⊖'; } + +h1 .m-dox-template { + font-size: 1.3rem; + font-weight: normal; +} +h3 .m-dox-template { + font-size: 1rem; + font-weight: normal; +} +.m-dox-template, dl.m-dox dd, ul.m-dox li > span.m-dox { + color: var(--dim-color); +} +.m-dox-template a, dl.m-dox dd a, ul.m-dox li > span.m-dox a { + color: var(--dim-link-color); +} +.m-dox-template a:hover, .m-dox-template a:focus, .m-dox-template a:active, +dl.m-dox dd a:hover, dl.m-dox dd a:focus, dl.m-dox dd a:active, +ul.m-dox li > span.m-dox a:hover, ul.m-dox li > span.m-dox a:focus, ul.m-dox li > span.m-dox a:active { + color: var(--dim-link-active-color); +} + +article section.m-dox-details > div { + margin-top: 0; + margin-left: 0; + margin-right: 0; + position: relative; + padding: 1rem; +} +article section.m-dox-details > div::before { + position: absolute; + content: ' '; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: -1; /* so it doesn't make the contents inactive */ + border-style: solid; + border-width: 0.125rem; + border-radius: var(--border-radius); + border-color: var(--code-background-color); +} +article section.m-dox-details > div > h3:first-child { + position: relative; /* so it's above the border */ + margin: -1rem -1rem 1rem -1rem; + padding: 0.5rem 1rem; + background-color: var(--code-background-color); + border-top-left-radius: var(--border-radius); + border-top-right-radius: var(--border-radius); + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; +} +article section.m-dox-details:target { + border-color: transparent; /* to preserve rounded corners */ +} +article section.m-dox-details:target > div { + z-index: 1; /* so the selection border isn't above figure border */ +} + +.m-container-inflatable > .m-row > [class*='m-col-'] section.m-dox-details > div { + margin-left: -1rem; + margin-right: -1rem; +} + +.m-container-inflatable section.m-dox-details:target > div > h3:first-child, +.m-container-inflatable section.m-dox-details:target section > div > h3:first-child { + margin-left: -1.0rem; + border-left-style: solid; + border-left-color: var(--article-heading-active-color); + border-left-width: 0.25rem; + padding-left: 0.75rem; +} +.m-container-inflatable section.m-dox-details:target > div::before, +.m-container-inflatable section-dox-details:target section > div.m::before { + border-left-width: 0.25rem; + border-left-color: var(--article-heading-color); +} + +/* kate: indent-width 2; */ diff --git a/css/m-light+doxygen.compiled.css b/css/m-light+doxygen.compiled.css new file mode 100644 index 00000000..ea4d48ac --- /dev/null +++ b/css/m-light+doxygen.compiled.css @@ -0,0 +1,1833 @@ +/* Generated using `./postprocess.py m-light.css m-doxygen.css -o m-light+doxygen.compiled.css`. Do not edit. */ + +/* + This file is part of m.css. + + Copyright © 2017 Vladimír VondruÅ¡ + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + DEALINGS IN THE SOFTWARE. +*/ + +*, ::before, ::after { box-sizing: border-box; } +body { margin: 0; } +.m-container { + width: 100%; + margin: auto; + padding-left: 1rem; + padding-right: 1rem; +} +.m-row { + margin-left: -1rem; + margin-right: -1rem; +} +.m-row:after { + content: ' '; + clear: both; + display: table; +} +[class*='m-col-'] { + position: relative; + padding: 1rem; +} +[class*='m-clearfix-']::after { + display: block; + content: ' '; + clear: both; +} +[class*='m-show-'] { + display: none; +} +[class*='m-col-'].m-left-s, [class*='m-col-'].m-right-s, [class*='m-col-'].m-center-s, +[class*='m-col-'].m-left-m, [class*='m-col-'].m-right-m, [class*='m-col-'].m-center-m, +[class*='m-col-'].m-left-l, [class*='m-col-'].m-right-l, [class*='m-col-'].m-center-l { + margin-left: -1rem; + margin-right: -1rem; +} +.m-row > [class*='m-col-'].m-left-s, .m-row > [class*='m-col-'].m-right-s, .m-row > [class*='m-col-'].m-center-s, +.m-row > [class*='m-col-'].m-left-m, .m-row > [class*='m-col-'].m-right-m, .m-row > [class*='m-col-'].m-center-m, +.m-row > [class*='m-col-'].m-left-l, .m-row > [class*='m-col-'].m-right-l .m-row > [class*='m-col-'].m-center-l { + margin-left: 0; + margin-right: 0; +} +.m-container.m-nopad, [class*='m-col-'].m-nopad, +.m-container.m-nopadx, [class*='m-col-'].m-nopadx, +.m-container.m-nopadl, [class*='m-col-'].m-nopadl { + padding-left: 0; +} +.m-container.m-nopad, [class*='m-col-'].m-nopad, +.m-container.m-nopadx, [class*='m-col-'].m-nopadx, +.m-container.m-nopadr, [class*='m-col-'].m-nopadr { + padding-right: 0; +} +[class*='m-col-'].m-nopad, [class*='m-col-'].m-nopady, [class*='m-col-'].m-nopadt { + padding-top: 0; +} +[class*='m-col-'].m-nopad, [class*='m-col-'].m-nopady, [class*='m-col-'].m-nopadb { + padding-bottom: 0; +} +[class*='m-col-t-'] { float: left; } +[class*='m-col-t-'].m-left-t, [class*='m-col-t-'].m-right-t { + padding-top: 0px; + padding-bottom: 0px; +} +.m-left-t { + float: left; +} +.m-right-t, [class*='m-col-t-'].m-right-t { + float: right; +} +.m-center-t, [class*='m-col-t-'].m-center-t { + float: none; +} +[class*='m-col-t-'].m-left-t { + margin-left: -1rem; +} +[class*='m-col-t-'].m-right-t { + margin-right: -1rem; +} +.m-row > [class*='m-col-t-'].m-left-t { + margin-left: 0; +} +.m-row > [class*='m-col-t-'].m-right-t { + margin-right: 0; +} +.m-center-t, [class*='m-col-t-'].m-center-t { + margin-left: auto; + margin-right: auto; + float: none; +} +.m-col-t-1 { width: calc(1 * 100% / 12); } +.m-col-t-2 { width: calc(2 * 100% / 12); } +.m-col-t-3 { width: calc(3 * 100% / 12); } +.m-col-t-4 { width: calc(4 * 100% / 12); } +.m-col-t-5 { width: calc(5 * 100% / 12); } +.m-col-t-6 { width: calc(6 * 100% / 12); } +.m-col-t-7 { width: calc(7 * 100% / 12); } +.m-col-t-8 { width: calc(8 * 100% / 12); } +.m-col-t-9 { width: calc(9 * 100% / 12); } +.m-col-t-10 { width: calc(10 * 100% / 12); } +.m-col-t-11 { width: calc(11 * 100% / 12); } +.m-col-t-12 { width: calc(12 * 100% / 12); } +.m-push-t-1 { left: calc(1 * 100% / 12); } +.m-push-t-2 { left: calc(2 * 100% / 12); } +.m-push-t-3 { left: calc(3 * 100% / 12); } +.m-push-t-4 { left: calc(4 * 100% / 12); } +.m-push-t-5 { left: calc(5 * 100% / 12); } +.m-push-t-6 { left: calc(6 * 100% / 12); } +.m-push-t-7 { left: calc(7 * 100% / 12); } +.m-push-t-8 { left: calc(8 * 100% / 12); } +.m-push-t-9 { left: calc(9 * 100% / 12); } +.m-push-t-10 { left: calc(10 * 100% / 12); } +.m-push-t-11 { left: calc(11 * 100% / 12); } +.m-pull-t-1 { right: calc(1 * 100% / 12); } +.m-pull-t-2 { right: calc(2 * 100% / 12); } +.m-pull-t-3 { right: calc(3 * 100% / 12); } +.m-pull-t-4 { right: calc(4 * 100% / 12); } +.m-pull-t-5 { right: calc(5 * 100% / 12); } +.m-pull-t-6 { right: calc(6 * 100% / 12); } +.m-pull-t-7 { right: calc(7 * 100% / 12); } +.m-pull-t-8 { right: calc(8 * 100% / 12); } +.m-pull-t-9 { right: calc(9 * 100% / 12); } +.m-pull-t-10 { right: calc(10 * 100% / 12); } +.m-pull-t-11 { right: calc(11 * 100% / 12); } +@media screen and (min-width: 576px) { + .m-container { width: 560px; } + .m-container-inflatable .m-col-s-10 .m-container-inflate { + margin-left: -10%; + margin-right: -10%; + } + [class*='m-col-s-'] { float: left; } + [class*='m-col-s-'].m-left-s, [class*='m-col-s-'].m-right-s { + padding-top: 0px; + padding-bottom: 0px; + } + .m-left-s { + float: left; + } + .m-right-s, [class*='m-col-s-'].m-right-s { + float: right; + } + [class*='m-col-s-'].m-left-s { + margin-left: -1rem; + margin-right: 0; + } + [class*='m-col-s-'].m-right-s { + margin-left: 0; + margin-right: -1rem; + } + .m-row > [class*='m-col-s-'].m-left-s { + margin-left: 0; + } + .m-row > [class*='m-col-s-'].m-right-s { + margin-right: 0; + } + .m-center-s, [class*='m-col-s-'].m-center-s { + margin-left: auto; + margin-right: auto; + float: none; + } + .m-col-s-1 { width: calc(1 * 100% / 12); } + .m-col-s-2 { width: calc(2 * 100% / 12); } + .m-col-s-3 { width: calc(3 * 100% / 12); } + .m-col-s-4 { width: calc(4 * 100% / 12); } + .m-col-s-5 { width: calc(5 * 100% / 12); } + .m-col-s-6 { width: calc(6 * 100% / 12); } + .m-col-s-7 { width: calc(7 * 100% / 12); } + .m-col-s-8 { width: calc(8 * 100% / 12); } + .m-col-s-9 { width: calc(9 * 100% / 12); } + .m-col-s-10 { width: calc(10 * 100% / 12); } + .m-col-s-11 { width: calc(11 * 100% / 12); } + .m-col-s-12 { width: calc(12 * 100% / 12); } + .m-push-s-0 { left: calc(0 * 100% / 12); } + .m-push-s-1 { left: calc(1 * 100% / 12); } + .m-push-s-2 { left: calc(2 * 100% / 12); } + .m-push-s-3 { left: calc(3 * 100% / 12); } + .m-push-s-4 { left: calc(4 * 100% / 12); } + .m-push-s-5 { left: calc(5 * 100% / 12); } + .m-push-s-6 { left: calc(6 * 100% / 12); } + .m-push-s-7 { left: calc(7 * 100% / 12); } + .m-push-s-8 { left: calc(8 * 100% / 12); } + .m-push-s-9 { left: calc(9 * 100% / 12); } + .m-push-s-10 { left: calc(10 * 100% / 12); } + .m-push-s-11 { left: calc(11 * 100% / 12); } + .m-pull-s-0 { right: calc(0 * 100% / 12); } + .m-pull-s-1 { right: calc(1 * 100% / 12); } + .m-pull-s-2 { right: calc(2 * 100% / 12); } + .m-pull-s-3 { right: calc(3 * 100% / 12); } + .m-pull-s-4 { right: calc(4 * 100% / 12); } + .m-pull-s-5 { right: calc(5 * 100% / 12); } + .m-pull-s-6 { right: calc(6 * 100% / 12); } + .m-pull-s-7 { right: calc(7 * 100% / 12); } + .m-pull-s-8 { right: calc(8 * 100% / 12); } + .m-pull-s-9 { right: calc(9 * 100% / 12); } + .m-pull-s-10 { right: calc(10 * 100% / 12); } + .m-pull-s-11 { right: calc(11 * 100% / 12); } + .m-clearfix-t::after { display: none; } + .m-hide-s { display: none; } + .m-show-s { display: block; } + .m-col-s-none { + width: auto; + float: none; + } +} +@media screen and (min-width: 768px) { + .m-container { width: 750px; } + .m-container-inflatable .m-col-m-10 .m-container-inflate { + margin-left: -10%; + margin-right: -10%; + } + [class*='m-col-m-'] { float: left; } + [class*='m-col-m-'].m-left-m, [class*='m-col-m-'].m-right-m { + padding-top: 0px; + padding-bottom: 0px; + } + .m-left-m { + float: left; + } + .m-right-m, [class*='m-col-m-'].m-right-m { + float: right; + } + [class*='m-col-m-'].m-left-m { + margin-left: -1rem; + margin-right: 0; + } + [class*='m-col-m-'].m-right-m { + margin-left: 0; + margin-right: -1rem; + } + .m-row > [class*='m-col-m-'].m-left-m { + margin-left: 0; + } + .m-row > [class*='m-col-m-'].m-right-m { + margin-right: 0; + } + .m-center-m, [class*='m-col-m-'].m-center-m { + margin-left: auto; + margin-right: auto; + float: none; + } + .m-col-m-1 { width: calc(1 * 100% / 12); } + .m-col-m-2 { width: calc(2 * 100% / 12); } + .m-col-m-3 { width: calc(3 * 100% / 12); } + .m-col-m-4 { width: calc(4 * 100% / 12); } + .m-col-m-5 { width: calc(5 * 100% / 12); } + .m-col-m-6 { width: calc(6 * 100% / 12); } + .m-col-m-7 { width: calc(7 * 100% / 12); } + .m-col-m-8 { width: calc(8 * 100% / 12); } + .m-col-m-9 { width: calc(9 * 100% / 12); } + .m-col-m-10 { width: calc(10 * 100% / 12); } + .m-col-m-11 { width: calc(11 * 100% / 12); } + .m-col-m-12 { width: calc(12 * 100% / 12); } + .m-push-m-0 { left: calc(0 * 100% / 12); } + .m-push-m-1 { left: calc(1 * 100% / 12); } + .m-push-m-2 { left: calc(2 * 100% / 12); } + .m-push-m-3 { left: calc(3 * 100% / 12); } + .m-push-m-4 { left: calc(4 * 100% / 12); } + .m-push-m-5 { left: calc(5 * 100% / 12); } + .m-push-m-6 { left: calc(6 * 100% / 12); } + .m-push-m-7 { left: calc(7 * 100% / 12); } + .m-push-m-8 { left: calc(8 * 100% / 12); } + .m-push-m-9 { left: calc(9 * 100% / 12); } + .m-push-m-10 { left: calc(10 * 100% / 12); } + .m-push-m-11 { left: calc(11 * 100% / 12); } + .m-pull-m-0 { right: calc(0 * 100% / 12); } + .m-pull-m-1 { right: calc(1 * 100% / 12); } + .m-pull-m-2 { right: calc(2 * 100% / 12); } + .m-pull-m-3 { right: calc(3 * 100% / 12); } + .m-pull-m-4 { right: calc(4 * 100% / 12); } + .m-pull-m-5 { right: calc(5 * 100% / 12); } + .m-pull-m-6 { right: calc(6 * 100% / 12); } + .m-pull-m-7 { right: calc(7 * 100% / 12); } + .m-pull-m-8 { right: calc(8 * 100% / 12); } + .m-pull-m-9 { right: calc(9 * 100% / 12); } + .m-pull-m-10 { right: calc(10 * 100% / 12); } + .m-pull-m-11 { right: calc(11 * 100% / 12); } + .m-clearfix-s::after { display: none; } + .m-hide-m { display: none; } + .m-show-m { display: block; } + .m-col-m-none { + width: auto; + float: none; + } +} +@media screen and (min-width: 992px) { + .m-container { width: 960px; } + .m-container-inflatable .m-col-l-10 .m-container-inflate { + margin-left: -10%; + margin-right: -10%; + } + [class*='m-col-l-'] { float: left; } + [class*='m-col-l-'].m-left-l, [class*='m-col-l-'].m-right-l { + padding-top: 0px; + padding-bottom: 0px; + } + .m-left-l { + float: left; + } + .m-right-l, [class*='m-col-l-'].m-right-l { + float: right; + } + [class*='m-col-l-'].m-left-l { + margin-left: -1rem; + margin-right: 0; + } + [class*='m-col-l-'].m-right-l { + margin-left: 0; + margin-right: -1rem; + } + .m-row > [class*='m-col-l-'].m-left-l { + margin-left: 0; + } + .m-row > [class*='m-col-l-'].m-right-l { + margin-right: 0; + } + .m-center-l, [class*='m-col-l-'].m-center-l { + margin-left: auto; + margin-right: auto; + float: none; + } + .m-col-l-1 { width: calc(1 * 100% / 12); } + .m-col-l-2 { width: calc(2 * 100% / 12); } + .m-col-l-3 { width: calc(3 * 100% / 12); } + .m-col-l-4 { width: calc(4 * 100% / 12); } + .m-col-l-5 { width: calc(5 * 100% / 12); } + .m-col-l-6 { width: calc(6 * 100% / 12); } + .m-col-l-7 { width: calc(7 * 100% / 12); } + .m-col-l-8 { width: calc(8 * 100% / 12); } + .m-col-l-9 { width: calc(9 * 100% / 12); } + .m-col-l-10 { width: calc(10 * 100% / 12); } + .m-col-l-11 { width: calc(11 * 100% / 12); } + .m-col-l-12 { width: calc(12 * 100% / 12); } + .m-push-l-0 { left: calc(0 * 100% / 12); } + .m-push-l-1 { left: calc(1 * 100% / 12); } + .m-push-l-2 { left: calc(2 * 100% / 12); } + .m-push-l-3 { left: calc(3 * 100% / 12); } + .m-push-l-4 { left: calc(4 * 100% / 12); } + .m-push-l-5 { left: calc(5 * 100% / 12); } + .m-push-l-6 { left: calc(6 * 100% / 12); } + .m-push-l-7 { left: calc(7 * 100% / 12); } + .m-push-l-8 { left: calc(8 * 100% / 12); } + .m-push-l-9 { left: calc(9 * 100% / 12); } + .m-push-l-10 { left: calc(10 * 100% / 12); } + .m-push-l-11 { left: calc(11 * 100% / 12); } + .m-pull-l-0 { right: calc(0 * 100% / 12); } + .m-pull-l-1 { right: calc(1 * 100% / 12); } + .m-pull-l-2 { right: calc(2 * 100% / 12); } + .m-pull-l-3 { right: calc(3 * 100% / 12); } + .m-pull-l-4 { right: calc(4 * 100% / 12); } + .m-pull-l-5 { right: calc(5 * 100% / 12); } + .m-pull-l-6 { right: calc(6 * 100% / 12); } + .m-pull-l-7 { right: calc(7 * 100% / 12); } + .m-pull-l-8 { right: calc(8 * 100% / 12); } + .m-pull-l-9 { right: calc(9 * 100% / 12); } + .m-pull-l-10 { right: calc(10 * 100% / 12); } + .m-pull-l-11 { right: calc(11 * 100% / 12); } + .m-clearfix-m::after { display: none; } + .m-hide-l { display: none; } + .m-show-l { display: block; } + .m-col-l-none { + width: auto; + float: none; + } +} + +html { + font-size: 14px; + background-color: #ffffff; +} +body { + font-family: 'Libre Baskerville', serif; + font-size: 1rem; + color: #000000; +} +h1, h2, h3, h4, h5, h6 { + margin-top: 0; + font-weight: normal; +} +h1 { + margin-bottom: 1rem; +} +h2, h3, h4, h5, h6 { + margin-bottom: 0.5rem; +} +p, ul, ol, dl { + margin-top: 0; +} +ul, ol { + padding-left: 2rem; +} +ul ol, ul ul, ol ol, ol ul { + margin-bottom: 0; +} +main p { + text-indent: 1.5rem; + text-align: justify; +} +main p.m-noindent, li p, table.m-table td p { + text-indent: 0; + text-align: left; +} +blockquote { + margin-top: 0; + margin-left: 1rem; + margin-right: 1rem; + padding: 1rem; + border-left-style: solid; + border-left-width: 0.25rem; +} +hr { + width: 75%; + border-width: 0.0625rem; + border-style: solid; +} +blockquote, hr { + border-color: #f7e3db; +} +pre { + font-family: 'Source Code Pro', monospace, monospace, monospace; /* https://en.wikipedia.org/wiki/User:Davidgothberg/Test59 */ + font-size: 0.9rem; + padding: 0.5rem 1rem; + color: #5b5b5b; + background-color: #fbf0ec; + border-radius: 0.2rem; + overflow-x: auto; + margin-top: 0; +} +pre.m-console { + background-color: #000000; +} +abbr { + cursor: help; + text-decoration: underline dotted; +} +sub, sup { + font-size: 0.75rem; + line-height: 0; + position: relative; + vertical-align: baseline; +} +sup { top: -0.35rem; } +sub { bottom: -0.2rem; } +a { + color: #ea7944; +} +a:hover, a:focus, a:active { + color: #cb4b16; +} +a img { border: 0; } +mark { + padding: 0.0625rem; + background-color: #e6e69c; + color: #4c93d3; +} +code { + font-family: 'Source Code Pro', monospace, monospace, monospace; + font-size: 0.9rem; + padding: 0.125rem; + color: #5b5b5b; + background-color: #fbf0ec; +} +code.m-console { + background-color: #000000; +} +body > header > nav { + width: 100%; + background-color: #ffffff; + min-height: 3rem; +} +body > header > nav.m-navbar-landing, +body > header > nav.m-navbar-jumbo { + background-color: transparent; + position: relative; +} +body > header > nav.m-navbar-landing { + opacity: 0.8; +} +body > header > nav.m-navbar-jumbo { + background-color: rgba(255, 255, 255, 0.25); + opacity: 1; +} +body > header > nav.m-navbar-landing:hover, +body > header > nav.m-navbar-jumbo:hover { + background-color: rgba(255, 255, 255, 0.75); + opacity: 1; +} +body> header > nav.m-navbar-landing:target, +body> header > nav.m-navbar-jumbo:target { + background-color: #ffffff; + opacity: 1; +} +body > header > nav.m-navbar-landing a#m-navbar-brand.m-navbar-brand-hidden { + visibility: hidden; +} +body > header > nav.m-navbar-landing:target a#m-navbar-brand.m-navbar-brand-hidden { + visibility: visible; +} +body > header > nav { + margin-left: auto; + margin-right: auto; + color: #000000; +} +body > header > nav a { + text-decoration: none; + text-transform: lowercase; + line-height: 1.5rem; + display: inline-block; + vertical-align: middle; + color: #000000; +} +body > header > nav a#m-navbar-brand, body > header > nav a#m-navbar-show, body > header > nav a#m-navbar-hide { + text-transform: lowercase; + font-weight: normal; + font-size: 1.125rem; + line-height: 3rem; +} +body > header > nav a#m-navbar-brand .m-thin { + font-weight: normal; +} +body > header > nav a#m-navbar-show:before, body > header > nav a#m-navbar-hide:before { + content:'\2630'; +} +body > header > nav #m-navbar-collapse { + padding-bottom: 1rem; +} +body > header > nav #m-navbar-collapse li { + border-style: solid; + border-color: transparent; + border-width: 0 0 0 0.25rem; + margin-left: -1rem; +} +body > header > nav #m-navbar-collapse li a { + border-style: solid; + border-color: transparent; + margin-left: -0.25rem; + padding-left: 0.75rem; + border-width: 0 0 0 0.25rem; + width: 100%; +} +body > header > nav #m-navbar-collapse li a#m-navbar-current { + color: #ea7944; + border-color: #ea7944; +} +body > header > nav ol { + list-style-type: none; + margin: 0; +} +body > header > nav ol ol { + padding-left: 1.5rem; +} +body > header > nav [class*='m-col-'] { + padding-top: 0; + padding-bottom: 0; +} +body > header > nav a:hover, body > header > nav a:focus, body > header > nav a:active { + color: #cb4b16; +} +body > header > nav #m-navbar-collapse li:hover { + border-color: #cb4b16; +} +body > header > nav #m-navbar-collapse li a:hover, +body > header > nav #m-navbar-collapse li a:focus, +body > header > nav #m-navbar-collapse li a:active { + border-color: #cb4b16; + background-color: rgba(255, 255, 255, 0.5); +} +body > header > nav.m-navbar-landing #m-navbar-collapse li a:hover, +body > header > nav.m-navbar-jumbo #m-navbar-collapse li a:hover, +body > header > nav.m-navbar-landing #m-navbar-collapse li a:focus, +body > header > nav.m-navbar-jumbo #m-navbar-collapse li a:focus, +body > header > nav.m-navbar-landing #m-navbar-collapse li a:active, +body > header > nav.m-navbar-jumbo #m-navbar-collapse li a:active { + background-color: var(--header-link-active-background-color-semi); +} +body > header > nav #m-navbar-hide { + display: none; +} +body > header > nav:target #m-navbar-collapse { + display: block; +} +body > header > nav:target #m-navbar-show { + display: none; +} +body > header > nav:target #m-navbar-hide { + display: inline-block; +} +@media screen and (min-width: 768px) { + body > header > nav #m-navbar-show, body > header > nav #m-navbar-hide, + body > header > nav:target #m-navbar-show, body > header > nav:target #m-navbar-hide { + display: none; + } + body > header > nav a { + line-height: 3rem; + margin-left: 0; + padding-left: 1rem; + padding-right: 1rem; + white-space: nowrap; + } + body > header > nav #m-navbar-collapse { + padding-bottom: 0; + } + body > header > nav #m-navbar-collapse li ol { + background-color: #ffffff; + } + body > header > nav #m-navbar-collapse ol ol li { + margin-left: 0; + padding-left: 0; + border-left-width: 0; + } + body > header > nav #m-navbar-collapse ol ol li a { + margin-left: 0; + padding-left: 0.75rem; + } + body > header > nav #m-navbar-collapse > .m-row > ol > li { + margin-left: 0; + border-left-width: 0; + } + body > header > nav a#m-navbar-brand, body > header > nav #m-navbar-collapse > .m-row > ol > li > a { + line-height: 2.75rem; + margin-left: 0; + border-width: 0.25rem 0 0 0; + } + body > header > nav #m-navbar-collapse ol { + padding-left: 0; + padding-right: 0; + } + body > header > nav #m-navbar-collapse > .m-row > ol, body > header > nav #m-navbar-collapse > .m-row > ol > li { + float: left; + } + body > header > nav #m-navbar-collapse ol ol { + z-index: 99999; + position: absolute; + visibility: hidden; + min-width: 7.5rem; + } + body > header > nav #m-navbar-collapse li:hover ol { + visibility: visible; + } +} +body > footer { + width: 100%; +} +body > footer > nav { + padding-top: 1rem; + padding-bottom: 1rem; + font-size: 0.85rem; + text-align: center; + color: #7c7c7c; + background-color: #eeeeee; +} +body > footer > nav h3, body > footer > nav h3 a { + text-transform: uppercase; + font-weight: normal; +} +body > footer > nav ul { + list-style-type: none; + padding: 0; + margin: 0; +} +body > footer > nav a { + text-decoration: none; + text-transform: lowercase; + color: #191919; +} +body > footer > nav a:hover, body > footer > nav a:focus, body > footer > nav a:active { + color: #494949; +} +body > main { + padding-top: 1rem; + padding-bottom: 1rem; +} +article h1 { + font-size: 1.75rem; +} +article h1 .m-breadcrumb { + color: #bdbdbd; + font-weight: normal; +} +article h1 .m-breadcrumb a { + color: #cb4b16; +} +article h1 .m-breadcrumb a:hover, article h1 a:focus, article h1 a:active { + color: #802f0e; +} +article > header h1 { + font-size: 2rem; + margin-bottom: 0.5rem; +} +article h1 a, article > header h1, article > header h1 a, +article section > h2, article section > h2 a, +article section > h3, article section > h3 a, +article section > h4, article section > h4 a, +article section > h5, article section > h5 a, +article section > h6, article section > h6 a { + color: #cb4b16; +} +article h1 a:hover, article > header h1 a:hover, article > header h1 a:focus, article > header h1 a:active, +article section > h2 a:hover, article section > h2 a:focus, article section > h2 a:active, +article section > h3 a:hover, article section > h3 a:focus, article section > h3 a:active, +article section > h4 a:hover, article section > h4 a:focus, article section > h4 a:active, +article section > h5 a:hover, article section > h5 a:focus, article section > h5 a:active, +article section > h6 a:hover, article section > h6 a:focus, article section > h6 a:active { + color: #802f0e; +} +article > header .m-date { + display: block; + width: 2.5rem; + float: left; + text-align: center; + line-height: 95%; + font-size: 0.75rem; + font-weight: normal; + white-space: nowrap; + border-right-style: solid; + border-right-width: 0.125rem; + border-color: #cb4b16; + padding-right: 0.75rem; + margin-top: -0.1rem; + margin-right: 0.75rem; + margin-bottom: 0.25rem; +} +article > header .m-date-day { + display: block; + font-weight: bold; + padding-top: 0.2rem; + padding-bottom: 0.15rem; + font-size: 1.25rem; +} +article > header p { + color: #7a7a7a; + font-size: 1.125rem; +} +article > header h1::after { + content: " "; + clear: both; + display: table; +} +article > footer { + color: #969696; +} +article > footer p { + font-style: italic; + font-size: 0.85rem; + text-indent: 0; +} +article section:target { + margin-left: -1.0rem; + border-left-style: solid; + border-left-width: 0.25rem; + padding-left: 0.75rem; + border-color: #cb4b16; +} +article h1 a, article > header h1 a, article section > h2 a, article section > h3 a, +article section > h4 a, article section > h5 a, article section > h6 a { + text-decoration: none; +} +#m-landing-image { + background-size: cover; + background-color: #666666; + background-position: center center; + background-repeat: no-repeat; + margin-top: -4rem; + padding-top: 5rem; + color: #ffffff; +} +#m-landing-cover { + padding-bottom: 7rem; + margin-bottom: -3rem; +} +article#m-jumbo { + margin-top: -1rem; +} +article#m-jumbo > header #m-jumbo-image { + background-size: cover; + background-color: #666666; + background-position: center center; + background-repeat: no-repeat; + font-size: 2.5vh; + height: 60vh; + margin-top: -4rem; + margin-bottom: 1rem; + padding-top: 5rem; +} +article#m-jumbo > header #m-jumbo-cover, #m-landing-cover { + background: linear-gradient(transparent 0%, transparent 50%, #ffffff 100%); + width: 100%; + height: 100%; +} +article#m-jumbo > header h1, article#m-jumbo > header h2 { + text-align: center; + font-weight: bold; +} +article#m-jumbo > header h1 { + font-size: 10vh; +} +article#m-jumbo > header h2 { + font-size: 3vh; +} +article#m-jumbo > header a { + text-decoration: none; +} +article#m-jumbo > header, article#m-jumbo > header h1, article#m-jumbo > header a { + color: #ffffff; +} +article#m-jumbo > header a:hover, article#m-jumbo > header a:focus, article#m-jumbo > header a:active { + color: #f0f0f0; +} +article#m-jumbo.m-inverted > header, article#m-jumbo.m-inverted > header h1, article#m-jumbo.m-inverted > header a { + color: #000000; +} +article#m-jumbo.m-inverted > header a:hover, article#m-jumbo.m-inverted > header a:focus, article#m-jumbo.m-inverted > header a:active { + color: #0f0f0f; +} +.m-article-pagination { + text-align: center; + padding: 1rem; +} +nav.m-navpanel { + text-align: center; +} +nav.m-navpanel h3 { + text-transform: uppercase; + font-weight: normal; +} +nav.m-navpanel ol { + text-transform: lowercase; +} +nav.m-navpanel ol, nav.m-navpanel ul { + list-style-type: none; + padding: 0; +} +nav.m-navpanel a { + color: #292929; + text-decoration: none; +} +nav.m-navpanel a:hover, nav.m-navpanel a:focus, nav.m-navpanel a:active { + color: #cb4b16; +} +ul.m-tagcloud li { display: inline; } +ul.m-tagcloud li.m-tag-1 { font-size: 0.75rem; } +ul.m-tagcloud li.m-tag-2 { font-size: 0.825rem; } +ul.m-tagcloud li.m-tag-3 { font-size: 1rem; } +ul.m-tagcloud li.m-tag-4 { font-size: 1.25rem; } +ul.m-tagcloud li.m-tag-5 { font-size: 1.5rem; } +div.m-scroll { + max-width: 100%; + overflow-x: auto; +} +.m-fullwidth { + width: 100%; +} +.m-text-center, .m-text-center.m-noindent, table.m-table th.m-text-center, .m-text-center p { + text-align: center; +} +.m-text-left, .m-text-left.m-noindent, table.m-table th.m-text-left, .m-text-right p { + text-align: left; +} +.m-text-right, .m-text-right.m-noindent, table.m-table th.m-text-right, .m-text-right p { + text-align: right; +} +.m-text.m-small { + font-size: 85.4%; +} +.m-text.m-big { + font-size: 117%; +} +.m-text.m-strong { + font-weight: bold; +} +.m-text.m-em { + font-style: italic; +} +h1 .m-thin, h2 .m-thin, h3 .m-thin, h4 .m-thin, h5 .m-thin, h6 .m-thin { + font-weight: normal; +} +ul.m-unstyled, ol.m-unstyled { + list-style-type: none; + padding-left: 0; +} +ul[class*='m-block-'], ol[class*='m-block-'] { + padding-left: 0; +} +ul[class*='m-block-'] li, ol[class*='m-block-'] li { + display: inline; +} +ul[class*='m-block-bar-'] li:not(:last-child)::after, ol[class*='m-block-bar-'] li:not(:last-child)::after { + content: " | "; +} +@media screen and (min-width: 576px) { + ul.m-block-bar-s, ol.m-block-bar-s { padding-left: 2rem; } + ul.m-block-bar-s li, ol.m-block-bar-s li { display: list-item; } + ul.m-block-bar-s li:not(:last-child)::after, ol.m-block-bar-s li:not(:last-child)::after { content: ""; } +} +@media screen and (min-width: 768px) { + ul.m-block-bar-m, ol.m-block-bar-m { padding-left: 2rem; } + ul.m-block-bar-m li, ol.m-block-bar-m li { display: list-item; } + ul.m-block-bar-m li:not(:last-child)::after, ol.m-block-bar-m li:not(:last-child)::after { content: ""; } +} +@media screen and (min-width: 992px) { + ul.m-block-bar-l, ol.m-block-bar-l { padding-left: 2rem; } + ul.m-block-bar-l li, ol.m-block-bar-l li { display: list-item; } + ul.m-block-bar-l li:not(:last-child)::after, ol.m-block-bar-l li:not(:last-child)::after { content: ""; } +} +p.m-poem { + text-indent: 0; + text-align: left; + margin-left: 1.5rem; +} +p.m-transition { + color: #f7e3db; + text-indent: 0; + text-align: center; + font-size: 2rem; +} +dl.m-diary { + margin-bottom: 1.25rem; +} +dl.m-diary:last-child { + margin-bottom: 0.25rem; +} +dl.m-diary dt { + font-weight: bold; + width: 3.5rem; + float: left; + clear: both; + padding-top: 0.25rem; +} +dl.m-diary dd { + padding-top: 0.25rem; + padding-left: 3.5rem; +} +.m-note { + border-radius: 0.2rem; + padding: 1rem; +} +.m-frame { + background-color: #ffffff; + border-style: solid; + border-width: 0.125rem; + border-radius: 0.2rem; + border-color: #f7e3db; + padding: 0.875rem; +} +.m-block { + border-style: solid; + border-width: 0.0625rem; + border-left-width: 0.25rem; + border-radius: 0.2rem; + border-color: #f7e3db; + padding: 0.9375rem 0.9375rem 0.9375rem 0.75rem; +} +.m-block.m-badge::after { + content: ' '; + display: block; + clear: both; +} +.m-block.m-badge h3 { + margin-left: 5rem; +} +.m-block.m-badge p { + margin-left: 5rem; + text-indent: 0; +} +.m-block.m-badge img { + width: 4rem; + height: 4rem; + border-radius: 2rem; + float: left; +} +a.m-button { + display: inline-block; + border-radius: 0.2rem; + padding-top: 0.75rem; + padding-bottom: 0.75rem; + padding-left: 1.5rem; + padding-right: 1.5rem; + text-decoration: none; + text-align: center; + font-size: 1.17rem; +} +a.m-button.m-fullwidth { + display: block; + padding-left: 0; + padding-right: 0; +} +a.m-button .m-big:first-child { + font-size: 1.37rem; + font-weight: bold; +} +a.m-button .m-small:last-child { + font-size: 0.854rem; +} +.m-label { + border-radius: 0.2rem; + font-size: 75%; + font-weight: normal; + padding: 0.125rem 0.25rem; + vertical-align: 7.5%; +} +.m-label.m-flat { + border-width: 0.0625rem; + border-style: solid; + border-color: #bdbdbd; + padding: 0.0625rem 0.1875rem; +} +table.m-table { + border-collapse: collapse; + margin-left: auto; + margin-right: auto; +} +div.m-scroll > table.m-table:last-child { + margin-bottom: 0.0625rem; +} +table.m-table:not(.m-flat) tbody tr:hover { + background-color: #f7e3db; +} +table.m-table th, table.m-table td { + vertical-align: top; + border-style: solid; + border-top-width: 0.0625rem; + border-left-width: 0; + border-right-width: 0; + border-bottom-width: 0; + border-color: #f7e3db; +} +table.m-table caption { + padding-bottom: 0.5rem; +} +table.m-table thead tr:first-child th, table.m-table thead tr:first-child td { + border-top-width: 0.125rem; +} +table.m-table thead th, table.m-table thead td { + border-bottom-width: 0.125rem; + vertical-align: bottom; +} +table.m-table tfoot th, table.m-table tfoot td { + border-top-width: 0.125rem; +} +table.m-table th, table.m-table td { + padding: 0.5rem; +} +table.m-table th { + text-align: left; +} +table.m-table td.m-default, th.m-default, +table.m-table td.m-primary, th.m-primary, +table.m-table td.m-success, th.m-success, +table.m-table td.m-warning, th.m-warning, +table.m-table td.m-danger, th.m-danger, +table.m-table td.m-info, th.m-info, +table.m-table td.m-dim, th.m-dim { + padding-left: 0.4375rem; + padding-right: 0.4375rem; + border-left-width: 0.0625rem; +} +table.m-table tr.m-default td, table.m-table td.m-default, +table.m-table tr.m-default th, table.m-table th.m-default, +table.m-table tr.m-primary td, table.m-table td.m-primary, +table.m-table tr.m-primary th, table.m-table th.m-primary, +table.m-table tr.m-success td, table.m-table td.m-success, +table.m-table tr.m-success th, table.m-table th.m-success, +table.m-table tr.m-warning td, table.m-table td.m-warning, +table.m-table tr.m-warning th, table.m-table th.m-warning, +table.m-table tr.m-danger td, table.m-table td.m-danger, +table.m-table tr.m-danger th, table.m-table th.m-danger, +table.m-table tr.m-info td, table.m-table td.m-info, +table.m-table tr.m-info th, table.m-table th.m-info, +table.m-table tr.m-dim td, table.m-table td.m-dim, +table.m-table tr.m-dim th, table.m-table th.m-dim { + border-color: #ffffff; +} +.m-block.m-default { border-left-color: #f7e3db; } +.m-block.m-default h3, .m-block.m-default h4, .m-block.m-default h5, .m-block.m-default h6 { + color: #000000; +} +.m-block.m-primary { border-left-color: #cb4b16; } +.m-block.m-primary h3, .m-block.m-primary h4, .m-block.m-primary h5, .m-block.m-primary h6 { + color: #cb4b16; +} +.m-block.m-success { border-left-color: #31c25d; } +.m-block.m-success h3, .m-block.m-success h4, .m-block.m-success h5, .m-block.m-success h6 { + color: #31c25d; +} +.m-block.m-warning { border-left-color: #c7cf2f; } +.m-block.m-warning h3, .m-block.m-warning h4, .m-block.m-warning h5, .m-block.m-warning h6 { + color: #c7cf2f; +} +.m-block.m-danger { border-left-color: #f60000; } +.m-block.m-danger h3, .m-block.m-danger h4, .m-block.m-danger h5, .m-block.m-danger h6 { + color: #f60000; +} +.m-block.m-info { border-left-color: #2e7dc5; } +.m-block.m-info h3, .m-block.m-info h4, .m-block.m-info h5, .m-block.m-info h6 { + color: #2e7dc5; +} +.m-block.m-dim { + border-left-color: #bdbdbd; + color: #bdbdbd; +} +.m-block.m-dim a { color: #c0c0c0; } +.m-block.m-dim a:hover, .m-block.m-dim a:focus, .m-block.m-dim a:active { + color: #949494; +} +.m-block.m-flat { border-color: transparent; } +.m-block.m-flat h3, .m-block.m-flat h4, .m-block.m-flat h5. .m-block.m-flat h6 { + color: #000000; +} +.m-note.m-default { background-color: #fbf0ec; } +.m-note.m-default, table.m-table tr.m-default td, table.m-table td.m-default, + table.m-table tr.m-default th, table.m-table th.m-default { + color: #000000; +} +.m-note.m-default a:hover, table.m-table tr.m-default td a:hover, table.m-table td.m-default a:hover, + table.m-table tr.m-default th a:hover, table.m-table th.m-default a:hover, +.m-note.m-default a:focus, table.m-table tr.m-default td a:focus, table.m-table td.m-default a:focus, + table.m-table tr.m-default th a:focus, table.m-table th.m-default a:focus, +.m-note.m-default a:active, table.m-table tr.m-default td a:active, table.m-table td.m-default a:active, + table.m-table tr.m-default th a:active, table.m-table th.m-default a:active { + color: #cb4b16; +} +.m-note.m-primary a, table.m-table tr.m-primary td a, table.m-table td.m-primary a, + table.m-table tr.m-primary th a, table.m-table th.m-primary a { + color: #ea7944; +} +.m-note.m-primary, table.m-table tr.m-primary td, table.m-table td.m-primary, + table.m-table tr.m-primary th, table.m-table th.m-primary { + background-color: #ef9069; + color: #fbe4d9; +} +.m-note.m-primary a, table.m-table tr.m-primary td a, table.m-table td.m-primary a, + table.m-table tr.m-primary th a, table.m-table th.m-primary a { + color: #782f0d; +} +.m-note.m-primary a:hover, table.m-table tr.m-primary td a:hover, table.m-table td.m-primary a:hover, + table.m-table tr.m-primary th a:hover, table.m-table th.m-primary a:hover, +.m-note.m-primary a:focus, table.m-table tr.m-primary td a:focus, table.m-table td.m-primary a:focus, + table.m-table tr.m-primary th a:focus, table.m-table th.m-primary a:focus, +.m-note.m-primary a:active, table.m-table tr.m-primary td a:active, table.m-table td.m-primary a:active, + table.m-table tr.m-primary th a:active, table.m-table th.m-primary a:active { + color: #2f1205; +} +.m-note.m-success, table.m-table tr.m-success td, table.m-table td.m-success, + table.m-table tr.m-success th, table.m-table th.m-success { + background-color: #4dd376; + color: #f4fcf6; +} +.m-note.m-success a, table.m-table tr.m-success td a, table.m-table td.m-success a, + table.m-table tr.m-success th a, table.m-table th.m-success a { + color: #c5f2d1; +} +.m-note.m-success a:hover, table.m-table tr.m-success td a:hover, table.m-table td.m-success a:hover, + table.m-table tr.m-success th a:hover, table.m-table th.m-success a:hover, +.m-note.m-success a:focus, table.m-table tr.m-success td a:focus, table.m-table td.m-success a:focus, + table.m-table tr.m-success th a:focus, table.m-table th.m-success a:focus, +.m-note.m-success a:active, table.m-table tr.m-success td a:active, table.m-table td.m-success a:active, + table.m-table tr.m-success th a:active, table.m-table th.m-success a:active { + color: #dcf6e3; +} +.m-note.m-warning, table.m-table tr.m-warning td, table.m-table td.m-warning, + table.m-table tr.m-warning th, table.m-table th.m-warning { + background-color: #d1d34d; + color: #fcfcf4; +} +.m-note.m-warning a, table.m-table tr.m-warning td a, table.m-table td.m-warning a, + table.m-table tr.m-warning th a, table.m-table th.m-warning a { + color: #f0f1c7; +} +.m-note.m-warning a:hover, table.m-table tr.m-warning td a:hover, table.m-table td.m-warning a:hover, + table.m-table tr.m-warning th a:hover, table.m-table th.m-warning a:hover, +.m-note.m-warning a:focus, table.m-table tr.m-warning td a:focus, table.m-table td.m-warning a:focus, + table.m-table tr.m-warning th a:focus, table.m-table th.m-warning a:focus, +.m-note.m-warning a:active, table.m-table tr.m-warning td a:active, table.m-table td.m-warning a:active, + table.m-table tr.m-warning th a:active, table.m-table th.m-warning a:active { + color: #f6f6dc; +} +.m-note.m-danger, table.m-table tr.m-danger td, table.m-table td.m-danger, + table.m-table tr.m-danger th, table.m-table th.m-danger { + background-color: #e23e3e; + color: #fdf3f3; +} +.m-note.m-danger a, table.m-table tr.m-danger td a, table.m-table td.m-danger a, + table.m-table tr.m-danger th a, table.m-table th.m-danger a { + color: #f2c7c6; +} +.m-note.m-danger a:hover, table.m-table tr.m-danger td a:hover, table.m-table td.m-danger a:hover, + table.m-table tr.m-danger th a:hover, table.m-table th.m-danger a:hover, +.m-note.m-danger a:focus, table.m-table tr.m-danger td a:focus, table.m-table td.m-danger a:focus, + table.m-table tr.m-danger th a:focus, table.m-table th.m-danger a:focus, +.m-note.m-danger a:active, table.m-table tr.m-danger td a:active, table.m-table td.m-danger a:active, + table.m-table tr.m-danger th a:active, table.m-table th.m-danger a:active { + color: #f6dddc; +} +.m-note.m-info, table.m-table tr.m-info td, table.m-table td.m-info, + table.m-table tr.m-info th, table.m-table th.m-info { + background-color: #4c93d3; + color: #f4f8fc; +} +.m-note.m-info a, table.m-table tr.m-info td a, table.m-table td.m-info a, + table.m-table tr.m-info th a, table.m-table th.m-info a { + color: #c6ddf2; +} +.m-note.m-info a:hover, table.m-table tr.m-info td a:hover, table.m-table td.m-info a:hover, + table.m-table tr.m-info th a:hover, table.m-table th.m-info a:hover, +.m-note.m-info a:focus, table.m-table tr.m-info td a:focus, table.m-table td.m-info a:focus, + table.m-table tr.m-info th a:focus, table.m-table th.m-info a:focus, +.m-note.m-info a:active, table.m-table tr.m-info td a:active, table.m-table td.m-info a:active, + table.m-table tr.m-info th a:active, table.m-table th.m-info a:active { + color: #dbeaf7; +} +.m-note.m-dim, table.m-table tr.m-dim td, table.m-table td.m-dim, + table.m-table tr.m-dim th, table.m-table th.m-dim { + background-color: #f1f1f1; + color: #7c7c7c; +} +.m-note.m-dim a, table.m-table tr.m-dim td a, table.m-table td.m-dim a, + table.m-table tr.m-dim th a, table.m-table th.m-dim a { + color: #c0c0c0; +} +.m-note.m-dim a:hover, table.m-table tr.m-dim td a:hover, table.m-table td.m-dim a:hover, + table.m-table tr.m-dim th a:hover, table.m-table th.m-dim a:hover, +.m-note.m-dim a:focus, table.m-table tr.m-dim td a:focus, table.m-table td.m-dim a:focus, + table.m-table tr.m-dim th a:focus, table.m-table th.m-dim a:focus, +.m-note.m-dim a:active, table.m-table tr.m-dim td a:active, table.m-table td.m-dim a:active, + table.m-table tr.m-dim th a:active, table.m-table th.m-dim a:active { + color: #949494; +} +.m-text.m-default, .m-label.m-flat.m-default { color: #000000; } +.m-text.m-primary, .m-label.m-flat.m-primary { color: #cb4b16; } +.m-text.m-success, .m-label.m-flat.m-success { color: #31c25d; } +.m-text.m-warning, .m-label.m-flat.m-warning { color: #c7cf2f; } +.m-text.m-danger, .m-label.m-flat.m-danger { color: #f60000; } +.m-text.m-info, .m-label.m-flat.m-info { color: #2e7dc5; } +.m-text.m-dim, .m-label.m-flat.m-dim { color: #bdbdbd; } +.m-text.m-dim a { color: #c0c0c0; } +.m-text.m-dim a:hover, .m-text.m-dim a:focus, .m-text.m-dim a:active { + color: #949494; +} +a.m-button, .m-label { color: #ffffff; } +a.m-button.m-default, .m-label:not(.m-flat).m-default { background-color: #000000; } +a.m-button.m-primary, .m-label:not(.m-flat).m-primary { background-color: #cb4b16; } +a.m-button.m-success, .m-label:not(.m-flat).m-success { background-color: #31c25d; } +a.m-button.m-warning, .m-label:not(.m-flat).m-warning { background-color: #c7cf2f; } +a.m-button.m-danger, .m-label:not(.m-flat).m-danger { background-color: #f60000; } +a.m-button.m-info, .m-label:not(.m-flat).m-info { background-color: #2e7dc5; } +a.m-button.m-dim, .m-label:not(.m-flat).m-dim { background-color: #bdbdbd; } +a.m-button.m-default:hover, a.m-button.m-default:focus, a.m-button.m-default:active { + background-color: #cb4b16; +} +a.m-button.m-primary:hover, a.m-button.m-primary:focus, a.m-button.m-primary:active { + background-color: #000000; +} +a.m-button.m-success:hover, a.m-button.m-success:focus, a.m-button.m-success:active { + background-color: #dcf6e3; +} +a.m-button.m-warning:hover, a.m-button.m-warning:focus, a.m-button.m-warning:active { + background-color: #f6f6dc; +} +a.m-button.m-danger:hover, a.m-button.m-danger:focus, a.m-button.m-danger:active { + background-color: #f6dddc; +} +a.m-button.m-info:hover, a.m-button.m-info:focus, a.m-button.m-info:active { + background-color: #c6ddf2; +} +a.m-button.m-dim:hover, a.m-button.m-dim:focus, a.m-button.m-dim:active { + background-color: #c0c0c0; +} +img.m-image { + display: block; + margin-left: auto; + margin-right: auto; +} +div.m-image { + text-align: center; +} +img.m-image, div.m-image img { + max-width: 100%; + border-radius: 0.2rem; +} +div.m-image.m-fullwidth img { + width: 100%; +} +figure.m-figure { + max-width: 100%; + margin-top: 0; + margin-left: auto; + margin-right: auto; + position: relative; + display: table; +} +figure.m-figure:before { + position: absolute; + content: ' '; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: -1; + border-style: solid; + border-width: 0.125rem; + border-radius: 0.2rem; + border-color: #f7e3db; +} +figure.m-figure.m-flat:before { + border-color: transparent; +} +figure.m-figure > * { + margin-left: 1rem; + margin-right: 1rem; + display: table-caption; + caption-side: bottom; +} +figure.m-figure > *:first-child { + display: inline; +} +figure.m-figure > *:last-child { + margin-bottom: 1rem; +} +figure.m-figure img { + position: relative; + margin-left: 0; + margin-right: 0; + margin-bottom: 0; + border-top-left-radius: 0.2rem; + border-top-right-radius: 0.2rem; + max-width: 100%; +} +figure.m-figure figcaption { + margin-top: 0.5rem; + margin-bottom: 0.5rem; + font-weight: normal; + font-size: 1.17rem; +} +figure.m-figure a img { + margin-left: -1rem; + margin-right: -1rem; +} +figure.m-figure.m-fullwidth, figure.m-figure.m-fullwidth > * { + display: block; +} +figure.m-figure.m-fullwidth > *:first-child { + display: inline; +} +figure.m-figure.m-fullwidth img { + width: 100%; +} +figure.m-figure.m-fullwidth:after { + content: ' '; + display: block; + margin-top: 1rem; + height: 1px; +} +figure.m-code-figure, figure.m-console-figure { + margin-top: 0; + margin-left: 0; + margin-right: 0; + position: relative; + padding: 1rem; +} +figure.m-code-figure:before, figure.m-console-figure:before { + position: absolute; + content: ' '; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: -1; + border-style: solid; + border-width: 0.125rem; + border-radius: 0.2rem; +} +figure.m-code-figure:before { + border-color: #fbf0ec; +} +figure.m-console-figure:before { + border-color: #000000; +} +figure.m-code-figure.m-flat:before, figure.m-console-figure.m-flat:before { + border-color: transparent; +} +figure.m-code-figure > pre:first-child, figure.m-console-figure > pre:first-child { + position: relative; + margin: -1rem -1rem 1rem -1rem; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; +} +article section:target figure.m-code-figure, article section:target figure.m-console-figure { + z-index: 1; +} +.m-imagegrid > div { + background-color: #ffffff; /* to avoid section HL shining through */ +} +.m-imagegrid > div > figure { + display: block; + float: left; + position: relative; + margin: 0; +} +.m-imagegrid > div > figure > div, +.m-imagegrid > div > figure > figcaption, +.m-imagegrid > div > figure > a > div, +.m-imagegrid > div > figure > a > figcaption { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + border-color: #ffffff; + border-style: solid; + border-width: 0.25rem; + padding: 0.5rem; +} +.m-imagegrid > div > figure:first-child > div, +.m-imagegrid > div > figure:first-child > figcaption, +.m-imagegrid > div > figure:first-child > a > div, +.m-imagegrid > div > figure:first-child > a > figcaption { + border-left-width: 0; +} +.m-imagegrid > div > figure:last-child > div, +.m-imagegrid > div > figure:last-child > figcaption, +.m-imagegrid > div > figure:last-child > a > div, +.m-imagegrid > div > figure:last-child > a > figcaption { + border-right-width: 0; +} +.m-imagegrid > div > figure > figcaption, +.m-imagegrid > div > figure > a > figcaption { + color: transparent; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + font-size: 0.75rem; +} +.m-imagegrid > div > figure > div::before, +.m-imagegrid > div > figure > figcaption::before, +.m-imagegrid > div > figure > a > div::before, +.m-imagegrid > div > figure > a > figcaption::before { + content: ''; + display: inline-block; + height: 100%; + vertical-align: bottom; + width: 0; +} +.m-imagegrid > div > figure:hover > figcaption, +.m-imagegrid > div > figure:hover > a > figcaption { + background: linear-gradient(transparent 0%, transparent 75%, rgba(0, 0, 0, 0.85) 100%); + color: #ffffff; +} +.m-imagegrid > div > figure > img, +.m-imagegrid > div > figure > a > img { + width: 100%; + height: 100%; +} +.m-imagegrid > div::after { + display: block; + content: ' '; + clear: both; +} +@media screen and (max-width: 767px) { + .m-imagegrid > div > figure { + float: none; + width: 100% !important; + } + .m-imagegrid > div > figure > div, + .m-imagegrid > div > figure > figcaption, + .m-imagegrid > div > figure > a > div, + .m-imagegrid > div > figure > a > figcaption { + border-left-width: 0; + border-right-width: 0; + } +} +.m-container-inflatable > .m-row > [class*='m-col-'] > .m-note, +.m-container-inflatable > .m-row > [class*='m-col-'] > .m-frame, +.m-container-inflatable > .m-row > [class*='m-col-'] > .m-block, +.m-container-inflatable > .m-row > [class*='m-col-'] > .m-imagegrid, +.m-container-inflatable > .m-row > [class*='m-col-'] > pre, +.m-container-inflatable > .m-row > [class*='m-col-'] > figure.m-code-figure, +.m-container-inflatable > .m-row > [class*='m-col-'] > figure.m-console-figure, +.m-container-inflatable > .m-row > [class*='m-col-'] section > .m-note, +.m-container-inflatable > .m-row > [class*='m-col-'] section > .m-frame, +.m-container-inflatable > .m-row > [class*='m-col-'] section > .m-block, +.m-container-inflatable > .m-row > [class*='m-col-'] section > .m-imagegrid, +.m-container-inflatable > .m-row > [class*='m-col-'] section > pre, +.m-container-inflatable > .m-row > [class*='m-col-'] section > figure.m-code-figure, +.m-container-inflatable > .m-row > [class*='m-col-'] section > figure.m-console-figure { + margin-left: -1rem; + margin-right: -1rem; +} +@media screen and (min-width: 576px) { + .m-container-inflatable > .m-row > .m-col-s-10 > .m-imagegrid.m-container-inflate, + .m-container-inflatable > .m-row > .m-col-s-10 section > .m-imagegrid.m-container-inflate { + margin-left: -10%; + margin-right: -10%; + } +} +@media screen and (min-width: 768px) { + .m-container-inflatable > .m-row > .m-col-m-10 > .m-imagegrid.m-container-inflate, + .m-container-inflatable > .m-row > .m-col-m-10 section > .m-imagegrid.m-container-inflate { + margin-left: -10%; + margin-right: -10%; + } +} +@media screen and (min-width: 992px) { + .m-container-inflatable > .m-row > .m-col-l-10 > .m-imagegrid.m-container-inflate, + .m-container-inflatable > .m-row > .m-col-l-10 section > .m-imagegrid.m-container-inflate { + margin-left: -10%; + margin-right: -10%; + } +} +.m-container-inflatable section:target > .m-note, +.m-container-inflatable section:target > .m-frame, +.m-container-inflatable section:target > .m-block, +.m-container-inflatable section:target > pre, +.m-container-inflatable section:target > figure.m-code-figure > pre:first-child, +.m-container-inflatable section:target > figure.m-console-figure > pre:first-child, +.m-container-inflatable section:target section > .m-note, +.m-container-inflatable section:target section > .m-frame, +.m-container-inflatable section:target section > .m-block, +.m-container-inflatable section:target section > pre, +.m-container-inflatable section:target section > figure.m-code-figure > pre:first-child, +.m-container-inflatable section:target section > figure.m-console-figure > pre:first-child { + margin-left: -1.0rem; + border-left-style: solid; + border-left-width: 0.25rem; + border-top-left-radius: 0; + border-bottom-left-radius: 0; + padding-left: 0.75rem; +} +.m-container-inflatable section:target > figure.m-code-figure::before, +.m-container-inflatable section:target > figure.m-console-figure::before, +.m-container-inflatable section:target section > figure.m-code-figure::before, +.m-container-inflatable section:target section > figure.m-console-figure::before { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + border-left-width: 0.25rem; +} +.m-container-inflatable section:target > pre, +.m-container-inflatable section:target > figure.m-code-figure > pre:first-child, +.m-container-inflatable section:target > figure.m-console-figure > pre:first-child, +.m-container-inflatable section:target section > pre, +.m-container-inflatable section:target section > figure.m-code-figure > pre:first-child, +.m-container-inflatable section:target section > figure.m-console-figure > pre:first-child { + border-color: #f7e3db; +} +.m-container-inflatable section:target > figure.m-code-figure::before, +.m-container-inflatable section:target > figure.m-console-figure::before, +.m-container-inflatable section:target > .m-note.m-default, +.m-container-inflatable section:target section > figure.m-code-figure::before, +.m-container-inflatable section:target section > figure.m-console-figure::before, +.m-container-inflatable section:target section > .m-note.m-default { + border-left-color: #f7e3db; +} +.m-container-inflatable section:target > .m-note.m-primary, +.m-container-inflatable section:target section > .m-note.m-primary { + border-left-color: #cb4b16; +} +.m-container-inflatable section:target > .m-note.m-success, +.m-container-inflatable section:target section > .m-note.m-success { + border-left-color: #31c25d; +} +.m-container-inflatable section:target > .m-note.m-warning, +.m-container-inflatable section:target section > .m-note.m-warning { + border-left-color: #c7cf2f; +} +.m-container-inflatable section:target > .m-note.m-danger, +.m-container-inflatable section:target section > .m-note.m-danger { + border-left-color: #f60000; +} +.m-container-inflatable section:target > .m-note.m-info, +.m-container-inflatable section:target section > .m-note.m-info { + border-left-color: #2e7dc5; +} +.m-container-inflatable section:target > .m-note.m-dim, +.m-container-inflatable section:target section > .m-note.m-dim { + border-left-color: #bdbdbd; +} +pre.m-code span.hll { + margin-left: -1.0rem; + margin-right: -1.0rem; + padding-left: 1.0rem; +} +pre.m-code.m-inverted { + color: rgba(91, 91, 91, 0.33); +} +pre.m-code.m-inverted > span { + opacity: 0.3333; +} +pre.m-code.m-inverted > span.hll { + color: #000000; + opacity: 1; + background-color: transparent; + border-color: transparent; +} +div.m-math { + overflow-x: auto; + overflow-y: hidden; + text-align: center; +} +div.m-math svg, svg.m-math { fill: #000000; } +div.m-math.m-default svg, svg.m-math.m-default { fill: #000000; } +div.m-math.m-primary svg, svg.m-math.m-primary { fill: #cb4b16; } +div.m-math.m-success svg, svg.m-math.m-success { fill: #31c25d; } +div.m-math.m-warning svg, svg.m-math.m-warning { fill: #c7cf2f; } +div.m-math.m-danger svg, svg.m-math.m-danger { fill: #f60000; } +div.m-math.m-info svg, svg.m-math.m-info { fill: #2e7dc5; } +div.m-math.m-dim svg, svg.m-math.m-dim { fill: #bdbdbd; } +p, ul, ol, dl, blockquote, pre, figure.m-code-figure, figure.m-console-figure, +hr, article, article > header, article section, +.m-note, .m-frame, .m-block, .m-button, +div.m-scroll, table.m-table, div.m-image, img.m-image, +figure.m-figure, .m-imagegrid, div.m-math { + margin-bottom: 1rem; +} +p:last-child, ul:last-child, ol:last-child, dl:last-child, blockquote:last-child, +pre:last-child, figure.m-code-figure:last-child, figure.m-console-figure:last-child, +hr:last-child, article:last-child, article section:last-child, +.m-note:last-child, .m-frame:last-child, .m-block:last-child, .m-button:last-child, +table.m-table:last-child, img.m-image:last-child, div.m-image:last-child, +figure.m-figure:last-child, .m-imagegrid:last-child, div.m-math:last-child { + margin-bottom: 0; +} +li > p:last-child, li > blockquote:last-child, li > pre:last-child, +li > figure.m-code-figure:last-child, li > figure.m-console-figure:last-child, +li > .m-note:last-child, li > .m-frame:last-child, li > .m-block:last-child, +li > .m-button:last-child, li > div.m-scroll:last-child, +li > table.m-table:last-child, li > div.m-image:last-child, +li > img.m-image:last-child, li > figure.m-figure:last-child, +li > div.m-math:last-child { + margin-bottom: 1rem; +} +li > p:last-child, li:last-child > blockquote:last-child, li:last-child > pre:last-child, +li:last-child > figure.m-code-figure:last-child, li:last-child > figure.m-console-figure:last-child, +li:last-child > .m-note:last-child, li:last-child > .m-frame:last-child, li:last-child > .m-block:last-child, +li:last-child > .m-button:last-child, li:last-child > div.m-scroll:last-child, +li:last-child > table.m-table:last-child, li:last-child > div.m-image:last-child, +li:last-child > img.m-image:last-child, li:last-child > figure.m-figure:last-child, +li:last-child > div.m-math:last-child { + margin-bottom: 0; +} + +.m-console .hll { background-color: #ffffcc } +.m-console .g-AnsiBlack { color: #000000 } +.m-console .g-AnsiBlue { color: #3f3fd1 } +.m-console .g-AnsiBrightBlack { color: #686868; font-weight: bold } +.m-console .g-AnsiBrightBlue { color: #5454ff; font-weight: bold } +.m-console .g-AnsiBrightCyan { color: #54ffff; font-weight: bold } +.m-console .g-AnsiBrightDefault { color: #ffffff; font-weight: bold } +.m-console .g-AnsiBrightGreen { color: #54ff54; font-weight: bold } +.m-console .g-AnsiBrightMagenta { color: #ff54ff; font-weight: bold } +.m-console .g-AnsiBrightRed { color: #ff5454; font-weight: bold } +.m-console .g-AnsiBrightWhite { color: #ffffff; font-weight: bold } +.m-console .g-AnsiBrightYellow { color: #ffff54; font-weight: bold } +.m-console .g-AnsiCyan { color: #18b2b2 } +.m-console .g-AnsiDefault { color: #b2b2b2 } +.m-console .g-AnsiGreen { color: #18b218 } +.m-console .g-AnsiMagenta { color: #b218b2 } +.m-console .g-AnsiRed { color: #b21818 } +.m-console .g-AnsiWhite { color: #b2b2b2 } +.m-console .g-AnsiYellow { color: #b26818 } +.m-console .go { color: #b2b2b2 } +.m-console .gp { color: #54ffff; font-weight: bold } +.m-console .w { color: #b2b2b2 } + +a.m-dox, a.m-dox-self, a.m-dox-external, +ul.m-dox li.m-dox-expansible > a:first-child, ul.m-dox li.m-dox-collapsible > a:first-child { + text-decoration: none; +} +a.m-dox, a.m-dox-self { + font-weight: bold; +} +ul.m-dox li.m-dox-expansible > a:first-child, +ul.m-dox li.m-dox-collapsible > a:first-child, +ul.m-dox li.m-dox-expansible > a:first-child:hover, +ul.m-dox li.m-dox-expansible > a:first-child:focus, +ul.m-dox li.m-dox-expansible > a:first-child:active, +ul.m-dox li.m-dox-collapsible > a:first-child:hover, +ul.m-dox li.m-dox-collapsible > a:first-child:focus, +ul.m-dox li.m-dox-collapsible > a:first-child:active { + color: #000000; +} +a.m-dox-self, +ul.m-dox li.m-dox-expansible > a:first-child:before, +ul.m-dox li.m-dox-collapsible > a:first-child:before { + color: #cb4b16; +} +a.m-dox-self:hover, a.m-dox-self:focus, a.m-dox-self:active, +ul.m-dox li.m-dox-expansible > a:first-child:hover::before, +ul.m-dox li.m-dox-expansible > a:first-child:focus::before, +ul.m-dox li.m-dox-expansible > a:first-child:active::before, +ul.m-dox li.m-dox-collapsible > a:first-child:hover::before, +ul.m-dox li.m-dox-collapsible > a:first-child:focus::before, +ul.m-dox li.m-dox-collapsible > a:first-child:active::before { + color: #802f0e; +} +h3 a.m-dox-external { + font-weight: normal; +} +span.m-dox-wrap-bumper { + margin-right: -1rem; +} +span.m-dox-wrap { + padding-left: 1rem; + display: inline-block; + vertical-align: text-top; + white-space: pre-line; + max-width: 100%; +} +dl.m-dox dd { + margin-bottom: 0.5rem; +} +ul.m-dox { + list-style: none; + margin-left: 1.0375rem; + padding-left: 0.9rem; + border-left-color: #f7e3db; + border-left-width: 0.0625rem; + border-left-style: solid; +} +ul.m-dox li { + text-indent: -1rem; + padding-left: 1rem; +} +ul.m-dox li.m-dox-expansible > ul { + display: none; +} +ul.m-dox li.m-dox-expansible, ul.m-dox li.m-dox-collapsible { + padding-left: 0.6rem; +} +ul.m-dox li.m-dox-expansible > ul.m-dox, ul.m-dox li.m-dox-collapsible > ul.m-dox { + margin-left: 0.5rem; +} +ul.m-dox li.m-dox-expansible > a:first-child:before, ul.m-dox li.m-dox-collapsible > a:first-child:before { + background-color: #ffffff; + display: inline-block; + width: 0.4rem; + font-weight: bold; +} +ul.m-dox li.m-dox-expansible > a:first-child:before { content: '⊕'; } +ul.m-dox li.m-dox-collapsible > a:first-child:before { content: '⊖'; } +h1 .m-dox-template { + font-size: 1.3rem; + font-weight: normal; +} +h3 .m-dox-template { + font-size: 1rem; + font-weight: normal; +} +.m-dox-template, dl.m-dox dd, ul.m-dox li > span.m-dox { + color: #bdbdbd; +} +.m-dox-template a, dl.m-dox dd a, ul.m-dox li > span.m-dox a { + color: #c0c0c0; +} +.m-dox-template a:hover, .m-dox-template a:focus, .m-dox-template a:active, +dl.m-dox dd a:hover, dl.m-dox dd a:focus, dl.m-dox dd a:active, +ul.m-dox li > span.m-dox a:hover, ul.m-dox li > span.m-dox a:focus, ul.m-dox li > span.m-dox a:active { + color: #949494; +} +article section.m-dox-details > div { + margin-top: 0; + margin-left: 0; + margin-right: 0; + position: relative; + padding: 1rem; +} +article section.m-dox-details > div::before { + position: absolute; + content: ' '; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: -1; + border-style: solid; + border-width: 0.125rem; + border-radius: 0.2rem; + border-color: #fbf0ec; +} +article section.m-dox-details > div > h3:first-child { + position: relative; + margin: -1rem -1rem 1rem -1rem; + padding: 0.5rem 1rem; + background-color: #fbf0ec; + border-top-left-radius: 0.2rem; + border-top-right-radius: 0.2rem; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; +} +article section.m-dox-details:target { + border-color: transparent; +} +article section.m-dox-details:target > div { + z-index: 1; +} +.m-container-inflatable > .m-row > [class*='m-col-'] section.m-dox-details > div { + margin-left: -1rem; + margin-right: -1rem; +} +.m-container-inflatable section.m-dox-details:target > div > h3:first-child, +.m-container-inflatable section.m-dox-details:target section > div > h3:first-child { + margin-left: -1.0rem; + border-left-style: solid; + border-left-color: #802f0e; + border-left-width: 0.25rem; + padding-left: 0.75rem; +} +.m-container-inflatable section.m-dox-details:target > div::before, +.m-container-inflatable section-dox-details:target section > div.m::before { + border-left-width: 0.25rem; + border-left-color: #cb4b16; +} diff --git a/css/m-light.doxygen.compiled.css b/css/m-light.doxygen.compiled.css new file mode 100644 index 00000000..0b02f1c4 --- /dev/null +++ b/css/m-light.doxygen.compiled.css @@ -0,0 +1,174 @@ +/* Generated using `./postprocess.py m-light.css m-doxygen.css --no-import -o m-light.doxygen.compiled.css`. Do not edit. */ + +/* + This file is part of m.css. + + Copyright © 2017 Vladimír VondruÅ¡ + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + DEALINGS IN THE SOFTWARE. +*/ + +a.m-dox, a.m-dox-self, a.m-dox-external, +ul.m-dox li.m-dox-expansible > a:first-child, ul.m-dox li.m-dox-collapsible > a:first-child { + text-decoration: none; +} +a.m-dox, a.m-dox-self { + font-weight: bold; +} +ul.m-dox li.m-dox-expansible > a:first-child, +ul.m-dox li.m-dox-collapsible > a:first-child, +ul.m-dox li.m-dox-expansible > a:first-child:hover, +ul.m-dox li.m-dox-expansible > a:first-child:focus, +ul.m-dox li.m-dox-expansible > a:first-child:active, +ul.m-dox li.m-dox-collapsible > a:first-child:hover, +ul.m-dox li.m-dox-collapsible > a:first-child:focus, +ul.m-dox li.m-dox-collapsible > a:first-child:active { + color: #000000; +} +a.m-dox-self, +ul.m-dox li.m-dox-expansible > a:first-child:before, +ul.m-dox li.m-dox-collapsible > a:first-child:before { + color: #cb4b16; +} +a.m-dox-self:hover, a.m-dox-self:focus, a.m-dox-self:active, +ul.m-dox li.m-dox-expansible > a:first-child:hover::before, +ul.m-dox li.m-dox-expansible > a:first-child:focus::before, +ul.m-dox li.m-dox-expansible > a:first-child:active::before, +ul.m-dox li.m-dox-collapsible > a:first-child:hover::before, +ul.m-dox li.m-dox-collapsible > a:first-child:focus::before, +ul.m-dox li.m-dox-collapsible > a:first-child:active::before { + color: #802f0e; +} +h3 a.m-dox-external { + font-weight: normal; +} +span.m-dox-wrap-bumper { + margin-right: -1rem; +} +span.m-dox-wrap { + padding-left: 1rem; + display: inline-block; + vertical-align: text-top; + white-space: pre-line; + max-width: 100%; +} +dl.m-dox dd { + margin-bottom: 0.5rem; +} +ul.m-dox { + list-style: none; + margin-left: 1.0375rem; + padding-left: 0.9rem; + border-left-color: #f7e3db; + border-left-width: 0.0625rem; + border-left-style: solid; +} +ul.m-dox li { + text-indent: -1rem; + padding-left: 1rem; +} +ul.m-dox li.m-dox-expansible > ul { + display: none; +} +ul.m-dox li.m-dox-expansible, ul.m-dox li.m-dox-collapsible { + padding-left: 0.6rem; +} +ul.m-dox li.m-dox-expansible > ul.m-dox, ul.m-dox li.m-dox-collapsible > ul.m-dox { + margin-left: 0.5rem; +} +ul.m-dox li.m-dox-expansible > a:first-child:before, ul.m-dox li.m-dox-collapsible > a:first-child:before { + background-color: #ffffff; + display: inline-block; + width: 0.4rem; + font-weight: bold; +} +ul.m-dox li.m-dox-expansible > a:first-child:before { content: '⊕'; } +ul.m-dox li.m-dox-collapsible > a:first-child:before { content: '⊖'; } +h1 .m-dox-template { + font-size: 1.3rem; + font-weight: normal; +} +h3 .m-dox-template { + font-size: 1rem; + font-weight: normal; +} +.m-dox-template, dl.m-dox dd, ul.m-dox li > span.m-dox { + color: #bdbdbd; +} +.m-dox-template a, dl.m-dox dd a, ul.m-dox li > span.m-dox a { + color: #c0c0c0; +} +.m-dox-template a:hover, .m-dox-template a:focus, .m-dox-template a:active, +dl.m-dox dd a:hover, dl.m-dox dd a:focus, dl.m-dox dd a:active, +ul.m-dox li > span.m-dox a:hover, ul.m-dox li > span.m-dox a:focus, ul.m-dox li > span.m-dox a:active { + color: #949494; +} +article section.m-dox-details > div { + margin-top: 0; + margin-left: 0; + margin-right: 0; + position: relative; + padding: 1rem; +} +article section.m-dox-details > div::before { + position: absolute; + content: ' '; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: -1; + border-style: solid; + border-width: 0.125rem; + border-radius: 0.2rem; + border-color: #fbf0ec; +} +article section.m-dox-details > div > h3:first-child { + position: relative; + margin: -1rem -1rem 1rem -1rem; + padding: 0.5rem 1rem; + background-color: #fbf0ec; + border-top-left-radius: 0.2rem; + border-top-right-radius: 0.2rem; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; +} +article section.m-dox-details:target { + border-color: transparent; +} +article section.m-dox-details:target > div { + z-index: 1; +} +.m-container-inflatable > .m-row > [class*='m-col-'] section.m-dox-details > div { + margin-left: -1rem; + margin-right: -1rem; +} +.m-container-inflatable section.m-dox-details:target > div > h3:first-child, +.m-container-inflatable section.m-dox-details:target section > div > h3:first-child { + margin-left: -1.0rem; + border-left-style: solid; + border-left-color: #802f0e; + border-left-width: 0.25rem; + padding-left: 0.75rem; +} +.m-container-inflatable section.m-dox-details:target > div::before, +.m-container-inflatable section-dox-details:target section > div.m::before { + border-left-width: 0.25rem; + border-left-color: #cb4b16; +} diff --git a/doc/doxygen-test.rst b/doc/doxygen-test.rst new file mode 100644 index 00000000..886cfa17 --- /dev/null +++ b/doc/doxygen-test.rst @@ -0,0 +1,64 @@ +.. + This file is part of m.css. + + Copyright © 2017 Vladimír VondruÅ¡ + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + DEALINGS IN THE SOFTWARE. +.. + +Test +#### + +:save_as: doxygen/test/index.html +:breadcrumb: {filename}/doxygen.rst Doxygen +:css: {filename}/static/m-doxygen.css + +Lists +===== + +Compound lists should have the same indentation as normal ones. + +.. raw:: html + +
    +
  • An item
  • +
  • Another +
      +
    • Subitem
    • +
    +
  • Another
  • +
+ +
    +
  • An item
  • +
  • An expansible item. Verify that the indentation works. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus ultrices a erat eu suscipit. +
      +
    • Subitem
    • +
    • Subitem
    • +
    • Subitem
    • +
    • Subitem
    • +
    +
  • +
  • A collapsible item +
      +
    • Subitem
    • +
    +
  • +
  • Another item. Verify that the indentation works. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus ultrices a erat eu suscipit.
  • +
diff --git a/doc/doxygen.rst b/doc/doxygen.rst new file mode 100644 index 00000000..7af90e00 --- /dev/null +++ b/doc/doxygen.rst @@ -0,0 +1,1109 @@ +.. + This file is part of m.css. + + Copyright © 2017 Vladimír Vondruš + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + DEALINGS IN THE SOFTWARE. +.. + +Doxygen theme +############# + +.. role:: cpp(code) + :language: cpp +.. role:: html(code) + :language: html +.. role:: ini(code) + :language: ini +.. role:: jinja(code) + :language: jinja +.. role:: py(code) + :language: py +.. role:: sh(code) + :language: sh + +A drop-in replacement for the stock `Doxygen `_ HTML +output, generated from Doxygen-produced XML files. Generated filenames and URLs +are fully compatible with the stock output to avoid broken links once you +switch. + +.. contents:: + :class: m-block m-default + +`Basic usage`_ +============== + +Everything you need is a Python script and a bunch of template files. You can +get that by cloning :gh:`the m.css GitHub repository ` +and looking into the ``doxygen/`` directory: + +.. code:: sh + + git clone git://github.com/mosra/m.css + cd m.css/doxygen + +The script requires Python 3.6, depends on `Jinja2 `_ +for templating and `Pygments `_ for code block +highlighting. You can install the dependencies via ``pip`` or your distribution +package manager: + +.. code:: sh + + pip install jinja2 Pygments + +If your documentation includes math formulas, in addition you need some LaTeX +distribution installed. Use your distribution package manager, for example on +Ubuntu: + +.. code:: sh + + sudo apt-get install texlive-base texlive-latex-extra texlive-fonts-extra + +.. note-success:: + + This tool makes use of the ``latex2svg.py`` utility from :gh:`tuxu/latex2svg`, + © 2017 `Tino Wagner `_, licensed under + :gh:`MIT `. + +Now, in order to preserve your original Doxygen configuration, create a new +``Doxyfile-mcss`` file next to your original ``Doxyfile`` and put the following +inside: + +.. code:: ini + + @INCLUDE = Doxyfile + GENERATE_HTML = NO + GENERATE_XML = YES + XML_PROGRAMLISTING = NO + +This will derive the configuration from the original ``Doxyfile``, disables +builtin Doxygen HTML output and enables XML output instead, with some unneeded +features disabled for faster processing. Now run ``dox2html5.py`` and point it +to your ``Doxyfile-mcss``: + +.. code:: sh + + ./dox2html5.py path/to/your/Doxyfile-mcss + +It will run ``doxygen`` to generate the XML output, processes it and generates +the HTML output in the configured output directory. After the script is done, +just open generated ``index.html`` to see the result. + +`Features`_ +=========== + +- Modern, valid, mobile-friendly HTML5 markup without table layouts +- Minimalistic design without unnecessary chrome and UI elements +- URLs fully compatible with stock Doxygen HTML output to preserve existing + links +- Focused on presenting the actual written documentation while reducing + questionable auto-generated content +- Math rendered as `embedded SVG <{filename}/css/components.rst#math>`_ + instead of raster images / MathJax +- Uses Pygments for better code highlighting + +`Important differences to stock HTML output`_ +--------------------------------------------- + +- Detailed description is put first and foremost on a page, *before* the + member listing +- Table of contents is generated for compound references as well, containing + all sections of detailed description together with anchors to member + listings. +- Private members and anonymous namespaces are always ignored, however + private virtual functions are listed in case they are documented + (`why? `_) +- Inner classes are listed in the public/protected type sections instead of + being listed in a separate section ignoring their public/private status +- Class references contain also their template specification on the linked + page +- Function signatures don't contain :cpp:`constexpr` and :cpp:`noexcept` + anymore. These keywords are instead added as flags to the function + description together with :cpp:`virtual`\ ness and :cpp:`explicit`\ ity. On + the other hand, important properties like :cpp:`static`, :cpp:`const` and + r-value overloads *are* part of function signature. +- For better visual alignment, function listing is done using the C++11 + trailing return type (:cpp:`auto` in front) and typedef listing is done + with :cpp:`using`). However, the detailed documentation is kept in the + original form. +- Function and macro parameters and enum values are vertically aligned in + the member listing for better readability. +- Default class template parameters are not needlessly repeated in each + member detailed docs + +`Intentionally unsupported features`_ +------------------------------------- + +.. note-danger:: Warning: opinions + + This list presents my opinions. Not everybody likes my opinions. + +Features that I don't see a point in because they just artifically inflate the +amount of generated content for no added value. + +- Class hierarchy graphs are ignored (it only inflates the documentation with + little added value) +- Alphabetical list of symbols and alphabetical list of all members of a + class is not created (the API *should be* organized in a way that makes + this unnecessary) +- Verbatim listing of parsed headers, "Includes" and "Included By" lists are + not present (use your IDE or GitHub instead) +- Undocumented or private members and content of anonymous namespaces are + ignored (if things are undocumented or intentionally hidden, why put them + in the documentation) +- Brief description for enum values is ignored (only the detailed description + is used, as the brief description was never used anywhere else than next to + the detailed description) +- Initializers of defines and variables are unconditionally ignored (look in + the sources, if you *really* need that) +- No section with list of examples or linking from function/class + documentation to related example code (he example code should be + accompanied with corresponding tutorial page instead) +- :cpp:`inline` functions are not marked as such (I see it as an unimportant + implementation detail) + +`Not yet implemented features`_ +------------------------------- + +- Code search. I want to provide something that's actually usable to replace + the terribly slow stock client-side search, but I'm not there yet. +- Clickable symbols in code snippets. Doxygen has quite a lot of false + positives while a lot of symbols stay unmatched. I need to find a way + around that. + +`Configuration`_ +================ + +The script takes most of the configuration from the ``Doxyfile`` itself, +(ab)using the following builtin options: + +.. class:: m-table m-fullwidth + +=============================== =============================================== +Variable Description +=============================== =============================================== +:ini:`@INCLUDE` Includes in ``Doxyfile``\ s are supported +:ini:`PROJECT_NAME` Rendered in top navbar, footer fine print and + page title +:ini:`PROJECT_BRIEF` If set, appended in a thinner font to + :ini:`PROJECT_NAME` +:ini:`OUTPUT_DIRECTORY` Used to discover where Doxygen generates the + files +:ini:`XML_OUTPUT` Used to discover where Doxygen puts the + generated XML +:ini:`HTML_OUTPUT` The output will be written here +:ini:`TAGFILES` Used to discover what base URL to prepend to + external references +:ini:`IMAGE_PATHS` Used to discover where Doxygen gets the image + files +:ini:`HTML_EXTRA_STYLESHEET` List of CSS files to include. Relative paths + are also searched relative to the + ``dox2html5.py`` script. See below for more + information. +:ini:`HTML_EXTRA_FILES` List of extra files to copy (for example + additional CSS files that are :css:`@import`\ ed + from the primary one). Relative paths are also + searched relative to the ``dox2html5.py`` + script. +=============================== =============================================== + +In addition, the m.css Doxygen theme recognizes the following extra options: + +.. class:: m-table m-fullwidth + +=================================== ======================================= +Variable Description +=================================== ======================================= +:ini:`M_THEME_COLOR` Color for :html:``, + corresponding to the CSS style. See below + for more information. +:ini:`M_PAGE_HEADER` HTML code to put at the top of every page. + Useful for example to link to different + versions of the same documentation. The + ``{filename}`` placeholder is replaced with + current file name. +:ini:`M_CLASS_TREE_EXPAND_LEVELS` How many levels of the class tree to + expand. ``0`` means only the top-level + symbols are shown. If not set, ``1`` is + used. +:ini:`M_FILE_TREE_EXPAND_LEVELS` How many levels of the file tree to expand. + ``0`` means only the top-level dirs/files + are shown. If not set, ``1`` is used. +:ini:`M_EXPAND_INNER_TYPES` Whether to expand inner types (e.g. a class + inside a class) in the symbol tree. If not + set, ``0`` is used. +=================================== ======================================= + +Note that namespace, directory and page lists are always fully expanded as +these are not expected to be excessively large. + +By default, the `dark m.css theme <{filename}/css/themes.rst#dark>`_ together +with Doxygen-theme-specific additions is used, which corresponds to the +following configuration: + +.. code:: ini + + HTML_EXTRA_STYLESHEET = \ + https://fonts.googleapis.com/css?family=Source+Sans+Pro:400,400i,600,600i%7CSource+Code+Pro:400,400i,600 \ + ../css/m-dark+doxygen.compiled.css + M_THEME_COLOR = #22272e + +If you have a site already using the ``m-dark.compiled.css`` file, there's +another file called ``m-dark.doxygen.compiled.css``, which contains just the +Doxygen-theme-specific additions so you can reuse the already cached +``m-dark.compiled.css`` file from your main site: + +.. code:: ini + + HTML_EXTRA_STYLESHEET = \ + https://fonts.googleapis.com/css?family=Source+Sans+Pro:400,400i,600,600i%7CSource+Code+Pro:400,400i,600 \ + ../css/m-dark.compiled.css \ + ../css/m-dark.doxygen.compiled.css + M_THEME_COLOR = #22272e + +If you prefer the `light m.css theme <{filename}/css/themes.rst#light>`_ +instead, use the following configuration (and, similarly, you can use +``m-light.compiled.css`` together with ``m-light.doxygen.compiled-css`` in +place of ``m-light+doxygen.compiled.css``: + +.. code:: ini + + HTML_EXTRA_STYLESHEET = \ + https://fonts.googleapis.com/css?family=Libre+Baskerville:400,400i,700,700i%7CSource+Code+Pro:400,400i,600 \ + ../css/m-light+doxygen.compiled.css + M_THEME_COLOR = #cb4b16 + +See the `CSS files`_ section below for more information about customizing the +CSS files. + +`Text content`_ +=============== + +Brief and detailed description is parsed as-is with the following +modifications: + +- Function parameter documentation, return value documentation and template + parameter documentation is extracted out of the text flow to allow for more + flexible styling, it's also reordered to match parameter order and warnings + are emitted if there are mismatches. +- To make text content wrap better on narrow screens, :html:`` tags are + added after ``::`` and ``_`` in long symbols in link titles and after ``/`` + in URLs. + +`Pages, sections and table of contents`_ +======================================== + +Table of contents is unconditionally generated for all compound documentation +pages and includes both ``@section`` blocks in the detailed documentation as +well as the reference sections. If your documentation is using Markdown-style +headers (prefixed with ``##``, for example), the script is not able to generate +TOC entries for these. Upon encountering them, tt will warn and suggest to use +the ``@section`` command instead. + +Table of contents for pages is generated only if they specify +``@tableofcontents`` in their documentation block. + +.. block-warning:: Doxygen patches + + Note that recognition of the ``@tableofcontents`` command requires Doxygen + with :gh:`doxygen/doxygen#625` applied. Brief description of pages is + ignored and not extracted to the page index unless Doxygen has + :gh:`doxygen/doxygen#624` applied. + +`C++ support`_ +============== + +.. block-warning:: Doxygen patches + + In order to properly detect template parameters for type aliases (the + :cpp:`using` keyword), Doxygen with :gh:`doxygen/doxygen#626` applied is + required. Rendering underlying enum types and enum strongness then requires + :gh:`doxygen/doxygen#627`. + +`Code highlighting`_ +==================== + +Every code snippet should be annotated with language-specific extension like in +the example below. If not, the theme will assume C++ and emit a warning on +output. Language of snippets included via ``@include`` and related commands is +autodetected from filename. + +.. code:: c++ + + /** + @code{.cpp} + int main() { } + @endcode + */ + +Besides native Pygments mapping of file extensions to languages, there are the +following special cases: + +.. class:: m-table m-fullwidth + +=================== =========================================================== +Filename suffix Detected language +=================== =========================================================== +``.h`` C++ (instead of C) +``.h.cmake`` C++ (instead of CMake), as this extension is often used for + C++ headers that are preprocessed with CMake +``.h.nostrip`` C++. Useful for embedding code snippets with Doxygen + comment block, as Doxygen would strip them with plain + ``.h``. +``.glsl`` GLSL. For some reason, stock Pygments detect only + ``.vert``, ``.frag`` and ``.geo`` extensions as GLSL. +``.conf`` INI (key-value configuration files) +``.ansi`` `Colored terminal output <{filename}/css/components.rst#colored-terminal-output>`_. + Use ``.shell-session`` pseudo-extension for simple + uncolored terminal output. +=================== =========================================================== + +The theme has experimental support for inline code highlighting. Inline code is +distinguished from code blocks using the following rules: + +- Code that is delimited from surrounding paragraphs with an empty line is + considered as block. +- Code that is not alone in a paragraph is considered as inline. +- For compatibility reasons, if code that is detected as inline consists of + more than one line, it's rendered as code block and a warning is printed to + output. + +Inline highlighted code is written also using the ``@code`` command, but as +writing things like + +.. code:: c++ + + /** Returns @code{.cpp} Magnum::Vector2 @endcode, which is + @code{.glsl} vec2 @endcode in GLSL. */ + +is too verbose, it's advised to configure some aliases in your ``Doxyfile-mcss``. +For example, you can configure an alias for general inline code snippets and +shorter versions for commonly used languages like C++ and CMake. + +.. code:: ini + + ALIASES += \ + "cb{1}=@code{\1}" \ + "ce=@endcode" \ + "cpp=@code{.cpp}" \ + "cmake=@code{.cmake}" + +With this in place the above could be then written simply as: + +.. code:: c++ + + /** Returns @cpp Magnum::Vector2 @ce, which is @cb{.glsl} vec2 @ce in GLSL. */ + +If you need to preserve compatibility with stock Doxygen HTML output (because +it renders all ``@code`` sections as blocks), use the following fallback +aliases in the original ``Doxyfile``: + +.. code:: ini + + ALIASES += \ + "cb{1}=" \ + "ce=" \ + "cpp=" \ + "cmake=" + +.. block-warning:: Doxygen limitations + + Due to Doxygen limitations, sometimes a single-line code block coming from + ``@skipline`` and related commands is detected as inline code and prepended + to the immediately following paragraph. In order to prevent that, add a + stray :html:`

` tag right + after the block: + + .. code:: c++ + + /** + Text paragraph before a code block. + + @skipline foo +

+ + Next text paragraph after a code block. + */ + + Besides that, it's not possible to use inline code highlighting in + ``@brief`` description. Code placed there is moved by Doxygen to the + detailed description. + +.. block-warning:: Doxygen patches + + Note that proper language detection for code snippets requires Doxygen with + :gh:`doxygen/doxygen#621` applied, otherwise all snippets will fall back to + C++ highlighting. Using ANSI color escape codes in terminal output require + Doxygen with :gh:`doxygen/doxygen#623` applied, otherwise the codes will be + present in the rendered output in their raw form. + +`Command-line options`_ +======================= + +:: + + ./dox2html5.py [-h] [--templates TEMPLATES] [--wildcard WILDCARD] + [--index-pages INDEX_PAGES [INDEX_PAGES ...]] + [--no-doxygen] [--debug] + doxyfile + +Arguments: + +- ``doxyfile`` --- where the Doxyfile is + +Options: + +- ``-h``, ``--help`` --- show this help message and exit +- ``--templates TEMPLATES`` --- template directory. Defaults to the + ``templates/`` subdirectory if not set. +- ``--wildcard WILDCARD`` --- only process files matching the wildcard. + Useful for debugging to speed up / restrict the processing to a subset of + files. Defaults to ``*.xml`` if not set. +- ``--index-pages INDEX_PAGES [INDEX_PAGES ...]`` --- index page templates. + By default, if not set, the index pages are matching stock Doxygen, i.e. + ``annotated.html``, ``files.html``, ``namespaces.html`` and ``pages.html``. + See `Navigation page templates`_ section below for more information. +- ``--no-doxygen`` --- don't run Doxygen before. By default Doxygen is run + before the script to refresh the generated XML output. +- ``--debug`` --- verbose debug output. Useful for debugging. + +`Customizing the template`_ +=========================== + +The rest of the documentation explains how to customize the builtin template to +better suit your needs. Each documentation file is generated from one of the +template files that are bundled with the script. However, it's possible to +provide your own Jinja2 template files for customized experience as well as +modify the CSS styling. + +`CSS files`_ +------------ + +By default, compiled CSS files are used to reduce amount of HTTP requests and +bandwidth needed for viewing the documentation. However, for easier +customization and debugging it's better to use the unprocessed stylesheets. The +:ini:`HTML_EXTRA_STYLESHEET` lists all files that go to the :html:`` +in the resulting HTML markup, while :ini:`HTML_EXTRA_FILES` lists the +indirectly referenced files that need to be copied to the output as well. Below +is an example configuration corresponding to the dark theme: + +.. code:: ini + + HTML_EXTRA_STYLESHEET = \ + https://fonts.googleapis.com/css?family=Source+Sans+Pro:400,400i,600,600i%7CSource+Code+Pro:400,400i,600 \ + ../css/m-dark.css \ + ../css/m-doxygen.css + HTML_EXTRA_FILES = \ + ../css/m-grid.css \ + ../css/m-components.css \ + ../css/pygments-dark.css \ + ../css/pygments-console.css + M_THEME_COLOR = #22272e + +After making desired changes to the source files, it's possible to postprocess +them back to the compiled version using the ``postprocess.py`` utility as +explained in the `CSS themes <{filename}/css/themes.rst#make-your-own>`_ +documentation. In case of the dark theme, the ``m-dark+doxygen.compiled.css`` +and ``m-dark.doxygen.compiled.css`` files are produced like this: + +.. code:: sh + + cd css + ./postprocess.py m-dark.css m-doxygen.css -o m-dark+doxygen.compiled.css + ./postprocess.py m-dark.css m-doxygen.css --no-import -o m-dark.doxygen.compiled.css + +`Compound documentation template`_ +---------------------------------- + +For compound documentation one output HTML file corresponds to one input XML +file and there are some naming conventions imposed by Doxygen. + +.. class:: m-table m-fullwidth + +======================= ======================================================= +Filename Use +======================= ======================================================= +``class.html`` Class documentation, read from ``class*.xml`` and saved + as ``class*.html`` +``dir.html`` Directory documentation, read from ``dir_*.xml`` and + saved as ``dir_*.html`` +``example.html`` Example code listing, read from ``*-example.xml`` and + saved as ``*-example.html`` +``file.html`` File documentation, read from ``*.xml`` and saved as + ``*.html`` +``namespace.html`` Namespace documentation, read fron ``namespace*.xml`` + and saved as ``namespace*.html`` +``page.html`` Page, read from ``*.xml``/``indexpage.xml`` and saved + as ``*.html``/``index.html`` +``struct.html`` Struct documentation, read from ``struct*.xml`` and + saved as ``struct*.html`` +``union.html`` Union documentation, read from ``union*.xml`` and saved + as ``union*.html`` +======================= ======================================================= + +Each template is passed a subset of the ``Doxyfile`` configuration values from +the above table and in addition the following variables: + +.. class:: m-table m-fullwidth + +=========================== =================================================== +Variable Description +=========================== =================================================== +:py:`FILENAME` Name of given output file +:py:`DOXYGEN_VERSION` Version of Doxygen that generated given XML file +=========================== =================================================== + +In addition to builtin Jinja2 filters, the the ``basename_or_url`` filter +returns either a basename of file path, if the path is relative; or a full URL, +if the argument is an absolute URL. It's useful in cases like this: + +.. code:: html+jinja + + {% for css in HTML_EXTRA_STYLESHEET %} + + {% endfor %} + +The actual page contents are provided in a :py:`compound` object, which has the +following properties. All exposed data are meant to be pasted directly to the +HTML code without any escaping. + +.. class:: m-table m-fullwidth + +======================================= ======================================= +Property Description +======================================= ======================================= +:py:`compound.kind` One of :py:`'class'`, :py:`'dir'`, + :py:`'example'`, :py:`'file'`, + :py:`'namespace'`, :py:`'page'`, + :py:`'struct'`, :py:`'union'`, used to + choose a template file from above +:py:`compound.id` Unique compound identifier, usually + corresponding to output file name +:py:`compound.name` Compound name +:py:`compound.templates` Template specification. Set only for + classes. See `Template properties`_ for + details. +:py:`compound.has_template_details` If there is a detailed documentation + of template parameters +:py:`compound.sections` Sections of detailed description. See + `Section properties`_ for details. +:py:`compound.brief` Brief description. Can be empty. [1]_ +:py:`compound.description` Detailed description. Can be empty. [2]_ +:py:`compound.dirs` List of directories in this compound. + Set only for directories. See + `Directory properties`_ for details. +:py:`compound.files` List of files in this compound. Set + only for directories and files. See + `File properties`_ for details. +:py:`compound.namespaces` List of namespaces in this compound. + Set only for files and namespaces. See + `Namespace properties`_ for details. +:py:`compound.classes` List of classes in this compound. Set + only for files and namespaces. See + `Class properties`_ for details. +:py:`compound.enums` List of enums in this compound. Set + only for files and namespaces. See + `Enum properties`_ for details. +:py:`compound.typedefs` List of typedefs in this compound. Set + only for files and namespaces. See + `Typedef properties`_ for details. +:py:`compound.funcs` List of functions in this compound. Set + only for files and namespaces. See + `Function properties`_ for details. +:py:`compound.vars` List of variables in this compound. Set + only for files and namespaces. See + `Variable properties`_ for details. +:py:`compound.defines` List of defines in this compound. Set + only for files. See `Define properties`_ + for details. +:py:`compound.public_types` List of public types. Set only for + classes. See `Type properties`_ for + details. +:py:`compound.public_static_funcs` List of public static functions. Set + only for classes. See + `Function properties`_ for details. +:py:`compound.public_funcs` List of public functions. Set only for + classes. See `Function properties`_ for + details. +:py:`compound.public_static_vars` List of public static variables. Set + only for classes. See + `Variable properties`_ for details. +:py:`compound.public_vars` List of public variables. Set only for + classes. See `Variable properties`_ for + details. +:py:`compound.protected_types` List of protected types. Set only for + classes. See `Type properties`_ for + details. +:py:`compound.protected_static_funcs` List of protected static functions. Set + only for classes. See + `Function properties`_ for details. +:py:`compound.protected_funcs` List of protected functions. Set only + for classes. See `Function properties`_ + for details. +:py:`compound.protected_static_vars` List of protected static variables. Set + only for classes. See + `Variable properties`_ for details. +:py:`compound.protected_vars` List of protected variables. Set only + for classes. See `Variable properties`_ + for details. +:py:`compound.private_funcs` List of documented private virtual + functions. Set only for classes. See + `Function properties`_ for details. +:py:`compound.related` List of related non-member symbols. Set + only for classes. See + `Related properties`_ for details. +:py:`compound.groups` List of user-defined groups in this + compound. See `Group properties`_ for + details. +:py:`compound.has_enum_details` If there is at least one enum with full + description block [5]_ +:py:`compound.has_typedef_details` If there is at least one typedef with + full description block [5]_ +:py:`compound.has_func_details` If there is at least one function with + full description block [5]_ +:py:`compound.has_var_details` If there is at least one variable with + full description block [5]_ +:py:`compound.has_define_details` If there is at least one define with + full description block [5]_ +:py:`compound.breadcrumb` List of :py:`(title, URL)` tuples for + breadcrumb navigation. Set only for + classes, directories, files, namespaces + and pages. +:py:`compound.prefix_wbr` Fully-qualified symbol prefix for given + compound with trailing ``::`` with + :html:`` tag before every ``::``. + Set only for classes, namespaces, + structs and unions; on templated + classes contains also the list of + template parameter names. +:py:`compound.save_as` Filename including extension where the + result will be saved +======================================= ======================================= + +`Section properties`_ +````````````````````` + +The :py:`compound.sections` property defines a Table of Contents for given +detailed description. It's a list of :py:`(id, title, children)` tuples, where +:py:`id` is the link anchor, :py:`title` is section title and :py:`children` is +a recursive list of nested sections. If the list is empty, given detailed +description either has no sections or the TOC was not explicitly requested via +``@tableofcontents`` in case of pages. + +`Directory properties`_ +``````````````````````` + +The :py:`compound.dirs` property contains a list of directories, where every +item has the following properties: + +.. class:: m-table m-fullwidth + +=========================== =================================================== +Property Description +=========================== =================================================== +:py:`dir.url` URL of the file containing detailed directory docs +:py:`dir.name` Directory name (just the leaf) +:py:`dir.brief` Brief description. Can be empty. [1]_ +=========================== =================================================== + +`File properties`_ +`````````````````` + +The :py:`compound.files` property contains a list of files, where every item +has the following properties: + +.. class:: m-table m-fullwidth + +=========================== =================================================== +Property Description +=========================== =================================================== +:py:`file.url` URL of the file containing detailed file docs +:py:`file.name` File name (just the leaf) +:py:`file.brief` Brief description. Can be empty. [1]_ +=========================== =================================================== + +`Namespace properties`_ +``````````````````````` + +The :py:`compound.namespaces` property contains a list of namespaces, where +every item has the following properties: + +.. class:: m-table m-fullwidth + +=========================== =================================================== +Property Description +=========================== =================================================== +:py:`namespace.url` URL of the file containing detailed namespace docs +:py:`namespace.name` Namespace name. Fully qualified in case it's in a + file documentation, just the leaf name if in a + namespace documentation. +:py:`namespace.brief` Brief description. Can be empty. [1]_ +=========================== =================================================== + +`Class properties`_ +``````````````````` + +The :py:`compound.classes` property contains a list of classes, where every +item has the following properties: + +.. class:: m-table m-fullwidth + +=========================== =================================================== +Property Description +=========================== =================================================== +:py:`class_.kind` One of :py:`'class'`, :py:`'struct'`, :py:`'union'` +:py:`class_.url` URL of the file containing detailed class docs +:py:`class_.name` Class name. Fully qualified in case it's in a file + documentation, just the leaf name if in a namespace + documentation. +:py:`class_.templates` Template specification. See `Template properties`_ + for details. +:py:`class_.brief` Brief description. Can be empty. [1]_ +=========================== =================================================== + +`Enum properties`_ +`````````````````` + +The :py:`compound.enums` property contains a list of enums, where every item +has the following properties: + +.. class:: m-table m-fullwidth + +=============================== =============================================== +Property Description +=============================== =============================================== +:py:`enum.id` Identifier hash [3]_ +:py:`enum.type` Enum type or empty if implicitly typed [6]_ +:py:`enum.is_strong` If the enum is strong +:py:`enum.name` Enum name [4]_ +:py:`enum.brief` Brief description. Can be empty. [1]_ +:py:`enum.description` Detailed description. Can be empty. [2]_ +:py:`enum.has_details` If there is enough content for the full + description block [5]_ +:py:`enum.is_protected` If the enum is :cpp:`protected`. Set only for + member types. +:py:`enum.values` List of enum values +:py:`enum.has_value_details` If the enum values have description +=============================== =============================================== + +Every item of :py:`enum.values` has the following properties: + +.. class:: m-table m-fullwidth + +=========================== =================================================== +Property Description +=========================== =================================================== +:py:`value.id` Identifier hash [3]_ +:py:`value.name` Value name [4]_ +:py:`value.initializer` Value initializer. Can be empty. [1]_ +:py:`value.description` Detailed description. Can be empty. [2]_ +=========================== =================================================== + +`Typedef properties`_ +````````````````````` + +The :py:`compound.typedefs` property contains a list of typedefs, where every +item has the following properties: + +.. class:: m-table m-fullwidth + +=========================== =================================================== +Property Description +=========================== =================================================== +:py:`typedef.id` Identifier hash [3]_ +:py:`typedef.is_using` Whether it is a :cpp:`typedef` or an :cpp:`using` +:py:`typedef.type` Typedef type, or what all goes before the name for + function pointer typedefs [6]_ +:py:`typedef.args` Typedef arguments, or what all goes after the name + for function pointer typedefs [6]_ +:py:`typedef.name` Typedef name [4]_ +:py:`typedef.templates` Template specification. Set only in case of + :cpp:`using`. . See `Template properties`_ for + details. +:py:`typedef.brief` Brief description. Can be empty. [1]_ +:py:`typedef.description` Detailed description. Can be empty. [2]_ +:py:`typedef.has_details` If there is enough content for the full description + block [4]_ +:py:`typedef.is_protected` If the typedef is :cpp:`protected`. Set only for + member types. +=========================== =================================================== + +`Function properties`_ +`````````````````````` + +The :py:`commpound.funcs`, :py:`compound.public_static_funcs`, +:py:`compound.public_funcs`, :py:`compound.protected_static_funcs`, +:py:`compound.protected_funcs`, :py:`compound.private_funcs` and +:py:`compound.related_funcs` properties contain a list of functions, where +every item has the following properties: + +.. class:: m-table m-fullwidth + +=============================== =============================================== +Property Description +=============================== =============================================== +:py:`func.id` Identifier hash [3]_ +:py:`func.type` Function return type [6]_ +:py:`func.name` Function name [4]_ +:py:`func.templates` Template specification. See + `Template properties`_ for details. +:py:`func.has_template_details` If template parameters have description +:py:`func.params` List of function parameters. See below for + details. +:py:`func.has_param_details` If function parameters have description +:py:`func.return_value` Return value description. Can be empty. +:py:`func.brief` Brief description. Can be empty. [1]_ +:py:`func.description` Detailed description. Can be empty. [2]_ +:py:`func.has_details` If there is enough content for the full + description block [5]_ +:py:`func.prefix` Function signature prefix, containing keywords + such as :cpp:`static`. Information about + :cpp:`constexpr`\ ness, :cpp:`explicit`\ ness + and :cpp:`virtual`\ ity is removed from the + prefix and available via other properties. +:py:`func.suffix` Function signature suffix, containing keywords + such as :cpp:`const` and r-value overloads. + Information about :cpp:`noexcept`, pure + :cpp:`virtual`\ ity and :cpp:`delete`\ d / + :cpp:`default`\ ed functions is removed from + the suffix and available via other properties. +:py:`func.is_protected` If the function is :cpp:`protected`. Set only + for member functions. +:py:`func.is_private` If the function is :cpp:`private`. Set only for + member functions. +:py:`func.is_explicit` If the function is :cpp:`explicit`. Set only + for member functions. +:py:`func.is_virtual` If the function is :cpp:`virtual`. Set only for + member functions. +:py:`func.is_pure_virtual` If the function is pure :cpp:`virtual`. Set + only for member functions. +:py:`func.is_noexcept` If the function is :cpp:`noexcept` +:py:`func.is_constexpr` If the function is :cpp:`constexpr` +:py:`func.is_defaulted` If the function is :cpp:`default`\ ed +:py:`func.is_deleted` If the function is :cpp:`delete`\ d +=============================== =============================================== + +The :py:`func.params` is a list of function parameters and their description. +Each item has the following properties: + +.. class:: m-table m-fullwidth + +=========================== =================================================== +Property Description +=========================== =================================================== +:py:`param.name` Parameter name (if not anonymous) +:py:`param.type` Parameter type, together with name and array + specification [6]_ +:py:`param.default` Default parameter value, if any [6]_ +:py:`param.description` Optional parameter description. If set, + :py:`func.has_param_details` is set as well. +:py:`param.direction` Parameter direction. One of :py:`'in'`, :py:`'out'`, + :py:`'inout'` or :py:`''` if unspecified. +=========================== =================================================== + +`Variable properties`_ +`````````````````````` + +The :py:`compound.vars`, :py:`compound.public_vars` and +:py:`compound.protected_vars` properties contain a list of variables, where +every item has the following properties: + +.. class:: m-table m-fullwidth + +=========================== =================================================== +Property Description +=========================== =================================================== +:py:`var.id` Identifier hash [3]_ +:py:`var.type` Variable type [6]_ +:py:`var.name` Variable name [4]_ +:py:`var.brief` Brief description. Can be empty. [1]_ +:py:`var.description` Detailed description. Can be empty. [2]_ +:py:`var.has_details` If there is enough content for the full description + block [5]_ +:py:`var.is_static` If the variable is :cpp:`static`. Set only for + member variables. +:py:`var.is_protected` If the variable is :cpp:`protected`. Set only for + member variables. +:py:`var.is_constexpr` If the variable is :cpp:`constexpr` +=========================== =================================================== + +`Define properties`_ +```````````````````` + +The :py:`compound.defines` property contains a list of defines, where every +item has the following properties: + +.. class:: m-table m-fullwidth + +=============================== =============================================== +Property Description +=============================== =============================================== +:py:`define.id` Identifier hash [3]_ +:py:`define.name` Define name +:py:`define.params` List of macro parameter names. See below for + details. +:py:`define.has_param_details` If define parameters have description +:py:`define.return_value` Return value description. Can be empty. +:py:`define.brief` Brief description. Can be empty. [1]_ +:py:`define.description` Detailed description. Can be empty. [2]_ +:py:`define.has_details` If there is enough content for the full + description block [5]_ +=============================== =============================================== + +The :py:`define.params` is set to :py:`None` if the macro is just a variable. +If it's a function, each item is a tuple consisting of name and optional +description. If the description is set, :py:`define.has_param_details` is set +as well. You can use :jinja:`{% if define.params != None %}` to disambiguate +between preprocessor macros and variables in your code. + +`Type properties`_ +`````````````````` + +For classes, the :py:`compound.public_types` and :py:`compound.protected_types` +contains a list of :py:`(kind, type)` tuples, where ``kind`` is one of +:py:`'class'`, :py:`'enum'` or :py:`'typedef'` and ``type`` is a corresponding +type of object described above. + +`Template properties`_ +`````````````````````` + +The :py:`compound.templates`, :py:`typedef.templates` and :py:`func.templates` +properties contain either :py:`None` if given symbol is a full template +specialization or a list of template parameters, where every item has the +following properties: + +.. class:: m-table m-fullwidth + +=========================== =================================================== +Property Description +=========================== =================================================== +:py:`template.type` Template parameter type (:cpp:`class`, + :cpp:`typename` or a type) +:py:`template.name` Template parameter name +:py:`template.default` Template default value. Can be empty. +:py:`template.description` Optional template description. If set, + :py:`i.has_template_details` is set as well. +=========================== =================================================== + +You can use :jinja:`{% if i.templates != None %}` to test for the field +presence in your code. + +`Related properties`_ +````````````````````` + +The :py:`compound.related` contains a list of related non-member symbols. Each +symbol is a tuple of :py:`(kind, member)`, where :py:`kind` is one of +:py:`'dir'`, :py:`'file'`, :py:`'namespace'`, :py:`'class'`, :py:`'enum'`, +:py:`'typedef'`, :py:`'func'`, :py:`'var'` or :py:`'define'` and :py:`member` +is a corresponding type of object described above. + +`Group properties`_ +``````````````````` + +The :py:`compound.groups` contains a list of user-defined groups. Each item has +the following properties: + +======================= ======================================================= +Property Description +======================= ======================================================= +:py:`group.id` Group identifier [3]_ +:py:`group.name` Group name +:py:`group.description` Group description [2]_ +:py:`group.members` Group members. Each item is a tuple of + :py:`(kind, member)`, where :py:`kind` is one of + :py:`'namespace'`, :py:`'class'`, :py:`'enum'`, + :py:`'typedef'`, :py:`'func'`, :py:`'var'` or + :py:`'define'` and :py:`member` is a corresponding type + of object described above. +======================= ======================================================= + +.. [1] :py:`i.brief` is a single-line paragraph without the enclosing :html:`

` + element, rendered as HTML. Can be empty in case of function overloads. +.. [2] :py:`i.description` is HTML code with the full description, containing + paragraphs, notes, code blocks, images etc. Can be empty in case just the + brief description is present. +.. [3] :py:`i.id` is a hash used to link to the member on the page, usually + appearing after ``#`` in page URL +.. [4] :py:`i.name` is just the member name, not qualified. Prepend + :py:`compound.prefix_wbr` to it to get the fully qualified name. +.. [5] :py:`compound.has_*_details` and :py:`i.has_details` are :py:`True` if + there is detailed description, function/template/macro parameter + documentation or enum value listing that makes it worth to render the full + description block. If :py:`False`, the member should be included only in + the brief listing on top of the page to avoid unnecessary repetition. +.. [6] :py:`i.type` and :py:`param.default` is rendered as HTML and usually + contains links to related documentation + +`Navigation page templates`_ +---------------------------- + +By default the theme tries to match the original Doxygen listing pages. These +pages are generated from the ``index.xml`` file and their template name +corresponds to output file name. + +.. class:: m-table m-fullwidth + +======================= ======================================================= +Filename Use +======================= ======================================================= +``annotated.html`` Class listing +``files.html`` File and directory listing +``namespaces.html`` Namespace listing +``pages.html`` Page listing +======================= ======================================================= + +By default it's those four pages, but you can configure any other pages via +the ``--index-pages`` option as mentioned in the `Command-line options`_ +section. + +Each template is passed a subset of the ``Doxyfile`` configuration values from +the above table and in addition the :py:`FILENAME` and :py:`DOXYGEN_VERSION` +variables as above. The navigation tree is provided in an :py:`index` object, +which has the following properties: + +.. class:: m-table m-fullwidth + +=========================== =================================================== +Property Description +=========================== =================================================== +:py:`index.symbols` List of all namespaces + classes +:py:`index.files` List of all dirs + files +:py:`index.pages` List of all pages +=========================== =================================================== + +The form of each list entry is the same: + +.. class:: m-table m-fullwidth + +=============================== =============================================== +Property Description +=============================== =============================================== +:py:`i.kind` Entry kind (one of :py:`'namespace'`, + :py:`'class'`, :py:`'struct'`, :py:`'union'`, + :py:`'dir'`, :py:`'file'`, :py:`'page'`) +:py:`i.name` Name +:py:`i.url` URL of the file with detailed documentation +:py:`i.brief` Brief documentation +:py:`i.has_nestable_children` If the list has nestable children (i.e., dirs + or namespaces) +:py:`i.children` Recursive list of child entries +=============================== =============================================== + +Each list is ordered in a way that all namespaces are before all classes and +all directories are before all files. diff --git a/doc/static/m-doxygen.css b/doc/static/m-doxygen.css new file mode 120000 index 00000000..2f4a4ad7 --- /dev/null +++ b/doc/static/m-doxygen.css @@ -0,0 +1 @@ +../../css/m-doxygen.css \ No newline at end of file diff --git a/doxygen/.gitignore b/doxygen/.gitignore new file mode 100644 index 00000000..02d74dea --- /dev/null +++ b/doxygen/.gitignore @@ -0,0 +1,5 @@ +__pycache__ +htmlcov +test/*/html/ +test/*/xml/ +.coverage diff --git a/doxygen/dox2html5.py b/doxygen/dox2html5.py new file mode 100755 index 00000000..9d64b586 --- /dev/null +++ b/doxygen/dox2html5.py @@ -0,0 +1,1602 @@ +#!/usr/bin/env python + +# +# This file is part of m.css. +# +# Copyright © 2017 Vladimír Vondruš +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. +# + +import xml.etree.ElementTree as ET +import argparse +import sys +import re +import html +import os +import glob +import shutil +import subprocess +import urllib.parse +import logging +from types import SimpleNamespace as Empty +from typing import Tuple, Dict, Any, List + +from jinja2 import Environment, FileSystemLoader + +from pygments import highlight +from pygments.formatters import HtmlFormatter +from pygments.lexers import TextLexer, BashSessionLexer, get_lexer_by_name, find_lexer_class_for_filename + +sys.path.append("../pelican-plugins") +import m.latex2svg +import m.math +import m.ansilexer + +xref_id_rx = re.compile(r"""(.*)_1(_[a-z-]+[0-9]+)$""") +slugify_nonalnum_rx = re.compile(r"""[^\w\s-]""") +slugify_hyphens_rx = re.compile(r"""[-\s]+""") + +class State: + def __init__(self): + self.basedir = '' + self.compounds: Dict[str, Any] = {} + self.doxyfile: Dict[str, str] = {} + self.images: List[str] = [] + +def slugify(text: str) -> str: + # Maybe some Unicode normalization would be nice here? + return slugify_hyphens_rx.sub('-', slugify_nonalnum_rx.sub('', text.lower()).strip()) + +def add_wbr(text: str) -> str: + if '::' in text: # C++ names + return text.replace('::', '::') + elif '_' in text: # VERY_LONG_UPPER_CASE macro names + return text.replace('_', '_') + + # These characters are quite common, so at least check that there is no + # space (which may hint that the text is actually some human language): + elif '/' in text and not ' ' in text: # URLs + return text.replace('/', '/') + else: + return text + +def parse_ref(state: State, element: ET.Element) -> str: + id = element.attrib['refid'] + + if element.attrib['kindref'] == 'compound': + url = id + '.html' + elif element.attrib['kindref'] == 'member': + i = id.rindex('_1') + url = id[:i] + '.html' + '#' + id[i+2:] + else: # pragma: no cover + logging.critical("unknown kind {}".format(element.attrib['kindref'])) + assert False + + if 'external' in element.attrib: + for i in state.doxyfile['TAGFILES']: + name, _, baseurl = i.partition('=') + if os.path.basename(name) == os.path.basename(element.attrib['external']): + url = os.path.join(baseurl, url) + break + else: # pragma: no cover + logging.critical("tagfile {} not specified in Doxyfile".format(element.attrib['external'])) + assert False + class_ = 'm-dox-external' + else: + class_ = 'm-dox' + + return '{}'.format(url, class_, add_wbr(html.escape(element.text))) + +def extract_id(element: ET.Element) -> str: + id = element.attrib['id'] + i = id.rindex('_1') + return id[i+2:] + +def fix_type_spacing(type: str) -> str: + return type.replace('< ', '<').replace(' >', '>').replace(' &', '&').replace(' *', '*') + +def parse_type(state: State, type: ET.Element) -> str: + # Constructors and typeless enums might not have it + if type is None: return None + out = html.escape(type.text) if type.text else '' + + i: ET.Element + for i in type: + if i.tag == 'ref': + out += parse_ref(state, i) + elif i.tag == 'anchor': + out += ''.format(extract_id(i)) + else: # pragma: no cover + logging.warning("ignoring {} in ".format(i.tag)) + + if i.tail: out += html.escape(i.tail) + + # Remove spacing inside <> and before & and * + return fix_type_spacing(out) + +def parse_desc_internal(state: State, element: ET.Element, trim = True): + out = Empty() + out.write_start_tag = True + out.write_close_tag = True + out.section = None + out.templates = {} + out.params = {} + out.return_value = None + + out.parsed: str = '' + if element.text: + out.parsed = html.escape(element.text.strip() if trim else element.text) + + i: ET.Element + for i in element: + # Doxygen puts the following *block* elements inside a element + # instead of closing it before and then opening it again after. Nested + # paragraphs are ugly and also not valid HTML, so we have to patch that + # up. If there was any content before, we close the paragraph. If there + # wasn't, we tell the caller to not even open the paragraph. After + # processing the following tag, there won't be any paragraph open, so + # we also tell the caller that there's no need to close anything. + # + # Note that and are + # extracted out of the text flow, so these are removed from this check. + # + # It's not that simple, see for more patching at the end of the cycle + # iteration. + if (i.tag in ['blockquote', 'xrefsect', 'variablelist', 'verbatim'] or (i.tag == 'simplesect' and i.attrib['kind'] != 'return') or (i.tag == 'formula' and i.text.startswith('\[ ') and i.text.endswith(' \]'))) and element.tag == 'para' and out.write_close_tag: + out.parsed = out.parsed.rstrip() + if not out.parsed: + out.write_start_tag = False + else: + out.parsed += '

' + out.write_close_tag = False + + # Block elements + if i.tag in ['sect1', 'sect2', 'sect3']: + parsed = parse_desc_internal(state, i) + assert parsed.section + assert not parsed.templates and not parsed.params and not parsed.return_value + + # Top-level section has no ID or title + if not out.section: out.section = ('', '', []) + out.section = (out.section[0], out.section[1], out.section[2] + [parsed.section]) + out.parsed += '
{}
'.format(extract_id(i), parsed.parsed) + + elif i.tag == 'title': + if element.tag == 'sect1': + tag = 'h2' + elif element.tag == 'sect2': + tag = 'h3' + elif element.tag == 'sect3': + tag = 'h4' + else: # pragma: no cover + assert False + id = extract_id(element) + title = html.escape(i.text) + + # Populate section info + assert not out.section + out.section = (id, title, []) + out.parsed += '<{0}>{2}'.format(tag, id, title) + + elif i.tag == 'heading': + if i.attrib['level'] == '1': + tag = 'h2' + elif i.attrib['level'] == '2': + tag = 'h3' + elif i.attrib['level'] == '3': + tag = 'h4' + else: # pragma: no cover + assert False + logging.warning("Prefer @section over Markdown heading for properly generated TOC") + out.parsed += '<{0}>{1}'.format(tag, html.escape(i.text)) + + elif i.tag == 'para': + # Parse contents of the paragraph, don't trim whitespace around + # nested elements but trim it at the begin and end of the paragraph + # itself. Also, some paragraphs are actually block content and we + # might not want to write the start/closing tag. + parsed = parse_desc_internal(state, i, False) + parsed.parsed = parsed.parsed.strip() + + # Inherit parameter and return value description, assume it's not + # scattered all over the place (ugh) + if parsed.templates: + assert not out.templates + out.templates = parsed.templates + if parsed.params: + assert not out.params + out.params = parsed.params + if parsed.return_value: + assert not out.return_value + out.return_value = parsed.return_value + + # Assert we didn't miss anything important + assert not parsed.section + + # Omit superfluous

for simple elments (list items, brief, + # parameter and return value description) + if not parsed.write_start_tag or element.tag in ['listitem', 'briefdescription', 'parameterdescription'] or element.tag == 'simplesect' and element.attrib['kind'] == 'return': + out.parsed += parsed.parsed + elif parsed.parsed: + if parsed.write_close_tag: + out.parsed += '

{}

'.format(parsed.parsed) + else: + out.parsed += '

{}'.format(parsed.parsed) + + elif i.tag == 'blockquote': + out.parsed += '

{}
'.format(parse_desc(state, i)) + + elif i.tag == 'itemizedlist': + out.parsed += '
    {}
'.format(parse_desc(state, i)) + + elif i.tag == 'orderedlist': + out.parsed += '
    {}
'.format(parse_desc(state, i)) + + elif i.tag == 'listitem': + out.parsed += '
  • {}
  • '.format(parse_desc(state, i)) + + elif i.tag == 'simplesect': + # Return value is separated from the text flow + if i.attrib['kind'] == 'return': + assert not out.return_value + out.return_value = parse_desc(state, i) + else: + if i.attrib['kind'] == 'see': + out.parsed += '