diff --git a/maquette-tests/.gitignore b/maquette-tests/.gitignore
new file mode 100644
index 0000000..6e5f361
--- /dev/null
+++ b/maquette-tests/.gitignore
@@ -0,0 +1,3 @@
+.DS_Store
+.zip
+weaver_manager.sh
\ No newline at end of file
diff --git a/maquette-tests/.gitlab-ci.yml b/maquette-tests/.gitlab-ci.yml
new file mode 100644
index 0000000..5bf5534
--- /dev/null
+++ b/maquette-tests/.gitlab-ci.yml
@@ -0,0 +1,28 @@
+stages:
+ - update
+
+update_subtree:
+ stage: update
+ script:
+ - echo "Configuring Git user..."
+ - git config --global user.email "bot@csspageweaver.org"
+ - git config --global user.name "Update Bot"
+
+ - echo "Updating subtree..."
+ - git subtree pull --prefix=csspageweaver https://gitlab.com/csspageweaver/csspageweaver.git main --squash
+
+ # Fetch the latest changes from the remote to compare
+ - git fetch origin
+
+ # Check if there are any changes to push
+ - |
+ if git diff --quiet origin/main; then
+ echo "No changes to push."
+ else
+ echo "Pushing changes..."
+ git push https://oauth2:${ACCESS_TOKEN}@gitlab.com/csspageweaver/boilerplate.git HEAD:main
+ fi
+
+ only:
+ - schedules
+ - triggered
diff --git a/maquette-tests/assets/css/base/_body.scss b/maquette-tests/assets/css/base/_body.scss
new file mode 100644
index 0000000..3bb5dbb
--- /dev/null
+++ b/maquette-tests/assets/css/base/_body.scss
@@ -0,0 +1,25 @@
+* {
+ margin: 0;
+ padding: 0;
+ box-sizing: border-box;
+ -webkit-font-smoothing: antialiased;
+ -moz-font-smoothing: antialiased;
+ -o-font-smoothing: antialiased
+}
+a {
+ color: currentColor;
+}
+
+
+// .inline-note{
+// color: red;
+// }
+
+body {
+ --font-size: 11px;
+ --baseline: 18px;
+ font-family: var(--font);
+ font-size: var(--font-size);
+ line-height: var(--baseline);
+
+}
\ No newline at end of file
diff --git a/maquette-tests/assets/css/base/_layout.scss b/maquette-tests/assets/css/base/_layout.scss
new file mode 100644
index 0000000..fcd0f5c
--- /dev/null
+++ b/maquette-tests/assets/css/base/_layout.scss
@@ -0,0 +1,66 @@
+@media print{
+
+ @page {
+ size: 165mm 240mm;
+ margin-top: 10mm;
+ margin-bottom: 20mm;
+
+ }
+
+ @page:left{
+ margin-left: 35mm;
+ margin-right: 30mm;
+ @bottom-left-corner{
+ content: counter(page);
+ font-family: var(--mono);
+ font-size: 14px;
+ text-align: left;
+ padding-left: 10mm;
+ }
+ @bottom-left {
+ content: string(author);
+ font-family: var(--mono);
+ }
+ @bottom-center {
+ content: string(type);
+ font-family: var(--mono);
+ }
+ }
+
+ @page:right{
+ margin-left: 40mm;
+ margin-right: 25mm;
+ @bottom-right-corner{
+ content: counter(page);
+ font-family: var(--mono);
+ font-size: 14px;
+ text-align: right;
+ padding-right: 10mm;
+ }
+ @bottom-left {
+ content: string(title);
+ font-family: var(--mono);
+ }
+ }
+
+ /*p{
+ background: salmon;
+ }*/
+
+ .chapter{
+ break-before: right;
+ }
+}
+
+
+// .pagedjs_left_page .pagedjs_pagebox{
+
+// background: linear-gradient(180deg, transparent 82%, #00009B 100%)!important;
+
+// }
+
+// .pagedjs_right_page .pagedjs_pagebox{
+
+// background: linear-gradient(180deg, transparent 82%, #00009B 100%)!important;
+
+// }
\ No newline at end of file
diff --git a/maquette-tests/assets/css/base/_type-specimen.scss b/maquette-tests/assets/css/base/_type-specimen.scss
new file mode 100644
index 0000000..6220fa3
--- /dev/null
+++ b/maquette-tests/assets/css/base/_type-specimen.scss
@@ -0,0 +1,117 @@
+#type-specimen{
+ background-color: #cfcfcf;
+
+ .type{
+ font-family: sans-serif;
+ grid-column: span 2;
+ font-weight: bold;
+ }
+
+ .specimen{
+
+ width: 1200px;
+ height: 680px;
+ border: 1px solid #999;
+ background-color: white;
+ margin: 30px;
+ padding: 30px;
+ overflow: hidden;
+
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+ gap: 30px;
+
+ }
+
+ p:first-of-type{
+ text-align: justify;
+ hyphens: auto;
+ margin-bottom: 1em;
+ }
+
+ p{
+ font-size: 16px;
+ }
+
+
+ .title{
+
+ font-size: 32px;
+ line-height: 1.1;
+ max-width: 22ch;
+ margin-bottom: 30px;
+ }
+
+ .content{
+ line-height: 1.3;
+ }
+
+ .title-bold{
+ font-weight: bold;
+ }
+
+ .title-normal{
+ font-weight: normal;
+ }
+
+ .title-italic{
+ font-weight: normal;
+ font-style: italic;
+ }
+ .title-light{
+ font-weight: 300!important;
+ font-style: normal;
+ }
+}
+
+
+[data-type="ovo"]{
+ .title{
+ font-weight: normal;
+ line-height: 1.1;
+ }
+
+}
+
+[data-type="literata"]{
+ p{
+ // line-height: 1.2;
+ }
+}
+
+[data-type="selectric"],
+[data-type="selectric-mono"],
+[data-type="timezone"],
+[data-type="timezone-mono"]{
+ .title-bold{
+ font-weight: normal!important;
+ }
+}
+
+[data-type="selectric-mono"] .content p{
+ letter-spacing: -0.01
+ rem;
+ white-space: 0.2ch;
+}
+
+
+[data-type="es-face"]{
+ .title-bold{
+ font-weight: normal!important;
+ font-style: italic;
+ }
+}
+
+[data-type="redaction"]{
+ .title-bold{
+ font-family: 'Redaction 50';
+ font-weight: normal!important;
+ font-style: italic;
+ }
+}
+
+
+[data-type="h-noailles-times-duplex"]{
+
+}
+
diff --git a/maquette-tests/assets/css/base/_type.scss b/maquette-tests/assets/css/base/_type.scss
new file mode 100644
index 0000000..b69f038
--- /dev/null
+++ b/maquette-tests/assets/css/base/_type.scss
@@ -0,0 +1,106 @@
+@import url('https://fonts.googleapis.com/css2?family=Ovo&display=swap');
+@import url('https://fonts.googleapis.com/css2?family=Literata:ital,opsz,wght@0,7..72,200..900;1,7..72,200..900&display=swap');
+@import url('https://fonts.googleapis.com/css2?family=Vollkorn:ital,wght@0,400..900;1,400..900&display=swap');
+
+[data-type="ovo"]{
+ font-family: "Ovo", serif;
+
+}
+
+[data-type="literata"]{
+ font-family: "Literata", serif;
+
+}
+
+[data-type="vollkorn"]{
+ font-family: "Literata", serif;
+}
+
+
+[data-type="timezone"]{
+ font-family: 'HAL Timezone', serif;
+}
+
+[data-type="timezone-mono"]{
+ font-family: 'HAL Timezone Mono', monospace;
+}
+
+
+[data-type="selectric"]{
+ font-family: 'Selectric', serif;
+}
+
+[data-type="selectric-mono"]{
+ font-family: 'Selectric Mono', monospace;
+}
+
+[data-type="es-face"]{
+ font-family: 'ESFace', serif;
+}
+
+[data-type="ivory"]{
+ font-family: 'Ivory', serif;
+}
+[data-type="ivory-mono"]{
+ font-family: 'Ivory Mono', serif;
+}
+[data-type="necto-mono"]{
+ font-family: 'NectoMono', monospace;
+}
+
+[data-type="old-round"]{
+ font-family: 'OldRound', serif;
+}
+
+[data-type="old-round-hover"]{
+ font-family: 'OldRound Hover', serif;
+}
+
+[data-type="satoshi"]{
+ font-family: 'Satoshi', sans-serif;
+}
+
+[data-type="redaction"]{
+ font-family: 'Redaction', monospace;
+}
+
+[data-type="h-noailles-futura-simplex"]{
+ font-family: 'HNoailles Futura Simplex', sans-serif;
+}
+
+[data-type="h-noailles-futura-duplex"]{
+ font-family: 'HNoailles Futura Duplex', sans-serif;
+}
+
+[data-type="h-noailles-futura-triplex"]{
+ font-family: 'HNoailles Futura Triplex', sans-serif;
+}
+
+[data-type="h-noailles-times-simplex"]{
+ font-family: 'HNoailles Times Simplex', serif;
+}
+
+[data-type="h-noailles-times-duplex"]{
+ font-family: 'HNoailles Times Duplex', serif;
+}
+
+[data-type="h-noailles-times-triplex"]{
+ font-family: 'HNoailles Times Triplex', serif;
+}
+
+[data-type="adelphe-floreal"]{
+ font-family: 'Adelphe Floreal', serif;
+}
+[data-type="Adelphe-fructidor"]{
+ font-family: 'Adelphe Fructidor', serif;
+}
+
+[data-type="wagram"]{
+ font-family: 'Wagram', serif;
+}
+[data-type="wagram-slab"]{
+ font-family: 'Wagram Slab', serif;
+}
+[data-type="wagram-mono-slab"]{
+ font-family: 'Wagram Mono Slab', monospace;
+}
\ No newline at end of file
diff --git a/maquette-tests/assets/css/base/_var.scss b/maquette-tests/assets/css/base/_var.scss
new file mode 100644
index 0000000..07a5485
--- /dev/null
+++ b/maquette-tests/assets/css/base/_var.scss
@@ -0,0 +1,19 @@
+:root{
+
+ --font: 'Wagram Slab', serif;
+ // --font: 'HAL Timezone', serif;
+ --mono: 'Selectric Mono', monospace;
+ // --mono: 'HAL Timezone Mono', monospace;
+ --note: 'HNoailles Times Triplex', serif;
+
+ --red: #9B0000;
+ --green:#009B00;
+ --green-light:#009b0025;
+ --blue: #00009B;
+
+ --red: black;
+ --green:#009B00;
+ --green-light:#009b0025;
+ --blue: black;
+
+}
\ No newline at end of file
diff --git a/maquette-tests/assets/css/modules/_chapter-header.scss b/maquette-tests/assets/css/modules/_chapter-header.scss
new file mode 100644
index 0000000..1e71cde
--- /dev/null
+++ b/maquette-tests/assets/css/modules/_chapter-header.scss
@@ -0,0 +1,59 @@
+.chapter-header{
+ // break-after: page;
+ margin-bottom: calc(var(--baseline)*6);
+}
+
+.chapter-header h2 {
+ string-set: title content(text);
+}
+
+.chapter-header .author {
+ string-set: author content(text);
+}
+
+.chapter-header .type {
+ string-set: type content(text);
+}
+
+
+.chapter-header h2{
+ font-size: 38px;
+ line-height: 1;
+ font-family: var(--note);
+ color: var(--blue);
+ margin-bottom: calc(var(--baseline)*1);
+ text-align: center;
+
+}
+
+
+.chapter-header .type{
+ margin-bottom: calc(var(--baseline)*1);
+}
+
+.chapter-header .type,
+.chapter-header .bio{
+ font-family: var(--mono);
+ // text-align: right;
+ hyphens: none;
+ font-size: 9px;
+ line-height: 1.2;
+ left: 0px!important;
+
+}
+
+.chapter-header .bio{
+margin-top: calc(var(--baseline)*1);
+ text-align: left;
+}
+
+.chapter-header .author{
+ left: 0px!important;
+ font-size: 38px;
+ line-height: 1;
+ font-family: var(--note);
+ font-weight: bold;
+ text-align: center;
+ // color: var(--green);
+}
+
diff --git a/maquette-tests/assets/css/modules/_text.scss b/maquette-tests/assets/css/modules/_text.scss
new file mode 100644
index 0000000..0abc9bb
--- /dev/null
+++ b/maquette-tests/assets/css/modules/_text.scss
@@ -0,0 +1,188 @@
+.chapter{
+
+
+ p{
+ text-align: justify;
+ hyphens: auto;
+ position: relative;
+ color: var(--blue);
+
+
+ // &::before{
+ // content: '';
+ // display: inline-block;
+ // width: 8px;
+ // height: 8px;
+ // background-color: var(--blue);
+ // border-radius: 50%;
+ // margin-right: 1ch;
+ // }
+}
+
+p + p{
+ left: 14mm;
+ // &::before{
+ // left: -19mm;
+ // }
+}
+
+p + p + p{
+ left: 7mm;
+// &::before{
+// left: -13mm;
+// }
+}
+
+.inline-note{
+ color: var(--green);
+ // break-inside: avoid;
+
+ float: left;
+ clear: both;
+ width: 50mm;
+ text-align: left;
+ hyphens: none;
+ // font-size: 9px;
+ // line-height: calc(var(--bseline)*0.75);
+
+ // padding-top: calc(var(--baseline)*0.5);
+ // padding-bottom: calc(var(--baseline)*0.5);
+ margin-right: 1ch;
+ margin-right: -20mm;
+ position: relative;
+ left: -25mm;
+ text-align: right;
+
+ font-family: var(--note);
+ line-height: 1.2;
+
+
+
+}
+.pagedjs_floatnote_marker,
+.pagedjs_floatnote_call{
+ color: var(--green);
+ font-weight: bold;
+ padding-left: 0.25ch;
+ line-height: 0;
+ font-size: 9px;
+ font-family: var(--font);
+}
+
+
+.pagedjs_floatnote_marker{
+ // float: left;
+ // position: absolute;
+ // left: 0px;
+ // display: block;
+ text-align: left;
+}
+
+
+h3{
+ margin-top: calc(var(--baseline)*1.5);
+ margin-bottom: calc(var(--baseline)*0.5);
+ text-align: center;
+ font-weight: normal;
+ text-decoration: underline;
+ font-family: var(--mono);
+ text-transform: uppercase;
+ color: var(--blue);
+ max-width: 18ch;
+ margin-inline: auto;
+
+ // &::before{
+ // content: '';
+ // display: block;
+ // width: 8px;
+ // height: 8px;
+ // border: 1px solid var(--blue);
+ // border-radius: 50%;
+ // margin-right: 1ch;
+ // position: relative;
+ // left: -2ch;
+
+ // }
+}
+
+blockquote p{
+ // font-family: var(--mono);
+}
+
+blockquote{
+ position: relative;
+ left: 14mm;
+ p{
+ font-size: 16px;
+ line-height: calc(var(--baseline)*1.25);
+ font-weight: 300;
+
+
+ }
+
+ // margin-top: calc(var(--baseline)*2);
+ // margin-bottom: calc(var(--baseline)*2);
+}
+
+
+& > :first-child{
+ // background-color: red;
+ margin-top: 0px;
+}
+
+}
+
+
+
+// .inline-note{
+// background-color: #e5e5f7;
+// opacity: 0.8;
+// background-image: linear-gradient(0deg, white 50%, var(--green-light) 50%);
+// background-size: 16px 16px;
+
+
+
+// .body_note{
+// display: inline;
+// padding-right: 1ch;
+// background-color: white;
+// -webkit-box-decoration-break: clone;
+// box-decoration-break: clone;
+
+// position: relative;
+// top: -4px;
+// }
+// }
+
+
+
+
+// p + p .inline-note::after{
+// left: -19mm!important;
+// }
+
+// p + p + p .inline-note::after{
+// left: -12mm!important;
+// }
+
+
+
+.pagedjs_area{
+ position: relative;
+}
+
+.item-decor{
+ font-family: var(--font);
+ font-weight: 400;
+ font-size: 12px;
+ position: absolute;
+ color: var(--green);
+}
+
+.pagedjs_left_page .item-decor{
+ left: -30mm;
+}
+
+.pagedjs_right_page .item-decor{
+ right: -20mm;
+}
\ No newline at end of file
diff --git a/maquette-tests/assets/css/style.css b/maquette-tests/assets/css/style.css
new file mode 100644
index 0000000..0544b63
--- /dev/null
+++ b/maquette-tests/assets/css/style.css
@@ -0,0 +1,405 @@
+@import url("https://fonts.googleapis.com/css2?family=Ovo&display=swap");
+@import url("https://fonts.googleapis.com/css2?family=Literata:ital,opsz,wght@0,7..72,200..900;1,7..72,200..900&display=swap");
+@import url("https://fonts.googleapis.com/css2?family=Vollkorn:ital,wght@0,400..900;1,400..900&display=swap");
+:root {
+ --font: 'Wagram Slab', serif;
+ --mono: 'Selectric Mono', monospace;
+ --note: 'HNoailles Times Triplex', serif;
+ --red: #9B0000;
+ --green:#009B00;
+ --green-light:#009b0025;
+ --blue: #00009B;
+ --red: black;
+ --green:#009B00;
+ --green-light:#009b0025;
+ --blue: black;
+}
+
+* {
+ margin: 0;
+ padding: 0;
+ box-sizing: border-box;
+ -webkit-font-smoothing: antialiased;
+ -moz-font-smoothing: antialiased;
+ -o-font-smoothing: antialiased;
+}
+
+a {
+ color: currentColor;
+}
+
+body {
+ --font-size: 11px;
+ --baseline: 18px;
+ font-family: var(--font);
+ font-size: var(--font-size);
+ line-height: var(--baseline);
+}
+
+@media print {
+ @page {
+ size: 165mm 240mm;
+ margin-top: 10mm;
+ margin-bottom: 20mm;
+ }
+ @page :left {
+ margin-left: 35mm;
+ margin-right: 30mm;
+ @bottom-left-corner {
+ content: counter(page);
+ font-family: var(--mono);
+ font-size: 14px;
+ text-align: left;
+ padding-left: 10mm;
+ }
+ @bottom-left {
+ content: string(author);
+ font-family: var(--mono);
+ }
+ @bottom-center {
+ content: string(type);
+ font-family: var(--mono);
+ }
+ }
+ @page :right {
+ margin-left: 40mm;
+ margin-right: 25mm;
+ @bottom-right-corner {
+ content: counter(page);
+ font-family: var(--mono);
+ font-size: 14px;
+ text-align: right;
+ padding-right: 10mm;
+ }
+ @bottom-left {
+ content: string(title);
+ font-family: var(--mono);
+ }
+ }
+ /*p{
+ background: salmon;
+ }*/
+ .chapter {
+ -moz-column-break-before: right;
+ break-before: right;
+ }
+}
+[data-type=ovo] {
+ font-family: "Ovo", serif;
+}
+
+[data-type=literata] {
+ font-family: "Literata", serif;
+}
+
+[data-type=vollkorn] {
+ font-family: "Literata", serif;
+}
+
+[data-type=timezone] {
+ font-family: "HAL Timezone", serif;
+}
+
+[data-type=timezone-mono] {
+ font-family: "HAL Timezone Mono", monospace;
+}
+
+[data-type=selectric] {
+ font-family: "Selectric", serif;
+}
+
+[data-type=selectric-mono] {
+ font-family: "Selectric Mono", monospace;
+}
+
+[data-type=es-face] {
+ font-family: "ESFace", serif;
+}
+
+[data-type=ivory] {
+ font-family: "Ivory", serif;
+}
+
+[data-type=ivory-mono] {
+ font-family: "Ivory Mono", serif;
+}
+
+[data-type=necto-mono] {
+ font-family: "NectoMono", monospace;
+}
+
+[data-type=old-round] {
+ font-family: "OldRound", serif;
+}
+
+[data-type=old-round-hover] {
+ font-family: "OldRound Hover", serif;
+}
+
+[data-type=satoshi] {
+ font-family: "Satoshi", sans-serif;
+}
+
+[data-type=redaction] {
+ font-family: "Redaction", monospace;
+}
+
+[data-type=h-noailles-futura-simplex] {
+ font-family: "HNoailles Futura Simplex", sans-serif;
+}
+
+[data-type=h-noailles-futura-duplex] {
+ font-family: "HNoailles Futura Duplex", sans-serif;
+}
+
+[data-type=h-noailles-futura-triplex] {
+ font-family: "HNoailles Futura Triplex", sans-serif;
+}
+
+[data-type=h-noailles-times-simplex] {
+ font-family: "HNoailles Times Simplex", serif;
+}
+
+[data-type=h-noailles-times-duplex] {
+ font-family: "HNoailles Times Duplex", serif;
+}
+
+[data-type=h-noailles-times-triplex] {
+ font-family: "HNoailles Times Triplex", serif;
+}
+
+[data-type=adelphe-floreal] {
+ font-family: "Adelphe Floreal", serif;
+}
+
+[data-type=Adelphe-fructidor] {
+ font-family: "Adelphe Fructidor", serif;
+}
+
+[data-type=wagram] {
+ font-family: "Wagram", serif;
+}
+
+[data-type=wagram-slab] {
+ font-family: "Wagram Slab", serif;
+}
+
+[data-type=wagram-mono-slab] {
+ font-family: "Wagram Mono Slab", monospace;
+}
+
+#type-specimen {
+ background-color: #cfcfcf;
+}
+#type-specimen .type {
+ font-family: sans-serif;
+ grid-column: span 2;
+ font-weight: bold;
+}
+#type-specimen .specimen {
+ width: 1200px;
+ height: 680px;
+ border: 1px solid #999;
+ background-color: white;
+ margin: 30px;
+ padding: 30px;
+ overflow: hidden;
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+ gap: 30px;
+}
+#type-specimen p:first-of-type {
+ text-align: justify;
+ hyphens: auto;
+ margin-bottom: 1em;
+}
+#type-specimen p {
+ font-size: 16px;
+}
+#type-specimen .title {
+ font-size: 32px;
+ line-height: 1.1;
+ max-width: 22ch;
+ margin-bottom: 30px;
+}
+#type-specimen .content {
+ line-height: 1.3;
+}
+#type-specimen .title-bold {
+ font-weight: bold;
+}
+#type-specimen .title-normal {
+ font-weight: normal;
+}
+#type-specimen .title-italic {
+ font-weight: normal;
+ font-style: italic;
+}
+#type-specimen .title-light {
+ font-weight: 300 !important;
+ font-style: normal;
+}
+
+[data-type=ovo] .title {
+ font-weight: normal;
+ line-height: 1.1;
+}
+
+[data-type=selectric] .title-bold,
+[data-type=selectric-mono] .title-bold,
+[data-type=timezone] .title-bold,
+[data-type=timezone-mono] .title-bold {
+ font-weight: normal !important;
+}
+
+[data-type=selectric-mono] .content p {
+ letter-spacing: -0.01 rem;
+ white-space: 0.2ch;
+}
+
+[data-type=es-face] .title-bold {
+ font-weight: normal !important;
+ font-style: italic;
+}
+
+[data-type=redaction] .title-bold {
+ font-family: "Redaction 50";
+ font-weight: normal !important;
+ font-style: italic;
+}
+
+.chapter p {
+ text-align: justify;
+ hyphens: auto;
+ position: relative;
+ color: var(--blue);
+}
+.chapter p + p {
+ left: 14mm;
+}
+.chapter p + p + p {
+ left: 7mm;
+}
+.chapter .inline-note {
+ color: var(--green);
+ float: left;
+ clear: both;
+ width: 50mm;
+ text-align: left;
+ hyphens: none;
+ margin-right: 1ch;
+ margin-right: -20mm;
+ position: relative;
+ left: -25mm;
+ text-align: right;
+ font-family: var(--note);
+ line-height: 1.2;
+}
+.chapter .pagedjs_floatnote_marker,
+.chapter .pagedjs_floatnote_call {
+ color: var(--green);
+ font-weight: bold;
+ padding-left: 0.25ch;
+ line-height: 0;
+ font-size: 9px;
+ font-family: var(--font);
+}
+.chapter .pagedjs_floatnote_marker {
+ text-align: left;
+}
+.chapter h3 {
+ margin-top: calc(var(--baseline) * 1.5);
+ margin-bottom: calc(var(--baseline) * 0.5);
+ text-align: center;
+ font-weight: normal;
+ text-decoration: underline;
+ font-family: var(--mono);
+ text-transform: uppercase;
+ color: var(--blue);
+ max-width: 18ch;
+ margin-inline: auto;
+}
+.chapter blockquote {
+ position: relative;
+ left: 14mm;
+}
+.chapter blockquote p {
+ font-size: 16px;
+ line-height: calc(var(--baseline) * 1.25);
+ font-weight: 300;
+}
+.chapter > :first-child {
+ margin-top: 0px;
+}
+
+.pagedjs_area {
+ position: relative;
+}
+
+.item-decor {
+ font-family: var(--font);
+ font-weight: 400;
+ font-size: 12px;
+ position: absolute;
+ color: var(--green);
+}
+
+.pagedjs_left_page .item-decor {
+ left: -30mm;
+}
+
+.pagedjs_right_page .item-decor {
+ right: -20mm;
+}
+
+.chapter-header {
+ margin-bottom: calc(var(--baseline) * 6);
+}
+
+.chapter-header h2 {
+ string-set: title content(text);
+}
+
+.chapter-header .author {
+ string-set: author content(text);
+}
+
+.chapter-header .type {
+ string-set: type content(text);
+}
+
+.chapter-header h2 {
+ font-size: 38px;
+ line-height: 1;
+ font-family: var(--note);
+ color: var(--blue);
+ margin-bottom: calc(var(--baseline) * 1);
+ text-align: center;
+}
+
+.chapter-header .type {
+ margin-bottom: calc(var(--baseline) * 1);
+}
+
+.chapter-header .type,
+.chapter-header .bio {
+ font-family: var(--mono);
+ hyphens: none;
+ font-size: 9px;
+ line-height: 1.2;
+ left: 0px !important;
+}
+
+.chapter-header .bio {
+ margin-top: calc(var(--baseline) * 1);
+ text-align: left;
+}
+
+.chapter-header .author {
+ left: 0px !important;
+ font-size: 38px;
+ line-height: 1;
+ font-family: var(--note);
+ font-weight: bold;
+ text-align: center;
+}/*# sourceMappingURL=style.css.map */
\ No newline at end of file
diff --git a/maquette-tests/assets/css/style.css.map b/maquette-tests/assets/css/style.css.map
new file mode 100644
index 0000000..94907c1
--- /dev/null
+++ b/maquette-tests/assets/css/style.css.map
@@ -0,0 +1 @@
+{"version":3,"sources":["base/_type.scss","base/_var.scss","style.css","base/_body.scss","base/_layout.scss","base/_type-specimen.scss","modules/_text.scss","modules/_chapter-header.scss"],"names":[],"mappings":"AAAQ,wEAAA;AACA,8HAAA;AACA,6GAAA;ACFR;EAEI,4BAAA;EAEA,mCAAA;EAEA,wCAAA;EAEA,cAAA;EACA,eAAA;EACA,uBAAA;EACA,eAAA;EAEA,YAAA;EACA,eAAA;EACA,uBAAA;EACA,aAAA;ACDJ;;ACfA;EACI,SAAA;EACA,UAAA;EACA,sBAAA;EACA,mCAAA;EACA,gCAAA;EACA,8BAAA;ADkBJ;;AChBA;EACI,mBAAA;ADmBJ;;ACXA;EACI,iBAAA;EACA,gBAAA;EACA,wBAAA;EACA,2BAAA;EACA,4BAAA;ADcJ;;AEpCA;EAEE;IACE,iBAAA;IACA,gBAAA;IACA,mBAAA;EFsCF;EElCA;IACE,iBAAA;IACA,kBAAA;IACC;MACC,sBAAA;MACC,wBAAA;MACD,eAAA;MACC,gBAAA;MACC,kBAAA;IFoCJ;IElCC;MACC,uBAAA;MACE,wBAAA;IFoCJ;IElCC;MACD,qBAAA;MACE,wBAAA;IFoCF;EACF;EEjCA;IACE,iBAAA;IACA,kBAAA;IACC;MACC,sBAAA;MACA,wBAAA;MACA,eAAA;MACE,iBAAA;MACA,mBAAA;IFmCJ;IEjCC;MACC,sBAAA;MACE,wBAAA;IFmCJ;EACF;EEhCA;;IAAA;EAIA;IACE,+BAAA;SAAA,mBAAA;EFiCF;AACF;AFhFA;EACE,yBAAA;AEkFF;;AF9EA;EACE,8BAAA;AEiFF;;AF7EA;EACE,8BAAA;AEgFF;;AF5EA;EACE,kCAAA;AE+EF;;AF5EA;EACE,2CAAA;AE+EF;;AF3EA;EACE,+BAAA;AE8EF;;AF3EA;EACE,wCAAA;AE8EF;;AF3EA;EACE,4BAAA;AE8EF;;AF3EA;EACE,2BAAA;AE8EF;;AF5EA;EACE,gCAAA;AE+EF;;AF7EA;EACE,mCAAA;AEgFF;;AF7EA;EACE,8BAAA;AEgFF;;AF7EA;EACE,oCAAA;AEgFF;;AF7EA;EACE,kCAAA;AEgFF;;AF7EA;EACG,mCAAA;AEgFH;;AF7EA;EACG,mDAAA;AEgFH;;AF7EA;EACG,kDAAA;AEgFH;;AF7EA;EACG,mDAAA;AEgFH;;AF7EA;EACG,6CAAA;AEgFH;;AF7EA;EACG,4CAAA;AEgFH;;AF7EA;EACG,6CAAA;AEgFH;;AF7EA;EACG,qCAAA;AEgFH;;AF9EA;EACG,uCAAA;AEiFH;;AF9EA;EACG,4BAAA;AEiFH;;AF/EA;EACG,iCAAA;AEkFH;;AFhFA;EACG,0CAAA;AEmFH;;AG3LA;EACI,yBAAA;AH8LJ;AG5LI;EACI,uBAAA;EACA,mBAAA;EACA,iBAAA;AH8LR;AG3LI;EAEI,aAAA;EACA,aAAA;EACA,sBAAA;EACA,uBAAA;EACA,YAAA;EACA,aAAA;EACA,gBAAA;EAEA,aAAA;EACA,8BAAA;EACA,SAAA;AH2LR;AGvLI;EACI,mBAAA;EACA,aAAA;EACA,kBAAA;AHyLR;AGtLI;EACA,eAAA;AHwLJ;AGpLI;EAEI,eAAA;EACA,gBAAA;EACA,eAAA;EACA,mBAAA;AHqLR;AGlLI;EACI,gBAAA;AHoLR;AGjLI;EACI,iBAAA;AHmLR;AGhLK;EACG,mBAAA;AHkLR;AG/KK;EACG,mBAAA;EACA,kBAAA;AHiLR;AG/KM;EACE,2BAAA;EACA,kBAAA;AHiLR;;AG3KE;EACE,mBAAA;EACE,gBAAA;AH8KN;;AG/JI;;;;EACI,8BAAA;AHqKR;;AGjKA;EACI,yBAAA;EAEA,kBAAA;AHmKJ;;AG9JE;EACE,8BAAA;EACA,kBAAA;AHiKJ;;AG5JE;EACE,2BAAA;EACA,8BAAA;EACA,kBAAA;AH+JJ;;AIxQI;EACA,mBAAA;EACA,aAAA;EACA,kBAAA;EACA,kBAAA;AJ2QJ;AI7PA;EACI,UAAA;AJ+PJ;AIzPA;EACE,SAAA;AJ2PF;AIrPA;EACI,mBAAA;EAGA,WAAA;EACA,WAAA;EACA,WAAA;EACA,gBAAA;EACA,aAAA;EAMA,iBAAA;EACA,mBAAA;EACA,kBAAA;EACA,WAAA;EACA,iBAAA;EAEA,wBAAA;EACA,gBAAA;AJ+OJ;AI1OA;;EAEI,mBAAA;EACA,iBAAA;EACA,oBAAA;EACA,cAAA;EACA,cAAA;EACA,wBAAA;AJ4OJ;AIxOA;EAKI,gBAAA;AJsOJ;AIlOA;EACI,uCAAA;EACA,0CAAA;EACA,kBAAA;EACA,mBAAA;EACA,0BAAA;EACA,wBAAA;EACA,yBAAA;EACC,kBAAA;EACC,eAAA;EACA,mBAAA;AJoON;AIhNA;EACI,kBAAA;EACA,UAAA;AJkNJ;AIjNI;EACA,eAAA;EACA,yCAAA;EACA,gBAAA;AJmNJ;AIzMA;EAEI,eAAA;AJ0MJ;;AIlKA;EACI,kBAAA;AJqKJ;;AIlKA;EACI,wBAAA;EACA,gBAAA;EACA,eAAA;EACA,kBAAA;EACA,mBAAA;AJqKJ;;AIlKA;EACK,WAAA;AJqKL;;AIlKA;EACK,YAAA;AJqKL;;AK/VA;EAEI,wCAAA;ALiWJ;;AK9VA;EACE,+BAAA;ALiWF;;AK9VA;EACE,gCAAA;ALiWF;;AK9VA;EACE,8BAAA;ALiWF;;AK7VA;EACI,eAAA;EACA,cAAA;EACA,wBAAA;EACC,kBAAA;EACK,wCAAA;EACA,kBAAA;ALgWV;;AK3VA;EACK,wCAAA;AL8VL;;AK3VA;;EAEK,wBAAA;EAEA,aAAA;EACA,cAAA;EACA,gBAAA;EACI,oBAAA;AL6VT;;AKzVA;EACA,qCAAA;EACK,gBAAA;AL4VL;;AKzVA;EACI,oBAAA;EACA,eAAA;EACA,cAAA;EACA,wBAAA;EACA,iBAAA;EACA,kBAAA;AL4VJ","file":"style.css"}
\ No newline at end of file
diff --git a/maquette-tests/assets/css/style.scss b/maquette-tests/assets/css/style.scss
new file mode 100644
index 0000000..5a7196a
--- /dev/null
+++ b/maquette-tests/assets/css/style.scss
@@ -0,0 +1,9 @@
+@use "base/var";
+@use "base/body";
+@use "base/layout";
+@use "base/type";
+
+
+@use "base/type-specimen";
+@use "modules/text";
+@use "modules/chapter-header";
\ No newline at end of file
diff --git a/maquette-tests/assets/fonts/Adelphe/Adelphe-FlorealBold.ttf b/maquette-tests/assets/fonts/Adelphe/Adelphe-FlorealBold.ttf
new file mode 100644
index 0000000..212c97f
Binary files /dev/null and b/maquette-tests/assets/fonts/Adelphe/Adelphe-FlorealBold.ttf differ
diff --git a/maquette-tests/assets/fonts/Adelphe/Adelphe-FlorealBoldItalic.ttf b/maquette-tests/assets/fonts/Adelphe/Adelphe-FlorealBoldItalic.ttf
new file mode 100644
index 0000000..c998ac4
Binary files /dev/null and b/maquette-tests/assets/fonts/Adelphe/Adelphe-FlorealBoldItalic.ttf differ
diff --git a/maquette-tests/assets/fonts/Adelphe/Adelphe-FlorealItalic.ttf b/maquette-tests/assets/fonts/Adelphe/Adelphe-FlorealItalic.ttf
new file mode 100644
index 0000000..0ea8027
Binary files /dev/null and b/maquette-tests/assets/fonts/Adelphe/Adelphe-FlorealItalic.ttf differ
diff --git a/maquette-tests/assets/fonts/Adelphe/Adelphe-FlorealRegular.ttf b/maquette-tests/assets/fonts/Adelphe/Adelphe-FlorealRegular.ttf
new file mode 100644
index 0000000..a58c6e0
Binary files /dev/null and b/maquette-tests/assets/fonts/Adelphe/Adelphe-FlorealRegular.ttf differ
diff --git a/maquette-tests/assets/fonts/Adelphe/Adelphe-FlorealSemiBold.ttf b/maquette-tests/assets/fonts/Adelphe/Adelphe-FlorealSemiBold.ttf
new file mode 100644
index 0000000..d4e0462
Binary files /dev/null and b/maquette-tests/assets/fonts/Adelphe/Adelphe-FlorealSemiBold.ttf differ
diff --git a/maquette-tests/assets/fonts/Adelphe/Adelphe-FlorealSemiBoldItalic.ttf b/maquette-tests/assets/fonts/Adelphe/Adelphe-FlorealSemiBoldItalic.ttf
new file mode 100644
index 0000000..75c0cba
Binary files /dev/null and b/maquette-tests/assets/fonts/Adelphe/Adelphe-FlorealSemiBoldItalic.ttf differ
diff --git a/maquette-tests/assets/fonts/Adelphe/Adelphe-FructidorBold.ttf b/maquette-tests/assets/fonts/Adelphe/Adelphe-FructidorBold.ttf
new file mode 100644
index 0000000..bf4dd15
Binary files /dev/null and b/maquette-tests/assets/fonts/Adelphe/Adelphe-FructidorBold.ttf differ
diff --git a/maquette-tests/assets/fonts/Adelphe/Adelphe-FructidorBoldItalic.ttf b/maquette-tests/assets/fonts/Adelphe/Adelphe-FructidorBoldItalic.ttf
new file mode 100644
index 0000000..be6aa41
Binary files /dev/null and b/maquette-tests/assets/fonts/Adelphe/Adelphe-FructidorBoldItalic.ttf differ
diff --git a/maquette-tests/assets/fonts/Adelphe/Adelphe-FructidorItalic.ttf b/maquette-tests/assets/fonts/Adelphe/Adelphe-FructidorItalic.ttf
new file mode 100644
index 0000000..09053f4
Binary files /dev/null and b/maquette-tests/assets/fonts/Adelphe/Adelphe-FructidorItalic.ttf differ
diff --git a/maquette-tests/assets/fonts/Adelphe/Adelphe-FructidorRegular.ttf b/maquette-tests/assets/fonts/Adelphe/Adelphe-FructidorRegular.ttf
new file mode 100644
index 0000000..25ae30a
Binary files /dev/null and b/maquette-tests/assets/fonts/Adelphe/Adelphe-FructidorRegular.ttf differ
diff --git a/maquette-tests/assets/fonts/Adelphe/Adelphe-FructidorSemiBold.ttf b/maquette-tests/assets/fonts/Adelphe/Adelphe-FructidorSemiBold.ttf
new file mode 100644
index 0000000..569f172
Binary files /dev/null and b/maquette-tests/assets/fonts/Adelphe/Adelphe-FructidorSemiBold.ttf differ
diff --git a/maquette-tests/assets/fonts/Adelphe/Adelphe-FructidorSemiBoldItalic.ttf b/maquette-tests/assets/fonts/Adelphe/Adelphe-FructidorSemiBoldItalic.ttf
new file mode 100644
index 0000000..42c001f
Binary files /dev/null and b/maquette-tests/assets/fonts/Adelphe/Adelphe-FructidorSemiBoldItalic.ttf differ
diff --git a/maquette-tests/assets/fonts/Adelphe/Adelphe-GerminalBold.ttf b/maquette-tests/assets/fonts/Adelphe/Adelphe-GerminalBold.ttf
new file mode 100644
index 0000000..52b4d44
Binary files /dev/null and b/maquette-tests/assets/fonts/Adelphe/Adelphe-GerminalBold.ttf differ
diff --git a/maquette-tests/assets/fonts/Adelphe/Adelphe-GerminalBoldItalic.ttf b/maquette-tests/assets/fonts/Adelphe/Adelphe-GerminalBoldItalic.ttf
new file mode 100644
index 0000000..a3ba608
Binary files /dev/null and b/maquette-tests/assets/fonts/Adelphe/Adelphe-GerminalBoldItalic.ttf differ
diff --git a/maquette-tests/assets/fonts/Adelphe/Adelphe-GerminalItalic.ttf b/maquette-tests/assets/fonts/Adelphe/Adelphe-GerminalItalic.ttf
new file mode 100644
index 0000000..7e38f20
Binary files /dev/null and b/maquette-tests/assets/fonts/Adelphe/Adelphe-GerminalItalic.ttf differ
diff --git a/maquette-tests/assets/fonts/Adelphe/Adelphe-GerminalRegular.ttf b/maquette-tests/assets/fonts/Adelphe/Adelphe-GerminalRegular.ttf
new file mode 100644
index 0000000..3fa4770
Binary files /dev/null and b/maquette-tests/assets/fonts/Adelphe/Adelphe-GerminalRegular.ttf differ
diff --git a/maquette-tests/assets/fonts/Adelphe/Adelphe-GerminalSemiBold.ttf b/maquette-tests/assets/fonts/Adelphe/Adelphe-GerminalSemiBold.ttf
new file mode 100644
index 0000000..739c654
Binary files /dev/null and b/maquette-tests/assets/fonts/Adelphe/Adelphe-GerminalSemiBold.ttf differ
diff --git a/maquette-tests/assets/fonts/Adelphe/Adelphe-GerminalSemiBoldItalic.ttf b/maquette-tests/assets/fonts/Adelphe/Adelphe-GerminalSemiBoldItalic.ttf
new file mode 100644
index 0000000..7bda536
Binary files /dev/null and b/maquette-tests/assets/fonts/Adelphe/Adelphe-GerminalSemiBoldItalic.ttf differ
diff --git a/maquette-tests/assets/fonts/Adelphe/stylesheet.css b/maquette-tests/assets/fonts/Adelphe/stylesheet.css
new file mode 100644
index 0000000..25f4cb1
--- /dev/null
+++ b/maquette-tests/assets/fonts/Adelphe/stylesheet.css
@@ -0,0 +1,146 @@
+
+@font-face {
+ font-family: 'Adelphe Floreal';
+ src: url('Adelphe-FlorealRegular.ttf') format('truetype');
+ font-weight: normal;
+ font-style: normal;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Adelphe Floreal';
+ src: url('Adelphe-FlorealItalic.ttf') format('truetype');
+ font-weight: normal;
+ font-style: italic;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Adelphe Floreal';
+ src: url('Adelphe-FlorealSemiBold.ttf') format('truetype');
+ font-weight: 600;
+ font-style: normal;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Adelphe Floreal';
+ src: url('Adelphe-FlorealSemiBoldItalic.ttf') format('truetype');
+ font-weight: 600;
+ font-style: italic;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Adelphe Floreal';
+ src: url('Adelphe-FlorealBold.ttf') format('truetype');
+ font-weight: bold;
+ font-style: normal;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Adelphe Floreal';
+ src: url('Adelphe-FlorealBoldItalic.ttf') format('truetype');
+ font-weight: bold;
+ font-style: italic;
+ font-display: swap;
+}
+
+
+@font-face {
+ font-family: 'Adelphe Fructidor';
+ src: url('Adelphe-FructidorRegular.ttf') format('truetype');
+ font-weight: normal;
+ font-style: normal;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Adelphe Fructidor';
+ src: url('Adelphe-FructidorItalic.ttf') format('truetype');
+ font-weight: normal;
+ font-style: italic;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Adelphe Fructidor';
+ src: url('Adelphe-FructidorSemiBold.ttf') format('truetype');
+ font-weight: 600;
+ font-style: normal;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Adelphe Fructidor';
+ src: url('Adelphe-FructidorSemiBoldItalic.ttf') format('truetype');
+ font-weight: 600;
+ font-style: italic;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Adelphe Fructidor';
+ src: url('Adelphe-FructidorBold.ttf') format('truetype');
+ font-weight: bold;
+ font-style: normal;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Adelphe Fructidor';
+ src: url('Adelphe-FructidorBoldItalic.ttf') format('truetype');
+ font-weight: bold;
+ font-style: italic;
+ font-display: swap;
+}
+
+
+@font-face {
+ font-family: 'Adelphe Germinal';
+ src: url('Adelphe-GerminalRegular.ttf') format('truetype');
+ font-weight: normal;
+ font-style: normal;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Adelphe Germinal';
+ src: url('Adelphe-GerminalItalic.ttf') format('truetype');
+ font-weight: normal;
+ font-style: italic;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Adelphe Germinal';
+ src: url('Adelphe-GerminalSemiBold.ttf') format('truetype');
+ font-weight: 600;
+ font-style: normal;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Adelphe Germinal';
+ src: url('Adelphe-GerminalSemiBoldItalic.ttf') format('truetype');
+ font-weight: 600;
+ font-style: italic;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Adelphe Germinal';
+ src: url('Adelphe-GerminalBold.ttf') format('truetype');
+ font-weight: bold;
+ font-style: normal;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Adelphe Germinal';
+ src: url('Adelphe-GerminalBoldItalic.ttf') format('truetype');
+ font-weight: bold;
+ font-style: italic;
+ font-display: swap;
+}
diff --git a/maquette-tests/assets/fonts/ESface/ESFaceTRIAL-Black.ttf b/maquette-tests/assets/fonts/ESface/ESFaceTRIAL-Black.ttf
new file mode 100644
index 0000000..2b2f432
Binary files /dev/null and b/maquette-tests/assets/fonts/ESface/ESFaceTRIAL-Black.ttf differ
diff --git a/maquette-tests/assets/fonts/ESface/ESFaceTRIAL-BlackItalic.ttf b/maquette-tests/assets/fonts/ESface/ESFaceTRIAL-BlackItalic.ttf
new file mode 100644
index 0000000..b58ec02
Binary files /dev/null and b/maquette-tests/assets/fonts/ESface/ESFaceTRIAL-BlackItalic.ttf differ
diff --git a/maquette-tests/assets/fonts/ESface/ESFaceTRIAL-Bold.ttf b/maquette-tests/assets/fonts/ESface/ESFaceTRIAL-Bold.ttf
new file mode 100644
index 0000000..4522a9d
Binary files /dev/null and b/maquette-tests/assets/fonts/ESface/ESFaceTRIAL-Bold.ttf differ
diff --git a/maquette-tests/assets/fonts/ESface/ESFaceTRIAL-BoldItalic.ttf b/maquette-tests/assets/fonts/ESface/ESFaceTRIAL-BoldItalic.ttf
new file mode 100644
index 0000000..5623287
Binary files /dev/null and b/maquette-tests/assets/fonts/ESface/ESFaceTRIAL-BoldItalic.ttf differ
diff --git a/maquette-tests/assets/fonts/ESface/ESFaceTRIAL-Book.ttf b/maquette-tests/assets/fonts/ESface/ESFaceTRIAL-Book.ttf
new file mode 100644
index 0000000..06de20f
Binary files /dev/null and b/maquette-tests/assets/fonts/ESface/ESFaceTRIAL-Book.ttf differ
diff --git a/maquette-tests/assets/fonts/ESface/ESFaceTRIAL-BookItalic.ttf b/maquette-tests/assets/fonts/ESface/ESFaceTRIAL-BookItalic.ttf
new file mode 100644
index 0000000..af29a81
Binary files /dev/null and b/maquette-tests/assets/fonts/ESface/ESFaceTRIAL-BookItalic.ttf differ
diff --git a/maquette-tests/assets/fonts/ESface/ESFaceTRIAL-ExtraBold.ttf b/maquette-tests/assets/fonts/ESface/ESFaceTRIAL-ExtraBold.ttf
new file mode 100644
index 0000000..44300ec
Binary files /dev/null and b/maquette-tests/assets/fonts/ESface/ESFaceTRIAL-ExtraBold.ttf differ
diff --git a/maquette-tests/assets/fonts/ESface/ESFaceTRIAL-ExtraBoldItalic.ttf b/maquette-tests/assets/fonts/ESface/ESFaceTRIAL-ExtraBoldItalic.ttf
new file mode 100644
index 0000000..239310b
Binary files /dev/null and b/maquette-tests/assets/fonts/ESface/ESFaceTRIAL-ExtraBoldItalic.ttf differ
diff --git a/maquette-tests/assets/fonts/ESface/ESFaceTRIAL-ExtraLight.ttf b/maquette-tests/assets/fonts/ESface/ESFaceTRIAL-ExtraLight.ttf
new file mode 100644
index 0000000..2ac58c8
Binary files /dev/null and b/maquette-tests/assets/fonts/ESface/ESFaceTRIAL-ExtraLight.ttf differ
diff --git a/maquette-tests/assets/fonts/ESface/ESFaceTRIAL-ExtraLightItalic.ttf b/maquette-tests/assets/fonts/ESface/ESFaceTRIAL-ExtraLightItalic.ttf
new file mode 100644
index 0000000..83dee55
Binary files /dev/null and b/maquette-tests/assets/fonts/ESface/ESFaceTRIAL-ExtraLightItalic.ttf differ
diff --git a/maquette-tests/assets/fonts/ESface/ESFaceTRIAL-Italic.ttf b/maquette-tests/assets/fonts/ESface/ESFaceTRIAL-Italic.ttf
new file mode 100644
index 0000000..44b49aa
Binary files /dev/null and b/maquette-tests/assets/fonts/ESface/ESFaceTRIAL-Italic.ttf differ
diff --git a/maquette-tests/assets/fonts/ESface/ESFaceTRIAL-Light.ttf b/maquette-tests/assets/fonts/ESface/ESFaceTRIAL-Light.ttf
new file mode 100644
index 0000000..ed947ee
Binary files /dev/null and b/maquette-tests/assets/fonts/ESface/ESFaceTRIAL-Light.ttf differ
diff --git a/maquette-tests/assets/fonts/ESface/ESFaceTRIAL-LightItalic.ttf b/maquette-tests/assets/fonts/ESface/ESFaceTRIAL-LightItalic.ttf
new file mode 100644
index 0000000..45d52f5
Binary files /dev/null and b/maquette-tests/assets/fonts/ESface/ESFaceTRIAL-LightItalic.ttf differ
diff --git a/maquette-tests/assets/fonts/ESface/ESFaceTRIAL-Medium.ttf b/maquette-tests/assets/fonts/ESface/ESFaceTRIAL-Medium.ttf
new file mode 100644
index 0000000..c143aed
Binary files /dev/null and b/maquette-tests/assets/fonts/ESface/ESFaceTRIAL-Medium.ttf differ
diff --git a/maquette-tests/assets/fonts/ESface/ESFaceTRIAL-MediumItalic.ttf b/maquette-tests/assets/fonts/ESface/ESFaceTRIAL-MediumItalic.ttf
new file mode 100644
index 0000000..f48a46e
Binary files /dev/null and b/maquette-tests/assets/fonts/ESface/ESFaceTRIAL-MediumItalic.ttf differ
diff --git a/maquette-tests/assets/fonts/ESface/ESFaceTRIAL-Regular.ttf b/maquette-tests/assets/fonts/ESface/ESFaceTRIAL-Regular.ttf
new file mode 100644
index 0000000..8f79a08
Binary files /dev/null and b/maquette-tests/assets/fonts/ESface/ESFaceTRIAL-Regular.ttf differ
diff --git a/maquette-tests/assets/fonts/ESface/ESFaceTRIAL-SemiBold.ttf b/maquette-tests/assets/fonts/ESface/ESFaceTRIAL-SemiBold.ttf
new file mode 100644
index 0000000..ebf1ebd
Binary files /dev/null and b/maquette-tests/assets/fonts/ESface/ESFaceTRIAL-SemiBold.ttf differ
diff --git a/maquette-tests/assets/fonts/ESface/ESFaceTRIAL-SemiBoldItalic.ttf b/maquette-tests/assets/fonts/ESface/ESFaceTRIAL-SemiBoldItalic.ttf
new file mode 100644
index 0000000..b1a589c
Binary files /dev/null and b/maquette-tests/assets/fonts/ESface/ESFaceTRIAL-SemiBoldItalic.ttf differ
diff --git a/maquette-tests/assets/fonts/ESface/ESFaceTRIAL-Thin.ttf b/maquette-tests/assets/fonts/ESface/ESFaceTRIAL-Thin.ttf
new file mode 100644
index 0000000..60ea1d8
Binary files /dev/null and b/maquette-tests/assets/fonts/ESface/ESFaceTRIAL-Thin.ttf differ
diff --git a/maquette-tests/assets/fonts/ESface/ESFaceTRIAL-ThinItalic.ttf b/maquette-tests/assets/fonts/ESface/ESFaceTRIAL-ThinItalic.ttf
new file mode 100644
index 0000000..d751ef0
Binary files /dev/null and b/maquette-tests/assets/fonts/ESface/ESFaceTRIAL-ThinItalic.ttf differ
diff --git a/maquette-tests/assets/fonts/ESface/stylesheet.css b/maquette-tests/assets/fonts/ESface/stylesheet.css
new file mode 100644
index 0000000..e1db525
--- /dev/null
+++ b/maquette-tests/assets/fonts/ESface/stylesheet.css
@@ -0,0 +1,160 @@
+
+@font-face {
+ font-family: 'ESFace';
+ src: url('ESFaceTRIAL-Thin.ttf') format('truetype');
+ font-weight: 100;
+ font-style: normal;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'ESFace';
+ src: url('ESFaceTRIAL-ThinItalic.ttf') format('truetype');
+ font-weight: 100;
+ font-style: italic;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'ESFace';
+ src: url('ESFaceTRIAL-ExtraLight.ttf') format('truetype');
+ font-weight: 200;
+ font-style: normal;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'ESFace';
+ src: url('ESFaceTRIAL-ExtraLightItalic.ttf') format('truetype');
+ font-weight: 200;
+ font-style: italic;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'ESFace';
+ src: url('ESFaceTRIAL-Light.ttf') format('truetype');
+ font-weight: 300;
+ font-style: normal;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'ESFace';
+ src: url('ESFaceTRIAL-LightItalic.ttf') format('truetype');
+ font-weight: 300;
+ font-style: italic;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'ESFace';
+ src: url('ESFaceTRIAL-Book.ttf') format('truetype');
+ font-weight: normal;
+ font-style: normal;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'ESFace';
+ src: url('ESFaceTRIAL-BookItalic.ttf') format('truetype');
+ font-weight: normal;
+ font-style: italic;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'ESFace';
+ src: url('ESFaceTRIAL-Regular.ttf') format('truetype');
+ font-weight: normal;
+ font-style: normal;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'ESFace';
+ src: url('ESFaceTRIAL-Italic.ttf') format('truetype');
+ font-weight: normal;
+ font-style: italic;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'ESFace';
+ src: url('ESFaceTRIAL-Medium.ttf') format('truetype');
+ font-weight: 500;
+ font-style: normal;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'ESFace';
+ src: url('ESFaceTRIAL-MediumItalic.ttf') format('truetype');
+ font-weight: 500;
+ font-style: italic;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'ESFace';
+ src: url('ESFaceTRIAL-SemiBold.ttf') format('truetype');
+ font-weight: 600;
+ font-style: normal;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'ESFace';
+ src: url('ESFaceTRIAL-SemiBoldItalic.ttf') format('truetype');
+ font-weight: 600;
+ font-style: italic;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'ESFace';
+ src: url('ESFaceTRIAL-Bold.ttf') format('truetype');
+ font-weight: bold;
+ font-style: normal;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'ESFace';
+ src: url('ESFaceTRIAL-BoldItalic.ttf') format('truetype');
+ font-weight: bold;
+ font-style: italic;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'ESFace';
+ src: url('ESFaceTRIAL-ExtraBold.ttf') format('truetype');
+ font-weight: 800;
+ font-style: normal;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'ESFace';
+ src: url('ESFaceTRIAL-ExtraBoldItalic.ttf') format('truetype');
+ font-weight: 800;
+ font-style: italic;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'ESFace';
+ src: url('ESFaceTRIAL-Black.ttf') format('truetype');
+ font-weight: 900;
+ font-style: normal;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'ESFace';
+ src: url('ESFaceTRIAL-BlackItalic.ttf') format('truetype');
+ font-weight: 900;
+ font-style: italic;
+ font-display: swap;
+}
diff --git a/maquette-tests/assets/fonts/HNoaillesFutura/Hershey-Noailles-Futura-Duplex-Bold.otf b/maquette-tests/assets/fonts/HNoaillesFutura/Hershey-Noailles-Futura-Duplex-Bold.otf
new file mode 100644
index 0000000..c2e6f5b
Binary files /dev/null and b/maquette-tests/assets/fonts/HNoaillesFutura/Hershey-Noailles-Futura-Duplex-Bold.otf differ
diff --git a/maquette-tests/assets/fonts/HNoaillesFutura/Hershey-Noailles-Futura-Duplex-Light.otf b/maquette-tests/assets/fonts/HNoaillesFutura/Hershey-Noailles-Futura-Duplex-Light.otf
new file mode 100644
index 0000000..d6af5e9
Binary files /dev/null and b/maquette-tests/assets/fonts/HNoaillesFutura/Hershey-Noailles-Futura-Duplex-Light.otf differ
diff --git a/maquette-tests/assets/fonts/HNoaillesFutura/Hershey-Noailles-Futura-Duplex-Regular.otf b/maquette-tests/assets/fonts/HNoaillesFutura/Hershey-Noailles-Futura-Duplex-Regular.otf
new file mode 100644
index 0000000..97d6e94
Binary files /dev/null and b/maquette-tests/assets/fonts/HNoaillesFutura/Hershey-Noailles-Futura-Duplex-Regular.otf differ
diff --git a/maquette-tests/assets/fonts/HNoaillesFutura/Hershey-Noailles-Futura-Simplex-Bold.otf b/maquette-tests/assets/fonts/HNoaillesFutura/Hershey-Noailles-Futura-Simplex-Bold.otf
new file mode 100644
index 0000000..a4f6bf9
Binary files /dev/null and b/maquette-tests/assets/fonts/HNoaillesFutura/Hershey-Noailles-Futura-Simplex-Bold.otf differ
diff --git a/maquette-tests/assets/fonts/HNoaillesFutura/Hershey-Noailles-Futura-Simplex-Light.otf b/maquette-tests/assets/fonts/HNoaillesFutura/Hershey-Noailles-Futura-Simplex-Light.otf
new file mode 100644
index 0000000..bfa1440
Binary files /dev/null and b/maquette-tests/assets/fonts/HNoaillesFutura/Hershey-Noailles-Futura-Simplex-Light.otf differ
diff --git a/maquette-tests/assets/fonts/HNoaillesFutura/Hershey-Noailles-Futura-Simplex-Regular.otf b/maquette-tests/assets/fonts/HNoaillesFutura/Hershey-Noailles-Futura-Simplex-Regular.otf
new file mode 100644
index 0000000..463e863
Binary files /dev/null and b/maquette-tests/assets/fonts/HNoaillesFutura/Hershey-Noailles-Futura-Simplex-Regular.otf differ
diff --git a/maquette-tests/assets/fonts/HNoaillesFutura/Hershey-Noailles-Futura-Triplex-Bold.otf b/maquette-tests/assets/fonts/HNoaillesFutura/Hershey-Noailles-Futura-Triplex-Bold.otf
new file mode 100644
index 0000000..bb31e5a
Binary files /dev/null and b/maquette-tests/assets/fonts/HNoaillesFutura/Hershey-Noailles-Futura-Triplex-Bold.otf differ
diff --git a/maquette-tests/assets/fonts/HNoaillesFutura/Hershey-Noailles-Futura-Triplex-Light.otf b/maquette-tests/assets/fonts/HNoaillesFutura/Hershey-Noailles-Futura-Triplex-Light.otf
new file mode 100644
index 0000000..d213df5
Binary files /dev/null and b/maquette-tests/assets/fonts/HNoaillesFutura/Hershey-Noailles-Futura-Triplex-Light.otf differ
diff --git a/maquette-tests/assets/fonts/HNoaillesFutura/Hershey-Noailles-Futura-Triplex-Regular.otf b/maquette-tests/assets/fonts/HNoaillesFutura/Hershey-Noailles-Futura-Triplex-Regular.otf
new file mode 100644
index 0000000..6dc616b
Binary files /dev/null and b/maquette-tests/assets/fonts/HNoaillesFutura/Hershey-Noailles-Futura-Triplex-Regular.otf differ
diff --git a/maquette-tests/assets/fonts/HNoaillesFutura/stylesheet.css b/maquette-tests/assets/fonts/HNoaillesFutura/stylesheet.css
new file mode 100644
index 0000000..478f5d8
--- /dev/null
+++ b/maquette-tests/assets/fonts/HNoaillesFutura/stylesheet.css
@@ -0,0 +1,74 @@
+
+@font-face {
+ font-family: 'HNoailles Futura Simplex';
+ src: url('Hershey-Noailles-Futura-Simplex-Light.otf') format('opentype');
+ font-weight: 300;
+ font-style: normal;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'HNoailles Futura Simplex';
+ src: url('Hershey-Noailles-Futura-Simplex-Regular.otf') format('opentype');
+ font-weight: normal;
+ font-style: normal;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'HNoailles Futura Simplex';
+ src: url('Hershey-Noailles-Futura-Simplex-Bold.otf') format('opentype');
+ font-weight: bold;
+ font-style: normal;
+ font-display: swap;
+}
+
+
+@font-face {
+ font-family: 'HNoailles Futura Duplex';
+ src: url('Hershey-Noailles-Futura-Duplex-Light.otf') format('opentype');
+ font-weight: 300;
+ font-style: normal;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'HNoailles Futura Duplex';
+ src: url('Hershey-Noailles-Futura-Duplex-Regular.otf') format('opentype');
+ font-weight: normal;
+ font-style: normal;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'HNoailles Futura Duplex';
+ src: url('Hershey-Noailles-Futura-Duplex-Bold.otf') format('opentype');
+ font-weight: bold;
+ font-style: normal;
+ font-display: swap;
+}
+
+
+@font-face {
+ font-family: 'HNoailles Futura Triplex';
+ src: url('Hershey-Noailles-Futura-Triplex-Light.otf') format('opentype');
+ font-weight: 300;
+ font-style: normal;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'HNoailles Futura Triplex';
+ src: url('Hershey-Noailles-Futura-Triplex-Regular.otf') format('opentype');
+ font-weight: normal;
+ font-style: normal;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'HNoailles Futura Triplex';
+ src: url('Hershey-Noailles-Futura-Triplex-Bold.otf') format('opentype');
+ font-weight: bold;
+ font-style: normal;
+ font-display: swap;
+}
diff --git a/maquette-tests/assets/fonts/HNoaillesTimes/Hershey-Noailles-Times-Duplex-Bold.otf b/maquette-tests/assets/fonts/HNoaillesTimes/Hershey-Noailles-Times-Duplex-Bold.otf
new file mode 100644
index 0000000..0856b64
Binary files /dev/null and b/maquette-tests/assets/fonts/HNoaillesTimes/Hershey-Noailles-Times-Duplex-Bold.otf differ
diff --git a/maquette-tests/assets/fonts/HNoaillesTimes/Hershey-Noailles-Times-Duplex-Italic-Bold.otf b/maquette-tests/assets/fonts/HNoaillesTimes/Hershey-Noailles-Times-Duplex-Italic-Bold.otf
new file mode 100644
index 0000000..1306ee5
Binary files /dev/null and b/maquette-tests/assets/fonts/HNoaillesTimes/Hershey-Noailles-Times-Duplex-Italic-Bold.otf differ
diff --git a/maquette-tests/assets/fonts/HNoaillesTimes/Hershey-Noailles-Times-Duplex-Italic-Light.otf b/maquette-tests/assets/fonts/HNoaillesTimes/Hershey-Noailles-Times-Duplex-Italic-Light.otf
new file mode 100644
index 0000000..3575cb5
Binary files /dev/null and b/maquette-tests/assets/fonts/HNoaillesTimes/Hershey-Noailles-Times-Duplex-Italic-Light.otf differ
diff --git a/maquette-tests/assets/fonts/HNoaillesTimes/Hershey-Noailles-Times-Duplex-Italic-Regular.otf b/maquette-tests/assets/fonts/HNoaillesTimes/Hershey-Noailles-Times-Duplex-Italic-Regular.otf
new file mode 100644
index 0000000..3a45eff
Binary files /dev/null and b/maquette-tests/assets/fonts/HNoaillesTimes/Hershey-Noailles-Times-Duplex-Italic-Regular.otf differ
diff --git a/maquette-tests/assets/fonts/HNoaillesTimes/Hershey-Noailles-Times-Duplex-Light.otf b/maquette-tests/assets/fonts/HNoaillesTimes/Hershey-Noailles-Times-Duplex-Light.otf
new file mode 100644
index 0000000..d83403a
Binary files /dev/null and b/maquette-tests/assets/fonts/HNoaillesTimes/Hershey-Noailles-Times-Duplex-Light.otf differ
diff --git a/maquette-tests/assets/fonts/HNoaillesTimes/Hershey-Noailles-Times-Duplex-Regular.otf b/maquette-tests/assets/fonts/HNoaillesTimes/Hershey-Noailles-Times-Duplex-Regular.otf
new file mode 100644
index 0000000..f991a61
Binary files /dev/null and b/maquette-tests/assets/fonts/HNoaillesTimes/Hershey-Noailles-Times-Duplex-Regular.otf differ
diff --git a/maquette-tests/assets/fonts/HNoaillesTimes/Hershey-Noailles-Times-Simplex-Bold.otf b/maquette-tests/assets/fonts/HNoaillesTimes/Hershey-Noailles-Times-Simplex-Bold.otf
new file mode 100644
index 0000000..5c5181f
Binary files /dev/null and b/maquette-tests/assets/fonts/HNoaillesTimes/Hershey-Noailles-Times-Simplex-Bold.otf differ
diff --git a/maquette-tests/assets/fonts/HNoaillesTimes/Hershey-Noailles-Times-Simplex-Light.otf b/maquette-tests/assets/fonts/HNoaillesTimes/Hershey-Noailles-Times-Simplex-Light.otf
new file mode 100644
index 0000000..1bb7d54
Binary files /dev/null and b/maquette-tests/assets/fonts/HNoaillesTimes/Hershey-Noailles-Times-Simplex-Light.otf differ
diff --git a/maquette-tests/assets/fonts/HNoaillesTimes/Hershey-Noailles-Times-Simplex-Regular.otf b/maquette-tests/assets/fonts/HNoaillesTimes/Hershey-Noailles-Times-Simplex-Regular.otf
new file mode 100644
index 0000000..949b890
Binary files /dev/null and b/maquette-tests/assets/fonts/HNoaillesTimes/Hershey-Noailles-Times-Simplex-Regular.otf differ
diff --git a/maquette-tests/assets/fonts/HNoaillesTimes/Hershey-Noailles-Times-Triplex-Bold.otf b/maquette-tests/assets/fonts/HNoaillesTimes/Hershey-Noailles-Times-Triplex-Bold.otf
new file mode 100644
index 0000000..60db06b
Binary files /dev/null and b/maquette-tests/assets/fonts/HNoaillesTimes/Hershey-Noailles-Times-Triplex-Bold.otf differ
diff --git a/maquette-tests/assets/fonts/HNoaillesTimes/Hershey-Noailles-Times-Triplex-Italic-Bold.otf b/maquette-tests/assets/fonts/HNoaillesTimes/Hershey-Noailles-Times-Triplex-Italic-Bold.otf
new file mode 100644
index 0000000..e977c3f
Binary files /dev/null and b/maquette-tests/assets/fonts/HNoaillesTimes/Hershey-Noailles-Times-Triplex-Italic-Bold.otf differ
diff --git a/maquette-tests/assets/fonts/HNoaillesTimes/Hershey-Noailles-Times-Triplex-Italic-Light.otf b/maquette-tests/assets/fonts/HNoaillesTimes/Hershey-Noailles-Times-Triplex-Italic-Light.otf
new file mode 100644
index 0000000..e7d2f6b
Binary files /dev/null and b/maquette-tests/assets/fonts/HNoaillesTimes/Hershey-Noailles-Times-Triplex-Italic-Light.otf differ
diff --git a/maquette-tests/assets/fonts/HNoaillesTimes/Hershey-Noailles-Times-Triplex-Italic-Regular.otf b/maquette-tests/assets/fonts/HNoaillesTimes/Hershey-Noailles-Times-Triplex-Italic-Regular.otf
new file mode 100644
index 0000000..0e010c3
Binary files /dev/null and b/maquette-tests/assets/fonts/HNoaillesTimes/Hershey-Noailles-Times-Triplex-Italic-Regular.otf differ
diff --git a/maquette-tests/assets/fonts/HNoaillesTimes/Hershey-Noailles-Times-Triplex-Light.otf b/maquette-tests/assets/fonts/HNoaillesTimes/Hershey-Noailles-Times-Triplex-Light.otf
new file mode 100644
index 0000000..b8a3957
Binary files /dev/null and b/maquette-tests/assets/fonts/HNoaillesTimes/Hershey-Noailles-Times-Triplex-Light.otf differ
diff --git a/maquette-tests/assets/fonts/HNoaillesTimes/Hershey-Noailles-Times-Triplex-Regular.otf b/maquette-tests/assets/fonts/HNoaillesTimes/Hershey-Noailles-Times-Triplex-Regular.otf
new file mode 100644
index 0000000..8f27175
Binary files /dev/null and b/maquette-tests/assets/fonts/HNoaillesTimes/Hershey-Noailles-Times-Triplex-Regular.otf differ
diff --git a/maquette-tests/assets/fonts/HNoaillesTimes/stylesheet.css b/maquette-tests/assets/fonts/HNoaillesTimes/stylesheet.css
new file mode 100644
index 0000000..6839126
--- /dev/null
+++ b/maquette-tests/assets/fonts/HNoaillesTimes/stylesheet.css
@@ -0,0 +1,122 @@
+
+@font-face {
+ font-family: 'HNoailles Times Simplex';
+ src: url('Hershey-Noailles-Times-Simplex-Light.otf') format('opentype');
+ font-weight: 300;
+ font-style: normal;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'HNoailles Times Simplex';
+ src: url('Hershey-Noailles-Times-Simplex-Regular.otf') format('opentype');
+ font-weight: normal;
+ font-style: normal;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'HNoailles Times Simplex';
+ src: url('Hershey-Noailles-Times-Simplex-Bold.otf') format('opentype');
+ font-weight: bold;
+ font-style: normal;
+ font-display: swap;
+}
+
+
+@font-face {
+ font-family: 'HNoailles Times Duplex';
+ src: url('Hershey-Noailles-Times-Duplex-Light.otf') format('opentype');
+ font-weight: 300;
+ font-style: normal;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'HNoailles Times Duplex';
+ src: url('Hershey-Noailles-Times-Duplex-Italic-Light.otf') format('opentype');
+ font-weight: 300;
+ font-style: italic;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'HNoailles Times Duplex';
+ src: url('Hershey-Noailles-Times-Duplex-Regular.otf') format('opentype');
+ font-weight: normal;
+ font-style: normal;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'HNoailles Times Duplex';
+ src: url('Hershey-Noailles-Times-Duplex-Italic-Regular.otf') format('opentype');
+ font-weight: normal;
+ font-style: italic;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'HNoailles Times Duplex';
+ src: url('Hershey-Noailles-Times-Duplex-Bold.otf') format('opentype');
+ font-weight: bold;
+ font-style: normal;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'HNoailles Times Duplex';
+ src: url('Hershey-Noailles-Times-Duplex-Italic-Bold.otf') format('opentype');
+ font-weight: bold;
+ font-style: italic;
+ font-display: swap;
+}
+
+
+@font-face {
+ font-family: 'HNoailles Times Triplex';
+ src: url('Hershey-Noailles-Times-Triplex-Light.otf') format('opentype');
+ font-weight: 300;
+ font-style: normal;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'HNoailles Times Triplex';
+ src: url('Hershey-Noailles-Times-Triplex-Italic-Light.otf') format('opentype');
+ font-weight: 300;
+ font-style: italic;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'HNoailles Times Triplex';
+ src: url('Hershey-Noailles-Times-Triplex-Regular.otf') format('opentype');
+ font-weight: normal;
+ font-style: normal;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'HNoailles Times Triplex';
+ src: url('Hershey-Noailles-Times-Triplex-Italic-Regular.otf') format('opentype');
+ font-weight: normal;
+ font-style: italic;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'HNoailles Times Triplex';
+ src: url('Hershey-Noailles-Times-Triplex-Bold.otf') format('opentype');
+ font-weight: bold;
+ font-style: normal;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'HNoailles Times Triplex';
+ src: url('Hershey-Noailles-Times-Triplex-Italic-Bold.otf') format('opentype');
+ font-weight: bold;
+ font-style: italic;
+ font-display: swap;
+}
diff --git a/maquette-tests/assets/fonts/Ivory/IvoryLLTrialWeb-Bold.woff2 b/maquette-tests/assets/fonts/Ivory/IvoryLLTrialWeb-Bold.woff2
new file mode 100644
index 0000000..e9e26ca
Binary files /dev/null and b/maquette-tests/assets/fonts/Ivory/IvoryLLTrialWeb-Bold.woff2 differ
diff --git a/maquette-tests/assets/fonts/Ivory/IvoryLLTrialWeb-BoldItalic.woff2 b/maquette-tests/assets/fonts/Ivory/IvoryLLTrialWeb-BoldItalic.woff2
new file mode 100644
index 0000000..34ddc10
Binary files /dev/null and b/maquette-tests/assets/fonts/Ivory/IvoryLLTrialWeb-BoldItalic.woff2 differ
diff --git a/maquette-tests/assets/fonts/Ivory/IvoryLLTrialWeb-Italic.woff2 b/maquette-tests/assets/fonts/Ivory/IvoryLLTrialWeb-Italic.woff2
new file mode 100644
index 0000000..a7e3b18
Binary files /dev/null and b/maquette-tests/assets/fonts/Ivory/IvoryLLTrialWeb-Italic.woff2 differ
diff --git a/maquette-tests/assets/fonts/Ivory/IvoryLLTrialWeb-Light.woff2 b/maquette-tests/assets/fonts/Ivory/IvoryLLTrialWeb-Light.woff2
new file mode 100644
index 0000000..19460aa
Binary files /dev/null and b/maquette-tests/assets/fonts/Ivory/IvoryLLTrialWeb-Light.woff2 differ
diff --git a/maquette-tests/assets/fonts/Ivory/IvoryLLTrialWeb-LightItalic.woff2 b/maquette-tests/assets/fonts/Ivory/IvoryLLTrialWeb-LightItalic.woff2
new file mode 100644
index 0000000..7b554f7
Binary files /dev/null and b/maquette-tests/assets/fonts/Ivory/IvoryLLTrialWeb-LightItalic.woff2 differ
diff --git a/maquette-tests/assets/fonts/Ivory/IvoryLLTrialWeb-Medium.woff2 b/maquette-tests/assets/fonts/Ivory/IvoryLLTrialWeb-Medium.woff2
new file mode 100644
index 0000000..c0b8a8f
Binary files /dev/null and b/maquette-tests/assets/fonts/Ivory/IvoryLLTrialWeb-Medium.woff2 differ
diff --git a/maquette-tests/assets/fonts/Ivory/IvoryLLTrialWeb-MediumItalic.woff2 b/maquette-tests/assets/fonts/Ivory/IvoryLLTrialWeb-MediumItalic.woff2
new file mode 100644
index 0000000..bb97446
Binary files /dev/null and b/maquette-tests/assets/fonts/Ivory/IvoryLLTrialWeb-MediumItalic.woff2 differ
diff --git a/maquette-tests/assets/fonts/Ivory/IvoryLLTrialWeb-Regular.woff2 b/maquette-tests/assets/fonts/Ivory/IvoryLLTrialWeb-Regular.woff2
new file mode 100644
index 0000000..bc6da26
Binary files /dev/null and b/maquette-tests/assets/fonts/Ivory/IvoryLLTrialWeb-Regular.woff2 differ
diff --git a/maquette-tests/assets/fonts/Ivory/stylesheet.css b/maquette-tests/assets/fonts/Ivory/stylesheet.css
new file mode 100644
index 0000000..a8cb71e
--- /dev/null
+++ b/maquette-tests/assets/fonts/Ivory/stylesheet.css
@@ -0,0 +1,64 @@
+
+@font-face {
+ font-family: 'Ivory';
+ src: url('IvoryLLTrialWeb-Light.woff2') format('woff2');
+ font-weight: 300;
+ font-style: normal;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Ivory';
+ src: url('IvoryLLTrialWeb-LightItalic.woff2') format('woff2');
+ font-weight: 300;
+ font-style: italic;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Ivory';
+ src: url('IvoryLLTrialWeb-Regular.woff2') format('woff2');
+ font-weight: normal;
+ font-style: normal;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Ivory';
+ src: url('IvoryLLTrialWeb-Italic.woff2') format('woff2');
+ font-weight: normal;
+ font-style: italic;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Ivory';
+ src: url('IvoryLLTrialWeb-Medium.woff2') format('woff2');
+ font-weight: 500;
+ font-style: normal;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Ivory';
+ src: url('IvoryLLTrialWeb-MediumItalic.woff2') format('woff2');
+ font-weight: 500;
+ font-style: italic;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Ivory';
+ src: url('IvoryLLTrialWeb-Bold.woff2') format('woff2');
+ font-weight: bold;
+ font-style: normal;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Ivory';
+ src: url('IvoryLLTrialWeb-BoldItalic.woff2') format('woff2');
+ font-weight: bold;
+ font-style: italic;
+ font-display: swap;
+}
diff --git a/maquette-tests/assets/fonts/IvoryMono/IvoryMonoLLTrialWeb-Italic.woff2 b/maquette-tests/assets/fonts/IvoryMono/IvoryMonoLLTrialWeb-Italic.woff2
new file mode 100644
index 0000000..ae65bff
Binary files /dev/null and b/maquette-tests/assets/fonts/IvoryMono/IvoryMonoLLTrialWeb-Italic.woff2 differ
diff --git a/maquette-tests/assets/fonts/IvoryMono/IvoryMonoLLTrialWeb-Light.woff2 b/maquette-tests/assets/fonts/IvoryMono/IvoryMonoLLTrialWeb-Light.woff2
new file mode 100644
index 0000000..5251433
Binary files /dev/null and b/maquette-tests/assets/fonts/IvoryMono/IvoryMonoLLTrialWeb-Light.woff2 differ
diff --git a/maquette-tests/assets/fonts/IvoryMono/IvoryMonoLLTrialWeb-LightItalic.woff2 b/maquette-tests/assets/fonts/IvoryMono/IvoryMonoLLTrialWeb-LightItalic.woff2
new file mode 100644
index 0000000..86d9a67
Binary files /dev/null and b/maquette-tests/assets/fonts/IvoryMono/IvoryMonoLLTrialWeb-LightItalic.woff2 differ
diff --git a/maquette-tests/assets/fonts/IvoryMono/IvoryMonoLLTrialWeb-Medium.woff2 b/maquette-tests/assets/fonts/IvoryMono/IvoryMonoLLTrialWeb-Medium.woff2
new file mode 100644
index 0000000..09ccf96
Binary files /dev/null and b/maquette-tests/assets/fonts/IvoryMono/IvoryMonoLLTrialWeb-Medium.woff2 differ
diff --git a/maquette-tests/assets/fonts/IvoryMono/IvoryMonoLLTrialWeb-MediumItalic.woff2 b/maquette-tests/assets/fonts/IvoryMono/IvoryMonoLLTrialWeb-MediumItalic.woff2
new file mode 100644
index 0000000..580f52b
Binary files /dev/null and b/maquette-tests/assets/fonts/IvoryMono/IvoryMonoLLTrialWeb-MediumItalic.woff2 differ
diff --git a/maquette-tests/assets/fonts/IvoryMono/IvoryMonoLLTrialWeb-Regular.woff2 b/maquette-tests/assets/fonts/IvoryMono/IvoryMonoLLTrialWeb-Regular.woff2
new file mode 100644
index 0000000..19386fe
Binary files /dev/null and b/maquette-tests/assets/fonts/IvoryMono/IvoryMonoLLTrialWeb-Regular.woff2 differ
diff --git a/maquette-tests/assets/fonts/IvoryMono/stylesheet.css b/maquette-tests/assets/fonts/IvoryMono/stylesheet.css
new file mode 100644
index 0000000..52a6a6b
--- /dev/null
+++ b/maquette-tests/assets/fonts/IvoryMono/stylesheet.css
@@ -0,0 +1,48 @@
+
+@font-face {
+ font-family: 'Ivory Mono';
+ src: url('IvoryMonoLLTrialWeb-Light.woff2') format('woff2');
+ font-weight: 300;
+ font-style: normal;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Ivory Mono';
+ src: url('IvoryMonoLLTrialWeb-LightItalic.woff2') format('woff2');
+ font-weight: 300;
+ font-style: italic;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Ivory Mono';
+ src: url('IvoryMonoLLTrialWeb-Regular.woff2') format('woff2');
+ font-weight: normal;
+ font-style: normal;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Ivory Mono';
+ src: url('IvoryMonoLLTrialWeb-Italic.woff2') format('woff2');
+ font-weight: normal;
+ font-style: italic;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Ivory Mono';
+ src: url('IvoryMonoLLTrialWeb-Medium.woff2') format('woff2');
+ font-weight: 500;
+ font-style: normal;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Ivory Mono';
+ src: url('IvoryMonoLLTrialWeb-MediumItalic.woff2') format('woff2');
+ font-weight: 500;
+ font-style: italic;
+ font-display: swap;
+}
diff --git a/maquette-tests/assets/fonts/NectoMono/NectoMono-Regular.woff2 b/maquette-tests/assets/fonts/NectoMono/NectoMono-Regular.woff2
new file mode 100644
index 0000000..b0aeb25
Binary files /dev/null and b/maquette-tests/assets/fonts/NectoMono/NectoMono-Regular.woff2 differ
diff --git a/maquette-tests/assets/fonts/NectoMono/stylesheet.css b/maquette-tests/assets/fonts/NectoMono/stylesheet.css
new file mode 100644
index 0000000..654e42d
--- /dev/null
+++ b/maquette-tests/assets/fonts/NectoMono/stylesheet.css
@@ -0,0 +1,8 @@
+
+@font-face {
+ font-family: 'NectoMono';
+ src: url('NectoMono-Regular.woff2') format('woff2');
+ font-weight: normal;
+ font-style: normal;
+ font-display: swap;
+}
diff --git a/maquette-tests/assets/fonts/OldRound-luuse/OFL.txt b/maquette-tests/assets/fonts/OldRound-luuse/OFL.txt
new file mode 100644
index 0000000..5c326cd
--- /dev/null
+++ b/maquette-tests/assets/fonts/OldRound-luuse/OFL.txt
@@ -0,0 +1,93 @@
+Copyright (C) Luuse
+
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+This license is copied below, and is also available with a FAQ at:
+http://scripts.sil.org/OFL
+
+
+-----------------------------------------------------------
+SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
+-----------------------------------------------------------
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded,
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting -- in part or in whole -- any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
diff --git a/maquette-tests/assets/fonts/OldRound-luuse/OldRound-30-1-1.ttf b/maquette-tests/assets/fonts/OldRound-luuse/OldRound-30-1-1.ttf
new file mode 100644
index 0000000..c2c5052
Binary files /dev/null and b/maquette-tests/assets/fonts/OldRound-luuse/OldRound-30-1-1.ttf differ
diff --git a/maquette-tests/assets/fonts/OldRound-luuse/OldRound-30-hover.ttf b/maquette-tests/assets/fonts/OldRound-luuse/OldRound-30-hover.ttf
new file mode 100644
index 0000000..ce07eb2
Binary files /dev/null and b/maquette-tests/assets/fonts/OldRound-luuse/OldRound-30-hover.ttf differ
diff --git a/maquette-tests/assets/fonts/OldRound-luuse/OldRound-30-nonselect.ttf b/maquette-tests/assets/fonts/OldRound-luuse/OldRound-30-nonselect.ttf
new file mode 100644
index 0000000..ffb8068
Binary files /dev/null and b/maquette-tests/assets/fonts/OldRound-luuse/OldRound-30-nonselect.ttf differ
diff --git a/maquette-tests/assets/fonts/OldRound-luuse/old-round.zip b/maquette-tests/assets/fonts/OldRound-luuse/old-round.zip
new file mode 100644
index 0000000..72d4075
Binary files /dev/null and b/maquette-tests/assets/fonts/OldRound-luuse/old-round.zip differ
diff --git a/maquette-tests/assets/fonts/OldRound-luuse/stylesheet.css b/maquette-tests/assets/fonts/OldRound-luuse/stylesheet.css
new file mode 100644
index 0000000..8aae89b
--- /dev/null
+++ b/maquette-tests/assets/fonts/OldRound-luuse/stylesheet.css
@@ -0,0 +1,24 @@
+
+@font-face {
+ font-family: 'OldRound';
+ src: url('OldRound-30-1-1.ttf') format('truetype');
+ font-weight: normal;
+ font-style: normal;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'OldRound Hover';
+ src: url('OldRound-30-hover.ttf') format('truetype');
+ font-weight: normal;
+ font-style: normal;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'OldRound Nonselect';
+ src: url('OldRound-30-nonselect.ttf') format('truetype');
+ font-weight: normal;
+ font-style: normal;
+ font-display: swap;
+}
diff --git a/maquette-tests/assets/fonts/Redaction/Redaction-Bold.woff2 b/maquette-tests/assets/fonts/Redaction/Redaction-Bold.woff2
new file mode 100644
index 0000000..392d60d
Binary files /dev/null and b/maquette-tests/assets/fonts/Redaction/Redaction-Bold.woff2 differ
diff --git a/maquette-tests/assets/fonts/Redaction/Redaction-Italic.woff2 b/maquette-tests/assets/fonts/Redaction/Redaction-Italic.woff2
new file mode 100644
index 0000000..1bd3c5c
Binary files /dev/null and b/maquette-tests/assets/fonts/Redaction/Redaction-Italic.woff2 differ
diff --git a/maquette-tests/assets/fonts/Redaction/Redaction-Regular.woff2 b/maquette-tests/assets/fonts/Redaction/Redaction-Regular.woff2
new file mode 100644
index 0000000..d187654
Binary files /dev/null and b/maquette-tests/assets/fonts/Redaction/Redaction-Regular.woff2 differ
diff --git a/maquette-tests/assets/fonts/Redaction/Redaction_10-Bold.woff2 b/maquette-tests/assets/fonts/Redaction/Redaction_10-Bold.woff2
new file mode 100644
index 0000000..c6bf1b1
Binary files /dev/null and b/maquette-tests/assets/fonts/Redaction/Redaction_10-Bold.woff2 differ
diff --git a/maquette-tests/assets/fonts/Redaction/Redaction_10-Italic.woff2 b/maquette-tests/assets/fonts/Redaction/Redaction_10-Italic.woff2
new file mode 100644
index 0000000..1746de1
Binary files /dev/null and b/maquette-tests/assets/fonts/Redaction/Redaction_10-Italic.woff2 differ
diff --git a/maquette-tests/assets/fonts/Redaction/Redaction_10-Regular.woff2 b/maquette-tests/assets/fonts/Redaction/Redaction_10-Regular.woff2
new file mode 100644
index 0000000..0095a6a
Binary files /dev/null and b/maquette-tests/assets/fonts/Redaction/Redaction_10-Regular.woff2 differ
diff --git a/maquette-tests/assets/fonts/Redaction/Redaction_100-Bold.woff2 b/maquette-tests/assets/fonts/Redaction/Redaction_100-Bold.woff2
new file mode 100644
index 0000000..71e0a10
Binary files /dev/null and b/maquette-tests/assets/fonts/Redaction/Redaction_100-Bold.woff2 differ
diff --git a/maquette-tests/assets/fonts/Redaction/Redaction_100-Italic.woff2 b/maquette-tests/assets/fonts/Redaction/Redaction_100-Italic.woff2
new file mode 100644
index 0000000..706d8ad
Binary files /dev/null and b/maquette-tests/assets/fonts/Redaction/Redaction_100-Italic.woff2 differ
diff --git a/maquette-tests/assets/fonts/Redaction/Redaction_100-Regular.woff2 b/maquette-tests/assets/fonts/Redaction/Redaction_100-Regular.woff2
new file mode 100644
index 0000000..cdd97e8
Binary files /dev/null and b/maquette-tests/assets/fonts/Redaction/Redaction_100-Regular.woff2 differ
diff --git a/maquette-tests/assets/fonts/Redaction/Redaction_20-Bold.woff2 b/maquette-tests/assets/fonts/Redaction/Redaction_20-Bold.woff2
new file mode 100644
index 0000000..c4e29e5
Binary files /dev/null and b/maquette-tests/assets/fonts/Redaction/Redaction_20-Bold.woff2 differ
diff --git a/maquette-tests/assets/fonts/Redaction/Redaction_20-Italic.woff2 b/maquette-tests/assets/fonts/Redaction/Redaction_20-Italic.woff2
new file mode 100644
index 0000000..72fc206
Binary files /dev/null and b/maquette-tests/assets/fonts/Redaction/Redaction_20-Italic.woff2 differ
diff --git a/maquette-tests/assets/fonts/Redaction/Redaction_20-Regular.woff2 b/maquette-tests/assets/fonts/Redaction/Redaction_20-Regular.woff2
new file mode 100644
index 0000000..adbe270
Binary files /dev/null and b/maquette-tests/assets/fonts/Redaction/Redaction_20-Regular.woff2 differ
diff --git a/maquette-tests/assets/fonts/Redaction/Redaction_35-Bold.woff2 b/maquette-tests/assets/fonts/Redaction/Redaction_35-Bold.woff2
new file mode 100644
index 0000000..737e8be
Binary files /dev/null and b/maquette-tests/assets/fonts/Redaction/Redaction_35-Bold.woff2 differ
diff --git a/maquette-tests/assets/fonts/Redaction/Redaction_35-Italic.woff2 b/maquette-tests/assets/fonts/Redaction/Redaction_35-Italic.woff2
new file mode 100644
index 0000000..18e54ff
Binary files /dev/null and b/maquette-tests/assets/fonts/Redaction/Redaction_35-Italic.woff2 differ
diff --git a/maquette-tests/assets/fonts/Redaction/Redaction_35-Regular.woff2 b/maquette-tests/assets/fonts/Redaction/Redaction_35-Regular.woff2
new file mode 100644
index 0000000..52a9ff6
Binary files /dev/null and b/maquette-tests/assets/fonts/Redaction/Redaction_35-Regular.woff2 differ
diff --git a/maquette-tests/assets/fonts/Redaction/Redaction_50-Bold.woff2 b/maquette-tests/assets/fonts/Redaction/Redaction_50-Bold.woff2
new file mode 100644
index 0000000..af22835
Binary files /dev/null and b/maquette-tests/assets/fonts/Redaction/Redaction_50-Bold.woff2 differ
diff --git a/maquette-tests/assets/fonts/Redaction/Redaction_50-Italic.woff2 b/maquette-tests/assets/fonts/Redaction/Redaction_50-Italic.woff2
new file mode 100644
index 0000000..13e52f0
Binary files /dev/null and b/maquette-tests/assets/fonts/Redaction/Redaction_50-Italic.woff2 differ
diff --git a/maquette-tests/assets/fonts/Redaction/Redaction_50-Regular.woff2 b/maquette-tests/assets/fonts/Redaction/Redaction_50-Regular.woff2
new file mode 100644
index 0000000..26ea348
Binary files /dev/null and b/maquette-tests/assets/fonts/Redaction/Redaction_50-Regular.woff2 differ
diff --git a/maquette-tests/assets/fonts/Redaction/Redaction_70-Bold.woff2 b/maquette-tests/assets/fonts/Redaction/Redaction_70-Bold.woff2
new file mode 100644
index 0000000..929a599
Binary files /dev/null and b/maquette-tests/assets/fonts/Redaction/Redaction_70-Bold.woff2 differ
diff --git a/maquette-tests/assets/fonts/Redaction/Redaction_70-Italic.woff2 b/maquette-tests/assets/fonts/Redaction/Redaction_70-Italic.woff2
new file mode 100644
index 0000000..e97449d
Binary files /dev/null and b/maquette-tests/assets/fonts/Redaction/Redaction_70-Italic.woff2 differ
diff --git a/maquette-tests/assets/fonts/Redaction/Redaction_70-Regular.woff2 b/maquette-tests/assets/fonts/Redaction/Redaction_70-Regular.woff2
new file mode 100644
index 0000000..4ccafe4
Binary files /dev/null and b/maquette-tests/assets/fonts/Redaction/Redaction_70-Regular.woff2 differ
diff --git a/maquette-tests/assets/fonts/Redaction/stylesheet.css b/maquette-tests/assets/fonts/Redaction/stylesheet.css
new file mode 100644
index 0000000..545f032
--- /dev/null
+++ b/maquette-tests/assets/fonts/Redaction/stylesheet.css
@@ -0,0 +1,174 @@
+
+@font-face {
+ font-family: 'Redaction';
+ src: url('Redaction-Regular.woff2') format('woff2');
+ font-weight: normal;
+ font-style: normal;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Redaction';
+ src: url('Redaction-Italic.woff2') format('woff2');
+ font-weight: normal;
+ font-style: italic;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Redaction';
+ src: url('Redaction-Bold.woff2') format('woff2');
+ font-weight: bold;
+ font-style: normal;
+ font-display: swap;
+}
+
+
+@font-face {
+ font-family: 'Redaction 10';
+ src: url('Redaction_10-Regular.woff2') format('woff2');
+ font-weight: normal;
+ font-style: normal;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Redaction 10';
+ src: url('Redaction_10-Italic.woff2') format('woff2');
+ font-weight: normal;
+ font-style: italic;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Redaction 10';
+ src: url('Redaction_10-Bold.woff2') format('woff2');
+ font-weight: bold;
+ font-style: normal;
+ font-display: swap;
+}
+
+
+@font-face {
+ font-family: 'Redaction 20';
+ src: url('Redaction_20-Regular.woff2') format('woff2');
+ font-weight: normal;
+ font-style: normal;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Redaction 20';
+ src: url('Redaction_20-Italic.woff2') format('woff2');
+ font-weight: normal;
+ font-style: italic;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Redaction 20';
+ src: url('Redaction_20-Bold.woff2') format('woff2');
+ font-weight: bold;
+ font-style: normal;
+ font-display: swap;
+}
+
+
+@font-face {
+ font-family: 'Redaction 35';
+ src: url('Redaction_35-Regular.woff2') format('woff2');
+ font-weight: normal;
+ font-style: normal;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Redaction 35';
+ src: url('Redaction_35-Italic.woff2') format('woff2');
+ font-weight: normal;
+ font-style: italic;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Redaction 35';
+ src: url('Redaction_35-Bold.woff2') format('woff2');
+ font-weight: bold;
+ font-style: normal;
+ font-display: swap;
+}
+
+
+@font-face {
+ font-family: 'Redaction 50';
+ src: url('Redaction_50-Regular.woff2') format('woff2');
+ font-weight: normal;
+ font-style: normal;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Redaction 50';
+ src: url('Redaction_50-Italic.woff2') format('woff2');
+ font-weight: normal;
+ font-style: italic;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Redaction 50';
+ src: url('Redaction_50-Bold.woff2') format('woff2');
+ font-weight: bold;
+ font-style: normal;
+ font-display: swap;
+}
+
+
+@font-face {
+ font-family: 'Redaction 70';
+ src: url('Redaction_70-Regular.woff2') format('woff2');
+ font-weight: normal;
+ font-style: normal;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Redaction 70';
+ src: url('Redaction_70-Italic.woff2') format('woff2');
+ font-weight: normal;
+ font-style: italic;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Redaction 70';
+ src: url('Redaction_70-Bold.woff2') format('woff2');
+ font-weight: bold;
+ font-style: normal;
+ font-display: swap;
+}
+
+
+@font-face {
+ font-family: 'Redaction 100';
+ src: url('Redaction_100-Regular.woff2') format('woff2');
+ font-weight: normal;
+ font-style: normal;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Redaction 100';
+ src: url('Redaction_100-Italic.woff2') format('woff2');
+ font-weight: normal;
+ font-style: italic;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Redaction 100';
+ src: url('Redaction_100-Bold.woff2') format('woff2');
+ font-weight: bold;
+ font-style: normal;
+ font-display: swap;
+}
diff --git a/maquette-tests/assets/fonts/Satoshi/Satoshi-Black.eot b/maquette-tests/assets/fonts/Satoshi/Satoshi-Black.eot
new file mode 100644
index 0000000..11747f3
Binary files /dev/null and b/maquette-tests/assets/fonts/Satoshi/Satoshi-Black.eot differ
diff --git a/maquette-tests/assets/fonts/Satoshi/Satoshi-Black.ttf b/maquette-tests/assets/fonts/Satoshi/Satoshi-Black.ttf
new file mode 100644
index 0000000..62015ac
Binary files /dev/null and b/maquette-tests/assets/fonts/Satoshi/Satoshi-Black.ttf differ
diff --git a/maquette-tests/assets/fonts/Satoshi/Satoshi-Black.woff b/maquette-tests/assets/fonts/Satoshi/Satoshi-Black.woff
new file mode 100644
index 0000000..a6bee36
Binary files /dev/null and b/maquette-tests/assets/fonts/Satoshi/Satoshi-Black.woff differ
diff --git a/maquette-tests/assets/fonts/Satoshi/Satoshi-Black.woff2 b/maquette-tests/assets/fonts/Satoshi/Satoshi-Black.woff2
new file mode 100644
index 0000000..64492d5
Binary files /dev/null and b/maquette-tests/assets/fonts/Satoshi/Satoshi-Black.woff2 differ
diff --git a/maquette-tests/assets/fonts/Satoshi/Satoshi-BlackItalic.eot b/maquette-tests/assets/fonts/Satoshi/Satoshi-BlackItalic.eot
new file mode 100644
index 0000000..de2edbb
Binary files /dev/null and b/maquette-tests/assets/fonts/Satoshi/Satoshi-BlackItalic.eot differ
diff --git a/maquette-tests/assets/fonts/Satoshi/Satoshi-BlackItalic.ttf b/maquette-tests/assets/fonts/Satoshi/Satoshi-BlackItalic.ttf
new file mode 100644
index 0000000..74410b9
Binary files /dev/null and b/maquette-tests/assets/fonts/Satoshi/Satoshi-BlackItalic.ttf differ
diff --git a/maquette-tests/assets/fonts/Satoshi/Satoshi-BlackItalic.woff b/maquette-tests/assets/fonts/Satoshi/Satoshi-BlackItalic.woff
new file mode 100644
index 0000000..0e07e1c
Binary files /dev/null and b/maquette-tests/assets/fonts/Satoshi/Satoshi-BlackItalic.woff differ
diff --git a/maquette-tests/assets/fonts/Satoshi/Satoshi-BlackItalic.woff2 b/maquette-tests/assets/fonts/Satoshi/Satoshi-BlackItalic.woff2
new file mode 100644
index 0000000..9d5c911
Binary files /dev/null and b/maquette-tests/assets/fonts/Satoshi/Satoshi-BlackItalic.woff2 differ
diff --git a/maquette-tests/assets/fonts/Satoshi/Satoshi-Bold.eot b/maquette-tests/assets/fonts/Satoshi/Satoshi-Bold.eot
new file mode 100644
index 0000000..390ae25
Binary files /dev/null and b/maquette-tests/assets/fonts/Satoshi/Satoshi-Bold.eot differ
diff --git a/maquette-tests/assets/fonts/Satoshi/Satoshi-Bold.ttf b/maquette-tests/assets/fonts/Satoshi/Satoshi-Bold.ttf
new file mode 100644
index 0000000..00bc985
Binary files /dev/null and b/maquette-tests/assets/fonts/Satoshi/Satoshi-Bold.ttf differ
diff --git a/maquette-tests/assets/fonts/Satoshi/Satoshi-Bold.woff b/maquette-tests/assets/fonts/Satoshi/Satoshi-Bold.woff
new file mode 100644
index 0000000..bba8257
Binary files /dev/null and b/maquette-tests/assets/fonts/Satoshi/Satoshi-Bold.woff differ
diff --git a/maquette-tests/assets/fonts/Satoshi/Satoshi-Bold.woff2 b/maquette-tests/assets/fonts/Satoshi/Satoshi-Bold.woff2
new file mode 100644
index 0000000..0a8db7a
Binary files /dev/null and b/maquette-tests/assets/fonts/Satoshi/Satoshi-Bold.woff2 differ
diff --git a/maquette-tests/assets/fonts/Satoshi/Satoshi-BoldItalic.eot b/maquette-tests/assets/fonts/Satoshi/Satoshi-BoldItalic.eot
new file mode 100644
index 0000000..426be2a
Binary files /dev/null and b/maquette-tests/assets/fonts/Satoshi/Satoshi-BoldItalic.eot differ
diff --git a/maquette-tests/assets/fonts/Satoshi/Satoshi-BoldItalic.ttf b/maquette-tests/assets/fonts/Satoshi/Satoshi-BoldItalic.ttf
new file mode 100644
index 0000000..24f012c
Binary files /dev/null and b/maquette-tests/assets/fonts/Satoshi/Satoshi-BoldItalic.ttf differ
diff --git a/maquette-tests/assets/fonts/Satoshi/Satoshi-BoldItalic.woff b/maquette-tests/assets/fonts/Satoshi/Satoshi-BoldItalic.woff
new file mode 100644
index 0000000..8bcb7a6
Binary files /dev/null and b/maquette-tests/assets/fonts/Satoshi/Satoshi-BoldItalic.woff differ
diff --git a/maquette-tests/assets/fonts/Satoshi/Satoshi-BoldItalic.woff2 b/maquette-tests/assets/fonts/Satoshi/Satoshi-BoldItalic.woff2
new file mode 100644
index 0000000..225527f
Binary files /dev/null and b/maquette-tests/assets/fonts/Satoshi/Satoshi-BoldItalic.woff2 differ
diff --git a/maquette-tests/assets/fonts/Satoshi/Satoshi-Italic.eot b/maquette-tests/assets/fonts/Satoshi/Satoshi-Italic.eot
new file mode 100644
index 0000000..64039a8
Binary files /dev/null and b/maquette-tests/assets/fonts/Satoshi/Satoshi-Italic.eot differ
diff --git a/maquette-tests/assets/fonts/Satoshi/Satoshi-Italic.ttf b/maquette-tests/assets/fonts/Satoshi/Satoshi-Italic.ttf
new file mode 100644
index 0000000..c214f4f
Binary files /dev/null and b/maquette-tests/assets/fonts/Satoshi/Satoshi-Italic.ttf differ
diff --git a/maquette-tests/assets/fonts/Satoshi/Satoshi-Italic.woff b/maquette-tests/assets/fonts/Satoshi/Satoshi-Italic.woff
new file mode 100644
index 0000000..edd4d93
Binary files /dev/null and b/maquette-tests/assets/fonts/Satoshi/Satoshi-Italic.woff differ
diff --git a/maquette-tests/assets/fonts/Satoshi/Satoshi-Italic.woff2 b/maquette-tests/assets/fonts/Satoshi/Satoshi-Italic.woff2
new file mode 100644
index 0000000..8b98599
Binary files /dev/null and b/maquette-tests/assets/fonts/Satoshi/Satoshi-Italic.woff2 differ
diff --git a/maquette-tests/assets/fonts/Satoshi/Satoshi-Light.eot b/maquette-tests/assets/fonts/Satoshi/Satoshi-Light.eot
new file mode 100644
index 0000000..d8fcacc
Binary files /dev/null and b/maquette-tests/assets/fonts/Satoshi/Satoshi-Light.eot differ
diff --git a/maquette-tests/assets/fonts/Satoshi/Satoshi-Light.ttf b/maquette-tests/assets/fonts/Satoshi/Satoshi-Light.ttf
new file mode 100644
index 0000000..b41a2d4
Binary files /dev/null and b/maquette-tests/assets/fonts/Satoshi/Satoshi-Light.ttf differ
diff --git a/maquette-tests/assets/fonts/Satoshi/Satoshi-Light.woff b/maquette-tests/assets/fonts/Satoshi/Satoshi-Light.woff
new file mode 100644
index 0000000..8f05e4e
Binary files /dev/null and b/maquette-tests/assets/fonts/Satoshi/Satoshi-Light.woff differ
diff --git a/maquette-tests/assets/fonts/Satoshi/Satoshi-Light.woff2 b/maquette-tests/assets/fonts/Satoshi/Satoshi-Light.woff2
new file mode 100644
index 0000000..cf18cd4
Binary files /dev/null and b/maquette-tests/assets/fonts/Satoshi/Satoshi-Light.woff2 differ
diff --git a/maquette-tests/assets/fonts/Satoshi/Satoshi-LightItalic.eot b/maquette-tests/assets/fonts/Satoshi/Satoshi-LightItalic.eot
new file mode 100644
index 0000000..e34a0df
Binary files /dev/null and b/maquette-tests/assets/fonts/Satoshi/Satoshi-LightItalic.eot differ
diff --git a/maquette-tests/assets/fonts/Satoshi/Satoshi-LightItalic.ttf b/maquette-tests/assets/fonts/Satoshi/Satoshi-LightItalic.ttf
new file mode 100644
index 0000000..08f5db5
Binary files /dev/null and b/maquette-tests/assets/fonts/Satoshi/Satoshi-LightItalic.ttf differ
diff --git a/maquette-tests/assets/fonts/Satoshi/Satoshi-LightItalic.woff b/maquette-tests/assets/fonts/Satoshi/Satoshi-LightItalic.woff
new file mode 100644
index 0000000..a03a50d
Binary files /dev/null and b/maquette-tests/assets/fonts/Satoshi/Satoshi-LightItalic.woff differ
diff --git a/maquette-tests/assets/fonts/Satoshi/Satoshi-LightItalic.woff2 b/maquette-tests/assets/fonts/Satoshi/Satoshi-LightItalic.woff2
new file mode 100644
index 0000000..6bd15ad
Binary files /dev/null and b/maquette-tests/assets/fonts/Satoshi/Satoshi-LightItalic.woff2 differ
diff --git a/maquette-tests/assets/fonts/Satoshi/Satoshi-Medium.eot b/maquette-tests/assets/fonts/Satoshi/Satoshi-Medium.eot
new file mode 100644
index 0000000..83cacec
Binary files /dev/null and b/maquette-tests/assets/fonts/Satoshi/Satoshi-Medium.eot differ
diff --git a/maquette-tests/assets/fonts/Satoshi/Satoshi-Medium.ttf b/maquette-tests/assets/fonts/Satoshi/Satoshi-Medium.ttf
new file mode 100644
index 0000000..ab149b7
Binary files /dev/null and b/maquette-tests/assets/fonts/Satoshi/Satoshi-Medium.ttf differ
diff --git a/maquette-tests/assets/fonts/Satoshi/Satoshi-Medium.woff b/maquette-tests/assets/fonts/Satoshi/Satoshi-Medium.woff
new file mode 100644
index 0000000..cef3226
Binary files /dev/null and b/maquette-tests/assets/fonts/Satoshi/Satoshi-Medium.woff differ
diff --git a/maquette-tests/assets/fonts/Satoshi/Satoshi-Medium.woff2 b/maquette-tests/assets/fonts/Satoshi/Satoshi-Medium.woff2
new file mode 100644
index 0000000..ffd0ac9
Binary files /dev/null and b/maquette-tests/assets/fonts/Satoshi/Satoshi-Medium.woff2 differ
diff --git a/maquette-tests/assets/fonts/Satoshi/Satoshi-MediumItalic.eot b/maquette-tests/assets/fonts/Satoshi/Satoshi-MediumItalic.eot
new file mode 100644
index 0000000..25d229a
Binary files /dev/null and b/maquette-tests/assets/fonts/Satoshi/Satoshi-MediumItalic.eot differ
diff --git a/maquette-tests/assets/fonts/Satoshi/Satoshi-MediumItalic.ttf b/maquette-tests/assets/fonts/Satoshi/Satoshi-MediumItalic.ttf
new file mode 100644
index 0000000..387f278
Binary files /dev/null and b/maquette-tests/assets/fonts/Satoshi/Satoshi-MediumItalic.ttf differ
diff --git a/maquette-tests/assets/fonts/Satoshi/Satoshi-MediumItalic.woff b/maquette-tests/assets/fonts/Satoshi/Satoshi-MediumItalic.woff
new file mode 100644
index 0000000..46d8995
Binary files /dev/null and b/maquette-tests/assets/fonts/Satoshi/Satoshi-MediumItalic.woff differ
diff --git a/maquette-tests/assets/fonts/Satoshi/Satoshi-MediumItalic.woff2 b/maquette-tests/assets/fonts/Satoshi/Satoshi-MediumItalic.woff2
new file mode 100644
index 0000000..212adc9
Binary files /dev/null and b/maquette-tests/assets/fonts/Satoshi/Satoshi-MediumItalic.woff2 differ
diff --git a/maquette-tests/assets/fonts/Satoshi/Satoshi-Regular.eot b/maquette-tests/assets/fonts/Satoshi/Satoshi-Regular.eot
new file mode 100644
index 0000000..452666f
Binary files /dev/null and b/maquette-tests/assets/fonts/Satoshi/Satoshi-Regular.eot differ
diff --git a/maquette-tests/assets/fonts/Satoshi/Satoshi-Regular.ttf b/maquette-tests/assets/fonts/Satoshi/Satoshi-Regular.ttf
new file mode 100644
index 0000000..fe85cd6
Binary files /dev/null and b/maquette-tests/assets/fonts/Satoshi/Satoshi-Regular.ttf differ
diff --git a/maquette-tests/assets/fonts/Satoshi/Satoshi-Regular.woff b/maquette-tests/assets/fonts/Satoshi/Satoshi-Regular.woff
new file mode 100644
index 0000000..03ac195
Binary files /dev/null and b/maquette-tests/assets/fonts/Satoshi/Satoshi-Regular.woff differ
diff --git a/maquette-tests/assets/fonts/Satoshi/Satoshi-Regular.woff2 b/maquette-tests/assets/fonts/Satoshi/Satoshi-Regular.woff2
new file mode 100644
index 0000000..81c40ab
Binary files /dev/null and b/maquette-tests/assets/fonts/Satoshi/Satoshi-Regular.woff2 differ
diff --git a/maquette-tests/assets/fonts/Satoshi/Satoshi-Variable.eot b/maquette-tests/assets/fonts/Satoshi/Satoshi-Variable.eot
new file mode 100644
index 0000000..f42624e
Binary files /dev/null and b/maquette-tests/assets/fonts/Satoshi/Satoshi-Variable.eot differ
diff --git a/maquette-tests/assets/fonts/Satoshi/Satoshi-Variable.ttf b/maquette-tests/assets/fonts/Satoshi/Satoshi-Variable.ttf
new file mode 100644
index 0000000..976e85c
Binary files /dev/null and b/maquette-tests/assets/fonts/Satoshi/Satoshi-Variable.ttf differ
diff --git a/maquette-tests/assets/fonts/Satoshi/Satoshi-Variable.woff b/maquette-tests/assets/fonts/Satoshi/Satoshi-Variable.woff
new file mode 100644
index 0000000..f8dcd1d
Binary files /dev/null and b/maquette-tests/assets/fonts/Satoshi/Satoshi-Variable.woff differ
diff --git a/maquette-tests/assets/fonts/Satoshi/Satoshi-Variable.woff2 b/maquette-tests/assets/fonts/Satoshi/Satoshi-Variable.woff2
new file mode 100644
index 0000000..b00e833
Binary files /dev/null and b/maquette-tests/assets/fonts/Satoshi/Satoshi-Variable.woff2 differ
diff --git a/maquette-tests/assets/fonts/Satoshi/Satoshi-VariableItalic.eot b/maquette-tests/assets/fonts/Satoshi/Satoshi-VariableItalic.eot
new file mode 100644
index 0000000..5f4554a
Binary files /dev/null and b/maquette-tests/assets/fonts/Satoshi/Satoshi-VariableItalic.eot differ
diff --git a/maquette-tests/assets/fonts/Satoshi/Satoshi-VariableItalic.ttf b/maquette-tests/assets/fonts/Satoshi/Satoshi-VariableItalic.ttf
new file mode 100644
index 0000000..4c2677c
Binary files /dev/null and b/maquette-tests/assets/fonts/Satoshi/Satoshi-VariableItalic.ttf differ
diff --git a/maquette-tests/assets/fonts/Satoshi/Satoshi-VariableItalic.woff b/maquette-tests/assets/fonts/Satoshi/Satoshi-VariableItalic.woff
new file mode 100644
index 0000000..3fe029e
Binary files /dev/null and b/maquette-tests/assets/fonts/Satoshi/Satoshi-VariableItalic.woff differ
diff --git a/maquette-tests/assets/fonts/Satoshi/Satoshi-VariableItalic.woff2 b/maquette-tests/assets/fonts/Satoshi/Satoshi-VariableItalic.woff2
new file mode 100644
index 0000000..e7ab3a0
Binary files /dev/null and b/maquette-tests/assets/fonts/Satoshi/Satoshi-VariableItalic.woff2 differ
diff --git a/maquette-tests/assets/fonts/Satoshi/stylesheet.css b/maquette-tests/assets/fonts/Satoshi/stylesheet.css
new file mode 100644
index 0000000..f0876e2
--- /dev/null
+++ b/maquette-tests/assets/fonts/Satoshi/stylesheet.css
@@ -0,0 +1,108 @@
+
+@font-face {
+ font-family: 'Satoshi';
+ src: url('Satoshi-Variable.woff2') format('woff2'),
+ url('Satoshi-Variable.woff') format('woff');
+ font-weight: 300 900;
+ font-style: normal;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Satoshi';
+ src: url('Satoshi-VariableItalic.woff2') format('woff2'),
+ url('Satoshi-VariableItalic.woff') format('woff');
+ font-weight: 300 900;
+ font-style: italic;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Satoshi';
+ src: url('Satoshi-Light.woff2') format('woff2'),
+ url('Satoshi-Light.woff') format('woff');
+ font-weight: 300;
+ font-style: normal;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Satoshi';
+ src: url('Satoshi-LightItalic.woff2') format('woff2'),
+ url('Satoshi-LightItalic.woff') format('woff');
+ font-weight: 300;
+ font-style: italic;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Satoshi';
+ src: url('Satoshi-Regular.woff2') format('woff2'),
+ url('Satoshi-Regular.woff') format('woff');
+ font-weight: normal;
+ font-style: normal;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Satoshi';
+ src: url('Satoshi-Italic.woff2') format('woff2'),
+ url('Satoshi-Italic.woff') format('woff');
+ font-weight: normal;
+ font-style: italic;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Satoshi';
+ src: url('Satoshi-Medium.woff2') format('woff2'),
+ url('Satoshi-Medium.woff') format('woff');
+ font-weight: 500;
+ font-style: normal;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Satoshi';
+ src: url('Satoshi-MediumItalic.woff2') format('woff2'),
+ url('Satoshi-MediumItalic.woff') format('woff');
+ font-weight: 500;
+ font-style: italic;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Satoshi';
+ src: url('Satoshi-Bold.woff2') format('woff2'),
+ url('Satoshi-Bold.woff') format('woff');
+ font-weight: bold;
+ font-style: normal;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Satoshi';
+ src: url('Satoshi-BoldItalic.woff2') format('woff2'),
+ url('Satoshi-BoldItalic.woff') format('woff');
+ font-weight: bold;
+ font-style: italic;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Satoshi';
+ src: url('Satoshi-Black.woff2') format('woff2'),
+ url('Satoshi-Black.woff') format('woff');
+ font-weight: 900;
+ font-style: normal;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Satoshi';
+ src: url('Satoshi-BlackItalic.woff2') format('woff2'),
+ url('Satoshi-BlackItalic.woff') format('woff');
+ font-weight: 900;
+ font-style: italic;
+ font-display: swap;
+}
diff --git a/maquette-tests/assets/fonts/Selectric/SelectricMono.woff b/maquette-tests/assets/fonts/Selectric/SelectricMono.woff
new file mode 100644
index 0000000..2d3fcce
Binary files /dev/null and b/maquette-tests/assets/fonts/Selectric/SelectricMono.woff differ
diff --git a/maquette-tests/assets/fonts/Selectric/SelectricMono.woff2 b/maquette-tests/assets/fonts/Selectric/SelectricMono.woff2
new file mode 100644
index 0000000..55122d1
Binary files /dev/null and b/maquette-tests/assets/fonts/Selectric/SelectricMono.woff2 differ
diff --git a/maquette-tests/assets/fonts/Selectric/SelectricRoman.woff b/maquette-tests/assets/fonts/Selectric/SelectricRoman.woff
new file mode 100644
index 0000000..8debc4e
Binary files /dev/null and b/maquette-tests/assets/fonts/Selectric/SelectricRoman.woff differ
diff --git a/maquette-tests/assets/fonts/Selectric/SelectricRoman.woff2 b/maquette-tests/assets/fonts/Selectric/SelectricRoman.woff2
new file mode 100644
index 0000000..0d43815
Binary files /dev/null and b/maquette-tests/assets/fonts/Selectric/SelectricRoman.woff2 differ
diff --git a/maquette-tests/assets/fonts/Selectric/stylesheet.css b/maquette-tests/assets/fonts/Selectric/stylesheet.css
new file mode 100644
index 0000000..41d6ea1
--- /dev/null
+++ b/maquette-tests/assets/fonts/Selectric/stylesheet.css
@@ -0,0 +1,18 @@
+@font-face {
+ font-family: 'Selectric Mono';
+ src: url('SelectricMono.woff2') format('woff2'),
+ url('SelectricMono.woff') format('woff');
+ font-weight: normal;
+ font-style: normal;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Selectric';
+ src: url('SelectricRoman.woff2') format('woff2'),
+ url('SelectricRoman.woff') format('woff');
+ font-weight: normal;
+ font-style: normal;
+ font-display: swap;
+}
+
diff --git a/maquette-tests/assets/fonts/Timezone-HAL/HALTimezone-Italic.woff b/maquette-tests/assets/fonts/Timezone-HAL/HALTimezone-Italic.woff
new file mode 100644
index 0000000..2b397f0
Binary files /dev/null and b/maquette-tests/assets/fonts/Timezone-HAL/HALTimezone-Italic.woff differ
diff --git a/maquette-tests/assets/fonts/Timezone-HAL/HALTimezone-Italic.woff2 b/maquette-tests/assets/fonts/Timezone-HAL/HALTimezone-Italic.woff2
new file mode 100644
index 0000000..3c6348c
Binary files /dev/null and b/maquette-tests/assets/fonts/Timezone-HAL/HALTimezone-Italic.woff2 differ
diff --git a/maquette-tests/assets/fonts/Timezone-HAL/HALTimezone-Regular.woff b/maquette-tests/assets/fonts/Timezone-HAL/HALTimezone-Regular.woff
new file mode 100644
index 0000000..f861bd5
Binary files /dev/null and b/maquette-tests/assets/fonts/Timezone-HAL/HALTimezone-Regular.woff differ
diff --git a/maquette-tests/assets/fonts/Timezone-HAL/HALTimezone-Regular.woff2 b/maquette-tests/assets/fonts/Timezone-HAL/HALTimezone-Regular.woff2
new file mode 100644
index 0000000..4950b47
Binary files /dev/null and b/maquette-tests/assets/fonts/Timezone-HAL/HALTimezone-Regular.woff2 differ
diff --git a/maquette-tests/assets/fonts/Timezone-HAL/HALTimezoneMono-Regular.woff b/maquette-tests/assets/fonts/Timezone-HAL/HALTimezoneMono-Regular.woff
new file mode 100644
index 0000000..a284cb4
Binary files /dev/null and b/maquette-tests/assets/fonts/Timezone-HAL/HALTimezoneMono-Regular.woff differ
diff --git a/maquette-tests/assets/fonts/Timezone-HAL/HALTimezoneMono-Regular.woff2 b/maquette-tests/assets/fonts/Timezone-HAL/HALTimezoneMono-Regular.woff2
new file mode 100644
index 0000000..ad1a4e6
Binary files /dev/null and b/maquette-tests/assets/fonts/Timezone-HAL/HALTimezoneMono-Regular.woff2 differ
diff --git a/maquette-tests/assets/fonts/Timezone-HAL/stylesheet.css b/maquette-tests/assets/fonts/Timezone-HAL/stylesheet.css
new file mode 100644
index 0000000..a27e564
--- /dev/null
+++ b/maquette-tests/assets/fonts/Timezone-HAL/stylesheet.css
@@ -0,0 +1,27 @@
+@font-face {
+ font-family: 'HAL Timezone';
+ src: url('HALTimezone-Italic.woff2') format('woff2'),
+ url('HALTimezone-Italic.woff') format('woff');
+ font-weight: normal;
+ font-style: italic;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'HAL Timezone Mono';
+ src: url('HALTimezoneMono-Regular.woff2') format('woff2'),
+ url('HALTimezoneMono-Regular.woff') format('woff');
+ font-weight: normal;
+ font-style: normal;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'HAL Timezone';
+ src: url('HALTimezone-Regular.woff2') format('woff2'),
+ url('HALTimezone-Regular.woff') format('woff');
+ font-weight: normal;
+ font-style: normal;
+ font-display: swap;
+}
+
diff --git a/maquette-tests/assets/fonts/Vincent/HALVincent-Empty.woff b/maquette-tests/assets/fonts/Vincent/HALVincent-Empty.woff
new file mode 100644
index 0000000..2365e67
Binary files /dev/null and b/maquette-tests/assets/fonts/Vincent/HALVincent-Empty.woff differ
diff --git a/maquette-tests/assets/fonts/Vincent/HALVincent-Empty.woff2 b/maquette-tests/assets/fonts/Vincent/HALVincent-Empty.woff2
new file mode 100644
index 0000000..2a4e7ac
Binary files /dev/null and b/maquette-tests/assets/fonts/Vincent/HALVincent-Empty.woff2 differ
diff --git a/maquette-tests/assets/fonts/Vincent/HALVincent-Full.woff b/maquette-tests/assets/fonts/Vincent/HALVincent-Full.woff
new file mode 100644
index 0000000..3f6bdff
Binary files /dev/null and b/maquette-tests/assets/fonts/Vincent/HALVincent-Full.woff differ
diff --git a/maquette-tests/assets/fonts/Vincent/HALVincent-Full.woff2 b/maquette-tests/assets/fonts/Vincent/HALVincent-Full.woff2
new file mode 100644
index 0000000..de6cbc6
Binary files /dev/null and b/maquette-tests/assets/fonts/Vincent/HALVincent-Full.woff2 differ
diff --git a/maquette-tests/assets/fonts/Vincent/stylesheet.css b/maquette-tests/assets/fonts/Vincent/stylesheet.css
new file mode 100644
index 0000000..04ed2d1
--- /dev/null
+++ b/maquette-tests/assets/fonts/Vincent/stylesheet.css
@@ -0,0 +1,18 @@
+@font-face {
+ font-family: 'HAL Vincent Empty';
+ src: url('HALVincent-Empty.woff2') format('woff2'),
+ url('HALVincent-Empty.woff') format('woff');
+ font-weight: normal;
+ font-style: normal;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'HAL Vincent Full';
+ src: url('HALVincent-Full.woff2') format('woff2'),
+ url('HALVincent-Full.woff') format('woff');
+ font-weight: normal;
+ font-style: normal;
+ font-display: swap;
+}
+
diff --git a/maquette-tests/assets/fonts/Wagram/00Wagram-Black.woff b/maquette-tests/assets/fonts/Wagram/00Wagram-Black.woff
new file mode 100644
index 0000000..d2bf744
Binary files /dev/null and b/maquette-tests/assets/fonts/Wagram/00Wagram-Black.woff differ
diff --git a/maquette-tests/assets/fonts/Wagram/00Wagram-Black.woff2 b/maquette-tests/assets/fonts/Wagram/00Wagram-Black.woff2
new file mode 100644
index 0000000..3d21557
Binary files /dev/null and b/maquette-tests/assets/fonts/Wagram/00Wagram-Black.woff2 differ
diff --git a/maquette-tests/assets/fonts/Wagram/00Wagram-BlackItalic.woff b/maquette-tests/assets/fonts/Wagram/00Wagram-BlackItalic.woff
new file mode 100644
index 0000000..804e2d2
Binary files /dev/null and b/maquette-tests/assets/fonts/Wagram/00Wagram-BlackItalic.woff differ
diff --git a/maquette-tests/assets/fonts/Wagram/00Wagram-BlackItalic.woff2 b/maquette-tests/assets/fonts/Wagram/00Wagram-BlackItalic.woff2
new file mode 100644
index 0000000..5c1335f
Binary files /dev/null and b/maquette-tests/assets/fonts/Wagram/00Wagram-BlackItalic.woff2 differ
diff --git a/maquette-tests/assets/fonts/Wagram/00Wagram-Bold.woff b/maquette-tests/assets/fonts/Wagram/00Wagram-Bold.woff
new file mode 100644
index 0000000..ee641b4
Binary files /dev/null and b/maquette-tests/assets/fonts/Wagram/00Wagram-Bold.woff differ
diff --git a/maquette-tests/assets/fonts/Wagram/00Wagram-Bold.woff2 b/maquette-tests/assets/fonts/Wagram/00Wagram-Bold.woff2
new file mode 100644
index 0000000..91adee3
Binary files /dev/null and b/maquette-tests/assets/fonts/Wagram/00Wagram-Bold.woff2 differ
diff --git a/maquette-tests/assets/fonts/Wagram/00Wagram-BoldItalic.woff b/maquette-tests/assets/fonts/Wagram/00Wagram-BoldItalic.woff
new file mode 100644
index 0000000..c4366cb
Binary files /dev/null and b/maquette-tests/assets/fonts/Wagram/00Wagram-BoldItalic.woff differ
diff --git a/maquette-tests/assets/fonts/Wagram/00Wagram-BoldItalic.woff2 b/maquette-tests/assets/fonts/Wagram/00Wagram-BoldItalic.woff2
new file mode 100644
index 0000000..f902617
Binary files /dev/null and b/maquette-tests/assets/fonts/Wagram/00Wagram-BoldItalic.woff2 differ
diff --git a/maquette-tests/assets/fonts/Wagram/00Wagram-Italic.woff b/maquette-tests/assets/fonts/Wagram/00Wagram-Italic.woff
new file mode 100644
index 0000000..8af8340
Binary files /dev/null and b/maquette-tests/assets/fonts/Wagram/00Wagram-Italic.woff differ
diff --git a/maquette-tests/assets/fonts/Wagram/00Wagram-Italic.woff2 b/maquette-tests/assets/fonts/Wagram/00Wagram-Italic.woff2
new file mode 100644
index 0000000..d81ec9d
Binary files /dev/null and b/maquette-tests/assets/fonts/Wagram/00Wagram-Italic.woff2 differ
diff --git a/maquette-tests/assets/fonts/Wagram/00Wagram-Light.woff b/maquette-tests/assets/fonts/Wagram/00Wagram-Light.woff
new file mode 100644
index 0000000..d630b28
Binary files /dev/null and b/maquette-tests/assets/fonts/Wagram/00Wagram-Light.woff differ
diff --git a/maquette-tests/assets/fonts/Wagram/00Wagram-Light.woff2 b/maquette-tests/assets/fonts/Wagram/00Wagram-Light.woff2
new file mode 100644
index 0000000..2b8ebee
Binary files /dev/null and b/maquette-tests/assets/fonts/Wagram/00Wagram-Light.woff2 differ
diff --git a/maquette-tests/assets/fonts/Wagram/00Wagram-LightItalic.woff b/maquette-tests/assets/fonts/Wagram/00Wagram-LightItalic.woff
new file mode 100644
index 0000000..23d9a1c
Binary files /dev/null and b/maquette-tests/assets/fonts/Wagram/00Wagram-LightItalic.woff differ
diff --git a/maquette-tests/assets/fonts/Wagram/00Wagram-LightItalic.woff2 b/maquette-tests/assets/fonts/Wagram/00Wagram-LightItalic.woff2
new file mode 100644
index 0000000..31da5fd
Binary files /dev/null and b/maquette-tests/assets/fonts/Wagram/00Wagram-LightItalic.woff2 differ
diff --git a/maquette-tests/assets/fonts/Wagram/00Wagram-Medium.woff b/maquette-tests/assets/fonts/Wagram/00Wagram-Medium.woff
new file mode 100644
index 0000000..c4a0a14
Binary files /dev/null and b/maquette-tests/assets/fonts/Wagram/00Wagram-Medium.woff differ
diff --git a/maquette-tests/assets/fonts/Wagram/00Wagram-Medium.woff2 b/maquette-tests/assets/fonts/Wagram/00Wagram-Medium.woff2
new file mode 100644
index 0000000..79f1009
Binary files /dev/null and b/maquette-tests/assets/fonts/Wagram/00Wagram-Medium.woff2 differ
diff --git a/maquette-tests/assets/fonts/Wagram/00Wagram-MediumItalic.woff b/maquette-tests/assets/fonts/Wagram/00Wagram-MediumItalic.woff
new file mode 100644
index 0000000..5d58492
Binary files /dev/null and b/maquette-tests/assets/fonts/Wagram/00Wagram-MediumItalic.woff differ
diff --git a/maquette-tests/assets/fonts/Wagram/00Wagram-MediumItalic.woff2 b/maquette-tests/assets/fonts/Wagram/00Wagram-MediumItalic.woff2
new file mode 100644
index 0000000..a2136ae
Binary files /dev/null and b/maquette-tests/assets/fonts/Wagram/00Wagram-MediumItalic.woff2 differ
diff --git a/maquette-tests/assets/fonts/Wagram/00Wagram-Regular.woff b/maquette-tests/assets/fonts/Wagram/00Wagram-Regular.woff
new file mode 100644
index 0000000..af7f36c
Binary files /dev/null and b/maquette-tests/assets/fonts/Wagram/00Wagram-Regular.woff differ
diff --git a/maquette-tests/assets/fonts/Wagram/00Wagram-Regular.woff2 b/maquette-tests/assets/fonts/Wagram/00Wagram-Regular.woff2
new file mode 100644
index 0000000..64d082e
Binary files /dev/null and b/maquette-tests/assets/fonts/Wagram/00Wagram-Regular.woff2 differ
diff --git a/maquette-tests/assets/fonts/Wagram/00Wagram-Thin.woff b/maquette-tests/assets/fonts/Wagram/00Wagram-Thin.woff
new file mode 100644
index 0000000..0fd9ba3
Binary files /dev/null and b/maquette-tests/assets/fonts/Wagram/00Wagram-Thin.woff differ
diff --git a/maquette-tests/assets/fonts/Wagram/00Wagram-Thin.woff2 b/maquette-tests/assets/fonts/Wagram/00Wagram-Thin.woff2
new file mode 100644
index 0000000..eeda6f9
Binary files /dev/null and b/maquette-tests/assets/fonts/Wagram/00Wagram-Thin.woff2 differ
diff --git a/maquette-tests/assets/fonts/Wagram/00Wagram-ThinItalic.woff b/maquette-tests/assets/fonts/Wagram/00Wagram-ThinItalic.woff
new file mode 100644
index 0000000..f3d2a8c
Binary files /dev/null and b/maquette-tests/assets/fonts/Wagram/00Wagram-ThinItalic.woff differ
diff --git a/maquette-tests/assets/fonts/Wagram/00Wagram-ThinItalic.woff2 b/maquette-tests/assets/fonts/Wagram/00Wagram-ThinItalic.woff2
new file mode 100644
index 0000000..42b3b7b
Binary files /dev/null and b/maquette-tests/assets/fonts/Wagram/00Wagram-ThinItalic.woff2 differ
diff --git a/maquette-tests/assets/fonts/Wagram/stylesheet.css b/maquette-tests/assets/fonts/Wagram/stylesheet.css
new file mode 100644
index 0000000..54b5268
--- /dev/null
+++ b/maquette-tests/assets/fonts/Wagram/stylesheet.css
@@ -0,0 +1,108 @@
+@font-face {
+ font-family: 'Wagram';
+ src: url('00Wagram-BlackItalic.woff2') format('woff2'),
+ url('00Wagram-BlackItalic.woff') format('woff');
+ font-weight: 900;
+ font-style: italic;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Wagram';
+ src: url('00Wagram-BoldItalic.woff2') format('woff2'),
+ url('00Wagram-BoldItalic.woff') format('woff');
+ font-weight: bold;
+ font-style: italic;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Wagram';
+ src: url('00Wagram-Black.woff2') format('woff2'),
+ url('00Wagram-Black.woff') format('woff');
+ font-weight: 900;
+ font-style: normal;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Wagram';
+ src: url('00Wagram-Bold.woff2') format('woff2'),
+ url('00Wagram-Bold.woff') format('woff');
+ font-weight: bold;
+ font-style: normal;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Wagram';
+ src: url('00Wagram-Medium.woff2') format('woff2'),
+ url('00Wagram-Medium.woff') format('woff');
+ font-weight: 500;
+ font-style: normal;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Wagram';
+ src: url('00Wagram-MediumItalic.woff2') format('woff2'),
+ url('00Wagram-MediumItalic.woff') format('woff');
+ font-weight: 500;
+ font-style: italic;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Wagram';
+ src: url('00Wagram-Regular.woff2') format('woff2'),
+ url('00Wagram-Regular.woff') format('woff');
+ font-weight: normal;
+ font-style: normal;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Wagram';
+ src: url('00Wagram-Italic.woff2') format('woff2'),
+ url('00Wagram-Italic.woff') format('woff');
+ font-weight: normal;
+ font-style: italic;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Wagram';
+ src: url('00Wagram-LightItalic.woff2') format('woff2'),
+ url('00Wagram-LightItalic.woff') format('woff');
+ font-weight: 300;
+ font-style: italic;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Wagram';
+ src: url('00Wagram-ThinItalic.woff2') format('woff2'),
+ url('00Wagram-ThinItalic.woff') format('woff');
+ font-weight: 100;
+ font-style: italic;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Wagram';
+ src: url('00Wagram-Light.woff2') format('woff2'),
+ url('00Wagram-Light.woff') format('woff');
+ font-weight: 300;
+ font-style: normal;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Wagram';
+ src: url('00Wagram-Thin.woff2') format('woff2'),
+ url('00Wagram-Thin.woff') format('woff');
+ font-weight: 100;
+ font-style: normal;
+ font-display: swap;
+}
+
diff --git a/maquette-tests/assets/fonts/WagramMonoSlab/00WagramMonoSlab-Black.woff b/maquette-tests/assets/fonts/WagramMonoSlab/00WagramMonoSlab-Black.woff
new file mode 100644
index 0000000..31d2164
Binary files /dev/null and b/maquette-tests/assets/fonts/WagramMonoSlab/00WagramMonoSlab-Black.woff differ
diff --git a/maquette-tests/assets/fonts/WagramMonoSlab/00WagramMonoSlab-Black.woff2 b/maquette-tests/assets/fonts/WagramMonoSlab/00WagramMonoSlab-Black.woff2
new file mode 100644
index 0000000..bddc502
Binary files /dev/null and b/maquette-tests/assets/fonts/WagramMonoSlab/00WagramMonoSlab-Black.woff2 differ
diff --git a/maquette-tests/assets/fonts/WagramMonoSlab/00WagramMonoSlab-BlackItalic.woff b/maquette-tests/assets/fonts/WagramMonoSlab/00WagramMonoSlab-BlackItalic.woff
new file mode 100644
index 0000000..48f40f8
Binary files /dev/null and b/maquette-tests/assets/fonts/WagramMonoSlab/00WagramMonoSlab-BlackItalic.woff differ
diff --git a/maquette-tests/assets/fonts/WagramMonoSlab/00WagramMonoSlab-BlackItalic.woff2 b/maquette-tests/assets/fonts/WagramMonoSlab/00WagramMonoSlab-BlackItalic.woff2
new file mode 100644
index 0000000..099219f
Binary files /dev/null and b/maquette-tests/assets/fonts/WagramMonoSlab/00WagramMonoSlab-BlackItalic.woff2 differ
diff --git a/maquette-tests/assets/fonts/WagramMonoSlab/00WagramMonoSlab-Bold.woff b/maquette-tests/assets/fonts/WagramMonoSlab/00WagramMonoSlab-Bold.woff
new file mode 100644
index 0000000..16229d0
Binary files /dev/null and b/maquette-tests/assets/fonts/WagramMonoSlab/00WagramMonoSlab-Bold.woff differ
diff --git a/maquette-tests/assets/fonts/WagramMonoSlab/00WagramMonoSlab-Bold.woff2 b/maquette-tests/assets/fonts/WagramMonoSlab/00WagramMonoSlab-Bold.woff2
new file mode 100644
index 0000000..4f30ebc
Binary files /dev/null and b/maquette-tests/assets/fonts/WagramMonoSlab/00WagramMonoSlab-Bold.woff2 differ
diff --git a/maquette-tests/assets/fonts/WagramMonoSlab/00WagramMonoSlab-BoldItalic.woff b/maquette-tests/assets/fonts/WagramMonoSlab/00WagramMonoSlab-BoldItalic.woff
new file mode 100644
index 0000000..b7632d3
Binary files /dev/null and b/maquette-tests/assets/fonts/WagramMonoSlab/00WagramMonoSlab-BoldItalic.woff differ
diff --git a/maquette-tests/assets/fonts/WagramMonoSlab/00WagramMonoSlab-BoldItalic.woff2 b/maquette-tests/assets/fonts/WagramMonoSlab/00WagramMonoSlab-BoldItalic.woff2
new file mode 100644
index 0000000..ed6a863
Binary files /dev/null and b/maquette-tests/assets/fonts/WagramMonoSlab/00WagramMonoSlab-BoldItalic.woff2 differ
diff --git a/maquette-tests/assets/fonts/WagramMonoSlab/00WagramMonoSlab-Italic.woff b/maquette-tests/assets/fonts/WagramMonoSlab/00WagramMonoSlab-Italic.woff
new file mode 100644
index 0000000..94fc1d7
Binary files /dev/null and b/maquette-tests/assets/fonts/WagramMonoSlab/00WagramMonoSlab-Italic.woff differ
diff --git a/maquette-tests/assets/fonts/WagramMonoSlab/00WagramMonoSlab-Italic.woff2 b/maquette-tests/assets/fonts/WagramMonoSlab/00WagramMonoSlab-Italic.woff2
new file mode 100644
index 0000000..dbf90bd
Binary files /dev/null and b/maquette-tests/assets/fonts/WagramMonoSlab/00WagramMonoSlab-Italic.woff2 differ
diff --git a/maquette-tests/assets/fonts/WagramMonoSlab/00WagramMonoSlab-Light.woff b/maquette-tests/assets/fonts/WagramMonoSlab/00WagramMonoSlab-Light.woff
new file mode 100644
index 0000000..b8143bd
Binary files /dev/null and b/maquette-tests/assets/fonts/WagramMonoSlab/00WagramMonoSlab-Light.woff differ
diff --git a/maquette-tests/assets/fonts/WagramMonoSlab/00WagramMonoSlab-Light.woff2 b/maquette-tests/assets/fonts/WagramMonoSlab/00WagramMonoSlab-Light.woff2
new file mode 100644
index 0000000..2bd1a64
Binary files /dev/null and b/maquette-tests/assets/fonts/WagramMonoSlab/00WagramMonoSlab-Light.woff2 differ
diff --git a/maquette-tests/assets/fonts/WagramMonoSlab/00WagramMonoSlab-LightItalic.woff b/maquette-tests/assets/fonts/WagramMonoSlab/00WagramMonoSlab-LightItalic.woff
new file mode 100644
index 0000000..229e10a
Binary files /dev/null and b/maquette-tests/assets/fonts/WagramMonoSlab/00WagramMonoSlab-LightItalic.woff differ
diff --git a/maquette-tests/assets/fonts/WagramMonoSlab/00WagramMonoSlab-LightItalic.woff2 b/maquette-tests/assets/fonts/WagramMonoSlab/00WagramMonoSlab-LightItalic.woff2
new file mode 100644
index 0000000..fcc9e69
Binary files /dev/null and b/maquette-tests/assets/fonts/WagramMonoSlab/00WagramMonoSlab-LightItalic.woff2 differ
diff --git a/maquette-tests/assets/fonts/WagramMonoSlab/00WagramMonoSlab-Medium.woff b/maquette-tests/assets/fonts/WagramMonoSlab/00WagramMonoSlab-Medium.woff
new file mode 100644
index 0000000..23446a3
Binary files /dev/null and b/maquette-tests/assets/fonts/WagramMonoSlab/00WagramMonoSlab-Medium.woff differ
diff --git a/maquette-tests/assets/fonts/WagramMonoSlab/00WagramMonoSlab-Medium.woff2 b/maquette-tests/assets/fonts/WagramMonoSlab/00WagramMonoSlab-Medium.woff2
new file mode 100644
index 0000000..befc57a
Binary files /dev/null and b/maquette-tests/assets/fonts/WagramMonoSlab/00WagramMonoSlab-Medium.woff2 differ
diff --git a/maquette-tests/assets/fonts/WagramMonoSlab/00WagramMonoSlab-MediumItalic.woff b/maquette-tests/assets/fonts/WagramMonoSlab/00WagramMonoSlab-MediumItalic.woff
new file mode 100644
index 0000000..df566b9
Binary files /dev/null and b/maquette-tests/assets/fonts/WagramMonoSlab/00WagramMonoSlab-MediumItalic.woff differ
diff --git a/maquette-tests/assets/fonts/WagramMonoSlab/00WagramMonoSlab-MediumItalic.woff2 b/maquette-tests/assets/fonts/WagramMonoSlab/00WagramMonoSlab-MediumItalic.woff2
new file mode 100644
index 0000000..e7ac821
Binary files /dev/null and b/maquette-tests/assets/fonts/WagramMonoSlab/00WagramMonoSlab-MediumItalic.woff2 differ
diff --git a/maquette-tests/assets/fonts/WagramMonoSlab/00WagramMonoSlab-Regular.woff b/maquette-tests/assets/fonts/WagramMonoSlab/00WagramMonoSlab-Regular.woff
new file mode 100644
index 0000000..e08d5a8
Binary files /dev/null and b/maquette-tests/assets/fonts/WagramMonoSlab/00WagramMonoSlab-Regular.woff differ
diff --git a/maquette-tests/assets/fonts/WagramMonoSlab/00WagramMonoSlab-Regular.woff2 b/maquette-tests/assets/fonts/WagramMonoSlab/00WagramMonoSlab-Regular.woff2
new file mode 100644
index 0000000..962cd2c
Binary files /dev/null and b/maquette-tests/assets/fonts/WagramMonoSlab/00WagramMonoSlab-Regular.woff2 differ
diff --git a/maquette-tests/assets/fonts/WagramMonoSlab/00WagramMonoSlab-Thin.woff b/maquette-tests/assets/fonts/WagramMonoSlab/00WagramMonoSlab-Thin.woff
new file mode 100644
index 0000000..675c193
Binary files /dev/null and b/maquette-tests/assets/fonts/WagramMonoSlab/00WagramMonoSlab-Thin.woff differ
diff --git a/maquette-tests/assets/fonts/WagramMonoSlab/00WagramMonoSlab-Thin.woff2 b/maquette-tests/assets/fonts/WagramMonoSlab/00WagramMonoSlab-Thin.woff2
new file mode 100644
index 0000000..e2302f3
Binary files /dev/null and b/maquette-tests/assets/fonts/WagramMonoSlab/00WagramMonoSlab-Thin.woff2 differ
diff --git a/maquette-tests/assets/fonts/WagramMonoSlab/00WagramMonoSlab-ThinItalic.woff b/maquette-tests/assets/fonts/WagramMonoSlab/00WagramMonoSlab-ThinItalic.woff
new file mode 100644
index 0000000..0e8d8d7
Binary files /dev/null and b/maquette-tests/assets/fonts/WagramMonoSlab/00WagramMonoSlab-ThinItalic.woff differ
diff --git a/maquette-tests/assets/fonts/WagramMonoSlab/00WagramMonoSlab-ThinItalic.woff2 b/maquette-tests/assets/fonts/WagramMonoSlab/00WagramMonoSlab-ThinItalic.woff2
new file mode 100644
index 0000000..ca3a92e
Binary files /dev/null and b/maquette-tests/assets/fonts/WagramMonoSlab/00WagramMonoSlab-ThinItalic.woff2 differ
diff --git a/maquette-tests/assets/fonts/WagramMonoSlab/stylesheet.css b/maquette-tests/assets/fonts/WagramMonoSlab/stylesheet.css
new file mode 100644
index 0000000..7197377
--- /dev/null
+++ b/maquette-tests/assets/fonts/WagramMonoSlab/stylesheet.css
@@ -0,0 +1,108 @@
+@font-face {
+ font-family: 'Wagram Mono Slab';
+ src: url('00WagramMonoSlab-BlackItalic.woff2') format('woff2'),
+ url('00WagramMonoSlab-BlackItalic.woff') format('woff');
+ font-weight: 900;
+ font-style: italic;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Wagram Mono Slab';
+ src: url('00WagramMonoSlab-BoldItalic.woff2') format('woff2'),
+ url('00WagramMonoSlab-BoldItalic.woff') format('woff');
+ font-weight: bold;
+ font-style: italic;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Wagram Mono Slab';
+ src: url('00WagramMonoSlab-Black.woff2') format('woff2'),
+ url('00WagramMonoSlab-Black.woff') format('woff');
+ font-weight: 900;
+ font-style: normal;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Wagram Mono Slab';
+ src: url('00WagramMonoSlab-Bold.woff2') format('woff2'),
+ url('00WagramMonoSlab-Bold.woff') format('woff');
+ font-weight: bold;
+ font-style: normal;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Wagram Mono Slab';
+ src: url('00WagramMonoSlab-MediumItalic.woff2') format('woff2'),
+ url('00WagramMonoSlab-MediumItalic.woff') format('woff');
+ font-weight: 500;
+ font-style: italic;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Wagram Mono Slab';
+ src: url('00WagramMonoSlab-Medium.woff2') format('woff2'),
+ url('00WagramMonoSlab-Medium.woff') format('woff');
+ font-weight: 500;
+ font-style: normal;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Wagram Mono Slab';
+ src: url('00WagramMonoSlab-Italic.woff2') format('woff2'),
+ url('00WagramMonoSlab-Italic.woff') format('woff');
+ font-weight: normal;
+ font-style: italic;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Wagram Mono Slab';
+ src: url('00WagramMonoSlab-Regular.woff2') format('woff2'),
+ url('00WagramMonoSlab-Regular.woff') format('woff');
+ font-weight: normal;
+ font-style: normal;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Wagram Mono Slab';
+ src: url('00WagramMonoSlab-LightItalic.woff2') format('woff2'),
+ url('00WagramMonoSlab-LightItalic.woff') format('woff');
+ font-weight: 300;
+ font-style: italic;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Wagram Mono Slab';
+ src: url('00WagramMonoSlab-Light.woff2') format('woff2'),
+ url('00WagramMonoSlab-Light.woff') format('woff');
+ font-weight: 300;
+ font-style: normal;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Wagram Mono Slab';
+ src: url('00WagramMonoSlab-ThinItalic.woff2') format('woff2'),
+ url('00WagramMonoSlab-ThinItalic.woff') format('woff');
+ font-weight: 100;
+ font-style: italic;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Wagram Mono Slab';
+ src: url('00WagramMonoSlab-Thin.woff2') format('woff2'),
+ url('00WagramMonoSlab-Thin.woff') format('woff');
+ font-weight: 100;
+ font-style: normal;
+ font-display: swap;
+}
+
diff --git a/maquette-tests/assets/fonts/WagramSlab/00WagramSlab-Black.woff b/maquette-tests/assets/fonts/WagramSlab/00WagramSlab-Black.woff
new file mode 100644
index 0000000..cc4f055
Binary files /dev/null and b/maquette-tests/assets/fonts/WagramSlab/00WagramSlab-Black.woff differ
diff --git a/maquette-tests/assets/fonts/WagramSlab/00WagramSlab-Black.woff2 b/maquette-tests/assets/fonts/WagramSlab/00WagramSlab-Black.woff2
new file mode 100644
index 0000000..283f6f8
Binary files /dev/null and b/maquette-tests/assets/fonts/WagramSlab/00WagramSlab-Black.woff2 differ
diff --git a/maquette-tests/assets/fonts/WagramSlab/00WagramSlab-BlackItalic.woff b/maquette-tests/assets/fonts/WagramSlab/00WagramSlab-BlackItalic.woff
new file mode 100644
index 0000000..d0a0a5c
Binary files /dev/null and b/maquette-tests/assets/fonts/WagramSlab/00WagramSlab-BlackItalic.woff differ
diff --git a/maquette-tests/assets/fonts/WagramSlab/00WagramSlab-BlackItalic.woff2 b/maquette-tests/assets/fonts/WagramSlab/00WagramSlab-BlackItalic.woff2
new file mode 100644
index 0000000..09e8a49
Binary files /dev/null and b/maquette-tests/assets/fonts/WagramSlab/00WagramSlab-BlackItalic.woff2 differ
diff --git a/maquette-tests/assets/fonts/WagramSlab/00WagramSlab-Bold.woff b/maquette-tests/assets/fonts/WagramSlab/00WagramSlab-Bold.woff
new file mode 100644
index 0000000..45e2f54
Binary files /dev/null and b/maquette-tests/assets/fonts/WagramSlab/00WagramSlab-Bold.woff differ
diff --git a/maquette-tests/assets/fonts/WagramSlab/00WagramSlab-Bold.woff2 b/maquette-tests/assets/fonts/WagramSlab/00WagramSlab-Bold.woff2
new file mode 100644
index 0000000..11d1a9e
Binary files /dev/null and b/maquette-tests/assets/fonts/WagramSlab/00WagramSlab-Bold.woff2 differ
diff --git a/maquette-tests/assets/fonts/WagramSlab/00WagramSlab-BoldItalic.woff b/maquette-tests/assets/fonts/WagramSlab/00WagramSlab-BoldItalic.woff
new file mode 100644
index 0000000..7bec7e6
Binary files /dev/null and b/maquette-tests/assets/fonts/WagramSlab/00WagramSlab-BoldItalic.woff differ
diff --git a/maquette-tests/assets/fonts/WagramSlab/00WagramSlab-BoldItalic.woff2 b/maquette-tests/assets/fonts/WagramSlab/00WagramSlab-BoldItalic.woff2
new file mode 100644
index 0000000..8ae244d
Binary files /dev/null and b/maquette-tests/assets/fonts/WagramSlab/00WagramSlab-BoldItalic.woff2 differ
diff --git a/maquette-tests/assets/fonts/WagramSlab/00WagramSlab-Italic.woff b/maquette-tests/assets/fonts/WagramSlab/00WagramSlab-Italic.woff
new file mode 100644
index 0000000..5c2bec6
Binary files /dev/null and b/maquette-tests/assets/fonts/WagramSlab/00WagramSlab-Italic.woff differ
diff --git a/maquette-tests/assets/fonts/WagramSlab/00WagramSlab-Italic.woff2 b/maquette-tests/assets/fonts/WagramSlab/00WagramSlab-Italic.woff2
new file mode 100644
index 0000000..67c3de2
Binary files /dev/null and b/maquette-tests/assets/fonts/WagramSlab/00WagramSlab-Italic.woff2 differ
diff --git a/maquette-tests/assets/fonts/WagramSlab/00WagramSlab-Light.woff b/maquette-tests/assets/fonts/WagramSlab/00WagramSlab-Light.woff
new file mode 100644
index 0000000..4c3cea6
Binary files /dev/null and b/maquette-tests/assets/fonts/WagramSlab/00WagramSlab-Light.woff differ
diff --git a/maquette-tests/assets/fonts/WagramSlab/00WagramSlab-Light.woff2 b/maquette-tests/assets/fonts/WagramSlab/00WagramSlab-Light.woff2
new file mode 100644
index 0000000..3cef5fb
Binary files /dev/null and b/maquette-tests/assets/fonts/WagramSlab/00WagramSlab-Light.woff2 differ
diff --git a/maquette-tests/assets/fonts/WagramSlab/00WagramSlab-LightItalic.woff b/maquette-tests/assets/fonts/WagramSlab/00WagramSlab-LightItalic.woff
new file mode 100644
index 0000000..1306849
Binary files /dev/null and b/maquette-tests/assets/fonts/WagramSlab/00WagramSlab-LightItalic.woff differ
diff --git a/maquette-tests/assets/fonts/WagramSlab/00WagramSlab-LightItalic.woff2 b/maquette-tests/assets/fonts/WagramSlab/00WagramSlab-LightItalic.woff2
new file mode 100644
index 0000000..f2350ce
Binary files /dev/null and b/maquette-tests/assets/fonts/WagramSlab/00WagramSlab-LightItalic.woff2 differ
diff --git a/maquette-tests/assets/fonts/WagramSlab/00WagramSlab-Medium.woff b/maquette-tests/assets/fonts/WagramSlab/00WagramSlab-Medium.woff
new file mode 100644
index 0000000..bb40eb5
Binary files /dev/null and b/maquette-tests/assets/fonts/WagramSlab/00WagramSlab-Medium.woff differ
diff --git a/maquette-tests/assets/fonts/WagramSlab/00WagramSlab-Medium.woff2 b/maquette-tests/assets/fonts/WagramSlab/00WagramSlab-Medium.woff2
new file mode 100644
index 0000000..da2fafc
Binary files /dev/null and b/maquette-tests/assets/fonts/WagramSlab/00WagramSlab-Medium.woff2 differ
diff --git a/maquette-tests/assets/fonts/WagramSlab/00WagramSlab-MediumItalic.woff b/maquette-tests/assets/fonts/WagramSlab/00WagramSlab-MediumItalic.woff
new file mode 100644
index 0000000..b91ea02
Binary files /dev/null and b/maquette-tests/assets/fonts/WagramSlab/00WagramSlab-MediumItalic.woff differ
diff --git a/maquette-tests/assets/fonts/WagramSlab/00WagramSlab-MediumItalic.woff2 b/maquette-tests/assets/fonts/WagramSlab/00WagramSlab-MediumItalic.woff2
new file mode 100644
index 0000000..bf98bdb
Binary files /dev/null and b/maquette-tests/assets/fonts/WagramSlab/00WagramSlab-MediumItalic.woff2 differ
diff --git a/maquette-tests/assets/fonts/WagramSlab/00WagramSlab-Regular.woff b/maquette-tests/assets/fonts/WagramSlab/00WagramSlab-Regular.woff
new file mode 100644
index 0000000..fa7bd4b
Binary files /dev/null and b/maquette-tests/assets/fonts/WagramSlab/00WagramSlab-Regular.woff differ
diff --git a/maquette-tests/assets/fonts/WagramSlab/00WagramSlab-Regular.woff2 b/maquette-tests/assets/fonts/WagramSlab/00WagramSlab-Regular.woff2
new file mode 100644
index 0000000..6827c27
Binary files /dev/null and b/maquette-tests/assets/fonts/WagramSlab/00WagramSlab-Regular.woff2 differ
diff --git a/maquette-tests/assets/fonts/WagramSlab/00WagramSlab-Thin.woff b/maquette-tests/assets/fonts/WagramSlab/00WagramSlab-Thin.woff
new file mode 100644
index 0000000..c77d113
Binary files /dev/null and b/maquette-tests/assets/fonts/WagramSlab/00WagramSlab-Thin.woff differ
diff --git a/maquette-tests/assets/fonts/WagramSlab/00WagramSlab-Thin.woff2 b/maquette-tests/assets/fonts/WagramSlab/00WagramSlab-Thin.woff2
new file mode 100644
index 0000000..214c55c
Binary files /dev/null and b/maquette-tests/assets/fonts/WagramSlab/00WagramSlab-Thin.woff2 differ
diff --git a/maquette-tests/assets/fonts/WagramSlab/00WagramSlab-ThinItalic.woff b/maquette-tests/assets/fonts/WagramSlab/00WagramSlab-ThinItalic.woff
new file mode 100644
index 0000000..70cf0e1
Binary files /dev/null and b/maquette-tests/assets/fonts/WagramSlab/00WagramSlab-ThinItalic.woff differ
diff --git a/maquette-tests/assets/fonts/WagramSlab/00WagramSlab-ThinItalic.woff2 b/maquette-tests/assets/fonts/WagramSlab/00WagramSlab-ThinItalic.woff2
new file mode 100644
index 0000000..cc930a7
Binary files /dev/null and b/maquette-tests/assets/fonts/WagramSlab/00WagramSlab-ThinItalic.woff2 differ
diff --git a/maquette-tests/assets/fonts/WagramSlab/stylesheet.css b/maquette-tests/assets/fonts/WagramSlab/stylesheet.css
new file mode 100644
index 0000000..ce1a61c
--- /dev/null
+++ b/maquette-tests/assets/fonts/WagramSlab/stylesheet.css
@@ -0,0 +1,108 @@
+@font-face {
+ font-family: 'Wagram Slab';
+ src: url('00WagramSlab-BlackItalic.woff2') format('woff2'),
+ url('00WagramSlab-BlackItalic.woff') format('woff');
+ font-weight: 900;
+ font-style: italic;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Wagram Slab';
+ src: url('00WagramSlab-Black.woff2') format('woff2'),
+ url('00WagramSlab-Black.woff') format('woff');
+ font-weight: 900;
+ font-style: normal;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Wagram Slab';
+ src: url('00WagramSlab-BoldItalic.woff2') format('woff2'),
+ url('00WagramSlab-BoldItalic.woff') format('woff');
+ font-weight: bold;
+ font-style: italic;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Wagram Slab';
+ src: url('00WagramSlab-Bold.woff2') format('woff2'),
+ url('00WagramSlab-Bold.woff') format('woff');
+ font-weight: bold;
+ font-style: normal;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Wagram Slab';
+ src: url('00WagramSlab-MediumItalic.woff2') format('woff2'),
+ url('00WagramSlab-MediumItalic.woff') format('woff');
+ font-weight: 500;
+ font-style: italic;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Wagram Slab';
+ src: url('00WagramSlab-Medium.woff2') format('woff2'),
+ url('00WagramSlab-Medium.woff') format('woff');
+ font-weight: 500;
+ font-style: normal;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Wagram Slab';
+ src: url('00WagramSlab-Regular.woff2') format('woff2'),
+ url('00WagramSlab-Regular.woff') format('woff');
+ font-weight: normal;
+ font-style: normal;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Wagram Slab';
+ src: url('00WagramSlab-Italic.woff2') format('woff2'),
+ url('00WagramSlab-Italic.woff') format('woff');
+ font-weight: normal;
+ font-style: italic;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Wagram Slab';
+ src: url('00WagramSlab-LightItalic.woff2') format('woff2'),
+ url('00WagramSlab-LightItalic.woff') format('woff');
+ font-weight: 300;
+ font-style: italic;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Wagram Slab';
+ src: url('00WagramSlab-ThinItalic.woff2') format('woff2'),
+ url('00WagramSlab-ThinItalic.woff') format('woff');
+ font-weight: 100;
+ font-style: italic;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Wagram Slab';
+ src: url('00WagramSlab-Light.woff2') format('woff2'),
+ url('00WagramSlab-Light.woff') format('woff');
+ font-weight: 300;
+ font-style: normal;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Wagram Slab';
+ src: url('00WagramSlab-Thin.woff2') format('woff2'),
+ url('00WagramSlab-Thin.woff') format('woff');
+ font-weight: 100;
+ font-style: normal;
+ font-display: swap;
+}
+
diff --git a/maquette-tests/csspageweaver/.gitignore b/maquette-tests/csspageweaver/.gitignore
new file mode 100644
index 0000000..496ee2c
--- /dev/null
+++ b/maquette-tests/csspageweaver/.gitignore
@@ -0,0 +1 @@
+.DS_Store
\ No newline at end of file
diff --git a/maquette-tests/csspageweaver/.gitlab-ci.yml b/maquette-tests/csspageweaver/.gitlab-ci.yml
new file mode 100644
index 0000000..6ba6a80
--- /dev/null
+++ b/maquette-tests/csspageweaver/.gitlab-ci.yml
@@ -0,0 +1,104 @@
+stages:
+ - prepare
+ - release
+
+# This job compile CSS Page Weaver and few plugins
+prepare_job:
+ stage: prepare
+ image: ubuntu:latest
+ rules:
+ - if: $CI_COMMIT_TAG
+ before_script:
+ - apt-get update && apt-get install -y git curl jq zip bash
+ - git config --global user.email "csspageweaver@csspageweaver.org"
+ - git config --global user.name "Automated Releaser"
+ script:
+
+ - |
+ # Store Job ID since next stage (release_job) link to current job artifacts
+ echo "ARTIFACTS_JOB=$CI_JOB_ID" >> build.env
+
+ - |
+ # create plugins folder if needed
+ mkdir -p plugins
+
+ - |
+ # Set plugins list
+ REPO_LIST=(
+ "baseline"
+ "grid"
+ "imposition"
+ "marginBox"
+ "spread"
+ "previewPage"
+ "reloadInPlace"
+ )
+
+ - |
+ # Add listed plugins as git subtree. Need deployment tokens if repos are private
+ for REPO in "${REPO_LIST[@]}"; do
+ SUBTREE_URL="https://gitlab.com/csspageweaver/plugins/${REPO}.git"
+ git subtree add --prefix="plugins/$REPO" "$SUBTREE_URL" main --squash
+ done
+
+ - |
+ # Define the pluginsParameters object
+ PLUGINS_PARAMETERS='{
+ "baseline": {
+ "size": 16,
+ "position": 0
+ },
+ "reloadInPlace": {
+ "blur": false,
+ "behavior": "instant"
+ }
+ }'
+
+ - |
+ # Add plugin list to manifest
+ MANIFEST_PATH="manifest.json"
+ PLUGINS_ENTRY=$(jq --arg repos "${REPO_LIST[*]}" '.plugins = ($repos | split(" "))' "$MANIFEST_PATH")
+ echo "$PLUGINS_ENTRY" > "$MANIFEST_PATH"
+
+ - |
+ # Add plugin parameters to manifest
+ PARAMETERS_PLUGINS_ENTRY=$(jq --argjson pluginsParameters "$PLUGINS_PARAMETERS" '.pluginsParameters = $pluginsParameters' "$MANIFEST_PATH")
+ echo "$PARAMETERS_PLUGINS_ENTRY" > "$MANIFEST_PATH"
+
+ - |
+ # create folder
+ mkdir -p csspageweaver
+
+ # Copy releveant folder and file to a csspageweaver folder
+ cp -r interface/ lib/ modules/ plugins/ csspageweaver/
+ cp main.js manifest.json README.md .gitignore csspageweaver/
+
+
+ artifacts:
+ name: csspageweaver-core-$CI_COMMIT_TAG
+ paths:
+ - csspageweaver/
+ reports:
+ dotenv: build.env
+ expire_in: never
+
+# This job create a release based on previous artifact
+release_job:
+ stage: release
+ image: registry.gitlab.com/gitlab-org/release-cli:latest
+ needs:
+ - job: prepare_job
+ artifacts: true
+ rules:
+ - if: $CI_COMMIT_TAG
+ script:
+ - echo "running release_job for $CI_COMMIT_TAG "
+ release:
+ name: 'Release $CI_COMMIT_TAG'
+ tag_name: '$CI_COMMIT_TAG'
+ ref: '$CI_COMMIT_SHA'
+ description: 'Auto release'
+ assets:
+ links:
+ - name: '👉 CSS Page Weaver with plugins embed'
+ url: 'https://gitlab.com/csspageweaver/csspageweaver/-/jobs/$ARTIFACTS_JOB/artifacts/download'
diff --git a/maquette-tests/csspageweaver/README.md b/maquette-tests/csspageweaver/README.md
new file mode 100644
index 0000000..6d48bef
--- /dev/null
+++ b/maquette-tests/csspageweaver/README.md
@@ -0,0 +1,177 @@
+# CSS Page Weaver
+
+
+
+CSS Page Weaver is a browser-based publishing tool, made up of [PagedJs](https://pagedjs.org/about/) library and modulars additionals features. While it's design to ease installation for beginners CSS Page Weaver also bring elegant and extendable solution for more advanced users.
+
+## ✨ Features
+
+- **Streamlined and Ready-to-Use**: Get started quickly with a standardized way to integrate features.
+- **Extensive Plugin Library**: No need to reinvent the wheel with the available plugins.
+- **WYSIWYG Editor**: Streamline your design pratice with an extandable interface.
+- **Create and Share Plugins**: Develop and share your own plugins easily.
+
+## ⛵ Getting Started
+
+### Prerequisites
+
+- A local web server
+
+### 🪴 Installation (fastest way)
+
+If you feel a bit lost with following instruction, you should probably look at the [CSS Page Weaver compiled with a few plugins](https://gitlab.com/csspageweaver/csspageweaver/-/releases)
+
+Integrate it at the root level of your page and add a link to `csspageweaver` main _module_ into your HTML template
+
+```html
+
+```
+
+*Do you need to also install PagedJs? Nope! CSS Page Weaver already embed it.*
+
+### Use
+
+Run a simple server. That's it!
+
+### Boilerplate
+
+Don't have a project to test it? There is [a ready-to-use boilerplate](https://gitlab.com/csspageweaver//boilerplate). Download, unzip & run a server!
+
+
+## 🚀 Going further
+
+### 🌲 Installation (complete way)
+
+Released version on CSS Page Weaver is compiled with few plugins. You can install the package yourself for greater control.
+
+#### Clone CSS Page Weaver repo in your project [option A].
+
+```bash
+# With HTTPS
+git clone https://gitlab.com/csspageweaver/csspageweaver.git
+
+# With SSH
+git clone git@gitlab.com:csspageweaver/csspageweaver.git
+```
+#### Clone CSS Page Weaver as a git subtree [option B].
+
+Subtree are great to:
+- embed CSS Page Weaver repo in another repo
+- get updates
+
+```bash
+ git subtree add --prefix csspageweaver/ git@gitlab.com:csspageweaver/cssPageWeaver.git --squash
+```
+
+### 🔌 Dependencies
+
+CSS Page Weaver is designed to work with plugins. In this complete installation, you need to install plugins by yourself. If you've downloaded [the last release of CSS Page Weaver](https://gitlab.com/csspageweaver/csspageweaver/-/releases), few plugins are already embedded.
+
+**Here is a [list of all plugins](https://gitlab.com/csspageweaver//plugins) known.**
+
+**Steps**
+
+1. Download and place plugin folder in `csspageweaver/plugins`
+2. Add plugin to manifest
+
+#### Installation as subtree
+
+We prefer to install plugins using Git Subtree because it allows us to easily preserve the filiation link with the plugin directory (and to obtain updates!).
+
+Bear in mind, if you're not comfortable with command lines, that *step 1* can easily be replaced by a simple *download, drag and drop*.
+
+Otherwise, here is how it works.
+
+##### (Step 1) Clone plugin as a subtree
+
+Install plugin as a submodule of `csspageweaver`
+
+```bash
+ git subtree add --prefix="csspageweaver/plugins/{{PLUGIN_FOLDER_NAME}}" git@gitlab.com:csspageweaver/plugins/{{PLUGIN_NAME}}.git --squash
+```
+
+##### (Step 2) Add plugin to manifest
+
+Almost done. Add a mention to `csspageweaver/manifest.json`
+
+```json
+{
+ "plugins": [
+ // existing plugin,
+ "PLUGIN_FOLDER_NAME"
+ ],
+}
+```
+
+Look at complete [plugins list](https://gitlab.com/csspageweaver/plugins) and [plugins installation guide](https://gitlab.com/csspageweaver/csspageweaver/-/wikis/design/plugins/install)
+
+#### Update as subtree
+
+This is where Git subtrees are wonderful
+
+```bash
+git subtree pull --prefix="csspageweaver/plugins/{{PLUGIN_NAME}}" main --squash
+```
+
+A bit dazed? Don't worry. Once again, you can update your plugins with your favorite *download, unzip, drag and drop* shady method.
+
+### 🎁 Package manager
+
+You already like the principle of subtrees, but you think (rightly) that the multiplication of command lines can be a bit tedious in the long run? Installation and dependencies can me handle with our [Package Manager](https://gitlab.com/csspageweaver/package-manager)
+
+**Install CSS Page Weaver and plugins with package manager**
+
+```bash
+./weaver_manager.sh --install
+```
+
+**Get update with package manager**
+
+```bash
+./weaver_manager.sh --pull
+```
+
+See [Package Manager repository](https://gitlab.com/csspageweaver-toolkit/package_manager) and [further documentation on managing your installation](https://gitlab.com/csspageweaver/csspageweaver/-/wikis/maintain_and_develop/core/5-manage_csspageweaver_integration)
+
+
+
+## 🔄 Customization
+
+### Basic Information
+
+Edit `csspageweaver/manifest.json` to declare:
+- Plugins
+- Plugins configuration
+- Stylesheets
+- Your custom hooks
+
+### CSS Page Weaver behavior (advanced)
+
+Edit `csspageweaver/main.js` to:
+- disable Common dictionary
+- disable Interface
+- Choose render method
+
+## 🎓 Documentation
+
+A complete [documentation is available](https://gitlab.com/csspageweaver/csspageweaver/-/wikis/home)
+
+## 📝 License
+
+This project is licensed under the MIT License
+
+## 👏 Acknowledgements
+
+CSS Page Weaver is based on [PagedJs](https://pagedjs.org/about/) by Coko Foundation.
+
+CSS Page Weaver is an original idea of Julie Blanc ehanced by Benjamin G.
+Julien Taquet was a great help in reimagining the rendering module. Finally, Nicolas Taffin and Julien Bidoret helped to oversee this tool.
+
+All CSS Page Weaver plugins remains linked to their original creators.
+Without them, GUI would remain an empty shell. Thanks 🙏
+
+## 🙌 Contributing
+
+Features and documentation requests are welcome! Feel free to check the [issues page](https://gitlab.com/csspageweaver/csspageweaver/-/issues).
+
+Contributions must follow our [code of conduct](https://www.contributor-covenant.org/version/2/1/code_of_conduct/)
\ No newline at end of file
diff --git a/maquette-tests/csspageweaver/interface/css/grid.css b/maquette-tests/csspageweaver/interface/css/grid.css
new file mode 100644
index 0000000..561d174
--- /dev/null
+++ b/maquette-tests/csspageweaver/interface/css/grid.css
@@ -0,0 +1,46 @@
+@media print {
+
+
+
+ /* Size and marin for all pages ------------- */
+ @page {
+ size: 148mm 210mm;
+ margin-top: 20mm;
+ margin-bottom: 20mm;
+ bleed: 6mm;
+ marks: crop;
+ @bottom-center{
+ content: counter(page);
+ }
+ }
+
+ figure, img{
+ width: 100%;
+ }
+
+
+}
+
+
+*{
+ margin: 0;
+ padding: 0;
+}
+
+
+#image-full{
+ --pagedjs-full-page: spread;
+ width: 100%;
+ height: 100%;
+}
+
+#image-full img{
+ width: 100%;
+ height: 100%;
+ object-fit: cover;
+}
+
+
+.pagedjs_note{
+ color: red;
+}
\ No newline at end of file
diff --git a/maquette-tests/csspageweaver/interface/css/interface.css b/maquette-tests/csspageweaver/interface/css/interface.css
new file mode 100644
index 0000000..dda88e6
--- /dev/null
+++ b/maquette-tests/csspageweaver/interface/css/interface.css
@@ -0,0 +1,136 @@
+/* CSS for Paged.js interface – v0.2
+Julie Blanc - 2020
+MIT License https://opensource.org/licenses/MIT
+A simple stylesheet to see pages on screen (with baseline included)
+Adapted for this project */
+
+
+/* Change the look */
+:root {
+ --color-background: #efefef;
+ --color-pageSheet: #cfcfcf;
+ --color-pageBox: violet;
+ --color-paper: white;
+ --pagedjs-crop-color: #000;
+ --pagedjs-crop-stroke: 1px;
+ --color-preview: #222;
+ --pagedjs-margin-interface: 20px;
+ --pagedjs-header-height: 80px;
+
+ /* --pagedjs-bleed-left-right: 0mm!important; */
+}
+
+.pagedjs_marks-crop{
+ z-index: 999999999999;
+}
+
+/* To define how the book look on the screen: */
+@media screen, pagedjs-ignore {
+ body {
+ background-color: var(--color-background);
+ padding-left: var(--pagedjs-margin-interface);
+ padding-right: var(--pagedjs-margin-interface);
+ min-width: calc(var(--pagedjs-width) * 2 + var(--pagedjs-margin-interface)*2);
+ }
+ body.no-spread{
+ min-width: calc(var(--pagedjs-width) + var(--pagedjs-margin-interface)*2);
+
+ }
+
+ .pagedjs_pages {
+ display: flex;
+ width: calc(var(--pagedjs-width) * 2);
+ flex: 0;
+ flex-wrap: wrap;
+ margin: 0 auto;
+ margin-bottom: var(--pagedjs-header-height);
+ margin-top: var(--pagedjs-header-height);
+
+ }
+
+ .pagedjs_page {
+ background-color: var(--color-paper);
+ box-shadow: 0 0 0 1px var(--color-pageSheet);
+ margin: 0;
+ flex-shrink: 0;
+ flex-grow: 0;
+ margin-top: 10mm;
+ }
+
+ .pagedjs_first_page {
+ margin-left: calc(var(--pagedjs-width) - var(--pagedjs-bleed-left));
+ }
+
+ .pagedjs_page:last-of-type {
+ margin-bottom: 10mm;
+ }
+
+ .pagedjs_pagebox{
+ box-shadow: 0 0 0 1px var(--color-pageBox);
+ }
+
+ .pagedjs_left_page{
+ z-index: 20;
+ width: calc(var(--pagedjs-bleed-left) + var(--pagedjs-pagebox-width))!important;
+ }
+
+ /* .pagedjs_left_page .pagedjs_sheet{
+ z-index: 20;
+ width: calc(var(--pagedjs-bleed-left) + var(--pagedjs-pagebox-width) + 1px)!important;
+ } */
+
+ .pagedjs_left_page .pagedjs_bleed-right .pagedjs_marks-crop {
+ border-color: transparent;
+ }
+
+
+ .pagedjs_left_page .pagedjs_bleed-right .pagedjs_marks-middle{
+ width: 0;
+ }
+
+ .pagedjs_right_page{
+ z-index: 10;
+ position: relative;
+ left: calc(var(--pagedjs-bleed-left)*-1);
+ }
+
+ /* show the margin-box */
+
+ .pagedjs_margin-top-left-corner-holder,
+ .pagedjs_margin-top,
+ .pagedjs_margin-top-left,
+ .pagedjs_margin-top-center,
+ .pagedjs_margin-top-right,
+ .pagedjs_margin-top-right-corner-holder,
+ .pagedjs_margin-bottom-left-corner-holder,
+ .pagedjs_margin-bottom,
+ .pagedjs_margin-bottom-left,
+ .pagedjs_margin-bottom-center,
+ .pagedjs_margin-bottom-right,
+ .pagedjs_margin-bottom-right-corner-holder,
+ .pagedjs_margin-right,
+ .pagedjs_margin-right-top,
+ .pagedjs_margin-right-middle,
+ .pagedjs_margin-right-bottom,
+ .pagedjs_margin-left,
+ .pagedjs_margin-left-top,
+ .pagedjs_margin-left-middle,
+ .pagedjs_margin-left-bottom {
+ box-shadow: 0 0 0 1px inset var(--color-marginBox);
+ }
+
+}
+
+
+
+.note {
+ float: footnote;
+}
+
+/* define the position of the footnote on the page (only bottom is possible for now) */
+
+@page {
+ @footnote {
+ float: bottom;
+ }
+}
\ No newline at end of file
diff --git a/maquette-tests/csspageweaver/interface/css/panel.css b/maquette-tests/csspageweaver/interface/css/panel.css
new file mode 100644
index 0000000..f7abe62
--- /dev/null
+++ b/maquette-tests/csspageweaver/interface/css/panel.css
@@ -0,0 +1,532 @@
+@import url("../fonts/IBM_Plex_Mono/stylesheet.css");
+
+@media print{
+ csspageweaver-gui{
+ display: none;
+ }
+}
+
+@media screen, pagedjs-ignore {
+
+
+ /* TOGGLE PANEL ----------------------------------- */
+ #cssPageWeaver_toggle-panel ~ #cssPageWeaver_panel{ display: none; }
+ #cssPageWeaver_toggle-panel + label #panel-open{ display: none; }
+
+ #cssPageWeaver_toggle-panel:checked ~ #cssPageWeaver_panel{ display: block; }
+ #cssPageWeaver_toggle-panel:checked + label #panel-open{ display: block; }
+ #cssPageWeaver_toggle-panel:checked + label #panel-closed{ display: none; }
+
+ #cssPageWeaver_toggle-panel{ display: none; }
+
+
+ /* STYLE ----------------------------------- */
+ :root{
+ --cssPageWeaver-font:'IBM Plex Mono';
+ --cssPageWeaver-size: 16px;
+ --cssPageWeaver-fixed: 30px;
+
+ /* --cssPageWeaver-color-border: #8fb6b0;
+ --cssPageWeaver-color-accent: #EE6C4D;
+ --cssPageWeaver-color-accent-hover: #852811;
+ --cssPageWeaver-color-text: #464f4e;
+ --cssPageWeaver-color-bg: #f8f8f2; */
+
+
+ /* --cssPageWeaver-color-accent: #EE6C4D;
+ --cssPageWeaver-color-accent-hover: #852811;
+ --cssPageWeaver-color-border: #86766e;
+ --cssPageWeaver-color-text: #4f4946;
+ --cssPageWeaver-color-bg: #efefef; */
+
+ --cssPageWeaver-color-accent: RebeccaPurple;
+ --cssPageWeaver-color-accent-hover: BlueViolet;
+ --cssPageWeaver-color-border: #836e86;
+ --cssPageWeaver-color-border-light: #999999;
+ --cssPageWeaver-color-text: #4e464f;
+ --cssPageWeaver-color-bg: #f1f0f0;
+
+ --cssPageWeaver-radius: 5px;
+ }
+
+
+ /* Toggle button -------------------------------------------- */
+
+ #cssPageWeaver_toggle-panel + label{
+ background-color: var(--cssPageWeaver-color-bg);
+ border: 2px solid var(--cssPageWeaver-color-border);
+ border-radius: var(--cssPageWeaver-color-radius);
+
+ --size: 30px;
+ width: var(--size);
+ height: var(--size);
+
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-size: 1.25em;
+
+ color: var(--cssPageWeaver-color-text);
+ //border-radius: var(--cssPageWeaver-radius);
+
+ transition: border-radius .25s ease-in-out;
+
+ }
+
+ #cssPageWeaver_toggle-panel:checked + label{
+ border-top-left-radius: var(--cssPageWeaver-radius);
+ }
+
+
+ /* CONTAINER -------------------------------------------- */
+
+ csspageweaver-gui *{
+ margin: 0;
+ padding: 0;
+
+ }
+
+
+ csspageweaver-gui{
+ font-family: var(--cssPageWeaver-font);
+ color: var(--cssPageWeaver-color-text);
+ font-size: var(--cssPageWeaver-size);
+ }
+
+ csspageweaver-gui label,
+ csspageweaver-gui button{
+ cursor: pointer!important;
+ }
+
+ #cssPageWeaver_toggle-panel + label{
+ position: fixed;
+ left: var(--cssPageWeaver-fixed);
+ top: var(--cssPageWeaver-fixed);
+ width: 30px;
+ left: 30px;
+ z-index: 9000;
+ }
+
+ #cssPageWeaver_panel{
+ width: 296px;
+ background-color: var(--cssPageWeaver-color-bg);
+ border: 2px solid var(--cssPageWeaver-color-border);
+ border-radius: var(--cssPageWeaver-radius);
+ position: fixed;
+ left: var(--cssPageWeaver-fixed);
+ top: var(--cssPageWeaver-fixed);
+ z-index: 8900;
+ padding: 1em 1em .5em 1em;
+
+ max-height: 80vh;
+ max-height: calc(100vh - 5rem);
+ overflow: scroll;
+
+ }
+
+
+ /* panel-group ------------------------------------- */
+
+
+ #cssPageWeaver_panel .panel-group{
+ margin: 0;
+ padding-top: 1.25em;
+ }
+ #cssPageWeaver_panel .panel-group:not(:last-of-type){
+ border-bottom: 1px solid var(--cssPageWeaver-color-border);
+ padding-bottom: 1.25em;
+ }
+
+
+
+ /* panel-group-title ------------------------------------- */
+
+ #cssPageWeaver_panel h1,
+ #cssPageWeaver_panel button,
+ #cssPageWeaver_panel p,
+ #cssPageWeaver_panel svg,
+ #cssPageWeaver_panel label{
+ all: initial;
+ all: unset;
+ }
+
+
+ #cssPageWeaver_panel .panel-group-title{
+ display: grid;
+ grid-template-columns: auto 1ch 1fr;
+ grid-gap: .5ch;
+ }
+
+ #cssPageWeaver_panel h1 span{
+ font-size: 0.75em;
+ }
+
+
+ #cssPageWeaver_panel .panel-group-title:not(:empty) + *{
+ margin-top: 1.25em;
+ }
+
+ #cssPageWeaver_panel .panel-group-title h1{
+ font-size: 1em;
+ font-weight: 600;
+ margin: 0;
+ }
+
+ #cssPageWeaver_panel .panel-group-title input{
+ display: none;
+ }
+ #cssPageWeaver_panel .panel-group-title label{
+ grid-column: -1;
+ }
+
+ #cssPageWeaver_panel .panel-group-title label span{
+ /* color: var(--cssPageWeaver-color-accent); */
+ font-size: 16px;
+ border: 1.5px solid var(--cssPageWeaver-color-accent);
+ padding: 0.25ch 1ch 0.5ch 1ch;
+ min-width: 4ch;
+ text-align: center;
+
+ font-size: 0.8em;
+ font-weight: 500;
+ border-radius: var(--cssPageWeaver-radius);
+
+ background-color: var(--cssPageWeaver-color-accent);
+ border-color: var(--cssPageWeaver-color-accent);
+ color: var(--cssPageWeaver-color-bg);
+
+ font-style: italic;
+
+ }
+
+ #cssPageWeaver_panel .panel-group-title label span:hover{
+ background-color: var(--cssPageWeaver-color-accent-hover);
+ border-color: var(--cssPageWeaver-color-accent-hover);
+ color: var(--cssPageWeaver-color-bg);
+
+ }
+
+ #cssPageWeaver_panel .panel-group-title input:not(:checked) + label[id*="toggle"] span.button-see{
+ background-color: var(--cssPageWeaver-color-bg);
+ color: var(--cssPageWeaver-color-accent);
+ }
+
+ #cssPageWeaver_panel .panel-group-title input:checked + label[id*="toggle"] span.button-hide{
+ background-color: var(--cssPageWeaver-color-bg);
+ color: var(--cssPageWeaver-color-accent);
+ }
+
+ /* INFO BOX ---------------------------------- */
+ #cssPageWeaver_panel .panel-group-title details{
+ position: relative;
+ }
+ #cssPageWeaver_panel .panel-group-title summary{
+ color: var(--cssPageWeaver-color-text);
+ //border: 1px solid black;
+ //border-radius: 1rem;
+ width: 1rem;
+ font-size: .8em;
+ height: 1rem;
+ text-align: center;
+ cursor: pointer;
+ opacity: .3;
+ line-height: 160%;
+ }
+
+ #cssPageWeaver_panel .panel-group-title details summary::marker {
+ display: none;
+ content: "";
+ border: 1px solid currentColor;
+ }
+
+}
+
+#cssPageWeaver_panel .panel-group-title details p{
+ position: absolute;
+ background: var(--cssPageWeaver-color-bg);
+ padding: .5ch;
+ width: max-content;
+ max-width: 10rem;
+ font-size: .7rem;
+ margin-top: .5ch;
+ border: 1px solid var(--cssPageWeaver-color-accent);
+ border-radius: .2ch;
+ top: -50%;
+ left: 2em;
+ transform: translateX(0%);
+}
+
+
+/* panel-group-values ---------------------------------- */
+
+#cssPageWeaver_panel .panel-group-values{
+ margin-top: 0.5em;
+ margin-bottom: 0.5em;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+}
+
+
+/* INPUT NUMBER ---------------------------------- */
+
+
+#cssPageWeaver_panel input[type="number"]{
+ font-family: var(--cssPageWeaver-font)!important;
+ color: var(--cssPageWeaver-color-text);
+ width: 8ch;
+ background-color: transparent!important;
+ border: 1px solid var(--cssPageWeaver-color-text);
+ font-size: calc(var(--cssPageWeaver-size)*0.9);
+ padding-left: 0.5ch;
+}
+
+#cssPageWeaver_panel input[type="number"]:focus,
+#cssPageWeaver_panel input[type="number"]:focus-visible{
+ border: 1px solid var(--cssPageWeaver-color-accent)!important;
+ outline: none;
+}
+
+
+/* INPUT CHECKBOX ---------------------------------- */
+
+#cssPageWeaver_panel input[type="checkbox"],
+#cssPageWeaver_panel input[type="radio"]{ display: none; }
+
+#cssPageWeaver_panel input + label:not([id*="toggle"])::before{
+ content: "";
+ --size: 12px;
+ width: var(--size);
+ height: var(--size);
+ display: inline-block;
+ box-sizing: border-box;
+ border: 1.5px solid var(--cssPageWeaver-color-text);
+ margin-right: 1ch;
+
+}
+
+#cssPageWeaver_panel input:checked + label{
+ color: var(--cssPageWeaver-color-accent);
+}
+
+#cssPageWeaver_panel input:checked + label::before{
+ border: 5px solid var(--cssPageWeaver-color-accent);
+}
+
+#cssPageWeaver_panel input + label:hover{
+ color: var(--cssPageWeaver-color-accent-hover);
+}
+
+#cssPageWeaver_panel input + label:hover::before{
+ border: 1.5px solid var(--cssPageWeaver-color-accent-hover);
+}
+
+#cssPageWeaver_panel input[type="radio"]:checked + label:hover::before{
+ border: 5px solid var(--cssPageWeaver-color-accent);
+}
+#cssPageWeaver_panel input[type="radio"]:checked + label:hover{
+ color: var(--cssPageWeaver-color-accent);
+}
+#cssPageWeaver_panel input[type="checkbox"] + label:hover::before{
+ border: 5px solid var(--cssPageWeaver-color-accent-hover);
+}
+
+/* INPUT RADIO ---------------------------------- */
+
+ #cssPageWeaver_panel input[type="radio"] + label{
+ margin-bottom: 0.5em;
+}
+
+/* exception */
+/*#cssPageWeaver_panel #baseline-toggle + label::before{ display: none; }
+*/
+
+/* BUTTONS-GROUP ------------------------------------------- */
+
+#cssPageWeaver_panel .buttons-group button,
+#cssPageWeaver_panel .buttons-group .button{
+ display: inline-block;
+ --size: 40px;
+ background-color: transparent;
+ border: 1.5px solid var(--cssPageWeaver-color-accent);
+ border-radius: var(--cssPageWeaver-radius);
+ box-sizing: border-box;
+
+ color: var(--cssPageWeaver-color-accent);
+
+ width: var(--size);
+ height: var(--size);
+
+ text-align: center;
+ vertical-align: middle;
+ text-decoration: none;
+}
+
+#cssPageWeaver_panel .buttons-group .button:not(:has(*)){
+ padding: .5em 0;
+}
+
+#cssPageWeaver_panel .buttons-group input{
+ display: none;
+}
+
+#cssPageWeaver_panel .buttons-group button svg,
+#cssPageWeaver_panel .buttons-group .button svg{
+ fill: var(--cssPageWeaver-color-accent);
+ padding: 0.25em;
+}
+
+#cssPageWeaver_panel .buttons-group{
+ display: flex;
+ justify-content: flex-start;
+ align-items: center;
+ gap: 1ch;
+}
+
+#cssPageWeaver_panel .buttons-group.align-right{
+ justify-content: flex-end;
+}
+
+#cssPageWeaver_panel .panel-group-title:not(:empty) + .buttons-group{
+ padding-top: 0.25em;
+ margin-top: .5em;
+}
+
+#cssPageWeaver_panel .buttons-group .force-right{
+ text-align: right;
+ flex-grow: 1;
+}
+
+#panel-buttons .buttons-group{
+ padding-top: 1.25em;
+ display: flex;
+}
+
+
+#panel-buttons .buttons-group button,
+#panel-buttons .buttons-group .button{
+ margin-left: 0.5em;
+}
+
+#cssPageWeaver_panel input + label.label-block{
+ display: block;
+ margin-top: 1rem;
+}
+
+#cssPageWeaver_panel .panel-group-title.button-toggle label::before{ display: none!important; }
+
+/* CHECKED BUTTONS --------------------------------------- */
+
+#cssPageWeaver_panel .buttons-group input:checked + button,
+#cssPageWeaver_panel .buttons-group input:checked + .button{
+ background-color: var(--cssPageWeaver-color-accent);
+ border-color: var(--cssPageWeaver-color-accent);
+ cursor: pointer;
+}
+#cssPageWeaver_panel .buttons-group input:checked + button svg,
+#cssPageWeaver_panel .buttons-group input:checked + .button svg{
+ fill: var(--cssPageWeaver-color-bg);
+}
+
+/* TOGGLE LABEL ICONS --------------------------------------- */
+
+#cssPageWeaver_panel input[id*="toggle"] + .buttons-group{
+ margin-top: 1rem;
+}
+
+#cssPageWeaver_panel input[id*="toggle"]:checked + .buttons-group .button:nth-of-type(1),
+#cssPageWeaver_panel input[id*="toggle"]:not(:checked) + .buttons-group .button:nth-of-type(2){
+ background-color: var(--cssPageWeaver-color-accent);
+ border-color: var(--cssPageWeaver-color-accent);
+}
+
+#cssPageWeaver_panel input[id*="toggle"]:checked + .buttons-group .button:nth-of-type(1) svg,
+#cssPageWeaver_panel input[id*="toggle"]:not(:checked) + .buttons-group .button:nth-of-type(2) svg{
+ fill: var(--cssPageWeaver-color-bg);
+}
+
+/* DETAILS CONTAINER< ------------------- */
+
+[data-open-container*="details"] ~ [id*="details"]{
+ box-sizing: border-box;
+ position: relative;
+ top: 1em;
+
+ max-height: 0px;
+ overflow: hidden;
+ transition: max-height 1s;
+}
+
+[data-open-container*="details"]:checked ~ [id*="details"]{
+ max-height: 100vh;
+ margin-bottom: 0.5em;
+ border-top: .5px solid var(--cssPageWeaver-color-border-light);
+}
+
+
+/* HOVER BUTTONS ------------------------------------------------------------ */
+
+#cssPageWeaver_panel .buttons-group button:hover,
+#cssPageWeaver_panel .buttons-group .button:hover{
+ background-color: var(--cssPageWeaver-color-accent-hover)!important;
+ border-color: var(--cssPageWeaver-color-accent-hover)!important;
+}
+#cssPageWeaver_panel .buttons-group button:hover svg,
+#cssPageWeaver_panel .buttons-group .button:hover svg{
+ fill: var(--cssPageWeaver-color-bg)!important;
+}
+
+/* SHORTCUT ------------------------------------------------------------ */
+
+#cssPageWeaver_panel .shortcut-list{
+ list-style: none;
+ display: flex;
+ flex-direction: row;
+ flex-wrap: wrap;
+ gap: .25em;
+ margin-top: .5em;
+}
+#cssPageWeaver_panel .shortcut-list li{
+ font-size: .75em;
+ color: var(--cssPageWeaver-color-text);
+ border: 1px solid;
+ border-radius: .25em;
+ padding: .2em;
+ cursor: help;
+ opacity: .5;
+}
+
+/* List hidden hooks ------------------------------------------------------------ */
+
+#cssPageWeaver_panel #hidden-features h1 {
+ font-weight: bold;
+ margin-bottom: .5em;
+
+}
+#cssPageWeaver_panel #hidden-features summary {
+ display: flex;
+ flex-direction: row;
+ justify-content: space-between;
+ padding-top: 1em;
+ font-size: .75rem;
+ cursor: pointer;
+}
+#cssPageWeaver_panel #hidden-features ul{
+ list-style: none;
+ font-size: .75rem;
+ display: flex;
+ flex-wrap: wrap;
+ gap: .75em;
+}
+#cssPageWeaver_panel #hidden-features ul li{
+ margin-bottom: .25em;
+ color: var(--cssPageWeaver-color-bg);
+ padding: .2em .4em;
+ border-radius: .2em;
+ background: var(--cssPageWeaver-color-accent);
+ font-style: italic;
+}
+
+#cssPageWeaver_panel #hidden-features summary::marker {
+ display: none;
+}
\ No newline at end of file
diff --git a/maquette-tests/csspageweaver/interface/fonts/IBM_Plex_Mono/IBMPlexMono-Italic.woff b/maquette-tests/csspageweaver/interface/fonts/IBM_Plex_Mono/IBMPlexMono-Italic.woff
new file mode 100644
index 0000000..4074b47
Binary files /dev/null and b/maquette-tests/csspageweaver/interface/fonts/IBM_Plex_Mono/IBMPlexMono-Italic.woff differ
diff --git a/maquette-tests/csspageweaver/interface/fonts/IBM_Plex_Mono/IBMPlexMono-Italic.woff2 b/maquette-tests/csspageweaver/interface/fonts/IBM_Plex_Mono/IBMPlexMono-Italic.woff2
new file mode 100644
index 0000000..88e4e8b
Binary files /dev/null and b/maquette-tests/csspageweaver/interface/fonts/IBM_Plex_Mono/IBMPlexMono-Italic.woff2 differ
diff --git a/maquette-tests/csspageweaver/interface/fonts/IBM_Plex_Mono/IBMPlexMono-Medium.woff b/maquette-tests/csspageweaver/interface/fonts/IBM_Plex_Mono/IBMPlexMono-Medium.woff
new file mode 100644
index 0000000..fc65a67
Binary files /dev/null and b/maquette-tests/csspageweaver/interface/fonts/IBM_Plex_Mono/IBMPlexMono-Medium.woff differ
diff --git a/maquette-tests/csspageweaver/interface/fonts/IBM_Plex_Mono/IBMPlexMono-Medium.woff2 b/maquette-tests/csspageweaver/interface/fonts/IBM_Plex_Mono/IBMPlexMono-Medium.woff2
new file mode 100644
index 0000000..c352e40
Binary files /dev/null and b/maquette-tests/csspageweaver/interface/fonts/IBM_Plex_Mono/IBMPlexMono-Medium.woff2 differ
diff --git a/maquette-tests/csspageweaver/interface/fonts/IBM_Plex_Mono/IBMPlexMono-MediumItalic.woff b/maquette-tests/csspageweaver/interface/fonts/IBM_Plex_Mono/IBMPlexMono-MediumItalic.woff
new file mode 100644
index 0000000..2c11f2e
Binary files /dev/null and b/maquette-tests/csspageweaver/interface/fonts/IBM_Plex_Mono/IBMPlexMono-MediumItalic.woff differ
diff --git a/maquette-tests/csspageweaver/interface/fonts/IBM_Plex_Mono/IBMPlexMono-MediumItalic.woff2 b/maquette-tests/csspageweaver/interface/fonts/IBM_Plex_Mono/IBMPlexMono-MediumItalic.woff2
new file mode 100644
index 0000000..f0d77ab
Binary files /dev/null and b/maquette-tests/csspageweaver/interface/fonts/IBM_Plex_Mono/IBMPlexMono-MediumItalic.woff2 differ
diff --git a/maquette-tests/csspageweaver/interface/fonts/IBM_Plex_Mono/IBMPlexMono-Regular.woff b/maquette-tests/csspageweaver/interface/fonts/IBM_Plex_Mono/IBMPlexMono-Regular.woff
new file mode 100644
index 0000000..7d63d89
Binary files /dev/null and b/maquette-tests/csspageweaver/interface/fonts/IBM_Plex_Mono/IBMPlexMono-Regular.woff differ
diff --git a/maquette-tests/csspageweaver/interface/fonts/IBM_Plex_Mono/IBMPlexMono-Regular.woff2 b/maquette-tests/csspageweaver/interface/fonts/IBM_Plex_Mono/IBMPlexMono-Regular.woff2
new file mode 100644
index 0000000..d0d7ded
Binary files /dev/null and b/maquette-tests/csspageweaver/interface/fonts/IBM_Plex_Mono/IBMPlexMono-Regular.woff2 differ
diff --git a/maquette-tests/csspageweaver/interface/fonts/IBM_Plex_Mono/IBMPlexMono-SemiBold.woff b/maquette-tests/csspageweaver/interface/fonts/IBM_Plex_Mono/IBMPlexMono-SemiBold.woff
new file mode 100644
index 0000000..1da7753
Binary files /dev/null and b/maquette-tests/csspageweaver/interface/fonts/IBM_Plex_Mono/IBMPlexMono-SemiBold.woff differ
diff --git a/maquette-tests/csspageweaver/interface/fonts/IBM_Plex_Mono/IBMPlexMono-SemiBold.woff2 b/maquette-tests/csspageweaver/interface/fonts/IBM_Plex_Mono/IBMPlexMono-SemiBold.woff2
new file mode 100644
index 0000000..79dffdb
Binary files /dev/null and b/maquette-tests/csspageweaver/interface/fonts/IBM_Plex_Mono/IBMPlexMono-SemiBold.woff2 differ
diff --git a/maquette-tests/csspageweaver/interface/fonts/IBM_Plex_Mono/IBMPlexMono-SemiBoldItalic.woff b/maquette-tests/csspageweaver/interface/fonts/IBM_Plex_Mono/IBMPlexMono-SemiBoldItalic.woff
new file mode 100644
index 0000000..9f92825
Binary files /dev/null and b/maquette-tests/csspageweaver/interface/fonts/IBM_Plex_Mono/IBMPlexMono-SemiBoldItalic.woff differ
diff --git a/maquette-tests/csspageweaver/interface/fonts/IBM_Plex_Mono/IBMPlexMono-SemiBoldItalic.woff2 b/maquette-tests/csspageweaver/interface/fonts/IBM_Plex_Mono/IBMPlexMono-SemiBoldItalic.woff2
new file mode 100644
index 0000000..0aa811e
Binary files /dev/null and b/maquette-tests/csspageweaver/interface/fonts/IBM_Plex_Mono/IBMPlexMono-SemiBoldItalic.woff2 differ
diff --git a/maquette-tests/csspageweaver/interface/fonts/IBM_Plex_Mono/stylesheet.css b/maquette-tests/csspageweaver/interface/fonts/IBM_Plex_Mono/stylesheet.css
new file mode 100644
index 0000000..46f5086
--- /dev/null
+++ b/maquette-tests/csspageweaver/interface/fonts/IBM_Plex_Mono/stylesheet.css
@@ -0,0 +1,42 @@
+@font-face {
+ src: url('IBMPlexMono-Regular.woff2') format("woff2"),
+ url('IBMPlexMono-Regular.woff') format("woff");
+ font-family: 'IBM Plex Mono';
+ font-style: normal;
+ font-weight: 400;
+}
+@font-face {
+ src: url('IBMPlexMono-Italic.woff2') format("woff2"),
+ url('IBMPlexMono-Italic.woff') format("woff");
+ font-family: 'IBM Plex Mono';
+ font-style: italic;
+ font-weight: 400;
+}
+@font-face {
+ src: url('IBMPlexMono-Medium.woff2') format("woff2"),
+ url('IBMPlexMono-Medium.woff') format("woff");
+ font-family: 'IBM Plex Mono';
+ font-style: normal;
+ font-weight: 500;
+}
+@font-face {
+ src: url('IBMPlexMono-MediumItalic.woff2') format("woff2"),
+ url('IBMPlexMono-MediumItalic.woff') format("woff");
+ font-family: 'IBM Plex Mono';
+ font-style: italic;
+ font-weight: 500;
+}
+@font-face {
+ src: url('IBMPlexMono-SemiBold.woff2') format("woff2"),
+ url('IBMPlexMono-SemiBold.woff') format("woff");
+ font-family: 'IBM Plex Mono';
+ font-style: normal;
+ font-weight: 600;
+}
+@font-face {
+ src: url('IBMPlexMono-SemiBoldItalic.woff2') format("woff2"),
+ url('IBMPlexMono-SemiBoldItalic.woff') format("woff");
+ font-family: 'IBM Plex Mono';
+ font-style: italic;
+ font-weight: 600;
+}
diff --git a/maquette-tests/csspageweaver/lib/csstree.min.js b/maquette-tests/csspageweaver/lib/csstree.min.js
new file mode 100644
index 0000000..a1c5dd7
--- /dev/null
+++ b/maquette-tests/csspageweaver/lib/csstree.min.js
@@ -0,0 +1 @@
+!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).csstree=t()}(this,(function(){"use strict";function e(e){return{prev:null,next:null,data:e}}function t(e,t,n){var i;return null!==r?(i=r,r=r.cursor,i.prev=t,i.next=n,i.cursor=e.cursor):i={prev:t,next:n,cursor:e.cursor},e.cursor=i,i}function n(e){var t=e.cursor;e.cursor=t.cursor,t.prev=null,t.next=null,t.cursor=r,r=t}var r=null,i=function(){this.cursor=null,this.head=null,this.tail=null};i.createItem=e,i.prototype.createItem=e,i.prototype.updateCursors=function(e,t,n,r){for(var i=this.cursor;null!==i;)i.prev===e&&(i.prev=t),i.next===n&&(i.next=r),i=i.cursor},i.prototype.getSize=function(){for(var e=0,t=this.head;t;)e++,t=t.next;return e},i.prototype.fromArray=function(t){var n=null;this.head=null;for(var r=0;rs&&(p=a-l+3,a=l-2);for(var d=o;d<=u;d++)d>=0&&d0&&r[d].length>p?"…":"")+r[d].substr(p,s-2)+(r[d].length>p+s-1?"…":""));return[n(o,i),new Array(a+h+2).join("-")+"^",n(i,u)].filter(Boolean).join("\n")}var h=function(e,t,n,r,i){var a=o("SyntaxError",e);return a.source=t,a.offset=n,a.line=r,a.column=i,a.sourceFragment=function(e){return u(a,isNaN(e)?0:e)},Object.defineProperty(a,"formattedMessage",{get:function(){return"Parse error: "+a.message+"\n"+u(a,2)}}),a.parseError={offset:n,line:r,column:i},a},p={EOF:0,Ident:1,Function:2,AtKeyword:3,Hash:4,String:5,BadString:6,Url:7,BadUrl:8,Delim:9,Number:10,Percentage:11,Dimension:12,WhiteSpace:13,CDO:14,CDC:15,Colon:16,Semicolon:17,Comma:18,LeftSquareBracket:19,RightSquareBracket:20,LeftParenthesis:21,RightParenthesis:22,LeftCurlyBracket:23,RightCurlyBracket:24,Comment:25},d=Object.keys(p).reduce((function(e,t){return e[p[t]]=t,e}),{}),m={TYPE:p,NAME:d},g=0;function f(e){return e>=48&&e<=57}function b(e){return e>=65&&e<=90}function y(e){return e>=97&&e<=122}function k(e){return b(e)||y(e)}function v(e){return e>=128}function x(e){return k(e)||v(e)||95===e}function w(e){return e>=0&&e<=8||11===e||e>=14&&e<=31||127===e}function S(e){return 10===e||13===e||12===e}function C(e){return S(e)||32===e||9===e}function z(e,t){return 92===e&&(!S(t)&&t!==g)}var A=new Array(128);T.Eof=128,T.WhiteSpace=130,T.Digit=131,T.NameStart=132,T.NonPrintable=133;for(var P=0;P=65&&e<=70||e>=97&&e<=102},isUppercaseLetter:b,isLowercaseLetter:y,isLetter:k,isNonAscii:v,isNameStart:x,isName:function(e){return x(e)||f(e)||45===e},isNonPrintable:w,isNewline:S,isWhiteSpace:C,isValidEscape:z,isIdentifierStart:function(e,t,n){return 45===e?x(t)||45===t||z(t,n):!!x(e)||92===e&&z(e,t)},isNumberStart:function(e,t,n){return 43===e||45===e?f(t)?2:46===t&&f(n)?3:0:46===e?f(t)?2:0:f(e)?1:0},isBOM:function(e){return 65279===e?1:65534===e?1:0},charCodeCategory:T},E=L.isDigit,D=L.isHexDigit,O=L.isUppercaseLetter,B=L.isName,I=L.isWhiteSpace,N=L.isValidEscape;function M(e,t){return te.length)return!1;for(var i=t;i=0&&I(e.charCodeAt(t));t--);return t+1},findWhiteSpaceEnd:function(e,t){for(;t>24:H},lookupOffset:function(e){return(e+=this.tokenIndex)0?e>24,this.source,i)){case 1:break e;case 2:r++;break e;default:i=16777215&this.offsetAndType[r],this.balance[n]===r&&(r=n)}return r-this.tokenIndex},isBalanceEdge:function(e){return this.balance[this.tokenIndex]>24===V;e++,t++);t>0&&this.skip(t)},skipSC:function(){for(;this.tokenType===V||this.tokenType===G;)this.next()},skip:function(e){var t=this.tokenIndex+e;t>24,this.tokenEnd=16777215&t):(this.tokenIndex=this.tokenCount,this.next())},next:function(){var e=this.tokenIndex+1;e>24,this.tokenEnd=16777215&e):(this.tokenIndex=this.tokenCount,this.eof=!0,this.tokenType=H,this.tokenStart=this.tokenEnd=this.source.length)},dump:function(){var e=this.firstCharOffset;return Array.prototype.slice.call(this.offsetAndType,0,this.tokenCount).map((function(t,n){var r=e,i=16777215&t;return e=i,{idx:n,type:Y[t>>24],chunk:this.source.substring(r,i),balance:this.balance[n]}}),this)}};var Q=K;function X(e){return e}function Z(e,t,n,r){var i,a;switch(e.type){case"Group":i=function(e,t,n,r){var i=" "===e.combinator||r?e.combinator:" "+e.combinator+" ",a=e.terms.map((function(e){return Z(e,t,n,r)})).join(i);return(e.explicit||n)&&(a=(r||","===a[0]?"[":"[ ")+a+(r?"]":" ]")),a}(e,t,n,r)+(e.disallowEmpty?"!":"");break;case"Multiplier":return Z(e.term,t,n,r)+t(0===(a=e).min&&0===a.max?"*":0===a.min&&1===a.max?"?":1===a.min&&0===a.max?a.comma?"#":"+":1===a.min&&1===a.max?"":(a.comma?"#":"")+(a.min===a.max?"{"+a.min+"}":"{"+a.min+","+(0!==a.max?a.max:"")+"}"),e);case"Type":i="<"+e.name+(e.opts?t(function(e){switch(e.type){case"Range":return" ["+(null===e.min?"-∞":e.min)+","+(null===e.max?"∞":e.max)+"]";default:throw new Error("Unknown node type `"+e.type+"`")}}(e.opts),e.opts):"")+">";break;case"Property":i="<'"+e.name+"'>";break;case"Keyword":i=e.name;break;case"AtKeyword":i="@"+e.name;break;case"Function":i=e.name+"(";break;case"String":case"Token":i=e.value;break;case"Comma":i=",";break;default:throw new Error("Unknown node type `"+e.type+"`")}return t(i,e)}var $=function(e,t){var n=X,r=!1,i=!1;return"function"==typeof t?n=t:t&&(r=Boolean(t.forceBraces),i=Boolean(t.compact),"function"==typeof t.decorate&&(n=t.decorate)),Z(e,n,r,i)};function J(e,t){var n=e&&e.loc&&e.loc[t];return n?{offset:n.offset,line:n.line,column:n.column}:null}var ee=function(e,t){var n=o("SyntaxReferenceError",e+(t?" `"+t+"`":""));return n.reference=t,n},te=function(e,t,n,r){var i=o("SyntaxMatchError",e),a=function(e){for(var t=e.tokens,n=e.longestMatch,r=n1}}(r),s=a.mismatchOffset||0,l=a.node||n,c=J(l,"end"),u=a.last?c:J(l,"start"),h=a.css;return i.rawMessage=e,i.syntax=t?$(t):"",i.css=h,i.mismatchOffset=s,i.loc={source:l&&l.loc&&l.loc.source||"",start:u,end:c},i.line=u?u.line:void 0,i.column=u?u.column:void 0,i.offset=u?u.offset:void 0,i.message=e+"\n syntax: "+i.syntax+"\n value: "+(i.css||"")+"\n --------"+new Array(i.mismatchOffset+1).join("-")+"^",i},ne=Object.prototype.hasOwnProperty,re=Object.create(null),ie=Object.create(null),ae=45;function oe(e,t){return t=t||0,e.length-t>=2&&e.charCodeAt(t)===ae&&e.charCodeAt(t+1)===ae}function se(e,t){if(t=t||0,e.length-t>=3&&e.charCodeAt(t)===ae&&e.charCodeAt(t+1)!==ae){var n=e.indexOf("-",t+2);if(-1!==n)return e.substring(t,n+1)}return""}var le={keyword:function(e){if(ne.call(re,e))return re[e];var t=e.toLowerCase();if(ne.call(re,t))return re[e]=re[t];var n=oe(t,0),r=n?"":se(t,0);return re[e]=Object.freeze({basename:t.substr(r.length),name:t,vendor:r,prefix:r,custom:n})},property:function(e){if(ne.call(ie,e))return ie[e];var t=e,n=e[0];"/"===n?n="/"===e[1]?"//":"/":"_"!==n&&"*"!==n&&"$"!==n&&"#"!==n&&"+"!==n&&"&"!==n&&(n="");var r=oe(t,n.length);if(!r&&(t=t.toLowerCase(),ne.call(ie,t)))return ie[e]=ie[t];var i=r?"":se(t,n.length),a=t.substr(0,n.length+i.length);return ie[e]=Object.freeze({basename:t.substr(a.length),name:t.substr(n.length),hack:n,vendor:i,prefix:a,custom:r})},isCustomProperty:oe,vendorPrefix:se},ce="undefined"!=typeof Uint32Array?Uint32Array:Array,ue=function(e,t){return null===e||e.length=e.length?void(h>Pe,l[c]=m,l[m++]=c;m0?6:0;if(!He(a))return 0;if(++i>6)return 0}return i}function rt(e,t,n){if(!e)return 0;for(;et(n(t),Je);){if(++e>6)return 0;t++}return t}var it=Le.isIdentifierStart,at=Le.isHexDigit,ot=Le.isDigit,st=Le.cmpStr,lt=Le.consumeNumber,ct=Le.TYPE,ut=["unset","initial","inherit"],ht=["calc(","-moz-calc(","-webkit-calc("];function pt(e,t){return te.max)return!0}return!1}function bt(e,t){var n=e.index,r=0;do{if(r++,e.balance<=n)break}while(e=t(r));return r}function yt(e){return function(t,n,r){return null===t?0:t.type===ct.Function&&mt(t.value,ht)?bt(t,n):e(t,n,r)}}function kt(e){return function(t){return null===t||t.type!==e?0:1}}function vt(e){return function(t,n,r){if(null===t||t.type!==ct.Dimension)return 0;var i=lt(t.value,0);if(null!==e){var a=t.value.indexOf("\\",i),o=-1!==a&>(t.value,a)?t.value.substring(i,a):t.value.substr(i);if(!1===e.hasOwnProperty(o.toLowerCase()))return 0}return ft(r,t.value,i)?0:1}}function xt(e){return"function"!=typeof e&&(e=function(){return 0}),function(t,n,r){return null!==t&&t.type===ct.Number&&0===Number(t.value)?1:e(t,n,r)}}var wt,St={"ident-token":kt(ct.Ident),"function-token":kt(ct.Function),"at-keyword-token":kt(ct.AtKeyword),"hash-token":kt(ct.Hash),"string-token":kt(ct.String),"bad-string-token":kt(ct.BadString),"url-token":kt(ct.Url),"bad-url-token":kt(ct.BadUrl),"delim-token":kt(ct.Delim),"number-token":kt(ct.Number),"percentage-token":kt(ct.Percentage),"dimension-token":kt(ct.Dimension),"whitespace-token":kt(ct.WhiteSpace),"CDO-token":kt(ct.CDO),"CDC-token":kt(ct.CDC),"colon-token":kt(ct.Colon),"semicolon-token":kt(ct.Semicolon),"comma-token":kt(ct.Comma),"[-token":kt(ct.LeftSquareBracket),"]-token":kt(ct.RightSquareBracket),"(-token":kt(ct.LeftParenthesis),")-token":kt(ct.RightParenthesis),"{-token":kt(ct.LeftCurlyBracket),"}-token":kt(ct.RightCurlyBracket),string:kt(ct.String),ident:kt(ct.Ident),"custom-ident":function(e){if(null===e||e.type!==ct.Ident)return 0;var t=e.value.toLowerCase();return mt(t,ut)?0:dt(t,"default")?0:1},"custom-property-name":function(e){return null===e||e.type!==ct.Ident?0:45!==pt(e.value,0)||45!==pt(e.value,1)?0:1},"hex-color":function(e){if(null===e||e.type!==ct.Hash)return 0;var t=e.value.length;if(4!==t&&5!==t&&7!==t&&9!==t)return 0;for(var n=1;ne.index||e.balancee.index||e.balance=128||0===$t[n])break}return e.pos===t&&e.error("Expect a keyword"),e.substringToPos(t)}function nn(e){for(var t=e.pos;t57)break}return e.pos===t&&e.error("Expect a number"),e.substringToPos(t)}function rn(e){var t=e.str.indexOf("'",e.pos+1);return-1===t&&(e.pos=e.str.length,e.error("Expect an apostrophe")),e.substringToPos(t+1)}function an(e){var t,n=null;return e.eat(Kt),t=nn(e),e.charCode()===Ft?(e.pos++,e.charCode()!==Xt&&(n=nn(e))):n=t,e.eat(Xt),{min:Number(t),max:n?Number(n):0}}function on(e,t){var n=function(e){var t=null,n=!1;switch(e.charCode()){case _t:e.pos++,t={min:0,max:0};break;case jt:e.pos++,t={min:1,max:0};break;case Ut:e.pos++,t={min:0,max:1};break;case Bt:e.pos++,n=!0,t=e.charCode()===Kt?an(e):{min:1,max:0};break;case Kt:t=an(e);break;default:return null}return{type:"Multiplier",comma:n,min:t.min,max:t.max,term:null}}(e);return null!==n?(n.term=t,n):t}function sn(e){var t=e.peek();return""===t?null:{type:"Token",value:t}}function ln(e){var t,n=null;return e.eat(qt),t=tn(e),e.charCode()===Mt&&e.nextCharCode()===Rt&&(e.pos+=2,t+="()"),e.charCodeAt(e.findWsEnd(e.pos))===Vt&&(en(e),n=function(e){var t=null,n=null,r=1;return e.eat(Vt),e.charCode()===Wt&&(e.peek(),r=-1),-1==r&&e.charCode()===Zt?e.peek():t=r*Number(nn(e)),en(e),e.eat(Ft),en(e),e.charCode()===Zt?e.peek():(r=1,e.charCode()===Wt&&(e.peek(),r=-1),n=r*Number(nn(e))),e.eat(Gt),null===t&&null===n?null:{type:"Range",min:t,max:n}}(e)),e.eat(Yt),on(e,{type:"Type",name:t,opts:n})}function cn(e,t){function n(e,t){return{type:"Group",terms:e,combinator:t,disallowEmpty:!1,explicit:!1}}for(t=Object.keys(t).sort((function(e,t){return Jt[e]-Jt[t]}));t.length>0;){for(var r=t.shift(),i=0,a=0;i1&&(e.splice(a,i-a,n(e.slice(a,i),r)),i=a+1),a=-1))}-1!==a&&t.length&&e.splice(a,i-a,n(e.slice(a,i),r))}return r}function un(e){for(var t,n=[],r={},i=null,a=e.pos;t=hn(e);)"Spaces"!==t.type&&("Combinator"===t.type?(null!==i&&"Combinator"!==i.type||(e.pos=a,e.error("Unexpected combinator")),r[t.value]=!0):null!==i&&"Combinator"!==i.type&&(r[" "]=!0,n.push({type:"Combinator",value:" "})),n.push(t),i=t,a=e.pos);return null!==i&&"Combinator"===i.type&&(e.pos-=a,e.error("Unexpected combinator")),{type:"Group",terms:n,combinator:cn(n,r)||" ",disallowEmpty:!1,explicit:!1}}function hn(e){var t=e.charCode();if(t<128&&1===$t[t])return function(e){var t;return t=tn(e),e.charCode()===Mt?(e.pos++,{type:"Function",name:t}):on(e,{type:"Keyword",name:t})}(e);switch(t){case Gt:break;case Vt:return on(e,function(e){var t;return e.eat(Vt),t=un(e),e.eat(Gt),t.explicit=!0,e.charCode()===Ot&&(e.pos++,t.disallowEmpty=!0),t}(e));case qt:return e.nextCharCode()===Nt?function(e){var t;return e.eat(qt),e.eat(Nt),t=tn(e),e.eat(Nt),e.eat(Yt),on(e,{type:"Property",name:t})}(e):ln(e);case Qt:return{type:"Combinator",value:e.substringToPos(e.nextCharCode()===Qt?e.pos+2:e.pos+1)};case It:return e.pos++,e.eat(It),{type:"Combinator",value:"&&"};case Ft:return e.pos++,{type:"Comma"};case Nt:return on(e,{type:"String",value:rn(e)});case Dt:case Pt:case Tt:case Et:case Lt:return{type:"Spaces",value:en(e)};case Ht:return(t=e.nextCharCode())<128&&1===$t[t]?(e.pos++,{type:"AtKeyword",name:tn(e)}):sn(e);case _t:case jt:case Ut:case Bt:case Ot:break;case Kt:if((t=e.nextCharCode())<48||t>57)return sn(e);break;default:return sn(e)}}function pn(e){var t=new At(e),n=un(t);return t.pos!==e.length&&t.error("Unexpected input"),1===n.terms.length&&"Group"===n.terms[0].type&&(n=n.terms[0]),n}pn("[a&&#|<'c'>*||e() f{2} /,(% g#{1,2} h{2,})]!");var dn=pn,mn=function(){};function gn(e){return"function"==typeof e?e:mn}var fn=function(e,t,n){var r=mn,i=mn;if("function"==typeof t?r=t:t&&(r=gn(t.enter),i=gn(t.leave)),r===mn&&i===mn)throw new Error("Neither `enter` nor `leave` walker handler is set or both aren't a function");!function e(t){switch(r.call(n,t),t.type){case"Group":t.terms.forEach(e);break;case"Multiplier":e(t.term);break;case"Type":case"Property":case"Keyword":case"AtKeyword":case"Function":case"String":case"Token":case"Comma":break;default:throw new Error("Unknown type: "+t.type)}i.call(n,t)}(e)},bn=new Q,yn={decorator:function(e){var t=null,n={len:0,node:null},r=[n],i="";return{children:e.children,node:function(n){var r=t;t=n,e.node.call(this,n),t=r},chunk:function(e){i+=e,n.node!==t?r.push({len:e.length,node:t}):n.len+=e.length},result:function(){return kn(i,r)}}}};function kn(e,t){var n=[],r=0,i=0,a=t?t[i].node:null;for(Le(e,bn);!bn.eof;){if(t)for(;i2&&e.charCodeAt(e.length-2)===Cn&&e.charCodeAt(e.length-1)===zn}function Tn(e){return"Keyword"===e.type||"AtKeyword"===e.type||"Function"===e.type||"Type"===e.type&&Pn(e.name)}function Ln(e){if("function"==typeof e)return{type:"Generic",fn:e};switch(e.type){case"Group":var t=function e(t,n,r){switch(t){case" ":for(var i=xn,a=n.length-1;a>=0;a--){i=An(l=n[a],i,wn)}return i;case"|":i=wn;var o=null;for(a=n.length-1;a>=0;a--){if(Tn(l=n[a])&&(null===o&&a>0&&Tn(n[a-1])&&(i=An({type:"Enum",map:o=Object.create(null)},xn,i)),null!==o)){var s=(Pn(l.name)?l.name.slice(0,-1):l.name).toLowerCase();if(s in o==!1){o[s]=l;continue}}o=null,i=An(l,xn,i)}return i;case"&&":if(n.length>5)return{type:"MatchOnce",terms:n,all:!0};for(i=wn,a=n.length-1;a>=0;a--){var l=n[a];c=n.length>1?e(t,n.filter((function(e){return e!==l})),!1):xn,i=An(l,c,i)}return i;case"||":if(n.length>5)return{type:"MatchOnce",terms:n,all:!1};for(i=r?xn:wn,a=n.length-1;a>=0;a--){var c;l=n[a];c=n.length>1?e(t,n.filter((function(e){return e!==l})),!0):xn,i=An(l,c,i)}return i}}(e.combinator,e.terms.map(Ln),!1);return e.disallowEmpty&&(t=An(t,Sn,wn)),t;case"Multiplier":return function(e){var t=xn,n=Ln(e.term);if(0===e.max)n=An(n,Sn,wn),(t=An(n,null,wn)).then=An(xn,xn,t),e.comma&&(t.then.else=An({type:"Comma",syntax:e},t,wn));else for(var r=e.min||1;r<=e.max;r++)e.comma&&t!==xn&&(t=An({type:"Comma",syntax:e},t,wn)),t=An(n,An(xn,xn,t),wn);if(0===e.min)t=An(xn,xn,t);else for(r=0;r=65&&r<=90&&(r|=32),r!==t.charCodeAt(n))return!1}return!0}function Vn(e){return null===e||(e.type===Nn.Comma||e.type===Nn.Function||e.type===Nn.LeftParenthesis||e.type===Nn.LeftSquareBracket||e.type===Nn.LeftCurlyBracket||e.type===Nn.Delim)}function Gn(e){return null===e||(e.type===Nn.RightParenthesis||e.type===Nn.RightSquareBracket||e.type===Nn.RightCurlyBracket||e.type===Nn.Delim)}function Kn(e,t,n){function r(){do{f=++by&&(y=b)}function c(){k=k.type===_n?k.prev:{type:jn,syntax:u.syntax,token:k.token,prev:k},u=u.prev}var u=null,h=null,p=null,d=null,m=0,g=null,f=null,b=-1,y=0,k={type:Mn,syntax:null,token:null,prev:null};for(r();null===g&&++mp.tokenIndex)&&(p=d,d=!1);else if(null===p){g=Wn;break}t=p.nextState,h=p.thenStack,u=p.syntaxStack,k=p.matchStack,b=p.tokenIndex,f=bb){for(;b":"<'"+t.name+"'>"));if(!1!==d&&null!==f&&"Type"===t.type)if("custom-ident"===t.name&&f.type===Nn.Ident||"length"===t.name&&"0"===f.value){null===d&&(d=a(t,p)),t=Bn;break}u={syntax:t.syntax,opts:t.syntax.opts||null!==u&&u.opts||null,prev:u},k={type:_n,syntax:t.syntax,token:k.token,prev:k},t=z.match;break;case"Keyword":var A=t.name;if(null!==f){var P=f.value;if(-1!==P.indexOf("\\")&&(P=P.replace(/\\[09].*$/,"")),Hn(P,A)){l(),t=On;break}}t=Bn;break;case"AtKeyword":case"Function":if(null!==f&&Hn(f.value,t.name)){l(),t=On;break}t=Bn;break;case"Token":if(null!==f&&f.value===t.value){l(),t=On;break}t=Bn;break;case"Comma":null!==f&&f.type===Nn.Comma?Vn(k.token)?t=Bn:(l(),t=Gn(f)?Bn:On):t=Vn(k.token)||Gn(f)?On:Bn;break;case"String":var T="";for(S=b;S=0}function nr(e){return Boolean(e)&&tr(e.offset)&&tr(e.line)&&tr(e.column)}function rr(e,t){return function(n,r){if(!n||n.constructor!==Object)return r(n,"Type of node should be an Object");for(var i in n){var o=!0;if(!1!==er.call(n,i)){if("type"===i)n.type!==e&&r(n,"Wrong node type `"+n.type+"`, expected `"+e+"`");else if("loc"===i){if(null===n.loc)continue;if(n.loc&&n.loc.constructor===Object)if("string"!=typeof n.loc.source)i+=".source";else if(nr(n.loc.start)){if(nr(n.loc.end))continue;i+=".end"}else i+=".start";o=!1}else if(t.hasOwnProperty(i)){var s=0;for(o=!1;!o&&s");else{if(!Array.isArray(c))throw new Error("Wrong value `"+c+"` in `"+e+"."+a+"` structure definition");o.push("List")}}i[a]=o.join(" | ")}return{docs:i,check:rr(e,r)}}var ar=ee,or=te,sr=En.buildMatchGraph,lr=Qn,cr=function(e){var t={};if(e.node)for(var n in e.node)if(er.call(e.node,n)){var r=e.node[n];if(!r.structure)throw new Error("Missed `structure` field in `"+n+"` node type definition");t[n]=ir(n,r)}return t},ur=sr("inherit | initial | unset"),hr=sr("inherit | initial | unset | <-ms-legacy-expression>");function pr(e,t,n){var r={};for(var i in e)e[i].syntax&&(r[i]=n?e[i].syntax:$(e[i].syntax,{compact:t}));return r}function dr(e,t,n){return{matched:e,iterations:n,error:t,getTrace:$n.getTrace,isType:$n.isType,isProperty:$n.isProperty,isKeyword:$n.isKeyword}}function mr(e,t,n,r){var i,a=vn(n,e.syntax);return function(e){for(var t=0;t(e[n]=this.createDescriptor(t.descriptors[n],"AtruleDescriptor",n),e),{}):null}},addProperty_:function(e,t){this.properties[e]=this.createDescriptor(t,"Property",e)},addType_:function(e,t){this.types[e]=this.createDescriptor(t,"Type",e),t===St["-ms-legacy-expression"]&&(this.valueCommonSyntax=hr)},matchAtrulePrelude:function(e,t){var n=le.keyword(e),r=n.vendor?this.getAtrulePrelude(n.name)||this.getAtrulePrelude(n.basename):this.getAtrulePrelude(n.name);return r?mr(this,r,t,!0):n.basename in this.atrules?dr(null,new Error("At-rule `"+e+"` should not contain a prelude")):dr(null,new ar("Unknown at-rule",e))},matchAtruleDescriptor:function(e,t,n){var r=le.keyword(e),i=le.keyword(t),a=r.vendor?this.atrules[r.name]||this.atrules[r.basename]:this.atrules[r.name];if(!a)return dr(null,new ar("Unknown at-rule",e));if(!a.descriptors)return dr(null,new Error("At-rule `"+e+"` has no known descriptors"));var o=i.vendor?a.descriptors[i.name]||a.descriptors[i.basename]:a.descriptors[i.name];return o?mr(this,o,n,!0):dr(null,new ar("Unknown at-rule descriptor",t))},matchDeclaration:function(e){return"Declaration"!==e.type?dr(null,new Error("Not a Declaration node")):this.matchProperty(e.property,e.value)},matchProperty:function(e,t){var n=le.property(e);if(n.custom)return dr(null,new Error("Lexer matching doesn't applicable for custom properties"));var r=n.vendor?this.getProperty(n.name)||this.getProperty(n.basename):this.getProperty(n.name);return r?mr(this,r,t,!0):dr(null,new ar("Unknown property",e))},matchType:function(e,t){var n=this.getType(e);return n?mr(this,n,t,!1):dr(null,new ar("Unknown type",e))},match:function(e,t){return"string"==typeof e||e&&e.type?("string"!=typeof e&&e.match||(e=this.createDescriptor(e,"Type","anonymous")),mr(this,e,t,!1)):dr(null,new ar("Bad syntax"))},findValueFragments:function(e,t,n,r){return Jn.matchFragments(this,t,this.matchProperty(e,t),n,r)},findDeclarationValueFragments:function(e,t,n){return Jn.matchFragments(this,e.value,this.matchDeclaration(e),t,n)},findAllFragments:function(e,t,n){var r=[];return this.syntax.walk(e,{visit:"Declaration",enter:function(e){r.push.apply(r,this.findDeclarationValueFragments(e,t,n))}.bind(this)}),r},getAtrulePrelude:function(e){return this.atrules.hasOwnProperty(e)?this.atrules[e].prelude:null},getAtruleDescriptor:function(e,t){return this.atrules.hasOwnProperty(e)&&this.atrules.declarators&&this.atrules[e].declarators[t]||null},getProperty:function(e){return this.properties.hasOwnProperty(e)?this.properties[e]:null},getType:function(e){return this.types.hasOwnProperty(e)?this.types[e]:null},validate:function(){function e(r,i,a,o){if(a.hasOwnProperty(i))return a[i];a[i]=!1,null!==o.syntax&&fn(o.syntax,(function(o){if("Type"===o.type||"Property"===o.type){var s="Type"===o.type?r.types:r.properties,l="Type"===o.type?t:n;s.hasOwnProperty(o.name)&&!e(r,o.name,l,s[o.name])||(a[i]=!0)}}),this)}var t={},n={};for(var r in this.types)e(this,r,t,this.types[r]);for(var r in this.properties)e(this,r,n,this.properties[r]);return t=Object.keys(t).filter((function(e){return t[e]})),n=Object.keys(n).filter((function(e){return n[e]})),t.length||n.length?{types:t,properties:n}:null},dump:function(e,t){return{generic:this.generic,types:pr(this.types,!t,e),properties:pr(this.properties,!t,e)}},toString:function(){return JSON.stringify(this.dump())}};var fr=gr,br={SyntaxError:Ct,parse:dn,generate:$,walk:fn},yr=Le.isBOM,kr=10,vr=12,xr=13;var wr=function(){this.lines=null,this.columns=null,this.linesAndColumnsComputed=!1};wr.prototype={setSource:function(e,t,n,r){this.source=e,this.startOffset=void 0===t?0:t,this.startLine=void 0===n?1:n,this.startColumn=void 0===r?1:r,this.linesAndColumnsComputed=!1},ensureLinesAndColumnsComputed:function(){this.linesAndColumnsComputed||(!function(e,t){for(var n=t.length,r=ue(e.lines,n),i=e.startLine,a=ue(e.columns,n),o=e.startColumn,s=t.length>0?yr(t.charCodeAt(0)):0;s",needPositions:!1,onParseError:Lr,onParseErrorThrow:!1,parseAtrulePrelude:!0,parseRulePrelude:!0,parseValue:!0,parseCustomProperty:!1,readSequence:Pr,createList:function(){return new a},createSingleNodeList:function(e){return(new a).appendData(e)},getFirstListNode:function(e){return e&&e.first()},getLastListNode:function(e){return e.last()},parseWithFallback:function(e,t){var n=this.scanner.tokenIndex;try{return e.call(this)}catch(e){if(this.onParseErrorThrow)throw e;var r=t.call(this,n);return this.onParseErrorThrow=!0,this.onParseError(e,r),this.onParseErrorThrow=!1,r}},lookupNonWSType:function(e){do{var t=this.scanner.lookupType(e++);if(t!==Or)return t}while(0!==t);return 0},eat:function(e){if(this.scanner.tokenType!==e){var t=this.scanner.tokenStart,n=Dr[e]+" is expected";switch(e){case Br:this.scanner.tokenType===Ir||this.scanner.tokenType===Nr?(t=this.scanner.tokenEnd-1,n="Identifier is expected but function found"):n="Identifier is expected";break;case Mr:this.scanner.isDelim(35)&&(this.scanner.next(),t++,n="Name is expected");break;case Rr:this.scanner.tokenType===_r&&(t=this.scanner.tokenEnd,n="Percent sign is expected");break;default:this.scanner.source.charCodeAt(this.scanner.tokenStart)===e&&(t+=1)}this.error(n,t)}this.scanner.next()},consume:function(e){var t=this.scanner.getTokenValue();return this.eat(e),t},consumeFunctionName:function(){var e=this.scanner.source.substring(this.scanner.tokenStart,this.scanner.tokenEnd-1);return this.eat(Ir),e},getLocation:function(e,t){return this.needPositions?this.locationMap.getLocationRange(e,t,this.filename):null},getLocationFromList:function(e){if(this.needPositions){var t=this.getFirstListNode(e),n=this.getLastListNode(e);return this.locationMap.getLocationRange(null!==t?t.loc.start.offset-this.locationMap.startOffset:this.scanner.tokenStart,null!==n?n.loc.end.offset-this.locationMap.startOffset:this.scanner.tokenStart,this.filename)}return null},error:function(e,t){var n=void 0!==t&&t",t.needPositions=Boolean(n.positions),t.onParseError="function"==typeof n.onParseError?n.onParseError:Lr,t.onParseErrorThrow=!1,t.parseAtrulePrelude=!("parseAtrulePrelude"in n)||Boolean(n.parseAtrulePrelude),t.parseRulePrelude=!("parseRulePrelude"in n)||Boolean(n.parseRulePrelude),t.parseValue=!("parseValue"in n)||Boolean(n.parseValue),t.parseCustomProperty="parseCustomProperty"in n&&Boolean(n.parseCustomProperty),!t.context.hasOwnProperty(i))throw new Error("Unknown context `"+i+"`");return r=t.context[i].call(t,n),t.scanner.eof||t.error(),r}},Wr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""),qr=function(e){if(0<=e&&e>>=5)>0&&(t|=32),n+=qr(t)}while(r>0);return n};var Ur=function(e,t){return e(t={exports:{}},t.exports),t.exports}((function(e,t){t.getArg=function(e,t,n){if(t in e)return e[t];if(3===arguments.length)return n;throw new Error('"'+t+'" is a required argument.')};var n=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.-]*)(?::(\d+))?(.*)$/,r=/^data:.+\,.+$/;function i(e){var t=e.match(n);return t?{scheme:t[1],auth:t[2],host:t[3],port:t[4],path:t[5]}:null}function a(e){var t="";return e.scheme&&(t+=e.scheme+":"),t+="//",e.auth&&(t+=e.auth+"@"),e.host&&(t+=e.host),e.port&&(t+=":"+e.port),e.path&&(t+=e.path),t}function o(e){var n=e,r=i(e);if(r){if(!r.path)return e;n=r.path}for(var o,s=t.isAbsolute(n),l=n.split(/\/+/),c=0,u=l.length-1;u>=0;u--)"."===(o=l[u])?l.splice(u,1):".."===o?c++:c>0&&(""===o?(l.splice(u+1,c),c=0):(l.splice(u,2),c--));return""===(n=l.join("/"))&&(n=s?"/":"."),r?(r.path=n,a(r)):n}function s(e,t){""===e&&(e="."),""===t&&(t=".");var n=i(t),s=i(e);if(s&&(e=s.path||"/"),n&&!n.scheme)return s&&(n.scheme=s.scheme),a(n);if(n||t.match(r))return t;if(s&&!s.host&&!s.path)return s.host=t,a(s);var l="/"===t.charAt(0)?t:o(e.replace(/\/+$/,"")+"/"+t);return s?(s.path=l,a(s)):l}t.urlParse=i,t.urlGenerate=a,t.normalize=o,t.join=s,t.isAbsolute=function(e){return"/"===e.charAt(0)||n.test(e)},t.relative=function(e,t){""===e&&(e="."),e=e.replace(/\/$/,"");for(var n=0;0!==t.indexOf(e+"/");){var r=e.lastIndexOf("/");if(r<0)return t;if((e=e.slice(0,r)).match(/^([^\/]+:\/)?\/*$/))return t;++n}return Array(n+1).join("../")+t.substr(e.length+1)};var l=!("__proto__"in Object.create(null));function c(e){return e}function u(e){if(!e)return!1;var t=e.length;if(t<9)return!1;if(95!==e.charCodeAt(t-1)||95!==e.charCodeAt(t-2)||111!==e.charCodeAt(t-3)||116!==e.charCodeAt(t-4)||111!==e.charCodeAt(t-5)||114!==e.charCodeAt(t-6)||112!==e.charCodeAt(t-7)||95!==e.charCodeAt(t-8)||95!==e.charCodeAt(t-9))return!1;for(var n=t-10;n>=0;n--)if(36!==e.charCodeAt(n))return!1;return!0}function h(e,t){return e===t?0:null===e?1:null===t?-1:e>t?1:-1}t.toSetString=l?c:function(e){return u(e)?"$"+e:e},t.fromSetString=l?c:function(e){return u(e)?e.slice(1):e},t.compareByOriginalPositions=function(e,t,n){var r=h(e.source,t.source);return 0!==r?r:0!==(r=e.originalLine-t.originalLine)?r:0!==(r=e.originalColumn-t.originalColumn)||n?r:0!==(r=e.generatedColumn-t.generatedColumn)?r:0!==(r=e.generatedLine-t.generatedLine)?r:h(e.name,t.name)},t.compareByGeneratedPositionsDeflated=function(e,t,n){var r=e.generatedLine-t.generatedLine;return 0!==r?r:0!==(r=e.generatedColumn-t.generatedColumn)||n?r:0!==(r=h(e.source,t.source))?r:0!==(r=e.originalLine-t.originalLine)?r:0!==(r=e.originalColumn-t.originalColumn)?r:h(e.name,t.name)},t.compareByGeneratedPositionsInflated=function(e,t){var n=e.generatedLine-t.generatedLine;return 0!==n?n:0!==(n=e.generatedColumn-t.generatedColumn)?n:0!==(n=h(e.source,t.source))?n:0!==(n=e.originalLine-t.originalLine)?n:0!==(n=e.originalColumn-t.originalColumn)?n:h(e.name,t.name)},t.parseSourceMapInput=function(e){return JSON.parse(e.replace(/^\)]}'[^\n]*\n/,""))},t.computeSourceURL=function(e,t,n){if(t=t||"",e&&("/"!==e[e.length-1]&&"/"!==t[0]&&(e+="/"),t=e+t),n){var r=i(n);if(!r)throw new Error("sourceMapURL could not be parsed");if(r.path){var l=r.path.lastIndexOf("/");l>=0&&(r.path=r.path.substring(0,l+1))}t=s(a(r),t)}return o(t)}})),Hr=(Ur.getArg,Ur.urlParse,Ur.urlGenerate,Ur.normalize,Ur.join,Ur.isAbsolute,Ur.relative,Ur.toSetString,Ur.fromSetString,Ur.compareByOriginalPositions,Ur.compareByGeneratedPositionsDeflated,Ur.compareByGeneratedPositionsInflated,Ur.parseSourceMapInput,Ur.computeSourceURL,Object.prototype.hasOwnProperty),Vr="undefined"!=typeof Map;function Gr(){this._array=[],this._set=Vr?new Map:Object.create(null)}Gr.fromArray=function(e,t){for(var n=new Gr,r=0,i=e.length;r=0)return t}else{var n=Ur.toSetString(e);if(Hr.call(this._set,n))return this._set[n]}throw new Error('"'+e+'" is not in the set.')},Gr.prototype.at=function(e){if(e>=0&&er||i==r&&o>=a||Ur.compareByGeneratedPositionsInflated(t,n)<=0?(this._last=e,this._array.push(e)):(this._sorted=!1,this._array.push(e))},Qr.prototype.toArray=function(){return this._sorted||(this._array.sort(Ur.compareByGeneratedPositionsInflated),this._sorted=!0),this._array};var Xr=Kr.ArraySet,Zr={MappingList:Qr}.MappingList;function $r(e){e||(e={}),this._file=Ur.getArg(e,"file",null),this._sourceRoot=Ur.getArg(e,"sourceRoot",null),this._skipValidation=Ur.getArg(e,"skipValidation",!1),this._sources=new Xr,this._names=new Xr,this._mappings=new Zr,this._sourcesContents=null}$r.prototype._version=3,$r.fromSourceMap=function(e){var t=e.sourceRoot,n=new $r({file:e.file,sourceRoot:t});return e.eachMapping((function(e){var r={generated:{line:e.generatedLine,column:e.generatedColumn}};null!=e.source&&(r.source=e.source,null!=t&&(r.source=Ur.relative(t,r.source)),r.original={line:e.originalLine,column:e.originalColumn},null!=e.name&&(r.name=e.name)),n.addMapping(r)})),e.sources.forEach((function(r){var i=r;null!==t&&(i=Ur.relative(t,r)),n._sources.has(i)||n._sources.add(i);var a=e.sourceContentFor(r);null!=a&&n.setSourceContent(r,a)})),n},$r.prototype.addMapping=function(e){var t=Ur.getArg(e,"generated"),n=Ur.getArg(e,"original",null),r=Ur.getArg(e,"source",null),i=Ur.getArg(e,"name",null);this._skipValidation||this._validateMapping(t,n,r,i),null!=r&&(r=String(r),this._sources.has(r)||this._sources.add(r)),null!=i&&(i=String(i),this._names.has(i)||this._names.add(i)),this._mappings.add({generatedLine:t.line,generatedColumn:t.column,originalLine:null!=n&&n.line,originalColumn:null!=n&&n.column,source:r,name:i})},$r.prototype.setSourceContent=function(e,t){var n=e;null!=this._sourceRoot&&(n=Ur.relative(this._sourceRoot,n)),null!=t?(this._sourcesContents||(this._sourcesContents=Object.create(null)),this._sourcesContents[Ur.toSetString(n)]=t):this._sourcesContents&&(delete this._sourcesContents[Ur.toSetString(n)],0===Object.keys(this._sourcesContents).length&&(this._sourcesContents=null))},$r.prototype.applySourceMap=function(e,t,n){var r=t;if(null==t){if(null==e.file)throw new Error('SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, or the source map\'s "file" property. Both were omitted.');r=e.file}var i=this._sourceRoot;null!=i&&(r=Ur.relative(i,r));var a=new Xr,o=new Xr;this._mappings.unsortedForEach((function(t){if(t.source===r&&null!=t.originalLine){var s=e.originalPositionFor({line:t.originalLine,column:t.originalColumn});null!=s.source&&(t.source=s.source,null!=n&&(t.source=Ur.join(n,t.source)),null!=i&&(t.source=Ur.relative(i,t.source)),t.originalLine=s.line,t.originalColumn=s.column,null!=s.name&&(t.name=s.name))}var l=t.source;null==l||a.has(l)||a.add(l);var c=t.name;null==c||o.has(c)||o.add(c)}),this),this._sources=a,this._names=o,e.sources.forEach((function(t){var r=e.sourceContentFor(t);null!=r&&(null!=n&&(t=Ur.join(n,t)),null!=i&&(t=Ur.relative(i,t)),this.setSourceContent(t,r))}),this)},$r.prototype._validateMapping=function(e,t,n,r){if(t&&"number"!=typeof t.line&&"number"!=typeof t.column)throw new Error("original.line and original.column are not numbers -- you probably meant to omit the original mapping entirely and only map the generated position. If so, pass null for the original mapping instead of an object with empty or null values.");if((!(e&&"line"in e&&"column"in e&&e.line>0&&e.column>=0)||t||n||r)&&!(e&&"line"in e&&"column"in e&&t&&"line"in t&&"column"in t&&e.line>0&&e.column>=0&&t.line>0&&t.column>=0&&n))throw new Error("Invalid mapping: "+JSON.stringify({generated:e,source:n,original:t,name:r}))},$r.prototype._serializeMappings=function(){for(var e,t,n,r,i=0,a=1,o=0,s=0,l=0,c=0,u="",h=this._mappings.toArray(),p=0,d=h.length;p0){if(!Ur.compareByGeneratedPositionsInflated(t,h[p-1]))continue;e+=","}e+=Yr(t.generatedColumn-i),i=t.generatedColumn,null!=t.source&&(r=this._sources.indexOf(t.source),e+=Yr(r-c),c=r,e+=Yr(t.originalLine-1-s),s=t.originalLine-1,e+=Yr(t.originalColumn-o),o=t.originalColumn,null!=t.name&&(n=this._names.indexOf(t.name),e+=Yr(n-l),l=n)),u+=e}return u},$r.prototype._generateSourcesContent=function(e,t){return e.map((function(e){if(!this._sourcesContents)return null;null!=t&&(e=Ur.relative(t,e));var n=Ur.toSetString(e);return Object.prototype.hasOwnProperty.call(this._sourcesContents,n)?this._sourcesContents[n]:null}),this)},$r.prototype.toJSON=function(){var e={version:this._version,sources:this._sources.toArray(),names:this._names.toArray(),mappings:this._serializeMappings()};return null!=this._file&&(e.file=this._file),null!=this._sourceRoot&&(e.sourceRoot=this._sourceRoot),this._sourcesContents&&(e.sourcesContent=this._generateSourcesContent(e.sources,e.sourceRoot)),e},$r.prototype.toString=function(){return JSON.stringify(this.toJSON())};var Jr={SourceMapGenerator:$r}.SourceMapGenerator,ei={Atrule:!0,Selector:!0,Declaration:!0},ti=Object.prototype.hasOwnProperty;function ni(e,t){var n=e.children,r=null;"function"!=typeof t?n.forEach(this.node,this):n.forEach((function(e){null!==r&&t.call(this,r),this.node(e),r=e}),this)}var ri=function(e){function t(e){if(!ti.call(n,e.type))throw new Error("Unknown node type: "+e.type);n[e.type].call(this,e)}var n={};if(e.node)for(var r in e.node)n[r]=e.node[r].generate;return function(e,n){var r="",i={children:ni,node:t,chunk:function(e){r+=e},result:function(){return r}};return n&&("function"==typeof n.decorator&&(i=n.decorator(i)),n.sourceMap&&(i=function(e){var t=new Jr,n=1,r=0,i={line:1,column:0},a={line:0,column:0},o=!1,s={line:1,column:0},l={generated:s},c=e.node;e.node=function(e){if(e.loc&&e.loc.start&&ei.hasOwnProperty(e.type)){var u=e.loc.start.line,h=e.loc.start.column-1;a.line===u&&a.column===h||(a.line=u,a.column=h,i.line=n,i.column=r,o&&(o=!1,i.line===s.line&&i.column===s.column||t.addMapping(l)),o=!0,t.addMapping({source:e.loc.source,original:a,generated:i}))}c.call(this,e),o&&ei.hasOwnProperty(e.type)&&(s.line=n,s.column=r)};var u=e.chunk;e.chunk=function(e){for(var t=0;t|","angle-percentage":"|","angular-color-hint":"","angular-color-stop":"&&?","angular-color-stop-list":"[ [, ]?]# , ","animateable-feature":"scroll-position|contents|",attachment:"scroll|fixed|local","attr()":"attr( ? [, ]? )","attr-matcher":"['~'|'|'|'^'|'$'|'*']? '='","attr-modifier":"i|s","attribute-selector":"'[' ']'|'[' [|] ? ']'","auto-repeat":"repeat( [auto-fill|auto-fit] , [? ]+ ? )","auto-track-list":"[? [|]]* ? [? [|]]* ?","baseline-position":"[first|last]? baseline","basic-shape":"|||","bg-image":"none|","bg-layer":"|| [/ ]?||||||||","bg-position":"[[left|center|right|top|bottom|]|[left|center|right|] [top|center|bottom|]|[center|[left|right] ?]&&[center|[top|bottom] ?]]","bg-size":"[|auto]{1,2}|cover|contain","blur()":"blur( )","blend-mode":"normal|multiply|screen|overlay|darken|lighten|color-dodge|color-burn|hard-light|soft-light|difference|exclusion|hue|saturation|color|luminosity",box:"border-box|padding-box|content-box","brightness()":"brightness( )","calc()":"calc( )","calc-sum":" [['+'|'-'] ]*","calc-product":" ['*' |'/' ]*","calc-value":"|||( )","cf-final-image":"|","cf-mixing-image":"?&&","circle()":"circle( []? [at ]? )","clamp()":"clamp( #{3} )","class-selector":"'.' ","clip-source":"",color:"||||||currentcolor|","color-stop":"|","color-stop-angle":"{1,2}","color-stop-length":"{1,2}","color-stop-list":"[ [, ]?]# , ",combinator:"'>'|'+'|'~'|['||']","common-lig-values":"[common-ligatures|no-common-ligatures]",compat:"searchfield|textarea|push-button|button-bevel|slider-horizontal|checkbox|radio|square-button|menulist|menulist-button|listbox|meter|progress-bar","composite-style":"clear|copy|source-over|source-in|source-out|source-atop|destination-over|destination-in|destination-out|destination-atop|xor","compositing-operator":"add|subtract|intersect|exclude","compound-selector":"[? * [ *]*]!","compound-selector-list":"#","complex-selector":" [? ]*","complex-selector-list":"#","conic-gradient()":"conic-gradient( [from ]? [at ]? , )","contextual-alt-values":"[contextual|no-contextual]","content-distribution":"space-between|space-around|space-evenly|stretch","content-list":"[|contents||||counter( , <'list-style-type'>? )]+","content-position":"center|start|end|flex-start|flex-end","content-replacement":"","contrast()":"contrast( [] )","counter()":"counter( , [|none]? )","counter-style":"|symbols( )","counter-style-name":"","counters()":"counters( , , [|none]? )","cross-fade()":"cross-fade( , ? )","cubic-bezier-timing-function":"ease|ease-in|ease-out|ease-in-out|cubic-bezier( , , , )","deprecated-system-color":"ActiveBorder|ActiveCaption|AppWorkspace|Background|ButtonFace|ButtonHighlight|ButtonShadow|ButtonText|CaptionText|GrayText|Highlight|HighlightText|InactiveBorder|InactiveCaption|InactiveCaptionText|InfoBackground|InfoText|Menu|MenuText|Scrollbar|ThreeDDarkShadow|ThreeDFace|ThreeDHighlight|ThreeDLightShadow|ThreeDShadow|Window|WindowFrame|WindowText","discretionary-lig-values":"[discretionary-ligatures|no-discretionary-ligatures]","display-box":"contents|none","display-inside":"flow|flow-root|table|flex|grid|ruby","display-internal":"table-row-group|table-header-group|table-footer-group|table-row|table-cell|table-column-group|table-column|table-caption|ruby-base|ruby-text|ruby-base-container|ruby-text-container","display-legacy":"inline-block|inline-list-item|inline-table|inline-flex|inline-grid","display-listitem":"?&&[flow|flow-root]?&&list-item","display-outside":"block|inline|run-in","drop-shadow()":"drop-shadow( {2,3} ? )","east-asian-variant-values":"[jis78|jis83|jis90|jis04|simplified|traditional]","east-asian-width-values":"[full-width|proportional-width]","element()":"element( )","ellipse()":"ellipse( [{2}]? [at ]? )","ending-shape":"circle|ellipse","env()":"env( , ? )","explicit-track-list":"[? ]+ ?","family-name":"|+","feature-tag-value":" [|on|off]?","feature-type":"@stylistic|@historical-forms|@styleset|@character-variant|@swash|@ornaments|@annotation","feature-value-block":" '{' '}'","feature-value-block-list":"+","feature-value-declaration":" : + ;","feature-value-declaration-list":"","feature-value-name":"","fill-rule":"nonzero|evenodd","filter-function":"|||||||||","filter-function-list":"[|]+","final-bg-layer":"<'background-color'>|||| [/ ]?||||||||","fit-content()":"fit-content( [|] )","fixed-breadth":"","fixed-repeat":"repeat( [] , [? ]+ ? )","fixed-size":"|minmax( , )|minmax( , )","font-stretch-absolute":"normal|ultra-condensed|extra-condensed|condensed|semi-condensed|semi-expanded|expanded|extra-expanded|ultra-expanded|","font-variant-css21":"[normal|small-caps]","font-weight-absolute":"normal|bold|","frequency-percentage":"|","general-enclosed":"[ )]|( )","generic-family":"serif|sans-serif|cursive|fantasy|monospace|-apple-system","generic-name":"serif|sans-serif|cursive|fantasy|monospace","geometry-box":"|fill-box|stroke-box|view-box",gradient:"|||||<-legacy-gradient>","grayscale()":"grayscale( )","grid-line":"auto||[&&?]|[span&&[||]]","historical-lig-values":"[historical-ligatures|no-historical-ligatures]","hsl()":"hsl( [/ ]? )|hsl( , , , ? )","hsla()":"hsla( [/ ]? )|hsla( , , , ? )",hue:"|","hue-rotate()":"hue-rotate( )",image:"|||||