1
0
Fork 0
mirror of https://github.com/voltbonn/diversity.volt.link.git synced 2024-06-30 17:59:40 +00:00
diversity.volt.link/frontend/index.html

1557 lines
71 KiB
HTML
Raw Normal View History

2022-11-19 22:36:12 +00:00
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, user-scalable=no" />
2022-11-19 23:05:24 +00:00
<meta property="og:title" data-translation-key="website_title" data-translation-dest="attr-content" content="Volt — Internal Diversity Survey">
<meta property="og:description" data-translation-key="website_description" data-translation-dest="attr-content" content="Im Grundsatzprogramm von Volt Deutschland fordern wir „Diversität als Selbstverständlichkeit“ (S.74)! Wir können aber nicht davon ausgehen, dass Volt automatisch diese Diversität erreicht. Tatsächlich wissen wir längst über die ungleiche Gender-Verteilung in Volt bescheit. (Gemessen an den Kategorien Frau und Mann des binären Gender-Systems.)">
2022-11-19 22:36:12 +00:00
<meta property="og:url" content="https://volt-diversity-survey.web.app/">
<meta property="og:site_name" content="Volt Europa">
<meta property="og:type" content="website">
<meta property="og:image" content="http://volt-diversity-survey.web.app/thumbnail.png">
<meta property="og:image:url" content="http://volt-diversity-survey.web.app/thumbnail.png">
<meta property="og:image:secure_url" content="https://volt-diversity-survey.web.app/thumbnail.png">
<meta property="og:image:type" content="image/png">
<meta property="og:image:width" content="1334">
<meta property="og:image:height" content="750">
2022-11-19 23:05:24 +00:00
<meta name="twitter:title" data-translation-key="website_title" data-translation-dest="attr-content" content="Volt — Internal Diversity Survey">
<meta name="twitter:description" data-translation-key="website_description" data-translation-dest="attr-content" content="Im Grundsatzprogramm von Volt Deutschland fordern wir „Diversität als Selbstverständlichkeit“ (S.74)! Wir können aber nicht davon ausgehen, dass Volt automatisch diese Diversität erreicht. Tatsächlich wissen wir längst über die ungleiche Gender-Verteilung in Volt bescheit. (Gemessen an den Kategorien Frau und Mann des binären Gender-Systems.)">
2022-11-19 22:36:12 +00:00
<meta name="twitter:site" content="@VoltEuropa">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:image" content="https://volt-diversity-survey.web.app/thumbnail.png">
2022-11-19 23:05:24 +00:00
<meta name="twitter:image:alt" content="Volt — Internal Diversity Survey. Im Grundsatzprogramm von Volt Deutschland fordern wir „Diversität als Selbstverständlichkeit“!">
2022-11-19 22:36:12 +00:00
<title id="websiteTitle" data-translation-key="website_title">Volt — Internal Diversity Survey</title>
<script type="text/javascript" src="./jsSHA/src/sha3.js" defer></script>
<script type="text/javascript" src="./_DATA_.js" defer></script>
2022-11-19 23:05:24 +00:00
<link href="data:image/x-icon;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAABmJLR0T///////8JWPfcAAAACXBIWXMAAABIAAAASABGyWs+AAAAF0lEQVRIx2NgGAWjYBSMglEwCkbBSAcACBAAAeaR9cIAAAAASUVORK5CYII=" rel="icon" type="image/x-icon" />
2022-11-19 22:36:12 +00:00
<style>
* {
box-sizing: border-box;
margin: 0;
padding: 0;
}
html,
body {
2022-11-19 22:43:19 +00:00
--volt-purple: #502379;
--volt-yellow: #FDC220;
2022-11-19 22:57:50 +00:00
--volt-red: #E63E12;
--volt-blur: #82D0F4;
2022-11-19 22:43:19 +00:00
--volt-green: #1BBE6F;
2022-11-19 22:36:12 +00:00
--page-width: 800px;
--block-width: 400px;
--max-page-size: calc(100% - 64px);
--light-color: white;
2022-11-19 22:43:19 +00:00
--dark-color: var(--volt-purple);
2022-11-19 22:36:12 +00:00
--on-light-color: #141414;
--on-dark-color: white;
max-width: 100%;
background: var(--light-color);
color: var(--on-light-color);
font-family: "Ubuntu", "Helvetica", "Arial", sans-serif;
font-weight: 400;
font-style: normal;
font-size: 18px;
line-height: 1.3;
overflow-x: hidden;
/*scroll-behavior: smooth;*/
/*filter: grayscale(1) contrast(1.1);*/
}
a,
a:hover,
a:visited,
a:focus {
color: inherit;
text-decoration: underline;
}
a:hover {
opacity: 0.8;
}
.block_wrapper {
display: flex;
margin: 0;
}
.block_left,
.block_right {
width: 50%;
display: inline-block;
vertical-align: top;
}
.block_left {
margin: 0 32px 0 0;
}
.block_right {
margin: 0 0 0 32px;
}
@media (max-width: 700px) {
.block_wrapper,
.block_left,
.block_right {
display: block;
width: 100%;
margin: 0;
}
}
.page {
position: absolute;
z-index: 1;
top: 0;
right: 0;
/*bottom: 0;*/
left: 0;
min-height: 100%;
/*overflow: auto;*/
overflow-x: hidden;
/*-webkit-overflow-scrolling: touch;*/
background: var(--light-color);
color: var(--on-light-color);
display: none;
}
.page.open {
display: block;
}
.page.violet_bg {
color: white;
2022-11-19 22:43:19 +00:00
background: var(--volt-purple);
2022-11-19 22:36:12 +00:00
}
.page.orange_bg {
color: black;
2022-11-19 22:57:50 +00:00
background: var(--volt-red);
2022-11-19 22:36:12 +00:00
}
.page .pageContent {
width: var(--page-width);
max-width: calc(100% - 64px);
margin: 0 auto;
padding: 0 0 64px 0;
}
section {
margin: 128px 0 32px 0;
}
section .intro {
width: 500px;
max-width: 100%;
margin: 64px 0 0 0;
}
.question {
display: block;
width: 500px;
max-width: 100%;
/*padding: 32px;*/
margin: 64px 0 0 0;
/*box-shadow: 0 16px 32px rgba(0,0,0,0.2);*/
}
@media (max-width: 800px) {
.question {
margin: 32px 0 0 0;
}
}
.voltLogo {
z-index: 1;
position: relative;
display: inline-block;
2022-11-19 22:43:19 +00:00
color: var(--volt-purple) !important;
2022-11-19 22:36:12 +00:00
margin-top: 32px;
margin-bottom: 86px;
transition: top 0.2s ease, margin-bottom 0.2s ease;
}
.website_heading {
margin-top: 32px;
}
.website_description {
margin-top: 16px;
transition: margin-top 0.2s ease;
}
@media (max-width: 800px) {
.website_heading {
margin-top: 0;
}
}
h1 {
margin: 0;
font-size: 4rem;
line-height: 1;
color: var(--on-light-color);
transition: font-size 0.2s ease;
}
.page.violet_bg h1,
.page.orange_bg h1 {
color: var(--on-dark-color);
}
@media (max-width: 800px) {
h1 {
font-size: 3rem;
}
}
h2 {
display: inline-block;
position: relative;
color: white;
font-size: 2rem;
line-height: 1.6;
padding: 16px 32px;
margin: 0 -32px -16px -32px;
-webkit-box-decoration-break: clone;
box-decoration-break: clone;
}
section h2 {
2022-11-19 22:43:19 +00:00
background: var(--volt-purple);
2022-11-19 22:36:12 +00:00
}
section h2:after {
z-index: -1;
content: '';
position: absolute;
top: 0;
right: -1000px;
bottom: 0;
width: 1000px;
box-shadow:
2022-11-19 22:43:19 +00:00
calc(var(--block-width) * -9) 0 0 var(--volt-purple),
calc(var(--block-width) * -8) 0 0 var(--volt-purple),
calc(var(--block-width) * -7) 0 0 var(--volt-purple),
calc(var(--block-width) * -6) 0 0 var(--volt-purple),
calc(var(--block-width) * -5) 0 0 var(--volt-purple),
calc(var(--block-width) * -4) 0 0 var(--volt-purple),
calc(var(--block-width) * -3) 0 0 var(--volt-purple),
calc(var(--block-width) * -2) 0 0 var(--volt-purple),
calc(var(--block-width) * -1) 0 0 var(--volt-purple);
2022-11-19 22:36:12 +00:00
/*box-shadow:
2022-11-19 22:43:19 +00:00
calc(var(--block-width) * -9) 0 0 var(--volt-purple),
calc(var(--block-width) * -8) 0 0 var(--volt-purple),
calc(var(--block-width) * -7) 0 0 var(--volt-purple),
calc(var(--block-width) * -6) 0 0 var(--volt-purple),
calc(var(--block-width) * -5) 0 0 var(--volt-purple),
calc(var(--block-width) * -4) 0 0 var(--volt-purple),
calc(var(--block-width) * -3) 0 0 var(--volt-purple),
calc(var(--block-width) * -2) 0 0 var(--volt-purple),
calc(var(--block-width) * -1) 0 0 var(--volt-purple),
calc(var(--block-width) * 1) 0 0 var(--volt-purple),
calc(var(--block-width) * 2) 0 0 var(--volt-purple),
calc(var(--block-width) * 3) 0 0 var(--volt-purple),
calc(var(--block-width) * 4) 0 0 var(--volt-purple),
calc(var(--block-width) * 5) 0 0 var(--volt-purple),
calc(var(--block-width) * 6) 0 0 var(--volt-purple),
calc(var(--block-width) * 7) 0 0 var(--volt-purple),
calc(var(--block-width) * 8) 0 0 var(--volt-purple),
calc(var(--block-width) * 9) 0 0 var(--volt-purple);*/
2022-11-19 22:36:12 +00:00
}
h3 {
font-size: 1rem;
cursor: text;
margin: 0 0 16px 0;
}
p {
cursor: text;
margin: 0 0 16px 0;
}
.why_text {
opacity: 0.8;
margin: 0 0 5px 0;
}
.why_text.no_info_text {
margin: 0 0 16px 0;
}
.markedText {
position: relative;
display: inline;
padding: 0.1em 0.3em 0.1em 0.3em;
-webkit-box-decoration-break: clone;
box-decoration-break: clone;
background-color: var(--light-color);
color: var(--on-light-color);
}
.markedText.light_on_dark {
background-color: var(--dark-color);
color: var(--on-dark-color);
}
.markedText.dark_on_light {
background-color: var(--light-color);
color: var(--on-light-color);
}
.markedText.black_on_orange {
2022-11-19 22:57:50 +00:00
background-color: var(--volt-red);
2022-11-19 22:36:12 +00:00
color: var(--on-light-color);
}
.markedText.white_on_black {
background-color: var(--on-light-color);
color: var(--on-dark-color);
}
hr {
background: black;
2022-11-19 22:43:19 +00:00
/*background: var(--volt-purple);*/
2022-11-19 22:36:12 +00:00
margin: 16px 0;
border: 0;
height: 1px;
}
input[type="text"],
input[type="number"],
textarea,
select {
-webkit-appearance: none;
border: none;
2022-11-19 22:43:19 +00:00
border: 3px solid var(--volt-purple);
2022-11-19 22:36:12 +00:00
color: black;
min-height: 64px;
padding: 0px 16px;
border-radius: 0px 0px 0 0;
border-width: 3px;
/*background: rgba(88,44,131,0.1);*/
min-width: 100%;
width: 100%;
max-width: 100%;
display: block;
cursor: text;
font-size: 1rem;
font-family: "Ubuntu", "Helvetica", "Arial", sans-serif;
line-height: normal;
outline: none;
}
input::placeholder,
textarea::placeholder,
#metadata select[selectedValue=""] {
color: rgba(0, 0, 0, 0.54);
opacity: 1;
}
select option {
color: black;
}
textarea {
padding: 16px;
border-radius: 0;
border-width: 3px;
height: 128px;
}
select.not_showingAllOptions {
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
cursor: pointer;
height: 64px;
}
select.not_showingAllOptions option {
padding: 22px 16px;
}
select.showingAllOptions {
cursor: default;
padding: 0;
min-height: auto;
}
select.showingAllOptions option {
padding: 22px 16px;
outline: none;
cursor: pointer;
overflow: auto;
-webkit-overflow-scrolling: touch;
}
input.inline,
select.inline {
min-width: 0;
width: 100%;
max-width: 100%;
overflow: hidden;
min-height: 24px;
padding: 0;
border-radius: 0;
border-width: 0 0 3px 0;
margin: 0 0 1px 0;
background: transparent;
}
/*.selector:not(*:root), select.inline{ */
/* .selector:not(*:root) is a hack to only target chrome*/
.chrome select.inline,
.webkit select.inline,
input.inline {
padding: 0 0 0 4px;
}
label.languageChooserWrapper {
margin-top: 64px;
display: flex;
align-items: center;
background: white;
color: black;
min-height: 64px;
padding: 0;
/*font-size: 1rem;*/
/*font-family: "Ubuntu", "Helvetica", "Arial", sans-serif;*/
outline: none;
cursor: pointer;
}
label.languageChooserWrapper .labelText {
margin: 0 -22px 0 22px;
}
label.languageChooserWrapper select {
/*padding: 0 22px 0 8px;*/
background: rgb(255, 0, 0, 0.5);
padding: 0 0 0 121px;
margin-left: -84px;
background: transparent;
}
.radio_or_checkbox_label {
line-height: 32px;
padding: 2px 0;
cursor: pointer;
display: flex;
flex-direction: row;
}
.radio_or_checkbox_label input[type="checkbox"],
.radio_or_checkbox_label input[type="radio"] {
position: relative;
height: 32px;
width: 32px;
border-radius: 0;
vertical-align: middle;
margin: 0 16px 0 0;
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
cursor: pointer;
flex-shrink: 0;
background: var(--light-color);
2022-11-19 22:43:19 +00:00
border: 3px solid var(--volt-purple);
2022-11-19 22:36:12 +00:00
transition: background 0.2s ease, border 0.2s ease;
}
.radio_or_checkbox_label input[type="radio"] {
border-radius: 100%;
}
.radio_or_checkbox_label input[type="checkbox"]:checked,
.radio_or_checkbox_label input[type="radio"]:checked {
2022-11-19 22:43:19 +00:00
background: var(--volt-green);
border: 3px solid var(--volt-green);
2022-11-19 22:36:12 +00:00
}
.radio_or_checkbox_label input[type="checkbox"]:before,
.radio_or_checkbox_label input[type="radio"]:before {
content: '✓';
position: absolute;
top: -3px;
right: 0;
bottom: 0;
left: 0;
font-size: 32px;
line-height: 32px;
text-align: center;
color: white;
opacity: 0;
transform: scale(0.6);
transition: transform 0.2s ease, opacity 0.2s ease;
}
/*.radio_or_checkbox_label input[type="radio"]:before{
content: '•';
top: -6px;
}*/
.radio_or_checkbox_label input[type="checkbox"]:checked:before,
.radio_or_checkbox_label input[type="radio"]:checked:before {
opacity: 1;
transform: scale(1);
}
.radio_or_checkbox_label span {
display: inline-block;
vertical-align: middle;
}
button {
position: relative;
font-size: 2rem;
line-height: 1.6;
font-family: "Ubuntu", "Helvetica", "Arial", sans-serif;
font-weight: bold;
border: none;
border-radius: 0;
padding: 16px 32px;
margin: 16px auto;
cursor: pointer;
width: 200vw;
text-align: left;
background: var(--light-color);
color: var(--on-light-color);
opacity: 1;
transition: opacity 0.2s ease;
}
.page.violet_bg button {
background: var(--light-color);
2022-11-19 22:43:19 +00:00
color: var(--volt-purple);
2022-11-19 22:36:12 +00:00
}
.page.orange_bg button {
background: var(--light-color);
color: var(--on-light-color);
}
button.green {
2022-11-19 22:43:19 +00:00
background: var(--volt-green);
2022-11-19 22:36:12 +00:00
color: white;
}
@media (max-width: 450px) {
button {
padding: 16px 32px;
font-size: 1.2rem;
/*width: 100%;*/
}
}
button:hover {
opacity: 0.7;
}
button .arrow:before {
content: '➔';
font-size: 5rem;
line-height: 1;
overflow: hidden;
display: inline-block;
margin: -40px 0 -32px 16px;
}
@media (max-width: 800px) {
button .arrow:before {
font-size: 3rem;
margin: -40px 0 -20px 16px;
}
}
.message {
font-size: 1.2rem;
padding: 0.1em 0.3em 0.1em 0.3em;
box-decoration-break: clone;
display: inline-block;
background: black;
color: white;
}
.message.success {
margin: 128px 0 0 0;
2022-11-19 22:43:19 +00:00
background: var(--volt-green);
2022-11-19 22:36:12 +00:00
color: white;
}
.message.error {
background: transparent;
color: black;
2022-11-19 22:57:50 +00:00
box-shadow: 0 0 0 8px var(--volt-red);
2022-11-19 22:36:12 +00:00
}
.message.success,
.message.error,
.message.saving {
display: none;
}
body.error .message.success {
display: none;
}
body.error .message.error {
display: inline-block;
}
body.saving .message.saving {
display: inline-block;
}
body.saving #metadata,
body.saving #inputs,
body.saving .submitWrapper {
opacity: 0.5;
/*pointer-events: none;*/
}
body.success .message.success {
display: inline-block;
}
body.success #inputs,
body.success .submitWrapper {
display: none;
}
.submitWrapper {
padding: 64px 0 0 0;
}
/*.scrollIndicator{
z-index: 9999999;
position: fixed;
bottom: 32px;
left: 50%;
width: 32px;
height: 32px;
font-size: 3rem;
font-weight: 900;
color: white;
text-align: center;
line-height: 32px;
2022-11-19 22:43:19 +00:00
filter: drop-shadow(0 0 8px var(--volt-purple));
2022-11-19 22:36:12 +00:00
transform: rotateZ(90deg) translate(0%, -50%);
animation: moveScrollIndicator 1s ease infinite alternate;
}
@keyframes moveScrollIndicator{
0% {
transform: rotateZ(90deg) translate(0%, -50%);
}
100% {
transform: rotateZ(90deg) translate(50%, -50%);
}
}*/
</style>
<style>
/* latin-ext */
/*@font-face {
font-family: 'Ubuntu';
font-style: italic;
font-weight: 400;
font-display: swap;
src: local('Ubuntu Italic'), local('Ubuntu-Italic'), url(./Ubuntu/4iCu6KVjbNBYlgoKej76l0mwFg.woff2) format('woff2');
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
}*/
/* latin */
/*@font-face {
font-family: 'Ubuntu';
font-style: italic;
font-weight: 400;
font-display: swap;
src: local('Ubuntu Italic'), local('Ubuntu-Italic'), url(./Ubuntu/4iCu6KVjbNBYlgoKej70l0k.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}*/
/* latin-ext */
/*@font-face {
font-family: 'Ubuntu';
font-style: italic;
font-weight: 700;
font-display: swap;
src: local('Ubuntu Bold Italic'), local('Ubuntu-BoldItalic'), url(./Ubuntu/4iCp6KVjbNBYlgoKejZPslyBN4Ffgg.woff2) format('woff2');
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
}*/
/* latin */
/*@font-face {
font-family: 'Ubuntu';
font-style: italic;
font-weight: 700;
font-display: swap;
src: local('Ubuntu Bold Italic'), local('Ubuntu-BoldItalic'), url(./Ubuntu/4iCp6KVjbNBYlgoKejZPslyPN4E.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}*/
/* latin-ext */
@font-face {
font-family: 'Ubuntu';
font-style: normal;
font-weight: 400;
font-display: swap;
src: local('Ubuntu Regular'), local('Ubuntu-Regular'), url(./Ubuntu/4iCs6KVjbNBYlgoKcQ72j00.woff2) format('woff2');
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Ubuntu';
font-style: normal;
font-weight: 400;
font-display: swap;
src: local('Ubuntu Regular'), local('Ubuntu-Regular'), url(./Ubuntu/4iCs6KVjbNBYlgoKfw72.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
font-family: 'Ubuntu';
font-style: normal;
font-weight: 700;
font-display: swap;
src: local('Ubuntu Bold'), local('Ubuntu-Bold'), url(./Ubuntu/4iCv6KVjbNBYlgoCxCvjvmyNL4U.woff2) format('woff2');
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Ubuntu';
font-style: normal;
font-weight: 700;
font-display: swap;
src: local('Ubuntu Bold'), local('Ubuntu-Bold'), url(./Ubuntu/4iCv6KVjbNBYlgoCxCvjsGyN.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
</style>
<style>
body[show=""] .page[page="intro"],
body[show="intro"] .page[page="intro"],
body[show="privacy"] .page[page="privacy"],
body[show="questions"] .page[page="questions"] {
display: block;
}
</style>
</head>
<body show="intro">
<div class="page violet_bg" page="intro">
<div class="pageContent">
<h1 class="voltLogo">
<svg style="width:120px;" version="1.1" viewBox="0 0 10433 4346.4" xml:space="preserve"
xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<metadata>
<rdf:RDF>
<cc:Work rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<g transform="matrix(1.3333 0 0 -1.3333 0 4346.4)">
<g transform="scale(.1)">
<g transform="scale(4.8003)">
<path
d="m14379 2218.8v1776.9h1315.8v1191h-1315.8v1604.1l-1431.2-226.68v-4364.6c0-326.56 30.3-624.34 91.2-893.28 60.8-268.94 168.1-497.97 321.8-686.77 153.7-188.95 358.6-336.16 614.7-441.82 256.1-105.66 579.5-158.49 970.2-158.49 307.3 0 566.7 25.665 778 76.828 211.3 51.184 403.4 111.97 576.3 182.51l-201.7 1114.2c-134.5-51.33-283.4-91.24-446.7-120.07-163.3-28.81-321.7-43.21-475.4-43.21-320.3 0-533.1 89.58-638.7 268.94-105.7 179.2-158.5 419.31-158.5 720.38"
2022-11-19 22:43:19 +00:00
fill="white" />
2022-11-19 22:36:12 +00:00
</g>
<g transform="scale(1.9999)">
<path
d="m9820.1 322.77c633.3 1336.1 1257.6 2726.6 1872.1 4171.6 614.6 1444.9 1198.2 2874.3 1751.5 4288.6 553.4 1414 1062.7 2765.6 1528.5 4054.9 465.8 1288.9 877.5 2443.1 1235.6 3462.2h-3828.9c-300.5-930.1-633.7-1928.3-999.7-2994.6-366-1066.7-738.5-2129.8-1118.2-3188.9-379.69-1059.4-747.87-2074.2-1103.7-3044.3-355.92-970.46-684.09-1806.3-984.21-2507.3-318.42 705.69-651.64 1543.6-999.66 2514.1-347.97 970.46-711.79 1985.3-1091.5 3044.8-379.67 1059-752.89 2122.1-1118.9 3188.8-366 1066.3-698.5 2062.3-997.5 2987.4h-3965.5c339.34-1014 742.81-2166.8 1209.7-3458.6 466.87-1291.8 978.4-2644.2 1535.3-4056.7 556.57-1412.8 1144.1-2840.8 1763-4284 618.54-1443.4 1245.7-2836.1 1881.9-4178h3430.2"
2022-11-19 22:43:19 +00:00
fill="white" />
2022-11-19 22:36:12 +00:00
</g>
<g transform="scale(3.674)">
2022-11-19 22:43:19 +00:00
<path d="m16300 8872.8-1869.9-296.16v-8400.9h1869.9v8697" fill="white" />
2022-11-19 22:36:12 +00:00
</g>
<g transform="scale(3.1347)">
<path
d="m14312 3971.5c0-1085.8-880.3-1966.1-1966.1-1966.1-1085.9 0-1966.1 880.25-1966.1 1966.1 0 1085.8 880.2 1966.1 1966.1 1966.1 1085.8 0 1966.1-880.24 1966.1-1966.1m1988.5 0c0 2193.4-1778.1 3971.5-3971.5 3971.5-904.2 0-1737.8-302.23-2405.4-811.12-185.82-496.16-380.96-1005.6-585.58-1528.5-295.34-754.93-604.3-1516.7-926.94-2285.2 311.61-1882.5 1947.1-3318.1 3917.9-3318.1 2193.4 0 3971.5 1778.1 3971.5 3971.5"
2022-11-19 22:43:19 +00:00
fill="white" />
2022-11-19 22:36:12 +00:00
</g>
</g>
</g>
</svg>
</h1>
<h1 class="website_heading" data-translation-key="website_heading"></h1>
<div class="block_wrapper">
<div class="block_left">
<p class="website_description" data-translation-key="website_description"></p>
<label style="display:none;" class="languageChooserWrapper" for="languageChooserSelect">
<div class="labelText">Language:</div>
<select class="not_showingAllOptions" style="border-width:0;" id="languageChooserSelect">
<option value="de" selected>German (Deutsch)</option>
<option value="en">English</option>
</select>
</label>
</div>
</div>
<button to-page="privacy"><span data-translation-key="button_to_privacy"></span> <span
class="arrow"></span></button>
</div>
</div>
<div class="page orange_bg" page="privacy">
<div class="pageContent" style="padding-top:64px;">
<h1 class="website_heading" data-translation-key="heading_privacy"></h1>
<div class="block_wrapper" style="margin-top:32px;">
<div class="block_left" style="font-weight:bold;">
<p data-translation-key="">
<h2 data-translation-key="heading_optional"></h2><br>
<span data-translation-key="optional_info"></span>
</p>
<p>
<h2 data-translation-key="heading_anonymous"></h2><br>
<span data-translation-key="anonymous_info"></span>
</p>
</div>
<div class="block_right">
<p style="padding-top:48px;opacity:0.8;font-size:16px;line-height:1.2;display: block;"
data-translation-key="privacy_details"></p>
</div>
</div>
<button to-page="questions" style="margin-top:64px;"><span data-translation-key="button_to_questions"></span>
<span class="arrow"></span></button>
</div>
</div>
<div class="page white_bg" page="questions">
<div class="pageContent">
<div id="inputs"></div>
<div style="margin-bottom: 128px;">
<div class="submitWrapper">
<label class="radio_or_checkbox_label" style="display:flex;align-items: center;width:450px;max-width:100%;">
<input id="metadataIsFirstCompletion" type="checkbox" />
<strong style="text-align:left; padding-bottom:1px; line-height:1.1;"
data-translation-key="metadata_is_this_the_first_completion"></strong>
</label>
<button class="green" id="submitButton"><span data-translation-key="button_send_to_volt"></span><span
class="arrow"></span></button>
</div>
<p class="message saving" data-translation-key="saving"></p>
<p class="message success" data-translation-key="success"></p>
<p class="message error" data-translation-key="error"></p>
</div>
</div>
</div>
<script>
const CloudFunctionsPrefix = 'https://us-central1-volt-4eca0.cloudfunctions.net/save_formdata'
function resetBodyClasses() {
body.classList.remove('error')
body.classList.remove('success')
body.classList.remove('saving')
}
function getByLanguage(objectWithValuesByLanguage) {
let value = '[NO TRANSLATION FOUND!]'
if (objectWithValuesByLanguage) {
if (objectWithValuesByLanguage[_language_]) {
value = objectWithValuesByLanguage[_language_]
} else if (objectWithValuesByLanguage['en']) {
value = objectWithValuesByLanguage['en']
} else if (objectWithValuesByLanguage['de']) {
value = objectWithValuesByLanguage['de']
}
}
// if (value.indexOf(' ') > -1) {
// value = value.substr(0,value.lastIndexOf(' '))+'&nbsp;'+value.substr(value.lastIndexOf(' ')+1)
// }
return value
}
function generateForm(data) {
// websiteTitle.innerHTML = 'Volt — '+getByLanguage(_DATA_.translation_texts.website_title).replace(/\n+/g, ' ')
for (const section of _DATA_.sections) {
var sectionEle = document.createElement('section')
if (!!section.heading) {
var sectionHeading = document.createElement('h2')
sectionHeading.innerHTML = getByLanguage(section.heading)
sectionEle.appendChild(sectionHeading)
}
if (!!section.intro) {
var sectionIntro = document.createElement('p')
sectionIntro.classList.add('intro')
sectionIntro.innerHTML = getByLanguage(section.intro)
sectionEle.appendChild(sectionIntro)
}
// display questions
for (const questionKey of Object.keys(section.questions)) {
const question = section.questions[questionKey]
var questionEle = document.createElement('div')
questionEle.classList.add('question')
if (!!question.question) {
var questionHeading = document.createElement('h3')
questionHeading.innerHTML = getByLanguage(question.question)
questionEle.appendChild(questionHeading)
}
if (!!question.why) {
var question_why_text = document.createElement('p')
question_why_text.classList.add('why_text')
if (!question.info) {
question_why_text.classList.add('no_info_text')
}
question_why_text.innerHTML = getByLanguage(question.why)
questionEle.appendChild(question_why_text)
}
if (!!question.info) {
var question_info_text = document.createElement('p')
// question_info_text.classList.add('info_text')
question_info_text.innerHTML = getByLanguage(question.info)
questionEle.appendChild(question_info_text)
}
if (question.type == 'number') {
let newInput = document.createElement('input')
newInput.addEventListener('click', resetBodyClasses)
newInput.setAttribute('name', questionKey)
newInput.setAttribute('type', 'number')
newInput.setAttribute('placeholder', '…')
newInput.addEventListener('click', resetBodyClasses)
// newInput.value = '123'
questionEle.appendChild(newInput)
} else if (question.type == 'checkbox') {
for (const key of Object.keys(question.options)) {
let labelEle = document.createElement('label')
labelEle.classList.add('radio_or_checkbox_label')
labelEle.addEventListener('click', resetBodyClasses)
let checkboxEle = document.createElement('input')
checkboxEle.setAttribute('type', 'checkbox')
checkboxEle.setAttribute('name', questionKey)
checkboxEle.setAttribute('value', key)
labelEle.appendChild(checkboxEle)
let spanEle = document.createElement('span')
spanEle.innerHTML = getByLanguage(question.options[key])
labelEle.appendChild(spanEle)
questionEle.appendChild(labelEle)
}
} else if (question.type == 'radio') {
for (const key of Object.keys(question.options)) {
let labelEle = document.createElement('label')
labelEle.classList.add('radio_or_checkbox_label')
labelEle.addEventListener('click', resetBodyClasses)
let checkboxEle = document.createElement('input')
checkboxEle.setAttribute('type', 'radio')
checkboxEle.setAttribute('name', questionKey)
checkboxEle.setAttribute('value', key)
labelEle.appendChild(checkboxEle)
let spanEle = document.createElement('span')
spanEle.innerHTML = getByLanguage(question.options[key])
labelEle.appendChild(spanEle)
questionEle.appendChild(labelEle)
}
} else if (question.type == 'chooser') {
let newInput = document.createElement('select')
newInput.addEventListener('click', resetBodyClasses)
if (questionKey == 'metadata_country') {
newInput.setAttribute('selectedValue', window.volt_country_party)
for (const country_data of _DATA_.countries) {
const disabled = country_data.disabled
const value = (country_data.value ? country_data.value : '')
let title = ''
if (country_data.title) {
title = country_data.title
} else if (country_data.en && country_data.local_name && country_data.en != country_data.local_name) {
title = country_data.en + ' (' + country_data.local_name + ')'
} else if (country_data.en) {
title = country_data.en
} else if (country_data.local_name) {
title = country_data.local_name
}
const optionEle = document.createElement('option')
optionEle.setAttribute('name', questionKey)
optionEle.setAttribute('value', value)
optionEle.innerHTML = title
if (window.volt_country_party == value) {
optionEle.selected = true
}
if (disabled == true) {
optionEle.disabled = true
}
newInput.appendChild(optionEle)
}
} else {
// question.options = {
// '': {de:'…'},
// ...question.options
// }
question.options = Object.assign({}, { '': { de: '…' } }, question.options)
newInput.setAttribute('selectedValue', '')
// let optionEle = document.createElement('option')
// optionEle.setAttribute('value', '')
// optionEle.innerHTML = '…'
// newInput.appendChild(optionEle)
// var c = 0
for (const key of Object.keys(question.options)) {
let optionEle = document.createElement('option')
optionEle.setAttribute('name', questionKey)
optionEle.setAttribute('value', key)
optionEle.innerHTML = getByLanguage(question.options[key])
// if (c == 1) {
// optionEle.selected = true
// }
newInput.appendChild(optionEle)
// c += 1
}
}
newInput.addEventListener('change', e => {
const optionEles = e.target.querySelectorAll('option')
for (let optionEle of optionEles) {
if (optionEle.selected) {
newInput.setAttribute('selectedValue', optionEle.value)
break
}
}
})
if (question.multiSelect) {
newInput.setAttribute('multiple', 'multiple')
question.showAllOptions = true
}
if (question.showAllOptions) {
newInput.classList.add('showingAllOptions')
newInput.setAttribute('size', Object.keys(question.options).length)
} else {
newInput.classList.add('not_showingAllOptions')
}
questionEle.appendChild(newInput)
} else if (question.type == 'one_line_text') {
let newInput = document.createElement('input')
newInput.addEventListener('click', resetBodyClasses)
newInput.setAttribute('name', questionKey)
newInput.setAttribute('type', 'text')
newInput.setAttribute('placeholder', '…')
// newInput.value = 'some text'
questionEle.appendChild(newInput)
if (questionKey == 'metadata_city') {
newInput.value = window.volt_city
}
} else {
let newInput = document.createElement('textarea')
newInput.addEventListener('click', resetBodyClasses)
newInput.setAttribute('name', questionKey)
// newInput.setAttribute('type', 'text')
newInput.setAttribute('placeholder', '…')
// newInput.innerHTML = 'some text'
questionEle.appendChild(newInput)
}
sectionEle.appendChild(questionEle)
}
inputs.appendChild(sectionEle)
}
}
function getMetadata(country, city) {
// const now = new Date()
let metadata = {
// year and quater is calculated on the server
// year: now.getFullYear(),
// quater: Math.floor((now.getMonth() + 3) / 3),
isFirstCompletion: !!metadataIsFirstCompletion.checked,
// country: metadataCountries.getAttribute('selectedValue'),
// city: metadataCity.value,
country: country,
city: city,
}
return metadata
}
function getTimelessButAnonymousTrackingCode(questionKey, answerKey) {
// tatc = Timeless but Anonymous Tracking Code
const shaObj = new jsSHA('SHA3-512', 'TEXT')
shaObj.update(window.pre_tatc + '' + questionKey) // +' '+answerKey
return shaObj.getHash('HEX')
}
function submitForm() {
if (navigator.onLine) {
var answers = []
const elements = [
...inputs.querySelectorAll('input[type="text"]'),
...inputs.querySelectorAll('textarea'),
...inputs.querySelectorAll('input[type="number"]'),
]
for (const ele of elements) {
const questionKey = ele.getAttribute('name')
const value = ele.value
if (value != '' && questionKey != '') {
answers.push({
questionKey: questionKey,
answerKey: null,
value: value,
// metadata: metadata,
// tatc: getTimelessButAnonymousTrackingCode(questionKey, null),
})
}
}
for (const ele of inputs.querySelectorAll('option')) {
const questionKey = ele.getAttribute('name')
const answerKey = ele.value
if (ele.selected && questionKey != '' && answerKey != '') {
answers.push({
questionKey: questionKey,
answerKey: answerKey,
value: true, // (ele.selected ? true : false),
// metadata: metadata,
// tatc: getTimelessButAnonymousTrackingCode(questionKey, null),
})
}
}
for (const ele of inputs.querySelectorAll('input[type="checkbox"]')) {
const questionKey = ele.getAttribute('name')
const answerKey = ele.value
if (ele.checked && questionKey != '' && answerKey != '') {
answers.push({
questionKey: questionKey,
answerKey: answerKey,
value: true, // (ele.checked ? true : false),
// metadata: metadata,
// tatc: getTimelessButAnonymousTrackingCode(questionKey, answerKey),
})
}
}
for (const ele of inputs.querySelectorAll('input[type="radio"]')) {
const questionKey = ele.getAttribute('name')
const answerKey = ele.value
if (ele.checked && questionKey != '' && answerKey != '') {
answers.push({
questionKey: questionKey,
answerKey: answerKey,
value: true, // (ele.checked ? true : false),
// metadata: metadata,
// tatc: getTimelessButAnonymousTrackingCode(questionKey, answerKey),
})
}
}
if (answers.length > 0) {
body.classList.add('saving')
// add the metadata
const metadata_country_value = answers.filter(a => a.questionKey == 'metadata_country').map(a => a.answerKey)[0] || ''
const metadata_city_value = answers.filter(a => a.questionKey == 'metadata_city').map(a => a.value)[0] || ''
const metadata = getMetadata(metadata_country_value, metadata_city_value)
answers = answers.filter(answer => answer.questionKey != 'metadata_country' && answer.questionKey != 'metadata_city')
// answers = answers.map(answer=> ({
// ...answer,
// metadata: metadata,
// tatc: getTimelessButAnonymousTrackingCode(answer.questionKey, answer.answerKey),
// }) )
answers = answers.map(answer => Object.assign({}, answer, {
metadata: metadata,
tatc: getTimelessButAnonymousTrackingCode(answer.questionKey, answer.answerKey),
}))
console.log('answers:', answers)
let startTS = new Date() * 1
console.info('START', 0)
async.each(answers, (answer, callback) => {
const xmlReq = new XMLHttpRequest()
xmlReq.addEventListener('load', event => {
const json_res = JSON.parse(event.target.responseText)
if (!!json_res && !json_res.error) {
callback()
} else {
callback('error')
}
})
xmlReq.open('GET', CloudFunctionsPrefix + '?data=' + encodeURIComponent(JSON.stringify({ answers: [answer] })))
xmlReq.send()
}, error => {
console.info('END', (new Date() * 1) - startTS)
if (!!error) {
body.classList.add('error')
body.classList.remove('saving')
} else {
body.classList.add('success')
body.classList.remove('saving')
clearForm()
}
})
}
}
}
function clearForm() {
for (const ele of inputs.querySelectorAll('input[type="text"]')) {
ele.value = ''
}
for (const ele of inputs.querySelectorAll('input[type="number"]')) {
ele.value = ''
}
for (const ele of inputs.querySelectorAll('input[type="checkbox"]')) {
ele.checked = false
}
for (const ele of inputs.querySelectorAll('option')) {
ele.selected = false
}
}
function getIdentifier() {
// a got a few things from https://github.com/Valve/fingerprintjs2/blob/master/fingerprint2.js
// var getDoNotTrack = function() {
// if (navigator.doNotTrack) {
// return navigator.doNotTrack
// } else if (navigator.msDoNotTrack) {
// return navigator.msDoNotTrack
// } else if (window.doNotTrack) {
// return window.doNotTrack
// } else {
// return false
// }
// }
var getTouchSupport = function () {
var maxTouchPoints = 0
var touchEvent;
if (typeof navigator.maxTouchPoints !== 'undefined') {
maxTouchPoints = navigator.maxTouchPoints
} else if (typeof navigator.msMaxTouchPoints !== 'undefined') {
maxTouchPoints = navigator.msMaxTouchPoints
}
try {
document.createEvent('TouchEvent')
touchEvent = true
} catch (_) {
touchEvent = false
}
var touchStart = 'ontouchstart' in window
return [maxTouchPoints, touchEvent, touchStart]
}
var timezone = function () {
if (window.Intl && window.Intl.DateTimeFormat) {
return new window.Intl.DateTimeFormat().resolvedOptions().timeZone
}
return false
}
var relativly_unique_information = {
browserPlatform: navigator.platform,
javaEnabled: navigator.javaEnabled(),
dataCookiesEnabled: navigator.cookieEnabled,
sizeScreenAvailWidth: screen.availWidth,
sizeScreenAvailHeight: screen.availHeight,
sizeScreenWidth: screen.width,
sizeScreenHeight: screen.height,
scrColorDepth: screen.colorDepth,
scrPixelDepth: screen.pixelDepth,
hardwareConcurrency: navigator.hardwareConcurrency,
// doNotTrack: getDoNotTrack(),
isTouchCapable: getTouchSupport().join('|'),
// isTouchCapable: 'ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch || navigator.maxTouchPoints > 0 || window.navigator.msMaxTouchPoints > 0,
timezoneOffset: new Date().getTimezoneOffset(),
timezone: timezone(),
browserLanguage: (navigator.language || navigator.userLanguage || navigator.browserLanguage || navigator.systemLanguage),
languages: [...(navigator.languages || [])].sort().join('|'),
}
return Object.values(relativly_unique_information).join('|')
}
function parseQuery(queryString) {
var query = {}
var pairs = (queryString[0] === '?' ? queryString.substr(1) : queryString).split('&')
for (var i = 0; i < pairs.length; i++) {
var pair = pairs[i].split('=')
if (pair[0] != '') {
query[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1] || '')
}
}
return query
}
function obj2searchQuery(obj) {
var query_parts = []
for (const key of Object.keys(obj)) {
query_parts.push(encodeURIComponent(key) + '=' + encodeURIComponent(obj[key]))
}
return '?' + query_parts.join('&')
}
function setMetadata() {
// const now = new Date()
// metaDataCurrentYear.innerHTML = now.getFullYear()
// metadataCurrentRangeInYear.innerHTML = getByLanguage(_DATA_.months[now.getMonth()+1]) // quater = Math.floor((now.getMonth() + 3) / 3)
const locationSearchObj = parseQuery(window.location.search)
window.volt_country_party = (!!locationSearchObj.country ? locationSearchObj.country.toUpperCase() : 'DEU')
window.volt_city = (!!locationSearchObj.city ? locationSearchObj.city : '')
window.pre_tatc = (!!locationSearchObj.tatc ? locationSearchObj.tatc : getIdentifier()) // tatc from get OR a relatively good unique idetifier
// tatc = Timeless but Anonymous Tracking Code
}
function updateLanguageTexts() {
const translationNodes = document.querySelectorAll('[data-translation-key]')
for (let translationNode of translationNodes) {
const translationKey = translationNode.getAttribute('data-translation-key')
if (_DATA_.translation_texts[translationKey]) {
let text = ''
if (_DATA_.translation_texts[translationKey].use_instead && _DATA_.translation_texts[_DATA_.translation_texts[translationKey].use_instead]) {
text = getByLanguage(_DATA_.translation_texts[_DATA_.translation_texts[translationKey].use_instead])
} else {
text = getByLanguage(_DATA_.translation_texts[translationKey])
}
if (_DATA_.translation_texts[translationKey].prefix) {
text = _DATA_.translation_texts[translationKey].prefix + text
}
let translationDestination = ''
if (translationNode.hasAttribute('data-translation-dest')) {
translationDestination = translationNode.getAttribute('data-translation-dest')
}
if (translationDestination == 'attr-content') {
const temp_node = document.createElement("div")
temp_node.innerHTML = text
translationNode.setAttribute('content', temp_node.textContent || temp_node.innerText || "")
delete temp_node
} else {
text = text.replace(/\t+/g, '')
text = text.replace(/(^\n+|\n+$)/g, '')
if (!_DATA_.translation_texts[translationKey].is_plain) {
text = text.replace(/\n/g, '<br>')
}
translationNode.innerHTML = text
}
}
}
}
const body = document.getElementsByTagName('body')[0]
const websiteTitle = document.getElementById('websiteTitle')
const languageChooserSelect = document.getElementById('languageChooserSelect')
const metadataIsFirstCompletion = document.getElementById('metadataIsFirstCompletion')
const inputs = document.getElementById('inputs')
const submitButton = document.getElementById('submitButton')
const buttons_to_page = document.querySelectorAll('button[to-page]')
for (const button of buttons_to_page) {
button.addEventListener('click', () => {
const toPage = button.getAttribute('to-page')
if (!['', 'intro', 'privacy', 'questions'].includes(toPage)) {
toPage = ''
}
body.setAttribute('show', toPage)
window.scrollTo(0, 0)
history.pushState(null, websiteTitle.innerText, '#' + toPage)
})
}
languageChooserSelect.addEventListener('change', e => {
const optionEles = e.target.querySelectorAll('option')
for (let optionEle of optionEles) {
if (optionEle.selected) {
window._language_ = optionEle.value
updateLanguageTexts()
var locationSearchObj = parseQuery(window.location.search)
locationSearchObj.lang = optionEle.value
history.pushState(null, websiteTitle.innerText, window.location.protocol + '//' + window.location.host + window.location.pathname + obj2searchQuery(locationSearchObj) + window.location.hash)
break
}
}
})
function checkUrl() {
// check hash
let hash = document.location.hash
if (hash.charAt(0) === '#') {
hash = hash.slice(1)
}
body.setAttribute('show', hash)
// check search
const locationSearchObj = parseQuery(window.location.search)
// set language
window._language_ = locationSearchObj.lang || 'de'
updateLanguageTexts()
}
window.addEventListener('popstate', checkUrl)
submitButton.addEventListener('click', () => {
submitForm()
})
function _DATA_GOT_LOADED() {
if (typeof _DATA_ !== 'undefined') {
checkUrl()
setMetadata()
generateForm(_DATA_)
}
}
_DATA_GOT_LOADED()
</script>
<script>
// source: https://cdn.jsdelivr.net/npm/async@3.1.0/dist/async.min.js
(function (e, t) { "object" == typeof exports && "undefined" != typeof module ? t(exports) : "function" == typeof define && define.amd ? define(["exports"], t) : t(e.async = {}) })(this, function (e) { 'use strict'; function t(e, ...t) { return (...a) => e(...t, ...a) } function a(e) { return function (...t) { var a = t.pop(); return e.call(this, t, a) } } function n(e) { setTimeout(e, 0) } function i(e) { return (t, ...a) => e(() => t(...a)) } function r(e) { return u(e) ? function (...t) { const a = t.pop(), n = e.apply(this, t); return s(n, a) } : a(function (t, a) { var n; try { n = e.apply(this, t) } catch (t) { return a(t) } return n && "function" == typeof n.then ? s(n, a) : void a(null, n) }) } function s(e, t) { return e.then(e => { l(t, null, e) }, e => { l(t, e && e.message ? e : new Error(e)) }) } function l(e, t, a) { try { e(t, a) } catch (e) { Ee(t => { throw t }, e) } } function u(e) { return "AsyncFunction" === e[Symbol.toStringTag] } function c(e) { return "AsyncGenerator" === e[Symbol.toStringTag] } function d(e) { return "function" == typeof e[Symbol.asyncIterator] } function p(e) { if ("function" != typeof e) throw new Error("expected a function"); return u(e) ? r(e) : e } function o(e, t = e.length) { function a(...a) { return "function" == typeof a[t - 1] ? e.apply(this, a) : new Promise((n, i) => { a[t - 1] = (e, ...t) => e ? i(e) : void n(1 < t.length ? t : t[0]), e.apply(this, a) }) } if (!t) throw new Error("arity is undefined"); return Object.defineProperty(a, "name", { value: `awaitable(${e.name})` }), a } function h(e) { return function (t, ...a) { const n = o(function (n) { var i = this; return e(t, (e, t) => { p(e).apply(i, a.concat(t)) }, n) }); return n } } function f(e, t, a, n) { t = t || []; var i = [], r = 0, s = p(a); return e(t, (e, t, a) => { var n = r++; s(e, (e, t) => { i[n] = t, a(e) }) }, e => { n(e, i) }) } function y(e) { return e && "number" == typeof e.length && 0 <= e.length && 0 == e.length % 1 } function m(e) { function t(...t) { if (null !== e) { var a = e; e = null, a.apply(this, t) } } return Object.assign(t, e), t } function g(e) { return e[Symbol.iterator] && e[Symbol.iterator]() } function k(e) { var t = -1, a = e.length; return function () { return ++t < a ? { value: e[t], key: t } : null } } function v(e) { var t = -1; return function () { var a = e.next(); return a.done ? null : (t++, { value: a.value, key: t }) } } function S(e) { var t = e ? Object.keys(e) : [], a = -1, n = t.length; return function () { var i = t[++a]; return a < n ? { value: e[i], key: i } : null } } function L(e) { if (y(e)) return k(e); var t = g(e); return t ? v(t) : S(e) } function x(e) { return function (...t) { if (null === e) throw new Error("Callback was already called."); var a = e; e = null, a.apply(this, t) } } function E(e, t, a, n) { function i() { d >= t || c || l || (c = !0, e.next().then(({ value: e, done: t }) => { if (!(u || l)) return c = !1, t ? (l = !0, void (0 >= d && n(null))) : void (d++, a(e, p, r), p++, i()) }).catch(s)) } function r(e, t) { return d -= 1, u ? void 0 : e ? s(e) : !1 === e ? (l = !0, void (u = !0)) : t === be || l && 0 >= d ? (l = !0, n(null)) : void i() } function s(e) { u || (c = !1, l = !0, n(e)) } let l = !1, u = !1, c = !1, d = 0, p = 0; i() } function b(e, t, a) { function n(e, t) { !1 === e && (l = !0); !0 === l || (e ? a(e) : (++r === s || t === be) && a(null)) } a = m(a); var i = 0, r = 0, { length: s } = e, l = !1; for (0 === s && a(null); i < s; i++)t(e[i], i, x(n)) } function O(e, t, a) { return _e(e, 1 / 0, t, a) } function _() { function e(e, ...n) { return e ? a(e) : void t(1 < n.length ? n : n[0]) } let t, a; return e[Fe] = new Promise((e, n) => { t = e, a = n }), e } function M(e, t, a) { function n(e, t) { g.push(() => l(e, t)) } function i() { if (!h) { if (0 === g.length && 0 === o) return a(null, d); for (; g.length && o < t;) { var e = g.shift(); e() } } } function r(e, t) { var a = y[e]; a || (a = y[e] = []), a.push(t) } function s(e) { var t = y[e] || []; t.forEach(e => e()), i() } function l(e, t) { if (!f) { var n = x((
</script>
<script>
/*
CSS Browser Selector v0.4.0 (Nov 02, 2010)
Rafael Lima (http://rafael.adm.br)
http://rafael.adm.br/css_browser_selector
License: http://creativecommons.org/licenses/by/2.5/
Contributors: http://rafael.adm.br/css_browser_selector#contributors
*/
function css_browser_selector(u) { var ua = u.toLowerCase(), is = function (t) { return ua.indexOf(t) > -1 }, g = 'gecko', w = 'webkit', s = 'safari', o = 'opera', m = 'mobile', h = document.documentElement, b = [(!(/opera|webtv/i.test(ua)) && /msie\s(\d)/.test(ua)) ? ('ie ie' + RegExp.$1) : is('firefox/2') ? g + ' ff2' : is('firefox/3.5') ? g + ' ff3 ff3_5' : is('firefox/3.6') ? g + ' ff3 ff3_6' : is('firefox/3') ? g + ' ff3' : is('gecko/') ? g : is('opera') ? o + (/version\/(\d+)/.test(ua) ? ' ' + o + RegExp.$1 : (/opera(\s|\/)(\d+)/.test(ua) ? ' ' + o + RegExp.$2 : '')) : is('konqueror') ? 'konqueror' : is('blackberry') ? m + ' blackberry' : is('android') ? m + ' android' : is('chrome') ? w + ' chrome' : is('iron') ? w + ' iron' : is('applewebkit/') ? w + ' ' + s + (/version\/(\d+)/.test(ua) ? ' ' + s + RegExp.$1 : '') : is('mozilla/') ? g : '', is('j2me') ? m + ' j2me' : is('iphone') ? m + ' iphone' : is('ipod') ? m + ' ipod' : is('ipad') ? m + ' ipad' : is('mac') ? 'mac' : is('darwin') ? 'mac' : is('webtv') ? 'webtv' : is('win') ? 'win' + (is('windows nt 6.0') ? ' vista' : '') : is('freebsd') ? 'freebsd' : (is('x11') || is('linux')) ? 'linux' : '', 'js']; c = b.join(' '); h.className += ' ' + c; return c; }; css_browser_selector(navigator.userAgent);
</script>
</body>
</html>