From 59a66d7be4946d9ec0d67a2f3d0bb623ad71bb82 Mon Sep 17 00:00:00 2001 From: mahula Date: Thu, 6 Apr 2023 10:29:37 +0200 Subject: [PATCH 001/123] remove greating and imprint email template --- .../emails/templates/greatingFormularImprint.pug | 16 ---------------- 1 file changed, 16 deletions(-) delete mode 100644 backend/src/emails/templates/greatingFormularImprint.pug diff --git a/backend/src/emails/templates/greatingFormularImprint.pug b/backend/src/emails/templates/greatingFormularImprint.pug deleted file mode 100644 index d7d8c3a14..000000000 --- a/backend/src/emails/templates/greatingFormularImprint.pug +++ /dev/null @@ -1,16 +0,0 @@ -p(style='margin-top: 24px;') - = t('emails.general.sincerelyYours') - br - = t('emails.general.yourGradidoTeam') -p(style='margin-top: 24px;')= '—————' -p(style='margin-top: 24px;') - if t('general.imprintImageURL').length > 0 - div(style='position: relative; left: -22px;') - img(src=t('general.imprintImageURL'), width='200', alt=t('general.imprintImageAlt')) - br - each line in t('general.imprint').split(/\n/) - = line - br - a(href='mailto:' + supportEmail)= supportEmail - br - a(href=communityURL)= communityURL From a04d2a686aaf1ee738c98f3e6346fdfff4f8a930 Mon Sep 17 00:00:00 2001 From: mahula Date: Thu, 6 Apr 2023 13:06:01 +0200 Subject: [PATCH 002/123] add separate footer template for emails --- .../src/emails/templates/includes/footer.pug | 99 ++++++++++++++++++ .../includes/images/logo_gradido.png | Bin 0 -> 12860 bytes backend/src/locales/de.json | 11 +- backend/src/locales/en.json | 11 +- 4 files changed, 115 insertions(+), 6 deletions(-) create mode 100644 backend/src/emails/templates/includes/footer.pug create mode 100644 backend/src/emails/templates/includes/images/logo_gradido.png diff --git a/backend/src/emails/templates/includes/footer.pug b/backend/src/emails/templates/includes/footer.pug new file mode 100644 index 000000000..9f7c55ba6 --- /dev/null +++ b/backend/src/emails/templates/includes/footer.pug @@ -0,0 +1,99 @@ +footer + .w-container(class="footer_01") + .socialmedia + a( + target="_blank" + href="https://www.facebook.com/groups/Gradido/" + ) + svg.bi-facebook( + fill="#bec2cb" + xmlns="http://www.w3.org/2000/svg" + aria-label="facebook" + role="img" + focusable="false" + height="29" + width="29" + viewBox="0 0 16 16" + ) + g + path( + d="M16 8.049c0-4.446-3.582-8.05-8-8.05C3.58 0-.002 3.603-.002 8.05c0 4.017 2.926 7.347 6.75 7.951v-5.625h-2.03V8.05H6.75V6.275c0-2.017 1.195-3.131 3.022-3.131.876 0 1.791.157 1.791.157v1.98h-1.009c-.993 0-1.303.621-1.303 1.258v1.51h2.218l-.354 2.326H9.25V16c3.824-.604 6.75-3.934 6.75-7.951z" + ) + a( + target="_blank" + href="https://twitter.com/gradido" + ) + svg.bi-twitter( + fill="#bec2cb" + xmlns="http://www.w3.org/2000/svg" + aria-label="twitter" + role="img" + focusable="false" + height="29" + width="29" + viewBox="0 0 16 16" + ) + g + path( + d="M5.026 15c6.038 0 9.341-5.003 9.341-9.334 0-.14 0-.282-.006-.422A6.685 6.685 0 0 0 16 3.542a6.658 6.658 0 0 1-1.889.518 3.301 3.301 0 0 0 1.447-1.817 6.533 6.533 0 0 1-2.087.793A3.286 3.286 0 0 0 7.875 6.03a9.325 9.325 0 0 1-6.767-3.429 3.289 3.289 0 0 0 1.018 4.382A3.323 3.323 0 0 1 .64 6.575v.045a3.288 3.288 0 0 0 2.632 3.218 3.203 3.203 0 0 1-.865.115 3.23 3.23 0 0 1-.614-.057 3.283 3.283 0 0 0 3.067 2.277A6.588 6.588 0 0 1 .78 13.58a6.32 6.32 0 0 1-.78-.045A9.344 9.344 0 0 0 5.026 15z" + ) + a( + target="_blank" + href="https://www.youtube.com/c/GradidoNet" + ) + svg.bi-youtube( + fill="#bec2cb" + xmlns="http://www.w3.org/2000/svg" + aria-label="youtube" + role="img" + focusable="false" + height="29" + width="29" + viewBox="0 0 16 16" + ) + g + path( + d="M8.051 1.999h.089c.822.003 4.987.033 6.11.335a2.01 2.01 0 0 1 1.415 1.42c.101.38.172.883.22 1.402l.01.104.022.26.008.104c.065.914.073 1.77.074 1.957v.075c-.001.194-.01 1.108-.082 2.06l-.008.105-.009.104c-.05.572-.124 1.14-.235 1.558a2.007 2.007 0 0 1-1.415 1.42c-1.16.312-5.569.334-6.18.335h-.142c-.309 0-1.587-.006-2.927-.052l-.17-.006-.087-.004-.171-.007-.171-.007c-1.11-.049-2.167-.128-2.654-.26a2.007 2.007 0 0 1-1.415-1.419c-.111-.417-.185-.986-.235-1.558L.09 9.82l-.008-.104A31.4 31.4 0 0 1 0 7.68v-.122C.002 7.343.01 6.6.064 5.78l.007-.103.003-.052.008-.104.022-.26.01-.104c.048-.519.119-1.023.22-1.402a2.007 2.007 0 0 1 1.415-1.42c.487-.13 1.544-.21 2.654-.26l.17-.007.172-.006.086-.003.171-.007A99.788 99.788 0 0 1 7.858 2h.193zM6.4 5.209v4.818l4.157-2.408L6.4 5.209z" + ) + a( + target="_blank" + href="https://t.me/GradidoGruppe" + ) + svg.bi-telegram( + viewBox="0 0 16 16" + fill="#bec2cb" + height="29" + width="29" + xmlns="http://www.w3.org/2000/svg" + ) + path( + d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0zM8.287 5.906c-.778.324-2.334.994-4.666 2.01-.378.15-.577.298-.595.442-.03.243.275.339.69.47l.175.055c.408.133.958.288 1.243.294.26.006.549-.1.868-.32 2.179-1.471 3.304-2.214 3.374-2.23.05-.012.12-.026.166.016.047.041.042.12.037.141-.03.129-1.227 1.241-1.846 1.817-.193.18-.33.307-.358.336a8.154 8.154 0 0 1-.188.186c-.38.366-.664.64.015 1.088.327.216.589.393.85.571.284.194.568.387.936.629.093.06.183.125.27.187.331.236.63.448.997.414.214-.02.435-.22.547-.82.265-1.417.786-4.486.906-5.751a1.426 1.426 0 0 0-.013-.315.337.337 0 0 0-.114-.217.526.526 0 0 0-.31-.093c-.3.005-.763.166-2.984 1.09z" + ) + .line + .wf-section(class="footer_02") + .container-2.w-container + div(class="footer_p1")= t("general.contactOurSupport") + div(class="footer_p2")= t("general.supportEmail") + img.image-2( + alt="" + loading="lazy" + src="includes/images/logo_gradido.png" + ) + div(class="footer_p1") + | Gradido-Akademie + br + | Institut für Wirtschaftsbionik + br + | Pfarrweg 2, 74653 Künzelsau, DE + .div-block + a( + class="terms_of_use" + href="https://gradido.net/de/impressum/" + target="_blank" + )= t("general.imprint") + .text-block-3 | + a( + class="terms_of_use" + href="https://gradido.net/de/datenschutz/" + target="_blank" + )= t("general.privacyPolicy") diff --git a/backend/src/emails/templates/includes/images/logo_gradido.png b/backend/src/emails/templates/includes/images/logo_gradido.png new file mode 100644 index 0000000000000000000000000000000000000000..ce09e0eeb00ae31c6ec3b12e9744cd894a70eac2 GIT binary patch literal 12860 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 literal 0 HcmV?d00001 diff --git a/backend/src/locales/de.json b/backend/src/locales/de.json index 4dc90def2..247c3b574 100644 --- a/backend/src/locales/de.json +++ b/backend/src/locales/de.json @@ -4,7 +4,8 @@ "duration": "Der Link hat eine Gültigkeit von {hours} Stunden und {minutes} Minuten. Sollte die Gültigkeit des Links bereits abgelaufen sein, kannst du dir hier einen neuen Link schicken lassen:", "emailRegistered": "deine E-Mail-Adresse wurde soeben bei Gradido registriert.", "pleaseClickLink": "Klicke bitte auf diesen Link, um die Registrierung abzuschließen und dein Gradido-Konto zu aktivieren:", - "subject": "Gradido: E-Mail Überprüfung" + "subject": "Gradido: E-Mail Überprüfung", + "title": "E-Mail Überprüfung" }, "accountMultiRegistration": { "emailExists": "Es existiert jedoch zu deiner E-Mail-Adresse schon ein Konto.", @@ -61,9 +62,13 @@ } }, "general": { + "contactOurSupport": "Bei weiteren fragen kontaktiere bitte unseren Support.", "decimalSeparator": ",", - "imprint": "Gradido-Akademie\nInstitut für Wirtschaftsbionik\nPfarrweg 2\n74653 Künzelsau\nDeutschland", + "imprint": "Impressum", + "imprintAddress": "Gradido-Akademie\nInstitut für Wirtschaftsbionik\nPfarrweg 2\n74653 Künzelsau\nDeutschland", "imprintImageAlt": "Gradido-Akademie Logo", - "imprintImageURL": "https://gdd.gradido.net/img/brand/green.png" + "imprintImageURL": "https://gdd.gradido.net/img/brand/green.png", + "privacyPolicy": "Datenschutzerklärung", + "supportEmail": "support@gradido.com" } } diff --git a/backend/src/locales/en.json b/backend/src/locales/en.json index 74c5739bc..92eb3d875 100644 --- a/backend/src/locales/en.json +++ b/backend/src/locales/en.json @@ -4,7 +4,8 @@ "duration": "The link has a validity of {hours} hours and {minutes} minutes. If the validity of the link has already expired, you can have a new link sent to you here:", "emailRegistered": "Your email address has just been registered with Gradido.", "pleaseClickLink": "Please click on this link to complete the registration and activate your Gradido account:", - "subject": "Gradido: Email Verification" + "subject": "Gradido: Email Verification", + "title": "Email Verification" }, "accountMultiRegistration": { "emailExists": "However, an account already exists for your email address.", @@ -61,9 +62,13 @@ } }, "general": { + "contactOurSupport": "If you have any further questions, please contact our support.", "decimalSeparator": ".", - "imprint": "Gradido-Akademie\nInstitut für Wirtschaftsbionik\nPfarrweg 2\n74653 Künzelsau\nDeutschland", + "imprint": "Impressum", + "imprintAddress": "Gradido-Akademie\nInstitut für Wirtschaftsbionik\nPfarrweg 2\n74653 Künzelsau\nDeutschland", "imprintImageAlt": "Gradido-Akademie Logo", - "imprintImageURL": "https://gdd.gradido.net/img/brand/green.png" + "imprintImageURL": "https://gdd.gradido.net/img/brand/green.png", + "privacyPolicy": "Privacy Policy", + "supportEmail": "support@gradido.com" } } From ffb886dd47226b3b34b46c05f0c1b8bc3514f390 Mon Sep 17 00:00:00 2001 From: mahula Date: Wed, 3 May 2023 10:53:56 +0200 Subject: [PATCH 003/123] add titles for emails in locales --- backend/src/locales/de.json | 16 ++++++++++++---- backend/src/locales/en.json | 16 ++++++++++++---- 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/backend/src/locales/de.json b/backend/src/locales/de.json index 247c3b574..fd8847cc7 100644 --- a/backend/src/locales/de.json +++ b/backend/src/locales/de.json @@ -13,25 +13,30 @@ "ifYouAreNotTheOne": "Wenn du nicht derjenige bist, der versucht hat sich erneut zu registrieren, wende dich bitte an unseren Support:", "onForgottenPasswordClickLink": "Klicke bitte auf den folgenden Link, falls du dein Passwort vergessen haben solltest:", "onForgottenPasswordCopyLink": "oder kopiere den obigen Link in dein Browserfenster.", - "subject": "Gradido: Erneuter Registrierungsversuch mit deiner E-Mail" + "subject": "Gradido: Erneuter Registrierungsversuch mit deiner E-Mail", + "title": "Erneuter Registrierungsversuch mit deiner E-Mail" }, "addedContributionMessage": { "commonGoodContributionMessage": "du hast zu deinem Gemeinwohl-Beitrag „{contributionMemo}“ eine Nachricht von {senderFirstName} {senderLastName} erhalten.", "subject": "Gradido: Nachricht zu deinem Gemeinwohl-Beitrag", + "title": "Nachricht zu deinem Gemeinwohl-Beitrag", "toSeeAndAnswerMessage": "Um die Nachricht zu sehen und darauf zu antworten, gehe in deinem Gradido-Konto ins Menü „Schöpfen“ auf den Tab „Meine Beiträge“!" }, "contributionConfirmed": { "commonGoodContributionConfirmed": "dein Gemeinwohl-Beitrag „{contributionMemo}“ wurde soeben von {senderFirstName} {senderLastName} bestätigt und in deinem Gradido-Konto gutgeschrieben.", - "subject": "Gradido: Dein Gemeinwohl-Beitrag wurde bestätigt" + "subject": "Gradido: Dein Gemeinwohl-Beitrag wurde bestätigt", + "title": "Dein Gemeinwohl-Beitrag wurde bestätigt" }, "contributionDeleted": { "commonGoodContributionDeleted": "dein Gemeinwohl-Beitrag „{contributionMemo}“ wurde von {senderFirstName} {senderLastName} gelöscht.", "subject": "Gradido: Dein Gemeinwohl-Beitrag wurde gelöscht", + "title": "Dein Gemeinwohl-Beitrag wurde gelöscht", "toSeeContributionsAndMessages": "Um deine Gemeinwohl-Beiträge und dazugehörige Nachrichten zu sehen, gehe in deinem Gradido-Konto ins Menü „Schöpfen“ auf den Tab „Meine Beiträge“!" }, "contributionDenied": { "commonGoodContributionDenied": "dein Gemeinwohl-Beitrag „{contributionMemo}“ wurde von {senderFirstName} {senderLastName} abgelehnt.", "subject": "Gradido: Dein Gemeinwohl-Beitrag wurde abgelehnt", + "title": "Dein Gemeinwohl-Beitrag wurde abgelehnt", "toSeeContributionsAndMessages": "Um deine Gemeinwohl-Beiträge und dazugehörige Nachrichten zu sehen, gehe in deinem Gradido-Konto ins Menü „Schöpfen“ auf den Tab „Meine Beiträge“!" }, "general": { @@ -49,16 +54,19 @@ "duration": "Der Link hat eine Gültigkeit von {hours} Stunden und {minutes} Minuten. Sollte die Gültigkeit des Links bereits abgelaufen sein, kannst du dir hier einen neuen Link schicken lassen:", "pleaseClickLink": "Wenn du es warst, klicke bitte auf den Link:", "subject": "Gradido: Passwort zurücksetzen", + "title": "Passwort zurücksetzen", "youOrSomeoneResetPassword": "du, oder jemand anderes, hast für dieses Konto ein Zurücksetzen des Passworts angefordert." }, "transactionLinkRedeemed": { "hasRedeemedYourLink": "{senderFirstName} {senderLastName} ({senderEmail}) hat soeben deinen Link eingelöst.", "memo": "Nachricht: {transactionMemo}", - "subject": "Gradido: {senderFirstName} {senderLastName} hat deinen Gradido-Link eingelöst" + "subject": "Gradido: {senderFirstName} {senderLastName} hat deinen Gradido-Link eingelöst", + "title": "{senderFirstName} {senderLastName} hat deinen Gradido-Link eingelöst" }, "transactionReceived": { "haveReceivedAmountGDDFrom": "du hast soeben {transactionAmount} GDD von {senderFirstName} {senderLastName} ({senderEmail}) erhalten.", - "subject": "Gradido: {senderFirstName} {senderLastName} hat dir {transactionAmount} Gradido gesendet" + "subject": "Gradido: {senderFirstName} {senderLastName} hat dir {transactionAmount} Gradido gesendet", + "title": "{senderFirstName} {senderLastName} hat dir {transactionAmount} Gradido gesendet" } }, "general": { diff --git a/backend/src/locales/en.json b/backend/src/locales/en.json index 92eb3d875..a3c558641 100644 --- a/backend/src/locales/en.json +++ b/backend/src/locales/en.json @@ -13,25 +13,30 @@ "ifYouAreNotTheOne": "If you are not the one who tried to register again, please contact our support:", "onForgottenPasswordClickLink": "Please click on the following link if you have forgotten your password:", "onForgottenPasswordCopyLink": "or copy the link above into your browser window.", - "subject": "Gradido: Try To Register Again With Your Email" + "subject": "Gradido: Try To Register Again With Your Email", + "title": "Try To Register Again With Your Email" }, "addedContributionMessage": { "commonGoodContributionMessage": "you have received a message from {senderFirstName} {senderLastName} regarding your common good contribution “{contributionMemo}”.", "subject": "Gradido: Message about your common good contribution", + "title": "Message about your common good contribution", "toSeeAndAnswerMessage": "To view and reply to the message, go to the “Creation” menu in your Gradido account and click on the “My contributions” tab!" }, "contributionConfirmed": { "commonGoodContributionConfirmed": "Your public good contribution “{contributionMemo}” has just been confirmed by {senderFirstName} {senderLastName} and credited to your Gradido account.", - "subject": "Gradido: Your contribution to the common good was confirmed" + "subject": "Gradido: Your contribution to the common good was confirmed", + "title": "Your contribution to the common good was confirmed" }, "contributionDeleted": { "commonGoodContributionDeleted": "Your public good contribution “{contributionMemo}” was deleted by {senderFirstName} {senderLastName}.", "subject": "Gradido: Your common good contribution was deleted", + "title": "Your common good contribution was deleted", "toSeeContributionsAndMessages": "To see your common good contributions and related messages, go to the “Creation” menu in your Gradido account and click on the “My contributions” tab!" }, "contributionDenied": { "commonGoodContributionDenied": "Your public good contribution “{contributionMemo}” was rejected by {senderFirstName} {senderLastName}.", "subject": "Gradido: Your common good contribution was rejected", + "title": "Your common good contribution was rejected", "toSeeContributionsAndMessages": "To see your common good contributions and related messages, go to the “Creation” menu in your Gradido account and click on the “My contributions” tab!" }, "general": { @@ -49,16 +54,19 @@ "duration": "The link has a validity of {hours} hours and {minutes} minutes. If the validity of the link has already expired, you can have a new link sent to you here:", "pleaseClickLink": "If it was you, please click on the link:", "subject": "Gradido: Reset password", + "title": "Reset password", "youOrSomeoneResetPassword": "You, or someone else, requested a password reset for this account." }, "transactionLinkRedeemed": { "hasRedeemedYourLink": "{senderFirstName} {senderLastName} ({senderEmail}) has just redeemed your link.", "memo": "Message: {transactionMemo}", - "subject": "Gradido: {senderFirstName} {senderLastName} has redeemed your Gradido link" + "subject": "Gradido: {senderFirstName} {senderLastName} has redeemed your Gradido link", + "title": "{senderFirstName} {senderLastName} has redeemed your Gradido link" }, "transactionReceived": { "haveReceivedAmountGDDFrom": "You have just received {transactionAmount} GDD from {senderFirstName} {senderLastName} ({senderEmail}).", - "subject": "Gradido: {senderFirstName} {senderLastName} has sent you {transactionAmount} Gradido" + "subject": "Gradido: {senderFirstName} {senderLastName} has sent you {transactionAmount} Gradido", + "title": "{senderFirstName} {senderLastName} has sent you {transactionAmount} Gradido" } }, "general": { From 1aa657bc5f31691fb7c4731f9c55833f36b366f7 Mon Sep 17 00:00:00 2001 From: mahula Date: Wed, 3 May 2023 12:24:20 +0200 Subject: [PATCH 004/123] add initial email layout --- .../src/emails/templates/includes/email.css | 216 ++++++++ .../src/emails/templates/includes/header.pug | 7 + .../src/emails/templates/includes/webflow.css | 469 ++++++++++++++++++ backend/src/emails/templates/layout.pug | 44 ++ 4 files changed, 736 insertions(+) create mode 100644 backend/src/emails/templates/includes/email.css create mode 100644 backend/src/emails/templates/includes/header.pug create mode 100644 backend/src/emails/templates/includes/webflow.css create mode 100644 backend/src/emails/templates/layout.pug diff --git a/backend/src/emails/templates/includes/email.css b/backend/src/emails/templates/includes/email.css new file mode 100644 index 000000000..5110c3882 --- /dev/null +++ b/backend/src/emails/templates/includes/email.css @@ -0,0 +1,216 @@ +/* vietnamese */ +/* @font-face { + font-family: 'Work Sans'; + font-style: normal; + font-weight: 100; + src: url(https://fonts.gstatic.com/s/worksans/v18/QGYsz_wNahGAdqQ43Rh_c6Dpp_k.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB; +} */ +/* latin-ext */ +@font-face { + font-family: 'Work Sans'; + font-style: normal; + font-weight: 100; + src: url(https://fonts.gstatic.com/s/worksans/v18/QGYsz_wNahGAdqQ43Rh_cqDpp_k.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: 'Work Sans'; + font-style: normal; + font-weight: 100; + src: url(https://fonts.gstatic.com/s/worksans/v18/QGYsz_wNahGAdqQ43Rh_fKDp.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; +} +/* vietnamese */ +/* @font-face { + font-family: 'Work Sans'; + font-style: normal; + font-weight: 200; + src: url(https://fonts.gstatic.com/s/worksans/v18/QGYsz_wNahGAdqQ43Rh_c6Dpp_k.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB; +} */ +/* latin-ext */ +@font-face { + font-family: 'Work Sans'; + font-style: normal; + font-weight: 200; + src: url(https://fonts.gstatic.com/s/worksans/v18/QGYsz_wNahGAdqQ43Rh_cqDpp_k.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: 'Work Sans'; + font-style: normal; + font-weight: 200; + src: url(https://fonts.gstatic.com/s/worksans/v18/QGYsz_wNahGAdqQ43Rh_fKDp.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; +} +/* vietnamese */ +/* @font-face { + font-family: 'Work Sans'; + font-style: normal; + font-weight: 300; + src: url(https://fonts.gstatic.com/s/worksans/v18/QGYsz_wNahGAdqQ43Rh_c6Dpp_k.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB; +} */ +/* latin-ext */ +@font-face { + font-family: 'Work Sans'; + font-style: normal; + font-weight: 300; + src: url(https://fonts.gstatic.com/s/worksans/v18/QGYsz_wNahGAdqQ43Rh_cqDpp_k.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: 'Work Sans'; + font-style: normal; + font-weight: 300; + src: url(https://fonts.gstatic.com/s/worksans/v18/QGYsz_wNahGAdqQ43Rh_fKDp.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; +} +/* vietnamese */ +/* @font-face { + font-family: 'Work Sans'; + font-style: normal; + font-weight: 400; + src: url(https://fonts.gstatic.com/s/worksans/v18/QGYsz_wNahGAdqQ43Rh_c6Dpp_k.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB; +} */ +/* latin-ext */ +@font-face { + font-family: 'Work Sans'; + font-style: normal; + font-weight: 400; + src: url(https://fonts.gstatic.com/s/worksans/v18/QGYsz_wNahGAdqQ43Rh_cqDpp_k.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: 'Work Sans'; + font-style: normal; + font-weight: 400; + src: url(https://fonts.gstatic.com/s/worksans/v18/QGYsz_wNahGAdqQ43Rh_fKDp.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; +} +/* vietnamese */ +/* @font-face { + font-family: 'Work Sans'; + font-style: normal; + font-weight: 500; + src: url(https://fonts.gstatic.com/s/worksans/v18/QGYsz_wNahGAdqQ43Rh_c6Dpp_k.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB; +} */ +/* latin-ext */ +@font-face { + font-family: 'Work Sans'; + font-style: normal; + font-weight: 500; + src: url(https://fonts.gstatic.com/s/worksans/v18/QGYsz_wNahGAdqQ43Rh_cqDpp_k.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: 'Work Sans'; + font-style: normal; + font-weight: 500; + src: url(https://fonts.gstatic.com/s/worksans/v18/QGYsz_wNahGAdqQ43Rh_fKDp.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; +} +/* vietnamese */ +/* @font-face { + font-family: 'Work Sans'; + font-style: normal; + font-weight: 600; + src: url(https://fonts.gstatic.com/s/worksans/v18/QGYsz_wNahGAdqQ43Rh_c6Dpp_k.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB; +} */ +/* latin-ext */ +@font-face { + font-family: 'Work Sans'; + font-style: normal; + font-weight: 600; + src: url(https://fonts.gstatic.com/s/worksans/v18/QGYsz_wNahGAdqQ43Rh_cqDpp_k.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: 'Work Sans'; + font-style: normal; + font-weight: 600; + src: url(https://fonts.gstatic.com/s/worksans/v18/QGYsz_wNahGAdqQ43Rh_fKDp.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; +} +/* vietnamese */ +/* @font-face { + font-family: 'Work Sans'; + font-style: normal; + font-weight: 700; + src: url(https://fonts.gstatic.com/s/worksans/v18/QGYsz_wNahGAdqQ43Rh_c6Dpp_k.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB; +} */ +/* latin-ext */ +@font-face { + font-family: 'Work Sans'; + font-style: normal; + font-weight: 700; + src: url(https://fonts.gstatic.com/s/worksans/v18/QGYsz_wNahGAdqQ43Rh_cqDpp_k.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: 'Work Sans'; + font-style: normal; + font-weight: 700; + src: url(https://fonts.gstatic.com/s/worksans/v18/QGYsz_wNahGAdqQ43Rh_fKDp.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; +} +/* vietnamese */ +/* @font-face { + font-family: 'Work Sans'; + font-style: normal; + font-weight: 800; + src: url(https://fonts.gstatic.com/s/worksans/v18/QGYsz_wNahGAdqQ43Rh_c6Dpp_k.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB; +} */ +/* latin-ext */ +@font-face { + font-family: 'Work Sans'; + font-style: normal; + font-weight: 800; + src: url(https://fonts.gstatic.com/s/worksans/v18/QGYsz_wNahGAdqQ43Rh_cqDpp_k.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: 'Work Sans'; + font-style: normal; + font-weight: 800; + src: url(https://fonts.gstatic.com/s/worksans/v18/QGYsz_wNahGAdqQ43Rh_fKDp.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; +} +/* vietnamese */ +/* @font-face { + font-family: 'Work Sans'; + font-style: normal; + font-weight: 900; + src: url(https://fonts.gstatic.com/s/worksans/v18/QGYsz_wNahGAdqQ43Rh_c6Dpp_k.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB; +} */ +/* latin-ext */ +@font-face { + font-family: 'Work Sans'; + font-style: normal; + font-weight: 900; + src: url(https://fonts.gstatic.com/s/worksans/v18/QGYsz_wNahGAdqQ43Rh_cqDpp_k.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: 'Work Sans'; + font-style: normal; + font-weight: 900; + src: url(https://fonts.gstatic.com/s/worksans/v18/QGYsz_wNahGAdqQ43Rh_fKDp.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; +} diff --git a/backend/src/emails/templates/includes/header.pug b/backend/src/emails/templates/includes/header.pug new file mode 100644 index 000000000..19c581297 --- /dev/null +++ b/backend/src/emails/templates/includes/header.pug @@ -0,0 +1,7 @@ +header + .head.wf-section + .container.w-container + img.logo-head( + alt="" + src="includes/images/logo_gradido.png" + ) diff --git a/backend/src/emails/templates/includes/webflow.css b/backend/src/emails/templates/includes/webflow.css new file mode 100644 index 000000000..15bddf11d --- /dev/null +++ b/backend/src/emails/templates/includes/webflow.css @@ -0,0 +1,469 @@ +/* Generated on: Thu Mar 30 2023 07:15:23 GMT+0000 (Coordinated Universal Time) */ +/* ========================================================================== + normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css + ========================================================================== */ +/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace, monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type="button"],input[type="reset"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type='checkbox'],input[type='radio']{box-sizing:border-box;padding:0}input[type='number']::-webkit-inner-spin-button,input[type='number']::-webkit-outer-spin-button{height:auto}input[type='search']{-webkit-appearance:none}input[type='search']::-webkit-search-cancel-button,input[type='search']::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0} + +/* ========================================================================== + Start of base Webflow CSS - If you're looking for some ultra-clean CSS, skip the boilerplate and see the unminified code below. + ========================================================================== */ +@font-face{font-family:'webflow-icons';src:url("data:application/x-font-ttf;charset=utf-8;base64,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") format('truetype');font-weight:normal;font-style:normal}[class^="w-icon-"],[class*=" w-icon-"]{font-family:'webflow-icons' !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.w-icon-slider-right:before{content:"\e600"}.w-icon-slider-left:before{content:"\e601"}.w-icon-nav-menu:before{content:"\e602"}.w-icon-arrow-down:before,.w-icon-dropdown-toggle:before{content:"\e603"}.w-icon-file-upload-remove:before{content:"\e900"}.w-icon-file-upload-icon:before{content:"\e903"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{height:100%}body{margin:0;min-height:100%;background-color:#fff;font-family:Arial,sans-serif;font-size:14px;line-height:20px;color:#333}img{max-width:100%;vertical-align:middle;display:inline-block}html.w-mod-touch *{background-attachment:scroll !important}.w-block{display:block}.w-inline-block{max-width:100%;display:inline-block}.w-clearfix:before,.w-clearfix:after{content:" ";display:table;grid-column-start:1;grid-row-start:1;grid-column-end:2;grid-row-end:2}.w-clearfix:after{clear:both}.w-hidden{display:none}.w-button{display:inline-block;padding:9px 15px;background-color:#3898EC;color:white;border:0;line-height:inherit;text-decoration:none;cursor:pointer;border-radius:0}input.w-button{-webkit-appearance:button}html[data-w-dynpage] [data-w-cloak]{color:transparent !important}.w-webflow-badge,.w-webflow-badge *{position:static;left:auto;top:auto;right:auto;bottom:auto;z-index:auto;display:block;visibility:visible;overflow:visible;overflow-x:visible;overflow-y:visible;box-sizing:border-box;width:auto;height:auto;max-height:none;max-width:none;min-height:0;min-width:0;margin:0;padding:0;float:none;clear:none;border:0 none transparent;border-radius:0;background:none;background-image:none;background-position:0% 0%;background-size:auto auto;background-repeat:repeat;background-origin:padding-box;background-clip:border-box;background-attachment:scroll;background-color:transparent;box-shadow:none;opacity:1;transform:none;transition:none;direction:ltr;font-family:inherit;font-weight:inherit;color:inherit;font-size:inherit;line-height:inherit;font-style:inherit;font-variant:inherit;text-align:inherit;letter-spacing:inherit;text-decoration:inherit;text-indent:0;text-transform:inherit;list-style-type:disc;text-shadow:none;font-smoothing:auto;vertical-align:baseline;cursor:inherit;white-space:inherit;word-break:normal;word-spacing:normal;word-wrap:normal}.w-webflow-badge{position:fixed !important;display:inline-block !important;visibility:visible !important;z-index:2147483647 !important;top:auto !important;right:12px !important;bottom:12px !important;left:auto !important;color:#AAADB0 !important;background-color:#fff !important;border-radius:3px !important;padding:6px 8px 6px 6px !important;font-size:12px !important;opacity:1 !important;line-height:14px !important;text-decoration:none !important;transform:none !important;margin:0 !important;width:auto !important;height:auto !important;overflow:visible !important;white-space:nowrap;box-shadow:0 0 0 1px rgba(0,0,0,0.1),0 1px 3px rgba(0,0,0,0.1);cursor:pointer}.w-webflow-badge>img{display:inline-block !important;visibility:visible !important;opacity:1 !important;vertical-align:middle !important}h1,h2,h3,h4,h5,h6{font-weight:bold;margin-bottom:10px}h1{font-size:38px;line-height:44px;margin-top:20px}h2{font-size:32px;line-height:36px;margin-top:20px}h3{font-size:24px;line-height:30px;margin-top:20px}h4{font-size:18px;line-height:24px;margin-top:10px}h5{font-size:14px;line-height:20px;margin-top:10px}h6{font-size:12px;line-height:18px;margin-top:10px}p{margin-top:0;margin-bottom:10px}blockquote{margin:0 0 10px 0;padding:10px 20px;border-left:5px solid #E2E2E2;font-size:18px;line-height:22px}figure{margin:0;margin-bottom:10px}figcaption{margin-top:5px;text-align:center}ul,ol{margin-top:0px;margin-bottom:10px;padding-left:40px}.w-list-unstyled{padding-left:0;list-style:none}.w-embed:before,.w-embed:after{content:" ";display:table;grid-column-start:1;grid-row-start:1;grid-column-end:2;grid-row-end:2}.w-embed:after{clear:both}.w-video{width:100%;position:relative;padding:0}.w-video iframe,.w-video object,.w-video embed{position:absolute;top:0;left:0;width:100%;height:100%;border:none}fieldset{padding:0;margin:0;border:0}button,[type='button'],[type='reset']{border:0;cursor:pointer;-webkit-appearance:button}.w-form{margin:0 0 15px}.w-form-done{display:none;padding:20px;text-align:center;background-color:#dddddd}.w-form-fail{display:none;margin-top:10px;padding:10px;background-color:#ffdede}label{display:block;margin-bottom:5px;font-weight:bold}.w-input,.w-select{display:block;width:100%;height:38px;padding:8px 12px;margin-bottom:10px;font-size:14px;line-height:1.42857143;color:#333333;vertical-align:middle;background-color:#ffffff;border:1px solid #cccccc}.w-input:-moz-placeholder,.w-select:-moz-placeholder{color:#999}.w-input::-moz-placeholder,.w-select::-moz-placeholder{color:#999;opacity:1}.w-input:-ms-input-placeholder,.w-select:-ms-input-placeholder{color:#999}.w-input::-webkit-input-placeholder,.w-select::-webkit-input-placeholder{color:#999}.w-input:focus,.w-select:focus{border-color:#3898EC;outline:0}.w-input[disabled],.w-select[disabled],.w-input[readonly],.w-select[readonly],fieldset[disabled] .w-input,fieldset[disabled] .w-select{cursor:not-allowed}.w-input[disabled]:not(.w-input-disabled),.w-select[disabled]:not(.w-input-disabled),.w-input[readonly],.w-select[readonly],fieldset[disabled]:not(.w-input-disabled) .w-input,fieldset[disabled]:not(.w-input-disabled) .w-select{background-color:#eeeeee}textarea.w-input,textarea.w-select{height:auto}.w-select{background-color:#f3f3f3}.w-select[multiple]{height:auto}.w-form-label{display:inline-block;cursor:pointer;font-weight:normal;margin-bottom:0px}.w-radio{display:block;margin-bottom:5px;padding-left:20px}.w-radio:before,.w-radio:after{content:" ";display:table;grid-column-start:1;grid-row-start:1;grid-column-end:2;grid-row-end:2}.w-radio:after{clear:both}.w-radio-input{margin:4px 0 0;margin-top:1px \9;line-height:normal;float:left;margin-left:-20px}.w-radio-input{margin-top:3px}.w-file-upload{display:block;margin-bottom:10px}.w-file-upload-input{width:.1px;height:.1px;opacity:0;overflow:hidden;position:absolute;z-index:-100}.w-file-upload-default,.w-file-upload-uploading,.w-file-upload-success{display:inline-block;color:#333333}.w-file-upload-error{display:block;margin-top:10px}.w-file-upload-default.w-hidden,.w-file-upload-uploading.w-hidden,.w-file-upload-error.w-hidden,.w-file-upload-success.w-hidden{display:none}.w-file-upload-uploading-btn{display:flex;font-size:14px;font-weight:normal;cursor:pointer;margin:0;padding:8px 12px;border:1px solid #cccccc;background-color:#fafafa}.w-file-upload-file{display:flex;flex-grow:1;justify-content:space-between;margin:0;padding:8px 9px 8px 11px;border:1px solid #cccccc;background-color:#fafafa}.w-file-upload-file-name{font-size:14px;font-weight:normal;display:block}.w-file-remove-link{margin-top:3px;margin-left:10px;width:auto;height:auto;padding:3px;display:block;cursor:pointer}.w-icon-file-upload-remove{margin:auto;font-size:10px}.w-file-upload-error-msg{display:inline-block;color:#ea384c;padding:2px 0}.w-file-upload-info{display:inline-block;line-height:38px;padding:0 12px}.w-file-upload-label{display:inline-block;font-size:14px;font-weight:normal;cursor:pointer;margin:0;padding:8px 12px;border:1px solid #cccccc;background-color:#fafafa}.w-icon-file-upload-icon,.w-icon-file-upload-uploading{display:inline-block;margin-right:8px;width:20px}.w-icon-file-upload-uploading{height:20px}.w-container{margin-left:auto;margin-right:auto;max-width:940px}.w-container:before,.w-container:after{content:" ";display:table;grid-column-start:1;grid-row-start:1;grid-column-end:2;grid-row-end:2}.w-container:after{clear:both}.w-container .w-row{margin-left:-10px;margin-right:-10px}.w-row:before,.w-row:after{content:" ";display:table;grid-column-start:1;grid-row-start:1;grid-column-end:2;grid-row-end:2}.w-row:after{clear:both}.w-row .w-row{margin-left:0;margin-right:0}.w-col{position:relative;float:left;width:100%;min-height:1px;padding-left:10px;padding-right:10px}.w-col .w-col{padding-left:0;padding-right:0}.w-col-1{width:8.33333333%}.w-col-2{width:16.66666667%}.w-col-3{width:25%}.w-col-4{width:33.33333333%}.w-col-5{width:41.66666667%}.w-col-6{width:50%}.w-col-7{width:58.33333333%}.w-col-8{width:66.66666667%}.w-col-9{width:75%}.w-col-10{width:83.33333333%}.w-col-11{width:91.66666667%}.w-col-12{width:100%}.w-hidden-main{display:none !important}@media screen and (max-width:991px){.w-container{max-width:728px}.w-hidden-main{display:inherit !important}.w-hidden-medium{display:none !important}.w-col-medium-1{width:8.33333333%}.w-col-medium-2{width:16.66666667%}.w-col-medium-3{width:25%}.w-col-medium-4{width:33.33333333%}.w-col-medium-5{width:41.66666667%}.w-col-medium-6{width:50%}.w-col-medium-7{width:58.33333333%}.w-col-medium-8{width:66.66666667%}.w-col-medium-9{width:75%}.w-col-medium-10{width:83.33333333%}.w-col-medium-11{width:91.66666667%}.w-col-medium-12{width:100%}.w-col-stack{width:100%;left:auto;right:auto}}@media screen and (max-width:767px){.w-hidden-main{display:inherit !important}.w-hidden-medium{display:inherit !important}.w-hidden-small{display:none !important}.w-row,.w-container .w-row{margin-left:0;margin-right:0}.w-col{width:100%;left:auto;right:auto}.w-col-small-1{width:8.33333333%}.w-col-small-2{width:16.66666667%}.w-col-small-3{width:25%}.w-col-small-4{width:33.33333333%}.w-col-small-5{width:41.66666667%}.w-col-small-6{width:50%}.w-col-small-7{width:58.33333333%}.w-col-small-8{width:66.66666667%}.w-col-small-9{width:75%}.w-col-small-10{width:83.33333333%}.w-col-small-11{width:91.66666667%}.w-col-small-12{width:100%}}@media screen and (max-width:479px){.w-container{max-width:none}.w-hidden-main{display:inherit !important}.w-hidden-medium{display:inherit !important}.w-hidden-small{display:inherit !important}.w-hidden-tiny{display:none !important}.w-col{width:100%}.w-col-tiny-1{width:8.33333333%}.w-col-tiny-2{width:16.66666667%}.w-col-tiny-3{width:25%}.w-col-tiny-4{width:33.33333333%}.w-col-tiny-5{width:41.66666667%}.w-col-tiny-6{width:50%}.w-col-tiny-7{width:58.33333333%}.w-col-tiny-8{width:66.66666667%}.w-col-tiny-9{width:75%}.w-col-tiny-10{width:83.33333333%}.w-col-tiny-11{width:91.66666667%}.w-col-tiny-12{width:100%}}.w-widget{position:relative}.w-widget-map{width:100%;height:400px}.w-widget-map label{width:auto;display:inline}.w-widget-map img{max-width:inherit}.w-widget-map .gm-style-iw{text-align:center}.w-widget-map .gm-style-iw>button{display:none !important}.w-widget-twitter{overflow:hidden}.w-widget-twitter-count-shim{display:inline-block;vertical-align:top;position:relative;width:28px;height:20px;text-align:center;background:white;border:#758696 solid 1px;border-radius:3px}.w-widget-twitter-count-shim *{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.w-widget-twitter-count-shim .w-widget-twitter-count-inner{position:relative;font-size:15px;line-height:12px;text-align:center;color:#999;font-family:serif}.w-widget-twitter-count-shim .w-widget-twitter-count-clear{position:relative;display:block}.w-widget-twitter-count-shim.w--large{width:36px;height:28px}.w-widget-twitter-count-shim.w--large .w-widget-twitter-count-inner{font-size:18px;line-height:18px}.w-widget-twitter-count-shim:not(.w--vertical){margin-left:5px;margin-right:8px}.w-widget-twitter-count-shim:not(.w--vertical).w--large{margin-left:6px}.w-widget-twitter-count-shim:not(.w--vertical):before,.w-widget-twitter-count-shim:not(.w--vertical):after{top:50%;left:0;border:solid transparent;content:' ';height:0;width:0;position:absolute;pointer-events:none}.w-widget-twitter-count-shim:not(.w--vertical):before{border-color:rgba(117,134,150,0);border-right-color:#5d6c7b;border-width:4px;margin-left:-9px;margin-top:-4px}.w-widget-twitter-count-shim:not(.w--vertical).w--large:before{border-width:5px;margin-left:-10px;margin-top:-5px}.w-widget-twitter-count-shim:not(.w--vertical):after{border-color:rgba(255,255,255,0);border-right-color:white;border-width:4px;margin-left:-8px;margin-top:-4px}.w-widget-twitter-count-shim:not(.w--vertical).w--large:after{border-width:5px;margin-left:-9px;margin-top:-5px}.w-widget-twitter-count-shim.w--vertical{width:61px;height:33px;margin-bottom:8px}.w-widget-twitter-count-shim.w--vertical:before,.w-widget-twitter-count-shim.w--vertical:after{top:100%;left:50%;border:solid transparent;content:' ';height:0;width:0;position:absolute;pointer-events:none}.w-widget-twitter-count-shim.w--vertical:before{border-color:rgba(117,134,150,0);border-top-color:#5d6c7b;border-width:5px;margin-left:-5px}.w-widget-twitter-count-shim.w--vertical:after{border-color:rgba(255,255,255,0);border-top-color:white;border-width:4px;margin-left:-4px}.w-widget-twitter-count-shim.w--vertical .w-widget-twitter-count-inner{font-size:18px;line-height:22px}.w-widget-twitter-count-shim.w--vertical.w--large{width:76px}.w-background-video{position:relative;overflow:hidden;height:500px;color:white}.w-background-video>video{background-size:cover;background-position:50% 50%;position:absolute;margin:auto;width:100%;height:100%;right:-100%;bottom:-100%;top:-100%;left:-100%;object-fit:cover;z-index:-100}.w-background-video>video::-webkit-media-controls-start-playback-button{display:none !important;-webkit-appearance:none}.w-background-video--control{position:absolute;bottom:1em;right:1em;background-color:transparent;padding:0}.w-background-video--control>[hidden]{display:none !important}.w-slider{position:relative;height:300px;text-align:center;background:#dddddd;clear:both;-webkit-tap-highlight-color:rgba(0,0,0,0);tap-highlight-color:rgba(0,0,0,0)}.w-slider-mask{position:relative;display:block;overflow:hidden;z-index:1;left:0;right:0;height:100%;white-space:nowrap}.w-slide{position:relative;display:inline-block;vertical-align:top;width:100%;height:100%;white-space:normal;text-align:left}.w-slider-nav{position:absolute;z-index:2;top:auto;right:0;bottom:0;left:0;margin:auto;padding-top:10px;height:40px;text-align:center;-webkit-tap-highlight-color:rgba(0,0,0,0);tap-highlight-color:rgba(0,0,0,0)}.w-slider-nav.w-round>div{border-radius:100%}.w-slider-nav.w-num>div{width:auto;height:auto;padding:.2em .5em;font-size:inherit;line-height:inherit}.w-slider-nav.w-shadow>div{box-shadow:0 0 3px rgba(51,51,51,0.4)}.w-slider-nav-invert{color:#fff}.w-slider-nav-invert>div{background-color:rgba(34,34,34,0.4)}.w-slider-nav-invert>div.w-active{background-color:#222}.w-slider-dot{position:relative;display:inline-block;width:1em;height:1em;background-color:rgba(255,255,255,0.4);cursor:pointer;margin:0 3px .5em;transition:background-color 100ms,color 100ms}.w-slider-dot.w-active{background-color:#fff}.w-slider-dot:focus{outline:none;box-shadow:0 0 0 2px #fff}.w-slider-dot:focus.w-active{box-shadow:none}.w-slider-arrow-left,.w-slider-arrow-right{position:absolute;width:80px;top:0;right:0;bottom:0;left:0;margin:auto;cursor:pointer;overflow:hidden;color:white;font-size:40px;-webkit-tap-highlight-color:rgba(0,0,0,0);tap-highlight-color:rgba(0,0,0,0);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.w-slider-arrow-left [class^='w-icon-'],.w-slider-arrow-right [class^='w-icon-'],.w-slider-arrow-left [class*=' w-icon-'],.w-slider-arrow-right [class*=' w-icon-']{position:absolute}.w-slider-arrow-left:focus,.w-slider-arrow-right:focus{outline:0}.w-slider-arrow-left{z-index:3;right:auto}.w-slider-arrow-right{z-index:4;left:auto}.w-icon-slider-left,.w-icon-slider-right{top:0;right:0;bottom:0;left:0;margin:auto;width:1em;height:1em}.w-slider-aria-label{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.w-slider-force-show{display:block !important}.w-dropdown{display:inline-block;position:relative;text-align:left;margin-left:auto;margin-right:auto;z-index:900}.w-dropdown-btn,.w-dropdown-toggle,.w-dropdown-link{position:relative;vertical-align:top;text-decoration:none;color:#222222;padding:20px;text-align:left;margin-left:auto;margin-right:auto;white-space:nowrap}.w-dropdown-toggle{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:inline-block;cursor:pointer;padding-right:40px}.w-dropdown-toggle:focus{outline:0}.w-icon-dropdown-toggle{position:absolute;top:0;right:0;bottom:0;margin:auto;margin-right:20px;width:1em;height:1em}.w-dropdown-list{position:absolute;background:#dddddd;display:none;min-width:100%}.w-dropdown-list.w--open{display:block}.w-dropdown-link{padding:10px 20px;display:block;color:#222222}.w-dropdown-link.w--current{color:#0082f3}.w-dropdown-link:focus{outline:0}@media screen and (max-width:767px){.w-nav-brand{padding-left:10px}}.w-lightbox-backdrop{color:#000;cursor:auto;font-family:serif;font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;list-style:disc;text-align:start;text-indent:0;text-shadow:none;text-transform:none;visibility:visible;white-space:normal;word-break:normal;word-spacing:normal;word-wrap:normal;position:fixed;top:0;right:0;bottom:0;left:0;color:#fff;font-family:"Helvetica Neue",Helvetica,Ubuntu,"Segoe UI",Verdana,sans-serif;font-size:17px;line-height:1.2;font-weight:300;text-align:center;background:rgba(0,0,0,0.9);z-index:2000;outline:0;opacity:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-webkit-tap-highlight-color:transparent;-webkit-transform:translate(0, 0)}.w-lightbox-backdrop,.w-lightbox-container{height:100%;overflow:auto;-webkit-overflow-scrolling:touch}.w-lightbox-content{position:relative;height:100vh;overflow:hidden}.w-lightbox-view{position:absolute;width:100vw;height:100vh;opacity:0}.w-lightbox-view:before{content:"";height:100vh}.w-lightbox-group,.w-lightbox-group .w-lightbox-view,.w-lightbox-group .w-lightbox-view:before{height:86vh}.w-lightbox-frame,.w-lightbox-view:before{display:inline-block;vertical-align:middle}.w-lightbox-figure{position:relative;margin:0}.w-lightbox-group .w-lightbox-figure{cursor:pointer}.w-lightbox-img{width:auto;height:auto;max-width:none}.w-lightbox-image{display:block;float:none;max-width:100vw;max-height:100vh}.w-lightbox-group .w-lightbox-image{max-height:86vh}.w-lightbox-caption{position:absolute;right:0;bottom:0;left:0;padding:.5em 1em;background:rgba(0,0,0,0.4);text-align:left;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.w-lightbox-embed{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%}.w-lightbox-control{position:absolute;top:0;width:4em;background-size:24px;background-repeat:no-repeat;background-position:center;cursor:pointer;-webkit-transition:all .3s;transition:all .3s}.w-lightbox-left{display:none;bottom:0;left:0;background-image:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9Ii0yMCAwIDI0IDQwIiB3aWR0aD0iMjQiIGhlaWdodD0iNDAiPjxnIHRyYW5zZm9ybT0icm90YXRlKDQ1KSI+PHBhdGggZD0ibTAgMGg1djIzaDIzdjVoLTI4eiIgb3BhY2l0eT0iLjQiLz48cGF0aCBkPSJtMSAxaDN2MjNoMjN2M2gtMjZ6IiBmaWxsPSIjZmZmIi8+PC9nPjwvc3ZnPg==")}.w-lightbox-right{display:none;right:0;bottom:0;background-image:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9Ii00IDAgMjQgNDAiIHdpZHRoPSIyNCIgaGVpZ2h0PSI0MCI+PGcgdHJhbnNmb3JtPSJyb3RhdGUoNDUpIj48cGF0aCBkPSJtMC0waDI4djI4aC01di0yM2gtMjN6IiBvcGFjaXR5PSIuNCIvPjxwYXRoIGQ9Im0xIDFoMjZ2MjZoLTN2LTIzaC0yM3oiIGZpbGw9IiNmZmYiLz48L2c+PC9zdmc+")}.w-lightbox-close{right:0;height:2.6em;background-image:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9Ii00IDAgMTggMTciIHdpZHRoPSIxOCIgaGVpZ2h0PSIxNyI+PGcgdHJhbnNmb3JtPSJyb3RhdGUoNDUpIj48cGF0aCBkPSJtMCAwaDd2LTdoNXY3aDd2NWgtN3Y3aC01di03aC03eiIgb3BhY2l0eT0iLjQiLz48cGF0aCBkPSJtMSAxaDd2LTdoM3Y3aDd2M2gtN3Y3aC0zdi03aC03eiIgZmlsbD0iI2ZmZiIvPjwvZz48L3N2Zz4=");background-size:18px}.w-lightbox-strip{position:absolute;bottom:0;left:0;right:0;padding:0 1vh;line-height:0;white-space:nowrap;overflow-x:auto;overflow-y:hidden}.w-lightbox-item{display:inline-block;width:10vh;padding:2vh 1vh;box-sizing:content-box;cursor:pointer;-webkit-transform:translate3d(0, 0, 0)}.w-lightbox-active{opacity:.3}.w-lightbox-thumbnail{position:relative;height:10vh;background:#222;overflow:hidden}.w-lightbox-thumbnail-image{position:absolute;top:0;left:0}.w-lightbox-thumbnail .w-lightbox-tall{top:50%;width:100%;-webkit-transform:translate(0, -50%);-ms-transform:translate(0, -50%);transform:translate(0, -50%)}.w-lightbox-thumbnail .w-lightbox-wide{left:50%;height:100%;-webkit-transform:translate(-50%, 0);-ms-transform:translate(-50%, 0);transform:translate(-50%, 0)}.w-lightbox-spinner{position:absolute;top:50%;left:50%;box-sizing:border-box;width:40px;height:40px;margin-top:-20px;margin-left:-20px;border:5px solid rgba(0,0,0,0.4);border-radius:50%;-webkit-animation:spin .8s infinite linear;animation:spin .8s infinite linear}.w-lightbox-spinner:after{content:"";position:absolute;top:-4px;right:-4px;bottom:-4px;left:-4px;border:3px solid transparent;border-bottom-color:#fff;border-radius:50%}.w-lightbox-hide{display:none}.w-lightbox-noscroll{overflow:hidden}@media (min-width:768px){.w-lightbox-content{height:96vh;margin-top:2vh}.w-lightbox-view,.w-lightbox-view:before{height:96vh}.w-lightbox-group,.w-lightbox-group .w-lightbox-view,.w-lightbox-group .w-lightbox-view:before{height:84vh}.w-lightbox-image{max-width:96vw;max-height:96vh}.w-lightbox-group .w-lightbox-image{max-width:82.3vw;max-height:84vh}.w-lightbox-left,.w-lightbox-right{display:block;opacity:.5}.w-lightbox-close{opacity:.8}.w-lightbox-control:hover{opacity:1}}.w-lightbox-inactive,.w-lightbox-inactive:hover{opacity:0}.w-richtext:before,.w-richtext:after{content:" ";display:table;grid-column-start:1;grid-row-start:1;grid-column-end:2;grid-row-end:2}.w-richtext:after{clear:both}.w-richtext[contenteditable="true"]:before,.w-richtext[contenteditable="true"]:after{white-space:initial}.w-richtext ol,.w-richtext ul{overflow:hidden}.w-richtext .w-richtext-figure-selected.w-richtext-figure-type-video div:after,.w-richtext .w-richtext-figure-selected[data-rt-type="video"] div:after{outline:2px solid #2895f7}.w-richtext .w-richtext-figure-selected.w-richtext-figure-type-image div,.w-richtext .w-richtext-figure-selected[data-rt-type="image"] div{outline:2px solid #2895f7}.w-richtext figure.w-richtext-figure-type-video>div:after,.w-richtext figure[data-rt-type="video"]>div:after{content:'';position:absolute;display:none;left:0;top:0;right:0;bottom:0}.w-richtext figure{position:relative;max-width:60%}.w-richtext figure>div:before{cursor:default!important}.w-richtext figure img{width:100%}.w-richtext figure figcaption.w-richtext-figcaption-placeholder{opacity:.6}.w-richtext figure div{font-size:0px;color:transparent}.w-richtext figure.w-richtext-figure-type-image,.w-richtext figure[data-rt-type="image"]{display:table}.w-richtext figure.w-richtext-figure-type-image>div,.w-richtext figure[data-rt-type="image"]>div{display:inline-block}.w-richtext figure.w-richtext-figure-type-image>figcaption,.w-richtext figure[data-rt-type="image"]>figcaption{display:table-caption;caption-side:bottom}.w-richtext figure.w-richtext-figure-type-video,.w-richtext figure[data-rt-type="video"]{width:60%;height:0}.w-richtext figure.w-richtext-figure-type-video iframe,.w-richtext figure[data-rt-type="video"] iframe{position:absolute;top:0;left:0;width:100%;height:100%}.w-richtext figure.w-richtext-figure-type-video>div,.w-richtext figure[data-rt-type="video"]>div{width:100%}.w-richtext figure.w-richtext-align-center{margin-right:auto;margin-left:auto;clear:both}.w-richtext figure.w-richtext-align-center.w-richtext-figure-type-image>div,.w-richtext figure.w-richtext-align-center[data-rt-type="image"]>div{max-width:100%}.w-richtext figure.w-richtext-align-normal{clear:both}.w-richtext figure.w-richtext-align-fullwidth{width:100%;max-width:100%;text-align:center;clear:both;display:block;margin-right:auto;margin-left:auto}.w-richtext figure.w-richtext-align-fullwidth>div{display:inline-block;padding-bottom:inherit}.w-richtext figure.w-richtext-align-fullwidth>figcaption{display:block}.w-richtext figure.w-richtext-align-floatleft{float:left;margin-right:15px;clear:none}.w-richtext figure.w-richtext-align-floatright{float:right;margin-left:15px;clear:none}.w-nav{position:relative;background:#dddddd;z-index:1000}.w-nav:before,.w-nav:after{content:" ";display:table;grid-column-start:1;grid-row-start:1;grid-column-end:2;grid-row-end:2}.w-nav:after{clear:both}.w-nav-brand{position:relative;float:left;text-decoration:none;color:#333333}.w-nav-link{position:relative;display:inline-block;vertical-align:top;text-decoration:none;color:#222222;padding:20px;text-align:left;margin-left:auto;margin-right:auto}.w-nav-link.w--current{color:#0082f3}.w-nav-menu{position:relative;float:right}[data-nav-menu-open]{display:block !important;position:absolute;top:100%;left:0;right:0;background:#C8C8C8;text-align:center;overflow:visible;min-width:200px}.w--nav-link-open{display:block;position:relative}.w-nav-overlay{position:absolute;overflow:hidden;display:none;top:100%;left:0;right:0;width:100%}.w-nav-overlay [data-nav-menu-open]{top:0}.w-nav[data-animation="over-left"] .w-nav-overlay{width:auto}.w-nav[data-animation="over-left"] .w-nav-overlay,.w-nav[data-animation="over-left"] [data-nav-menu-open]{right:auto;z-index:1;top:0}.w-nav[data-animation="over-right"] .w-nav-overlay{width:auto}.w-nav[data-animation="over-right"] .w-nav-overlay,.w-nav[data-animation="over-right"] [data-nav-menu-open]{left:auto;z-index:1;top:0}.w-nav-button{position:relative;float:right;padding:18px;font-size:24px;display:none;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0);tap-highlight-color:rgba(0,0,0,0);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.w-nav-button:focus{outline:0}.w-nav-button.w--open{background-color:#C8C8C8;color:white}.w-nav[data-collapse="all"] .w-nav-menu{display:none}.w-nav[data-collapse="all"] .w-nav-button{display:block}.w--nav-dropdown-open{display:block}.w--nav-dropdown-toggle-open{display:block}.w--nav-dropdown-list-open{position:static}@media screen and (max-width:991px){.w-nav[data-collapse="medium"] .w-nav-menu{display:none}.w-nav[data-collapse="medium"] .w-nav-button{display:block}}@media screen and (max-width:767px){.w-nav[data-collapse="small"] .w-nav-menu{display:none}.w-nav[data-collapse="small"] .w-nav-button{display:block}.w-nav-brand{padding-left:10px}}@media screen and (max-width:479px){.w-nav[data-collapse="tiny"] .w-nav-menu{display:none}.w-nav[data-collapse="tiny"] .w-nav-button{display:block}}.w-tabs{position:relative}.w-tabs:before,.w-tabs:after{content:" ";display:table;grid-column-start:1;grid-row-start:1;grid-column-end:2;grid-row-end:2}.w-tabs:after{clear:both}.w-tab-menu{position:relative}.w-tab-link{position:relative;display:inline-block;vertical-align:top;text-decoration:none;padding:9px 30px;text-align:left;cursor:pointer;color:#222222;background-color:#dddddd}.w-tab-link.w--current{background-color:#C8C8C8}.w-tab-link:focus{outline:0}.w-tab-content{position:relative;display:block;overflow:hidden}.w-tab-pane{position:relative;display:none}.w--tab-active{display:block}@media screen and (max-width:479px){.w-tab-link{display:block}}.w-ix-emptyfix:after{content:""}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.w-dyn-empty{padding:10px;background-color:#dddddd}.w-dyn-hide{display:none !important}.w-dyn-bind-empty{display:none !important}.w-condition-invisible{display:none !important} + +/* ========================================================================== + Start of custom Webflow CSS + ========================================================================== */ +.container { + max-width: 680px; + margin-top: 40px; +} + +.datum { + position: relative; + margin-top: 25px; + font-family: 'Work Sans', sans-serif; + color: #383838; + font-size: 16px; + line-height: 19px; + font-weight: 600; + text-align: right; +} + +.logo-head { + position: absolute; +} + +.wrapper_head { + position: static; + display: block; + max-width: 680px; + margin-top: 60px; + justify-content: flex-start; + align-items: stretch; + grid-auto-columns: 1fr; + grid-column-gap: 16px; + grid-row-gap: 16px; + -ms-grid-columns: 1fr 1fr; + grid-template-columns: 1fr 1fr; + -ms-grid-rows: auto auto; + grid-template-rows: auto auto; +} + +.headline.h1 { + margin-top: 0px; + color: #383838; + text-align: center; +} + +.text-block { + max-width: 680px; + margin-top: 20px; + margin-right: 40px; + margin-left: 40px; + font-family: 'Work Sans', sans-serif; + color: #9ca0a8; + font-size: 22px; + line-height: 29px; + font-weight: 400; + text-align: center; +} + +.background_01 { + position: static; + display: block; + overflow: visible; + width: 600px; + height: 520px; + float: none; + flex-direction: column-reverse; + justify-content: flex-end; + flex-wrap: nowrap; + align-items: center; + align-content: flex-end; + border: 1px none #000; + border-radius: 24px; + background-color: #f5f5f5; + background-image: linear-gradient(180deg, #f5f5f5, #f5f5f5); + text-align: center; + -o-object-fit: fill; + object-fit: fill; +} + +.content { + display: flex; + max-width: 680px; + margin-top: 40px; + flex-direction: column; + justify-content: center; + align-items: center; + border-radius: 24px; + background-image: linear-gradient(180deg, #f5f5f5, #f5f5f5); + text-align: center; +} + +.heading { + display: flex; + margin-top: 40px; + margin-right: auto; + margin-left: auto; + justify-content: flex-start; + align-items: stretch; + align-self: auto; + order: 0; + flex: 0 auto; + font-family: 'Work Sans', sans-serif; + font-size: 28px; + line-height: 33px; + font-weight: 600; + text-align: center; +} + +.p_content { + max-width: 400px; + margin-top: 15px; + margin-right: auto; + margin-left: auto; + font-family: 'Work Sans', sans-serif; + font-size: 16px; + line-height: 26px; + text-align: center; +} + +.button { + margin-top: 40px; + padding-right: 40px; + padding-left: 40px; + border-radius: 20px; + background-image: radial-gradient(circle farthest-corner at 0% 0%, #f9cd69, #c58d38); + box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.2); +} + +.button-2 { + padding-left: 40px; +} + +.button-3 { + margin-top: 30px; + padding-right: 40px; + padding-left: 40px; + border-radius: 20px; + background-image: radial-gradient(circle farthest-corner at 0% 0%, #f9cd69, #c58d38); + box-shadow: 16px 13px 35px 0 rgba(56, 56, 56, 0.3); + font-family: 'Work Sans', sans-serif; +} + +.heading-2 { + margin-top: 60px; + font-family: 'Work Sans', sans-serif; + color: #383838; + font-size: 28px; + line-height: 33px; + font-weight: 600; +} + +.button-4 { + margin: 30px auto 40px; + padding-right: 40px; + padding-left: 40px; + border-radius: 20px; + background-image: radial-gradient(circle farthest-corner at 0% 0%, #616161, #c2c2c2); + box-shadow: 16px 13px 35px 0 rgba(56, 56, 56, 0.3); + font-family: 'Work Sans', sans-serif; +} + +.footer_01 { + max-width: 380px; +} + +.socialmedia { + display: flex; + max-width: 600px; + margin-top: 40px; + flex-direction: row-reverse; + justify-content: space-between; + flex-wrap: nowrap; + align-items: stretch; + grid-column-gap: 0px; + grid-row-gap: 0px; + text-align: center; +} + +.image { + position: relative; + display: block; + height: auto; + max-height: none; + max-width: none; + margin-top: 40px; +} + +.footer_02 { + display: inline; + max-width: 600px; + flex-direction: column; + justify-content: center; + align-items: center; + text-align: center; +} + +.footer_p1 { + margin-top: 30px; + -ms-grid-row-align: auto; + align-self: auto; + font-family: 'Work Sans', sans-serif; + color: #9ca0a8; + font-size: 16px; + line-height: 24px; + text-align: center; +} + +.footer_p2 { + display: flex; + max-width: 600px; + flex-direction: column; + justify-content: center; + align-items: center; + font-family: 'Work Sans', sans-serif; + color: #383838; + font-size: 16px; + line-height: 24px; + font-weight: 600; +} + +.container-2 { + max-width: 600px; +} + +.image-2 { + width: 30%; + max-width: none; + margin-top: 20px; +} + +.div-block { + display: flex; + margin-top: 20px; + margin-bottom: 40px; + flex-direction: row; + justify-content: center; + align-items: center; +} + +.terms_of_use { + padding-right: 15px; + padding-left: 15px; + font-family: 'Work Sans', sans-serif; + color: #9ca0a8; +} + +.text-block-3 { + color: #9ca0a8; +} + +.line_image { + width: 100%; + height: 13px; + margin-top: 40px; + background-image: linear-gradient(90deg, #c58d38, #c58d38 0%, #f3cd7c 35%, #dbb056 54%, #eec05f 63%, #cc9d3d); +} + +.line { + height: 13px; + margin-top: 40px; + background-image: linear-gradient(90deg, #c58d38, #f3cd7c 40%, #dbb056 55%, #eec05f 71%, #cc9d3d); +} + +@media screen and (max-width: 991px) { + .wrapper { + margin-top: 0px; + } + + .headline.h1 { + margin-top: 0px; + margin-bottom: 0px; + border-radius: 2px; + font-size: 36px; + line-height: 33px; + } + + .text-block { + margin-top: 40px; + font-size: 20px; + line-height: 26px; + } + + .background_01 { + margin-top: 40px; + } + + .content { + max-height: 520px; + max-width: 540px; + margin-top: 40px; + border-radius: 24px; + background-image: linear-gradient(180deg, #f5f5f5, #f5f5f5); + text-align: center; + } + + .heading { + display: flex; + flex-direction: column-reverse; + justify-content: flex-start; + align-items: stretch; + flex: 0 auto; + font-family: 'Work Sans', sans-serif; + color: #383838; + font-size: 22px; + line-height: 33px; + } + + .text-block-2 { + font-family: 'Work Sans', sans-serif; + font-size: 16px; + line-height: 26px; + } + + .p_content { + margin-top: 0px; + margin-right: 40px; + margin-left: 40px; + font-family: 'Work Sans', sans-serif; + text-align: center; + } + + .image { + max-width: 820px; + margin-left: -10px; + } + + .footer_p1 { + margin-top: 30px; + } +} + +@media screen and (max-width: 767px) { + .datum { + margin-right: 30px; + } + + .logo-head { + margin-left: 30px; + } + + .headline.h1 { + font-size: 24px; + } + + .text-block { + margin-top: 20px; + font-size: 18px; + } + + .content { + max-width: 500px; + margin-top: 20px; + } + + .heading { + margin-top: 30px; + font-size: 20px; + } + + .heading-2 { + margin-top: 40px; + font-size: 20px; + } + + .footer_p1 { + margin-top: 30px; + } + + .line_image { + margin-top: 30px; + } +} + +@media screen and (max-width: 479px) { + .datum { + margin-top: 15px; + margin-right: 20px; + font-size: 14px; + } + + .logo-head { + width: 40%; + max-width: 40%; + margin-left: 20px; + } + + .headline.h1 { + font-family: 'Work Sans', sans-serif; + font-size: 20px; + } + + .text-block { + font-size: 14px; + line-height: 20px; + } + + .content { + max-width: 280px; + } + + .heading { + display: flex; + margin-top: 60px; + font-size: 18px; + line-height: 26px; + } + + .p_content { + font-size: 14px; + line-height: 20px; + } + + .button-3 { + margin-top: 40px; + padding-right: 30px; + padding-left: 30px; + } + + .button-4 { + margin-bottom: 60px; + padding-right: 30px; + padding-left: 30px; + } + + .footer_01 { + display: flex; + max-width: 300px; + flex-direction: column; + justify-content: center; + align-items: center; + } + + .socialmedia { + display: flex; + width: 80%; + max-width: 300px; + justify-content: center; + flex-wrap: nowrap; + align-self: auto; + grid-auto-columns: 1fr; + grid-column-gap: 30px; + grid-row-gap: 30px; + -ms-grid-columns: 1fr 1fr; + grid-template-columns: 1fr 1fr; + -ms-grid-rows: auto auto; + grid-template-rows: auto auto; + } + + .footer_p1 { + margin-right: 20px; + margin-left: 20px; + font-size: 14px; + } + + .image-2 { + width: 40%; + } +} \ No newline at end of file diff --git a/backend/src/emails/templates/layout.pug b/backend/src/emails/templates/layout.pug new file mode 100644 index 000000000..3e459c422 --- /dev/null +++ b/backend/src/emails/templates/layout.pug @@ -0,0 +1,44 @@ +doctype html +html.w-mod-js.wf-worksans-n4-active.wf-worksans-n6-active.wf-worksans-n1-active.wf-worksans-n3-active.wf-worksans-n2-active.wf-worksans-n5-active.wf-worksans-n7-active.wf-worksans-n8-active.wf-worksans-n9-active.wf-active( + lang=locale + ) + head + meta( + content="text/html; charset=UTF-8" + http-equiv="content-type" + ) + meta(charset="utf-8") + title Passwort zurück setzen + meta( + name="viewport" + content="width=device-width, initial-scale=1" + ) + script( + type="text/javascript" + src="includes/webfont.js" + ) + script(type="text/javascript"). + WebFont.load({ google: { families: ["Work Sans:100,200,300,regular,500,600,700,800,900"] }}); + // [if lt IE 9]> Date: Wed, 3 May 2023 12:24:20 +0200 Subject: [PATCH 005/123] add initial email layout --- backend/src/emails/templates/layout.pug | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/emails/templates/layout.pug b/backend/src/emails/templates/layout.pug index 3e459c422..7d491897e 100644 --- a/backend/src/emails/templates/layout.pug +++ b/backend/src/emails/templates/layout.pug @@ -27,7 +27,7 @@ html.w-mod-js.wf-worksans-n4-active.wf-worksans-n6-active.wf-worksans-n1-active. .wf-force-outline-none[tabindex="-1"]:focus{outline:none;} style include includes/email.css - include includes/includes/webflow.css + include includes/webflow.css body include includes/header.pug From 39ecb65b25ec2d175b8ac44b8a43df71214a427f Mon Sep 17 00:00:00 2001 From: mahula Date: Fri, 5 May 2023 20:14:16 +0200 Subject: [PATCH 006/123] set correct url for gradido logo in email footer --- backend/src/emails/templates/includes/footer.pug | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/backend/src/emails/templates/includes/footer.pug b/backend/src/emails/templates/includes/footer.pug index 9f7c55ba6..66c1f062e 100644 --- a/backend/src/emails/templates/includes/footer.pug +++ b/backend/src/emails/templates/includes/footer.pug @@ -75,9 +75,8 @@ footer div(class="footer_p1")= t("general.contactOurSupport") div(class="footer_p2")= t("general.supportEmail") img.image-2( - alt="" - loading="lazy" - src="includes/images/logo_gradido.png" + alt="Gradido Logo" + src="https://gdd.gradido.net/img/brand/green.png" ) div(class="footer_p1") | Gradido-Akademie From b226dc42f341a29ba95fe11f56a0689fdf47ad8c Mon Sep 17 00:00:00 2001 From: mahula Date: Fri, 5 May 2023 20:40:11 +0200 Subject: [PATCH 007/123] add pug file for greeting --- backend/src/emails/templates/includes/greeting.pug | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 backend/src/emails/templates/includes/greeting.pug diff --git a/backend/src/emails/templates/includes/greeting.pug b/backend/src/emails/templates/includes/greeting.pug new file mode 100644 index 000000000..6693e23ca --- /dev/null +++ b/backend/src/emails/templates/includes/greeting.pug @@ -0,0 +1,6 @@ +//- This sets the greeting at the end of every e-mail +.text-block + p + = t('emails.general.sincerelyYours') + br + = t('emails.general.yourGradidoTeam') \ No newline at end of file From 019ba8f43f60f83749f3e738d8232fd764fbfd81 Mon Sep 17 00:00:00 2001 From: mahula Date: Sun, 7 May 2023 12:10:03 +0200 Subject: [PATCH 008/123] update backend locales --- backend/src/locales/de.json | 25 +++++++++++++++---------- backend/src/locales/en.json | 22 +++++++++++++--------- 2 files changed, 28 insertions(+), 19 deletions(-) diff --git a/backend/src/locales/de.json b/backend/src/locales/de.json index fd8847cc7..e310171ae 100644 --- a/backend/src/locales/de.json +++ b/backend/src/locales/de.json @@ -1,6 +1,7 @@ { "emails": { "accountActivation": { + "activateAccount": "Konto aktivieren", "duration": "Der Link hat eine Gültigkeit von {hours} Stunden und {minutes} Minuten. Sollte die Gültigkeit des Links bereits abgelaufen sein, kannst du dir hier einen neuen Link schicken lassen:", "emailRegistered": "deine E-Mail-Adresse wurde soeben bei Gradido registriert.", "pleaseClickLink": "Klicke bitte auf diesen Link, um die Registrierung abzuschließen und dein Gradido-Konto zu aktivieren:", @@ -8,6 +9,7 @@ "title": "E-Mail Überprüfung" }, "accountMultiRegistration": { + "contactSupport": "Support kontaktieren", "emailExists": "Es existiert jedoch zu deiner E-Mail-Adresse schon ein Konto.", "emailReused": "deine E-Mail-Adresse wurde soeben erneut benutzt, um bei Gradido ein Konto zu registrieren.", "ifYouAreNotTheOne": "Wenn du nicht derjenige bist, der versucht hat sich erneut zu registrieren, wende dich bitte an unseren Support:", @@ -39,14 +41,23 @@ "title": "Dein Gemeinwohl-Beitrag wurde abgelehnt", "toSeeContributionsAndMessages": "Um deine Gemeinwohl-Beiträge und dazugehörige Nachrichten zu sehen, gehe in deinem Gradido-Konto ins Menü „Schöpfen“ auf den Tab „Meine Beiträge“!" }, + "footer": { + "contactOurSupport": "Bei weiteren fragen kontaktiere bitte unseren Support.", + "imprint": "Impressum", + "imprintAddress": "Gradido-Akademie\nInstitut für Wirtschaftsbionik\nPfarrweg 2\n74653 Künzelsau\nDeutschland", + "imprintImageAlt": "Gradido-Akademie Logo", + "privacyPolicy": "Datenschutzerklärung", + "supportEmail": "support@gradido.com" + }, "general": { "amountGDD": "Betrag: {amountGDD} GDD", "detailsYouFindOnLinkToYourAccount": "Details zur Transaktion findest du in deinem Gradido-Konto:", - "doNotAnswer": "nicht antworten", "helloName": "Hallo {firstName} {lastName},", "linkToYourAccount": "Link zu deinem Konto:", + "newLink": "neuer Link", "orCopyLink": "oder kopiere den obigen Link in dein Browserfenster.", "pleaseDoNotReply": "Bitte antworte nicht auf diese E-Mail!", + "reset": "zurücksetzen", "sincerelyYours": "Liebe Grüße", "yourGradidoTeam": "dein Gradido-Team" }, @@ -55,7 +66,8 @@ "pleaseClickLink": "Wenn du es warst, klicke bitte auf den Link:", "subject": "Gradido: Passwort zurücksetzen", "title": "Passwort zurücksetzen", - "youOrSomeoneResetPassword": "du, oder jemand anderes, hast für dieses Konto ein Zurücksetzen des Passworts angefordert." + "toAccount": "Zum Konto", + "youOrSomeoneResetPassword": "du oder jemand anderes, hast für dieses Konto ein Zurücksetzen des Passworts angefordert." }, "transactionLinkRedeemed": { "hasRedeemedYourLink": "{senderFirstName} {senderLastName} ({senderEmail}) hat soeben deinen Link eingelöst.", @@ -70,13 +82,6 @@ } }, "general": { - "contactOurSupport": "Bei weiteren fragen kontaktiere bitte unseren Support.", - "decimalSeparator": ",", - "imprint": "Impressum", - "imprintAddress": "Gradido-Akademie\nInstitut für Wirtschaftsbionik\nPfarrweg 2\n74653 Künzelsau\nDeutschland", - "imprintImageAlt": "Gradido-Akademie Logo", - "imprintImageURL": "https://gdd.gradido.net/img/brand/green.png", - "privacyPolicy": "Datenschutzerklärung", - "supportEmail": "support@gradido.com" + "decimalSeparator": "," } } diff --git a/backend/src/locales/en.json b/backend/src/locales/en.json index a3c558641..cec572e5b 100644 --- a/backend/src/locales/en.json +++ b/backend/src/locales/en.json @@ -1,6 +1,7 @@ { "emails": { "accountActivation": { + "activateAccount": "Activate account", "duration": "The link has a validity of {hours} hours and {minutes} minutes. If the validity of the link has already expired, you can have a new link sent to you here:", "emailRegistered": "Your email address has just been registered with Gradido.", "pleaseClickLink": "Please click on this link to complete the registration and activate your Gradido account:", @@ -8,6 +9,7 @@ "title": "Email Verification" }, "accountMultiRegistration": { + "contactSupport": "Contact support", "emailExists": "However, an account already exists for your email address.", "emailReused": "Your email address has just been used again to register an account with Gradido.", "ifYouAreNotTheOne": "If you are not the one who tried to register again, please contact our support:", @@ -39,14 +41,23 @@ "title": "Your common good contribution was rejected", "toSeeContributionsAndMessages": "To see your common good contributions and related messages, go to the “Creation” menu in your Gradido account and click on the “My contributions” tab!" }, + "footer": { + "contactOurSupport": "If you have any further questions, please contact our support.", + "imprint": "Impressum", + "imprintAddress": "Gradido-Akademie\nInstitut für Wirtschaftsbionik\nPfarrweg 2\n74653 Künzelsau\nDeutschland", + "imprintImageAlt": "Gradido-Akademie Logo", + "privacyPolicy": "Privacy Policy", + "supportEmail": "support@gradido.com" + }, "general": { "amountGDD": "Amount: {amountGDD} GDD", "detailsYouFindOnLinkToYourAccount": "You can find transaction details in your Gradido account:", - "doNotAnswer": "do not answer", "helloName": "Hello {firstName} {lastName}", "linkToYourAccount": "Link to your account:", + "newLink": "new link", "orCopyLink": "or copy the link above into your browser window.", "pleaseDoNotReply": "Please do not reply to this email!", + "reset": "reset", "sincerelyYours": "Kind regards,", "yourGradidoTeam": "your Gradido team" }, @@ -70,13 +81,6 @@ } }, "general": { - "contactOurSupport": "If you have any further questions, please contact our support.", - "decimalSeparator": ".", - "imprint": "Impressum", - "imprintAddress": "Gradido-Akademie\nInstitut für Wirtschaftsbionik\nPfarrweg 2\n74653 Künzelsau\nDeutschland", - "imprintImageAlt": "Gradido-Akademie Logo", - "imprintImageURL": "https://gdd.gradido.net/img/brand/green.png", - "privacyPolicy": "Privacy Policy", - "supportEmail": "support@gradido.com" + "decimalSeparator": "." } } From 400fe031baf31fe0b65b9230c503c8f09b8fde0c Mon Sep 17 00:00:00 2001 From: mahula Date: Sun, 7 May 2023 13:00:34 +0200 Subject: [PATCH 009/123] apply new layout to account activation email template --- .../templates/accountActivation/html.pug | 39 +++++++++---------- 1 file changed, 19 insertions(+), 20 deletions(-) diff --git a/backend/src/emails/templates/accountActivation/html.pug b/backend/src/emails/templates/accountActivation/html.pug index 6075fa8a8..ee4c398e3 100644 --- a/backend/src/emails/templates/accountActivation/html.pug +++ b/backend/src/emails/templates/accountActivation/html.pug @@ -1,20 +1,19 @@ -doctype html -html(lang=locale) - head - title= t('emails.accountActivation.subject') - body - h1(style='margin-bottom: 24px;')= t('emails.accountActivation.subject') - #container.col - include ../hello.pug - p= t('emails.accountActivation.emailRegistered') - p - = t('emails.accountActivation.pleaseClickLink') - br - a(href=activationLink) #{activationLink} - br - = t('emails.general.orCopyLink') - p - = t('emails.accountActivation.duration', { hours: timeDurationObject.hours, minutes: timeDurationObject.minutes }) - br - a(href=resendLink) #{resendLink} - include ../greatingFormularImprint.pug +extend ../layout.pug + +block content + .wrapper.wf-section + .w-container(class="wrapper_head") + h1.headline.h1= t('emails.accountActivation.title') + .text-block + include ../includes/salutation.pug + p= t('emails.accountActivation.emailRegistered') + .content.w-container + h2.heading= t('emails.accountActivation.title') + div(class="p_content")= t('emails.accountActivation.pleaseClickLink') + a.button-3.w-button(href=activationLink) #{t('emails.accountActivation.activateAccount')} + //- div(class="p_content")= t('emails.general.orCopyLink') + // TODO make this a reusable block (block new-link) + h2.heading-2 Neuen gültigen Link anfordern + div(class="p_content")= t('emails.accountActivation.duration', { hours: timeDurationObject.hours, minutes: timeDurationObject.minutes }) + br + a.button-4.w-button(href=resendLink) #{t('emails.general.newLink')} From ad0431fff3bff9bc6aa59cf0bd60360865858a41 Mon Sep 17 00:00:00 2001 From: mahula Date: Sun, 7 May 2023 13:00:59 +0200 Subject: [PATCH 010/123] apply new layout to multi account activation email template --- .../accountMultiRegistration/html.pug | 44 +++++++++---------- 1 file changed, 21 insertions(+), 23 deletions(-) diff --git a/backend/src/emails/templates/accountMultiRegistration/html.pug b/backend/src/emails/templates/accountMultiRegistration/html.pug index f8570422c..8f04a6d94 100644 --- a/backend/src/emails/templates/accountMultiRegistration/html.pug +++ b/backend/src/emails/templates/accountMultiRegistration/html.pug @@ -1,23 +1,21 @@ -doctype html -html(lang=locale) - head - title= t('emails.accountMultiRegistration.subject') - body - h1(style='margin-bottom: 24px;')= t('emails.accountMultiRegistration.subject') - #container.col - include ../hello.pug - p - = t('emails.accountMultiRegistration.emailReused') - br - = t('emails.accountMultiRegistration.emailExists') - p - = t('emails.accountMultiRegistration.onForgottenPasswordClickLink') - br - a(href=resendLink) #{resendLink} - br - = t('emails.accountMultiRegistration.onForgottenPasswordCopyLink') - p - = t('emails.accountMultiRegistration.ifYouAreNotTheOne') - br - a(href='mailto:' + supportEmail)= supportEmail - include ../greatingFormularImprint.pug +extend ../layout.pug + +block content + .wrapper.wf-section + .w-container(class="wrapper_head") + h1.headline.h1= t('emails.accountMultiRegistration.title') + .text-block + include ../includes/salutation.pug + p + = t('emails.accountMultiRegistration.emailReused') + br + = t('emails.accountMultiRegistration.emailExists') + .content.w-container + h2.heading= t('emails.resetPassword.title') + div(class="p_content")= t('emails.accountMultiRegistration.emailExists') + a.button-3.w-button(href=resendLink) #{t('emails.general.reset')} + //- div(class="p_content")= t('emails.accountMultiRegistration.onForgottenPasswordCopyLink') + h2.heading-2 Support kontaktieren + div(class="p_content")= t('emails.accountMultiRegistration.ifYouAreNotTheOne') + br + a(href='mailto:' + supportEmail)= supportEmail From 936798464ffc41e2ea29b2faf3a98f0de100fe01 Mon Sep 17 00:00:00 2001 From: mahula Date: Sun, 7 May 2023 13:01:36 +0200 Subject: [PATCH 011/123] apply new layout to password reset email template --- .../emails/templates/resetPassword/html.pug | 38 +++++++++---------- 1 file changed, 18 insertions(+), 20 deletions(-) diff --git a/backend/src/emails/templates/resetPassword/html.pug b/backend/src/emails/templates/resetPassword/html.pug index 53ffbcd04..bc6f45404 100644 --- a/backend/src/emails/templates/resetPassword/html.pug +++ b/backend/src/emails/templates/resetPassword/html.pug @@ -1,20 +1,18 @@ -doctype html -html(lang=locale) - head - title= t('emails.resetPassword.subject') - body - h1(style='margin-bottom: 24px;')= t('emails.resetPassword.subject') - #container.col - include ../hello.pug - p= t('emails.resetPassword.youOrSomeoneResetPassword') - p - = t('emails.resetPassword.pleaseClickLink') - br - a(href=resetLink) #{resetLink} - br - = t('emails.general.orCopyLink') - p - = t('emails.resetPassword.duration', { hours: timeDurationObject.hours, minutes: timeDurationObject.minutes }) - br - a(href=resendLink) #{resendLink} - include ../greatingFormularImprint.pug +extends ../layout.pug + +block content + .wrapper.wf-section + .w-container(class="wrapper_head") + h1.headline.h1= t('emails.resetPassword.title') + .text-block + include ../includes/salutation.pug + p= t('emails.resetPassword.youOrSomeoneResetPassword') + .content.w-container + h2.heading= t('emails.resetPassword.title') + div(class="p_content")= t('emails.resetPassword.pleaseClickLink') + a.button-3.w-button(href=resetLink) #{t('emails.general.reset')} + //- div(class="p_content")= t('emails.general.orCopyLink') + h2.heading-2 Neuen gültigen Link anfordern + div(class="p_content")= t('emails.resetPassword.duration', { hours: timeDurationObject.hours, minutes: timeDurationObject.minutes }) + br + a.button-4.w-button(href=resendLink) #{t('emails.general.newLink')} From 7f8f2bc86c4bb0788d742ecf82b5768c348f3951 Mon Sep 17 00:00:00 2001 From: mahula Date: Sun, 7 May 2023 13:03:58 +0200 Subject: [PATCH 012/123] move email salutation to includes --- .../src/emails/templates/{hello.pug => includes/salutation.pug} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename backend/src/emails/templates/{hello.pug => includes/salutation.pug} (100%) diff --git a/backend/src/emails/templates/hello.pug b/backend/src/emails/templates/includes/salutation.pug similarity index 100% rename from backend/src/emails/templates/hello.pug rename to backend/src/emails/templates/includes/salutation.pug From 0cb38b3104a679b68d9ae1671e68f8b2dac7cf75 Mon Sep 17 00:00:00 2001 From: mahula Date: Sun, 7 May 2023 13:05:24 +0200 Subject: [PATCH 013/123] move greeting formula to separate pug file --- backend/src/emails/templates/layout.pug | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/backend/src/emails/templates/layout.pug b/backend/src/emails/templates/layout.pug index 7d491897e..e0b01c577 100644 --- a/backend/src/emails/templates/layout.pug +++ b/backend/src/emails/templates/layout.pug @@ -30,15 +30,10 @@ html.w-mod-js.wf-worksans-n4-active.wf-worksans-n6-active.wf-worksans-n1-active. include includes/webflow.css body - include includes/header.pug + //- include includes/header.pug block content - //- final formula - .text-block - p - = t('emails.general.sincerelyYours') - br - = t('emails.general.yourGradidoTeam') + include includes/greeting.pug include includes/footer.pug From ea4f49bcce539ba0bb9fa748ce37c030dd5a1fa8 Mon Sep 17 00:00:00 2001 From: mahula Date: Sun, 7 May 2023 13:06:16 +0200 Subject: [PATCH 014/123] update footer file --- backend/src/emails/templates/includes/footer.pug | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/backend/src/emails/templates/includes/footer.pug b/backend/src/emails/templates/includes/footer.pug index 66c1f062e..aa595df0b 100644 --- a/backend/src/emails/templates/includes/footer.pug +++ b/backend/src/emails/templates/includes/footer.pug @@ -72,8 +72,8 @@ footer .line .wf-section(class="footer_02") .container-2.w-container - div(class="footer_p1")= t("general.contactOurSupport") - div(class="footer_p2")= t("general.supportEmail") + div(class="footer_p1")= t("emails.footer.contactOurSupport") + div(class="footer_p2")= t("emails.footer.supportEmail") img.image-2( alt="Gradido Logo" src="https://gdd.gradido.net/img/brand/green.png" @@ -89,10 +89,10 @@ footer class="terms_of_use" href="https://gradido.net/de/impressum/" target="_blank" - )= t("general.imprint") + )= t("emails.footer.imprint") .text-block-3 | a( class="terms_of_use" href="https://gradido.net/de/datenschutz/" target="_blank" - )= t("general.privacyPolicy") + )= t("emails.footer.privacyPolicy") From b6bb9a4fbd73e1b6b1048f64326a93198f0690ed Mon Sep 17 00:00:00 2001 From: mahula Date: Sun, 7 May 2023 13:10:32 +0200 Subject: [PATCH 015/123] remove logo iamge file --- .../templates/includes/images/logo_gradido.png | Bin 12860 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 backend/src/emails/templates/includes/images/logo_gradido.png diff --git a/backend/src/emails/templates/includes/images/logo_gradido.png b/backend/src/emails/templates/includes/images/logo_gradido.png deleted file mode 100644 index ce09e0eeb00ae31c6ec3b12e9744cd894a70eac2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12860 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 From 79a1cd22d738bfca70af825b5fcb9e231993c256 Mon Sep 17 00:00:00 2001 From: mahula Date: Sun, 7 May 2023 13:53:41 +0200 Subject: [PATCH 016/123] add pug plugin to linter --- backend/.eslintrc.js | 11 ++++++- backend/package.json | 1 + backend/yarn.lock | 76 +++++++++++++++++++++++++------------------- 3 files changed, 54 insertions(+), 34 deletions(-) diff --git a/backend/.eslintrc.js b/backend/.eslintrc.js index 0e63a9bfe..cf43ee171 100644 --- a/backend/.eslintrc.js +++ b/backend/.eslintrc.js @@ -5,7 +5,16 @@ module.exports = { node: true, }, parser: '@typescript-eslint/parser', - plugins: ['prettier', '@typescript-eslint', 'type-graphql', 'jest', 'import', 'n', 'promise'], + plugins: [ + 'prettier', + 'pug', + '@typescript-eslint', + 'type-graphql', + 'jest', + 'import', + 'n', + 'promise', + ], extends: [ 'standard', 'eslint:recommended', diff --git a/backend/package.json b/backend/package.json index c5e0df3c5..6a1996616 100644 --- a/backend/package.json +++ b/backend/package.json @@ -68,6 +68,7 @@ "eslint-plugin-n": "^15.7.0", "eslint-plugin-prettier": "^4.2.1", "eslint-plugin-promise": "^6.1.1", + "eslint-plugin-pug": "^1.2.5", "eslint-plugin-type-graphql": "^1.0.0", "faker": "^5.5.3", "graphql-tag": "^2.12.6", diff --git a/backend/yarn.lock b/backend/yarn.lock index 1bc8c64fd..3832c9a30 100644 --- a/backend/yarn.lock +++ b/backend/yarn.lock @@ -394,14 +394,14 @@ resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.4.0.tgz#3e61c564fcd6b921cb789838631c5ee44df09403" integrity sha512-A9983Q0LnDGdLPjxyXQ00sbV+K+O+ko2Dr+CZigbHWtX9pNfxlaBkMR8X1CztI73zuEyEBXTVjx7CE+/VSwDiQ== -"@eslint/eslintrc@^2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.0.2.tgz#01575e38707add677cf73ca1589abba8da899a02" - integrity sha512-3W4f5tDUra+pA+FzgugqL2pRimUTDJWKr7BINqOpkZrC0uYI0NIc0/JFgBROCU07HR6GieA5m3/rsPIhDmCXTQ== +"@eslint/eslintrc@^2.0.3": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.0.3.tgz#4910db5505f4d503f27774bf356e3704818a0331" + integrity sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ== dependencies: ajv "^6.12.4" debug "^4.3.2" - espree "^9.5.1" + espree "^9.5.2" globals "^13.19.0" ignore "^5.2.0" import-fresh "^3.2.1" @@ -409,10 +409,10 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@8.37.0": - version "8.37.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.37.0.tgz#cf1b5fa24217fe007f6487a26d765274925efa7d" - integrity sha512-x5vzdtOOGgFVDCUs81QRB2+liax8rFg3+7hqM+QhBG0/G3F1ZsoYl97UrqgHgQ9KKT7G6c4V+aTUCgu/n22v1A== +"@eslint/js@8.40.0": + version "8.40.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.40.0.tgz#3ba73359e11f5a7bd3e407f70b3528abfae69cec" + integrity sha512-ElyB54bJIhXQYVKjDSvCkPO1iU1tSAeVQJbllWJq1XQSmmA4dgFk8CbiBGpiOPxleE48vDogxCtmMYku4HSVLA== "@graphql-typed-document-node/core@^3.1.1": version "3.1.1" @@ -3005,6 +3005,16 @@ eslint-plugin-promise@^6.1.1: resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz#269a3e2772f62875661220631bd4dafcb4083816" integrity sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig== +eslint-plugin-pug@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/eslint-plugin-pug/-/eslint-plugin-pug-1.2.5.tgz#a83475c4e7949ea103a89b48057c900d3a4b97f5" + integrity sha512-rxsQI8ch1pUtP6jBBbmx3dqesZ+5+FdFgzP61pQgIWUezg5YwV+we0ROqk1JF71xdUrMKJkKbJglJ6lHrsOSzg== + dependencies: + lodash "^4.17.20" + pug-lexer "^5.0.0" + pug-parser "^6.0.0" + pug-walk "^2.0.0" + eslint-plugin-type-graphql@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/eslint-plugin-type-graphql/-/eslint-plugin-type-graphql-1.0.0.tgz#d348560ed628d6ca1dfcea35a02891432daafe6b" @@ -3020,10 +3030,10 @@ eslint-scope@^5.1.1: esrecurse "^4.3.0" estraverse "^4.1.1" -eslint-scope@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" - integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== +eslint-scope@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.0.tgz#f21ebdafda02352f103634b96dd47d9f81ca117b" + integrity sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw== dependencies: esrecurse "^4.3.0" estraverse "^5.2.0" @@ -3057,20 +3067,20 @@ eslint-visitor-keys@^3.3.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== -eslint-visitor-keys@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz#c7f0f956124ce677047ddbc192a68f999454dedc" - integrity sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ== +eslint-visitor-keys@^3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz#c22c48f48942d08ca824cc526211ae400478a994" + integrity sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA== eslint@^8.37.0: - version "8.37.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.37.0.tgz#1f660ef2ce49a0bfdec0b0d698e0b8b627287412" - integrity sha512-NU3Ps9nI05GUoVMxcZx1J8CNR6xOvUT4jAUMH5+z8lpp3aEdPVCImKw6PWG4PY+Vfkpr+jvMpxs/qoE7wq0sPw== + version "8.40.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.40.0.tgz#a564cd0099f38542c4e9a2f630fa45bf33bc42a4" + integrity sha512-bvR+TsP9EHL3TqNtj9sCNJVAFK3fBN8Q7g5waghxyRsPLIMwL73XSKnZFK0hk/O2ANC+iAoq6PWMQ+IfBAJIiQ== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@eslint-community/regexpp" "^4.4.0" - "@eslint/eslintrc" "^2.0.2" - "@eslint/js" "8.37.0" + "@eslint/eslintrc" "^2.0.3" + "@eslint/js" "8.40.0" "@humanwhocodes/config-array" "^0.11.8" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" @@ -3080,9 +3090,9 @@ eslint@^8.37.0: debug "^4.3.2" doctrine "^3.0.0" escape-string-regexp "^4.0.0" - eslint-scope "^7.1.1" - eslint-visitor-keys "^3.4.0" - espree "^9.5.1" + eslint-scope "^7.2.0" + eslint-visitor-keys "^3.4.1" + espree "^9.5.2" esquery "^1.4.2" esutils "^2.0.2" fast-deep-equal "^3.1.3" @@ -3108,14 +3118,14 @@ eslint@^8.37.0: strip-json-comments "^3.1.0" text-table "^0.2.0" -espree@^9.5.1: - version "9.5.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.5.1.tgz#4f26a4d5f18905bf4f2e0bd99002aab807e96dd4" - integrity sha512-5yxtHSZXRSW5pvv3hAlXM5+/Oswi1AUFqBmbibKb5s6bp3rGIDkyXU6xCoyuuLhijr4SFwPrXRoZjz0AZDN9tg== +espree@^9.5.2: + version "9.5.2" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.5.2.tgz#e994e7dc33a082a7a82dceaf12883a829353215b" + integrity sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw== dependencies: acorn "^8.8.0" acorn-jsx "^5.3.2" - eslint-visitor-keys "^3.4.0" + eslint-visitor-keys "^3.4.1" esprima@^4.0.0, esprima@^4.0.1: version "4.0.1" @@ -3649,7 +3659,7 @@ graceful-fs@^4.1.6, graceful-fs@^4.2.0: integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== "gradido-database@file:../database": - version "1.19.1" + version "1.20.0" dependencies: "@types/uuid" "^8.3.4" cross-env "^7.0.3" @@ -5103,7 +5113,7 @@ lodash.sortby@^4.7.0: resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= -lodash@4.x, lodash@^4.17.21, lodash@^4.7.0: +lodash@4.x, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.7.0: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -5966,7 +5976,7 @@ pug-filters@^4.0.0: pug-walk "^2.0.0" resolve "^1.15.1" -pug-lexer@^5.0.1: +pug-lexer@^5.0.0, pug-lexer@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/pug-lexer/-/pug-lexer-5.0.1.tgz#ae44628c5bef9b190b665683b288ca9024b8b0d5" integrity sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w== From bfc943d10cec5ec4ea1479e510c3ed6bba03e228 Mon Sep 17 00:00:00 2001 From: mahula Date: Sun, 7 May 2023 15:08:20 +0200 Subject: [PATCH 017/123] apply pug layout to contribution related email templates --- .../addedContributionMessage/html.pug | 31 ++++++++--------- .../templates/contributionConfirmed/html.pug | 34 ++++++++++--------- .../templates/contributionDeleted/html.pug | 32 ++++++++--------- .../templates/contributionDenied/html.pug | 32 ++++++++--------- .../emails/templates/includes/doNotReply.pug | 1 + backend/src/locales/de.json | 14 +++++--- backend/src/locales/en.json | 21 +++++++----- 7 files changed, 88 insertions(+), 77 deletions(-) create mode 100644 backend/src/emails/templates/includes/doNotReply.pug diff --git a/backend/src/emails/templates/addedContributionMessage/html.pug b/backend/src/emails/templates/addedContributionMessage/html.pug index e7410c0f0..f7c6449c2 100644 --- a/backend/src/emails/templates/addedContributionMessage/html.pug +++ b/backend/src/emails/templates/addedContributionMessage/html.pug @@ -1,16 +1,15 @@ -doctype html -html(lang=locale) - head - title= t('emails.addedContributionMessage.subject') - body - h1(style='margin-bottom: 24px;')= t('emails.addedContributionMessage.subject') - #container.col - include ../hello.pug - p= t('emails.addedContributionMessage.commonGoodContributionMessage', { senderFirstName, senderLastName, contributionMemo }) - p= t('emails.addedContributionMessage.toSeeAndAnswerMessage') - p - = t('emails.general.linkToYourAccount') - = " " - a(href=overviewURL) #{overviewURL} - p= t('emails.general.pleaseDoNotReply') - include ../greatingFormularImprint.pug +extend ../layout.pug + +block content + .wrapper.wf-section + .w-container(class="wrapper_head") + h1.headline.h1= t('emails.addedContributionMessage.title') + .text-block + include ../includes/salutation.pug + p= t('emails.addedContributionMessage.commonGoodContributionMessage', { senderFirstName, senderLastName, contributionMemo }) + .content.w-container + h2.heading= t('emails.addedContributionMessage.readMessage') + div(class="p_content")= t('emails.addedContributionMessage.toSeeAndAnswerMessage') + a.button-3.w-button(href="https://gdd.gradido.net/community/contribution") #{t('emails.general.toAccount')} + + include ../includes/doNotReply.pug diff --git a/backend/src/emails/templates/contributionConfirmed/html.pug b/backend/src/emails/templates/contributionConfirmed/html.pug index 4ff17ffd4..984572acd 100644 --- a/backend/src/emails/templates/contributionConfirmed/html.pug +++ b/backend/src/emails/templates/contributionConfirmed/html.pug @@ -1,16 +1,18 @@ -doctype html -html(lang=locale) - head - title= t('emails.contributionConfirmed.subject') - body - h1(style='margin-bottom: 24px;')= t('emails.contributionConfirmed.subject') - #container.col - include ../hello.pug - p= t('emails.contributionConfirmed.commonGoodContributionConfirmed', { senderFirstName, senderLastName, contributionMemo }) - p= t('emails.general.amountGDD', { amountGDD: contributionAmount }) - p - = t('emails.general.linkToYourAccount') - = " " - a(href=overviewURL) #{overviewURL} - p= t('emails.general.pleaseDoNotReply') - include ../greatingFormularImprint.pug +extend ../layout.pug + +block content + .wrapper.wf-section + .w-container(class="wrapper_head") + h1.headline.h1= t('emails.contributionConfirmed.title') + .text-block + include ../includes/salutation.pug + p= t('emails.contributionConfirmed.commonGoodContributionConfirmed', { senderFirstName, senderLastName }) + .content.w-container + h2.heading= t('emails.general.contributionDetails') + div(class="p_content") + = t('emails.general.amountGDD') + br + = t('emails.general.contribution') + a.button-3.w-button(href="https://gdd.gradido.net/community/contributions") #{t('emails.general.toAccount')} + + include ../includes/doNotReply.pug \ No newline at end of file diff --git a/backend/src/emails/templates/contributionDeleted/html.pug b/backend/src/emails/templates/contributionDeleted/html.pug index d6b3ea207..ebf16be28 100644 --- a/backend/src/emails/templates/contributionDeleted/html.pug +++ b/backend/src/emails/templates/contributionDeleted/html.pug @@ -1,16 +1,16 @@ -doctype html -html(lang=locale) - head - title= t('emails.contributionDeleted.subject') - body - h1(style='margin-bottom: 24px;')= t('emails.contributionDeleted.subject') - #container.col - include ../hello.pug - p= t('emails.contributionDeleted.commonGoodContributionDeleted', { senderFirstName, senderLastName, contributionMemo }) - p= t('emails.contributionDeleted.toSeeContributionsAndMessages') - p - = t('emails.general.linkToYourAccount') - = " " - a(href=overviewURL) #{overviewURL} - p= t('emails.general.pleaseDoNotReply') - include ../greatingFormularImprint.pug +extend ../layout.pug + +block content + .wrapper.wf-section + .w-container(class="wrapper_head") + h1.headline.h1= t('emails.contributionDeleted.title') + .text-block + include ../includes/salutation.pug + p= t('emails.contributionDeleted.commonGoodContributionDeleted', { contributionMemo, senderFirstName, senderLastName }) + .content.w-container + h2.heading= t('emails.general.contributionDetails') + div(class="p_content") + = t('emails.contribution.toSeeContributionsAndMessages') + a.button-3.w-button(href="https://gdd.gradido.net/community/contributions") #{t('emails.general.toAccount')} + + include ../includes/doNotReply.pug diff --git a/backend/src/emails/templates/contributionDenied/html.pug b/backend/src/emails/templates/contributionDenied/html.pug index a324374a7..f26ff74ef 100644 --- a/backend/src/emails/templates/contributionDenied/html.pug +++ b/backend/src/emails/templates/contributionDenied/html.pug @@ -1,16 +1,16 @@ -doctype html -html(lang=locale) - head - title= t('emails.contributionDenied.subject') - body - h1(style='margin-bottom: 24px;')= t('emails.contributionDenied.subject') - #container.col - include ../hello.pug - p= t('emails.contributionDenied.commonGoodContributionDenied', { senderFirstName, senderLastName, contributionMemo }) - p= t('emails.contributionDenied.toSeeContributionsAndMessages') - p - = t('emails.general.linkToYourAccount') - = " " - a(href=overviewURL) #{overviewURL} - p= t('emails.general.pleaseDoNotReply') - include ../greatingFormularImprint.pug +extend ../layout.pug + +block content + .wrapper.wf-section + .w-container(class="wrapper_head") + h1.headline.h1= t('emails.contributionDenied.title') + .text-block + include ../includes/salutation.pug + p= t('emails.contributionDenied.commonGoodContributionDenied', { contributionMemo, senderFirstName, senderLastName }) + .content.w-container + h2.heading= t('emails.general.contributionDetails') + div(class="p_content") + = t('emails.contribution.toSeeContributionsAndMessages') + a.button-3.w-button(href="https://gdd.gradido.net/community/contributions") #{t('emails.general.toAccount')} + + include ../includes/doNotReply.pug diff --git a/backend/src/emails/templates/includes/doNotReply.pug b/backend/src/emails/templates/includes/doNotReply.pug new file mode 100644 index 000000000..506a5d0db --- /dev/null +++ b/backend/src/emails/templates/includes/doNotReply.pug @@ -0,0 +1 @@ +div(class="p_content")= t('emails.general.pleaseDoNotReply') \ No newline at end of file diff --git a/backend/src/locales/de.json b/backend/src/locales/de.json index e310171ae..c7e689d78 100644 --- a/backend/src/locales/de.json +++ b/backend/src/locales/de.json @@ -20,12 +20,16 @@ }, "addedContributionMessage": { "commonGoodContributionMessage": "du hast zu deinem Gemeinwohl-Beitrag „{contributionMemo}“ eine Nachricht von {senderFirstName} {senderLastName} erhalten.", + "readMessage": "Nachricht lesen und beantworten", "subject": "Gradido: Nachricht zu deinem Gemeinwohl-Beitrag", "title": "Nachricht zu deinem Gemeinwohl-Beitrag", - "toSeeAndAnswerMessage": "Um die Nachricht zu sehen und darauf zu antworten, gehe in deinem Gradido-Konto ins Menü „Schöpfen“ auf den Tab „Meine Beiträge“!" + "toSeeAndAnswerMessage": "Um die Nachricht zu sehen und darauf zu antworten, gehe in deinem Gradido-Konto ins Menü „Schöpfen“ auf den Tab „Meine Beiträge“." + }, + "contribution": { + "toSeeContributionsAndMessages": "Um deine Gemeinwohl-Beiträge und dazugehörige Nachrichten zu sehen, gehe in deinem Gradido-Konto ins Menü „Schöpfen“ auf den Tab „Meine Beiträge“." }, "contributionConfirmed": { - "commonGoodContributionConfirmed": "dein Gemeinwohl-Beitrag „{contributionMemo}“ wurde soeben von {senderFirstName} {senderLastName} bestätigt und in deinem Gradido-Konto gutgeschrieben.", + "commonGoodContributionConfirmed": "dein Gemeinwohl-Beitrag wurde soeben von {senderFirstName} {senderLastName} bestätigt und in deinem Gradido-Konto gutgeschrieben.", "subject": "Gradido: Dein Gemeinwohl-Beitrag wurde bestätigt", "title": "Dein Gemeinwohl-Beitrag wurde bestätigt" }, @@ -33,13 +37,11 @@ "commonGoodContributionDeleted": "dein Gemeinwohl-Beitrag „{contributionMemo}“ wurde von {senderFirstName} {senderLastName} gelöscht.", "subject": "Gradido: Dein Gemeinwohl-Beitrag wurde gelöscht", "title": "Dein Gemeinwohl-Beitrag wurde gelöscht", - "toSeeContributionsAndMessages": "Um deine Gemeinwohl-Beiträge und dazugehörige Nachrichten zu sehen, gehe in deinem Gradido-Konto ins Menü „Schöpfen“ auf den Tab „Meine Beiträge“!" }, "contributionDenied": { "commonGoodContributionDenied": "dein Gemeinwohl-Beitrag „{contributionMemo}“ wurde von {senderFirstName} {senderLastName} abgelehnt.", "subject": "Gradido: Dein Gemeinwohl-Beitrag wurde abgelehnt", "title": "Dein Gemeinwohl-Beitrag wurde abgelehnt", - "toSeeContributionsAndMessages": "Um deine Gemeinwohl-Beiträge und dazugehörige Nachrichten zu sehen, gehe in deinem Gradido-Konto ins Menü „Schöpfen“ auf den Tab „Meine Beiträge“!" }, "footer": { "contactOurSupport": "Bei weiteren fragen kontaktiere bitte unseren Support.", @@ -51,6 +53,8 @@ }, "general": { "amountGDD": "Betrag: {amountGDD} GDD", + "contribution": "Gemeinwohl-Beitrag: {contributionMemo}", + "contributionDetails": "Beitragsdetails", "detailsYouFindOnLinkToYourAccount": "Details zur Transaktion findest du in deinem Gradido-Konto:", "helloName": "Hallo {firstName} {lastName},", "linkToYourAccount": "Link zu deinem Konto:", @@ -59,6 +63,7 @@ "pleaseDoNotReply": "Bitte antworte nicht auf diese E-Mail!", "reset": "zurücksetzen", "sincerelyYours": "Liebe Grüße", + "toAccount": "Zum Konto", "yourGradidoTeam": "dein Gradido-Team" }, "resetPassword": { @@ -66,7 +71,6 @@ "pleaseClickLink": "Wenn du es warst, klicke bitte auf den Link:", "subject": "Gradido: Passwort zurücksetzen", "title": "Passwort zurücksetzen", - "toAccount": "Zum Konto", "youOrSomeoneResetPassword": "du oder jemand anderes, hast für dieses Konto ein Zurücksetzen des Passworts angefordert." }, "transactionLinkRedeemed": { diff --git a/backend/src/locales/en.json b/backend/src/locales/en.json index cec572e5b..637f47715 100644 --- a/backend/src/locales/en.json +++ b/backend/src/locales/en.json @@ -20,26 +20,28 @@ }, "addedContributionMessage": { "commonGoodContributionMessage": "you have received a message from {senderFirstName} {senderLastName} regarding your common good contribution “{contributionMemo}”.", + "readMessage": "Read and reply to message", "subject": "Gradido: Message about your common good contribution", "title": "Message about your common good contribution", - "toSeeAndAnswerMessage": "To view and reply to the message, go to the “Creation” menu in your Gradido account and click on the “My contributions” tab!" + "toSeeAndAnswerMessage": "To view and reply to the message, go to the “Creation” menu in your Gradido account and click on the “My contributions” tab." + }, + "contribution": { + "toSeeContributionsAndMessages": "To see your common good contributions and related messages, go to the “Creation” menu in your Gradido account and click on the “My contributions” tab." }, "contributionConfirmed": { - "commonGoodContributionConfirmed": "Your public good contribution “{contributionMemo}” has just been confirmed by {senderFirstName} {senderLastName} and credited to your Gradido account.", + "commonGoodContributionConfirmed": "Your common good contribution has just been confirmed by {senderFirstName} {senderLastName} and credited to your Gradido account.", "subject": "Gradido: Your contribution to the common good was confirmed", "title": "Your contribution to the common good was confirmed" }, "contributionDeleted": { - "commonGoodContributionDeleted": "Your public good contribution “{contributionMemo}” was deleted by {senderFirstName} {senderLastName}.", + "commonGoodContributionDeleted": "Your common good contribution “{contributionMemo}” was deleted by {senderFirstName} {senderLastName}.", "subject": "Gradido: Your common good contribution was deleted", - "title": "Your common good contribution was deleted", - "toSeeContributionsAndMessages": "To see your common good contributions and related messages, go to the “Creation” menu in your Gradido account and click on the “My contributions” tab!" + "title": "Your common good contribution was deleted" }, "contributionDenied": { - "commonGoodContributionDenied": "Your public good contribution “{contributionMemo}” was rejected by {senderFirstName} {senderLastName}.", + "commonGoodContributionDenied": "Your common good contribution “{contributionMemo}” was rejected by {senderFirstName} {senderLastName}.", "subject": "Gradido: Your common good contribution was rejected", - "title": "Your common good contribution was rejected", - "toSeeContributionsAndMessages": "To see your common good contributions and related messages, go to the “Creation” menu in your Gradido account and click on the “My contributions” tab!" + "title": "Your common good contribution was rejected" }, "footer": { "contactOurSupport": "If you have any further questions, please contact our support.", @@ -51,6 +53,8 @@ }, "general": { "amountGDD": "Amount: {amountGDD} GDD", + "contribution": "Contribution: : {contributionMemo}", + "contributionDetails": "Contribution details", "detailsYouFindOnLinkToYourAccount": "You can find transaction details in your Gradido account:", "helloName": "Hello {firstName} {lastName}", "linkToYourAccount": "Link to your account:", @@ -59,6 +63,7 @@ "pleaseDoNotReply": "Please do not reply to this email!", "reset": "reset", "sincerelyYours": "Kind regards,", + "toAccount": "To account", "yourGradidoTeam": "your Gradido team" }, "resetPassword": { From 5139209d706f70be67b1793c823ebffc808a0a71 Mon Sep 17 00:00:00 2001 From: mahula Date: Mon, 8 May 2023 09:03:37 +0200 Subject: [PATCH 018/123] apply layout to transaction related email templates --- .../transactionLinkRedeemed/html.pug | 31 ++++++++++--------- .../templates/transactionReceived/html.pug | 31 ++++++++++--------- backend/src/locales/de.json | 5 +-- backend/src/locales/en.json | 1 + 4 files changed, 36 insertions(+), 32 deletions(-) diff --git a/backend/src/emails/templates/transactionLinkRedeemed/html.pug b/backend/src/emails/templates/transactionLinkRedeemed/html.pug index 30146e27f..1602a0072 100644 --- a/backend/src/emails/templates/transactionLinkRedeemed/html.pug +++ b/backend/src/emails/templates/transactionLinkRedeemed/html.pug @@ -1,19 +1,20 @@ -doctype html -html(lang=locale) - head - title= t('emails.transactionLinkRedeemed.subject', { senderFirstName, senderLastName }) - body - h1(style='margin-bottom: 24px;')= t('emails.transactionLinkRedeemed.subject', { senderFirstName, senderLastName }) - #container.col - include ../hello.pug - p= t('emails.transactionLinkRedeemed.hasRedeemedYourLink', { senderFirstName, senderLastName, senderEmail }) - p +extend ../layout.pug + +block content + .wrapper.wf-section + .w-container(class="wrapper_head") + h1.headline.h1= t('emails.transactionLinkRedeemed.hasRedeemedYourLink', { senderFirstName, senderLastName, senderEmail }) + .text-block + include ../includes/salutation.pug + p= t('emails.transactionLinkRedeemed.hasRedeemedYourLink', { senderFirstName, senderLastName, senderEmail }) + .content.w-container + h2.heading= t('emails.general.transactionDetails') + div(class="p_content") = t('emails.general.amountGDD', { amountGDD: transactionAmount }) br = t('emails.transactionLinkRedeemed.memo', { transactionMemo }) - p + br = t('emails.general.detailsYouFindOnLinkToYourAccount') - = " " - a(href=overviewURL) #{overviewURL} - p= t('emails.general.pleaseDoNotReply') - include ../greatingFormularImprint.pug + a.button-3.w-button(href="https://gdd.gradido.net/transactions") #{t('emails.toAccount.toAccount')} + + include ../includes/doNotReply.pug diff --git a/backend/src/emails/templates/transactionReceived/html.pug b/backend/src/emails/templates/transactionReceived/html.pug index e6807f539..d7e358547 100644 --- a/backend/src/emails/templates/transactionReceived/html.pug +++ b/backend/src/emails/templates/transactionReceived/html.pug @@ -1,15 +1,16 @@ -doctype html -html(lang=locale) - head - title= t('emails.transactionReceived.subject', { senderFirstName, senderLastName, transactionAmount }) - body - h1(style='margin-bottom: 24px;')= t('emails.transactionReceived.subject', { senderFirstName, senderLastName, transactionAmount }) - #container.col - include ../hello.pug - p= t('emails.transactionReceived.haveReceivedAmountGDDFrom', { transactionAmount, senderFirstName, senderLastName, senderEmail }) - p - = t('emails.general.detailsYouFindOnLinkToYourAccount') - = " " - a(href=overviewURL) #{overviewURL} - p= t('emails.general.pleaseDoNotReply') - include ../greatingFormularImprint.pug +extend ../layout.pug + +block content + .wrapper.wf-section + .w-container(class="wrapper_head") + h1.headline.h1= t('emails.transactionReceived.title', { senderFirstName, senderLastName, transactionAmount }) + .text-block + include ../includes/salutation.pug + p= t('emails.transactionReceived.haveReceivedAmountGDDFrom', { transactionAmount, senderFirstName, senderLastName, senderEmail }) + .content.w-container + h2.heading= t('emails.general.transactionDetails') + div(class="p_content") = t('emails.general.detailsYouFindOnLinkToYourAccount') + a.button-3.w-button(href="https://gdd.gradido.net/transactions") #{t('emails.toAccount.toAccount')} + + include ../includes/doNotReply.pug + diff --git a/backend/src/locales/de.json b/backend/src/locales/de.json index c7e689d78..c32614ae1 100644 --- a/backend/src/locales/de.json +++ b/backend/src/locales/de.json @@ -36,12 +36,12 @@ "contributionDeleted": { "commonGoodContributionDeleted": "dein Gemeinwohl-Beitrag „{contributionMemo}“ wurde von {senderFirstName} {senderLastName} gelöscht.", "subject": "Gradido: Dein Gemeinwohl-Beitrag wurde gelöscht", - "title": "Dein Gemeinwohl-Beitrag wurde gelöscht", + "title": "Dein Gemeinwohl-Beitrag wurde gelöscht" }, "contributionDenied": { "commonGoodContributionDenied": "dein Gemeinwohl-Beitrag „{contributionMemo}“ wurde von {senderFirstName} {senderLastName} abgelehnt.", "subject": "Gradido: Dein Gemeinwohl-Beitrag wurde abgelehnt", - "title": "Dein Gemeinwohl-Beitrag wurde abgelehnt", + "title": "Dein Gemeinwohl-Beitrag wurde abgelehnt" }, "footer": { "contactOurSupport": "Bei weiteren fragen kontaktiere bitte unseren Support.", @@ -64,6 +64,7 @@ "reset": "zurücksetzen", "sincerelyYours": "Liebe Grüße", "toAccount": "Zum Konto", + "transactionDetails": "Transaktionsdetails", "yourGradidoTeam": "dein Gradido-Team" }, "resetPassword": { diff --git a/backend/src/locales/en.json b/backend/src/locales/en.json index 637f47715..1c32f0480 100644 --- a/backend/src/locales/en.json +++ b/backend/src/locales/en.json @@ -64,6 +64,7 @@ "reset": "reset", "sincerelyYours": "Kind regards,", "toAccount": "To account", + "transactionDetails": "Transaction details", "yourGradidoTeam": "your Gradido team" }, "resetPassword": { From 7aca69aba061985b68bbb3f01571397527830bd6 Mon Sep 17 00:00:00 2001 From: mahula Date: Mon, 8 May 2023 10:30:03 +0200 Subject: [PATCH 019/123] Revert "add pug plugin to linter" This reverts commit 79a1cd22d738bfca70af825b5fcb9e231993c256. --- backend/.eslintrc.js | 11 +------ backend/package.json | 1 - backend/yarn.lock | 76 +++++++++++++++++++------------------------- 3 files changed, 34 insertions(+), 54 deletions(-) diff --git a/backend/.eslintrc.js b/backend/.eslintrc.js index cf43ee171..0e63a9bfe 100644 --- a/backend/.eslintrc.js +++ b/backend/.eslintrc.js @@ -5,16 +5,7 @@ module.exports = { node: true, }, parser: '@typescript-eslint/parser', - plugins: [ - 'prettier', - 'pug', - '@typescript-eslint', - 'type-graphql', - 'jest', - 'import', - 'n', - 'promise', - ], + plugins: ['prettier', '@typescript-eslint', 'type-graphql', 'jest', 'import', 'n', 'promise'], extends: [ 'standard', 'eslint:recommended', diff --git a/backend/package.json b/backend/package.json index 6a1996616..c5e0df3c5 100644 --- a/backend/package.json +++ b/backend/package.json @@ -68,7 +68,6 @@ "eslint-plugin-n": "^15.7.0", "eslint-plugin-prettier": "^4.2.1", "eslint-plugin-promise": "^6.1.1", - "eslint-plugin-pug": "^1.2.5", "eslint-plugin-type-graphql": "^1.0.0", "faker": "^5.5.3", "graphql-tag": "^2.12.6", diff --git a/backend/yarn.lock b/backend/yarn.lock index 3832c9a30..1bc8c64fd 100644 --- a/backend/yarn.lock +++ b/backend/yarn.lock @@ -394,14 +394,14 @@ resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.4.0.tgz#3e61c564fcd6b921cb789838631c5ee44df09403" integrity sha512-A9983Q0LnDGdLPjxyXQ00sbV+K+O+ko2Dr+CZigbHWtX9pNfxlaBkMR8X1CztI73zuEyEBXTVjx7CE+/VSwDiQ== -"@eslint/eslintrc@^2.0.3": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.0.3.tgz#4910db5505f4d503f27774bf356e3704818a0331" - integrity sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ== +"@eslint/eslintrc@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.0.2.tgz#01575e38707add677cf73ca1589abba8da899a02" + integrity sha512-3W4f5tDUra+pA+FzgugqL2pRimUTDJWKr7BINqOpkZrC0uYI0NIc0/JFgBROCU07HR6GieA5m3/rsPIhDmCXTQ== dependencies: ajv "^6.12.4" debug "^4.3.2" - espree "^9.5.2" + espree "^9.5.1" globals "^13.19.0" ignore "^5.2.0" import-fresh "^3.2.1" @@ -409,10 +409,10 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@8.40.0": - version "8.40.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.40.0.tgz#3ba73359e11f5a7bd3e407f70b3528abfae69cec" - integrity sha512-ElyB54bJIhXQYVKjDSvCkPO1iU1tSAeVQJbllWJq1XQSmmA4dgFk8CbiBGpiOPxleE48vDogxCtmMYku4HSVLA== +"@eslint/js@8.37.0": + version "8.37.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.37.0.tgz#cf1b5fa24217fe007f6487a26d765274925efa7d" + integrity sha512-x5vzdtOOGgFVDCUs81QRB2+liax8rFg3+7hqM+QhBG0/G3F1ZsoYl97UrqgHgQ9KKT7G6c4V+aTUCgu/n22v1A== "@graphql-typed-document-node/core@^3.1.1": version "3.1.1" @@ -3005,16 +3005,6 @@ eslint-plugin-promise@^6.1.1: resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz#269a3e2772f62875661220631bd4dafcb4083816" integrity sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig== -eslint-plugin-pug@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/eslint-plugin-pug/-/eslint-plugin-pug-1.2.5.tgz#a83475c4e7949ea103a89b48057c900d3a4b97f5" - integrity sha512-rxsQI8ch1pUtP6jBBbmx3dqesZ+5+FdFgzP61pQgIWUezg5YwV+we0ROqk1JF71xdUrMKJkKbJglJ6lHrsOSzg== - dependencies: - lodash "^4.17.20" - pug-lexer "^5.0.0" - pug-parser "^6.0.0" - pug-walk "^2.0.0" - eslint-plugin-type-graphql@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/eslint-plugin-type-graphql/-/eslint-plugin-type-graphql-1.0.0.tgz#d348560ed628d6ca1dfcea35a02891432daafe6b" @@ -3030,10 +3020,10 @@ eslint-scope@^5.1.1: esrecurse "^4.3.0" estraverse "^4.1.1" -eslint-scope@^7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.0.tgz#f21ebdafda02352f103634b96dd47d9f81ca117b" - integrity sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw== +eslint-scope@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" + integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== dependencies: esrecurse "^4.3.0" estraverse "^5.2.0" @@ -3067,20 +3057,20 @@ eslint-visitor-keys@^3.3.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== -eslint-visitor-keys@^3.4.1: - version "3.4.1" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz#c22c48f48942d08ca824cc526211ae400478a994" - integrity sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA== +eslint-visitor-keys@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz#c7f0f956124ce677047ddbc192a68f999454dedc" + integrity sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ== eslint@^8.37.0: - version "8.40.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.40.0.tgz#a564cd0099f38542c4e9a2f630fa45bf33bc42a4" - integrity sha512-bvR+TsP9EHL3TqNtj9sCNJVAFK3fBN8Q7g5waghxyRsPLIMwL73XSKnZFK0hk/O2ANC+iAoq6PWMQ+IfBAJIiQ== + version "8.37.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.37.0.tgz#1f660ef2ce49a0bfdec0b0d698e0b8b627287412" + integrity sha512-NU3Ps9nI05GUoVMxcZx1J8CNR6xOvUT4jAUMH5+z8lpp3aEdPVCImKw6PWG4PY+Vfkpr+jvMpxs/qoE7wq0sPw== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@eslint-community/regexpp" "^4.4.0" - "@eslint/eslintrc" "^2.0.3" - "@eslint/js" "8.40.0" + "@eslint/eslintrc" "^2.0.2" + "@eslint/js" "8.37.0" "@humanwhocodes/config-array" "^0.11.8" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" @@ -3090,9 +3080,9 @@ eslint@^8.37.0: debug "^4.3.2" doctrine "^3.0.0" escape-string-regexp "^4.0.0" - eslint-scope "^7.2.0" - eslint-visitor-keys "^3.4.1" - espree "^9.5.2" + eslint-scope "^7.1.1" + eslint-visitor-keys "^3.4.0" + espree "^9.5.1" esquery "^1.4.2" esutils "^2.0.2" fast-deep-equal "^3.1.3" @@ -3118,14 +3108,14 @@ eslint@^8.37.0: strip-json-comments "^3.1.0" text-table "^0.2.0" -espree@^9.5.2: - version "9.5.2" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.5.2.tgz#e994e7dc33a082a7a82dceaf12883a829353215b" - integrity sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw== +espree@^9.5.1: + version "9.5.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.5.1.tgz#4f26a4d5f18905bf4f2e0bd99002aab807e96dd4" + integrity sha512-5yxtHSZXRSW5pvv3hAlXM5+/Oswi1AUFqBmbibKb5s6bp3rGIDkyXU6xCoyuuLhijr4SFwPrXRoZjz0AZDN9tg== dependencies: acorn "^8.8.0" acorn-jsx "^5.3.2" - eslint-visitor-keys "^3.4.1" + eslint-visitor-keys "^3.4.0" esprima@^4.0.0, esprima@^4.0.1: version "4.0.1" @@ -3659,7 +3649,7 @@ graceful-fs@^4.1.6, graceful-fs@^4.2.0: integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== "gradido-database@file:../database": - version "1.20.0" + version "1.19.1" dependencies: "@types/uuid" "^8.3.4" cross-env "^7.0.3" @@ -5113,7 +5103,7 @@ lodash.sortby@^4.7.0: resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= -lodash@4.x, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.7.0: +lodash@4.x, lodash@^4.17.21, lodash@^4.7.0: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -5976,7 +5966,7 @@ pug-filters@^4.0.0: pug-walk "^2.0.0" resolve "^1.15.1" -pug-lexer@^5.0.0, pug-lexer@^5.0.1: +pug-lexer@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/pug-lexer/-/pug-lexer-5.0.1.tgz#ae44628c5bef9b190b665683b288ca9024b8b0d5" integrity sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w== From 74f5cc2df1f1edccbc62a98771abbf29c4885210 Mon Sep 17 00:00:00 2001 From: mahula Date: Mon, 8 May 2023 11:14:15 +0200 Subject: [PATCH 020/123] fix typos --- .../src/emails/templates/transactionLinkRedeemed/html.pug | 5 ++--- backend/src/emails/templates/transactionReceived/html.pug | 4 ++-- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/backend/src/emails/templates/transactionLinkRedeemed/html.pug b/backend/src/emails/templates/transactionLinkRedeemed/html.pug index 1602a0072..d3abec4f7 100644 --- a/backend/src/emails/templates/transactionLinkRedeemed/html.pug +++ b/backend/src/emails/templates/transactionLinkRedeemed/html.pug @@ -9,12 +9,11 @@ block content p= t('emails.transactionLinkRedeemed.hasRedeemedYourLink', { senderFirstName, senderLastName, senderEmail }) .content.w-container h2.heading= t('emails.general.transactionDetails') - div(class="p_content") - = t('emails.general.amountGDD', { amountGDD: transactionAmount }) + div(class="p_content")= t('emails.general.amountGDD', { amountGDD: transactionAmount }) br = t('emails.transactionLinkRedeemed.memo', { transactionMemo }) br = t('emails.general.detailsYouFindOnLinkToYourAccount') - a.button-3.w-button(href="https://gdd.gradido.net/transactions") #{t('emails.toAccount.toAccount')} + a.button-3.w-button(href="https://gdd.gradido.net/transactions") #{t('emails.general.toAccount')} include ../includes/doNotReply.pug diff --git a/backend/src/emails/templates/transactionReceived/html.pug b/backend/src/emails/templates/transactionReceived/html.pug index d7e358547..fcffdf2ee 100644 --- a/backend/src/emails/templates/transactionReceived/html.pug +++ b/backend/src/emails/templates/transactionReceived/html.pug @@ -9,8 +9,8 @@ block content p= t('emails.transactionReceived.haveReceivedAmountGDDFrom', { transactionAmount, senderFirstName, senderLastName, senderEmail }) .content.w-container h2.heading= t('emails.general.transactionDetails') - div(class="p_content") = t('emails.general.detailsYouFindOnLinkToYourAccount') - a.button-3.w-button(href="https://gdd.gradido.net/transactions") #{t('emails.toAccount.toAccount')} + div(class="p_content")= t('emails.general.detailsYouFindOnLinkToYourAccount') + a.button-3.w-button(href="https://gdd.gradido.net/transactions") #{t('emails.general.toAccount')} include ../includes/doNotReply.pug From fae405b7ab99be42e5f62910cfbb138a46598158 Mon Sep 17 00:00:00 2001 From: mahula Date: Tue, 9 May 2023 11:36:28 +0200 Subject: [PATCH 021/123] refine account activation email template --- .../emails/templates/accountActivation/html.pug | 12 +++++------- .../templates/includes/requestNewLink.pug | 11 +++++++++++ backend/src/locales/de.json | 17 +++++++++-------- backend/src/locales/en.json | 16 ++++++++-------- 4 files changed, 33 insertions(+), 23 deletions(-) create mode 100644 backend/src/emails/templates/includes/requestNewLink.pug diff --git a/backend/src/emails/templates/accountActivation/html.pug b/backend/src/emails/templates/accountActivation/html.pug index ee4c398e3..67e03c986 100644 --- a/backend/src/emails/templates/accountActivation/html.pug +++ b/backend/src/emails/templates/accountActivation/html.pug @@ -8,12 +8,10 @@ block content include ../includes/salutation.pug p= t('emails.accountActivation.emailRegistered') .content.w-container - h2.heading= t('emails.accountActivation.title') + h2.heading= t('emails.general.completeRegistration') div(class="p_content")= t('emails.accountActivation.pleaseClickLink') a.button-3.w-button(href=activationLink) #{t('emails.accountActivation.activateAccount')} - //- div(class="p_content")= t('emails.general.orCopyLink') - // TODO make this a reusable block (block new-link) - h2.heading-2 Neuen gültigen Link anfordern - div(class="p_content")= t('emails.accountActivation.duration', { hours: timeDurationObject.hours, minutes: timeDurationObject.minutes }) - br - a.button-4.w-button(href=resendLink) #{t('emails.general.newLink')} + div(class="p_content")= t('emails.general.orCopyLink') + a(href=activationLink) #{activationLink} + + include ../includes/requestNewLink.pug diff --git a/backend/src/emails/templates/includes/requestNewLink.pug b/backend/src/emails/templates/includes/requestNewLink.pug new file mode 100644 index 000000000..5721d923c --- /dev/null +++ b/backend/src/emails/templates/includes/requestNewLink.pug @@ -0,0 +1,11 @@ +//- +requestNewLink + h2.heading-2 Neuen gültigen Link anfordern + + if timeDurationObject.minutes == 0 + div(class="p_content")= t('emails.general.linkValidity', { hours: timeDurationObject.hours }) + else + div(class="p_content")= t('emails.general.linkValidityWithMinutes', { hours: timeDurationObject.hours, minutes: timeDurationObject.minutes }) + + br + a.button-4.w-button(href=resendLink) #{t('emails.general.newLink')} \ No newline at end of file diff --git a/backend/src/locales/de.json b/backend/src/locales/de.json index c32614ae1..809146b37 100644 --- a/backend/src/locales/de.json +++ b/backend/src/locales/de.json @@ -2,9 +2,8 @@ "emails": { "accountActivation": { "activateAccount": "Konto aktivieren", - "duration": "Der Link hat eine Gültigkeit von {hours} Stunden und {minutes} Minuten. Sollte die Gültigkeit des Links bereits abgelaufen sein, kannst du dir hier einen neuen Link schicken lassen:", "emailRegistered": "deine E-Mail-Adresse wurde soeben bei Gradido registriert.", - "pleaseClickLink": "Klicke bitte auf diesen Link, um die Registrierung abzuschließen und dein Gradido-Konto zu aktivieren:", + "pleaseClickLink": "Klicke bitte hier, um die Registrierung abzuschließen und dein Gradido-Konto zu aktivieren.", "subject": "Gradido: E-Mail Überprüfung", "title": "E-Mail Überprüfung" }, @@ -12,9 +11,8 @@ "contactSupport": "Support kontaktieren", "emailExists": "Es existiert jedoch zu deiner E-Mail-Adresse schon ein Konto.", "emailReused": "deine E-Mail-Adresse wurde soeben erneut benutzt, um bei Gradido ein Konto zu registrieren.", - "ifYouAreNotTheOne": "Wenn du nicht derjenige bist, der versucht hat sich erneut zu registrieren, wende dich bitte an unseren Support:", - "onForgottenPasswordClickLink": "Klicke bitte auf den folgenden Link, falls du dein Passwort vergessen haben solltest:", - "onForgottenPasswordCopyLink": "oder kopiere den obigen Link in dein Browserfenster.", + "ifYouAreNotTheOne": "Wenn du nicht versucht hast, dich erneut zu registrieren, wende dich bitte an unseren Support:", + "onForgottenPasswordClickLink": "Solltest du dein Passwort vergessen haben, klicke bitte hier.", "subject": "Gradido: Erneuter Registrierungsversuch mit deiner E-Mail", "title": "Erneuter Registrierungsversuch mit deiner E-Mail" }, @@ -53,13 +51,17 @@ }, "general": { "amountGDD": "Betrag: {amountGDD} GDD", + "completeRegistration": "Registrierung abschließen", "contribution": "Gemeinwohl-Beitrag: {contributionMemo}", "contributionDetails": "Beitragsdetails", "detailsYouFindOnLinkToYourAccount": "Details zur Transaktion findest du in deinem Gradido-Konto:", "helloName": "Hallo {firstName} {lastName},", + "linkValidity": "Der Link hat eine Gültigkeit von {hours} Stunden.\nSollte die Gültigkeit des Links bereits abgelaufen sein, kannst du dir hier einen neuen Link schicken lassen:", + "linkValidityWithMinutes": "Der Link hat eine Gültigkeit von {hours} Stunden und {minutes} Minuten.\nSollte die Gültigkeit des Links bereits abgelaufen sein, kannst du dir hier einen neuen Link schicken lassen:", + "linkToYourAccount": "Link zu deinem Konto:", - "newLink": "neuer Link", - "orCopyLink": "oder kopiere den obigen Link in dein Browserfenster.", + "newLink": "Neuer Link", + "orCopyLink": "Oder kopiere den Link in dein Browserfenster.", "pleaseDoNotReply": "Bitte antworte nicht auf diese E-Mail!", "reset": "zurücksetzen", "sincerelyYours": "Liebe Grüße", @@ -68,7 +70,6 @@ "yourGradidoTeam": "dein Gradido-Team" }, "resetPassword": { - "duration": "Der Link hat eine Gültigkeit von {hours} Stunden und {minutes} Minuten. Sollte die Gültigkeit des Links bereits abgelaufen sein, kannst du dir hier einen neuen Link schicken lassen:", "pleaseClickLink": "Wenn du es warst, klicke bitte auf den Link:", "subject": "Gradido: Passwort zurücksetzen", "title": "Passwort zurücksetzen", diff --git a/backend/src/locales/en.json b/backend/src/locales/en.json index 1c32f0480..77501e994 100644 --- a/backend/src/locales/en.json +++ b/backend/src/locales/en.json @@ -2,9 +2,8 @@ "emails": { "accountActivation": { "activateAccount": "Activate account", - "duration": "The link has a validity of {hours} hours and {minutes} minutes. If the validity of the link has already expired, you can have a new link sent to you here:", "emailRegistered": "Your email address has just been registered with Gradido.", - "pleaseClickLink": "Please click on this link to complete the registration and activate your Gradido account:", + "pleaseClickLink": "Please click here to complete the registration and activate your Gradido account.", "subject": "Gradido: Email Verification", "title": "Email Verification" }, @@ -12,9 +11,8 @@ "contactSupport": "Contact support", "emailExists": "However, an account already exists for your email address.", "emailReused": "Your email address has just been used again to register an account with Gradido.", - "ifYouAreNotTheOne": "If you are not the one who tried to register again, please contact our support:", - "onForgottenPasswordClickLink": "Please click on the following link if you have forgotten your password:", - "onForgottenPasswordCopyLink": "or copy the link above into your browser window.", + "ifYouAreNotTheOne": "If you did not try to register again, please contact our support:", + "onForgottenPasswordClickLink": "If you have forgotten your password, please click here.", "subject": "Gradido: Try To Register Again With Your Email", "title": "Try To Register Again With Your Email" }, @@ -53,13 +51,16 @@ }, "general": { "amountGDD": "Amount: {amountGDD} GDD", + "completeRegistration": "Complete registration", "contribution": "Contribution: : {contributionMemo}", "contributionDetails": "Contribution details", "detailsYouFindOnLinkToYourAccount": "You can find transaction details in your Gradido account:", "helloName": "Hello {firstName} {lastName}", + "linkValidity": "The link has a validity of {hours} hours.\nIf the validity of the link has already expired, you can have a new link sent to you here:", + "linkValidityWithMinutes": "The link has a validity of {hours} hours and {minutes} minutes.\nIf the validity of the link has already expired, you can have a new link sent to you here:", "linkToYourAccount": "Link to your account:", - "newLink": "new link", - "orCopyLink": "or copy the link above into your browser window.", + "newLink": "New link", + "orCopyLink": "or copy the link into your browser window.", "pleaseDoNotReply": "Please do not reply to this email!", "reset": "reset", "sincerelyYours": "Kind regards,", @@ -68,7 +69,6 @@ "yourGradidoTeam": "your Gradido team" }, "resetPassword": { - "duration": "The link has a validity of {hours} hours and {minutes} minutes. If the validity of the link has already expired, you can have a new link sent to you here:", "pleaseClickLink": "If it was you, please click on the link:", "subject": "Gradido: Reset password", "title": "Reset password", From a3a3152b1cd22b348f0619e0ca2c18b528797128 Mon Sep 17 00:00:00 2001 From: mahula Date: Tue, 9 May 2023 14:02:24 +0200 Subject: [PATCH 022/123] refine account multi registration email template --- .../emails/templates/accountMultiRegistration/html.pug | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/backend/src/emails/templates/accountMultiRegistration/html.pug b/backend/src/emails/templates/accountMultiRegistration/html.pug index 8f04a6d94..bb5aa79d2 100644 --- a/backend/src/emails/templates/accountMultiRegistration/html.pug +++ b/backend/src/emails/templates/accountMultiRegistration/html.pug @@ -12,10 +12,11 @@ block content = t('emails.accountMultiRegistration.emailExists') .content.w-container h2.heading= t('emails.resetPassword.title') - div(class="p_content")= t('emails.accountMultiRegistration.emailExists') + div(class="p_content")= t('emails.accountMultiRegistration.onForgottenPasswordClickLink') a.button-3.w-button(href=resendLink) #{t('emails.general.reset')} - //- div(class="p_content")= t('emails.accountMultiRegistration.onForgottenPasswordCopyLink') - h2.heading-2 Support kontaktieren + div(class="p_content")= t('emails.general.orCopyLink') + a(href=resendLink) #{resendLink} + + h2.heading-2= t('emails.accountMultiRegistration.contactSupport') div(class="p_content")= t('emails.accountMultiRegistration.ifYouAreNotTheOne') - br a(href='mailto:' + supportEmail)= supportEmail From 9fe429cfc7bbf680b208d53ea78cc8aecf5c72a1 Mon Sep 17 00:00:00 2001 From: mahula Date: Tue, 9 May 2023 14:11:43 +0200 Subject: [PATCH 023/123] refine password reset email template --- backend/src/emails/templates/resetPassword/html.pug | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/backend/src/emails/templates/resetPassword/html.pug b/backend/src/emails/templates/resetPassword/html.pug index bc6f45404..f7abf0a6d 100644 --- a/backend/src/emails/templates/resetPassword/html.pug +++ b/backend/src/emails/templates/resetPassword/html.pug @@ -11,8 +11,7 @@ block content h2.heading= t('emails.resetPassword.title') div(class="p_content")= t('emails.resetPassword.pleaseClickLink') a.button-3.w-button(href=resetLink) #{t('emails.general.reset')} - //- div(class="p_content")= t('emails.general.orCopyLink') - h2.heading-2 Neuen gültigen Link anfordern - div(class="p_content")= t('emails.resetPassword.duration', { hours: timeDurationObject.hours, minutes: timeDurationObject.minutes }) - br - a.button-4.w-button(href=resendLink) #{t('emails.general.newLink')} + div(class="p_content")= t('emails.general.orCopyLink') + a(href=resetLink) #{resetLink} + + include ../includes/requestNewLink.pug From 3f9de705a83ba650a66564108adb12fc73175949 Mon Sep 17 00:00:00 2001 From: mahula Date: Tue, 9 May 2023 17:47:57 +0200 Subject: [PATCH 024/123] refine contribution related email templates --- .../emails/templates/contributionConfirmed/html.pug | 10 ++-------- .../src/emails/templates/contributionDeleted/html.pug | 6 +----- .../src/emails/templates/contributionDenied/html.pug | 6 +----- .../emails/templates/transactionLinkRedeemed/html.pug | 2 +- backend/src/locales/de.json | 4 ++-- backend/src/locales/en.json | 4 ++-- 6 files changed, 9 insertions(+), 23 deletions(-) diff --git a/backend/src/emails/templates/contributionConfirmed/html.pug b/backend/src/emails/templates/contributionConfirmed/html.pug index 984572acd..cc4d778d7 100644 --- a/backend/src/emails/templates/contributionConfirmed/html.pug +++ b/backend/src/emails/templates/contributionConfirmed/html.pug @@ -6,13 +6,7 @@ block content h1.headline.h1= t('emails.contributionConfirmed.title') .text-block include ../includes/salutation.pug - p= t('emails.contributionConfirmed.commonGoodContributionConfirmed', { senderFirstName, senderLastName }) + p= t('emails.contributionConfirmed.commonGoodContributionConfirmed', { contributionMemo, senderFirstName, senderLastName, amountGDD: contributionAmount }) .content.w-container - h2.heading= t('emails.general.contributionDetails') - div(class="p_content") - = t('emails.general.amountGDD') - br - = t('emails.general.contribution') - a.button-3.w-button(href="https://gdd.gradido.net/community/contributions") #{t('emails.general.toAccount')} - + include ../includes/contributionDetailsCTA.pug include ../includes/doNotReply.pug \ No newline at end of file diff --git a/backend/src/emails/templates/contributionDeleted/html.pug b/backend/src/emails/templates/contributionDeleted/html.pug index ebf16be28..1a4aab038 100644 --- a/backend/src/emails/templates/contributionDeleted/html.pug +++ b/backend/src/emails/templates/contributionDeleted/html.pug @@ -8,9 +8,5 @@ block content include ../includes/salutation.pug p= t('emails.contributionDeleted.commonGoodContributionDeleted', { contributionMemo, senderFirstName, senderLastName }) .content.w-container - h2.heading= t('emails.general.contributionDetails') - div(class="p_content") - = t('emails.contribution.toSeeContributionsAndMessages') - a.button-3.w-button(href="https://gdd.gradido.net/community/contributions") #{t('emails.general.toAccount')} - + include ../includes/contributionDetailsCTA.pug include ../includes/doNotReply.pug diff --git a/backend/src/emails/templates/contributionDenied/html.pug b/backend/src/emails/templates/contributionDenied/html.pug index f26ff74ef..0c082a1e0 100644 --- a/backend/src/emails/templates/contributionDenied/html.pug +++ b/backend/src/emails/templates/contributionDenied/html.pug @@ -8,9 +8,5 @@ block content include ../includes/salutation.pug p= t('emails.contributionDenied.commonGoodContributionDenied', { contributionMemo, senderFirstName, senderLastName }) .content.w-container - h2.heading= t('emails.general.contributionDetails') - div(class="p_content") - = t('emails.contribution.toSeeContributionsAndMessages') - a.button-3.w-button(href="https://gdd.gradido.net/community/contributions") #{t('emails.general.toAccount')} - + include ../includes/contributionDetailsCTA.pug include ../includes/doNotReply.pug diff --git a/backend/src/emails/templates/transactionLinkRedeemed/html.pug b/backend/src/emails/templates/transactionLinkRedeemed/html.pug index d3abec4f7..46e112b54 100644 --- a/backend/src/emails/templates/transactionLinkRedeemed/html.pug +++ b/backend/src/emails/templates/transactionLinkRedeemed/html.pug @@ -3,7 +3,7 @@ extend ../layout.pug block content .wrapper.wf-section .w-container(class="wrapper_head") - h1.headline.h1= t('emails.transactionLinkRedeemed.hasRedeemedYourLink', { senderFirstName, senderLastName, senderEmail }) + h1.headline.h1= t('emails.transactionLinkRedeemed.title', { senderFirstName, senderLastName }) .text-block include ../includes/salutation.pug p= t('emails.transactionLinkRedeemed.hasRedeemedYourLink', { senderFirstName, senderLastName, senderEmail }) diff --git a/backend/src/locales/de.json b/backend/src/locales/de.json index 809146b37..3be616561 100644 --- a/backend/src/locales/de.json +++ b/backend/src/locales/de.json @@ -27,7 +27,7 @@ "toSeeContributionsAndMessages": "Um deine Gemeinwohl-Beiträge und dazugehörige Nachrichten zu sehen, gehe in deinem Gradido-Konto ins Menü „Schöpfen“ auf den Tab „Meine Beiträge“." }, "contributionConfirmed": { - "commonGoodContributionConfirmed": "dein Gemeinwohl-Beitrag wurde soeben von {senderFirstName} {senderLastName} bestätigt und in deinem Gradido-Konto gutgeschrieben.", + "commonGoodContributionConfirmed": "dein Gemeinwohl-Beitrag „{contributionMemo}“ wurde soeben von {senderFirstName} {senderLastName} bestätigt. Es wurden deinem Gradido-Konto {amountGDD} GDD gutgeschrieben.", "subject": "Gradido: Dein Gemeinwohl-Beitrag wurde bestätigt", "title": "Dein Gemeinwohl-Beitrag wurde bestätigt" }, @@ -54,7 +54,7 @@ "completeRegistration": "Registrierung abschließen", "contribution": "Gemeinwohl-Beitrag: {contributionMemo}", "contributionDetails": "Beitragsdetails", - "detailsYouFindOnLinkToYourAccount": "Details zur Transaktion findest du in deinem Gradido-Konto:", + "detailsYouFindOnLinkToYourAccount": "Details zur Transaktion findest du in deinem Gradido-Konto.", "helloName": "Hallo {firstName} {lastName},", "linkValidity": "Der Link hat eine Gültigkeit von {hours} Stunden.\nSollte die Gültigkeit des Links bereits abgelaufen sein, kannst du dir hier einen neuen Link schicken lassen:", "linkValidityWithMinutes": "Der Link hat eine Gültigkeit von {hours} Stunden und {minutes} Minuten.\nSollte die Gültigkeit des Links bereits abgelaufen sein, kannst du dir hier einen neuen Link schicken lassen:", diff --git a/backend/src/locales/en.json b/backend/src/locales/en.json index 77501e994..f7244e14e 100644 --- a/backend/src/locales/en.json +++ b/backend/src/locales/en.json @@ -27,7 +27,7 @@ "toSeeContributionsAndMessages": "To see your common good contributions and related messages, go to the “Creation” menu in your Gradido account and click on the “My contributions” tab." }, "contributionConfirmed": { - "commonGoodContributionConfirmed": "Your common good contribution has just been confirmed by {senderFirstName} {senderLastName} and credited to your Gradido account.", + "commonGoodContributionConfirmed": "Your common good contribution "{contributionMemo}" has just been approved by {senderFirstName} {senderLastName}. Your Gradido account has been credited with {amountGDD} GDD.", "subject": "Gradido: Your contribution to the common good was confirmed", "title": "Your contribution to the common good was confirmed" }, @@ -54,7 +54,7 @@ "completeRegistration": "Complete registration", "contribution": "Contribution: : {contributionMemo}", "contributionDetails": "Contribution details", - "detailsYouFindOnLinkToYourAccount": "You can find transaction details in your Gradido account:", + "detailsYouFindOnLinkToYourAccount": "You can find transaction details in your Gradido account.", "helloName": "Hello {firstName} {lastName}", "linkValidity": "The link has a validity of {hours} hours.\nIf the validity of the link has already expired, you can have a new link sent to you here:", "linkValidityWithMinutes": "The link has a validity of {hours} hours and {minutes} minutes.\nIf the validity of the link has already expired, you can have a new link sent to you here:", From c6cbfab68e30858e338614c28c6eccd42c66348a Mon Sep 17 00:00:00 2001 From: mahula Date: Tue, 9 May 2023 17:47:57 +0200 Subject: [PATCH 025/123] refine contribution related email templates --- .../src/emails/templates/includes/contributionDetailsCTA.pug | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 backend/src/emails/templates/includes/contributionDetailsCTA.pug diff --git a/backend/src/emails/templates/includes/contributionDetailsCTA.pug b/backend/src/emails/templates/includes/contributionDetailsCTA.pug new file mode 100644 index 000000000..0d8ed5973 --- /dev/null +++ b/backend/src/emails/templates/includes/contributionDetailsCTA.pug @@ -0,0 +1,4 @@ +//- +h2.heading= t('emails.general.contributionDetails') +div(class="p_content")= t('emails.contribution.toSeeContributionsAndMessages') +a.button-3.w-button(href="https://gdd.gradido.net/community/contributions") #{t('emails.general.toAccount')} \ No newline at end of file From 8c171835e194adfe25f41f07918e6133ae4ca9fb Mon Sep 17 00:00:00 2001 From: mahula Date: Wed, 10 May 2023 09:08:26 +0200 Subject: [PATCH 026/123] update email template layout --- .../templates/accountActivation/html.pug | 25 +++++++------ .../accountMultiRegistration/html.pug | 35 +++++++++---------- .../addedContributionMessage/html.pug | 23 ++++++------ .../templates/contributionConfirmed/html.pug | 17 +++++---- .../templates/contributionDeleted/html.pug | 17 +++++---- .../templates/contributionDenied/html.pug | 17 +++++---- .../emails/templates/includes/greeting.pug | 11 +++--- backend/src/emails/templates/layout.pug | 6 ++-- .../emails/templates/resetPassword/html.pug | 25 +++++++------ .../transactionLinkRedeemed/html.pug | 29 ++++++++------- .../templates/transactionReceived/html.pug | 21 ++++++----- 11 files changed, 109 insertions(+), 117 deletions(-) diff --git a/backend/src/emails/templates/accountActivation/html.pug b/backend/src/emails/templates/accountActivation/html.pug index 67e03c986..95e11d311 100644 --- a/backend/src/emails/templates/accountActivation/html.pug +++ b/backend/src/emails/templates/accountActivation/html.pug @@ -1,17 +1,16 @@ extend ../layout.pug block content - .wrapper.wf-section - .w-container(class="wrapper_head") - h1.headline.h1= t('emails.accountActivation.title') - .text-block - include ../includes/salutation.pug - p= t('emails.accountActivation.emailRegistered') - .content.w-container - h2.heading= t('emails.general.completeRegistration') - div(class="p_content")= t('emails.accountActivation.pleaseClickLink') - a.button-3.w-button(href=activationLink) #{t('emails.accountActivation.activateAccount')} - div(class="p_content")= t('emails.general.orCopyLink') - a(href=activationLink) #{activationLink} + .w-container(class="wrapper_head") + h1.headline.h1= t('emails.accountActivation.title') + .text-block + include ../includes/salutation.pug + p= t('emails.accountActivation.emailRegistered') + .content.w-container + h2.heading= t('emails.general.completeRegistration') + div(class="p_content")= t('emails.accountActivation.pleaseClickLink') + a.button-3.w-button(href=activationLink) #{t('emails.accountActivation.activateAccount')} + div(class="p_content")= t('emails.general.orCopyLink') + a(href=activationLink) #{activationLink} - include ../includes/requestNewLink.pug + include ../includes/requestNewLink.pug diff --git a/backend/src/emails/templates/accountMultiRegistration/html.pug b/backend/src/emails/templates/accountMultiRegistration/html.pug index bb5aa79d2..e09e1f82c 100644 --- a/backend/src/emails/templates/accountMultiRegistration/html.pug +++ b/backend/src/emails/templates/accountMultiRegistration/html.pug @@ -1,22 +1,21 @@ extend ../layout.pug block content - .wrapper.wf-section - .w-container(class="wrapper_head") - h1.headline.h1= t('emails.accountMultiRegistration.title') - .text-block - include ../includes/salutation.pug - p - = t('emails.accountMultiRegistration.emailReused') - br - = t('emails.accountMultiRegistration.emailExists') - .content.w-container - h2.heading= t('emails.resetPassword.title') - div(class="p_content")= t('emails.accountMultiRegistration.onForgottenPasswordClickLink') - a.button-3.w-button(href=resendLink) #{t('emails.general.reset')} - div(class="p_content")= t('emails.general.orCopyLink') - a(href=resendLink) #{resendLink} + .w-container(class="wrapper_head") + h1.headline.h1= t('emails.accountMultiRegistration.title') + .text-block + include ../includes/salutation.pug + p + = t('emails.accountMultiRegistration.emailReused') + br + = t('emails.accountMultiRegistration.emailExists') + .content.w-container + h2.heading= t('emails.resetPassword.title') + div(class="p_content")= t('emails.accountMultiRegistration.onForgottenPasswordClickLink') + a.button-3.w-button(href=resendLink) #{t('emails.general.reset')} + div(class="p_content")= t('emails.general.orCopyLink') + a(href=resendLink) #{resendLink} - h2.heading-2= t('emails.accountMultiRegistration.contactSupport') - div(class="p_content")= t('emails.accountMultiRegistration.ifYouAreNotTheOne') - a(href='mailto:' + supportEmail)= supportEmail + h2.heading-2= t('emails.accountMultiRegistration.contactSupport') + div(class="p_content")= t('emails.accountMultiRegistration.ifYouAreNotTheOne') + a(href='mailto:' + supportEmail)= supportEmail diff --git a/backend/src/emails/templates/addedContributionMessage/html.pug b/backend/src/emails/templates/addedContributionMessage/html.pug index f7c6449c2..aa686f25c 100644 --- a/backend/src/emails/templates/addedContributionMessage/html.pug +++ b/backend/src/emails/templates/addedContributionMessage/html.pug @@ -1,15 +1,14 @@ extend ../layout.pug block content - .wrapper.wf-section - .w-container(class="wrapper_head") - h1.headline.h1= t('emails.addedContributionMessage.title') - .text-block - include ../includes/salutation.pug - p= t('emails.addedContributionMessage.commonGoodContributionMessage', { senderFirstName, senderLastName, contributionMemo }) - .content.w-container - h2.heading= t('emails.addedContributionMessage.readMessage') - div(class="p_content")= t('emails.addedContributionMessage.toSeeAndAnswerMessage') - a.button-3.w-button(href="https://gdd.gradido.net/community/contribution") #{t('emails.general.toAccount')} - - include ../includes/doNotReply.pug + .w-container(class="wrapper_head") + h1.headline.h1= t('emails.addedContributionMessage.title') + .text-block + include ../includes/salutation.pug + p= t('emails.addedContributionMessage.commonGoodContributionMessage', { senderFirstName, senderLastName, contributionMemo }) + .content.w-container + h2.heading= t('emails.addedContributionMessage.readMessage') + div(class="p_content")= t('emails.addedContributionMessage.toSeeAndAnswerMessage') + a.button-3.w-button(href="https://gdd.gradido.net/community/contribution") #{t('emails.general.toAccount')} + + include ../includes/doNotReply.pug diff --git a/backend/src/emails/templates/contributionConfirmed/html.pug b/backend/src/emails/templates/contributionConfirmed/html.pug index cc4d778d7..eebc280d5 100644 --- a/backend/src/emails/templates/contributionConfirmed/html.pug +++ b/backend/src/emails/templates/contributionConfirmed/html.pug @@ -1,12 +1,11 @@ extend ../layout.pug block content - .wrapper.wf-section - .w-container(class="wrapper_head") - h1.headline.h1= t('emails.contributionConfirmed.title') - .text-block - include ../includes/salutation.pug - p= t('emails.contributionConfirmed.commonGoodContributionConfirmed', { contributionMemo, senderFirstName, senderLastName, amountGDD: contributionAmount }) - .content.w-container - include ../includes/contributionDetailsCTA.pug - include ../includes/doNotReply.pug \ No newline at end of file + .w-container(class="wrapper_head") + h1.headline.h1= t('emails.contributionConfirmed.title') + .text-block + include ../includes/salutation.pug + p= t('emails.contributionConfirmed.commonGoodContributionConfirmed', { contributionMemo, senderFirstName, senderLastName, amountGDD: contributionAmount }) + .content.w-container + include ../includes/contributionDetailsCTA.pug + include ../includes/doNotReply.pug \ No newline at end of file diff --git a/backend/src/emails/templates/contributionDeleted/html.pug b/backend/src/emails/templates/contributionDeleted/html.pug index 1a4aab038..e22b59677 100644 --- a/backend/src/emails/templates/contributionDeleted/html.pug +++ b/backend/src/emails/templates/contributionDeleted/html.pug @@ -1,12 +1,11 @@ extend ../layout.pug block content - .wrapper.wf-section - .w-container(class="wrapper_head") - h1.headline.h1= t('emails.contributionDeleted.title') - .text-block - include ../includes/salutation.pug - p= t('emails.contributionDeleted.commonGoodContributionDeleted', { contributionMemo, senderFirstName, senderLastName }) - .content.w-container - include ../includes/contributionDetailsCTA.pug - include ../includes/doNotReply.pug + .w-container(class="wrapper_head") + h1.headline.h1= t('emails.contributionDeleted.title') + .text-block + include ../includes/salutation.pug + p= t('emails.contributionDeleted.commonGoodContributionDeleted', { contributionMemo, senderFirstName, senderLastName }) + .content.w-container + include ../includes/contributionDetailsCTA.pug + include ../includes/doNotReply.pug diff --git a/backend/src/emails/templates/contributionDenied/html.pug b/backend/src/emails/templates/contributionDenied/html.pug index 0c082a1e0..bf43182f8 100644 --- a/backend/src/emails/templates/contributionDenied/html.pug +++ b/backend/src/emails/templates/contributionDenied/html.pug @@ -1,12 +1,11 @@ extend ../layout.pug block content - .wrapper.wf-section - .w-container(class="wrapper_head") - h1.headline.h1= t('emails.contributionDenied.title') - .text-block - include ../includes/salutation.pug - p= t('emails.contributionDenied.commonGoodContributionDenied', { contributionMemo, senderFirstName, senderLastName }) - .content.w-container - include ../includes/contributionDetailsCTA.pug - include ../includes/doNotReply.pug + .w-container(class="wrapper_head") + h1.headline.h1= t('emails.contributionDenied.title') + .text-block + include ../includes/salutation.pug + p= t('emails.contributionDenied.commonGoodContributionDenied', { contributionMemo, senderFirstName, senderLastName }) + .content.w-container + include ../includes/contributionDetailsCTA.pug + include ../includes/doNotReply.pug diff --git a/backend/src/emails/templates/includes/greeting.pug b/backend/src/emails/templates/includes/greeting.pug index 6693e23ca..9dca66228 100644 --- a/backend/src/emails/templates/includes/greeting.pug +++ b/backend/src/emails/templates/includes/greeting.pug @@ -1,6 +1,7 @@ //- This sets the greeting at the end of every e-mail -.text-block - p - = t('emails.general.sincerelyYours') - br - = t('emails.general.yourGradidoTeam') \ No newline at end of file +.w-container(class="wrapper_head") + .text-block + p + = t('emails.general.sincerelyYours') + br + = t('emails.general.yourGradidoTeam') \ No newline at end of file diff --git a/backend/src/emails/templates/layout.pug b/backend/src/emails/templates/layout.pug index e0b01c577..e6fdf92ab 100644 --- a/backend/src/emails/templates/layout.pug +++ b/backend/src/emails/templates/layout.pug @@ -32,8 +32,8 @@ html.w-mod-js.wf-worksans-n4-active.wf-worksans-n6-active.wf-worksans-n1-active. body //- include includes/header.pug - block content - - include includes/greeting.pug + .wrapper.wf-section + block content + include includes/greeting.pug include includes/footer.pug diff --git a/backend/src/emails/templates/resetPassword/html.pug b/backend/src/emails/templates/resetPassword/html.pug index f7abf0a6d..52fa737de 100644 --- a/backend/src/emails/templates/resetPassword/html.pug +++ b/backend/src/emails/templates/resetPassword/html.pug @@ -1,17 +1,16 @@ extends ../layout.pug block content - .wrapper.wf-section - .w-container(class="wrapper_head") - h1.headline.h1= t('emails.resetPassword.title') - .text-block - include ../includes/salutation.pug - p= t('emails.resetPassword.youOrSomeoneResetPassword') - .content.w-container - h2.heading= t('emails.resetPassword.title') - div(class="p_content")= t('emails.resetPassword.pleaseClickLink') - a.button-3.w-button(href=resetLink) #{t('emails.general.reset')} - div(class="p_content")= t('emails.general.orCopyLink') - a(href=resetLink) #{resetLink} + .w-container(class="wrapper_head") + h1.headline.h1= t('emails.resetPassword.title') + .text-block + include ../includes/salutation.pug + p= t('emails.resetPassword.youOrSomeoneResetPassword') + .content.w-container + h2.heading= t('emails.resetPassword.title') + div(class="p_content")= t('emails.resetPassword.pleaseClickLink') + a.button-3.w-button(href=resetLink) #{t('emails.general.reset')} + div(class="p_content")= t('emails.general.orCopyLink') + a(href=resetLink) #{resetLink} - include ../includes/requestNewLink.pug + include ../includes/requestNewLink.pug diff --git a/backend/src/emails/templates/transactionLinkRedeemed/html.pug b/backend/src/emails/templates/transactionLinkRedeemed/html.pug index 46e112b54..f0e55e552 100644 --- a/backend/src/emails/templates/transactionLinkRedeemed/html.pug +++ b/backend/src/emails/templates/transactionLinkRedeemed/html.pug @@ -1,19 +1,18 @@ extend ../layout.pug block content - .wrapper.wf-section - .w-container(class="wrapper_head") - h1.headline.h1= t('emails.transactionLinkRedeemed.title', { senderFirstName, senderLastName }) - .text-block - include ../includes/salutation.pug - p= t('emails.transactionLinkRedeemed.hasRedeemedYourLink', { senderFirstName, senderLastName, senderEmail }) - .content.w-container - h2.heading= t('emails.general.transactionDetails') - div(class="p_content")= t('emails.general.amountGDD', { amountGDD: transactionAmount }) - br - = t('emails.transactionLinkRedeemed.memo', { transactionMemo }) - br - = t('emails.general.detailsYouFindOnLinkToYourAccount') - a.button-3.w-button(href="https://gdd.gradido.net/transactions") #{t('emails.general.toAccount')} + .w-container(class="wrapper_head") + h1.headline.h1= t('emails.transactionLinkRedeemed.title', { senderFirstName, senderLastName }) + .text-block + include ../includes/salutation.pug + p= t('emails.transactionLinkRedeemed.hasRedeemedYourLink', { senderFirstName, senderLastName, senderEmail }) + .content.w-container + h2.heading= t('emails.general.transactionDetails') + div(class="p_content")= t('emails.general.amountGDD', { amountGDD: transactionAmount }) + br + = t('emails.transactionLinkRedeemed.memo', { transactionMemo }) + br + = t('emails.general.detailsYouFindOnLinkToYourAccount') + a.button-3.w-button(href="https://gdd.gradido.net/transactions") #{t('emails.general.toAccount')} - include ../includes/doNotReply.pug + include ../includes/doNotReply.pug diff --git a/backend/src/emails/templates/transactionReceived/html.pug b/backend/src/emails/templates/transactionReceived/html.pug index fcffdf2ee..b98bec34f 100644 --- a/backend/src/emails/templates/transactionReceived/html.pug +++ b/backend/src/emails/templates/transactionReceived/html.pug @@ -1,16 +1,15 @@ extend ../layout.pug block content - .wrapper.wf-section - .w-container(class="wrapper_head") - h1.headline.h1= t('emails.transactionReceived.title', { senderFirstName, senderLastName, transactionAmount }) - .text-block - include ../includes/salutation.pug - p= t('emails.transactionReceived.haveReceivedAmountGDDFrom', { transactionAmount, senderFirstName, senderLastName, senderEmail }) - .content.w-container - h2.heading= t('emails.general.transactionDetails') - div(class="p_content")= t('emails.general.detailsYouFindOnLinkToYourAccount') - a.button-3.w-button(href="https://gdd.gradido.net/transactions") #{t('emails.general.toAccount')} + .w-container(class="wrapper_head") + h1.headline.h1= t('emails.transactionReceived.title', { senderFirstName, senderLastName, transactionAmount }) + .text-block + include ../includes/salutation.pug + p= t('emails.transactionReceived.haveReceivedAmountGDDFrom', { transactionAmount, senderFirstName, senderLastName, senderEmail }) + .content.w-container + h2.heading= t('emails.general.transactionDetails') + div(class="p_content")= t('emails.general.detailsYouFindOnLinkToYourAccount') + a.button-3.w-button(href="https://gdd.gradido.net/transactions") #{t('emails.general.toAccount')} - include ../includes/doNotReply.pug + include ../includes/doNotReply.pug From 622892ffc68969c34ca1b2d24c36168565b765c7 Mon Sep 17 00:00:00 2001 From: mahula Date: Wed, 10 May 2023 09:16:34 +0200 Subject: [PATCH 027/123] fix locales --- backend/src/locales/de.json | 3 +-- backend/src/locales/en.json | 4 ++-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/backend/src/locales/de.json b/backend/src/locales/de.json index 3be616561..89c4bd35d 100644 --- a/backend/src/locales/de.json +++ b/backend/src/locales/de.json @@ -56,10 +56,9 @@ "contributionDetails": "Beitragsdetails", "detailsYouFindOnLinkToYourAccount": "Details zur Transaktion findest du in deinem Gradido-Konto.", "helloName": "Hallo {firstName} {lastName},", + "linkToYourAccount": "Link zu deinem Konto:", "linkValidity": "Der Link hat eine Gültigkeit von {hours} Stunden.\nSollte die Gültigkeit des Links bereits abgelaufen sein, kannst du dir hier einen neuen Link schicken lassen:", "linkValidityWithMinutes": "Der Link hat eine Gültigkeit von {hours} Stunden und {minutes} Minuten.\nSollte die Gültigkeit des Links bereits abgelaufen sein, kannst du dir hier einen neuen Link schicken lassen:", - - "linkToYourAccount": "Link zu deinem Konto:", "newLink": "Neuer Link", "orCopyLink": "Oder kopiere den Link in dein Browserfenster.", "pleaseDoNotReply": "Bitte antworte nicht auf diese E-Mail!", diff --git a/backend/src/locales/en.json b/backend/src/locales/en.json index f7244e14e..735d576d1 100644 --- a/backend/src/locales/en.json +++ b/backend/src/locales/en.json @@ -27,7 +27,7 @@ "toSeeContributionsAndMessages": "To see your common good contributions and related messages, go to the “Creation” menu in your Gradido account and click on the “My contributions” tab." }, "contributionConfirmed": { - "commonGoodContributionConfirmed": "Your common good contribution "{contributionMemo}" has just been approved by {senderFirstName} {senderLastName}. Your Gradido account has been credited with {amountGDD} GDD.", + "commonGoodContributionConfirmed": "Your common good contribution “{contributionMemo}” has just been approved by {senderFirstName} {senderLastName}. Your Gradido account has been credited with {amountGDD} GDD.", "subject": "Gradido: Your contribution to the common good was confirmed", "title": "Your contribution to the common good was confirmed" }, @@ -56,9 +56,9 @@ "contributionDetails": "Contribution details", "detailsYouFindOnLinkToYourAccount": "You can find transaction details in your Gradido account.", "helloName": "Hello {firstName} {lastName}", + "linkToYourAccount": "Link to your account:", "linkValidity": "The link has a validity of {hours} hours.\nIf the validity of the link has already expired, you can have a new link sent to you here:", "linkValidityWithMinutes": "The link has a validity of {hours} hours and {minutes} minutes.\nIf the validity of the link has already expired, you can have a new link sent to you here:", - "linkToYourAccount": "Link to your account:", "newLink": "New link", "orCopyLink": "or copy the link into your browser window.", "pleaseDoNotReply": "Please do not reply to this email!", From c822b2820abd8cf55d4dcd7ceaa63cc845eb7d44 Mon Sep 17 00:00:00 2001 From: mahula Date: Wed, 10 May 2023 09:17:24 +0200 Subject: [PATCH 028/123] fix address in footer --- backend/src/emails/templates/includes/footer.pug | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/backend/src/emails/templates/includes/footer.pug b/backend/src/emails/templates/includes/footer.pug index aa595df0b..b6f78cd22 100644 --- a/backend/src/emails/templates/includes/footer.pug +++ b/backend/src/emails/templates/includes/footer.pug @@ -83,7 +83,11 @@ footer br | Institut für Wirtschaftsbionik br - | Pfarrweg 2, 74653 Künzelsau, DE + | Pfarrweg 2 + br + | 74653 Künzelsau + br + | Deutschland .div-block a( class="terms_of_use" From ccd93a4a9527fbced01e2651a0216ef3731ceb25 Mon Sep 17 00:00:00 2001 From: mahula Date: Wed, 10 May 2023 09:57:25 +0200 Subject: [PATCH 029/123] clean up locales --- backend/src/locales/de.json | 7 +++---- backend/src/locales/en.json | 7 +++---- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/backend/src/locales/de.json b/backend/src/locales/de.json index 89c4bd35d..56c75130e 100644 --- a/backend/src/locales/de.json +++ b/backend/src/locales/de.json @@ -56,9 +56,8 @@ "contributionDetails": "Beitragsdetails", "detailsYouFindOnLinkToYourAccount": "Details zur Transaktion findest du in deinem Gradido-Konto.", "helloName": "Hallo {firstName} {lastName},", - "linkToYourAccount": "Link zu deinem Konto:", - "linkValidity": "Der Link hat eine Gültigkeit von {hours} Stunden.\nSollte die Gültigkeit des Links bereits abgelaufen sein, kannst du dir hier einen neuen Link schicken lassen:", - "linkValidityWithMinutes": "Der Link hat eine Gültigkeit von {hours} Stunden und {minutes} Minuten.\nSollte die Gültigkeit des Links bereits abgelaufen sein, kannst du dir hier einen neuen Link schicken lassen:", + "linkValidity": "Der Link hat eine Gültigkeit von {hours} Stunden.\nSollte die Gültigkeit des Links bereits abgelaufen sein, kannst du dir hier einen neuen Link schicken lassen.", + "linkValidityWithMinutes": "Der Link hat eine Gültigkeit von {hours} Stunden und {minutes} Minuten.\nSollte die Gültigkeit des Links bereits abgelaufen sein, kannst du dir hier einen neuen Link schicken lassen.", "newLink": "Neuer Link", "orCopyLink": "Oder kopiere den Link in dein Browserfenster.", "pleaseDoNotReply": "Bitte antworte nicht auf diese E-Mail!", @@ -69,7 +68,7 @@ "yourGradidoTeam": "dein Gradido-Team" }, "resetPassword": { - "pleaseClickLink": "Wenn du es warst, klicke bitte auf den Link:", + "pleaseClickLink": "Wenn du es warst, klicke bitte hier.", "subject": "Gradido: Passwort zurücksetzen", "title": "Passwort zurücksetzen", "youOrSomeoneResetPassword": "du oder jemand anderes, hast für dieses Konto ein Zurücksetzen des Passworts angefordert." diff --git a/backend/src/locales/en.json b/backend/src/locales/en.json index 735d576d1..a5bedbe9f 100644 --- a/backend/src/locales/en.json +++ b/backend/src/locales/en.json @@ -56,9 +56,8 @@ "contributionDetails": "Contribution details", "detailsYouFindOnLinkToYourAccount": "You can find transaction details in your Gradido account.", "helloName": "Hello {firstName} {lastName}", - "linkToYourAccount": "Link to your account:", - "linkValidity": "The link has a validity of {hours} hours.\nIf the validity of the link has already expired, you can have a new link sent to you here:", - "linkValidityWithMinutes": "The link has a validity of {hours} hours and {minutes} minutes.\nIf the validity of the link has already expired, you can have a new link sent to you here:", + "linkValidity": "The link has a validity of {hours} hours.\nIf the validity of the link has already expired, you can have a new link sent to you here.", + "linkValidityWithMinutes": "The link has a validity of {hours} hours and {minutes} minutes.\nIf the validity of the link has already expired, you can have a new link sent to you here.", "newLink": "New link", "orCopyLink": "or copy the link into your browser window.", "pleaseDoNotReply": "Please do not reply to this email!", @@ -69,7 +68,7 @@ "yourGradidoTeam": "your Gradido team" }, "resetPassword": { - "pleaseClickLink": "If it was you, please click on the link:", + "pleaseClickLink": "If it was you, please click here.", "subject": "Gradido: Reset password", "title": "Reset password", "youOrSomeoneResetPassword": "You, or someone else, requested a password reset for this account." From e49f738bac4d40ca2decb99b778cce0c2b0bdff4 Mon Sep 17 00:00:00 2001 From: mahula Date: Wed, 10 May 2023 10:42:43 +0200 Subject: [PATCH 030/123] clean up email template layout --- backend/src/emails/templates/layout.pug | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/backend/src/emails/templates/layout.pug b/backend/src/emails/templates/layout.pug index e6fdf92ab..f3beb3902 100644 --- a/backend/src/emails/templates/layout.pug +++ b/backend/src/emails/templates/layout.pug @@ -7,22 +7,10 @@ html.w-mod-js.wf-worksans-n4-active.wf-worksans-n6-active.wf-worksans-n1-active. content="text/html; charset=UTF-8" http-equiv="content-type" ) - meta(charset="utf-8") - title Passwort zurück setzen meta( name="viewport" content="width=device-width, initial-scale=1" ) - script( - type="text/javascript" - src="includes/webfont.js" - ) - script(type="text/javascript"). - WebFont.load({ google: { families: ["Work Sans:100,200,300,regular,500,600,700,800,900"] }}); - // [if lt IE 9]> Date: Wed, 10 May 2023 10:42:43 +0200 Subject: [PATCH 031/123] clean up email template layout --- backend/src/emails/templates/layout.pug | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/backend/src/emails/templates/layout.pug b/backend/src/emails/templates/layout.pug index f3beb3902..e01c16f91 100644 --- a/backend/src/emails/templates/layout.pug +++ b/backend/src/emails/templates/layout.pug @@ -1,7 +1,5 @@ doctype html -html.w-mod-js.wf-worksans-n4-active.wf-worksans-n6-active.wf-worksans-n1-active.wf-worksans-n3-active.wf-worksans-n2-active.wf-worksans-n5-active.wf-worksans-n7-active.wf-worksans-n8-active.wf-worksans-n9-active.wf-active( - lang=locale - ) +html(lang=locale) head meta( content="text/html; charset=UTF-8" From eedd3edf11704db5459a21dc11655ee4a215f0f0 Mon Sep 17 00:00:00 2001 From: mahula Date: Fri, 12 May 2023 15:47:40 +0200 Subject: [PATCH 032/123] clean up email header template --- .../src/emails/templates/includes/header.pug | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/backend/src/emails/templates/includes/header.pug b/backend/src/emails/templates/includes/header.pug index 19c581297..4c6c33d65 100644 --- a/backend/src/emails/templates/includes/header.pug +++ b/backend/src/emails/templates/includes/header.pug @@ -1,7 +1,12 @@ header - .head.wf-section - .container.w-container - img.logo-head( - alt="" - src="includes/images/logo_gradido.png" - ) + .head.wf-section(class="header") + img.head-logo( + alt="Gradido Logo" + loading="lazy" + src="https://gdd.gradido.net/img/brand/gradido-logo.png" + ) + img.head-image( + alt="" + loading="lazy" + src="https://gdd.gradido.net/img/template/Blaetter.png" + ) From 9b65da7848ee382255473e3e476a1cd77a3a783e Mon Sep 17 00:00:00 2001 From: mahula Date: Fri, 12 May 2023 15:51:30 +0200 Subject: [PATCH 033/123] clean up request new link email template --- backend/src/emails/templates/includes/requestNewLink.pug | 1 - 1 file changed, 1 deletion(-) diff --git a/backend/src/emails/templates/includes/requestNewLink.pug b/backend/src/emails/templates/includes/requestNewLink.pug index 5721d923c..a76c23c0a 100644 --- a/backend/src/emails/templates/includes/requestNewLink.pug +++ b/backend/src/emails/templates/includes/requestNewLink.pug @@ -7,5 +7,4 @@ requestNewLink else div(class="p_content")= t('emails.general.linkValidityWithMinutes', { hours: timeDurationObject.hours, minutes: timeDurationObject.minutes }) - br a.button-4.w-button(href=resendLink) #{t('emails.general.newLink')} \ No newline at end of file From 9bdf099ddd69a42ef6df92af6b2844ec265b8af6 Mon Sep 17 00:00:00 2001 From: mahula Date: Fri, 12 May 2023 15:52:56 +0200 Subject: [PATCH 034/123] use header template in email layout --- backend/src/emails/templates/layout.pug | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/emails/templates/layout.pug b/backend/src/emails/templates/layout.pug index e01c16f91..259817a29 100644 --- a/backend/src/emails/templates/layout.pug +++ b/backend/src/emails/templates/layout.pug @@ -16,7 +16,7 @@ html(lang=locale) include includes/webflow.css body - //- include includes/header.pug + include includes/header.pug .wrapper.wf-section block content From 0c7a78ace5191807fc67b59bf64e6b54073a9a7c Mon Sep 17 00:00:00 2001 From: mahula Date: Fri, 12 May 2023 15:57:38 +0200 Subject: [PATCH 035/123] update email template css --- .../src/emails/templates/includes/webflow.css | 918 +++++++++--------- 1 file changed, 459 insertions(+), 459 deletions(-) diff --git a/backend/src/emails/templates/includes/webflow.css b/backend/src/emails/templates/includes/webflow.css index 15bddf11d..f779258c2 100644 --- a/backend/src/emails/templates/includes/webflow.css +++ b/backend/src/emails/templates/includes/webflow.css @@ -7,463 +7,463 @@ /* ========================================================================== Start of base Webflow CSS - If you're looking for some ultra-clean CSS, skip the boilerplate and see the unminified code below. ========================================================================== */ -@font-face{font-family:'webflow-icons';src:url("data:application/x-font-ttf;charset=utf-8;base64,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") format('truetype');font-weight:normal;font-style:normal}[class^="w-icon-"],[class*=" w-icon-"]{font-family:'webflow-icons' !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.w-icon-slider-right:before{content:"\e600"}.w-icon-slider-left:before{content:"\e601"}.w-icon-nav-menu:before{content:"\e602"}.w-icon-arrow-down:before,.w-icon-dropdown-toggle:before{content:"\e603"}.w-icon-file-upload-remove:before{content:"\e900"}.w-icon-file-upload-icon:before{content:"\e903"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{height:100%}body{margin:0;min-height:100%;background-color:#fff;font-family:Arial,sans-serif;font-size:14px;line-height:20px;color:#333}img{max-width:100%;vertical-align:middle;display:inline-block}html.w-mod-touch *{background-attachment:scroll !important}.w-block{display:block}.w-inline-block{max-width:100%;display:inline-block}.w-clearfix:before,.w-clearfix:after{content:" ";display:table;grid-column-start:1;grid-row-start:1;grid-column-end:2;grid-row-end:2}.w-clearfix:after{clear:both}.w-hidden{display:none}.w-button{display:inline-block;padding:9px 15px;background-color:#3898EC;color:white;border:0;line-height:inherit;text-decoration:none;cursor:pointer;border-radius:0}input.w-button{-webkit-appearance:button}html[data-w-dynpage] [data-w-cloak]{color:transparent !important}.w-webflow-badge,.w-webflow-badge *{position:static;left:auto;top:auto;right:auto;bottom:auto;z-index:auto;display:block;visibility:visible;overflow:visible;overflow-x:visible;overflow-y:visible;box-sizing:border-box;width:auto;height:auto;max-height:none;max-width:none;min-height:0;min-width:0;margin:0;padding:0;float:none;clear:none;border:0 none transparent;border-radius:0;background:none;background-image:none;background-position:0% 0%;background-size:auto auto;background-repeat:repeat;background-origin:padding-box;background-clip:border-box;background-attachment:scroll;background-color:transparent;box-shadow:none;opacity:1;transform:none;transition:none;direction:ltr;font-family:inherit;font-weight:inherit;color:inherit;font-size:inherit;line-height:inherit;font-style:inherit;font-variant:inherit;text-align:inherit;letter-spacing:inherit;text-decoration:inherit;text-indent:0;text-transform:inherit;list-style-type:disc;text-shadow:none;font-smoothing:auto;vertical-align:baseline;cursor:inherit;white-space:inherit;word-break:normal;word-spacing:normal;word-wrap:normal}.w-webflow-badge{position:fixed !important;display:inline-block !important;visibility:visible !important;z-index:2147483647 !important;top:auto !important;right:12px !important;bottom:12px !important;left:auto !important;color:#AAADB0 !important;background-color:#fff !important;border-radius:3px !important;padding:6px 8px 6px 6px !important;font-size:12px !important;opacity:1 !important;line-height:14px !important;text-decoration:none !important;transform:none !important;margin:0 !important;width:auto !important;height:auto !important;overflow:visible !important;white-space:nowrap;box-shadow:0 0 0 1px rgba(0,0,0,0.1),0 1px 3px rgba(0,0,0,0.1);cursor:pointer}.w-webflow-badge>img{display:inline-block !important;visibility:visible !important;opacity:1 !important;vertical-align:middle !important}h1,h2,h3,h4,h5,h6{font-weight:bold;margin-bottom:10px}h1{font-size:38px;line-height:44px;margin-top:20px}h2{font-size:32px;line-height:36px;margin-top:20px}h3{font-size:24px;line-height:30px;margin-top:20px}h4{font-size:18px;line-height:24px;margin-top:10px}h5{font-size:14px;line-height:20px;margin-top:10px}h6{font-size:12px;line-height:18px;margin-top:10px}p{margin-top:0;margin-bottom:10px}blockquote{margin:0 0 10px 0;padding:10px 20px;border-left:5px solid #E2E2E2;font-size:18px;line-height:22px}figure{margin:0;margin-bottom:10px}figcaption{margin-top:5px;text-align:center}ul,ol{margin-top:0px;margin-bottom:10px;padding-left:40px}.w-list-unstyled{padding-left:0;list-style:none}.w-embed:before,.w-embed:after{content:" ";display:table;grid-column-start:1;grid-row-start:1;grid-column-end:2;grid-row-end:2}.w-embed:after{clear:both}.w-video{width:100%;position:relative;padding:0}.w-video iframe,.w-video object,.w-video embed{position:absolute;top:0;left:0;width:100%;height:100%;border:none}fieldset{padding:0;margin:0;border:0}button,[type='button'],[type='reset']{border:0;cursor:pointer;-webkit-appearance:button}.w-form{margin:0 0 15px}.w-form-done{display:none;padding:20px;text-align:center;background-color:#dddddd}.w-form-fail{display:none;margin-top:10px;padding:10px;background-color:#ffdede}label{display:block;margin-bottom:5px;font-weight:bold}.w-input,.w-select{display:block;width:100%;height:38px;padding:8px 12px;margin-bottom:10px;font-size:14px;line-height:1.42857143;color:#333333;vertical-align:middle;background-color:#ffffff;border:1px solid #cccccc}.w-input:-moz-placeholder,.w-select:-moz-placeholder{color:#999}.w-input::-moz-placeholder,.w-select::-moz-placeholder{color:#999;opacity:1}.w-input:-ms-input-placeholder,.w-select:-ms-input-placeholder{color:#999}.w-input::-webkit-input-placeholder,.w-select::-webkit-input-placeholder{color:#999}.w-input:focus,.w-select:focus{border-color:#3898EC;outline:0}.w-input[disabled],.w-select[disabled],.w-input[readonly],.w-select[readonly],fieldset[disabled] .w-input,fieldset[disabled] .w-select{cursor:not-allowed}.w-input[disabled]:not(.w-input-disabled),.w-select[disabled]:not(.w-input-disabled),.w-input[readonly],.w-select[readonly],fieldset[disabled]:not(.w-input-disabled) .w-input,fieldset[disabled]:not(.w-input-disabled) .w-select{background-color:#eeeeee}textarea.w-input,textarea.w-select{height:auto}.w-select{background-color:#f3f3f3}.w-select[multiple]{height:auto}.w-form-label{display:inline-block;cursor:pointer;font-weight:normal;margin-bottom:0px}.w-radio{display:block;margin-bottom:5px;padding-left:20px}.w-radio:before,.w-radio:after{content:" ";display:table;grid-column-start:1;grid-row-start:1;grid-column-end:2;grid-row-end:2}.w-radio:after{clear:both}.w-radio-input{margin:4px 0 0;margin-top:1px \9;line-height:normal;float:left;margin-left:-20px}.w-radio-input{margin-top:3px}.w-file-upload{display:block;margin-bottom:10px}.w-file-upload-input{width:.1px;height:.1px;opacity:0;overflow:hidden;position:absolute;z-index:-100}.w-file-upload-default,.w-file-upload-uploading,.w-file-upload-success{display:inline-block;color:#333333}.w-file-upload-error{display:block;margin-top:10px}.w-file-upload-default.w-hidden,.w-file-upload-uploading.w-hidden,.w-file-upload-error.w-hidden,.w-file-upload-success.w-hidden{display:none}.w-file-upload-uploading-btn{display:flex;font-size:14px;font-weight:normal;cursor:pointer;margin:0;padding:8px 12px;border:1px solid #cccccc;background-color:#fafafa}.w-file-upload-file{display:flex;flex-grow:1;justify-content:space-between;margin:0;padding:8px 9px 8px 11px;border:1px solid #cccccc;background-color:#fafafa}.w-file-upload-file-name{font-size:14px;font-weight:normal;display:block}.w-file-remove-link{margin-top:3px;margin-left:10px;width:auto;height:auto;padding:3px;display:block;cursor:pointer}.w-icon-file-upload-remove{margin:auto;font-size:10px}.w-file-upload-error-msg{display:inline-block;color:#ea384c;padding:2px 0}.w-file-upload-info{display:inline-block;line-height:38px;padding:0 12px}.w-file-upload-label{display:inline-block;font-size:14px;font-weight:normal;cursor:pointer;margin:0;padding:8px 12px;border:1px solid #cccccc;background-color:#fafafa}.w-icon-file-upload-icon,.w-icon-file-upload-uploading{display:inline-block;margin-right:8px;width:20px}.w-icon-file-upload-uploading{height:20px}.w-container{margin-left:auto;margin-right:auto;max-width:940px}.w-container:before,.w-container:after{content:" ";display:table;grid-column-start:1;grid-row-start:1;grid-column-end:2;grid-row-end:2}.w-container:after{clear:both}.w-container .w-row{margin-left:-10px;margin-right:-10px}.w-row:before,.w-row:after{content:" ";display:table;grid-column-start:1;grid-row-start:1;grid-column-end:2;grid-row-end:2}.w-row:after{clear:both}.w-row .w-row{margin-left:0;margin-right:0}.w-col{position:relative;float:left;width:100%;min-height:1px;padding-left:10px;padding-right:10px}.w-col .w-col{padding-left:0;padding-right:0}.w-col-1{width:8.33333333%}.w-col-2{width:16.66666667%}.w-col-3{width:25%}.w-col-4{width:33.33333333%}.w-col-5{width:41.66666667%}.w-col-6{width:50%}.w-col-7{width:58.33333333%}.w-col-8{width:66.66666667%}.w-col-9{width:75%}.w-col-10{width:83.33333333%}.w-col-11{width:91.66666667%}.w-col-12{width:100%}.w-hidden-main{display:none !important}@media screen and (max-width:991px){.w-container{max-width:728px}.w-hidden-main{display:inherit !important}.w-hidden-medium{display:none !important}.w-col-medium-1{width:8.33333333%}.w-col-medium-2{width:16.66666667%}.w-col-medium-3{width:25%}.w-col-medium-4{width:33.33333333%}.w-col-medium-5{width:41.66666667%}.w-col-medium-6{width:50%}.w-col-medium-7{width:58.33333333%}.w-col-medium-8{width:66.66666667%}.w-col-medium-9{width:75%}.w-col-medium-10{width:83.33333333%}.w-col-medium-11{width:91.66666667%}.w-col-medium-12{width:100%}.w-col-stack{width:100%;left:auto;right:auto}}@media screen and (max-width:767px){.w-hidden-main{display:inherit !important}.w-hidden-medium{display:inherit !important}.w-hidden-small{display:none !important}.w-row,.w-container .w-row{margin-left:0;margin-right:0}.w-col{width:100%;left:auto;right:auto}.w-col-small-1{width:8.33333333%}.w-col-small-2{width:16.66666667%}.w-col-small-3{width:25%}.w-col-small-4{width:33.33333333%}.w-col-small-5{width:41.66666667%}.w-col-small-6{width:50%}.w-col-small-7{width:58.33333333%}.w-col-small-8{width:66.66666667%}.w-col-small-9{width:75%}.w-col-small-10{width:83.33333333%}.w-col-small-11{width:91.66666667%}.w-col-small-12{width:100%}}@media screen and (max-width:479px){.w-container{max-width:none}.w-hidden-main{display:inherit !important}.w-hidden-medium{display:inherit !important}.w-hidden-small{display:inherit !important}.w-hidden-tiny{display:none !important}.w-col{width:100%}.w-col-tiny-1{width:8.33333333%}.w-col-tiny-2{width:16.66666667%}.w-col-tiny-3{width:25%}.w-col-tiny-4{width:33.33333333%}.w-col-tiny-5{width:41.66666667%}.w-col-tiny-6{width:50%}.w-col-tiny-7{width:58.33333333%}.w-col-tiny-8{width:66.66666667%}.w-col-tiny-9{width:75%}.w-col-tiny-10{width:83.33333333%}.w-col-tiny-11{width:91.66666667%}.w-col-tiny-12{width:100%}}.w-widget{position:relative}.w-widget-map{width:100%;height:400px}.w-widget-map label{width:auto;display:inline}.w-widget-map img{max-width:inherit}.w-widget-map .gm-style-iw{text-align:center}.w-widget-map .gm-style-iw>button{display:none !important}.w-widget-twitter{overflow:hidden}.w-widget-twitter-count-shim{display:inline-block;vertical-align:top;position:relative;width:28px;height:20px;text-align:center;background:white;border:#758696 solid 1px;border-radius:3px}.w-widget-twitter-count-shim *{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.w-widget-twitter-count-shim .w-widget-twitter-count-inner{position:relative;font-size:15px;line-height:12px;text-align:center;color:#999;font-family:serif}.w-widget-twitter-count-shim .w-widget-twitter-count-clear{position:relative;display:block}.w-widget-twitter-count-shim.w--large{width:36px;height:28px}.w-widget-twitter-count-shim.w--large .w-widget-twitter-count-inner{font-size:18px;line-height:18px}.w-widget-twitter-count-shim:not(.w--vertical){margin-left:5px;margin-right:8px}.w-widget-twitter-count-shim:not(.w--vertical).w--large{margin-left:6px}.w-widget-twitter-count-shim:not(.w--vertical):before,.w-widget-twitter-count-shim:not(.w--vertical):after{top:50%;left:0;border:solid transparent;content:' ';height:0;width:0;position:absolute;pointer-events:none}.w-widget-twitter-count-shim:not(.w--vertical):before{border-color:rgba(117,134,150,0);border-right-color:#5d6c7b;border-width:4px;margin-left:-9px;margin-top:-4px}.w-widget-twitter-count-shim:not(.w--vertical).w--large:before{border-width:5px;margin-left:-10px;margin-top:-5px}.w-widget-twitter-count-shim:not(.w--vertical):after{border-color:rgba(255,255,255,0);border-right-color:white;border-width:4px;margin-left:-8px;margin-top:-4px}.w-widget-twitter-count-shim:not(.w--vertical).w--large:after{border-width:5px;margin-left:-9px;margin-top:-5px}.w-widget-twitter-count-shim.w--vertical{width:61px;height:33px;margin-bottom:8px}.w-widget-twitter-count-shim.w--vertical:before,.w-widget-twitter-count-shim.w--vertical:after{top:100%;left:50%;border:solid transparent;content:' ';height:0;width:0;position:absolute;pointer-events:none}.w-widget-twitter-count-shim.w--vertical:before{border-color:rgba(117,134,150,0);border-top-color:#5d6c7b;border-width:5px;margin-left:-5px}.w-widget-twitter-count-shim.w--vertical:after{border-color:rgba(255,255,255,0);border-top-color:white;border-width:4px;margin-left:-4px}.w-widget-twitter-count-shim.w--vertical .w-widget-twitter-count-inner{font-size:18px;line-height:22px}.w-widget-twitter-count-shim.w--vertical.w--large{width:76px}.w-background-video{position:relative;overflow:hidden;height:500px;color:white}.w-background-video>video{background-size:cover;background-position:50% 50%;position:absolute;margin:auto;width:100%;height:100%;right:-100%;bottom:-100%;top:-100%;left:-100%;object-fit:cover;z-index:-100}.w-background-video>video::-webkit-media-controls-start-playback-button{display:none !important;-webkit-appearance:none}.w-background-video--control{position:absolute;bottom:1em;right:1em;background-color:transparent;padding:0}.w-background-video--control>[hidden]{display:none !important}.w-slider{position:relative;height:300px;text-align:center;background:#dddddd;clear:both;-webkit-tap-highlight-color:rgba(0,0,0,0);tap-highlight-color:rgba(0,0,0,0)}.w-slider-mask{position:relative;display:block;overflow:hidden;z-index:1;left:0;right:0;height:100%;white-space:nowrap}.w-slide{position:relative;display:inline-block;vertical-align:top;width:100%;height:100%;white-space:normal;text-align:left}.w-slider-nav{position:absolute;z-index:2;top:auto;right:0;bottom:0;left:0;margin:auto;padding-top:10px;height:40px;text-align:center;-webkit-tap-highlight-color:rgba(0,0,0,0);tap-highlight-color:rgba(0,0,0,0)}.w-slider-nav.w-round>div{border-radius:100%}.w-slider-nav.w-num>div{width:auto;height:auto;padding:.2em .5em;font-size:inherit;line-height:inherit}.w-slider-nav.w-shadow>div{box-shadow:0 0 3px rgba(51,51,51,0.4)}.w-slider-nav-invert{color:#fff}.w-slider-nav-invert>div{background-color:rgba(34,34,34,0.4)}.w-slider-nav-invert>div.w-active{background-color:#222}.w-slider-dot{position:relative;display:inline-block;width:1em;height:1em;background-color:rgba(255,255,255,0.4);cursor:pointer;margin:0 3px .5em;transition:background-color 100ms,color 100ms}.w-slider-dot.w-active{background-color:#fff}.w-slider-dot:focus{outline:none;box-shadow:0 0 0 2px #fff}.w-slider-dot:focus.w-active{box-shadow:none}.w-slider-arrow-left,.w-slider-arrow-right{position:absolute;width:80px;top:0;right:0;bottom:0;left:0;margin:auto;cursor:pointer;overflow:hidden;color:white;font-size:40px;-webkit-tap-highlight-color:rgba(0,0,0,0);tap-highlight-color:rgba(0,0,0,0);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.w-slider-arrow-left [class^='w-icon-'],.w-slider-arrow-right [class^='w-icon-'],.w-slider-arrow-left [class*=' w-icon-'],.w-slider-arrow-right [class*=' w-icon-']{position:absolute}.w-slider-arrow-left:focus,.w-slider-arrow-right:focus{outline:0}.w-slider-arrow-left{z-index:3;right:auto}.w-slider-arrow-right{z-index:4;left:auto}.w-icon-slider-left,.w-icon-slider-right{top:0;right:0;bottom:0;left:0;margin:auto;width:1em;height:1em}.w-slider-aria-label{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.w-slider-force-show{display:block !important}.w-dropdown{display:inline-block;position:relative;text-align:left;margin-left:auto;margin-right:auto;z-index:900}.w-dropdown-btn,.w-dropdown-toggle,.w-dropdown-link{position:relative;vertical-align:top;text-decoration:none;color:#222222;padding:20px;text-align:left;margin-left:auto;margin-right:auto;white-space:nowrap}.w-dropdown-toggle{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:inline-block;cursor:pointer;padding-right:40px}.w-dropdown-toggle:focus{outline:0}.w-icon-dropdown-toggle{position:absolute;top:0;right:0;bottom:0;margin:auto;margin-right:20px;width:1em;height:1em}.w-dropdown-list{position:absolute;background:#dddddd;display:none;min-width:100%}.w-dropdown-list.w--open{display:block}.w-dropdown-link{padding:10px 20px;display:block;color:#222222}.w-dropdown-link.w--current{color:#0082f3}.w-dropdown-link:focus{outline:0}@media screen and (max-width:767px){.w-nav-brand{padding-left:10px}}.w-lightbox-backdrop{color:#000;cursor:auto;font-family:serif;font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;list-style:disc;text-align:start;text-indent:0;text-shadow:none;text-transform:none;visibility:visible;white-space:normal;word-break:normal;word-spacing:normal;word-wrap:normal;position:fixed;top:0;right:0;bottom:0;left:0;color:#fff;font-family:"Helvetica Neue",Helvetica,Ubuntu,"Segoe UI",Verdana,sans-serif;font-size:17px;line-height:1.2;font-weight:300;text-align:center;background:rgba(0,0,0,0.9);z-index:2000;outline:0;opacity:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-webkit-tap-highlight-color:transparent;-webkit-transform:translate(0, 0)}.w-lightbox-backdrop,.w-lightbox-container{height:100%;overflow:auto;-webkit-overflow-scrolling:touch}.w-lightbox-content{position:relative;height:100vh;overflow:hidden}.w-lightbox-view{position:absolute;width:100vw;height:100vh;opacity:0}.w-lightbox-view:before{content:"";height:100vh}.w-lightbox-group,.w-lightbox-group .w-lightbox-view,.w-lightbox-group .w-lightbox-view:before{height:86vh}.w-lightbox-frame,.w-lightbox-view:before{display:inline-block;vertical-align:middle}.w-lightbox-figure{position:relative;margin:0}.w-lightbox-group .w-lightbox-figure{cursor:pointer}.w-lightbox-img{width:auto;height:auto;max-width:none}.w-lightbox-image{display:block;float:none;max-width:100vw;max-height:100vh}.w-lightbox-group .w-lightbox-image{max-height:86vh}.w-lightbox-caption{position:absolute;right:0;bottom:0;left:0;padding:.5em 1em;background:rgba(0,0,0,0.4);text-align:left;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.w-lightbox-embed{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%}.w-lightbox-control{position:absolute;top:0;width:4em;background-size:24px;background-repeat:no-repeat;background-position:center;cursor:pointer;-webkit-transition:all .3s;transition:all .3s}.w-lightbox-left{display:none;bottom:0;left:0;background-image:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9Ii0yMCAwIDI0IDQwIiB3aWR0aD0iMjQiIGhlaWdodD0iNDAiPjxnIHRyYW5zZm9ybT0icm90YXRlKDQ1KSI+PHBhdGggZD0ibTAgMGg1djIzaDIzdjVoLTI4eiIgb3BhY2l0eT0iLjQiLz48cGF0aCBkPSJtMSAxaDN2MjNoMjN2M2gtMjZ6IiBmaWxsPSIjZmZmIi8+PC9nPjwvc3ZnPg==")}.w-lightbox-right{display:none;right:0;bottom:0;background-image:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9Ii00IDAgMjQgNDAiIHdpZHRoPSIyNCIgaGVpZ2h0PSI0MCI+PGcgdHJhbnNmb3JtPSJyb3RhdGUoNDUpIj48cGF0aCBkPSJtMC0waDI4djI4aC01di0yM2gtMjN6IiBvcGFjaXR5PSIuNCIvPjxwYXRoIGQ9Im0xIDFoMjZ2MjZoLTN2LTIzaC0yM3oiIGZpbGw9IiNmZmYiLz48L2c+PC9zdmc+")}.w-lightbox-close{right:0;height:2.6em;background-image:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9Ii00IDAgMTggMTciIHdpZHRoPSIxOCIgaGVpZ2h0PSIxNyI+PGcgdHJhbnNmb3JtPSJyb3RhdGUoNDUpIj48cGF0aCBkPSJtMCAwaDd2LTdoNXY3aDd2NWgtN3Y3aC01di03aC03eiIgb3BhY2l0eT0iLjQiLz48cGF0aCBkPSJtMSAxaDd2LTdoM3Y3aDd2M2gtN3Y3aC0zdi03aC03eiIgZmlsbD0iI2ZmZiIvPjwvZz48L3N2Zz4=");background-size:18px}.w-lightbox-strip{position:absolute;bottom:0;left:0;right:0;padding:0 1vh;line-height:0;white-space:nowrap;overflow-x:auto;overflow-y:hidden}.w-lightbox-item{display:inline-block;width:10vh;padding:2vh 1vh;box-sizing:content-box;cursor:pointer;-webkit-transform:translate3d(0, 0, 0)}.w-lightbox-active{opacity:.3}.w-lightbox-thumbnail{position:relative;height:10vh;background:#222;overflow:hidden}.w-lightbox-thumbnail-image{position:absolute;top:0;left:0}.w-lightbox-thumbnail .w-lightbox-tall{top:50%;width:100%;-webkit-transform:translate(0, -50%);-ms-transform:translate(0, -50%);transform:translate(0, -50%)}.w-lightbox-thumbnail .w-lightbox-wide{left:50%;height:100%;-webkit-transform:translate(-50%, 0);-ms-transform:translate(-50%, 0);transform:translate(-50%, 0)}.w-lightbox-spinner{position:absolute;top:50%;left:50%;box-sizing:border-box;width:40px;height:40px;margin-top:-20px;margin-left:-20px;border:5px solid rgba(0,0,0,0.4);border-radius:50%;-webkit-animation:spin .8s infinite linear;animation:spin .8s infinite linear}.w-lightbox-spinner:after{content:"";position:absolute;top:-4px;right:-4px;bottom:-4px;left:-4px;border:3px solid transparent;border-bottom-color:#fff;border-radius:50%}.w-lightbox-hide{display:none}.w-lightbox-noscroll{overflow:hidden}@media (min-width:768px){.w-lightbox-content{height:96vh;margin-top:2vh}.w-lightbox-view,.w-lightbox-view:before{height:96vh}.w-lightbox-group,.w-lightbox-group .w-lightbox-view,.w-lightbox-group .w-lightbox-view:before{height:84vh}.w-lightbox-image{max-width:96vw;max-height:96vh}.w-lightbox-group .w-lightbox-image{max-width:82.3vw;max-height:84vh}.w-lightbox-left,.w-lightbox-right{display:block;opacity:.5}.w-lightbox-close{opacity:.8}.w-lightbox-control:hover{opacity:1}}.w-lightbox-inactive,.w-lightbox-inactive:hover{opacity:0}.w-richtext:before,.w-richtext:after{content:" ";display:table;grid-column-start:1;grid-row-start:1;grid-column-end:2;grid-row-end:2}.w-richtext:after{clear:both}.w-richtext[contenteditable="true"]:before,.w-richtext[contenteditable="true"]:after{white-space:initial}.w-richtext ol,.w-richtext ul{overflow:hidden}.w-richtext .w-richtext-figure-selected.w-richtext-figure-type-video div:after,.w-richtext .w-richtext-figure-selected[data-rt-type="video"] div:after{outline:2px solid #2895f7}.w-richtext .w-richtext-figure-selected.w-richtext-figure-type-image div,.w-richtext .w-richtext-figure-selected[data-rt-type="image"] div{outline:2px solid #2895f7}.w-richtext figure.w-richtext-figure-type-video>div:after,.w-richtext figure[data-rt-type="video"]>div:after{content:'';position:absolute;display:none;left:0;top:0;right:0;bottom:0}.w-richtext figure{position:relative;max-width:60%}.w-richtext figure>div:before{cursor:default!important}.w-richtext figure img{width:100%}.w-richtext figure figcaption.w-richtext-figcaption-placeholder{opacity:.6}.w-richtext figure div{font-size:0px;color:transparent}.w-richtext figure.w-richtext-figure-type-image,.w-richtext figure[data-rt-type="image"]{display:table}.w-richtext figure.w-richtext-figure-type-image>div,.w-richtext figure[data-rt-type="image"]>div{display:inline-block}.w-richtext figure.w-richtext-figure-type-image>figcaption,.w-richtext figure[data-rt-type="image"]>figcaption{display:table-caption;caption-side:bottom}.w-richtext figure.w-richtext-figure-type-video,.w-richtext figure[data-rt-type="video"]{width:60%;height:0}.w-richtext figure.w-richtext-figure-type-video iframe,.w-richtext figure[data-rt-type="video"] iframe{position:absolute;top:0;left:0;width:100%;height:100%}.w-richtext figure.w-richtext-figure-type-video>div,.w-richtext figure[data-rt-type="video"]>div{width:100%}.w-richtext figure.w-richtext-align-center{margin-right:auto;margin-left:auto;clear:both}.w-richtext figure.w-richtext-align-center.w-richtext-figure-type-image>div,.w-richtext figure.w-richtext-align-center[data-rt-type="image"]>div{max-width:100%}.w-richtext figure.w-richtext-align-normal{clear:both}.w-richtext figure.w-richtext-align-fullwidth{width:100%;max-width:100%;text-align:center;clear:both;display:block;margin-right:auto;margin-left:auto}.w-richtext figure.w-richtext-align-fullwidth>div{display:inline-block;padding-bottom:inherit}.w-richtext figure.w-richtext-align-fullwidth>figcaption{display:block}.w-richtext figure.w-richtext-align-floatleft{float:left;margin-right:15px;clear:none}.w-richtext figure.w-richtext-align-floatright{float:right;margin-left:15px;clear:none}.w-nav{position:relative;background:#dddddd;z-index:1000}.w-nav:before,.w-nav:after{content:" ";display:table;grid-column-start:1;grid-row-start:1;grid-column-end:2;grid-row-end:2}.w-nav:after{clear:both}.w-nav-brand{position:relative;float:left;text-decoration:none;color:#333333}.w-nav-link{position:relative;display:inline-block;vertical-align:top;text-decoration:none;color:#222222;padding:20px;text-align:left;margin-left:auto;margin-right:auto}.w-nav-link.w--current{color:#0082f3}.w-nav-menu{position:relative;float:right}[data-nav-menu-open]{display:block !important;position:absolute;top:100%;left:0;right:0;background:#C8C8C8;text-align:center;overflow:visible;min-width:200px}.w--nav-link-open{display:block;position:relative}.w-nav-overlay{position:absolute;overflow:hidden;display:none;top:100%;left:0;right:0;width:100%}.w-nav-overlay [data-nav-menu-open]{top:0}.w-nav[data-animation="over-left"] .w-nav-overlay{width:auto}.w-nav[data-animation="over-left"] .w-nav-overlay,.w-nav[data-animation="over-left"] [data-nav-menu-open]{right:auto;z-index:1;top:0}.w-nav[data-animation="over-right"] .w-nav-overlay{width:auto}.w-nav[data-animation="over-right"] .w-nav-overlay,.w-nav[data-animation="over-right"] [data-nav-menu-open]{left:auto;z-index:1;top:0}.w-nav-button{position:relative;float:right;padding:18px;font-size:24px;display:none;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0);tap-highlight-color:rgba(0,0,0,0);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.w-nav-button:focus{outline:0}.w-nav-button.w--open{background-color:#C8C8C8;color:white}.w-nav[data-collapse="all"] .w-nav-menu{display:none}.w-nav[data-collapse="all"] .w-nav-button{display:block}.w--nav-dropdown-open{display:block}.w--nav-dropdown-toggle-open{display:block}.w--nav-dropdown-list-open{position:static}@media screen and (max-width:991px){.w-nav[data-collapse="medium"] .w-nav-menu{display:none}.w-nav[data-collapse="medium"] .w-nav-button{display:block}}@media screen and (max-width:767px){.w-nav[data-collapse="small"] .w-nav-menu{display:none}.w-nav[data-collapse="small"] .w-nav-button{display:block}.w-nav-brand{padding-left:10px}}@media screen and (max-width:479px){.w-nav[data-collapse="tiny"] .w-nav-menu{display:none}.w-nav[data-collapse="tiny"] .w-nav-button{display:block}}.w-tabs{position:relative}.w-tabs:before,.w-tabs:after{content:" ";display:table;grid-column-start:1;grid-row-start:1;grid-column-end:2;grid-row-end:2}.w-tabs:after{clear:both}.w-tab-menu{position:relative}.w-tab-link{position:relative;display:inline-block;vertical-align:top;text-decoration:none;padding:9px 30px;text-align:left;cursor:pointer;color:#222222;background-color:#dddddd}.w-tab-link.w--current{background-color:#C8C8C8}.w-tab-link:focus{outline:0}.w-tab-content{position:relative;display:block;overflow:hidden}.w-tab-pane{position:relative;display:none}.w--tab-active{display:block}@media screen and (max-width:479px){.w-tab-link{display:block}}.w-ix-emptyfix:after{content:""}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.w-dyn-empty{padding:10px;background-color:#dddddd}.w-dyn-hide{display:none !important}.w-dyn-bind-empty{display:none !important}.w-condition-invisible{display:none !important} + @font-face{font-family:'webflow-icons';src:url("data:application/x-font-ttf;charset=utf-8;base64,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") format('truetype');font-weight:normal;font-style:normal}[class^="w-icon-"],[class*=" w-icon-"]{font-family:'webflow-icons' !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.w-icon-slider-right:before{content:"\e600"}.w-icon-slider-left:before{content:"\e601"}.w-icon-nav-menu:before{content:"\e602"}.w-icon-arrow-down:before,.w-icon-dropdown-toggle:before{content:"\e603"}.w-icon-file-upload-remove:before{content:"\e900"}.w-icon-file-upload-icon:before{content:"\e903"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{height:100%}body{margin:0;min-height:100%;background-color:#fff;font-family:Arial,sans-serif;font-size:14px;line-height:20px;color:#333}img{max-width:100%;vertical-align:middle;display:inline-block}html.w-mod-touch *{background-attachment:scroll !important}.w-block{display:block}.w-inline-block{max-width:100%;display:inline-block}.w-clearfix:before,.w-clearfix:after{content:" ";display:table;grid-column-start:1;grid-row-start:1;grid-column-end:2;grid-row-end:2}.w-clearfix:after{clear:both}.w-hidden{display:none}.w-button{display:inline-block;padding:9px 15px;background-color:#3898EC;color:white;border:0;line-height:inherit;text-decoration:none;cursor:pointer;border-radius:0}input.w-button{-webkit-appearance:button}html[data-w-dynpage] [data-w-cloak]{color:transparent !important}.w-webflow-badge,.w-webflow-badge *{position:static;left:auto;top:auto;right:auto;bottom:auto;z-index:auto;display:block;visibility:visible;overflow:visible;overflow-x:visible;overflow-y:visible;box-sizing:border-box;width:auto;height:auto;max-height:none;max-width:none;min-height:0;min-width:0;margin:0;padding:0;float:none;clear:none;border:0 none transparent;border-radius:0;background:none;background-image:none;background-position:0% 0%;background-size:auto auto;background-repeat:repeat;background-origin:padding-box;background-clip:border-box;background-attachment:scroll;background-color:transparent;box-shadow:none;opacity:1;transform:none;transition:none;direction:ltr;font-family:inherit;font-weight:inherit;color:inherit;font-size:inherit;line-height:inherit;font-style:inherit;font-variant:inherit;text-align:inherit;letter-spacing:inherit;text-decoration:inherit;text-indent:0;text-transform:inherit;list-style-type:disc;text-shadow:none;font-smoothing:auto;vertical-align:baseline;cursor:inherit;white-space:inherit;word-break:normal;word-spacing:normal;word-wrap:normal}.w-webflow-badge{position:fixed !important;display:inline-block !important;visibility:visible !important;z-index:2147483647 !important;top:auto !important;right:12px !important;bottom:12px !important;left:auto !important;color:#AAADB0 !important;background-color:#fff !important;border-radius:3px !important;padding:6px 8px 6px 6px !important;font-size:12px !important;opacity:1 !important;line-height:14px !important;text-decoration:none !important;transform:none !important;margin:0 !important;width:auto !important;height:auto !important;overflow:visible !important;white-space:nowrap;box-shadow:0 0 0 1px rgba(0,0,0,0.1),0 1px 3px rgba(0,0,0,0.1);cursor:pointer}.w-webflow-badge>img{display:inline-block !important;visibility:visible !important;opacity:1 !important;vertical-align:middle !important}h1,h2,h3,h4,h5,h6{font-weight:bold;margin-bottom:10px}h1{font-size:38px;line-height:44px;margin-top:20px}h2{font-size:32px;line-height:36px;margin-top:20px}h3{font-size:24px;line-height:30px;margin-top:20px}h4{font-size:18px;line-height:24px;margin-top:10px}h5{font-size:14px;line-height:20px;margin-top:10px}h6{font-size:12px;line-height:18px;margin-top:10px}p{margin-top:0;margin-bottom:10px}blockquote{margin:0 0 10px 0;padding:10px 20px;border-left:5px solid #E2E2E2;font-size:18px;line-height:22px}figure{margin:0;margin-bottom:10px}figcaption{margin-top:5px;text-align:center}ul,ol{margin-top:0px;margin-bottom:10px;padding-left:40px}.w-list-unstyled{padding-left:0;list-style:none}.w-embed:before,.w-embed:after{content:" ";display:table;grid-column-start:1;grid-row-start:1;grid-column-end:2;grid-row-end:2}.w-embed:after{clear:both}.w-video{width:100%;position:relative;padding:0}.w-video iframe,.w-video object,.w-video embed{position:absolute;top:0;left:0;width:100%;height:100%;border:none}fieldset{padding:0;margin:0;border:0}button,[type='button'],[type='reset']{border:0;cursor:pointer;-webkit-appearance:button}.w-form{margin:0 0 15px}.w-form-done{display:none;padding:20px;text-align:center;background-color:#dddddd}.w-form-fail{display:none;margin-top:10px;padding:10px;background-color:#ffdede}label{display:block;margin-bottom:5px;font-weight:bold}.w-input,.w-select{display:block;width:100%;height:38px;padding:8px 12px;margin-bottom:10px;font-size:14px;line-height:1.42857143;color:#333333;vertical-align:middle;background-color:#ffffff;border:1px solid #cccccc}.w-input:-moz-placeholder,.w-select:-moz-placeholder{color:#999}.w-input::-moz-placeholder,.w-select::-moz-placeholder{color:#999;opacity:1}.w-input:-ms-input-placeholder,.w-select:-ms-input-placeholder{color:#999}.w-input::-webkit-input-placeholder,.w-select::-webkit-input-placeholder{color:#999}.w-input:focus,.w-select:focus{border-color:#3898EC;outline:0}.w-input[disabled],.w-select[disabled],.w-input[readonly],.w-select[readonly],fieldset[disabled] .w-input,fieldset[disabled] .w-select{cursor:not-allowed}.w-input[disabled]:not(.w-input-disabled),.w-select[disabled]:not(.w-input-disabled),.w-input[readonly],.w-select[readonly],fieldset[disabled]:not(.w-input-disabled) .w-input,fieldset[disabled]:not(.w-input-disabled) .w-select{background-color:#eeeeee}textarea.w-input,textarea.w-select{height:auto}.w-select{background-color:#f3f3f3}.w-select[multiple]{height:auto}.w-form-label{display:inline-block;cursor:pointer;font-weight:normal;margin-bottom:0px}.w-radio{display:block;margin-bottom:5px;padding-left:20px}.w-radio:before,.w-radio:after{content:" ";display:table;grid-column-start:1;grid-row-start:1;grid-column-end:2;grid-row-end:2}.w-radio:after{clear:both}.w-radio-input{margin:4px 0 0;margin-top:1px \9;line-height:normal;float:left;margin-left:-20px}.w-radio-input{margin-top:3px}.w-file-upload{display:block;margin-bottom:10px}.w-file-upload-input{width:.1px;height:.1px;opacity:0;overflow:hidden;position:absolute;z-index:-100}.w-file-upload-default,.w-file-upload-uploading,.w-file-upload-success{display:inline-block;color:#333333}.w-file-upload-error{display:block;margin-top:10px}.w-file-upload-default.w-hidden,.w-file-upload-uploading.w-hidden,.w-file-upload-error.w-hidden,.w-file-upload-success.w-hidden{display:none}.w-file-upload-uploading-btn{display:flex;font-size:14px;font-weight:normal;cursor:pointer;margin:0;padding:8px 12px;border:1px solid #cccccc;background-color:#fafafa}.w-file-upload-file{display:flex;flex-grow:1;justify-content:space-between;margin:0;padding:8px 9px 8px 11px;border:1px solid #cccccc;background-color:#fafafa}.w-file-upload-file-name{font-size:14px;font-weight:normal;display:block}.w-file-remove-link{margin-top:3px;margin-left:10px;width:auto;height:auto;padding:3px;display:block;cursor:pointer}.w-icon-file-upload-remove{margin:auto;font-size:10px}.w-file-upload-error-msg{display:inline-block;color:#ea384c;padding:2px 0}.w-file-upload-info{display:inline-block;line-height:38px;padding:0 12px}.w-file-upload-label{display:inline-block;font-size:14px;font-weight:normal;cursor:pointer;margin:0;padding:8px 12px;border:1px solid #cccccc;background-color:#fafafa}.w-icon-file-upload-icon,.w-icon-file-upload-uploading{display:inline-block;margin-right:8px;width:20px}.w-icon-file-upload-uploading{height:20px}.w-container{margin-left:auto;margin-right:auto;max-width:940px}.w-container:before,.w-container:after{content:" ";display:table;grid-column-start:1;grid-row-start:1;grid-column-end:2;grid-row-end:2}.w-container:after{clear:both}.w-container .w-row{margin-left:-10px;margin-right:-10px}.w-row:before,.w-row:after{content:" ";display:table;grid-column-start:1;grid-row-start:1;grid-column-end:2;grid-row-end:2}.w-row:after{clear:both}.w-row .w-row{margin-left:0;margin-right:0}.w-col{position:relative;float:left;width:100%;min-height:1px;padding-left:10px;padding-right:10px}.w-col .w-col{padding-left:0;padding-right:0}.w-col-1{width:8.33333333%}.w-col-2{width:16.66666667%}.w-col-3{width:25%}.w-col-4{width:33.33333333%}.w-col-5{width:41.66666667%}.w-col-6{width:50%}.w-col-7{width:58.33333333%}.w-col-8{width:66.66666667%}.w-col-9{width:75%}.w-col-10{width:83.33333333%}.w-col-11{width:91.66666667%}.w-col-12{width:100%}.w-hidden-main{display:none !important}@media screen and (max-width:991px){.w-container{max-width:728px}.w-hidden-main{display:inherit !important}.w-hidden-medium{display:none !important}.w-col-medium-1{width:8.33333333%}.w-col-medium-2{width:16.66666667%}.w-col-medium-3{width:25%}.w-col-medium-4{width:33.33333333%}.w-col-medium-5{width:41.66666667%}.w-col-medium-6{width:50%}.w-col-medium-7{width:58.33333333%}.w-col-medium-8{width:66.66666667%}.w-col-medium-9{width:75%}.w-col-medium-10{width:83.33333333%}.w-col-medium-11{width:91.66666667%}.w-col-medium-12{width:100%}.w-col-stack{width:100%;left:auto;right:auto}}@media screen and (max-width:767px){.w-hidden-main{display:inherit !important}.w-hidden-medium{display:inherit !important}.w-hidden-small{display:none !important}.w-row,.w-container .w-row{margin-left:0;margin-right:0}.w-col{width:100%;left:auto;right:auto}.w-col-small-1{width:8.33333333%}.w-col-small-2{width:16.66666667%}.w-col-small-3{width:25%}.w-col-small-4{width:33.33333333%}.w-col-small-5{width:41.66666667%}.w-col-small-6{width:50%}.w-col-small-7{width:58.33333333%}.w-col-small-8{width:66.66666667%}.w-col-small-9{width:75%}.w-col-small-10{width:83.33333333%}.w-col-small-11{width:91.66666667%}.w-col-small-12{width:100%}}@media screen and (max-width:479px){.w-container{max-width:none}.w-hidden-main{display:inherit !important}.w-hidden-medium{display:inherit !important}.w-hidden-small{display:inherit !important}.w-hidden-tiny{display:none !important}.w-col{width:100%}.w-col-tiny-1{width:8.33333333%}.w-col-tiny-2{width:16.66666667%}.w-col-tiny-3{width:25%}.w-col-tiny-4{width:33.33333333%}.w-col-tiny-5{width:41.66666667%}.w-col-tiny-6{width:50%}.w-col-tiny-7{width:58.33333333%}.w-col-tiny-8{width:66.66666667%}.w-col-tiny-9{width:75%}.w-col-tiny-10{width:83.33333333%}.w-col-tiny-11{width:91.66666667%}.w-col-tiny-12{width:100%}}.w-widget{position:relative}.w-widget-map{width:100%;height:400px}.w-widget-map label{width:auto;display:inline}.w-widget-map img{max-width:inherit}.w-widget-map .gm-style-iw{text-align:center}.w-widget-map .gm-style-iw>button{display:none !important}.w-widget-twitter{overflow:hidden}.w-widget-twitter-count-shim{display:inline-block;vertical-align:top;position:relative;width:28px;height:20px;text-align:center;background:white;border:#758696 solid 1px;border-radius:3px}.w-widget-twitter-count-shim *{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.w-widget-twitter-count-shim .w-widget-twitter-count-inner{position:relative;font-size:15px;line-height:12px;text-align:center;color:#999;font-family:serif}.w-widget-twitter-count-shim .w-widget-twitter-count-clear{position:relative;display:block}.w-widget-twitter-count-shim.w--large{width:36px;height:28px}.w-widget-twitter-count-shim.w--large .w-widget-twitter-count-inner{font-size:18px;line-height:18px}.w-widget-twitter-count-shim:not(.w--vertical){margin-left:5px;margin-right:8px}.w-widget-twitter-count-shim:not(.w--vertical).w--large{margin-left:6px}.w-widget-twitter-count-shim:not(.w--vertical):before,.w-widget-twitter-count-shim:not(.w--vertical):after{top:50%;left:0;border:solid transparent;content:' ';height:0;width:0;position:absolute;pointer-events:none}.w-widget-twitter-count-shim:not(.w--vertical):before{border-color:rgba(117,134,150,0);border-right-color:#5d6c7b;border-width:4px;margin-left:-9px;margin-top:-4px}.w-widget-twitter-count-shim:not(.w--vertical).w--large:before{border-width:5px;margin-left:-10px;margin-top:-5px}.w-widget-twitter-count-shim:not(.w--vertical):after{border-color:rgba(255,255,255,0);border-right-color:white;border-width:4px;margin-left:-8px;margin-top:-4px}.w-widget-twitter-count-shim:not(.w--vertical).w--large:after{border-width:5px;margin-left:-9px;margin-top:-5px}.w-widget-twitter-count-shim.w--vertical{width:61px;height:33px;margin-bottom:8px}.w-widget-twitter-count-shim.w--vertical:before,.w-widget-twitter-count-shim.w--vertical:after{top:100%;left:50%;border:solid transparent;content:' ';height:0;width:0;position:absolute;pointer-events:none}.w-widget-twitter-count-shim.w--vertical:before{border-color:rgba(117,134,150,0);border-top-color:#5d6c7b;border-width:5px;margin-left:-5px}.w-widget-twitter-count-shim.w--vertical:after{border-color:rgba(255,255,255,0);border-top-color:white;border-width:4px;margin-left:-4px}.w-widget-twitter-count-shim.w--vertical .w-widget-twitter-count-inner{font-size:18px;line-height:22px}.w-widget-twitter-count-shim.w--vertical.w--large{width:76px}.w-background-video{position:relative;overflow:hidden;height:500px;color:white}.w-background-video>video{background-size:cover;background-position:50% 50%;position:absolute;margin:auto;width:100%;height:100%;right:-100%;bottom:-100%;top:-100%;left:-100%;object-fit:cover;z-index:-100}.w-background-video>video::-webkit-media-controls-start-playback-button{display:none !important;-webkit-appearance:none}.w-background-video--control{position:absolute;bottom:1em;right:1em;background-color:transparent;padding:0}.w-background-video--control>[hidden]{display:none !important}.w-slider{position:relative;height:300px;text-align:center;background:#dddddd;clear:both;-webkit-tap-highlight-color:rgba(0,0,0,0);tap-highlight-color:rgba(0,0,0,0)}.w-slider-mask{position:relative;display:block;overflow:hidden;z-index:1;left:0;right:0;height:100%;white-space:nowrap}.w-slide{position:relative;display:inline-block;vertical-align:top;width:100%;height:100%;white-space:normal;text-align:left}.w-slider-nav{position:absolute;z-index:2;top:auto;right:0;bottom:0;left:0;margin:auto;padding-top:10px;height:40px;text-align:center;-webkit-tap-highlight-color:rgba(0,0,0,0);tap-highlight-color:rgba(0,0,0,0)}.w-slider-nav.w-round>div{border-radius:100%}.w-slider-nav.w-num>div{width:auto;height:auto;padding:.2em .5em;font-size:inherit;line-height:inherit}.w-slider-nav.w-shadow>div{box-shadow:0 0 3px rgba(51,51,51,0.4)}.w-slider-nav-invert{color:#fff}.w-slider-nav-invert>div{background-color:rgba(34,34,34,0.4)}.w-slider-nav-invert>div.w-active{background-color:#222}.w-slider-dot{position:relative;display:inline-block;width:1em;height:1em;background-color:rgba(255,255,255,0.4);cursor:pointer;margin:0 3px .5em;transition:background-color 100ms,color 100ms}.w-slider-dot.w-active{background-color:#fff}.w-slider-dot:focus{outline:none;box-shadow:0 0 0 2px #fff}.w-slider-dot:focus.w-active{box-shadow:none}.w-slider-arrow-left,.w-slider-arrow-right{position:absolute;width:80px;top:0;right:0;bottom:0;left:0;margin:auto;cursor:pointer;overflow:hidden;color:white;font-size:40px;-webkit-tap-highlight-color:rgba(0,0,0,0);tap-highlight-color:rgba(0,0,0,0);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.w-slider-arrow-left [class^='w-icon-'],.w-slider-arrow-right [class^='w-icon-'],.w-slider-arrow-left [class*=' w-icon-'],.w-slider-arrow-right [class*=' w-icon-']{position:absolute}.w-slider-arrow-left:focus,.w-slider-arrow-right:focus{outline:0}.w-slider-arrow-left{z-index:3;right:auto}.w-slider-arrow-right{z-index:4;left:auto}.w-icon-slider-left,.w-icon-slider-right{top:0;right:0;bottom:0;left:0;margin:auto;width:1em;height:1em}.w-slider-aria-label{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.w-slider-force-show{display:block !important}.w-dropdown{display:inline-block;position:relative;text-align:left;margin-left:auto;margin-right:auto;z-index:900}.w-dropdown-btn,.w-dropdown-toggle,.w-dropdown-link{position:relative;vertical-align:top;text-decoration:none;color:#222222;padding:20px;text-align:left;margin-left:auto;margin-right:auto;white-space:nowrap}.w-dropdown-toggle{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:inline-block;cursor:pointer;padding-right:40px}.w-dropdown-toggle:focus{outline:0}.w-icon-dropdown-toggle{position:absolute;top:0;right:0;bottom:0;margin:auto;margin-right:20px;width:1em;height:1em}.w-dropdown-list{position:absolute;background:#dddddd;display:none;min-width:100%}.w-dropdown-list.w--open{display:block}.w-dropdown-link{padding:10px 20px;display:block;color:#222222}.w-dropdown-link.w--current{color:#0082f3}.w-dropdown-link:focus{outline:0}@media screen and (max-width:767px){.w-nav-brand{padding-left:10px}}.w-lightbox-backdrop{color:#000;cursor:auto;font-family:serif;font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;list-style:disc;text-align:start;text-indent:0;text-shadow:none;text-transform:none;visibility:visible;white-space:normal;word-break:normal;word-spacing:normal;word-wrap:normal;position:fixed;top:0;right:0;bottom:0;left:0;color:#fff;font-family:"Helvetica Neue",Helvetica,Ubuntu,"Segoe UI",Verdana,sans-serif;font-size:17px;line-height:1.2;font-weight:300;text-align:center;background:rgba(0,0,0,0.9);z-index:2000;outline:0;opacity:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-webkit-tap-highlight-color:transparent;-webkit-transform:translate(0, 0)}.w-lightbox-backdrop,.w-lightbox-container{height:100%;overflow:auto;-webkit-overflow-scrolling:touch}.w-lightbox-content{position:relative;height:100vh;overflow:hidden}.w-lightbox-view{position:absolute;width:100vw;height:100vh;opacity:0}.w-lightbox-view:before{content:"";height:100vh}.w-lightbox-group,.w-lightbox-group .w-lightbox-view,.w-lightbox-group .w-lightbox-view:before{height:86vh}.w-lightbox-frame,.w-lightbox-view:before{display:inline-block;vertical-align:middle}.w-lightbox-figure{position:relative;margin:0}.w-lightbox-group .w-lightbox-figure{cursor:pointer}.w-lightbox-img{width:auto;height:auto;max-width:none}.w-lightbox-image{display:block;float:none;max-width:100vw;max-height:100vh}.w-lightbox-group .w-lightbox-image{max-height:86vh}.w-lightbox-caption{position:absolute;right:0;bottom:0;left:0;padding:.5em 1em;background:rgba(0,0,0,0.4);text-align:left;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.w-lightbox-embed{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%}.w-lightbox-control{position:absolute;top:0;width:4em;background-size:24px;background-repeat:no-repeat;background-position:center;cursor:pointer;-webkit-transition:all .3s;transition:all .3s}.w-lightbox-left{display:none;bottom:0;left:0;background-image:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9Ii0yMCAwIDI0IDQwIiB3aWR0aD0iMjQiIGhlaWdodD0iNDAiPjxnIHRyYW5zZm9ybT0icm90YXRlKDQ1KSI+PHBhdGggZD0ibTAgMGg1djIzaDIzdjVoLTI4eiIgb3BhY2l0eT0iLjQiLz48cGF0aCBkPSJtMSAxaDN2MjNoMjN2M2gtMjZ6IiBmaWxsPSIjZmZmIi8+PC9nPjwvc3ZnPg==")}.w-lightbox-right{display:none;right:0;bottom:0;background-image:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9Ii00IDAgMjQgNDAiIHdpZHRoPSIyNCIgaGVpZ2h0PSI0MCI+PGcgdHJhbnNmb3JtPSJyb3RhdGUoNDUpIj48cGF0aCBkPSJtMC0waDI4djI4aC01di0yM2gtMjN6IiBvcGFjaXR5PSIuNCIvPjxwYXRoIGQ9Im0xIDFoMjZ2MjZoLTN2LTIzaC0yM3oiIGZpbGw9IiNmZmYiLz48L2c+PC9zdmc+")}.w-lightbox-close{right:0;height:2.6em;background-image:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9Ii00IDAgMTggMTciIHdpZHRoPSIxOCIgaGVpZ2h0PSIxNyI+PGcgdHJhbnNmb3JtPSJyb3RhdGUoNDUpIj48cGF0aCBkPSJtMCAwaDd2LTdoNXY3aDd2NWgtN3Y3aC01di03aC03eiIgb3BhY2l0eT0iLjQiLz48cGF0aCBkPSJtMSAxaDd2LTdoM3Y3aDd2M2gtN3Y3aC0zdi03aC03eiIgZmlsbD0iI2ZmZiIvPjwvZz48L3N2Zz4=");background-size:18px}.w-lightbox-strip{position:absolute;bottom:0;left:0;right:0;padding:0 1vh;line-height:0;white-space:nowrap;overflow-x:auto;overflow-y:hidden}.w-lightbox-item{display:inline-block;width:10vh;padding:2vh 1vh;box-sizing:content-box;cursor:pointer;-webkit-transform:translate3d(0, 0, 0)}.w-lightbox-active{opacity:.3}.w-lightbox-thumbnail{position:relative;height:10vh;background:#222;overflow:hidden}.w-lightbox-thumbnail-image{position:absolute;top:0;left:0}.w-lightbox-thumbnail .w-lightbox-tall{top:50%;width:100%;-webkit-transform:translate(0, -50%);-ms-transform:translate(0, -50%);transform:translate(0, -50%)}.w-lightbox-thumbnail .w-lightbox-wide{left:50%;height:100%;-webkit-transform:translate(-50%, 0);-ms-transform:translate(-50%, 0);transform:translate(-50%, 0)}.w-lightbox-spinner{position:absolute;top:50%;left:50%;box-sizing:border-box;width:40px;height:40px;margin-top:-20px;margin-left:-20px;border:5px solid rgba(0,0,0,0.4);border-radius:50%;-webkit-animation:spin .8s infinite linear;animation:spin .8s infinite linear}.w-lightbox-spinner:after{content:"";position:absolute;top:-4px;right:-4px;bottom:-4px;left:-4px;border:3px solid transparent;border-bottom-color:#fff;border-radius:50%}.w-lightbox-hide{display:none}.w-lightbox-noscroll{overflow:hidden}@media (min-width:768px){.w-lightbox-content{height:96vh;margin-top:2vh}.w-lightbox-view,.w-lightbox-view:before{height:96vh}.w-lightbox-group,.w-lightbox-group .w-lightbox-view,.w-lightbox-group .w-lightbox-view:before{height:84vh}.w-lightbox-image{max-width:96vw;max-height:96vh}.w-lightbox-group .w-lightbox-image{max-width:82.3vw;max-height:84vh}.w-lightbox-left,.w-lightbox-right{display:block;opacity:.5}.w-lightbox-close{opacity:.8}.w-lightbox-control:hover{opacity:1}}.w-lightbox-inactive,.w-lightbox-inactive:hover{opacity:0}.w-richtext:before,.w-richtext:after{content:" ";display:table;grid-column-start:1;grid-row-start:1;grid-column-end:2;grid-row-end:2}.w-richtext:after{clear:both}.w-richtext[contenteditable="true"]:before,.w-richtext[contenteditable="true"]:after{white-space:initial}.w-richtext ol,.w-richtext ul{overflow:hidden}.w-richtext .w-richtext-figure-selected.w-richtext-figure-type-video div:after,.w-richtext .w-richtext-figure-selected[data-rt-type="video"] div:after{outline:2px solid #2895f7}.w-richtext .w-richtext-figure-selected.w-richtext-figure-type-image div,.w-richtext .w-richtext-figure-selected[data-rt-type="image"] div{outline:2px solid #2895f7}.w-richtext figure.w-richtext-figure-type-video>div:after,.w-richtext figure[data-rt-type="video"]>div:after{content:'';position:absolute;display:none;left:0;top:0;right:0;bottom:0}.w-richtext figure{position:relative;max-width:60%}.w-richtext figure>div:before{cursor:default!important}.w-richtext figure img{width:100%}.w-richtext figure figcaption.w-richtext-figcaption-placeholder{opacity:.6}.w-richtext figure div{font-size:0px;color:transparent}.w-richtext figure.w-richtext-figure-type-image,.w-richtext figure[data-rt-type="image"]{display:table}.w-richtext figure.w-richtext-figure-type-image>div,.w-richtext figure[data-rt-type="image"]>div{display:inline-block}.w-richtext figure.w-richtext-figure-type-image>figcaption,.w-richtext figure[data-rt-type="image"]>figcaption{display:table-caption;caption-side:bottom}.w-richtext figure.w-richtext-figure-type-video,.w-richtext figure[data-rt-type="video"]{width:60%;height:0}.w-richtext figure.w-richtext-figure-type-video iframe,.w-richtext figure[data-rt-type="video"] iframe{position:absolute;top:0;left:0;width:100%;height:100%}.w-richtext figure.w-richtext-figure-type-video>div,.w-richtext figure[data-rt-type="video"]>div{width:100%}.w-richtext figure.w-richtext-align-center{margin-right:auto;margin-left:auto;clear:both}.w-richtext figure.w-richtext-align-center.w-richtext-figure-type-image>div,.w-richtext figure.w-richtext-align-center[data-rt-type="image"]>div{max-width:100%}.w-richtext figure.w-richtext-align-normal{clear:both}.w-richtext figure.w-richtext-align-fullwidth{width:100%;max-width:100%;text-align:center;clear:both;display:block;margin-right:auto;margin-left:auto}.w-richtext figure.w-richtext-align-fullwidth>div{display:inline-block;padding-bottom:inherit}.w-richtext figure.w-richtext-align-fullwidth>figcaption{display:block}.w-richtext figure.w-richtext-align-floatleft{float:left;margin-right:15px;clear:none}.w-richtext figure.w-richtext-align-floatright{float:right;margin-left:15px;clear:none}.w-nav{position:relative;background:#dddddd;z-index:1000}.w-nav:before,.w-nav:after{content:" ";display:table;grid-column-start:1;grid-row-start:1;grid-column-end:2;grid-row-end:2}.w-nav:after{clear:both}.w-nav-brand{position:relative;float:left;text-decoration:none;color:#333333}.w-nav-link{position:relative;display:inline-block;vertical-align:top;text-decoration:none;color:#222222;padding:20px;text-align:left;margin-left:auto;margin-right:auto}.w-nav-link.w--current{color:#0082f3}.w-nav-menu{position:relative;float:right}[data-nav-menu-open]{display:block !important;position:absolute;top:100%;left:0;right:0;background:#C8C8C8;text-align:center;overflow:visible;min-width:200px}.w--nav-link-open{display:block;position:relative}.w-nav-overlay{position:absolute;overflow:hidden;display:none;top:100%;left:0;right:0;width:100%}.w-nav-overlay [data-nav-menu-open]{top:0}.w-nav[data-animation="over-left"] .w-nav-overlay{width:auto}.w-nav[data-animation="over-left"] .w-nav-overlay,.w-nav[data-animation="over-left"] [data-nav-menu-open]{right:auto;z-index:1;top:0}.w-nav[data-animation="over-right"] .w-nav-overlay{width:auto}.w-nav[data-animation="over-right"] .w-nav-overlay,.w-nav[data-animation="over-right"] [data-nav-menu-open]{left:auto;z-index:1;top:0}.w-nav-button{position:relative;float:right;padding:18px;font-size:24px;display:none;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0);tap-highlight-color:rgba(0,0,0,0);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.w-nav-button:focus{outline:0}.w-nav-button.w--open{background-color:#C8C8C8;color:white}.w-nav[data-collapse="all"] .w-nav-menu{display:none}.w-nav[data-collapse="all"] .w-nav-button{display:block}.w--nav-dropdown-open{display:block}.w--nav-dropdown-toggle-open{display:block}.w--nav-dropdown-list-open{position:static}@media screen and (max-width:991px){.w-nav[data-collapse="medium"] .w-nav-menu{display:none}.w-nav[data-collapse="medium"] .w-nav-button{display:block}}@media screen and (max-width:767px){.w-nav[data-collapse="small"] .w-nav-menu{display:none}.w-nav[data-collapse="small"] .w-nav-button{display:block}.w-nav-brand{padding-left:10px}}@media screen and (max-width:479px){.w-nav[data-collapse="tiny"] .w-nav-menu{display:none}.w-nav[data-collapse="tiny"] .w-nav-button{display:block}}.w-tabs{position:relative}.w-tabs:before,.w-tabs:after{content:" ";display:table;grid-column-start:1;grid-row-start:1;grid-column-end:2;grid-row-end:2}.w-tabs:after{clear:both}.w-tab-menu{position:relative}.w-tab-link{position:relative;display:inline-block;vertical-align:top;text-decoration:none;padding:9px 30px;text-align:left;cursor:pointer;color:#222222;background-color:#dddddd}.w-tab-link.w--current{background-color:#C8C8C8}.w-tab-link:focus{outline:0}.w-tab-content{position:relative;display:block;overflow:hidden}.w-tab-pane{position:relative;display:none}.w--tab-active{display:block}@media screen and (max-width:479px){.w-tab-link{display:block}}.w-ix-emptyfix:after{content:""}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.w-dyn-empty{padding:10px;background-color:#dddddd}.w-dyn-hide{display:none !important}.w-dyn-bind-empty{display:none !important}.w-condition-invisible{display:none !important} + + /* ========================================================================== + Start of custom Webflow CSS + ========================================================================== */ + .container { + max-width: 680px; + margin-top: 40px; + } + + .header { + height: 100px; + margin-left: auto; + margin-right: auto; + margin-bottom: 60px; + max-width: 680px; + } -/* ========================================================================== - Start of custom Webflow CSS - ========================================================================== */ -.container { - max-width: 680px; - margin-top: 40px; -} - -.datum { - position: relative; - margin-top: 25px; - font-family: 'Work Sans', sans-serif; - color: #383838; - font-size: 16px; - line-height: 19px; - font-weight: 600; - text-align: right; -} - -.logo-head { - position: absolute; -} - -.wrapper_head { - position: static; - display: block; - max-width: 680px; - margin-top: 60px; - justify-content: flex-start; - align-items: stretch; - grid-auto-columns: 1fr; - grid-column-gap: 16px; - grid-row-gap: 16px; - -ms-grid-columns: 1fr 1fr; - grid-template-columns: 1fr 1fr; - -ms-grid-rows: auto auto; - grid-template-rows: auto auto; -} - -.headline.h1 { - margin-top: 0px; - color: #383838; - text-align: center; -} - -.text-block { - max-width: 680px; - margin-top: 20px; - margin-right: 40px; - margin-left: 40px; - font-family: 'Work Sans', sans-serif; - color: #9ca0a8; - font-size: 22px; - line-height: 29px; - font-weight: 400; - text-align: center; -} - -.background_01 { - position: static; - display: block; - overflow: visible; - width: 600px; - height: 520px; - float: none; - flex-direction: column-reverse; - justify-content: flex-end; - flex-wrap: nowrap; - align-items: center; - align-content: flex-end; - border: 1px none #000; - border-radius: 24px; - background-color: #f5f5f5; - background-image: linear-gradient(180deg, #f5f5f5, #f5f5f5); - text-align: center; - -o-object-fit: fill; - object-fit: fill; -} - -.content { - display: flex; - max-width: 680px; - margin-top: 40px; - flex-direction: column; - justify-content: center; - align-items: center; - border-radius: 24px; - background-image: linear-gradient(180deg, #f5f5f5, #f5f5f5); - text-align: center; -} - -.heading { - display: flex; - margin-top: 40px; - margin-right: auto; - margin-left: auto; - justify-content: flex-start; - align-items: stretch; - align-self: auto; - order: 0; - flex: 0 auto; - font-family: 'Work Sans', sans-serif; - font-size: 28px; - line-height: 33px; - font-weight: 600; - text-align: center; -} - -.p_content { - max-width: 400px; - margin-top: 15px; - margin-right: auto; - margin-left: auto; - font-family: 'Work Sans', sans-serif; - font-size: 16px; - line-height: 26px; - text-align: center; -} - -.button { - margin-top: 40px; - padding-right: 40px; - padding-left: 40px; - border-radius: 20px; - background-image: radial-gradient(circle farthest-corner at 0% 0%, #f9cd69, #c58d38); - box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.2); -} - -.button-2 { - padding-left: 40px; -} - -.button-3 { - margin-top: 30px; - padding-right: 40px; - padding-left: 40px; - border-radius: 20px; - background-image: radial-gradient(circle farthest-corner at 0% 0%, #f9cd69, #c58d38); - box-shadow: 16px 13px 35px 0 rgba(56, 56, 56, 0.3); - font-family: 'Work Sans', sans-serif; -} - -.heading-2 { - margin-top: 60px; - font-family: 'Work Sans', sans-serif; - color: #383838; - font-size: 28px; - line-height: 33px; - font-weight: 600; -} - -.button-4 { - margin: 30px auto 40px; - padding-right: 40px; - padding-left: 40px; - border-radius: 20px; - background-image: radial-gradient(circle farthest-corner at 0% 0%, #616161, #c2c2c2); - box-shadow: 16px 13px 35px 0 rgba(56, 56, 56, 0.3); - font-family: 'Work Sans', sans-serif; -} - -.footer_01 { - max-width: 380px; -} - -.socialmedia { - display: flex; - max-width: 600px; - margin-top: 40px; - flex-direction: row-reverse; - justify-content: space-between; - flex-wrap: nowrap; - align-items: stretch; - grid-column-gap: 0px; - grid-row-gap: 0px; - text-align: center; -} - -.image { - position: relative; - display: block; - height: auto; - max-height: none; - max-width: none; - margin-top: 40px; -} - -.footer_02 { - display: inline; - max-width: 600px; - flex-direction: column; - justify-content: center; - align-items: center; - text-align: center; -} - -.footer_p1 { - margin-top: 30px; - -ms-grid-row-align: auto; - align-self: auto; - font-family: 'Work Sans', sans-serif; - color: #9ca0a8; - font-size: 16px; - line-height: 24px; - text-align: center; -} - -.footer_p2 { - display: flex; - max-width: 600px; - flex-direction: column; - justify-content: center; - align-items: center; - font-family: 'Work Sans', sans-serif; - color: #383838; - font-size: 16px; - line-height: 24px; - font-weight: 600; -} - -.container-2 { - max-width: 600px; -} - -.image-2 { - width: 30%; - max-width: none; - margin-top: 20px; -} - -.div-block { - display: flex; - margin-top: 20px; - margin-bottom: 40px; - flex-direction: row; - justify-content: center; - align-items: center; -} - -.terms_of_use { - padding-right: 15px; - padding-left: 15px; - font-family: 'Work Sans', sans-serif; - color: #9ca0a8; -} - -.text-block-3 { - color: #9ca0a8; -} - -.line_image { - width: 100%; - height: 13px; - margin-top: 40px; - background-image: linear-gradient(90deg, #c58d38, #c58d38 0%, #f3cd7c 35%, #dbb056 54%, #eec05f 63%, #cc9d3d); -} - -.line { - height: 13px; - margin-top: 40px; - background-image: linear-gradient(90deg, #c58d38, #f3cd7c 40%, #dbb056 55%, #eec05f 71%, #cc9d3d); -} - -@media screen and (max-width: 991px) { - .wrapper { - margin-top: 0px; - } - - .headline.h1 { - margin-top: 0px; - margin-bottom: 0px; - border-radius: 2px; - font-size: 36px; - line-height: 33px; - } - - .text-block { - margin-top: 40px; - font-size: 20px; - line-height: 26px; - } - - .background_01 { - margin-top: 40px; - } - - .content { - max-height: 520px; - max-width: 540px; - margin-top: 40px; - border-radius: 24px; - background-image: linear-gradient(180deg, #f5f5f5, #f5f5f5); - text-align: center; - } - - .heading { - display: flex; - flex-direction: column-reverse; - justify-content: flex-start; - align-items: stretch; - flex: 0 auto; - font-family: 'Work Sans', sans-serif; - color: #383838; - font-size: 22px; - line-height: 33px; - } - - .text-block-2 { - font-family: 'Work Sans', sans-serif; - font-size: 16px; - line-height: 26px; - } - - .p_content { - margin-top: 0px; - margin-right: 40px; - margin-left: 40px; - font-family: 'Work Sans', sans-serif; - text-align: center; - } - - .image { - max-width: 820px; - margin-left: -10px; - } - - .footer_p1 { - margin-top: 30px; - } -} - -@media screen and (max-width: 767px) { - .datum { - margin-right: 30px; - } - - .logo-head { - margin-left: 30px; - } - - .headline.h1 { - font-size: 24px; - } - - .text-block { - margin-top: 20px; - font-size: 18px; - } - - .content { - max-width: 500px; - margin-top: 20px; - } - - .heading { - margin-top: 30px; - font-size: 20px; - } - - .heading-2 { - margin-top: 40px; - font-size: 20px; - } - - .footer_p1 { - margin-top: 30px; - } - - .line_image { - margin-top: 30px; - } -} - -@media screen and (max-width: 479px) { - .datum { - margin-top: 15px; - margin-right: 20px; - font-size: 14px; - } - - .logo-head { - width: 40%; - max-width: 40%; - margin-left: 20px; - } - - .headline.h1 { - font-family: 'Work Sans', sans-serif; - font-size: 20px; - } - - .text-block { - font-size: 14px; - line-height: 20px; - } - - .content { - max-width: 280px; - } - - .heading { - display: flex; - margin-top: 60px; - font-size: 18px; - line-height: 26px; - } - - .p_content { - font-size: 14px; - line-height: 20px; - } - - .button-3 { - margin-top: 40px; - padding-right: 30px; - padding-left: 30px; - } - - .button-4 { - margin-bottom: 60px; - padding-right: 30px; - padding-left: 30px; - } - - .footer_01 { - display: flex; - max-width: 300px; - flex-direction: column; - justify-content: center; - align-items: center; - } - - .socialmedia { - display: flex; - width: 80%; - max-width: 300px; - justify-content: center; - flex-wrap: nowrap; - align-self: auto; - grid-auto-columns: 1fr; - grid-column-gap: 30px; - grid-row-gap: 30px; - -ms-grid-columns: 1fr 1fr; - grid-template-columns: 1fr 1fr; - -ms-grid-rows: auto auto; - grid-template-rows: auto auto; - } - - .footer_p1 { - margin-right: 20px; - margin-left: 20px; - font-size: 14px; - } - - .image-2 { - width: 40%; - } -} \ No newline at end of file + .head-logo { + position: absolute; + width: 130px; + margin-top: 36px; + max-width: 33%; + } + + .head-image { + position: absolute; + /* top: -11px; */ + left: 40%; + width: 400 px; + max-width: 64%; + } + + .wrapper_head { + position: static; + display: block; + max-width: 680px; + margin-top: 60px; + justify-content: flex-start; + align-items: stretch; + grid-auto-columns: 1fr; + grid-column-gap: 16px; + grid-row-gap: 16px; + -ms-grid-columns: 1fr 1fr; + grid-template-columns: 1fr 1fr; + -ms-grid-rows: auto auto; + grid-template-rows: auto auto; + } + + .headline.h1 { + margin-top: 0px; + color: #383838; + text-align: center; + } + + .text-block { + max-width: 680px; + margin-top: 20px; + margin-right: 40px; + margin-left: 40px; + font-family: 'Work Sans', sans-serif; + color: #9ca0a8; + font-size: 22px; + line-height: 29px; + font-weight: 400; + text-align: center; + } + + .background_01 { + position: static; + display: block; + overflow: visible; + width: 600px; + height: 520px; + float: none; + flex-direction: column-reverse; + justify-content: flex-end; + flex-wrap: nowrap; + align-items: center; + align-content: flex-end; + border: 1px none #000; + border-radius: 24px; + background-color: #f5f5f5; + background-image: linear-gradient(180deg, #f5f5f5, #f5f5f5); + text-align: center; + -o-object-fit: fill; + object-fit: fill; + } + + .content { + display: flex; + max-width: 680px; + margin-top: 40px; + flex-direction: column; + justify-content: center; + align-items: center; + border-radius: 24px; + background-image: linear-gradient(180deg, #f5f5f5, #f5f5f5); + text-align: center; + } + + .heading { + display: flex; + margin-top: 40px; + margin-right: auto; + margin-left: auto; + justify-content: flex-start; + align-items: stretch; + align-self: auto; + order: 0; + flex: 0 auto; + font-family: 'Work Sans', sans-serif; + font-size: 28px; + line-height: 33px; + font-weight: 600; + text-align: center; + } + + .p_content { + max-width: 400px; + margin-top: 15px; + margin-right: auto; + margin-left: auto; + font-family: 'Work Sans', sans-serif; + font-size: 16px; + line-height: 26px; + text-align: center; + } + + .button { + margin-top: 40px; + padding-right: 40px; + padding-left: 40px; + border-radius: 20px; + background-image: radial-gradient(circle farthest-corner at 0% 0%, #f9cd69, #c58d38); + box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.2); + } + + .button-2 { /* TODO remove unnecessary */ + padding-left: 40px; + } + + .button-3 { + margin-top: 30px; + padding-right: 40px; + padding-left: 40px; + border-radius: 20px; + background-image: radial-gradient(circle farthest-corner at 0% 0%, #f9cd69, #c58d38); + box-shadow: 16px 13px 35px 0 rgba(56, 56, 56, 0.3); + font-family: 'Work Sans', sans-serif; + } + + .heading-2 { + margin-top: 60px; + font-family: 'Work Sans', sans-serif; + color: #383838; + font-size: 28px; + line-height: 33px; + font-weight: 600; + } + + .button-4 { + margin: 30px auto 40px; + padding-right: 40px; + padding-left: 40px; + border-radius: 20px; + background-image: radial-gradient(circle farthest-corner at 0% 0%, #616161, #c2c2c2); + box-shadow: 16px 13px 35px 0 rgba(56, 56, 56, 0.3); + font-family: 'Work Sans', sans-serif; + } + + .footer_01 { + max-width: 380px; + } + + .socialmedia { + display: flex; + max-width: 600px; + margin-top: 40px; + flex-direction: row-reverse; + justify-content: space-between; + flex-wrap: nowrap; + align-items: stretch; + grid-column-gap: 0px; + grid-row-gap: 0px; + text-align: center; + } + + .image { + position: relative; + display: block; + height: auto; + max-height: none; + max-width: none; + margin-top: 40px; + } + + .footer_02 { + display: inline; + align-self: auto; + max-width: 600px; + flex-direction: column; + justify-content: center; + align-items: center; + text-align: center; + padding-bottom: 20; + } + + .footer_p1 { + margin-top: 30px; + -ms-grid-row-align: auto; + align-self: auto; + font-family: 'Work Sans', sans-serif; + color: #9ca0a8; + font-size: 16px; + line-height: 24px; + text-align: center; + } + + .footer_p2 { + display: flex; + max-width: 600px; + flex-direction: column; + justify-content: center; + align-items: center; + font-family: 'Work Sans', sans-serif; + color: #383838; + font-size: 16px; + line-height: 24px; + font-weight: 600; + } + + .container-2 { + max-width: 600px; + } + + .image-2 { + width: 30%; + max-width: none; + margin-top: 20px; + } + + .div-block { + display: flex; + margin-top: 20px; + margin-bottom: 40px; + flex-direction: row; + justify-content: center; + align-items: center; + } + + .terms_of_use { + padding-right: 15px; + padding-left: 15px; + font-family: 'Work Sans', sans-serif; + color: #9ca0a8; + } + + .text-block-3 { + color: #9ca0a8; + } + + .line_image { + width: 100%; + height: 13px; + margin-top: 40px; + background-image: linear-gradient(90deg, #c58d38, #c58d38 0%, #f3cd7c 35%, #dbb056 54%, #eec05f 63%, #cc9d3d); + } + + .line { + height: 13px; + margin-top: 40px; + background-image: linear-gradient(90deg, #c58d38, #f3cd7c 40%, #dbb056 55%, #eec05f 71%, #cc9d3d); + } + + @media screen and (max-width: 991px) { + .wrapper { + margin-top: 0px; + } + + .headline.h1 { + margin-top: 0px; + margin-bottom: 0px; + border-radius: 2px; + font-size: 36px; + line-height: 33px; + } + + .text-block { + margin-top: 40px; + font-size: 20px; + line-height: 26px; + } + + .background_01 { + margin-top: 40px; + } + + .content { + /* max-height: 520px; */ + max-width: 540px; + margin-top: 40px; + border-radius: 24px; + background-image: linear-gradient(180deg, #f5f5f5, #f5f5f5); + text-align: center; + } + + .heading { + display: flex; + flex-direction: column-reverse; + justify-content: flex-start; + align-items: stretch; + flex: 0 auto; + font-family: 'Work Sans', sans-serif; + color: #383838; + font-size: 22px; + line-height: 33px; + } + + .text-block-2 { + font-family: 'Work Sans', sans-serif; + font-size: 16px; + line-height: 26px; + } + + .p_content { + margin-top: 0px; + margin-right: 40px; + margin-left: 40px; + font-family: 'Work Sans', sans-serif; + text-align: center; + } + + .image { + max-width: 820px; + margin-left: -10px; + } + + .footer_p1 { + margin-top: 30px; + } + } + + @media screen and (max-width: 767px) { + .head-logo { + margin-left: 30px; + } + + .headline.h1 { + font-size: 24px; + } + + .text-block { + margin-top: 20px; + font-size: 18px; + } + + .content { + max-width: 500px; + margin-top: 20px; + } + + .heading { + margin-top: 30px; + font-size: 20px; + } + + .heading-2 { + margin-top: 40px; + font-size: 20px; + } + + .footer_p1 { + margin-top: 30px; + } + + .line_image { + margin-top: 30px; + } + } + + @media screen and (max-width: 479px) { + .head-logo { + width: 40%; + max-width: 40%; + margin-left: 20px; + } + + .headline.h1 { + font-family: 'Work Sans', sans-serif; + font-size: 20px; + } + + .text-block { + font-size: 14px; + line-height: 20px; + } + + .content { + max-width: 280px; + } + + .heading { + display: flex; + margin-top: 60px; + font-size: 18px; + line-height: 26px; + } + + .p_content { + font-size: 14px; + line-height: 20px; + } + + .button-3 { + margin-top: 40px; + padding-right: 30px; + padding-left: 30px; + } + + .button-4 { + margin-bottom: 60px; + padding-right: 30px; + padding-left: 30px; + } + + .footer_01 { + display: flex; + max-width: 300px; + flex-direction: column; + justify-content: center; + align-items: center; + } + + .socialmedia { + display: flex; + width: 80%; + max-width: 300px; + justify-content: center; + flex-wrap: nowrap; + align-self: auto; + grid-auto-columns: 1fr; + grid-column-gap: 30px; + grid-row-gap: 30px; + -ms-grid-columns: 1fr 1fr; + grid-template-columns: 1fr 1fr; + -ms-grid-rows: auto auto; + grid-template-rows: auto auto; + } + + .footer_p1 { + margin-right: 20px; + margin-left: 20px; + font-size: 14px; + } + + .image-2 { + width: 40%; + } + } \ No newline at end of file From 2f052cebf56e0076101f335b0cc8c0a9a0d562ec Mon Sep 17 00:00:00 2001 From: mahula Date: Mon, 15 May 2023 08:13:01 +0200 Subject: [PATCH 036/123] update email templates locales --- backend/src/emails/templates/includes/requestNewLink.pug | 2 +- backend/src/locales/de.json | 5 +++-- backend/src/locales/en.json | 7 ++++--- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/backend/src/emails/templates/includes/requestNewLink.pug b/backend/src/emails/templates/includes/requestNewLink.pug index a76c23c0a..03c54a207 100644 --- a/backend/src/emails/templates/includes/requestNewLink.pug +++ b/backend/src/emails/templates/includes/requestNewLink.pug @@ -1,6 +1,6 @@ //- requestNewLink - h2.heading-2 Neuen gültigen Link anfordern + h2.heading-2= t('emails.general.requestNewLink') if timeDurationObject.minutes == 0 div(class="p_content")= t('emails.general.linkValidity', { hours: timeDurationObject.hours }) diff --git a/backend/src/locales/de.json b/backend/src/locales/de.json index 56c75130e..0a9fb9cc3 100644 --- a/backend/src/locales/de.json +++ b/backend/src/locales/de.json @@ -42,12 +42,12 @@ "title": "Dein Gemeinwohl-Beitrag wurde abgelehnt" }, "footer": { - "contactOurSupport": "Bei weiteren fragen kontaktiere bitte unseren Support.", + "contactOurSupport": "Bei weiteren Fragen kontaktiere bitte unseren Support.", "imprint": "Impressum", "imprintAddress": "Gradido-Akademie\nInstitut für Wirtschaftsbionik\nPfarrweg 2\n74653 Künzelsau\nDeutschland", "imprintImageAlt": "Gradido-Akademie Logo", "privacyPolicy": "Datenschutzerklärung", - "supportEmail": "support@gradido.com" + "supportEmail": "support@gradido.net" }, "general": { "amountGDD": "Betrag: {amountGDD} GDD", @@ -61,6 +61,7 @@ "newLink": "Neuer Link", "orCopyLink": "Oder kopiere den Link in dein Browserfenster.", "pleaseDoNotReply": "Bitte antworte nicht auf diese E-Mail!", + "requestNewLink": "Neuen gültigen Link anfordern", "reset": "zurücksetzen", "sincerelyYours": "Liebe Grüße", "toAccount": "Zum Konto", diff --git a/backend/src/locales/en.json b/backend/src/locales/en.json index a5bedbe9f..ec15626b4 100644 --- a/backend/src/locales/en.json +++ b/backend/src/locales/en.json @@ -17,7 +17,7 @@ "title": "Try To Register Again With Your Email" }, "addedContributionMessage": { - "commonGoodContributionMessage": "you have received a message from {senderFirstName} {senderLastName} regarding your common good contribution “{contributionMemo}”.", + "commonGoodContributionMessage": "You have received a message from {senderFirstName} {senderLastName} regarding your common good contribution “{contributionMemo}”.", "readMessage": "Read and reply to message", "subject": "Gradido: Message about your common good contribution", "title": "Message about your common good contribution", @@ -47,7 +47,7 @@ "imprintAddress": "Gradido-Akademie\nInstitut für Wirtschaftsbionik\nPfarrweg 2\n74653 Künzelsau\nDeutschland", "imprintImageAlt": "Gradido-Akademie Logo", "privacyPolicy": "Privacy Policy", - "supportEmail": "support@gradido.com" + "supportEmail": "support@gradido.net" }, "general": { "amountGDD": "Amount: {amountGDD} GDD", @@ -55,12 +55,13 @@ "contribution": "Contribution: : {contributionMemo}", "contributionDetails": "Contribution details", "detailsYouFindOnLinkToYourAccount": "You can find transaction details in your Gradido account.", - "helloName": "Hello {firstName} {lastName}", + "helloName": "Hello {firstName} {lastName},", "linkValidity": "The link has a validity of {hours} hours.\nIf the validity of the link has already expired, you can have a new link sent to you here.", "linkValidityWithMinutes": "The link has a validity of {hours} hours and {minutes} minutes.\nIf the validity of the link has already expired, you can have a new link sent to you here.", "newLink": "New link", "orCopyLink": "or copy the link into your browser window.", "pleaseDoNotReply": "Please do not reply to this email!", + "requestNewLink": "Request new valid link", "reset": "reset", "sincerelyYours": "Kind regards,", "toAccount": "To account", From ee73d17f1962f298c9df2e15122a3f27407c9e69 Mon Sep 17 00:00:00 2001 From: mahula Date: Mon, 15 May 2023 09:52:45 +0200 Subject: [PATCH 037/123] add no reply text to contribution details pug --- .../src/emails/templates/includes/contributionDetailsCTA.pug | 4 +++- backend/src/locales/de.json | 2 +- backend/src/locales/en.json | 4 ++-- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/backend/src/emails/templates/includes/contributionDetailsCTA.pug b/backend/src/emails/templates/includes/contributionDetailsCTA.pug index 0d8ed5973..bc54e75e3 100644 --- a/backend/src/emails/templates/includes/contributionDetailsCTA.pug +++ b/backend/src/emails/templates/includes/contributionDetailsCTA.pug @@ -1,4 +1,6 @@ //- h2.heading= t('emails.general.contributionDetails') div(class="p_content")= t('emails.contribution.toSeeContributionsAndMessages') -a.button-3.w-button(href="https://gdd.gradido.net/community/contributions") #{t('emails.general.toAccount')} \ No newline at end of file +a.button-3.w-button(href="https://gdd.gradido.net/community/contributions") #{t('emails.general.toAccount')} +div(class="p_content")= t('emails.general.orCopyLink') +a(href="https://gdd.gradido.net/community/contributions") https://gdd.gradido.net/community/contributions \ No newline at end of file diff --git a/backend/src/locales/de.json b/backend/src/locales/de.json index 0a9fb9cc3..d42f59179 100644 --- a/backend/src/locales/de.json +++ b/backend/src/locales/de.json @@ -60,7 +60,7 @@ "linkValidityWithMinutes": "Der Link hat eine Gültigkeit von {hours} Stunden und {minutes} Minuten.\nSollte die Gültigkeit des Links bereits abgelaufen sein, kannst du dir hier einen neuen Link schicken lassen.", "newLink": "Neuer Link", "orCopyLink": "Oder kopiere den Link in dein Browserfenster.", - "pleaseDoNotReply": "Bitte antworte nicht auf diese E-Mail!", + "pleaseDoNotReply": "Bitte antworte nicht auf diese E-Mail.", "requestNewLink": "Neuen gültigen Link anfordern", "reset": "zurücksetzen", "sincerelyYours": "Liebe Grüße", diff --git a/backend/src/locales/en.json b/backend/src/locales/en.json index ec15626b4..1a06b9df3 100644 --- a/backend/src/locales/en.json +++ b/backend/src/locales/en.json @@ -59,8 +59,8 @@ "linkValidity": "The link has a validity of {hours} hours.\nIf the validity of the link has already expired, you can have a new link sent to you here.", "linkValidityWithMinutes": "The link has a validity of {hours} hours and {minutes} minutes.\nIf the validity of the link has already expired, you can have a new link sent to you here.", "newLink": "New link", - "orCopyLink": "or copy the link into your browser window.", - "pleaseDoNotReply": "Please do not reply to this email!", + "orCopyLink": "Or copy the link into your browser window.", + "pleaseDoNotReply": "Please do not reply to this email.", "requestNewLink": "Request new valid link", "reset": "reset", "sincerelyYours": "Kind regards,", From c1efbd8c2a9e363329eee5a14d11d31e11afae6f Mon Sep 17 00:00:00 2001 From: mahula Date: Mon, 15 May 2023 09:54:23 +0200 Subject: [PATCH 038/123] update send email variants unit tests - part I - fix, restructure, update tests for first four emails --- backend/src/emails/sendEmailVariants.test.ts | 416 ++++++++++++++----- 1 file changed, 307 insertions(+), 109 deletions(-) diff --git a/backend/src/emails/sendEmailVariants.test.ts b/backend/src/emails/sendEmailVariants.test.ts index 76e96f129..28e441b5b 100644 --- a/backend/src/emails/sendEmailVariants.test.ts +++ b/backend/src/emails/sendEmailVariants.test.ts @@ -34,11 +34,9 @@ let testEnv: { beforeAll(async () => { testEnv = await testEnvironment(logger, localization) con = testEnv.con - // await cleanDB() }) afterAll(async () => { - // await cleanDB() await con.close() }) @@ -87,8 +85,10 @@ describe('sendEmailVariants', () => { }, }) }) + }) - it('has expected result', () => { + describe('result', () => { + it('is the expected object', () => { expect(result).toMatchObject({ envelope: { from: 'info@gradido.net', @@ -97,36 +97,81 @@ describe('sendEmailVariants', () => { message: expect.any(String), originalMessage: expect.objectContaining({ to: 'Peter Lustig ', - from: 'Gradido (do not answer) ', + from: 'Gradido (emails.general.doNotAnswer) ', attachments: [], subject: 'Gradido: Message about your common good contribution', html: expect.any(String), - text: expect.stringContaining('GRADIDO: MESSAGE ABOUT YOUR COMMON GOOD CONTRIBUTION'), + text: expect.stringContaining('MESSAGE ABOUT YOUR COMMON GOOD CONTRIBUTION'), }), }) + }) + + it('has correct header', () => { + expect(result.originalMessage.html).toContain( + 'src="https://gdd.gradido.net/img/brand/gradido-logo.png"', + ) + expect(result.originalMessage.html).toContain( + 'src="https://gdd.gradido.net/img/template/Blaetter.png"', + ) + }) + + it('has correct doctype and language set', () => { expect(result.originalMessage.html).toContain('') - expect(result.originalMessage.html).toContain('') + expect(result.originalMessage.html).toContain(' { expect(result.originalMessage.html).toContain( - 'Gradido: Message about your common good contribution', + '>Message about your common good contribution', + ) + expect(result.originalMessage.html).toContain('Hello Peter Lustig,') + expect(result.originalMessage.html).toContain( + 'You have received a message from Bibi Bloxberg regarding your common good contribution “My contribution.”.', + ) + }) + + it('has correct CTA block', () => { + expect(result.originalMessage.html).toContain('>Read and reply to message') + expect(result.originalMessage.html).toContain( + 'To view and reply to the message, go to the “Creation” menu in your Gradido account and click on the “My contributions” tab.', ) expect(result.originalMessage.html).toContain( - '>Gradido: Message about your common good contribution', + 'To account') + expect(result.originalMessage.html).toContain('Please do not reply to this email.') + }) + + it('has correct greating formula', () => { + expect(result.originalMessage.html).toContain('Kind regards,your Gradido team') + }) + + it('has correct footer', () => { + expect(result.originalMessage.html).toContain('href="https://t.me/GradidoGruppe"') + expect(result.originalMessage.html).toContain('href="https://www.youtube.com/c/GradidoNet"') + expect(result.originalMessage.html).toContain('href="https://twitter.com/gradido"') expect(result.originalMessage.html).toContain( - 'you have received a message from Bibi Bloxberg regarding your common good contribution “My contribution.”.', + 'href="https://www.facebook.com/groups/Gradido/"', + ) + expect(result.originalMessage.html).toContain('
${CONFIG.EMAIL_LINK_OVERVIEW}`, - ) - expect(result.originalMessage.html).toContain('Please do not reply to this email!') - expect(result.originalMessage.html).toContain('Kind regards,
your Gradido team') - expect(result.originalMessage.html).toContain('—————') - expect(result.originalMessage.html).toContain( - '
Gradido-Akademie Logo

Gradido-Akademie
Institut für Wirtschaftsbionik
Pfarrweg 2
74653 Künzelsau
Deutschland
support@supportmail.com
http://localhost/', + ' { }, }) }) + }) - it('has expected result', () => { + describe('result', () => { + it('is the expected object', () => { expect(result).toMatchObject({ envelope: { from: 'info@gradido.net', @@ -173,40 +220,91 @@ describe('sendEmailVariants', () => { message: expect.any(String), originalMessage: expect.objectContaining({ to: 'Peter Lustig ', - from: 'Gradido (do not answer) ', + from: 'Gradido (emails.general.doNotAnswer) ', attachments: [], subject: 'Gradido: Email Verification', html: expect.any(String), - text: expect.stringContaining('GRADIDO: EMAIL VERIFICATION'), + text: expect.stringContaining('EMAIL VERIFICATION'), }), }) + }) + + it('has correct header', () => { + expect(result.originalMessage.html).toContain( + 'src="https://gdd.gradido.net/img/brand/gradido-logo.png"', + ) + expect(result.originalMessage.html).toContain( + 'src="https://gdd.gradido.net/img/template/Blaetter.png"', + ) + }) + + it('has correct doctype and language set', () => { expect(result.originalMessage.html).toContain('') - expect(result.originalMessage.html).toContain('') - expect(result.originalMessage.html).toContain('Gradido: Email Verification') - expect(result.originalMessage.html).toContain('>Gradido: Email Verification') - expect(result.originalMessage.html).toContain('Hello Peter Lustig') + expect(result.originalMessage.html).toContain(' { + expect(result.originalMessage.html).toContain('>Email Verification') + expect(result.originalMessage.html).toContain('Hello Peter Lustig,') expect(result.originalMessage.html).toContain( 'Your email address has just been registered with Gradido.', ) + }) + + it('has correct CTA block', () => { + expect(result.originalMessage.html).toContain('>Complete registration') expect(result.originalMessage.html).toContain( - 'Please click on this link to complete the registration and activate your Gradido account:', + 'Please click here to complete the registration and activate your Gradido account.', ) expect(result.originalMessage.html).toContain( - 'http://localhost/checkEmail/6627633878930542284', + 'href="http://localhost/checkEmail/6627633878930542284', + ) + expect(result.originalMessage.html).toContain('>Activate account') + expect(result.originalMessage.html).toContain('Or copy the link into your browser window.') + expect(result.originalMessage.html).toContain( + '>http://localhost/checkEmail/6627633878930542284', + ) + expect(result.originalMessage.html).toContain('>Request new valid link') + expect(result.originalMessage.html).toContain( + 'The link has a validity of 23 hours and 30 minutes.' ) expect(result.originalMessage.html).toContain( - 'or copy the link above into your browser window.', + 'If the validity of the link has already expired, you can have a new link sent to you here.' + ) + expect(result.originalMessage.html).toContain('>New link') + expect(result.originalMessage.html).toContain('href="http://localhost/forgot-password"') + }) + + it('has correct greating formula', () => { + expect(result.originalMessage.html).toContain('Kind regards,your Gradido team') + }) + + it('has correct footer', () => { + expect(result.originalMessage.html).toContain('href="https://t.me/GradidoGruppe"') + expect(result.originalMessage.html).toContain('href="https://www.youtube.com/c/GradidoNet"') + expect(result.originalMessage.html).toContain('href="https://twitter.com/gradido"') + expect(result.originalMessage.html).toContain( + 'href="https://www.facebook.com/groups/Gradido/"', + ) + expect(result.originalMessage.html).toContain('
${CONFIG.EMAIL_LINK_FORGOTPASSWORD}`, - ) - expect(result.originalMessage.html).toContain('Kind regards,
your Gradido team') - expect(result.originalMessage.html).toContain('—————') - expect(result.originalMessage.html).toContain( - '
Gradido-Akademie Logo

Gradido-Akademie
Institut für Wirtschaftsbionik
Pfarrweg 2
74653 Künzelsau
Deutschland
support@supportmail.com
http://localhost/', + ' { }) }) - it('has expected result', () => { - expect(result).toMatchObject({ - envelope: { - from: 'info@gradido.net', - to: ['peter@lustig.de'], - }, - message: expect.any(String), - originalMessage: expect.objectContaining({ - to: 'Peter Lustig ', - from: 'Gradido (do not answer) ', - attachments: [], - subject: 'Gradido: Try To Register Again With Your Email', - html: expect.any(String), - text: expect.stringContaining('GRADIDO: TRY TO REGISTER AGAIN WITH YOUR EMAIL'), - }), + describe('result', () => { + it('is the expected object', () => { + expect(result).toMatchObject({ + envelope: { + from: 'info@gradido.net', + to: ['peter@lustig.de'], + }, + message: expect.any(String), + originalMessage: expect.objectContaining({ + to: 'Peter Lustig ', + from: 'Gradido (emails.general.doNotAnswer) ', + attachments: [], + subject: 'Gradido: Try To Register Again With Your Email', + html: expect.any(String), + text: expect.stringContaining('TRY TO REGISTER AGAIN WITH YOUR EMAIL'), + }), + }) + }) + + it('has correct header', () => { + expect(result.originalMessage.html).toContain( + 'src="https://gdd.gradido.net/img/brand/gradido-logo.png"', + ) + expect(result.originalMessage.html).toContain( + 'src="https://gdd.gradido.net/img/template/Blaetter.png"', + ) + }) + + it('has correct doctype and language set', () => { + expect(result.originalMessage.html).toContain('') + expect(result.originalMessage.html).toContain(' { + expect(result.originalMessage.html).toContain( + '>Try To Register Again With Your Email', + ) + expect(result.originalMessage.html).toContain('Hello Peter Lustig,') + expect(result.originalMessage.html).toContain( + 'Your email address has just been used again to register an account with Gradido.', + ) + expect(result.originalMessage.html).toContain( + 'However, an account already exists for your email address.', + ) + }) + + it('has correct CTA block', () => { + expect(result.originalMessage.html).toContain('>Reset password') + expect(result.originalMessage.html).toContain( + 'If you have forgotten your password, please click here.', + ) + expect(result.originalMessage.html).toContain( + `reset') + expect(result.originalMessage.html).toContain('Or copy the link into your browser window.') + expect(result.originalMessage.html).toContain( + `>${CONFIG.EMAIL_LINK_FORGOTPASSWORD}`, + ) + expect(result.originalMessage.html).toContain('>Contact support') + expect(result.originalMessage.html).toContain('If you did not try to register again, please contact our support:') + expect(result.originalMessage.html).toContain('href="mailto:support@gradido.net"') + expect(result.originalMessage.html).toContain('>support@gradido.net') + }) + + it('has correct greating formula', () => { + expect(result.originalMessage.html).toContain('Kind regards,your Gradido team') + }) + + it('has correct footer', () => { + expect(result.originalMessage.html).toContain('href="https://t.me/GradidoGruppe"') + expect(result.originalMessage.html).toContain('href="https://www.youtube.com/c/GradidoNet"') + expect(result.originalMessage.html).toContain('href="https://twitter.com/gradido"') + expect(result.originalMessage.html).toContain( + 'href="https://www.facebook.com/groups/Gradido/"', + ) + expect(result.originalMessage.html).toContain('
') - expect(result.originalMessage.html).toContain('') - expect(result.originalMessage.html).toContain( - 'Gradido: Try To Register Again With Your Email', - ) - expect(result.originalMessage.html).toContain( - '>Gradido: Try To Register Again With Your Email', - ) - expect(result.originalMessage.html).toContain('Hello Peter Lustig') - expect(result.originalMessage.html).toContain( - 'Your email address has just been used again to register an account with Gradido.', - ) - expect(result.originalMessage.html).toContain( - 'However, an account already exists for your email address.', - ) - expect(result.originalMessage.html).toContain( - 'Please click on the following link if you have forgotten your password:', - ) - expect(result.originalMessage.html).toContain( - `${CONFIG.EMAIL_LINK_FORGOTPASSWORD}`, - ) - expect(result.originalMessage.html).toContain( - 'or copy the link above into your browser window.', - ) - expect(result.originalMessage.html).toContain( - 'If you are not the one who tried to register again, please contact our support:
support@supportmail.com', - ) - expect(result.originalMessage.html).toContain('Kind regards,
your Gradido team') - expect(result.originalMessage.html).toContain('—————') - expect(result.originalMessage.html).toContain( - '
Gradido-Akademie Logo

Gradido-Akademie
Institut für Wirtschaftsbionik
Pfarrweg 2
74653 Künzelsau
Deutschland
support@supportmail.com
http://localhost/', - ) }) }) }) @@ -327,8 +474,10 @@ describe('sendEmailVariants', () => { }, }) }) + }) - it('has expected result', () => { + describe('result', () => { + it('is the expected object', () => { expect(result).toMatchObject({ envelope: { from: 'info@gradido.net', @@ -337,36 +486,85 @@ describe('sendEmailVariants', () => { message: expect.any(String), originalMessage: expect.objectContaining({ to: 'Peter Lustig ', - from: 'Gradido (do not answer) ', + from: 'Gradido (emails.general.doNotAnswer) ', attachments: [], subject: 'Gradido: Your contribution to the common good was confirmed', html: expect.any(String), text: expect.stringContaining( - 'GRADIDO: YOUR CONTRIBUTION TO THE COMMON GOOD WAS CONFIRMED', + 'YOUR CONTRIBUTION TO THE COMMON GOOD WAS CONFIRMED', ), }), }) + }) + + it('has correct header', () => { + expect(result.originalMessage.html).toContain( + 'src="https://gdd.gradido.net/img/brand/gradido-logo.png"', + ) + expect(result.originalMessage.html).toContain( + 'src="https://gdd.gradido.net/img/template/Blaetter.png"', + ) + }) + + it('has correct doctype and language set', () => { expect(result.originalMessage.html).toContain('') - expect(result.originalMessage.html).toContain('') + expect(result.originalMessage.html).toContain(' { + expect(result.originalMessage.html).toContain('>Your contribution to the common good was confirmed') + expect(result.originalMessage.html).toContain('Hello Peter Lustig,') expect(result.originalMessage.html).toContain( - 'Gradido: Your contribution to the common good was confirmed', + 'Your common good contribution “My contribution.” has just been approved by Bibi Bloxberg. Your Gradido account has been credited with 23.54 GDD.', + ) + }) + + it('has correct CTA block', () => { + expect(result.originalMessage.html).toContain('>Contribution details') + expect(result.originalMessage.html).toContain( + 'To see your common good contributions and related messages, go to the “Creation” menu in your Gradido account and click on the “My contributions” tab.', ) expect(result.originalMessage.html).toContain( - '>Gradido: Your contribution to the common good was confirmed', + 'href="https://gdd.gradido.net/community/contributions', ) - expect(result.originalMessage.html).toContain('Hello Peter Lustig') + expect(result.originalMessage.html).toContain('>To account') + expect(result.originalMessage.html).toContain('Or copy the link into your browser window.') expect(result.originalMessage.html).toContain( - 'Your public good contribution “My contribution.” has just been confirmed by Bibi Bloxberg and credited to your Gradido account.', + '>https://gdd.gradido.net/community/contributions', ) - expect(result.originalMessage.html).toContain('Amount: 23.54 GDD') + expect(result.originalMessage.html).toContain('Please do not reply to this email.') + }) + + it('has correct greating formula', () => { + expect(result.originalMessage.html).toContain('Kind regards,your Gradido team') + }) + + it('has correct footer', () => { + expect(result.originalMessage.html).toContain('href="https://t.me/GradidoGruppe"') + expect(result.originalMessage.html).toContain('href="https://www.youtube.com/c/GradidoNet"') + expect(result.originalMessage.html).toContain('href="https://twitter.com/gradido"') expect(result.originalMessage.html).toContain( - `Link to your account: ${CONFIG.EMAIL_LINK_OVERVIEW}`, + 'href="https://www.facebook.com/groups/Gradido/"', ) - expect(result.originalMessage.html).toContain('Please do not reply to this email!') - expect(result.originalMessage.html).toContain('Kind regards,
your Gradido team') - expect(result.originalMessage.html).toContain('—————') + expect(result.originalMessage.html).toContain('
Gradido-Akademie Logo

Gradido-Akademie
Institut für Wirtschaftsbionik
Pfarrweg 2
74653 Künzelsau
Deutschland
support@supportmail.com
http://localhost/', + 'If you have any further questions, please contact our support', + ) + expect(result.originalMessage.html).toContain('support@gradido.net') + expect(result.originalMessage.html).toContain( + 'src="https://gdd.gradido.net/img/brand/green.png"', + ) + expect(result.originalMessage.html).toContain('Gradido-Akademie') + expect(result.originalMessage.html).toContain('Institut für Wirtschaftsbionik') + expect(result.originalMessage.html).toContain('Pfarrweg 2') + expect(result.originalMessage.html).toContain('74653 Künzelsau') + expect(result.originalMessage.html).toContain('Deutschland') + expect(result.originalMessage.html).toContain( + ' { message: expect.any(String), originalMessage: expect.objectContaining({ to: 'Peter Lustig ', - from: 'Gradido (do not answer) ', + from: 'Gradido (emails.general.doNotAnswer) ', attachments: [], subject: 'Gradido: Your common good contribution was rejected', html: expect.any(String), @@ -450,7 +648,7 @@ describe('sendEmailVariants', () => { }) }) - describe('sendContributionDeletedEmail', () => { + describe.skip('sendContributionDeletedEmail', () => { beforeAll(async () => { result = await sendContributionDeletedEmail({ firstName: 'Peter', @@ -493,7 +691,7 @@ describe('sendEmailVariants', () => { message: expect.any(String), originalMessage: expect.objectContaining({ to: 'Peter Lustig ', - from: 'Gradido (do not answer) ', + from: 'Gradido (emails.general.doNotAnswer) ', attachments: [], subject: 'Gradido: Your common good contribution was deleted', html: expect.any(String), @@ -528,7 +726,7 @@ describe('sendEmailVariants', () => { }) }) - describe('sendResetPasswordEmail', () => { + describe.skip('sendResetPasswordEmail', () => { beforeAll(async () => { result = await sendResetPasswordEmail({ firstName: 'Peter', @@ -569,7 +767,7 @@ describe('sendEmailVariants', () => { message: expect.any(String), originalMessage: expect.objectContaining({ to: 'Peter Lustig ', - from: 'Gradido (do not answer) ', + from: 'Gradido (emails.general.doNotAnswer) ', attachments: [], subject: 'Gradido: Reset password', html: expect.any(String), @@ -606,7 +804,7 @@ describe('sendEmailVariants', () => { }) }) - describe('sendTransactionLinkRedeemedEmail', () => { + describe.skip('sendTransactionLinkRedeemedEmail', () => { beforeAll(async () => { result = await sendTransactionLinkRedeemedEmail({ firstName: 'Peter', @@ -653,7 +851,7 @@ describe('sendEmailVariants', () => { message: expect.any(String), originalMessage: expect.objectContaining({ to: 'Peter Lustig ', - from: 'Gradido (do not answer) ', + from: 'Gradido (emails.general.doNotAnswer) ', attachments: [], subject: 'Gradido: Bibi Bloxberg has redeemed your Gradido link', html: expect.any(String), @@ -687,7 +885,7 @@ describe('sendEmailVariants', () => { }) }) - describe('sendTransactionReceivedEmail', () => { + describe.skip('sendTransactionReceivedEmail', () => { beforeAll(async () => { result = await sendTransactionReceivedEmail({ firstName: 'Peter', @@ -732,7 +930,7 @@ describe('sendEmailVariants', () => { message: expect.any(String), originalMessage: expect.objectContaining({ to: 'Peter Lustig ', - from: 'Gradido (do not answer) ', + from: 'Gradido (emails.general.doNotAnswer) ', attachments: [], subject: 'Gradido: Bibi Bloxberg has sent you 37.40 Gradido', html: expect.any(String), From caf12d37d22c6797d55c454d878489cd30e42c7b Mon Sep 17 00:00:00 2001 From: mahula Date: Mon, 15 May 2023 12:16:24 +0200 Subject: [PATCH 039/123] update email template css --- backend/src/emails/templates/includes/header.pug | 14 ++++++++------ backend/src/emails/templates/includes/webflow.css | 14 ++++++++------ 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/backend/src/emails/templates/includes/header.pug b/backend/src/emails/templates/includes/header.pug index 4c6c33d65..94b700ae2 100644 --- a/backend/src/emails/templates/includes/header.pug +++ b/backend/src/emails/templates/includes/header.pug @@ -3,10 +3,12 @@ header img.head-logo( alt="Gradido Logo" loading="lazy" - src="https://gdd.gradido.net/img/brand/gradido-logo.png" + src="https://user-images.githubusercontent.com/1311557/238066077-7c9534f7-f75c-4aa9-9bae-6d115ee7f8a8.jpg" ) - img.head-image( - alt="" - loading="lazy" - src="https://gdd.gradido.net/img/template/Blaetter.png" - ) + //- src="https://gdd.gradido.net/img/gradido-email-header.jpg" + + //- img.head-image( + //- alt="" + //- loading="lazy" + //- src="https://gdd.gradido.net/img/template/Blaetter.png" + //- ) diff --git a/backend/src/emails/templates/includes/webflow.css b/backend/src/emails/templates/includes/webflow.css index f779258c2..7ce330923 100644 --- a/backend/src/emails/templates/includes/webflow.css +++ b/backend/src/emails/templates/includes/webflow.css @@ -27,9 +27,10 @@ .head-logo { position: absolute; - width: 130px; - margin-top: 36px; - max-width: 33%; + /* width: 130px; */ + /* margin-top: 36px; */ + max-width: 680px; + /* top: -11px; */ } .head-image { @@ -97,9 +98,10 @@ } .content { - display: flex; + display: inherit; max-width: 680px; margin-top: 40px; + padding-top: 2px; flex-direction: column; justify-content: center; align-items: center; @@ -250,7 +252,7 @@ } .div-block { - display: flex; + display: inherit; margin-top: 20px; margin-bottom: 40px; flex-direction: row; @@ -306,7 +308,7 @@ } .content { - /* max-height: 520px; */ + max-height: none; max-width: 540px; margin-top: 40px; border-radius: 24px; From 0f0e683bec49ecc5ad77dc6d84788c528947fdb8 Mon Sep 17 00:00:00 2001 From: mahula Date: Mon, 15 May 2023 12:17:02 +0200 Subject: [PATCH 040/123] add email header image --- frontend/public/img/gradido-email-header.jpg | Bin 0 -> 12399 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 frontend/public/img/gradido-email-header.jpg diff --git a/frontend/public/img/gradido-email-header.jpg b/frontend/public/img/gradido-email-header.jpg new file mode 100644 index 0000000000000000000000000000000000000000..245b0763cb0a4121d18bc1edbefb53584665d375 GIT binary patch literal 12399 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 HIP$*$@IK#G literal 0 HcmV?d00001 From 3e248b8e8c7ed9728e9f7c12258baf5946f183b8 Mon Sep 17 00:00:00 2001 From: mahula Date: Mon, 15 May 2023 14:51:04 +0200 Subject: [PATCH 041/123] refine email template header --- .../src/emails/templates/includes/header.pug | 13 ++++++------- .../public/img/brand/gradido-email-header.png | Bin 0 -> 39676 bytes frontend/public/img/gradido-email-header.jpg | Bin 12399 -> 0 bytes 3 files changed, 6 insertions(+), 7 deletions(-) create mode 100644 frontend/public/img/brand/gradido-email-header.png delete mode 100644 frontend/public/img/gradido-email-header.jpg diff --git a/backend/src/emails/templates/includes/header.pug b/backend/src/emails/templates/includes/header.pug index 94b700ae2..a883946c5 100644 --- a/backend/src/emails/templates/includes/header.pug +++ b/backend/src/emails/templates/includes/header.pug @@ -1,14 +1,13 @@ header .head.wf-section(class="header") + //- TODO + //- when https://gdd.gradido.net/img/gradido-email-header.jpg is on production, + //- replace this URL by https://gdd.gradido.net/img/brand/gradido-email-header.png img.head-logo( alt="Gradido Logo" loading="lazy" - src="https://user-images.githubusercontent.com/1311557/238066077-7c9534f7-f75c-4aa9-9bae-6d115ee7f8a8.jpg" + src="https://cdn.discordapp.com/attachments/913740067208564736/1107629904306110595/Kopf-Grafik.png" ) - //- src="https://gdd.gradido.net/img/gradido-email-header.jpg" - //- img.head-image( - //- alt="" - //- loading="lazy" - //- src="https://gdd.gradido.net/img/template/Blaetter.png" - //- ) + + diff --git a/frontend/public/img/brand/gradido-email-header.png b/frontend/public/img/brand/gradido-email-header.png new file mode 100644 index 0000000000000000000000000000000000000000..b7fa83b9289a3b0ceca598e7d39b09ed75b155d4 GIT binary patch literal 39676 zcmXt;Wl$Ym6Rjb*JHg#OxVyWsSW}0rR?)N8XorZT}Pm=1pxt#YAYe3YA+!p;q2fH z)NnC1x0JDTvIN?itILQ(K=8)IXc^iNX<-Xzwl^|TO@@F=N)k}txssY3)MtLK9KKsN zI<7G#Iy8yJkDmU^wx!|Nc`dS~7seJt?=9O*-2Bk*r6sqkJd0v3Xi_bJ4xxLTewN9f z{fcnX&e8ZMvCX~0brE>5?smS86yL_ApR!K}VfZx40U>YT0 znwc>+nIV}5l5nT5XXWgIY-oM)zV+e5`lLox1~U9#=u#E$7{#_F#5>MlgJBS~*vkmQ zqS+(DfPh05**0c>GlULa4%%hIRQhlBaAPSZx{B!cfz@!h1Il|nXgIga)mTBUvTAw? zkklx5Wri~4Tvy1;_ZF#t_5-USDshc$0oWT*ZTG1Rz?7|D=($?EYwqE-EVhk<=pUBt zwg^|05Qcv`LxG4_!UN`7ew{>z?&TFcGk+ON!RglM8zJ5vy@F#y=aR3@-;A>mJp$FU zkoVC@AU3xdnCpBWC`sy+Y#G8qF*-Kf!`I=DZTq-ZUjojVt!?=ir}>JlBE^`_qjs(_ zv`d8tbjov5#ovsXTd{|zg~E)okljbvJYMgfJ$16v;kOg`z9JDsQ?qI}Ux|-=*J-9L zLN{)4{~ou!HlnneI0l*9lS{Ctnn;>>W*|I(lNK{7+WXVz6o<_OOER7e&DLMvq_7l` z;Ls-ju-GR5aeni3qmTaS9imm!?tSFsaE491@&WB5{`upS+MPfp%2GBHChxUmlffIEBK^;--BD>;p-up34)}8FlC-HuP?7 zk+#`1H7K9UgT6GiG-W@Qyy#@aAK;`D^+#Ge_s@dckvo+&fgQ8^$Ox_hD2d!G821ft2R^&ibzK)}&i5FxPb>XvA=n1!xR3b|rPom9Yc+TyWZ-*A~_z z?%SrSt>udAEintyS%eDp_4ipQs2t*i{X{Tj_4VYb#ESW9_y=~l&e@_epepEVx!b8z zRpY{zh^BN3EUkaZ&IJdQveV8_N;wgHicrTtzCX|IN<0GrJi3#P!#_kbC8*7* zHhU0te(bz`&T{W>UsrvKE!}cqd0%M-9`suH&^D`}reAD8+(FhmT^A5l!X@7K>fW>i zW*c94=R^8?byNtZDoIc7^u3*^*CCetyNo_w-h2aYpuigtZFwJ1AJpDRgXRmMPk}(S z)RnVRQi5Rk{D%KL|2?xBiJxx-7g>NC1OyV+e+LpGBMT1#LKH$yQcTku^0W&s$Z{A! zqnGXHdmSxJ5FO( zbBKnT^T2>2dw02T^3KRchH8$Z;1;M2PM*dVPqZ`b;$P7F(l zS5NIAIrPmt34Y0gTL~kaRrFHUF|ZQm}_XpLG^n=sd>9i3Z8)QR+381H^eQwLAW379e-55&dBl+@3-1}Jw0CUqsB z?KB!_jU6kXB_*IO+^@@KM6n0}hLuJZD`qxw`~VWHa}ze)!O2RQ`=t9EQGECx2G zBX`1f{^nIDkxzDHB@RhufyS9-3?eMk%LnQlqJ2t|JyJngmNX|ZdZ*=u3SC0zT^kA~ zc7|x~LeqDD-)5oSU~QEx2p64Yr+im#=5_}(C1o?<+D}C4?4Pj(%#r7zjlzGBXgG4N zvh7DjN!Ys9?7~_tcVnBSW5ohfx-9jS;xi&0btli}(O=IVXki94AXkWmIdv}dcK?awe4BB&@uayoaPRmbWQ`Xv>NQR4QhbcM5i1&?Pg)6 z)x$qyajtjVVzdY2YA>ni7N%XwYi3jO=nnfOi_@)ppls9-`MDgIcd7{L>SyYk0^g*G zc~bP~FL;!Z6DkA4?;wdICQB3>*M~J_j4aW-IrXSJLp(nJkmw?mOe@?o%5jOn0rXAy zFQbH<*S6Bqr_gr(r0JrV2z0EQ24*YW>8-{m_uLzr6TW2XWcweuwqN%#idY7II;Y=v zq8I&k(1E0Zf&)`7Rh8bV7nExV!opN4N(fQl(3Bs&%x_f;ozUDKX{`1wtIEjJH6nyGL*A*n!|9i`{(~wmYC4Av&*>*s|N;$AZJ2Oj23v# zGdqIJLkx+Zx}=(Du7p;F3@EyXF8UjS)>zC;K4!Ce8utB*wi<{mdCnzUT-n2flFYJt z0Bn;A>ju?K5Phe`x2jRJ$4?QCPW;x}*+(`uD7O%gOWDe~GfojiR5MYp05Fnt^mO8$ zAQFzA2Zv5W`Z@y*$BL;ROIiynNwH({z)Fs(B`j_P_e>*edq#8Z3-R`YRl!SUjIyV_ z4pEL(uSV5Qprj`T3(L-=QA;c4?t8nYtn!&3y=Ey}<=06xG^N;idi{Dg^U=g1?k(9) z&f6E|F(utK-Jfdm1w4PJ@$2}1qEZG2s{*TFJB%POca!r*kxgKrMt=nr^0G*RI$m>FhSlcMgq< z7=0#Ftm4oK0Ry9f0k0VPV_6%nn(Wd!O&(*DWxH?j=*SkPQej@IPE~{Y*nm&!V^;f~ zT0qIxo(|M3t)YP3c8<2MI9V7LKz{%nH1G=!kSy|E?%HqjZYjo;oMQ5xe{an+L8hKZ$EoaUc>#>>YBqFDJ7QIc3g473 z2wUw!nExibR}DC;E&m3haY~=p82^8P?f$HS?UK|d3T0}M{oipaDxIeqJ*)b9E z8rH-X&v-}<6d$#U26PvjvrdYD%3NnO!B5jRQG?kNt z=sNUVbdYi~&o!~;{<^M*jCC-gGYn2HkuxST^xG9~($G3Ph>IsEpt3rlX<0V7zdLj> zXrF;PBlCCuM6;z&Tue!9Sk+5ldV+fFc-R`dzsa_S5o8p{GbLrA?M(^uypqIxJ-EV) z%{89MXFqkXWC(L^H`!xHUQb8(S!f!jOr}RgAm%^qWXt>f9p`U{jupK1LJ#mb^Pyw0M+Yl3!Kz$7p@gF8IET1oBM7VM2~pU9X*C^)tVY8$l*=!NXd8QV>>F zR=_-hTrHc>ET|bGGM{2F_Yna|*<%@ABfdW_Cq}%89;dB9s%s_2P-4Alw0jd4r+$XD zrN!>){`)nlfRm)Q#I7$XHWZKW7?igys%;JaYn4)>woxL?bFD!Q)JiA4b?M zBK|Xrl=FgR>(8l-2DAfru5C+dTe@dBtK8@@- z;gTA}LepZEMhd5MzWv=xmC8_c;RwLts#&M!>YhS4InYc}reg27!-wxe&8(9vC_+Ju zhIXMCg^>IBWi7s2Mk^LAWGKFwt~96RL^Cesz4`Ilq~881z7RTEXwN*io%JA3!3a^kukR`c|SzL~sV9wRT( zuMyK^8y~1lw?^JGkqJ=`T*rR%@-Ga8cQr-0md~d#Ce6VxW@%%c@kskC4=q}|`8d^L z{k|XCmFt1ai}NGN>?{(>0oixh!t&T?6-@ zXl$-u1P6w=%dvu#;>LFdF4wHP*|GzMd~BW87Yhl_Mw>_Y%J;}h3L5f$ioaSzhes|k z_408SG4+WyAgbG!SH%G~DZRQ(z7F!!IrcA`U9P?Bt@$79Bc~0(?4jyQmPjELOw3!N z?B-S1zzJG}NDG)YZnv|%HDU52>?&y@Yoe);$~WG)@rfb?T>q*dI_3P5S*L#9NWQ|C zF?x@bZ3_8i}+hjxgOB-btrwVwB*5 zjC9zXbXAVBqM|nB@%2uJjwf~Z40R1tW{`-U&7n2?B2B~+wy2=@^PLmEC@XlW1 z>B`LAU)Sl+h-EjI{ii&Os>Ml|{B7yxJG*0_MeA%Mwp)18U}j>)iACy&;0y(lBp5#& zqnOMiWw8i2gesYBtr5fYLu~*D{R+``1Rd|0*(_#%snKdZsj+hxn@i7m0q-}}Qcd9! zGJjBgcDQJz9!~s1{coR<@&x4l71Ii}t|_GUraOIccRuDov-R2+!|QM*xSFS{~DeQ0d;94YAnRq zj^5>CMGZ6rXl8Tbt|Z*;oGBF++JYErM4D6fy*Atr7_VXon^xqA8IRga{ah53eCtVQx`2*A(4W!B(RBMGsg8eJkwB|q zm2sP1zO9D}fnM~ZnK$uLntFT!%0WZrveC&F{%ws%LwCpjLfw?KTM~XYiQ%N#0H>zu ziI$))tWs6Wj$Jd60o4l}6@Tj2>rK7p+#DRGYH{S4da(hRav2a} zvAobCoHr%J?N{`iMm?lYDr?-Zr*}HtgA0srFu_gjupAPuiFi_?_?eJgA9xgjDgT2^g) zo$zR%QYQ!}80EsrIK!}y{sTS%UvpvccOUX=S;*Y}>unKH+N};ANw- zcvyuHxIX7JqUCE6y2oIdb5f?A%2#K6NBT~H*;L13Sck&^IjNYkeP6yQ2bIG7^^!Xu zUK5R6b+EzxAFo`MB`u*7ZNSLhC58X_zglfSC%DyyW6iO)tk9#c8e8`0vK%er^HB}! z3e`oLWVO;Mdz<0^)|S7{1Xp$ou!PKn*fQju1MRN?2NGjpbJ(>a|LPEqVHq4WrsYqB zob<_MBu`6QN#DYw-Nmc_v(xH-vl#!y%+2@X;6SLJqlv6QU_vHQuA)ffpJ$cTiB`oe zU(LxxA$pZ8p~OH~lh~>dy6H$VrQjG7Kt6jIcUJ@jqWTj&!;rSWn>kDcVwbqqg#Uq+ zWS898*4W~gZzkQTi#R##p;=>UtQn+u=OUUSw%VV^!Dg*zbg(xDwik8a@A`Wo3!WKC?!y>so>Han;S_EAf}a4Lk63YU zMQttsr26+lzR?ENd`;WsJ39oyqE#A~XI;nm#Hpm(YGw|TyX(T+cv-gPMF5@R0^X4N z_TJDvbh(8~2wI;kocuE_HTU^EKoj>H)0cTEgThGByJ>R40y|j7=|RJf_5dS%4?jR^ zfGuin7n(jNIK|HRRD-Z0dx4@-7>@s?ohh||X_)&UknS#3Gd1Lbz^$agNzX;^Az8=; z&=Loox~IKWQtj#2MMui`S|4TeMDJPsNp@E4*Z!>~=Z zW1Bxf&$PdPfDuN7V-GHE(^Gcs>2(zs4om&!icu-F31&y?09^_ZI3X zBF+a<`EF|esg}=Fx(l%aF_nUjz1wPlGb#X^o$^On*-!2-eWX>mQyE;GhgJec%AmFIT}|!T_-!16O7g+8DLeVu3$i+$0}Fr2@Pt&V<#rl_K?J^c zUDckX?R+D@a<}QR$W?Jy3P}atJ&{CIGF2ge-t$-M0mUwWV}3n=vml+v)zM>&vo$&j zbuU=QS$m87c7$aS3?{0!Rj+mzbuxwy7Cd`!Fu65ZaZmPKedLOfrFqtWhiSHCU6t?_ z{U|bWwevZehMcCD6KCkTU_LFBF34^HL7X$b$W)ULmld#x3Q3E!O`g@j#XgYG(FQl1 zdS>pgxljJ>lz0rCdb@I82Yf977{uu*|Kwtk|HitI$PTr(j!vOdSyf&QXkAZhz$ayz zWZFjkXc_t2Fe%aEq2lT+Bus$fmz+^yVl^p;meXm!CZ=?^kRRv*!=6w9;d4wkZt?SW zRU8i`R#VIEAlwpuBboN5T z|DeyzNpOo;?uw2At1FA!kCm3apSKC5FX`^v3yGMd=0$RigO0PQN(W@n6Ig5rEFiw~ zYb)bIC(=I6Y5!jzf?u=@q?ak}6@sVyl+Wj3i8D?e<9vEFTZVY&3bGf>P(b=gcmvtL5;kFNv~nD&JVIb_}}7A zv<{y3p^KXpotI(HybC2lxR*z~VG2`l3U~DiuQv%!I#cis7%p#P2%5zs3y%4`(&H^h z`N#b6Wq)G+_9JpvKLP85++Vbx;56^uye+UROEa4y_11eYE|ga3pI26n6~NZnDFoPx zEnCb7YtPRxfA#;Dm!%5d8=yoeU6~uH!>fSCTv{ttx@!^wwOrG^F;{8ab ztySs~0V8!H*_247MsJ&bK!d-MXw4@u-CxNFYDTToiNYzyyZ~B(M5bY%<*N3^I@xAg zb+-+jf=n~B`0;gA3Eu}%)H~nZ{oa-r5o7hriIB7l-K!tx4;{?TkqDJChkd({RO9Yc z>TY^Yf_MJweb*UhCcGwVT+;by2NXyGZGG1pS%)pg^5$u&Pezm6Rd$8;1gE4^zKs+N zd{K~6cS&j2!uL;&7#7h{J@7F+HV8z;fg)Dk9h2yuUMZC&(#V#f2T_8GVJTF*fF6~V zL9}qVTR@4hfid0~j`^BeXoZPLdtx z25aBEqOHPrb2_k78E3I#a?7JauN@WHRm)62Q-3hY3Ov@?str5_8dl6C&!&hYbsr_3 zFwb@ssq3%~H`7oYpME@2#x_|-2x}t1KMkx|viY&$=)&0LrlpNI$J;eeQ*K@W(Z1=x zR)@80Wj4)^JTz{^tvAigUjY8IB%zZY<&OV??)l!Q-h?!)aVi)wl0t&#x*y=?&;*|V zx|aIkIQ;N#zNhIFlzsGI-v&=*ZD`SEhd9`}h>3Eh5QYwiyq_O1MydQE`fuOzTb~_; zw3JcSWs$R~2kV3R^kT-__+9cODMxjt2iZk{?FP#eoeXZ|2TDZ5h%gv!@X{BmBYTI9 z@wLMJOd9j^GJs@IR@YA?Kufrm5$-0t%HZVWWQoKtv|=bY{Hkpj2>+Ujz_MMVFWn1d za;LIK#R>i3T)T8nN!ivjB*B*`LJcug@pb#Xg_d#GuH1N6Z9?x41CDvRyXZGIHJ`aj z`Flh`5gvculTUb@sb3><=k?boZnF4cscwf{6!NZkC za`7CrYn3MML6ka9Hk8rH<`EC^OGeRY(pVA56-RTzq4hK*8`}}0bh`@3~{7GefD^~6mR9v?5QPQ9uE?cw>5>I zlLL}t9yx_>$ik>zc%RALF(=Cs8;(B=QW%bDd#-i3nhi;jbR|q7uA>mOt>=)P9Ps4| zy}=l*^)ndI%H9JwcWh!(HuPPH+FiBNT((-p;x(m^D5m^mHo?xK1^j6nptEX#A)^+t zD5^kVu*-q2STdmwpRua}-ppO8{_O6qg@4Wy9@j>DoZ;eP0*_^vy1Z|qbytZ1Pgi>C zYs1<=eK%&0Qc2<6{bx|Tzn9VZpV`CdqPgT5J8mA!^**Y55*t-NnooTPtbD%|eI8rv zNgHx4{f-mSHo<43s#wU5m*(Xbjg{z8vwK8{h4F*igjjR%Rxy_uRL7w4+qIjt;u8J= z_wQgLEbcG{XABUtS-%NAV)m^3THHZyM02Duz_C{YiBNMK2B^{+k0bAF5 zRw{sGbq~}GnMGFC_Xjvt=2L>EjfL~RzqFh^ehV`;hf0V`$DEa>%-!&S%O85^&-ku# zO*tP>1bi4+G&fAySY-KsSRd_>gbwbZrNMS`In62^Yk7Y{e@=n*yAS_MwA)=;!QM@q zcy0$Pr}62e0{bU%q0t zsl{4OhE25Kiy1JIdAph;3hv((wA&NrEfz`waqEzTrOOkBc!-;3dLI4A8<$N)bs34r zIH!{!e;+0VAu4L|a7!Lf;piHE$P)uXZ{75e2#y5zNNWzJ#67MfBKU$X7>-2^F(^@EXds(OY+h7+!;b zwuKQMU7$E8v`fO3;{OMBAZMT)6CsFCWSreHmM|~aX$f=ogPco~+M68Yr?_WBG|ob%az=_Z=^-=H^s-cE8R= ztX@WIW*HfCADJ1&h!(XXas9IkTwqD-Yrx|?r$2f8D;#cDK&5~LK=|>M>GpWPyuBZZ z|IN7zGyk;#r9o?2Li17WAR$Sms|j-$2$=F+a>fz5l?=i<+_Zuo;2TDp6WK*X254pi zFGm&enmBeEwHZ^Hypjz!HHXW6#-!m?(a@X&IHHvW1B2_dzGJvS`;NhG$PS3&R7dd$?~_s}c@+9I z$m!+HGBIJsH4pjgaVV)Be>t`?MsWY$!MGFW@;3Yf*=5&o^Ne2WR**IsT0BT+=!8!# z9{bC9xIBUxnL@=&B-z4ENi=^XeI(~~vp5Jy1)C_pEHjTCpe{fyOCQKqHw1xw53aq% zvFzRopU#t$WcfXLZ|2ch*h5@(^G!=D|3)I1bN+r&S5rbcs&{80Z}XfE)} zQm7+vX{HFcrWkZq}VA#&22;bxWXlY58-}EK+xXC9D*He?So)o0H zVCboA0ASh6u-tyGE=gGme14u$Sg!GR_sx5}CnXNePWk_E_Ba>_v|-HL&kAfCUn4vc z{P%sm9ZiY#`FCp3T_PcR(f0NfyJ?_iyjmz?hEp)S(0FC_w{&*)h$AlZc&#K8a03&- z2pCKiLz{eHeSlFmxf3H-hF}dd32CRa%erwYlPPO6eoqeyisE}S+wA3cE0X6hMd{Hk zCaSMbU|=R65moO?Pf=OacV>gKdpRZ@`>B0aOo?D5%P0FM>&afp79TJ6`K!%4zk*V})Hxy*CZ@5Yg5}Bj%4Ux$1*}t?tB+D*Z|S z?={L(J(rI<6t$Il6DK@mI4h8G%6)!yR~AXX*CYMOPJ@02IMOjRHN7{+qkb7;0yI;P zOVg`v#yprRN>9a0nc(^7vCoouu;zYH!gG_bQR|SN;H;Ng+XdJ0=W%h}I$QF;$;TQ< z=r3gVnO<$+Ew`7T9Oqs9Bt#fbZ=L@rB}vGi_Jdi%_16q{_)7D_{=&4I%JAaPq2UdS z0+m(O7nCpCIRVP^2CYa=n?J;rOQN!ToH#1#8IBTnpOn8>m9TtjVxc*F_h!%O3g-kv zXbn7;;>pAjRH6_POU$;2E}0fg{T`1jhRbYi)@I|MG1D~c-`Q7MkYn^Z_cCFdGYPnshXtV4N;Is&lcyJD5{}$cP%lqjdZqND^HQ6~%LxYAvET^m*!Zj1Wkq zv%NTua;)%w=PPXCAsIs0iEKwMlOX(!`rASRpr7DLTnGQ^=9-!|KHSu)?ay$l*|e2$ zGyGuMxP#}!Vfqy{n^bPPZ?R}Et@VY1zpS7Rjr$YpOl0zG@t;UFZRkyZNiy^@LZ~TF z9XlKr&G*CEen2R?y%PTBorQPw1-!Exa+>i8%|nXec$WkY9sawYZ?oFmF;lW#r?bQM z+poi|o!ZW1+vYA~L1MZdE`32Sk-`k`%IKv6$Q9)( zrW*zFMUOjW0s>*Zo~BTWem- z#XPB_)_!Ri%Gpa-ZR(_TlepIUw=|gWSGfUYeA`jK3>QFJz6Ns9_5gD3UwO&?(53xL z(%40@MW#gdOdQ^Wth85Prsw49m1m$h>{1)De#LIJrV)!oRuG75S>DAK14KH~>VxUG~9 z{}a`Zwz==F7T;o&$=bw<97Jrzal%t2VeDYaYc#Zt)Mu+lsO^di*uOyp**#7xiXU?@ z^5Png11%sq#=Db9PQ$mPk--fjX^8{CPjuG&HSWIO>&rhC79=?8q)_hH8ImBfx|C)R zoK|_P<_aoa9hEAi4XVG`m}&$}T0&7~2%^$JY-k5G{EHLh_nSvIM2`B3u_&xZC|h{O zYGgh9X$J3P=iRWl6fNa0x_B9pf~nn~2B*FEnqTH55T%5QIufo1$dYH%i|%2*23`)s z;}Kqte~!N>iWw~R+BYkF{4;%cP>)bS8+ZGht9qyB49BF8eNz~AO3qu zq8X)}qEK?U4t&Qt_TEOMBDvFo3Ede}il@+ZkuM#+(ud`3GXt*Tc| zJ=*T*D0I*oKgF3r8gj*GiU9fII%T^Ei!SAvhK}`EepXw2bHjbti@lok3aew++aOZjlNX@t8Bf)QIk z*nU{!^_nJYIyqQd6`-Gyk*kv-R%jMFwxRlBz#icGl725yfN8Us3Ji+G$YNhytyLw3 z&Ccy&yL5#fzT!PkTD+^(?J^ulgva&%^;KiiE{;L`Qvac8>95xOxCVDo^6WQ~I9|qY zky;u?Ui@5K#hXc9mp8YszjnGRxdLO(IDy;CclF1B3r^N-CP&^5OC7^?ZV>D zd>Ti6LL~oz#aJRfq^0hN8;2P!EVU>GCB+kqNuOpB6tWz0IHyjdcv6$SbB;d>A_N}< z!xwtnu*s)%KIlpbc=+umk%?c1`^w@VLX9kY4|InP8O9Ke!`~vuaD@tduyA=2xj*Dm z@O7obDBvsLCY5H7087o zAvym(hwIj0`d{sJ4`Iod>JD20!&NojY!klb%4pNoRayQJEFWVK&ATPb8r~`>g_eA2 zdX`t^Ch>+fraWrWP*M4s^Ic6)7{%Yn>hG}SRXMu9-XKLym(k`b=yJFeFmA4&A>)Iv zNDfik(jK5%g{y@+c+8@*EJMbhLPJAS7h|3|4$0tCqN3>>19V|{>te34Q!)auf^gX; z+KX!n>|IxE=U?`$TV%?TxCHs8`GdV_3 zmgH0SB`t%jp}e!t3*qcIr}D#%?-UX8K$4-BUBfeKB6-LcjhmmOJcgzz)(c%>v zuj<3Zl#si8bQCEcS^{dnS%&Ddyz#L)mLwd$MQOD@{SM`f)G4`6PyAh#*j%NL$RS|u zAxbCXn_is73l5=rxlTcaWyVXFjk;u}0J^Bg?n^?9dG>nQH3t0Kr266=%N4OH0%aDk zU!hJ&&4Jeb#mbXNy`R)YE~#@sHKc+`f&}YXLv*uZUzOG8k|V7GE|)X?tFWI0Ti2|x zusx8S2X9+D(83)(f{9B`X=pX=PM@OD%>$Ie+@>EW5|D_6G7fG z0GAu=;za&fbd=$^#IfLc6yhvR<*3TwnB1mLdt}+gl-fztRql-5GtgnM4QhC@{Ot7y zJokG4lkbq1(w+ZJJKolyh%SYeQ))PmCiv@1Trrt-T*~4E&3Su)6kM@9%0gGJDhti! z&Vj2ZSBH5a@ao?T%qB~*i|XAV$hfR5J~?vlYysJ7e8{(m{F+S^yP~)|Rk(lf4e*$h ztMN)J`9w?5j4L6u$m&NJjwY54_vjb*!ye7>ntnA0i45`ra*2!pj(@au0~kMi+tjxV zH%BcSR(98hF&x;JAQ3B;A}hM+rZY~y)G0H?V4s=CS9lVjLEK4=1xV1}hN{zv{+8~Q znXc?klv2~eL@pb_aNlDm{l`!cZGmlb-OSBoZ2Jv0VvJnXCgd(}4_B_(5c%yVG|gpF zk?>Mehn4b+JJla4Zk0;swK_TA`y|_g>%`iyu$#G!!W$xioAVI&)0G4TQ3J^sp3VwJ z{nBr1BDY1Uae-Byi4H@r^&*~=f#xIDJ!W&F6U+92j?R>|=S7M+(?U2BY)A%U>&JhD zwQ?I>TNUne^TtYE8@|jWP(ZSn9h#7ct76V?VP4QXHA_nREhT4vrWEv5+S!yGg*alI z1!0WAkL(_BivOiS!Aswuknen>EB)LZw2?IHOYGKc0+D%lu5ms;ly%;rNW?rYHz8rF zntIE5wQtz+4trGwjh2yGNhS8hz3mq)D|G656#er+56LxCp*~&At)-zNX7Fk zlGSo@`{hg=_|HW4MVr|bcldq}?Mka^7*>w-?Pjl1kOjbW4foijNLfG%+(&%L{Lvd2 z0YNC(LiwjxTeCWW_{`#$FigaY1JVyn95nZPVgWf(Ldlv<_FX#iXbU>SSv5-HOxI)l zK1s?foDnuq*zGNhc8qDe?93nOOh`5zs$w|K13Cg{f&c_tkT}a4uIWFj94`LmZXLK6 z$kE~NJ?u|=G~}m`0j__oR`h_Y&F9S{n5#4!V9V&M`&QC_y!(vQCuSnLxwed>_dEJ3 zB7rh-B)m0HV14Iya>J`~v?4~~`&jqQ1;)9@?d~QIA?2;DC|*9{pF!@(UlY-GemEKE zgoyc{U+VJLJ?zl`t0QMV=jCz~eA?#py-u9F9CCBjde-zB|G#UkpZYVM8BA?>CF*Px z;ntq6Uz6ox;AsSkE|M|!2M~~E$~t?4>}QF+)_<$ya`-1eW%U9glcJ&#WVKB)py1)m zpzS>3e-qORy=pNQz>8AQ<+I6;6eS2~R``Zi?1jjf=k2|l#q>SQ1hhY>XcR`II zak#5+w>+I~c>(I|$AAZO;jQ@ilQI7>0Jx5mgW0#EVQ#MffZc0w7hT%o1^Q6%rYTL@ZMxH874UAcka zvOV5**LiTeD>77yOU}b@v>v>~kB-}Co^FPJ{vajz$0193F}0rrWnY73Jbxy!{}okg z<42AR3UU4U15t{e?=UIWpae79IW}HNcZ3cij4A|c7CW{~XHoHSsBKV+I92=Sr>0f#| zGWITp$qKvWh-88ym_zUoEH6gmuFjI5aF*z(IE1nnWwsXwZBko9_E!_;+0IehA!R&$ zBogm0hy>xcI99|mX@Z-(^VxW#)SiFKv6Ucl?r>e4bL5q-=j9MEz#;JuupxSHjQ_4f zS&3;i<%S!{v6EYGuEZmmTglvLR>3%${;7o6R@soTc-};N_R3^`he=)dI4;B}ZLkq( zeE?~0dLK!HK;(({u(}4}Gr9VGGL|-quHEKj zrJLrm;%Lxhgy}M$Uu5cwf!Evo(VereN5^wUWd&KXsrUumab52>DGYfF+z>fj{9H{N z&7x9@U0>LF?l0&Bd6M&rZUDXzLToztuW3@miwwZ5okyP7R;vg(>$+q){vRf*VQG85 z^g|7g=w{tSP(4+mKibu&E6lV;_{-5a69&g3W&7cvyV`XmyeNgJ5g?l>k#s|E6l0Mked$R+HUiG)e;(CROXgGr3Om*_ zOke|1$BEe5l>-4RA(G~Dj2=nsj_z|=wLeRV&DxWfN{sih`b!;o(f_G>{yY`0c=QiHrHspA|pS>OZ&={U;QNr>S zghxY-MQHuUmAkOz{(d=v>Fs^C5+(apFvA?r zYf#x?>37Sippep;zk$3!Zg8Qyp(Wkl9Lz)KW|c$>7)U&e#1#?ewi{CbufI`}Z$HocM5@ zAUo2~O>i6aA&|03R)foC7TVzjN%SrjP4JIi_cb7M1|sC z6+sieMBw^QnVOYP7wb*)8PbP4*-w5}q|6=lIG~QPJZTobiC}%Q{MSLZlL^hd0Y31h zHy%p@w&<8CxheanSM?O(uNHaS?FqRUK$jW6ZI{k&yw7}B)M(t0JIL)8V=Q)H7&1bJ zNmF&oR6e-`Cp+q2U7A%zpRPBPpYfV9l7QH=P)V06Pv(3$AfePrvXC`BOs?AfcsC!1 zEA#0e!;f6{eQW?M`crf+0g0>+>zw~<09>L{4U(@@=uv6>W9 zaFg$tDyshMAFwfRn#$I$5DhI;8CFJG+e#N;hWRL;Zmc0EKJNpowmWhe#Q~y}ebOyS z9L-vLmrDeEB|6X0;#f%d3?Qw&v|SUWExQ)^0Cdi9%~5P<97EPqOB7JUX%IC-V9Ufa zJBf`E3Th|D%xuN}5KP%hX6<_K9x1KEMheNt(nW7vj4N^BX(79AAz7Ru4IF^!p)k22 z1Fn$?_7X}#w zQF-q0aQC~=KUA7xolkl9vSf2w*+`r8T_G(RWws{ac$?>2x%+#y0`*#>9gIW(STHqvcr)?Rl`u5O&v`2K7#6jJQ1WdCjXl`F96AV^JDEaOFMM9 zu3`)X0be~6FDVu9n@dt!Qum1bYx1FfU&BP?F#r4Sc^-z~@_Wj}UWi3z1b!_!VuxSG z%TZNv>etbVDG^_(A4Ji2+x<6D@k-!d0cbzo!u4QbI4vHVzM5FdvD1|&h%lOH6`vbe zk$AGBC95}H*%8%gVbXn%ZHeG^8n`RaIn1aRulkT%HdDboLSqh3;!Y-yh1BNBZynF%y}%efP+O5ETee#pG#>3&VW z_4@wEcvQvgRm7o^J{tuX@;;;MUPe|vxb%$P%5QJ7KS)yEQ&EgA&KBS{xAdSo+xSlR z&t>oH+~ICY(@VWbF3m!2I0SYgW{t+4Yym44B7u>&Yo|0)G%_Cgf|61ZN@i>EYE3sq zz!CF@U&gv$|Jwpw_SWY*se=%k4Lja|{e2=W_pCy@Rr+0mv>?Loun!0tzHV`(wOOBClk%l};^ofuNL46vElS3l19c|3 zrN3ISSJQ*|1L)?+m|UqhfF*!bx0}p6ZlPkwoTH0sgR0p}YRo$(&T zde;8baeFNC)a-s7wmNr?ReFiYQy>ty_^)lTuS>4T=qSJ7c9 zG8uBMJ(Ql8(ALg1{!Gol|V>4Jp;<}4r&lKzSf)VyQ zUfB&C|9sw3XTNS-t=gKNZ$foX@x%Qg;a&F&+E@mf*)a0h)^K>GV`ZGY0q?0*N`?3Q za#I3dLs^ydFKb-anMo;OX>4KXR&GT6xEp9-CxIIcqAJsI>9 z(M5fe<($=P5dAA;;~6h1J~xcsk-0JxT3;$Jh|ddRiAE)w=SIQMa`{=-ZJE!u8~ZQk ziQ7M*WtSYs)F)D%=vdvwu{BdPZ%@y-RtnTH_CvcRnXpgoF{au-*q!*Cd7yB!udZ9jA5Q$sZAsqp-zyr}Y`dx*}YCVf>A!o$NomS<20;MM0# z9Awq$ZsIP0xr1qbX_XbfP)pO()7y$51;?}_92smYbPR9~E31y+APlHzqFf=#h6}E1 zg^6=Z>9_i5!@RLIzt&4~Q33GB5Dn&e5TQmT5q(TU(IPe@h&v?7APE102V-W%ka7!B zZ1D->6L2XC6l%S=X#8Mgr@^cpl29I8EY>yB=8S{>??+)Mgsuqi2j#M;>sg7%=Iuqv zxA9f3LoeQ}CnbOqX41nb%a z08^5gjZ0G_8}ibaVo@&26%tij6t{nl*fp<(dYSgdQ|=8gep_DSX8|ZTDuv@9Ja8*3 z;Bcxw7mjEQCRuGe@{*vGbY2dYg)cGM7G(9RzKGw+ebX9MA`@jTyKc6Nvj~DDvq3)w z7$QHdZQFDOH4$lQSJ&EM+PoW#fL+mN=SjlpbgsdvJoHjrFFJc3bD#U2V=B`~E)DESxCPlDyoM2g- zEB0C)<{g^0W5aC-Z}v^DWohMl*l0HH55=9kxw=|FF1$`rpdjj0)_e4bvX0UFOT0 z7AzrTKMN5Dd5lQ;WGY=6#7PUDq8ZRU9Nfi#;Qe;&{-H=8x12=IqEs)h&V z#M7~b#MS-IRVzgXU!v|$8ama_-XuI?|65{4N%}ZlDGqv$=6_rFz|G-4fQ~&S?I?=& zZ~BofZKApnPajUN)o z+^=Ns(gVut+EYAHE359foBiXoE8i-w?$eL>)Bkj6RQ;U(S%c;^Ha4Z4dYWVZQR=@W z6*2tGbS{5adwcMK{g*@)6YcwNjl(54Oh11fl8l37nQdRZ z19pC=I^>eIMk5QU*}P0PCe&NoADUWn7@$jMsM)Wxp?KW1-NDWu??NS4&0v!#HQe9j zPM;c9#YT+?7Z;;ZqD1ulz=%{(_b=P!wWPg~lnS9j z7%kIYA$ThV!ruPx09MSp;J1c*FFWzyXy|{OfTIb(l@4dJeSq0VQ5Bsxq}vqs-!|#q zZVRzZF$J|uJYx^n+b^VOxm&zVbT+L3u8viLs|Bsnt*ZgX{_!QmEIvI!%TCTkHWYp784P1(LI%RwVIRWIY1TCet=Oxrj@vTIv_jm4^3pkardth+{4{_bxl?bh9xrebqx z_kKR5hq%HnTL;X4AfDRLF>=4nYr`)f$p7d8dozZqNidTuk2CjS! z3Z;!Q)Kcf-YR@){6NRrCTkxhD*LbXX1mo{N9)dRi)A1KuPdFU)gNue-F3UTKos){&n@_i?iu9#8HNPiLU9B2uY_212$8AIzr9?|Q_4LeYOx z6C!GS7F96vVoP|iu_$tziaNk*lAC=s5BB1x_$RT2$J90k;a_CYB zDNp!+c&X37%R0A8kVvI*y)h)Ap2ZR%3aE%(b@=~hD(lMXz#`I2h zTb*;I!>Fd;GSn3etGPWiW%QF3@XPPNJnRA0H$Bv96#oU7fId$cy=6u6JeP51nu(@? zx^)o^r0G_deniCl`#T|Xca%lq<13wanZ&wUY*fwunp+*j!V*Q$PKLnU=Br)r{m$>+ z{(HG1QVCAM>|?|^V|q5BgHC1+Q3uRoE~*$W|FubUmch&g@jGFoux5NZ4%t-G^4i=B z;Wx44w;a=Ni{6O6;Nf41rpRkqrN!Doc5JXSH#HDwzxNJ|+lxZX4Nhp(59sYYbh9{N zz;Z*@-(vT!@im5A$goy6qq5t3nCyS5+AnmVuwVcm?gI51ty9hOJ7}g1+Y5v9h1}@o zg#pJ4C>H%`)#=0DYEljx22B46D|Z!P& zVBaKTJLGxFzzE~FmR!B%IH#*(jfP;s_dXgP#F_JyRIZ!3)*BuS)*ap6aZT_w;TDT| z8m$^ovCmoit!;St{!778IC^NWho@f1Ts($UhqN@XM8x1-z!I%Cp?(xqYo>3`!m1rh z!ES83FDWLH^0?1~bxY*I<(qp?pd~T-N&d>B5dOUdP|h*%8=^qpb|RYFRg)l0{))mm zLV%={>6HW{AspS=N91;!fwoSR|Cw3r)>BbD%I-CS-NJRGEaR`63U5nAVt#El?yVNx zA*XjIFdW=l&{Bhf*Q_T_;-1-ChUr#RTvY zdXw1^Ff}tVb_@5^$1XeU0F$HixP`qoS@R%-Xa$WU`OEEZ=72S}m6H}ph2LHhXn&iO zUt*OGeXXO}(XAuAL&XmjD{(@(U$k-fwn<>{e7y&9g9mHA7ZB9Cb8ISPfaasp6E4h; z_}LwpDj`-|8qrC{fS|qPV19AumyvSqgEH^QgAYaEQ_xQ}Itm-A;*Ujo>0KkaiSbM> zLi!bD<-~}t2X}gv?vlL+t2dbT^bn-LTw}fkk)z6;i$P~ZVHf9jsQ@c?MWL`cu=oURQ z4+#LU2or6E{dUz-B!^c`A>Rhiot3@-outlWI~LJdmOjkh=vVnlsb*Ij(<%fEKK*PZKo|O;Y z-L>SN_jC1ZSYM=p;2|L7iz$f(G4ytPGo79&B!Zs{Q1r#;%E-68K#> zF)&+aHbLUJZLli7V(ugVzbQgX*QjPaFFCSumOBxtzTE_Ta?_!@J4}UXWlo{qxz=U zTn|()bZ|gKILO6wT+61~o}e@J*6x(XmL+r%o_-!ldP~)Ype1hYu=Uu#&Z{}sB`JYa zgk5e6kExCY%o8Sh0dP76dy>)%0Go;-+WSTsbkz0hVMSSrQB^xUIa2R5_`bmxi%U*H zP0O=Bc(EO5Cu&#FPwKZhpp;xf=ojhtPhtVL{sZQr#nxfFWsM$ps+Yv?k%ydOLyYx7 zCk|LH&~XYD0lZ+hNIHL*eck7i$&~s=82zq{e;d8<{ONpRLF%8s2CXUKY8l_N`$V_( z8%N)%Nzw#{RS|QJw|EiWr8|C6;!v#0Ut^yPt2Cr{QP(C8Wje3nT0PCusA&(Z3=Q-fiaN)mo$$bgZPPT=Q` z&^(g1mhOs_U%vAbcSaecN=95SgyT6^>9^GRlJctuCqla8R4J~zvkW#dWBRTNKHmne z^16C-fj%{+;t>}_VroRV#(vC*&E_LN(`P#5Ug=yK1ziz~o5r?A+t!)81e1 zLs6pkee!pa{x4R#hnGdfpyKNBH3ITiFeqHG{hGgKn)~9*P;Tlq0e&UuPdu$UB!^Wt z_f`$;@&fbiECq=_ZwTh!c|92-|A%-}>JT&5zJ^*RCzGZ%2UJ#*pN9Ba&84n*l}&2$jm60juwz;!d4WoSCqbwT*Vc8V#q9y7c}_hJt?&29 z=~LwFhCXZ+_ERbEEiTLw$%q2YA!G8InJ*F1|s6 z!401c)>tk?eJQ)a`J?ufDn1`0vM#@HiAZEJ%TWwz$txRF^rlgTP#W8+JqlGjR(Msv z{!jgbJd}+@>q_(Gi+tVeA3BdR=($cP=QwPcjq|oS+!5IgtZsssh7q}Hhmyt8SMy9R zV%m`hqYA7QHl22H4yiU71A*Bo2CH#4qo2%pEYqWT){X667iZ{NVw-k!iXD)R1741U zDa$=+fqXN=@j~s!;7vOEF`f-y zA5C&G?Bd{mZn8Kl5{*+n36Bh;dhNFyLIGW4>?(UGSNzg`Tk7B}viykRjq=8>hTk^A z=RJj*4w-mB-Ik*xe(WocHYs-|N7JggIspFF^L5+4z3<#;8xIPK;5 z)8js6c6*uS&}agCM5}^CUgdhP4n%ixk&9X^I2l`Kr1&BI+*E{{+g85tb6auE!PHYr zo9}&|DL6=#1x3APmG}i(ioxy7j{Vk}*RL}fI=pI>J}$iahY`B`xq^MySfG9@J6Ex- zkh~}T7?R3_*dv9LS4)>L4plR6E;>5&E4*}A6V~Cjj*Bus{Q8R)6$=PiyTW=I28)fX zwx3vN7P*oO|17?dTJ33$%97*M;s6xTy_5;U=xbb-8{Fy1*UO|R9{clFhgB}@4n@YN z&DRul+EX7Nh0=jm@2!?sv-73A1aKXausnH3wdyVjQtro@6KwJ+{-_X zNrYN`N=EC=$L{qnt{v>Ydfn*@vOttGn+Kdd2r0N5C#}W8?eMj@$McCK@%wW`$3tiW zQltPZ`EICI%Q@}teUrYgU608)OCNlNxGNCF^2kwUBm=tdD`Q9~9@{)Bd@p?(S^w4l z>BwjfH?DbAXdN@uUreYhTCI2G8}g`pyIY5y?#g~$4GT_Jw*Wau*M{JnrmO1to2UXb zY}zd|n#GvY-G)@XepnRS-Ud)w)(yISE|=LPZ0}CSyU_9?0`)ilIswoo+J2OW`sUiHMs2HX*6OYmh=q2@EQOqy-?|ZkTmof& z!cSA+Pk|DN5HxR|c1-{QRm=+~Xl8$w$<|t|6}~zJz(q9CfwzjckWw)=1AzrxZ=Xyw z%s{x?SBzm8ksHF=>fyF`-~tG4EFQGfMm|G>*}L>&i(xJU6V1>Fg4Rw0J9ul(ZO<e;@Mo4`o_0-#7NCp*2UMI=}>os1KZhbNgV-%4n)&JYeuD-ep`dnMfkCtC1R)%~f z&BLXODKGrcg$@0gLK%awbaub(4O?HwcXRMmABNLM8>NNHhjE-Ie>UK|Z&f7fPsagd zmIGco_XTZnBNJ$~)ndIU8HeofpNP!VLhC*oh{~8K$Ljsi*P*wkx}u`GqON&ZN>m`_ zJEzW+7E(t1dZv!6I)F;(a%zsUP^4wJGC3(_! zk=V3m;)@fsp_qksD;xA{H!KjjL5(fnTg=n~vDUR6Q%b~ns8DultX2ms=X8XM>$u3j z68*0GUXhl2rS=w(-%<#A=6|61bg1|bG>^a8`}@6wj2{d^9Ze*HO--^}Os%Oz0cxnr zZzW{KYWgMH4~`%aL;*BogA2)G)<;LCh9R6+FwiA6NvPf38~rNR$i3LxNbHTu zx!cX&-amm0Y6_Jmw}qtLJ}y$op&=wuK<4C!V?@*_Uw*Bjd5FzDOf$~y7U?6@4?DXJcbJBg{YZ|W4wBxlqIAjJ$db`NbJe=VbjEjIO@xZ zs#_=WzHgzTKg$S1$K~8%gWFZb-BZYkFnpfV?o41WFu#giLdX88+lT)FN8MDP=i1vg zEx`B`6J+DjyX6$NaJ_2@jPa#IB^R6*S3`ss7>JH>alekkks)Qvwq>&IQz zo6uAwf4JQ*TA0i3GLp&sji{S^r0~Ea>APCq4}$=G;d-_Q_e~ztL+yO_aV#U2^7|0q zz+o;Zw8;V;N8kUp<42lZ&1tcq1^F;=bvQurW%vx~VrLQiV{1kbx0w7DkosrYzR}fx zP_K_1P0Es6I#mm*&lY+EIE95HSQ0;WHLbRwl<~xt;^j|4XKN`wDRlTXm_mlbt?%pP zacX{=4G^Z;hE2Cy?nzY2uD#7|**s(PYSE$^y3O(~No6u3GlX@jCmm#mM-0Eu z9$_+E?dx3wVZZ>uWKwq$u37t8REbvH9Um$pZf$N%sus%wd~X4*oct*z>^3Luzq_2f za9q?f*XunhS;9_{Ex%vSVeW@m!fx#Cs@vt(5?do4XjyZzFMYY=>->6zO)5^_hlOa% zcFtG>H?ek1Kz1*?aY!gy4N9Lp8Q%)ENR;V+lMo~H0lkgSpt9@gf}~X%psGp zxOQJ~X(|R?Sl-AkweM9Q{-k8f0HbZ-U#6zL#-SI;Ah|<S$=7ZD{V zEl&@5WNcRA-5{*?)>ujH8}#9i&33vO8aGw(_Lli#l- zMM(Ne-0^P7xRq~i&6H*RCCBj%vJ3mqRDmkiqf?W>X~(S=Z1^q5I1qM?&& zQdqE>dChySbjIz{aNmC^{WLj`lp{LGv{lkth<~X)A$2T*S(b%iF`)xAxXFE z4&QH!)myiF9g!828NEa38~Z>6d+&LY8E?#>=J%zi@hJU|&(yd)e3UiHusPgbB6G)9bANeD?G(j3uJet8>d4 z{o?7W0Fev-9}khAen!}VGwK&Bb#nt3{5AP5rX>h3+)PZ}=X+YHUBq@My|{6Wxpm8h zI*}qc-}Yf++q%lDdyehm@M7-SNBN~gcwqBWQ(J45<> z&pWFOVc{&0adFz3->Zl!(ftqk3lJ+oXM9E>`O6nkYd#Y3M|p;I+nD(C0XmqQ?U z7o@POv$`|u`!Vn=7A&yjbHa+P+6$<+AM#UVYD1kQ`Qb$7tp&ir=Tmt%po!LjZx0$3 zH{C7|_6jYpNAlEXP~JH`o8x&BH4cf$ARu5Ph3={~5!!VwAs94)A?|lG(gYXtmgI*>adscxhwYM6+sc zmw^gdXH;bTVs`l_7U@uun=W@94J{snTqCisI)(x%X~{v)N(XruB%ZIPg2JC(d%Rj> z9MJzyk>{nPc?`)*itp6kmo`&;s!jVsrH&f(F?`A$@18&NMQiKdp-_nbMWWQjxikL6 zxiyUUPGWrLpOSId=^OgXDVNlzSW0L?#QXmYrWKd?4(5$AyC$A}zNqzHo?|H1^xwMI z-}L&d`Gptcc|r5Zomxv*Kb54-vBlTZn|IOg4b2L9QCln|i0#YTU6lK2LDt3vA0a=` z6!b~;hGhspnHdf@C727^sLitn(#}l5PUKl6hp+&N!To=92FraI`He?B?^$F5KCSM5 z5$s;Riki?AU#iycLTZB~bKJY9y{`j)dkp$>gy4C_u_i_4+-|*PxB>5lDnI#q%Wp&* zB;%_=Pr_abuy&TE9GPnM@PsTjz%d?14LLmo!y3g9U8ao1+(>S5C+iT#tkJ*jR&Uq` ztdhN`Q8Jd@QE(4uO^ zYM3KnGr=6Y8f9)WFt#f7mltpJa#_M%X!qLB-LbP+Gi$=yV+Si^aQB=2t3QpKA0zka!vy;aLY?y=LB;L6nG2DOh zFHD<{Qx&cQ?DF#1Jo_XKin7CxQv`zQ=G|$}ZGoQ&|2KT;Z2Kh0=ZY2sfZRBH@nb+;wu>+vFPg-@(aOxxGS({Z;2O!Z^KcCKx;!3pc8or3HDky#kY{k?b9L7yNs&tEQbJ zp6^2h?aa#&0zG&ibH^gB)yLk4H-sVQhCZy6lY8;y_MEj1RlT29pTGSRaSbEB8nA~($Ml@w|B*O9+Ef>{j%!jk6 zS6iEl$(8uAsSLoADM#8o+PnpZ@K>OgB5%g4F{s;JZF+k-(oi{1_RWUw`sT>=aPQl$ zcOxf&dz-!1<@ESk+R<%y$4K_MTILZ_fZMiurB;IqZYr0qO7I&I8B87pMr`ImK1i*n z>LTqxCj*Cg?GP5w#Bqs`ne8Xj#sV`-p4}D74%1rjlLn6Eqp=qTH?s=xyqdwH5el=j z_)21gL`0rj$9tffs55aIvDM2-YU4W9iYr<}Rcy|7IlG?Rl{e$GrO+T)^DB3-Kyl^Iz1@cb(F;kepeV&C84F=44ww2bcd_bKZ}!OA`2$O*J!d zlh``^NE?sa6QGyNX|YE1hYaR*bFthOtjva{Aih{gJUtj`zS}Ph@5$<0%sLw_8yjF8 zO7q4ncw*)cimSymlud&GlX>&=HhZSgAF_Rcg#2DSz2YOW>JI#VhtnSVaA|M(`%JPc zDgmebwwJBz(ZiG!47RR6JFU^h7}kN0ukhFklG|Bqkk(u|&(&$`7O4X9QoBe9Q)}jA z_W8=Gx_vikB@ifLzO$ADZ`kg$VSl@7MD2CRu`UM@ujyp=q0Jtc7gd?RyIx@khzFk_jGW0YQT)a8Ua;w?!_S$A?9gfxYB4(NP`6 zXQM|f0Lg3o*gcN7>*5Z{@ivCjD(~1{bJ&>+b=y)zl+8VD5nx>Px(>)v{kRFvO-ajz5}i4nB9V!#=cNxp|Y&CY7;~%>o-*%u`R< zlk$2#$mn#Y;4^glts8v}%{pkdPtOullfCjUghjvBx>~D>ZGqZ+92)t?h$26^SDW5o zW^9*HrfR)(3YOyA%$DHBdAY`&x%d!XAp69Zngu|CvhN_C%G#Ul1r8)Lj-FR^#Ep+U zBXebrkF9$TT5)c@m_#u{-jcu|IziG-NTpO??fZf^GUAsSC1Z|@d!+(l!s?oR!W&W}8a9>!6{d%jZBY8Q} z$)fCJ9NJ6;<8gjevv7O4O|uy}JaRY~Y8|q%NZ*Nd$bDdZq7=uihcOpiS2N)m`mlG1 z)Y68*_xq8QkhOzflx`jv(M6Mo6>o&K@`W~p5Qdg4WUiMT(dv1gIbTYXbcqfI2)8fM zP>0cedHp$xYUnJ6_Z2(mRgbWaa;n}`!qIHGe40=E6otu}S7c}(DcN;|z)N{*{iFDQ z_Rr@eb-==|V(VKDbC6HJN82(oMXck!mI4S~uM;GNHtI*~a2t~QB4Y}9xIUfS0bfl) z+y<;}?WDl85u37}BksW!lIZL(BQ=;EjQhA;2{TGpH`UC=O)Hugrb+4Z{7dIpGTNNR zw0hy}hsZyW;pe@5e%(@wzFK&wiz-2#mMJb$`P-PIhN--j|Hx63wT}x6{9Em#n4a)A z%;c|viHtUUk}mZV%;!Hhx$%8?n^1z=WbkNOYu!m?Qe|$;%{;ce82#l+0Zr)^HcXQc zmbazzI~9Jn9#8J&f4#ZSS8ZuN8?LO4-r$krV)icny|)bOYm#}Ysl^ZHvx`DMtDF1-Xbf;^P3O5|>8z5o5?Fb|*qwSLZceo7AClf;Gq!2q@ci1m35 zsF^czdgcupvJo0%Giv^45{;63o5?e z>>j^^fVB9i&z4t)Ou9Mum9Y4`;qPsFouO}|+03=m z)^Y3V8ay+RO_d(gAEXFknRpwEttOeXWero!^kU8;!RYTXD^6*oG+A=eiaV(_%(qnjo_SE2MA zeK4wVVW}gOI)Mm7X-)AJFTwcA>K!}6s*jC5`mSnfR9xyp-1GZtbhr1^fZ{=NlnxzF zjn3`LLdO$M_f|L{)|TxXN5+#*GL##mb*HQ4!tQaAn{QM7HA)U%4&jFc<=u7$Hdi=? z9LqUX-JI7Pg#_hPn^zn!+vS1IQT#aqH#ZFn9rLcUH#P8+yoE3`a*>cX*Lm0BZolmA zUaMB3wf9cpc(cj9UxCY)s-v*y+*#t-g?I?$za~83q{3k@FPf zZ0!1IfA0pf*Jw(4y>fF|b4q%k^gHdAG&*0{socJaE1@hkU}~*7@&glaJH%vgAmHT2 zS7aQ*l9g;3j9-Wx>otU56Hw>27pV}+QdoKC6Fqqlg9x)EHQae$+oS79J@I*JWM|QZ zD1)5)hMy_R+xR9l@-z)jtdAkY=QGlURCxnuToKxfDMD+oY?^_?*-mwS&x7H992 zryxC?or&h6eD@qUzkoIpIE%l~1jLegiI}9kG?FBCH12sq-QL(|;9A7YJoTz4wO)v! z>k-q|7t_!~4<~4gV@jMWdM5xGUyTWT;Zez|EATl@$qBI8U}(tzSpk<$MN4fkDMgC; zgMOM1_P?_b+iy7MpMF{WQ|7DUY7}Lz3w|*QZeEP1d zBgA7bZuD~>H(tBHWDoT<$OQAdAd-N(zWyKqe$~Nr6wyq5{79meB%38uy;NA_xfwm%Yn9uN9jUu)>r zLMF%-P-}hw-e@U_QWTV%k)y6rmNkC}Xov4+o`{yM1>z3>6ql^#j{BKiC!i4!yx}yM zJ;N+$znd~@)k6yvtvw5x-_>l#MrK8s%3Wum|5A=ogQA1p)&y_CBlF^u_-EoPThdT+z9_49o`-Y_-$Z%qnl^!sfr$aq1av80CZt+HoJz$GA|N zz&h#i{uf4q%OA+zL4o&kKBccUhY0FnX5O`RT9wu z!q0O+@p(;oa%>@%GM6`P__!^T_IV+`v@?CsNNj)Iy#`V{>hd@G}S6o z;=I9-7f^_k*h65x3>om@cNvtbxBH)y+u6#pvC@c1*7N5^dTw48*qI4>bjvXK0to*8 zRN1()3R(4kg|CL-Iwc+A^1KJQm@Y}4gST2{>U*WHkcYSv7(UTK%nM(t@_;gVm zkj={ql4~0GnWh6h%5%PYJy~>pvG-fBg9S6xJ1L8 zv%=2obas;ShwxbOV>g#7Ck0BlnKfsHgpGm0U6WRc-Ff?zXd<^9r^*PX4)GSVBJrYd#E`5u{?r~!>Fc+bKvde#KN!u40DhOyn*M_91ZqLJx5kZHWC&g*3AY@AcmI&h zHT73W^~9xod=m6@Nt$UanMt7ebO~`iR1K{!o&nUbLTvnZTK1?fR{89`zj>6lSxH=N zStBZ-aH(zhK>^}gy*j43*&DK5Ch`0H<3%P?T&s`kYR2OJh5Mqx{>RHV5^Q-Zpa)Hl zsqp?4oCtMp8mc__5wM*!t&FGQu722vo;+M8aD+m#4z-h8jfu?gkOK!w0MxwybVFP@5!D}p?+h29GcB(fi=WJ26AF>Cu$zT`revqeWI?*y455tp|3_)jb( z-WQ=)am83NBUHg;EA+W}WzezGwMqO_TIz+%V_ot<_RdUQ|rmDx=OTs-)A?=lPP2rGH{j$WeV<;sYv#kb(OJ>O|zl#6%a z#({8I_foomMmVE{%GpX+m|(!^A2hlecx}~;8I@i&_^#;D7CV$*rPDy;{(Y;>j=AcI znTX5IFNZtm>kY0$! z8UJUZ!T!Xl?Qo(A&;&*|qRkCEoT}Jj^F_a(pC;~Tk{l7kpp5>fi7RVqJB%Z+%LIg% zD$U15ZrL#&4aC`6Vox5I9C{8WKLk!Lr%F*z*dE!f?p~dC?*D+rVez zz4&1yrC_x7A@FPQ;iWp~8;Do``pt|*^kbjPSkrjy>B`orLi~mvu$T$Zd>(rmFClzx z;_Lx&xQw_yAF%d7IsEg8w?sWIQhweGLL3tniGSP$f-aHhb>!ZYj`NXQdyG3a`i^M% z?SaX8N0gaZ)-aeS>1roSSW;4U)N)gc_^nCcVG~lx(M;QwgZiKdV<4dB)=A{=-3}*z zY!PgA@SU0QgrNUbf?>?ty~aP&o(FGoMT0brNd{u~fUJ zy~p1wgUqID>-A`URt`-kq9i$6ucbCk?a~_6NPRzrm$L?KRo}?T97Nst`tJo{5Q>KX z370D;^~4E8 zVnz_|WySzl;F1D6tD@G%;)^cUvtrWR1kz<(s6Cv6&NIRhCwtA-%{SKGAL<6{+rZYTw`d%E7C8lWo!25_Fvi=agsBL{jgvD zVX?t8Z6}%NX;U}1Jn4Ot2b-dIvQk7CCWGk(SlrD1rjh3?CX0mjwC0?x`loO+CwP;c z*(E?uh@YiD5=YGqhsg3a7{(gOVW&NnzZF+DI@&t<@L)f-hU#Sb>U19qKdXt%a=pl@ zYA2@Gr!T$VwoY#}o%r|i=ilLeUu^5@V*0MwS(o|XrkOYTG&|4769+3f4A%y-fFHzf zg#Z?TC*$xod%dIn*2j|fdCmoCQaSUF#P}^p$A_69&j!VnYUW}!MlANT{>Em`KJJwH zC_j1tSqfNdv2Fq%gB(eRaV zNrtBYqvU>A3NcG=AzAY?p#r-l?%$h)#a!j!;GPzsrFP7o8I&O*hs#UNaZQF(sw0q% zV;JV+e5vBD8qX7am{3zWBQzr$g(-5Yx+~qJFm;_PCD-OX24U2?yaX)B7HnEFqQvO! zR56w&hneGr<>O{7R$NC=<$iuy0X3F*e5dg8>2hdqNa@Z#i{@6Dgl@TAd;)ATvUw3? zaSZa5$V3JKfpVS;peL?p%&0i;te{YBH^7`bkkml%6Q}ey014BxtwfYF6{sMszfwU9-dKLu)F9IFdx2 zUVM;sEuZ_->@2pCO5%l;FgsBn%U&$(;;=}rPqT7Q>@Erl=gO*L*p$OcD!Z9ihR^b) zg^T`ydA*7v6goW+H(|!%X0u1ZU+ZJE1O{Z_7llC`+q^+e^s{r+<;Q1-c=RDH9F!fW zy_V;HcGi4Zt*qI*e%V|Iy!o`cBHCCgwf##`yX{|vgpZ_Uzx=?dkV}WJ8J(cSyjEU9 zpU7x-OabwES@Vq^1P{6xjzw?+WF;35nJs~GM>FtoSJtmTne@ZTJ85dpCOk>EP#A`5AL8ohsP6z*-{e~6!F#7_ir_>qad?|QMY#s;Jz?insTJBpsY-`jQ5TEK|~aWCe)sfA-?3AVurkI9$#nv7^(1* ztyNINDsK8uAD|EGYsDfM(LheXDZam*+vq9sLh!+C3PL!_!p%<8?eY=@-R~``O)vW2 zEaq4cWyY0V?e{5V5Br%)WqG052kwbu4#LaIhFjLckwfbN^?6E1XQywVQNUoU=FR1c zNIMK(ul1xOWG>n@n#nHCdTaLOpfhCF=|;@TT6n;uzq!|mQnZn#y*0jEw0q(MxpE*u zJ(9!pDGO{X?6PTD%rC5hZW;MwzIbH-|;52&wBAKHYbsr z*fYun6H;H*aH-w4T%B^ah`_7;@bS`R;cS^pf3sw0&H7}R^37Y&Jk2Pc_%B-{gN1t?2@WY;~vhzDr-#4LDP|!I6{lgC>5xn7a^RanL5n{akzxflW zyc0h-Sv|gn9t&<-!1reYgN>7g30+*#--QszjQFn}EapznVbA$@^AVJkfUcNk8D!>#y4NB-YTK}8hq<2k?(0F@lw0R%s1x0geUxs+tY^UU% z>RqhKUC1XKor;TBh&&k8$#y>Zz&SvzT(?O}({KG{d}T#hDxuow46U;2r6DtoZpN*7 z@|Yt6Cgv753AS+OGp=Y4Dwc$W{iNY={<80kV%r-=ZOwug8GvhBm(^ewE8~sDIm_c| z-k%jrdTHo*U1f}9i8c*F{RB`#0}^3@UDicwK^xpE@e5?9CQ@VskNgmTB}0wRLJyzy2X|D>P)@+arZ zd@?K7za-rQ!A(W=HXWEXl9b8Bp3RA?e+TM&y`h}432EoGz~GvoBCGpXIE_hD=y2Q6^8=x|vH+zb}96NC{4Hrse| zE>)ObIrmDYdm#u%VYPcb&Cj@Tp1^PFo8iJxXXOSNV|Yjz*{d6HB|N^Id!bQ@GbR zcx&#+0uOfZQ5psjtDMk>xUONUzEX$F1)tVK{QMW_XOcSp_rHdC|0YnXA19FkOcFdy zrA#-ZwX{AiMQ*+aHw$zbM$ZKP!M1|WwgBgLxnNuWS8^IhD~f;~;7*iDedY7F*Nax= z2)f2;!9EVZDthxhj{ZlLbDxZfr!Pln_vsDIgciXUut?sU?ldRZ@$K{8SJwMad*|Qu zg?OW~cjKcxfA5S?Hox*#^&Uw&%b<*6gc|?yJQaEeSB6)g|L`UA* zgI)YTFPslez>50o*KRa)&E{f{*TR&y%G+x+Py1-7hnwqhJ8ApG4rl ze#AKE7!^0hNlUwzD>&zEe6EOG(T!5D;$)e<6~DeJz{xgTNq+vjwJ95k7!J1zD9%DT?Drt+q{!YV6LTm?mlur5tNDFTvc65Pe5 z7uOIF2}K~Hlt2hQ0Yp|2g&-h=5BSWY9jT#31qnzekPA{1Y6SGXVV^J0^X7AM zXXZa=&Y78e?=QD8GZqUzDkr7j@%>1P;loDFXdDR5GM^W>D4eXm_hc=LJ9I5 zx>8@jW^c&0VzXrT+-w4ak=g}juG;UCl7pa$YzH+PUzMZ%D8T|p>g=7KNq;P_;fI#p zP0T25D)G5iuaGx=;XB@D=wG}ekuYuJ) zQ?vVhz2BYF~dQ@-VhM%{ZHrREpXZ;vfR*)FYUwbR(-##=`^LSJ5b*qNesrQ#4E~G0IqS<&*fv129A=KkA?S5+&`hQnkhf#dU8OC+9)h$gh!S8 zJ}u-!n6Y)D4qeou7=zkW;e6#qz0!o#oSF;Gdb0JM2Dfb|d==Dt!t*zc(mApWbp^qL6<0 zeFXA^jaJyWcq!7?0siQFx6?OnS;Y59(Vg~mMco^$JKm&ZtC7#t7!CMNax-sEJtk@a z`9(g~LJH!da5{Q~^|PQ+BXYHCE4GI>)4gyqi1+_B? zVPxW~?6O@^HH^z`DkP%nHPJ7d1LYO`L8Z1%fFSxbFjMI)rI{6aDNYGiv0gVfb7s(c zUMHcbjrD%&=n=Al-ogROQn`-g*RSpf6uP&d63BWoQb?Bb%*;jJ$azSB|4|^~iuzoG zKE*vRjZQ0?=Ym`H2C#RMEolh0toiAOA5OTKT>Z`Z>zB=qkCVp0C3f{XI(qYu5WnO1 z5z4bIrM&kvTc#FZn#YlE-;)Ju2oC_ICy$j)u;=r>CrV4Z!Tz7NKjoG$b94%FPvh!1?Ndjb zs^98fEh>a9{=w5tJy{>QDIngcC&Q&#q`K;0xshfSk;MLa?S6HPCa?&JVdyb7PbaZ_sPUG*SdWuw5S=eP(9HCKMcbgNB@ zG6qUE(+eO#rT<00>7c{Pu8(h70>(j@xu*V`8r^Q^bkaW&5zIt;#SVp4zFk_EoJ~;nKKQ zlzTp{Er*_%{dP-1O78Z3@#X6hC6tMKbu_IDCAc-6Uo zYh_{rDUqXu_B;_k#d~mz6{I4Up(ou6&4mtgBi#=RspyN^vAdSNAEQM`@eD!>2i~)E zVPQt1Zx!R5NUkL_%3+zX%$E>Ub+GRmrb2gA|JN{)Y%`aHWqY)K(hwRrJ5Bl^P~SnLDo;tLBiLkjw2KDlpmaz>FTXZ%fNe4#)Bi1jF7iJQ@|Ra5!{Tqy2op z7WT>!D1;cc&2u0N^Yyuwo`0#)4~?(Elw>U?3$$9d((QRSl;M<*!>QuKEP98pz7&DJ zS+^a7ACWl<8VfKF#VNEM7ZV>_F_4VTmCz?~BLUJ7Ope3VzF>&kO+<=A@tr+_jKr|? zE^R>BHtWcUA`jeOF_QM|%d0L=*bH9N+7q^p`dn)E0?g$Vv@=Tb`Fz@uFS@8{V$s63 z9|S__qgQj^4`8!aW1F|&&Yg?$(G2;LwMl4Yth|0yuopcxLB_JOIl<#v>x(}VuAWq0 z*lw;*@Xuc8GFUUlY<6#A9)Gx}cXMGO?OoeiSQhL2nhFIf9pXLNIsQ$h54iWFRU?0D z`;ixE10#dTc$3omhUV3VvKFcW$cQ(q zoW)bnon&l7J@wbh$AI1s zZ?xNQHX+2EQtCI{#43S-SV>g!N2l zG(dB38tHE$%8egvw{?mq`o%6{G58zeoW!}V_~m0`dxRQN$k}KB|6O94`Z4G>U;5Hk z?2Bvo+IK+mMvloB-J7ry_ag*Iy>e#8Ue5%pQ)n5FF!vFnjtk|l?vR}A5-0G?G-Wfu zI9qyrz}QySWYzHv8wvc)3Yu?le7O)_EGZLa*_GE!dinO-7uw*5Ka)zU;#c9yH2|T< zwduhN_rr3u9xL_W*5uJWeraztcD#+|ABFvm1L?16ijVqP*dA|xY2>UB!9mKty`27A zo!R_yP&Nyk6C1Z>qasvK=xePuDW1x*m(sF}Ua_zo91BEND`f0We*Cm}tAD$Bqg^64 z*vqAyW9BiL-7oXOQKIFhAN9lF01dW!1|c`}Y!S~?ayZ-2wSXAZccI9IYal&gluEJj*@G$2y`IT-^(ptuu|A)6i&)oOj-&detQ?_!_Pqd ziuaNoNF%;vw6h&cAtFAhTqWZWs&)zDZ*mb>-z8(!;|d5VvuLs-6}Y{Z)x8&j8aiQtL~PcId2s^kMt3nqOZ8y(YwCW^92i zDUx#^UhZ3La(xgVhvOloo>qMJCp;G@)VZ$X5kdolUWXjn4_RYvCoH$sxZ>^-xwd$e z0B0*bgbyW3*F#>qv(z~Cw}0|VTfcoBbFo)pOvaF8jDKVllLR}}|c`#lyF zDiuz$yB$%fEq8g%&0P*sdN{Q^9|}BcAgY1Zm&1HK8T&iNe*|>Q3EgW-y&?QFH}P-V z^oMTeDlGUmE-VLOYDOBweB1uMET>K@cQ9rCG9I8Q4e`P^z0!sxk(Wdzpx4Vk5?qBX z&t0!xhlo$)_%qZ-qW#v}CDcoHFbpL3QeNIx8Mb^|v0k10k{Di=NGt@qj^*O5+RaK3 z`A{R(NsIo0#MXJvg^O5XR32;+J6{K;XvA99ujv8B+m`~f(Gu~8%0`Q;`w4ew}crWQ4+#yvZ++?%#yOb(K9IOb43XRHZKbteY6jd}x6^)YXD zz?E})!ozzISgk0bL($HEA+6P&BM4Tcq>if1v8Z`6?}eb`XJeyN!tqw+pX`29&5;$gK;_$EoaxOl6;m{1jemic#Ze3;Mrn@r=LawMt&pozesK4w{FscYKktKWf=LalX7=elDQnL@?_Wl^Jy` za-D<8VnW_K)Qq!c4*k>dC%I>>Zo3I?G&m*9{N)hrZy6_|#nDtZ+^bRLOba{C>}^T0 zZ=;L%YyC4Nqb!CS4na{DfG-?2)O|YR3HEfM?_|m-U%vuY>X>iy_NAks3G=cI_ei^~ zd;1yU)7)J#7Yu0ZskmdjyjN;TApBA>Q*w(yx z!{zBRIQeWw!Hqd2^Qpf1`HVRGWR39xOtGi-=yMEouf-c4vIWn^6LZY(CfwQ>!Y__^}3y~du_w@ z`=Z%U_11mAi79TXFpM3`^8D;ah7k+?T$l1UVTPUm$O*C3e6`j@T>)=+RvY_LXeNFc zhR2JPn?vQw-hnt^2gzNOs#ItRbMA!6QQw@=U9kbiJw}Iz;=5?t`yEPfwns8(0qi6V z4zklVl^^T1Elr(jNx5qK4O_ED#Ay1!o8b}SYpHdmxR*ro=-H6|2R@cvM)HNb2%Na< zd2TNcp{%7I6R_wt-}7Mf3*240@l%Kz&fOL)nasU!pT6)Dz#mx~*rsR3C90y`MK0?_ zPo~%A9T7CL#MA3zJHp>}A8RyASHOSZxVoz}x_X$Gzp;YaZ_?t_mq%~5cDDe14cc!J zRSWKkLA6{eU0O8|u;E{RXZ%ywKF3`t{6X|{h2JB+j@||@HGQdG1;YKy9RWNdRhCU7 zejBF}q#CfIU~{Dy)=itl+entIL84Z|{ppJWt*cybUo(TV zJvH`yzZQv>ImyYbM!;QhMD6@zwWWDSGT!Z-zt7?|Phu}K#2MJq5I+%z#9mg;WwJW` zN{3NwchQ#DEfHzwMS?{I1NdCyfw)}77o*Xw5*tTwz_C6!ZXM~^zp3<5;Aqg}i56{k zrCy@xN<)@| zhdm3p^*OE3lMaa%a9{u8e1HLGU#XE38TL%)?EN}BDjkuq@S3)1$ma){6~Yph&ksgw z?>(nOb5cFFCpWonJxgdA^sKVwu`v#s`IHqyFj<2#y=dZ@&{@B8Bf}k|lSAqN$p=li zRHfuZoCk>-9qDn6VS`oscYNMg{W2vm~Sa~n!5 z(Kc#N;rLNU9{293=@Xj9)I%z{IObPXEA$nxMBaWo&0kf42)iEXcwFc0LcP+@%hp-3 zwe@L+=(VG2F%84KsV%os6M_h+x*-+hOz^F(;Z}Nf2UUa6T_U_#$rtL8@eiM~!5RP~ zd?i4e%J_RL-2kwhrB{!1OQUCl!mWa0H`X;ts0(`chU`>jdjiVNWy(7U_T7mqB~Vs~ zqyo1#V zf+|k!xn90*f7TP$&dKd$O+1A|{DvK}9>?N~ z7R<4wT0eGQCq!zkT(Gb6u*|oi7c~9%f*`BlO6e)8YLm6W{H|kzY_3!X(H%`+fNRcB z#mR0sC4e-2X<{QElP2$|o98(Du~1-*PgV`c*r})f(KN})Qrh3Tc374B5hfxS! zRU+A3Ab@RnVPusUEPgyfxRm|OBc({#s|2h8< z6^!RopFYMV+o`7Wc9KJ$eE&-8S#KNv<<|^VP3Di57B5oK)0I!O-;z~GcKy{oja`ai zz4hl917C$pg%^|gXtW)l|IFA&qi>38nW=VKp5xm;(W5qN0Bj80XH~~)e7_*JR@xQi zRH0gSl8-t^64Nt#p9q`m3Yu&(=)JAp4~a^(G*fw6TD!HUog$D{L~|(=sNIhwC8%Qa z<$feo1IZ!N<0c}0+O=xbD}m|^BkBlKi(5%^Uf?1ty^za?a(>YE#vJI&DPurafUiWxP}DsJ^siok>B z`F-2+U{K{|;lJizN<#Y$`&kYXC1W}HS8<9fX{|VH!{hw_UzY}|Wn;Zq4JYvh-FSpo zA$GJ6WA9+lhCUb=%E!}1Ox zvSe>CWB&KlQ_u6f|M&O%y`TSb#(nPZeVyxE=X|eoon_`m{6w4r=+%|glmQ3?093&b zK%53Vm3-}O06;n*0?0uGssOSO*56ne!UsTq$jJcUzC8f@Q%4KDlM-m{ zN1dN{vNW<^8e}Hr0SRq87f%-tI~P~Zi-N*{#1%D77|9}-e&91dApHP) z)JQZ?3R?;}^2ZA9N-%K-{z*+i!CYGxt*mxc=?4+`TMJiLM>0+TaB}u^*HyW~dCk~_ z6Fvfv0W1JDa0;Ndu=H@1*VevDvPshYVf!E1?$D3E1N{R3zWg7`|N1~}W$j@JlBWa< zT&z4Soj~jh0OS#tuI`=y04MR1@bPpdVQCOEx`Q1Au{H_Y{=`-!eCsC$>w-G^x(c8U z$zQaVb{1ec{27S(Z~aYf`#1cv510GaaT3~F=&U(&dy8q7mo3_(>DU;$3S@%#zliv_XLRFIp5MkgP3Gz z%F;st^eeyx08k1$Yc^`9qc{T^g#@^1x@tu)+5P( z*zvbhAoUY$3)V=c40Kmj#{L)Ks&Gt)*e6jf_7ju zo_6}Gpd4%$X5tAB=+C;aU>kd7wLkUK?A%pJa#G#5u8u!q6zm&p-Q7!<#2svloXy(V zfaF8aCb_JIyOPSE*a|R&SOC_53vdg}EdghM0B{1jfC_L0yt@MKV2KT24>*DnYp~QB zlvsmLzjOrtp`-ny{HOje4Nk!JN6kgBrajn#0!Jp`1=hC%RzQ1pzb$bB3gD9$D6<9r zy`7&uSo+hB3+yCJ7RJ|Kxk}Ir2sFK`%XxR_=ksw7g&m>+jL|E1Eg~;Rk!b81&gM zZ~gnWNHfF!wNf6j+r1us~38O*^|%hTEy z+*<%Z!Nt|j-QL#Dlks_P~v~ z3jjQ9E?)TY457IKu3evr#4T_QgU0~?A(luyctIo*UV`?=0iel|*aR?80#Rf+PzV=5 z#sGmbK!~jXxV1pYAwSZeh5-l}6h=+~r#wPM4Jwq=17r{=lne$XCnp^sAVFX`0AnCO zc3MQ9;<%0loXd^z!tK~}O71Hq%}lzz>pT~4x!*ZLb>bv5%c(PGdHK$r7ZtlCE^%2> zK~YIrMO95*Pv5}M2&89eWo=_?XYb(Q>E-R?>*pVO_g>ij@COlb@sAS{lm2*;{NiOs zW>$7iZeHo@vhs?`s_L3IEv;?s9dA3|_4N-74h?@A8J(V)otyu%u(bJXZJg9 zZ=b{q0ziM#0`s5D{)HC<$cqdHgTmk>UJx=L5^)9?`Dqb~WAZw13%BE37j9EBUWrXF zX+FYzQFoo`mU}PN2_DhuGaDpoKbZYz#P0kbG5byIFJ5EdHt>@b83aQ1BSA?y6b2z^?3gO?RD@h;OSo5^uDgGPdzF z)BLlEl=q`0<(5yf?T4obqEFnbw+l4>*rY7T?|rB$fws9il~K^Wbz;!7UPEC}&{Nal zGe+aR)B^$MRcFSGS6#;$0f(y{hyFnT$%N1yNHM5VKFu#GOuZe@=G= z`9AmVW3wlrcNFqYPJPL2gFzMTZX1NHC73A9?hW=)N{AgVcEb&AWKoF5+Puz+jF?Q2 zK}ufR+Ad0V6^qhIa0&9bIa#|GpR2q?1cr)A-|Lq(Fh{KhFODNxhN}H;i6!t{ElhaJ zxx+N3b@l@!Weaw z9CG~_)82%3h#Gd>_k6Om8r-2+PM%R)8!^J@bykI%fU)bfK5x5C1P-WuHR})uV!pa> zl*Z0<;Tw{f74JY{0DTKDjvh@dEb_Al)r4_H`Bxac3VAXdDr7iL& z?>fdw_DOY#xMl=IY}cRBnlF~@H{$*}xRk6u7oDlyt=^ji1R)2?5>P_bXX_@FuRC=+ zQf(7>TpO?Uz};>NH$L>NnEirKUszFjd(n)&su|Bmw(p6z-yS$9`})7dGqLCYO`MbF z$-Uv!LaS~Bk6}Me#7jvlXZ#{GWaC6+*0R6T$LIoirooiCW2R=NTDNBs&*|sC%(r5) z=AriwHE$KdGrS3>%S6{;4h4@KMiGSr79~#R_*G&z|ntww5vInT{Q%DS*Jas@!nQ z!}p#OSROi@cj(xwdRtF$cpUqs@e0Z%^^-~mw#2A4secW&AAMI$Z2~VgLsm`uta7AC zJ?hK{%bY0*)}$%~APnC(Y9D;_?wDKb{JVsdC}YdFS!3p!R%0q3p3I}S^Eb0Fm#z_z zEEfH}>F$Er1}+{)`}|^F$-b=GAJ|!#QCqdzx_K*mtZ}FY$?ncl!al?u{N(WXAycRH zakRoYofT){w>b{&Dkcxt{k?J@Lio7yv*-0cOS_re7=%68^B?NT(2W$yj4mk{xwXU8 zBYmSWMK=y*@>x`q`}mVY!8fn19^8Jrzp-k@U*e(96XjWypqVJ|RP11wdd@{mWxcZ# z`e~;qVz^B*Fx%;^9XfX&D{{#6PJ>o$RiA^)|1hB+)?1(_bLsS+@{bPUUv>R4cD-j8i}miLGCjoiBpUR0?{JHStBBMO`dbhx214*p)7 zgO9yLpdowTrZVdIS6$U5y8@h-(*^8~5d*@h2{BZhkKDYA$QG-!d#MByVC0bOHOW&V zXVfu0ub_%tMturxTIet@%f9c#qq%#YMB6;%CTp74(~B~wxl!1SFGR1H6L6T%m`T=y+Q+x*j^Rzo$aC8 zTIIT+f77eY-zNFK%Rmp@+@_JQ=nkY=?4ezGCFP!MR*0aGyoM4Zp!3fQLhSwfylOBd zl%O0CM}yx^LU-sQ_Q&Dc4WE-;?w45wMdvysLF&SxH&^7#GZNOl6(5bqK<3+L?JaWN zGu%)YiEyec)$n!-Yx!8N+Luv$b|vY_DBg#VAxjzj;qx&faCdn2et3Z>HLoR8-grsC z(@weW1dJ2C{TdGuxW#h|&ie?nY2JofHxmjwSI}m$J~_P*;T2%Nuz9+EaLuXgwh(z` z2KTBSc@yvV@Vm5W9LV*gwwmI$Z=)JBPTg(T$di4`pLqvT-#t6etKyJA1@<Qw%>b z=}Xsg$xs^?{YJGD<9060^vKh|As@hb^ZQK}Zi{%&dD`UeyTP_ z;Y#)G6VuKBlG^!WGY@)Gz4#6lL;OeNoUhT6?em)@S}a{+H{xH{=|;r`8N{Kr9`g2< zt@&T>4!!Knm2`+ym5s`$vngn#~bBUFYuaz1rLX!p_m-AJ7G{_{eI8kg|x2TAA+ zj>K#vQ?ps8sAAmJP zw?K9u4S$$<(x$Pv30z}$9&x^i-~;~CD~DZ0t35mG)!Q^0v5vey~%sZBw%beoqE6GO*9$9|=nivK+4} z9-hSU!STmtJ5ozmS0`Js_j0|8ag@~wnLua2%X~z&XWoVNN0Ab2bPbTXLzN4*vF0+; zqG_u5QTu>}r zy*YVM+%e~Gbei9`-u6AESbPiToD90bfvY16`B9+UOu6L@7k^~4TU=&P4J>J89S`6JaWoCtW%lqHKKN3~1M;t$1Myf6}| zLD(I>X`m?I7;b%kkjn6;a`%*X;@Z%6%$HW{Cxge&kFY@95b6Z0$lXBP#XyA#Ut877 z(g`8FhoKRBMu$g+r)*x~T=H=3`cgZZs-~^2UJ-+Sc=2j{{&quOhaGD@vgakMir%$+ z?v~X?>&6hhialweY>!22L}!~Un-^}?SG;MBlbERulI#|Q zu+f(1syxF5>|$_7vL0UwKDxf>hDY17-QRK@-0r@M7f<(f|73s2QBwA*67CagNhZ&M zhOI{NeUy1^JZhaTA<@LN=x_FfI)32Utq{o+L4LYrv%@5a1a#^8+7p{*IXtpQv{s>A z_Az8|iQYPiJ%6Cg*X{Odbn7rn#wgGt`=nT_&ndh;I4eXd=qx|ea);RBsG~0x>eQ@f z6&)hMpEecYwj{^SR61o-af=x+G^=ri=N5){h(ZJyb>zSe>K_+^*!S1sj@(-SkMyt2 zz7hfY25Dbx(@GcN>2w!!H>32b_-Le!J>{Z$3!8fOE888e#`FlhF{mACcOr75rbFNJ z`nX+5qVwF#QYKWWZ>t9#DXKtbl)-iNiSw0B6im2qB-eAqt z=Ll#p$H>y5z^emwzAeSwx7TR=;+uJN;!{;Dx*fJ_4PI6BPW8yHzO700(i=#BBw>v6LbN7J z*s&AheM`OF7Yj=FSZ}vf>jw&Y)J82Zvxp5eHe*)Rht=u^8RZ?$o~r8>RA%S#oiV(Q zZzHqfo2x{dY!jrWcTLbGn&p#<@CQ(w)!O zP!lMAe~#DI^K;_ps7%1J3$;l1`d9J0yUUo29Wz<%&^{3;In_Mhj zld5TAWnLNdpnS7<#SYCY7Dfs@ZN;?+EXS>R>A-)?oOa!dZ zINp1A0q&SJg`ksJ$ub5)U+9R0&uxiEgmem&XMgyvmaQZ*iH4`G9W3z+LfE*8mmWjv;!{SkaA*X z@+kfUZtp_Tnb z;ggl9l@V||rpL*wx3o>3oZ2uCl|}mIn;Wjb@%4VwygecLQAm>7(*5?ABr*e?v)ZZr z@z0VEqq2?5@;d8RtuX>lHo@FfkKVbvU zpM7%BZsO6=&Rx}Uo=x;cJ~uv#5+*sep~;om1IFNwM1UDPm7GKb*0rOFS6eA>GJsiVtr}!(qsB%eW)-Ni=dzeB>>{&*B`U^1t=3otLN_aDK@0Xa9#4roG9_aInHFNT<3KhH zi%yp|FF1;Fx5WXV&Y7m^EjdxN@Rq!Virs!JGwUC2t250-P<;NX_f^EMR4x1Zx#Y1`I-XY@ewAl0jAUe8v7i=CB=6nY5BUT|Dx2OSf-j$K}CMAFru^Lc>|@ z3N_A0qNkpTOsMh4)IHhEJl|}!=ld?Xd$}(~$O|hlu`~49d=5QiHB}v0-ca-D@P)G% zH8t-esm|$pnNG3%MR{iRjK?kn-7_uz0^OA)#5Yh8fo5%1u*a)M51hZ6d?}wjdU57# z<+P~`yI6jqEQ(^O#-41@DJ@L#+Edo(CtL})?oOr55xx@v*j3!?4b~Z-m8S)Ehtfme zr1k8lCc`Bc?%;)H@^>$E=Pf2Ll)~3)x)`W?DR1i5nwA<_z_z09qP+hPbP|&h+b^r+A&fFLUBe?JbuM%$lW?ZXanWp z;J%vdrP52MRzx1Z+PIXQm((-6R&byBIVbkcRU%NTzh(Yza@FjB4DU^N>~+K?P}9Z> zOY3*fsZKNVrA#gi|6=+w#%CA%IJKs|F0V?QJ&K(b0n?xbe>(~nJY?fZ!*SR+T!Lfp!=*BYC`WDf32*^=U6d8l!c&7w}AE~ zIAp{`Hw_$|WxKCL7gabGS!IU){_=FALc~C1t0X_+EcGD{iN_HzALlBz^NNp(vBCwS zZx{=FVNLgR`9 zyj7%m=9svISo9Ss-b8c#;jOD$teUz(eQ_-+y-$x2K zQ>FDw=DB2ebLMz$8WjMzNz zIZz|b%CTsN)q)pqB05Sd+Tj*vN_D26tLR50__h^L4^SVhH(LEpQ%P^R9d%Nl-7Te5oL6Hl4-%yV|g2MY^# z3KES zjkzyp(%;~`EOqPf4D{6kN5bCltP@6OU2{9xC|s`e`6bTGeo8b)pHuPX`v_^7E?;vN z$1&QcE)#J>bX_LH+i{Ja*c`SwuFjq6uWOgz~> zh-5O`{n`X&Q3zRdrMn*575HtoIJ`zHvU)qLCee!L&DC2X&n)9idv=STItL4lX-F>Z z2fdrP{?=OwWBIf?rItJb!W|a?WYrUaY4H`kjn})k2hscNe4kwV-XDx3;>37;zi&nrOV8xRyqQ|MtYIr<^8TQ&JWj*8qSTCGVJ3fmPuk2; zvCnk#^Y>tlpy0LQ+(~S+M8m1CD0*352lFzHY?j0Jbwb%8`}#`9n%UQjOlDVRxZ8Cn z7)`?#&E^4o`GMZ`$SRiv3@7*=7 z0YN>(zD&PU%5jt0pKWPAEV$ZOJ71usxDb2<+kCFk5*31?uanvEXsQt`5sJWH-rd5? z$e0?}H#F8rMp2CF`SFy-N?dzzEg|gFraGX;yX_reuAk{8Xn>X5rLSKJ4w}F=3t=s( ziNHvf%ZQN9dR?XL(IAI~R#(&U$?Na^>~kkB`_xp_+0$&OB}$BbYCbQotK`~9)i@P{ zC_%hIG2vWhPCR(IydV7_5Lwt(Y=47$*z5iBsvMe(G3*>qoLR98Gfx3)VBNDAwAg-- z5<)-IbI&;*74<_D&7S%@Sm( zee@r{n*M{_=8y|5_C5Oz_HHAsEJdJ9-ytKOr;mSIh|X?kW>~AA-^fwttQs#b|A!A6 zQYHK!)NZMD`JZ8OO{c8n%fF;=uOyX0dI56nzd4Zrdd5CfUW^be)$dV01=Z=@@Xf-Z z>zn5@O5iN)*c8C6((vVTi6Rx9{uXHLjVGd~!zc?_YtipQq&4*VIzK97J_IUF*9s_q z#8Bh7swz`Xol8rB#lC&mY^40wTBez~I74WAU4EuYQ$u|&ff0iLemIC)S4q7$$#AB6 z!?wvZ9Dlk%t;Vo#;%c(=n%|zb_38s6kQESvbv4==-00YK!gU`=VLIe+<>?dlna>K# z*EyUX4oS7RKT+=f?#}F^V?KE)^JQ44&JNQY$E9`neQE0#l1@O?wCVSGid`)cfwn@}yrUu8VzG88+ zrKpZ)r%?@e5x1tiP4M!#g#*^Z9wP91d=u3Q1}inpQLsEKx_oI(3Lz=%ZQCbzfAm!% zN2>(lw3^FkP95`-*+s>I3w6;BS?iDL^Mam87kv4ABCi;pQxrQz(J(`}2Yx5eXpC;8 zzaL(w1jW7)N_!XYKr?l(whAHYofojS%=;oBR!y(=)d0E_JC&OH`t&+HG`j8EiLuqe zoiSHY+?;vxP;>Rs(BACn#_^8a;+_%DHs1MS!+2E&&IjBE2HJUf02Lhkhctlp&g)4v zg#izI+}kF?|$K5@Yzh4<;mkUbPHzXifbzs`D?1Tg)xO{MQkzaKW(^#_p4S?W=O)=A(`B5I<_wg!RlJmuwQagMTX4ds zrG183u8_-J7Zr4(qBH#|o}?#oM=W}F(J?m>kPWYT^(`ZS1%6TOw3|lewwab`MT!0D zOR>p|oc(eD!%&Fu%JxLs&0w)!labXas-cJuc8ogmW*tP1!PIn>&9F{nfqJk1R^+Qf znA}UU5FUfh+}u3ja|3@rnE%2M;=o^n(cbYLl0$tzYcKP-d1H8b(|EV}U>4LcsO?Pt*qGZgDelg>$_ z;}{T48<#Pm`p?-eBJT}~@_l(Y{e-Ev z*~pN^5T0|>osxiDLK0YWbZ|yY*q5}*qX0f0Hw`ZMBZQ$OJt;Ty48!A*_j?31l#Qqx~5r)Bi6Vh&=d9pXE_TvK44pT~qp zcHF!E%(-)sLKCZ&dZd98r#F?<(j_(B7&<+Iv7n?ALDW^HR44k$n2n`cgh-GzwAA#D z!GVLB>h~#Z+hfUUkQw(So}keeqY8*=0`ik}@8cbcyodD1n?##7GkVn|MoflkSlNKa zO#kbW(BmoD8%1I7TUukQY(HtkQ$~DUt(@5ojO?>y)nJX6Ny$MG=$oF!#p35b3Ma$Ku6$O-EOOnUHg1BR4%vN=$NO;E093q7KMdOu09+Dri^~I2q8=VPwiS@&t`kr5Sv6$(j*^==`l^H(h!dTbI z9-Hd?6#A`%;xxf+ZGWNp>#OaN!%;h5`JivCd(q!D6>CmUfD6p0`CdRe9gphFIvbHe z=$GR#cS&b^*s@iW)gm`%?Y2|2JEqjUr%#vZxhu&B3#{vbb7wC~M+wcE)jzr`d8;N; z;EWLq;+|JxjSDo2P92zcDl=f4MaY}dFMfqj;FnA8YeCEH1VRqVAnhHQbaiqZDd+o^ z8XEs7dTY$bj_RJ*GBse&fhI+wp=n(XE!NAXNN2c1%IR&EeJUWE5#q~~$!I)VS*RLg z`7PMMUhmbC99fYs`+0vkfSIxE*UI%@-66!G|38EIDC*DJHawv-1N(YUPfrE5nVRCSv6N^3^6K^PX|!BN*;Q`H+;cIp ze;T}q*Ywn}pW=8@c#WT+1lX9^&shSe7CFnPD3pvN*z5DvnO}D<;TOruTthB~8gbwD zo?AFu#I>-b+e3~x1HNnSo>o7N_ODd}3>f$h5nKBMcP?({=A==;*uk=8^nV!k#Nq$H z9wvGE995`>5^%*5Wm2@ByVQ0ggOj5S61O|&jn8{6chpH3n9`%l2hVYLhw}U*?8*V~ z|5;E8&df2pS$pTc$+3_k>Q&6v?e4xZn5vXs6EqW$`!k$S>iWP=t{nhn`|pm4|3w*u HIP$*$@IK#G From ac358ab0d86e463417315ea32024f87ce2310d1a Mon Sep 17 00:00:00 2001 From: mahula Date: Mon, 15 May 2023 17:32:42 +0200 Subject: [PATCH 042/123] change unit tests for email variants --- backend/src/emails/sendEmailVariants.test.ts | 440 ++++++++++++++----- 1 file changed, 335 insertions(+), 105 deletions(-) diff --git a/backend/src/emails/sendEmailVariants.test.ts b/backend/src/emails/sendEmailVariants.test.ts index 28e441b5b..e3655a405 100644 --- a/backend/src/emails/sendEmailVariants.test.ts +++ b/backend/src/emails/sendEmailVariants.test.ts @@ -31,6 +31,11 @@ let testEnv: { con: Connection } +// TODO +// when https://gdd.gradido.net/img/gradido-email-header.jpg is on production, +// replace this URL by https://gdd.gradido.net/img/brand/gradido-email-header.png +const headerImageURL = 'https://cdn.discordapp.com/attachments/913740067208564736/1107629904306110595/Kopf-Grafik.png' + beforeAll(async () => { testEnv = await testEnvironment(logger, localization) con = testEnv.con @@ -108,10 +113,7 @@ describe('sendEmailVariants', () => { it('has correct header', () => { expect(result.originalMessage.html).toContain( - 'src="https://gdd.gradido.net/img/brand/gradido-logo.png"', - ) - expect(result.originalMessage.html).toContain( - 'src="https://gdd.gradido.net/img/template/Blaetter.png"', + `src="${headerImageURL}"`, ) }) @@ -231,10 +233,7 @@ describe('sendEmailVariants', () => { it('has correct header', () => { expect(result.originalMessage.html).toContain( - 'src="https://gdd.gradido.net/img/brand/gradido-logo.png"', - ) - expect(result.originalMessage.html).toContain( - 'src="https://gdd.gradido.net/img/template/Blaetter.png"', + `src="${headerImageURL}"`, ) }) @@ -272,7 +271,7 @@ describe('sendEmailVariants', () => { 'If the validity of the link has already expired, you can have a new link sent to you here.' ) expect(result.originalMessage.html).toContain('>New link') - expect(result.originalMessage.html).toContain('href="http://localhost/forgot-password"') + expect(result.originalMessage.html).toContain(`href="${CONFIG.EMAIL_LINK_FORGOTPASSWORD}"`) }) it('has correct greating formula', () => { @@ -359,10 +358,7 @@ describe('sendEmailVariants', () => { it('has correct header', () => { expect(result.originalMessage.html).toContain( - 'src="https://gdd.gradido.net/img/brand/gradido-logo.png"', - ) - expect(result.originalMessage.html).toContain( - 'src="https://gdd.gradido.net/img/template/Blaetter.png"', + `src="${headerImageURL}"`, ) }) @@ -499,10 +495,7 @@ describe('sendEmailVariants', () => { it('has correct header', () => { expect(result.originalMessage.html).toContain( - 'src="https://gdd.gradido.net/img/brand/gradido-logo.png"', - ) - expect(result.originalMessage.html).toContain( - 'src="https://gdd.gradido.net/img/template/Blaetter.png"', + `src="${headerImageURL}"`, ) }) @@ -603,7 +596,9 @@ describe('sendEmailVariants', () => { }, }) }) + }) + describe('result', () => { it('has expected result', () => { expect(result).toMatchObject({ envelope: { @@ -617,38 +612,80 @@ describe('sendEmailVariants', () => { attachments: [], subject: 'Gradido: Your common good contribution was rejected', html: expect.any(String), - text: expect.stringContaining('GRADIDO: YOUR COMMON GOOD CONTRIBUTION WAS REJECTED'), + text: expect.stringContaining('YOUR COMMON GOOD CONTRIBUTION WAS REJECTED'), }), }) + }) + + it('has correct header', () => { + expect(result.originalMessage.html).toContain( + `src="${headerImageURL}"`, + ) + }) + + it('has correct doctype and language set', () => { expect(result.originalMessage.html).toContain('') - expect(result.originalMessage.html).toContain('') + expect(result.originalMessage.html).toContain(' { expect(result.originalMessage.html).toContain( - 'Gradido: Your common good contribution was rejected', + '>Your common good contribution was rejected', + ) + expect(result.originalMessage.html).toContain('Hello Peter Lustig,') + expect(result.originalMessage.html).toContain( + 'Your common good contribution “My contribution.” was rejected by Bibi Bloxberg.', + ) + }) + + it('has correct CTA block', () => { + expect(result.originalMessage.html).toContain('>Contribution details') + expect(result.originalMessage.html).toContain( + 'To see your common good contributions and related messages, go to the “Creation” menu in your Gradido account and click on the “My contributions” tab.', ) expect(result.originalMessage.html).toContain( - '>Gradido: Your common good contribution was rejected', + 'To account') + expect(result.originalMessage.html).toContain('Please do not reply to this email.') + }) + + it('has correct greating formula', () => { + expect(result.originalMessage.html).toContain('Kind regards,your Gradido team') + }) + + it('has correct footer', () => { + expect(result.originalMessage.html).toContain('href="https://t.me/GradidoGruppe"') + expect(result.originalMessage.html).toContain('href="https://www.youtube.com/c/GradidoNet"') + expect(result.originalMessage.html).toContain('href="https://twitter.com/gradido"') expect(result.originalMessage.html).toContain( - 'Your public good contribution “My contribution.” was rejected by Bibi Bloxberg.', + 'href="https://www.facebook.com/groups/Gradido/"', + ) + expect(result.originalMessage.html).toContain('
${CONFIG.EMAIL_LINK_OVERVIEW}`, - ) - expect(result.originalMessage.html).toContain('Please do not reply to this email!') - expect(result.originalMessage.html).toContain('Kind regards,
your Gradido team') - expect(result.originalMessage.html).toContain('—————') - expect(result.originalMessage.html).toContain( - '
Gradido-Akademie Logo

Gradido-Akademie
Institut für Wirtschaftsbionik
Pfarrweg 2
74653 Künzelsau
Deutschland
support@supportmail.com
http://localhost/', + ' { + describe('sendContributionDeletedEmail', () => { beforeAll(async () => { result = await sendContributionDeletedEmail({ firstName: 'Peter', @@ -681,8 +718,10 @@ describe('sendEmailVariants', () => { }, }) }) - - it('has expected result', () => { + }) + + describe('result', () => { + it('is the expected object', () => { expect(result).toMatchObject({ envelope: { from: 'info@gradido.net', @@ -695,38 +734,85 @@ describe('sendEmailVariants', () => { attachments: [], subject: 'Gradido: Your common good contribution was deleted', html: expect.any(String), - text: expect.stringContaining('GRADIDO: YOUR COMMON GOOD CONTRIBUTION WAS DELETED'), + text: expect.stringContaining('YOUR COMMON GOOD CONTRIBUTION WAS DELETED'), }), }) - expect(result.originalMessage.html).toContain('') - expect(result.originalMessage.html).toContain('') + }) + + it('has correct header', () => { expect(result.originalMessage.html).toContain( - 'Gradido: Your common good contribution was deleted', - ) - expect(result.originalMessage.html).toContain( - '>Gradido: Your common good contribution was deleted', - ) - expect(result.originalMessage.html).toContain('Hello Peter Lustig') - expect(result.originalMessage.html).toContain( - 'Your public good contribution “My contribution.” was deleted by Bibi Bloxberg.', - ) - expect(result.originalMessage.html).toContain( - 'To see your common good contributions and related messages, go to the “Creation” menu in your Gradido account and click on the “My contributions” tab!', - ) - expect(result.originalMessage.html).toContain( - `Link to your account: ${CONFIG.EMAIL_LINK_OVERVIEW}`, - ) - expect(result.originalMessage.html).toContain('Please do not reply to this email!') - expect(result.originalMessage.html).toContain('Kind regards,
your Gradido team') - expect(result.originalMessage.html).toContain('—————') - expect(result.originalMessage.html).toContain( - '
Gradido-Akademie Logo

Gradido-Akademie
Institut für Wirtschaftsbionik
Pfarrweg 2
74653 Künzelsau
Deutschland
support@supportmail.com
http://localhost/', + `src="${headerImageURL}"`, ) }) + + it('has correct doctype and language set', () => { + expect(result.originalMessage.html).toContain('') + expect(result.originalMessage.html).toContain(' { + expect(result.originalMessage.html).toContain( + '>Your common good contribution was deleted', + ) + expect(result.originalMessage.html).toContain('Hello Peter Lustig,') + expect(result.originalMessage.html).toContain( + 'Your common good contribution “My contribution.” was deleted by Bibi Bloxberg.', + ) + }) + + it('has correct CTA block', () => { + expect(result.originalMessage.html).toContain('>Contribution details') + expect(result.originalMessage.html).toContain( + 'To see your common good contributions and related messages, go to the “Creation” menu in your Gradido account and click on the “My contributions” tab.', + ) + expect(result.originalMessage.html).toContain( + 'href="https://gdd.gradido.net/community/contributions', + ) + expect(result.originalMessage.html).toContain('>To account') + expect(result.originalMessage.html).toContain('Or copy the link into your browser window.') + expect(result.originalMessage.html).toContain( + '>https://gdd.gradido.net/community/contributions', + ) + expect(result.originalMessage.html).toContain('Please do not reply to this email.') + }) + + it('has correct greating formula', () => { + expect(result.originalMessage.html).toContain('Kind regards,your Gradido team') + }) + + it('has correct footer', () => { + expect(result.originalMessage.html).toContain('href="https://t.me/GradidoGruppe"') + expect(result.originalMessage.html).toContain('href="https://www.youtube.com/c/GradidoNet"') + expect(result.originalMessage.html).toContain('href="https://twitter.com/gradido"') + expect(result.originalMessage.html).toContain( + 'href="https://www.facebook.com/groups/Gradido/"', + ) + expect(result.originalMessage.html).toContain('
{ + describe('sendResetPasswordEmail', () => { beforeAll(async () => { result = await sendResetPasswordEmail({ firstName: 'Peter', @@ -757,8 +843,10 @@ describe('sendEmailVariants', () => { }, }) }) + }) - it('has expected result', () => { + describe('result', () => { + it('is the expected object', () => { expect(result).toMatchObject({ envelope: { from: 'info@gradido.net', @@ -771,40 +859,90 @@ describe('sendEmailVariants', () => { attachments: [], subject: 'Gradido: Reset password', html: expect.any(String), - text: expect.stringContaining('GRADIDO: RESET PASSWORD'), + text: expect.stringContaining('RESET PASSWORD'), }), }) + }) + + it('has correct header', () => { + expect(result.originalMessage.html).toContain( + `src="${headerImageURL}"`, + ) + }) + + it('has correct doctype and language set', () => { expect(result.originalMessage.html).toContain('') - expect(result.originalMessage.html).toContain('') - expect(result.originalMessage.html).toContain('Gradido: Reset password') - expect(result.originalMessage.html).toContain('>Gradido: Reset password') - expect(result.originalMessage.html).toContain('Hello Peter Lustig') + expect(result.originalMessage.html).toContain(' { + expect(result.originalMessage.html).toContain('>Reset password') + expect(result.originalMessage.html).toContain('Hello Peter Lustig,') expect(result.originalMessage.html).toContain( 'You, or someone else, requested a password reset for this account.', ) - expect(result.originalMessage.html).toContain('If it was you, please click on the link:') + }) + + it('has correct CTA block', () => { + expect(result.originalMessage.html).toContain('>Reset password') expect(result.originalMessage.html).toContain( - 'http://localhost/reset-password/3762660021544901417', + 'If it was you, please click here.', ) expect(result.originalMessage.html).toContain( - 'or copy the link above into your browser window.', + 'reset') + expect(result.originalMessage.html).toContain('Or copy the link into your browser window.') + expect(result.originalMessage.html).toContain( + 'http://localhost/reset-password/3762660021544901417', + ) + expect(result.originalMessage.html).toContain('>Request new valid link') + expect(result.originalMessage.html).toContain( + 'The link has a validity of 23 hours and 30 minutes.' ) expect(result.originalMessage.html).toContain( - 'The link has a validity of 23 hours and 30 minutes. If the validity of the link has already expired, you can have a new link sent to you here:', + 'If the validity of the link has already expired, you can have a new link sent to you here.' + ) + expect(result.originalMessage.html).toContain('>New link') + expect(result.originalMessage.html).toContain(`href="${CONFIG.EMAIL_LINK_FORGOTPASSWORD}"`) + }) + + it('has correct greating formula', () => { + expect(result.originalMessage.html).toContain('Kind regards,your Gradido team') + }) + + it('has correct footer', () => { + expect(result.originalMessage.html).toContain('href="https://t.me/GradidoGruppe"') + expect(result.originalMessage.html).toContain('href="https://www.youtube.com/c/GradidoNet"') + expect(result.originalMessage.html).toContain('href="https://twitter.com/gradido"') + expect(result.originalMessage.html).toContain( + 'href="https://www.facebook.com/groups/Gradido/"', + ) + expect(result.originalMessage.html).toContain('
${CONFIG.EMAIL_LINK_FORGOTPASSWORD}`, - ) - expect(result.originalMessage.html).toContain('Kind regards,
your Gradido team') - expect(result.originalMessage.html).toContain('—————') - expect(result.originalMessage.html).toContain( - '
Gradido-Akademie Logo

Gradido-Akademie
Institut für Wirtschaftsbionik
Pfarrweg 2
74653 Künzelsau
Deutschland
support@supportmail.com
http://localhost/', + ' { + describe('sendTransactionLinkRedeemedEmail', () => { beforeAll(async () => { result = await sendTransactionLinkRedeemedEmail({ firstName: 'Peter', @@ -841,8 +979,10 @@ describe('sendEmailVariants', () => { }, }) }) + }) - it('has expected result', () => { + describe('result', () => { + it('is the expected object', () => { expect(result).toMatchObject({ envelope: { from: 'info@gradido.net', @@ -858,34 +998,79 @@ describe('sendEmailVariants', () => { text: expect.stringContaining('BIBI BLOXBERG HAS REDEEMED YOUR GRADIDO LINK'), }), }) + }) + + it('has correct header', () => { + expect(result.originalMessage.html).toContain( + `src="${headerImageURL}"`, + ) + }) + + it('has correct doctype and language set', () => { expect(result.originalMessage.html).toContain('') - expect(result.originalMessage.html).toContain('') + expect(result.originalMessage.html).toContain(' { expect(result.originalMessage.html).toContain( - 'Gradido: Bibi Bloxberg has redeemed your Gradido link', + '>Bibi Bloxberg has redeemed your Gradido link', ) - expect(result.originalMessage.html).toContain( - '>Gradido: Bibi Bloxberg has redeemed your Gradido link', - ) - expect(result.originalMessage.html).toContain('Hello Peter Lustig') + expect(result.originalMessage.html).toContain('Hello Peter Lustig,') expect(result.originalMessage.html).toContain( 'Bibi Bloxberg (bibi@bloxberg.de) has just redeemed your link.', ) + }) + + it('has correct CTA block', () => { + expect(result.originalMessage.html).toContain('>Transaction details') expect(result.originalMessage.html).toContain('Amount: 17.65 GDD') expect(result.originalMessage.html).toContain('Message: You deserve it! 🙏🏼') expect(result.originalMessage.html).toContain( - `You can find transaction details in your Gradido account: ${CONFIG.EMAIL_LINK_OVERVIEW}`, + 'You can find transaction details in your Gradido account.', ) - expect(result.originalMessage.html).toContain('Please do not reply to this email!') - expect(result.originalMessage.html).toContain('Kind regards,
your Gradido team') - expect(result.originalMessage.html).toContain('—————') expect(result.originalMessage.html).toContain( - '
Gradido-Akademie Logo

Gradido-Akademie
Institut für Wirtschaftsbionik
Pfarrweg 2
74653 Künzelsau
Deutschland
support@supportmail.com
http://localhost/', + 'To account') + expect(result.originalMessage.html).toContain('Please do not reply to this email.') + }) + + it('has correct greating formula', () => { + expect(result.originalMessage.html).toContain('Kind regards,your Gradido team') + }) + + it('has correct footer', () => { + expect(result.originalMessage.html).toContain('href="https://t.me/GradidoGruppe"') + expect(result.originalMessage.html).toContain('href="https://www.youtube.com/c/GradidoNet"') + expect(result.originalMessage.html).toContain('href="https://twitter.com/gradido"') + expect(result.originalMessage.html).toContain( + 'href="https://www.facebook.com/groups/Gradido/"', + ) + expect(result.originalMessage.html).toContain('
{ + describe('sendTransactionReceivedEmail', () => { beforeAll(async () => { result = await sendTransactionReceivedEmail({ firstName: 'Peter', @@ -920,8 +1105,10 @@ describe('sendEmailVariants', () => { }, }) }) + }) - it('has expected result', () => { + describe('result', () => { + it('is the expected object', () => { expect(result).toMatchObject({ envelope: { from: 'info@gradido.net', @@ -934,29 +1121,72 @@ describe('sendEmailVariants', () => { attachments: [], subject: 'Gradido: Bibi Bloxberg has sent you 37.40 Gradido', html: expect.any(String), - text: expect.stringContaining('GRADIDO: BIBI BLOXBERG HAS SENT YOU 37.40 GRADIDO'), + text: expect.stringContaining('BIBI BLOXBERG HAS SENT YOU 37.40 GRADIDO'), }), }) + }) + + it('has correct header', () => { + expect(result.originalMessage.html).toContain( + `src="${headerImageURL}"`, + ) + }) + + it('has correct doctype and language set', () => { expect(result.originalMessage.html).toContain('') - expect(result.originalMessage.html).toContain('') - expect(result.originalMessage.html).toContain( - 'Gradido: Bibi Bloxberg has sent you 37.40 Gradido', - ) - expect(result.originalMessage.html).toContain( - '>Gradido: Bibi Bloxberg has sent you 37.40 Gradido', - ) - expect(result.originalMessage.html).toContain('Hello Peter Lustig') + expect(result.originalMessage.html).toContain(' { + expect(result.originalMessage.html).toContain('>Bibi Bloxberg has sent you 37.40 Gradido') + expect(result.originalMessage.html).toContain('Hello Peter Lustig,') expect(result.originalMessage.html).toContain( 'You have just received 37.40 GDD from Bibi Bloxberg (bibi@bloxberg.de).', ) + }) + + it('has correct CTA block', () => { + expect(result.originalMessage.html).toContain('>Transaction details') expect(result.originalMessage.html).toContain( - `You can find transaction details in your Gradido account: ${CONFIG.EMAIL_LINK_OVERVIEW}`, + 'You can find transaction details in your Gradido account.', ) - expect(result.originalMessage.html).toContain('Please do not reply to this email!') - expect(result.originalMessage.html).toContain('Kind regards,
your Gradido team') - expect(result.originalMessage.html).toContain('—————') expect(result.originalMessage.html).toContain( - '
Gradido-Akademie Logo

Gradido-Akademie
Institut für Wirtschaftsbionik
Pfarrweg 2
74653 Künzelsau
Deutschland
support@supportmail.com
http://localhost/', + 'To account') + expect(result.originalMessage.html).toContain('Please do not reply to this email.') + }) + + it('has correct greating formula', () => { + expect(result.originalMessage.html).toContain('Kind regards,your Gradido team') + }) + + it('has correct footer', () => { + expect(result.originalMessage.html).toContain('href="https://t.me/GradidoGruppe"') + expect(result.originalMessage.html).toContain('href="https://www.youtube.com/c/GradidoNet"') + expect(result.originalMessage.html).toContain('href="https://twitter.com/gradido"') + expect(result.originalMessage.html).toContain( + 'href="https://www.facebook.com/groups/Gradido/"', + ) + expect(result.originalMessage.html).toContain('
Date: Mon, 15 May 2023 17:50:53 +0200 Subject: [PATCH 043/123] fix css for header image --- backend/src/emails/templates/includes/webflow.css | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/backend/src/emails/templates/includes/webflow.css b/backend/src/emails/templates/includes/webflow.css index 7ce330923..2b0dd4435 100644 --- a/backend/src/emails/templates/includes/webflow.css +++ b/backend/src/emails/templates/includes/webflow.css @@ -27,18 +27,8 @@ .head-logo { position: absolute; - /* width: 130px; */ - /* margin-top: 36px; */ - max-width: 680px; - /* top: -11px; */ - } - - .head-image { - position: absolute; - /* top: -11px; */ - left: 40%; - width: 400 px; - max-width: 64%; + width:600px; + max-width:100% } .wrapper_head { From 69e58def28ca1d428806d64abf5a7810f67daf89 Mon Sep 17 00:00:00 2001 From: mahula Date: Mon, 15 May 2023 20:44:37 +0200 Subject: [PATCH 044/123] fix send email translated unit tests --- backend/src/emails/sendEmailTranslated.test.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/backend/src/emails/sendEmailTranslated.test.ts b/backend/src/emails/sendEmailTranslated.test.ts index 3f1dd1061..21af9bb22 100644 --- a/backend/src/emails/sendEmailTranslated.test.ts +++ b/backend/src/emails/sendEmailTranslated.test.ts @@ -94,11 +94,11 @@ describe('sendEmailTranslated', () => { originalMessage: expect.objectContaining({ to: 'receiver@mail.org', cc: 'support@gradido.net', - from: 'Gradido (do not answer) ', + from: 'Gradido (emails.general.doNotAnswer) ', attachments: [], subject: 'Gradido: Try To Register Again With Your Email', - html: expect.stringContaining('Gradido: Try To Register Again With Your Email'), - text: expect.stringContaining('GRADIDO: TRY TO REGISTER AGAIN WITH YOUR EMAIL'), + html: expect.stringContaining('Try To Register Again With Your Email'), + text: expect.stringContaining('TRY TO REGISTER AGAIN WITH YOUR EMAIL'), }), }) }) @@ -142,11 +142,11 @@ describe('sendEmailTranslated', () => { originalMessage: expect.objectContaining({ to: CONFIG.EMAIL_TEST_RECEIVER, cc: 'support@gradido.net', - from: `Gradido (do not answer) <${CONFIG.EMAIL_SENDER}>`, + from: `Gradido (emails.general.doNotAnswer) <${CONFIG.EMAIL_SENDER}>`, attachments: [], subject: 'Gradido: Try To Register Again With Your Email', - html: expect.stringContaining('Gradido: Try To Register Again With Your Email'), - text: expect.stringContaining('GRADIDO: TRY TO REGISTER AGAIN WITH YOUR EMAIL'), + html: expect.stringContaining('Try To Register Again With Your Email'), + text: expect.stringContaining('TRY TO REGISTER AGAIN WITH YOUR EMAIL'), }), }) }) From b12cc3f57d407ec748d0fd243215a3464ccc4b39 Mon Sep 17 00:00:00 2001 From: mahula Date: Mon, 15 May 2023 21:40:57 +0200 Subject: [PATCH 045/123] set support email in email template tests --- backend/src/emails/sendEmailVariants.test.ts | 96 +++++++++----------- 1 file changed, 41 insertions(+), 55 deletions(-) diff --git a/backend/src/emails/sendEmailVariants.test.ts b/backend/src/emails/sendEmailVariants.test.ts index e3655a405..d8b60279a 100644 --- a/backend/src/emails/sendEmailVariants.test.ts +++ b/backend/src/emails/sendEmailVariants.test.ts @@ -34,7 +34,8 @@ let testEnv: { // TODO // when https://gdd.gradido.net/img/gradido-email-header.jpg is on production, // replace this URL by https://gdd.gradido.net/img/brand/gradido-email-header.png -const headerImageURL = 'https://cdn.discordapp.com/attachments/913740067208564736/1107629904306110595/Kopf-Grafik.png' +const headerImageURL = + 'https://cdn.discordapp.com/attachments/913740067208564736/1107629904306110595/Kopf-Grafik.png' beforeAll(async () => { testEnv = await testEnvironment(logger, localization) @@ -85,7 +86,7 @@ describe('sendEmailVariants', () => { senderLastName: 'Bloxberg', contributionMemo: 'My contribution.', overviewURL: CONFIG.EMAIL_LINK_OVERVIEW, - supportEmail: CONFIG.COMMUNITY_SUPPORT_MAIL, + supportEmail: 'support@gradido.net', communityURL: CONFIG.COMMUNITY_URL, }, }) @@ -112,9 +113,7 @@ describe('sendEmailVariants', () => { }) it('has correct header', () => { - expect(result.originalMessage.html).toContain( - `src="${headerImageURL}"`, - ) + expect(result.originalMessage.html).toContain(`src="${headerImageURL}"`) }) it('has correct doctype and language set', () => { @@ -232,9 +231,7 @@ describe('sendEmailVariants', () => { }) it('has correct header', () => { - expect(result.originalMessage.html).toContain( - `src="${headerImageURL}"`, - ) + expect(result.originalMessage.html).toContain(`src="${headerImageURL}"`) }) it('has correct doctype and language set', () => { @@ -265,10 +262,10 @@ describe('sendEmailVariants', () => { ) expect(result.originalMessage.html).toContain('>Request new valid link') expect(result.originalMessage.html).toContain( - 'The link has a validity of 23 hours and 30 minutes.' + 'The link has a validity of 23 hours and 30 minutes.', ) expect(result.originalMessage.html).toContain( - 'If the validity of the link has already expired, you can have a new link sent to you here.' + 'If the validity of the link has already expired, you can have a new link sent to you here.', ) expect(result.originalMessage.html).toContain('>New link') expect(result.originalMessage.html).toContain(`href="${CONFIG.EMAIL_LINK_FORGOTPASSWORD}"`) @@ -357,11 +354,9 @@ describe('sendEmailVariants', () => { }) it('has correct header', () => { - expect(result.originalMessage.html).toContain( - `src="${headerImageURL}"`, - ) + expect(result.originalMessage.html).toContain(`src="${headerImageURL}"`) }) - + it('has correct doctype and language set', () => { expect(result.originalMessage.html).toContain('') expect(result.originalMessage.html).toContain(' { 'However, an account already exists for your email address.', ) }) - + it('has correct CTA block', () => { expect(result.originalMessage.html).toContain('>Reset password') expect(result.originalMessage.html).toContain( @@ -389,12 +384,14 @@ describe('sendEmailVariants', () => { `reset') - expect(result.originalMessage.html).toContain('Or copy the link into your browser window.') expect(result.originalMessage.html).toContain( - `>${CONFIG.EMAIL_LINK_FORGOTPASSWORD}`, + 'Or copy the link into your browser window.', ) + expect(result.originalMessage.html).toContain(`>${CONFIG.EMAIL_LINK_FORGOTPASSWORD}`) expect(result.originalMessage.html).toContain('>Contact support') - expect(result.originalMessage.html).toContain('If you did not try to register again, please contact our support:') + expect(result.originalMessage.html).toContain( + 'If you did not try to register again, please contact our support:', + ) expect(result.originalMessage.html).toContain('href="mailto:support@gradido.net"') expect(result.originalMessage.html).toContain('>support@gradido.net') }) @@ -403,10 +400,12 @@ describe('sendEmailVariants', () => { expect(result.originalMessage.html).toContain('Kind regards,your Gradido team') }) - + it('has correct footer', () => { expect(result.originalMessage.html).toContain('href="https://t.me/GradidoGruppe"') - expect(result.originalMessage.html).toContain('href="https://www.youtube.com/c/GradidoNet"') + expect(result.originalMessage.html).toContain( + 'href="https://www.youtube.com/c/GradidoNet"', + ) expect(result.originalMessage.html).toContain('href="https://twitter.com/gradido"') expect(result.originalMessage.html).toContain( 'href="https://www.facebook.com/groups/Gradido/"', @@ -486,17 +485,13 @@ describe('sendEmailVariants', () => { attachments: [], subject: 'Gradido: Your contribution to the common good was confirmed', html: expect.any(String), - text: expect.stringContaining( - 'YOUR CONTRIBUTION TO THE COMMON GOOD WAS CONFIRMED', - ), + text: expect.stringContaining('YOUR CONTRIBUTION TO THE COMMON GOOD WAS CONFIRMED'), }), }) }) it('has correct header', () => { - expect(result.originalMessage.html).toContain( - `src="${headerImageURL}"`, - ) + expect(result.originalMessage.html).toContain(`src="${headerImageURL}"`) }) it('has correct doctype and language set', () => { @@ -505,7 +500,9 @@ describe('sendEmailVariants', () => { }) it('has correct heading, salutation, and text', () => { - expect(result.originalMessage.html).toContain('>Your contribution to the common good was confirmed') + expect(result.originalMessage.html).toContain( + '>Your contribution to the common good was confirmed', + ) expect(result.originalMessage.html).toContain('Hello Peter Lustig,') expect(result.originalMessage.html).toContain( 'Your common good contribution “My contribution.” has just been approved by Bibi Bloxberg. Your Gradido account has been credited with 23.54 GDD.', @@ -616,11 +613,9 @@ describe('sendEmailVariants', () => { }), }) }) - + it('has correct header', () => { - expect(result.originalMessage.html).toContain( - `src="${headerImageURL}"`, - ) + expect(result.originalMessage.html).toContain(`src="${headerImageURL}"`) }) it('has correct doctype and language set', () => { @@ -719,7 +714,7 @@ describe('sendEmailVariants', () => { }) }) }) - + describe('result', () => { it('is the expected object', () => { expect(result).toMatchObject({ @@ -740,9 +735,7 @@ describe('sendEmailVariants', () => { }) it('has correct header', () => { - expect(result.originalMessage.html).toContain( - `src="${headerImageURL}"`, - ) + expect(result.originalMessage.html).toContain(`src="${headerImageURL}"`) }) it('has correct doctype and language set', () => { @@ -759,7 +752,7 @@ describe('sendEmailVariants', () => { 'Your common good contribution “My contribution.” was deleted by Bibi Bloxberg.', ) }) - + it('has correct CTA block', () => { expect(result.originalMessage.html).toContain('>Contribution details') expect(result.originalMessage.html).toContain( @@ -775,7 +768,7 @@ describe('sendEmailVariants', () => { ) expect(result.originalMessage.html).toContain('Please do not reply to this email.') }) - + it('has correct greating formula', () => { expect(result.originalMessage.html).toContain('Kind regards,your Gradido team') @@ -808,7 +801,6 @@ describe('sendEmailVariants', () => { ' { }) it('has correct header', () => { - expect(result.originalMessage.html).toContain( - `src="${headerImageURL}"`, - ) + expect(result.originalMessage.html).toContain(`src="${headerImageURL}"`) }) it('has correct doctype and language set', () => { @@ -882,12 +872,10 @@ describe('sendEmailVariants', () => { 'You, or someone else, requested a password reset for this account.', ) }) - + it('has correct CTA block', () => { expect(result.originalMessage.html).toContain('>Reset password') - expect(result.originalMessage.html).toContain( - 'If it was you, please click here.', - ) + expect(result.originalMessage.html).toContain('If it was you, please click here.') expect(result.originalMessage.html).toContain( ' { ) expect(result.originalMessage.html).toContain('>Request new valid link') expect(result.originalMessage.html).toContain( - 'The link has a validity of 23 hours and 30 minutes.' + 'The link has a validity of 23 hours and 30 minutes.', ) expect(result.originalMessage.html).toContain( - 'If the validity of the link has already expired, you can have a new link sent to you here.' + 'If the validity of the link has already expired, you can have a new link sent to you here.', ) expect(result.originalMessage.html).toContain('>New link') expect(result.originalMessage.html).toContain(`href="${CONFIG.EMAIL_LINK_FORGOTPASSWORD}"`) @@ -1001,9 +989,7 @@ describe('sendEmailVariants', () => { }) it('has correct header', () => { - expect(result.originalMessage.html).toContain( - `src="${headerImageURL}"`, - ) + expect(result.originalMessage.html).toContain(`src="${headerImageURL}"`) }) it('has correct doctype and language set', () => { @@ -1127,9 +1113,7 @@ describe('sendEmailVariants', () => { }) it('has correct header', () => { - expect(result.originalMessage.html).toContain( - `src="${headerImageURL}"`, - ) + expect(result.originalMessage.html).toContain(`src="${headerImageURL}"`) }) it('has correct doctype and language set', () => { @@ -1138,13 +1122,15 @@ describe('sendEmailVariants', () => { }) it('has correct heading, salutation, and text', () => { - expect(result.originalMessage.html).toContain('>Bibi Bloxberg has sent you 37.40 Gradido') + expect(result.originalMessage.html).toContain( + '>Bibi Bloxberg has sent you 37.40 Gradido', + ) expect(result.originalMessage.html).toContain('Hello Peter Lustig,') expect(result.originalMessage.html).toContain( 'You have just received 37.40 GDD from Bibi Bloxberg (bibi@bloxberg.de).', ) }) - + it('has correct CTA block', () => { expect(result.originalMessage.html).toContain('>Transaction details') expect(result.originalMessage.html).toContain( From 30cb8e2752f6bbc5753e8d4961f3d44e0cf458c1 Mon Sep 17 00:00:00 2001 From: mahula Date: Mon, 15 May 2023 21:47:29 +0200 Subject: [PATCH 046/123] Update backend/src/emails/templates/includes/webflow.css Co-authored-by: Alexander Friedland --- backend/src/emails/templates/includes/webflow.css | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/backend/src/emails/templates/includes/webflow.css b/backend/src/emails/templates/includes/webflow.css index 2b0dd4435..9af019c3a 100644 --- a/backend/src/emails/templates/includes/webflow.css +++ b/backend/src/emails/templates/includes/webflow.css @@ -26,9 +26,8 @@ } .head-logo { - position: absolute; - width:600px; - max-width:100% + width: 100%; + height: auto; } .wrapper_head { From baee42b222ccbcab924fb7b1551559f27139abff Mon Sep 17 00:00:00 2001 From: mahula Date: Mon, 15 May 2023 21:49:25 +0200 Subject: [PATCH 047/123] Update backend/src/emails/templates/includes/header.pug Co-authored-by: Alexander Friedland --- backend/src/emails/templates/includes/header.pug | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/emails/templates/includes/header.pug b/backend/src/emails/templates/includes/header.pug index a883946c5..f2650a25d 100644 --- a/backend/src/emails/templates/includes/header.pug +++ b/backend/src/emails/templates/includes/header.pug @@ -6,7 +6,7 @@ header img.head-logo( alt="Gradido Logo" loading="lazy" - src="https://cdn.discordapp.com/attachments/913740067208564736/1107629904306110595/Kopf-Grafik.png" + src="data:image/jpeg;base64,/9j/4QAWRXhpZgAATU0AKgAAAAgAAAAAAAD/7QA4UGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAAA4QklNBCUAAAAAABDUHYzZjwCyBOmACZjs+EJ+/+IH2ElDQ19QUk9GSUxFAAEBAAAHyGFwcGwCIAAAbW50clJHQiBYWVogB9kAAgAZAAsAGgALYWNzcEFQUEwAAAAAYXBwbAAAAAAAAAAAAAAAAAAAAAAAAPbWAAEAAAAA0y1hcHBsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALZGVzYwAAAQgAAABvZHNjbQAAAXgAAAWKY3BydAAABwQAAAA4d3RwdAAABzwAAAAUclhZWgAAB1AAAAAUZ1hZWgAAB2QAAAAUYlhZWgAAB3gAAAAUclRSQwAAB4wAAAAOY2hhZAAAB5wAAAAsYlRSQwAAB4wAAAAOZ1RSQwAAB4wAAAAOZGVzYwAAAAAAAAAUR2VuZXJpYyBSR0IgUHJvZmlsZQAAAAAAAAAAAAAAFEdlbmVyaWMgUkdCIFByb2ZpbGUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG1sdWMAAAAAAAAAHwAAAAxza1NLAAAAKAAAAYRkYURLAAAAJAAAAaxjYUVTAAAAJAAAAdB2aVZOAAAAJAAAAfRwdEJSAAAAJgAAAhh1a1VBAAAAKgAAAj5mckZVAAAAKAAAAmhodUhVAAAAKAAAApB6aFRXAAAAEgAAArhrb0tSAAAAFgAAAspuYk5PAAAAJgAAAuBjc0NaAAAAIgAAAwZoZUlMAAAAHgAAAyhyb1JPAAAAJAAAA0ZkZURFAAAALAAAA2ppdElUAAAAKAAAA5ZzdlNFAAAAJgAAAuB6aENOAAAAEgAAA75qYUpQAAAAGgAAA9BlbEdSAAAAIgAAA+pwdFBPAAAAJgAABAxubE5MAAAAKAAABDJlc0VTAAAAJgAABAx0aFRIAAAAJAAABFp0clRSAAAAIgAABH5maUZJAAAAKAAABKBockhSAAAAKAAABMhwbFBMAAAALAAABPBydVJVAAAAIgAABRxlblVTAAAAJgAABT5hckVHAAAAJgAABWQAVgFhAGUAbwBiAGUAYwBuAP0AIABSAEcAQgAgAHAAcgBvAGYAaQBsAEcAZQBuAGUAcgBlAGwAIABSAEcAQgAtAHAAcgBvAGYAaQBsAFAAZQByAGYAaQBsACAAUgBHAEIAIABnAGUAbgDoAHIAaQBjAEMepQB1ACAAaADsAG4AaAAgAFIARwBCACAAQwBoAHUAbgBnAFAAZQByAGYAaQBsACAAUgBHAEIAIABHAGUAbgDpAHIAaQBjAG8EFwQwBDMEMAQ7BEwEPQQ4BDkAIAQ/BEAEPgREBDAEOQQ7ACAAUgBHAEIAUAByAG8AZgBpAGwAIABnAOkAbgDpAHIAaQBxAHUAZQAgAFIAVgBCAMEAbAB0AGEAbADhAG4AbwBzACAAUgBHAEIAIABwAHIAbwBmAGkAbJAadSgAUgBHAEKCcl9pY8+P8Md8vBgAIABSAEcAQgAg1QS4XNMMx3wARwBlAG4AZQByAGkAcwBrACAAUgBHAEIALQBwAHIAbwBmAGkAbABPAGIAZQBjAG4A/QAgAFIARwBCACAAcAByAG8AZgBpAGwF5AXoBdUF5AXZBdwAIABSAEcAQgAgBdsF3AXcBdkAUAByAG8AZgBpAGwAIABSAEcAQgAgAGcAZQBuAGUAcgBpAGMAQQBsAGwAZwBlAG0AZQBpAG4AZQBzACAAUgBHAEIALQBQAHIAbwBmAGkAbABQAHIAbwBmAGkAbABvACAAUgBHAEIAIABnAGUAbgBlAHIAaQBjAG9mbpAaAFIARwBCY8+P8GWHTvZOAIIsACAAUgBHAEIAIDDXMO0w1TChMKQw6wOTA7UDvQO5A7oDzAAgA8ADwQO/A8YDrwO7ACAAUgBHAEIAUABlAHIAZgBpAGwAIABSAEcAQgAgAGcAZQBuAOkAcgBpAGMAbwBBAGwAZwBlAG0AZQBlAG4AIABSAEcAQgAtAHAAcgBvAGYAaQBlAGwOQg4bDiMORA4fDiUOTAAgAFIARwBCACAOFw4xDkgOJw5EDhsARwBlAG4AZQBsACAAUgBHAEIAIABQAHIAbwBmAGkAbABpAFkAbABlAGkAbgBlAG4AIABSAEcAQgAtAHAAcgBvAGYAaQBpAGwAaQBHAGUAbgBlAHIAaQENAGsAaQAgAFIARwBCACAAcAByAG8AZgBpAGwAVQBuAGkAdwBlAHIAcwBhAGwAbgB5ACAAcAByAG8AZgBpAGwAIABSAEcAQgQeBDEESQQ4BDkAIAQ/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oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAjZO4qu8Qb2NXKQgHrQBkSQY6j8az5rUMOR+NdGUPaqrwK33ePagDkZ7HrxWLPpwOcCu9khxwRVGW1U9RQB5pc6YO4/EVjTaSD2/A16nLY+lZsunr3FAHlcmkf7P5U1NHBPKfnXpL6appo0xc96AOIg0dR149hW9aaZt+6PxNdFFp4B6ZrVgs/UUAZlpp5GMAGuggtAoGRVmKHb2rShizyen86AK0cIAzg1cjgXbk5yauIufpUtAFHyV9/wDP4UohT3q7RQBVESj+H/P61IIz9KmooAYEHf8Az+tPoooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA/9f+/iiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACkKg0tFAEJjP1qu8KnpxV6kIB60AZL25Hb8qrNADW0wAOBTCqt1FAGE1qp6imi1APT/AD+VbhiQ9qb5Ke9AGStuB2qwkPOBz9K0BEg7U8ADpQBAkGPvflVpUz9KVAD1qWgAAxxRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB/9k=" ) From 6bbe853297be22f2dc54e4f0530b0b1e34f46545 Mon Sep 17 00:00:00 2001 From: mahula Date: Mon, 15 May 2023 22:12:03 +0200 Subject: [PATCH 048/123] fix unit test --- backend/src/emails/sendEmailVariants.test.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/backend/src/emails/sendEmailVariants.test.ts b/backend/src/emails/sendEmailVariants.test.ts index d8b60279a..8a5d0a99a 100644 --- a/backend/src/emails/sendEmailVariants.test.ts +++ b/backend/src/emails/sendEmailVariants.test.ts @@ -86,7 +86,7 @@ describe('sendEmailVariants', () => { senderLastName: 'Bloxberg', contributionMemo: 'My contribution.', overviewURL: CONFIG.EMAIL_LINK_OVERVIEW, - supportEmail: 'support@gradido.net', + supportEmail: CONFIG.COMMUNITY_SUPPORT_MAIL, communityURL: CONFIG.COMMUNITY_URL, }, }) @@ -392,8 +392,8 @@ describe('sendEmailVariants', () => { expect(result.originalMessage.html).toContain( 'If you did not try to register again, please contact our support:', ) - expect(result.originalMessage.html).toContain('href="mailto:support@gradido.net"') - expect(result.originalMessage.html).toContain('>support@gradido.net') + expect(result.originalMessage.html).toContain('href="mailto:support@supportmail.com"') + expect(result.originalMessage.html).toContain('>support@supportmail.com') }) it('has correct greating formula', () => { From 7e036401f94f1ddc75d28df770b1de124d996ae4 Mon Sep 17 00:00:00 2001 From: mahula Date: Mon, 15 May 2023 22:15:37 +0200 Subject: [PATCH 049/123] fix unit test --- backend/src/emails/sendEmailVariants.test.ts | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/backend/src/emails/sendEmailVariants.test.ts b/backend/src/emails/sendEmailVariants.test.ts index 8a5d0a99a..214cfae60 100644 --- a/backend/src/emails/sendEmailVariants.test.ts +++ b/backend/src/emails/sendEmailVariants.test.ts @@ -159,7 +159,7 @@ describe('sendEmailVariants', () => { expect(result.originalMessage.html).toContain( 'If you have any further questions, please contact our support', ) - expect(result.originalMessage.html).toContain('support@gradido.net') + expect(result.originalMessage.html).toContain('support@supportmail.com') expect(result.originalMessage.html).toContain( 'src="https://gdd.gradido.net/img/brand/green.png"', ) @@ -287,7 +287,7 @@ describe('sendEmailVariants', () => { expect(result.originalMessage.html).toContain( 'If you have any further questions, please contact our support', ) - expect(result.originalMessage.html).toContain('support@gradido.net') + expect(result.originalMessage.html).toContain('support@supportmail.com') expect(result.originalMessage.html).toContain( 'src="https://gdd.gradido.net/img/brand/green.png"', ) @@ -414,7 +414,7 @@ describe('sendEmailVariants', () => { expect(result.originalMessage.html).toContain( 'If you have any further questions, please contact our support', ) - expect(result.originalMessage.html).toContain('support@gradido.net') + expect(result.originalMessage.html).toContain('support@supportmail.com') expect(result.originalMessage.html).toContain( 'src="https://gdd.gradido.net/img/brand/green.png"', ) @@ -541,7 +541,7 @@ describe('sendEmailVariants', () => { expect(result.originalMessage.html).toContain( 'If you have any further questions, please contact our support', ) - expect(result.originalMessage.html).toContain('support@gradido.net') + expect(result.originalMessage.html).toContain('support@supportmail.com') expect(result.originalMessage.html).toContain( 'src="https://gdd.gradido.net/img/brand/green.png"', ) @@ -661,7 +661,7 @@ describe('sendEmailVariants', () => { expect(result.originalMessage.html).toContain( 'If you have any further questions, please contact our support', ) - expect(result.originalMessage.html).toContain('support@gradido.net') + expect(result.originalMessage.html).toContain('support@supportmail.com') expect(result.originalMessage.html).toContain( 'src="https://gdd.gradido.net/img/brand/green.png"', ) @@ -785,7 +785,7 @@ describe('sendEmailVariants', () => { expect(result.originalMessage.html).toContain( 'If you have any further questions, please contact our support', ) - expect(result.originalMessage.html).toContain('support@gradido.net') + expect(result.originalMessage.html).toContain('support@supportmail.com') expect(result.originalMessage.html).toContain( 'src="https://gdd.gradido.net/img/brand/green.png"', ) @@ -911,7 +911,7 @@ describe('sendEmailVariants', () => { expect(result.originalMessage.html).toContain( 'If you have any further questions, please contact our support', ) - expect(result.originalMessage.html).toContain('support@gradido.net') + expect(result.originalMessage.html).toContain('support@supportmail.com') expect(result.originalMessage.html).toContain( 'src="https://gdd.gradido.net/img/brand/green.png"', ) @@ -1037,7 +1037,7 @@ describe('sendEmailVariants', () => { expect(result.originalMessage.html).toContain( 'If you have any further questions, please contact our support', ) - expect(result.originalMessage.html).toContain('support@gradido.net') + expect(result.originalMessage.html).toContain('support@supportmail.com') expect(result.originalMessage.html).toContain( 'src="https://gdd.gradido.net/img/brand/green.png"', ) @@ -1159,7 +1159,7 @@ describe('sendEmailVariants', () => { expect(result.originalMessage.html).toContain( 'If you have any further questions, please contact our support', ) - expect(result.originalMessage.html).toContain('support@gradido.net') + expect(result.originalMessage.html).toContain('support@supportmail.com') expect(result.originalMessage.html).toContain( 'src="https://gdd.gradido.net/img/brand/green.png"', ) From 37d80d3bfa644421e18c15fa6158ee2a7e6015b3 Mon Sep 17 00:00:00 2001 From: mahula Date: Mon, 15 May 2023 22:27:38 +0200 Subject: [PATCH 050/123] fix unit test --- backend/src/emails/sendEmailVariants.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/emails/sendEmailVariants.test.ts b/backend/src/emails/sendEmailVariants.test.ts index 214cfae60..2783abe8a 100644 --- a/backend/src/emails/sendEmailVariants.test.ts +++ b/backend/src/emails/sendEmailVariants.test.ts @@ -35,7 +35,7 @@ let testEnv: { // when https://gdd.gradido.net/img/gradido-email-header.jpg is on production, // replace this URL by https://gdd.gradido.net/img/brand/gradido-email-header.png const headerImageURL = - 'https://cdn.discordapp.com/attachments/913740067208564736/1107629904306110595/Kopf-Grafik.png' + 'data:image/jpeg;base64,/9j/4QAWRXhpZgAATU0AKgAAAAgAAAAAAAD/7QA4UGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAAA4QklNBCUAAAAAABDUHYzZjwCyBOmACZjs+EJ+/+IH2ElDQ19QUk9GSUxFAAEBAAAHyGFwcGwCIAAAbW50clJHQiBYWVogB9kAAgAZAAsAGgALYWNzcEFQUEwAAAAAYXBwbAAAAAAAAAAAAAAAAAAAAAAAAPbWAAEAAAAA0y1hcHBsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALZGVzYwAAAQgAAABvZHNjbQAAAXgAAAWKY3BydAAABwQAAAA4d3RwdAAABzwAAAAUclhZWgAAB1AAAAAUZ1hZWgAAB2QAAAAUYlhZWgAAB3gAAAAUclRSQwAAB4wAAAAOY2hhZAAAB5wAAAAsYlRSQwAAB4wAAAAOZ1RSQwAAB4wAAAAOZGVzYwAAAAAAAAAUR2VuZXJpYyBSR0IgUHJvZmlsZQAAAAAAAAAAAAAAFEdlbmVyaWMgUkdCIFByb2ZpbGUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG1sdWMAAAAAAAAAHwAAAAxza1NLAAAAKAAAAYRkYURLAAAAJAAAAaxjYUVTAAAAJAAAAdB2aVZOAAAAJAAAAfRwdEJSAAAAJgAAAhh1a1VBAAAAKgAAAj5mckZVAAAAKAAAAmhodUhVAAAAKAAAApB6aFRXAAAAEgAAArhrb0tSAAAAFgAAAspuYk5PAAAAJgAAAuBjc0NaAAAAIgAAAwZoZUlMAAAAHgAAAyhyb1JPAAAAJAAAA0ZkZURFAAAALAAAA2ppdElUAAAAKAAAA5ZzdlNFAAAAJgAAAuB6aENOAAAAEgAAA75qYUpQAAAAGgAAA9BlbEdSAAAAIgAAA+pwdFBPAAAAJgAABAxubE5MAAAAKAAABDJlc0VTAAAAJgAABAx0aFRIAAAAJAAABFp0clRSAAAAIgAABH5maUZJAAAAKAAABKBockhSAAAAKAAABMhwbFBMAAAALAAABPBydVJVAAAAIgAABRxlblVTAAAAJgAABT5hckVHAAAAJgAABWQAVgFhAGUAbwBiAGUAYwBuAP0AIABSAEcAQgAgAHAAcgBvAGYAaQBsAEcAZQBuAGUAcgBlAGwAIABSAEcAQgAtAHAAcgBvAGYAaQBsAFAAZQByAGYAaQBsACAAUgBHAEIAIABnAGUAbgDoAHIAaQBjAEMepQB1ACAAaADsAG4AaAAgAFIARwBCACAAQwBoAHUAbgBnAFAAZQByAGYAaQBsACAAUgBHAEIAIABHAGUAbgDpAHIAaQBjAG8EFwQwBDMEMAQ7BEwEPQQ4BDkAIAQ/BEAEPgREBDAEOQQ7ACAAUgBHAEIAUAByAG8AZgBpAGwAIABnAOkAbgDpAHIAaQBxAHUAZQAgAFIAVgBCAMEAbAB0AGEAbADhAG4AbwBzACAAUgBHAEIAIABwAHIAbwBmAGkAbJAadSgAUgBHAEKCcl9pY8+P8Md8vBgAIABSAEcAQgAg1QS4XNMMx3wARwBlAG4AZQByAGkAcwBrACAAUgBHAEIALQBwAHIAbwBmAGkAbABPAGIAZQBjAG4A/QAgAFIARwBCACAAcAByAG8AZgBpAGwF5AXoBdUF5AXZBdwAIABSAEcAQgAgBdsF3AXcBdkAUAByAG8AZgBpAGwAIABSAEcAQgAgAGcAZQBuAGUAcgBpAGMAQQBsAGwAZwBlAG0AZQBpAG4AZQBzACAAUgBHAEIALQBQAHIAbwBmAGkAbABQAHIAbwBmAGkAbABvACAAUgBHAEIAIABnAGUAbgBlAHIAaQBjAG9mbpAaAFIARwBCY8+P8GWHTvZOAIIsACAAUgBHAEIAIDDXMO0w1TChMKQw6wOTA7UDvQO5A7oDzAAgA8ADwQO/A8YDrwO7ACAAUgBHAEIAUABlAHIAZgBpAGwAIABSAEcAQgAgAGcAZQBuAOkAcgBpAGMAbwBBAGwAZwBlAG0AZQBlAG4AIABSAEcAQgAtAHAAcgBvAGYAaQBlAGwOQg4bDiMORA4fDiUOTAAgAFIARwBCACAOFw4xDkgOJw5EDhsARwBlAG4AZQBsACAAUgBHAEIAIABQAHIAbwBmAGkAbABpAFkAbABlAGkAbgBlAG4AIABSAEcAQgAtAHAAcgBvAGYAaQBpAGwAaQBHAGUAbgBlAHIAaQENAGsAaQAgAFIARwBCACAAcAByAG8AZgBpAGwAVQBuAGkAdwBlAHIAcwBhAGwAbgB5ACAAcAByAG8AZgBpAGwAIABSAEcAQgQeBDEESQQ4BDkAIAQ/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oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAjZO4qu8Qb2NXKQgHrQBkSQY6j8az5rUMOR+NdGUPaqrwK33ePagDkZ7HrxWLPpwOcCu9khxwRVGW1U9RQB5pc6YO4/EVjTaSD2/A16nLY+lZsunr3FAHlcmkf7P5U1NHBPKfnXpL6appo0xc96AOIg0dR149hW9aaZt+6PxNdFFp4B6ZrVgs/UUAZlpp5GMAGuggtAoGRVmKHb2rShizyen86AK0cIAzg1cjgXbk5yauIufpUtAFHyV9/wDP4UohT3q7RQBVESj+H/P61IIz9KmooAYEHf8Az+tPoooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA/9f+/iiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACkKg0tFAEJjP1qu8KnpxV6kIB60AZL25Hb8qrNADW0wAOBTCqt1FAGE1qp6imi1APT/AD+VbhiQ9qb5Ke9AGStuB2qwkPOBz9K0BEg7U8ADpQBAkGPvflVpUz9KVAD1qWgAAxxRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB/9k="' beforeAll(async () => { testEnv = await testEnvironment(logger, localization) From 1c379e61b552f2574e2deb3b36e1532eb4b800bd Mon Sep 17 00:00:00 2001 From: mahula Date: Mon, 15 May 2023 22:34:47 +0200 Subject: [PATCH 051/123] fix unit test --- backend/src/emails/sendEmailVariants.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/emails/sendEmailVariants.test.ts b/backend/src/emails/sendEmailVariants.test.ts index 2783abe8a..2b590324d 100644 --- a/backend/src/emails/sendEmailVariants.test.ts +++ b/backend/src/emails/sendEmailVariants.test.ts @@ -35,7 +35,7 @@ let testEnv: { // when https://gdd.gradido.net/img/gradido-email-header.jpg is on production, // replace this URL by https://gdd.gradido.net/img/brand/gradido-email-header.png const headerImageURL = - 'data:image/jpeg;base64,/9j/4QAWRXhpZgAATU0AKgAAAAgAAAAAAAD/7QA4UGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAAA4QklNBCUAAAAAABDUHYzZjwCyBOmACZjs+EJ+/+IH2ElDQ19QUk9GSUxFAAEBAAAHyGFwcGwCIAAAbW50clJHQiBYWVogB9kAAgAZAAsAGgALYWNzcEFQUEwAAAAAYXBwbAAAAAAAAAAAAAAAAAAAAAAAAPbWAAEAAAAA0y1hcHBsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALZGVzYwAAAQgAAABvZHNjbQAAAXgAAAWKY3BydAAABwQAAAA4d3RwdAAABzwAAAAUclhZWgAAB1AAAAAUZ1hZWgAAB2QAAAAUYlhZWgAAB3gAAAAUclRSQwAAB4wAAAAOY2hhZAAAB5wAAAAsYlRSQwAAB4wAAAAOZ1RSQwAAB4wAAAAOZGVzYwAAAAAAAAAUR2VuZXJpYyBSR0IgUHJvZmlsZQAAAAAAAAAAAAAAFEdlbmVyaWMgUkdCIFByb2ZpbGUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG1sdWMAAAAAAAAAHwAAAAxza1NLAAAAKAAAAYRkYURLAAAAJAAAAaxjYUVTAAAAJAAAAdB2aVZOAAAAJAAAAfRwdEJSAAAAJgAAAhh1a1VBAAAAKgAAAj5mckZVAAAAKAAAAmhodUhVAAAAKAAAApB6aFRXAAAAEgAAArhrb0tSAAAAFgAAAspuYk5PAAAAJgAAAuBjc0NaAAAAIgAAAwZoZUlMAAAAHgAAAyhyb1JPAAAAJAAAA0ZkZURFAAAALAAAA2ppdElUAAAAKAAAA5ZzdlNFAAAAJgAAAuB6aENOAAAAEgAAA75qYUpQAAAAGgAAA9BlbEdSAAAAIgAAA+pwdFBPAAAAJgAABAxubE5MAAAAKAAABDJlc0VTAAAAJgAABAx0aFRIAAAAJAAABFp0clRSAAAAIgAABH5maUZJAAAAKAAABKBockhSAAAAKAAABMhwbFBMAAAALAAABPBydVJVAAAAIgAABRxlblVTAAAAJgAABT5hckVHAAAAJgAABWQAVgFhAGUAbwBiAGUAYwBuAP0AIABSAEcAQgAgAHAAcgBvAGYAaQBsAEcAZQBuAGUAcgBlAGwAIABSAEcAQgAtAHAAcgBvAGYAaQBsAFAAZQByAGYAaQBsACAAUgBHAEIAIABnAGUAbgDoAHIAaQBjAEMepQB1ACAAaADsAG4AaAAgAFIARwBCACAAQwBoAHUAbgBnAFAAZQByAGYAaQBsACAAUgBHAEIAIABHAGUAbgDpAHIAaQBjAG8EFwQwBDMEMAQ7BEwEPQQ4BDkAIAQ/BEAEPgREBDAEOQQ7ACAAUgBHAEIAUAByAG8AZgBpAGwAIABnAOkAbgDpAHIAaQBxAHUAZQAgAFIAVgBCAMEAbAB0AGEAbADhAG4AbwBzACAAUgBHAEIAIABwAHIAbwBmAGkAbJAadSgAUgBHAEKCcl9pY8+P8Md8vBgAIABSAEcAQgAg1QS4XNMMx3wARwBlAG4AZQByAGkAcwBrACAAUgBHAEIALQBwAHIAbwBmAGkAbABPAGIAZQBjAG4A/QAgAFIARwBCACAAcAByAG8AZgBpAGwF5AXoBdUF5AXZBdwAIABSAEcAQgAgBdsF3AXcBdkAUAByAG8AZgBpAGwAIABSAEcAQgAgAGcAZQBuAGUAcgBpAGMAQQBsAGwAZwBlAG0AZQBpAG4AZQBzACAAUgBHAEIALQBQAHIAbwBmAGkAbABQAHIAbwBmAGkAbABvACAAUgBHAEIAIABnAGUAbgBlAHIAaQBjAG9mbpAaAFIARwBCY8+P8GWHTvZOAIIsACAAUgBHAEIAIDDXMO0w1TChMKQw6wOTA7UDvQO5A7oDzAAgA8ADwQO/A8YDrwO7ACAAUgBHAEIAUABlAHIAZgBpAGwAIABSAEcAQgAgAGcAZQBuAOkAcgBpAGMAbwBBAGwAZwBlAG0AZQBlAG4AIABSAEcAQgAtAHAAcgBvAGYAaQBlAGwOQg4bDiMORA4fDiUOTAAgAFIARwBCACAOFw4xDkgOJw5EDhsARwBlAG4AZQBsACAAUgBHAEIAIABQAHIAbwBmAGkAbABpAFkAbABlAGkAbgBlAG4AIABSAEcAQgAtAHAAcgBvAGYAaQBpAGwAaQBHAGUAbgBlAHIAaQENAGsAaQAgAFIARwBCACAAcAByAG8AZgBpAGwAVQBuAGkAdwBlAHIAcwBhAGwAbgB5ACAAcAByAG8AZgBpAGwAIABSAEcAQgQeBDEESQQ4BDkAIAQ/BEAEPgREBDgEOwRMACAAUgBHAEIARwBlAG4AZQByAGkAYwAgAFIARwBCACAAUAByAG8AZgBpAGwAZQZFBkQGQQAgBioGOQYxBkoGQQAgAFIARwBCACAGJwZEBjkGJwZFAAB0ZXh0AAAAAENvcHlyaWdodCAyMDA3IEFwcGxlIEluYy4sIGFsbCByaWdodHMgcmVzZXJ2ZWQuAFhZWiAAAAAAAADzUgABAAAAARbPWFlaIAAAAAAAAHRNAAA97gAAA9BYWVogAAAAAAAAWnUAAKxzAAAXNFhZWiAAAAAAAAAoGgAAFZ8AALg2Y3VydgAAAAAAAAABAc0AAHNmMzIAAAAAAAEMQgAABd7///MmAAAHkgAA/ZH///ui///9owAAA9wAAMBs/8AAEQgAjAKoAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/bAEMAAQEBAQEBAgEBAgICAgICAwICAgIDBAMDAwMDBAUEBAQEBAQFBQUFBQUFBQYGBgYGBgcHBwcHCAgICAgICAgICP/bAEMBAQEBAgICBAICBAgGBQYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICP/dAAQAK//aAAwDAQACEQMRAD8A/v4ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACmOOM0+kIyMUAZVynOfWvzU/wCCmv7Fdh+2f+z1deHNJjiTxboJk1fwndvxm6Vf3lo7do7pRsPYPsb+Gv00mXK59KxLmPIIrKvRjUg4T2ZM4KSsz/MW1XS9S0PVLnRNat5rS8s7iS1u7W4UpLDNExSSN1PIZWBBB6EVkuvb1r+mf/gtz/wT7ktrq5/bO+ENiTG5VfHunWyfdbhU1RVXseEuP+AyH+M1/M6w3CvzbG5dKjUcJf8ADng1cO4SszLlAqWzvfLPkzfdz8p9P/rU+RAeaoSxj/P/AOuuOeHUlZicU9DpuKSuetb9rYiKY5ToD3X/AOtW+CGXcp4PQivLqYSUXZmDgkOqF+DmpcUEA0RogVWG7pVaReP51dIIODUTr3H41vGmBjSRZrOmi4rflT0rOljz9K6acDWMUZVvfXNg37v5k6lG6f8A1q6yy1S0vhiM7X7o3B/D1rl5YjWVJEytlcgg9RXbTiaJHpufSg5rhLXxBeWv7u5Hmp69GH4966a01Szv+IXG7+43Dfl/hXZCmmaKCNMkDqaQuO1R0VuqKRooDi5NJk0lFbKl5FKDCiiitFTZSghdxoyaSitFRKSQUUUVoqSGFFFFaql5FKDCg8c0VseHdJn17X7HRLUFpLu7itkUdSZHC/1raNFlKmf0/wD7C3hNvB/7NXhSwkXbJc2rahIO+bmQuD/3zivuGwHz15V4D0ODwz4c03w5bACPT7K2s0A44hjCf0r1rTxhq9+EbJI60jvNMXCke4r0vSVO5a8601cj6tXpmkrkj6VQz0rRlwB9K9S0lT8vuSa830Zcbc9sCvT9JHC/TNAHcWAwv410tuPmH0rn7EfIM10duMH8KAL6dPxp9NT7tOoAKKKKACiiigAooooAKKKKAP/Q/v4ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigCF15+tZM8fJFbTDIqjOmRu/OgDgPEWi6brem3Oj6xBFdWd5BJbXVtOgeKWKVSro6tkFWUkEHqDX8Qv/BUH/gnlq/7HPxHfxp4Et5p/h5r92x0mcAudLuXyxsJ25wByYHJ+ZPlJLKc/3O3UW5SK8T+Lvws8EfGLwHqfw3+I2nQapo2rWzWt9ZTjIdD0ZT1V0OGR1wysAQciuHH4GNeFnv0ZjWoqasf5uMi9/WqUkea/Qj9vn9hHx3+xV8SX0+4E+o+ENUnd/DXiArkOnLfZrkqMJcxjqOA4G5e4HwAwB/pXxtXCyhJxkeXKlZ2MWWPIpttfTWTbR8yZ5U/0q/KmazZY/SsZYdPRoXIup1Vvcw3SeZCwPqO4+tT15+JJ7WTzYGKn27/WuisdchmxHdYjfpn+E/4VyTwTT0MpUexuMMioasZHWo3wenWpjQEoIqun5VTePHFaXtUEifl61tCkUosxpY+xrNli9RXQPF6/nVKSP1reNE0jE5mWLsKzZImByPrx7V0ssXNUJIx0rpVNlkFtr2pWnylvNUfwyckD2PWuitfFOnynbchoT6nlfzH+FcpLDkntVB4iev6V0wTRrFM9bhnguF327o49VOalrxYLJC3mRMyn+8pI/WtSDxHrNrwZBKB2lGf16/rXVFdyz1WiuEg8agcXUB+sbf0P+Na0HizRZvvO0f8Avqf6ZreME+pSSOlorPh1bTJ/9VcRH23AH9avqyvyhB+nNbxoo0UELRQeOtFaqkUFFFFbKkNIK+s/2IPA58dftKeHbSRN8FhcHVbjIyNtqC4z9WAFfJZIHNfsH/wSo8CeZf8AiP4lzxgqiQ6Ray/7TnzJcfQKoP1reFDW5cYH7haWCWB9/wCVd9pq5fHviuI0pCGX8c/yrv8AS48kH3zXUaHd6WhIH+9XqGkRngfQV5zpUeQor1TSIuV+vH4UAejaQgwDivTtLXjj0Arz7SIyVGB1xXpmmodv1NAHX2a/KK6CAcE1jWi1twj5PqaALi9BS0UUAFFFFABRRRQAUUUUAFFFFAH/0f7+KKKKACiiigAoor5b/bE/ah8NfsjfA/UPivrcB1C+3ppvh7RkfY+papcBvIgDYOxBtaSV8HZEjtyQAeXG42lhqMsRXkoxim23skt2bYbDzrVI0qSvJuyXmdr8d/2kPgh+zN4S/wCE1+OHiKw0CydjFarcsXubyUDPlWttEGnuJP8AYiRiByeOa/JfxT/wXS+GKazFYfDf4eeKdXtp5/IhvdXubbSBLwW3pCPtUwXAJ/eIhA6gHivwl8W6r8Xv2kvibc/Ff4sX0uveJ9Sfyo5JNy21nC7ZSzsYTkW9rH2VeWwXkLOSa98+EHwKsPDdnF4w1CCG+uXvWt5FvFLJKNgeTIBBC4KKu0ggV/D3Hn0qcV7SdPJIqMI/aa5pPzs9Irys2f0Zw54M4aMIzzFuUn0Tsl5X3f3o/db4Vf8ABVbwb441BLTxl4Tv9AichRcR3qXyrnuw8mDAH41+nHhPxn4X8caTHrfhS9t722kGRJA4fHscdDX83d94D8M2VlD4j8JIyWtxKYZbCZt81ncAbvL3YBkjYZMb4BIBVvmGT0+iXvxX+G1wfEHgu51DQrmBFuFuACsLbs7BJE/ySq+CChGTzivkeFfpZ55gsU4ZzTVek7O8UoySfVWST06NJ9G07no5z4M5diKXNgJOlPtK7TfZ3d16q/dXP6RKK+Wf2S/2jof2i/h2+p6tarpviPSJl0/xHpanKxXBXck0RJJME6fPGe3zKclTX1NX+geQ55hczwdPH4KfNTmrxfl/mtmuj0P5pzLLq2Erzw2IjaUXZr+vwCiiivWOIKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAqB1HTsanprDIoAxZ4sZBrnL637+tdjNHuGfSsa4i3DFAHy98dPgl8Pfjt8PdS+GHxO06LUtH1OIxzQyDDI38EsT9Y5Yz8yOMEGv4m/27v2A/iT+xd4zY3azat4O1C4ZdC8SInHPItrsLxFcKPosgG5e4X+9q/tAwIrw34o/DLwb8UPCN/wCAfiDptrq2j6nA1ve2N2m+ORD+qsDyrAgqeQQa48Xg41V5mdSkpH+ck44wOtUZE7iv19/4KAf8EuPHn7Lt7d/Ef4Wpda/4CLmVpQDJe6OrH7l0qjLwjos4HA++AeT+RzJnkV89PDSg7SRxyp2dmYUsVZ8sY6Ct+WMHpWbNDg5qXRuRyIq2uq3unnCnemfuN/Q9q6m016yvMLny3/uvx+R6VyEsZ71nywg1k8Mg5D1Pvmoix6Yrzi21XUbDCRuWQfwPyP8AEfnXRW3iezmAW8UxN6j5l/Tmp9gxezN9gT9KqyL3HSp4bm3uV3QOrj/ZINPZM8irjSY1BGRJFVGWEnit5ox/9aqjxiuiMC0jnZIiKpyR10UkNUpIAfb2reNNFKJzrx+v51Ue39K6B7cDnFUnhYdK1jQuWoGG0I61A0VbLRMartCR1rZUSrGO0XtTR5ifcYj/AHTitJoxmozGO+P8/jWiolctuh9o/sK+BrXx18TL+58Rwrf2GnaW7tb3a+bEZZnVEyrZGQNxH0r9ZIv2fPgzfEPdeGdIOTyVgCf+g4r5V/4J1+BmsPhvqvjGVDv1TUhbxMR1itV5/De5/Kv0vtLHaBu9K9CjG0dTWKsjw+2/Zb+AU7b5PC+nc+hlH8nFdbpn7Jv7PBxJJ4T0xvTcZSPyMmK9tsLEkjjiu306zy4BHA61qUec+Hv2a/gJppQ2fg3w6HH8T2cch/Nw1fTPhPw3oXhy2Gn+HrG0sLcHd5FjAkEeTwTtjCjOPbNZ2mWhODjAFeh6XZkLk9ScYoA6nS4sD+td/pcBOAPpXO6ZZsFA/CvQNLtDxj6UAdXpEGWXHavUtHhxge2PxNcZpNoAwz6Zr07SbYjGfqaAO30mLBXrxzXo2mx4Cj8a43S4Dx+Veg6fH3HpQB0VsuBmtmIYAFZdunAHqa2IxzQBLRRRQAUUUUAFFFFABRRRQAUUUUAf/9L+/iiiigAooooAK/nn/wCCs13q/wAQvjx4f8Dszf2b4c0YzxQ87Tfai2ZpCOhKwxxKp7Bn9SK/oYr8Wf8AgoNoFovxusdUdFzcaLGWbuSjsn8gK/m/6VWZYjDcJTdB2UqkIy/w6u33pfI/VfBrD06mdx9otoya9dF+TZ+eHwN+Htnp/i2w+0oo80T2yFgMeZPBJFGTn0dhz2r0u1WwttHg0D7tyLqWdVPUoY40bHupUZ+tcYur3d1qzaD4WVDPb7Wu7twTFa7uVBAILSkchARgckjiqP8AZfjPT9Xs7XVEa5ktL8Xej6wFxHdRS/JcWV2F4ilZGPlufkYhTkMCD/mLHHznS9jt8Tb7p8unycU++p/XEsPH2ntH5fhf/M7rXdE8V3NlHJ4SMC3Md3DJKLqYwReUSQxdhyducgDk4wK9y0XwLqniLw5a6X/bFjfS6dHPM6yy+RuBw7lUfC5zu4znGBk11L/Ba+1K10m81RRBaiYavM8uRh0keOJWXPzFAmQo5LdPWvT9O+H2na8vlWN/plpIXaKGyv5GWdwo3bsBWB3ZJ4PXIHFfTZJwbjZS5atLSS2vyyknZ3TeltraPXvrbwsxz/DqN4T262uk9V0+f9b6/wCxGsHh74x3SowjOqaO1vKo4EhgcPHkdyu5sHsCa/XCvwx+A/i6WD9o7wlpOnDc99qcluQv/PJbeWaQ/QLHk1+51f6AfRJxU5cN1MO1pCrJL5xjJ2+b/E/m3xoopZpCr1lBN/JtfofjR8Z/+Chn7RnxN/aS1/8AZE/4JxeCNE8Xa74M2RePPHHjC6ktfDeiXMuQLQCAiWedSCGCtkMrKEYIzL7D+zl4y/4Ku6f8XdO8IftZeD/hXf8AhG9iuTd+LvAep3cM+nyxRM8Ky2N7l5VlcCMeWBtzuY9q+Hv+CN3i3w38Fvj5+0T+yR8V7qDTPiM3xa1LxXDb6i4iuNa0q/ANvcWxfBnUAeZhckLKGxgnHS/Fz4jftz/s2f8ABRD4PfDDxd8X4PFfgz4reKtfVvDCeHbCwfTdOs4vOgtjcoHmlwJVUSZQnyyTnJr+jKdZtKrJve1lay1tZn4jCo7Kcm9/LTXY/e1p4VxudRubYuSOW9B7+1RfbrL7X9g86Lz9nmeTvHmbf723rj3r+TT/AIJ2fs16N4s/Z7+KP7bfiy88S+I/FXww+IfjfU/htoTapdJpmn32lg3ayfZI3CTyTzMocShhsRVAHNbf7OP7FH7O/wAYf+Cal/8A8FCPiH438Sv8WdW8N634q1X4nL4huYp9L1KLzwbMwrKIBCu1Y5IJEJcMQMAoBcMwnJJqO6vv0+4qOLk0rR89+n3H9Wsk0MULXErqsaqWZ2ICgDqSTwAK/K/9of8AaY+MHg7/AIKT/Aj4CeA9WgHhLxtoHiu+1zTfJgkS9n02zaW0P2go0sarIAT5bDPfNfhb8H3vP2i/hl+xT+xN8X/EGraL8NfGnhfxFr3iSO0vpLN9f1DTry5+yabLchg5UkKNgbJMgx8wQj6w1f8AZb+Cn7JH/BZD4A/DT4E6jqMOjzeGvFupHwbe6lPqMWiySadcKZrb7Q8ksMd5tyYy20tEWXGTWc8dKcU4qyvHr3s/u1/4BEsTKSTS0uuvofvD+yn4j/af8SfCb+1v2vtD8N+HPFw1W+jbT/C9213YjT0kP2WQyM74dk+8N3TBIUkqPkT9ub9pr4q/Cb9pX9mvwL8K9ZhttE+IPxFn0HxTDHDBcre2SRRsI1kdWaPDE/NGVb3r+d34Q+L/ABV43/ZE+Af7LXijxPq/h7wN8U/j74t0jx3rNpePbTz2lncxNb6cbtjmNLlpWGM4JQcEAg/b/wC1B+xp+z3+xh+3l+yn4a/Z6vNS0uz1b4kNd3Xge61W41C2SSCONBqcMd1JLJC8mfKlKsFk+XjKms/r0p0vdX8t3fXW3l/kT9Zk4Ll8tb662P6ibnULCyeOO8nhhaVtkSyuql29FBIyfYVbr+YD9jr9k74K/wDBUBvi/wDtDftu6lrmteMNM+Imt+FbPR01q60+PwbpumkC1W2ghkRYmxuPmSKVYoTgneT99/8ABEz4s/Eb4nfsm6xo/jzW7zxTaeDfiDrngvwv4qv2Ms+q6Jprx/ZZnmOfN2hygfJ+UAZOK7qGNc5JNaO9te3c6aWI5mtNHsfsJRRRXedQUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAROuDms6eLH07VrEZGKrumQVNAHK3dvuGa5DUbIOp4r0WaLGQawLy27igDxDW9Hhu4JLW6jSWKRGjkjkAZHRhgqwIwQR1B4r+dD9vT/gj3Y69NefFX9k+3hsr9i9xf8Ag0kR21w3VmsGbAikP/PFiEP8JU8H+m/UbAMDxXnuq6X1BH/16zq0ozVpEyinuf5xviLw7rvhXWrnw34nsrrT9Qs5TBeWN7E0M8Mi9VdGAIP4Vzskea/uK/a8/YO+CP7V+kk+NrI2GuwxlLDxNpqql9Dj7qyHGJ4gf4JM/wCyVPNfyt/tXfsC/Hb9lHUJb3xNZnV/DnmFbbxNpaM9qQT8ouE5a3f2f5Sfusa8qrg3HYwdGx8ESw4rOliIrpHjB9xVGWHuKx9mTyHNSR1SeEdq6KSAGqEkBHSl7EXIYBSSNvMjLKwP3lODWhB4k1i0wHcSr/00Gf1GD+dPeP1qpJCPwNT7JhyHRQ+MrduLuF1P96Mhv0OK1IvEOiz9Jgv++Cv8+P1rzuS29KqvDTUbBy2PXlkt5huhdHHqpB/kaieMHjiuS+Hfw8174m+N9O8D+GEL3mo3KwIRnai/xyNjoqKCzH0Ff0U+Hv2bvhD4f8H6f4Qn0HS75LC1S3N1d20bzTMOXkdyNxLMSevHQV20KTnqaxVz+fl4KqSW/rX73al+yP8AAPUiXk8O20RPe1lmhx9AkgH6Vwt7+w18B7nPk2uqW+f+eV65/wDQw1dP1Zov2Z+ID29VXgPTFftU/wDwT7+Dlwf3V3ryfS5ib+cNTW3/AATq+D7tiW/8QMPQTQj/ANo1aoj5D8RXt89qrm1YkKASScY96/efTv8AgnF8CNwNzJ4gm9nvEUf+OxA/rXqWgf8ABP8A/Zq0ueK7/sS5uJIXV1a6vriQblORkBwvX2xWiplKNjo/2c/hx/wgfwZ8N+F2TZJFpsVxcgjB865HnSZ9wz4/Cvom20sZ5Ga7Cz0QKoCqAAMDA6V0Vrop4OK0GctZaYxwSMCu103SzgYHFbdlowOBgmu307RScDbigDN0zTCxAA4r0XTNKyRx7Vb0vRcYVR+Jr0fTNG2gcUAUNP0z7oA4rvtM008ZHpV3TtGxyRXd6fpGCMCgCLStP5yRmvRdMsyMcc1Bp2mhQDj6V2dhYlccc/yoA1dNt9uPau2sosKKx7K2xgdhXUW8eKANG3Xn6CtFBxmqsK4XPrVxRgUALRRRQAUUUUAFFFFABRRRQAUUUUAf/9P+/iiiigAooooAK/Lj/gpl8LvEOpeEtL+Mfhjz2XQxLYa2tuxV0srkgxXRwDlLecDzPlOI3ZsYU1+o9QXVra31rJZXsaTQzRtFLFKoZHRxhlZTwQQcEHrXxniDwXh+IMorZViHZTWj/lktYy+T37q66nvcM59UyzHU8bS15Xqu6ejXzX+Z/LP8HPBHjfTbKPT766jiklZrq8lvLZJY5riY7pJEuIJRuVj93cgIXA7V91+FtG8P6JAs+tXNteyDpDawuyk+haXai/k/0r68+I/7G+h6fbS6r8Kw1tty66UQXiA5O2L+JQOw5x6V+dfjbWtR8E30mleIQLKeNiCl0whPHtJtr/LLijw9zXhfGWzbDptv3ZLWD81a1/SSv3R/XuVcT4TOaN8HUa7raS9f81959gDx7oGraQNN8VxMFt2Z9PuLFV326sADGUOA6HAPXIPNfO/jr4i6Tou59Ia6lmQkwkxiMZxjklvQ9q+bbn4v20s66fp9yt1cyHZFa2ObuZ27BYoBI5J7AKa9/wDhN+xT8bP2gdSh1H4oRX/gvwiWD3K3P7nXdSj7www8myjYcNLL+9wfkjUnePfyjK884qqQwuDpOUtnO1rL+9K1kktutrJdEefiq+X5PF1sRNJb8t73fkt9fu6vqd9/wTi+Guo/ED4nal+0HqcZ/sbw/bT+HfDsx+5d6jMVXULiI8ZS3RRbhuhd5QD8tftTXN+DvB/hj4f+FrDwT4LsbfTdJ0u1SzsLG1XZFDDGMKqj+ZPJOSSSSa6Sv9KPDjgejw9lFLLKTu1rJ/zSe7/ReSR/K/FfEM80x08XNWT0S7JbL9X5tnxT+1V/wTy/ZH/bOubPWPjz4UhvtY05PK0/xFptxPpurQRg5CLd2jxyMgOSquWVSSQASc+R/AL/AIJFfsPfs6fEWw+Lvg7w/q+peJ9KYyaXrfibWtQ1We0dlZC0KzzGJW2sRnZ345r9MqK+yeFpuXO4q/ofLuhBvma1Pnz9nj9l74N/steC9U+H/wAHdPnstK1nX7/xLqFveXU16ZL/AFIqbl907OwVtowgO0dgK+Hz/wAETv8Agn0fHuoeNE8M6qlnqd1Lf3XhKLWb2Pw4buUHM401ZBFuUnci/cQgFVGAK/WOiiWGptJOK02B0INJNbH58eOP+CXn7G3xD/Zt8M/sr+JPDt0/hnwYzSeE7iLULlNW0qV5GkaS31DeZwzM53BmZW4yDgYyfgl/wSm/Yz+APxC8PfFzwLousS+K/Dn282viPVtZvb6/ujqMBtpTeSSykThYiViVhtjySgBJJ/R2il9UpXUuVX9A9hC97H593X/BL39jC/8A2aZv2S9R8Ly3Pg19aufEcFvc31zLeWmp3Tl3ura8aQzxSZY42tjBKkFSRXC/Cr/gkB+xH8I/Ffhv4haJo+v6j4l8K63Fr2leI9d1y+vtQE8CFIYpJJJdr28YJKwbfLyckE81+n1FH1SldPlWnkHsIb2R+Y/x8/4JD/sT/tE/E6/+LnizR9b0nWdawPEb+FdYu9Hg1kDj/T4Ld1SUsOGYBWb+Ik8196fCf4S/Dj4GfD3S/hT8JNIs9C8PaNbi107TLFdsUSZJJycszMxLO7EszEliSc16JRVwoQi3KKs2VGlFO6QUUUVqWFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABTWXcKdRQBTkj3jHesuaHPB/Kt1lzyKqSxBxkdf50AcbdWo544rkdR08MDkV6ZNCGGCKwbu0/KgDxLU9LJzkZrzHxF4bstRs5rC/giuLedGimgnQSRyI3BV0bIZT3BGK+kL/TwQeK4TUtK5JUUAfz3/tU/8Eefhd8RJbnxZ8BbiPwhrEm6VtLdTJo87nn5UGXtif8ApnuQf3BX89Xxx/Zt+M/7O2vHQPi1od1ppZyttfAebY3WO8NymUbP93IYd1Ff3zalo4bJUfUV5B428AeHPGWi3Hhvxbp9nqen3KlLiyv4UnhkU9mRwR+OM1jOhFkuCP8AP9khzVKSDNf02/tD/wDBHD4XeLXuNd+BWozeFb5suNKvN13pjMecIT++hB9i4HZa/EH45/sb/tD/ALPc8j/ETw7dCwRsLrWmj7Xp7jsfOjB2Z9JAh9qwlh7EOB8hSW/aqLwY6V0zRKwyvI9qpvCOvap9mTys5t4Wqq8HqK6R4Aa+4v2F/wBlS7+PvxCHiLxFA3/CL6DKk2oM4IW7uB80dqp77usnonuRSVO7sNRPsn/gn5+zIfAHg4/F7xbb7dX123A0+ORfmtbBuQ2D0afhv9zHqa/Q2XTFJ+WvVpNIESCJI1VVUKqqAAoHAAA4AA6Cs99JQ9RzXdCCirI1SseXPpLZwBx7U5NK5+Yda9IGjDjb/KrMWi88qSTVDPP4dHDcKK6Gz0TOAoru7TQN2MD866yx8PE4AX9KAOFstBY4AX611droLEj5a7+x8O8AAfjXW2vh8quMc+9AHmsGhYwNtb9toXT5Pzr0q10BgBgfpW9baEw6LnNAHn9hobFgdtdrp+gkkEj8O1dlZ6E3HH6V2On6EeMigDnNM0NRjI+legaZoZYjiuh0zQ8YwP0rvrDRVGOKAOcsNFCgYFdfZ6VjoK6W00rpkZroINNAABHWgDDs9N2gYH410VrZ7eAK1orHHWtKK2C8AUARW1vtHFa8MecL+dNii7CtBECjAoAkVcmpqaowKdQAUUUUAFFFFABRRRQAUUUUAFFFFAH/1P7+KKKKACiiigAooooAKoX2l6ZqahNStoLgDoJ41kA/76Bq/RUygpK0kNSa1Rl2Gh6LpTF9Ls7W2ZuGNvEkZP12gVqUUURgoq0UEpNu7CiiiqEFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUxlzyKfRQBRki3cjr/ADrMmhBreZM8iqskQf60AchdWnp0rl73TwQTivR5Yc8EVjXNoDyooA8e1DSg2Tjn1rhdR0jOQy817zd2AbJA5rlL7TAQRj8KAPnXUdF65GfoK4XVNCjmjeGZFdHBV1YZVgeoYHII/SvpK/0bqFH4VxV/ow5G2gD8k/jh/wAE2f2X/jFNNql1oR0LU5cs2peG2FmzMf4nhAMDnPXMeT61+Tnxc/4I5/F3w7JNe/CLXNM8Q2wOY7PUv+Jfe49Nx3QMR6lkz6Cv6nL7ROpUflXH3ui9TtosB/GRpn7Av7Ud38RdO+Hmt+E9U0xr+5ELapPH5lhDGOXla4iLx4VcnG7J6AZNf0mfCb4I+FPgl8PNO+G/g+HZa2EIDzEfvLiduZZ5PV3bn2GAOAK+w7rR2wcA++K5y50c9NuaSQHicukkfdqi2kMf4f0r2GXRlPUGqo0QE8A0wPKk0Uk42VrWuhscAL+lelw6AxOdp/GuhsvDxJG4Z9hQB53ZeHBkbhz7V2mn+HGGAq/416Dp/h5QBwPwruLDw/wCFxQB5xZeHQgAK5/Cumt/DwbDY/OvUbLw+OPl/Eiuit9BBHK/0oA8qt/D3AGPetm20HnO3+teopoaAcDk1qxaFtwAD+VAHnFrofI4rrLLRgMEgV2Nvo5HoK3rXTCBwv4mgDEsNKAHIrsLPTQABj8KvWunkfw10Vva7QDigCnb2WBzWrFaqD0HH+fSrscB25C1dhhIG4igCkkPoCasJAe/H0q6Iz/n/wDXTgg7/wCf1oAhVAOFFTquOacAB0ooAKKKKACiiigAooooAKKKKACiiigAooooA//V/v4ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAprKDTqKAKskYbg9aoSw44P51sEA9ahZOx5FAHNT2obtWFdWIPDCu2kg7rz/OqEsAYYIoA80u9NyDxXL3ulAg/LmvXZ7L0rCuNPB6DBoA8RvNF6lRXJXujf3l/GverrTOvFc5d6VnOR+IoA+fbzRfQZrmrnRDzla+gLvRQei/lXO3Gi9eM9eooA8Jl0U/3TUS6Id3A/SvY5dEAPKH8P8mmJoqk/dNAHl9voRyNw/OupsNA5GVx9a7220XB+VQPpXT2OigEfLzQByOn6DyML+NdvY6EOmK6iy0lVxkfhXWWum8DjA9KAOVttFUc4x9BWxDo6gfd/Ouxh04DtWgtgPu0AcbHpQ+8QB6dKtLpvr+YrshZKB0/z+VOW1UdqAOXi08DoM1qw2XrWytuB2qdIfQZ+goApxQBeBWlFFnjt61IkGPvflVpU7DpQAKueB0qekAAGBS0AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB/9b+/iiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAjZO4qu8Qb2NXKQgHrQBkSQY6j8az5rUMOR+NdGUPaqrwK33ePagDkZ7HrxWLPpwOcCu9khxwRVGW1U9RQB5pc6YO4/EVjTaSD2/A16nLY+lZsunr3FAHlcmkf7P5U1NHBPKfnXpL6appo0xc96AOIg0dR149hW9aaZt+6PxNdFFp4B6ZrVgs/UUAZlpp5GMAGuggtAoGRVmKHb2rShizyen86AK0cIAzg1cjgXbk5yauIufpUtAFHyV9/wDP4UohT3q7RQBVESj+H/P61IIz9KmooAYEHf8Az+tPoooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA/9f+/iiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACkKg0tFAEJjP1qu8KnpxV6kIB60AZL25Hb8qrNADW0wAOBTCqt1FAGE1qp6imi1APT/AD+VbhiQ9qb5Ke9AGStuB2qwkPOBz9K0BEg7U8ADpQBAkGPvflVpUz9KVAD1qWgAAxxRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB/9k="' + 'data:image/jpeg;base64,/9j/4QAWRXhpZgAATU0AKgAAAAgAAAAAAAD/7QA4UGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAAA4QklNBCUAAAAAABDUHYzZjwCyBOmACZjs+EJ+/+IH2ElDQ19QUk9GSUxFAAEBAAAHyGFwcGwCIAAAbW50clJHQiBYWVogB9kAAgAZAAsAGgALYWNzcEFQUEwAAAAAYXBwbAAAAAAAAAAAAAAAAAAAAAAAAPbWAAEAAAAA0y1hcHBsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALZGVzYwAAAQgAAABvZHNjbQAAAXgAAAWKY3BydAAABwQAAAA4d3RwdAAABzwAAAAUclhZWgAAB1AAAAAUZ1hZWgAAB2QAAAAUYlhZWgAAB3gAAAAUclRSQwAAB4wAAAAOY2hhZAAAB5wAAAAsYlRSQwAAB4wAAAAOZ1RSQwAAB4wAAAAOZGVzYwAAAAAAAAAUR2VuZXJpYyBSR0IgUHJvZmlsZQAAAAAAAAAAAAAAFEdlbmVyaWMgUkdCIFByb2ZpbGUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG1sdWMAAAAAAAAAHwAAAAxza1NLAAAAKAAAAYRkYURLAAAAJAAAAaxjYUVTAAAAJAAAAdB2aVZOAAAAJAAAAfRwdEJSAAAAJgAAAhh1a1VBAAAAKgAAAj5mckZVAAAAKAAAAmhodUhVAAAAKAAAApB6aFRXAAAAEgAAArhrb0tSAAAAFgAAAspuYk5PAAAAJgAAAuBjc0NaAAAAIgAAAwZoZUlMAAAAHgAAAyhyb1JPAAAAJAAAA0ZkZURFAAAALAAAA2ppdElUAAAAKAAAA5ZzdlNFAAAAJgAAAuB6aENOAAAAEgAAA75qYUpQAAAAGgAAA9BlbEdSAAAAIgAAA+pwdFBPAAAAJgAABAxubE5MAAAAKAAABDJlc0VTAAAAJgAABAx0aFRIAAAAJAAABFp0clRSAAAAIgAABH5maUZJAAAAKAAABKBockhSAAAAKAAABMhwbFBMAAAALAAABPBydVJVAAAAIgAABRxlblVTAAAAJgAABT5hckVHAAAAJgAABWQAVgFhAGUAbwBiAGUAYwBuAP0AIABSAEcAQgAgAHAAcgBvAGYAaQBsAEcAZQBuAGUAcgBlAGwAIABSAEcAQgAtAHAAcgBvAGYAaQBsAFAAZQByAGYAaQBsACAAUgBHAEIAIABnAGUAbgDoAHIAaQBjAEMepQB1ACAAaADsAG4AaAAgAFIARwBCACAAQwBoAHUAbgBnAFAAZQByAGYAaQBsACAAUgBHAEIAIABHAGUAbgDpAHIAaQBjAG8EFwQwBDMEMAQ7BEwEPQQ4BDkAIAQ/BEAEPgREBDAEOQQ7ACAAUgBHAEIAUAByAG8AZgBpAGwAIABnAOkAbgDpAHIAaQBxAHUAZQAgAFIAVgBCAMEAbAB0AGEAbADhAG4AbwBzACAAUgBHAEIAIABwAHIAbwBmAGkAbJAadSgAUgBHAEKCcl9pY8+P8Md8vBgAIABSAEcAQgAg1QS4XNMMx3wARwBlAG4AZQByAGkAcwBrACAAUgBHAEIALQBwAHIAbwBmAGkAbABPAGIAZQBjAG4A/QAgAFIARwBCACAAcAByAG8AZgBpAGwF5AXoBdUF5AXZBdwAIABSAEcAQgAgBdsF3AXcBdkAUAByAG8AZgBpAGwAIABSAEcAQgAgAGcAZQBuAGUAcgBpAGMAQQBsAGwAZwBlAG0AZQBpAG4AZQBzACAAUgBHAEIALQBQAHIAbwBmAGkAbABQAHIAbwBmAGkAbABvACAAUgBHAEIAIABnAGUAbgBlAHIAaQBjAG9mbpAaAFIARwBCY8+P8GWHTvZOAIIsACAAUgBHAEIAIDDXMO0w1TChMKQw6wOTA7UDvQO5A7oDzAAgA8ADwQO/A8YDrwO7ACAAUgBHAEIAUABlAHIAZgBpAGwAIABSAEcAQgAgAGcAZQBuAOkAcgBpAGMAbwBBAGwAZwBlAG0AZQBlAG4AIABSAEcAQgAtAHAAcgBvAGYAaQBlAGwOQg4bDiMORA4fDiUOTAAgAFIARwBCACAOFw4xDkgOJw5EDhsARwBlAG4AZQBsACAAUgBHAEIAIABQAHIAbwBmAGkAbABpAFkAbABlAGkAbgBlAG4AIABSAEcAQgAtAHAAcgBvAGYAaQBpAGwAaQBHAGUAbgBlAHIAaQENAGsAaQAgAFIARwBCACAAcAByAG8AZgBpAGwAVQBuAGkAdwBlAHIAcwBhAGwAbgB5ACAAcAByAG8AZgBpAGwAIABSAEcAQgQeBDEESQQ4BDkAIAQ/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oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAjZO4qu8Qb2NXKQgHrQBkSQY6j8az5rUMOR+NdGUPaqrwK33ePagDkZ7HrxWLPpwOcCu9khxwRVGW1U9RQB5pc6YO4/EVjTaSD2/A16nLY+lZsunr3FAHlcmkf7P5U1NHBPKfnXpL6appo0xc96AOIg0dR149hW9aaZt+6PxNdFFp4B6ZrVgs/UUAZlpp5GMAGuggtAoGRVmKHb2rShizyen86AK0cIAzg1cjgXbk5yauIufpUtAFHyV9/wDP4UohT3q7RQBVESj+H/P61IIz9KmooAYEHf8Az+tPoooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA/9f+/iiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACkKg0tFAEJjP1qu8KnpxV6kIB60AZL25Hb8qrNADW0wAOBTCqt1FAGE1qp6imi1APT/AD+VbhiQ9qb5Ke9AGStuB2qwkPOBz9K0BEg7U8ADpQBAkGPvflVpUz9KVAD1qWgAAxxRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB/9k=' beforeAll(async () => { testEnv = await testEnvironment(logger, localization) From 21799c99501304b4deebea1c0ee5c8e85c647cf1 Mon Sep 17 00:00:00 2001 From: mahula Date: Mon, 15 May 2023 22:47:07 +0200 Subject: [PATCH 052/123] fix unit test --- backend/src/emails/sendEmailVariants.test.ts | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/backend/src/emails/sendEmailVariants.test.ts b/backend/src/emails/sendEmailVariants.test.ts index 2b590324d..61edcc7f0 100644 --- a/backend/src/emails/sendEmailVariants.test.ts +++ b/backend/src/emails/sendEmailVariants.test.ts @@ -159,7 +159,7 @@ describe('sendEmailVariants', () => { expect(result.originalMessage.html).toContain( 'If you have any further questions, please contact our support', ) - expect(result.originalMessage.html).toContain('support@supportmail.com') + expect(result.originalMessage.html).toContain(CONFIG.COMMUNITY_SUPPORT_MAIL) expect(result.originalMessage.html).toContain( 'src="https://gdd.gradido.net/img/brand/green.png"', ) @@ -287,7 +287,7 @@ describe('sendEmailVariants', () => { expect(result.originalMessage.html).toContain( 'If you have any further questions, please contact our support', ) - expect(result.originalMessage.html).toContain('support@supportmail.com') + expect(result.originalMessage.html).toContain(CONFIG.COMMUNITY_SUPPORT_MAIL) expect(result.originalMessage.html).toContain( 'src="https://gdd.gradido.net/img/brand/green.png"', ) @@ -414,7 +414,7 @@ describe('sendEmailVariants', () => { expect(result.originalMessage.html).toContain( 'If you have any further questions, please contact our support', ) - expect(result.originalMessage.html).toContain('support@supportmail.com') + expect(result.originalMessage.html).toContain(CONFIG.COMMUNITY_SUPPORT_MAIL) expect(result.originalMessage.html).toContain( 'src="https://gdd.gradido.net/img/brand/green.png"', ) @@ -541,7 +541,7 @@ describe('sendEmailVariants', () => { expect(result.originalMessage.html).toContain( 'If you have any further questions, please contact our support', ) - expect(result.originalMessage.html).toContain('support@supportmail.com') + expect(result.originalMessage.html).toContain(CONFIG.COMMUNITY_SUPPORT_MAIL) expect(result.originalMessage.html).toContain( 'src="https://gdd.gradido.net/img/brand/green.png"', ) @@ -661,7 +661,7 @@ describe('sendEmailVariants', () => { expect(result.originalMessage.html).toContain( 'If you have any further questions, please contact our support', ) - expect(result.originalMessage.html).toContain('support@supportmail.com') + expect(result.originalMessage.html).toContain(CONFIG.COMMUNITY_SUPPORT_MAIL) expect(result.originalMessage.html).toContain( 'src="https://gdd.gradido.net/img/brand/green.png"', ) @@ -785,7 +785,7 @@ describe('sendEmailVariants', () => { expect(result.originalMessage.html).toContain( 'If you have any further questions, please contact our support', ) - expect(result.originalMessage.html).toContain('support@supportmail.com') + expect(result.originalMessage.html).toContain(CONFIG.COMMUNITY_SUPPORT_MAIL) expect(result.originalMessage.html).toContain( 'src="https://gdd.gradido.net/img/brand/green.png"', ) @@ -911,7 +911,7 @@ describe('sendEmailVariants', () => { expect(result.originalMessage.html).toContain( 'If you have any further questions, please contact our support', ) - expect(result.originalMessage.html).toContain('support@supportmail.com') + expect(result.originalMessage.html).toContain(CONFIG.COMMUNITY_SUPPORT_MAIL) expect(result.originalMessage.html).toContain( 'src="https://gdd.gradido.net/img/brand/green.png"', ) @@ -1037,7 +1037,7 @@ describe('sendEmailVariants', () => { expect(result.originalMessage.html).toContain( 'If you have any further questions, please contact our support', ) - expect(result.originalMessage.html).toContain('support@supportmail.com') + expect(result.originalMessage.html).toContain(CONFIG.COMMUNITY_SUPPORT_MAIL) expect(result.originalMessage.html).toContain( 'src="https://gdd.gradido.net/img/brand/green.png"', ) @@ -1159,7 +1159,7 @@ describe('sendEmailVariants', () => { expect(result.originalMessage.html).toContain( 'If you have any further questions, please contact our support', ) - expect(result.originalMessage.html).toContain('support@supportmail.com') + expect(result.originalMessage.html).toContain(CONFIG.COMMUNITY_SUPPORT_MAIL) expect(result.originalMessage.html).toContain( 'src="https://gdd.gradido.net/img/brand/green.png"', ) From 6e55acef7f88c35c189963ee981a1da0d0594db2 Mon Sep 17 00:00:00 2001 From: ogerly Date: Wed, 17 May 2023 08:36:02 +0200 Subject: [PATCH 053/123] superfluous code removed, code optimised --- .../templates/accountActivation/html.pug | 21 +- .../accountMultiRegistration/html.pug | 29 +- .../addedContributionMessage/html.pug | 21 +- .../templates/contributionConfirmed/html.pug | 11 +- .../templates/contributionDeleted/html.pug | 11 +- .../templates/contributionDenied/html.pug | 11 +- .../includes/contributionDetailsCTA.pug | 7 +- .../src/emails/templates/includes/footer.pug | 43 +- .../emails/templates/includes/greeting.pug | 11 +- .../src/emails/templates/includes/header.pug | 2 +- .../templates/includes/requestNewLink.pug | 4 +- .../src/emails/templates/includes/webflow.css | 587 ++++-------------- backend/src/emails/templates/layout.pug | 11 +- .../emails/templates/resetPassword/html.pug | 21 +- .../transactionLinkRedeemed/html.pug | 19 +- .../templates/transactionReceived/html.pug | 19 +- 16 files changed, 258 insertions(+), 570 deletions(-) diff --git a/backend/src/emails/templates/accountActivation/html.pug b/backend/src/emails/templates/accountActivation/html.pug index 95e11d311..114996266 100644 --- a/backend/src/emails/templates/accountActivation/html.pug +++ b/backend/src/emails/templates/accountActivation/html.pug @@ -1,16 +1,19 @@ extend ../layout.pug block content - .w-container(class="wrapper_head") - h1.headline.h1= t('emails.accountActivation.title') - .text-block - include ../includes/salutation.pug - p= t('emails.accountActivation.emailRegistered') - .content.w-container - h2.heading= t('emails.general.completeRegistration') + h2= t('emails.accountActivation.title') + .text-block + include ../includes/salutation.pug + p= t('emails.accountActivation.emailRegistered') + .content + h2= t('emails.general.completeRegistration') div(class="p_content")= t('emails.accountActivation.pleaseClickLink') - a.button-3.w-button(href=activationLink) #{t('emails.accountActivation.activateAccount')} + a.button-3(href=activationLink) #{t('emails.accountActivation.activateAccount')} div(class="p_content")= t('emails.general.orCopyLink') - a(href=activationLink) #{activationLink} + + a.clink(href=activationLink) #{activationLink} + br + br + br include ../includes/requestNewLink.pug diff --git a/backend/src/emails/templates/accountMultiRegistration/html.pug b/backend/src/emails/templates/accountMultiRegistration/html.pug index e09e1f82c..4d568261b 100644 --- a/backend/src/emails/templates/accountMultiRegistration/html.pug +++ b/backend/src/emails/templates/accountMultiRegistration/html.pug @@ -1,21 +1,22 @@ extend ../layout.pug block content - .w-container(class="wrapper_head") - h1.headline.h1= t('emails.accountMultiRegistration.title') - .text-block - include ../includes/salutation.pug - p - = t('emails.accountMultiRegistration.emailReused') - br - = t('emails.accountMultiRegistration.emailExists') - .content.w-container - h2.heading= t('emails.resetPassword.title') + h2= t('emails.accountMultiRegistration.title') + .text-block + include ../includes/salutation.pug + p + = t('emails.accountMultiRegistration.emailReused') + br + = t('emails.accountMultiRegistration.emailExists') + .content + h2= t('emails.resetPassword.title') div(class="p_content")= t('emails.accountMultiRegistration.onForgottenPasswordClickLink') - a.button-3.w-button(href=resendLink) #{t('emails.general.reset')} + a.button-3(href=resendLink) #{t('emails.general.reset')} div(class="p_content")= t('emails.general.orCopyLink') - a(href=resendLink) #{resendLink} - h2.heading-2= t('emails.accountMultiRegistration.contactSupport') + a.clink(href=resendLink) #{resendLink} + + h2(style="color: red")= t('emails.accountMultiRegistration.contactSupport') div(class="p_content")= t('emails.accountMultiRegistration.ifYouAreNotTheOne') - a(href='mailto:' + supportEmail)= supportEmail + + a.clink(href='mailto:' + supportEmail)= supportEmail diff --git a/backend/src/emails/templates/addedContributionMessage/html.pug b/backend/src/emails/templates/addedContributionMessage/html.pug index aa686f25c..361e5db16 100644 --- a/backend/src/emails/templates/addedContributionMessage/html.pug +++ b/backend/src/emails/templates/addedContributionMessage/html.pug @@ -1,14 +1,17 @@ extend ../layout.pug block content - .w-container(class="wrapper_head") - h1.headline.h1= t('emails.addedContributionMessage.title') - .text-block - include ../includes/salutation.pug - p= t('emails.addedContributionMessage.commonGoodContributionMessage', { senderFirstName, senderLastName, contributionMemo }) - .content.w-container - h2.heading= t('emails.addedContributionMessage.readMessage') + h2= t('emails.addedContributionMessage.title') + .text-block + include ../includes/salutation.pug + p= t('emails.addedContributionMessage.commonGoodContributionMessage', { senderFirstName, senderLastName, contributionMemo }) + .content + h2= t('emails.addedContributionMessage.readMessage') div(class="p_content")= t('emails.addedContributionMessage.toSeeAndAnswerMessage') - a.button-3.w-button(href="https://gdd.gradido.net/community/contribution") #{t('emails.general.toAccount')} - + + a.clink(href="https://gdd.gradido.net/community/contribution") #{t('emails.general.toAccount')} + br + br + br + include ../includes/doNotReply.pug diff --git a/backend/src/emails/templates/contributionConfirmed/html.pug b/backend/src/emails/templates/contributionConfirmed/html.pug index eebc280d5..310993d97 100644 --- a/backend/src/emails/templates/contributionConfirmed/html.pug +++ b/backend/src/emails/templates/contributionConfirmed/html.pug @@ -1,11 +1,10 @@ extend ../layout.pug block content - .w-container(class="wrapper_head") - h1.headline.h1= t('emails.contributionConfirmed.title') - .text-block - include ../includes/salutation.pug - p= t('emails.contributionConfirmed.commonGoodContributionConfirmed', { contributionMemo, senderFirstName, senderLastName, amountGDD: contributionAmount }) - .content.w-container + h2= t('emails.contributionConfirmed.title') + .text-block + include ../includes/salutation.pug + p= t('emails.contributionConfirmed.commonGoodContributionConfirmed', { contributionMemo, senderFirstName, senderLastName, amountGDD: contributionAmount }) + .content include ../includes/contributionDetailsCTA.pug include ../includes/doNotReply.pug \ No newline at end of file diff --git a/backend/src/emails/templates/contributionDeleted/html.pug b/backend/src/emails/templates/contributionDeleted/html.pug index e22b59677..daf54227d 100644 --- a/backend/src/emails/templates/contributionDeleted/html.pug +++ b/backend/src/emails/templates/contributionDeleted/html.pug @@ -1,11 +1,10 @@ extend ../layout.pug block content - .w-container(class="wrapper_head") - h1.headline.h1= t('emails.contributionDeleted.title') - .text-block - include ../includes/salutation.pug - p= t('emails.contributionDeleted.commonGoodContributionDeleted', { contributionMemo, senderFirstName, senderLastName }) - .content.w-container + h2= t('emails.contributionDeleted.title') + .text-block + include ../includes/salutation.pug + p= t('emails.contributionDeleted.commonGoodContributionDeleted', { contributionMemo, senderFirstName, senderLastName }) + .content include ../includes/contributionDetailsCTA.pug include ../includes/doNotReply.pug diff --git a/backend/src/emails/templates/contributionDenied/html.pug b/backend/src/emails/templates/contributionDenied/html.pug index bf43182f8..d30653acd 100644 --- a/backend/src/emails/templates/contributionDenied/html.pug +++ b/backend/src/emails/templates/contributionDenied/html.pug @@ -1,11 +1,10 @@ extend ../layout.pug block content - .w-container(class="wrapper_head") - h1.headline.h1= t('emails.contributionDenied.title') - .text-block - include ../includes/salutation.pug - p= t('emails.contributionDenied.commonGoodContributionDenied', { contributionMemo, senderFirstName, senderLastName }) - .content.w-container + h2= t('emails.contributionDenied.title') + .text-block + include ../includes/salutation.pug + p= t('emails.contributionDenied.commonGoodContributionDenied', { contributionMemo, senderFirstName, senderLastName }) + .content include ../includes/contributionDetailsCTA.pug include ../includes/doNotReply.pug diff --git a/backend/src/emails/templates/includes/contributionDetailsCTA.pug b/backend/src/emails/templates/includes/contributionDetailsCTA.pug index bc54e75e3..c2209014f 100644 --- a/backend/src/emails/templates/includes/contributionDetailsCTA.pug +++ b/backend/src/emails/templates/includes/contributionDetailsCTA.pug @@ -1,6 +1,7 @@ //- -h2.heading= t('emails.general.contributionDetails') +h2= t('emails.general.contributionDetails') div(class="p_content")= t('emails.contribution.toSeeContributionsAndMessages') -a.button-3.w-button(href="https://gdd.gradido.net/community/contributions") #{t('emails.general.toAccount')} +a.button-3(href="https://gdd.gradido.net/community/contributions") #{t('emails.general.toAccount')} div(class="p_content")= t('emails.general.orCopyLink') -a(href="https://gdd.gradido.net/community/contributions") https://gdd.gradido.net/community/contributions \ No newline at end of file + +a.clink(href="https://gdd.gradido.net/community/contributions") https://gdd.gradido.net/community/contributions \ No newline at end of file diff --git a/backend/src/emails/templates/includes/footer.pug b/backend/src/emails/templates/includes/footer.pug index b6f78cd22..1966483e4 100644 --- a/backend/src/emails/templates/includes/footer.pug +++ b/backend/src/emails/templates/includes/footer.pug @@ -1,7 +1,7 @@ footer .w-container(class="footer_01") .socialmedia - a( + a.slink( target="_blank" href="https://www.facebook.com/groups/Gradido/" ) @@ -19,7 +19,7 @@ footer path( d="M16 8.049c0-4.446-3.582-8.05-8-8.05C3.58 0-.002 3.603-.002 8.05c0 4.017 2.926 7.347 6.75 7.951v-5.625h-2.03V8.05H6.75V6.275c0-2.017 1.195-3.131 3.022-3.131.876 0 1.791.157 1.791.157v1.98h-1.009c-.993 0-1.303.621-1.303 1.258v1.51h2.218l-.354 2.326H9.25V16c3.824-.604 6.75-3.934 6.75-7.951z" ) - a( + a.slink( target="_blank" href="https://twitter.com/gradido" ) @@ -37,7 +37,7 @@ footer path( d="M5.026 15c6.038 0 9.341-5.003 9.341-9.334 0-.14 0-.282-.006-.422A6.685 6.685 0 0 0 16 3.542a6.658 6.658 0 0 1-1.889.518 3.301 3.301 0 0 0 1.447-1.817 6.533 6.533 0 0 1-2.087.793A3.286 3.286 0 0 0 7.875 6.03a9.325 9.325 0 0 1-6.767-3.429 3.289 3.289 0 0 0 1.018 4.382A3.323 3.323 0 0 1 .64 6.575v.045a3.288 3.288 0 0 0 2.632 3.218 3.203 3.203 0 0 1-.865.115 3.23 3.23 0 0 1-.614-.057 3.283 3.283 0 0 0 3.067 2.277A6.588 6.588 0 0 1 .78 13.58a6.32 6.32 0 0 1-.78-.045A9.344 9.344 0 0 0 5.026 15z" ) - a( + a.slink( target="_blank" href="https://www.youtube.com/c/GradidoNet" ) @@ -55,7 +55,7 @@ footer path( d="M8.051 1.999h.089c.822.003 4.987.033 6.11.335a2.01 2.01 0 0 1 1.415 1.42c.101.38.172.883.22 1.402l.01.104.022.26.008.104c.065.914.073 1.77.074 1.957v.075c-.001.194-.01 1.108-.082 2.06l-.008.105-.009.104c-.05.572-.124 1.14-.235 1.558a2.007 2.007 0 0 1-1.415 1.42c-1.16.312-5.569.334-6.18.335h-.142c-.309 0-1.587-.006-2.927-.052l-.17-.006-.087-.004-.171-.007-.171-.007c-1.11-.049-2.167-.128-2.654-.26a2.007 2.007 0 0 1-1.415-1.419c-.111-.417-.185-.986-.235-1.558L.09 9.82l-.008-.104A31.4 31.4 0 0 1 0 7.68v-.122C.002 7.343.01 6.6.064 5.78l.007-.103.003-.052.008-.104.022-.26.01-.104c.048-.519.119-1.023.22-1.402a2.007 2.007 0 0 1 1.415-1.42c.487-.13 1.544-.21 2.654-.26l.17-.007.172-.006.086-.003.171-.007A99.788 99.788 0 0 1 7.858 2h.193zM6.4 5.209v4.818l4.157-2.408L6.4 5.209z" ) - a( + a.slink( target="_blank" href="https://t.me/GradidoGruppe" ) @@ -69,15 +69,26 @@ footer path( d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0zM8.287 5.906c-.778.324-2.334.994-4.666 2.01-.378.15-.577.298-.595.442-.03.243.275.339.69.47l.175.055c.408.133.958.288 1.243.294.26.006.549-.1.868-.32 2.179-1.471 3.304-2.214 3.374-2.23.05-.012.12-.026.166.016.047.041.042.12.037.141-.03.129-1.227 1.241-1.846 1.817-.193.18-.33.307-.358.336a8.154 8.154 0 0 1-.188.186c-.38.366-.664.64.015 1.088.327.216.589.393.85.571.284.194.568.387.936.629.093.06.183.125.27.187.331.236.63.448.997.414.214-.02.435-.22.547-.82.265-1.417.786-4.486.906-5.751a1.426 1.426 0 0 0-.013-.315.337.337 0 0 0-.114-.217.526.526 0 0 0-.31-.093c-.3.005-.763.166-2.984 1.09z" ) - .line - .wf-section(class="footer_02") - .container-2.w-container + .line + .footer div(class="footer_p1")= t("emails.footer.contactOurSupport") div(class="footer_p2")= t("emails.footer.supportEmail") - img.image-2( + img.image( alt="Gradido Logo" src="https://gdd.gradido.net/img/brand/green.png" ) + div + a( + class="terms_of_use" + href="https://gradido.net/de/impressum/" + target="_blank" + )= t("emails.footer.imprint") + br + a( + class="terms_of_use" + href="https://gradido.net/de/datenschutz/" + target="_blank" + )= t("emails.footer.privacyPolicy") div(class="footer_p1") | Gradido-Akademie br @@ -88,15 +99,7 @@ footer | 74653 Künzelsau br | Deutschland - .div-block - a( - class="terms_of_use" - href="https://gradido.net/de/impressum/" - target="_blank" - )= t("emails.footer.imprint") - .text-block-3 | - a( - class="terms_of_use" - href="https://gradido.net/de/datenschutz/" - target="_blank" - )= t("emails.footer.privacyPolicy") + br + br + br + diff --git a/backend/src/emails/templates/includes/greeting.pug b/backend/src/emails/templates/includes/greeting.pug index 9dca66228..6693e23ca 100644 --- a/backend/src/emails/templates/includes/greeting.pug +++ b/backend/src/emails/templates/includes/greeting.pug @@ -1,7 +1,6 @@ //- This sets the greeting at the end of every e-mail -.w-container(class="wrapper_head") - .text-block - p - = t('emails.general.sincerelyYours') - br - = t('emails.general.yourGradidoTeam') \ No newline at end of file +.text-block + p + = t('emails.general.sincerelyYours') + br + = t('emails.general.yourGradidoTeam') \ No newline at end of file diff --git a/backend/src/emails/templates/includes/header.pug b/backend/src/emails/templates/includes/header.pug index f2650a25d..1c4b8912a 100644 --- a/backend/src/emails/templates/includes/header.pug +++ b/backend/src/emails/templates/includes/header.pug @@ -1,5 +1,5 @@ header - .head.wf-section(class="header") + .head //- TODO //- when https://gdd.gradido.net/img/gradido-email-header.jpg is on production, //- replace this URL by https://gdd.gradido.net/img/brand/gradido-email-header.png diff --git a/backend/src/emails/templates/includes/requestNewLink.pug b/backend/src/emails/templates/includes/requestNewLink.pug index 03c54a207..8baa3d6df 100644 --- a/backend/src/emails/templates/includes/requestNewLink.pug +++ b/backend/src/emails/templates/includes/requestNewLink.pug @@ -1,10 +1,10 @@ //- requestNewLink - h2.heading-2= t('emails.general.requestNewLink') + h2= t('emails.general.requestNewLink') if timeDurationObject.minutes == 0 div(class="p_content")= t('emails.general.linkValidity', { hours: timeDurationObject.hours }) else div(class="p_content")= t('emails.general.linkValidityWithMinutes', { hours: timeDurationObject.hours, minutes: timeDurationObject.minutes }) - a.button-4.w-button(href=resendLink) #{t('emails.general.newLink')} \ No newline at end of file + a.button-4(href=resendLink) #{t('emails.general.newLink')} \ No newline at end of file diff --git a/backend/src/emails/templates/includes/webflow.css b/backend/src/emails/templates/includes/webflow.css index 9af019c3a..00afc2b3e 100644 --- a/backend/src/emails/templates/includes/webflow.css +++ b/backend/src/emails/templates/includes/webflow.css @@ -1,460 +1,131 @@ -/* Generated on: Thu Mar 30 2023 07:15:23 GMT+0000 (Coordinated Universal Time) */ -/* ========================================================================== - normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css - ========================================================================== */ -/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace, monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type="button"],input[type="reset"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type='checkbox'],input[type='radio']{box-sizing:border-box;padding:0}input[type='number']::-webkit-inner-spin-button,input[type='number']::-webkit-outer-spin-button{height:auto}input[type='search']{-webkit-appearance:none}input[type='search']::-webkit-search-cancel-button,input[type='search']::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0} +body{ + font-family: "Work Sans", sans-serif; + text-align: center; + text-align: -webkit-center; + justify-content: center; + padding: 0px; + margin: 0px; +} -/* ========================================================================== - Start of base Webflow CSS - If you're looking for some ultra-clean CSS, skip the boilerplate and see the unminified code below. - ========================================================================== */ - @font-face{font-family:'webflow-icons';src:url("data:application/x-font-ttf;charset=utf-8;base64,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") format('truetype');font-weight:normal;font-style:normal}[class^="w-icon-"],[class*=" w-icon-"]{font-family:'webflow-icons' !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.w-icon-slider-right:before{content:"\e600"}.w-icon-slider-left:before{content:"\e601"}.w-icon-nav-menu:before{content:"\e602"}.w-icon-arrow-down:before,.w-icon-dropdown-toggle:before{content:"\e603"}.w-icon-file-upload-remove:before{content:"\e900"}.w-icon-file-upload-icon:before{content:"\e903"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{height:100%}body{margin:0;min-height:100%;background-color:#fff;font-family:Arial,sans-serif;font-size:14px;line-height:20px;color:#333}img{max-width:100%;vertical-align:middle;display:inline-block}html.w-mod-touch *{background-attachment:scroll !important}.w-block{display:block}.w-inline-block{max-width:100%;display:inline-block}.w-clearfix:before,.w-clearfix:after{content:" ";display:table;grid-column-start:1;grid-row-start:1;grid-column-end:2;grid-row-end:2}.w-clearfix:after{clear:both}.w-hidden{display:none}.w-button{display:inline-block;padding:9px 15px;background-color:#3898EC;color:white;border:0;line-height:inherit;text-decoration:none;cursor:pointer;border-radius:0}input.w-button{-webkit-appearance:button}html[data-w-dynpage] [data-w-cloak]{color:transparent !important}.w-webflow-badge,.w-webflow-badge *{position:static;left:auto;top:auto;right:auto;bottom:auto;z-index:auto;display:block;visibility:visible;overflow:visible;overflow-x:visible;overflow-y:visible;box-sizing:border-box;width:auto;height:auto;max-height:none;max-width:none;min-height:0;min-width:0;margin:0;padding:0;float:none;clear:none;border:0 none transparent;border-radius:0;background:none;background-image:none;background-position:0% 0%;background-size:auto auto;background-repeat:repeat;background-origin:padding-box;background-clip:border-box;background-attachment:scroll;background-color:transparent;box-shadow:none;opacity:1;transform:none;transition:none;direction:ltr;font-family:inherit;font-weight:inherit;color:inherit;font-size:inherit;line-height:inherit;font-style:inherit;font-variant:inherit;text-align:inherit;letter-spacing:inherit;text-decoration:inherit;text-indent:0;text-transform:inherit;list-style-type:disc;text-shadow:none;font-smoothing:auto;vertical-align:baseline;cursor:inherit;white-space:inherit;word-break:normal;word-spacing:normal;word-wrap:normal}.w-webflow-badge{position:fixed !important;display:inline-block !important;visibility:visible !important;z-index:2147483647 !important;top:auto !important;right:12px !important;bottom:12px !important;left:auto !important;color:#AAADB0 !important;background-color:#fff !important;border-radius:3px !important;padding:6px 8px 6px 6px !important;font-size:12px !important;opacity:1 !important;line-height:14px !important;text-decoration:none !important;transform:none !important;margin:0 !important;width:auto !important;height:auto !important;overflow:visible !important;white-space:nowrap;box-shadow:0 0 0 1px rgba(0,0,0,0.1),0 1px 3px rgba(0,0,0,0.1);cursor:pointer}.w-webflow-badge>img{display:inline-block !important;visibility:visible !important;opacity:1 !important;vertical-align:middle !important}h1,h2,h3,h4,h5,h6{font-weight:bold;margin-bottom:10px}h1{font-size:38px;line-height:44px;margin-top:20px}h2{font-size:32px;line-height:36px;margin-top:20px}h3{font-size:24px;line-height:30px;margin-top:20px}h4{font-size:18px;line-height:24px;margin-top:10px}h5{font-size:14px;line-height:20px;margin-top:10px}h6{font-size:12px;line-height:18px;margin-top:10px}p{margin-top:0;margin-bottom:10px}blockquote{margin:0 0 10px 0;padding:10px 20px;border-left:5px solid #E2E2E2;font-size:18px;line-height:22px}figure{margin:0;margin-bottom:10px}figcaption{margin-top:5px;text-align:center}ul,ol{margin-top:0px;margin-bottom:10px;padding-left:40px}.w-list-unstyled{padding-left:0;list-style:none}.w-embed:before,.w-embed:after{content:" ";display:table;grid-column-start:1;grid-row-start:1;grid-column-end:2;grid-row-end:2}.w-embed:after{clear:both}.w-video{width:100%;position:relative;padding:0}.w-video iframe,.w-video object,.w-video embed{position:absolute;top:0;left:0;width:100%;height:100%;border:none}fieldset{padding:0;margin:0;border:0}button,[type='button'],[type='reset']{border:0;cursor:pointer;-webkit-appearance:button}.w-form{margin:0 0 15px}.w-form-done{display:none;padding:20px;text-align:center;background-color:#dddddd}.w-form-fail{display:none;margin-top:10px;padding:10px;background-color:#ffdede}label{display:block;margin-bottom:5px;font-weight:bold}.w-input,.w-select{display:block;width:100%;height:38px;padding:8px 12px;margin-bottom:10px;font-size:14px;line-height:1.42857143;color:#333333;vertical-align:middle;background-color:#ffffff;border:1px solid #cccccc}.w-input:-moz-placeholder,.w-select:-moz-placeholder{color:#999}.w-input::-moz-placeholder,.w-select::-moz-placeholder{color:#999;opacity:1}.w-input:-ms-input-placeholder,.w-select:-ms-input-placeholder{color:#999}.w-input::-webkit-input-placeholder,.w-select::-webkit-input-placeholder{color:#999}.w-input:focus,.w-select:focus{border-color:#3898EC;outline:0}.w-input[disabled],.w-select[disabled],.w-input[readonly],.w-select[readonly],fieldset[disabled] .w-input,fieldset[disabled] .w-select{cursor:not-allowed}.w-input[disabled]:not(.w-input-disabled),.w-select[disabled]:not(.w-input-disabled),.w-input[readonly],.w-select[readonly],fieldset[disabled]:not(.w-input-disabled) .w-input,fieldset[disabled]:not(.w-input-disabled) .w-select{background-color:#eeeeee}textarea.w-input,textarea.w-select{height:auto}.w-select{background-color:#f3f3f3}.w-select[multiple]{height:auto}.w-form-label{display:inline-block;cursor:pointer;font-weight:normal;margin-bottom:0px}.w-radio{display:block;margin-bottom:5px;padding-left:20px}.w-radio:before,.w-radio:after{content:" ";display:table;grid-column-start:1;grid-row-start:1;grid-column-end:2;grid-row-end:2}.w-radio:after{clear:both}.w-radio-input{margin:4px 0 0;margin-top:1px \9;line-height:normal;float:left;margin-left:-20px}.w-radio-input{margin-top:3px}.w-file-upload{display:block;margin-bottom:10px}.w-file-upload-input{width:.1px;height:.1px;opacity:0;overflow:hidden;position:absolute;z-index:-100}.w-file-upload-default,.w-file-upload-uploading,.w-file-upload-success{display:inline-block;color:#333333}.w-file-upload-error{display:block;margin-top:10px}.w-file-upload-default.w-hidden,.w-file-upload-uploading.w-hidden,.w-file-upload-error.w-hidden,.w-file-upload-success.w-hidden{display:none}.w-file-upload-uploading-btn{display:flex;font-size:14px;font-weight:normal;cursor:pointer;margin:0;padding:8px 12px;border:1px solid #cccccc;background-color:#fafafa}.w-file-upload-file{display:flex;flex-grow:1;justify-content:space-between;margin:0;padding:8px 9px 8px 11px;border:1px solid #cccccc;background-color:#fafafa}.w-file-upload-file-name{font-size:14px;font-weight:normal;display:block}.w-file-remove-link{margin-top:3px;margin-left:10px;width:auto;height:auto;padding:3px;display:block;cursor:pointer}.w-icon-file-upload-remove{margin:auto;font-size:10px}.w-file-upload-error-msg{display:inline-block;color:#ea384c;padding:2px 0}.w-file-upload-info{display:inline-block;line-height:38px;padding:0 12px}.w-file-upload-label{display:inline-block;font-size:14px;font-weight:normal;cursor:pointer;margin:0;padding:8px 12px;border:1px solid #cccccc;background-color:#fafafa}.w-icon-file-upload-icon,.w-icon-file-upload-uploading{display:inline-block;margin-right:8px;width:20px}.w-icon-file-upload-uploading{height:20px}.w-container{margin-left:auto;margin-right:auto;max-width:940px}.w-container:before,.w-container:after{content:" ";display:table;grid-column-start:1;grid-row-start:1;grid-column-end:2;grid-row-end:2}.w-container:after{clear:both}.w-container .w-row{margin-left:-10px;margin-right:-10px}.w-row:before,.w-row:after{content:" ";display:table;grid-column-start:1;grid-row-start:1;grid-column-end:2;grid-row-end:2}.w-row:after{clear:both}.w-row .w-row{margin-left:0;margin-right:0}.w-col{position:relative;float:left;width:100%;min-height:1px;padding-left:10px;padding-right:10px}.w-col .w-col{padding-left:0;padding-right:0}.w-col-1{width:8.33333333%}.w-col-2{width:16.66666667%}.w-col-3{width:25%}.w-col-4{width:33.33333333%}.w-col-5{width:41.66666667%}.w-col-6{width:50%}.w-col-7{width:58.33333333%}.w-col-8{width:66.66666667%}.w-col-9{width:75%}.w-col-10{width:83.33333333%}.w-col-11{width:91.66666667%}.w-col-12{width:100%}.w-hidden-main{display:none !important}@media screen and (max-width:991px){.w-container{max-width:728px}.w-hidden-main{display:inherit !important}.w-hidden-medium{display:none !important}.w-col-medium-1{width:8.33333333%}.w-col-medium-2{width:16.66666667%}.w-col-medium-3{width:25%}.w-col-medium-4{width:33.33333333%}.w-col-medium-5{width:41.66666667%}.w-col-medium-6{width:50%}.w-col-medium-7{width:58.33333333%}.w-col-medium-8{width:66.66666667%}.w-col-medium-9{width:75%}.w-col-medium-10{width:83.33333333%}.w-col-medium-11{width:91.66666667%}.w-col-medium-12{width:100%}.w-col-stack{width:100%;left:auto;right:auto}}@media screen and (max-width:767px){.w-hidden-main{display:inherit !important}.w-hidden-medium{display:inherit !important}.w-hidden-small{display:none !important}.w-row,.w-container .w-row{margin-left:0;margin-right:0}.w-col{width:100%;left:auto;right:auto}.w-col-small-1{width:8.33333333%}.w-col-small-2{width:16.66666667%}.w-col-small-3{width:25%}.w-col-small-4{width:33.33333333%}.w-col-small-5{width:41.66666667%}.w-col-small-6{width:50%}.w-col-small-7{width:58.33333333%}.w-col-small-8{width:66.66666667%}.w-col-small-9{width:75%}.w-col-small-10{width:83.33333333%}.w-col-small-11{width:91.66666667%}.w-col-small-12{width:100%}}@media screen and (max-width:479px){.w-container{max-width:none}.w-hidden-main{display:inherit !important}.w-hidden-medium{display:inherit !important}.w-hidden-small{display:inherit !important}.w-hidden-tiny{display:none !important}.w-col{width:100%}.w-col-tiny-1{width:8.33333333%}.w-col-tiny-2{width:16.66666667%}.w-col-tiny-3{width:25%}.w-col-tiny-4{width:33.33333333%}.w-col-tiny-5{width:41.66666667%}.w-col-tiny-6{width:50%}.w-col-tiny-7{width:58.33333333%}.w-col-tiny-8{width:66.66666667%}.w-col-tiny-9{width:75%}.w-col-tiny-10{width:83.33333333%}.w-col-tiny-11{width:91.66666667%}.w-col-tiny-12{width:100%}}.w-widget{position:relative}.w-widget-map{width:100%;height:400px}.w-widget-map label{width:auto;display:inline}.w-widget-map img{max-width:inherit}.w-widget-map .gm-style-iw{text-align:center}.w-widget-map .gm-style-iw>button{display:none !important}.w-widget-twitter{overflow:hidden}.w-widget-twitter-count-shim{display:inline-block;vertical-align:top;position:relative;width:28px;height:20px;text-align:center;background:white;border:#758696 solid 1px;border-radius:3px}.w-widget-twitter-count-shim *{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.w-widget-twitter-count-shim .w-widget-twitter-count-inner{position:relative;font-size:15px;line-height:12px;text-align:center;color:#999;font-family:serif}.w-widget-twitter-count-shim .w-widget-twitter-count-clear{position:relative;display:block}.w-widget-twitter-count-shim.w--large{width:36px;height:28px}.w-widget-twitter-count-shim.w--large .w-widget-twitter-count-inner{font-size:18px;line-height:18px}.w-widget-twitter-count-shim:not(.w--vertical){margin-left:5px;margin-right:8px}.w-widget-twitter-count-shim:not(.w--vertical).w--large{margin-left:6px}.w-widget-twitter-count-shim:not(.w--vertical):before,.w-widget-twitter-count-shim:not(.w--vertical):after{top:50%;left:0;border:solid transparent;content:' ';height:0;width:0;position:absolute;pointer-events:none}.w-widget-twitter-count-shim:not(.w--vertical):before{border-color:rgba(117,134,150,0);border-right-color:#5d6c7b;border-width:4px;margin-left:-9px;margin-top:-4px}.w-widget-twitter-count-shim:not(.w--vertical).w--large:before{border-width:5px;margin-left:-10px;margin-top:-5px}.w-widget-twitter-count-shim:not(.w--vertical):after{border-color:rgba(255,255,255,0);border-right-color:white;border-width:4px;margin-left:-8px;margin-top:-4px}.w-widget-twitter-count-shim:not(.w--vertical).w--large:after{border-width:5px;margin-left:-9px;margin-top:-5px}.w-widget-twitter-count-shim.w--vertical{width:61px;height:33px;margin-bottom:8px}.w-widget-twitter-count-shim.w--vertical:before,.w-widget-twitter-count-shim.w--vertical:after{top:100%;left:50%;border:solid transparent;content:' ';height:0;width:0;position:absolute;pointer-events:none}.w-widget-twitter-count-shim.w--vertical:before{border-color:rgba(117,134,150,0);border-top-color:#5d6c7b;border-width:5px;margin-left:-5px}.w-widget-twitter-count-shim.w--vertical:after{border-color:rgba(255,255,255,0);border-top-color:white;border-width:4px;margin-left:-4px}.w-widget-twitter-count-shim.w--vertical .w-widget-twitter-count-inner{font-size:18px;line-height:22px}.w-widget-twitter-count-shim.w--vertical.w--large{width:76px}.w-background-video{position:relative;overflow:hidden;height:500px;color:white}.w-background-video>video{background-size:cover;background-position:50% 50%;position:absolute;margin:auto;width:100%;height:100%;right:-100%;bottom:-100%;top:-100%;left:-100%;object-fit:cover;z-index:-100}.w-background-video>video::-webkit-media-controls-start-playback-button{display:none !important;-webkit-appearance:none}.w-background-video--control{position:absolute;bottom:1em;right:1em;background-color:transparent;padding:0}.w-background-video--control>[hidden]{display:none !important}.w-slider{position:relative;height:300px;text-align:center;background:#dddddd;clear:both;-webkit-tap-highlight-color:rgba(0,0,0,0);tap-highlight-color:rgba(0,0,0,0)}.w-slider-mask{position:relative;display:block;overflow:hidden;z-index:1;left:0;right:0;height:100%;white-space:nowrap}.w-slide{position:relative;display:inline-block;vertical-align:top;width:100%;height:100%;white-space:normal;text-align:left}.w-slider-nav{position:absolute;z-index:2;top:auto;right:0;bottom:0;left:0;margin:auto;padding-top:10px;height:40px;text-align:center;-webkit-tap-highlight-color:rgba(0,0,0,0);tap-highlight-color:rgba(0,0,0,0)}.w-slider-nav.w-round>div{border-radius:100%}.w-slider-nav.w-num>div{width:auto;height:auto;padding:.2em .5em;font-size:inherit;line-height:inherit}.w-slider-nav.w-shadow>div{box-shadow:0 0 3px rgba(51,51,51,0.4)}.w-slider-nav-invert{color:#fff}.w-slider-nav-invert>div{background-color:rgba(34,34,34,0.4)}.w-slider-nav-invert>div.w-active{background-color:#222}.w-slider-dot{position:relative;display:inline-block;width:1em;height:1em;background-color:rgba(255,255,255,0.4);cursor:pointer;margin:0 3px .5em;transition:background-color 100ms,color 100ms}.w-slider-dot.w-active{background-color:#fff}.w-slider-dot:focus{outline:none;box-shadow:0 0 0 2px #fff}.w-slider-dot:focus.w-active{box-shadow:none}.w-slider-arrow-left,.w-slider-arrow-right{position:absolute;width:80px;top:0;right:0;bottom:0;left:0;margin:auto;cursor:pointer;overflow:hidden;color:white;font-size:40px;-webkit-tap-highlight-color:rgba(0,0,0,0);tap-highlight-color:rgba(0,0,0,0);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.w-slider-arrow-left [class^='w-icon-'],.w-slider-arrow-right [class^='w-icon-'],.w-slider-arrow-left [class*=' w-icon-'],.w-slider-arrow-right [class*=' w-icon-']{position:absolute}.w-slider-arrow-left:focus,.w-slider-arrow-right:focus{outline:0}.w-slider-arrow-left{z-index:3;right:auto}.w-slider-arrow-right{z-index:4;left:auto}.w-icon-slider-left,.w-icon-slider-right{top:0;right:0;bottom:0;left:0;margin:auto;width:1em;height:1em}.w-slider-aria-label{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.w-slider-force-show{display:block !important}.w-dropdown{display:inline-block;position:relative;text-align:left;margin-left:auto;margin-right:auto;z-index:900}.w-dropdown-btn,.w-dropdown-toggle,.w-dropdown-link{position:relative;vertical-align:top;text-decoration:none;color:#222222;padding:20px;text-align:left;margin-left:auto;margin-right:auto;white-space:nowrap}.w-dropdown-toggle{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:inline-block;cursor:pointer;padding-right:40px}.w-dropdown-toggle:focus{outline:0}.w-icon-dropdown-toggle{position:absolute;top:0;right:0;bottom:0;margin:auto;margin-right:20px;width:1em;height:1em}.w-dropdown-list{position:absolute;background:#dddddd;display:none;min-width:100%}.w-dropdown-list.w--open{display:block}.w-dropdown-link{padding:10px 20px;display:block;color:#222222}.w-dropdown-link.w--current{color:#0082f3}.w-dropdown-link:focus{outline:0}@media screen and (max-width:767px){.w-nav-brand{padding-left:10px}}.w-lightbox-backdrop{color:#000;cursor:auto;font-family:serif;font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;list-style:disc;text-align:start;text-indent:0;text-shadow:none;text-transform:none;visibility:visible;white-space:normal;word-break:normal;word-spacing:normal;word-wrap:normal;position:fixed;top:0;right:0;bottom:0;left:0;color:#fff;font-family:"Helvetica Neue",Helvetica,Ubuntu,"Segoe UI",Verdana,sans-serif;font-size:17px;line-height:1.2;font-weight:300;text-align:center;background:rgba(0,0,0,0.9);z-index:2000;outline:0;opacity:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-webkit-tap-highlight-color:transparent;-webkit-transform:translate(0, 0)}.w-lightbox-backdrop,.w-lightbox-container{height:100%;overflow:auto;-webkit-overflow-scrolling:touch}.w-lightbox-content{position:relative;height:100vh;overflow:hidden}.w-lightbox-view{position:absolute;width:100vw;height:100vh;opacity:0}.w-lightbox-view:before{content:"";height:100vh}.w-lightbox-group,.w-lightbox-group .w-lightbox-view,.w-lightbox-group .w-lightbox-view:before{height:86vh}.w-lightbox-frame,.w-lightbox-view:before{display:inline-block;vertical-align:middle}.w-lightbox-figure{position:relative;margin:0}.w-lightbox-group .w-lightbox-figure{cursor:pointer}.w-lightbox-img{width:auto;height:auto;max-width:none}.w-lightbox-image{display:block;float:none;max-width:100vw;max-height:100vh}.w-lightbox-group .w-lightbox-image{max-height:86vh}.w-lightbox-caption{position:absolute;right:0;bottom:0;left:0;padding:.5em 1em;background:rgba(0,0,0,0.4);text-align:left;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.w-lightbox-embed{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%}.w-lightbox-control{position:absolute;top:0;width:4em;background-size:24px;background-repeat:no-repeat;background-position:center;cursor:pointer;-webkit-transition:all .3s;transition:all .3s}.w-lightbox-left{display:none;bottom:0;left:0;background-image:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9Ii0yMCAwIDI0IDQwIiB3aWR0aD0iMjQiIGhlaWdodD0iNDAiPjxnIHRyYW5zZm9ybT0icm90YXRlKDQ1KSI+PHBhdGggZD0ibTAgMGg1djIzaDIzdjVoLTI4eiIgb3BhY2l0eT0iLjQiLz48cGF0aCBkPSJtMSAxaDN2MjNoMjN2M2gtMjZ6IiBmaWxsPSIjZmZmIi8+PC9nPjwvc3ZnPg==")}.w-lightbox-right{display:none;right:0;bottom:0;background-image:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9Ii00IDAgMjQgNDAiIHdpZHRoPSIyNCIgaGVpZ2h0PSI0MCI+PGcgdHJhbnNmb3JtPSJyb3RhdGUoNDUpIj48cGF0aCBkPSJtMC0waDI4djI4aC01di0yM2gtMjN6IiBvcGFjaXR5PSIuNCIvPjxwYXRoIGQ9Im0xIDFoMjZ2MjZoLTN2LTIzaC0yM3oiIGZpbGw9IiNmZmYiLz48L2c+PC9zdmc+")}.w-lightbox-close{right:0;height:2.6em;background-image:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9Ii00IDAgMTggMTciIHdpZHRoPSIxOCIgaGVpZ2h0PSIxNyI+PGcgdHJhbnNmb3JtPSJyb3RhdGUoNDUpIj48cGF0aCBkPSJtMCAwaDd2LTdoNXY3aDd2NWgtN3Y3aC01di03aC03eiIgb3BhY2l0eT0iLjQiLz48cGF0aCBkPSJtMSAxaDd2LTdoM3Y3aDd2M2gtN3Y3aC0zdi03aC03eiIgZmlsbD0iI2ZmZiIvPjwvZz48L3N2Zz4=");background-size:18px}.w-lightbox-strip{position:absolute;bottom:0;left:0;right:0;padding:0 1vh;line-height:0;white-space:nowrap;overflow-x:auto;overflow-y:hidden}.w-lightbox-item{display:inline-block;width:10vh;padding:2vh 1vh;box-sizing:content-box;cursor:pointer;-webkit-transform:translate3d(0, 0, 0)}.w-lightbox-active{opacity:.3}.w-lightbox-thumbnail{position:relative;height:10vh;background:#222;overflow:hidden}.w-lightbox-thumbnail-image{position:absolute;top:0;left:0}.w-lightbox-thumbnail .w-lightbox-tall{top:50%;width:100%;-webkit-transform:translate(0, -50%);-ms-transform:translate(0, -50%);transform:translate(0, -50%)}.w-lightbox-thumbnail .w-lightbox-wide{left:50%;height:100%;-webkit-transform:translate(-50%, 0);-ms-transform:translate(-50%, 0);transform:translate(-50%, 0)}.w-lightbox-spinner{position:absolute;top:50%;left:50%;box-sizing:border-box;width:40px;height:40px;margin-top:-20px;margin-left:-20px;border:5px solid rgba(0,0,0,0.4);border-radius:50%;-webkit-animation:spin .8s infinite linear;animation:spin .8s infinite linear}.w-lightbox-spinner:after{content:"";position:absolute;top:-4px;right:-4px;bottom:-4px;left:-4px;border:3px solid transparent;border-bottom-color:#fff;border-radius:50%}.w-lightbox-hide{display:none}.w-lightbox-noscroll{overflow:hidden}@media (min-width:768px){.w-lightbox-content{height:96vh;margin-top:2vh}.w-lightbox-view,.w-lightbox-view:before{height:96vh}.w-lightbox-group,.w-lightbox-group .w-lightbox-view,.w-lightbox-group .w-lightbox-view:before{height:84vh}.w-lightbox-image{max-width:96vw;max-height:96vh}.w-lightbox-group .w-lightbox-image{max-width:82.3vw;max-height:84vh}.w-lightbox-left,.w-lightbox-right{display:block;opacity:.5}.w-lightbox-close{opacity:.8}.w-lightbox-control:hover{opacity:1}}.w-lightbox-inactive,.w-lightbox-inactive:hover{opacity:0}.w-richtext:before,.w-richtext:after{content:" ";display:table;grid-column-start:1;grid-row-start:1;grid-column-end:2;grid-row-end:2}.w-richtext:after{clear:both}.w-richtext[contenteditable="true"]:before,.w-richtext[contenteditable="true"]:after{white-space:initial}.w-richtext ol,.w-richtext ul{overflow:hidden}.w-richtext .w-richtext-figure-selected.w-richtext-figure-type-video div:after,.w-richtext .w-richtext-figure-selected[data-rt-type="video"] div:after{outline:2px solid #2895f7}.w-richtext .w-richtext-figure-selected.w-richtext-figure-type-image div,.w-richtext .w-richtext-figure-selected[data-rt-type="image"] div{outline:2px solid #2895f7}.w-richtext figure.w-richtext-figure-type-video>div:after,.w-richtext figure[data-rt-type="video"]>div:after{content:'';position:absolute;display:none;left:0;top:0;right:0;bottom:0}.w-richtext figure{position:relative;max-width:60%}.w-richtext figure>div:before{cursor:default!important}.w-richtext figure img{width:100%}.w-richtext figure figcaption.w-richtext-figcaption-placeholder{opacity:.6}.w-richtext figure div{font-size:0px;color:transparent}.w-richtext figure.w-richtext-figure-type-image,.w-richtext figure[data-rt-type="image"]{display:table}.w-richtext figure.w-richtext-figure-type-image>div,.w-richtext figure[data-rt-type="image"]>div{display:inline-block}.w-richtext figure.w-richtext-figure-type-image>figcaption,.w-richtext figure[data-rt-type="image"]>figcaption{display:table-caption;caption-side:bottom}.w-richtext figure.w-richtext-figure-type-video,.w-richtext figure[data-rt-type="video"]{width:60%;height:0}.w-richtext figure.w-richtext-figure-type-video iframe,.w-richtext figure[data-rt-type="video"] iframe{position:absolute;top:0;left:0;width:100%;height:100%}.w-richtext figure.w-richtext-figure-type-video>div,.w-richtext figure[data-rt-type="video"]>div{width:100%}.w-richtext figure.w-richtext-align-center{margin-right:auto;margin-left:auto;clear:both}.w-richtext figure.w-richtext-align-center.w-richtext-figure-type-image>div,.w-richtext figure.w-richtext-align-center[data-rt-type="image"]>div{max-width:100%}.w-richtext figure.w-richtext-align-normal{clear:both}.w-richtext figure.w-richtext-align-fullwidth{width:100%;max-width:100%;text-align:center;clear:both;display:block;margin-right:auto;margin-left:auto}.w-richtext figure.w-richtext-align-fullwidth>div{display:inline-block;padding-bottom:inherit}.w-richtext figure.w-richtext-align-fullwidth>figcaption{display:block}.w-richtext figure.w-richtext-align-floatleft{float:left;margin-right:15px;clear:none}.w-richtext figure.w-richtext-align-floatright{float:right;margin-left:15px;clear:none}.w-nav{position:relative;background:#dddddd;z-index:1000}.w-nav:before,.w-nav:after{content:" ";display:table;grid-column-start:1;grid-row-start:1;grid-column-end:2;grid-row-end:2}.w-nav:after{clear:both}.w-nav-brand{position:relative;float:left;text-decoration:none;color:#333333}.w-nav-link{position:relative;display:inline-block;vertical-align:top;text-decoration:none;color:#222222;padding:20px;text-align:left;margin-left:auto;margin-right:auto}.w-nav-link.w--current{color:#0082f3}.w-nav-menu{position:relative;float:right}[data-nav-menu-open]{display:block !important;position:absolute;top:100%;left:0;right:0;background:#C8C8C8;text-align:center;overflow:visible;min-width:200px}.w--nav-link-open{display:block;position:relative}.w-nav-overlay{position:absolute;overflow:hidden;display:none;top:100%;left:0;right:0;width:100%}.w-nav-overlay [data-nav-menu-open]{top:0}.w-nav[data-animation="over-left"] .w-nav-overlay{width:auto}.w-nav[data-animation="over-left"] .w-nav-overlay,.w-nav[data-animation="over-left"] [data-nav-menu-open]{right:auto;z-index:1;top:0}.w-nav[data-animation="over-right"] .w-nav-overlay{width:auto}.w-nav[data-animation="over-right"] .w-nav-overlay,.w-nav[data-animation="over-right"] [data-nav-menu-open]{left:auto;z-index:1;top:0}.w-nav-button{position:relative;float:right;padding:18px;font-size:24px;display:none;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0);tap-highlight-color:rgba(0,0,0,0);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.w-nav-button:focus{outline:0}.w-nav-button.w--open{background-color:#C8C8C8;color:white}.w-nav[data-collapse="all"] .w-nav-menu{display:none}.w-nav[data-collapse="all"] .w-nav-button{display:block}.w--nav-dropdown-open{display:block}.w--nav-dropdown-toggle-open{display:block}.w--nav-dropdown-list-open{position:static}@media screen and (max-width:991px){.w-nav[data-collapse="medium"] .w-nav-menu{display:none}.w-nav[data-collapse="medium"] .w-nav-button{display:block}}@media screen and (max-width:767px){.w-nav[data-collapse="small"] .w-nav-menu{display:none}.w-nav[data-collapse="small"] .w-nav-button{display:block}.w-nav-brand{padding-left:10px}}@media screen and (max-width:479px){.w-nav[data-collapse="tiny"] .w-nav-menu{display:none}.w-nav[data-collapse="tiny"] .w-nav-button{display:block}}.w-tabs{position:relative}.w-tabs:before,.w-tabs:after{content:" ";display:table;grid-column-start:1;grid-row-start:1;grid-column-end:2;grid-row-end:2}.w-tabs:after{clear:both}.w-tab-menu{position:relative}.w-tab-link{position:relative;display:inline-block;vertical-align:top;text-decoration:none;padding:9px 30px;text-align:left;cursor:pointer;color:#222222;background-color:#dddddd}.w-tab-link.w--current{background-color:#C8C8C8}.w-tab-link:focus{outline:0}.w-tab-content{position:relative;display:block;overflow:hidden}.w-tab-pane{position:relative;display:none}.w--tab-active{display:block}@media screen and (max-width:479px){.w-tab-link{display:block}}.w-ix-emptyfix:after{content:""}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.w-dyn-empty{padding:10px;background-color:#dddddd}.w-dyn-hide{display:none !important}.w-dyn-bind-empty{display:none !important}.w-condition-invisible{display:none !important} - - /* ========================================================================== - Start of custom Webflow CSS - ========================================================================== */ - .container { - max-width: 680px; - margin-top: 40px; - } - - .header { - height: 100px; - margin-left: auto; - margin-right: auto; - margin-bottom: 60px; - max-width: 680px; - } +h2 { + margin-top: 0px; + color: #383838; +} - .head-logo { - width: 100%; - height: auto; - } - - .wrapper_head { - position: static; - display: block; - max-width: 680px; - margin-top: 60px; - justify-content: flex-start; - align-items: stretch; - grid-auto-columns: 1fr; - grid-column-gap: 16px; - grid-row-gap: 16px; - -ms-grid-columns: 1fr 1fr; - grid-template-columns: 1fr 1fr; - -ms-grid-rows: auto auto; - grid-template-rows: auto auto; - } - - .headline.h1 { - margin-top: 0px; - color: #383838; - text-align: center; - } - - .text-block { - max-width: 680px; - margin-top: 20px; - margin-right: 40px; - margin-left: 40px; - font-family: 'Work Sans', sans-serif; - color: #9ca0a8; - font-size: 22px; - line-height: 29px; - font-weight: 400; - text-align: center; - } - - .background_01 { - position: static; - display: block; - overflow: visible; - width: 600px; - height: 520px; - float: none; - flex-direction: column-reverse; - justify-content: flex-end; - flex-wrap: nowrap; - align-items: center; - align-content: flex-end; - border: 1px none #000; - border-radius: 24px; - background-color: #f5f5f5; - background-image: linear-gradient(180deg, #f5f5f5, #f5f5f5); - text-align: center; - -o-object-fit: fill; - object-fit: fill; - } - - .content { - display: inherit; - max-width: 680px; - margin-top: 40px; - padding-top: 2px; - flex-direction: column; - justify-content: center; - align-items: center; - border-radius: 24px; - background-image: linear-gradient(180deg, #f5f5f5, #f5f5f5); - text-align: center; - } - - .heading { - display: flex; - margin-top: 40px; - margin-right: auto; - margin-left: auto; - justify-content: flex-start; - align-items: stretch; - align-self: auto; - order: 0; - flex: 0 auto; - font-family: 'Work Sans', sans-serif; - font-size: 28px; - line-height: 33px; - font-weight: 600; - text-align: center; - } - - .p_content { - max-width: 400px; - margin-top: 15px; - margin-right: auto; - margin-left: auto; - font-family: 'Work Sans', sans-serif; - font-size: 16px; - line-height: 26px; - text-align: center; - } - - .button { - margin-top: 40px; - padding-right: 40px; - padding-left: 40px; - border-radius: 20px; - background-image: radial-gradient(circle farthest-corner at 0% 0%, #f9cd69, #c58d38); - box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.2); - } - - .button-2 { /* TODO remove unnecessary */ - padding-left: 40px; - } - - .button-3 { - margin-top: 30px; - padding-right: 40px; - padding-left: 40px; - border-radius: 20px; - background-image: radial-gradient(circle farthest-corner at 0% 0%, #f9cd69, #c58d38); - box-shadow: 16px 13px 35px 0 rgba(56, 56, 56, 0.3); - font-family: 'Work Sans', sans-serif; - } - - .heading-2 { - margin-top: 60px; - font-family: 'Work Sans', sans-serif; - color: #383838; - font-size: 28px; - line-height: 33px; - font-weight: 600; - } - - .button-4 { - margin: 30px auto 40px; - padding-right: 40px; - padding-left: 40px; - border-radius: 20px; - background-image: radial-gradient(circle farthest-corner at 0% 0%, #616161, #c2c2c2); - box-shadow: 16px 13px 35px 0 rgba(56, 56, 56, 0.3); - font-family: 'Work Sans', sans-serif; - } - - .footer_01 { - max-width: 380px; - } - - .socialmedia { - display: flex; - max-width: 600px; - margin-top: 40px; - flex-direction: row-reverse; - justify-content: space-between; - flex-wrap: nowrap; - align-items: stretch; - grid-column-gap: 0px; - grid-row-gap: 0px; - text-align: center; - } - - .image { - position: relative; - display: block; - height: auto; - max-height: none; - max-width: none; - margin-top: 40px; - } - - .footer_02 { - display: inline; - align-self: auto; - max-width: 600px; - flex-direction: column; - justify-content: center; - align-items: center; - text-align: center; - padding-bottom: 20; - } - - .footer_p1 { - margin-top: 30px; - -ms-grid-row-align: auto; - align-self: auto; - font-family: 'Work Sans', sans-serif; - color: #9ca0a8; - font-size: 16px; - line-height: 24px; - text-align: center; - } - - .footer_p2 { - display: flex; - max-width: 600px; - flex-direction: column; - justify-content: center; - align-items: center; - font-family: 'Work Sans', sans-serif; - color: #383838; - font-size: 16px; - line-height: 24px; - font-weight: 600; - } - - .container-2 { - max-width: 600px; - } - - .image-2 { - width: 30%; - max-width: none; - margin-top: 20px; - } - - .div-block { - display: inherit; - margin-top: 20px; - margin-bottom: 40px; - flex-direction: row; - justify-content: center; - align-items: center; - } - - .terms_of_use { - padding-right: 15px; - padding-left: 15px; - font-family: 'Work Sans', sans-serif; - color: #9ca0a8; - } - - .text-block-3 { - color: #9ca0a8; - } - - .line_image { - width: 100%; - height: 13px; - margin-top: 40px; - background-image: linear-gradient(90deg, #c58d38, #c58d38 0%, #f3cd7c 35%, #dbb056 54%, #eec05f 63%, #cc9d3d); - } - - .line { - height: 13px; - margin-top: 40px; - background-image: linear-gradient(90deg, #c58d38, #f3cd7c 40%, #dbb056 55%, #eec05f 71%, #cc9d3d); - } - - @media screen and (max-width: 991px) { - .wrapper { - margin-top: 0px; - } - - .headline.h1 { - margin-top: 0px; - margin-bottom: 0px; - border-radius: 2px; - font-size: 36px; - line-height: 33px; - } - - .text-block { - margin-top: 40px; - font-size: 20px; - line-height: 26px; - } - - .background_01 { - margin-top: 40px; - } - - .content { - max-height: none; - max-width: 540px; - margin-top: 40px; - border-radius: 24px; - background-image: linear-gradient(180deg, #f5f5f5, #f5f5f5); - text-align: center; - } - - .heading { - display: flex; - flex-direction: column-reverse; - justify-content: flex-start; - align-items: stretch; - flex: 0 auto; - font-family: 'Work Sans', sans-serif; - color: #383838; - font-size: 22px; - line-height: 33px; - } - - .text-block-2 { - font-family: 'Work Sans', sans-serif; - font-size: 16px; - line-height: 26px; - } - - .p_content { - margin-top: 0px; - margin-right: 40px; - margin-left: 40px; - font-family: 'Work Sans', sans-serif; - text-align: center; - } - - .image { - max-width: 820px; - margin-left: -10px; - } - - .footer_p1 { - margin-top: 30px; - } - } - - @media screen and (max-width: 767px) { - .head-logo { - margin-left: 30px; - } - - .headline.h1 { - font-size: 24px; - } - - .text-block { - margin-top: 20px; - font-size: 18px; - } - - .content { - max-width: 500px; - margin-top: 20px; - } - - .heading { - margin-top: 30px; - font-size: 20px; - } - - .heading-2 { - margin-top: 40px; - font-size: 20px; - } - - .footer_p1 { - margin-top: 30px; - } - - .line_image { - margin-top: 30px; - } - } - - @media screen and (max-width: 479px) { - .head-logo { - width: 40%; - max-width: 40%; - margin-left: 20px; - } - - .headline.h1 { - font-family: 'Work Sans', sans-serif; - font-size: 20px; - } - - .text-block { - font-size: 14px; - line-height: 20px; - } - - .content { - max-width: 280px; - } - - .heading { - display: flex; - margin-top: 60px; - font-size: 18px; - line-height: 26px; - } - - .p_content { - font-size: 14px; - line-height: 20px; - } - - .button-3 { - margin-top: 40px; - padding-right: 30px; - padding-left: 30px; - } - - .button-4 { - margin-bottom: 60px; - padding-right: 30px; - padding-left: 30px; - } - - .footer_01 { - display: flex; - max-width: 300px; - flex-direction: column; - justify-content: center; - align-items: center; - } - - .socialmedia { - display: flex; - width: 80%; - max-width: 300px; - justify-content: center; - flex-wrap: nowrap; - align-self: auto; - grid-auto-columns: 1fr; - grid-column-gap: 30px; - grid-row-gap: 30px; - -ms-grid-columns: 1fr 1fr; - grid-template-columns: 1fr 1fr; - -ms-grid-rows: auto auto; - grid-template-rows: auto auto; - } - - .footer_p1 { - margin-right: 20px; - margin-left: 20px; - font-size: 14px; - } - - .image-2 { - width: 40%; - } - } \ No newline at end of file +.container { + max-width: 680px; + margin: 0 auto; + display: table; +} + +.head-logo { + width: 100%; + height: auto; +} + +.text-block { + margin-top: 20px; + color: #9ca0a8; +} + +.content { + display: table; + width: 100%; + margin: 40px 10px 0; + padding: 20px 10px 40px; + border-radius: 24px; + background-image: linear-gradient(180deg, #f5f5f5, #f5f5f5); +} + +.p_content{ + margin-top: 15px; + line-height: 26px; +} + +.clink { + line-break: anywhere; + margin-bottom: 40px; +} + +.button-3, +.button-4 { + display: inline-block; + padding: 9px 15px; + color: white; + border: 0; + line-height: inherit; + text-decoration: none; + cursor: pointer; + border-radius: 20px; + background-image: radial-gradient(circle farthest-corner at 0% 0%, #f9cd69, #c58d38); + box-shadow: 16px 13px 35px 0 rgba(56, 56, 56, 0.3); +} + +.button-4 { + background-image: radial-gradient(circle farthest-corner at 0% 0%, #616161, #c2c2c2); +} + +.socialmedia { + display: flex; + margin-top: 40px; + max-width: 600px; + +} +.slink{ + width: 150px; +} + +.footer { + padding-bottom: 20px; +} + +.footer_p1 { + margin-top: 30px; + color: #9ca0a8; + margin-bottom: 30px; +} + +.footer_p2 { + color: #383838; + font-weight: bold; +} + + +.image { + width: 200px; + margin-top: 30px; + margin-bottom: 30px; +} + +.div-block { + display: table; + margin-top: 20px; + margin-bottom: 40px; + flex-direction: row; + justify-content: center; + align-items: center; +} + +.terms_of_use { + color: #9ca0a8; +} + +.text-block-3 { + color: #9ca0a8; + margin-bottom: 30px; +} + +.line_image, +.line { + width: 100%; + height: 13px; + margin-top: 40px; +} + +.line_image { + background-image: linear-gradient(90deg, #c58d38, #c58d38 0%, #f3cd7c 35%, #dbb056 54%, #eec05f 63%, #cc9d3d); +} + +.line { + background-image: linear-gradient(90deg, #c58d38, #f3cd7c 40%, #dbb056 55%, #eec05f 71%, #cc9d3d); +} diff --git a/backend/src/emails/templates/layout.pug b/backend/src/emails/templates/layout.pug index 259817a29..b98e6f55f 100644 --- a/backend/src/emails/templates/layout.pug +++ b/backend/src/emails/templates/layout.pug @@ -16,10 +16,11 @@ html(lang=locale) include includes/webflow.css body - include includes/header.pug + div.container + include includes/header.pug - .wrapper.wf-section - block content - include includes/greeting.pug + .wrapper + block content + include includes/greeting.pug - include includes/footer.pug + include includes/footer.pug diff --git a/backend/src/emails/templates/resetPassword/html.pug b/backend/src/emails/templates/resetPassword/html.pug index 52fa737de..c6be80519 100644 --- a/backend/src/emails/templates/resetPassword/html.pug +++ b/backend/src/emails/templates/resetPassword/html.pug @@ -1,16 +1,19 @@ extends ../layout.pug block content - .w-container(class="wrapper_head") - h1.headline.h1= t('emails.resetPassword.title') - .text-block - include ../includes/salutation.pug - p= t('emails.resetPassword.youOrSomeoneResetPassword') - .content.w-container - h2.heading= t('emails.resetPassword.title') + h2= t('emails.resetPassword.title') + .text-block + include ../includes/salutation.pug + p= t('emails.resetPassword.youOrSomeoneResetPassword') + .content + h2= t('emails.resetPassword.title') div(class="p_content")= t('emails.resetPassword.pleaseClickLink') - a.button-3.w-button(href=resetLink) #{t('emails.general.reset')} + a.button-3(href=resetLink) #{t('emails.general.reset')} div(class="p_content")= t('emails.general.orCopyLink') - a(href=resetLink) #{resetLink} + + a.clink(href=resetLink) #{resetLink} + br + br + br include ../includes/requestNewLink.pug diff --git a/backend/src/emails/templates/transactionLinkRedeemed/html.pug b/backend/src/emails/templates/transactionLinkRedeemed/html.pug index f0e55e552..1af82a042 100644 --- a/backend/src/emails/templates/transactionLinkRedeemed/html.pug +++ b/backend/src/emails/templates/transactionLinkRedeemed/html.pug @@ -1,18 +1,21 @@ extend ../layout.pug block content - .w-container(class="wrapper_head") - h1.headline.h1= t('emails.transactionLinkRedeemed.title', { senderFirstName, senderLastName }) - .text-block - include ../includes/salutation.pug - p= t('emails.transactionLinkRedeemed.hasRedeemedYourLink', { senderFirstName, senderLastName, senderEmail }) - .content.w-container - h2.heading= t('emails.general.transactionDetails') + h2= t('emails.transactionLinkRedeemed.title', { senderFirstName, senderLastName }) + .text-block + include ../includes/salutation.pug + p= t('emails.transactionLinkRedeemed.hasRedeemedYourLink', { senderFirstName, senderLastName, senderEmail }) + .content + h2= t('emails.general.transactionDetails') div(class="p_content")= t('emails.general.amountGDD', { amountGDD: transactionAmount }) br = t('emails.transactionLinkRedeemed.memo', { transactionMemo }) br = t('emails.general.detailsYouFindOnLinkToYourAccount') - a.button-3.w-button(href="https://gdd.gradido.net/transactions") #{t('emails.general.toAccount')} + + a.clink(href="https://gdd.gradido.net/transactions") #{t('emails.general.toAccount')} + br + br + br include ../includes/doNotReply.pug diff --git a/backend/src/emails/templates/transactionReceived/html.pug b/backend/src/emails/templates/transactionReceived/html.pug index b98bec34f..fd113cfe2 100644 --- a/backend/src/emails/templates/transactionReceived/html.pug +++ b/backend/src/emails/templates/transactionReceived/html.pug @@ -1,15 +1,18 @@ extend ../layout.pug block content - .w-container(class="wrapper_head") - h1.headline.h1= t('emails.transactionReceived.title', { senderFirstName, senderLastName, transactionAmount }) - .text-block - include ../includes/salutation.pug - p= t('emails.transactionReceived.haveReceivedAmountGDDFrom', { transactionAmount, senderFirstName, senderLastName, senderEmail }) - .content.w-container - h2.heading= t('emails.general.transactionDetails') + h2= t('emails.transactionReceived.title', { senderFirstName, senderLastName, transactionAmount }) + .text-block + include ../includes/salutation.pug + p= t('emails.transactionReceived.haveReceivedAmountGDDFrom', { transactionAmount, senderFirstName, senderLastName, senderEmail }) + .content + h2= t('emails.general.transactionDetails') div(class="p_content")= t('emails.general.detailsYouFindOnLinkToYourAccount') - a.button-3.w-button(href="https://gdd.gradido.net/transactions") #{t('emails.general.toAccount')} + + a.clink(href="https://gdd.gradido.net/transactions") #{t('emails.general.toAccount')} + br + br + br include ../includes/doNotReply.pug From 5cf067de7dfc7ffc2fd7e66d5788315be61e72de Mon Sep 17 00:00:00 2001 From: elweyn Date: Wed, 17 May 2023 15:42:00 +0200 Subject: [PATCH 054/123] Change on css --- backend/src/emails/templates/includes/webflow.css | 1 + 1 file changed, 1 insertion(+) diff --git a/backend/src/emails/templates/includes/webflow.css b/backend/src/emails/templates/includes/webflow.css index 00afc2b3e..49e6fe916 100644 --- a/backend/src/emails/templates/includes/webflow.css +++ b/backend/src/emails/templates/includes/webflow.css @@ -1,4 +1,5 @@ body{ + display: table; font-family: "Work Sans", sans-serif; text-align: center; text-align: -webkit-center; From b82bad3a1ff16f6901c37080fb4eb007cb673f7e Mon Sep 17 00:00:00 2001 From: elweyn Date: Wed, 17 May 2023 15:54:00 +0200 Subject: [PATCH 055/123] Correct margin of content. --- backend/src/emails/templates/includes/webflow.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/emails/templates/includes/webflow.css b/backend/src/emails/templates/includes/webflow.css index 49e6fe916..22b6d6f19 100644 --- a/backend/src/emails/templates/includes/webflow.css +++ b/backend/src/emails/templates/includes/webflow.css @@ -32,7 +32,7 @@ h2 { .content { display: table; width: 100%; - margin: 40px 10px 0; + margin: 40px 10px 0 0; padding: 20px 10px 40px; border-radius: 24px; background-image: linear-gradient(180deg, #f5f5f5, #f5f5f5); From 02e271ac5a3aa6529b75a24f57e6abed47719a1d Mon Sep 17 00:00:00 2001 From: elweyn Date: Wed, 17 May 2023 16:16:01 +0200 Subject: [PATCH 056/123] Change content display to block margin and padding --- backend/src/emails/templates/includes/webflow.css | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/backend/src/emails/templates/includes/webflow.css b/backend/src/emails/templates/includes/webflow.css index 22b6d6f19..80a28500c 100644 --- a/backend/src/emails/templates/includes/webflow.css +++ b/backend/src/emails/templates/includes/webflow.css @@ -30,10 +30,10 @@ h2 { } .content { - display: table; + display: block; width: 100%; - margin: 40px 10px 0 0; - padding: 20px 10px 40px; + margin: 40px 0 40px 0; + padding: 20px 0 40px 0; border-radius: 24px; background-image: linear-gradient(180deg, #f5f5f5, #f5f5f5); } From 89d72de59dadbf58babc7733e0d574b212a03808 Mon Sep 17 00:00:00 2001 From: elweyn Date: Wed, 17 May 2023 17:57:24 +0200 Subject: [PATCH 057/123] Change display table to block. --- backend/src/emails/templates/includes/webflow.css | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/src/emails/templates/includes/webflow.css b/backend/src/emails/templates/includes/webflow.css index 80a28500c..06700b2f8 100644 --- a/backend/src/emails/templates/includes/webflow.css +++ b/backend/src/emails/templates/includes/webflow.css @@ -1,5 +1,5 @@ body{ - display: table; + display: block; font-family: "Work Sans", sans-serif; text-align: center; text-align: -webkit-center; @@ -16,7 +16,7 @@ h2 { .container { max-width: 680px; margin: 0 auto; - display: table; + display: block; } .head-logo { From ca25be61da68b91525f125bdde9f10f6a8121972 Mon Sep 17 00:00:00 2001 From: elweyn Date: Wed, 17 May 2023 18:01:36 +0200 Subject: [PATCH 058/123] Add 15px bottom of p-content. --- backend/src/emails/templates/includes/webflow.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/emails/templates/includes/webflow.css b/backend/src/emails/templates/includes/webflow.css index 06700b2f8..349d2d206 100644 --- a/backend/src/emails/templates/includes/webflow.css +++ b/backend/src/emails/templates/includes/webflow.css @@ -39,7 +39,7 @@ h2 { } .p_content{ - margin-top: 15px; + margin: 15px 0 15px 0; line-height: 26px; } From 5e4c4b274ca9b235132482e0b79a66a66e8d997a Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Thu, 18 May 2023 11:45:18 +0200 Subject: [PATCH 059/123] removed all test resolvers --- .../api/1_0/resolver/TestResolver.test.ts | 41 ----------------- .../graphql/api/1_0/resolver/TestResolver.ts | 14 ------ .../api/1_1/resolver/TestResolver.test.ts | 44 ------------------- .../graphql/api/1_1/resolver/TestResolver.ts | 14 ------ .../api/2_0/resolver/TestResolver.test.ts | 44 ------------------- .../graphql/api/2_0/resolver/TestResolver.ts | 14 ------ .../src/graphql/api/GetTestApiResult.ts | 13 ------ 7 files changed, 184 deletions(-) delete mode 100644 federation/src/graphql/api/1_0/resolver/TestResolver.test.ts delete mode 100644 federation/src/graphql/api/1_0/resolver/TestResolver.ts delete mode 100644 federation/src/graphql/api/1_1/resolver/TestResolver.test.ts delete mode 100644 federation/src/graphql/api/1_1/resolver/TestResolver.ts delete mode 100644 federation/src/graphql/api/2_0/resolver/TestResolver.test.ts delete mode 100644 federation/src/graphql/api/2_0/resolver/TestResolver.ts delete mode 100644 federation/src/graphql/api/GetTestApiResult.ts diff --git a/federation/src/graphql/api/1_0/resolver/TestResolver.test.ts b/federation/src/graphql/api/1_0/resolver/TestResolver.test.ts deleted file mode 100644 index e236ee5d8..000000000 --- a/federation/src/graphql/api/1_0/resolver/TestResolver.test.ts +++ /dev/null @@ -1,41 +0,0 @@ -/* eslint-disable @typescript-eslint/no-explicit-any */ -/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ -import { createTestClient } from 'apollo-server-testing' -import createServer from '@/server/createServer' - -let query: any - -// to do: We need a setup for the tests that closes the connection -let con: any - -beforeAll(async () => { - const server = await createServer() - con = server.con - query = createTestClient(server.apollo).query -}) - -afterAll(async () => { - await con.close() -}) - -describe('TestResolver', () => { - const getTestQuery = ` - query { - test { - api - } - } - ` - - describe('getTestApi', () => { - it('returns 1_0', async () => { - await expect(query({ query: getTestQuery })).resolves.toMatchObject({ - data: { - test: { - api: '1_0', - }, - }, - }) - }) - }) -}) diff --git a/federation/src/graphql/api/1_0/resolver/TestResolver.ts b/federation/src/graphql/api/1_0/resolver/TestResolver.ts deleted file mode 100644 index 9fb2fc797..000000000 --- a/federation/src/graphql/api/1_0/resolver/TestResolver.ts +++ /dev/null @@ -1,14 +0,0 @@ -// eslint-disable-next-line @typescript-eslint/no-unused-vars -import { Query, Resolver } from 'type-graphql' -import { federationLogger as logger } from '@/server/logger' -import { GetTestApiResult } from '../../GetTestApiResult' - -@Resolver() -// eslint-disable-next-line @typescript-eslint/no-unused-vars -export class TestResolver { - @Query(() => GetTestApiResult) - async test(): Promise { - logger.info(`test api 1_0`) - return new GetTestApiResult('1_0') - } -} diff --git a/federation/src/graphql/api/1_1/resolver/TestResolver.test.ts b/federation/src/graphql/api/1_1/resolver/TestResolver.test.ts deleted file mode 100644 index ad08345a7..000000000 --- a/federation/src/graphql/api/1_1/resolver/TestResolver.test.ts +++ /dev/null @@ -1,44 +0,0 @@ -/* eslint-disable @typescript-eslint/no-explicit-any */ -/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ -import { createTestClient } from 'apollo-server-testing' -import createServer from '@/server/createServer' -import CONFIG from '@/config' - -CONFIG.FEDERATION_API = '1_1' - -let query: any - -// to do: We need a setup for the tests that closes the connection -let con: any - -beforeAll(async () => { - const server = await createServer() - con = server.con - query = createTestClient(server.apollo).query -}) - -afterAll(async () => { - await con.close() -}) - -describe('TestResolver', () => { - const getTestQuery = ` - query { - test { - api - } - } - ` - - describe('getTestApi', () => { - it('returns 1_1', async () => { - await expect(query({ query: getTestQuery })).resolves.toMatchObject({ - data: { - test: { - api: '1_1', - }, - }, - }) - }) - }) -}) diff --git a/federation/src/graphql/api/1_1/resolver/TestResolver.ts b/federation/src/graphql/api/1_1/resolver/TestResolver.ts deleted file mode 100644 index 74e02b74a..000000000 --- a/federation/src/graphql/api/1_1/resolver/TestResolver.ts +++ /dev/null @@ -1,14 +0,0 @@ -// eslint-disable-next-line @typescript-eslint/no-unused-vars -import { Query, Resolver } from 'type-graphql' -import { federationLogger as logger } from '@/server/logger' -import { GetTestApiResult } from '../../GetTestApiResult' - -@Resolver() -// eslint-disable-next-line @typescript-eslint/no-unused-vars -export class TestResolver { - @Query(() => GetTestApiResult) - async test(): Promise { - logger.info(`test api 1_1`) - return new GetTestApiResult('1_1') - } -} diff --git a/federation/src/graphql/api/2_0/resolver/TestResolver.test.ts b/federation/src/graphql/api/2_0/resolver/TestResolver.test.ts deleted file mode 100644 index 02fd8c358..000000000 --- a/federation/src/graphql/api/2_0/resolver/TestResolver.test.ts +++ /dev/null @@ -1,44 +0,0 @@ -/* eslint-disable @typescript-eslint/no-explicit-any */ -/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ -import { createTestClient } from 'apollo-server-testing' -import createServer from '@/server/createServer' -import CONFIG from '@/config' - -CONFIG.FEDERATION_API = '2_0' - -let query: any - -// to do: We need a setup for the tests that closes the connection -let con: any - -beforeAll(async () => { - const server = await createServer() - con = server.con - query = createTestClient(server.apollo).query -}) - -afterAll(async () => { - await con.close() -}) - -describe('TestResolver', () => { - const getTestQuery = ` - query { - test { - api - } - } - ` - - describe('getTestApi', () => { - it('returns 2_0', async () => { - await expect(query({ query: getTestQuery })).resolves.toMatchObject({ - data: { - test: { - api: '2_0', - }, - }, - }) - }) - }) -}) diff --git a/federation/src/graphql/api/2_0/resolver/TestResolver.ts b/federation/src/graphql/api/2_0/resolver/TestResolver.ts deleted file mode 100644 index 4202bbbfe..000000000 --- a/federation/src/graphql/api/2_0/resolver/TestResolver.ts +++ /dev/null @@ -1,14 +0,0 @@ -// eslint-disable-next-line @typescript-eslint/no-unused-vars -import { Query, Resolver } from 'type-graphql' -import { federationLogger as logger } from '@/server/logger' -import { GetTestApiResult } from '../../GetTestApiResult' - -@Resolver() -// eslint-disable-next-line @typescript-eslint/no-unused-vars -export class TestResolver { - @Query(() => GetTestApiResult) - async test(): Promise { - logger.info(`test api 2_0`) - return new GetTestApiResult('2_0') - } -} diff --git a/federation/src/graphql/api/GetTestApiResult.ts b/federation/src/graphql/api/GetTestApiResult.ts deleted file mode 100644 index 942ff7b6c..000000000 --- a/federation/src/graphql/api/GetTestApiResult.ts +++ /dev/null @@ -1,13 +0,0 @@ -// eslint-disable-next-line @typescript-eslint/no-unused-vars -import { Field, ObjectType } from 'type-graphql' - -@ObjectType() -// eslint-disable-next-line @typescript-eslint/no-unused-vars -export class GetTestApiResult { - constructor(apiVersion: string) { - this.api = apiVersion - } - - @Field(() => String) - api: string -} From 15ca48a3321f53b9a5fecab93ac7e5da05af7221 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Thu, 18 May 2023 11:45:51 +0200 Subject: [PATCH 060/123] implement PublicKeyResolver for 1.1 using inheritance --- .../src/graphql/api/1_1/resolver/PublicKeyResolver.ts | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 federation/src/graphql/api/1_1/resolver/PublicKeyResolver.ts diff --git a/federation/src/graphql/api/1_1/resolver/PublicKeyResolver.ts b/federation/src/graphql/api/1_1/resolver/PublicKeyResolver.ts new file mode 100644 index 000000000..b285cbba8 --- /dev/null +++ b/federation/src/graphql/api/1_1/resolver/PublicKeyResolver.ts @@ -0,0 +1,7 @@ +import { Resolver } from 'type-graphql' +// eslint-disable-next-line camelcase +import { PublicKeyResolver as PublicKeyResolver_1_0 } from '../../1_0/resolver/PublicKeyResolver' + +@Resolver() +// eslint-disable-next-line camelcase, @typescript-eslint/no-unused-vars +export class PublicKeyResolver extends PublicKeyResolver_1_0 {} From 403c0f1f646cd4df8cd2d9cc359ead67f545a1ae Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Thu, 18 May 2023 11:48:01 +0200 Subject: [PATCH 061/123] removed Decimal Scalar to meet coverage requirement, no decimal is used yet --- .../src/graphql/scalar/{Decimal.ts => Decimal.ts.unused} | 0 federation/src/graphql/schema.ts | 6 +++--- 2 files changed, 3 insertions(+), 3 deletions(-) rename federation/src/graphql/scalar/{Decimal.ts => Decimal.ts.unused} (100%) diff --git a/federation/src/graphql/scalar/Decimal.ts b/federation/src/graphql/scalar/Decimal.ts.unused similarity index 100% rename from federation/src/graphql/scalar/Decimal.ts rename to federation/src/graphql/scalar/Decimal.ts.unused diff --git a/federation/src/graphql/schema.ts b/federation/src/graphql/schema.ts index 92977882b..015ea124f 100644 --- a/federation/src/graphql/schema.ts +++ b/federation/src/graphql/schema.ts @@ -2,15 +2,15 @@ import { GraphQLSchema } from 'graphql' import { buildSchema } from 'type-graphql' // import isAuthorized from './directive/isAuthorized' -import DecimalScalar from './scalar/Decimal' -import Decimal from 'decimal.js-light' +// import DecimalScalar from './scalar/Decimal' +// import Decimal from 'decimal.js-light' import { getApiResolvers } from './api/schema' const schema = async (): Promise => { return await buildSchema({ resolvers: [getApiResolvers()], // authChecker: isAuthorized, - scalarsMap: [{ type: Decimal, scalar: DecimalScalar }], + // scalarsMap: [{ type: Decimal, scalar: DecimalScalar }], }) } From 74b9c86e6650dc59c00c6df29d301956b9dff5d5 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Thu, 18 May 2023 11:54:36 +0200 Subject: [PATCH 062/123] remove reference to api 2.0 from bare_metal .env.dist --- deployment/bare_metal/.env.dist | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deployment/bare_metal/.env.dist b/deployment/bare_metal/.env.dist index f20a8c2d1..f81c62eca 100644 --- a/deployment/bare_metal/.env.dist +++ b/deployment/bare_metal/.env.dist @@ -68,7 +68,7 @@ FEDERATION_COMMUNITY_API_PORT=5000 FEDERATION_CONFIG_VERSION=v1.2023-01-09 # comma separated list of api-versions, which cause starting several federation modules -FEDERATION_COMMUNITY_APIS=1_0,1_1,2_0 +FEDERATION_COMMUNITY_APIS=1_0,1_1 # database DATABASE_CONFIG_VERSION=v1.2022-03-18 From cf941518ed88283a16e012bc34599bdc4e7f8e4b Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Thu, 18 May 2023 11:56:50 +0200 Subject: [PATCH 063/123] lint fixes --- federation/src/graphql/api/1_1/resolver/PublicKeyResolver.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/federation/src/graphql/api/1_1/resolver/PublicKeyResolver.ts b/federation/src/graphql/api/1_1/resolver/PublicKeyResolver.ts index b285cbba8..e03b36075 100644 --- a/federation/src/graphql/api/1_1/resolver/PublicKeyResolver.ts +++ b/federation/src/graphql/api/1_1/resolver/PublicKeyResolver.ts @@ -1,3 +1,4 @@ +// eslint-disable-next-line @typescript-eslint/no-unused-vars import { Resolver } from 'type-graphql' // eslint-disable-next-line camelcase import { PublicKeyResolver as PublicKeyResolver_1_0 } from '../../1_0/resolver/PublicKeyResolver' From f4c19117b4da2a4f62d60cba923144731060a05b Mon Sep 17 00:00:00 2001 From: elweyn Date: Fri, 19 May 2023 09:20:09 +0200 Subject: [PATCH 064/123] Change test from string tests to snapshots. --- .../sendEmailVariants.test.ts.snap | 1683 +++++++++++++++++ backend/src/emails/sendEmailVariants.test.ts | 618 +----- 2 files changed, 1701 insertions(+), 600 deletions(-) create mode 100644 backend/src/emails/__snapshots__/sendEmailVariants.test.ts.snap diff --git a/backend/src/emails/__snapshots__/sendEmailVariants.test.ts.snap b/backend/src/emails/__snapshots__/sendEmailVariants.test.ts.snap new file mode 100644 index 000000000..dfcddcec2 --- /dev/null +++ b/backend/src/emails/__snapshots__/sendEmailVariants.test.ts.snap @@ -0,0 +1,1683 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`sendEmailVariants sendAccountActivationEmail result has the correct html as snapshot 1`] = ` +" + + + + + + + + +
+
+
\\"Gradido
+
+
+

Email Verification

+
+

Hello Peter Lustig,

+

Your email address has just been registered with Gradido.

+
+
+

Complete registration

+
Please click here to complete the registration and activate your Gradido account.
Activate account +
Or copy the link into your browser window.
http://localhost/checkEmail/6627633878930542284


+ +

Request new valid link

+
The link has a validity of 23 hours and 30 minutes. +If the validity of the link has already expired, you can have a new link sent to you here.
New link +
+
+
+

Kind regards,
your Gradido team +

+
+
+ +
+ +" +`; + +exports[`sendEmailVariants sendAccountMultiRegistrationEmail calls "sendEmailTranslated" result has the correct html as snapshot 1`] = ` +" + + + + + + + + +
+
+
\\"Gradido
+
+
+

Try To Register Again With Your Email

+
+

Hello Peter Lustig,

+

Your email address has just been used again to register an account with Gradido.
However, an account already exists for your email address. +

+
+
+

Reset password

+
If you have forgotten your password, please click here.
reset +
Or copy the link into your browser window.
http://localhost/forgot-password +

Contact support

+
If you did not try to register again, please contact our support:
support@supportmail.com +
+
+

Kind regards,
your Gradido team +

+
+
+ +
+ +" +`; + +exports[`sendEmailVariants sendAddedContributionMessageEmail result has the correct html as snapshot 1`] = ` +" + + + + + + + + +
+
+
\\"Gradido
+
+
+

Message about your common good contribution

+
+

Hello Peter Lustig,

+

You have received a message from Bibi Bloxberg regarding your common good contribution “My contribution.”.

+
+
+

Read and reply to message

+
To view and reply to the message, go to the “Creation” menu in your Gradido account and click on the “My contributions” tab.
To account


+
Please do not reply to this email.
+
+
+

Kind regards,
your Gradido team +

+
+
+ +
+ +" +`; + +exports[`sendEmailVariants sendContributionConfirmedEmail result has the correct html as snapshot 1`] = ` +" + + + + + + + + +
+
+
\\"Gradido
+
+
+

Your contribution to the common good was confirmed

+
+

Hello Peter Lustig,

+

Your common good contribution “My contribution.” has just been approved by Bibi Bloxberg. Your Gradido account has been credited with 23.54 GDD.

+
+
+

Contribution details

+
To see your common good contributions and related messages, go to the “Creation” menu in your Gradido account and click on the “My contributions” tab.
To account +
Or copy the link into your browser window.
https://gdd.gradido.net/community/contributions +
Please do not reply to this email.
+
+
+

Kind regards,
your Gradido team +

+
+
+ +
+ +" +`; + +exports[`sendEmailVariants sendContributionDeletedEmail result has the correct html as snapshot 1`] = ` +" + + + + + + + + +
+
+
\\"Gradido
+
+
+

Your common good contribution was deleted

+
+

Hello Peter Lustig,

+

Your common good contribution “My contribution.” was deleted by Bibi Bloxberg.

+
+
+

Contribution details

+
To see your common good contributions and related messages, go to the “Creation” menu in your Gradido account and click on the “My contributions” tab.
To account +
Or copy the link into your browser window.
https://gdd.gradido.net/community/contributions +
Please do not reply to this email.
+
+
+

Kind regards,
your Gradido team +

+
+
+ +
+ +" +`; + +exports[`sendEmailVariants sendContributionDeniedEmail result has the correct html as snapshot 1`] = ` +" + + + + + + + + +
+
+
\\"Gradido
+
+
+

Your common good contribution was rejected

+
+

Hello Peter Lustig,

+

Your common good contribution “My contribution.” was rejected by Bibi Bloxberg.

+
+
+

Contribution details

+
To see your common good contributions and related messages, go to the “Creation” menu in your Gradido account and click on the “My contributions” tab.
To account +
Or copy the link into your browser window.
https://gdd.gradido.net/community/contributions +
Please do not reply to this email.
+
+
+

Kind regards,
your Gradido team +

+
+
+ +
+ +" +`; + +exports[`sendEmailVariants sendResetPasswordEmail result has the correct html as snapshot 1`] = ` +" + + + + + + + + +
+
+
\\"Gradido
+
+
+

Reset password

+
+

Hello Peter Lustig,

+

You, or someone else, requested a password reset for this account.

+
+
+

Reset password

+
If it was you, please click here.
reset +
Or copy the link into your browser window.
http://localhost/reset-password/3762660021544901417


+ +

Request new valid link

+
The link has a validity of 23 hours and 30 minutes. +If the validity of the link has already expired, you can have a new link sent to you here.
New link +
+
+
+

Kind regards,
your Gradido team +

+
+
+ +
+ +" +`; + +exports[`sendEmailVariants sendTransactionLinkRedeemedEmail result has the correct html as snapshot 1`] = ` +" + + + + + + + + +
+
+
\\"Gradido
+
+
+

Bibi Bloxberg has redeemed your Gradido link

+
+

Hello Peter Lustig,

+

Bibi Bloxberg (bibi@bloxberg.de) has just redeemed your link.

+
+
+

Transaction details

+
Amount: 17.65 GDD
Message: You deserve it! 🙏🏼
You can find transaction details in your Gradido account. +
To account


+
Please do not reply to this email.
+
+
+

Kind regards,
your Gradido team +

+
+
+ +
+ +" +`; + +exports[`sendEmailVariants sendTransactionReceivedEmail result has the correct html as snapshot 1`] = ` +" + + + + + + + + +
+
+
\\"Gradido
+
+
+

Bibi Bloxberg has sent you 37.40 Gradido

+
+

Hello Peter Lustig,

+

You have just received 37.40 GDD from Bibi Bloxberg (bibi@bloxberg.de).

+
+
+

Transaction details

+
You can find transaction details in your Gradido account.
To account


+
Please do not reply to this email.
+
+
+

Kind regards,
your Gradido team +

+
+
+ +
+ +" +`; diff --git a/backend/src/emails/sendEmailVariants.test.ts b/backend/src/emails/sendEmailVariants.test.ts index 61edcc7f0..d46ef0f6f 100644 --- a/backend/src/emails/sendEmailVariants.test.ts +++ b/backend/src/emails/sendEmailVariants.test.ts @@ -112,68 +112,8 @@ describe('sendEmailVariants', () => { }) }) - it('has correct header', () => { - expect(result.originalMessage.html).toContain(`src="${headerImageURL}"`) - }) - - it('has correct doctype and language set', () => { - expect(result.originalMessage.html).toContain('') - expect(result.originalMessage.html).toContain(' { - expect(result.originalMessage.html).toContain( - '>Message about your common good contribution', - ) - expect(result.originalMessage.html).toContain('Hello Peter Lustig,') - expect(result.originalMessage.html).toContain( - 'You have received a message from Bibi Bloxberg regarding your common good contribution “My contribution.”.', - ) - }) - - it('has correct CTA block', () => { - expect(result.originalMessage.html).toContain('>Read and reply to message') - expect(result.originalMessage.html).toContain( - 'To view and reply to the message, go to the “Creation” menu in your Gradido account and click on the “My contributions” tab.', - ) - expect(result.originalMessage.html).toContain( - 'To account') - expect(result.originalMessage.html).toContain('Please do not reply to this email.') - }) - - it('has correct greating formula', () => { - expect(result.originalMessage.html).toContain('Kind regards,your Gradido team') - }) - - it('has correct footer', () => { - expect(result.originalMessage.html).toContain('href="https://t.me/GradidoGruppe"') - expect(result.originalMessage.html).toContain('href="https://www.youtube.com/c/GradidoNet"') - expect(result.originalMessage.html).toContain('href="https://twitter.com/gradido"') - expect(result.originalMessage.html).toContain( - 'href="https://www.facebook.com/groups/Gradido/"', - ) - expect(result.originalMessage.html).toContain('
{ + expect(result.originalMessage.html).toMatchSnapshot() }) }) }) @@ -230,78 +170,8 @@ describe('sendEmailVariants', () => { }) }) - it('has correct header', () => { - expect(result.originalMessage.html).toContain(`src="${headerImageURL}"`) - }) - - it('has correct doctype and language set', () => { - expect(result.originalMessage.html).toContain('') - expect(result.originalMessage.html).toContain(' { - expect(result.originalMessage.html).toContain('>Email Verification') - expect(result.originalMessage.html).toContain('Hello Peter Lustig,') - expect(result.originalMessage.html).toContain( - 'Your email address has just been registered with Gradido.', - ) - }) - - it('has correct CTA block', () => { - expect(result.originalMessage.html).toContain('>Complete registration') - expect(result.originalMessage.html).toContain( - 'Please click here to complete the registration and activate your Gradido account.', - ) - expect(result.originalMessage.html).toContain( - 'href="http://localhost/checkEmail/6627633878930542284', - ) - expect(result.originalMessage.html).toContain('>Activate account') - expect(result.originalMessage.html).toContain('Or copy the link into your browser window.') - expect(result.originalMessage.html).toContain( - '>http://localhost/checkEmail/6627633878930542284', - ) - expect(result.originalMessage.html).toContain('>Request new valid link') - expect(result.originalMessage.html).toContain( - 'The link has a validity of 23 hours and 30 minutes.', - ) - expect(result.originalMessage.html).toContain( - 'If the validity of the link has already expired, you can have a new link sent to you here.', - ) - expect(result.originalMessage.html).toContain('>New link') - expect(result.originalMessage.html).toContain(`href="${CONFIG.EMAIL_LINK_FORGOTPASSWORD}"`) - }) - - it('has correct greating formula', () => { - expect(result.originalMessage.html).toContain('Kind regards,your Gradido team') - }) - - it('has correct footer', () => { - expect(result.originalMessage.html).toContain('href="https://t.me/GradidoGruppe"') - expect(result.originalMessage.html).toContain('href="https://www.youtube.com/c/GradidoNet"') - expect(result.originalMessage.html).toContain('href="https://twitter.com/gradido"') - expect(result.originalMessage.html).toContain( - 'href="https://www.facebook.com/groups/Gradido/"', - ) - expect(result.originalMessage.html).toContain('
{ + expect(result.originalMessage.html).toMatchSnapshot() }) }) }) @@ -353,82 +223,8 @@ describe('sendEmailVariants', () => { }) }) - it('has correct header', () => { - expect(result.originalMessage.html).toContain(`src="${headerImageURL}"`) - }) - - it('has correct doctype and language set', () => { - expect(result.originalMessage.html).toContain('') - expect(result.originalMessage.html).toContain(' { - expect(result.originalMessage.html).toContain( - '>Try To Register Again With Your Email', - ) - expect(result.originalMessage.html).toContain('Hello Peter Lustig,') - expect(result.originalMessage.html).toContain( - 'Your email address has just been used again to register an account with Gradido.', - ) - expect(result.originalMessage.html).toContain( - 'However, an account already exists for your email address.', - ) - }) - - it('has correct CTA block', () => { - expect(result.originalMessage.html).toContain('>Reset password') - expect(result.originalMessage.html).toContain( - 'If you have forgotten your password, please click here.', - ) - expect(result.originalMessage.html).toContain( - `reset') - expect(result.originalMessage.html).toContain( - 'Or copy the link into your browser window.', - ) - expect(result.originalMessage.html).toContain(`>${CONFIG.EMAIL_LINK_FORGOTPASSWORD}`) - expect(result.originalMessage.html).toContain('>Contact support') - expect(result.originalMessage.html).toContain( - 'If you did not try to register again, please contact our support:', - ) - expect(result.originalMessage.html).toContain('href="mailto:support@supportmail.com"') - expect(result.originalMessage.html).toContain('>support@supportmail.com') - }) - - it('has correct greating formula', () => { - expect(result.originalMessage.html).toContain('Kind regards,your Gradido team') - }) - - it('has correct footer', () => { - expect(result.originalMessage.html).toContain('href="https://t.me/GradidoGruppe"') - expect(result.originalMessage.html).toContain( - 'href="https://www.youtube.com/c/GradidoNet"', - ) - expect(result.originalMessage.html).toContain('href="https://twitter.com/gradido"') - expect(result.originalMessage.html).toContain( - 'href="https://www.facebook.com/groups/Gradido/"', - ) - expect(result.originalMessage.html).toContain('
{ + expect(result.originalMessage.html).toMatchSnapshot() }) }) }) @@ -490,72 +286,8 @@ describe('sendEmailVariants', () => { }) }) - it('has correct header', () => { - expect(result.originalMessage.html).toContain(`src="${headerImageURL}"`) - }) - - it('has correct doctype and language set', () => { - expect(result.originalMessage.html).toContain('') - expect(result.originalMessage.html).toContain(' { - expect(result.originalMessage.html).toContain( - '>Your contribution to the common good was confirmed', - ) - expect(result.originalMessage.html).toContain('Hello Peter Lustig,') - expect(result.originalMessage.html).toContain( - 'Your common good contribution “My contribution.” has just been approved by Bibi Bloxberg. Your Gradido account has been credited with 23.54 GDD.', - ) - }) - - it('has correct CTA block', () => { - expect(result.originalMessage.html).toContain('>Contribution details') - expect(result.originalMessage.html).toContain( - 'To see your common good contributions and related messages, go to the “Creation” menu in your Gradido account and click on the “My contributions” tab.', - ) - expect(result.originalMessage.html).toContain( - 'href="https://gdd.gradido.net/community/contributions', - ) - expect(result.originalMessage.html).toContain('>To account') - expect(result.originalMessage.html).toContain('Or copy the link into your browser window.') - expect(result.originalMessage.html).toContain( - '>https://gdd.gradido.net/community/contributions', - ) - expect(result.originalMessage.html).toContain('Please do not reply to this email.') - }) - - it('has correct greating formula', () => { - expect(result.originalMessage.html).toContain('Kind regards,your Gradido team') - }) - - it('has correct footer', () => { - expect(result.originalMessage.html).toContain('href="https://t.me/GradidoGruppe"') - expect(result.originalMessage.html).toContain('href="https://www.youtube.com/c/GradidoNet"') - expect(result.originalMessage.html).toContain('href="https://twitter.com/gradido"') - expect(result.originalMessage.html).toContain( - 'href="https://www.facebook.com/groups/Gradido/"', - ) - expect(result.originalMessage.html).toContain('
{ + expect(result.originalMessage.html).toMatchSnapshot() }) }) }) @@ -614,68 +346,8 @@ describe('sendEmailVariants', () => { }) }) - it('has correct header', () => { - expect(result.originalMessage.html).toContain(`src="${headerImageURL}"`) - }) - - it('has correct doctype and language set', () => { - expect(result.originalMessage.html).toContain('') - expect(result.originalMessage.html).toContain(' { - expect(result.originalMessage.html).toContain( - '>Your common good contribution was rejected', - ) - expect(result.originalMessage.html).toContain('Hello Peter Lustig,') - expect(result.originalMessage.html).toContain( - 'Your common good contribution “My contribution.” was rejected by Bibi Bloxberg.', - ) - }) - - it('has correct CTA block', () => { - expect(result.originalMessage.html).toContain('>Contribution details') - expect(result.originalMessage.html).toContain( - 'To see your common good contributions and related messages, go to the “Creation” menu in your Gradido account and click on the “My contributions” tab.', - ) - expect(result.originalMessage.html).toContain( - 'To account') - expect(result.originalMessage.html).toContain('Please do not reply to this email.') - }) - - it('has correct greating formula', () => { - expect(result.originalMessage.html).toContain('Kind regards,your Gradido team') - }) - - it('has correct footer', () => { - expect(result.originalMessage.html).toContain('href="https://t.me/GradidoGruppe"') - expect(result.originalMessage.html).toContain('href="https://www.youtube.com/c/GradidoNet"') - expect(result.originalMessage.html).toContain('href="https://twitter.com/gradido"') - expect(result.originalMessage.html).toContain( - 'href="https://www.facebook.com/groups/Gradido/"', - ) - expect(result.originalMessage.html).toContain('
{ + expect(result.originalMessage.html).toMatchSnapshot() }) }) }) @@ -734,72 +406,8 @@ describe('sendEmailVariants', () => { }) }) - it('has correct header', () => { - expect(result.originalMessage.html).toContain(`src="${headerImageURL}"`) - }) - - it('has correct doctype and language set', () => { - expect(result.originalMessage.html).toContain('') - expect(result.originalMessage.html).toContain(' { - expect(result.originalMessage.html).toContain( - '>Your common good contribution was deleted', - ) - expect(result.originalMessage.html).toContain('Hello Peter Lustig,') - expect(result.originalMessage.html).toContain( - 'Your common good contribution “My contribution.” was deleted by Bibi Bloxberg.', - ) - }) - - it('has correct CTA block', () => { - expect(result.originalMessage.html).toContain('>Contribution details') - expect(result.originalMessage.html).toContain( - 'To see your common good contributions and related messages, go to the “Creation” menu in your Gradido account and click on the “My contributions” tab.', - ) - expect(result.originalMessage.html).toContain( - 'href="https://gdd.gradido.net/community/contributions', - ) - expect(result.originalMessage.html).toContain('>To account') - expect(result.originalMessage.html).toContain('Or copy the link into your browser window.') - expect(result.originalMessage.html).toContain( - '>https://gdd.gradido.net/community/contributions', - ) - expect(result.originalMessage.html).toContain('Please do not reply to this email.') - }) - - it('has correct greating formula', () => { - expect(result.originalMessage.html).toContain('Kind regards,your Gradido team') - }) - - it('has correct footer', () => { - expect(result.originalMessage.html).toContain('href="https://t.me/GradidoGruppe"') - expect(result.originalMessage.html).toContain('href="https://www.youtube.com/c/GradidoNet"') - expect(result.originalMessage.html).toContain('href="https://twitter.com/gradido"') - expect(result.originalMessage.html).toContain( - 'href="https://www.facebook.com/groups/Gradido/"', - ) - expect(result.originalMessage.html).toContain('
{ + expect(result.originalMessage.html).toMatchSnapshot() }) }) }) @@ -856,76 +464,8 @@ describe('sendEmailVariants', () => { }) }) - it('has correct header', () => { - expect(result.originalMessage.html).toContain(`src="${headerImageURL}"`) - }) - - it('has correct doctype and language set', () => { - expect(result.originalMessage.html).toContain('') - expect(result.originalMessage.html).toContain(' { - expect(result.originalMessage.html).toContain('>Reset password') - expect(result.originalMessage.html).toContain('Hello Peter Lustig,') - expect(result.originalMessage.html).toContain( - 'You, or someone else, requested a password reset for this account.', - ) - }) - - it('has correct CTA block', () => { - expect(result.originalMessage.html).toContain('>Reset password') - expect(result.originalMessage.html).toContain('If it was you, please click here.') - expect(result.originalMessage.html).toContain( - 'reset') - expect(result.originalMessage.html).toContain('Or copy the link into your browser window.') - expect(result.originalMessage.html).toContain( - 'http://localhost/reset-password/3762660021544901417', - ) - expect(result.originalMessage.html).toContain('>Request new valid link') - expect(result.originalMessage.html).toContain( - 'The link has a validity of 23 hours and 30 minutes.', - ) - expect(result.originalMessage.html).toContain( - 'If the validity of the link has already expired, you can have a new link sent to you here.', - ) - expect(result.originalMessage.html).toContain('>New link') - expect(result.originalMessage.html).toContain(`href="${CONFIG.EMAIL_LINK_FORGOTPASSWORD}"`) - }) - - it('has correct greating formula', () => { - expect(result.originalMessage.html).toContain('Kind regards,your Gradido team') - }) - - it('has correct footer', () => { - expect(result.originalMessage.html).toContain('href="https://t.me/GradidoGruppe"') - expect(result.originalMessage.html).toContain('href="https://www.youtube.com/c/GradidoNet"') - expect(result.originalMessage.html).toContain('href="https://twitter.com/gradido"') - expect(result.originalMessage.html).toContain( - 'href="https://www.facebook.com/groups/Gradido/"', - ) - expect(result.originalMessage.html).toContain('
{ + expect(result.originalMessage.html).toMatchSnapshot() }) }) }) @@ -988,70 +528,8 @@ describe('sendEmailVariants', () => { }) }) - it('has correct header', () => { - expect(result.originalMessage.html).toContain(`src="${headerImageURL}"`) - }) - - it('has correct doctype and language set', () => { - expect(result.originalMessage.html).toContain('') - expect(result.originalMessage.html).toContain(' { - expect(result.originalMessage.html).toContain( - '>Bibi Bloxberg has redeemed your Gradido link', - ) - expect(result.originalMessage.html).toContain('Hello Peter Lustig,') - expect(result.originalMessage.html).toContain( - 'Bibi Bloxberg (bibi@bloxberg.de) has just redeemed your link.', - ) - }) - - it('has correct CTA block', () => { - expect(result.originalMessage.html).toContain('>Transaction details') - expect(result.originalMessage.html).toContain('Amount: 17.65 GDD') - expect(result.originalMessage.html).toContain('Message: You deserve it! 🙏🏼') - expect(result.originalMessage.html).toContain( - 'You can find transaction details in your Gradido account.', - ) - expect(result.originalMessage.html).toContain( - 'To account') - expect(result.originalMessage.html).toContain('Please do not reply to this email.') - }) - - it('has correct greating formula', () => { - expect(result.originalMessage.html).toContain('Kind regards,your Gradido team') - }) - - it('has correct footer', () => { - expect(result.originalMessage.html).toContain('href="https://t.me/GradidoGruppe"') - expect(result.originalMessage.html).toContain('href="https://www.youtube.com/c/GradidoNet"') - expect(result.originalMessage.html).toContain('href="https://twitter.com/gradido"') - expect(result.originalMessage.html).toContain( - 'href="https://www.facebook.com/groups/Gradido/"', - ) - expect(result.originalMessage.html).toContain('
{ + expect(result.originalMessage.html).toMatchSnapshot() }) }) }) @@ -1112,68 +590,8 @@ describe('sendEmailVariants', () => { }) }) - it('has correct header', () => { - expect(result.originalMessage.html).toContain(`src="${headerImageURL}"`) - }) - - it('has correct doctype and language set', () => { - expect(result.originalMessage.html).toContain('') - expect(result.originalMessage.html).toContain(' { - expect(result.originalMessage.html).toContain( - '>Bibi Bloxberg has sent you 37.40 Gradido', - ) - expect(result.originalMessage.html).toContain('Hello Peter Lustig,') - expect(result.originalMessage.html).toContain( - 'You have just received 37.40 GDD from Bibi Bloxberg (bibi@bloxberg.de).', - ) - }) - - it('has correct CTA block', () => { - expect(result.originalMessage.html).toContain('>Transaction details') - expect(result.originalMessage.html).toContain( - 'You can find transaction details in your Gradido account.', - ) - expect(result.originalMessage.html).toContain( - 'To account') - expect(result.originalMessage.html).toContain('Please do not reply to this email.') - }) - - it('has correct greating formula', () => { - expect(result.originalMessage.html).toContain('Kind regards,your Gradido team') - }) - - it('has correct footer', () => { - expect(result.originalMessage.html).toContain('href="https://t.me/GradidoGruppe"') - expect(result.originalMessage.html).toContain('href="https://www.youtube.com/c/GradidoNet"') - expect(result.originalMessage.html).toContain('href="https://twitter.com/gradido"') - expect(result.originalMessage.html).toContain( - 'href="https://www.facebook.com/groups/Gradido/"', - ) - expect(result.originalMessage.html).toContain('
{ + expect(result.originalMessage.html).toMatchSnapshot() }) }) }) From 5d4d424ef1c0827c975f309be590e444f972053f Mon Sep 17 00:00:00 2001 From: elweyn Date: Fri, 19 May 2023 09:34:32 +0200 Subject: [PATCH 065/123] Remove unused variable. --- backend/src/emails/sendEmailVariants.test.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/src/emails/sendEmailVariants.test.ts b/backend/src/emails/sendEmailVariants.test.ts index d46ef0f6f..35a9b56f2 100644 --- a/backend/src/emails/sendEmailVariants.test.ts +++ b/backend/src/emails/sendEmailVariants.test.ts @@ -34,8 +34,8 @@ let testEnv: { // TODO // when https://gdd.gradido.net/img/gradido-email-header.jpg is on production, // replace this URL by https://gdd.gradido.net/img/brand/gradido-email-header.png -const headerImageURL = - 'data:image/jpeg;base64,/9j/4QAWRXhpZgAATU0AKgAAAAgAAAAAAAD/7QA4UGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAAA4QklNBCUAAAAAABDUHYzZjwCyBOmACZjs+EJ+/+IH2ElDQ19QUk9GSUxFAAEBAAAHyGFwcGwCIAAAbW50clJHQiBYWVogB9kAAgAZAAsAGgALYWNzcEFQUEwAAAAAYXBwbAAAAAAAAAAAAAAAAAAAAAAAAPbWAAEAAAAA0y1hcHBsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALZGVzYwAAAQgAAABvZHNjbQAAAXgAAAWKY3BydAAABwQAAAA4d3RwdAAABzwAAAAUclhZWgAAB1AAAAAUZ1hZWgAAB2QAAAAUYlhZWgAAB3gAAAAUclRSQwAAB4wAAAAOY2hhZAAAB5wAAAAsYlRSQwAAB4wAAAAOZ1RSQwAAB4wAAAAOZGVzYwAAAAAAAAAUR2VuZXJpYyBSR0IgUHJvZmlsZQAAAAAAAAAAAAAAFEdlbmVyaWMgUkdCIFByb2ZpbGUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG1sdWMAAAAAAAAAHwAAAAxza1NLAAAAKAAAAYRkYURLAAAAJAAAAaxjYUVTAAAAJAAAAdB2aVZOAAAAJAAAAfRwdEJSAAAAJgAAAhh1a1VBAAAAKgAAAj5mckZVAAAAKAAAAmhodUhVAAAAKAAAApB6aFRXAAAAEgAAArhrb0tSAAAAFgAAAspuYk5PAAAAJgAAAuBjc0NaAAAAIgAAAwZoZUlMAAAAHgAAAyhyb1JPAAAAJAAAA0ZkZURFAAAALAAAA2ppdElUAAAAKAAAA5ZzdlNFAAAAJgAAAuB6aENOAAAAEgAAA75qYUpQAAAAGgAAA9BlbEdSAAAAIgAAA+pwdFBPAAAAJgAABAxubE5MAAAAKAAABDJlc0VTAAAAJgAABAx0aFRIAAAAJAAABFp0clRSAAAAIgAABH5maUZJAAAAKAAABKBockhSAAAAKAAABMhwbFBMAAAALAAABPBydVJVAAAAIgAABRxlblVTAAAAJgAABT5hckVHAAAAJgAABWQAVgFhAGUAbwBiAGUAYwBuAP0AIABSAEcAQgAgAHAAcgBvAGYAaQBsAEcAZQBuAGUAcgBlAGwAIABSAEcAQgAtAHAAcgBvAGYAaQBsAFAAZQByAGYAaQBsACAAUgBHAEIAIABnAGUAbgDoAHIAaQBjAEMepQB1ACAAaADsAG4AaAAgAFIARwBCACAAQwBoAHUAbgBnAFAAZQByAGYAaQBsACAAUgBHAEIAIABHAGUAbgDpAHIAaQBjAG8EFwQwBDMEMAQ7BEwEPQQ4BDkAIAQ/BEAEPgREBDAEOQQ7ACAAUgBHAEIAUAByAG8AZgBpAGwAIABnAOkAbgDpAHIAaQBxAHUAZQAgAFIAVgBCAMEAbAB0AGEAbADhAG4AbwBzACAAUgBHAEIAIABwAHIAbwBmAGkAbJAadSgAUgBHAEKCcl9pY8+P8Md8vBgAIABSAEcAQgAg1QS4XNMMx3wARwBlAG4AZQByAGkAcwBrACAAUgBHAEIALQBwAHIAbwBmAGkAbABPAGIAZQBjAG4A/QAgAFIARwBCACAAcAByAG8AZgBpAGwF5AXoBdUF5AXZBdwAIABSAEcAQgAgBdsF3AXcBdkAUAByAG8AZgBpAGwAIABSAEcAQgAgAGcAZQBuAGUAcgBpAGMAQQBsAGwAZwBlAG0AZQBpAG4AZQBzACAAUgBHAEIALQBQAHIAbwBmAGkAbABQAHIAbwBmAGkAbABvACAAUgBHAEIAIABnAGUAbgBlAHIAaQBjAG9mbpAaAFIARwBCY8+P8GWHTvZOAIIsACAAUgBHAEIAIDDXMO0w1TChMKQw6wOTA7UDvQO5A7oDzAAgA8ADwQO/A8YDrwO7ACAAUgBHAEIAUABlAHIAZgBpAGwAIABSAEcAQgAgAGcAZQBuAOkAcgBpAGMAbwBBAGwAZwBlAG0AZQBlAG4AIABSAEcAQgAtAHAAcgBvAGYAaQBlAGwOQg4bDiMORA4fDiUOTAAgAFIARwBCACAOFw4xDkgOJw5EDhsARwBlAG4AZQBsACAAUgBHAEIAIABQAHIAbwBmAGkAbABpAFkAbABlAGkAbgBlAG4AIABSAEcAQgAtAHAAcgBvAGYAaQBpAGwAaQBHAGUAbgBlAHIAaQENAGsAaQAgAFIARwBCACAAcAByAG8AZgBpAGwAVQBuAGkAdwBlAHIAcwBhAGwAbgB5ACAAcAByAG8AZgBpAGwAIABSAEcAQgQeBDEESQQ4BDkAIAQ/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oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAjZO4qu8Qb2NXKQgHrQBkSQY6j8az5rUMOR+NdGUPaqrwK33ePagDkZ7HrxWLPpwOcCu9khxwRVGW1U9RQB5pc6YO4/EVjTaSD2/A16nLY+lZsunr3FAHlcmkf7P5U1NHBPKfnXpL6appo0xc96AOIg0dR149hW9aaZt+6PxNdFFp4B6ZrVgs/UUAZlpp5GMAGuggtAoGRVmKHb2rShizyen86AK0cIAzg1cjgXbk5yauIufpUtAFHyV9/wDP4UohT3q7RQBVESj+H/P61IIz9KmooAYEHf8Az+tPoooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA/9f+/iiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACkKg0tFAEJjP1qu8KnpxV6kIB60AZL25Hb8qrNADW0wAOBTCqt1FAGE1qp6imi1APT/AD+VbhiQ9qb5Ke9AGStuB2qwkPOBz9K0BEg7U8ADpQBAkGPvflVpUz9KVAD1qWgAAxxRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB/9k=' +// const headerImageURL = +// 'data:image/jpeg;base64,/9j/4QAWRXhpZgAATU0AKgAAAAgAAAAAAAD/7QA4UGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAAA4QklNBCUAAAAAABDUHYzZjwCyBOmACZjs+EJ+/+IH2ElDQ19QUk9GSUxFAAEBAAAHyGFwcGwCIAAAbW50clJHQiBYWVogB9kAAgAZAAsAGgALYWNzcEFQUEwAAAAAYXBwbAAAAAAAAAAAAAAAAAAAAAAAAPbWAAEAAAAA0y1hcHBsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALZGVzYwAAAQgAAABvZHNjbQAAAXgAAAWKY3BydAAABwQAAAA4d3RwdAAABzwAAAAUclhZWgAAB1AAAAAUZ1hZWgAAB2QAAAAUYlhZWgAAB3gAAAAUclRSQwAAB4wAAAAOY2hhZAAAB5wAAAAsYlRSQwAAB4wAAAAOZ1RSQwAAB4wAAAAOZGVzYwAAAAAAAAAUR2VuZXJpYyBSR0IgUHJvZmlsZQAAAAAAAAAAAAAAFEdlbmVyaWMgUkdCIFByb2ZpbGUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG1sdWMAAAAAAAAAHwAAAAxza1NLAAAAKAAAAYRkYURLAAAAJAAAAaxjYUVTAAAAJAAAAdB2aVZOAAAAJAAAAfRwdEJSAAAAJgAAAhh1a1VBAAAAKgAAAj5mckZVAAAAKAAAAmhodUhVAAAAKAAAApB6aFRXAAAAEgAAArhrb0tSAAAAFgAAAspuYk5PAAAAJgAAAuBjc0NaAAAAIgAAAwZoZUlMAAAAHgAAAyhyb1JPAAAAJAAAA0ZkZURFAAAALAAAA2ppdElUAAAAKAAAA5ZzdlNFAAAAJgAAAuB6aENOAAAAEgAAA75qYUpQAAAAGgAAA9BlbEdSAAAAIgAAA+pwdFBPAAAAJgAABAxubE5MAAAAKAAABDJlc0VTAAAAJgAABAx0aFRIAAAAJAAABFp0clRSAAAAIgAABH5maUZJAAAAKAAABKBockhSAAAAKAAABMhwbFBMAAAALAAABPBydVJVAAAAIgAABRxlblVTAAAAJgAABT5hckVHAAAAJgAABWQAVgFhAGUAbwBiAGUAYwBuAP0AIABSAEcAQgAgAHAAcgBvAGYAaQBsAEcAZQBuAGUAcgBlAGwAIABSAEcAQgAtAHAAcgBvAGYAaQBsAFAAZQByAGYAaQBsACAAUgBHAEIAIABnAGUAbgDoAHIAaQBjAEMepQB1ACAAaADsAG4AaAAgAFIARwBCACAAQwBoAHUAbgBnAFAAZQByAGYAaQBsACAAUgBHAEIAIABHAGUAbgDpAHIAaQBjAG8EFwQwBDMEMAQ7BEwEPQQ4BDkAIAQ/BEAEPgREBDAEOQQ7ACAAUgBHAEIAUAByAG8AZgBpAGwAIABnAOkAbgDpAHIAaQBxAHUAZQAgAFIAVgBCAMEAbAB0AGEAbADhAG4AbwBzACAAUgBHAEIAIABwAHIAbwBmAGkAbJAadSgAUgBHAEKCcl9pY8+P8Md8vBgAIABSAEcAQgAg1QS4XNMMx3wARwBlAG4AZQByAGkAcwBrACAAUgBHAEIALQBwAHIAbwBmAGkAbABPAGIAZQBjAG4A/QAgAFIARwBCACAAcAByAG8AZgBpAGwF5AXoBdUF5AXZBdwAIABSAEcAQgAgBdsF3AXcBdkAUAByAG8AZgBpAGwAIABSAEcAQgAgAGcAZQBuAGUAcgBpAGMAQQBsAGwAZwBlAG0AZQBpAG4AZQBzACAAUgBHAEIALQBQAHIAbwBmAGkAbABQAHIAbwBmAGkAbABvACAAUgBHAEIAIABnAGUAbgBlAHIAaQBjAG9mbpAaAFIARwBCY8+P8GWHTvZOAIIsACAAUgBHAEIAIDDXMO0w1TChMKQw6wOTA7UDvQO5A7oDzAAgA8ADwQO/A8YDrwO7ACAAUgBHAEIAUABlAHIAZgBpAGwAIABSAEcAQgAgAGcAZQBuAOkAcgBpAGMAbwBBAGwAZwBlAG0AZQBlAG4AIABSAEcAQgAtAHAAcgBvAGYAaQBlAGwOQg4bDiMORA4fDiUOTAAgAFIARwBCACAOFw4xDkgOJw5EDhsARwBlAG4AZQBsACAAUgBHAEIAIABQAHIAbwBmAGkAbABpAFkAbABlAGkAbgBlAG4AIABSAEcAQgAtAHAAcgBvAGYAaQBpAGwAaQBHAGUAbgBlAHIAaQENAGsAaQAgAFIARwBCACAAcAByAG8AZgBpAGwAVQBuAGkAdwBlAHIAcwBhAGwAbgB5ACAAcAByAG8AZgBpAGwAIABSAEcAQgQeBDEESQQ4BDkAIAQ/BEAEPgREBDgEOwRMACAAUgBHAEIARwBlAG4AZQByAGkAYwAgAFIARwBCACAAUAByAG8AZgBpAGwAZQZFBkQGQQAgBioGOQYxBkoGQQAgAFIARwBCACAGJwZEBjkGJwZFAAB0ZXh0AAAAAENvcHlyaWdodCAyMDA3IEFwcGxlIEluYy4sIGFsbCByaWdodHMgcmVzZXJ2ZWQuAFhZWiAAAAAAAADzUgABAAAAARbPWFlaIAAAAAAAAHRNAAA97gAAA9BYWVogAAAAAAAAWnUAAKxzAAAXNFhZWiAAAAAAAAAoGgAAFZ8AALg2Y3VydgAAAAAAAAABAc0AAHNmMzIAAAAAAAEMQgAABd7///MmAAAHkgAA/ZH///ui///9owAAA9wAAMBs/8AAEQgAjAKoAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/bAEMAAQEBAQEBAgEBAgICAgICAwICAgIDBAMDAwMDBAUEBAQEBAQFBQUFBQUFBQYGBgYGBgcHBwcHCAgICAgICAgICP/bAEMBAQEBAgICBAICBAgGBQYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICP/dAAQAK//aAAwDAQACEQMRAD8A/v4ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACmOOM0+kIyMUAZVynOfWvzU/wCCmv7Fdh+2f+z1deHNJjiTxboJk1fwndvxm6Vf3lo7do7pRsPYPsb+Gv00mXK59KxLmPIIrKvRjUg4T2ZM4KSsz/MW1XS9S0PVLnRNat5rS8s7iS1u7W4UpLDNExSSN1PIZWBBB6EVkuvb1r+mf/gtz/wT7ktrq5/bO+ENiTG5VfHunWyfdbhU1RVXseEuP+AyH+M1/M6w3CvzbG5dKjUcJf8ADng1cO4SszLlAqWzvfLPkzfdz8p9P/rU+RAeaoSxj/P/AOuuOeHUlZicU9DpuKSuetb9rYiKY5ToD3X/AOtW+CGXcp4PQivLqYSUXZmDgkOqF+DmpcUEA0RogVWG7pVaReP51dIIODUTr3H41vGmBjSRZrOmi4rflT0rOljz9K6acDWMUZVvfXNg37v5k6lG6f8A1q6yy1S0vhiM7X7o3B/D1rl5YjWVJEytlcgg9RXbTiaJHpufSg5rhLXxBeWv7u5Hmp69GH4966a01Szv+IXG7+43Dfl/hXZCmmaKCNMkDqaQuO1R0VuqKRooDi5NJk0lFbKl5FKDCiiitFTZSghdxoyaSitFRKSQUUUVoqSGFFFFaql5FKDCg8c0VseHdJn17X7HRLUFpLu7itkUdSZHC/1raNFlKmf0/wD7C3hNvB/7NXhSwkXbJc2rahIO+bmQuD/3zivuGwHz15V4D0ODwz4c03w5bACPT7K2s0A44hjCf0r1rTxhq9+EbJI60jvNMXCke4r0vSVO5a8601cj6tXpmkrkj6VQz0rRlwB9K9S0lT8vuSa830Zcbc9sCvT9JHC/TNAHcWAwv410tuPmH0rn7EfIM10duMH8KAL6dPxp9NT7tOoAKKKKACiiigAooooAKKKKAP/Q/v4ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigCF15+tZM8fJFbTDIqjOmRu/OgDgPEWi6brem3Oj6xBFdWd5BJbXVtOgeKWKVSro6tkFWUkEHqDX8Qv/BUH/gnlq/7HPxHfxp4Et5p/h5r92x0mcAudLuXyxsJ25wByYHJ+ZPlJLKc/3O3UW5SK8T+Lvws8EfGLwHqfw3+I2nQapo2rWzWt9ZTjIdD0ZT1V0OGR1wysAQciuHH4GNeFnv0ZjWoqasf5uMi9/WqUkea/Qj9vn9hHx3+xV8SX0+4E+o+ENUnd/DXiArkOnLfZrkqMJcxjqOA4G5e4HwAwB/pXxtXCyhJxkeXKlZ2MWWPIpttfTWTbR8yZ5U/0q/KmazZY/SsZYdPRoXIup1Vvcw3SeZCwPqO4+tT15+JJ7WTzYGKn27/WuisdchmxHdYjfpn+E/4VyTwTT0MpUexuMMioasZHWo3wenWpjQEoIqun5VTePHFaXtUEifl61tCkUosxpY+xrNli9RXQPF6/nVKSP1reNE0jE5mWLsKzZImByPrx7V0ssXNUJIx0rpVNlkFtr2pWnylvNUfwyckD2PWuitfFOnynbchoT6nlfzH+FcpLDkntVB4iev6V0wTRrFM9bhnguF327o49VOalrxYLJC3mRMyn+8pI/WtSDxHrNrwZBKB2lGf16/rXVFdyz1WiuEg8agcXUB+sbf0P+Na0HizRZvvO0f8Avqf6ZreME+pSSOlorPh1bTJ/9VcRH23AH9avqyvyhB+nNbxoo0UELRQeOtFaqkUFFFFbKkNIK+s/2IPA58dftKeHbSRN8FhcHVbjIyNtqC4z9WAFfJZIHNfsH/wSo8CeZf8AiP4lzxgqiQ6Ray/7TnzJcfQKoP1reFDW5cYH7haWCWB9/wCVd9pq5fHviuI0pCGX8c/yrv8AS48kH3zXUaHd6WhIH+9XqGkRngfQV5zpUeQor1TSIuV+vH4UAejaQgwDivTtLXjj0Arz7SIyVGB1xXpmmodv1NAHX2a/KK6CAcE1jWi1twj5PqaALi9BS0UUAFFFFABRRRQAUUUUAFFFFAH/0f7+KKKKACiiigAoor5b/bE/ah8NfsjfA/UPivrcB1C+3ppvh7RkfY+papcBvIgDYOxBtaSV8HZEjtyQAeXG42lhqMsRXkoxim23skt2bYbDzrVI0qSvJuyXmdr8d/2kPgh+zN4S/wCE1+OHiKw0CydjFarcsXubyUDPlWttEGnuJP8AYiRiByeOa/JfxT/wXS+GKazFYfDf4eeKdXtp5/IhvdXubbSBLwW3pCPtUwXAJ/eIhA6gHivwl8W6r8Xv2kvibc/Ff4sX0uveJ9Sfyo5JNy21nC7ZSzsYTkW9rH2VeWwXkLOSa98+EHwKsPDdnF4w1CCG+uXvWt5FvFLJKNgeTIBBC4KKu0ggV/D3Hn0qcV7SdPJIqMI/aa5pPzs9Irys2f0Zw54M4aMIzzFuUn0Tsl5X3f3o/db4Vf8ABVbwb441BLTxl4Tv9AichRcR3qXyrnuw8mDAH41+nHhPxn4X8caTHrfhS9t722kGRJA4fHscdDX83d94D8M2VlD4j8JIyWtxKYZbCZt81ncAbvL3YBkjYZMb4BIBVvmGT0+iXvxX+G1wfEHgu51DQrmBFuFuACsLbs7BJE/ySq+CChGTzivkeFfpZ55gsU4ZzTVek7O8UoySfVWST06NJ9G07no5z4M5diKXNgJOlPtK7TfZ3d16q/dXP6RKK+Wf2S/2jof2i/h2+p6tarpviPSJl0/xHpanKxXBXck0RJJME6fPGe3zKclTX1NX+geQ55hczwdPH4KfNTmrxfl/mtmuj0P5pzLLq2Erzw2IjaUXZr+vwCiiivWOIKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAqB1HTsanprDIoAxZ4sZBrnL637+tdjNHuGfSsa4i3DFAHy98dPgl8Pfjt8PdS+GHxO06LUtH1OIxzQyDDI38EsT9Y5Yz8yOMEGv4m/27v2A/iT+xd4zY3azat4O1C4ZdC8SInHPItrsLxFcKPosgG5e4X+9q/tAwIrw34o/DLwb8UPCN/wCAfiDptrq2j6nA1ve2N2m+ORD+qsDyrAgqeQQa48Xg41V5mdSkpH+ck44wOtUZE7iv19/4KAf8EuPHn7Lt7d/Ef4Wpda/4CLmVpQDJe6OrH7l0qjLwjos4HA++AeT+RzJnkV89PDSg7SRxyp2dmYUsVZ8sY6Ct+WMHpWbNDg5qXRuRyIq2uq3unnCnemfuN/Q9q6m016yvMLny3/uvx+R6VyEsZ71nywg1k8Mg5D1Pvmoix6Yrzi21XUbDCRuWQfwPyP8AEfnXRW3iezmAW8UxN6j5l/Tmp9gxezN9gT9KqyL3HSp4bm3uV3QOrj/ZINPZM8irjSY1BGRJFVGWEnit5ox/9aqjxiuiMC0jnZIiKpyR10UkNUpIAfb2reNNFKJzrx+v51Ue39K6B7cDnFUnhYdK1jQuWoGG0I61A0VbLRMartCR1rZUSrGO0XtTR5ifcYj/AHTitJoxmozGO+P8/jWiolctuh9o/sK+BrXx18TL+58Rwrf2GnaW7tb3a+bEZZnVEyrZGQNxH0r9ZIv2fPgzfEPdeGdIOTyVgCf+g4r5V/4J1+BmsPhvqvjGVDv1TUhbxMR1itV5/De5/Kv0vtLHaBu9K9CjG0dTWKsjw+2/Zb+AU7b5PC+nc+hlH8nFdbpn7Jv7PBxJJ4T0xvTcZSPyMmK9tsLEkjjiu306zy4BHA61qUec+Hv2a/gJppQ2fg3w6HH8T2cch/Nw1fTPhPw3oXhy2Gn+HrG0sLcHd5FjAkEeTwTtjCjOPbNZ2mWhODjAFeh6XZkLk9ScYoA6nS4sD+td/pcBOAPpXO6ZZsFA/CvQNLtDxj6UAdXpEGWXHavUtHhxge2PxNcZpNoAwz6Zr07SbYjGfqaAO30mLBXrxzXo2mx4Cj8a43S4Dx+Veg6fH3HpQB0VsuBmtmIYAFZdunAHqa2IxzQBLRRRQAUUUUAFFFFABRRRQAUUUUAf/9L+/iiiigAooooAK/nn/wCCs13q/wAQvjx4f8Dszf2b4c0YzxQ87Tfai2ZpCOhKwxxKp7Bn9SK/oYr8Wf8AgoNoFovxusdUdFzcaLGWbuSjsn8gK/m/6VWZYjDcJTdB2UqkIy/w6u33pfI/VfBrD06mdx9otoya9dF+TZ+eHwN+Htnp/i2w+0oo80T2yFgMeZPBJFGTn0dhz2r0u1WwttHg0D7tyLqWdVPUoY40bHupUZ+tcYur3d1qzaD4WVDPb7Wu7twTFa7uVBAILSkchARgckjiqP8AZfjPT9Xs7XVEa5ktL8Xej6wFxHdRS/JcWV2F4ilZGPlufkYhTkMCD/mLHHznS9jt8Tb7p8unycU++p/XEsPH2ntH5fhf/M7rXdE8V3NlHJ4SMC3Md3DJKLqYwReUSQxdhyducgDk4wK9y0XwLqniLw5a6X/bFjfS6dHPM6yy+RuBw7lUfC5zu4znGBk11L/Ba+1K10m81RRBaiYavM8uRh0keOJWXPzFAmQo5LdPWvT9O+H2na8vlWN/plpIXaKGyv5GWdwo3bsBWB3ZJ4PXIHFfTZJwbjZS5atLSS2vyyknZ3TeltraPXvrbwsxz/DqN4T262uk9V0+f9b6/wCxGsHh74x3SowjOqaO1vKo4EhgcPHkdyu5sHsCa/XCvwx+A/i6WD9o7wlpOnDc99qcluQv/PJbeWaQ/QLHk1+51f6AfRJxU5cN1MO1pCrJL5xjJ2+b/E/m3xoopZpCr1lBN/JtfofjR8Z/+Chn7RnxN/aS1/8AZE/4JxeCNE8Xa74M2RePPHHjC6ktfDeiXMuQLQCAiWedSCGCtkMrKEYIzL7D+zl4y/4Ku6f8XdO8IftZeD/hXf8AhG9iuTd+LvAep3cM+nyxRM8Ky2N7l5VlcCMeWBtzuY9q+Hv+CN3i3w38Fvj5+0T+yR8V7qDTPiM3xa1LxXDb6i4iuNa0q/ANvcWxfBnUAeZhckLKGxgnHS/Fz4jftz/s2f8ABRD4PfDDxd8X4PFfgz4reKtfVvDCeHbCwfTdOs4vOgtjcoHmlwJVUSZQnyyTnJr+jKdZtKrJve1lay1tZn4jCo7Kcm9/LTXY/e1p4VxudRubYuSOW9B7+1RfbrL7X9g86Lz9nmeTvHmbf723rj3r+TT/AIJ2fs16N4s/Z7+KP7bfiy88S+I/FXww+IfjfU/htoTapdJpmn32lg3ayfZI3CTyTzMocShhsRVAHNbf7OP7FH7O/wAYf+Cal/8A8FCPiH438Sv8WdW8N634q1X4nL4huYp9L1KLzwbMwrKIBCu1Y5IJEJcMQMAoBcMwnJJqO6vv0+4qOLk0rR89+n3H9Wsk0MULXErqsaqWZ2ICgDqSTwAK/K/9of8AaY+MHg7/AIKT/Aj4CeA9WgHhLxtoHiu+1zTfJgkS9n02zaW0P2go0sarIAT5bDPfNfhb8H3vP2i/hl+xT+xN8X/EGraL8NfGnhfxFr3iSO0vpLN9f1DTry5+yabLchg5UkKNgbJMgx8wQj6w1f8AZb+Cn7JH/BZD4A/DT4E6jqMOjzeGvFupHwbe6lPqMWiySadcKZrb7Q8ksMd5tyYy20tEWXGTWc8dKcU4qyvHr3s/u1/4BEsTKSTS0uuvofvD+yn4j/af8SfCb+1v2vtD8N+HPFw1W+jbT/C9213YjT0kP2WQyM74dk+8N3TBIUkqPkT9ub9pr4q/Cb9pX9mvwL8K9ZhttE+IPxFn0HxTDHDBcre2SRRsI1kdWaPDE/NGVb3r+d34Q+L/ABV43/ZE+Af7LXijxPq/h7wN8U/j74t0jx3rNpePbTz2lncxNb6cbtjmNLlpWGM4JQcEAg/b/wC1B+xp+z3+xh+3l+yn4a/Z6vNS0uz1b4kNd3Xge61W41C2SSCONBqcMd1JLJC8mfKlKsFk+XjKms/r0p0vdX8t3fXW3l/kT9Zk4Ll8tb662P6ibnULCyeOO8nhhaVtkSyuql29FBIyfYVbr+YD9jr9k74K/wDBUBvi/wDtDftu6lrmteMNM+Imt+FbPR01q60+PwbpumkC1W2ghkRYmxuPmSKVYoTgneT99/8ABEz4s/Eb4nfsm6xo/jzW7zxTaeDfiDrngvwv4qv2Ms+q6Jprx/ZZnmOfN2hygfJ+UAZOK7qGNc5JNaO9te3c6aWI5mtNHsfsJRRRXedQUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAROuDms6eLH07VrEZGKrumQVNAHK3dvuGa5DUbIOp4r0WaLGQawLy27igDxDW9Hhu4JLW6jSWKRGjkjkAZHRhgqwIwQR1B4r+dD9vT/gj3Y69NefFX9k+3hsr9i9xf8Ag0kR21w3VmsGbAikP/PFiEP8JU8H+m/UbAMDxXnuq6X1BH/16zq0ozVpEyinuf5xviLw7rvhXWrnw34nsrrT9Qs5TBeWN7E0M8Mi9VdGAIP4Vzskea/uK/a8/YO+CP7V+kk+NrI2GuwxlLDxNpqql9Dj7qyHGJ4gf4JM/wCyVPNfyt/tXfsC/Hb9lHUJb3xNZnV/DnmFbbxNpaM9qQT8ouE5a3f2f5Sfusa8qrg3HYwdGx8ESw4rOliIrpHjB9xVGWHuKx9mTyHNSR1SeEdq6KSAGqEkBHSl7EXIYBSSNvMjLKwP3lODWhB4k1i0wHcSr/00Gf1GD+dPeP1qpJCPwNT7JhyHRQ+MrduLuF1P96Mhv0OK1IvEOiz9Jgv++Cv8+P1rzuS29KqvDTUbBy2PXlkt5huhdHHqpB/kaieMHjiuS+Hfw8174m+N9O8D+GEL3mo3KwIRnai/xyNjoqKCzH0Ff0U+Hv2bvhD4f8H6f4Qn0HS75LC1S3N1d20bzTMOXkdyNxLMSevHQV20KTnqaxVz+fl4KqSW/rX73al+yP8AAPUiXk8O20RPe1lmhx9AkgH6Vwt7+w18B7nPk2uqW+f+eV65/wDQw1dP1Zov2Z+ID29VXgPTFftU/wDwT7+Dlwf3V3ryfS5ib+cNTW3/AATq+D7tiW/8QMPQTQj/ANo1aoj5D8RXt89qrm1YkKASScY96/efTv8AgnF8CNwNzJ4gm9nvEUf+OxA/rXqWgf8ABP8A/Zq0ueK7/sS5uJIXV1a6vriQblORkBwvX2xWiplKNjo/2c/hx/wgfwZ8N+F2TZJFpsVxcgjB865HnSZ9wz4/Cvom20sZ5Ga7Cz0QKoCqAAMDA6V0Vrop4OK0GctZaYxwSMCu103SzgYHFbdlowOBgmu307RScDbigDN0zTCxAA4r0XTNKyRx7Vb0vRcYVR+Jr0fTNG2gcUAUNP0z7oA4rvtM008ZHpV3TtGxyRXd6fpGCMCgCLStP5yRmvRdMsyMcc1Bp2mhQDj6V2dhYlccc/yoA1dNt9uPau2sosKKx7K2xgdhXUW8eKANG3Xn6CtFBxmqsK4XPrVxRgUALRRRQAUUUUAFFFFABRRRQAUUUUAf/9P+/iiiigAooooAK/Lj/gpl8LvEOpeEtL+Mfhjz2XQxLYa2tuxV0srkgxXRwDlLecDzPlOI3ZsYU1+o9QXVra31rJZXsaTQzRtFLFKoZHRxhlZTwQQcEHrXxniDwXh+IMorZViHZTWj/lktYy+T37q66nvcM59UyzHU8bS15Xqu6ejXzX+Z/LP8HPBHjfTbKPT766jiklZrq8lvLZJY5riY7pJEuIJRuVj93cgIXA7V91+FtG8P6JAs+tXNteyDpDawuyk+haXai/k/0r68+I/7G+h6fbS6r8Kw1tty66UQXiA5O2L+JQOw5x6V+dfjbWtR8E30mleIQLKeNiCl0whPHtJtr/LLijw9zXhfGWzbDptv3ZLWD81a1/SSv3R/XuVcT4TOaN8HUa7raS9f81959gDx7oGraQNN8VxMFt2Z9PuLFV326sADGUOA6HAPXIPNfO/jr4i6Tou59Ia6lmQkwkxiMZxjklvQ9q+bbn4v20s66fp9yt1cyHZFa2ObuZ27BYoBI5J7AKa9/wDhN+xT8bP2gdSh1H4oRX/gvwiWD3K3P7nXdSj7www8myjYcNLL+9wfkjUnePfyjK884qqQwuDpOUtnO1rL+9K1kktutrJdEefiq+X5PF1sRNJb8t73fkt9fu6vqd9/wTi+Guo/ED4nal+0HqcZ/sbw/bT+HfDsx+5d6jMVXULiI8ZS3RRbhuhd5QD8tftTXN+DvB/hj4f+FrDwT4LsbfTdJ0u1SzsLG1XZFDDGMKqj+ZPJOSSSSa6Sv9KPDjgejw9lFLLKTu1rJ/zSe7/ReSR/K/FfEM80x08XNWT0S7JbL9X5tnxT+1V/wTy/ZH/bOubPWPjz4UhvtY05PK0/xFptxPpurQRg5CLd2jxyMgOSquWVSSQASc+R/AL/AIJFfsPfs6fEWw+Lvg7w/q+peJ9KYyaXrfibWtQ1We0dlZC0KzzGJW2sRnZ345r9MqK+yeFpuXO4q/ofLuhBvma1Pnz9nj9l74N/steC9U+H/wAHdPnstK1nX7/xLqFveXU16ZL/AFIqbl907OwVtowgO0dgK+Hz/wAETv8Agn0fHuoeNE8M6qlnqd1Lf3XhKLWb2Pw4buUHM401ZBFuUnci/cQgFVGAK/WOiiWGptJOK02B0INJNbH58eOP+CXn7G3xD/Zt8M/sr+JPDt0/hnwYzSeE7iLULlNW0qV5GkaS31DeZwzM53BmZW4yDgYyfgl/wSm/Yz+APxC8PfFzwLousS+K/Dn282viPVtZvb6/ujqMBtpTeSSykThYiViVhtjySgBJJ/R2il9UpXUuVX9A9hC97H593X/BL39jC/8A2aZv2S9R8Ly3Pg19aufEcFvc31zLeWmp3Tl3ura8aQzxSZY42tjBKkFSRXC/Cr/gkB+xH8I/Ffhv4haJo+v6j4l8K63Fr2leI9d1y+vtQE8CFIYpJJJdr28YJKwbfLyckE81+n1FH1SldPlWnkHsIb2R+Y/x8/4JD/sT/tE/E6/+LnizR9b0nWdawPEb+FdYu9Hg1kDj/T4Ld1SUsOGYBWb+Ik8196fCf4S/Dj4GfD3S/hT8JNIs9C8PaNbi107TLFdsUSZJJycszMxLO7EszEliSc16JRVwoQi3KKs2VGlFO6QUUUVqWFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABTWXcKdRQBTkj3jHesuaHPB/Kt1lzyKqSxBxkdf50AcbdWo544rkdR08MDkV6ZNCGGCKwbu0/KgDxLU9LJzkZrzHxF4bstRs5rC/giuLedGimgnQSRyI3BV0bIZT3BGK+kL/TwQeK4TUtK5JUUAfz3/tU/8Eefhd8RJbnxZ8BbiPwhrEm6VtLdTJo87nn5UGXtif8ApnuQf3BX89Xxx/Zt+M/7O2vHQPi1od1ppZyttfAebY3WO8NymUbP93IYd1Ff3zalo4bJUfUV5B428AeHPGWi3Hhvxbp9nqen3KlLiyv4UnhkU9mRwR+OM1jOhFkuCP8AP9khzVKSDNf02/tD/wDBHD4XeLXuNd+BWozeFb5suNKvN13pjMecIT++hB9i4HZa/EH45/sb/tD/ALPc8j/ETw7dCwRsLrWmj7Xp7jsfOjB2Z9JAh9qwlh7EOB8hSW/aqLwY6V0zRKwyvI9qpvCOvap9mTys5t4Wqq8HqK6R4Aa+4v2F/wBlS7+PvxCHiLxFA3/CL6DKk2oM4IW7uB80dqp77usnonuRSVO7sNRPsn/gn5+zIfAHg4/F7xbb7dX123A0+ORfmtbBuQ2D0afhv9zHqa/Q2XTFJ+WvVpNIESCJI1VVUKqqAAoHAAA4AA6Cs99JQ9RzXdCCirI1SseXPpLZwBx7U5NK5+Yda9IGjDjb/KrMWi88qSTVDPP4dHDcKK6Gz0TOAoru7TQN2MD866yx8PE4AX9KAOFstBY4AX611droLEj5a7+x8O8AAfjXW2vh8quMc+9AHmsGhYwNtb9toXT5Pzr0q10BgBgfpW9baEw6LnNAHn9hobFgdtdrp+gkkEj8O1dlZ6E3HH6V2On6EeMigDnNM0NRjI+legaZoZYjiuh0zQ8YwP0rvrDRVGOKAOcsNFCgYFdfZ6VjoK6W00rpkZroINNAABHWgDDs9N2gYH410VrZ7eAK1orHHWtKK2C8AUARW1vtHFa8MecL+dNii7CtBECjAoAkVcmpqaowKdQAUUUUAFFFFABRRRQAUUUUAFFFFAH/1P7+KKKKACiiigAooooAKoX2l6ZqahNStoLgDoJ41kA/76Bq/RUygpK0kNSa1Rl2Gh6LpTF9Ls7W2ZuGNvEkZP12gVqUUURgoq0UEpNu7CiiiqEFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUxlzyKfRQBRki3cjr/ADrMmhBreZM8iqskQf60AchdWnp0rl73TwQTivR5Yc8EVjXNoDyooA8e1DSg2Tjn1rhdR0jOQy817zd2AbJA5rlL7TAQRj8KAPnXUdF65GfoK4XVNCjmjeGZFdHBV1YZVgeoYHII/SvpK/0bqFH4VxV/ow5G2gD8k/jh/wAE2f2X/jFNNql1oR0LU5cs2peG2FmzMf4nhAMDnPXMeT61+Tnxc/4I5/F3w7JNe/CLXNM8Q2wOY7PUv+Jfe49Nx3QMR6lkz6Cv6nL7ROpUflXH3ui9TtosB/GRpn7Av7Ud38RdO+Hmt+E9U0xr+5ELapPH5lhDGOXla4iLx4VcnG7J6AZNf0mfCb4I+FPgl8PNO+G/g+HZa2EIDzEfvLiduZZ5PV3bn2GAOAK+w7rR2wcA++K5y50c9NuaSQHicukkfdqi2kMf4f0r2GXRlPUGqo0QE8A0wPKk0Uk42VrWuhscAL+lelw6AxOdp/GuhsvDxJG4Z9hQB53ZeHBkbhz7V2mn+HGGAq/416Dp/h5QBwPwruLDw/wCFxQB5xZeHQgAK5/Cumt/DwbDY/OvUbLw+OPl/Eiuit9BBHK/0oA8qt/D3AGPetm20HnO3+teopoaAcDk1qxaFtwAD+VAHnFrofI4rrLLRgMEgV2Nvo5HoK3rXTCBwv4mgDEsNKAHIrsLPTQABj8KvWunkfw10Vva7QDigCnb2WBzWrFaqD0HH+fSrscB25C1dhhIG4igCkkPoCasJAe/H0q6Iz/n/wDXTgg7/wCf1oAhVAOFFTquOacAB0ooAKKKKACiiigAooooAKKKKACiiigAooooA//V/v4ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAprKDTqKAKskYbg9aoSw44P51sEA9ahZOx5FAHNT2obtWFdWIPDCu2kg7rz/OqEsAYYIoA80u9NyDxXL3ulAg/LmvXZ7L0rCuNPB6DBoA8RvNF6lRXJXujf3l/GverrTOvFc5d6VnOR+IoA+fbzRfQZrmrnRDzla+gLvRQei/lXO3Gi9eM9eooA8Jl0U/3TUS6Id3A/SvY5dEAPKH8P8mmJoqk/dNAHl9voRyNw/OupsNA5GVx9a7220XB+VQPpXT2OigEfLzQByOn6DyML+NdvY6EOmK6iy0lVxkfhXWWum8DjA9KAOVttFUc4x9BWxDo6gfd/Ouxh04DtWgtgPu0AcbHpQ+8QB6dKtLpvr+YrshZKB0/z+VOW1UdqAOXi08DoM1qw2XrWytuB2qdIfQZ+goApxQBeBWlFFnjt61IkGPvflVpU7DpQAKueB0qekAAGBS0AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB/9b+/iiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAjZO4qu8Qb2NXKQgHrQBkSQY6j8az5rUMOR+NdGUPaqrwK33ePagDkZ7HrxWLPpwOcCu9khxwRVGW1U9RQB5pc6YO4/EVjTaSD2/A16nLY+lZsunr3FAHlcmkf7P5U1NHBPKfnXpL6appo0xc96AOIg0dR149hW9aaZt+6PxNdFFp4B6ZrVgs/UUAZlpp5GMAGuggtAoGRVmKHb2rShizyen86AK0cIAzg1cjgXbk5yauIufpUtAFHyV9/wDP4UohT3q7RQBVESj+H/P61IIz9KmooAYEHf8Az+tPoooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA/9f+/iiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACkKg0tFAEJjP1qu8KnpxV6kIB60AZL25Hb8qrNADW0wAOBTCqt1FAGE1qp6imi1APT/AD+VbhiQ9qb5Ke9AGStuB2qwkPOBz9K0BEg7U8ADpQBAkGPvflVpUz9KVAD1qWgAAxxRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB/9k=' beforeAll(async () => { testEnv = await testEnvironment(logger, localization) From 54100c6245ff2baecb34e63f89f35da068e233d5 Mon Sep 17 00:00:00 2001 From: elweyn Date: Fri, 19 May 2023 11:44:29 +0200 Subject: [PATCH 066/123] Correct some layouting, and some textes. --- .../templates/accountActivation/html.pug | 3 --- .../addedContributionMessage/html.pug | 5 +---- .../src/emails/templates/includes/webflow.css | 11 +++++++---- backend/src/emails/templates/layout.pug | 2 +- .../emails/templates/resetPassword/html.pug | 3 --- .../templates/transactionLinkRedeemed/html.pug | 5 +---- .../templates/transactionReceived/html.pug | 5 +---- backend/src/locales/de.json | 18 +++++++++--------- backend/src/locales/en.json | 18 +++++++++--------- 9 files changed, 29 insertions(+), 41 deletions(-) diff --git a/backend/src/emails/templates/accountActivation/html.pug b/backend/src/emails/templates/accountActivation/html.pug index 114996266..027dcbc63 100644 --- a/backend/src/emails/templates/accountActivation/html.pug +++ b/backend/src/emails/templates/accountActivation/html.pug @@ -12,8 +12,5 @@ block content div(class="p_content")= t('emails.general.orCopyLink') a.clink(href=activationLink) #{activationLink} - br - br - br include ../includes/requestNewLink.pug diff --git a/backend/src/emails/templates/addedContributionMessage/html.pug b/backend/src/emails/templates/addedContributionMessage/html.pug index 361e5db16..b09d2c0f0 100644 --- a/backend/src/emails/templates/addedContributionMessage/html.pug +++ b/backend/src/emails/templates/addedContributionMessage/html.pug @@ -9,9 +9,6 @@ block content h2= t('emails.addedContributionMessage.readMessage') div(class="p_content")= t('emails.addedContributionMessage.toSeeAndAnswerMessage') - a.clink(href="https://gdd.gradido.net/community/contribution") #{t('emails.general.toAccount')} - br - br - br + a.button-3(href="https://gdd.gradido.net/community/contribution") #{t('emails.general.toAccount')} include ../includes/doNotReply.pug diff --git a/backend/src/emails/templates/includes/webflow.css b/backend/src/emails/templates/includes/webflow.css index 349d2d206..408c15326 100644 --- a/backend/src/emails/templates/includes/webflow.css +++ b/backend/src/emails/templates/includes/webflow.css @@ -9,7 +9,7 @@ body{ } h2 { - margin-top: 0px; + margin-top: 15px; color: #383838; } @@ -31,9 +31,9 @@ h2 { .content { display: block; - width: 100%; - margin: 40px 0 40px 0; - padding: 20px 0 40px 0; + width: 78%; + margin: 40px 1% 40px 1%; + padding: 20px 10% 40px 10%; border-radius: 24px; background-image: linear-gradient(180deg, #f5f5f5, #f5f5f5); } @@ -41,6 +41,7 @@ h2 { .p_content{ margin: 15px 0 15px 0; line-height: 26px; + color: #9ca0a8; } .clink { @@ -60,6 +61,8 @@ h2 { border-radius: 20px; background-image: radial-gradient(circle farthest-corner at 0% 0%, #f9cd69, #c58d38); box-shadow: 16px 13px 35px 0 rgba(56, 56, 56, 0.3); + margin: 25px 0 25px 0; + width: 50%; } .button-4 { diff --git a/backend/src/emails/templates/layout.pug b/backend/src/emails/templates/layout.pug index b98e6f55f..578a3d1ed 100644 --- a/backend/src/emails/templates/layout.pug +++ b/backend/src/emails/templates/layout.pug @@ -2,7 +2,7 @@ doctype html html(lang=locale) head meta( - content="text/html; charset=UTF-8" + content="multipart/mixed; charset=UTF-8" http-equiv="content-type" ) meta( diff --git a/backend/src/emails/templates/resetPassword/html.pug b/backend/src/emails/templates/resetPassword/html.pug index c6be80519..4d4ed3f50 100644 --- a/backend/src/emails/templates/resetPassword/html.pug +++ b/backend/src/emails/templates/resetPassword/html.pug @@ -12,8 +12,5 @@ block content div(class="p_content")= t('emails.general.orCopyLink') a.clink(href=resetLink) #{resetLink} - br - br - br include ../includes/requestNewLink.pug diff --git a/backend/src/emails/templates/transactionLinkRedeemed/html.pug b/backend/src/emails/templates/transactionLinkRedeemed/html.pug index 1af82a042..598a18337 100644 --- a/backend/src/emails/templates/transactionLinkRedeemed/html.pug +++ b/backend/src/emails/templates/transactionLinkRedeemed/html.pug @@ -13,9 +13,6 @@ block content br = t('emails.general.detailsYouFindOnLinkToYourAccount') - a.clink(href="https://gdd.gradido.net/transactions") #{t('emails.general.toAccount')} - br - br - br + a.button-3(href="https://gdd.gradido.net/transactions") #{t('emails.general.toAccount')} include ../includes/doNotReply.pug diff --git a/backend/src/emails/templates/transactionReceived/html.pug b/backend/src/emails/templates/transactionReceived/html.pug index fd113cfe2..abf468dd0 100644 --- a/backend/src/emails/templates/transactionReceived/html.pug +++ b/backend/src/emails/templates/transactionReceived/html.pug @@ -9,10 +9,7 @@ block content h2= t('emails.general.transactionDetails') div(class="p_content")= t('emails.general.detailsYouFindOnLinkToYourAccount') - a.clink(href="https://gdd.gradido.net/transactions") #{t('emails.general.toAccount')} - br - br - br + a.button-3(href="https://gdd.gradido.net/transactions") #{t('emails.general.toAccount')} include ../includes/doNotReply.pug diff --git a/backend/src/locales/de.json b/backend/src/locales/de.json index d42f59179..a472d4c7e 100644 --- a/backend/src/locales/de.json +++ b/backend/src/locales/de.json @@ -4,7 +4,7 @@ "activateAccount": "Konto aktivieren", "emailRegistered": "deine E-Mail-Adresse wurde soeben bei Gradido registriert.", "pleaseClickLink": "Klicke bitte hier, um die Registrierung abzuschließen und dein Gradido-Konto zu aktivieren.", - "subject": "Gradido: E-Mail Überprüfung", + "subject": "E-Mail Überprüfung", "title": "E-Mail Überprüfung" }, "accountMultiRegistration": { @@ -13,13 +13,13 @@ "emailReused": "deine E-Mail-Adresse wurde soeben erneut benutzt, um bei Gradido ein Konto zu registrieren.", "ifYouAreNotTheOne": "Wenn du nicht versucht hast, dich erneut zu registrieren, wende dich bitte an unseren Support:", "onForgottenPasswordClickLink": "Solltest du dein Passwort vergessen haben, klicke bitte hier.", - "subject": "Gradido: Erneuter Registrierungsversuch mit deiner E-Mail", + "subject": "Erneuter Registrierungsversuch mit deiner E-Mail", "title": "Erneuter Registrierungsversuch mit deiner E-Mail" }, "addedContributionMessage": { "commonGoodContributionMessage": "du hast zu deinem Gemeinwohl-Beitrag „{contributionMemo}“ eine Nachricht von {senderFirstName} {senderLastName} erhalten.", "readMessage": "Nachricht lesen und beantworten", - "subject": "Gradido: Nachricht zu deinem Gemeinwohl-Beitrag", + "subject": "Nachricht zu deinem Gemeinwohl-Beitrag", "title": "Nachricht zu deinem Gemeinwohl-Beitrag", "toSeeAndAnswerMessage": "Um die Nachricht zu sehen und darauf zu antworten, gehe in deinem Gradido-Konto ins Menü „Schöpfen“ auf den Tab „Meine Beiträge“." }, @@ -28,17 +28,17 @@ }, "contributionConfirmed": { "commonGoodContributionConfirmed": "dein Gemeinwohl-Beitrag „{contributionMemo}“ wurde soeben von {senderFirstName} {senderLastName} bestätigt. Es wurden deinem Gradido-Konto {amountGDD} GDD gutgeschrieben.", - "subject": "Gradido: Dein Gemeinwohl-Beitrag wurde bestätigt", + "subject": "Dein Gemeinwohl-Beitrag wurde bestätigt", "title": "Dein Gemeinwohl-Beitrag wurde bestätigt" }, "contributionDeleted": { "commonGoodContributionDeleted": "dein Gemeinwohl-Beitrag „{contributionMemo}“ wurde von {senderFirstName} {senderLastName} gelöscht.", - "subject": "Gradido: Dein Gemeinwohl-Beitrag wurde gelöscht", + "subject": "Dein Gemeinwohl-Beitrag wurde gelöscht", "title": "Dein Gemeinwohl-Beitrag wurde gelöscht" }, "contributionDenied": { "commonGoodContributionDenied": "dein Gemeinwohl-Beitrag „{contributionMemo}“ wurde von {senderFirstName} {senderLastName} abgelehnt.", - "subject": "Gradido: Dein Gemeinwohl-Beitrag wurde abgelehnt", + "subject": "Dein Gemeinwohl-Beitrag wurde abgelehnt", "title": "Dein Gemeinwohl-Beitrag wurde abgelehnt" }, "footer": { @@ -70,19 +70,19 @@ }, "resetPassword": { "pleaseClickLink": "Wenn du es warst, klicke bitte hier.", - "subject": "Gradido: Passwort zurücksetzen", + "subject": "Passwort zurücksetzen", "title": "Passwort zurücksetzen", "youOrSomeoneResetPassword": "du oder jemand anderes, hast für dieses Konto ein Zurücksetzen des Passworts angefordert." }, "transactionLinkRedeemed": { "hasRedeemedYourLink": "{senderFirstName} {senderLastName} ({senderEmail}) hat soeben deinen Link eingelöst.", "memo": "Nachricht: {transactionMemo}", - "subject": "Gradido: {senderFirstName} {senderLastName} hat deinen Gradido-Link eingelöst", + "subject": "{senderFirstName} {senderLastName} hat deinen Gradido-Link eingelöst", "title": "{senderFirstName} {senderLastName} hat deinen Gradido-Link eingelöst" }, "transactionReceived": { "haveReceivedAmountGDDFrom": "du hast soeben {transactionAmount} GDD von {senderFirstName} {senderLastName} ({senderEmail}) erhalten.", - "subject": "Gradido: {senderFirstName} {senderLastName} hat dir {transactionAmount} Gradido gesendet", + "subject": "{senderFirstName} {senderLastName} hat dir {transactionAmount} Gradido gesendet", "title": "{senderFirstName} {senderLastName} hat dir {transactionAmount} Gradido gesendet" } }, diff --git a/backend/src/locales/en.json b/backend/src/locales/en.json index 1a06b9df3..cf4bbef47 100644 --- a/backend/src/locales/en.json +++ b/backend/src/locales/en.json @@ -4,7 +4,7 @@ "activateAccount": "Activate account", "emailRegistered": "Your email address has just been registered with Gradido.", "pleaseClickLink": "Please click here to complete the registration and activate your Gradido account.", - "subject": "Gradido: Email Verification", + "subject": "Email Verification", "title": "Email Verification" }, "accountMultiRegistration": { @@ -13,13 +13,13 @@ "emailReused": "Your email address has just been used again to register an account with Gradido.", "ifYouAreNotTheOne": "If you did not try to register again, please contact our support:", "onForgottenPasswordClickLink": "If you have forgotten your password, please click here.", - "subject": "Gradido: Try To Register Again With Your Email", + "subject": "Try To Register Again With Your Email", "title": "Try To Register Again With Your Email" }, "addedContributionMessage": { "commonGoodContributionMessage": "You have received a message from {senderFirstName} {senderLastName} regarding your common good contribution “{contributionMemo}”.", "readMessage": "Read and reply to message", - "subject": "Gradido: Message about your common good contribution", + "subject": "Message about your common good contribution", "title": "Message about your common good contribution", "toSeeAndAnswerMessage": "To view and reply to the message, go to the “Creation” menu in your Gradido account and click on the “My contributions” tab." }, @@ -28,17 +28,17 @@ }, "contributionConfirmed": { "commonGoodContributionConfirmed": "Your common good contribution “{contributionMemo}” has just been approved by {senderFirstName} {senderLastName}. Your Gradido account has been credited with {amountGDD} GDD.", - "subject": "Gradido: Your contribution to the common good was confirmed", + "subject": "Your contribution to the common good was confirmed", "title": "Your contribution to the common good was confirmed" }, "contributionDeleted": { "commonGoodContributionDeleted": "Your common good contribution “{contributionMemo}” was deleted by {senderFirstName} {senderLastName}.", - "subject": "Gradido: Your common good contribution was deleted", + "subject": "Your common good contribution was deleted", "title": "Your common good contribution was deleted" }, "contributionDenied": { "commonGoodContributionDenied": "Your common good contribution “{contributionMemo}” was rejected by {senderFirstName} {senderLastName}.", - "subject": "Gradido: Your common good contribution was rejected", + "subject": "Your common good contribution was rejected", "title": "Your common good contribution was rejected" }, "footer": { @@ -70,19 +70,19 @@ }, "resetPassword": { "pleaseClickLink": "If it was you, please click here.", - "subject": "Gradido: Reset password", + "subject": "Reset password", "title": "Reset password", "youOrSomeoneResetPassword": "You, or someone else, requested a password reset for this account." }, "transactionLinkRedeemed": { "hasRedeemedYourLink": "{senderFirstName} {senderLastName} ({senderEmail}) has just redeemed your link.", "memo": "Message: {transactionMemo}", - "subject": "Gradido: {senderFirstName} {senderLastName} has redeemed your Gradido link", + "subject": "{senderFirstName} {senderLastName} has redeemed your Gradido link", "title": "{senderFirstName} {senderLastName} has redeemed your Gradido link" }, "transactionReceived": { "haveReceivedAmountGDDFrom": "You have just received {transactionAmount} GDD from {senderFirstName} {senderLastName} ({senderEmail}).", - "subject": "Gradido: {senderFirstName} {senderLastName} has sent you {transactionAmount} Gradido", + "subject": "{senderFirstName} {senderLastName} has sent you {transactionAmount} Gradido", "title": "{senderFirstName} {senderLastName} has sent you {transactionAmount} Gradido" } }, From 5abc03baf1a1eeb3403579876d64ae5c2fd0fd9b Mon Sep 17 00:00:00 2001 From: elweyn Date: Fri, 19 May 2023 12:03:41 +0200 Subject: [PATCH 067/123] Change font size of the body. --- backend/src/emails/templates/includes/webflow.css | 1 + 1 file changed, 1 insertion(+) diff --git a/backend/src/emails/templates/includes/webflow.css b/backend/src/emails/templates/includes/webflow.css index 408c15326..02e7fc4e0 100644 --- a/backend/src/emails/templates/includes/webflow.css +++ b/backend/src/emails/templates/includes/webflow.css @@ -1,6 +1,7 @@ body{ display: block; font-family: "Work Sans", sans-serif; + font-size: 17px; text-align: center; text-align: -webkit-center; justify-content: center; From 7727eec05f8a4f994ac0aab39f49a62bd0af3ca3 Mon Sep 17 00:00:00 2001 From: elweyn Date: Fri, 19 May 2023 14:38:01 +0200 Subject: [PATCH 068/123] Fix header logo, and social media icons. --- backend/src/emails/sendEmailTranslated.ts | 31 ++++++- .../templates/includes/facebook-icon.png | Bin 0 -> 1449 bytes .../src/emails/templates/includes/footer.pug | 84 ++++++------------ .../templates/includes/gradido-header.jpeg | Bin 0 -> 9427 bytes .../src/emails/templates/includes/header.pug | 2 +- .../templates/includes/telegram-icon.png | Bin 0 -> 2159 bytes .../templates/includes/twitter-icon.png | Bin 0 -> 2002 bytes .../templates/includes/youtube-icon.png | Bin 0 -> 1802 bytes 8 files changed, 57 insertions(+), 60 deletions(-) create mode 100644 backend/src/emails/templates/includes/facebook-icon.png create mode 100644 backend/src/emails/templates/includes/gradido-header.jpeg create mode 100644 backend/src/emails/templates/includes/telegram-icon.png create mode 100644 backend/src/emails/templates/includes/twitter-icon.png create mode 100644 backend/src/emails/templates/includes/youtube-icon.png diff --git a/backend/src/emails/sendEmailTranslated.ts b/backend/src/emails/sendEmailTranslated.ts index 879d17656..acef8a11f 100644 --- a/backend/src/emails/sendEmailTranslated.ts +++ b/backend/src/emails/sendEmailTranslated.ts @@ -70,7 +70,36 @@ export const sendEmailTranslated = async ({ const resultSend = await email .send({ template: path.join(__dirname, 'templates', template), - message: receiver, + message: { + ...receiver, + attachments: [ + { + filename: 'gradido-header.jpeg', + path: path.join(__dirname, 'templates/includes/gradido-header.jpeg'), + cid: 'gradidoheader', + }, + { + filename: 'facebook-icon.png', + path: path.join(__dirname, 'templates/includes/facebook-icon.png'), + cid: 'facebookicon', + }, + { + filename: 'telegram-icon.png', + path: path.join(__dirname, 'templates/includes/telegram-icon.png'), + cid: 'telegramicon', + }, + { + filename: 'twitter-icon.png', + path: path.join(__dirname, 'templates/includes/twitter-icon.png'), + cid: 'twittericon', + }, + { + filename: 'youtube-icon.png', + path: path.join(__dirname, 'templates/includes/youtube-icon.png'), + cid: 'youtubeicon', + }, + ], + }, locals, // the 'locale' in here seems not to be used by 'email-template', because it doesn't work if the language isn't set before by 'i18n.setLocale' }) .catch((error: unknown) => { diff --git a/backend/src/emails/templates/includes/facebook-icon.png b/backend/src/emails/templates/includes/facebook-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..1d880cf3e21f0eac022181f0540859e65c9d2635 GIT binary patch literal 1449 zcmV;a1y=frP)WmhDt1z%7D7m zQj!Z6h7TAE@2=H})G ztJUgd0AnOiq$Rf=08dEX&gb(tj~_q2l#0x)3YeXp9a>&q{!~P+kQ_?Erj`I$6p=}# z)P(Q*e{V@vrwvKM7&A)pnurW<#fUAi0N`p61a|D)Tqo_*hU7GW zQn6V4z1_BL2ViDq=3Ep-cS#;;x2;P6%zK`9sZc0Px6@9wQ`s0Z7DdthUUObVgyfMZ zitZa@#@cDOsQ{4lwAMGQwYNz2cV?n{NcLN6Z)vS>kn}dwrsWVI=^110lDxQe6SD)r zy&woK0f?H_YuN*gG1s@7^CBW7FB)U6x2o5)2N+|>P0`~LH!=f;>1NRC@; z-&9KNtIgWh+Sh^fPVWGWiO5$XaR9W|p{rx8b^Mm}z!+1s*4~Q^l=>edP3J{KNS@GI zhhZ4%+7KwEsv()bni%zdMmE$aiNtdN$qN}NT~2yH^0ka?sOh^PBBCml%3%PfvQ*v( zq}|V3>pNAcR1T~7rA4O7dx3b#e_oM1*==LG1<8{+lE+*K2k=FMvPVto|0smDSX1t5Myt$I2D0GtItDK*&Ei;*tjatMgB)~52B*&!~6z*0^rwd7(Ms! zi^b7K^^GxKlKiAWn|#`~)lf<;}yhgz@@VZEGUwhp3C(TB%dh& zPrGeMw*c@|0eIYPL%Ick#|prMPSZ=aGXMzSf%1L-1S9^n<%7RjAqP}2F08XDiy$IlHwl-x4 zfUE11t2Z2o1VM0zWLxQ`+X0f(K@i+oU%nwl1^~+%K6v_OK-_m)JHgAj=W5!5+)2kCBfR_NqTXp+2ZQ50`tFO$6y!v+_dA64p zOC+aBo^988k-ckkdlx77uFj?*WIem`@^litetrIbG9Al@qI{v(00000NkvXXu0mjf DhkUKj literal 0 HcmV?d00001 diff --git a/backend/src/emails/templates/includes/footer.pug b/backend/src/emails/templates/includes/footer.pug index 1966483e4..3ae63e32e 100644 --- a/backend/src/emails/templates/includes/footer.pug +++ b/backend/src/emails/templates/includes/footer.pug @@ -5,70 +5,38 @@ footer target="_blank" href="https://www.facebook.com/groups/Gradido/" ) - svg.bi-facebook( - fill="#bec2cb" - xmlns="http://www.w3.org/2000/svg" - aria-label="facebook" - role="img" - focusable="false" - height="29" - width="29" - viewBox="0 0 16 16" + img.bi-facebook( + alt="facebook" + loading="lazy" + src="cid:facebookicon" ) - g - path( - d="M16 8.049c0-4.446-3.582-8.05-8-8.05C3.58 0-.002 3.603-.002 8.05c0 4.017 2.926 7.347 6.75 7.951v-5.625h-2.03V8.05H6.75V6.275c0-2.017 1.195-3.131 3.022-3.131.876 0 1.791.157 1.791.157v1.98h-1.009c-.993 0-1.303.621-1.303 1.258v1.51h2.218l-.354 2.326H9.25V16c3.824-.604 6.75-3.934 6.75-7.951z" - ) - a.slink( - target="_blank" - href="https://twitter.com/gradido" - ) - svg.bi-twitter( - fill="#bec2cb" - xmlns="http://www.w3.org/2000/svg" - aria-label="twitter" - role="img" - focusable="false" - height="29" - width="29" - viewBox="0 0 16 16" - ) - g - path( - d="M5.026 15c6.038 0 9.341-5.003 9.341-9.334 0-.14 0-.282-.006-.422A6.685 6.685 0 0 0 16 3.542a6.658 6.658 0 0 1-1.889.518 3.301 3.301 0 0 0 1.447-1.817 6.533 6.533 0 0 1-2.087.793A3.286 3.286 0 0 0 7.875 6.03a9.325 9.325 0 0 1-6.767-3.429 3.289 3.289 0 0 0 1.018 4.382A3.323 3.323 0 0 1 .64 6.575v.045a3.288 3.288 0 0 0 2.632 3.218 3.203 3.203 0 0 1-.865.115 3.23 3.23 0 0 1-.614-.057 3.283 3.283 0 0 0 3.067 2.277A6.588 6.588 0 0 1 .78 13.58a6.32 6.32 0 0 1-.78-.045A9.344 9.344 0 0 0 5.026 15z" - ) - a.slink( - target="_blank" - href="https://www.youtube.com/c/GradidoNet" - ) - svg.bi-youtube( - fill="#bec2cb" - xmlns="http://www.w3.org/2000/svg" - aria-label="youtube" - role="img" - focusable="false" - height="29" - width="29" - viewBox="0 0 16 16" - ) - g - path( - d="M8.051 1.999h.089c.822.003 4.987.033 6.11.335a2.01 2.01 0 0 1 1.415 1.42c.101.38.172.883.22 1.402l.01.104.022.26.008.104c.065.914.073 1.77.074 1.957v.075c-.001.194-.01 1.108-.082 2.06l-.008.105-.009.104c-.05.572-.124 1.14-.235 1.558a2.007 2.007 0 0 1-1.415 1.42c-1.16.312-5.569.334-6.18.335h-.142c-.309 0-1.587-.006-2.927-.052l-.17-.006-.087-.004-.171-.007-.171-.007c-1.11-.049-2.167-.128-2.654-.26a2.007 2.007 0 0 1-1.415-1.419c-.111-.417-.185-.986-.235-1.558L.09 9.82l-.008-.104A31.4 31.4 0 0 1 0 7.68v-.122C.002 7.343.01 6.6.064 5.78l.007-.103.003-.052.008-.104.022-.26.01-.104c.048-.519.119-1.023.22-1.402a2.007 2.007 0 0 1 1.415-1.42c.487-.13 1.544-.21 2.654-.26l.17-.007.172-.006.086-.003.171-.007A99.788 99.788 0 0 1 7.858 2h.193zM6.4 5.209v4.818l4.157-2.408L6.4 5.209z" - ) a.slink( target="_blank" href="https://t.me/GradidoGruppe" ) - svg.bi-telegram( - viewBox="0 0 16 16" - fill="#bec2cb" - height="29" - width="29" - xmlns="http://www.w3.org/2000/svg" + img.bi-telegram( + alt="Telegram" + loading="lazy" + src="cid:telegramicon" + ) + a.slink( + target="_blank" + href="https://twitter.com/gradido" + ) + img.bi-twitter( + alt="Twitter" + loading="lazy" + src="cid:twittericon" + ) + a.slink( + target="_blank" + href="https://www.youtube.com/c/GradidoNet" + ) + img.bi-youtube( + alt="youtube" + loading="lazy" + src="cid:youtubeicon" ) - path( - d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0zM8.287 5.906c-.778.324-2.334.994-4.666 2.01-.378.15-.577.298-.595.442-.03.243.275.339.69.47l.175.055c.408.133.958.288 1.243.294.26.006.549-.1.868-.32 2.179-1.471 3.304-2.214 3.374-2.23.05-.012.12-.026.166.016.047.041.042.12.037.141-.03.129-1.227 1.241-1.846 1.817-.193.18-.33.307-.358.336a8.154 8.154 0 0 1-.188.186c-.38.366-.664.64.015 1.088.327.216.589.393.85.571.284.194.568.387.936.629.093.06.183.125.27.187.331.236.63.448.997.414.214-.02.435-.22.547-.82.265-1.417.786-4.486.906-5.751a1.426 1.426 0 0 0-.013-.315.337.337 0 0 0-.114-.217.526.526 0 0 0-.31-.093c-.3.005-.763.166-2.984 1.09z" - ) .line .footer div(class="footer_p1")= t("emails.footer.contactOurSupport") diff --git a/backend/src/emails/templates/includes/gradido-header.jpeg b/backend/src/emails/templates/includes/gradido-header.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..38a5c3a80f090b8973db6d603d406249f7af7f04 GIT binary patch literal 9427 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 literal 0 HcmV?d00001 diff --git a/backend/src/emails/templates/includes/header.pug b/backend/src/emails/templates/includes/header.pug index 1c4b8912a..3160d3e2b 100644 --- a/backend/src/emails/templates/includes/header.pug +++ b/backend/src/emails/templates/includes/header.pug @@ -6,7 +6,7 @@ header img.head-logo( alt="Gradido Logo" loading="lazy" - src="data:image/jpeg;base64,/9j/4QAWRXhpZgAATU0AKgAAAAgAAAAAAAD/7QA4UGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAAA4QklNBCUAAAAAABDUHYzZjwCyBOmACZjs+EJ+/+IH2ElDQ19QUk9GSUxFAAEBAAAHyGFwcGwCIAAAbW50clJHQiBYWVogB9kAAgAZAAsAGgALYWNzcEFQUEwAAAAAYXBwbAAAAAAAAAAAAAAAAAAAAAAAAPbWAAEAAAAA0y1hcHBsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALZGVzYwAAAQgAAABvZHNjbQAAAXgAAAWKY3BydAAABwQAAAA4d3RwdAAABzwAAAAUclhZWgAAB1AAAAAUZ1hZWgAAB2QAAAAUYlhZWgAAB3gAAAAUclRSQwAAB4wAAAAOY2hhZAAAB5wAAAAsYlRSQwAAB4wAAAAOZ1RSQwAAB4wAAAAOZGVzYwAAAAAAAAAUR2VuZXJpYyBSR0IgUHJvZmlsZQAAAAAAAAAAAAAAFEdlbmVyaWMgUkdCIFByb2ZpbGUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG1sdWMAAAAAAAAAHwAAAAxza1NLAAAAKAAAAYRkYURLAAAAJAAAAaxjYUVTAAAAJAAAAdB2aVZOAAAAJAAAAfRwdEJSAAAAJgAAAhh1a1VBAAAAKgAAAj5mckZVAAAAKAAAAmhodUhVAAAAKAAAApB6aFRXAAAAEgAAArhrb0tSAAAAFgAAAspuYk5PAAAAJgAAAuBjc0NaAAAAIgAAAwZoZUlMAAAAHgAAAyhyb1JPAAAAJAAAA0ZkZURFAAAALAAAA2ppdElUAAAAKAAAA5ZzdlNFAAAAJgAAAuB6aENOAAAAEgAAA75qYUpQAAAAGgAAA9BlbEdSAAAAIgAAA+pwdFBPAAAAJgAABAxubE5MAAAAKAAABDJlc0VTAAAAJgAABAx0aFRIAAAAJAAABFp0clRSAAAAIgAABH5maUZJAAAAKAAABKBockhSAAAAKAAABMhwbFBMAAAALAAABPBydVJVAAAAIgAABRxlblVTAAAAJgAABT5hckVHAAAAJgAABWQAVgFhAGUAbwBiAGUAYwBuAP0AIABSAEcAQgAgAHAAcgBvAGYAaQBsAEcAZQBuAGUAcgBlAGwAIABSAEcAQgAtAHAAcgBvAGYAaQBsAFAAZQByAGYAaQBsACAAUgBHAEIAIABnAGUAbgDoAHIAaQBjAEMepQB1ACAAaADsAG4AaAAgAFIARwBCACAAQwBoAHUAbgBnAFAAZQByAGYAaQBsACAAUgBHAEIAIABHAGUAbgDpAHIAaQBjAG8EFwQwBDMEMAQ7BEwEPQQ4BDkAIAQ/BEAEPgREBDAEOQQ7ACAAUgBHAEIAUAByAG8AZgBpAGwAIABnAOkAbgDpAHIAaQBxAHUAZQAgAFIAVgBCAMEAbAB0AGEAbADhAG4AbwBzACAAUgBHAEIAIABwAHIAbwBmAGkAbJAadSgAUgBHAEKCcl9pY8+P8Md8vBgAIABSAEcAQgAg1QS4XNMMx3wARwBlAG4AZQByAGkAcwBrACAAUgBHAEIALQBwAHIAbwBmAGkAbABPAGIAZQBjAG4A/QAgAFIARwBCACAAcAByAG8AZgBpAGwF5AXoBdUF5AXZBdwAIABSAEcAQgAgBdsF3AXcBdkAUAByAG8AZgBpAGwAIABSAEcAQgAgAGcAZQBuAGUAcgBpAGMAQQBsAGwAZwBlAG0AZQBpAG4AZQBzACAAUgBHAEIALQBQAHIAbwBmAGkAbABQAHIAbwBmAGkAbABvACAAUgBHAEIAIABnAGUAbgBlAHIAaQBjAG9mbpAaAFIARwBCY8+P8GWHTvZOAIIsACAAUgBHAEIAIDDXMO0w1TChMKQw6wOTA7UDvQO5A7oDzAAgA8ADwQO/A8YDrwO7ACAAUgBHAEIAUABlAHIAZgBpAGwAIABSAEcAQgAgAGcAZQBuAOkAcgBpAGMAbwBBAGwAZwBlAG0AZQBlAG4AIABSAEcAQgAtAHAAcgBvAGYAaQBlAGwOQg4bDiMORA4fDiUOTAAgAFIARwBCACAOFw4xDkgOJw5EDhsARwBlAG4AZQBsACAAUgBHAEIAIABQAHIAbwBmAGkAbABpAFkAbABlAGkAbgBlAG4AIABSAEcAQgAtAHAAcgBvAGYAaQBpAGwAaQBHAGUAbgBlAHIAaQENAGsAaQAgAFIARwBCACAAcAByAG8AZgBpAGwAVQBuAGkAdwBlAHIAcwBhAGwAbgB5ACAAcAByAG8AZgBpAGwAIABSAEcAQgQeBDEESQQ4BDkAIAQ/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oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAjZO4qu8Qb2NXKQgHrQBkSQY6j8az5rUMOR+NdGUPaqrwK33ePagDkZ7HrxWLPpwOcCu9khxwRVGW1U9RQB5pc6YO4/EVjTaSD2/A16nLY+lZsunr3FAHlcmkf7P5U1NHBPKfnXpL6appo0xc96AOIg0dR149hW9aaZt+6PxNdFFp4B6ZrVgs/UUAZlpp5GMAGuggtAoGRVmKHb2rShizyen86AK0cIAzg1cjgXbk5yauIufpUtAFHyV9/wDP4UohT3q7RQBVESj+H/P61IIz9KmooAYEHf8Az+tPoooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA/9f+/iiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACkKg0tFAEJjP1qu8KnpxV6kIB60AZL25Hb8qrNADW0wAOBTCqt1FAGE1qp6imi1APT/AD+VbhiQ9qb5Ke9AGStuB2qwkPOBz9K0BEg7U8ADpQBAkGPvflVpUz9KVAD1qWgAAxxRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB/9k=" + src="cid:gradidoheader" ) diff --git a/backend/src/emails/templates/includes/telegram-icon.png b/backend/src/emails/templates/includes/telegram-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..4c36ff66148cb69d8c8f9373b33bca573c251ed8 GIT binary patch literal 2159 zcmV-#2$1)QP)bMFuniA}Vr(Ws3f zX=+J~xF)q|Qi+NFAht>4#}8A5HmO9usx}fq(cTEGv}W7Iq&=4^ZB0l5?w~ISX?6ME=fa@mXo|4z+&fI z))k{%kk(V>d{nC<*|qmvj%wRg&6jhomIEO!9dE zdx9W{($zFY2b?%@B0DxV_8`e&Nq3~hTMv@QCGGC-@87;+#fl55aCS;iDwP&pzI^#> z03MdKCtfU*0%61bZ&v>4o zDqCxZtJUg(`DQ!-NV>6Ftsbz}4kwXo$pMnQD2lc?=XOcDu00jI4@uWK=XOO=v_+EF zicHfXAjz}VJ}c?o&Q-j6Ai3Z7{dFX(bJc6w1FW@=zuSxl07>^+Yaee`Z_XZItsQpG z?MhFrs}Ez$mweyf-ROBk2gI}ef%!blvcpRgB-dJNH_Rxn|5GZJ7M088Q+Vh0 z_T9!g&+`WB4^UV1fcR85uZ<`90?98LV{#-nClp`ooZEB-U+u?<6DP9cX^4$H}e)h-ZN0TL7K|u*3KLgL8$l!Z7RsurZU#{3Vymy;T3KR4Uz6E|=Th ztVy~D05Zj5afx$osN3V8Q)em60^m2~h)B06PZ;27cZ^`B@Q$;ioQMyts|zG626E7#R5c;Naj}v(=TTr#7hqwkxTn0SAC8ov#aw`Ty{ zkW^688^)Mt;;rfNb{ej)TaZS<&thJx4R4SvAHq{#sV06KP1s_goe6d(u z0^p{kddvpr+=YxW=7OZA6QQIv)oS&nD2iSMun)lAAP7oxDe9bi!a4WAELeZ{yCsjJtw{Oga41jY0KA1p(+W>3^u=()e!zW4Z%VaWpbGh7Ttxgz*U#M2AKLqgJ z>GCA^FI~FybIX=3n`l$-)EofdTt?C<0EKp>NiGNQNTpJFB#NTr0QLg7OVZs9M0WbV z|4@SC?hK@{1FYjZl_7aDjU^?HCp-qAk#XNH6bg@a+)#==faFO-ay{O;nJl`sdaynB6-N<^ZB!qUQUtN)E{C< zo*o(+`gf^R>Wu>&Z6oFJ|8hQ`KWhLW&cjQKn7VROISl}J-g)OZFcsx#3(mPT$N%%d z+fm^?0KT3U`7}&jNEQl(%dvyZTu0qGkXjGGq|K8zLqQNkB-=XG%?3`Q)(cKgdnRjb zJ`BSjg<-g`RnB6ucs+nyQ_}BvE$g&?VtP6aasZHIB)Pb;D;!|0y<5^j02?L!wNxs# z6p(Swr8)km4s}xw=;)fJm25n zzrFT<$^r3R*^_BBQrDPzdU{?50Bh|-B!4kW#z_{yz9@>eG?^gNngE}y&ojPaZSLvm zc>7Nx}umvm_tzegBWOvM>x6$7wDdh3`oY2SISfTsMPI62mb3^E;U(5-*XDEnK+p zsqyjg>q%~_-Q=_jNh5_q;Um*`z1NbYW)mnB3a35KTSv0oef7GFI8AO{qfGLKlTt31 z8zH%|d#YU>klZ*|2Kk&PG~f4kliWI2o%sxsTbo6)uO&;jKva#1-ZecTe)CO@2NHfU zVyzvPv~9lT50fmD+?eD7=h`PTNgK-LawC$~NJ`XDHz8?6(wd~k1J^#AyY}JawNGc$ lAeoN;%a5lUVZMJp|6hafLt8=zP{RNK002ovPDHLkV1k2FAsYYy literal 0 HcmV?d00001 diff --git a/backend/src/emails/templates/includes/twitter-icon.png b/backend/src/emails/templates/includes/twitter-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..fffb9b59939b564a552879830d1244e319c9ba8e GIT binary patch literal 2002 zcmV;@2QB!CP)2v^jL`{t)V1_VYpM$PXVmRA|eAWko=M7c?U=;4MC~~@O}SQ zNry;oNn@WkBpoBUqg*b(o76UO0~|kod`le1uSmK%scj=c@_eCC*xuFEbu5XUNm4ir z!|phak1RIl0YK8taU35B!>~Jv-Mkt=QXvR}mz;BZCAFlJ*my{4an9`xg5V`dh56Xj z{RAWx!Z3VA(zfgp7Y-zU?|I&KlJQ*S>h^#z3}5`PIS&AmwuNE%V!d*6_JA-9yPb1; z^OLpkFvdLQdEUO+exJ1gs-yjp#r)0B2PDS|g~GkF%?>j*fbaXal6-41j`nFl^1P(Y zGp!S*jRBG<>CpA!JaA=-tok(VA3m)C!Z6&qSXOv>g5;Jk40ld@U;9w0RF;p8jh(>< zx3+IIE))ud&(&_AuId5RUETHSJaFY8=KHlTrg}hMUtj0Q$jCbjwWY0tnB*XUk4ajR zCo##39UUFFO`a!A^?;F)k?(wv&P$pgxu;MlY_ZlZvDV&Vt!*{N+)478>KVWkNM0tn z2f*tI>sdZLJpB0NbL}UPXcJK*L;xNlc{q)I6@PDOX(?H2pD2||f301YeNl6qoe(4dM?SbwKkaS0S_l7s3H0-0IXWI>VIu*ZQDq`k;L8@ z^KcsH0bq1=^z#6|LGsrr%y$6QPe9U_(g*+ml7E~0yI3p^d!F}Y06!t==3)N2wf4=l zbz5uy(9zNHmUHf|q_&c_0)UC4XeG(@X+;1St$iTr%H{IY0JZ`+F_)n+=64zD1pthU zj2s}jCaE3C^-&b9G}WL*>cdgzTyduN*4iW1+Ad?vBLL3KV&0RsUf=hdgCO{or0r?! zt4scSnk3EWzfP(-IhGAHC&V7^Qea^YnB%7Rb7iY7bN4+mg`g&S>0FYEP zk`i~HS~%x+Mp3k~UOCV6{BpVcLu+lZy}i8yz{a+=wp4>307$ZFZEHBzG?82*r8-gv z0FZp8+70*2*QQu3j-k%@P!Ezi$ZT;PlB=5l+?0W1-1EH0(gr2cqIyWXEC;F;#yQuS zfuQ-si4&j7K}aI>^z_^TpgAi~H9~E&GyolD#?c6-e&y?d@$yBq<1j2PEB}Cnw2X zL-J@|D>+GbU%q_#U{6m^M;?5Ws8lMScFrBhlar)K9yO&>X+YA+yojB14~>tHhfx%L zRZ>${zW)CHC1Yb_zag1r$vzE|PL@ig0RsTlJiI)y+BtV1ilRreko5QWFBuvddKJJI za?&-0NuMVNltVd@UL<+g81wCA%a+~dd0y(!dT(#<(xIWDS0&w-hqf7T2&f5+1VPZ7 zB*Bs7JI0u;aU8ccH8r`3iHY~EweRIIoH_p!OTx58#Ca zJfCsSJ=)yd{QRa(n?~{w*3;9|F)=am1LxdR0CJ58)k4x#!bIlKn56fNF+Xo_Z{M?S z-MYavf}$w;cpS%%0C)<(EonIBi)%w;R~@MYLGY}kXVMT$`mZtOu%y>oT3Y_HapT5+ z%vHWpsoWmN@mW=_SvcDYeeN49)F)?ucSc${~=kBw4CH8s)wSv zPHXeTwD9<}L$x3XzE%5;Tu&g`ZLQsZ)w^p8NuuxjZ(eU%B9e}k%jLVTou#I2EUHVy z9VE{$oV><@N-YpSL38D z3`p*pD}#K_y|w3g`$+E2U)I8ahzpWd^u1J4o6rDN#j@grsAVHYar+xN&Xn#>L4SS7-Ae kxfUPE%hR)Av0tD6KRO$}cDgFm=l}o!07*qoM6N<$f{G#L5&!@I literal 0 HcmV?d00001 diff --git a/backend/src/emails/templates/includes/youtube-icon.png b/backend/src/emails/templates/includes/youtube-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..d135ba625d2749adad59d87623b082797418f5ca GIT binary patch literal 1802 zcmV+l2le=gP)A6O75=_ElNjVNA;O7-5TOgwnA%F_y_qafL{%!fVbMi4 zNR|-6MXj=dt|DavsEewq3JqC+h?I~8@`6PdEXo4mNTPBc>FVd_svY4G~Z@4@4fGwbI-f)-h0kHm*_I8)#?FB&q^AWbcE#700y0N z1ICyE0C3JN8Do|J%uAXfd7I=7l2?KtxZ6$p*bSjk6qNvsN_v6hh$JsPBqixO$v*=a zFO^DBXD#iZ1E!~^2bPzYUnV&w>6uQ+Z3fAkk}eerg$qMNLrWcznN>ioR@=Y2y806U zKbEw=12(k<$$J3K8)MD|L9mcXmM>8ft+l5ly$N72ixC+xPx4F{hL=goM}U_DDwWD1 zN#i6>`0zUoNs}Z;%jNP1X}PH#aP{id6LB2BBk5pTZZ|=4E|<%lEEbECX?P~h!`9ld zIF2WFTjK#h(!n^6C# zhcV`*Fbpqkb$?3-B%}SrZvN(X0+K7aT<-a;W`|83P^nZ7k^IMQ9PNETa!%6m&DIGU z#sEo_H2%0W9$1?qlQwO5;Ts%atv$6{R(PER$rIMvQyZ=~|Ebk#`&U+0X7KRV_T9#O zE|)vp96+t>0ZCN%xHcYGOT@g|eBnV4n4X>`h?_tl1`G78c%g(vyCA}u; zDIYl`$B;OHz*-JZQpHo)ElJ-jm&=Pjd|%AY&VFHWaq)cs!#;eHHM-NNuOY^m zAN9KN0C4#5;s56I`Bb5A3r2xt7LfFUj|7r;f*^Q5gAtifEEfMx@}EB3Mw|21YW09~ zZbb4*sa;F+u(kFWfbSV&E*Fc%86SnMkaQiu*VFPyj#R7F118zD@Xg!bPV>B^UpnW` z#&KMWqUdL{v$K6ZdRuIm_2DH;{%4IOuR#O=oOAz5skA@&?UVHLg@uKwYPI^Dul_{V zzcX-$jie*K0!V)B%T4%4;y8ZKTKl_Ow{CsOQ_Q@teo03R$t(`&$nK1D?o_>ApRQCY zKS;|p#w`2lCHb@g;OlviT=nH{fR;%s!rDU{W&^YG?eA&*qj<5J6J-52L zIu%9H*>2mA>`)tT2gq~o+=1LaNv~hKcI~U(w80oNkSVYr*_G|}ME37TMn*pDwhhKP z=RJ^h!vQ4k7-PO$DwV#!lb|Y#4M|~!$ug4f$-rF)N%u*u?>$s4{7NGiT|3}eh2aU6eajJc5VJKqjN zzC@BY@+7Y$)mW)VQ%R|m2SM;IfOpgCX@hV0kVuN;6%z!(-6WwW(wAPN7n% z4Ea{1NxB{c!CeCYNgbXSB>iTm#R#25qVw0j{6?D_E5Y#$hJ43b`6aY8+_V7>T0jrX;WLsR@fDKLjw>*cXtrO!9w{R!DwA@_u7az!>8Iz&U4{ z_6G8j`bh4T^m&qnrhS2flD-09Ult=t-Yk_$!$8x%fTW86+E!Gw!9Gd*06de(MC)(! zjME&*wcgu|+bKwTP%!Zz7%CJB7m^Ch#~LK>6$*t5jsFiEknEM6e<)V<7U!GmjMs(3 zd-m-46*A=59s$f7W6m{SSm%JFM~~hkd8W5E^$sM@v=&!yn6@ObQmOp)ajO!MG+8c} zztvh)y&)r%ED=XZ&h^f`?ta=H9LE|)t=a;5v`br(sQ+{vvf$+yf2 z7K_D6lBc_8T5mw|^mY~G+a^WBFuX+a+;-3GW{^C$U6m;Cq*%Iru{6mz5%kFPgyhY) zZ9I_j#E7+aED3*iW&JS86_Tghb^CRkv`RkHM`nPv*+J5ANvRZd6Otw+9Z%bM;K{MM sCkH2=9G&fikXC#q4^MA}-F|%jQ$FLp<@n27i2wiq07*qoM6N<$f^Fe$FaQ7m literal 0 HcmV?d00001 From c1a086ea578d76f48efd6e09482656d9bca334f4 Mon Sep 17 00:00:00 2001 From: elweyn Date: Fri, 19 May 2023 14:56:50 +0200 Subject: [PATCH 069/123] Fix content type. --- backend/src/emails/templates/layout.pug | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/emails/templates/layout.pug b/backend/src/emails/templates/layout.pug index 578a3d1ed..0995b2647 100644 --- a/backend/src/emails/templates/layout.pug +++ b/backend/src/emails/templates/layout.pug @@ -2,7 +2,7 @@ doctype html html(lang=locale) head meta( - content="multipart/mixed; charset=UTF-8" + content="multipart/html; charset=UTF-8" http-equiv="content-type" ) meta( From b4a50dbcda016224e2dae919c89391e38bb827a3 Mon Sep 17 00:00:00 2001 From: elweyn Date: Fri, 19 May 2023 15:20:19 +0200 Subject: [PATCH 070/123] Fix tests to the changes that were made. --- .../sendEmailVariants.test.ts.snap | 348 +++++------------- backend/src/emails/sendEmailVariants.test.ts | 36 +- 2 files changed, 111 insertions(+), 273 deletions(-) diff --git a/backend/src/emails/__snapshots__/sendEmailVariants.test.ts.snap b/backend/src/emails/__snapshots__/sendEmailVariants.test.ts.snap index dfcddcec2..5a443b2bf 100644 --- a/backend/src/emails/__snapshots__/sendEmailVariants.test.ts.snap +++ b/backend/src/emails/__snapshots__/sendEmailVariants.test.ts.snap @@ -4,7 +4,7 @@ exports[`sendEmailVariants sendAccountActivationEmail result has the correct htm " - + - +
-
\\"Gradido
+
\\"Gradido
-

Email Verification

+

Email Verification

Hello Peter Lustig,

Your email address has just been registered with Gradido.

-
-

Complete registration

-
Please click here to complete the registration and activate your Gradido account.
Activate account -
Or copy the link into your browser window.
http://localhost/checkEmail/6627633878930542284


+
+

Complete registration

+
Please click here to complete the registration and activate your Gradido account.
Activate account +
Or copy the link into your browser window.
http://localhost/checkEmail/6627633878930542284 -

Request new valid link

-
The link has a validity of 23 hours and 30 minutes. -If the validity of the link has already expired, you can have a new link sent to you here.
New link +

Request new valid link

+
The link has a validity of 23 hours and 30 minutes. +If the validity of the link has already expired, you can have a new link sent to you here.
New link
@@ -157,25 +157,7 @@ If the validity of the link has already expired, you can have a new link sent to