aboutsummaryrefslogtreecommitdiff
path: root/lab
diff options
context:
space:
mode:
Diffstat (limited to 'lab')
-rw-r--r--lab/README.md32
-rw-r--r--lab/assets/css/chota.css1014
-rw-r--r--lab/assets/css/chota.min.css1
-rw-r--r--lab/assets/css/deuxfleurs-chato-fullwidth.css132
-rw-r--r--lab/assets/css/deuxfleurs-chato.css111
-rw-r--r--lab/assets/css/mini-default.min.css1
-rw-r--r--lab/assets/css/normalize.css349
-rw-r--r--lab/assets/images/illustration-ronce_1200x765px.pngbin0 -> 1336157 bytes
-rw-r--r--lab/assets/images/illustration-ronce_2400x1531px.pngbin0 -> 4478464 bytes
-rw-r--r--lab/assets/images/illustration-ronce_800x510px.pngbin0 -> 661755 bytes
-rw-r--r--lab/gimp/idee_adrien.pngbin0 -> 3980572 bytes
-rw-r--r--lab/gimp/idee_adrien.xcfbin0 -> 14167250 bytes
-rw-r--r--lab/gimp/idee_adrien_commentaire_ronce.pngbin0 -> 1041783 bytes
-rw-r--r--lab/index-fullwidth.html122
-rw-r--r--lab/index.html123
-rw-r--r--lab/notes/framework_html.md43
l---------lab/sandbox/assets1
-rw-r--r--lab/sandbox/parallax.html70
18 files changed, 1999 insertions, 0 deletions
diff --git a/lab/README.md b/lab/README.md
new file mode 100644
index 0000000..7ee5c11
--- /dev/null
+++ b/lab/README.md
@@ -0,0 +1,32 @@
+# Laboratoire du futur site web de Deuxfleurs
+
+## Objectifs techniques
+
+* Responsive mobile-first design.
+* [Media queries CSS](https://www.w3schools.com/css/css_rwd_mediaqueries.asp) : Des images envoyées adaptées à la taille des viewports.
+* Pas besoin de Javascript : Le CSS3 ça déchire, on peut faire des infobulles, des animations, de la parallax. (Navigateurs compatibles depuis 7 ans ou plus.)
+
+## Idées graphiques
+
+* Des bouts de branches et de canopée qui défilent lors du scroll, contenant des éléments de texte ou autre contenu.
+* Un header avec des onglets sur PC et un « menu-sandwich » sur le côté sur téléphone.
+* Exploiter l'illustration au maximum. En la laissant fixée en fond de page tandis que les éléments graphiques défilent ?
+
+
+## Inspirations
+
+* [MDN - Création de tooltips et remarques sur l'accessibilité du contenu](https://developer.mozilla.org/en-US/docs/Web/CSS/::after#tooltips)
+
+ On peut faire tout ce qu'il faut avec CSS3 !
+
+ Néanmoins, *rendre un site accessible sans outils a l'air compliqué*.
+
+* [W3C Semantic HTML](https://www.w3schools.com/html/html5_semantic_elements.asp)
+
+ Utiliser des bannières qui donnent du sens au contenu.
+
+* [Semantic CSS] (https://adamwathan.me/css-utility-classes-and-separation-of-concerns/)
+
+ Le fait de ne pas donner d'éléments de graphisme dans notre markup HTML, mais seulement dans le CSS. Par exemple, mettre une classe "text-center" à un <p> est considéré une mauvaise pratique.
+
+
diff --git a/lab/assets/css/chota.css b/lab/assets/css/chota.css
new file mode 100644
index 0000000..ca1b640
--- /dev/null
+++ b/lab/assets/css/chota.css
@@ -0,0 +1,1014 @@
+/*! chota.css v0.8.0 | MIT License | github.com/jenil/chota */
+:root {
+ --bg-color: #ffffff;
+ --bg-secondary-color: #f3f3f6;
+ --color-primary: #14854F;
+ --color-lightGrey: #d2d6dd;
+ --color-grey: #747681;
+ --color-darkGrey: #3f4144;
+ --color-error: #d43939;
+ --color-success: #28bd14;
+ --grid-maxWidth: 120rem;
+ --grid-gutter: 2rem;
+ --font-size: 1.6rem;
+ --font-color: #333333;
+ --font-family-sans: -apple-system, BlinkMacSystemFont, Avenir, "Avenir Next",
+ "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans",
+ "Droid Sans", "Helvetica Neue", sans-serif;
+ --font-family-mono: monaco, "Consolas", "Lucida Console", monospace;
+}
+html {
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ font-size: 62.5%;
+ line-height: 1.15;
+ -ms-text-size-adjust: 100%;
+ -webkit-text-size-adjust: 100%;
+}
+*, *:before, *:after {
+ -webkit-box-sizing: inherit;
+ box-sizing: inherit;
+}
+* {
+ scrollbar-width: thin;
+ scrollbar-color: var(--color-lightGrey) var(--bg-primary);
+}
+*::-webkit-scrollbar {
+ width: 8px;
+}
+*::-webkit-scrollbar-track {
+ background: var(--bg-primary);
+}
+*::-webkit-scrollbar-thumb {
+ background: var(--color-lightGrey);
+}
+body {
+ background-color: var(--bg-color);
+ line-height: 1.6;
+ font-size: var(--font-size);
+ color: var(--font-color);
+ font-family: "Segoe UI", "Helvetica Neue", sans-serif; /*fallback*/
+ font-family: var(--font-family-sans);
+ margin: 0;
+ padding: 0;
+}
+h1,
+h2,
+h3,
+h4,
+h5,
+h6 {
+ font-weight: 500;
+ margin: 0.35em 0 0.7em 0;
+}
+h1 {
+ font-size: 2em;
+}
+h2 {
+ font-size: 1.75em;
+}
+h3 {
+ font-size: 1.5em;
+}
+h4 {
+ font-size: 1.25em;
+}
+h5 {
+ font-size: 1em;
+}
+h6 {
+ font-size: 0.85em;
+}
+a {
+ color: var(--color-primary);
+ text-decoration: none;
+}
+a:hover:not(.button) {
+ opacity: 0.75;
+}
+button {
+ font-family: inherit;
+}
+p {
+ margin-top: 0;
+}
+blockquote {
+ background-color: var(--bg-secondary-color);
+ padding: 1.5rem 2rem;
+ border-left: 3px solid var(--color-lightGrey);
+}
+dl dt {
+ font-weight: bold;
+}
+hr {
+ border: none;
+ background-color: var(--color-lightGrey);
+ height: 1px;
+ margin: 1rem 0;
+}
+table {
+ width: 100%;
+ border: none;
+ border-collapse: collapse;
+ border-spacing: 0;
+ text-align: left;
+}
+table.striped tr:nth-of-type(2n) {
+ background-color: var(--bg-secondary-color);
+}
+td,
+th {
+ vertical-align: middle;
+ padding: 1.2rem 0.4rem;
+}
+thead {
+ border-bottom: 2px solid var(--color-lightGrey);
+}
+tfoot {
+ border-top: 2px solid var(--color-lightGrey);
+}
+code,
+kbd,
+pre,
+samp,
+tt {
+ font-family: var(--font-family-mono);
+}
+code,
+kbd {
+ padding: 0 0.4rem;
+ font-size: 90%;
+ white-space: pre-wrap;
+ border-radius: 4px;
+ padding: 0.2em 0.4em;
+ background-color: var(--bg-secondary-color);
+ color: var(--color-error);
+}
+pre {
+ background-color: var(--bg-secondary-color);
+ font-size: 1em;
+ padding: 1rem;
+ overflow-x: auto;
+}
+pre code {
+ background: none;
+ padding: 0;
+}
+abbr[title] {
+ border-bottom: none;
+ text-decoration: underline;
+ -webkit-text-decoration: underline dotted;
+ text-decoration: underline dotted;
+}
+img {
+ max-width: 100%;
+}
+fieldset {
+ border: 1px solid var(--color-lightGrey);
+}
+iframe {
+ border: 0;
+}
+.container {
+ max-width: var(--grid-maxWidth);
+ margin: 0 auto;
+ width: 96%;
+ padding: 0 calc(var(--grid-gutter) / 2);
+}
+.row {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -ms-flex-flow: row wrap;
+ flex-flow: row wrap;
+ -webkit-box-pack: start;
+ -ms-flex-pack: start;
+ justify-content: flex-start;
+ margin-left: calc(var(--grid-gutter) / -2);
+ margin-right: calc(var(--grid-gutter) / -2);
+}
+.row.reverse {
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: reverse;
+ -ms-flex-direction: row-reverse;
+ flex-direction: row-reverse;
+}
+.col {
+ -webkit-box-flex: 1;
+ -ms-flex: 1;
+ flex: 1;
+}
+.col,
+[class*=" col-"],
+[class^='col-'] {
+ margin: 0 calc(var(--grid-gutter) / 2) calc(var(--grid-gutter) / 2);
+}
+.col-1 {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 calc((100% / (12/1)) - var(--grid-gutter));
+ flex: 0 0 calc((100% / (12/1)) - var(--grid-gutter));
+ max-width: calc((100% / (12/1)) - var(--grid-gutter));
+}
+.col-2 {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 calc((100% / (12/2)) - var(--grid-gutter));
+ flex: 0 0 calc((100% / (12/2)) - var(--grid-gutter));
+ max-width: calc((100% / (12/2)) - var(--grid-gutter));
+}
+.col-3 {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 calc((100% / (12/3)) - var(--grid-gutter));
+ flex: 0 0 calc((100% / (12/3)) - var(--grid-gutter));
+ max-width: calc((100% / (12/3)) - var(--grid-gutter));
+}
+.col-4 {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 calc((100% / (12/4)) - var(--grid-gutter));
+ flex: 0 0 calc((100% / (12/4)) - var(--grid-gutter));
+ max-width: calc((100% / (12/4)) - var(--grid-gutter));
+}
+.col-5 {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 calc((100% / (12/5)) - var(--grid-gutter));
+ flex: 0 0 calc((100% / (12/5)) - var(--grid-gutter));
+ max-width: calc((100% / (12/5)) - var(--grid-gutter));
+}
+.col-6 {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 calc((100% / (12/6)) - var(--grid-gutter));
+ flex: 0 0 calc((100% / (12/6)) - var(--grid-gutter));
+ max-width: calc((100% / (12/6)) - var(--grid-gutter));
+}
+.col-7 {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 calc((100% / (12/7)) - var(--grid-gutter));
+ flex: 0 0 calc((100% / (12/7)) - var(--grid-gutter));
+ max-width: calc((100% / (12/7)) - var(--grid-gutter));
+}
+.col-8 {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 calc((100% / (12/8)) - var(--grid-gutter));
+ flex: 0 0 calc((100% / (12/8)) - var(--grid-gutter));
+ max-width: calc((100% / (12/8)) - var(--grid-gutter));
+}
+.col-9 {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 calc((100% / (12/9)) - var(--grid-gutter));
+ flex: 0 0 calc((100% / (12/9)) - var(--grid-gutter));
+ max-width: calc((100% / (12/9)) - var(--grid-gutter));
+}
+.col-10 {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 calc((100% / (12/10)) - var(--grid-gutter));
+ flex: 0 0 calc((100% / (12/10)) - var(--grid-gutter));
+ max-width: calc((100% / (12/10)) - var(--grid-gutter));
+}
+.col-11 {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 calc((100% / (12/11)) - var(--grid-gutter));
+ flex: 0 0 calc((100% / (12/11)) - var(--grid-gutter));
+ max-width: calc((100% / (12/11)) - var(--grid-gutter));
+}
+.col-12 {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 calc((100% / (12/12)) - var(--grid-gutter));
+ flex: 0 0 calc((100% / (12/12)) - var(--grid-gutter));
+ max-width: calc((100% / (12/12)) - var(--grid-gutter));
+}
+@media screen and (max-width: 599px) {
+ .container {
+ width: 100%;
+ }
+
+ .col,
+ [class*="col-"],
+ [class^='col-'] {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 1 100%;
+ flex: 0 1 100%;
+ max-width: 100%;
+ }
+}
+@media screen and (min-width: 900px) {
+ .col-1-md {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 calc((100% / (12/1)) - var(--grid-gutter));
+ flex: 0 0 calc((100% / (12/1)) - var(--grid-gutter));
+ max-width: calc((100% / (12/1)) - var(--grid-gutter));
+ }
+
+ .col-2-md {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 calc((100% / (12/2)) - var(--grid-gutter));
+ flex: 0 0 calc((100% / (12/2)) - var(--grid-gutter));
+ max-width: calc((100% / (12/2)) - var(--grid-gutter));
+ }
+
+ .col-3-md {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 calc((100% / (12/3)) - var(--grid-gutter));
+ flex: 0 0 calc((100% / (12/3)) - var(--grid-gutter));
+ max-width: calc((100% / (12/3)) - var(--grid-gutter));
+ }
+
+ .col-4-md {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 calc((100% / (12/4)) - var(--grid-gutter));
+ flex: 0 0 calc((100% / (12/4)) - var(--grid-gutter));
+ max-width: calc((100% / (12/4)) - var(--grid-gutter));
+ }
+
+ .col-5-md {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 calc((100% / (12/5)) - var(--grid-gutter));
+ flex: 0 0 calc((100% / (12/5)) - var(--grid-gutter));
+ max-width: calc((100% / (12/5)) - var(--grid-gutter));
+ }
+
+ .col-6-md {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 calc((100% / (12/6)) - var(--grid-gutter));
+ flex: 0 0 calc((100% / (12/6)) - var(--grid-gutter));
+ max-width: calc((100% / (12/6)) - var(--grid-gutter));
+ }
+
+ .col-7-md {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 calc((100% / (12/7)) - var(--grid-gutter));
+ flex: 0 0 calc((100% / (12/7)) - var(--grid-gutter));
+ max-width: calc((100% / (12/7)) - var(--grid-gutter));
+ }
+
+ .col-8-md {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 calc((100% / (12/8)) - var(--grid-gutter));
+ flex: 0 0 calc((100% / (12/8)) - var(--grid-gutter));
+ max-width: calc((100% / (12/8)) - var(--grid-gutter));
+ }
+
+ .col-9-md {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 calc((100% / (12/9)) - var(--grid-gutter));
+ flex: 0 0 calc((100% / (12/9)) - var(--grid-gutter));
+ max-width: calc((100% / (12/9)) - var(--grid-gutter));
+ }
+
+ .col-10-md {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 calc((100% / (12/10)) - var(--grid-gutter));
+ flex: 0 0 calc((100% / (12/10)) - var(--grid-gutter));
+ max-width: calc((100% / (12/10)) - var(--grid-gutter));
+ }
+
+ .col-11-md {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 calc((100% / (12/11)) - var(--grid-gutter));
+ flex: 0 0 calc((100% / (12/11)) - var(--grid-gutter));
+ max-width: calc((100% / (12/11)) - var(--grid-gutter));
+ }
+
+ .col-12-md {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 calc((100% / (12/12)) - var(--grid-gutter));
+ flex: 0 0 calc((100% / (12/12)) - var(--grid-gutter));
+ max-width: calc((100% / (12/12)) - var(--grid-gutter));
+ }
+}
+@media screen and (min-width: 1200px) {
+ .col-1-lg {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 calc((100% / (12/1)) - var(--grid-gutter));
+ flex: 0 0 calc((100% / (12/1)) - var(--grid-gutter));
+ max-width: calc((100% / (12/1)) - var(--grid-gutter));
+ }
+
+ .col-2-lg {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 calc((100% / (12/2)) - var(--grid-gutter));
+ flex: 0 0 calc((100% / (12/2)) - var(--grid-gutter));
+ max-width: calc((100% / (12/2)) - var(--grid-gutter));
+ }
+
+ .col-3-lg {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 calc((100% / (12/3)) - var(--grid-gutter));
+ flex: 0 0 calc((100% / (12/3)) - var(--grid-gutter));
+ max-width: calc((100% / (12/3)) - var(--grid-gutter));
+ }
+
+ .col-4-lg {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 calc((100% / (12/4)) - var(--grid-gutter));
+ flex: 0 0 calc((100% / (12/4)) - var(--grid-gutter));
+ max-width: calc((100% / (12/4)) - var(--grid-gutter));
+ }
+
+ .col-5-lg {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 calc((100% / (12/5)) - var(--grid-gutter));
+ flex: 0 0 calc((100% / (12/5)) - var(--grid-gutter));
+ max-width: calc((100% / (12/5)) - var(--grid-gutter));
+ }
+
+ .col-6-lg {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 calc((100% / (12/6)) - var(--grid-gutter));
+ flex: 0 0 calc((100% / (12/6)) - var(--grid-gutter));
+ max-width: calc((100% / (12/6)) - var(--grid-gutter));
+ }
+
+ .col-7-lg {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 calc((100% / (12/7)) - var(--grid-gutter));
+ flex: 0 0 calc((100% / (12/7)) - var(--grid-gutter));
+ max-width: calc((100% / (12/7)) - var(--grid-gutter));
+ }
+
+ .col-8-lg {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 calc((100% / (12/8)) - var(--grid-gutter));
+ flex: 0 0 calc((100% / (12/8)) - var(--grid-gutter));
+ max-width: calc((100% / (12/8)) - var(--grid-gutter));
+ }
+
+ .col-9-lg {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 calc((100% / (12/9)) - var(--grid-gutter));
+ flex: 0 0 calc((100% / (12/9)) - var(--grid-gutter));
+ max-width: calc((100% / (12/9)) - var(--grid-gutter));
+ }
+
+ .col-10-lg {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 calc((100% / (12/10)) - var(--grid-gutter));
+ flex: 0 0 calc((100% / (12/10)) - var(--grid-gutter));
+ max-width: calc((100% / (12/10)) - var(--grid-gutter));
+ }
+
+ .col-11-lg {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 calc((100% / (12/11)) - var(--grid-gutter));
+ flex: 0 0 calc((100% / (12/11)) - var(--grid-gutter));
+ max-width: calc((100% / (12/11)) - var(--grid-gutter));
+ }
+
+ .col-12-lg {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 calc((100% / (12/12)) - var(--grid-gutter));
+ flex: 0 0 calc((100% / (12/12)) - var(--grid-gutter));
+ max-width: calc((100% / (12/12)) - var(--grid-gutter));
+ }
+}
+fieldset {
+ padding: 0.5rem 2rem;
+}
+legend {
+ text-transform: uppercase;
+ font-size: 0.8em;
+ letter-spacing: 0.1rem;
+}
+input:not([type="checkbox"]):not([type="radio"]):not([type="submit"]):not([type="color"]):not([type="button"]):not([type="reset"]),
+select,
+textarea,
+textarea[type="text"] {
+ font-family: inherit;
+ padding: 0.8rem 1rem;
+ border-radius: 4px;
+ border: 1px solid var(--color-lightGrey);
+ font-size: 1em;
+ -webkit-transition: all 0.2s ease;
+ transition: all 0.2s ease;
+ display: block;
+ width: 100%;
+}
+input:not([type="checkbox"]):not([type="radio"]):not([type="submit"]):not([type="color"]):not([type="button"]):not([type="reset"]):not(:disabled):hover,
+select:hover,
+textarea:hover,
+textarea[type="text"]:hover {
+ border-color: var(--color-grey);
+}
+input:not([type="checkbox"]):not([type="radio"]):not([type="submit"]):not([type="color"]):not([type="button"]):not([type="reset"]):focus,
+select:focus,
+textarea:focus,
+textarea[type="text"]:focus {
+ outline: none;
+ border-color: var(--color-primary);
+ -webkit-box-shadow: 0 0 1px var(--color-primary);
+ box-shadow: 0 0 1px var(--color-primary);
+}
+input.error:not([type="checkbox"]):not([type="radio"]):not([type="submit"]):not([type="color"]):not([type="button"]):not([type="reset"]),
+textarea.error {
+ border-color: var(--color-error);
+}
+input.success:not([type="checkbox"]):not([type="radio"]):not([type="submit"]):not([type="color"]):not([type="button"]):not([type="reset"]),
+textarea.success {
+ border-color: var(--color-success);
+}
+select {
+ -webkit-appearance: none;
+ background: #f3f3f6 no-repeat 100%;
+ background-size: 1ex;
+ background-origin: content-box;
+ background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='60' height='40' fill='%23555'><polygon points='0,0 60,0 30,40'/></svg>");
+}
+[type="checkbox"],
+[type="radio"] {
+ width: 1.6rem;
+ height: 1.6rem;
+}
+/* BUTTONS */
+.button,
+[type="button"],
+[type="reset"],
+[type="submit"],
+button {
+ padding: 1rem 2.5rem;
+ color: var(--color-darkGrey);
+ background: var(--color-lightGrey);
+ border-radius: 4px;
+ border: 1px solid transparent;
+ font-size: var(--font-size);
+ line-height: 1;
+ text-align: center;
+ -webkit-transition: opacity 0.2s ease;
+ transition: opacity 0.2s ease;
+ text-decoration: none;
+ -webkit-transform: scale(1);
+ transform: scale(1);
+ display: inline-block;
+ cursor: pointer;
+}
+.grouped {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+}
+.grouped > *:not(:last-child) {
+ margin-right: 16px;
+}
+.grouped.gapless > * {
+ margin: 0 0 0 -1px !important;
+ border-radius:0 !important;
+}
+.grouped.gapless > *:first-child {
+ margin: 0 !important;
+ border-radius:4px 0 0 4px !important;
+}
+.grouped.gapless > *:last-child {
+ border-radius:0 4px 4px 0 !important;
+}
+.button + .button {
+ margin-left: 1rem;
+}
+.button:hover,
+[type="button"]:hover,
+[type="reset"]:hover,
+[type="submit"]:hover,
+button:hover {
+ opacity: 0.8;
+}
+.button:active,
+[type="button"]:active,
+[type="reset"]:active,
+[type="submit"]:active,
+button:active {
+ -webkit-transform: scale(0.98);
+ transform: scale(0.98);
+}
+input:disabled,
+button:disabled,
+input:disabled:hover,
+button:disabled:hover {
+ opacity: 0.4;
+ cursor: not-allowed;
+}
+.button.primary,
+.button.secondary,
+.button.dark,
+.button.error,
+.button.success,
+[type="submit"] {
+ color: #fff;
+ z-index: 1; /* hightlight from other button's border when grouped */
+ background-color: #000;
+ background-color: var(--color-primary);
+}
+.button.secondary {
+ background-color: var(--color-grey);
+}
+.button.dark {
+ background-color: var(--color-darkGrey);
+}
+.button.error {
+ background-color: var(--color-error);
+}
+.button.success {
+ background-color: var(--color-success);
+}
+.button.outline {
+ background-color: transparent;
+ border-color: var(--color-lightGrey);
+}
+.button.outline.primary {
+ border-color: var(--color-primary);
+ color: var(--color-primary);
+}
+.button.outline.secondary {
+ border-color: var(--color-grey);
+ color: var(--color-grey);
+}
+.button.outline.dark {
+ border-color: var(--color-darkGrey);
+ color: var(--color-darkGrey);
+}
+.button.clear {
+ background-color: transparent;
+ border-color: transparent;
+ color: var(--color-primary);
+}
+.button.icon {
+ display: -webkit-inline-box;
+ display: -ms-inline-flexbox;
+ display: inline-flex;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+}
+.button.icon > img {
+ margin-left: 2px;
+}
+.button.icon-only {
+ padding: 1rem;
+}
+::-webkit-input-placeholder {
+ color: #bdbfc4;
+}
+::-moz-placeholder {
+ color: #bdbfc4;
+}
+:-ms-input-placeholder {
+ color: #bdbfc4;
+}
+::-ms-input-placeholder {
+ color: #bdbfc4;
+}
+::placeholder {
+ color: #bdbfc4;
+}
+.nav {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ min-height: 5rem;
+ -webkit-box-align: stretch;
+ -ms-flex-align: stretch;
+ align-items: stretch;
+}
+.nav img {
+ max-height: 3rem;
+}
+.nav>.container {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+}
+.nav-center,
+.nav-left,
+.nav-right {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-flex: 1;
+ -ms-flex: 1;
+ flex: 1;
+}
+.nav-left {
+ -webkit-box-pack: start;
+ -ms-flex-pack: start;
+ justify-content: flex-start;
+}
+.nav-right {
+ -webkit-box-pack: end;
+ -ms-flex-pack: end;
+ justify-content: flex-end;
+}
+.nav-center {
+ -webkit-box-pack: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+}
+@media screen and (max-width: 480px) {
+ .nav,
+ .nav>.container {
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ }
+ .nav-center,
+ .nav-left,
+ .nav-right {
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap;
+ -webkit-box-pack: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ }
+}
+.nav a,
+.nav .brand {
+ text-decoration: none;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ padding: 1rem 2rem;
+ color: var(--color-darkGrey);
+}
+.nav [aria-current="page"]:not(.button),
+.nav .active:not(.button) {
+ color: #000; /* fallback */
+ color: var(--color-primary);
+}
+.nav .brand {
+ font-size: 1.75em;
+ padding-top: 0;
+ padding-bottom: 0;
+}
+.nav .brand img {
+ padding-right: 1rem;
+}
+.nav .button {
+ margin: auto 1rem;
+}
+.card {
+ padding: 1rem 2rem;
+ border-radius: 4px;
+ background: var(--bg-color);
+ -webkit-box-shadow: 0 1px 3px var(--color-grey);
+ box-shadow: 0 1px 3px var(--color-grey);
+}
+.card p:last-child {
+ margin: 0;
+}
+.card header > * {
+ margin-top: 0;
+ margin-bottom: 1rem;
+}
+.tabs {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+}
+.tabs a {
+ text-decoration: none;
+}
+.tabs > .dropdown > summary,
+.tabs > a {
+ padding: 1rem 2rem;
+ -webkit-box-flex: 0;
+ -ms-flex: 0 1 auto;
+ flex: 0 1 auto;
+ color: var(--color-darkGrey);
+ border-bottom: 2px solid var(--color-lightGrey);
+ text-align: center;
+}
+.tabs > a[aria-current="page"],
+.tabs > a.active,
+.tabs > a:hover {
+ opacity: 1;
+ border-bottom: 2px solid var(--color-darkGrey);
+}
+.tabs > a[aria-current="page"],
+.tabs > a.active {
+ border-color: var(--color-primary);
+}
+.tabs.is-full a {
+ -webkit-box-flex: 1;
+ -ms-flex: 1 1 auto;
+ flex: 1 1 auto;
+}
+.tag {
+ display: inline-block;
+ border: 1px solid var(--color-lightGrey);
+ text-transform: uppercase;
+ color: var(--color-grey);
+ padding: 0.5rem;
+ line-height: 1;
+ letter-spacing: 0.5px;
+}
+.tag.is-small {
+ padding: 0.4rem;
+ font-size: 0.75em;
+}
+.tag.is-large {
+ padding: 0.7rem;
+ font-size: 1.125em;
+}
+.tag+.tag {
+ margin-left: 1rem;
+}
+details.dropdown {
+ position: relative;
+ display: inline-block;
+}
+details.dropdown > :last-child {
+ position: absolute;
+ left: 0;
+ white-space: nowrap;
+}
+/* Colors */
+.bg-primary {
+ background-color: var(--color-primary) !important;
+}
+.bg-light {
+ background-color: var(--color-lightGrey) !important;
+}
+.bg-dark {
+ background-color: var(--color-darkGrey) !important;
+}
+.bg-grey {
+ background-color: var(--color-grey) !important;
+}
+.bg-error {
+ background-color: var(--color-error) !important;
+}
+.bg-success {
+ background-color: var(--color-success) !important;
+}
+.bd-primary {
+ border: 1px solid var(--color-primary) !important;
+}
+.bd-light {
+ border: 1px solid var(--color-lightGrey) !important;
+}
+.bd-dark {
+ border: 1px solid var(--color-darkGrey) !important;
+}
+.bd-grey {
+ border: 1px solid var(--color-grey) !important;
+}
+.bd-error {
+ border: 1px solid var(--color-error) !important;
+}
+.bd-success {
+ border: 1px solid var(--color-success) !important;
+}
+.text-primary {
+ color: var(--color-primary) !important;
+}
+.text-light {
+ color: var(--color-lightGrey) !important;
+}
+.text-dark {
+ color: var(--color-darkGrey) !important;
+}
+.text-grey {
+ color: var(--color-grey) !important;
+}
+.text-error {
+ color: var(--color-error) !important;
+}
+.text-success {
+ color: var(--color-success) !important;
+}
+.text-white {
+ color: #fff !important;
+}
+/* Position & alignment */
+.pull-right {
+ float: right !important;
+}
+.pull-left {
+ float: left !important;
+}
+.text-center {
+ text-align: center;
+}
+.text-left {
+ text-align: left;
+}
+.text-right {
+ text-align: right;
+}
+.text-justify {
+ text-align: justify;
+}
+.text-uppercase {
+ text-transform: uppercase;
+}
+.text-lowercase {
+ text-transform: lowercase;
+}
+.text-capitalize {
+ text-transform: capitalize;
+}
+.is-full-screen {
+ width: 100%;
+ min-height: 100vh;
+}
+.is-full-width {
+ width: 100% !important;
+}
+.is-vertical-align {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+}
+.is-horizontal-align {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-pack: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+}
+.is-center {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ -webkit-box-pack: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+}
+.is-right {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ -webkit-box-pack: end;
+ -ms-flex-pack: end;
+ justify-content: flex-end;
+}
+.is-left {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ -webkit-box-pack: start;
+ -ms-flex-pack: start;
+ justify-content: flex-start;
+}
+.is-fixed {
+ position: fixed;
+ width: 100%;
+}
+.is-paddingless {
+ padding: 0 !important;
+}
+.is-marginless {
+ margin: 0 !important;
+}
+.is-pointer {
+ cursor: pointer !important;
+}
+.is-rounded {
+ border-radius: 100%;
+}
+.clearfix {
+ content: "";
+ display: table;
+ clear: both;
+}
+.is-hidden {
+ display: none !important;
+}
+@media screen and (max-width: 599px) {
+ .hide-xs {
+ display: none !important;
+ }
+}
+@media screen and (min-width: 600px) and (max-width: 899px) {
+ .hide-sm {
+ display: none !important;
+ }
+}
+@media screen and (min-width: 900px) and (max-width: 1199px) {
+ .hide-md {
+ display: none !important;
+ }
+}
+@media screen and (min-width: 1200px) {
+ .hide-lg {
+ display: none !important;
+ }
+}
+@media print {
+ .hide-pr {
+ display: none !important;
+ }
+}
diff --git a/lab/assets/css/chota.min.css b/lab/assets/css/chota.min.css
new file mode 100644
index 0000000..7acf70a
--- /dev/null
+++ b/lab/assets/css/chota.min.css
@@ -0,0 +1 @@
+/*! chota.css v0.8.0 | MIT License | github.com/jenil/chota */:root{--bg-color:#fff;--bg-secondary-color:#f3f3f6;--color-primary:#14854f;--color-lightGrey:#d2d6dd;--color-grey:#747681;--color-darkGrey:#3f4144;--color-error:#d43939;--color-success:#28bd14;--grid-maxWidth:120rem;--grid-gutter:2rem;--font-size:1.6rem;--font-color:#333;--font-family-sans:-apple-system,BlinkMacSystemFont,Avenir,"Avenir Next","Segoe UI","Roboto","Oxygen","Ubuntu","Cantarell","Fira Sans","Droid Sans","Helvetica Neue",sans-serif;--font-family-mono:monaco,"Consolas","Lucida Console",monospace}html{-webkit-box-sizing:border-box;box-sizing:border-box;font-size:62.5%;line-height:1.15;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}*,:after,:before{-webkit-box-sizing:inherit;box-sizing:inherit}*{scrollbar-width:thin;scrollbar-color:var(--color-lightGrey) var(--bg-primary)}::-webkit-scrollbar{width:8px}::-webkit-scrollbar-track{background:var(--bg-primary)}::-webkit-scrollbar-thumb{background:var(--color-lightGrey)}body{background-color:var(--bg-color);line-height:1.6;font-size:var(--font-size);color:var(--font-color);font-family:Segoe UI,Helvetica Neue,sans-serif;font-family:var(--font-family-sans);margin:0;padding:0}h1,h2,h3,h4,h5,h6{font-weight:500;margin:.35em 0 .7em}h1{font-size:2em}h2{font-size:1.75em}h3{font-size:1.5em}h4{font-size:1.25em}h5{font-size:1em}h6{font-size:.85em}a{color:var(--color-primary);text-decoration:none}a:hover:not(.button){opacity:.75}button{font-family:inherit}p{margin-top:0}blockquote{background-color:var(--bg-secondary-color);padding:1.5rem 2rem;border-left:3px solid var(--color-lightGrey)}dl dt{font-weight:700}hr{background-color:var(--color-lightGrey);height:1px;margin:1rem 0}hr,table{border:none}table{width:100%;border-collapse:collapse;border-spacing:0;text-align:left}table.striped tr:nth-of-type(2n){background-color:var(--bg-secondary-color)}td,th{vertical-align:middle;padding:1.2rem .4rem}thead{border-bottom:2px solid var(--color-lightGrey)}tfoot{border-top:2px solid var(--color-lightGrey)}code,kbd,pre,samp,tt{font-family:var(--font-family-mono)}code,kbd{font-size:90%;white-space:pre-wrap;border-radius:4px;padding:.2em .4em;color:var(--color-error)}code,kbd,pre{background-color:var(--bg-secondary-color)}pre{font-size:1em;padding:1rem;overflow-x:auto}pre code{background:none;padding:0}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}img{max-width:100%}fieldset{border:1px solid var(--color-lightGrey)}iframe{border:0}.container{max-width:var(--grid-maxWidth);margin:0 auto;width:96%;padding:0 calc(var(--grid-gutter)/2)}.row{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;margin-left:calc(var(--grid-gutter)/-2);margin-right:calc(var(--grid-gutter)/-2)}.row,.row.reverse{-webkit-box-orient:horizontal}.row.reverse{-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.col{-webkit-box-flex:1;-ms-flex:1;flex:1}.col,[class*=" col-"],[class^=col-]{margin:0 calc(var(--grid-gutter)/2) calc(var(--grid-gutter)/2)}.col-1{-ms-flex:0 0 calc(8.33333% - var(--grid-gutter));flex:0 0 calc(8.33333% - var(--grid-gutter));max-width:calc(8.33333% - var(--grid-gutter))}.col-1,.col-2{-webkit-box-flex:0}.col-2{-ms-flex:0 0 calc(16.66667% - var(--grid-gutter));flex:0 0 calc(16.66667% - var(--grid-gutter));max-width:calc(16.66667% - var(--grid-gutter))}.col-3{-ms-flex:0 0 calc(25% - var(--grid-gutter));flex:0 0 calc(25% - var(--grid-gutter));max-width:calc(25% - var(--grid-gutter))}.col-3,.col-4{-webkit-box-flex:0}.col-4{-ms-flex:0 0 calc(33.33333% - var(--grid-gutter));flex:0 0 calc(33.33333% - var(--grid-gutter));max-width:calc(33.33333% - var(--grid-gutter))}.col-5{-ms-flex:0 0 calc(41.66667% - var(--grid-gutter));flex:0 0 calc(41.66667% - var(--grid-gutter));max-width:calc(41.66667% - var(--grid-gutter))}.col-5,.col-6{-webkit-box-flex:0}.col-6{-ms-flex:0 0 calc(50% - var(--grid-gutter));flex:0 0 calc(50% - var(--grid-gutter));max-width:calc(50% - var(--grid-gutter))}.col-7{-ms-flex:0 0 calc(58.33333% - var(--grid-gutter));flex:0 0 calc(58.33333% - var(--grid-gutter));max-width:calc(58.33333% - var(--grid-gutter))}.col-7,.col-8{-webkit-box-flex:0}.col-8{-ms-flex:0 0 calc(66.66667% - var(--grid-gutter));flex:0 0 calc(66.66667% - var(--grid-gutter));max-width:calc(66.66667% - var(--grid-gutter))}.col-9{-ms-flex:0 0 calc(75% - var(--grid-gutter));flex:0 0 calc(75% - var(--grid-gutter));max-width:calc(75% - var(--grid-gutter))}.col-9,.col-10{-webkit-box-flex:0}.col-10{-ms-flex:0 0 calc(83.33333% - var(--grid-gutter));flex:0 0 calc(83.33333% - var(--grid-gutter));max-width:calc(83.33333% - var(--grid-gutter))}.col-11{-ms-flex:0 0 calc(91.66667% - var(--grid-gutter));flex:0 0 calc(91.66667% - var(--grid-gutter));max-width:calc(91.66667% - var(--grid-gutter))}.col-11,.col-12{-webkit-box-flex:0}.col-12{-ms-flex:0 0 calc(100% - var(--grid-gutter));flex:0 0 calc(100% - var(--grid-gutter));max-width:calc(100% - var(--grid-gutter))}@media screen and (max-width:599px){.container{width:100%}.col,[class*=col-],[class^=col-]{-webkit-box-flex:0;-ms-flex:0 1 100%;flex:0 1 100%;max-width:100%}}@media screen and (min-width:900px){.col-1-md{-webkit-box-flex:0;-ms-flex:0 0 calc(8.33333% - var(--grid-gutter));flex:0 0 calc(8.33333% - var(--grid-gutter));max-width:calc(8.33333% - var(--grid-gutter))}.col-2-md{-webkit-box-flex:0;-ms-flex:0 0 calc(16.66667% - var(--grid-gutter));flex:0 0 calc(16.66667% - var(--grid-gutter));max-width:calc(16.66667% - var(--grid-gutter))}.col-3-md{-webkit-box-flex:0;-ms-flex:0 0 calc(25% - var(--grid-gutter));flex:0 0 calc(25% - var(--grid-gutter));max-width:calc(25% - var(--grid-gutter))}.col-4-md{-webkit-box-flex:0;-ms-flex:0 0 calc(33.33333% - var(--grid-gutter));flex:0 0 calc(33.33333% - var(--grid-gutter));max-width:calc(33.33333% - var(--grid-gutter))}.col-5-md{-webkit-box-flex:0;-ms-flex:0 0 calc(41.66667% - var(--grid-gutter));flex:0 0 calc(41.66667% - var(--grid-gutter));max-width:calc(41.66667% - var(--grid-gutter))}.col-6-md{-webkit-box-flex:0;-ms-flex:0 0 calc(50% - var(--grid-gutter));flex:0 0 calc(50% - var(--grid-gutter));max-width:calc(50% - var(--grid-gutter))}.col-7-md{-webkit-box-flex:0;-ms-flex:0 0 calc(58.33333% - var(--grid-gutter));flex:0 0 calc(58.33333% - var(--grid-gutter));max-width:calc(58.33333% - var(--grid-gutter))}.col-8-md{-webkit-box-flex:0;-ms-flex:0 0 calc(66.66667% - var(--grid-gutter));flex:0 0 calc(66.66667% - var(--grid-gutter));max-width:calc(66.66667% - var(--grid-gutter))}.col-9-md{-webkit-box-flex:0;-ms-flex:0 0 calc(75% - var(--grid-gutter));flex:0 0 calc(75% - var(--grid-gutter));max-width:calc(75% - var(--grid-gutter))}.col-10-md{-webkit-box-flex:0;-ms-flex:0 0 calc(83.33333% - var(--grid-gutter));flex:0 0 calc(83.33333% - var(--grid-gutter));max-width:calc(83.33333% - var(--grid-gutter))}.col-11-md{-webkit-box-flex:0;-ms-flex:0 0 calc(91.66667% - var(--grid-gutter));flex:0 0 calc(91.66667% - var(--grid-gutter));max-width:calc(91.66667% - var(--grid-gutter))}.col-12-md{-webkit-box-flex:0;-ms-flex:0 0 calc(100% - var(--grid-gutter));flex:0 0 calc(100% - var(--grid-gutter));max-width:calc(100% - var(--grid-gutter))}}@media screen and (min-width:1200px){.col-1-lg{-webkit-box-flex:0;-ms-flex:0 0 calc(8.33333% - var(--grid-gutter));flex:0 0 calc(8.33333% - var(--grid-gutter));max-width:calc(8.33333% - var(--grid-gutter))}.col-2-lg{-webkit-box-flex:0;-ms-flex:0 0 calc(16.66667% - var(--grid-gutter));flex:0 0 calc(16.66667% - var(--grid-gutter));max-width:calc(16.66667% - var(--grid-gutter))}.col-3-lg{-webkit-box-flex:0;-ms-flex:0 0 calc(25% - var(--grid-gutter));flex:0 0 calc(25% - var(--grid-gutter));max-width:calc(25% - var(--grid-gutter))}.col-4-lg{-webkit-box-flex:0;-ms-flex:0 0 calc(33.33333% - var(--grid-gutter));flex:0 0 calc(33.33333% - var(--grid-gutter));max-width:calc(33.33333% - var(--grid-gutter))}.col-5-lg{-webkit-box-flex:0;-ms-flex:0 0 calc(41.66667% - var(--grid-gutter));flex:0 0 calc(41.66667% - var(--grid-gutter));max-width:calc(41.66667% - var(--grid-gutter))}.col-6-lg{-webkit-box-flex:0;-ms-flex:0 0 calc(50% - var(--grid-gutter));flex:0 0 calc(50% - var(--grid-gutter));max-width:calc(50% - var(--grid-gutter))}.col-7-lg{-webkit-box-flex:0;-ms-flex:0 0 calc(58.33333% - var(--grid-gutter));flex:0 0 calc(58.33333% - var(--grid-gutter));max-width:calc(58.33333% - var(--grid-gutter))}.col-8-lg{-webkit-box-flex:0;-ms-flex:0 0 calc(66.66667% - var(--grid-gutter));flex:0 0 calc(66.66667% - var(--grid-gutter));max-width:calc(66.66667% - var(--grid-gutter))}.col-9-lg{-webkit-box-flex:0;-ms-flex:0 0 calc(75% - var(--grid-gutter));flex:0 0 calc(75% - var(--grid-gutter));max-width:calc(75% - var(--grid-gutter))}.col-10-lg{-webkit-box-flex:0;-ms-flex:0 0 calc(83.33333% - var(--grid-gutter));flex:0 0 calc(83.33333% - var(--grid-gutter));max-width:calc(83.33333% - var(--grid-gutter))}.col-11-lg{-webkit-box-flex:0;-ms-flex:0 0 calc(91.66667% - var(--grid-gutter));flex:0 0 calc(91.66667% - var(--grid-gutter));max-width:calc(91.66667% - var(--grid-gutter))}.col-12-lg{-webkit-box-flex:0;-ms-flex:0 0 calc(100% - var(--grid-gutter));flex:0 0 calc(100% - var(--grid-gutter));max-width:calc(100% - var(--grid-gutter))}}fieldset{padding:.5rem 2rem}legend{text-transform:uppercase;font-size:.8em;letter-spacing:.1rem}input:not([type=checkbox]):not([type=radio]):not([type=submit]):not([type=color]):not([type=button]):not([type=reset]),select,textarea,textarea[type=text]{font-family:inherit;padding:.8rem 1rem;border-radius:4px;border:1px solid var(--color-lightGrey);font-size:1em;-webkit-transition:all .2s ease;transition:all .2s ease;display:block;width:100%}input:not([type=checkbox]):not([type=radio]):not([type=submit]):not([type=color]):not([type=button]):not([type=reset]):not(:disabled):hover,select:hover,textarea:hover,textarea[type=text]:hover{border-color:var(--color-grey)}input:not([type=checkbox]):not([type=radio]):not([type=submit]):not([type=color]):not([type=button]):not([type=reset]):focus,select:focus,textarea:focus,textarea[type=text]:focus{outline:none;border-color:var(--color-primary);-webkit-box-shadow:0 0 1px var(--color-primary);box-shadow:0 0 1px var(--color-primary)}input.error:not([type=checkbox]):not([type=radio]):not([type=submit]):not([type=color]):not([type=button]):not([type=reset]),textarea.error{border-color:var(--color-error)}input.success:not([type=checkbox]):not([type=radio]):not([type=submit]):not([type=color]):not([type=button]):not([type=reset]),textarea.success{border-color:var(--color-success)}select{-webkit-appearance:none;background:#f3f3f6 no-repeat 100%;background-size:1ex;background-origin:content-box;background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='60' height='40' fill='%23555'><polygon points='0,0 60,0 30,40'/></svg>")}[type=checkbox],[type=radio]{width:1.6rem;height:1.6rem}.button,[type=button],[type=reset],[type=submit],button{padding:1rem 2.5rem;color:var(--color-darkGrey);background:var(--color-lightGrey);border-radius:4px;border:1px solid transparent;font-size:var(--font-size);line-height:1;text-align:center;-webkit-transition:opacity .2s ease;transition:opacity .2s ease;text-decoration:none;-webkit-transform:scale(1);transform:scale(1);display:inline-block;cursor:pointer}.grouped{display:-webkit-box;display:-ms-flexbox;display:flex}.grouped>:not(:last-child){margin-right:16px}.grouped.gapless>*{margin:0 0 0 -1px!important;border-radius:0!important}.grouped.gapless>:first-child{margin:0!important;border-radius:4px 0 0 4px!important}.grouped.gapless>:last-child{border-radius:0 4px 4px 0!important}.button+.button{margin-left:1rem}.button:hover,[type=button]:hover,[type=reset]:hover,[type=submit]:hover,button:hover{opacity:.8}.button:active,[type=button]:active,[type=reset]:active,[type=submit]:active,button:active{-webkit-transform:scale(.98);transform:scale(.98)}button:disabled,button:disabled:hover,input:disabled,input:disabled:hover{opacity:.4;cursor:not-allowed}.button.dark,.button.error,.button.primary,.button.secondary,.button.success,[type=submit]{color:#fff;z-index:1;background-color:#000;background-color:var(--color-primary)}.button.secondary{background-color:var(--color-grey)}.button.dark{background-color:var(--color-darkGrey)}.button.error{background-color:var(--color-error)}.button.success{background-color:var(--color-success)}.button.outline{background-color:transparent;border-color:var(--color-lightGrey)}.button.outline.primary{border-color:var(--color-primary);color:var(--color-primary)}.button.outline.secondary{border-color:var(--color-grey);color:var(--color-grey)}.button.outline.dark{border-color:var(--color-darkGrey);color:var(--color-darkGrey)}.button.clear{background-color:transparent;border-color:transparent;color:var(--color-primary)}.button.icon{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.button.icon>img{margin-left:2px}.button.icon-only{padding:1rem}::-webkit-input-placeholder{color:#bdbfc4}::-moz-placeholder{color:#bdbfc4}:-ms-input-placeholder{color:#bdbfc4}::-ms-input-placeholder{color:#bdbfc4}::placeholder{color:#bdbfc4}.nav{display:-webkit-box;display:-ms-flexbox;display:flex;min-height:5rem;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.nav img{max-height:3rem}.nav-center,.nav-left,.nav-right,.nav>.container{display:-webkit-box;display:-ms-flexbox;display:flex}.nav-center,.nav-left,.nav-right{-webkit-box-flex:1;-ms-flex:1;flex:1}.nav-left{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.nav-right{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.nav-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}@media screen and (max-width:480px){.nav,.nav>.container{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.nav-center,.nav-left,.nav-right{-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}}.nav .brand,.nav a{text-decoration:none;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:1rem 2rem;color:var(--color-darkGrey)}.nav .active:not(.button),.nav [aria-current=page]:not(.button){color:#000;color:var(--color-primary)}.nav .brand{font-size:1.75em;padding-top:0;padding-bottom:0}.nav .brand img{padding-right:1rem}.nav .button{margin:auto 1rem}.card{padding:1rem 2rem;border-radius:4px;background:var(--bg-color);-webkit-box-shadow:0 1px 3px var(--color-grey);box-shadow:0 1px 3px var(--color-grey)}.card p:last-child{margin:0}.card header>*{margin-top:0;margin-bottom:1rem}.tabs{display:-webkit-box;display:-ms-flexbox;display:flex}.tabs a{text-decoration:none}.tabs>.dropdown>summary,.tabs>a{padding:1rem 2rem;-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto;color:var(--color-darkGrey);border-bottom:2px solid var(--color-lightGrey);text-align:center}.tabs>a.active,.tabs>a:hover,.tabs>a[aria-current=page]{opacity:1;border-bottom:2px solid var(--color-darkGrey)}.tabs>a.active,.tabs>a[aria-current=page]{border-color:var(--color-primary)}.tabs.is-full a{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.tag{display:inline-block;border:1px solid var(--color-lightGrey);text-transform:uppercase;color:var(--color-grey);padding:.5rem;line-height:1;letter-spacing:.5px}.tag.is-small{padding:.4rem;font-size:.75em}.tag.is-large{padding:.7rem;font-size:1.125em}.tag+.tag{margin-left:1rem}details.dropdown{position:relative;display:inline-block}details.dropdown>:last-child{position:absolute;left:0;white-space:nowrap}.bg-primary{background-color:var(--color-primary)!important}.bg-light{background-color:var(--color-lightGrey)!important}.bg-dark{background-color:var(--color-darkGrey)!important}.bg-grey{background-color:var(--color-grey)!important}.bg-error{background-color:var(--color-error)!important}.bg-success{background-color:var(--color-success)!important}.bd-primary{border:1px solid var(--color-primary)!important}.bd-light{border:1px solid var(--color-lightGrey)!important}.bd-dark{border:1px solid var(--color-darkGrey)!important}.bd-grey{border:1px solid var(--color-grey)!important}.bd-error{border:1px solid var(--color-error)!important}.bd-success{border:1px solid var(--color-success)!important}.text-primary{color:var(--color-primary)!important}.text-light{color:var(--color-lightGrey)!important}.text-dark{color:var(--color-darkGrey)!important}.text-grey{color:var(--color-grey)!important}.text-error{color:var(--color-error)!important}.text-success{color:var(--color-success)!important}.text-white{color:#fff!important}.pull-right{float:right!important}.pull-left{float:left!important}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.text-justify{text-align:justify}.text-uppercase{text-transform:uppercase}.text-lowercase{text-transform:lowercase}.text-capitalize{text-transform:capitalize}.is-full-screen{width:100%;min-height:100vh}.is-full-width{width:100%!important}.is-vertical-align{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.is-center,.is-horizontal-align{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.is-center{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.is-right{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.is-left,.is-right{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.is-left{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.is-fixed{position:fixed;width:100%}.is-paddingless{padding:0!important}.is-marginless{margin:0!important}.is-pointer{cursor:pointer!important}.is-rounded{border-radius:100%}.clearfix{content:"";display:table;clear:both}.is-hidden{display:none!important}@media screen and (max-width:599px){.hide-xs{display:none!important}}@media screen and (min-width:600px) and (max-width:899px){.hide-sm{display:none!important}}@media screen and (min-width:900px) and (max-width:1199px){.hide-md{display:none!important}}@media screen and (min-width:1200px){.hide-lg{display:none!important}}@media print{.hide-pr{display:none!important}} \ No newline at end of file
diff --git a/lab/assets/css/deuxfleurs-chato-fullwidth.css b/lab/assets/css/deuxfleurs-chato-fullwidth.css
new file mode 100644
index 0000000..dbec9b6
--- /dev/null
+++ b/lab/assets/css/deuxfleurs-chato-fullwidth.css
@@ -0,0 +1,132 @@
+@import 'normalize.css';
+@import 'chota.min.css';
+
+/* font-size:
+ * HTML font size is 16px on most browsers, sometimes 14px.
+ * Chota sets `font-size: 62.5%;`, that is 10px on most browsers.
+ */
+
+:root {
+ /* Blanc cassé (offset autour de #main-page) */
+ --bg-color: #f4f4f4;
+ /* Bleu turquoise du ciel au lion */
+ --bg-secondary-color: #cafaef;
+ /* Gris violet du sol */
+ --bg-ternary-color: #c7c9e2;
+ --bg-canopee-color: #151a05;
+ --color-canopee: #a0c43c;
+ --bg-branche-color: #381e02;
+ --color-primary: #14854F;
+ --color-text-light: #fafafa;
+ --color-lightGrey: #d2d6dd;
+ --color-grey: #747681;
+ --color-darkGrey: #3f4144;
+ --color-error: #d43939;
+ --color-success: #28bd14;
+ /*--grid-maxWidth: 120rem;*/
+ --grid-maxWidth: 100%;
+ --grid-gutter: 0rem;
+ --font-size: 1.6rem;
+ --font-color: #333333;
+ --font-family-sans: -apple-system, BlinkMacSystemFont, Avenir, "Avenir Next",
+ "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans",
+ "Droid Sans", "Helvetica Neue", sans-serif;
+ --font-family-mono: monaco, "Consolas", "Lucida Console", monospace;
+}
+
+body {
+ background-color: var(--bg-color);
+}
+
+#main-page {
+ background-color: var(--bg-secondary-color);
+ padding: 0;
+}
+
+header {
+ margin-bottom: 4rem;
+ height: 100%;
+}
+
+#logo {
+ font-size: 3.2rem;
+ color: var(--color-text-light);
+}
+
+header>nav {
+ background-color: var(--bg-canopee-color);
+ padding-left: 1rem;
+ padding-right: 1rem;
+}
+
+#illustration {
+ background-image: url("../images/illustration-ronce_800x510px.png");
+ height: 100%;
+ /* Create the parallax scrolling effect */
+ background-attachment: fixed;
+ background-position: center;
+ background-repeat: no-repeat;
+ background-size: cover;
+}
+@media screen and (min-width: 800px) {
+ #illustration {
+ background-image: url("../images/illustration-ronce_1200x765px.png");
+ }
+}
+@media screen and (min-width: 1200px) {
+ #illustration {
+ background-image: url("../images/illustration-ronce_2400x1531px.png");
+
+ }
+}
+
+
+section div {
+ padding-left: 4rem;
+ padding-right: 4rem;
+ margin-top: 2rem;
+}
+
+section p {
+ padding-left: 2rem;
+ padding-right: 2rem;
+ font-size: 2rem;
+}
+
+section .canopee {
+ background-color: var(--bg-canopee-color);
+ color: var(--color-canopee);
+ margin-bottom: 4rem;
+}
+section .canopee.left {
+ margin-left: 0;
+ padding-left: 6rem;
+ border-top-right-radius: 3rem;
+ border-bottom-right-radius: 3rem;
+}
+section .canopee.right {
+ margin-right: 0;
+ border-top-left-radius: 3rem;
+ border-bottom-left-radius: 3rem;
+}
+
+section .canopee p {
+ font-size: 1.6rem;
+}
+
+section .branche {
+ background-color: var(--bg-branche-color);
+ color: var(--color-text-light);
+ padding-bottom: 4rem;
+ padding-top: 4rem;
+}
+
+section .branche p {
+ font-size: 2.6rem;
+ margin: 0;
+}
+
+footer {
+ padding: 4rem;
+ border-top: 1px solid var(--bg-color);
+} \ No newline at end of file
diff --git a/lab/assets/css/deuxfleurs-chato.css b/lab/assets/css/deuxfleurs-chato.css
new file mode 100644
index 0000000..1e34f0c
--- /dev/null
+++ b/lab/assets/css/deuxfleurs-chato.css
@@ -0,0 +1,111 @@
+@import 'normalize.css';
+@import 'chota.min.css';
+
+/* font-size:
+ * HTML font size is 16px on most browsers, sometimes 14px.
+ * Chota sets `font-size: 62.5%;`, that is 10px on most browsers.
+ */
+
+:root {
+ /* Blanc cassé (offset autour de #main-page) */
+ --bg-color: #f4f4f4;
+ /* Bleu turquoise du ciel au lion */
+ --bg-secondary-color: #cafaef;
+ /* Gris violet du sol */
+ --bg-ternary-color: #c7c9e2;
+ --bg-canopee-color: #151a05;
+ --color-canopee: #a0c43c;
+ --bg-branche-color: #381e02;
+ --color-primary: #14854F;
+ --color-text-light: #fafafa;
+ --color-lightGrey: #d2d6dd;
+ --color-grey: #747681;
+ --color-darkGrey: #3f4144;
+ --color-error: #d43939;
+ --color-success: #28bd14;
+ --grid-maxWidth: 120rem;
+ --grid-gutter: 0rem;
+ --font-size: 1.6rem;
+ --font-color: #333333;
+ --font-family-sans: -apple-system, BlinkMacSystemFont, Avenir, "Avenir Next",
+ "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans",
+ "Droid Sans", "Helvetica Neue", sans-serif;
+ --font-family-mono: monaco, "Consolas", "Lucida Console", monospace;
+}
+
+body {
+ background-color: var(--bg-color);
+}
+
+#main-page {
+ background-color: var(--bg-secondary-color);
+ padding: 0;
+}
+
+header {
+ margin-bottom: 4rem;
+}
+
+header>nav {
+ background-color: var(--bg-canopee-color);
+ padding-left: 1rem;
+ padding-right: 1rem;
+}
+
+#logo {
+ font-size: 3.2rem;
+ color: var(--color-text-light);
+}
+
+section div {
+ padding-left: 4rem;
+ padding-right: 4rem;
+ margin-top: 2rem;
+}
+
+section p {
+ padding-left: 2rem;
+ padding-right: 2rem;
+ font-size: 2rem;
+}
+
+section .canopee {
+ border-radius: 3rem;
+ background-color: var(--bg-canopee-color);
+ color: var(--color-canopee);
+ margin-bottom: 4rem;
+}
+
+section .canopee.left {
+ margin-left: 0;
+ padding-left: 6rem;
+ border-top-left-radius: 0rem;
+ border-bottom-left-radius: 0rem;
+}
+
+section .canopee.right {
+ margin-right: 0;
+ border-top-right-radius: 0rem;
+ border-bottom-right-radius: 0rem;
+}
+
+section .canopee p {
+ font-size: 1.6rem;
+}
+
+section .branche {
+ background-color: var(--bg-branche-color);
+ color: var(--color-text-light);
+ padding-bottom: 4rem;
+ padding-top: 4rem;
+}
+
+section .branche p {
+ font-size: 2.6rem;
+ margin: 0;
+}
+
+footer {
+ padding: 4rem;
+ border-top: 1px solid var(--bg-color);
+} \ No newline at end of file
diff --git a/lab/assets/css/mini-default.min.css b/lab/assets/css/mini-default.min.css
new file mode 100644
index 0000000..33dfdf7
--- /dev/null
+++ b/lab/assets/css/mini-default.min.css
@@ -0,0 +1 @@
+:root{--fore-color:#111;--secondary-fore-color:#444;--back-color:#f8f8f8;--secondary-back-color:#f0f0f0;--blockquote-color:#f57c00;--pre-color:#1565c0;--border-color:#aaa;--secondary-border-color:#ddd;--heading-ratio:1.19;--universal-margin:.5rem;--universal-padding:.5rem;--universal-border-radius:.125rem;--a-link-color:#0277bd;--a-visited-color:#01579b}html{font-size:16px}a,b,del,em,i,ins,q,span,strong,u{font-size:1em}html,*{font-family:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Ubuntu, "Helvetica Neue", Helvetica, sans-serif;line-height:1.5;-webkit-text-size-adjust:100%}*{font-size:1rem}body{margin:0;color:var(--fore-color);background:var(--back-color)}details{display:block}summary{display:list-item}abbr[title]{border-bottom:none;text-decoration:underline dotted}input{overflow:visible}img{max-width:100%;height:auto}h1,h2,h3,h4,h5,h6{line-height:1.2;margin:calc(1.5 * var(--universal-margin)) var(--universal-margin);font-weight:500}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{color:var(--secondary-fore-color);display:block;margin-top:-.25rem}h1{font-size:calc(1rem * var(--heading-ratio) * var(--heading-ratio) * var(--heading-ratio) * var(--heading-ratio))}h2{font-size:calc(1rem * var(--heading-ratio) * var(--heading-ratio) * var(--heading-ratio))}h3{font-size:calc(1rem * var(--heading-ratio) * var(--heading-ratio))}h4{font-size:calc(1rem * var(--heading-ratio))}h5{font-size:1rem}h6{font-size:calc(1rem / var(--heading-ratio))}p{margin:var(--universal-margin)}ol,ul{margin:var(--universal-margin);padding-left:calc(2 * var(--universal-margin))}b,strong{font-weight:700}hr{box-sizing:content-box;border:0;line-height:1.25em;margin:var(--universal-margin);height:.0625rem;background:linear-gradient(to right, transparent, var(--border-color) 20%, var(--border-color) 80%, transparent)}blockquote{display:block;position:relative;font-style:italic;color:var(--secondary-fore-color);margin:var(--universal-margin);padding:calc(3 * var(--universal-padding));border:.0625rem solid var(--secondary-border-color);border-left:.375rem solid var(--blockquote-color);border-radius:0 var(--universal-border-radius) var(--universal-border-radius) 0}blockquote:before{position:absolute;top:calc(0rem - var(--universal-padding));left:0;font-family:sans-serif;font-size:3rem;font-weight:700;content:"\201c";color:var(--blockquote-color)}blockquote[cite]:after{font-style:normal;font-size:.75em;font-weight:700;content:"\a— " attr(cite);white-space:pre}code,kbd,pre,samp{font-family:Menlo, Consolas, monospace;font-size:.85em}code{background:var(--secondary-back-color);border-radius:var(--universal-border-radius);padding:calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2)}kbd{background:var(--fore-color);color:var(--back-color);border-radius:var(--universal-border-radius);padding:calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2)}pre{overflow:auto;background:var(--secondary-back-color);padding:calc(1.5 * var(--universal-padding));margin:var(--universal-margin);border:.0625rem solid var(--secondary-border-color);border-left:.25rem solid var(--pre-color);border-radius:0 var(--universal-border-radius) var(--universal-border-radius) 0}sup,sub,code,kbd{line-height:0;position:relative;vertical-align:baseline}small,sup,sub,figcaption{font-size:.75em}sup{top:-.5em}sub{bottom:-.25em}figure{margin:var(--universal-margin)}figcaption{color:var(--secondary-fore-color)}a{text-decoration:none}a:link{color:var(--a-link-color)}a:visited{color:var(--a-visited-color)}a:hover,a:focus{text-decoration:underline}.container{margin:0 auto;padding:0 calc(1.5 * var(--universal-padding))}.row{box-sizing:border-box;display:flex;flex:0 1 auto;flex-flow:row wrap}.col-sm,[class^='col-sm-'],[class^='col-sm-offset-'],.row[class*='cols-sm-']>*{box-sizing:border-box;flex:0 0 auto;padding:0 calc(var(--universal-padding) / 2)}.col-sm,.row.cols-sm>*{max-width:100%;flex-grow:1;flex-basis:0}.col-sm-1,.row.cols-sm-1>*{max-width:8.33333%;flex-basis:8.33333%}.col-sm-offset-0{margin-left:0}.col-sm-2,.row.cols-sm-2>*{max-width:16.66667%;flex-basis:16.66667%}.col-sm-offset-1{margin-left:8.33333%}.col-sm-3,.row.cols-sm-3>*{max-width:25%;flex-basis:25%}.col-sm-offset-2{margin-left:16.66667%}.col-sm-4,.row.cols-sm-4>*{max-width:33.33333%;flex-basis:33.33333%}.col-sm-offset-3{margin-left:25%}.col-sm-5,.row.cols-sm-5>*{max-width:41.66667%;flex-basis:41.66667%}.col-sm-offset-4{margin-left:33.33333%}.col-sm-6,.row.cols-sm-6>*{max-width:50%;flex-basis:50%}.col-sm-offset-5{margin-left:41.66667%}.col-sm-7,.row.cols-sm-7>*{max-width:58.33333%;flex-basis:58.33333%}.col-sm-offset-6{margin-left:50%}.col-sm-8,.row.cols-sm-8>*{max-width:66.66667%;flex-basis:66.66667%}.col-sm-offset-7{margin-left:58.33333%}.col-sm-9,.row.cols-sm-9>*{max-width:75%;flex-basis:75%}.col-sm-offset-8{margin-left:66.66667%}.col-sm-10,.row.cols-sm-10>*{max-width:83.33333%;flex-basis:83.33333%}.col-sm-offset-9{margin-left:75%}.col-sm-11,.row.cols-sm-11>*{max-width:91.66667%;flex-basis:91.66667%}.col-sm-offset-10{margin-left:83.33333%}.col-sm-12,.row.cols-sm-12>*{max-width:100%;flex-basis:100%}.col-sm-offset-11{margin-left:91.66667%}.col-sm-normal{order:initial}.col-sm-first{order:-999}.col-sm-last{order:999}@media screen and (min-width: 768px){.col-md,[class^='col-md-'],[class^='col-md-offset-'],.row[class*='cols-md-']>*{box-sizing:border-box;flex:0 0 auto;padding:0 calc(var(--universal-padding) / 2)}.col-md,.row.cols-md>*{max-width:100%;flex-grow:1;flex-basis:0}.col-md-1,.row.cols-md-1>*{max-width:8.33333%;flex-basis:8.33333%}.col-md-offset-0{margin-left:0}.col-md-2,.row.cols-md-2>*{max-width:16.66667%;flex-basis:16.66667%}.col-md-offset-1{margin-left:8.33333%}.col-md-3,.row.cols-md-3>*{max-width:25%;flex-basis:25%}.col-md-offset-2{margin-left:16.66667%}.col-md-4,.row.cols-md-4>*{max-width:33.33333%;flex-basis:33.33333%}.col-md-offset-3{margin-left:25%}.col-md-5,.row.cols-md-5>*{max-width:41.66667%;flex-basis:41.66667%}.col-md-offset-4{margin-left:33.33333%}.col-md-6,.row.cols-md-6>*{max-width:50%;flex-basis:50%}.col-md-offset-5{margin-left:41.66667%}.col-md-7,.row.cols-md-7>*{max-width:58.33333%;flex-basis:58.33333%}.col-md-offset-6{margin-left:50%}.col-md-8,.row.cols-md-8>*{max-width:66.66667%;flex-basis:66.66667%}.col-md-offset-7{margin-left:58.33333%}.col-md-9,.row.cols-md-9>*{max-width:75%;flex-basis:75%}.col-md-offset-8{margin-left:66.66667%}.col-md-10,.row.cols-md-10>*{max-width:83.33333%;flex-basis:83.33333%}.col-md-offset-9{margin-left:75%}.col-md-11,.row.cols-md-11>*{max-width:91.66667%;flex-basis:91.66667%}.col-md-offset-10{margin-left:83.33333%}.col-md-12,.row.cols-md-12>*{max-width:100%;flex-basis:100%}.col-md-offset-11{margin-left:91.66667%}.col-md-normal{order:initial}.col-md-first{order:-999}.col-md-last{order:999}}@media screen and (min-width: 1280px){.col-lg,[class^='col-lg-'],[class^='col-lg-offset-'],.row[class*='cols-lg-']>*{box-sizing:border-box;flex:0 0 auto;padding:0 calc(var(--universal-padding) / 2)}.col-lg,.row.cols-lg>*{max-width:100%;flex-grow:1;flex-basis:0}.col-lg-1,.row.cols-lg-1>*{max-width:8.33333%;flex-basis:8.33333%}.col-lg-offset-0{margin-left:0}.col-lg-2,.row.cols-lg-2>*{max-width:16.66667%;flex-basis:16.66667%}.col-lg-offset-1{margin-left:8.33333%}.col-lg-3,.row.cols-lg-3>*{max-width:25%;flex-basis:25%}.col-lg-offset-2{margin-left:16.66667%}.col-lg-4,.row.cols-lg-4>*{max-width:33.33333%;flex-basis:33.33333%}.col-lg-offset-3{margin-left:25%}.col-lg-5,.row.cols-lg-5>*{max-width:41.66667%;flex-basis:41.66667%}.col-lg-offset-4{margin-left:33.33333%}.col-lg-6,.row.cols-lg-6>*{max-width:50%;flex-basis:50%}.col-lg-offset-5{margin-left:41.66667%}.col-lg-7,.row.cols-lg-7>*{max-width:58.33333%;flex-basis:58.33333%}.col-lg-offset-6{margin-left:50%}.col-lg-8,.row.cols-lg-8>*{max-width:66.66667%;flex-basis:66.66667%}.col-lg-offset-7{margin-left:58.33333%}.col-lg-9,.row.cols-lg-9>*{max-width:75%;flex-basis:75%}.col-lg-offset-8{margin-left:66.66667%}.col-lg-10,.row.cols-lg-10>*{max-width:83.33333%;flex-basis:83.33333%}.col-lg-offset-9{margin-left:75%}.col-lg-11,.row.cols-lg-11>*{max-width:91.66667%;flex-basis:91.66667%}.col-lg-offset-10{margin-left:83.33333%}.col-lg-12,.row.cols-lg-12>*{max-width:100%;flex-basis:100%}.col-lg-offset-11{margin-left:91.66667%}.col-lg-normal{order:initial}.col-lg-first{order:-999}.col-lg-last{order:999}}:root{--card-back-color:#f8f8f8;--card-fore-color:#111;--card-border-color:#ddd}.card{display:flex;flex-direction:column;justify-content:space-between;align-self:center;position:relative;width:100%;background:var(--card-back-color);color:var(--card-fore-color);border:.0625rem solid var(--card-border-color);border-radius:var(--universal-border-radius);margin:var(--universal-margin);overflow:hidden}@media screen and (min-width: 320px){.card{max-width:320px}}.card>.section{background:var(--card-back-color);color:var(--card-fore-color);box-sizing:border-box;margin:0;border:0;border-radius:0;border-bottom:.0625rem solid var(--card-border-color);padding:var(--universal-padding);width:100%}.card>.section.media{height:200px;padding:0;-o-object-fit:cover;object-fit:cover}.card>.section:last-child{border-bottom:0}@media screen and (min-width: 240px){.card.small{max-width:240px}}@media screen and (min-width: 480px){.card.large{max-width:480px}}.card.fluid{max-width:100%;width:auto}.card.warning{--card-back-color:#ffca28;--card-border-color:#e8b825}.card.error{--card-back-color:#b71c1c;--card-fore-color:#f8f8f8;--card-border-color:#a71a1a}.card>.section.dark{--card-back-color:#e0e0e0}.card>.section.double-padded{padding:calc(1.5 * var(--universal-padding))}:root{--form-back-color:#f0f0f0;--form-fore-color:#111;--form-border-color:#ddd;--input-back-color:#f8f8f8;--input-fore-color:#111;--input-border-color:#ddd;--input-focus-color:#0288d1;--input-invalid-color:#d32f2f;--button-back-color:#e2e2e2;--button-hover-back-color:#dcdcdc;--button-fore-color:#212121;--button-border-color:rgba(0,0,0,0);--button-hover-border-color:rgba(0,0,0,0);--button-group-border-color:rgba(124,124,124,0.54)}form{background:var(--form-back-color);color:var(--form-fore-color);border:.0625rem solid var(--form-border-color);border-radius:var(--universal-border-radius);margin:var(--universal-margin);padding:calc(2 * var(--universal-padding)) var(--universal-padding)}fieldset{border:.0625rem solid var(--form-border-color);border-radius:var(--universal-border-radius);margin:calc(var(--universal-margin) / 4);padding:var(--universal-padding)}legend{box-sizing:border-box;display:table;max-width:100%;white-space:normal;font-weight:700;padding:calc(var(--universal-padding) / 2)}label{padding:calc(var(--universal-padding) / 2) var(--universal-padding)}.input-group{display:inline-block}.input-group.fluid{display:flex;align-items:center;justify-content:center}.input-group.fluid>input{max-width:100%;flex-grow:1;flex-basis:0px}@media screen and (max-width: 767px){.input-group.fluid{align-items:stretch;flex-direction:column}}.input-group.vertical{display:flex;align-items:stretch;flex-direction:column}.input-group.vertical>input{max-width:100%;flex-grow:1;flex-basis:0px}[type="number"]::-webkit-inner-spin-button,[type="number"]::-webkit-outer-spin-button{height:auto}[type="search"]{-webkit-appearance:textfield;outline-offset:-2px}[type="search"]::-webkit-search-cancel-button,[type="search"]::-webkit-search-decoration{-webkit-appearance:none}input:not([type]),[type="text"],[type="email"],[type="number"],[type="search"],[type="password"],[type="url"],[type="tel"],[type="checkbox"],[type="radio"],textarea,select{box-sizing:border-box;background:var(--input-back-color);color:var(--input-fore-color);border:.0625rem solid var(--input-border-color);border-radius:var(--universal-border-radius);margin:calc(var(--universal-margin) / 2);padding:var(--universal-padding) calc(1.5 * var(--universal-padding))}input:not([type="button"]):not([type="submit"]):not([type="reset"]):hover,input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus,textarea:hover,textarea:focus,select:hover,select:focus{border-color:var(--input-focus-color);box-shadow:none}input:not([type="button"]):not([type="submit"]):not([type="reset"]):invalid,input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus:invalid,textarea:invalid,textarea:focus:invalid,select:invalid,select:focus:invalid{border-color:var(--input-invalid-color);box-shadow:none}input:not([type="button"]):not([type="submit"]):not([type="reset"])[readonly],textarea[readonly],select[readonly]{background:var(--secondary-back-color)}select{max-width:100%}option{overflow:hidden;text-overflow:ellipsis}[type="checkbox"],[type="radio"]{-webkit-appearance:none;-moz-appearance:none;appearance:none;position:relative;height:calc(1rem + var(--universal-padding) / 2);width:calc(1rem + var(--universal-padding) / 2);vertical-align:text-bottom;padding:0;flex-basis:calc(1rem + var(--universal-padding) / 2) !important;flex-grow:0 !important}[type="checkbox"]:checked:before,[type="radio"]:checked:before{position:absolute}[type="checkbox"]:checked:before{content:'\2713';font-family:sans-serif;font-size:calc(1rem + var(--universal-padding) / 2);top:calc(0rem - var(--universal-padding));left:calc(var(--universal-padding) / 4)}[type="radio"]{border-radius:100%}[type="radio"]:checked:before{border-radius:100%;content:'';top:calc(.0625rem + var(--universal-padding) / 2);left:calc(.0625rem + var(--universal-padding) / 2);background:var(--input-fore-color);width:0.5rem;height:0.5rem}:placeholder-shown{color:var(--input-fore-color)}::-ms-placeholder{color:var(--input-fore-color);opacity:0.54}button::-moz-focus-inner,[type="button"]::-moz-focus-inner,[type="reset"]::-moz-focus-inner,[type="submit"]::-moz-focus-inner{border-style:none;padding:0}button,html [type="button"],[type="reset"],[type="submit"]{-webkit-appearance:button}button{overflow:visible;text-transform:none}button,[type="button"],[type="submit"],[type="reset"],a.button,label.button,.button,a[role="button"],label[role="button"],[role="button"]{display:inline-block;background:var(--button-back-color);color:var(--button-fore-color);border:.0625rem solid var(--button-border-color);border-radius:var(--universal-border-radius);padding:var(--universal-padding) calc(1.5 * var(--universal-padding));margin:var(--universal-margin);text-decoration:none;cursor:pointer;transition:background 0.3s}button:hover,button:focus,[type="button"]:hover,[type="button"]:focus,[type="submit"]:hover,[type="submit"]:focus,[type="reset"]:hover,[type="reset"]:focus,a.button:hover,a.button:focus,label.button:hover,label.button:focus,.button:hover,.button:focus,a[role="button"]:hover,a[role="button"]:focus,label[role="button"]:hover,label[role="button"]:focus,[role="button"]:hover,[role="button"]:focus{background:var(--button-hover-back-color);border-color:var(--button-hover-border-color)}input:disabled,input[disabled],textarea:disabled,textarea[disabled],select:disabled,select[disabled],button:disabled,button[disabled],.button:disabled,.button[disabled],[role="button"]:disabled,[role="button"][disabled]{cursor:not-allowed;opacity:.75}.button-group{display:flex;border:.0625rem solid var(--button-group-border-color);border-radius:var(--universal-border-radius);margin:var(--universal-margin)}.button-group>button,.button-group [type="button"],.button-group>[type="submit"],.button-group>[type="reset"],.button-group>.button,.button-group>[role="button"]{margin:0;max-width:100%;flex:1 1 auto;text-align:center;border:0;border-radius:0;box-shadow:none}.button-group>:not(:first-child){border-left:.0625rem solid var(--button-group-border-color)}@media screen and (max-width: 767px){.button-group{flex-direction:column}.button-group>:not(:first-child){border:0;border-top:.0625rem solid var(--button-group-border-color)}}button.primary,[type="button"].primary,[type="submit"].primary,[type="reset"].primary,.button.primary,[role="button"].primary{--button-back-color:#1976d2;--button-fore-color:#f8f8f8}button.primary:hover,button.primary:focus,[type="button"].primary:hover,[type="button"].primary:focus,[type="submit"].primary:hover,[type="submit"].primary:focus,[type="reset"].primary:hover,[type="reset"].primary:focus,.button.primary:hover,.button.primary:focus,[role="button"].primary:hover,[role="button"].primary:focus{--button-hover-back-color:#1565c0}button.secondary,[type="button"].secondary,[type="submit"].secondary,[type="reset"].secondary,.button.secondary,[role="button"].secondary{--button-back-color:#d32f2f;--button-fore-color:#f8f8f8}button.secondary:hover,button.secondary:focus,[type="button"].secondary:hover,[type="button"].secondary:focus,[type="submit"].secondary:hover,[type="submit"].secondary:focus,[type="reset"].secondary:hover,[type="reset"].secondary:focus,.button.secondary:hover,.button.secondary:focus,[role="button"].secondary:hover,[role="button"].secondary:focus{--button-hover-back-color:#c62828}button.tertiary,[type="button"].tertiary,[type="submit"].tertiary,[type="reset"].tertiary,.button.tertiary,[role="button"].tertiary{--button-back-color:#308732;--button-fore-color:#f8f8f8}button.tertiary:hover,button.tertiary:focus,[type="button"].tertiary:hover,[type="button"].tertiary:focus,[type="submit"].tertiary:hover,[type="submit"].tertiary:focus,[type="reset"].tertiary:hover,[type="reset"].tertiary:focus,.button.tertiary:hover,.button.tertiary:focus,[role="button"].tertiary:hover,[role="button"].tertiary:focus{--button-hover-back-color:#277529}button.inverse,[type="button"].inverse,[type="submit"].inverse,[type="reset"].inverse,.button.inverse,[role="button"].inverse{--button-back-color:#212121;--button-fore-color:#f8f8f8}button.inverse:hover,button.inverse:focus,[type="button"].inverse:hover,[type="button"].inverse:focus,[type="submit"].inverse:hover,[type="submit"].inverse:focus,[type="reset"].inverse:hover,[type="reset"].inverse:focus,.button.inverse:hover,.button.inverse:focus,[role="button"].inverse:hover,[role="button"].inverse:focus{--button-hover-back-color:#111}button.small,[type="button"].small,[type="submit"].small,[type="reset"].small,.button.small,[role="button"].small{padding:calc(0.5 * var(--universal-padding)) calc(0.75 * var(--universal-padding));margin:var(--universal-margin)}button.large,[type="button"].large,[type="submit"].large,[type="reset"].large,.button.large,[role="button"].large{padding:calc(1.5 * var(--universal-padding)) calc(2 * var(--universal-padding));margin:var(--universal-margin)}:root{--header-back-color:#f8f8f8;--header-hover-back-color:#f0f0f0;--header-fore-color:#444;--header-border-color:#ddd;--nav-back-color:#f8f8f8;--nav-hover-back-color:#f0f0f0;--nav-fore-color:#444;--nav-border-color:#ddd;--nav-link-color:#0277bd;--footer-fore-color:#444;--footer-back-color:#f8f8f8;--footer-border-color:#ddd;--footer-link-color:#0277bd;--drawer-back-color:#f8f8f8;--drawer-hover-back-color:#f0f0f0;--drawer-border-color:#ddd;--drawer-close-color:#444}header{height:3.1875rem;background:var(--header-back-color);color:var(--header-fore-color);border-bottom:.0625rem solid var(--header-border-color);padding:calc(var(--universal-padding) / 4) 0;white-space:nowrap;overflow-x:auto;overflow-y:hidden}header.row{box-sizing:content-box}header .logo{color:var(--header-fore-color);font-size:1.75rem;padding:var(--universal-padding) calc(2 * var(--universal-padding));text-decoration:none}header button,header [type="button"],header .button,header [role="button"]{box-sizing:border-box;position:relative;top:calc(0rem - var(--universal-padding) / 4);height:calc(3.1875rem + var(--universal-padding) / 2);background:var(--header-back-color);line-height:calc(3.1875rem - var(--universal-padding) * 1.5);text-align:center;color:var(--header-fore-color);border:0;border-radius:0;margin:0;text-transform:uppercase}header button:hover,header button:focus,header [type="button"]:hover,header [type="button"]:focus,header .button:hover,header .button:focus,header [role="button"]:hover,header [role="button"]:focus{background:var(--header-hover-back-color)}nav{background:var(--nav-back-color);color:var(--nav-fore-color);border:.0625rem solid var(--nav-border-color);border-radius:var(--universal-border-radius);margin:var(--universal-margin)}nav *{padding:var(--universal-padding) calc(1.5 * var(--universal-padding))}nav a,nav a:visited{display:block;color:var(--nav-link-color);border-radius:var(--universal-border-radius);transition:background 0.3s}nav a:hover,nav a:focus,nav a:visited:hover,nav a:visited:focus{text-decoration:none;background:var(--nav-hover-back-color)}nav .sublink-1{position:relative;margin-left:calc(2 * var(--universal-padding))}nav .sublink-1:before{position:absolute;left:calc(var(--universal-padding) - 1 * var(--universal-padding));top:-.0625rem;content:'';height:100%;border:.0625rem solid var(--nav-border-color);border-left:0}nav .sublink-2{position:relative;margin-left:calc(4 * var(--universal-padding))}nav .sublink-2:before{position:absolute;left:calc(var(--universal-padding) - 3 * var(--universal-padding));top:-.0625rem;content:'';height:100%;border:.0625rem solid var(--nav-border-color);border-left:0}footer{background:var(--footer-back-color);color:var(--footer-fore-color);border-top:.0625rem solid var(--footer-border-color);padding:calc(2 * var(--universal-padding)) var(--universal-padding);font-size:.875rem}footer a,footer a:visited{color:var(--footer-link-color)}header.sticky{position:-webkit-sticky;position:sticky;z-index:1101;top:0}footer.sticky{position:-webkit-sticky;position:sticky;z-index:1101;bottom:0}.drawer-toggle:before{display:inline-block;position:relative;vertical-align:bottom;content:'\00a0\2261\00a0';font-family:sans-serif;font-size:1.5em}@media screen and (min-width: 768px){.drawer-toggle:not(.persistent){display:none}}[type="checkbox"].drawer{height:1px;width:1px;margin:-1px;overflow:hidden;position:absolute;clip:rect(0 0 0 0);-webkit-clip-path:inset(100%);clip-path:inset(100%)}[type="checkbox"].drawer+*{display:block;box-sizing:border-box;position:fixed;top:0;width:320px;height:100vh;overflow-y:auto;background:var(--drawer-back-color);border:.0625rem solid var(--drawer-border-color);border-radius:0;margin:0;z-index:1110;right:-320px;transition:right 0.3s}[type="checkbox"].drawer+* .drawer-close{position:absolute;top:var(--universal-margin);right:var(--universal-margin);z-index:1111;width:2rem;height:2rem;border-radius:var(--universal-border-radius);padding:var(--universal-padding);margin:0;cursor:pointer;transition:background 0.3s}[type="checkbox"].drawer+* .drawer-close:before{display:block;content:'\00D7';color:var(--drawer-close-color);position:relative;font-family:sans-serif;font-size:2rem;line-height:1;text-align:center}[type="checkbox"].drawer+* .drawer-close:hover,[type="checkbox"].drawer+* .drawer-close:focus{background:var(--drawer-hover-back-color)}@media screen and (max-width: 320px){[type="checkbox"].drawer+*{width:100%}}[type="checkbox"].drawer:checked+*{right:0}@media screen and (min-width: 768px){[type="checkbox"].drawer:not(.persistent)+*{position:static;height:100%;z-index:1100}[type="checkbox"].drawer:not(.persistent)+* .drawer-close{display:none}}:root{--table-border-color:#aaa;--table-border-separator-color:#666;--table-head-back-color:#e6e6e6;--table-head-fore-color:#111;--table-body-back-color:#f8f8f8;--table-body-fore-color:#111;--table-body-alt-back-color:#eee}table{border-collapse:separate;border-spacing:0;margin:0;display:flex;flex:0 1 auto;flex-flow:row wrap;padding:var(--universal-padding);padding-top:0}table caption{font-size:1.5rem;margin:calc(2 * var(--universal-margin)) 0;max-width:100%;flex:0 0 100%}table thead,table tbody{display:flex;flex-flow:row wrap;border:.0625rem solid var(--table-border-color)}table thead{z-index:999;border-radius:var(--universal-border-radius) var(--universal-border-radius) 0 0;border-bottom:.0625rem solid var(--table-border-separator-color)}table tbody{border-top:0;margin-top:calc(0 - var(--universal-margin));border-radius:0 0 var(--universal-border-radius) var(--universal-border-radius)}table tr{display:flex;padding:0}table th,table td{padding:calc(2 * var(--universal-padding))}table th{text-align:left;background:var(--table-head-back-color);color:var(--table-head-fore-color)}table td{background:var(--table-body-back-color);color:var(--table-body-fore-color);border-top:.0625rem solid var(--table-border-color)}table:not(.horizontal){overflow:auto;max-height:400px}table:not(.horizontal) thead,table:not(.horizontal) tbody{max-width:100%;flex:0 0 100%}table:not(.horizontal) tr{flex-flow:row wrap;flex:0 0 100%}table:not(.horizontal) th,table:not(.horizontal) td{flex:1 0 0%;overflow:hidden;text-overflow:ellipsis}table:not(.horizontal) thead{position:sticky;top:0}table:not(.horizontal) tbody tr:first-child td{border-top:0}table.horizontal{border:0}table.horizontal thead,table.horizontal tbody{border:0;flex:.2 0 0;flex-flow:row nowrap}table.horizontal tbody{overflow:auto;justify-content:space-between;flex:.8 0 0;margin-left:0;padding-bottom:calc(var(--universal-padding) / 4)}table.horizontal tr{flex-direction:column;flex:1 0 auto}table.horizontal th,table.horizontal td{width:auto;border:0;border-bottom:.0625rem solid var(--table-border-color)}table.horizontal th:not(:first-child),table.horizontal td:not(:first-child){border-top:0}table.horizontal th{text-align:right;border-left:.0625rem solid var(--table-border-color);border-right:.0625rem solid var(--table-border-separator-color)}table.horizontal thead tr:first-child{padding-left:0}table.horizontal th:first-child,table.horizontal td:first-child{border-top:.0625rem solid var(--table-border-color)}table.horizontal tbody tr:last-child td{border-right:.0625rem solid var(--table-border-color)}table.horizontal tbody tr:last-child td:first-child{border-top-right-radius:0.25rem}table.horizontal tbody tr:last-child td:last-child{border-bottom-right-radius:0.25rem}table.horizontal thead tr:first-child th:first-child{border-top-left-radius:0.25rem}table.horizontal thead tr:first-child th:last-child{border-bottom-left-radius:0.25rem}@media screen and (max-width: 767px){table,table.horizontal{border-collapse:collapse;border:0;width:100%;display:table}table thead,table th,table.horizontal thead,table.horizontal th{border:0;height:1px;width:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;clip:rect(0 0 0 0);-webkit-clip-path:inset(100%);clip-path:inset(100%)}table tbody,table.horizontal tbody{border:0;display:table-row-group}table tr,table.horizontal tr{display:block;border:.0625rem solid var(--table-border-color);border-radius:var(--universal-border-radius);background:#fafafa;padding:var(--universal-padding);margin:var(--universal-margin);margin-bottom:calc(2 * var(--universal-margin))}table th,table td,table.horizontal th,table.horizontal td{width:auto}table td,table.horizontal td{display:block;border:0;text-align:right}table td:before,table.horizontal td:before{content:attr(data-label);float:left;font-weight:600}table th:first-child,table td:first-child,table.horizontal th:first-child,table.horizontal td:first-child{border-top:0}table tbody tr:last-child td,table.horizontal tbody tr:last-child td{border-right:0}}:root{--table-body-alt-back-color:#eee}table.striped tr:nth-of-type(2n)>td{background:var(--table-body-alt-back-color)}@media screen and (max-width: 768px){table.striped tr:nth-of-type(2n){background:var(--table-body-alt-back-color)}}:root{--table-body-hover-back-color:#90caf9}table.hoverable tr:hover,table.hoverable tr:hover>td,table.hoverable tr:focus,table.hoverable tr:focus>td{background:var(--table-body-hover-back-color)}@media screen and (max-width: 768px){table.hoverable tr:hover,table.hoverable tr:hover>td,table.hoverable tr:focus,table.hoverable tr:focus>td{background:var(--table-body-hover-back-color)}}:root{--mark-back-color:#0277bd;--mark-fore-color:#fafafa}mark{background:var(--mark-back-color);color:var(--mark-fore-color);font-size:.95em;line-height:1em;border-radius:var(--universal-border-radius);padding:calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2)}mark.inline-block{display:inline-block;font-size:1em;line-height:1.5;padding:calc(var(--universal-padding) / 2) var(--universal-padding)}:root{--toast-back-color:#424242;--toast-fore-color:#fafafa}.toast{position:fixed;bottom:calc(var(--universal-margin) * 3);left:50%;transform:translate(-50%, -50%);z-index:1111;color:var(--toast-fore-color);background:var(--toast-back-color);border-radius:calc(var(--universal-border-radius) * 16);padding:var(--universal-padding) calc(var(--universal-padding) * 3)}:root{--tooltip-back-color:#212121;--tooltip-fore-color:#fafafa}.tooltip{position:relative;display:inline-block}.tooltip:before,.tooltip:after{position:absolute;opacity:0;clip:rect(0 0 0 0);-webkit-clip-path:inset(100%);clip-path:inset(100%);transition:all 0.3s;z-index:1010;left:50%}.tooltip:not(.bottom):before,.tooltip:not(.bottom):after{bottom:75%}.tooltip.bottom:before,.tooltip.bottom:after{top:75%}.tooltip:hover:before,.tooltip:hover:after,.tooltip:focus:before,.tooltip:focus:after{opacity:1;clip:auto;-webkit-clip-path:inset(0%);clip-path:inset(0%)}.tooltip:before{content:'';background:transparent;border:var(--universal-margin) solid transparent;left:calc(50% - var(--universal-margin))}.tooltip:not(.bottom):before{border-top-color:#212121}.tooltip.bottom:before{border-bottom-color:#212121}.tooltip:after{content:attr(aria-label);color:var(--tooltip-fore-color);background:var(--tooltip-back-color);border-radius:var(--universal-border-radius);padding:var(--universal-padding);white-space:nowrap;transform:translateX(-50%)}.tooltip:not(.bottom):after{margin-bottom:calc(2 * var(--universal-margin))}.tooltip.bottom:after{margin-top:calc(2 * var(--universal-margin))}:root{--modal-overlay-color:rgba(0,0,0,0.45);--modal-close-color:#444;--modal-close-hover-color:#f0f0f0}[type="checkbox"].modal{height:1px;width:1px;margin:-1px;overflow:hidden;position:absolute;clip:rect(0 0 0 0);-webkit-clip-path:inset(100%);clip-path:inset(100%)}[type="checkbox"].modal+div{position:fixed;top:0;left:0;display:none;width:100vw;height:100vh;background:var(--modal-overlay-color)}[type="checkbox"].modal+div .card{margin:0 auto;max-height:50vh;overflow:auto}[type="checkbox"].modal+div .card .modal-close{position:absolute;top:0;right:0;width:1.75rem;height:1.75rem;border-radius:var(--universal-border-radius);padding:var(--universal-padding);margin:0;cursor:pointer;transition:background 0.3s}[type="checkbox"].modal+div .card .modal-close:before{display:block;content:'\00D7';color:var(--modal-close-color);position:relative;font-family:sans-serif;font-size:1.75rem;line-height:1;text-align:center}[type="checkbox"].modal+div .card .modal-close:hover,[type="checkbox"].modal+div .card .modal-close:focus{background:var(--modal-close-hover-color)}[type="checkbox"].modal:checked+div{display:flex;flex:0 1 auto;z-index:1200}[type="checkbox"].modal:checked+div .card .modal-close{z-index:1211}:root{--collapse-label-back-color:#e8e8e8;--collapse-label-fore-color:#212121;--collapse-label-hover-back-color:#f0f0f0;--collapse-selected-label-back-color:#ececec;--collapse-border-color:#ddd;--collapse-content-back-color:#fafafa;--collapse-selected-label-border-color:#0277bd}.collapse{width:calc(100% - 2 * var(--universal-margin));opacity:1;display:flex;flex-direction:column;margin:var(--universal-margin);border-radius:var(--universal-border-radius)}.collapse>[type="radio"],.collapse>[type="checkbox"]{height:1px;width:1px;margin:-1px;overflow:hidden;position:absolute;clip:rect(0 0 0 0);-webkit-clip-path:inset(100%);clip-path:inset(100%)}.collapse>label{flex-grow:1;display:inline-block;height:1.5rem;cursor:pointer;transition:background 0.3s;color:var(--collapse-label-fore-color);background:var(--collapse-label-back-color);border:.0625rem solid var(--collapse-border-color);padding:calc(1.5 * var(--universal-padding))}.collapse>label:hover,.collapse>label:focus{background:var(--collapse-label-hover-back-color)}.collapse>label+div{flex-basis:auto;height:1px;width:1px;margin:-1px;overflow:hidden;position:absolute;clip:rect(0 0 0 0);-webkit-clip-path:inset(100%);clip-path:inset(100%);transition:max-height 0.3s;max-height:1px}.collapse>:checked+label{background:var(--collapse-selected-label-back-color);border-bottom-color:var(--collapse-selected-label-border-color)}.collapse>:checked+label+div{box-sizing:border-box;position:relative;width:100%;height:auto;overflow:auto;margin:0;background:var(--collapse-content-back-color);border:.0625rem solid var(--collapse-border-color);border-top:0;padding:var(--universal-padding);clip:auto;-webkit-clip-path:inset(0%);clip-path:inset(0%);max-height:400px}.collapse>label:not(:first-of-type){border-top:0}.collapse>label:first-of-type{border-radius:var(--universal-border-radius) var(--universal-border-radius) 0 0}.collapse>label:last-of-type:not(:first-of-type){border-radius:0 0 var(--universal-border-radius) var(--universal-border-radius)}.collapse>label:last-of-type:first-of-type{border-radius:var(--universal-border-radius)}.collapse>:checked:last-of-type:not(:first-of-type)+label{border-radius:0}.collapse>:checked:last-of-type+label+div{border-radius:0 0 var(--universal-border-radius) var(--universal-border-radius)}mark.secondary{--mark-back-color:#d32f2f}mark.tertiary{--mark-back-color:#308732}mark.tag{padding:calc(var(--universal-padding)/2) var(--universal-padding);border-radius:1em}:root{--progress-back-color:#ddd;--progress-fore-color:#555}progress{display:block;vertical-align:baseline;-webkit-appearance:none;-moz-appearance:none;appearance:none;height:.75rem;width:calc(100% - 2 * var(--universal-margin));margin:var(--universal-margin);border:0;border-radius:calc(2 * var(--universal-border-radius));background:var(--progress-back-color);color:var(--progress-fore-color)}progress::-webkit-progress-value{background:var(--progress-fore-color);border-top-left-radius:calc(2 * var(--universal-border-radius));border-bottom-left-radius:calc(2 * var(--universal-border-radius))}progress::-webkit-progress-bar{background:var(--progress-back-color)}progress::-moz-progress-bar{background:var(--progress-fore-color);border-top-left-radius:calc(2 * var(--universal-border-radius));border-bottom-left-radius:calc(2 * var(--universal-border-radius))}progress[value="1000"]::-webkit-progress-value{border-radius:calc(2 * var(--universal-border-radius))}progress[value="1000"]::-moz-progress-bar{border-radius:calc(2 * var(--universal-border-radius))}progress.inline{display:inline-block;vertical-align:middle;width:60%}:root{--spinner-back-color:#ddd;--spinner-fore-color:#555}@keyframes spinner-donut-anim{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.spinner{display:inline-block;margin:var(--universal-margin);border:.25rem solid var(--spinner-back-color);border-left:.25rem solid var(--spinner-fore-color);border-radius:50%;width:1.25rem;height:1.25rem;animation:spinner-donut-anim 1.2s linear infinite}progress.primary{--progress-fore-color:#1976d2}progress.secondary{--progress-fore-color:#d32f2f}progress.tertiary{--progress-fore-color:#308732}.spinner.primary{--spinner-fore-color:#1976d2}.spinner.secondary{--spinner-fore-color:#d32f2f}.spinner.tertiary{--spinner-fore-color:#308732}span[class^='icon-']{display:inline-block;height:1em;width:1em;vertical-align:-0.125em;background-size:contain;margin:0 calc(var(--universal-margin) / 4)}span[class^='icon-'].secondary{-webkit-filter:invert(25%);filter:invert(25%)}span[class^='icon-'].inverse{-webkit-filter:invert(100%);filter:invert(100%)}span.icon-alert{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12' y2='16'%3E%3C/line%3E%3C/svg%3E")}span.icon-bookmark{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z'%3E%3C/path%3E%3C/svg%3E")}span.icon-calendar{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E")}span.icon-credit{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='1' y='4' width='22' height='16' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='1' y1='10' x2='23' y2='10'%3E%3C/line%3E%3C/svg%3E")}span.icon-edit{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 14.66V20a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h5.34'%3E%3C/path%3E%3Cpolygon points='18 2 22 6 12 16 8 16 8 12 18 2'%3E%3C/polygon%3E%3C/svg%3E")}span.icon-link{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6'%3E%3C/path%3E%3Cpolyline points='15 3 21 3 21 9'%3E%3C/polyline%3E%3Cline x1='10' y1='14' x2='21' y2='3'%3E%3C/line%3E%3C/svg%3E")}span.icon-help{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3'%3E%3C/path%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='17' x2='12' y2='17'%3E%3C/line%3E%3C/svg%3E")}span.icon-home{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z'%3E%3C/path%3E%3Cpolyline points='9 22 9 12 15 12 15 22'%3E%3C/polyline%3E%3C/svg%3E")}span.icon-info{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='16' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='8' x2='12' y2='8'%3E%3C/line%3E%3C/svg%3E")}span.icon-lock{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='11' width='18' height='11' rx='2' ry='2'%3E%3C/rect%3E%3Cpath d='M7 11V7a5 5 0 0 1 10 0v4'%3E%3C/path%3E%3C/svg%3E")}span.icon-mail{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z'%3E%3C/path%3E%3Cpolyline points='22,6 12,13 2,6'%3E%3C/polyline%3E%3C/svg%3E")}span.icon-location{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z'%3E%3C/path%3E%3Ccircle cx='12' cy='10' r='3'%3E%3C/circle%3E%3C/svg%3E")}span.icon-phone{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z'%3E%3C/path%3E%3C/svg%3E")}span.icon-rss{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 11a9 9 0 0 1 9 9'%3E%3C/path%3E%3Cpath d='M4 4a16 16 0 0 1 16 16'%3E%3C/path%3E%3Ccircle cx='5' cy='19' r='1'%3E%3C/circle%3E%3C/svg%3E")}span.icon-search{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E")}span.icon-settings{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='3'%3E%3C/circle%3E%3Cpath d='M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z'%3E%3C/path%3E%3C/svg%3E")}span.icon-share{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='18' cy='5' r='3'%3E%3C/circle%3E%3Ccircle cx='6' cy='12' r='3'%3E%3C/circle%3E%3Ccircle cx='18' cy='19' r='3'%3E%3C/circle%3E%3Cline x1='8.59' y1='13.51' x2='15.42' y2='17.49'%3E%3C/line%3E%3Cline x1='15.41' y1='6.51' x2='8.59' y2='10.49'%3E%3C/line%3E%3C/svg%3E")}span.icon-cart{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='9' cy='21' r='1'%3E%3C/circle%3E%3Ccircle cx='20' cy='21' r='1'%3E%3C/circle%3E%3Cpath d='M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6'%3E%3C/path%3E%3C/svg%3E")}span.icon-upload{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4'%3E%3C/path%3E%3Cpolyline points='17 8 12 3 7 8'%3E%3C/polyline%3E%3Cline x1='12' y1='3' x2='12' y2='15'%3E%3C/line%3E%3C/svg%3E")}span.icon-user{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2'%3E%3C/path%3E%3Ccircle cx='12' cy='7' r='4'%3E%3C/circle%3E%3C/svg%3E")}:root{--generic-border-color:rgba(0,0,0,0.3);--generic-box-shadow:0 .25rem .25rem 0 rgba(0,0,0,0.125),0 .125rem .125rem -.125rem rgba(0,0,0,0.25)}.hidden{display:none !important}.visually-hidden{position:absolute !important;width:1px !important;height:1px !important;margin:-1px !important;border:0 !important;padding:0 !important;clip:rect(0 0 0 0) !important;-webkit-clip-path:inset(100%) !important;clip-path:inset(100%) !important;overflow:hidden !important}.bordered{border:.0625rem solid var(--generic-border-color) !important}.rounded{border-radius:var(--universal-border-radius) !important}.circular{border-radius:50% !important}.shadowed{box-shadow:var(--generic-box-shadow) !important}.responsive-margin{margin:calc(var(--universal-margin) / 4) !important}@media screen and (min-width: 768px){.responsive-margin{margin:calc(var(--universal-margin) / 2) !important}}@media screen and (min-width: 1280px){.responsive-margin{margin:var(--universal-margin) !important}}.responsive-padding{padding:calc(var(--universal-padding) / 4) !important}@media screen and (min-width: 768px){.responsive-padding{padding:calc(var(--universal-padding) / 2) !important}}@media screen and (min-width: 1280px){.responsive-padding{padding:var(--universal-padding) !important}}@media screen and (max-width: 767px){.hidden-sm{display:none !important}}@media screen and (min-width: 768px) and (max-width: 1279px){.hidden-md{display:none !important}}@media screen and (min-width: 1280px){.hidden-lg{display:none !important}}@media screen and (max-width: 767px){.visually-hidden-sm{position:absolute !important;width:1px !important;height:1px !important;margin:-1px !important;border:0 !important;padding:0 !important;clip:rect(0 0 0 0) !important;-webkit-clip-path:inset(100%) !important;clip-path:inset(100%) !important;overflow:hidden !important}}@media screen and (min-width: 768px) and (max-width: 1279px){.visually-hidden-md{position:absolute !important;width:1px !important;height:1px !important;margin:-1px !important;border:0 !important;padding:0 !important;clip:rect(0 0 0 0) !important;-webkit-clip-path:inset(100%) !important;clip-path:inset(100%) !important;overflow:hidden !important}}@media screen and (min-width: 1280px){.visually-hidden-lg{position:absolute !important;width:1px !important;height:1px !important;margin:-1px !important;border:0 !important;padding:0 !important;clip:rect(0 0 0 0) !important;-webkit-clip-path:inset(100%) !important;clip-path:inset(100%) !important;overflow:hidden !important}}
diff --git a/lab/assets/css/normalize.css b/lab/assets/css/normalize.css
new file mode 100644
index 0000000..192eb9c
--- /dev/null
+++ b/lab/assets/css/normalize.css
@@ -0,0 +1,349 @@
+/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */
+
+/* Document
+ ========================================================================== */
+
+/**
+ * 1. Correct the line height in all browsers.
+ * 2. Prevent adjustments of font size after orientation changes in iOS.
+ */
+
+html {
+ line-height: 1.15; /* 1 */
+ -webkit-text-size-adjust: 100%; /* 2 */
+}
+
+/* Sections
+ ========================================================================== */
+
+/**
+ * Remove the margin in all browsers.
+ */
+
+body {
+ margin: 0;
+}
+
+/**
+ * Render the `main` element consistently in IE.
+ */
+
+main {
+ display: block;
+}
+
+/**
+ * Correct the font size and margin on `h1` elements within `section` and
+ * `article` contexts in Chrome, Firefox, and Safari.
+ */
+
+h1 {
+ font-size: 2em;
+ margin: 0.67em 0;
+}
+
+/* Grouping content
+ ========================================================================== */
+
+/**
+ * 1. Add the correct box sizing in Firefox.
+ * 2. Show the overflow in Edge and IE.
+ */
+
+hr {
+ box-sizing: content-box; /* 1 */
+ height: 0; /* 1 */
+ overflow: visible; /* 2 */
+}
+
+/**
+ * 1. Correct the inheritance and scaling of font size in all browsers.
+ * 2. Correct the odd `em` font sizing in all browsers.
+ */
+
+pre {
+ font-family: monospace, monospace; /* 1 */
+ font-size: 1em; /* 2 */
+}
+
+/* Text-level semantics
+ ========================================================================== */
+
+/**
+ * Remove the gray background on active links in IE 10.
+ */
+
+a {
+ background-color: transparent;
+}
+
+/**
+ * 1. Remove the bottom border in Chrome 57-
+ * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.
+ */
+
+abbr[title] {
+ border-bottom: none; /* 1 */
+ text-decoration: underline; /* 2 */
+ text-decoration: underline dotted; /* 2 */
+}
+
+/**
+ * Add the correct font weight in Chrome, Edge, and Safari.
+ */
+
+b,
+strong {
+ font-weight: bolder;
+}
+
+/**
+ * 1. Correct the inheritance and scaling of font size in all browsers.
+ * 2. Correct the odd `em` font sizing in all browsers.
+ */
+
+code,
+kbd,
+samp {
+ font-family: monospace, monospace; /* 1 */
+ font-size: 1em; /* 2 */
+}
+
+/**
+ * Add the correct font size in all browsers.
+ */
+
+small {
+ font-size: 80%;
+}
+
+/**
+ * Prevent `sub` and `sup` elements from affecting the line height in
+ * all browsers.
+ */
+
+sub,
+sup {
+ font-size: 75%;
+ line-height: 0;
+ position: relative;
+ vertical-align: baseline;
+}
+
+sub {
+ bottom: -0.25em;
+}
+
+sup {
+ top: -0.5em;
+}
+
+/* Embedded content
+ ========================================================================== */
+
+/**
+ * Remove the border on images inside links in IE 10.
+ */
+
+img {
+ border-style: none;
+}
+
+/* Forms
+ ========================================================================== */
+
+/**
+ * 1. Change the font styles in all browsers.
+ * 2. Remove the margin in Firefox and Safari.
+ */
+
+button,
+input,
+optgroup,
+select,
+textarea {
+ font-family: inherit; /* 1 */
+ font-size: 100%; /* 1 */
+ line-height: 1.15; /* 1 */
+ margin: 0; /* 2 */
+}
+
+/**
+ * Show the overflow in IE.
+ * 1. Show the overflow in Edge.
+ */
+
+button,
+input { /* 1 */
+ overflow: visible;
+}
+
+/**
+ * Remove the inheritance of text transform in Edge, Firefox, and IE.
+ * 1. Remove the inheritance of text transform in Firefox.
+ */
+
+button,
+select { /* 1 */
+ text-transform: none;
+}
+
+/**
+ * Correct the inability to style clickable types in iOS and Safari.
+ */
+
+button,
+[type="button"],
+[type="reset"],
+[type="submit"] {
+ -webkit-appearance: button;
+}
+
+/**
+ * Remove the inner border and padding in Firefox.
+ */
+
+button::-moz-focus-inner,
+[type="button"]::-moz-focus-inner,
+[type="reset"]::-moz-focus-inner,
+[type="submit"]::-moz-focus-inner {
+ border-style: none;
+ padding: 0;
+}
+
+/**
+ * Restore the focus styles unset by the previous rule.
+ */
+
+button:-moz-focusring,
+[type="button"]:-moz-focusring,
+[type="reset"]:-moz-focusring,
+[type="submit"]:-moz-focusring {
+ outline: 1px dotted ButtonText;
+}
+
+/**
+ * Correct the padding in Firefox.
+ */
+
+fieldset {
+ padding: 0.35em 0.75em 0.625em;
+}
+
+/**
+ * 1. Correct the text wrapping in Edge and IE.
+ * 2. Correct the color inheritance from `fieldset` elements in IE.
+ * 3. Remove the padding so developers are not caught out when they zero out
+ * `fieldset` elements in all browsers.
+ */
+
+legend {
+ box-sizing: border-box; /* 1 */
+ color: inherit; /* 2 */
+ display: table; /* 1 */
+ max-width: 100%; /* 1 */
+ padding: 0; /* 3 */
+ white-space: normal; /* 1 */
+}
+
+/**
+ * Add the correct vertical alignment in Chrome, Firefox, and Opera.
+ */
+
+progress {
+ vertical-align: baseline;
+}
+
+/**
+ * Remove the default vertical scrollbar in IE 10+.
+ */
+
+textarea {
+ overflow: auto;
+}
+
+/**
+ * 1. Add the correct box sizing in IE 10.
+ * 2. Remove the padding in IE 10.
+ */
+
+[type="checkbox"],
+[type="radio"] {
+ box-sizing: border-box; /* 1 */
+ padding: 0; /* 2 */
+}
+
+/**
+ * Correct the cursor style of increment and decrement buttons in Chrome.
+ */
+
+[type="number"]::-webkit-inner-spin-button,
+[type="number"]::-webkit-outer-spin-button {
+ height: auto;
+}
+
+/**
+ * 1. Correct the odd appearance in Chrome and Safari.
+ * 2. Correct the outline style in Safari.
+ */
+
+[type="search"] {
+ -webkit-appearance: textfield; /* 1 */
+ outline-offset: -2px; /* 2 */
+}
+
+/**
+ * Remove the inner padding in Chrome and Safari on macOS.
+ */
+
+[type="search"]::-webkit-search-decoration {
+ -webkit-appearance: none;
+}
+
+/**
+ * 1. Correct the inability to style clickable types in iOS and Safari.
+ * 2. Change font properties to `inherit` in Safari.
+ */
+
+::-webkit-file-upload-button {
+ -webkit-appearance: button; /* 1 */
+ font: inherit; /* 2 */
+}
+
+/* Interactive
+ ========================================================================== */
+
+/*
+ * Add the correct display in Edge, IE 10+, and Firefox.
+ */
+
+details {
+ display: block;
+}
+
+/*
+ * Add the correct display in all browsers.
+ */
+
+summary {
+ display: list-item;
+}
+
+/* Misc
+ ========================================================================== */
+
+/**
+ * Add the correct display in IE 10+.
+ */
+
+template {
+ display: none;
+}
+
+/**
+ * Add the correct display in IE 10.
+ */
+
+[hidden] {
+ display: none;
+}
diff --git a/lab/assets/images/illustration-ronce_1200x765px.png b/lab/assets/images/illustration-ronce_1200x765px.png
new file mode 100644
index 0000000..b59dad2
--- /dev/null
+++ b/lab/assets/images/illustration-ronce_1200x765px.png
Binary files differ
diff --git a/lab/assets/images/illustration-ronce_2400x1531px.png b/lab/assets/images/illustration-ronce_2400x1531px.png
new file mode 100644
index 0000000..aa87398
--- /dev/null
+++ b/lab/assets/images/illustration-ronce_2400x1531px.png
Binary files differ
diff --git a/lab/assets/images/illustration-ronce_800x510px.png b/lab/assets/images/illustration-ronce_800x510px.png
new file mode 100644
index 0000000..fe642ca
--- /dev/null
+++ b/lab/assets/images/illustration-ronce_800x510px.png
Binary files differ
diff --git a/lab/gimp/idee_adrien.png b/lab/gimp/idee_adrien.png
new file mode 100644
index 0000000..145afc8
--- /dev/null
+++ b/lab/gimp/idee_adrien.png
Binary files differ
diff --git a/lab/gimp/idee_adrien.xcf b/lab/gimp/idee_adrien.xcf
new file mode 100644
index 0000000..b25850f
--- /dev/null
+++ b/lab/gimp/idee_adrien.xcf
Binary files differ
diff --git a/lab/gimp/idee_adrien_commentaire_ronce.png b/lab/gimp/idee_adrien_commentaire_ronce.png
new file mode 100644
index 0000000..da0e896
--- /dev/null
+++ b/lab/gimp/idee_adrien_commentaire_ronce.png
Binary files differ
diff --git a/lab/index-fullwidth.html b/lab/index-fullwidth.html
new file mode 100644
index 0000000..4eb3282
--- /dev/null
+++ b/lab/index-fullwidth.html
@@ -0,0 +1,122 @@
+<!DOCTYPE html>
+<html>
+
+<head>
+ <meta charset="utf-8" />
+ <meta http-equiv="x-ua-compatible" content="ie=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+
+ <title>Deuxfleurs</title>
+
+ <!--<link rel="stylesheet" href="assets/css/chota.min.css">-->
+ <link rel="stylesheet" href="assets/css/deuxfleurs-chato-fullwidth.css">
+ <!--<link rel="stylesheet" href="assets/css/mini-default.min.css">-->
+</head>
+
+<body>
+ <div id="main-page" class="container">
+
+ <header>
+ <nav class="nav">
+ <div class="nav-left">
+ <a id="logo" href="#">Deuxfleurs</a>
+ </div>
+ <div class="nav-right">
+ <div class="tabs">
+ <a>Services</a>
+ <a class="active">Infrastructure</a>
+ <a>Logiciels</a>
+ <a>Vision</a>
+ </div>
+ </div>
+ </nav>
+
+ <div id="illustration"></div>
+ <!--<img src="assets/images/illustration-ronce_1200x765px.png">-->
+ </header>
+
+ <section class="row">
+ <div class="col-12">
+ <h1>Bienvenue chez Deuxfleurs !</h1>
+ </div>
+
+ <div class="col-6">
+ <p>
+ Nous sommes une association pour<br>
+ une informatique <b>écologique</b> et <b>humaine</b>,<br>
+ et nous sommes en <b>colère</b>.<br>
+ <small>Nous avons donc pris le maquis.</small>
+ </p>
+ </div>
+ </section>
+
+ <section class="row">
+ <div class="col-12-sm col-6-md">
+ <h2>Nous hébergeons</h2>
+ <p>
+ Celles et ceux qui ont besoin d'<b>outils libres</b><br>
+ pour discuter, collaborer, s'organiser, se divertir...
+ </p>
+ </div>
+
+ <div class="col-2-md"></div> <!-- vertical space -->
+
+ <div class="canopee right col-12-sm col-4-md">
+ <h2><small>Sans parasite !</small></h2>
+ <p>
+ Toutes nos constructions loufoques<br>
+ sont garanties <b>sans ver espion</b>.<br>
+ <small>Nous préférons le bon goût d'un logiciel bien fait.</small>
+ </p>
+ </div>
+ </section>
+
+ <section class="row">
+ <div class="canopee left col-12-sm col-4-md">
+ <h2><small>Infrastructure raisonnée</small></h2>
+ <p>
+ On essaye d'héberger nos ordinateurs <b>à la maison</b>.<br>
+ <small>Et c'est pas si facile !</small>
+ </p>
+ </div>
+
+ <div class="col-2-md"></div> <!-- vertical space -->
+
+ <div class="col-12-sm col-6-md">
+ <h2>Nous créons</h2>
+ <p>
+ Des logiciels pour améliorer<br>
+ et <b>interconnecter nos cabanes</b>.
+ </p>
+ </div>
+ </section>
+
+ <section class="row">
+ <div class="col-2-md"></div> <!-- vertical space -->
+ <div class="col-12-sm col-10-md">
+ <h2>Nous recrutons</h2>
+
+ <p>
+ Des bâtisseuses de cabanes ou <b>des évadés</b>...
+ </p>
+ </div>
+ </section>
+
+ <section>
+ <div class="branche row">
+ <div class="col-3-md"></div> <!-- vertical space -->
+ <div class="col-12-sm col-6-md">
+ <p>... des mondes d'en bas.</p>
+ </div>
+ <div class="col-3-md"></div> <!-- vertical space -->
+ </div> <!-- .branche -->
+ </section>
+
+ <footer class="is-right">
+ <small>Tous droits réservés à notre pangolin alcoolique.</small>
+ </footer>
+
+ </div> <!-- #main-page -->
+</body>
+
+</html> \ No newline at end of file
diff --git a/lab/index.html b/lab/index.html
new file mode 100644
index 0000000..1eb7ecf
--- /dev/null
+++ b/lab/index.html
@@ -0,0 +1,123 @@
+<!DOCTYPE html>
+<html>
+
+<head>
+ <meta charset="utf-8" />
+ <meta http-equiv="x-ua-compatible" content="ie=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+
+ <title>Deuxfleurs</title>
+
+ <!--<link rel="stylesheet" href="assets/css/chota.min.css">-->
+ <link rel="stylesheet" href="assets/css/deuxfleurs-chato.css">
+ <!--<link rel="stylesheet" href="assets/css/mini-default.min.css">-->
+</head>
+
+<body>
+ <div id="main-page" class="container">
+
+ <header>
+ <nav class="nav">
+ <div class="nav-left">
+ <a id="logo" href="#">Deuxfleurs</a>
+ </div>
+ <div class="nav-right">
+ <div class="tabs">
+ <a>Services</a>
+ <a class="active">Infrastructure</a>
+ <a>Logiciels</a>
+ <a>Vision</a>
+ </div>
+ </div>
+ </nav>
+
+ <img src="assets/images/illustration-ronce_1200x765px.png">
+ </header>
+
+ <main>
+ <section class="row">
+ <div class="col-12">
+ <h1>Bienvenue chez Deuxfleurs !</h1>
+ </div>
+
+ <div class="col-6">
+ <p>
+ Nous sommes une association pour<br>
+ une informatique <b>écologique</b> et <b>humaine</b>,<br>
+ et nous sommes en <b>colère</b>.<br>
+ <small>Nous avons donc pris le maquis.</small>
+ </p>
+ </div>
+ </section>
+
+ <section class="row">
+ <div class="col-12-sm col-6-md">
+ <h2>Nous hébergeons</h2>
+ <p>
+ Celles et ceux qui ont besoin d'<b>outils libres</b><br>
+ pour discuter, collaborer, s'organiser, se divertir...
+ </p>
+ </div>
+
+ <div class="col-2-md"></div> <!-- vertical space -->
+
+ <div class="canopee right col-12-sm col-4-md">
+ <h2><small>Sans parasite !</small></h2>
+ <p>
+ Toutes nos constructions loufoques<br>
+ sont garanties <b>sans ver espion</b>.<br>
+ <small>Nous préférons le bon goût d'un logiciel bien fait.</small>
+ </p>
+ </div>
+ </section>
+
+ <section class="row">
+ <div class="canopee left col-12-sm col-4-md">
+ <h2><small>Infrastructure raisonnée</small></h2>
+ <p>
+ On essaye d'héberger nos ordinateurs <b>à la maison</b>.<br>
+ <small>Et c'est pas si facile !</small>
+ </p>
+ </div>
+
+ <div class="col-2-md"></div> <!-- vertical space -->
+
+ <div class="col-12-sm col-6-md">
+ <h2>Nous créons</h2>
+ <p>
+ Des logiciels pour améliorer<br>
+ et <b>interconnecter nos cabanes</b>.
+ </p>
+ </div>
+ </section>
+
+ <section class="row">
+ <div class="col-2-md"></div> <!-- vertical space -->
+ <div class="col-12-sm col-10-md">
+ <h2>Nous recrutons</h2>
+
+ <p>
+ Des bâtisseuses de cabanes ou <b>des évadés</b>...
+ </p>
+ </div>
+ </section>
+
+ <section>
+ <div class="branche row">
+ <div class="col-3-md"></div> <!-- vertical space -->
+ <div class="col-12-sm col-6-md">
+ <p>... des mondes d'en bas.</p>
+ </div>
+ <div class="col-3-md"></div> <!-- vertical space -->
+ </div> <!-- .branche -->
+ </section>
+ </main>
+
+ <footer class="is-right">
+ <small>Tous droits réservés à notre pangolin alcoolique.</small>
+ </footer>
+
+ </div> <!-- #main-page -->
+</body>
+
+</html> \ No newline at end of file
diff --git a/lab/notes/framework_html.md b/lab/notes/framework_html.md
new file mode 100644
index 0000000..00bdc9a
--- /dev/null
+++ b/lab/notes/framework_html.md
@@ -0,0 +1,43 @@
+## Framework HTML
+
+__OUTDATED__
+
+### Pourquoi ?
+
+Un framework HTML, c'est un include CSS, et parfois du JS. Ca va de Bootstrap/Foundation, qui sont des framworks immenses (avec fonction « carrousel d'images » et une foule de trucs dont on se cogne) à Skeleton/Mini, qui essayent d'être le plus simple possible tout en apportant les fonctionnalités *vitales* à un site web moderne :
+
+* **responsive design** : les media queries and co, qui permettent de charger du contenu différent par taille de viewport, c'est du pur HTML5/CSS et c'est chiant à écrire à la main).
+
+ Le design par grille de 12 colonnes aide énormément à concevoir un site en pensant *mobile-first* : "Si cette div est vue sur mobile, faites qu'elle prenne toute la largeur. Si un écran PC large, faites qu'elle ne prenne que 4 colonnes sur 12."
+
+ Je constate que certains frameworks vraiment minimalistes ne permettent pas de définir un nombre de colonnes par div en fonction de la taille du viewport. C'est soit le système de colonnes, soit toutes les div font 12 sur petit viewport. Ça suffira ou pas ?
+
+* **normalisation**: chaque navigateur a sa propre idée de ce que devrait être la taille du corps de texte. Il faut redéfinir tous les défauts pour s'assurer un rendu homogène sur tout navigateur. C'est le taff de [Normalize.css](https://necolas.github.io/normalize.css/), inclut dans la plupart des frameworks HTML.
+
+* **sucre** : Si la box modale info/warning/error peut être déjà définie clairement une bonne fois pour toutes, on ne sera pas tentés d'en faire une implem par box au lieu de fouiller le CSS. Ce genre de trucs, c'est pas vital et faut pas que ça *bloat*.
+
+Non-goals :
+
+* **LESS/SCSS** : CSS avec des variables et des includes, dans l'idée du *Don't Repeat Yourself*. Personnellement ça me saoule d'avoir à compiler du CSS avant de display, ça m'intéresse pas.
+
+* **Node** : Plus généralement, tout framework HTML qui demande Node, ça me gave. On en aura assez à faire avec le templating Jinja ou autre.
+
+### Qui sont les candidats ?
+
+Sources : une recherche web "small html responsive framework" et [Awesome CSS](https://github.com/troxler/awesome-css-frameworks)
+
+* [mini.css](https://minicss.org/) (dépôt archivé, flexible reponsive grid, CSS variables, flexbox)
+
+ Essayé. Je voudrais un menu header à onglets sur PC qui se transforme en menu « [drawer](https://minicss.org/docs#drawer) » sur le côté pour mobile.
+ Il y a des briques pour faire à peu près ça, mais la complexité de la doc me décourage. Je préfère essayer quelque chose qui ait moins d'ambitions mais soit plus facile à utiliser. Go Chota.
+
+* [Skeleton](http://getskeleton.com/) (12 cols grid, but not responsive: either follow the defined number of columns, or full-size for small viewports)
+* [Pure](https://purecss.io/) (flexible responsive grid, with shitty class names)
+* **[Chota](https://jenil.github.io/chota/)** (flexible reponsive grid, CSS variables means recent browser versions only)
+* [Turret.css](https://turretcss.com/) (orienté accessibilité, pas de grille ?)
+
+### Décision
+
+On part sur [mini.css](https://minicss.org/), parce qu'il les features que j'aime, est pas verbeux, bien minifié, et est supporté par des navigateurs assez anciens.
+
+
diff --git a/lab/sandbox/assets b/lab/sandbox/assets
new file mode 120000
index 0000000..ec2e4be
--- /dev/null
+++ b/lab/sandbox/assets
@@ -0,0 +1 @@
+../assets \ No newline at end of file
diff --git a/lab/sandbox/parallax.html b/lab/sandbox/parallax.html
new file mode 100644
index 0000000..f3ab3da
--- /dev/null
+++ b/lab/sandbox/parallax.html
@@ -0,0 +1,70 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+ <title>CSS Scrolling Parallax</title>
+
+ <link rel="stylesheet" href="assets/css/chota.min.css">
+ <style type="text/css">
+ header {
+ background-image: url("assets/images/illustration-ronce_2400x1531px.png");
+ position: fixed;
+ height: 100vh;
+ width: 100vw;
+ /* Create the parallax scrolling effect */
+ /* background-attachment: fixed; */
+ background-position: center;
+ /* background-repeat: no-repeat; */
+ background-repeat: no-repeat;
+ background-size: cover;
+ }
+
+ header h1 {
+ text-align: center;
+ color: #fafafa;
+ margin-top: 35vh;
+ }
+
+
+ main {
+ max-width: 100%;
+ position: relative;
+ top: 95vh;
+ padding: 50px;
+ font-size: 20px;
+ }
+
+ section {
+ padding: 2rem;
+ margin-bottom: 4rem;
+ background-color: #fff;
+ }
+ </style>
+</head>
+
+<body>
+ <header>
+ <h1>Coucou</h1>
+ </header>
+ <main>
+ <section>
+ <h1>Cute Kitten</h1>
+ <p>Bacon ipsum dolor sit amet chicken pork loin hamburger ball tip, swine tenderloin salami meatball boudin tri-tip fatback shank bacon. Pork salami kevin, brisket spare ribs strip steak ham hock porchetta. Pork belly short loin tail porchetta. Pork pig meatball, beef ribs doner jerky tri-tip hamburger filet mignon strip steak ball tip ham tail tongue corned beef.</p>
+
+ <p>Flank spare ribs capicola, strip steak biltong pancetta bresaola tri-tip cow landjaeger. Short ribs sirloin beef ribs, flank capicola ribeye turducken. Sirloin boudin andouille tail. Ham flank tail sausage t-bone, jerky landjaeger kevin porchetta ground round pork belly.</p>
+ </section>
+ <section>
+ <h1>Boring</h1>
+ <p>Bacon ipsum dolor sit amet chicken pork loin hamburger ball tip, swine tenderloin salami meatball boudin tri-tip fatback shank bacon. Pork salami kevin, brisket spare ribs strip steak ham hock porchetta. Pork belly short loin tail porchetta. Pork pig meatball, beef ribs doner jerky tri-tip hamburger filet mignon strip steak ball tip ham tail tongue corned beef.</p>
+ </section>
+ <section>
+ <h1>Fluffy Kitten</h1>
+ <p>Bacon ipsum dolor sit amet chicken pork loin hamburger ball tip, swine tenderloin salami meatball boudin tri-tip fatback shank bacon. Pork salami kevin, brisket spare ribs strip steak ham hock porchetta. Pork belly short loin tail porchetta. Pork pig meatball, beef ribs doner jerky tri-tip hamburger filet mignon strip steak ball tip ham tail tongue corned beef.</p>
+ <p>Bacon ipsum dolor sit amet chicken pork loin hamburger ball tip, swine tenderloin salami meatball boudin tri-tip fatback shank bacon. Pork salami kevin, brisket spare ribs strip steak ham hock porchetta. Pork belly short loin tail porchetta. Pork pig meatball, beef ribs doner jerky tri-tip hamburger filet mignon strip steak ball tip ham tail tongue corned beef.</p>
+ </section>
+ </main>
+</body>
+
+</html> \ No newline at end of file