From 1ec924cc9b5cf887117240a4eac551bdabefa1b7 Mon Sep 17 00:00:00 2001 From: Santeri Hurnanen Date: Tue, 22 Oct 2024 08:14:00 +0300 Subject: [PATCH 01/74] UHF-10354: new cron entrypoint (#1506) * UHF-10354: Remove base.sh * UHF-10354: Remove migrate-hearings.sh --- docker/openshift/crons/base.sh | 35 ---------------------- docker/openshift/crons/migrate-hearings.sh | 9 ------ 2 files changed, 44 deletions(-) delete mode 100644 docker/openshift/crons/base.sh delete mode 100644 docker/openshift/crons/migrate-hearings.sh diff --git a/docker/openshift/crons/base.sh b/docker/openshift/crons/base.sh deleted file mode 100644 index 1e4a42bd25..0000000000 --- a/docker/openshift/crons/base.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/bin/bash - -echo "Starting cron: $(date)" - -# You can add any additional cron "daemons" here: -# -# exec "/crons/some-command.sh" & -# -# Example cron (docker/openshift/crons/some-command.sh): -# @code -# #!/bin/bash -# while true -# do -# drush some-command -# sleep 600 -# done -# @endcode - -# Uncomment this to enable TPR migration cron -exec "/crons/migrate-tpr.sh" & -# Uncomment this to enable Varnish purge cron -exec "/crons/purge-queue.sh" & -# Uncomment this to enable automatic translation updates. -exec "/crons/update-translations.sh" & -# Uncomment this to enable content scheduler -# exec "/crons/content-scheduler.sh" & -exec "/crons/pubsub.sh" & - -while true -do - echo "Running cron: $(date)\n" - drush cron - # Sleep for 10 minutes. - sleep 600 -done diff --git a/docker/openshift/crons/migrate-hearings.sh b/docker/openshift/crons/migrate-hearings.sh deleted file mode 100644 index 9cbea08544..0000000000 --- a/docker/openshift/crons/migrate-hearings.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/bash - -echo "Starting hearings migration: $(date)" - -while true -do - drush mim helfi_hearings --reset-threshold 43200 --interval 1800 - sleep 900 -done From 13f7cd1a5d2d3c3249cc58a65b7c0d5443ba48ac Mon Sep 17 00:00:00 2001 From: Tero Elonen <2276077+teroelonen@users.noreply.github.com> Date: Tue, 22 Oct 2024 10:16:43 +0300 Subject: [PATCH 02/74] UHF-10343: Updating the liikunta_suunnistuskartta_avustus forms texts (#1513) * UHF-10343: Update liikunta_suunnistuskartta_avustus forms texts to new version * UHF-10343: Fix issue with application search where the search button and the clear the search button have no spacing in between * UHF-10343: Fix issue with unneccessary wrapper around the application search form styles --- ...bform.liikunta_suunnistuskartta_avustu.yml | 2 +- ...bform.liikunta_suunnistuskartta_avustu.yml | 2 +- ...bform.liikunta_suunnistuskartta_avustu.yml | 4 +- .../hdbt_subtheme/dist/css/styles.min.css | 2 +- .../custom/hdbt_subtheme/package-lock.json | 6 +- .../pages/_application-search.scss | 242 +++++++++--------- 6 files changed, 129 insertions(+), 129 deletions(-) diff --git a/conf/cmi/language/en/webform.webform.liikunta_suunnistuskartta_avustu.yml b/conf/cmi/language/en/webform.webform.liikunta_suunnistuskartta_avustu.yml index 2a002764f5..207508f0c9 100644 --- a/conf/cmi/language/en/webform.webform.liikunta_suunnistuskartta_avustu.yml +++ b/conf/cmi/language/en/webform.webform.liikunta_suunnistuskartta_avustu.yml @@ -75,7 +75,7 @@ elements: |

All the attachments listed below must be submitted for the processing of the grant application. The grant application may be rejected if the attachments are not submitted. If any of the attachments is missing, let us know in the Further clarification on attachments section of the application.

Required attachments

-

For the processing of the grant application, the required attachments are the confirmed attachments approved and signed by the community at its meeting for the previous accounting period and for the operating year for which the grant is being applied for. The attachments concerning the previous accounting period are the financial statements, the annual report, the audit or performance audit report and the minutes of the annual meeting. The attachments for the year for which the grant is being applied for are the budget and action plan.

+

Invoices and receipts for the cost of producing orienteering maps must be submitted only upon request.

Submission of several attachments as a single file

If you wish, you can submit several attachments as a single file under Financial statements or Budget. In this case, under the other attachment headings, indicate “The attachment has been submitted as a single file or with another application.”

Attachments previously submitted to the City of Helsinki

diff --git a/conf/cmi/language/sv/webform.webform.liikunta_suunnistuskartta_avustu.yml b/conf/cmi/language/sv/webform.webform.liikunta_suunnistuskartta_avustu.yml index b77a129bba..6b16f2a791 100644 --- a/conf/cmi/language/sv/webform.webform.liikunta_suunnistuskartta_avustu.yml +++ b/conf/cmi/language/sv/webform.webform.liikunta_suunnistuskartta_avustu.yml @@ -77,7 +77,7 @@ elements: | '#markup': |-

Alla bilagor som anges nedan måste lämnas in för behandling av ansökan om understöd. Ansökan om understöd kan avslås om bilagorna inte har lämnats in. Om någon av bilagorna saknas, meddela oss om det i punkten Ytterligare information om bilagor i ansökan.

Erforderliga bilagor

-

För behandling av ansökan om understöd behövs styrkta bilagor från den föregående räkenskapsperioden som samfundet har godkänt och undertecknat vid sitt möte samt bilagor för det verksamhetsår för vilket understödet ansöks. Bilagorna från den föregående räkenskapsperioden är: bokslut, verksamhetsberättelse, revisionsberättelse och protokoll från årsstämman. Bilagorna för det år för vilket understödet ansöks är: budget och verksamhetsplan.

+

Fakturorna och kvittona över kostnaderna för framställning av orienteringskartor ska lämnas endast separat på begäran.

Inlämning av flera bilagor i en fil

Om du vill kan du lämna in flera bilagor i en fil i punkten Bokslut eller budget. Ange i detta fall vid andra bilagor att ”Bilagan har lämnats in som en fil eller i samband med en annan ansökan”.

Bilagor som tidigare lämnats in till Helsingfors stad

diff --git a/conf/cmi/webform.webform.liikunta_suunnistuskartta_avustu.yml b/conf/cmi/webform.webform.liikunta_suunnistuskartta_avustu.yml index 38e0fbcce9..72c30e2971 100644 --- a/conf/cmi/webform.webform.liikunta_suunnistuskartta_avustu.yml +++ b/conf/cmi/webform.webform.liikunta_suunnistuskartta_avustu.yml @@ -266,7 +266,7 @@ elements: |- '#markup': |-

Avustushakemuksen käsittelyä varten tulee toimittaa kaikki alla luetellut liitteet. Avustushakemus voidaan hylätä, jos liitteitä ei ole toimitettu. Mikäli joku liitteistä puuttuu kerro siitä hakemuksen Lisäselvitys liitteistä -kohdassa.

Vaaditut liitteet

-

Avustushakemuksen käsittelyä varten tarvitaan vahvistettuja, yhteisön kokouksessaan hyväksymiä ja allekirjoittamia, liitteitä edelliseltä päättyneeltä tilikaudelta sekä liitteitä sille toimintavuodelle, jolle avustusta haetaan. Edellistä tilikautta koskevat liitteet ovat: tilinpäätös, toimintakertomus ja tilin- tai toiminnantarkastuskertomus sekä vuosikokouksen pöytäkirja. Liitteet vuodelle, jolle avustusta haetaan ovat: talousarvio ja toimintasuunnitelma.

+

Suunnistuskarttojen valmistuskustannuksiin liittyvät laskut ja kuitit toimitetaan ainoastaan erikseen pyydettäessä.

Usean liitteen toimittaminen yhtenä tiedostona

Voit halutessasi toimittaa useampia liitteitä yhtenä tiedostona Tilinpäätös tai talousarvio -liitekohdassa. Merkitse tällöin muiden liiteotsikoiden kohdalla ”Liite on toimitettu yhtenä tiedostona tai toisen hakemuksen yhteydessä”.

Helsingin kaupungille aiemmin toimitetut liitteet

@@ -279,7 +279,7 @@ elements: |-
Liitteiden sisältöä ei voi tarkastella jälkikäteen

Huomioithan, että et pysty avaamaan liitteitä sen jälkeen, kun olet liittänyt ne lomakkeelle. Näet liitteestä ainoastaan sen tiedostonimen.

-

Vaikka et voi tarkastella liitteiden sisältä jälkikäteen, lomakkeelle liitetyt liitteet lähtevät lomakkeen muiden tietojen mukana avustushakemuksen käsittelijälle.

+

Vaikka et voi tarkastella liitteiden sisältöä jälkikäteen, lomakkeelle liitetyt liitteet lähtevät lomakkeen muiden tietojen mukana avustushakemuksen käsittelijälle.

extra_info: diff --git a/public/themes/custom/hdbt_subtheme/dist/css/styles.min.css b/public/themes/custom/hdbt_subtheme/dist/css/styles.min.css index 7d6b556a59..fd0dc903d2 100644 --- a/public/themes/custom/hdbt_subtheme/dist/css/styles.min.css +++ b/public/themes/custom/hdbt_subtheme/dist/css/styles.min.css @@ -1 +1 @@ -body{--webform-element-width--input-small: 184px;--webform-element-width--input-medium: 332px;--webform-element-width--input-large: 591px;--webform-element-width--fieldset: 714px}.hel-icon--size-xs,.hds-icon--size-xs{height:16px;width:16px}.hel-icon--size-s,.hds-icon--size-s{height:24px;width:24px}.hel-icon--size-m,.hds-icon--size-m{height:32px;width:32px}.hel-icon--size-l,.hds-icon--size-l{height:48px;width:48px}.hel-icon--size-xl,.hds-icon--size-xl{height:64px;width:64px}.hel-icon.hel-icon--pen-line{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,");mask-image:url("data:image/svg+xml;charset=utf-8,")}.hel-icon.hds-icon--company{background:var(--color-black);-webkit-mask-image:url("data:image/svg+xml;charset=utf-8, ");mask-image:url("data:image/svg+xml;charset=utf-8, ")}.hds-button--secondary:not(.eu-cookie-compliance-default-button):not(.eu-cookie-compliance-save-preferences-button){--background-color: transparent;--background-color-hover: var(--color-black-80);--background-color-focus: transparent;--background-color-hover-focus: var(--color-black-80);--background-color-disabled: transparent;--color: var(--color-black);--color-hover: var(--color-white);--color-focus: var(--color-black);--color-hover-focus: var(--color-black);--color-disabled: var(--color-black-40)}.hds-button--secondary:not(:disabled):not(.eu-cookie-compliance-default-button):not(.eu-cookie-compliance-save-preferences-button),.hds-button--primary:not(:disabled){border-color:transparent;border-color:var(--color-black, transparent)}.hds-button.hds-button--supplementary .hds-button__label{margin:0;padding:0 var(--spacing-2-xs)}.hds-button.hds-button--supplementary::after,.hds-button.hds-button--supplementary::before{display:none !important}.hds-button--supplementary:not(:disabled){--background-color-hover: rgba(0, 0, 0, 0.1);background:rgba(0,0,0,0);border-color:rgba(0,0,0,0)}.hds-button--supplementary:not(:disabled):hover{background-color:var(--background-color-hover)}.hds-button--alert{--background-color: rgb(255, 0, 0)}a.hds-button.webform-button--delete-draft:not(:disabled){text-decoration:none}a.hds-button.webform-button--delete-draft:not(:disabled) .hds-button__label_wrapper{display:inline}a.hds-button.webform-button--delete-draft:not(:disabled) .hds-button__label{text-decoration:underline}a.hds-button.webform-button--delete-draft:not(:disabled):hover .hds-button__label{text-decoration:none}.openid-connect-login-form input[type=submit].hds-button{width:220px}.hds-button__label_wrapper{align-items:center;display:flex}.hds-button__label_wrapper:not(.hds-button)>.hds-button__label{margin:0 var(--spacing-2-xs)}.hds-link{--link-visited-color: var(--color-black);--link-color: var(--color-black)}.hds-card{--background-color: var(--color-white);--border-color: var(--color-black-90);--color: var(--color-black-90);--border-width: 2px;--padding-horizontal: var(--spacing-l);--padding-vertical: var(--spacing-m);background-color:var(--background-color);color:var(--color);padding:var(--padding-vertical) var(--padding-horizontal)}.hds-card--border{border:var(--border-width) solid var(--border-color)}.hds-card__body{display:grid;grid-gap:var(--spacing-m);gap:var(--spacing-m);margin-bottom:var(--spacing-l)}.hds-card__body:last-child{margin-bottom:0}.hds-card__heading{font-size:var(--fontsize-heading-m);font-weight:bold;line-height:var(--lineheight-m)}.hds-card__text{font-size:var(--fontsize-body-m);line-height:var(--lineheight-l)}.hds-card--applicant-role{margin-bottom:var(--spacing-l);margin-right:0;max-width:400px;width:100%}.hds-card__heading-m{font-size:var(--fontsize-heading-m);font-weight:500;letter-spacing:-0.2px;line-height:32px;margin-top:0}.grants-profile--menuitem--login,.grants-profile--menuitem--logout{align-items:center;display:flex;flex-flow:column;font-size:var(--fontsize-body-s);height:var(--spacing-xl);margin-left:var(--spacing-2-xs);margin-right:var(--spacing-2-xs);position:relative;text-align:center;width:var(--spacing-xl)}.grants-profile--menuitem--login .hel-icon,.grants-profile--menuitem--logout .hel-icon{display:block;margin:auto}.grants-profile--menuitem--login-triggertext,.grants-profile--menuitem--logout-triggertext{clip:rect(1px, 1px, 1px, 1px);-webkit-clip-path:inset(50%);clip-path:inset(50%);display:block;max-height:1px;max-width:1px;opacity:0;overflow:hidden;position:absolute;white-space:nowrap}.block--grants-profile--menuitem{align-items:center;display:flex;grid-area:brand;z-index:2}.block--branding{flex-grow:10}.grants-frontpage-info-block{margin-bottom:var(--spacing-layout-xl)}.grants-profile--menuitem{height:var(--spacing-m);margin-left:var(--spacing-2-xs);margin-right:var(--spacing-2-xs);position:relative;width:var(--spacing-m)}@media(min-width: 768px){.grants-profile--menuitem{height:var(--spacing-2-xl);width:var(--spacing-2-xl)}}.grants-profile--menuitem a{text-decoration:none}.grants-profile--menuitem--notifications{background-color:var(--color-error);border:2px var(--color-white) solid;border-radius:50%;color:var(--color-white);font-size:var(--fontsize-body-s);font-weight:bold;height:var(--spacing-xs) 1.25;line-height:var(--spacing-layout-2-xs);position:absolute;right:-5px;text-align:center;top:-5px;width:var(--spacing-xs) 1.25;z-index:2}.grants-profile--menuitem--initials{border-radius:50%;font-weight:bold;height:var(--spacing-m);line-height:var(--spacing-m);text-align:center;vertical-align:middle;width:var(--spacing-m)}@media(min-width: 768px){.grants-profile--menuitem--initials{height:var(--spacing-2-xl);line-height:var(--spacing-2-xl);width:var(--spacing-2-xl)}}.grants-profile--menuitem--initials:hover,.grants-profile--menuitem--initials:active,.grants-profile--menuitem--initials:focus{text-decoration:underline}.grants-profile--menuitem--initials-colorscheme-2{background-color:var(--color-bus);color:var(--color-white)}.grants-profile--menuitem--initials-colorscheme-1{background-color:var(--color-engel);color:var(--color-black)}.grants-profile--menuitem--initials-colorscheme-0{background-color:var(--color-tram);color:var(--color-white)}.sidebar-important-links{margin-top:var(--spacing-2-xl)}.sidebar-important-links .sidebar-text .sidebar-text__text-content>p{padding:var(--spacing-s) var(--spacing-m)}.block--service-page-banner{background-color:var(--color-engel);margin-top:var(--spacing-layout-s);padding:var(--spacing-layout-s)}.block--service-page-banner h2{margin-top:0}.block--service-page-banner .hds-icon{margin-bottom:var(--spacing-layout-s)}.hds-button.service-page-sidebar-link{background-color:var(--hdbt-color-palette--secondary);padding:var(--spacing-xs)}.hds-button.service-page-sidebar-link:hover{color:var(--color-black)}.terms_block{padding-bottom:var(--spacing-4-xl)}#block-servicepageauthblock h2,#block-servicepageanonblock h2{--line-height: 1.3;font-size:1.25rem;font-weight:500;line-height:var(--line-height)}@media(min-width: 992px){#block-servicepageauthblock h2,#block-servicepageanonblock h2{--line-height: 1.1666666667;font-size:1.5rem;font-weight:500}}#block-servicepageauthblock .hds-button,#block-servicepageanonblock .hds-button{margin-top:var(--spacing-m)}.grants-service-page-block{background-color:var(--color-alert-light);margin-top:var(--spacing-m);padding:var(--spacing-m)}.grants-service-page-block h3{font-size:var(--fontsize-heading-s);margin-top:0}.grants-service-page-block .hel-icon{vertical-align:text-bottom}.grants-service-page-block--auth{background-color:var(--color-info-light)}.hel-icon.hel-icon--swap-user{-webkit-mask-image:url('data:image/svg+xml, ');mask-image:url('data:image/svg+xml, ')}.nav-toggle-dropdown--profile .profile__information{background-color:var(--color-silver-light)}.nav-toggle-dropdown--profile .profile__full-name{font-weight:bold}.nav-toggle-dropdown--profile .grants-profile--menuitem--mandate,.nav-toggle-dropdown--profile .grants-profile--menuitem--switch-role{--line-height: 1.5555555556;font-size:1.125rem;font-weight:400;line-height:var(--line-height);border-top:1px solid #ccc;border-bottom:1px solid #ccc;display:block;font-weight:normal;padding:16px;text-decoration:none;width:100%}@media(min-width: 992px){.nav-toggle-dropdown--profile .grants-profile--menuitem--mandate,.nav-toggle-dropdown--profile .grants-profile--menuitem--switch-role{border-bottom:none}}.nav-toggle-dropdown--profile .grants-profile--menuitem--mandate:hover,.nav-toggle-dropdown--profile .grants-profile--menuitem--switch-role:hover{text-decoration:underline}.nav-toggle-dropdown--profile .grants-profile--menuitem--mandate:focus,.nav-toggle-dropdown--profile .grants-profile--menuitem--switch-role:focus{outline:3px solid #000;outline-offset:-3px}.application-timeout-message{display:none;padding-left:16px;padding-left:var(--spacing-s, 16px);position:fixed;right:0;top:50%;z-index:100}.application-timeout-message.slide-in{animation:slide-in-right .5s forwards ease;display:block}.application-timeout-message .close-application-timeout-message{cursor:pointer;font-size:1.25rem;position:absolute;right:1.25rem}@keyframes slide-in-right{from{right:-500px}to{right:1.25rem}}.ui-widget-overlay{z-index:99}.ui-dialog .ui-button:hover{border-width:2px}.ui-dialog .ui-dialog-titlebar-close{top:var(--spacing-s);z-index:1001}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:left}.ui-dialog .ui-dialog-buttonpane{padding:var(--spacing-2-xs) var(--spacing-m)}.ui-dialog .ui-dialog-buttonpane button{margin:0 var(--spacing-xs) 0 0}.ui-dialog .ui-dialog-content{padding:0 1em 1em;position:static;position:initial}.ui-dialog div.ui-dialog-titlebar{padding:0}.ui-dialog-titlebar{background:rgba(0,0,0,0);border:0}.ui-dialog-titlebar-close{background:none;border:none}.ui-dialog-titlebar .ui-dialog-title{display:block;font-size:var(--fontsize-heading-s);overflow:auto;padding:var(--spacing-layout-2-xs) var(--spacing-layout-2-xs) var(--spacing-layout-2-xs) var(--spacing-2-xl);position:relative;white-space:normal}.ui-dialog-title .hel-icon{left:var(--spacing-m);margin-right:var(--spacing-2-xs);position:absolute;top:var(--spacing-s)}.ui-widget-content{border:0 rgba(0,0,0,0) solid}.ui-widget-content h3{margin-top:0}div.ui-widget.ui-widget-content{border-top:var(--spacing-2-xs) solid var(--color-black);max-width:100vw;min-width:300px;padding-top:0}.ui-widget-content span.ui-icon{margin-left:-8px;margin-top:-8px;-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg role='img' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E %3Cg fill='none' fill-rule='evenodd'%3E %3Crect width='24' height='24'/%3E %3Cpolygon fill='currentColor' points='18 7.5 13.5 12 18 16.5 16.5 18 12 13.5 7.5 18 6 16.5 10.5 12 6 7.5 7.5 6 12 10.5 16.5 6'/%3E %3C/g%3E %3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg role='img' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E %3Cg fill='none' fill-rule='evenodd'%3E %3Crect width='24' height='24'/%3E %3Cpolygon fill='currentColor' points='18 7.5 13.5 12 18 16.5 16.5 18 12 13.5 7.5 18 6 16.5 10.5 12 6 7.5 7.5 6 12 10.5 16.5 6'/%3E %3C/g%3E %3C/svg%3E");transform:scale(1.5)}.submission-for-copying{margin-bottom:1em;margin-top:1em}.view_application_search_search_api .main-content{margin-top:0}.view_application_search_search_api .search-result-amount--wrapper{align-items:center;display:flex}.view_application_search_search_api .search-result-amount--wrapper p{margin-top:0}.view_application_search_search_api select.search-result-amount{border:1px solid var(--color-black-50);margin-left:var(--spacing-l);margin-right:var(--spacing-2-xs)}.view_application_search_search_api .search-filter-button{background-color:var(--color-black);border-radius:180px;border:0;color:var(--color-white);display:inline-block;margin:0 var(--spacing-2-xs) var(--spacing-2-xs) 0;padding:var(--spacing-2-xs) var(--spacing-xs)}.view_application_search_search_api .search-filter-button:focus{--focus-outline-color: #000000;box-shadow:none;outline:3px solid var(--focus-outline-color);outline:var(--outline-width, 3px) solid var(--focus-outline-color);outline-offset:2px;outline-offset:var(--outline-gutter, 2px)}.view_application_search_search_api .search-filter-button span{vertical-align:middle}.view_application_search_search_api .search-filter-button span.hel-icon:hover{cursor:pointer}.view-application-search-search-api .main-content{margin-top:var(--spacing-layout-s)}.view-application-search-search-api .main-content .view-header{align-items:center;display:flex;margin-bottom:var(--spacing-layout-s)}.application_search--link{display:block;height:100%;padding-bottom:var(--spacing-m);position:relative;text-decoration:none}.application_search--link::after{--icon-size: 1.5rem;background-color:#000;background-size:contain;content:"";display:inline-block;height:calc(var(--line-height) * 1em);height:var(--icon-size, calc(var(--line-height) * 1em));-webkit-mask-image:var(--hel-icon--arrow-right);mask-image:var(--hel-icon--arrow-right);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);-webkit-mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));vertical-align:bottom;width:calc(var(--line-height) * 1em);width:var(--icon-size, calc(var(--line-height) * 1em));transition:transform .2s linear;bottom:var(--spacing-s);content:"";display:block;flex-shrink:0;left:var(--spacing-m);margin-left:-4px;margin-top:8px;position:absolute}@media(prefers-reduced-motion){.application_search--link::after{transition:none}}@media(min-width: 576px){.application_search--link::after{--icon-size: 3rem;margin-left:-8px;margin-top:16px}}.application_search--link:focus h3,.application_search--link:hover h3{text-decoration:none}.application_search--link:focus::after,.application_search--link:hover::after{transform:translateX(8px)}@media(prefers-reduced-motion){.application_search--link:focus::after,.application_search--link:hover::after{transform:none}}.application_search--filter-wrapper{background:var(--color-black-5)}.application_search--filter-wrapper h2{font-size:var(--fontsize-heading-m);margin-bottom:var(--spacing-layout-s);margin-top:var(--spacing-layout-s)}.application_search--filter-wrapper form{align-items:center;border-bottom:2px solid var(--color-black-20);display:flex;flex-flow:row wrap;gap:var(--spacing-s);justify-content:space-between;margin-bottom:var(--spacing-layout-s);padding-bottom:var(--spacing-layout-s)}.application_search--filter-wrapper form .form-item{margin-bottom:0;min-width:-moz-fit-content;min-width:fit-content;width:calc((100% - var(--spacing-s) - var(--spacing-s))/3)}.application_search--filter-wrapper form .form-item label{color:var(--label-color-default);font-size:var(--fontsize-body-m);font-weight:500;margin-bottom:var(--spacing-3-xs)}.application_search--filter-wrapper form .form-item .grant-applications--select-wrapper{min-width:100%;width:100%}.application_search--filter-wrapper form .hds-text-input:first-child{max-width:none;width:100%}.application_search--filter-wrapper form .hds-text-input:first-child input{width:100%}.application_search--filter-wrapper form .form-actions{align-items:center;display:flex;order:6;padding-top:var(--spacing-m);width:100%}@media(min-width: 768px){.application_search--filter-wrapper form .form-actions{width:17%}}.application_search--filter-wrapper form .form-actions input{min-width:250px;width:100%}.application_search--filter-wrapper form .form-item-items-per-page{display:none}.application_search--filter-wrapper form .form-item-kohderyhma{order:1}.application_search--filter-wrapper form .form-item-avustuslaji{order:2}.application_search--filter-wrapper form .form-item-hakija{order:3}.application_search--filter-wrapper form .form-item-search{max-width:100%;order:4;width:50%}.application_search--filter-wrapper form .form-item-application-open{page-break-before:left;-moz-column-break-before:left;break-before:left;display:block;margin-top:var(--spacing-m);order:5;width:30%}.application_search--filter-wrapper form [data-drupal-selector=edit-reset]{background-color:rgba(0,0,0,0);border:0;color:var(--color-black)}.application_search--filter-wrapper .hds-koros svg pattern{color:var(--color-black-5)}.application_search--filter-wrapper .hero .hero__container{padding-bottom:var(--spacing-m)}.application_search--filters{padding-bottom:var(--spacing-layout-m);padding-top:0}.application_search--rows{display:flex;flex-direction:column;flex-wrap:wrap;justify-content:flex-start;width:100%}@media(min-width: 576px){.application_search--rows{flex-direction:row;margin-left:calc(-1*var(--spacing-m));width:calc(100% + var(--spacing-m))}}.application_search--row{box-shadow:1px 2px 4px 0 rgba(0,0,0,.5);margin-bottom:var(--spacing-l);position:relative;width:100%}@media(min-width: 576px){.application_search--row{margin-left:var(--spacing-m);width:calc(50% - var(--spacing-m))}}@media(min-width: 992px){.application_search--row{width:calc(33.3333333333% - var(--spacing-m))}}.application_search--row h3{font-size:var(--fontsize-heading-m);margin-top:var(--spacing-xs)}.application_search--row .views-field-search-api-excerpt{height:auto;overflow:auto;word-break:normal}.application_search--row .views-field{padding:var(--spacing-xs) var(--spacing-m)}.application_search--row .views-field-field-target-group{padding:0}.application_search--row .views-field-field-avustuslaji{padding:var(--spacing-xs) var(--spacing-m) var(--spacing-layout-m) var(--spacing-m)}.application_search--row .views-field-field-avustuslaji .tag_avustuslaji{background:var(--color-black);border-radius:var(--spacing-m);color:var(--color-white);display:inline-block;margin-bottom:var(--spacing-2-xs);padding:var(--spacing-3-xs) var(--spacing-xs)}.application_search--row .views-field-field-application-period .field-content{align-items:center;display:flex;gap:var(--spacing-s);position:relative}.application_search--row .views-field-field-application-period .field-content span{display:block}.application_search--row .tag_target_group{background:var(--color-black-20);color:var(--color-black);font-size:var(--fontsize-body-s);font-weight:bold;padding:var(--spacing-m);text-align:center;text-transform:uppercase;width:100%}.application_search--row .tag_target_group_12{background:var(--color-brick-medium-light)}.application_search--row .tag_target_group_20{background:var(--color-copper)}.application_search--row .tag_target_group_21{background:var(--color-metro-medium-light)}.application_search--row .tag_target_group_22{background:var(--color-suomenlinna-medium-light)}.application_search--row .tag_target_group_23{background:var(--color-engel)}.application_search--row .tag_target_group_24{background:var(--color-bus-medium-light)}.application_search--row .tag_target_group_25{background:var(--color-coat-of-arms-medium-light)}.application_search--row .tag_target_group_26{background:var(--color-gold-medium-light)}.application_search--row .tag_target_group_27{background:var(--color-tram-medium-light)}.application_search--row .tag_target_group_28{background:var(--color-summer-light)}.application_search--row .tag_target_group_29{background:var(--color-fog)}.application_search--row .tag_target_group_30{background:var(--color-copper-light)}.application_search--row .tag_target_group_31{background:var(--color-gold)}.view-ukk .view-filters{display:none}.view-ukk .ukk_categories{display:block;margin:var(--spacing-xl) 0;padding:0}.view-ukk .ukk_categories li{display:inline-block;list-style:none;margin:var(--spacing-m) var(--spacing-s) 0 0;padding:0}.view-ukk .hero .hero__text-content{max-width:100%}.view-ukk #edit-field-category-target-id{display:flex}.view-ukk #edit-field-category-target-id .hds-radio-button:first-of-type{margin-top:var(--spacing-2-xs)}.view-ukk #edit-field-category-target-id .hds-radio-button .hds-radio-button__input:checked+.hds-radio-button__label{background:var(--color-black);border-radius:var(--spacing-m);color:var(--color-white);padding:var(--spacing-2-xs) var(--spacing-s)}.view-ukk #edit-field-category-target-id .hds-radio-button__label{padding:var(--spacing-2-xs) var(--spacing-s)}.view-ukk #edit-field-category-target-id .hds-radio-button__label::before,.view-ukk #edit-field-category-target-id .hds-radio-button__label::after{display:none}.view-ukk .views-exposed-form fieldset{margin-bottom:0}.view-ukk .views-exposed-form .form-submit{margin-bottom:var(--spacing-l)}.view-ukk .category{background:var(--color-black);border-radius:var(--spacing-m);color:var(--color-white);display:inline-block;padding:var(--spacing-2-xs) var(--spacing-s);text-decoration:none}.view-ukk .category-unselected{background:var(--color-black-20);color:var(--color-black)}.page--select-applicant-role{background-color:var(--color-black-5)}.page--select-applicant-role body{background-color:var(--color-black-5)}.page--select-applicant-role .layout-main-wrapper{background-color:var(--color-black-5)}.page--select-applicant-role .main-content{margin-top:var(--spacing-l)}.page--select-applicant-role h1{margin-top:var(--spacing-l)}.page--select-applicant-role p{margin-bottom:var(--spacing-m)}.node--type-service .errand-service__channels .service-channel__links a[href^="https://avustukset.hel.fi"]{display:none}.node--type-service .service-channel__info p:first-of-type{margin-top:0}.node--type-service .service-channel--mail{display:none}#block-servicepageauthblock-2,#block-servicepageanonblock-2,#block-grantspreviewlink-2{display:none}@media(max-width: 767.9px){#block-servicepageauthblock-2,#block-servicepageanonblock-2,#block-grantspreviewlink-2{display:block;margin:var(--spacing-s)}}@media(max-width: 991.9px){#block-servicepageauthblock-2,#block-servicepageanonblock-2,#block-grantspreviewlink-2{display:block;margin:var(--spacing-l)}}#block-servicepageauthblock-2>.grants-service-page-block>*,#block-servicepageanonblock-2>.grants-service-page-block>*,#block-grantspreviewlink-2>.grants-service-page-block>*{margin:var(--spacing-2-xs) 0 var(--spacing-2-xs) var(--spacing-2-xs)}@media(max-width: 991.9px){#block-servicepageauthblock-2 .node--type-service a.hds-button[href*=uusi-hakemus],#block-servicepageanonblock-2 .node--type-service a.hds-button[href*=uusi-hakemus],#block-grantspreviewlink-2 .node--type-service a.hds-button[href*=uusi-hakemus]{display:none}}.user-login__text-container{background:var(--color-white);max-width:500px;padding:var(--spacing-m)}.user-login__text-container p:first-of-type{margin-top:0}.tabs{--tablist-border-color: var(--color-black-20);--tablist-border-size: 1px;--tab-color: var(--color-black);--tab-font-size: var(--fontsize-body-m);--tab-height: 48px;--tab-min-width: 148px;--tab-spacing: var(--spacing-s);--tab-active-border-size: 5px;--tab-active-border-color: var(--color-black);--tab-focus-outline-size: 2px;--tab-focus-outline-color: var(--color-coat-of-arms);display:flex;flex-flow:row wrap}.tabs--tablist{box-sizing:border-box;flex-grow:1;margin-bottom:-1px;overflow-x:hidden;position:relative;width:100%}.tabs--content-wrapper{width:100%}.tabs--content-wrapper .container{padding-top:1px}.tabs [role=tablist]{box-sizing:border-box;list-style:none;margin:0;padding:var(--tab-focus-outline-size) 0;white-space:nowrap}.tabs [role=tab]{background:rgba(0,0,0,0);border:0;cursor:pointer;display:inline-block;margin:0;outline:none;padding:0}.tabs [role=tab] span{align-items:center;box-sizing:border-box;color:var(--tab-color);display:flex;font-size:var(--tab-font-size);height:var(--tab-height);justify-content:center;margin:0;min-width:var(--tab-min-width);padding:0 var(--tab-spacing);pointer-events:none;position:relative}.tabs [role=tab] span::before{background:var(--tablist-border-color);bottom:0;content:"";height:var(--tablist-border-size);position:absolute;width:100%;z-index:100}.tabs [role=tab] span:hover::before,.tabs [role=tab] span:focus::before,.tabs [role=tab][aria-selected=true] span::before{background-color:var(--tab-active-border-color);bottom:0;content:"";height:var(--tab-active-border-size);position:absolute;width:100%;z-index:100}.tabs [role=tabpanel].is-hidden{display:none}.node--form-page .list-of-links{margin-left:0;margin-top:0;width:100%}@media(min-width: 768px){.node--form-page .list-of-links{margin-top:0}}.node--form-page .list-of-links>.container{padding-top:0}.node--form-page .list-of-links .list-of-links__title{border-top:2px solid var(--color-black-20);margin:0 0 var(--spacing-layout-xl)}@media(min-width: 576px){.node--form-page .list-of-links .list-of-links__container{width:calc(100% - var(--spacing-layout-xl))}}@media(min-width: 768px){.node--form-page .list-of-links .list-of-links__container{width:100%}}.node--form-page .list-of-links .list-of-links__content{height:auto;margin-top:0}@media(min-width: 768px){.node--form-page .list-of-links .list-of-links__content{display:grid;grid-template-columns:auto auto auto;margin:0 var(--spacing-m) 0 0}}.node--form-page .list-of-links .list-of-links__item{align-self:stretch;border-left:4px solid var(--color-copper);margin-right:-4px;padding-left:var(--spacing-m);padding-right:var(--spacing-m)}.list-of-links--without-image .list-of-links__item .list-of-links__item__desc{color:var(--color-black-90);font-size:var(--fontsize-body-m)}.list-of-links--without-image .list-of-links__item .list-of-links__item__title{font-size:var(--fontsize-heading-m)}.js-form-type-webform-custom-composite{--border-width: 2px;--outline-width: 3px;--input-height: 56px;--textarea-height: 149px;--icon-size: var(--spacing-m);--helper-color-default: var(--color-black-60);--helper-color-invalid: var(--color-error);--icon-color-invalid: var(--color-error);--input-background-default: var(--color-white);--input-background-disabled: var(--color-black-10);--input-border-color-default: var(--color-black-50);--input-border-color-hover: var(--color-black-90);--input-border-color-focus: var(--color-black-90);--input-border-color-invalid: var(--color-error);--input-border-color-disabled: var(--color-black-10);--input-color-default: var(--color-black-90);--input-color-disabled: var(--color-black-40);--label-color-default: var(--color-black-90);--label-color-invalid: var(--color-black-90);--placeholder-color: var(--color-black-60);--focus-outline-color: var(--color-coat-of-arms)}.js-form-type-webform-custom-composite a.tabledrag-handle .handle{height:24px;width:24px}.js-form-type-webform-custom-composite input.form-number{background-color:var(--input-background-default);border:var(--border-width) solid var(--input-border-color-default);box-sizing:border-box;color:var(--input-color-default);font-size:1.125em;height:var(--input-height);line-height:normal;padding:0 var(--spacing-s);width:100%}.js-form-type-webform-custom-composite table{border-collapse:collapse;border-spacing:0;margin-bottom:var(--spacing-m)}.js-form-type-webform-custom-composite table td{border-bottom:2px var(--color-black-20) solid;border-top:2px var(--color-black-20) solid;padding-left:var(--spacing-m);padding-top:var(--spacing-m)}@media(max-width: 768px){.js-form-type-webform-custom-composite table td{border:2px var(--color-black-20) solid}}.js-form-type-webform-custom-composite table td.webform-multiple-table--operations{border-bottom:2px var(--color-black-20) solid;border-top:2px var(--color-black-20) solid;padding-left:var(--spacing-m);padding-top:var(--spacing-m)}@media(max-width: 768px){.js-form-type-webform-custom-composite table td.webform-multiple-table--operations{background:var(--color-white);border:2px var(--color-black-20) solid;padding:10px 5px 5px}}.js-form-type-webform-custom-composite table td:first-child{border-left:2px var(--color-black-20) solid}.js-form-type-webform-custom-composite table td:last-child{border-right:2px var(--color-black-20) solid;padding:var(--spacing-s)}@media(min-width: 768px){.js-form-type-webform-custom-composite table td:last-child{min-width:400px;padding:var(--spacing-s) var(--spacing-m)}}div.ui-widget.ui-datepicker{padding:var(--spacing-2-xs)}div.ui-widget.ui-datepicker .ui-datepicker-header span.ui-icon{margin-left:-8px;margin-top:-8px;-webkit-mask-image:none;mask-image:none;transform:none}div.ui-widget.ui-datepicker .ui-datepicker-calendar{border:0;display:table;margin:0;max-width:100%}div.ui-widget.ui-datepicker .ui-datepicker-calendar th,div.ui-widget.ui-datepicker .ui-datepicker-calendar td{min-width:auto}details.accordion{--background-color: var(--color-white);--border-color: var(--color-black-60);--padding-horizontal: var(--spacing-m);--padding-vertical: var(--spacing-m);--header-font-color: var(--color-black-90);--header-font-size: var(--fontsize-heading-m);--header-line-height: var(--lineheight-m);--button-size: 28px;--header-focus-outline-color: var(--color-coat-of-arms);--content-font-color: var(--color-black-90);--content-font-size: var(--fontsize-body-m);--content-line-height: var(--lineheight-l);border-bottom:1px solid var(--border-color)}details.accordion .accordion_content{padding-bottom:var(--padding-vertical)}details.accordion[open] .accordion_heading_container span.hel-icon{transform:rotate(180deg)}.accordion_header{align-items:center;color:var(--header-font-color);display:flex;font-size:var(--header-font-size);font-weight:700;justify-content:space-between;line-height:var(--header-line-height);list-style:none;padding-bottom:var(--padding-vertical);padding-top:var(--padding-vertical);position:relative}.accordion_heading_container{align-items:center;box-sizing:border-box;cursor:pointer;display:grid;grid-template-columns:auto calc(var(--button-size));width:100%}.accordion_heading_container span.hel-icon{height:var(--button-size) !important;width:var(--button-size) !important}.accordion_heading_container span.hel-icon{border:2px solid rgba(0,0,0,0);box-sizing:border-box;margin:auto}.webform-element-description{--helper-color-default: var(--color-black-60);color:var(--helper-color-default);display:block;font-size:var(--fontsize-body-m);line-height:var(--lineheight-l);margin-top:var(--spacing-s)}.webform-element-help{background:var(--color-white);border:2px solid rgba(0,0,0,0);color:var(--hdbt-color-black);height:var(--spacing-layout-xs);margin-right:4px;padding:0;position:absolute;right:0;top:-3px;width:var(--spacing-layout-xs);z-index:10}div[data-tippy-root]{width:350px}.tippy-box{background-color:var(--color-black-5);border-left:var(--spacing-xs) var(--color-coat-of-arms) solid;border-radius:0;color:var(--hdbt-color-black);padding:var(--spacing-s)}.tippy-box .webform-element-help--content{white-space:normal}.tippy-box .webform-element-help--content a:link,.tippy-box .webform-element-help--content a:visited,.tippy-box .webform-element-help--content a:active,.tippy-box .webform-element-help--content a:hover{color:var(--hdbt-color-black)}.tippy-arrow{color:var(--color-black-5)}.webform-element-help--wrapper-short{max-width:-moz-fit-content;max-width:fit-content}.webform-element-help-container--title{--border-width: 2px;--outline-width: 3px;--input-height: 56px;--textarea-height: 149px;--icon-size: var(--spacing-m)}fieldset.grants-fieldset{padding:var(--spacing-s)}@media(min-width: 768px){fieldset.grants-fieldset{min-width:400px;padding:var(--spacing-s) var(--spacing-m)}}fieldset.grants-fieldset .fieldset-wrapper{align-items:flex-end;display:flex;flex-wrap:wrap;gap:0 var(--spacing-layout-2-xs)}fieldset.grants-fieldset .fieldset-wrapper .form-item--error-message{grid-column:1}fieldset.grants-fieldset-short{max-width:var(--webform-element-width--input-large)}fieldset.grants-fieldset-medium{max-width:var(--webform-element-width--fieldset)}fieldset.grants-fieldset-medium .fieldset-wrapper{justify-content:center}fieldset.premises-composite--wrapper.fieldgroup,fieldset.rented-premise-composite--wrapper.fieldgroup,.community_officials_wrapper fieldset.fieldgroup,fieldset.grants-budget-other-cost--wrapper.fieldgroup,fieldset.grants-budget-other-income--wrapper.fieldgroup,fieldset.place-of-operation-composite--wrapper.fieldgroup,fieldset.rent-income-composite--wrapper.fieldgroup,fieldset.rent-cost-composite--wrapper.fieldgroup,fieldset.club-section-composite--wrapper.fieldgroup,fieldset.members-composite--wrapper.fieldgroup,fieldset.orienteering-map-composite--wrapper,.form-item-muu-liite fieldset.grants-attachments--wrapper.fieldgroup{border-width:2px;margin-top:var(--spacing-layout-2-xs);max-width:100%;padding:var(--spacing-s);width:100%}@media(min-width: 768px){fieldset.premises-composite--wrapper.fieldgroup,fieldset.rented-premise-composite--wrapper.fieldgroup,.community_officials_wrapper fieldset.fieldgroup,fieldset.grants-budget-other-cost--wrapper.fieldgroup,fieldset.grants-budget-other-income--wrapper.fieldgroup,fieldset.place-of-operation-composite--wrapper.fieldgroup,fieldset.rent-income-composite--wrapper.fieldgroup,fieldset.rent-cost-composite--wrapper.fieldgroup,fieldset.club-section-composite--wrapper.fieldgroup,fieldset.members-composite--wrapper.fieldgroup,fieldset.orienteering-map-composite--wrapper,.form-item-muu-liite fieldset.grants-attachments--wrapper.fieldgroup{min-width:400px;padding:var(--spacing-s) var(--spacing-m)}}fieldset.premises-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.rented-premise-composite--wrapper.fieldgroup legend>span.visually-hidden,.community_officials_wrapper fieldset.fieldgroup legend>span.visually-hidden,fieldset.grants-budget-other-cost--wrapper.fieldgroup legend>span.visually-hidden,fieldset.grants-budget-other-income--wrapper.fieldgroup legend>span.visually-hidden,fieldset.place-of-operation-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.rent-income-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.rent-cost-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.club-section-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.members-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.orienteering-map-composite--wrapper legend>span.visually-hidden,.form-item-muu-liite fieldset.grants-attachments--wrapper.fieldgroup legend>span.visually-hidden{background:#fff;-webkit-clip-path:initial;clip-path:initial;clip:auto;clip:initial;height:auto;margin-left:calc(var(--spacing-2-xs)*-1);left:auto;overflow:visible;padding:0 var(--spacing-2-xs);top:-12px;width:-moz-max-content;width:max-content}fieldset.premises-composite--wrapper.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)],fieldset.rented-premise-composite--wrapper.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)],.community_officials_wrapper fieldset.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)],fieldset.grants-budget-other-cost--wrapper.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)],fieldset.grants-budget-other-income--wrapper.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)],fieldset.place-of-operation-composite--wrapper.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)],fieldset.rent-income-composite--wrapper.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)],fieldset.rent-cost-composite--wrapper.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)],fieldset.club-section-composite--wrapper.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)],fieldset.members-composite--wrapper.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)],fieldset.orienteering-map-composite--wrapper legend>span.visually-hidden[\:has\(button.webform-element-help\)],.form-item-muu-liite fieldset.grants-attachments--wrapper.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)]{padding-right:var(--spacing-xl)}fieldset.premises-composite--wrapper.fieldgroup legend>span.visually-hidden:has(button.webform-element-help),fieldset.rented-premise-composite--wrapper.fieldgroup legend>span.visually-hidden:has(button.webform-element-help),.community_officials_wrapper fieldset.fieldgroup legend>span.visually-hidden:has(button.webform-element-help),fieldset.grants-budget-other-cost--wrapper.fieldgroup legend>span.visually-hidden:has(button.webform-element-help),fieldset.grants-budget-other-income--wrapper.fieldgroup legend>span.visually-hidden:has(button.webform-element-help),fieldset.place-of-operation-composite--wrapper.fieldgroup legend>span.visually-hidden:has(button.webform-element-help),fieldset.rent-income-composite--wrapper.fieldgroup legend>span.visually-hidden:has(button.webform-element-help),fieldset.rent-cost-composite--wrapper.fieldgroup legend>span.visually-hidden:has(button.webform-element-help),fieldset.club-section-composite--wrapper.fieldgroup legend>span.visually-hidden:has(button.webform-element-help),fieldset.members-composite--wrapper.fieldgroup legend>span.visually-hidden:has(button.webform-element-help),fieldset.orienteering-map-composite--wrapper legend>span.visually-hidden:has(button.webform-element-help),.form-item-muu-liite fieldset.grants-attachments--wrapper.fieldgroup legend>span.visually-hidden:has(button.webform-element-help){padding-right:var(--spacing-xl)}@media(min-width: 768px){fieldset.premises-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.rented-premise-composite--wrapper.fieldgroup legend>span.visually-hidden,.community_officials_wrapper fieldset.fieldgroup legend>span.visually-hidden,fieldset.grants-budget-other-cost--wrapper.fieldgroup legend>span.visually-hidden,fieldset.grants-budget-other-income--wrapper.fieldgroup legend>span.visually-hidden,fieldset.place-of-operation-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.rent-income-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.rent-cost-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.club-section-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.members-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.orienteering-map-composite--wrapper legend>span.visually-hidden,.form-item-muu-liite fieldset.grants-attachments--wrapper.fieldgroup legend>span.visually-hidden{left:auto}}.form-item-muu-liite fieldset.grants-attachments--wrapper{margin-bottom:0}fieldset.webform-composite-hidden-title .fieldset-wrapper>.form-item:last-child{margin-bottom:var(--spacing-layout-xs)}.js-form-type-webform-table table{width:100%}.js-form-type-webform-table th{text-align:left}.js-form-type-webform-table td{vertical-align:middle}.js-form-type-webform-table td>div{height:auto;margin-bottom:0}.js-form-type-webform-table td>div label{margin:-1px}.js-form-type-webform-table .hds-text-input label{border:0;clip:rect(0, 0, 0, 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.form-item{margin-bottom:var(--spacing-layout-xs);position:relative}.form-item input[type=date],.form-item input[type=time]{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--input-background-default);border:var(--border-width) solid var(--input-border-color-default);box-sizing:border-box;color:var(--input-color-default);font-size:1.125em;height:var(--input-height);line-height:normal;padding:0 var(--spacing-s);width:100%;will-change:transform,box-shadow}.webform-section{padding-bottom:var(--spacing-layout-2-xs)}.webform-section table:first-of-type{margin-top:0}.form-type-webform-multiple .webform-multiple-table table{max-width:100%;width:100%}@media(min-width: 768px){.form-type-webform-multiple .webform-multiple-table table{width:auto}}.hds-text-input{max-width:-moz-fit-content;max-width:fit-content;width:100%}.webform-section-grid-wrapper{display:grid;grid-template-columns:1fr}@media(min-width: 768px){.webform-section-grid-wrapper{grid-row-gap:var(--spacing-xl);grid-template-columns:1fr 2fr}}.webform-section-grid-wrapper>dt.webform-section-title{color:var(--hdbt-color-black);display:block;flex-shrink:0;font-size:var(--fontsize-heading-s);font-weight:500;-webkit-hyphens:none;hyphens:none;line-height:1;margin-bottom:var(--spacing-3-xs);margin-top:0;padding-right:var(--spacing-2-xl);width:100%}.webform-section-grid-wrapper .webform-section-wrapper{margin-bottom:var(--spacing-layout-xs);padding-left:var(--spacing-2-xl)}@media(min-width: 768px){.webform-section-grid-wrapper .webform-section-wrapper{margin-bottom:0;padding-left:0}}fieldset input[type=button]{margin-top:var(--spacing-m)}.webform-section-wrapper>.description{margin-bottom:var(--spacing-layout-xs)}.grants__page-header{margin-bottom:var(--spacing-layout-l);font-size:2rem}@media(min-width: 768px){.grants__page-header{font-size:3rem}}.webform-section-flex-wrapper{display:flex;flex-flow:row wrap;width:100%;justify-content:left}@media(min-width: 768px){.webform-section-flex-wrapper{flex-flow:row nowrap}.webform-section-flex-wrapper h3+*>*:first-child>label:first-of-type,.webform-section-flex-wrapper h3+*>*:first-child>*:first-child>label:first-of-type{margin-top:var(--spacing-2-xs);padding-top:0}.webform-section-flex-wrapper h3+*>*:first-child>p{line-height:normal;line-height:initial;margin-top:var(--spacing-2-xs)}.webform-section-flex-wrapper h3+*>*:first-child>h4{line-height:normal;line-height:initial;margin-top:var(--spacing-m)}}.webform-section-flex-wrapper .webform-element-help-container--title{position:relative}.webform-section-flex-wrapper>h2.webform-section-title,.webform-section-flex-wrapper>h3.webform-section-title,.webform-section-flex-wrapper>h4.webform-section-title,.webform-section-flex-wrapper>dt.webform-section-title{color:var(--hdbt-color-black);display:block;flex-shrink:0;font-size:24px;font-weight:500;-webkit-hyphens:manual;hyphens:manual;margin-bottom:var(--spacing-3-xs);margin-top:0;padding-right:var(--spacing-2-xl);width:100%}@media(min-width: 768px){.webform-section-flex-wrapper>h2.webform-section-title,.webform-section-flex-wrapper>h3.webform-section-title,.webform-section-flex-wrapper>h4.webform-section-title,.webform-section-flex-wrapper>dt.webform-section-title{font-size:32px;max-width:350px;width:30%}}.webform-section-flex-wrapper h4{font-size:var(--fontsize-heading-m);line-height:38px}.webform-section-flex-wrapper>.webform-section-wrapper{--line-height: 1.5;font-size:var(--fontsize-body-m);width:100%}@media(min-width: 768px){.webform-section-flex-wrapper>.webform-section-wrapper{padding-left:var(--spacing-2-xl)}}.webform-section-flex-wrapper .form-required::after{content:"*";display:inline}.webform-section-flex-wrapper legend,.webform-section-flex-wrapper label{display:block;font-size:var(--fontsize-body-m);font-weight:500;margin-bottom:var(--spacing-2-xs);max-width:-moz-fit-content;max-width:fit-content;position:relative}.webform-section-flex-wrapper legend{padding:0 var(--spacing-2-xs);margin-left:calc(var(--spacing-2-xs)*-1);left:auto}.webform-section-flex-wrapper legend[\:has\(button.webform-element-help\)],.webform-section-flex-wrapper label[\:has\(button.webform-element-help\)]{padding-right:var(--spacing-xl)}.webform-section-flex-wrapper legend:has(button.webform-element-help),.webform-section-flex-wrapper label:has(button.webform-element-help){padding-right:var(--spacing-xl)}.webform-section-flex-wrapper fieldset legend>span[\:has\(button.webform-element-help\)]{padding-right:var(--spacing-xl)}.webform-section-flex-wrapper fieldset legend>span:has(button.webform-element-help){padding-right:var(--spacing-xl)}.webform-section-flex-wrapper fieldset legend>span.fieldset-legend[\:has\(button.webform-element-help\)],.webform-section-flex-wrapper fieldset.fieldgroup legend>span[\:has\(button.webform-element-help\)]:not(.visually-hidden.fieldset-legend){padding-right:var(--spacing-l)}.webform-section-flex-wrapper fieldset legend>span.fieldset-legend:has(button.webform-element-help),.webform-section-flex-wrapper fieldset.fieldgroup legend>span:has(button.webform-element-help):not(.visually-hidden.fieldset-legend){padding-right:var(--spacing-l)}.webform-section-flex-wrapper fieldset legend>span.fieldset-legend[\:has\(button.webform-element-help\)],.webform-section-flex-wrapper fieldset.fieldgroup legend span.fieldset-legend:not(.visually-hidden)[\:has\(button.webform-element-help\)]{padding-right:0}.webform-section-flex-wrapper fieldset legend>span.fieldset-legend:has(button.webform-element-help),.webform-section-flex-wrapper fieldset.fieldgroup legend span.fieldset-legend:not(.visually-hidden):has(button.webform-element-help){padding-right:0}.webform-section-flex-wrapper label.hds-radio-button__label{font-weight:normal}.webform-section-flex-wrapper .checkboxes--wrapper label{font-weight:normal}.webform-section-flex-wrapper .js-form-type-textarea .hds-text-input__input-wrapper{display:block}.webform-section-flex-wrapper .has-error,.webform-section-flex-wrapper .grant-applications--select-wrapper[\:has\(.has-error\)]{border-color:var(--color-error)}.webform-section-flex-wrapper .has-error,.webform-section-flex-wrapper .grant-applications--select-wrapper:has(.has-error){border-color:var(--color-error)}form .hds-text-input__input-wrapper,.hds-text-input__input-wrapper{flex-flow:row wrap}form .hds-text-input__input-wrapper .text-count-wrapper,.hds-text-input__input-wrapper .text-count-wrapper{flex-basis:100%}form .hds-text-input__input-wrapper input.webform--small,form .hds-text-input__input-wrapper textarea.webform--small,.hds-text-input__input-wrapper input.webform--small,.hds-text-input__input-wrapper textarea.webform--small{max-width:var(--webform-element-width--input-small);min-width:var(--webform-element-width--input-small);width:100%}form .hds-text-input__input-wrapper input.webform--medium,form .hds-text-input__input-wrapper textarea.webform--medium,.hds-text-input__input-wrapper input.webform--medium,.hds-text-input__input-wrapper textarea.webform--medium{max-width:var(--webform-element-width--input-medium);min-width:var(--webform-element-width--input-small);width:100%}form .hds-text-input__input-wrapper input.webform--large,form .hds-text-input__input-wrapper textarea.webform--large,.hds-text-input__input-wrapper input.webform--large,.hds-text-input__input-wrapper textarea.webform--large{max-width:var(--webform-element-width--input-large);min-width:var(--webform-element-width--input-small);width:100%}.webform--small div.grant-applications--select-wrapper{max-width:var(--webform-element-width--input-small);min-width:var(--webform-element-width--input-small);width:100%}.webform--medium div.grant-applications--select-wrapper{max-width:var(--webform-element-width--input-medium);min-width:var(--webform-element-width--input-small);width:100%}.webform--large div.grant-applications--select-wrapper{max-width:var(--webform-element-width--input-medium);min-width:var(--webform-element-width--input-small);width:100%}form .hds-checkbox{display:block}form .hds-checkbox label.hds-checkbox__label::after{content:""}fieldset.webform-composite-hidden-title{margin-bottom:var(--spacing-layout-2-xs);margin-top:0}.form-item-bank-account-account-number-select,.form-item-community-address-community-address-select{margin-bottom:0}.grants-profile-grants-profile table thead th h4{margin:0}.hakemus-form-page .main-content{margin-top:0}.hakemus-form-page h1{-webkit-hyphens:auto;hyphens:auto;word-break:break-word}.hakemus-form-errors ul li{list-style-type:none}.community_officials_wrapper .webform-readonly{margin:0}.community_officials_wrapper .hds-text-input__input-wrapper{margin:0}.community_officials_wrapper input[readonly=readonly]{height:1.25rem;margin:0;max-width:330px}.form-item--error-message{color:var(--color-error);margin-bottom:var(--spacing-layout-s);margin-top:var(--spacing-layout-2-xs)}fieldset .form-item--error-message,.community_officials_wrapper .form-item--error-message{margin-bottom:0}.form-item--error-message::before{--icon-size: 1.6rem;background-color:#000;background-size:contain;content:"";display:inline-block;height:calc(var(--line-height) * 1em);height:var(--icon-size, calc(var(--line-height) * 1em));-webkit-mask-image:var(--hel-icon--alert-circle-fill);mask-image:var(--hel-icon--alert-circle-fill);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);-webkit-mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));vertical-align:bottom;width:calc(var(--line-height) * 1em);width:var(--icon-size, calc(var(--line-height) * 1em));background-color:var(--color-error);content:" ";display:inline-block}input[type=radio]+label.form-required::after{content:""}.hds-radio-button:last-of-type,.hds-checkbox:last-of-type{margin-bottom:0}.hds-radio-button:last-of-type>label,.hds-checkbox:last-of-type>label{margin-bottom:0}@media(min-width: 992px){.place-of-operation-composite--wrapper.fieldgroup .hds-text-input,.club-section-composite--wrapper.fieldgroup .hds-text-input{max-width:100%}}.place-of-operation-composite--wrapper.fieldgroup .hds-radio-button .hds-radio-button__label,.club-section-composite--wrapper.fieldgroup .hds-radio-button .hds-radio-button__label{line-height:var(--lineheight-m) !important}@media(min-width: 992px){.place-of-operation-group__location,.place-of-operation-group__students,.place-of-operation-group__groups,.place-of-operation-group__personnel,.place-of-operation-group__rent,.place-of-operation-group__time{display:flex;justify-content:space-between}}@media(min-width: 992px){.place-of-operation-group__location--address,.place-of-operation-group__students--address,.place-of-operation-group__groups--address,.place-of-operation-group__personnel--address,.place-of-operation-group__rent--address,.place-of-operation-group__time--address{margin-top:0 !important}.place-of-operation-group__location--address,.place-of-operation-group__students--address,.place-of-operation-group__groups--address,.place-of-operation-group__personnel--address,.place-of-operation-group__rent--address,.place-of-operation-group__time--address{width:65%}}@media(min-width: 992px){.place-of-operation-group__location--post-code,.place-of-operation-group__students--post-code,.place-of-operation-group__groups--post-code,.place-of-operation-group__personnel--post-code,.place-of-operation-group__rent--post-code,.place-of-operation-group__time--post-code{margin-top:0 !important}.place-of-operation-group__location--post-code,.place-of-operation-group__students--post-code,.place-of-operation-group__groups--post-code,.place-of-operation-group__personnel--post-code,.place-of-operation-group__rent--post-code,.place-of-operation-group__time--post-code{width:30%}}@media(min-width: 992px){.place-of-operation-group__location--student-count,.place-of-operation-group__location--special-student-count,.place-of-operation-group__location--group-count,.place-of-operation-group__location--special-group-count,.place-of-operation-group__location--personnel-count,.place-of-operation-group__location--rent-amount,.place-of-operation-group__location--time-start,.place-of-operation-group__location--time-end,.place-of-operation-group__students--student-count,.place-of-operation-group__students--special-student-count,.place-of-operation-group__students--group-count,.place-of-operation-group__students--special-group-count,.place-of-operation-group__students--personnel-count,.place-of-operation-group__students--rent-amount,.place-of-operation-group__students--time-start,.place-of-operation-group__students--time-end,.place-of-operation-group__groups--student-count,.place-of-operation-group__groups--special-student-count,.place-of-operation-group__groups--group-count,.place-of-operation-group__groups--special-group-count,.place-of-operation-group__groups--personnel-count,.place-of-operation-group__groups--rent-amount,.place-of-operation-group__groups--time-start,.place-of-operation-group__groups--time-end,.place-of-operation-group__personnel--student-count,.place-of-operation-group__personnel--special-student-count,.place-of-operation-group__personnel--group-count,.place-of-operation-group__personnel--special-group-count,.place-of-operation-group__personnel--personnel-count,.place-of-operation-group__personnel--rent-amount,.place-of-operation-group__personnel--time-start,.place-of-operation-group__personnel--time-end,.place-of-operation-group__rent--student-count,.place-of-operation-group__rent--special-student-count,.place-of-operation-group__rent--group-count,.place-of-operation-group__rent--special-group-count,.place-of-operation-group__rent--personnel-count,.place-of-operation-group__rent--rent-amount,.place-of-operation-group__rent--time-start,.place-of-operation-group__rent--time-end,.place-of-operation-group__time--student-count,.place-of-operation-group__time--special-student-count,.place-of-operation-group__time--group-count,.place-of-operation-group__time--special-group-count,.place-of-operation-group__time--personnel-count,.place-of-operation-group__time--rent-amount,.place-of-operation-group__time--time-start,.place-of-operation-group__time--time-end{margin-top:0 !important}.place-of-operation-group__location--student-count,.place-of-operation-group__location--special-student-count,.place-of-operation-group__location--group-count,.place-of-operation-group__location--special-group-count,.place-of-operation-group__location--personnel-count,.place-of-operation-group__location--rent-amount,.place-of-operation-group__location--time-start,.place-of-operation-group__location--time-end,.place-of-operation-group__students--student-count,.place-of-operation-group__students--special-student-count,.place-of-operation-group__students--group-count,.place-of-operation-group__students--special-group-count,.place-of-operation-group__students--personnel-count,.place-of-operation-group__students--rent-amount,.place-of-operation-group__students--time-start,.place-of-operation-group__students--time-end,.place-of-operation-group__groups--student-count,.place-of-operation-group__groups--special-student-count,.place-of-operation-group__groups--group-count,.place-of-operation-group__groups--special-group-count,.place-of-operation-group__groups--personnel-count,.place-of-operation-group__groups--rent-amount,.place-of-operation-group__groups--time-start,.place-of-operation-group__groups--time-end,.place-of-operation-group__personnel--student-count,.place-of-operation-group__personnel--special-student-count,.place-of-operation-group__personnel--group-count,.place-of-operation-group__personnel--special-group-count,.place-of-operation-group__personnel--personnel-count,.place-of-operation-group__personnel--rent-amount,.place-of-operation-group__personnel--time-start,.place-of-operation-group__personnel--time-end,.place-of-operation-group__rent--student-count,.place-of-operation-group__rent--special-student-count,.place-of-operation-group__rent--group-count,.place-of-operation-group__rent--special-group-count,.place-of-operation-group__rent--personnel-count,.place-of-operation-group__rent--rent-amount,.place-of-operation-group__rent--time-start,.place-of-operation-group__rent--time-end,.place-of-operation-group__time--student-count,.place-of-operation-group__time--special-student-count,.place-of-operation-group__time--group-count,.place-of-operation-group__time--special-group-count,.place-of-operation-group__time--personnel-count,.place-of-operation-group__time--rent-amount,.place-of-operation-group__time--time-start,.place-of-operation-group__time--time-end{width:47.5%}}@media(min-width: 768px){.club-section__participants{display:flex;gap:var(--spacing-l);justify-content:space-between}}.club-section__participants input.form-text.hds-text-input__input{max-width:100%;width:100%}.club-section__totalhours input.form-text.hds-text-input__input{max-width:100%;width:100%}.hel-icon--size-xs{--icon-size: var(--spacing-layout-2-xs)}.hel-icon--size-s{--icon-size: var(--spacing-layout-xs)}.hel-icon--size-m{--icon-size: var(--spacing-layout-s)}.hel-icon--size-l{--icon-size: var(--spacing-layout-m)}.hel-icon--size-xl{--icon-size: var(--spacing-layout-l)}.hds-text-input__input-wrapper[focus-within][\:has\(input\[readonly\]\)]{margin-right:var(--spacing-2-xs);outline:2px var(--color-black) solid;outline-offset:2px}.hds-text-input__input-wrapper[focus-within]:has(input[readonly]){margin-right:var(--spacing-2-xs);outline:2px var(--color-black) solid;outline-offset:2px}.hds-text-input__input-wrapper[focus-within][\:has\(input\[readonly\]\)]{margin-right:var(--spacing-2-xs);outline:2px var(--color-black) solid;outline-offset:2px}.hds-text-input__input-wrapper:focus-within[\:has\(input\[readonly\]\)]{margin-right:var(--spacing-2-xs);outline:2px var(--color-black) solid;outline-offset:2px}.hds-text-input__input-wrapper:focus-within:has(input[readonly]){margin-right:var(--spacing-2-xs);outline:2px var(--color-black) solid;outline-offset:2px}.hds-text-input__input-wrapper[focus-within][\:has\(input\[readonly\]\)] input[readonly]{width:calc(100% - var(--spacing-2-xs))}.hds-text-input__input-wrapper[focus-within]:has(input[readonly]) input[readonly]{width:calc(100% - var(--spacing-2-xs))}.hds-text-input__input-wrapper[focus-within][\:has\(input\[readonly\]\)] input[readonly]{width:calc(100% - var(--spacing-2-xs))}.hds-text-input__input-wrapper:focus-within[\:has\(input\[readonly\]\)] input[readonly]{width:calc(100% - var(--spacing-2-xs))}.hds-text-input__input-wrapper:focus-within:has(input[readonly]) input[readonly]{width:calc(100% - var(--spacing-2-xs))}.form-item-application-number,.form-item-status,.form-item-applicant-type{display:none}.grants-handler__completion{background:var(--color-bus-light);padding:var(--spacing-layout-l) var(--spacing-layout-2-xl)}.grants-handler__completion h2{margin-top:var(--spacing-l)}.grants-handler__completion h3{font-size:1rem;font-weight:bold;margin-top:var(--spacing-m)}.grants-handler__completion__info-row{display:flex;flex-flow:row wrap;gap:var(--spacing-m);justify-content:flex-start;margin-bottom:var(--spacing-m)}.grants-handler__completion__button-row{display:flex;flex-flow:row wrap;gap:var(--spacing-m);justify-content:flex-start}.grants-handler__completion__longtext{margin:var(--spacing-l) 0}.hds-notification.notification-margin-bottom{margin-bottom:var(--spacing-layout-m)}.hds-notification__label{align-items:center}.hds-checkbox__input label{font-weight:normal}fieldset.grants-attachments--wrapper{margin-bottom:var(--spacing-layout-m)}fieldset.grants-attachments--wrapper legend{margin-bottom:var(--spacing-2-xs)}fieldset.grants-attachments--wrapper .form-item--error-message{width:100%}fieldset.grants-attachments--wrapper .js-form-type-managed-file{margin-bottom:0}.grants-applications-managed_file{position:relative}.grants-applications-managed_file label.hds-button--secondary:not(:disabled):not(.eu-cookie-compliance-default-button):not(.eu-cookie-compliance-save-preferences-button){left:0;position:relative}.grants-applications-managed_file label.hds-button--secondary:not(:disabled):not(.eu-cookie-compliance-default-button):not(.eu-cookie-compliance-save-preferences-button)[\:has\(input\:disabled\)]{background-color:transparent;background-color:var(--background-color-disabled, transparent);border-color:transparent;border-color:var(--border-color-disabled, transparent);color:var(--color-disabled);cursor:not-allowed}.grants-applications-managed_file label.hds-button--secondary:not(:disabled):not(.eu-cookie-compliance-default-button):not(.eu-cookie-compliance-save-preferences-button)[\:has\(input\:disabled\)]{background-color:transparent;background-color:var(--background-color-disabled, transparent);border-color:transparent;border-color:var(--border-color-disabled, transparent);color:var(--color-disabled);cursor:not-allowed}.grants-applications-managed_file label.hds-button--secondary:not(:disabled):not(.eu-cookie-compliance-default-button):not(.eu-cookie-compliance-save-preferences-button):has(input:disabled){background-color:transparent;background-color:var(--background-color-disabled, transparent);border-color:transparent;border-color:var(--border-color-disabled, transparent);color:var(--color-disabled);cursor:not-allowed}.grants-applications-managed_file label.hds-button--secondary:not(:disabled):not(.eu-cookie-compliance-default-button):not(.eu-cookie-compliance-save-preferences-button)[focus-within]{background:var(--color-black);border-color:var(--color-white);color:var(--color-white);outline:2px var(--color-black) solid}.grants-applications-managed_file label.hds-button--secondary:not(:disabled):not(.eu-cookie-compliance-default-button):not(.eu-cookie-compliance-save-preferences-button):focus-within{background:var(--color-black);border-color:var(--color-white);color:var(--color-white);outline:2px var(--color-black) solid}.grants-applications-managed_file input[type=file]{opacity:0;position:absolute}.form-managed-file{display:flex;flex-wrap:wrap;white-space:inherit}.form-managed-file>span{background-color:var(--color-info-light);border-bottom:2px dotted var(--color-coat-of-arms);display:inline-block;padding:var(--spacing-s) var(--spacing-2-xs)}.form-managed-file>.file-upload-js-error{flex-basis:100%}.grants-applications-managed_file label.hds-button{display:flex}.grants-attachments--wrapper .webform-readonly{display:none}.webform-multiple-table table{border-collapse:collapse;border:0px var(--color-white) solid;margin-bottom:var(--spacing-2-xs);max-width:-moz-fit-content;max-width:fit-content}.webform-multiple-table .webform-multiple-table--operations-two{min-width:60px}.webform-multiple-table tbody tr,.webform-multiple-table thead tr{align-items:center;justify-content:space-between;width:100%}.webform-multiple-table td,.webform-multiple-table th{max-width:100%;min-width:0;padding:0;width:100%}.webform-multiple-table table thead th{padding:var(--spacing-layout-2-xs)}div.hidden-head table{display:table}div.hidden-head table thead th{padding:0}div.hidden-head table tbody tr{border-bottom:var(--spacing-s) var(--color-white) solid}div.hidden-head table tbody tr:hover{background:rgba(0,0,0,0)}div.table-layout-form input.hds-text-input__input{width:100%}div.table-layout-form table{border:1px var(--color-black) solid;max-width:var(--webform-element-width--input-large)}div.table-layout-form table tbody tr{border:§0px var(--color-black-30) solid}div.table-layout-form table tbody tr td{border:1px var(--color-black-30) solid;padding:0}div.table-layout-form table tbody tr td input.hds-text-input__input[readonly]{padding:var(--spacing-layout-2-xs)}div.table-layout-form table .form-item{margin-bottom:0}.hds-text-input .hds-text-input__input.input--borderless{border:0 rgba(0,0,0,0) solid}#edit-subventions-items thead{background:var(--color-black-90);color:var(--color-white);text-align:left}#edit-subventions-items input.hds-text-input,#edit-subventions-items input.hds-text-input__input{background:rgba(0,0,0,0)}#subventions_table td.webform-multiple-table--operations,#subventions_table th.webform-multiple-table--operations{display:none}#subventions_table input.hds-text-input__input[readonly][name$="[amount]"]{background-color:var(--input-background-disabled);border-color:var(--input-border-color-disabled);color:var(--input-color-disabled);cursor:not-allowed}.form-item-muu-liite .webform-multiple-table--operations{display:none}.hidden-head>label{display:none}.webform-preview .accordion_header{font-size:28px;font-weight:300}@media(min-width: 768px){.webform-preview .accordion_header{font-size:36px;font-weight:500}}.webform-preview label{display:block;font-weight:bold}.grants-profile-grants-profile fieldset{background:var(--color-black-5);border:0 rgba(0,0,0,0) solid;margin:0;max-width:var(--webform-element-width--fieldset);padding:0 var(--spacing-layout-s) var(--spacing-layout-s);top:calc(-1*var(--spacing-m))}.grants-profile-grants-profile fieldset label{margin-bottom:var(--spacing-3-xs)}.grants-profile-grants-profile fieldset legend{font-size:var(--fontsize-body-l);margin-bottom:var(--spacing-m);padding-bottom:var(--spacing-s);position:relative;top:var(--spacing-l)}.grants-profile-grants-profile fieldset .fieldset-wrapper{display:flex;flex-flow:row wrap;justify-content:space-between}.grants-profile-grants-profile fieldset .hds-text-input{max-width:100%}.grants-profile-grants-profile fieldset div[class*=-address-postcode]{width:32%}.grants-profile-grants-profile fieldset div[class*=-address-city]{width:65%}.grants-profile--extrainfo .form-actions .button{margin-right:var(--spacing-2-xs)}.grants-stepper{--grants-stepper-color: var(--color-black);--grants-stepper-background-color: var(--color-white);--grants-stepper-disabled-color: var(--color-black-20);--grants-stepper-selected-step-label-color: var(--color-black-90);--grants-stepper-not-selected-step-label-color: var(--color-black);--grants-step-background-color: var(--color-white);--grants-step-content-color: var(--color-black);--grants-stepper-focus-border-color: var(--color-coat-of-arms);--grants-step-width: 120px;--circle-container-size: 36px;--progress-line-height: 2px;background-color:var(--grants-stepper-background-color);margin-bottom:var(--spacing-layout-m);position:relative}@media(max-width: 725px){.grants-stepper{--grants-step-width: 40px}}@media(max-width: 725px){.grants-stepper .grants-stepper__text{display:none}}.grants-stepper__inner{align-items:flex-start;display:flex;justify-content:space-between;margin:0;-ms-overflow-style:none;padding:0;position:relative;scroll-behavior:smooth;scrollbar-width:none;width:100%}.grants-stepper__lines{display:flex;height:var(--progress-line-height);left:calc(var(--grants-step-width)/2);line-height:var(--lineheight-l);position:absolute;transform:translateY(calc(var(--circle-container-size) / 2 + var(--progress-line-height) / 2));z-index:1}.grants-stepper__line{background-color:var(--grants-stepper-color);display:inline-block;height:100%;position:relative}.grants-stepper__line__disabled{background-color:var(--grants-stepper-disabled-color)}.grants-stepper__steps{background-color:var(--grants-stepper-background-color);box-sizing:border-box;display:flex;flex-shrink:0;justify-content:center;max-width:var(--grants-step-width);min-width:var(--grants-step-width);padding:3px}.grants-stepper__step{align-items:center;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:rgba(0,0,0,0);border:0;box-sizing:content-box;color:var(--grants-stepper-color);cursor:pointer;display:flex;flex-direction:column;height:100%;justify-content:center;outline:none;overflow:visible;padding:0;position:relative}.grants-stepper__step[disabled],.grants-stepper__step__disabled{color:var(--grants-stepper-disabled-color);cursor:not-allowed}.grants-stepper__step[disabled] .grants-stepper__circle,.grants-stepper__step__disabled .grants-stepper__circle{background-color:var(--grants-stepper-background-color);border:2px solid var(--grants-stepper-disabled-color);color:var(--grants-stepper-disabled-color)}.grants-stepper__step[disabled] .grants-stepper__text,.grants-stepper__step__disabled .grants-stepper__text{color:var(--grants-stepper-disabled-color)}.grants-stepper__step__circle_container{align-items:center;display:flex;height:var(--circle-container-size);justify-content:center;width:var(--circle-container-size);z-index:2}.grants-stepper__step__completed_container{align-items:center;background-color:var(--grants-stepper-color);border-radius:16px;color:var(--color-white);display:none;justify-content:center;outline:2px solid var(--grants-stepper-background-color);padding:4px;vertical-align:middle}.grants-stepper .grants-stepper__error,.grants-stepper .grants-stepper__completed{display:none}.grants-stepper__text{color:var(--grants-stepper-not-selected-step-label-color);font-size:var(--fontsize-body-m);font-weight:500;line-height:var(--lineheight-l);margin-bottom:0;margin-top:6px;padding-left:var(--spacing-4-xs);padding-right:var(--spacing-4-xs);text-align:center;text-decoration:underline}.grants-stepper__circle{align-items:center;background-color:var(--grants-step-background-color);border:2px solid var(--grants-stepper-color);border-radius:16px;color:var(--grants-step-content-color);display:flex;height:28px;justify-content:center;outline:2px solid var(--grants-stepper-background-color);text-align:center;width:28px}.grants-stepper__number{font-size:var(--fontsize-body-m);font-weight:500;line-height:1.15}.grants-stepper .is-active .grants-stepper__circle{border:4px solid var(--grants-stepper-color);border-radius:18px;outline:none}.grants-stepper .is-active .grants-stepper__text{color:var(--grants-stepper-selected-step-label-color);font-weight:700;text-decoration:none}.grants-stepper .is-active .grants-stepper__number{color:var(--grants-stepper-selected-step-label-color);font-weight:700;text-decoration:none}.grants-stepper .is-complete .grants-stepper__container{align-items:center;background-color:var(--grants-stepper-color);border-radius:16px;color:var(--color-white);display:flex;justify-content:center;outline:2px solid var(--grants-stepper-background-color);padding:4px}.grants-stepper .is-complete .grants-stepper__number{display:none}.grants-stepper .is-complete .grants-stepper__completed{display:inline-block}.grants-stepper .is-complete .grants-stepper__circle{opacity:0}.grants-stepper .is-complete .grants-stepper__step__completed_container{display:flex}.grants-stepper .has-errors .grants-stepper__container{align-items:center;background-color:var(--grants-stepper-color);border-radius:16px;color:var(--color-white);display:flex;justify-content:center;outline:2px solid var(--grants-stepper-background-color);padding:4px}.grants-stepper .has-errors .grants-stepper__circle{border-color:var(--color-error);color:var(--color-error)}.grants-stepper .has-errors .grants-stepper__number{display:none}.grants-stepper .has-errors .grants-stepper__error{display:inline-block}.grants-stepper .progress-marker::before{display:none}.grants-stepper .progress-step .progress-marker{color:var(--color-black)}.grants-stepper .progress-step .progress-marker.focus-visible .grants-stepper__circle{outline:2px solid var(--color-black);outline:var(--outline-width, 2px) solid var(--color-black);outline-offset:2px}.grants-stepper .progress-step .progress-marker.focus-visible .grants-stepper__circle{outline:2px solid var(--color-black);outline:var(--outline-width, 2px) solid var(--color-black);outline-offset:2px}.grants-stepper .progress-step .progress-marker:focus-visible .grants-stepper__circle{outline:2px solid var(--color-black);outline:var(--outline-width, 2px) solid var(--color-black);outline-offset:2px}.grants-stepper .progress-step .progress-marker.focus-visible .grants-stepper__text{outline:2px solid var(--color-black);outline:var(--outline-width, 2px) solid var(--color-black)}.grants-stepper .progress-step .progress-marker.focus-visible .grants-stepper__text{outline:2px solid var(--color-black);outline:var(--outline-width, 2px) solid var(--color-black)}.grants-stepper .progress-step .progress-marker:focus-visible .grants-stepper__text{outline:2px solid var(--color-black);outline:var(--outline-width, 2px) solid var(--color-black)}.grants-stepper .progress-step:last-child{flex-grow:1}.grant-applications--select-wrapper{--border-width: 2px;--input-height: 56px;--menu-item-height: 53px;--icon-size: var(--spacing-m);--helper-color-default: var(--color-black-60);--helper-color-invalid: var(--color-error);--icon-color-invalid: var(--color-error);--input-background-default: var(--color-white);--input-background-disabled: var(--color-black-10);--input-border-color-default: var(--color-black-50);--input-border-color-hover: var(--color-black-90);--input-border-color-focus: var(--color-black-90);--input-border-color-invalid: var(--color-error);--input-border-color-disabled: var(--color-black-10);--input-color-default: var(--color-black-90);--input-color-disabled: var(--color-black-40);--label-color-default: var(--color-black-90);--label-color-invalid: var(--color-black-90);--placeholder-color: var(--color-black-60);--focus-outline-color: var(--color-coat-of-arms);align-items:center;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--input-background-default);border:var(--border-width) solid var(--input-border-color-default);box-sizing:border-box;color:var(--input-color-default);cursor:pointer;display:block;font-size:1.125em;grid-template-areas:"select";line-height:normal;max-width:30ch;min-width:15ch;padding:.25em .5em;position:relative;width:100%}.grant-applications--select-wrapper select{align-items:center;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:rgba(0,0,0,0);border:none;color:var(--dropdown-color-default);cursor:inherit;display:flex;font-family:inherit;font-size:var(--fontsize-body-l);height:var(--input-height);line-height:inherit;margin:0;min-height:var(--menu-item-height);outline:none;padding:calc(var(--spacing-s) - var(--border-width)*2) var(--spacing-s);width:100%;z-index:1}.grant-applications--select-wrapper select::-ms-expand{display:none}.grant-applications--select-wrapper i.hel-icon{pointer-events:none;position:absolute;right:calc(var(--spacing-s) - var(--border-width)*2);top:calc(var(--spacing-s) - var(--border-width)*2)}.grant-applications--select-wrapper select,.grant-applications--select-wrapper::after{grid-area:select}.grant-applications--select-wrapper:not(.select--multiple)::after{background-color:var(--helper-color-default);-webkit-clip-path:polygon(100% 0%, 0 0%, 50% 100%);clip-path:polygon(100% 0%, 0 0%, 50% 100%);content:"";height:.5em;justify-self:end;width:.8em}.grant-applications--select-wrapper select:focus+.grant-applications--select-focus{border:2px solid var(--focus-outline-color);border-radius:inherit;bottom:-1px;left:-1px;position:absolute;right:-1px;top:-1px}.webform-submission__application_id{border-bottom:1px var(--color-black-20) solid;padding-bottom:var(--spacing-xl)}.webform-submission__application_id--header{font-size:1rem;font-weight:bold}.webform-submission__title-wrapper{padding-top:var(--spacing-2-xl)}.webform-submission__title-wrapper h1{max-width:100%}.webform-submission ul{list-style:none;margin-top:0;padding-left:0}.webform-submission-information{background:var(--color-silver-light);margin-top:var(--spacing-3-xl);padding:var(--spacing-l)}.webform-submission-information .webform-submission-information{margin-top:var(--spacing-l);padding:0}.webform-submission-information h4{margin-top:0}.webform-submission-information h5{font-size:var(--fontsize-body-m);margin-top:var(--spacing-s)}.webform-submission-information__row{display:flex}.webform-submission-information__row-edit{margin-top:var(--spacing-s)}.webform-submission-information__row-top{align-items:center;border-bottom:1px solid var(--color-black-20);justify-content:space-between}@media(max-width: 550px){.webform-submission-information__row-top{display:block}}.webform-submission-information__row-main{flex-flow:row nowrap;gap:var(--spacing-m);justify-content:space-between}@media(max-width: 1179px){.webform-submission-information__row-main{flex-flow:row wrap}}.webform-submission-information__row-main>div{flex:1}@media(max-width: 1179px){.webform-submission-information__row-main>div{flex:auto;width:100%}}.webform-submission-information__row-main>div ul{list-style-type:none;margin-bottom:0;padding-left:0}.webform-submission-information__row-main>div ul li{margin:0;padding:0}.webform-submission-information__supportlinks{display:flex;flex-flow:row nowrap;min-width:-moz-fit-content;min-width:fit-content}.webform-submission-information__supportlinks .hds-loading-spinner{left:0}.webform-submission-information__supportlinks .hds-button{min-width:-moz-fit-content;min-width:fit-content}.hel-icon.hel-icon--copy{-webkit-mask-image:url("data:image/svg+xml,%3Csvg class='Icon-module_icon__1Jtzj icon_hel-icon__1YqNC Icon-module_s__2WGWe icon_hel-icon--size-s__2Lkik' viewBox='0 0 24 24' role='img' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Crect width='24' height='24'%3E%3C/rect%3E%3Cpath fill='currentColor' d='M6,10 L6,12 L5,12 L5,18 L12,18 L12,17 L14,17 L14,19 C14,19.5522847 13.5522847,20 13,20 L4,20 C3.44771525,20 3,19.5522847 3,19 L3,11 C3,10.4477153 3.44771525,10 4,10 L6,10 Z M20,4 C20.5522847,4 21,4.44771525 21,5 L21,15 C21,15.5522847 20.5522847,16 20,16 L8,16 C7.44771525,16 7,15.5522847 7,15 L7,5 C7,4.44771525 7.44771525,4 8,4 L20,4 Z M19,6 L9,6 L9,14 L19,14 L19,6 Z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg class='Icon-module_icon__1Jtzj icon_hel-icon__1YqNC Icon-module_s__2WGWe icon_hel-icon--size-s__2Lkik' viewBox='0 0 24 24' role='img' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Crect width='24' height='24'%3E%3C/rect%3E%3Cpath fill='currentColor' d='M6,10 L6,12 L5,12 L5,18 L12,18 L12,17 L14,17 L14,19 C14,19.5522847 13.5522847,20 13,20 L4,20 C3.44771525,20 3,19.5522847 3,19 L3,11 C3,10.4477153 3.44771525,10 4,10 L6,10 Z M20,4 C20.5522847,4 21,4.44771525 21,5 L21,15 C21,15.5522847 20.5522847,16 20,16 L8,16 C7.44771525,16 7,15.5522847 7,15 L7,5 C7,4.44771525 7.44771525,4 8,4 L20,4 Z M19,6 L9,6 L9,14 L19,14 L19,6 Z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E")}.webform-submission-form .form-actions{border-top:1px rgba(0,0,0,.6) solid;margin-top:var(--spacing-l);padding-top:var(--spacing-2-xl)}@media(min-width: 768px){.webform-submission-form .form-actions{display:flex;flex-direction:row-reverse}}.webform-submission-form .form-actions .actions{display:flex;flex-wrap:wrap}.webform-submission-form .form-actions button{margin-left:0}@media(min-width: 768px){.webform-submission-form .form-actions button{margin-left:var(--spacing-2-xs)}}.webform-submission-form .form-actions input{margin-bottom:var(--spacing-layout-2-xs);width:100%}@media(min-width: 768px){.webform-submission-form .form-actions input{width:auto}}.webform-submission-form .form-actions input.webform-button--draft{background:rgba(0,0,0,0);border:0 rgba(0,0,0,0) solid;color:var(--hdbt-color-black);order:3;text-decoration:underline}.webform-submission-form .form-actions button.webform-button--next span::after,.webform-submission-form .form-actions button.webform-button--preview span::after{content:">";margin-left:var(--spacing-2-xs)}.webform-submission-form .form-actions button.webform-button--previous span::before{content:"<";margin-right:var(--spacing-2-xs)}.webform-submission-form .form-actions input.webform-button--previous{background:var(--color-white);color:var(--border-color)}.webform-button--draft .hds-button__label::before{background-color:currentColor;background-size:contain;content:"";display:inline-block;flex-shrink:0;height:24px;margin-right:var(--spacing-2-xs);-webkit-mask-image:var(--hel-icon--download-cloud);mask-image:var(--hel-icon--download-cloud);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:24px 24px;mask-size:24px 24px;transition:transform .2s linear;vertical-align:bottom;width:24px}.webform-submission-messages{background:var(--color-silver-light);margin-top:var(--spacing-3-xl);padding:var(--spacing-l)}.webform-submission-messages h4,.webform-submission-messages h5{margin-top:0}.webform-submission-messages hr{margin:var(--spacing-l) 0}.webform-submission-messages__new-message{align-items:center;background:var(--color-alert);display:inline-flex;font-weight:bold;gap:var(--spacing-2-xs);margin-bottom:var(--spacing-m);padding:var(--spacing-2-xs) var(--spacing-xs);text-transform:uppercase}.webform-submission-messages__messages-list{list-style:none;margin:0;padding:0}.webform-submission-messages__message{margin:0;padding:0}.webform-submission-messages__message__attachments{list-style:none}.webform-submission-messages__message .hds-button{margin-top:var(--spacing-s)}.js-form-type-grants-webform-summation-field{max-width:var(--webform-element-width--input-large);text-align:right}.js-form-type-grants-webform-summation-field .grants-webform-summation-field{display:inline-block;padding:var(--spacing-xs) var(--spacing-m)}.webform-print-header,.webform-print-footer{display:none}.webform-print .main-content{display:block}.webform-submission--view-mode-html .hds-text-input,.webform-submission-data-preview-page .hds-text-input,.webform-print-page-html .hds-text-input{max-width:100%}.webform-submission--view-mode-html .print-label,.webform-submission-data-preview-page .print-label,.webform-print-page-html .print-label{display:block;font-size:var(--fontsize-body-m);font-weight:500;margin-bottom:var(--spacing-3-xs);margin-top:0;max-width:-moz-fit-content;max-width:fit-content;padding-right:var(--spacing-xl);position:relative}.webform-submission--view-mode-html .webform-section-flex-wrapper h3+*>*:first-child>*:first-child,.webform-submission--view-mode-html .webform-section-flex-wrapper h3+*>*:first-child>*:first-child label:first-of-type,.webform-submission-data-preview-page .webform-section-flex-wrapper h3+*>*:first-child>*:first-child,.webform-submission-data-preview-page .webform-section-flex-wrapper h3+*>*:first-child>*:first-child label:first-of-type,.webform-print-page-html .webform-section-flex-wrapper h3+*>*:first-child>*:first-child,.webform-print-page-html .webform-section-flex-wrapper h3+*>*:first-child>*:first-child label:first-of-type{line-height:normal}.webform-submission--view-mode-html .print-notification,.webform-submission-data-preview-page .print-notification,.webform-print-page-html .print-notification{border:2px var(--color-black) solid;font-weight:bold;margin-top:var(--spacing-2-xl);padding:var(--spacing-layout-s)}.webform-submission--view-mode-html .print-notification .print-notification--icon,.webform-submission-data-preview-page .print-notification .print-notification--icon,.webform-print-page-html .print-notification .print-notification--icon{height:22px;margin-right:var(--spacing-2-xs);vertical-align:text-top;width:22px}.webform-submission--view-mode-html .webform-print-page-wizard-page~.webform-print-page-wizard-page h2,.webform-submission-data-preview-page .webform-print-page-wizard-page~.webform-print-page-wizard-page h2,.webform-print-page-html .webform-print-page-wizard-page~.webform-print-page-wizard-page h2{page-break-after:avoid;page-break-before:always}.webform-submission--view-mode-html div.hds-text-input__input,.webform-submission-data-preview-page div.hds-text-input__input,.webform-print-page-html div.hds-text-input__input{background:var(--color-white);border:2px var(--color-black) solid;height:var(--spacing-2-xl);width:100%}.webform-submission--view-mode-html div.hds-text-input__textarea,.webform-submission-data-preview-page div.hds-text-input__textarea,.webform-print-page-html div.hds-text-input__textarea{background:var(--color-white);border:2px var(--color-black) solid;height:var(--spacing-layout-2-xl);width:100%}.webform-submission--view-mode-html .webform-section-wrapper .hds-notification,.webform-submission-data-preview-page .webform-section-wrapper .hds-notification,.webform-print-page-html .webform-section-wrapper .hds-notification{margin-top:var(--spacing-s)}.webform-submission--view-mode-html .webform-print-page-body h2,.webform-submission-data-preview-page .webform-print-page-body h2,.webform-print-page-html .webform-print-page-body h2{margin-bottom:var(--spacing-layout-s)}.webform-submission--view-mode-html .webform-print-wrapper-table,.webform-submission-data-preview-page .webform-print-wrapper-table,.webform-print-page-html .webform-print-wrapper-table{border:0 rgba(0,0,0,0) solid;display:table;max-width:100%;overflow-x:visible;overflow-x:initial;width:100%}.webform-submission--view-mode-html .webform-print-wrapper-table thead,.webform-submission--view-mode-html .webform-print-wrapper-table tbody,.webform-submission--view-mode-html .webform-print-wrapper-table tfoot,.webform-submission--view-mode-html .webform-print-wrapper-table tr,.webform-submission--view-mode-html .webform-print-wrapper-table tbody tr:hover,.webform-submission--view-mode-html .webform-print-wrapper-table td,.webform-submission--view-mode-html .webform-print-wrapper-table td:first-child,.webform-submission--view-mode-html .webform-print-wrapper-table th,.webform-submission-data-preview-page .webform-print-wrapper-table thead,.webform-submission-data-preview-page .webform-print-wrapper-table tbody,.webform-submission-data-preview-page .webform-print-wrapper-table tfoot,.webform-submission-data-preview-page .webform-print-wrapper-table tr,.webform-submission-data-preview-page .webform-print-wrapper-table tbody tr:hover,.webform-submission-data-preview-page .webform-print-wrapper-table td,.webform-submission-data-preview-page .webform-print-wrapper-table td:first-child,.webform-submission-data-preview-page .webform-print-wrapper-table th,.webform-print-page-html .webform-print-wrapper-table thead,.webform-print-page-html .webform-print-wrapper-table tbody,.webform-print-page-html .webform-print-wrapper-table tfoot,.webform-print-page-html .webform-print-wrapper-table tr,.webform-print-page-html .webform-print-wrapper-table tbody tr:hover,.webform-print-page-html .webform-print-wrapper-table td,.webform-print-page-html .webform-print-wrapper-table td:first-child,.webform-print-page-html .webform-print-wrapper-table th{background:rgba(0,0,0,0);border:0;color:var(--color-black)}.webform-submission--view-mode-html .webform-print-wrapper-table ul,.webform-submission-data-preview-page .webform-print-wrapper-table ul,.webform-print-page-html .webform-print-wrapper-table ul{margin:0;padding:0}.webform-submission--view-mode-html .webform-print-wrapper-table ul li,.webform-submission-data-preview-page .webform-print-wrapper-table ul li,.webform-print-page-html .webform-print-wrapper-table ul li{border-bottom:1px var(--color-black-50) solid;list-style:none;margin-top:0;padding:1rem 0}.webform-submission--view-mode-html .webform-print-wrapper-table ul li:last-of-type,.webform-submission-data-preview-page .webform-print-wrapper-table ul li:last-of-type,.webform-print-page-html .webform-print-wrapper-table ul li:last-of-type{border-bottom:0 rgba(0,0,0,0) solid}.webform-submission--view-mode-html .webform-print-wrapper-table thead,.webform-submission-data-preview-page .webform-print-wrapper-table thead,.webform-print-page-html .webform-print-wrapper-table thead{display:table-header-group}.webform-submission--view-mode-html .webform-print-wrapper-table thead th,.webform-submission-data-preview-page .webform-print-wrapper-table thead th,.webform-print-page-html .webform-print-wrapper-table thead th{padding:0}.webform-submission--view-mode-html .webform-print-wrapper-table tfoot,.webform-submission-data-preview-page .webform-print-wrapper-table tfoot,.webform-print-page-html .webform-print-wrapper-table tfoot{display:table-footer-group}.webform-submission--view-mode-html .webform-submission-data>section,.webform-submission-data-preview-page .webform-submission-data>section,.webform-print-page-html .webform-submission-data>section{border-top:1px var(--color-black-20) solid;padding-top:var(--spacing-layout-l)}.webform-submission--view-mode-html .webform-submission-data>section>.webform-section-flex-wrapper,.webform-submission-data-preview-page .webform-submission-data>section>.webform-section-flex-wrapper,.webform-print-page-html .webform-submission-data>section>.webform-section-flex-wrapper{display:block}.webform-submission--view-mode-html .webform-submission-data>section>.webform-section-flex-wrapper>h2,.webform-submission-data-preview-page .webform-submission-data>section>.webform-section-flex-wrapper>h2,.webform-print-page-html .webform-submission-data>section>.webform-section-flex-wrapper>h2{font-size:var(--fontsize-heading-l) !important;margin:0 0 2mm !important;padding:0 !important;width:100% !important}.webform-submission--view-mode-html .webform-submission-data>section>.webform-section-flex-wrapper>h2,.webform-submission-data-preview-page .webform-submission-data>section>.webform-section-flex-wrapper>h2,.webform-print-page-html .webform-submission-data>section>.webform-section-flex-wrapper>h2{font-weight:500;min-width:100%}.webform-submission--view-mode-html .webform-submission-data>section>.webform-section-flex-wrapper>.webform-section-wrapper,.webform-submission-data-preview-page .webform-submission-data>section>.webform-section-flex-wrapper>.webform-section-wrapper,.webform-print-page-html .webform-submission-data>section>.webform-section-flex-wrapper>.webform-section-wrapper{padding:6mm 0}.webform-submission--view-mode-html .webform-submission-data>section>.webform-section-flex-wrapper>.webform-section-wrapper label,.webform-submission-data-preview-page .webform-submission-data>section>.webform-section-flex-wrapper>.webform-section-wrapper label,.webform-print-page-html .webform-submission-data>section>.webform-section-flex-wrapper>.webform-section-wrapper label{font-weight:500}.webform-submission--view-mode-html .webform-submission-data>section.hds-notification,.webform-submission-data-preview-page .webform-submission-data>section.hds-notification,.webform-print-page-html .webform-submission-data>section.hds-notification{padding-top:var(--spacing-s)}@media print{@page{.webform-submission--view-mode-html,.webform-submission-data-preview-page,.webform-print-page-html{margin:0;size:A4}}.webform-submission--view-mode-html h1,.webform-submission-data-preview-page h1,.webform-print-page-html h1{margin:0;position:relative}.webform-submission--view-mode-html details,.webform-submission-data-preview-page details,.webform-print-page-html details{page-break-before:always}.webform-submission--view-mode-html .details-section-divider,.webform-submission-data-preview-page .details-section-divider,.webform-print-page-html .details-section-divider{page-break-after:always}.webform-submission--view-mode-html label,.webform-submission-data-preview-page label,.webform-print-page-html label{font-size:8pt;margin-bottom:0}.webform-submission--view-mode-html section,.webform-submission-data-preview-page section,.webform-print-page-html section{border-top:0 var(--color-black-20) solid !important;padding-top:0 !important}.webform-submission--view-mode-html section,.webform-submission-data-preview-page section,.webform-print-page-html section{margin-bottom:0;padding-bottom:0}.webform-submission--view-mode-html div.main-content,.webform-submission-data-preview-page div.main-content,.webform-print-page-html div.main-content{margin:0}.webform-submission--view-mode-html button,.webform-submission--view-mode-html footer.footer,.webform-submission--view-mode-html header.header,.webform-submission--view-mode-html nav.breadcrumb,.webform-submission--view-mode-html .form-actions,.webform-submission--view-mode-html .hds-notification,.webform-submission--view-mode-html .messages__container,.webform-submission--view-mode-html .tools__container,.webform-submission--view-mode-html .breadcrumb__container,.webform-submission--view-mode-html .webform-progress,.webform-submission--view-mode-html .webform-progress-tracker,.webform-submission--view-mode-html .webform-progress-tracker-mobile,.webform-submission--view-mode-html .webform-multiple-add,.webform-submission--view-mode-html .webform-multiple-table--operations,.webform-submission-data-preview-page button,.webform-submission-data-preview-page footer.footer,.webform-submission-data-preview-page header.header,.webform-submission-data-preview-page nav.breadcrumb,.webform-submission-data-preview-page .form-actions,.webform-submission-data-preview-page .hds-notification,.webform-submission-data-preview-page .messages__container,.webform-submission-data-preview-page .tools__container,.webform-submission-data-preview-page .breadcrumb__container,.webform-submission-data-preview-page .webform-progress,.webform-submission-data-preview-page .webform-progress-tracker,.webform-submission-data-preview-page .webform-progress-tracker-mobile,.webform-submission-data-preview-page .webform-multiple-add,.webform-submission-data-preview-page .webform-multiple-table--operations,.webform-print-page-html button,.webform-print-page-html footer.footer,.webform-print-page-html header.header,.webform-print-page-html nav.breadcrumb,.webform-print-page-html .form-actions,.webform-print-page-html .hds-notification,.webform-print-page-html .messages__container,.webform-print-page-html .tools__container,.webform-print-page-html .breadcrumb__container,.webform-print-page-html .webform-progress,.webform-print-page-html .webform-progress-tracker,.webform-print-page-html .webform-progress-tracker-mobile,.webform-print-page-html .webform-multiple-add,.webform-print-page-html .webform-multiple-table--operations{display:none !important}.webform-submission--view-mode-html .gin--horizontal-toolbar .dialog-off-canvas-main-canvas,.webform-submission-data-preview-page .gin--horizontal-toolbar .dialog-off-canvas-main-canvas,.webform-print-page-html .gin--horizontal-toolbar .dialog-off-canvas-main-canvas{padding:0 !important}.webform-submission--view-mode-html .hds-text-input,.webform-submission-data-preview-page .hds-text-input,.webform-print-page-html .hds-text-input{max-width:100%}.webform-submission--view-mode-html .hds-text-input .hds-text-input__input,.webform-submission-data-preview-page .hds-text-input .hds-text-input__input,.webform-print-page-html .hds-text-input .hds-text-input__input{height:1cm}.webform-submission--view-mode-html .hds-text-input textarea.hds-text-input__input,.webform-submission--view-mode-html .hds-text-input div.hds-text-input__textarea,.webform-submission-data-preview-page .hds-text-input textarea.hds-text-input__input,.webform-submission-data-preview-page .hds-text-input div.hds-text-input__textarea,.webform-print-page-html .hds-text-input textarea.hds-text-input__input,.webform-print-page-html .hds-text-input div.hds-text-input__textarea{height:6cm;max-width:100%;min-width:100%;width:100%}.webform-submission--view-mode-html .hds-text-input .hds-text-input__input[readonly],.webform-submission--view-mode-html .hds-text-input .hds-text-input__input,.webform-submission-data-preview-page .hds-text-input .hds-text-input__input[readonly],.webform-submission-data-preview-page .hds-text-input .hds-text-input__input,.webform-print-page-html .hds-text-input .hds-text-input__input[readonly],.webform-print-page-html .hds-text-input .hds-text-input__input{border:2px var(--color-black) solid}.webform-submission--view-mode-html .webform-element,.webform-submission-data-preview-page .webform-element,.webform-print-page-html .webform-element{border:1px var(--color-black) solid;margin-bottom:8mm;padding:2.5mm;position:relative}.webform-submission--view-mode-html .webform-preview,.webform-submission-data-preview-page .webform-preview,.webform-print-page-html .webform-preview{margin-top:0}.webform-submission--view-mode-html .webform-preview label,.webform-submission-data-preview-page .webform-preview label,.webform-print-page-html .webform-preview label{align-items:flex-end;display:flex;font-size:8pt;height:100%;left:0;pointer-events:none;position:absolute;top:-100%;width:100%}.webform-submission--view-mode-html .webform-preview .webform-element,.webform-submission-data-preview-page .webform-preview .webform-element,.webform-print-page-html .webform-preview .webform-element{border:1px var(--color-black) solid;margin-bottom:8mm;padding:2.5mm;position:relative;top:5mm}.webform-submission--view-mode-html .webform-preview .webform-multiple-table--operations,.webform-submission-data-preview-page .webform-preview .webform-multiple-table--operations,.webform-print-page-html .webform-preview .webform-multiple-table--operations{display:none}.webform-submission--view-mode-html .webform-print-header,.webform-submission-data-preview-page .webform-print-header,.webform-print-page-html .webform-print-header{align-items:center;background:var(--color-white);border-bottom:1px var(--color-black-40) solid;display:flex;flex-flow:row nowrap;font-size:9pt;height:21mm;left:0;max-width:100%;min-width:100%;position:fixed;top:0;width:100%;z-index:1000}.webform-submission--view-mode-html .webform-print-header svg,.webform-submission-data-preview-page .webform-print-header svg,.webform-print-page-html .webform-print-header svg{color:var(--color-black);display:block;height:25mm;margin-right:3mm;width:55mm}.webform-submission--view-mode-html .webform-print-header .webform-print-header-left-text,.webform-submission-data-preview-page .webform-print-header .webform-print-header-left-text,.webform-print-page-html .webform-print-header .webform-print-header-left-text{color:var(--color-black-40);text-align:left;width:100%}.webform-submission--view-mode-html .webform-print-header .webform-print-header-right-text,.webform-submission-data-preview-page .webform-print-header .webform-print-header-right-text,.webform-print-page-html .webform-print-header .webform-print-header-right-text{color:var(--color-black-40);text-align:right;width:100%}.webform-submission--view-mode-html .webform-print-footer,.webform-submission-data-preview-page .webform-print-footer,.webform-print-page-html .webform-print-footer{align-items:center;background:var(--color-white);border-top:1px var(--color-black-40) solid;bottom:0;display:flex;flex-flow:row nowrap;font-size:9pt;height:17mm;left:0;max-width:100%;min-width:100%;position:fixed;width:100%;z-index:1000}.webform-submission--view-mode-html .webform-print-footer svg,.webform-submission-data-preview-page .webform-print-footer svg,.webform-print-page-html .webform-print-footer svg{color:var(--color-black);display:block;height:15mm;margin-right:3mm;width:33mm}.webform-submission--view-mode-html .webform-print-footer .webform-print-footer-left-text,.webform-submission-data-preview-page .webform-print-footer .webform-print-footer-left-text,.webform-print-page-html .webform-print-footer .webform-print-footer-left-text{color:var(--color-black-40);text-align:left;width:100%}.webform-submission--view-mode-html .webform-print-footer .webform-print-footer-right-text,.webform-submission-data-preview-page .webform-print-footer .webform-print-footer-right-text,.webform-print-page-html .webform-print-footer .webform-print-footer-right-text{color:var(--color-black-40);text-align:right;width:100%}.webform-submission--view-mode-html .webform-print-header-space,.webform-submission-data-preview-page .webform-print-header-space,.webform-print-page-html .webform-print-header-space{background:var(--color-white);font-size:9pt;height:21mm}.webform-submission--view-mode-html .webform-print-footer-space,.webform-submission-data-preview-page .webform-print-footer-space,.webform-print-page-html .webform-print-footer-space{background:var(--color-white);font-size:9pt;height:17mm}.webform-submission--view-mode-html .webform-print-wrapper-table,.webform-submission-data-preview-page .webform-print-wrapper-table,.webform-print-page-html .webform-print-wrapper-table{border:0;margin:0;overflow-x:visible;overflow-x:initial}.webform-submission--view-mode-html .webform-section-flex-wrapper,.webform-submission-data-preview-page .webform-section-flex-wrapper,.webform-print-page-html .webform-section-flex-wrapper{flex-flow:row wrap}.webform-submission--view-mode-html .webform-section-flex-wrapper>h3.webform-section-title,.webform-submission-data-preview-page .webform-section-flex-wrapper>h3.webform-section-title,.webform-print-page-html .webform-section-flex-wrapper>h3.webform-section-title{max-width:100%;width:100%}.webform-submission--view-mode-html .webform-section-grid-wrapper,.webform-submission-data-preview-page .webform-section-grid-wrapper,.webform-print-page-html .webform-section-grid-wrapper{display:flex;flex-flow:row nowrap}.webform-submission--view-mode-html .webform-section-grid-wrapper>h3.webform-section-title,.webform-submission-data-preview-page .webform-section-grid-wrapper>h3.webform-section-title,.webform-print-page-html .webform-section-grid-wrapper>h3.webform-section-title{font-size:1.25rem;margin-top:0;max-width:5cm;width:100%}.webform-submission--view-mode-html .webform-section-grid-wrapper>dl.webform-section-contents,.webform-submission-data-preview-page .webform-section-grid-wrapper>dl.webform-section-contents,.webform-print-page-html .webform-section-grid-wrapper>dl.webform-section-contents{margin-top:0;max-width:100%;padding-left:1cm;width:100%}.webform-submission--view-mode-html .webform-section-grid-wrapper>dl.webform-section-contents dt,.webform-submission-data-preview-page .webform-section-grid-wrapper>dl.webform-section-contents dt,.webform-print-page-html .webform-section-grid-wrapper>dl.webform-section-contents dt{font-weight:bold;margin:0;padding:0;page-break-after:avoid}.webform-submission--view-mode-html .webform-section-grid-wrapper>dl.webform-section-contents dd,.webform-submission-data-preview-page .webform-section-grid-wrapper>dl.webform-section-contents dd,.webform-print-page-html .webform-section-grid-wrapper>dl.webform-section-contents dd{margin:0;padding:0;page-break-before:avoid}.webform-submission--view-mode-html .webform-print-page-body h2,.webform-submission-data-preview-page .webform-print-page-body h2,.webform-print-page-html .webform-print-page-body h2{margin-bottom:1cm}}.webform-submission-data dl dt{font-weight:bold}.webform-submission-data dl dd{margin:0;padding:0}.webform-submission-data dl dl{padding-left:var(--spacing-2-xs)}.webform-submission-data dl>br{display:none}.webform-print-page-html .webform-section-wrapper>h4,.webform-print-page-html .webform-section-wrapper .print-label{margin-top:var(--spacing-2-xs);line-height:1.5}.webform-print-page-html .webform-section-wrapper fieldset{padding:var(--spacing-s)}@media(min-width: 768px){.webform-print-page-html .webform-section-wrapper fieldset{min-width:400px;padding:var(--spacing-s) var(--spacing-m)}}.application-list{padding-bottom:var(--spacing-xl);padding-left:0}.application-list__processed-human-readable{display:none}.application-list__item{background:var(--color-bus-light);display:block;margin:var(--spacing-m) 0;padding:var(--spacing-2-xl) var(--spacing-s) var(--spacing-m);position:relative}.application-list__item .new-message{background-color:var(--color-alert);border-radius:var(--spacing-xl);display:inline-block;padding:var(--spacing-2-xs)}.application-list__item .new-message .hel-icon--size-s{height:20px;width:20px}.application-list__item h3,.application-list__item h4{margin-top:var(--spacing-xs)}.application-list__item h4{font-size:1rem}.application-list__item--submitted{display:none}.application-list__item__link{display:flex;margin-top:var(--spacing-m)}.application-list__item__link a{font-size:1.25rem}.application-list__item__link a i{vertical-align:text-bottom}.application-list__item__row{display:flex;flex-flow:row wrap;gap:var(--spacing-m);justify-content:space-between}.application-list__item__row__left{justify-content:flex-start}.application-list__item__row__top{padding:var(--spacing-2-xs) var(--spacing-s) var(--spacing-2-xs) 0;position:absolute;top:0;width:100%}.application-list__item--status{--status-label-height: 32px;align-items:center;border-radius:20px;display:inline-flex;font-size:var(--fontsize-body-s);line-height:var(--status-label-height);min-height:var(--status-label-height);padding:var(--spacing-3-xs) var(--spacing-s);padding-left:var(--spacing-xs);vertical-align:middle}.application-list__item--status+.hds-loading-spinner{display:inline-block;left:10px;margin:0;padding:0;position:relative;top:var(--spacing-3-xs)}.application-list__item--status.hide-spinner+.hds-loading-spinner{display:none}.application-list__item--status+div+.application-list__item--error{display:none}.application-list__item--status.show-error{background:var(--color-black-20);color:var(--color-black-90)}.application-list__item--status.show-error+div+.application-list__item--error{display:inline-flex;left:var(--spacing-xs);margin:0;padding:0;position:relative;top:var(--spacing-3-xs)}.application-list__item--status.show-error+div+.application-list__item--error .application-list--error-text{display:inline-block;margin-left:var(--spacing-2-xs)}.application-list__item--status--draft{padding-left:0}.application-list__item--status--sent,.application-list__item--status--submitted{background:var(--color-black-10)}.application-list__item--status--sent::before,.application-list__item--status--submitted::before{--icon-size: 1.5rem;background-color:#000;background-size:contain;content:"";display:inline-block;height:calc(var(--line-height) * 1em);height:var(--icon-size, calc(var(--line-height) * 1em));-webkit-mask-image:var(--hel-icon--alert-circle);mask-image:var(--hel-icon--alert-circle);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);-webkit-mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));vertical-align:bottom;width:calc(var(--line-height) * 1em);width:var(--icon-size, calc(var(--line-height) * 1em));background-color:var(--color-black);content:"";margin-right:var(--spacing-2-xs)}.application-list__item--status--received,.application-list__item--status--pending,.application-list__item--status--processing,.application-list__item--status--preparing{background:var(--color-info);color:var(--color-white)}.application-list__item--status--received::before,.application-list__item--status--pending::before,.application-list__item--status--processing::before,.application-list__item--status--preparing::before{--icon-size: 1.5rem;background-color:#000;background-size:contain;content:"";display:inline-block;height:calc(var(--line-height) * 1em);height:var(--icon-size, calc(var(--line-height) * 1em));-webkit-mask-image:var(--hel-icon--info-circle);mask-image:var(--hel-icon--info-circle);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);-webkit-mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));vertical-align:bottom;width:calc(var(--line-height) * 1em);width:var(--icon-size, calc(var(--line-height) * 1em));background-color:var(--color-white);content:"";margin-right:var(--spacing-2-xs)}.application-list__item--status--done,.application-list__item--status--ready,.application-list__item--status--resolved{background:var(--color-success);color:var(--color-white)}.application-list__item--status--done::before,.application-list__item--status--ready::before,.application-list__item--status--resolved::before{--icon-size: 1.5rem;background-color:#000;background-size:contain;content:"";display:inline-block;height:calc(var(--line-height) * 1em);height:var(--icon-size, calc(var(--line-height) * 1em));-webkit-mask-image:var(--hel-icon--check-circle);mask-image:var(--hel-icon--check-circle);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);-webkit-mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));vertical-align:bottom;width:calc(var(--line-height) * 1em);width:var(--icon-size, calc(var(--line-height) * 1em));background-color:var(--color-white);content:"";margin-right:var(--spacing-2-xs)}.application-list__item--status--rejected,.application-list__item--status--deleted,.application-list__item--status--canceled,.application-list__item--status--cancelled{background:var(--color-alert)}.application-list__item--status--rejected::before,.application-list__item--status--deleted::before,.application-list__item--status--canceled::before,.application-list__item--status--cancelled::before{--icon-size: 1.5rem;background-color:#000;background-size:contain;content:"";display:inline-block;height:calc(var(--line-height) * 1em);height:var(--icon-size, calc(var(--line-height) * 1em));-webkit-mask-image:var(--hel-icon--alert-circle);mask-image:var(--hel-icon--alert-circle);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);-webkit-mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));vertical-align:bottom;width:calc(var(--line-height) * 1em);width:var(--icon-size, calc(var(--line-height) * 1em));background-color:var(--color-black);content:"";margin-right:var(--spacing-2-xs)}.application-list__item--status--error{background:var(--color-black-20);color:var(--color-black);text-transform:uppercase}.application-list__item--status--error .hel-icon{margin-right:var(--spacing-3-xs)}.application-list__count{font-size:1.5rem}.application-list__count-value{font-weight:bold}.application-list__information-row{align-items:flex-end;display:flex;flex-flow:row nowrap;justify-content:space-between;width:100%}@media(max-width: 35rem){.application-list__information-row{flex-flow:row wrap}}.application-list__information-row .grant-applications--select-wrapper select{max-width:100%;width:322px}.application-list__status__wrapper{background:var(--color-black-5)}.application-list__status__container{display:flex;flex-flow:row wrap;gap:var(--spacing-layout-m);justify-content:flex-start;padding-bottom:var(--spacing-m);padding-top:var(--spacing-m)}.application-list__status__label{font-weight:bold}.application-list__status__value{display:flex;flex-flow:row;justify-items:center;min-height:var(--spacing-xl)}.application-list__status__value>div{margin:auto}.application-list__search-row{align-items:flex-end;display:flex;flex-flow:row nowrap;gap:var(--spacing-s);justify-content:space-between;width:100%}@media(max-width: 35rem){.application-list__search-row{flex-flow:row wrap}}.application-list__search-row .hds-text-input{flex:1 100%;max-width:100%}.application-list__search-row .hds-text-input__input-wrapper{display:block}.application-list__search-row .hds-text-input__input-wrapper input{width:100%}.application-list__search-row button{white-space:nowrap}.application-list__pagination{--line-height: 1.5555555556;font-size:1.125rem;font-weight:400;line-height:var(--line-height);display:inline-flex;flex-wrap:wrap;font-weight:700;gap:var(--spacing-2-xs);justify-content:center;list-style:none;padding:0}.application-list__pagination li{margin-top:0}.application-list__pagination li.active a{text-decoration:underline}.application-list__pagination li.disabled a{cursor:default;text-decoration:none}.application-list__pagination li.disabled a:hover,.application-list__pagination li.disabled a:focus,.application-list__pagination li.disabled a:active{outline:none;text-decoration:none}.application-list__pagination li a{color:var(--color-black-90);display:block;height:var(--link-height);min-width:40px;padding-left:var(--spacing-3-xs);padding-right:var(--spacing-3-xs);text-decoration:none}.application-list__pagination li a:hover{text-decoration:underline}.application-list__pagination li a:focus,.application-list__pagination li a:active{outline:solid var(--color-coat-of-arms) 3px;outline-offset:1px}.grants-profile hr{border:1px solid var(--color-silver);margin:var(--spacing-layout-xs) 0}.grants-profile h3.info-grants{border-bottom:2px solid var(--color-silver);padding-bottom:var(--spacing-l)}.grants-profile--title{align-items:center;display:flex;flex-flow:row nowrap}.grants-profile--title .grants-profile--initials{border-radius:50%;display:none;font-size:var(--fontsize-body-xl);font-weight:bold;height:var(--spacing-4-xl);line-height:var(--spacing-4-xl);margin-right:var(--spacing-m);text-align:center;vertical-align:middle;width:var(--spacing-4-xl)}@media(min-width: 992px){.grants-profile--title .grants-profile--initials{display:block}}.grants-profile--title .grants-profile--initials:hover,.grants-profile--title .grants-profile--initials:active,.grants-profile--title .grants-profile--initials:focus{text-decoration:underline}.grants-profile--title .grants-profile--initials-colorscheme-2{background-color:var(--color-bus);color:var(--color-white)}.grants-profile--title .grants-profile--initials-colorscheme-1{background-color:var(--color-engel);color:var(--color-black)}.grants-profile--title .grants-profile--initials-colorscheme-0{background-color:var(--color-tram);color:var(--color-white)}.grants-profile--title h1{flex-grow:100}.grants-profile--basicinfo{--line-height: 1.5;background-color:var(--color-silver-light);border-bottom:8px solid var(--color-engel-dark);padding-bottom:var(--spacing-2-xs);padding-top:var(--spacing-l)}.grants-profile--basicinfo h3{font-size:var(--fontsize-heading-l);margin-top:0;padding-top:0}.grants-profile--extrainfo{padding-bottom:var(--spacing-l);padding-top:var(--spacing-l)}.grants-profile--extrainfo .hds-notification{margin-bottom:var(--spacing-xl)}.grants-profile--extrainfo fieldset.form-wrapper{background-color:var(--color-silver-light);border:0;padding:var(--spacing-l)}.grants-profile--extrainfo fieldset.inline-error-message{background-color:transparent;background-color:initial;padding:0 0 0 var(--spacing-2-xs)}.grants-profile--extrainfo fieldset.inline-error-message legend{display:none}.grants-profile--update-link{margin-bottom:var(--spacing-layout-2-xs);margin-top:var(--spacing-layout-xs)}.grants-profile--infotext{font-size:var(--fontsize-body-l);margin-bottom:var(--spacing-s)}.grants-profile--wrapper{display:flex;flex-wrap:wrap}.grants-profile--wrapper-item{margin-bottom:var(--spacing-layout-2-xs);width:100%}@media(min-width: 576px){.grants-profile--wrapper-item{flex:1;margin-bottom:0}}.grants-profile--wrapper-item:first-child{flex:auto;margin-bottom:var(--spacing-layout-2-xs);width:100%}.grants-profile .profile-add-more{margin-top:1em}[dir="ltr"] .grants-profile dd{margin-left:0}[dir="rtl"] .grants-profile dd{margin-right:0}.grants-profile--officials{margin-left:0;padding-left:0}.grants-profile--officials-item{border-left:4px var(--color-copper) solid;display:flex;flex-flow:row nowrap;justify-content:space-between;list-style:none;margin-bottom:var(--spacing-layout-s);margin-left:0;max-width:var(--webform-element-width--input-large);padding-left:var(--spacing-layout-xs);width:100%}.grants-profile--officials-item--position{font-size:var(--fontsize-heading-xs);font-weight:bold;margin-bottom:var(--spacing-layout-2-xs);margin-top:0;padding-top:0}.grants-profile--officials-edit-wrapper{text-align:right}.grants-profile--officials-edit-wrapper a{display:inline-block}.grants-profile .hel-icon--check-circle-fill{color:var(--color-success);vertical-align:middle}.grants-profile-grants-profile .tabledrag-toggle-weight-wrapper,.grants-profile-grants-profile .field-multiple-drag{display:none}.grants-profile .hds-text-input__label{display:inline-block;margin-top:0}.page--oma-asiointi__private-person .grants-profile--basicinfo{border-bottom:8px solid var(--color-copper)}.page--oma-asiointi__private-person .grants-profile--wrapper{display:grid;grid-template-columns:1fr 1fr}.page--oma-asiointi__unregistered-community .grants-profile--wrapper{display:grid;grid-template-columns:1fr 1fr}.hds-link .hel-icon{margin-right:var(--spacing-2-xs);vertical-align:bottom}.hds-link span.link-label{font-weight:bold;margin-right:var(--spacing-m)}.bold-link{font-weight:bold}div.applicant-info--from-prh,div.applicant-info--from-grants{display:grid;grid-template-columns:1fr}@media(min-width: 576px){div.applicant-info--from-prh,div.applicant-info--from-grants{grid-template-columns:1fr 1fr}}@media(min-width: 768px){div.applicant-info--from-prh,div.applicant-info--from-grants{grid-template-columns:1fr 1fr 1fr}}div.applicant-info--from-prh .form-required::after,div.applicant-info--from-grants .form-required::after{content:none}div.applicant-info--from-prh{border-bottom:2px solid var(--color-silver);margin-bottom:var(--spacing-layout-xs);padding-bottom:var(--spacing-layout-2-xs)}div.grants-handler--prefilled-field .field-prefix,.grants-profile-prh-info .field-prefix{display:block;position:absolute;right:var(--spacing-layout-s);top:0}div.grants-handler--prefilled-field .hds-text-input__input-wrapper,div.grants-handler--prefilled-field .description,.grants-profile-prh-info .hds-text-input__input-wrapper,.grants-profile-prh-info .description{display:inline-block;white-space:normal}div.grants-handler--prefilled-field .hel-icon--check-circle-fill,.grants-profile-prh-info .hel-icon--check-circle-fill{color:var(--color-success);vertical-align:middle}div.grants-handler--prefilled-field .hds-text-input__input,div.grants-handler--prefilled-field .webform-element-description,.grants-profile-prh-info .hds-text-input__input,.grants-profile-prh-info .webform-element-description{color:var(--color-black);display:block;font-size:var(--fontsize-body-m);line-height:var(--spacing-m);position:relative}div.grants-handler--prefilled-field .hds-text-input__label,.grants-profile-prh-info .hds-text-input__label{margin-bottom:0}.grants-profile--imported-section .webform-section-flex-wrapper{background-color:var(--color-silver-light);border-bottom:8px solid var(--color-engel-dark);display:block;padding-bottom:var(--spacing-2-xs);padding-left:var(--spacing-l);padding-right:var(--spacing-l);padding-top:var(--spacing-l);width:100%}.grants-profile--imported-section .webform-section-flex-wrapper h3.webform-section-title{font-size:var(--fontsize-heading-l);font-weight:400;margin-top:0;max-width:100%;padding-top:0;width:100%}.grants-profile--imported-section .webform-section-flex-wrapper .webform-section-wrapper{padding:0}.grants-profile--imported-section .webform-section-flex-wrapper .hds-text-input{margin-bottom:0}.grants-profile--imported-section .webform-section-flex-wrapper #edit-grants-profile-items-container{display:flex;flex-flow:row wrap;justify-content:space-between;margin-bottom:var(--spacing-layout-xs);margin-top:var(--spacing-layout-xs);width:100%}.grants-profile--imported-section .webform-section-flex-wrapper #edit-grants-profile-items-container>div{margin:0 var(--spacing-layout-xs) 0 0;min-width:160px}.grants-profile--imported-section .webform-section-flex-wrapper #edit-grants-profile-items-container .hds-text-input__input-wrapper{display:none}.grants-profile--imported-section .webform-section-flex-wrapper #edit-grants-profile-items-container label{font-size:var(--fontsize-body-m);font-weight:bold;margin:0}.grants-profile--imported-section .webform-section-flex-wrapper .form-item-prh-markup{border-bottom:2px solid var(--color-silver);padding-bottom:var(--spacing-layout-xs);padding-top:var(--spacing-layout-xs)}.grants-profile__local-tasks__wrapper{margin-bottom:0}.openid-connect-login-form.openid-connect-login-form{border-bottom:0;margin-bottom:0;padding-bottom:0}.grants-profile--links{display:flex;justify-content:space-between}.company-delete-confirm-form .form-actions{margin-top:var(--spacing-layout-xs)}.company-delete-confirm-form .form-submit{margin-right:var(--spacing-2-xs)}.page--oma-asiointi .main-content{margin-top:0}.page--oma-asiointi .main-content h2{margin-top:var(--spacing-m)}.hero--oma-asiointi{margin-bottom:var(--spacing-l)}.hero--oma-asiointi .container{padding-top:var(--spacing-layout-m)}.hero--oma-asiointi .hero__text-content{align-items:center;display:flex}.hero--oma-asiointi .hero__title{margin-left:0}@media(min-width: 576px){.hero--oma-asiointi .hero__title{margin-left:40px}}.hero--oma-asiointi .hel-icon{display:none}@media(min-width: 576px){.hero--oma-asiointi .hel-icon{--icon-size: 48px;display:block;flex-shrink:0}}#oma-asiointi__sent{background:var(--color-silver-light)}#oma-asiointi__sent .application-list__item{background:var(--color-white)}.oma-asiointi-block{background-color:var(--color-silver-light);padding-bottom:var(--spacing-l);padding-top:var(--spacing-l)}.oma-asiointi-block h2{margin-bottom:var(--spacing-s);margin-top:0}.oma-asiointi-block h3{font-size:var(--fontsize-heading-m);font-weight:500}.oma-asiointi-block .header{border-bottom:1px solid var(--color-silver-dark);display:flex;justify-content:space-between;padding-bottom:var(--spacing-xs)}.oma-asiointi-block .header .user,.oma-asiointi-block .header .link{font-weight:700}.oma-asiointi-block .header .link .hel-icon{vertical-align:text-top}.oma-asiointi-block--link{display:block;position:relative;text-decoration:none}.oma-asiointi-block--link::after{--icon-size: 1.5rem;background-color:#000;background-size:contain;content:"";display:inline-block;height:calc(var(--line-height) * 1em);height:var(--icon-size, calc(var(--line-height) * 1em));-webkit-mask-image:var(--hel-icon--arrow-right);mask-image:var(--hel-icon--arrow-right);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);-webkit-mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));vertical-align:bottom;width:calc(var(--line-height) * 1em);width:var(--icon-size, calc(var(--line-height) * 1em));transition:transform .2s linear;bottom:var(--spacing-m);content:"";display:block;flex-shrink:0;margin-left:-4px;margin-top:var(--spacing-2-xs);position:absolute;right:var(--spacing-m)}@media(prefers-reduced-motion){.oma-asiointi-block--link::after{transition:none}}@media(min-width: 576px){.oma-asiointi-block--link::after{--icon-size: 3rem;margin-left:-8px;margin-top:var(--spacing-s)}}.oma-asiointi-block--link:focus::after,.oma-asiointi-block--link:hover::after{transform:translateX(var(--spacing-2-xs))}@media(prefers-reduced-motion){.oma-asiointi-block--link:focus::after,.oma-asiointi-block--link:hover::after{transform:none}}.oma-asiointi-block .new-message{background-color:var(--color-alert);display:inline-block;font-weight:500;padding:var(--spacing-2-xs);text-transform:uppercase}.oma-asiointi-block .new-messages-length{background-color:var(--color-black-20);border-radius:50%;display:inline-block;font-size:var(--fontsize-heading-s);height:30px;line-height:30px;margin-left:var(--spacing-m);position:relative;text-align:center;width:30px}.oma-asiointi-block .new-messages-length.has-new-messages{background-color:var(--color-alert)}@media(min-width: 768px){.oma-asiointi-block .content{display:grid;grid-gap:var(--spacing-s);grid-template-columns:1fr 1fr}}.oma-asiointi-block .submission,.oma-asiointi-block .message{background-color:var(--color-white);margin-bottom:var(--spacing-s);margin-top:var(--spacing-s);padding:var(--spacing-m)}.oma-asiointi-block .submission .submission-title,.oma-asiointi-block .submission .message-title,.oma-asiointi-block .message .submission-title,.oma-asiointi-block .message .message-title{font-size:var(--fontsize-heading-s);font-weight:500;margin-bottom:var(--spacing-2-xs);margin-top:0;text-decoration:underline}.oma-asiointi-block .submission .message-title,.oma-asiointi-block .message .message-title{margin-top:var(--spacing-s)}.oma-asiointi-block .submission:hover .submission-title,.oma-asiointi-block .submission:hover .message-title,.oma-asiointi-block .message:hover .submission-title,.oma-asiointi-block .message:hover .message-title{text-decoration:none}.oma-asiointi-block .message{padding-right:var(--spacing-5-xl)}.oma-asiointi{margin-top:var(--spacing-l)}.oma-asiointi ul{padding:0}.oma-asiointi__list{padding-bottom:var(--spacing-l);padding-top:var(--spacing-l)}.oma-asiointi__list h2{margin-bottom:var(--spacing-m);margin-top:0}.oma-asiointi #oma-asiointi__sent{padding-top:var(--spacing-s)}.oma-asiointi .oma-asiointi-infoboxes-container .oma-asiointi-infoboxes{gap:var(--spacing-3-xl);margin:var(--spacing-2-xl) 0}@media(min-width: 768px){.oma-asiointi .oma-asiointi-infoboxes-container .oma-asiointi-infoboxes{display:flex}}.oma-asiointi .oma-asiointi-infoboxes-container .oma-asiointi-infobox{background-color:var(--color-info-light);flex:1;margin-bottom:var(--spacing-layout-2-xs);padding:var(--spacing-l)}@media(min-width: 768px){.oma-asiointi .oma-asiointi-infoboxes-container .oma-asiointi-infobox{margin-bottom:0}}.oma-asiointi .oma-asiointi-infoboxes-container .oma-asiointi-infobox:last-of-type{margin-bottom:0}.oma-asiointi .oma-asiointi-infoboxes-container .oma-asiointi-infobox--link{display:flex;margin-top:var(--spacing-layout-2-xs)}.oma-asiointi .oma-asiointi-infoboxes-container .oma-asiointi-infobox--link a{font-size:1.25rem}.oma-asiointi .oma-asiointi-infoboxes-container .oma-asiointi-infobox h3{margin-top:0}.asiointirooli-block{background-color:var(--color-black);color:var(--color-white);font-weight:500;margin-bottom:16px;padding:var(--spacing-2-xs)}.asiointirooli-block a{color:var(--color-white)}.asiointirooli-block .link--switch-role,.asiointirooli-block .link--stop-mandate{color:var(--color-white);margin-left:var(--spacing-layout-s)}@media(max-width: 768px){.asiointirooli-block .link--switch-role,.asiointirooli-block .link--stop-mandate{display:block;margin-left:0}}.asiointirooli-block .link--stop-mandate::before{--icon-size: 1.5rem;background-color:#000;background-size:contain;content:"";display:inline-block;height:calc(var(--line-height) * 1em);height:var(--icon-size, calc(var(--line-height) * 1em));-webkit-mask-image:var(--hel-icon--cross-circle-fill);mask-image:var(--hel-icon--cross-circle-fill);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);-webkit-mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));vertical-align:bottom;width:calc(var(--line-height) * 1em);width:var(--icon-size, calc(var(--line-height) * 1em));background-color:var(--color-white);content:"";display:inline-block;margin-right:10px;-webkit-mask-image:url('data:image/svg+xml, ');mask-image:url('data:image/svg+xml, ')}.asiointirooli-block .link--switch-role::before{--icon-size: 1.5rem;background-color:#000;background-size:contain;content:"";display:inline-block;height:calc(var(--line-height) * 1em);height:var(--icon-size, calc(var(--line-height) * 1em));-webkit-mask-image:var(--hel-icon--swap-user);mask-image:var(--hel-icon--swap-user);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);-webkit-mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));vertical-align:bottom;width:calc(var(--line-height) * 1em);width:var(--icon-size, calc(var(--line-height) * 1em));background-color:var(--color-white);content:"";display:inline-block;margin-right:10px;-webkit-mask-image:url('data:image/svg+xml, ');mask-image:url('data:image/svg+xml, ')}#grants-mandate-type .form-actions{display:flex;flex-direction:column;flex-wrap:wrap;justify-content:flex-start;width:100%}@media(min-width: 576px){#grants-mandate-type .form-actions{flex-direction:row;margin-left:calc(-1*var(--spacing-m));width:calc(100% + var(--spacing-m))}}#grants-mandate-type .form-actions .hds-card--applicant-role{margin-bottom:var(--spacing-l);position:relative;width:100%}@media(min-width: 576px){#grants-mandate-type .form-actions .hds-card--applicant-role{margin-left:var(--spacing-m);width:calc(50% - var(--spacing-m))}}@media(min-width: 992px){#grants-mandate-type .form-actions .hds-card--applicant-role{width:calc(33.3333333333% - var(--spacing-m))}}#grants-mandate-type .form-actions .hds-card--applicant-role .hds-card__body{align-content:space-between;height:100%}#grants-mandate-type .form-actions .hds-card--applicant-role .hds-card--mandate-card-content{display:grid;gap:var(--spacing-m);grid-gap:var(--spacing-m)} +body{--webform-element-width--input-small: 184px;--webform-element-width--input-medium: 332px;--webform-element-width--input-large: 591px;--webform-element-width--fieldset: 714px}.hel-icon--size-xs,.hds-icon--size-xs{height:16px;width:16px}.hel-icon--size-s,.hds-icon--size-s{height:24px;width:24px}.hel-icon--size-m,.hds-icon--size-m{height:32px;width:32px}.hel-icon--size-l,.hds-icon--size-l{height:48px;width:48px}.hel-icon--size-xl,.hds-icon--size-xl{height:64px;width:64px}.hel-icon.hel-icon--pen-line{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,");mask-image:url("data:image/svg+xml;charset=utf-8,")}.hel-icon.hds-icon--company{background:var(--color-black);-webkit-mask-image:url("data:image/svg+xml;charset=utf-8, ");mask-image:url("data:image/svg+xml;charset=utf-8, ")}.hds-button--secondary:not(.eu-cookie-compliance-default-button):not(.eu-cookie-compliance-save-preferences-button){--background-color: transparent;--background-color-hover: var(--color-black-80);--background-color-focus: transparent;--background-color-hover-focus: var(--color-black-80);--background-color-disabled: transparent;--color: var(--color-black);--color-hover: var(--color-white);--color-focus: var(--color-black);--color-hover-focus: var(--color-black);--color-disabled: var(--color-black-40)}.hds-button--secondary:not(:disabled):not(.eu-cookie-compliance-default-button):not(.eu-cookie-compliance-save-preferences-button),.hds-button--primary:not(:disabled){border-color:transparent;border-color:var(--color-black, transparent)}.hds-button.hds-button--supplementary .hds-button__label{margin:0;padding:0 var(--spacing-2-xs)}.hds-button.hds-button--supplementary::after,.hds-button.hds-button--supplementary::before{display:none !important}.hds-button--supplementary:not(:disabled){--background-color-hover: rgba(0, 0, 0, 0.1);background:rgba(0,0,0,0);border-color:rgba(0,0,0,0)}.hds-button--supplementary:not(:disabled):hover{background-color:var(--background-color-hover)}.hds-button--alert{--background-color: rgb(255, 0, 0)}a.hds-button.webform-button--delete-draft:not(:disabled){text-decoration:none}a.hds-button.webform-button--delete-draft:not(:disabled) .hds-button__label_wrapper{display:inline}a.hds-button.webform-button--delete-draft:not(:disabled) .hds-button__label{text-decoration:underline}a.hds-button.webform-button--delete-draft:not(:disabled):hover .hds-button__label{text-decoration:none}.openid-connect-login-form input[type=submit].hds-button{width:220px}.hds-button__label_wrapper{align-items:center;display:flex}.hds-button__label_wrapper:not(.hds-button)>.hds-button__label{margin:0 var(--spacing-2-xs)}.hds-link{--link-visited-color: var(--color-black);--link-color: var(--color-black)}.hds-card{--background-color: var(--color-white);--border-color: var(--color-black-90);--color: var(--color-black-90);--border-width: 2px;--padding-horizontal: var(--spacing-l);--padding-vertical: var(--spacing-m);background-color:var(--background-color);color:var(--color);padding:var(--padding-vertical) var(--padding-horizontal)}.hds-card--border{border:var(--border-width) solid var(--border-color)}.hds-card__body{display:grid;grid-gap:var(--spacing-m);gap:var(--spacing-m);margin-bottom:var(--spacing-l)}.hds-card__body:last-child{margin-bottom:0}.hds-card__heading{font-size:var(--fontsize-heading-m);font-weight:bold;line-height:var(--lineheight-m)}.hds-card__text{font-size:var(--fontsize-body-m);line-height:var(--lineheight-l)}.hds-card--applicant-role{margin-bottom:var(--spacing-l);margin-right:0;max-width:400px;width:100%}.hds-card__heading-m{font-size:var(--fontsize-heading-m);font-weight:500;letter-spacing:-0.2px;line-height:32px;margin-top:0}.grants-profile--menuitem--login,.grants-profile--menuitem--logout{align-items:center;display:flex;flex-flow:column;font-size:var(--fontsize-body-s);height:var(--spacing-xl);margin-left:var(--spacing-2-xs);margin-right:var(--spacing-2-xs);position:relative;text-align:center;width:var(--spacing-xl)}.grants-profile--menuitem--login .hel-icon,.grants-profile--menuitem--logout .hel-icon{display:block;margin:auto}.grants-profile--menuitem--login-triggertext,.grants-profile--menuitem--logout-triggertext{clip:rect(1px, 1px, 1px, 1px);clip-path:inset(50%);display:block;max-height:1px;max-width:1px;opacity:0;overflow:hidden;position:absolute;white-space:nowrap}.block--grants-profile--menuitem{align-items:center;display:flex;grid-area:brand;z-index:2}.block--branding{flex-grow:10}.grants-frontpage-info-block{margin-bottom:var(--spacing-layout-xl)}.grants-profile--menuitem{height:var(--spacing-m);margin-left:var(--spacing-2-xs);margin-right:var(--spacing-2-xs);position:relative;width:var(--spacing-m)}@media(min-width: 768px){.grants-profile--menuitem{height:var(--spacing-2-xl);width:var(--spacing-2-xl)}}.grants-profile--menuitem a{text-decoration:none}.grants-profile--menuitem--notifications{background-color:var(--color-error);border:2px var(--color-white) solid;border-radius:50%;color:var(--color-white);font-size:var(--fontsize-body-s);font-weight:bold;height:var(--spacing-xs) 1.25;line-height:var(--spacing-layout-2-xs);position:absolute;right:-5px;text-align:center;top:-5px;width:var(--spacing-xs) 1.25;z-index:2}.grants-profile--menuitem--initials{border-radius:50%;font-weight:bold;height:var(--spacing-m);line-height:var(--spacing-m);text-align:center;vertical-align:middle;width:var(--spacing-m)}@media(min-width: 768px){.grants-profile--menuitem--initials{height:var(--spacing-2-xl);line-height:var(--spacing-2-xl);width:var(--spacing-2-xl)}}.grants-profile--menuitem--initials:hover,.grants-profile--menuitem--initials:active,.grants-profile--menuitem--initials:focus{text-decoration:underline}.grants-profile--menuitem--initials-colorscheme-2{background-color:var(--color-bus);color:var(--color-white)}.grants-profile--menuitem--initials-colorscheme-1{background-color:var(--color-engel);color:var(--color-black)}.grants-profile--menuitem--initials-colorscheme-0{background-color:var(--color-tram);color:var(--color-white)}.sidebar-important-links{margin-top:var(--spacing-2-xl)}.sidebar-important-links .sidebar-text .sidebar-text__text-content>p{padding:var(--spacing-s) var(--spacing-m)}.block--service-page-banner{background-color:var(--color-engel);margin-top:var(--spacing-layout-s);padding:var(--spacing-layout-s)}.block--service-page-banner h2{margin-top:0}.block--service-page-banner .hds-icon{margin-bottom:var(--spacing-layout-s)}.hds-button.service-page-sidebar-link{background-color:var(--hdbt-color-palette--secondary);padding:var(--spacing-xs)}.hds-button.service-page-sidebar-link:hover{color:var(--color-black)}.terms_block{padding-bottom:var(--spacing-4-xl)}#block-servicepageauthblock h2,#block-servicepageanonblock h2{--line-height: 1.3;font-size:1.25rem;font-weight:500;line-height:var(--line-height)}@media(min-width: 992px){#block-servicepageauthblock h2,#block-servicepageanonblock h2{--line-height: 1.1666666667;font-size:1.5rem;font-weight:500}}#block-servicepageauthblock .hds-button,#block-servicepageanonblock .hds-button{margin-top:var(--spacing-m)}.grants-service-page-block{background-color:var(--color-alert-light);margin-top:var(--spacing-m);padding:var(--spacing-m)}.grants-service-page-block h3{font-size:var(--fontsize-heading-s);margin-top:0}.grants-service-page-block .hel-icon{vertical-align:text-bottom}.grants-service-page-block--auth{background-color:var(--color-info-light)}.hel-icon.hel-icon--swap-user{-webkit-mask-image:url('data:image/svg+xml, ');mask-image:url('data:image/svg+xml, ')}.nav-toggle-dropdown--profile .profile__information{background-color:var(--color-silver-light)}.nav-toggle-dropdown--profile .profile__full-name{font-weight:bold}.nav-toggle-dropdown--profile .grants-profile--menuitem--mandate,.nav-toggle-dropdown--profile .grants-profile--menuitem--switch-role{--line-height: 1.5555555556;font-size:1.125rem;font-weight:400;line-height:var(--line-height);border-top:1px solid #ccc;border-bottom:1px solid #ccc;display:block;font-weight:normal;padding:16px;text-decoration:none;width:100%}@media(min-width: 992px){.nav-toggle-dropdown--profile .grants-profile--menuitem--mandate,.nav-toggle-dropdown--profile .grants-profile--menuitem--switch-role{border-bottom:none}}.nav-toggle-dropdown--profile .grants-profile--menuitem--mandate:hover,.nav-toggle-dropdown--profile .grants-profile--menuitem--switch-role:hover{text-decoration:underline}.nav-toggle-dropdown--profile .grants-profile--menuitem--mandate:focus,.nav-toggle-dropdown--profile .grants-profile--menuitem--switch-role:focus{outline:3px solid #000;outline-offset:-3px}.application-timeout-message{display:none;padding-left:16px;padding-left:var(--spacing-s, 16px);position:fixed;right:0;top:50%;z-index:100}.application-timeout-message.slide-in{animation:slide-in-right .5s forwards ease;display:block}.application-timeout-message .close-application-timeout-message{cursor:pointer;font-size:1.25rem;position:absolute;right:1.25rem}@keyframes slide-in-right{from{right:-500px}to{right:1.25rem}}.ui-widget-overlay{z-index:99}.ui-dialog .ui-button:hover{border-width:2px}.ui-dialog .ui-dialog-titlebar-close{top:var(--spacing-s);z-index:1001}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:left}.ui-dialog .ui-dialog-buttonpane{padding:var(--spacing-2-xs) var(--spacing-m)}.ui-dialog .ui-dialog-buttonpane button{margin:0 var(--spacing-xs) 0 0}.ui-dialog .ui-dialog-content{padding:0 1em 1em;position:static;position:initial}.ui-dialog div.ui-dialog-titlebar{padding:0}.ui-dialog-titlebar{background:rgba(0,0,0,0);border:0}.ui-dialog-titlebar-close{background:none;border:none}.ui-dialog-titlebar .ui-dialog-title{display:block;font-size:var(--fontsize-heading-s);overflow:auto;padding:var(--spacing-layout-2-xs) var(--spacing-layout-2-xs) var(--spacing-layout-2-xs) var(--spacing-2-xl);position:relative;white-space:normal}.ui-dialog-title .hel-icon{left:var(--spacing-m);margin-right:var(--spacing-2-xs);position:absolute;top:var(--spacing-s)}.ui-widget-content{border:0 rgba(0,0,0,0) solid}.ui-widget-content h3{margin-top:0}div.ui-widget.ui-widget-content{border-top:var(--spacing-2-xs) solid var(--color-black);max-width:100vw;min-width:300px;padding-top:0}.ui-widget-content span.ui-icon{margin-left:-8px;margin-top:-8px;-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg role='img' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E %3Cg fill='none' fill-rule='evenodd'%3E %3Crect width='24' height='24'/%3E %3Cpolygon fill='currentColor' points='18 7.5 13.5 12 18 16.5 16.5 18 12 13.5 7.5 18 6 16.5 10.5 12 6 7.5 7.5 6 12 10.5 16.5 6'/%3E %3C/g%3E %3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg role='img' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E %3Cg fill='none' fill-rule='evenodd'%3E %3Crect width='24' height='24'/%3E %3Cpolygon fill='currentColor' points='18 7.5 13.5 12 18 16.5 16.5 18 12 13.5 7.5 18 6 16.5 10.5 12 6 7.5 7.5 6 12 10.5 16.5 6'/%3E %3C/g%3E %3C/svg%3E");transform:scale(1.5)}.submission-for-copying{margin-bottom:1em;margin-top:1em}.view_application_search_search_api .main-content{margin-top:0}.view_application_search_search_api .search-result-amount--wrapper{align-items:center;display:flex}.view_application_search_search_api .search-result-amount--wrapper p{margin-top:0}.view_application_search_search_api select.search-result-amount{border:1px solid var(--color-black-50);margin-left:var(--spacing-l);margin-right:var(--spacing-2-xs)}.view_application_search_search_api .search-filter-button{background-color:var(--color-black);border-radius:180px;border:0;color:var(--color-white);display:inline-block;margin:0 var(--spacing-2-xs) var(--spacing-2-xs) 0;padding:var(--spacing-2-xs) var(--spacing-xs)}.view_application_search_search_api .search-filter-button:focus{--focus-outline-color: #000000;box-shadow:none;outline:3px solid var(--focus-outline-color);outline:var(--outline-width, 3px) solid var(--focus-outline-color);outline-offset:2px;outline-offset:var(--outline-gutter, 2px)}.view_application_search_search_api .search-filter-button span{vertical-align:middle}.view_application_search_search_api .search-filter-button span.hel-icon:hover{cursor:pointer}.view-application-search-search-api .main-content{margin-top:var(--spacing-layout-s)}.view-application-search-search-api .main-content .view-header{align-items:center;display:flex;margin-bottom:var(--spacing-layout-s)}.application_search--link{display:block;height:100%;padding-bottom:var(--spacing-m);position:relative;text-decoration:none}.application_search--link::after{--icon-size: 1.5rem;background-color:#000;background-size:contain;content:"";display:inline-block;height:calc(var(--line-height) * 1em);height:var(--icon-size, calc(var(--line-height) * 1em));-webkit-mask-image:var(--hel-icon--arrow-right);mask-image:var(--hel-icon--arrow-right);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);-webkit-mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));vertical-align:bottom;width:calc(var(--line-height) * 1em);width:var(--icon-size, calc(var(--line-height) * 1em));transition:transform .2s linear;bottom:var(--spacing-s);content:"";display:block;flex-shrink:0;left:var(--spacing-m);margin-left:-4px;margin-top:8px;position:absolute}@media(prefers-reduced-motion){.application_search--link::after{transition:none}}@media(min-width: 576px){.application_search--link::after{--icon-size: 3rem;margin-left:-8px;margin-top:16px}}.application_search--link:focus h3,.application_search--link:hover h3{text-decoration:none}.application_search--link:focus::after,.application_search--link:hover::after{transform:translateX(8px)}@media(prefers-reduced-motion){.application_search--link:focus::after,.application_search--link:hover::after{transform:none}}.application_search--filter-wrapper{background:var(--color-black-5)}.application_search--filter-wrapper h2{font-size:var(--fontsize-heading-m);margin-bottom:var(--spacing-layout-s);margin-top:var(--spacing-layout-s)}.application_search--filter-wrapper form{align-items:center;border-bottom:2px solid var(--color-black-20);display:flex;flex-flow:row wrap;gap:var(--spacing-s);justify-content:space-between;margin-bottom:var(--spacing-layout-s);padding-bottom:var(--spacing-layout-s)}.application_search--filter-wrapper form .form-item{margin-bottom:0;min-width:-moz-fit-content;min-width:fit-content;width:calc((100% - var(--spacing-s) - var(--spacing-s))/3)}.application_search--filter-wrapper form .form-item label{color:var(--label-color-default);font-size:var(--fontsize-body-m);font-weight:500;margin-bottom:var(--spacing-3-xs)}.application_search--filter-wrapper form .form-item .grant-applications--select-wrapper{min-width:100%;width:100%}.application_search--filter-wrapper form .hds-text-input:first-child{max-width:none;width:100%}.application_search--filter-wrapper form .hds-text-input:first-child input{width:100%}.application_search--filter-wrapper form .form-actions{align-items:center;display:flex;gap:16px;order:6;padding-top:var(--spacing-m);width:100%}@media(min-width: 768px){.application_search--filter-wrapper form .form-actions{width:17%}}.application_search--filter-wrapper form .form-actions input{min-width:250px;width:100%}.application_search--filter-wrapper form .form-item-items-per-page{display:none}.application_search--filter-wrapper form .form-item-kohderyhma{order:1}.application_search--filter-wrapper form .form-item-avustuslaji{order:2}.application_search--filter-wrapper form .form-item-hakija{order:3}.application_search--filter-wrapper form .form-item-search{max-width:100%;order:4;width:50%}.application_search--filter-wrapper form .form-item-application-open{page-break-before:left;-moz-column-break-before:left;break-before:left;display:block;margin-top:var(--spacing-m);order:5;width:30%}.application_search--filter-wrapper form [data-drupal-selector=edit-reset]{background-color:rgba(0,0,0,0);border:0;color:var(--color-black)}.application_search--filter-wrapper .hds-koros svg pattern{color:var(--color-black-5)}.application_search--filter-wrapper .hero .hero__container{padding-bottom:var(--spacing-m)}.application_search--filters{padding-bottom:var(--spacing-layout-m);padding-top:0}.application_search--rows{display:flex;flex-direction:column;flex-wrap:wrap;justify-content:flex-start;width:100%}@media(min-width: 576px){.application_search--rows{flex-direction:row;margin-left:calc(-1*var(--spacing-m));width:calc(100% + var(--spacing-m))}}.application_search--row{box-shadow:1px 2px 4px 0 rgba(0,0,0,.5);margin-bottom:var(--spacing-l);position:relative;width:100%}@media(min-width: 576px){.application_search--row{margin-left:var(--spacing-m);width:calc(50% - var(--spacing-m))}}@media(min-width: 992px){.application_search--row{width:calc(33.3333333333% - var(--spacing-m))}}.application_search--row h3{font-size:var(--fontsize-heading-m);margin-top:var(--spacing-xs)}.application_search--row .views-field-search-api-excerpt{height:auto;overflow:auto;word-break:normal}.application_search--row .views-field{padding:var(--spacing-xs) var(--spacing-m)}.application_search--row .views-field-field-target-group{padding:0}.application_search--row .views-field-field-avustuslaji{padding:var(--spacing-xs) var(--spacing-m) var(--spacing-layout-m) var(--spacing-m)}.application_search--row .views-field-field-avustuslaji .tag_avustuslaji{background:var(--color-black);border-radius:var(--spacing-m);color:var(--color-white);display:inline-block;margin-bottom:var(--spacing-2-xs);padding:var(--spacing-3-xs) var(--spacing-xs)}.application_search--row .views-field-field-application-period .field-content{align-items:center;display:flex;gap:var(--spacing-s);position:relative}.application_search--row .views-field-field-application-period .field-content span{display:block}.application_search--row .tag_target_group{background:var(--color-black-20);color:var(--color-black);font-size:var(--fontsize-body-s);font-weight:bold;padding:var(--spacing-m);text-align:center;text-transform:uppercase;width:100%}.application_search--row .tag_target_group_12{background:var(--color-brick-medium-light)}.application_search--row .tag_target_group_20{background:var(--color-copper)}.application_search--row .tag_target_group_21{background:var(--color-metro-medium-light)}.application_search--row .tag_target_group_22{background:var(--color-suomenlinna-medium-light)}.application_search--row .tag_target_group_23{background:var(--color-engel)}.application_search--row .tag_target_group_24{background:var(--color-bus-medium-light)}.application_search--row .tag_target_group_25{background:var(--color-coat-of-arms-medium-light)}.application_search--row .tag_target_group_26{background:var(--color-gold-medium-light)}.application_search--row .tag_target_group_27{background:var(--color-tram-medium-light)}.application_search--row .tag_target_group_28{background:var(--color-summer-light)}.application_search--row .tag_target_group_29{background:var(--color-fog)}.application_search--row .tag_target_group_30{background:var(--color-copper-light)}.application_search--row .tag_target_group_31{background:var(--color-gold)}.view-ukk .view-filters{display:none}.view-ukk .ukk_categories{display:block;margin:var(--spacing-xl) 0;padding:0}.view-ukk .ukk_categories li{display:inline-block;list-style:none;margin:var(--spacing-m) var(--spacing-s) 0 0;padding:0}.view-ukk .hero .hero__text-content{max-width:100%}.view-ukk #edit-field-category-target-id{display:flex}.view-ukk #edit-field-category-target-id .hds-radio-button:first-of-type{margin-top:var(--spacing-2-xs)}.view-ukk #edit-field-category-target-id .hds-radio-button .hds-radio-button__input:checked+.hds-radio-button__label{background:var(--color-black);border-radius:var(--spacing-m);color:var(--color-white);padding:var(--spacing-2-xs) var(--spacing-s)}.view-ukk #edit-field-category-target-id .hds-radio-button__label{padding:var(--spacing-2-xs) var(--spacing-s)}.view-ukk #edit-field-category-target-id .hds-radio-button__label::before,.view-ukk #edit-field-category-target-id .hds-radio-button__label::after{display:none}.view-ukk .views-exposed-form fieldset{margin-bottom:0}.view-ukk .views-exposed-form .form-submit{margin-bottom:var(--spacing-l)}.view-ukk .category{background:var(--color-black);border-radius:var(--spacing-m);color:var(--color-white);display:inline-block;padding:var(--spacing-2-xs) var(--spacing-s);text-decoration:none}.view-ukk .category-unselected{background:var(--color-black-20);color:var(--color-black)}.page--select-applicant-role{background-color:var(--color-black-5)}.page--select-applicant-role body{background-color:var(--color-black-5)}.page--select-applicant-role .layout-main-wrapper{background-color:var(--color-black-5)}.page--select-applicant-role .main-content{margin-top:var(--spacing-l)}.page--select-applicant-role h1{margin-top:var(--spacing-l)}.page--select-applicant-role p{margin-bottom:var(--spacing-m)}.node--type-service .errand-service__channels .service-channel__links a[href^="https://avustukset.hel.fi"]{display:none}.node--type-service .service-channel__info p:first-of-type{margin-top:0}.node--type-service .service-channel--mail{display:none}#block-servicepageauthblock-2,#block-servicepageanonblock-2,#block-grantspreviewlink-2{display:none}@media(max-width: 767.9px){#block-servicepageauthblock-2,#block-servicepageanonblock-2,#block-grantspreviewlink-2{display:block;margin:var(--spacing-s)}}@media(max-width: 991.9px){#block-servicepageauthblock-2,#block-servicepageanonblock-2,#block-grantspreviewlink-2{display:block;margin:var(--spacing-l)}}#block-servicepageauthblock-2>.grants-service-page-block>*,#block-servicepageanonblock-2>.grants-service-page-block>*,#block-grantspreviewlink-2>.grants-service-page-block>*{margin:var(--spacing-2-xs) 0 var(--spacing-2-xs) var(--spacing-2-xs)}@media(max-width: 991.9px){#block-servicepageauthblock-2 .node--type-service a.hds-button[href*=uusi-hakemus],#block-servicepageanonblock-2 .node--type-service a.hds-button[href*=uusi-hakemus],#block-grantspreviewlink-2 .node--type-service a.hds-button[href*=uusi-hakemus]{display:none}}.user-login__text-container{background:var(--color-white);max-width:500px;padding:var(--spacing-m)}.user-login__text-container p:first-of-type{margin-top:0}.tabs{--tablist-border-color: var(--color-black-20);--tablist-border-size: 1px;--tab-color: var(--color-black);--tab-font-size: var(--fontsize-body-m);--tab-height: 48px;--tab-min-width: 148px;--tab-spacing: var(--spacing-s);--tab-active-border-size: 5px;--tab-active-border-color: var(--color-black);--tab-focus-outline-size: 2px;--tab-focus-outline-color: var(--color-coat-of-arms);display:flex;flex-flow:row wrap}.tabs--tablist{box-sizing:border-box;flex-grow:1;margin-bottom:-1px;overflow-x:hidden;position:relative;width:100%}.tabs--content-wrapper{width:100%}.tabs--content-wrapper .container{padding-top:1px}.tabs [role=tablist]{box-sizing:border-box;list-style:none;margin:0;padding:var(--tab-focus-outline-size) 0;white-space:nowrap}.tabs [role=tab]{background:rgba(0,0,0,0);border:0;cursor:pointer;display:inline-block;margin:0;outline:none;padding:0}.tabs [role=tab] span{align-items:center;box-sizing:border-box;color:var(--tab-color);display:flex;font-size:var(--tab-font-size);height:var(--tab-height);justify-content:center;margin:0;min-width:var(--tab-min-width);padding:0 var(--tab-spacing);pointer-events:none;position:relative}.tabs [role=tab] span::before{background:var(--tablist-border-color);bottom:0;content:"";height:var(--tablist-border-size);position:absolute;width:100%;z-index:100}.tabs [role=tab] span:hover::before,.tabs [role=tab] span:focus::before,.tabs [role=tab][aria-selected=true] span::before{background-color:var(--tab-active-border-color);bottom:0;content:"";height:var(--tab-active-border-size);position:absolute;width:100%;z-index:100}.tabs [role=tabpanel].is-hidden{display:none}.node--form-page .list-of-links{margin-left:0;margin-top:0;width:100%}@media(min-width: 768px){.node--form-page .list-of-links{margin-top:0}}.node--form-page .list-of-links>.container{padding-top:0}.node--form-page .list-of-links .list-of-links__title{border-top:2px solid var(--color-black-20);margin:0 0 var(--spacing-layout-xl)}@media(min-width: 576px){.node--form-page .list-of-links .list-of-links__container{width:calc(100% - var(--spacing-layout-xl))}}@media(min-width: 768px){.node--form-page .list-of-links .list-of-links__container{width:100%}}.node--form-page .list-of-links .list-of-links__content{height:auto;margin-top:0}@media(min-width: 768px){.node--form-page .list-of-links .list-of-links__content{display:grid;grid-template-columns:auto auto auto;margin:0 var(--spacing-m) 0 0}}.node--form-page .list-of-links .list-of-links__item{align-self:stretch;border-left:4px solid var(--color-copper);margin-right:-4px;padding-left:var(--spacing-m);padding-right:var(--spacing-m)}.list-of-links--without-image .list-of-links__item .list-of-links__item__desc{color:var(--color-black-90);font-size:var(--fontsize-body-m)}.list-of-links--without-image .list-of-links__item .list-of-links__item__title{font-size:var(--fontsize-heading-m)}.js-form-type-webform-custom-composite{--border-width: 2px;--outline-width: 3px;--input-height: 56px;--textarea-height: 149px;--icon-size: var(--spacing-m);--helper-color-default: var(--color-black-60);--helper-color-invalid: var(--color-error);--icon-color-invalid: var(--color-error);--input-background-default: var(--color-white);--input-background-disabled: var(--color-black-10);--input-border-color-default: var(--color-black-50);--input-border-color-hover: var(--color-black-90);--input-border-color-focus: var(--color-black-90);--input-border-color-invalid: var(--color-error);--input-border-color-disabled: var(--color-black-10);--input-color-default: var(--color-black-90);--input-color-disabled: var(--color-black-40);--label-color-default: var(--color-black-90);--label-color-invalid: var(--color-black-90);--placeholder-color: var(--color-black-60);--focus-outline-color: var(--color-coat-of-arms)}.js-form-type-webform-custom-composite a.tabledrag-handle .handle{height:24px;width:24px}.js-form-type-webform-custom-composite input.form-number{background-color:var(--input-background-default);border:var(--border-width) solid var(--input-border-color-default);box-sizing:border-box;color:var(--input-color-default);font-size:1.125em;height:var(--input-height);line-height:normal;padding:0 var(--spacing-s);width:100%}.js-form-type-webform-custom-composite table{border-collapse:collapse;border-spacing:0;margin-bottom:var(--spacing-m)}.js-form-type-webform-custom-composite table td{border-bottom:2px var(--color-black-20) solid;border-top:2px var(--color-black-20) solid;padding-left:var(--spacing-m);padding-top:var(--spacing-m)}@media(max-width: 768px){.js-form-type-webform-custom-composite table td{border:2px var(--color-black-20) solid}}.js-form-type-webform-custom-composite table td.webform-multiple-table--operations{border-bottom:2px var(--color-black-20) solid;border-top:2px var(--color-black-20) solid;padding-left:var(--spacing-m);padding-top:var(--spacing-m)}@media(max-width: 768px){.js-form-type-webform-custom-composite table td.webform-multiple-table--operations{background:var(--color-white);border:2px var(--color-black-20) solid;padding:10px 5px 5px}}.js-form-type-webform-custom-composite table td:first-child{border-left:2px var(--color-black-20) solid}.js-form-type-webform-custom-composite table td:last-child{border-right:2px var(--color-black-20) solid;padding:var(--spacing-s)}@media(min-width: 768px){.js-form-type-webform-custom-composite table td:last-child{min-width:400px;padding:var(--spacing-s) var(--spacing-m)}}div.ui-widget.ui-datepicker{padding:var(--spacing-2-xs)}div.ui-widget.ui-datepicker .ui-datepicker-header span.ui-icon{margin-left:-8px;margin-top:-8px;-webkit-mask-image:none;mask-image:none;transform:none}div.ui-widget.ui-datepicker .ui-datepicker-calendar{border:0;display:table;margin:0;max-width:100%}div.ui-widget.ui-datepicker .ui-datepicker-calendar th,div.ui-widget.ui-datepicker .ui-datepicker-calendar td{min-width:auto}details.accordion{--background-color: var(--color-white);--border-color: var(--color-black-60);--padding-horizontal: var(--spacing-m);--padding-vertical: var(--spacing-m);--header-font-color: var(--color-black-90);--header-font-size: var(--fontsize-heading-m);--header-line-height: var(--lineheight-m);--button-size: 28px;--header-focus-outline-color: var(--color-coat-of-arms);--content-font-color: var(--color-black-90);--content-font-size: var(--fontsize-body-m);--content-line-height: var(--lineheight-l);border-bottom:1px solid var(--border-color)}details.accordion .accordion_content{padding-bottom:var(--padding-vertical)}details.accordion[open] .accordion_heading_container span.hel-icon{transform:rotate(180deg)}.accordion_header{align-items:center;color:var(--header-font-color);display:flex;font-size:var(--header-font-size);font-weight:700;justify-content:space-between;line-height:var(--header-line-height);list-style:none;padding-bottom:var(--padding-vertical);padding-top:var(--padding-vertical);position:relative}.accordion_heading_container{align-items:center;box-sizing:border-box;cursor:pointer;display:grid;grid-template-columns:auto calc(var(--button-size));width:100%}.accordion_heading_container span.hel-icon{height:var(--button-size) !important;width:var(--button-size) !important}.accordion_heading_container span.hel-icon{border:2px solid rgba(0,0,0,0);box-sizing:border-box;margin:auto}.webform-element-description{--helper-color-default: var(--color-black-60);color:var(--helper-color-default);display:block;font-size:var(--fontsize-body-m);line-height:var(--lineheight-l);margin-top:var(--spacing-s)}.webform-element-help{background:var(--color-white);border:2px solid rgba(0,0,0,0);color:var(--hdbt-color-black);height:var(--spacing-layout-xs);margin-right:4px;padding:0;position:absolute;right:0;top:-3px;width:var(--spacing-layout-xs);z-index:10}div[data-tippy-root]{width:350px}.tippy-box{background-color:var(--color-black-5);border-left:var(--spacing-xs) var(--color-coat-of-arms) solid;border-radius:0;color:var(--hdbt-color-black);padding:var(--spacing-s)}.tippy-box .webform-element-help--content{white-space:normal}.tippy-box .webform-element-help--content a:link,.tippy-box .webform-element-help--content a:visited,.tippy-box .webform-element-help--content a:active,.tippy-box .webform-element-help--content a:hover{color:var(--hdbt-color-black)}.tippy-arrow{color:var(--color-black-5)}.webform-element-help--wrapper-short{max-width:-moz-fit-content;max-width:fit-content}.webform-element-help-container--title{--border-width: 2px;--outline-width: 3px;--input-height: 56px;--textarea-height: 149px;--icon-size: var(--spacing-m)}fieldset.grants-fieldset{padding:var(--spacing-s)}@media(min-width: 768px){fieldset.grants-fieldset{min-width:400px;padding:var(--spacing-s) var(--spacing-m)}}fieldset.grants-fieldset .fieldset-wrapper{align-items:flex-end;display:flex;flex-wrap:wrap;gap:0 var(--spacing-layout-2-xs)}fieldset.grants-fieldset .fieldset-wrapper .form-item--error-message{grid-column:1}fieldset.grants-fieldset-short{max-width:var(--webform-element-width--input-large)}fieldset.grants-fieldset-medium{max-width:var(--webform-element-width--fieldset)}fieldset.grants-fieldset-medium .fieldset-wrapper{justify-content:center}fieldset.premises-composite--wrapper.fieldgroup,fieldset.rented-premise-composite--wrapper.fieldgroup,.community_officials_wrapper fieldset.fieldgroup,fieldset.grants-budget-other-cost--wrapper.fieldgroup,fieldset.grants-budget-other-income--wrapper.fieldgroup,fieldset.place-of-operation-composite--wrapper.fieldgroup,fieldset.rent-income-composite--wrapper.fieldgroup,fieldset.rent-cost-composite--wrapper.fieldgroup,fieldset.club-section-composite--wrapper.fieldgroup,fieldset.members-composite--wrapper.fieldgroup,fieldset.orienteering-map-composite--wrapper,.form-item-muu-liite fieldset.grants-attachments--wrapper.fieldgroup{border-width:2px;margin-top:var(--spacing-layout-2-xs);max-width:100%;padding:var(--spacing-s);width:100%}@media(min-width: 768px){fieldset.premises-composite--wrapper.fieldgroup,fieldset.rented-premise-composite--wrapper.fieldgroup,.community_officials_wrapper fieldset.fieldgroup,fieldset.grants-budget-other-cost--wrapper.fieldgroup,fieldset.grants-budget-other-income--wrapper.fieldgroup,fieldset.place-of-operation-composite--wrapper.fieldgroup,fieldset.rent-income-composite--wrapper.fieldgroup,fieldset.rent-cost-composite--wrapper.fieldgroup,fieldset.club-section-composite--wrapper.fieldgroup,fieldset.members-composite--wrapper.fieldgroup,fieldset.orienteering-map-composite--wrapper,.form-item-muu-liite fieldset.grants-attachments--wrapper.fieldgroup{min-width:400px;padding:var(--spacing-s) var(--spacing-m)}}fieldset.premises-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.rented-premise-composite--wrapper.fieldgroup legend>span.visually-hidden,.community_officials_wrapper fieldset.fieldgroup legend>span.visually-hidden,fieldset.grants-budget-other-cost--wrapper.fieldgroup legend>span.visually-hidden,fieldset.grants-budget-other-income--wrapper.fieldgroup legend>span.visually-hidden,fieldset.place-of-operation-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.rent-income-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.rent-cost-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.club-section-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.members-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.orienteering-map-composite--wrapper legend>span.visually-hidden,.form-item-muu-liite fieldset.grants-attachments--wrapper.fieldgroup legend>span.visually-hidden{background:#fff;clip-path:initial;clip:auto;clip:initial;height:auto;margin-left:calc(var(--spacing-2-xs)*-1);left:auto;overflow:visible;padding:0 var(--spacing-2-xs);top:-12px;width:-moz-max-content;width:max-content}fieldset.premises-composite--wrapper.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)],fieldset.rented-premise-composite--wrapper.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)],.community_officials_wrapper fieldset.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)],fieldset.grants-budget-other-cost--wrapper.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)],fieldset.grants-budget-other-income--wrapper.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)],fieldset.place-of-operation-composite--wrapper.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)],fieldset.rent-income-composite--wrapper.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)],fieldset.rent-cost-composite--wrapper.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)],fieldset.club-section-composite--wrapper.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)],fieldset.members-composite--wrapper.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)],fieldset.orienteering-map-composite--wrapper legend>span.visually-hidden[\:has\(button.webform-element-help\)],.form-item-muu-liite fieldset.grants-attachments--wrapper.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)]{padding-right:var(--spacing-xl)}fieldset.premises-composite--wrapper.fieldgroup legend>span.visually-hidden:has(button.webform-element-help),fieldset.rented-premise-composite--wrapper.fieldgroup legend>span.visually-hidden:has(button.webform-element-help),.community_officials_wrapper fieldset.fieldgroup legend>span.visually-hidden:has(button.webform-element-help),fieldset.grants-budget-other-cost--wrapper.fieldgroup legend>span.visually-hidden:has(button.webform-element-help),fieldset.grants-budget-other-income--wrapper.fieldgroup legend>span.visually-hidden:has(button.webform-element-help),fieldset.place-of-operation-composite--wrapper.fieldgroup legend>span.visually-hidden:has(button.webform-element-help),fieldset.rent-income-composite--wrapper.fieldgroup legend>span.visually-hidden:has(button.webform-element-help),fieldset.rent-cost-composite--wrapper.fieldgroup legend>span.visually-hidden:has(button.webform-element-help),fieldset.club-section-composite--wrapper.fieldgroup legend>span.visually-hidden:has(button.webform-element-help),fieldset.members-composite--wrapper.fieldgroup legend>span.visually-hidden:has(button.webform-element-help),fieldset.orienteering-map-composite--wrapper legend>span.visually-hidden:has(button.webform-element-help),.form-item-muu-liite fieldset.grants-attachments--wrapper.fieldgroup legend>span.visually-hidden:has(button.webform-element-help){padding-right:var(--spacing-xl)}@media(min-width: 768px){fieldset.premises-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.rented-premise-composite--wrapper.fieldgroup legend>span.visually-hidden,.community_officials_wrapper fieldset.fieldgroup legend>span.visually-hidden,fieldset.grants-budget-other-cost--wrapper.fieldgroup legend>span.visually-hidden,fieldset.grants-budget-other-income--wrapper.fieldgroup legend>span.visually-hidden,fieldset.place-of-operation-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.rent-income-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.rent-cost-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.club-section-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.members-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.orienteering-map-composite--wrapper legend>span.visually-hidden,.form-item-muu-liite fieldset.grants-attachments--wrapper.fieldgroup legend>span.visually-hidden{left:auto}}.form-item-muu-liite fieldset.grants-attachments--wrapper{margin-bottom:0}fieldset.webform-composite-hidden-title .fieldset-wrapper>.form-item:last-child{margin-bottom:var(--spacing-layout-xs)}.js-form-type-webform-table table{width:100%}.js-form-type-webform-table th{text-align:left}.js-form-type-webform-table td{vertical-align:middle}.js-form-type-webform-table td>div{height:auto;margin-bottom:0}.js-form-type-webform-table td>div label{margin:-1px}.js-form-type-webform-table .hds-text-input label{border:0;clip:rect(0, 0, 0, 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.form-item{margin-bottom:var(--spacing-layout-xs);position:relative}.form-item input[type=date],.form-item input[type=time]{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--input-background-default);border:var(--border-width) solid var(--input-border-color-default);box-sizing:border-box;color:var(--input-color-default);font-size:1.125em;height:var(--input-height);line-height:normal;padding:0 var(--spacing-s);width:100%;will-change:transform,box-shadow}.webform-section{padding-bottom:var(--spacing-layout-2-xs)}.webform-section table:first-of-type{margin-top:0}.form-type-webform-multiple .webform-multiple-table table{max-width:100%;width:100%}@media(min-width: 768px){.form-type-webform-multiple .webform-multiple-table table{width:auto}}.hds-text-input{max-width:-moz-fit-content;max-width:fit-content;width:100%}.webform-section-grid-wrapper{display:grid;grid-template-columns:1fr}@media(min-width: 768px){.webform-section-grid-wrapper{grid-row-gap:var(--spacing-xl);grid-template-columns:1fr 2fr}}.webform-section-grid-wrapper>dt.webform-section-title{color:var(--hdbt-color-black);display:block;flex-shrink:0;font-size:var(--fontsize-heading-s);font-weight:500;-webkit-hyphens:none;hyphens:none;line-height:1;margin-bottom:var(--spacing-3-xs);margin-top:0;padding-right:var(--spacing-2-xl);width:100%}.webform-section-grid-wrapper .webform-section-wrapper{margin-bottom:var(--spacing-layout-xs);padding-left:var(--spacing-2-xl)}@media(min-width: 768px){.webform-section-grid-wrapper .webform-section-wrapper{margin-bottom:0;padding-left:0}}fieldset input[type=button]{margin-top:var(--spacing-m)}.webform-section-wrapper>.description{margin-bottom:var(--spacing-layout-xs)}.grants__page-header{margin-bottom:var(--spacing-layout-l);font-size:2rem}@media(min-width: 768px){.grants__page-header{font-size:3rem}}.webform-section-flex-wrapper{display:flex;flex-flow:row wrap;width:100%;justify-content:left}@media(min-width: 768px){.webform-section-flex-wrapper{flex-flow:row nowrap}.webform-section-flex-wrapper h3+*>*:first-child>label:first-of-type,.webform-section-flex-wrapper h3+*>*:first-child>*:first-child>label:first-of-type{margin-top:var(--spacing-2-xs);padding-top:0}.webform-section-flex-wrapper h3+*>*:first-child>p{line-height:normal;line-height:initial;margin-top:var(--spacing-2-xs)}.webform-section-flex-wrapper h3+*>*:first-child>h4{line-height:normal;line-height:initial;margin-top:var(--spacing-m)}}.webform-section-flex-wrapper .webform-element-help-container--title{position:relative}.webform-section-flex-wrapper>h2.webform-section-title,.webform-section-flex-wrapper>h3.webform-section-title,.webform-section-flex-wrapper>h4.webform-section-title,.webform-section-flex-wrapper>dt.webform-section-title{color:var(--hdbt-color-black);display:block;flex-shrink:0;font-size:24px;font-weight:500;-webkit-hyphens:manual;hyphens:manual;margin-bottom:var(--spacing-3-xs);margin-top:0;padding-right:var(--spacing-2-xl);width:100%}@media(min-width: 768px){.webform-section-flex-wrapper>h2.webform-section-title,.webform-section-flex-wrapper>h3.webform-section-title,.webform-section-flex-wrapper>h4.webform-section-title,.webform-section-flex-wrapper>dt.webform-section-title{font-size:32px;max-width:350px;width:30%}}.webform-section-flex-wrapper h4{font-size:var(--fontsize-heading-m);line-height:38px}.webform-section-flex-wrapper>.webform-section-wrapper{--line-height: 1.5;font-size:var(--fontsize-body-m);width:100%}@media(min-width: 768px){.webform-section-flex-wrapper>.webform-section-wrapper{padding-left:var(--spacing-2-xl)}}.webform-section-flex-wrapper .form-required::after{content:"*";display:inline}.webform-section-flex-wrapper legend,.webform-section-flex-wrapper label{display:block;font-size:var(--fontsize-body-m);font-weight:500;margin-bottom:var(--spacing-2-xs);max-width:-moz-fit-content;max-width:fit-content;position:relative}.webform-section-flex-wrapper legend{padding:0 var(--spacing-2-xs);margin-left:calc(var(--spacing-2-xs)*-1);left:auto}.webform-section-flex-wrapper legend[\:has\(button.webform-element-help\)],.webform-section-flex-wrapper label[\:has\(button.webform-element-help\)]{padding-right:var(--spacing-xl)}.webform-section-flex-wrapper legend:has(button.webform-element-help),.webform-section-flex-wrapper label:has(button.webform-element-help){padding-right:var(--spacing-xl)}.webform-section-flex-wrapper fieldset legend>span[\:has\(button.webform-element-help\)]{padding-right:var(--spacing-xl)}.webform-section-flex-wrapper fieldset legend>span:has(button.webform-element-help){padding-right:var(--spacing-xl)}.webform-section-flex-wrapper fieldset legend>span.fieldset-legend[\:has\(button.webform-element-help\)],.webform-section-flex-wrapper fieldset.fieldgroup legend>span[\:has\(button.webform-element-help\)]:not(.visually-hidden.fieldset-legend){padding-right:var(--spacing-l)}.webform-section-flex-wrapper fieldset legend>span.fieldset-legend:has(button.webform-element-help),.webform-section-flex-wrapper fieldset.fieldgroup legend>span:has(button.webform-element-help):not(.visually-hidden.fieldset-legend){padding-right:var(--spacing-l)}.webform-section-flex-wrapper fieldset legend>span.fieldset-legend[\:has\(button.webform-element-help\)],.webform-section-flex-wrapper fieldset.fieldgroup legend span.fieldset-legend:not(.visually-hidden)[\:has\(button.webform-element-help\)]{padding-right:0}.webform-section-flex-wrapper fieldset legend>span.fieldset-legend:has(button.webform-element-help),.webform-section-flex-wrapper fieldset.fieldgroup legend span.fieldset-legend:not(.visually-hidden):has(button.webform-element-help){padding-right:0}.webform-section-flex-wrapper label.hds-radio-button__label{font-weight:normal}.webform-section-flex-wrapper .checkboxes--wrapper label{font-weight:normal}.webform-section-flex-wrapper .js-form-type-textarea .hds-text-input__input-wrapper{display:block}.webform-section-flex-wrapper .has-error,.webform-section-flex-wrapper .grant-applications--select-wrapper[\:has\(.has-error\)]{border-color:var(--color-error)}.webform-section-flex-wrapper .has-error,.webform-section-flex-wrapper .grant-applications--select-wrapper:has(.has-error){border-color:var(--color-error)}form .hds-text-input__input-wrapper,.hds-text-input__input-wrapper{flex-flow:row wrap}form .hds-text-input__input-wrapper .text-count-wrapper,.hds-text-input__input-wrapper .text-count-wrapper{flex-basis:100%}form .hds-text-input__input-wrapper input.webform--small,form .hds-text-input__input-wrapper textarea.webform--small,.hds-text-input__input-wrapper input.webform--small,.hds-text-input__input-wrapper textarea.webform--small{max-width:var(--webform-element-width--input-small);min-width:var(--webform-element-width--input-small);width:100%}form .hds-text-input__input-wrapper input.webform--medium,form .hds-text-input__input-wrapper textarea.webform--medium,.hds-text-input__input-wrapper input.webform--medium,.hds-text-input__input-wrapper textarea.webform--medium{max-width:var(--webform-element-width--input-medium);min-width:var(--webform-element-width--input-small);width:100%}form .hds-text-input__input-wrapper input.webform--large,form .hds-text-input__input-wrapper textarea.webform--large,.hds-text-input__input-wrapper input.webform--large,.hds-text-input__input-wrapper textarea.webform--large{max-width:var(--webform-element-width--input-large);min-width:var(--webform-element-width--input-small);width:100%}.webform--small div.grant-applications--select-wrapper{max-width:var(--webform-element-width--input-small);min-width:var(--webform-element-width--input-small);width:100%}.webform--medium div.grant-applications--select-wrapper{max-width:var(--webform-element-width--input-medium);min-width:var(--webform-element-width--input-small);width:100%}.webform--large div.grant-applications--select-wrapper{max-width:var(--webform-element-width--input-medium);min-width:var(--webform-element-width--input-small);width:100%}form .hds-checkbox{display:block}form .hds-checkbox label.hds-checkbox__label::after{content:""}fieldset.webform-composite-hidden-title{margin-bottom:var(--spacing-layout-2-xs);margin-top:0}.form-item-bank-account-account-number-select,.form-item-community-address-community-address-select{margin-bottom:0}.grants-profile-grants-profile table thead th h4{margin:0}.hakemus-form-page .main-content{margin-top:0}.hakemus-form-page h1{-webkit-hyphens:auto;hyphens:auto;word-break:break-word}.hakemus-form-errors ul li{list-style-type:none}.community_officials_wrapper .webform-readonly{margin:0}.community_officials_wrapper .hds-text-input__input-wrapper{margin:0}.community_officials_wrapper input[readonly=readonly]{height:1.25rem;margin:0;max-width:330px}.form-item--error-message{color:var(--color-error);margin-bottom:var(--spacing-layout-s);margin-top:var(--spacing-layout-2-xs)}fieldset .form-item--error-message,.community_officials_wrapper .form-item--error-message{margin-bottom:0}.form-item--error-message::before{--icon-size: 1.6rem;background-color:#000;background-size:contain;content:"";display:inline-block;height:calc(var(--line-height) * 1em);height:var(--icon-size, calc(var(--line-height) * 1em));-webkit-mask-image:var(--hel-icon--alert-circle-fill);mask-image:var(--hel-icon--alert-circle-fill);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);-webkit-mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));vertical-align:bottom;width:calc(var(--line-height) * 1em);width:var(--icon-size, calc(var(--line-height) * 1em));background-color:var(--color-error);content:" ";display:inline-block}input[type=radio]+label.form-required::after{content:""}.hds-radio-button:last-of-type,.hds-checkbox:last-of-type{margin-bottom:0}.hds-radio-button:last-of-type>label,.hds-checkbox:last-of-type>label{margin-bottom:0}@media(min-width: 992px){.place-of-operation-composite--wrapper.fieldgroup .hds-text-input,.club-section-composite--wrapper.fieldgroup .hds-text-input{max-width:100%}}.place-of-operation-composite--wrapper.fieldgroup .hds-radio-button .hds-radio-button__label,.club-section-composite--wrapper.fieldgroup .hds-radio-button .hds-radio-button__label{line-height:var(--lineheight-m) !important}@media(min-width: 992px){.place-of-operation-group__location,.place-of-operation-group__students,.place-of-operation-group__groups,.place-of-operation-group__personnel,.place-of-operation-group__rent,.place-of-operation-group__time{display:flex;justify-content:space-between}}@media(min-width: 992px){.place-of-operation-group__location--address,.place-of-operation-group__students--address,.place-of-operation-group__groups--address,.place-of-operation-group__personnel--address,.place-of-operation-group__rent--address,.place-of-operation-group__time--address{margin-top:0 !important}.place-of-operation-group__location--address,.place-of-operation-group__students--address,.place-of-operation-group__groups--address,.place-of-operation-group__personnel--address,.place-of-operation-group__rent--address,.place-of-operation-group__time--address{width:65%}}@media(min-width: 992px){.place-of-operation-group__location--post-code,.place-of-operation-group__students--post-code,.place-of-operation-group__groups--post-code,.place-of-operation-group__personnel--post-code,.place-of-operation-group__rent--post-code,.place-of-operation-group__time--post-code{margin-top:0 !important}.place-of-operation-group__location--post-code,.place-of-operation-group__students--post-code,.place-of-operation-group__groups--post-code,.place-of-operation-group__personnel--post-code,.place-of-operation-group__rent--post-code,.place-of-operation-group__time--post-code{width:30%}}@media(min-width: 992px){.place-of-operation-group__location--student-count,.place-of-operation-group__location--special-student-count,.place-of-operation-group__location--group-count,.place-of-operation-group__location--special-group-count,.place-of-operation-group__location--personnel-count,.place-of-operation-group__location--rent-amount,.place-of-operation-group__location--time-start,.place-of-operation-group__location--time-end,.place-of-operation-group__students--student-count,.place-of-operation-group__students--special-student-count,.place-of-operation-group__students--group-count,.place-of-operation-group__students--special-group-count,.place-of-operation-group__students--personnel-count,.place-of-operation-group__students--rent-amount,.place-of-operation-group__students--time-start,.place-of-operation-group__students--time-end,.place-of-operation-group__groups--student-count,.place-of-operation-group__groups--special-student-count,.place-of-operation-group__groups--group-count,.place-of-operation-group__groups--special-group-count,.place-of-operation-group__groups--personnel-count,.place-of-operation-group__groups--rent-amount,.place-of-operation-group__groups--time-start,.place-of-operation-group__groups--time-end,.place-of-operation-group__personnel--student-count,.place-of-operation-group__personnel--special-student-count,.place-of-operation-group__personnel--group-count,.place-of-operation-group__personnel--special-group-count,.place-of-operation-group__personnel--personnel-count,.place-of-operation-group__personnel--rent-amount,.place-of-operation-group__personnel--time-start,.place-of-operation-group__personnel--time-end,.place-of-operation-group__rent--student-count,.place-of-operation-group__rent--special-student-count,.place-of-operation-group__rent--group-count,.place-of-operation-group__rent--special-group-count,.place-of-operation-group__rent--personnel-count,.place-of-operation-group__rent--rent-amount,.place-of-operation-group__rent--time-start,.place-of-operation-group__rent--time-end,.place-of-operation-group__time--student-count,.place-of-operation-group__time--special-student-count,.place-of-operation-group__time--group-count,.place-of-operation-group__time--special-group-count,.place-of-operation-group__time--personnel-count,.place-of-operation-group__time--rent-amount,.place-of-operation-group__time--time-start,.place-of-operation-group__time--time-end{margin-top:0 !important}.place-of-operation-group__location--student-count,.place-of-operation-group__location--special-student-count,.place-of-operation-group__location--group-count,.place-of-operation-group__location--special-group-count,.place-of-operation-group__location--personnel-count,.place-of-operation-group__location--rent-amount,.place-of-operation-group__location--time-start,.place-of-operation-group__location--time-end,.place-of-operation-group__students--student-count,.place-of-operation-group__students--special-student-count,.place-of-operation-group__students--group-count,.place-of-operation-group__students--special-group-count,.place-of-operation-group__students--personnel-count,.place-of-operation-group__students--rent-amount,.place-of-operation-group__students--time-start,.place-of-operation-group__students--time-end,.place-of-operation-group__groups--student-count,.place-of-operation-group__groups--special-student-count,.place-of-operation-group__groups--group-count,.place-of-operation-group__groups--special-group-count,.place-of-operation-group__groups--personnel-count,.place-of-operation-group__groups--rent-amount,.place-of-operation-group__groups--time-start,.place-of-operation-group__groups--time-end,.place-of-operation-group__personnel--student-count,.place-of-operation-group__personnel--special-student-count,.place-of-operation-group__personnel--group-count,.place-of-operation-group__personnel--special-group-count,.place-of-operation-group__personnel--personnel-count,.place-of-operation-group__personnel--rent-amount,.place-of-operation-group__personnel--time-start,.place-of-operation-group__personnel--time-end,.place-of-operation-group__rent--student-count,.place-of-operation-group__rent--special-student-count,.place-of-operation-group__rent--group-count,.place-of-operation-group__rent--special-group-count,.place-of-operation-group__rent--personnel-count,.place-of-operation-group__rent--rent-amount,.place-of-operation-group__rent--time-start,.place-of-operation-group__rent--time-end,.place-of-operation-group__time--student-count,.place-of-operation-group__time--special-student-count,.place-of-operation-group__time--group-count,.place-of-operation-group__time--special-group-count,.place-of-operation-group__time--personnel-count,.place-of-operation-group__time--rent-amount,.place-of-operation-group__time--time-start,.place-of-operation-group__time--time-end{width:47.5%}}@media(min-width: 768px){.club-section__participants{display:flex;gap:var(--spacing-l);justify-content:space-between}}.club-section__participants input.form-text.hds-text-input__input{max-width:100%;width:100%}.club-section__totalhours input.form-text.hds-text-input__input{max-width:100%;width:100%}.hel-icon--size-xs{--icon-size: var(--spacing-layout-2-xs)}.hel-icon--size-s{--icon-size: var(--spacing-layout-xs)}.hel-icon--size-m{--icon-size: var(--spacing-layout-s)}.hel-icon--size-l{--icon-size: var(--spacing-layout-m)}.hel-icon--size-xl{--icon-size: var(--spacing-layout-l)}.hds-text-input__input-wrapper[focus-within][\:has\(input\[readonly\]\)]{margin-right:var(--spacing-2-xs);outline:2px var(--color-black) solid;outline-offset:2px}.hds-text-input__input-wrapper[focus-within]:has(input[readonly]){margin-right:var(--spacing-2-xs);outline:2px var(--color-black) solid;outline-offset:2px}.hds-text-input__input-wrapper[focus-within][\:has\(input\[readonly\]\)]{margin-right:var(--spacing-2-xs);outline:2px var(--color-black) solid;outline-offset:2px}.hds-text-input__input-wrapper:focus-within[\:has\(input\[readonly\]\)]{margin-right:var(--spacing-2-xs);outline:2px var(--color-black) solid;outline-offset:2px}.hds-text-input__input-wrapper:focus-within:has(input[readonly]){margin-right:var(--spacing-2-xs);outline:2px var(--color-black) solid;outline-offset:2px}.hds-text-input__input-wrapper[focus-within][\:has\(input\[readonly\]\)] input[readonly]{width:calc(100% - var(--spacing-2-xs))}.hds-text-input__input-wrapper[focus-within]:has(input[readonly]) input[readonly]{width:calc(100% - var(--spacing-2-xs))}.hds-text-input__input-wrapper[focus-within][\:has\(input\[readonly\]\)] input[readonly]{width:calc(100% - var(--spacing-2-xs))}.hds-text-input__input-wrapper:focus-within[\:has\(input\[readonly\]\)] input[readonly]{width:calc(100% - var(--spacing-2-xs))}.hds-text-input__input-wrapper:focus-within:has(input[readonly]) input[readonly]{width:calc(100% - var(--spacing-2-xs))}.form-item-application-number,.form-item-status,.form-item-applicant-type{display:none}.grants-handler__completion{background:var(--color-bus-light);padding:var(--spacing-layout-l) var(--spacing-layout-2-xl)}.grants-handler__completion h2{margin-top:var(--spacing-l)}.grants-handler__completion h3{font-size:1rem;font-weight:bold;margin-top:var(--spacing-m)}.grants-handler__completion__info-row{display:flex;flex-flow:row wrap;gap:var(--spacing-m);justify-content:flex-start;margin-bottom:var(--spacing-m)}.grants-handler__completion__button-row{display:flex;flex-flow:row wrap;gap:var(--spacing-m);justify-content:flex-start}.grants-handler__completion__longtext{margin:var(--spacing-l) 0}.hds-notification.notification-margin-bottom{margin-bottom:var(--spacing-layout-m)}.hds-notification__label{align-items:center}.hds-checkbox__input label{font-weight:normal}fieldset.grants-attachments--wrapper{margin-bottom:var(--spacing-layout-m)}fieldset.grants-attachments--wrapper legend{margin-bottom:var(--spacing-2-xs)}fieldset.grants-attachments--wrapper .form-item--error-message{width:100%}fieldset.grants-attachments--wrapper .js-form-type-managed-file{margin-bottom:0}.grants-applications-managed_file{position:relative}.grants-applications-managed_file label.hds-button--secondary:not(:disabled):not(.eu-cookie-compliance-default-button):not(.eu-cookie-compliance-save-preferences-button){left:0;position:relative}.grants-applications-managed_file label.hds-button--secondary:not(:disabled):not(.eu-cookie-compliance-default-button):not(.eu-cookie-compliance-save-preferences-button)[\:has\(input\:disabled\)]{background-color:transparent;background-color:var(--background-color-disabled, transparent);border-color:transparent;border-color:var(--border-color-disabled, transparent);color:var(--color-disabled);cursor:not-allowed}.grants-applications-managed_file label.hds-button--secondary:not(:disabled):not(.eu-cookie-compliance-default-button):not(.eu-cookie-compliance-save-preferences-button)[\:has\(input\:disabled\)]{background-color:transparent;background-color:var(--background-color-disabled, transparent);border-color:transparent;border-color:var(--border-color-disabled, transparent);color:var(--color-disabled);cursor:not-allowed}.grants-applications-managed_file label.hds-button--secondary:not(:disabled):not(.eu-cookie-compliance-default-button):not(.eu-cookie-compliance-save-preferences-button):has(input:disabled){background-color:transparent;background-color:var(--background-color-disabled, transparent);border-color:transparent;border-color:var(--border-color-disabled, transparent);color:var(--color-disabled);cursor:not-allowed}.grants-applications-managed_file label.hds-button--secondary:not(:disabled):not(.eu-cookie-compliance-default-button):not(.eu-cookie-compliance-save-preferences-button)[focus-within]{background:var(--color-black);border-color:var(--color-white);color:var(--color-white);outline:2px var(--color-black) solid}.grants-applications-managed_file label.hds-button--secondary:not(:disabled):not(.eu-cookie-compliance-default-button):not(.eu-cookie-compliance-save-preferences-button):focus-within{background:var(--color-black);border-color:var(--color-white);color:var(--color-white);outline:2px var(--color-black) solid}.grants-applications-managed_file input[type=file]{opacity:0;position:absolute}.form-managed-file{display:flex;flex-wrap:wrap;white-space:inherit}.form-managed-file>span{background-color:var(--color-info-light);border-bottom:2px dotted var(--color-coat-of-arms);display:inline-block;padding:var(--spacing-s) var(--spacing-2-xs)}.form-managed-file>.file-upload-js-error{flex-basis:100%}.grants-applications-managed_file label.hds-button{display:flex}.grants-attachments--wrapper .webform-readonly{display:none}.webform-multiple-table table{border-collapse:collapse;border:0px var(--color-white) solid;margin-bottom:var(--spacing-2-xs);max-width:-moz-fit-content;max-width:fit-content}.webform-multiple-table .webform-multiple-table--operations-two{min-width:60px}.webform-multiple-table tbody tr,.webform-multiple-table thead tr{align-items:center;justify-content:space-between;width:100%}.webform-multiple-table td,.webform-multiple-table th{max-width:100%;min-width:0;padding:0;width:100%}.webform-multiple-table table thead th{padding:var(--spacing-layout-2-xs)}div.hidden-head table{display:table}div.hidden-head table thead th{padding:0}div.hidden-head table tbody tr{border-bottom:var(--spacing-s) var(--color-white) solid}div.hidden-head table tbody tr:hover{background:rgba(0,0,0,0)}div.table-layout-form input.hds-text-input__input{width:100%}div.table-layout-form table{border:1px var(--color-black) solid;max-width:var(--webform-element-width--input-large)}div.table-layout-form table tbody tr{border:§0px var(--color-black-30) solid}div.table-layout-form table tbody tr td{border:1px var(--color-black-30) solid;padding:0}div.table-layout-form table tbody tr td input.hds-text-input__input[readonly]{padding:var(--spacing-layout-2-xs)}div.table-layout-form table .form-item{margin-bottom:0}.hds-text-input .hds-text-input__input.input--borderless{border:0 rgba(0,0,0,0) solid}#edit-subventions-items thead{background:var(--color-black-90);color:var(--color-white);text-align:left}#edit-subventions-items input.hds-text-input,#edit-subventions-items input.hds-text-input__input{background:rgba(0,0,0,0)}#subventions_table td.webform-multiple-table--operations,#subventions_table th.webform-multiple-table--operations{display:none}#subventions_table input.hds-text-input__input[readonly][name$="[amount]"]{background-color:var(--input-background-disabled);border-color:var(--input-border-color-disabled);color:var(--input-color-disabled);cursor:not-allowed}.form-item-muu-liite .webform-multiple-table--operations{display:none}.hidden-head>label{display:none}.webform-preview .accordion_header{font-size:28px;font-weight:300}@media(min-width: 768px){.webform-preview .accordion_header{font-size:36px;font-weight:500}}.webform-preview label{display:block;font-weight:bold}.grants-profile-grants-profile fieldset{background:var(--color-black-5);border:0 rgba(0,0,0,0) solid;margin:0;max-width:var(--webform-element-width--fieldset);padding:0 var(--spacing-layout-s) var(--spacing-layout-s);top:calc(-1*var(--spacing-m))}.grants-profile-grants-profile fieldset label{margin-bottom:var(--spacing-3-xs)}.grants-profile-grants-profile fieldset legend{font-size:var(--fontsize-body-l);margin-bottom:var(--spacing-m);padding-bottom:var(--spacing-s);position:relative;top:var(--spacing-l)}.grants-profile-grants-profile fieldset .fieldset-wrapper{display:flex;flex-flow:row wrap;justify-content:space-between}.grants-profile-grants-profile fieldset .hds-text-input{max-width:100%}.grants-profile-grants-profile fieldset div[class*=-address-postcode]{width:32%}.grants-profile-grants-profile fieldset div[class*=-address-city]{width:65%}.grants-profile--extrainfo .form-actions .button{margin-right:var(--spacing-2-xs)}.grants-stepper{--grants-stepper-color: var(--color-black);--grants-stepper-background-color: var(--color-white);--grants-stepper-disabled-color: var(--color-black-20);--grants-stepper-selected-step-label-color: var(--color-black-90);--grants-stepper-not-selected-step-label-color: var(--color-black);--grants-step-background-color: var(--color-white);--grants-step-content-color: var(--color-black);--grants-stepper-focus-border-color: var(--color-coat-of-arms);--grants-step-width: 120px;--circle-container-size: 36px;--progress-line-height: 2px;background-color:var(--grants-stepper-background-color);margin-bottom:var(--spacing-layout-m);position:relative}@media(max-width: 725px){.grants-stepper{--grants-step-width: 40px}}@media(max-width: 725px){.grants-stepper .grants-stepper__text{display:none}}.grants-stepper__inner{align-items:flex-start;display:flex;justify-content:space-between;margin:0;-ms-overflow-style:none;padding:0;position:relative;scroll-behavior:smooth;scrollbar-width:none;width:100%}.grants-stepper__lines{display:flex;height:var(--progress-line-height);left:calc(var(--grants-step-width)/2);line-height:var(--lineheight-l);position:absolute;transform:translateY(calc(var(--circle-container-size) / 2 + var(--progress-line-height) / 2));z-index:1}.grants-stepper__line{background-color:var(--grants-stepper-color);display:inline-block;height:100%;position:relative}.grants-stepper__line__disabled{background-color:var(--grants-stepper-disabled-color)}.grants-stepper__steps{background-color:var(--grants-stepper-background-color);box-sizing:border-box;display:flex;flex-shrink:0;justify-content:center;max-width:var(--grants-step-width);min-width:var(--grants-step-width);padding:3px}.grants-stepper__step{align-items:center;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:rgba(0,0,0,0);border:0;box-sizing:content-box;color:var(--grants-stepper-color);cursor:pointer;display:flex;flex-direction:column;height:100%;justify-content:center;outline:none;overflow:visible;padding:0;position:relative}.grants-stepper__step[disabled],.grants-stepper__step__disabled{color:var(--grants-stepper-disabled-color);cursor:not-allowed}.grants-stepper__step[disabled] .grants-stepper__circle,.grants-stepper__step__disabled .grants-stepper__circle{background-color:var(--grants-stepper-background-color);border:2px solid var(--grants-stepper-disabled-color);color:var(--grants-stepper-disabled-color)}.grants-stepper__step[disabled] .grants-stepper__text,.grants-stepper__step__disabled .grants-stepper__text{color:var(--grants-stepper-disabled-color)}.grants-stepper__step__circle_container{align-items:center;display:flex;height:var(--circle-container-size);justify-content:center;width:var(--circle-container-size);z-index:2}.grants-stepper__step__completed_container{align-items:center;background-color:var(--grants-stepper-color);border-radius:16px;color:var(--color-white);display:none;justify-content:center;outline:2px solid var(--grants-stepper-background-color);padding:4px;vertical-align:middle}.grants-stepper .grants-stepper__error,.grants-stepper .grants-stepper__completed{display:none}.grants-stepper__text{color:var(--grants-stepper-not-selected-step-label-color);font-size:var(--fontsize-body-m);font-weight:500;line-height:var(--lineheight-l);margin-bottom:0;margin-top:6px;padding-left:var(--spacing-4-xs);padding-right:var(--spacing-4-xs);text-align:center;text-decoration:underline}.grants-stepper__circle{align-items:center;background-color:var(--grants-step-background-color);border:2px solid var(--grants-stepper-color);border-radius:16px;color:var(--grants-step-content-color);display:flex;height:28px;justify-content:center;outline:2px solid var(--grants-stepper-background-color);text-align:center;width:28px}.grants-stepper__number{font-size:var(--fontsize-body-m);font-weight:500;line-height:1.15}.grants-stepper .is-active .grants-stepper__circle{border:4px solid var(--grants-stepper-color);border-radius:18px;outline:none}.grants-stepper .is-active .grants-stepper__text{color:var(--grants-stepper-selected-step-label-color);font-weight:700;text-decoration:none}.grants-stepper .is-active .grants-stepper__number{color:var(--grants-stepper-selected-step-label-color);font-weight:700;text-decoration:none}.grants-stepper .is-complete .grants-stepper__container{align-items:center;background-color:var(--grants-stepper-color);border-radius:16px;color:var(--color-white);display:flex;justify-content:center;outline:2px solid var(--grants-stepper-background-color);padding:4px}.grants-stepper .is-complete .grants-stepper__number{display:none}.grants-stepper .is-complete .grants-stepper__completed{display:inline-block}.grants-stepper .is-complete .grants-stepper__circle{opacity:0}.grants-stepper .is-complete .grants-stepper__step__completed_container{display:flex}.grants-stepper .has-errors .grants-stepper__container{align-items:center;background-color:var(--grants-stepper-color);border-radius:16px;color:var(--color-white);display:flex;justify-content:center;outline:2px solid var(--grants-stepper-background-color);padding:4px}.grants-stepper .has-errors .grants-stepper__circle{border-color:var(--color-error);color:var(--color-error)}.grants-stepper .has-errors .grants-stepper__number{display:none}.grants-stepper .has-errors .grants-stepper__error{display:inline-block}.grants-stepper .progress-marker::before{display:none}.grants-stepper .progress-step .progress-marker{color:var(--color-black)}.grants-stepper .progress-step .progress-marker.focus-visible .grants-stepper__circle{outline:2px solid var(--color-black);outline:var(--outline-width, 2px) solid var(--color-black);outline-offset:2px}.grants-stepper .progress-step .progress-marker.focus-visible .grants-stepper__circle{outline:2px solid var(--color-black);outline:var(--outline-width, 2px) solid var(--color-black);outline-offset:2px}.grants-stepper .progress-step .progress-marker:focus-visible .grants-stepper__circle{outline:2px solid var(--color-black);outline:var(--outline-width, 2px) solid var(--color-black);outline-offset:2px}.grants-stepper .progress-step .progress-marker.focus-visible .grants-stepper__text{outline:2px solid var(--color-black);outline:var(--outline-width, 2px) solid var(--color-black)}.grants-stepper .progress-step .progress-marker.focus-visible .grants-stepper__text{outline:2px solid var(--color-black);outline:var(--outline-width, 2px) solid var(--color-black)}.grants-stepper .progress-step .progress-marker:focus-visible .grants-stepper__text{outline:2px solid var(--color-black);outline:var(--outline-width, 2px) solid var(--color-black)}.grants-stepper .progress-step:last-child{flex-grow:1}.grant-applications--select-wrapper{--border-width: 2px;--input-height: 56px;--menu-item-height: 53px;--icon-size: var(--spacing-m);--helper-color-default: var(--color-black-60);--helper-color-invalid: var(--color-error);--icon-color-invalid: var(--color-error);--input-background-default: var(--color-white);--input-background-disabled: var(--color-black-10);--input-border-color-default: var(--color-black-50);--input-border-color-hover: var(--color-black-90);--input-border-color-focus: var(--color-black-90);--input-border-color-invalid: var(--color-error);--input-border-color-disabled: var(--color-black-10);--input-color-default: var(--color-black-90);--input-color-disabled: var(--color-black-40);--label-color-default: var(--color-black-90);--label-color-invalid: var(--color-black-90);--placeholder-color: var(--color-black-60);--focus-outline-color: var(--color-coat-of-arms);align-items:center;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--input-background-default);border:var(--border-width) solid var(--input-border-color-default);box-sizing:border-box;color:var(--input-color-default);cursor:pointer;display:block;font-size:1.125em;grid-template-areas:"select";line-height:normal;max-width:30ch;min-width:15ch;padding:.25em .5em;position:relative;width:100%}.grant-applications--select-wrapper select{align-items:center;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:rgba(0,0,0,0);border:none;color:var(--dropdown-color-default);cursor:inherit;display:flex;font-family:inherit;font-size:var(--fontsize-body-l);height:var(--input-height);line-height:inherit;margin:0;min-height:var(--menu-item-height);outline:none;padding:calc(var(--spacing-s) - var(--border-width)*2) var(--spacing-s);width:100%;z-index:1}.grant-applications--select-wrapper select::-ms-expand{display:none}.grant-applications--select-wrapper i.hel-icon{pointer-events:none;position:absolute;right:calc(var(--spacing-s) - var(--border-width)*2);top:calc(var(--spacing-s) - var(--border-width)*2)}.grant-applications--select-wrapper select,.grant-applications--select-wrapper::after{grid-area:select}.grant-applications--select-wrapper:not(.select--multiple)::after{background-color:var(--helper-color-default);clip-path:polygon(100% 0%, 0 0%, 50% 100%);content:"";height:.5em;justify-self:end;width:.8em}.grant-applications--select-wrapper select:focus+.grant-applications--select-focus{border:2px solid var(--focus-outline-color);border-radius:inherit;bottom:-1px;left:-1px;position:absolute;right:-1px;top:-1px}.webform-submission__application_id{border-bottom:1px var(--color-black-20) solid;padding-bottom:var(--spacing-xl)}.webform-submission__application_id--header{font-size:1rem;font-weight:bold}.webform-submission__title-wrapper{padding-top:var(--spacing-2-xl)}.webform-submission__title-wrapper h1{max-width:100%}.webform-submission ul{list-style:none;margin-top:0;padding-left:0}.webform-submission-information{background:var(--color-silver-light);margin-top:var(--spacing-3-xl);padding:var(--spacing-l)}.webform-submission-information .webform-submission-information{margin-top:var(--spacing-l);padding:0}.webform-submission-information h4{margin-top:0}.webform-submission-information h5{font-size:var(--fontsize-body-m);margin-top:var(--spacing-s)}.webform-submission-information__row{display:flex}.webform-submission-information__row-edit{margin-top:var(--spacing-s)}.webform-submission-information__row-top{align-items:center;border-bottom:1px solid var(--color-black-20);justify-content:space-between}@media(max-width: 550px){.webform-submission-information__row-top{display:block}}.webform-submission-information__row-main{flex-flow:row nowrap;gap:var(--spacing-m);justify-content:space-between}@media(max-width: 1179px){.webform-submission-information__row-main{flex-flow:row wrap}}.webform-submission-information__row-main>div{flex:1}@media(max-width: 1179px){.webform-submission-information__row-main>div{flex:auto;width:100%}}.webform-submission-information__row-main>div ul{list-style-type:none;margin-bottom:0;padding-left:0}.webform-submission-information__row-main>div ul li{margin:0;padding:0}.webform-submission-information__supportlinks{display:flex;flex-flow:row nowrap;min-width:-moz-fit-content;min-width:fit-content}.webform-submission-information__supportlinks .hds-loading-spinner{left:0}.webform-submission-information__supportlinks .hds-button{min-width:-moz-fit-content;min-width:fit-content}.hel-icon.hel-icon--copy{-webkit-mask-image:url("data:image/svg+xml,%3Csvg class='Icon-module_icon__1Jtzj icon_hel-icon__1YqNC Icon-module_s__2WGWe icon_hel-icon--size-s__2Lkik' viewBox='0 0 24 24' role='img' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Crect width='24' height='24'%3E%3C/rect%3E%3Cpath fill='currentColor' d='M6,10 L6,12 L5,12 L5,18 L12,18 L12,17 L14,17 L14,19 C14,19.5522847 13.5522847,20 13,20 L4,20 C3.44771525,20 3,19.5522847 3,19 L3,11 C3,10.4477153 3.44771525,10 4,10 L6,10 Z M20,4 C20.5522847,4 21,4.44771525 21,5 L21,15 C21,15.5522847 20.5522847,16 20,16 L8,16 C7.44771525,16 7,15.5522847 7,15 L7,5 C7,4.44771525 7.44771525,4 8,4 L20,4 Z M19,6 L9,6 L9,14 L19,14 L19,6 Z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg class='Icon-module_icon__1Jtzj icon_hel-icon__1YqNC Icon-module_s__2WGWe icon_hel-icon--size-s__2Lkik' viewBox='0 0 24 24' role='img' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Crect width='24' height='24'%3E%3C/rect%3E%3Cpath fill='currentColor' d='M6,10 L6,12 L5,12 L5,18 L12,18 L12,17 L14,17 L14,19 C14,19.5522847 13.5522847,20 13,20 L4,20 C3.44771525,20 3,19.5522847 3,19 L3,11 C3,10.4477153 3.44771525,10 4,10 L6,10 Z M20,4 C20.5522847,4 21,4.44771525 21,5 L21,15 C21,15.5522847 20.5522847,16 20,16 L8,16 C7.44771525,16 7,15.5522847 7,15 L7,5 C7,4.44771525 7.44771525,4 8,4 L20,4 Z M19,6 L9,6 L9,14 L19,14 L19,6 Z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E")}.webform-submission-form .form-actions{border-top:1px rgba(0,0,0,.6) solid;margin-top:var(--spacing-l);padding-top:var(--spacing-2-xl)}@media(min-width: 768px){.webform-submission-form .form-actions{display:flex;flex-direction:row-reverse}}.webform-submission-form .form-actions .actions{display:flex;flex-wrap:wrap}.webform-submission-form .form-actions button{margin-left:0}@media(min-width: 768px){.webform-submission-form .form-actions button{margin-left:var(--spacing-2-xs)}}.webform-submission-form .form-actions input{margin-bottom:var(--spacing-layout-2-xs);width:100%}@media(min-width: 768px){.webform-submission-form .form-actions input{width:auto}}.webform-submission-form .form-actions input.webform-button--draft{background:rgba(0,0,0,0);border:0 rgba(0,0,0,0) solid;color:var(--hdbt-color-black);order:3;text-decoration:underline}.webform-submission-form .form-actions button.webform-button--next span::after,.webform-submission-form .form-actions button.webform-button--preview span::after{content:">";margin-left:var(--spacing-2-xs)}.webform-submission-form .form-actions button.webform-button--previous span::before{content:"<";margin-right:var(--spacing-2-xs)}.webform-submission-form .form-actions input.webform-button--previous{background:var(--color-white);color:var(--border-color)}.webform-button--draft .hds-button__label::before{background-color:currentColor;background-size:contain;content:"";display:inline-block;flex-shrink:0;height:24px;margin-right:var(--spacing-2-xs);-webkit-mask-image:var(--hel-icon--download-cloud);mask-image:var(--hel-icon--download-cloud);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:24px 24px;mask-size:24px 24px;transition:transform .2s linear;vertical-align:bottom;width:24px}.webform-submission-messages{background:var(--color-silver-light);margin-top:var(--spacing-3-xl);padding:var(--spacing-l)}.webform-submission-messages h4,.webform-submission-messages h5{margin-top:0}.webform-submission-messages hr{margin:var(--spacing-l) 0}.webform-submission-messages__new-message{align-items:center;background:var(--color-alert);display:inline-flex;font-weight:bold;gap:var(--spacing-2-xs);margin-bottom:var(--spacing-m);padding:var(--spacing-2-xs) var(--spacing-xs);text-transform:uppercase}.webform-submission-messages__messages-list{list-style:none;margin:0;padding:0}.webform-submission-messages__message{margin:0;padding:0}.webform-submission-messages__message__attachments{list-style:none}.webform-submission-messages__message .hds-button{margin-top:var(--spacing-s)}.js-form-type-grants-webform-summation-field{max-width:var(--webform-element-width--input-large);text-align:right}.js-form-type-grants-webform-summation-field .grants-webform-summation-field{display:inline-block;padding:var(--spacing-xs) var(--spacing-m)}.webform-print-header,.webform-print-footer{display:none}.webform-print .main-content{display:block}.webform-submission--view-mode-html .hds-text-input,.webform-submission-data-preview-page .hds-text-input,.webform-print-page-html .hds-text-input{max-width:100%}.webform-submission--view-mode-html .print-label,.webform-submission-data-preview-page .print-label,.webform-print-page-html .print-label{display:block;font-size:var(--fontsize-body-m);font-weight:500;margin-bottom:var(--spacing-3-xs);margin-top:0;max-width:-moz-fit-content;max-width:fit-content;padding-right:var(--spacing-xl);position:relative}.webform-submission--view-mode-html .webform-section-flex-wrapper h3+*>*:first-child>*:first-child,.webform-submission--view-mode-html .webform-section-flex-wrapper h3+*>*:first-child>*:first-child label:first-of-type,.webform-submission-data-preview-page .webform-section-flex-wrapper h3+*>*:first-child>*:first-child,.webform-submission-data-preview-page .webform-section-flex-wrapper h3+*>*:first-child>*:first-child label:first-of-type,.webform-print-page-html .webform-section-flex-wrapper h3+*>*:first-child>*:first-child,.webform-print-page-html .webform-section-flex-wrapper h3+*>*:first-child>*:first-child label:first-of-type{line-height:normal}.webform-submission--view-mode-html .print-notification,.webform-submission-data-preview-page .print-notification,.webform-print-page-html .print-notification{border:2px var(--color-black) solid;font-weight:bold;margin-top:var(--spacing-2-xl);padding:var(--spacing-layout-s)}.webform-submission--view-mode-html .print-notification .print-notification--icon,.webform-submission-data-preview-page .print-notification .print-notification--icon,.webform-print-page-html .print-notification .print-notification--icon{height:22px;margin-right:var(--spacing-2-xs);vertical-align:text-top;width:22px}.webform-submission--view-mode-html .webform-print-page-wizard-page~.webform-print-page-wizard-page h2,.webform-submission-data-preview-page .webform-print-page-wizard-page~.webform-print-page-wizard-page h2,.webform-print-page-html .webform-print-page-wizard-page~.webform-print-page-wizard-page h2{page-break-after:avoid;page-break-before:always}.webform-submission--view-mode-html div.hds-text-input__input,.webform-submission-data-preview-page div.hds-text-input__input,.webform-print-page-html div.hds-text-input__input{background:var(--color-white);border:2px var(--color-black) solid;height:var(--spacing-2-xl);width:100%}.webform-submission--view-mode-html div.hds-text-input__textarea,.webform-submission-data-preview-page div.hds-text-input__textarea,.webform-print-page-html div.hds-text-input__textarea{background:var(--color-white);border:2px var(--color-black) solid;height:var(--spacing-layout-2-xl);width:100%}.webform-submission--view-mode-html .webform-section-wrapper .hds-notification,.webform-submission-data-preview-page .webform-section-wrapper .hds-notification,.webform-print-page-html .webform-section-wrapper .hds-notification{margin-top:var(--spacing-s)}.webform-submission--view-mode-html .webform-print-page-body h2,.webform-submission-data-preview-page .webform-print-page-body h2,.webform-print-page-html .webform-print-page-body h2{margin-bottom:var(--spacing-layout-s)}.webform-submission--view-mode-html .webform-print-wrapper-table,.webform-submission-data-preview-page .webform-print-wrapper-table,.webform-print-page-html .webform-print-wrapper-table{border:0 rgba(0,0,0,0) solid;display:table;max-width:100%;overflow-x:visible;overflow-x:initial;width:100%}.webform-submission--view-mode-html .webform-print-wrapper-table thead,.webform-submission--view-mode-html .webform-print-wrapper-table tbody,.webform-submission--view-mode-html .webform-print-wrapper-table tfoot,.webform-submission--view-mode-html .webform-print-wrapper-table tr,.webform-submission--view-mode-html .webform-print-wrapper-table tbody tr:hover,.webform-submission--view-mode-html .webform-print-wrapper-table td,.webform-submission--view-mode-html .webform-print-wrapper-table td:first-child,.webform-submission--view-mode-html .webform-print-wrapper-table th,.webform-submission-data-preview-page .webform-print-wrapper-table thead,.webform-submission-data-preview-page .webform-print-wrapper-table tbody,.webform-submission-data-preview-page .webform-print-wrapper-table tfoot,.webform-submission-data-preview-page .webform-print-wrapper-table tr,.webform-submission-data-preview-page .webform-print-wrapper-table tbody tr:hover,.webform-submission-data-preview-page .webform-print-wrapper-table td,.webform-submission-data-preview-page .webform-print-wrapper-table td:first-child,.webform-submission-data-preview-page .webform-print-wrapper-table th,.webform-print-page-html .webform-print-wrapper-table thead,.webform-print-page-html .webform-print-wrapper-table tbody,.webform-print-page-html .webform-print-wrapper-table tfoot,.webform-print-page-html .webform-print-wrapper-table tr,.webform-print-page-html .webform-print-wrapper-table tbody tr:hover,.webform-print-page-html .webform-print-wrapper-table td,.webform-print-page-html .webform-print-wrapper-table td:first-child,.webform-print-page-html .webform-print-wrapper-table th{background:rgba(0,0,0,0);border:0;color:var(--color-black)}.webform-submission--view-mode-html .webform-print-wrapper-table ul,.webform-submission-data-preview-page .webform-print-wrapper-table ul,.webform-print-page-html .webform-print-wrapper-table ul{margin:0;padding:0}.webform-submission--view-mode-html .webform-print-wrapper-table ul li,.webform-submission-data-preview-page .webform-print-wrapper-table ul li,.webform-print-page-html .webform-print-wrapper-table ul li{border-bottom:1px var(--color-black-50) solid;list-style:none;margin-top:0;padding:1rem 0}.webform-submission--view-mode-html .webform-print-wrapper-table ul li:last-of-type,.webform-submission-data-preview-page .webform-print-wrapper-table ul li:last-of-type,.webform-print-page-html .webform-print-wrapper-table ul li:last-of-type{border-bottom:0 rgba(0,0,0,0) solid}.webform-submission--view-mode-html .webform-print-wrapper-table thead,.webform-submission-data-preview-page .webform-print-wrapper-table thead,.webform-print-page-html .webform-print-wrapper-table thead{display:table-header-group}.webform-submission--view-mode-html .webform-print-wrapper-table thead th,.webform-submission-data-preview-page .webform-print-wrapper-table thead th,.webform-print-page-html .webform-print-wrapper-table thead th{padding:0}.webform-submission--view-mode-html .webform-print-wrapper-table tfoot,.webform-submission-data-preview-page .webform-print-wrapper-table tfoot,.webform-print-page-html .webform-print-wrapper-table tfoot{display:table-footer-group}.webform-submission--view-mode-html .webform-submission-data>section,.webform-submission-data-preview-page .webform-submission-data>section,.webform-print-page-html .webform-submission-data>section{border-top:1px var(--color-black-20) solid;padding-top:var(--spacing-layout-l)}.webform-submission--view-mode-html .webform-submission-data>section>.webform-section-flex-wrapper,.webform-submission-data-preview-page .webform-submission-data>section>.webform-section-flex-wrapper,.webform-print-page-html .webform-submission-data>section>.webform-section-flex-wrapper{display:block}.webform-submission--view-mode-html .webform-submission-data>section>.webform-section-flex-wrapper>h2,.webform-submission-data-preview-page .webform-submission-data>section>.webform-section-flex-wrapper>h2,.webform-print-page-html .webform-submission-data>section>.webform-section-flex-wrapper>h2{font-size:var(--fontsize-heading-l) !important;margin:0 0 2mm !important;padding:0 !important;width:100% !important}.webform-submission--view-mode-html .webform-submission-data>section>.webform-section-flex-wrapper>h2,.webform-submission-data-preview-page .webform-submission-data>section>.webform-section-flex-wrapper>h2,.webform-print-page-html .webform-submission-data>section>.webform-section-flex-wrapper>h2{font-weight:500;min-width:100%}.webform-submission--view-mode-html .webform-submission-data>section>.webform-section-flex-wrapper>.webform-section-wrapper,.webform-submission-data-preview-page .webform-submission-data>section>.webform-section-flex-wrapper>.webform-section-wrapper,.webform-print-page-html .webform-submission-data>section>.webform-section-flex-wrapper>.webform-section-wrapper{padding:6mm 0}.webform-submission--view-mode-html .webform-submission-data>section>.webform-section-flex-wrapper>.webform-section-wrapper label,.webform-submission-data-preview-page .webform-submission-data>section>.webform-section-flex-wrapper>.webform-section-wrapper label,.webform-print-page-html .webform-submission-data>section>.webform-section-flex-wrapper>.webform-section-wrapper label{font-weight:500}.webform-submission--view-mode-html .webform-submission-data>section.hds-notification,.webform-submission-data-preview-page .webform-submission-data>section.hds-notification,.webform-print-page-html .webform-submission-data>section.hds-notification{padding-top:var(--spacing-s)}@media print{@page{.webform-submission--view-mode-html,.webform-submission-data-preview-page,.webform-print-page-html{margin:0;size:A4}}.webform-submission--view-mode-html h1,.webform-submission-data-preview-page h1,.webform-print-page-html h1{margin:0;position:relative}.webform-submission--view-mode-html details,.webform-submission-data-preview-page details,.webform-print-page-html details{page-break-before:always}.webform-submission--view-mode-html .details-section-divider,.webform-submission-data-preview-page .details-section-divider,.webform-print-page-html .details-section-divider{page-break-after:always}.webform-submission--view-mode-html label,.webform-submission-data-preview-page label,.webform-print-page-html label{font-size:8pt;margin-bottom:0}.webform-submission--view-mode-html section,.webform-submission-data-preview-page section,.webform-print-page-html section{border-top:0 var(--color-black-20) solid !important;padding-top:0 !important}.webform-submission--view-mode-html section,.webform-submission-data-preview-page section,.webform-print-page-html section{margin-bottom:0;padding-bottom:0}.webform-submission--view-mode-html div.main-content,.webform-submission-data-preview-page div.main-content,.webform-print-page-html div.main-content{margin:0}.webform-submission--view-mode-html button,.webform-submission--view-mode-html footer.footer,.webform-submission--view-mode-html header.header,.webform-submission--view-mode-html nav.breadcrumb,.webform-submission--view-mode-html .form-actions,.webform-submission--view-mode-html .hds-notification,.webform-submission--view-mode-html .messages__container,.webform-submission--view-mode-html .tools__container,.webform-submission--view-mode-html .breadcrumb__container,.webform-submission--view-mode-html .webform-progress,.webform-submission--view-mode-html .webform-progress-tracker,.webform-submission--view-mode-html .webform-progress-tracker-mobile,.webform-submission--view-mode-html .webform-multiple-add,.webform-submission--view-mode-html .webform-multiple-table--operations,.webform-submission-data-preview-page button,.webform-submission-data-preview-page footer.footer,.webform-submission-data-preview-page header.header,.webform-submission-data-preview-page nav.breadcrumb,.webform-submission-data-preview-page .form-actions,.webform-submission-data-preview-page .hds-notification,.webform-submission-data-preview-page .messages__container,.webform-submission-data-preview-page .tools__container,.webform-submission-data-preview-page .breadcrumb__container,.webform-submission-data-preview-page .webform-progress,.webform-submission-data-preview-page .webform-progress-tracker,.webform-submission-data-preview-page .webform-progress-tracker-mobile,.webform-submission-data-preview-page .webform-multiple-add,.webform-submission-data-preview-page .webform-multiple-table--operations,.webform-print-page-html button,.webform-print-page-html footer.footer,.webform-print-page-html header.header,.webform-print-page-html nav.breadcrumb,.webform-print-page-html .form-actions,.webform-print-page-html .hds-notification,.webform-print-page-html .messages__container,.webform-print-page-html .tools__container,.webform-print-page-html .breadcrumb__container,.webform-print-page-html .webform-progress,.webform-print-page-html .webform-progress-tracker,.webform-print-page-html .webform-progress-tracker-mobile,.webform-print-page-html .webform-multiple-add,.webform-print-page-html .webform-multiple-table--operations{display:none !important}.webform-submission--view-mode-html .gin--horizontal-toolbar .dialog-off-canvas-main-canvas,.webform-submission-data-preview-page .gin--horizontal-toolbar .dialog-off-canvas-main-canvas,.webform-print-page-html .gin--horizontal-toolbar .dialog-off-canvas-main-canvas{padding:0 !important}.webform-submission--view-mode-html .hds-text-input,.webform-submission-data-preview-page .hds-text-input,.webform-print-page-html .hds-text-input{max-width:100%}.webform-submission--view-mode-html .hds-text-input .hds-text-input__input,.webform-submission-data-preview-page .hds-text-input .hds-text-input__input,.webform-print-page-html .hds-text-input .hds-text-input__input{height:1cm}.webform-submission--view-mode-html .hds-text-input textarea.hds-text-input__input,.webform-submission--view-mode-html .hds-text-input div.hds-text-input__textarea,.webform-submission-data-preview-page .hds-text-input textarea.hds-text-input__input,.webform-submission-data-preview-page .hds-text-input div.hds-text-input__textarea,.webform-print-page-html .hds-text-input textarea.hds-text-input__input,.webform-print-page-html .hds-text-input div.hds-text-input__textarea{height:6cm;max-width:100%;min-width:100%;width:100%}.webform-submission--view-mode-html .hds-text-input .hds-text-input__input[readonly],.webform-submission--view-mode-html .hds-text-input .hds-text-input__input,.webform-submission-data-preview-page .hds-text-input .hds-text-input__input[readonly],.webform-submission-data-preview-page .hds-text-input .hds-text-input__input,.webform-print-page-html .hds-text-input .hds-text-input__input[readonly],.webform-print-page-html .hds-text-input .hds-text-input__input{border:2px var(--color-black) solid}.webform-submission--view-mode-html .webform-element,.webform-submission-data-preview-page .webform-element,.webform-print-page-html .webform-element{border:1px var(--color-black) solid;margin-bottom:8mm;padding:2.5mm;position:relative}.webform-submission--view-mode-html .webform-preview,.webform-submission-data-preview-page .webform-preview,.webform-print-page-html .webform-preview{margin-top:0}.webform-submission--view-mode-html .webform-preview label,.webform-submission-data-preview-page .webform-preview label,.webform-print-page-html .webform-preview label{align-items:flex-end;display:flex;font-size:8pt;height:100%;left:0;pointer-events:none;position:absolute;top:-100%;width:100%}.webform-submission--view-mode-html .webform-preview .webform-element,.webform-submission-data-preview-page .webform-preview .webform-element,.webform-print-page-html .webform-preview .webform-element{border:1px var(--color-black) solid;margin-bottom:8mm;padding:2.5mm;position:relative;top:5mm}.webform-submission--view-mode-html .webform-preview .webform-multiple-table--operations,.webform-submission-data-preview-page .webform-preview .webform-multiple-table--operations,.webform-print-page-html .webform-preview .webform-multiple-table--operations{display:none}.webform-submission--view-mode-html .webform-print-header,.webform-submission-data-preview-page .webform-print-header,.webform-print-page-html .webform-print-header{align-items:center;background:var(--color-white);border-bottom:1px var(--color-black-40) solid;display:flex;flex-flow:row nowrap;font-size:9pt;height:21mm;left:0;max-width:100%;min-width:100%;position:fixed;top:0;width:100%;z-index:1000}.webform-submission--view-mode-html .webform-print-header svg,.webform-submission-data-preview-page .webform-print-header svg,.webform-print-page-html .webform-print-header svg{color:var(--color-black);display:block;height:25mm;margin-right:3mm;width:55mm}.webform-submission--view-mode-html .webform-print-header .webform-print-header-left-text,.webform-submission-data-preview-page .webform-print-header .webform-print-header-left-text,.webform-print-page-html .webform-print-header .webform-print-header-left-text{color:var(--color-black-40);text-align:left;width:100%}.webform-submission--view-mode-html .webform-print-header .webform-print-header-right-text,.webform-submission-data-preview-page .webform-print-header .webform-print-header-right-text,.webform-print-page-html .webform-print-header .webform-print-header-right-text{color:var(--color-black-40);text-align:right;width:100%}.webform-submission--view-mode-html .webform-print-footer,.webform-submission-data-preview-page .webform-print-footer,.webform-print-page-html .webform-print-footer{align-items:center;background:var(--color-white);border-top:1px var(--color-black-40) solid;bottom:0;display:flex;flex-flow:row nowrap;font-size:9pt;height:17mm;left:0;max-width:100%;min-width:100%;position:fixed;width:100%;z-index:1000}.webform-submission--view-mode-html .webform-print-footer svg,.webform-submission-data-preview-page .webform-print-footer svg,.webform-print-page-html .webform-print-footer svg{color:var(--color-black);display:block;height:15mm;margin-right:3mm;width:33mm}.webform-submission--view-mode-html .webform-print-footer .webform-print-footer-left-text,.webform-submission-data-preview-page .webform-print-footer .webform-print-footer-left-text,.webform-print-page-html .webform-print-footer .webform-print-footer-left-text{color:var(--color-black-40);text-align:left;width:100%}.webform-submission--view-mode-html .webform-print-footer .webform-print-footer-right-text,.webform-submission-data-preview-page .webform-print-footer .webform-print-footer-right-text,.webform-print-page-html .webform-print-footer .webform-print-footer-right-text{color:var(--color-black-40);text-align:right;width:100%}.webform-submission--view-mode-html .webform-print-header-space,.webform-submission-data-preview-page .webform-print-header-space,.webform-print-page-html .webform-print-header-space{background:var(--color-white);font-size:9pt;height:21mm}.webform-submission--view-mode-html .webform-print-footer-space,.webform-submission-data-preview-page .webform-print-footer-space,.webform-print-page-html .webform-print-footer-space{background:var(--color-white);font-size:9pt;height:17mm}.webform-submission--view-mode-html .webform-print-wrapper-table,.webform-submission-data-preview-page .webform-print-wrapper-table,.webform-print-page-html .webform-print-wrapper-table{border:0;margin:0;overflow-x:visible;overflow-x:initial}.webform-submission--view-mode-html .webform-section-flex-wrapper,.webform-submission-data-preview-page .webform-section-flex-wrapper,.webform-print-page-html .webform-section-flex-wrapper{flex-flow:row wrap}.webform-submission--view-mode-html .webform-section-flex-wrapper>h3.webform-section-title,.webform-submission-data-preview-page .webform-section-flex-wrapper>h3.webform-section-title,.webform-print-page-html .webform-section-flex-wrapper>h3.webform-section-title{max-width:100%;width:100%}.webform-submission--view-mode-html .webform-section-grid-wrapper,.webform-submission-data-preview-page .webform-section-grid-wrapper,.webform-print-page-html .webform-section-grid-wrapper{display:flex;flex-flow:row nowrap}.webform-submission--view-mode-html .webform-section-grid-wrapper>h3.webform-section-title,.webform-submission-data-preview-page .webform-section-grid-wrapper>h3.webform-section-title,.webform-print-page-html .webform-section-grid-wrapper>h3.webform-section-title{font-size:1.25rem;margin-top:0;max-width:5cm;width:100%}.webform-submission--view-mode-html .webform-section-grid-wrapper>dl.webform-section-contents,.webform-submission-data-preview-page .webform-section-grid-wrapper>dl.webform-section-contents,.webform-print-page-html .webform-section-grid-wrapper>dl.webform-section-contents{margin-top:0;max-width:100%;padding-left:1cm;width:100%}.webform-submission--view-mode-html .webform-section-grid-wrapper>dl.webform-section-contents dt,.webform-submission-data-preview-page .webform-section-grid-wrapper>dl.webform-section-contents dt,.webform-print-page-html .webform-section-grid-wrapper>dl.webform-section-contents dt{font-weight:bold;margin:0;padding:0;page-break-after:avoid}.webform-submission--view-mode-html .webform-section-grid-wrapper>dl.webform-section-contents dd,.webform-submission-data-preview-page .webform-section-grid-wrapper>dl.webform-section-contents dd,.webform-print-page-html .webform-section-grid-wrapper>dl.webform-section-contents dd{margin:0;padding:0;page-break-before:avoid}.webform-submission--view-mode-html .webform-print-page-body h2,.webform-submission-data-preview-page .webform-print-page-body h2,.webform-print-page-html .webform-print-page-body h2{margin-bottom:1cm}}.webform-submission-data dl dt{font-weight:bold}.webform-submission-data dl dd{margin:0;padding:0}.webform-submission-data dl dl{padding-left:var(--spacing-2-xs)}.webform-submission-data dl>br{display:none}.webform-print-page-html .webform-section-wrapper>h4,.webform-print-page-html .webform-section-wrapper .print-label{margin-top:var(--spacing-2-xs);line-height:1.5}.webform-print-page-html .webform-section-wrapper fieldset{padding:var(--spacing-s)}@media(min-width: 768px){.webform-print-page-html .webform-section-wrapper fieldset{min-width:400px;padding:var(--spacing-s) var(--spacing-m)}}.application-list{padding-bottom:var(--spacing-xl);padding-left:0}.application-list__processed-human-readable{display:none}.application-list__item{background:var(--color-bus-light);display:block;margin:var(--spacing-m) 0;padding:var(--spacing-2-xl) var(--spacing-s) var(--spacing-m);position:relative}.application-list__item .new-message{background-color:var(--color-alert);border-radius:var(--spacing-xl);display:inline-block;padding:var(--spacing-2-xs)}.application-list__item .new-message .hel-icon--size-s{height:20px;width:20px}.application-list__item h3,.application-list__item h4{margin-top:var(--spacing-xs)}.application-list__item h4{font-size:1rem}.application-list__item--submitted{display:none}.application-list__item__link{display:flex;margin-top:var(--spacing-m)}.application-list__item__link a{font-size:1.25rem}.application-list__item__link a i{vertical-align:text-bottom}.application-list__item__row{display:flex;flex-flow:row wrap;gap:var(--spacing-m);justify-content:space-between}.application-list__item__row__left{justify-content:flex-start}.application-list__item__row__top{padding:var(--spacing-2-xs) var(--spacing-s) var(--spacing-2-xs) 0;position:absolute;top:0;width:100%}.application-list__item--status{--status-label-height: 32px;align-items:center;border-radius:20px;display:inline-flex;font-size:var(--fontsize-body-s);line-height:var(--status-label-height);min-height:var(--status-label-height);padding:var(--spacing-3-xs) var(--spacing-s);padding-left:var(--spacing-xs);vertical-align:middle}.application-list__item--status+.hds-loading-spinner{display:inline-block;left:10px;margin:0;padding:0;position:relative;top:var(--spacing-3-xs)}.application-list__item--status.hide-spinner+.hds-loading-spinner{display:none}.application-list__item--status+div+.application-list__item--error{display:none}.application-list__item--status.show-error{background:var(--color-black-20);color:var(--color-black-90)}.application-list__item--status.show-error+div+.application-list__item--error{display:inline-flex;left:var(--spacing-xs);margin:0;padding:0;position:relative;top:var(--spacing-3-xs)}.application-list__item--status.show-error+div+.application-list__item--error .application-list--error-text{display:inline-block;margin-left:var(--spacing-2-xs)}.application-list__item--status--draft{padding-left:0}.application-list__item--status--sent,.application-list__item--status--submitted{background:var(--color-black-10)}.application-list__item--status--sent::before,.application-list__item--status--submitted::before{--icon-size: 1.5rem;background-color:#000;background-size:contain;content:"";display:inline-block;height:calc(var(--line-height) * 1em);height:var(--icon-size, calc(var(--line-height) * 1em));-webkit-mask-image:var(--hel-icon--alert-circle);mask-image:var(--hel-icon--alert-circle);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);-webkit-mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));vertical-align:bottom;width:calc(var(--line-height) * 1em);width:var(--icon-size, calc(var(--line-height) * 1em));background-color:var(--color-black);content:"";margin-right:var(--spacing-2-xs)}.application-list__item--status--received,.application-list__item--status--pending,.application-list__item--status--processing,.application-list__item--status--preparing{background:var(--color-info);color:var(--color-white)}.application-list__item--status--received::before,.application-list__item--status--pending::before,.application-list__item--status--processing::before,.application-list__item--status--preparing::before{--icon-size: 1.5rem;background-color:#000;background-size:contain;content:"";display:inline-block;height:calc(var(--line-height) * 1em);height:var(--icon-size, calc(var(--line-height) * 1em));-webkit-mask-image:var(--hel-icon--info-circle);mask-image:var(--hel-icon--info-circle);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);-webkit-mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));vertical-align:bottom;width:calc(var(--line-height) * 1em);width:var(--icon-size, calc(var(--line-height) * 1em));background-color:var(--color-white);content:"";margin-right:var(--spacing-2-xs)}.application-list__item--status--done,.application-list__item--status--ready,.application-list__item--status--resolved{background:var(--color-success);color:var(--color-white)}.application-list__item--status--done::before,.application-list__item--status--ready::before,.application-list__item--status--resolved::before{--icon-size: 1.5rem;background-color:#000;background-size:contain;content:"";display:inline-block;height:calc(var(--line-height) * 1em);height:var(--icon-size, calc(var(--line-height) * 1em));-webkit-mask-image:var(--hel-icon--check-circle);mask-image:var(--hel-icon--check-circle);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);-webkit-mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));vertical-align:bottom;width:calc(var(--line-height) * 1em);width:var(--icon-size, calc(var(--line-height) * 1em));background-color:var(--color-white);content:"";margin-right:var(--spacing-2-xs)}.application-list__item--status--rejected,.application-list__item--status--deleted,.application-list__item--status--canceled,.application-list__item--status--cancelled{background:var(--color-alert)}.application-list__item--status--rejected::before,.application-list__item--status--deleted::before,.application-list__item--status--canceled::before,.application-list__item--status--cancelled::before{--icon-size: 1.5rem;background-color:#000;background-size:contain;content:"";display:inline-block;height:calc(var(--line-height) * 1em);height:var(--icon-size, calc(var(--line-height) * 1em));-webkit-mask-image:var(--hel-icon--alert-circle);mask-image:var(--hel-icon--alert-circle);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);-webkit-mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));vertical-align:bottom;width:calc(var(--line-height) * 1em);width:var(--icon-size, calc(var(--line-height) * 1em));background-color:var(--color-black);content:"";margin-right:var(--spacing-2-xs)}.application-list__item--status--error{background:var(--color-black-20);color:var(--color-black);text-transform:uppercase}.application-list__item--status--error .hel-icon{margin-right:var(--spacing-3-xs)}.application-list__count{font-size:1.5rem}.application-list__count-value{font-weight:bold}.application-list__information-row{align-items:flex-end;display:flex;flex-flow:row nowrap;justify-content:space-between;width:100%}@media(max-width: 35rem){.application-list__information-row{flex-flow:row wrap}}.application-list__information-row .grant-applications--select-wrapper select{max-width:100%;width:322px}.application-list__status__wrapper{background:var(--color-black-5)}.application-list__status__container{display:flex;flex-flow:row wrap;gap:var(--spacing-layout-m);justify-content:flex-start;padding-bottom:var(--spacing-m);padding-top:var(--spacing-m)}.application-list__status__label{font-weight:bold}.application-list__status__value{display:flex;flex-flow:row;justify-items:center;min-height:var(--spacing-xl)}.application-list__status__value>div{margin:auto}.application-list__search-row{align-items:flex-end;display:flex;flex-flow:row nowrap;gap:var(--spacing-s);justify-content:space-between;width:100%}@media(max-width: 35rem){.application-list__search-row{flex-flow:row wrap}}.application-list__search-row .hds-text-input{flex:1 100%;max-width:100%}.application-list__search-row .hds-text-input__input-wrapper{display:block}.application-list__search-row .hds-text-input__input-wrapper input{width:100%}.application-list__search-row button{white-space:nowrap}.application-list__pagination{--line-height: 1.5555555556;font-size:1.125rem;font-weight:400;line-height:var(--line-height);display:inline-flex;flex-wrap:wrap;font-weight:700;gap:var(--spacing-2-xs);justify-content:center;list-style:none;padding:0}.application-list__pagination li{margin-top:0}.application-list__pagination li.active a{text-decoration:underline}.application-list__pagination li.disabled a{cursor:default;text-decoration:none}.application-list__pagination li.disabled a:hover,.application-list__pagination li.disabled a:focus,.application-list__pagination li.disabled a:active{outline:none;text-decoration:none}.application-list__pagination li a{color:var(--color-black-90);display:block;height:var(--link-height);min-width:40px;padding-left:var(--spacing-3-xs);padding-right:var(--spacing-3-xs);text-decoration:none}.application-list__pagination li a:hover{text-decoration:underline}.application-list__pagination li a:focus,.application-list__pagination li a:active{outline:solid var(--color-coat-of-arms) 3px;outline-offset:1px}.grants-profile hr{border:1px solid var(--color-silver);margin:var(--spacing-layout-xs) 0}.grants-profile h3.info-grants{border-bottom:2px solid var(--color-silver);padding-bottom:var(--spacing-l)}.grants-profile--title{align-items:center;display:flex;flex-flow:row nowrap}.grants-profile--title .grants-profile--initials{border-radius:50%;display:none;font-size:var(--fontsize-body-xl);font-weight:bold;height:var(--spacing-4-xl);line-height:var(--spacing-4-xl);margin-right:var(--spacing-m);text-align:center;vertical-align:middle;width:var(--spacing-4-xl)}@media(min-width: 992px){.grants-profile--title .grants-profile--initials{display:block}}.grants-profile--title .grants-profile--initials:hover,.grants-profile--title .grants-profile--initials:active,.grants-profile--title .grants-profile--initials:focus{text-decoration:underline}.grants-profile--title .grants-profile--initials-colorscheme-2{background-color:var(--color-bus);color:var(--color-white)}.grants-profile--title .grants-profile--initials-colorscheme-1{background-color:var(--color-engel);color:var(--color-black)}.grants-profile--title .grants-profile--initials-colorscheme-0{background-color:var(--color-tram);color:var(--color-white)}.grants-profile--title h1{flex-grow:100}.grants-profile--basicinfo{--line-height: 1.5;background-color:var(--color-silver-light);border-bottom:8px solid var(--color-engel-dark);padding-bottom:var(--spacing-2-xs);padding-top:var(--spacing-l)}.grants-profile--basicinfo h3{font-size:var(--fontsize-heading-l);margin-top:0;padding-top:0}.grants-profile--extrainfo{padding-bottom:var(--spacing-l);padding-top:var(--spacing-l)}.grants-profile--extrainfo .hds-notification{margin-bottom:var(--spacing-xl)}.grants-profile--extrainfo fieldset.form-wrapper{background-color:var(--color-silver-light);border:0;padding:var(--spacing-l)}.grants-profile--extrainfo fieldset.inline-error-message{background-color:transparent;background-color:initial;padding:0 0 0 var(--spacing-2-xs)}.grants-profile--extrainfo fieldset.inline-error-message legend{display:none}.grants-profile--update-link{margin-bottom:var(--spacing-layout-2-xs);margin-top:var(--spacing-layout-xs)}.grants-profile--infotext{font-size:var(--fontsize-body-l);margin-bottom:var(--spacing-s)}.grants-profile--wrapper{display:flex;flex-wrap:wrap}.grants-profile--wrapper-item{margin-bottom:var(--spacing-layout-2-xs);width:100%}@media(min-width: 576px){.grants-profile--wrapper-item{flex:1;margin-bottom:0}}.grants-profile--wrapper-item:first-child{flex:auto;margin-bottom:var(--spacing-layout-2-xs);width:100%}.grants-profile .profile-add-more{margin-top:1em}[dir="ltr"] .grants-profile dd{margin-left:0}[dir="rtl"] .grants-profile dd{margin-right:0}.grants-profile--officials{margin-left:0;padding-left:0}.grants-profile--officials-item{border-left:4px var(--color-copper) solid;display:flex;flex-flow:row nowrap;justify-content:space-between;list-style:none;margin-bottom:var(--spacing-layout-s);margin-left:0;max-width:var(--webform-element-width--input-large);padding-left:var(--spacing-layout-xs);width:100%}.grants-profile--officials-item--position{font-size:var(--fontsize-heading-xs);font-weight:bold;margin-bottom:var(--spacing-layout-2-xs);margin-top:0;padding-top:0}.grants-profile--officials-edit-wrapper{text-align:right}.grants-profile--officials-edit-wrapper a{display:inline-block}.grants-profile .hel-icon--check-circle-fill{color:var(--color-success);vertical-align:middle}.grants-profile-grants-profile .tabledrag-toggle-weight-wrapper,.grants-profile-grants-profile .field-multiple-drag{display:none}.grants-profile .hds-text-input__label{display:inline-block;margin-top:0}.page--oma-asiointi__private-person .grants-profile--basicinfo{border-bottom:8px solid var(--color-copper)}.page--oma-asiointi__private-person .grants-profile--wrapper{display:grid;grid-template-columns:1fr 1fr}.page--oma-asiointi__unregistered-community .grants-profile--wrapper{display:grid;grid-template-columns:1fr 1fr}.hds-link .hel-icon{margin-right:var(--spacing-2-xs);vertical-align:bottom}.hds-link span.link-label{font-weight:bold;margin-right:var(--spacing-m)}.bold-link{font-weight:bold}div.applicant-info--from-prh,div.applicant-info--from-grants{display:grid;grid-template-columns:1fr}@media(min-width: 576px){div.applicant-info--from-prh,div.applicant-info--from-grants{grid-template-columns:1fr 1fr}}@media(min-width: 768px){div.applicant-info--from-prh,div.applicant-info--from-grants{grid-template-columns:1fr 1fr 1fr}}div.applicant-info--from-prh .form-required::after,div.applicant-info--from-grants .form-required::after{content:none}div.applicant-info--from-prh{border-bottom:2px solid var(--color-silver);margin-bottom:var(--spacing-layout-xs);padding-bottom:var(--spacing-layout-2-xs)}div.grants-handler--prefilled-field .field-prefix,.grants-profile-prh-info .field-prefix{display:block;position:absolute;right:var(--spacing-layout-s);top:0}div.grants-handler--prefilled-field .hds-text-input__input-wrapper,div.grants-handler--prefilled-field .description,.grants-profile-prh-info .hds-text-input__input-wrapper,.grants-profile-prh-info .description{display:inline-block;white-space:normal}div.grants-handler--prefilled-field .hel-icon--check-circle-fill,.grants-profile-prh-info .hel-icon--check-circle-fill{color:var(--color-success);vertical-align:middle}div.grants-handler--prefilled-field .hds-text-input__input,div.grants-handler--prefilled-field .webform-element-description,.grants-profile-prh-info .hds-text-input__input,.grants-profile-prh-info .webform-element-description{color:var(--color-black);display:block;font-size:var(--fontsize-body-m);line-height:var(--spacing-m);position:relative}div.grants-handler--prefilled-field .hds-text-input__label,.grants-profile-prh-info .hds-text-input__label{margin-bottom:0}.grants-profile--imported-section .webform-section-flex-wrapper{background-color:var(--color-silver-light);border-bottom:8px solid var(--color-engel-dark);display:block;padding-bottom:var(--spacing-2-xs);padding-left:var(--spacing-l);padding-right:var(--spacing-l);padding-top:var(--spacing-l);width:100%}.grants-profile--imported-section .webform-section-flex-wrapper h3.webform-section-title{font-size:var(--fontsize-heading-l);font-weight:400;margin-top:0;max-width:100%;padding-top:0;width:100%}.grants-profile--imported-section .webform-section-flex-wrapper .webform-section-wrapper{padding:0}.grants-profile--imported-section .webform-section-flex-wrapper .hds-text-input{margin-bottom:0}.grants-profile--imported-section .webform-section-flex-wrapper #edit-grants-profile-items-container{display:flex;flex-flow:row wrap;justify-content:space-between;margin-bottom:var(--spacing-layout-xs);margin-top:var(--spacing-layout-xs);width:100%}.grants-profile--imported-section .webform-section-flex-wrapper #edit-grants-profile-items-container>div{margin:0 var(--spacing-layout-xs) 0 0;min-width:160px}.grants-profile--imported-section .webform-section-flex-wrapper #edit-grants-profile-items-container .hds-text-input__input-wrapper{display:none}.grants-profile--imported-section .webform-section-flex-wrapper #edit-grants-profile-items-container label{font-size:var(--fontsize-body-m);font-weight:bold;margin:0}.grants-profile--imported-section .webform-section-flex-wrapper .form-item-prh-markup{border-bottom:2px solid var(--color-silver);padding-bottom:var(--spacing-layout-xs);padding-top:var(--spacing-layout-xs)}.grants-profile__local-tasks__wrapper{margin-bottom:0}.openid-connect-login-form.openid-connect-login-form{border-bottom:0;margin-bottom:0;padding-bottom:0}.grants-profile--links{display:flex;justify-content:space-between}.company-delete-confirm-form .form-actions{margin-top:var(--spacing-layout-xs)}.company-delete-confirm-form .form-submit{margin-right:var(--spacing-2-xs)}.page--oma-asiointi .main-content{margin-top:0}.page--oma-asiointi .main-content h2{margin-top:var(--spacing-m)}.hero--oma-asiointi{margin-bottom:var(--spacing-l)}.hero--oma-asiointi .container{padding-top:var(--spacing-layout-m)}.hero--oma-asiointi .hero__text-content{align-items:center;display:flex}.hero--oma-asiointi .hero__title{margin-left:0}@media(min-width: 576px){.hero--oma-asiointi .hero__title{margin-left:40px}}.hero--oma-asiointi .hel-icon{display:none}@media(min-width: 576px){.hero--oma-asiointi .hel-icon{--icon-size: 48px;display:block;flex-shrink:0}}#oma-asiointi__sent{background:var(--color-silver-light)}#oma-asiointi__sent .application-list__item{background:var(--color-white)}.oma-asiointi-block{background-color:var(--color-silver-light);padding-bottom:var(--spacing-l);padding-top:var(--spacing-l)}.oma-asiointi-block h2{margin-bottom:var(--spacing-s);margin-top:0}.oma-asiointi-block h3{font-size:var(--fontsize-heading-m);font-weight:500}.oma-asiointi-block .header{border-bottom:1px solid var(--color-silver-dark);display:flex;justify-content:space-between;padding-bottom:var(--spacing-xs)}.oma-asiointi-block .header .user,.oma-asiointi-block .header .link{font-weight:700}.oma-asiointi-block .header .link .hel-icon{vertical-align:text-top}.oma-asiointi-block--link{display:block;position:relative;text-decoration:none}.oma-asiointi-block--link::after{--icon-size: 1.5rem;background-color:#000;background-size:contain;content:"";display:inline-block;height:calc(var(--line-height) * 1em);height:var(--icon-size, calc(var(--line-height) * 1em));-webkit-mask-image:var(--hel-icon--arrow-right);mask-image:var(--hel-icon--arrow-right);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);-webkit-mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));vertical-align:bottom;width:calc(var(--line-height) * 1em);width:var(--icon-size, calc(var(--line-height) * 1em));transition:transform .2s linear;bottom:var(--spacing-m);content:"";display:block;flex-shrink:0;margin-left:-4px;margin-top:var(--spacing-2-xs);position:absolute;right:var(--spacing-m)}@media(prefers-reduced-motion){.oma-asiointi-block--link::after{transition:none}}@media(min-width: 576px){.oma-asiointi-block--link::after{--icon-size: 3rem;margin-left:-8px;margin-top:var(--spacing-s)}}.oma-asiointi-block--link:focus::after,.oma-asiointi-block--link:hover::after{transform:translateX(var(--spacing-2-xs))}@media(prefers-reduced-motion){.oma-asiointi-block--link:focus::after,.oma-asiointi-block--link:hover::after{transform:none}}.oma-asiointi-block .new-message{background-color:var(--color-alert);display:inline-block;font-weight:500;padding:var(--spacing-2-xs);text-transform:uppercase}.oma-asiointi-block .new-messages-length{background-color:var(--color-black-20);border-radius:50%;display:inline-block;font-size:var(--fontsize-heading-s);height:30px;line-height:30px;margin-left:var(--spacing-m);position:relative;text-align:center;width:30px}.oma-asiointi-block .new-messages-length.has-new-messages{background-color:var(--color-alert)}@media(min-width: 768px){.oma-asiointi-block .content{display:grid;grid-gap:var(--spacing-s);grid-template-columns:1fr 1fr}}.oma-asiointi-block .submission,.oma-asiointi-block .message{background-color:var(--color-white);margin-bottom:var(--spacing-s);margin-top:var(--spacing-s);padding:var(--spacing-m)}.oma-asiointi-block .submission .submission-title,.oma-asiointi-block .submission .message-title,.oma-asiointi-block .message .submission-title,.oma-asiointi-block .message .message-title{font-size:var(--fontsize-heading-s);font-weight:500;margin-bottom:var(--spacing-2-xs);margin-top:0;text-decoration:underline}.oma-asiointi-block .submission .message-title,.oma-asiointi-block .message .message-title{margin-top:var(--spacing-s)}.oma-asiointi-block .submission:hover .submission-title,.oma-asiointi-block .submission:hover .message-title,.oma-asiointi-block .message:hover .submission-title,.oma-asiointi-block .message:hover .message-title{text-decoration:none}.oma-asiointi-block .message{padding-right:var(--spacing-5-xl)}.oma-asiointi{margin-top:var(--spacing-l)}.oma-asiointi ul{padding:0}.oma-asiointi__list{padding-bottom:var(--spacing-l);padding-top:var(--spacing-l)}.oma-asiointi__list h2{margin-bottom:var(--spacing-m);margin-top:0}.oma-asiointi #oma-asiointi__sent{padding-top:var(--spacing-s)}.oma-asiointi .oma-asiointi-infoboxes-container .oma-asiointi-infoboxes{gap:var(--spacing-3-xl);margin:var(--spacing-2-xl) 0}@media(min-width: 768px){.oma-asiointi .oma-asiointi-infoboxes-container .oma-asiointi-infoboxes{display:flex}}.oma-asiointi .oma-asiointi-infoboxes-container .oma-asiointi-infobox{background-color:var(--color-info-light);flex:1;margin-bottom:var(--spacing-layout-2-xs);padding:var(--spacing-l)}@media(min-width: 768px){.oma-asiointi .oma-asiointi-infoboxes-container .oma-asiointi-infobox{margin-bottom:0}}.oma-asiointi .oma-asiointi-infoboxes-container .oma-asiointi-infobox:last-of-type{margin-bottom:0}.oma-asiointi .oma-asiointi-infoboxes-container .oma-asiointi-infobox--link{display:flex;margin-top:var(--spacing-layout-2-xs)}.oma-asiointi .oma-asiointi-infoboxes-container .oma-asiointi-infobox--link a{font-size:1.25rem}.oma-asiointi .oma-asiointi-infoboxes-container .oma-asiointi-infobox h3{margin-top:0}.asiointirooli-block{background-color:var(--color-black);color:var(--color-white);font-weight:500;margin-bottom:16px;padding:var(--spacing-2-xs)}.asiointirooli-block a{color:var(--color-white)}.asiointirooli-block .link--switch-role,.asiointirooli-block .link--stop-mandate{color:var(--color-white);margin-left:var(--spacing-layout-s)}@media(max-width: 768px){.asiointirooli-block .link--switch-role,.asiointirooli-block .link--stop-mandate{display:block;margin-left:0}}.asiointirooli-block .link--stop-mandate::before{--icon-size: 1.5rem;background-color:#000;background-size:contain;content:"";display:inline-block;height:calc(var(--line-height) * 1em);height:var(--icon-size, calc(var(--line-height) * 1em));-webkit-mask-image:var(--hel-icon--cross-circle-fill);mask-image:var(--hel-icon--cross-circle-fill);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);-webkit-mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));vertical-align:bottom;width:calc(var(--line-height) * 1em);width:var(--icon-size, calc(var(--line-height) * 1em));background-color:var(--color-white);content:"";display:inline-block;margin-right:10px;-webkit-mask-image:url('data:image/svg+xml, ');mask-image:url('data:image/svg+xml, ')}.asiointirooli-block .link--switch-role::before{--icon-size: 1.5rem;background-color:#000;background-size:contain;content:"";display:inline-block;height:calc(var(--line-height) * 1em);height:var(--icon-size, calc(var(--line-height) * 1em));-webkit-mask-image:var(--hel-icon--swap-user);mask-image:var(--hel-icon--swap-user);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);-webkit-mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));vertical-align:bottom;width:calc(var(--line-height) * 1em);width:var(--icon-size, calc(var(--line-height) * 1em));background-color:var(--color-white);content:"";display:inline-block;margin-right:10px;-webkit-mask-image:url('data:image/svg+xml, ');mask-image:url('data:image/svg+xml, ')}#grants-mandate-type .form-actions{display:flex;flex-direction:column;flex-wrap:wrap;justify-content:flex-start;width:100%}@media(min-width: 576px){#grants-mandate-type .form-actions{flex-direction:row;margin-left:calc(-1*var(--spacing-m));width:calc(100% + var(--spacing-m))}}#grants-mandate-type .form-actions .hds-card--applicant-role{margin-bottom:var(--spacing-l);position:relative;width:100%}@media(min-width: 576px){#grants-mandate-type .form-actions .hds-card--applicant-role{margin-left:var(--spacing-m);width:calc(50% - var(--spacing-m))}}@media(min-width: 992px){#grants-mandate-type .form-actions .hds-card--applicant-role{width:calc(33.3333333333% - var(--spacing-m))}}#grants-mandate-type .form-actions .hds-card--applicant-role .hds-card__body{align-content:space-between;height:100%}#grants-mandate-type .form-actions .hds-card--applicant-role .hds-card--mandate-card-content{display:grid;gap:var(--spacing-m);grid-gap:var(--spacing-m)} diff --git a/public/themes/custom/hdbt_subtheme/package-lock.json b/public/themes/custom/hdbt_subtheme/package-lock.json index 99016083c1..737369b2cb 100644 --- a/public/themes/custom/hdbt_subtheme/package-lock.json +++ b/public/themes/custom/hdbt_subtheme/package-lock.json @@ -3310,9 +3310,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001640", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001640.tgz", - "integrity": "sha512-lA4VMpW0PSUrFnkmVuEKBUovSWKhj7puyCg8StBChgu298N1AtuF1sKWEvfDuimSEDbhlb/KqPKC3fs1HbuQUA==", + "version": "1.0.30001669", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001669.tgz", + "integrity": "sha512-DlWzFDJqstqtIVx1zeSpIMLjunf5SmwOw0N2Ck/QSQdS8PLS4+9HrLaYei4w8BIAL7IB/UEDu889d8vhCTPA0w==", "funding": [ { "type": "opencollective", diff --git a/public/themes/custom/hdbt_subtheme/src/scss/06_components/pages/_application-search.scss b/public/themes/custom/hdbt_subtheme/src/scss/06_components/pages/_application-search.scss index 170bc17636..d7d7b42946 100644 --- a/public/themes/custom/hdbt_subtheme/src/scss/06_components/pages/_application-search.scss +++ b/public/themes/custom/hdbt_subtheme/src/scss/06_components/pages/_application-search.scss @@ -56,164 +56,164 @@ } } -.application_search { - &--link { - display: block; - height: 100%; - padding-bottom: var(--spacing-m); - position: relative; - text-decoration: none; - &::after { - --icon-size: 1.5rem; +.application_search--link { + display: block; + height: 100%; + padding-bottom: var(--spacing-m); + position: relative; + text-decoration: none; - @include pseudo-icon('arrow-right'); - @include hover-link-arrow-transition; - bottom: var(--spacing-s); - content: ''; - display: block; - flex-shrink: 0; - left: var(--spacing-m); - margin-left: -$spacing-quarter; - margin-top: $spacing-half; - position: absolute; - - @include breakpoint($breakpoint-s) { - --icon-size: 3rem; - margin-left: -$spacing-half; - margin-top: $spacing; - } + &::after { + --icon-size: 1.5rem; + + @include pseudo-icon('arrow-right'); + @include hover-link-arrow-transition; + bottom: var(--spacing-s); + content: ''; + display: block; + flex-shrink: 0; + left: var(--spacing-m); + margin-left: -$spacing-quarter; + margin-top: $spacing-half; + position: absolute; + + @include breakpoint($breakpoint-s) { + --icon-size: 3rem; + margin-left: -$spacing-half; + margin-top: $spacing; } + } - &:focus, - &:hover { - h3 { - text-decoration: none; - } + &:focus, + &:hover { + h3 { + text-decoration: none; + } - &::after { - transform: translateX($spacing-half); + &::after { + transform: translateX($spacing-half); - @media (prefers-reduced-motion) { - transform: none; - } + @media (prefers-reduced-motion) { + transform: none; } } } +} - &--filter-wrapper { - background: var(--color-black-5); +.application_search--filter-wrapper { + background: var(--color-black-5); - h2 { - font-size: var(--fontsize-heading-m); - margin-bottom: var(--spacing-layout-s); - margin-top: var(--spacing-layout-s); - } + h2 { + font-size: var(--fontsize-heading-m); + margin-bottom: var(--spacing-layout-s); + margin-top: var(--spacing-layout-s); + } - form { - align-items: center; - border-bottom: 2px solid var(--color-black-20); - display: flex; - flex-flow: row wrap; - gap: var(--spacing-s); - justify-content: space-between; - margin-bottom: var(--spacing-layout-s); - padding-bottom: var(--spacing-layout-s); - - .form-item { - margin-bottom: 0; - min-width: fit-content; - width: calc(calc(100% - var(--spacing-s) - var(--spacing-s)) / 3); - - label { - color: var(--label-color-default); - font-size: var(--fontsize-body-m); - font-weight: 500; - margin-bottom: var(--spacing-3-xs); - } - - .grant-applications--select-wrapper { - min-width: 100%; - width: 100%; - } + form { + align-items: center; + border-bottom: 2px solid var(--color-black-20); + display: flex; + flex-flow: row wrap; + gap: var(--spacing-s); + justify-content: space-between; + margin-bottom: var(--spacing-layout-s); + padding-bottom: var(--spacing-layout-s); + + .form-item { + margin-bottom: 0; + min-width: fit-content; + width: calc(calc(100% - var(--spacing-s) - var(--spacing-s)) / 3); + + label { + color: var(--label-color-default); + font-size: var(--fontsize-body-m); + font-weight: 500; + margin-bottom: var(--spacing-3-xs); } - .hds-text-input:first-child { - max-width: none; + .grant-applications--select-wrapper { + min-width: 100%; width: 100%; - - input { - width: 100%; - } } - .form-actions { - align-items: center; - display: flex; - order: 6; - padding-top: var(--spacing-m); - width: 100%; + } - @include breakpoint($breakpoint-m) { - width: 17%; - } + .hds-text-input:first-child { + max-width: none; + width: 100%; - input { - min-width: 250px; - width: 100%; - } + input { + width: 100%; } + } + .form-actions { + align-items: center; + display: flex; + gap: $spacing; + order: 6; + padding-top: var(--spacing-m); + width: 100%; - .form-item-items-per-page { - display: none; + @include breakpoint($breakpoint-m) { + width: 17%; } - .form-item-kohderyhma { - order: 1; + input { + min-width: 250px; + width: 100%; } + } - .form-item-avustuslaji { - order: 2; - } + .form-item-items-per-page { + display: none; + } - .form-item-hakija { - order: 3; - } + .form-item-kohderyhma { + order: 1; + } - .form-item-search { - max-width: 100%; - order: 4; - width: 50%; - } + .form-item-avustuslaji { + order: 2; + } - .form-item-application-open { - break-before: left; - display: block; - margin-top: var(--spacing-m); - order: 5; - width: 30%; - } - [data-drupal-selector='edit-reset'] { - background-color: transparent; - border: 0; - color: var(--color-black); - } + .form-item-hakija { + order: 3; } - .hds-koros svg pattern { - color: var(--color-black-5); + .form-item-search { + max-width: 100%; + order: 4; + width: 50%; } - .hero .hero__container { - padding-bottom: var(--spacing-m); + .form-item-application-open { + break-before: left; + display: block; + margin-top: var(--spacing-m); + order: 5; + width: 30%; } + [data-drupal-selector='edit-reset'] { + background-color: transparent; + border: 0; + color: var(--color-black); + } + } + + .hds-koros svg pattern { + color: var(--color-black-5); } - &--filters { - padding-bottom: var(--spacing-layout-m); - padding-top: 0; + .hero .hero__container { + padding-bottom: var(--spacing-m); } } +.application_search--filters { + padding-bottom: var(--spacing-layout-m); + padding-top: 0; +} + .application_search--rows { display: flex; flex-direction: column; From 1773192df7dc51deca37726ea12c7e4b82116acd Mon Sep 17 00:00:00 2001 From: tuutti Date: Tue, 22 Oct 2024 10:19:37 +0300 Subject: [PATCH 03/74] UHF-10248: Run tests against automatic updates (#1516) --- .github/workflows/test.yml | 2 +- .github/workflows/update-config.yml | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 91edd72bf9..a367baad58 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -34,7 +34,7 @@ jobs: #- name: Make sure configuration was exported in correct language (en or und) # run: | # OUTPUT=$(grep -oP '^langcode: \b(?!(?:en|und)\b)\w+' conf -R || true) - # + # if [ ! -z "$OUTPUT" ]; then # echo "Found configuration that does not match the pattern 'langcode: (en|und)':" >> $GITHUB_STEP_SUMMARY # echo "$OUTPUT" >> $GITHUB_STEP_SUMMARY diff --git a/.github/workflows/update-config.yml b/.github/workflows/update-config.yml index 1a7d61f701..d36258dd60 100644 --- a/.github/workflows/update-config.yml +++ b/.github/workflows/update-config.yml @@ -24,6 +24,12 @@ jobs: steps: - uses: actions/checkout@v4 + - name: Check if required secrets are set + env: + AUTOMATIC_UPDATE_TOKEN: ${{ secrets.AUTOMATIC_UPDATE_TOKEN }} + if: env.AUTOMATIC_UPDATE_TOKEN == '' + run: exit 1 + - name: Download latest dump env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} @@ -77,6 +83,7 @@ jobs: uses: peter-evans/create-pull-request@v6 with: commit-message: Update configuration + token: ${{ secrets.AUTOMATIC_UPDATE_TOKEN }} title: Automatic update labels: auto-update body: | From a5f741a9eb4c213922b3a477b69aa68da5c5413b Mon Sep 17 00:00:00 2001 From: Santeri Hurnanen Date: Tue, 22 Oct 2024 12:59:47 +0300 Subject: [PATCH 04/74] UHF-10131: sentry (#1515) * UHF-10131: Repurpose grants_logger module for sentry logging * UHF-10131: Fix typo * UHF-10131: Code deduplication * UHF-10131: Capture exceptions * UHF-10131: Remove comment --- conf/cmi/core.extension.yml | 1 + .../src/Form/AtvFormBase.php | 20 ++++++ .../src/Form/ResendApplicationsForm.php | 29 +------- .../src/Form/SubmittedApplicationsForm.php | 15 +--- .../src/ApplicationException.php | 2 +- .../src/ApplicationUploaderService.php | 3 + .../Plugin/WebformHandler/GrantsHandler.php | 39 +++++----- .../grants_logger/grants_logger.info.yml | 8 ++- .../grants_logger/grants_logger.services.yml | 10 +-- .../EventSubscriber/SentryEventSubscriber.php | 49 +++++++++++++ .../grants_logger/src/Logger/GrantsLogger.php | 72 ------------------- .../src/GrantsProfileService.php | 5 +- 12 files changed, 107 insertions(+), 146 deletions(-) create mode 100644 public/modules/custom/grants_logger/src/EventSubscriber/SentryEventSubscriber.php delete mode 100644 public/modules/custom/grants_logger/src/Logger/GrantsLogger.php diff --git a/conf/cmi/core.extension.yml b/conf/cmi/core.extension.yml index 22d09b7a54..6d902bec89 100644 --- a/conf/cmi/core.extension.yml +++ b/conf/cmi/core.extension.yml @@ -60,6 +60,7 @@ module: grants_club_section: 0 grants_front_banner: 0 grants_industries: 0 + grants_logger: 0 grants_mandate: 0 grants_members: 0 grants_metadata: 0 diff --git a/public/modules/custom/grants_admin_applications/src/Form/AtvFormBase.php b/public/modules/custom/grants_admin_applications/src/Form/AtvFormBase.php index 30a0f35e80..63a4a3f33d 100644 --- a/public/modules/custom/grants_admin_applications/src/Form/AtvFormBase.php +++ b/public/modules/custom/grants_admin_applications/src/Form/AtvFormBase.php @@ -200,7 +200,27 @@ public function sendApplicationToIntegrations(AtvDocument $atvDoc, string $appli ->error('Application resending failed: @error', ['@error' => $e->getMessage()]); $this->messenger() ->addError($this->t('Application resending failed: @error', ['@error' => $e->getMessage()])); + + \Sentry\captureException($e); } } + /** + * Handle exceptions. + * + * @param string $message + * Log message prefix. + * @param \Throwable $e + * The exception. + */ + protected function handleException(string $message, \Throwable $e): void { + $uuid = Uuid::uuid4()->toString(); + $this->messenger() + ->addError('Error has occurred and has been logged. ID: @uuid', ['@uuid' => $uuid]); + $this->logger(self::LOGGER_CHANNEL)->error( + "$message: @error, ID: @uuid", + ['@error' => $e->getMessage(), '@uuid' => $uuid] + ); + } + } diff --git a/public/modules/custom/grants_admin_applications/src/Form/ResendApplicationsForm.php b/public/modules/custom/grants_admin_applications/src/Form/ResendApplicationsForm.php index aaf6143b45..abe6d2b072 100644 --- a/public/modules/custom/grants_admin_applications/src/Form/ResendApplicationsForm.php +++ b/public/modules/custom/grants_admin_applications/src/Form/ResendApplicationsForm.php @@ -374,13 +374,7 @@ public function getStatus(array $form, FormStateInterface $formState): void { } } catch (\Exception $e) { - $uuid = Uuid::uuid4()->toString(); - $this->messenger() - ->addError('Error has occured and has been logged. ID: @uuid', ['@uuid' => $uuid]); - $this->logger(self::LOGGER_CHANNEL)->error( - 'Error: status check: @error, ID: @uuid', - ['@error' => $e->getMessage(), '@uuid' => $uuid] - ); + $this->handleException("Error: status check", $e); } } @@ -411,7 +405,7 @@ public function resendApplicationCallback(array $form, FormStateInterface $formS $formState->setRebuild(); } catch (GuzzleException | \Exception $e) { - $this->handleException($e); + $this->handleException("Error: Admin application forms - Resend error", $e); } } @@ -449,25 +443,6 @@ private function handleApplicationNotFound(string $applicationId, FormStateInter $formState->setRebuild(); } - /** - * Handle exceptions. - * - * @param \Exception $e - * The exception. - * - * @return void - * Void. - */ - private function handleException(\Exception $e): void { - $uuid = Uuid::uuid4()->toString(); - $this->messenger() - ->addError('Error has occurred and has been logged. ID: @uuid', ['@uuid' => $uuid]); - $this->logger(self::LOGGER_CHANNEL)->error( - 'Error: Admin application forms - Resend error: @error, ID: @uuid', - ['@error' => $e->getMessage(), '@uuid' => $uuid] - ); - } - /** * Ajax callback event. * diff --git a/public/modules/custom/grants_admin_applications/src/Form/SubmittedApplicationsForm.php b/public/modules/custom/grants_admin_applications/src/Form/SubmittedApplicationsForm.php index 9b61b295f9..44aa1ecd3e 100644 --- a/public/modules/custom/grants_admin_applications/src/Form/SubmittedApplicationsForm.php +++ b/public/modules/custom/grants_admin_applications/src/Form/SubmittedApplicationsForm.php @@ -9,7 +9,6 @@ use Drupal\grants_handler\Helpers; use Drupal\helfi_atv\AtvDocument; use GuzzleHttp\Exception\GuzzleException; -use Ramsey\Uuid\Uuid; use Symfony\Component\HttpFoundation\Request; /** @@ -194,12 +193,7 @@ public function resendApplicationCallback(array $form, FormStateInterface $formS $this->sendApplicationToIntegrations($atvDoc, $transactionId); } catch (GuzzleException | \Exception $e) { - $uuid = Uuid::uuid4()->toString(); - $this->messenger()->addError('Error has occured and has been logged. ID: @uuid', ['@uuid' => $uuid]); - $this->logger(self::LOGGER_CHANNEL)->error( - 'Error: Admin application forms - Resend error: @error, ID: @uuid', - ['@error' => $e->getMessage(), '@uuid' => $uuid] - ); + $this->handleException('Error: Admin application forms - Resend error', $e); } } @@ -289,12 +283,7 @@ function (array $doc) { $formState->setRebuild(); } catch (\Exception $e) { - $uuid = Uuid::uuid4()->toString(); - $this->messenger()->addError('Error has occured and has been logged. ID: @uuid', ['@uuid' => $uuid]); - $this->logger(self::LOGGER_CHANNEL)->error( - 'Error: status check: @error, ID: @uuid', - ['@error' => $e->getMessage(), '@uuid' => $uuid] - ); + $this->handleException('Error: status check', $e); } catch (GuzzleException $e) { } diff --git a/public/modules/custom/grants_handler/src/ApplicationException.php b/public/modules/custom/grants_handler/src/ApplicationException.php index 217c95ab4e..c73861f7d4 100644 --- a/public/modules/custom/grants_handler/src/ApplicationException.php +++ b/public/modules/custom/grants_handler/src/ApplicationException.php @@ -3,7 +3,7 @@ namespace Drupal\grants_handler; /** - * General error in applicatoin process. + * General error in application process. */ class ApplicationException extends \Exception { diff --git a/public/modules/custom/grants_handler/src/ApplicationUploaderService.php b/public/modules/custom/grants_handler/src/ApplicationUploaderService.php index 64a651ed52..38d88ae063 100644 --- a/public/modules/custom/grants_handler/src/ApplicationUploaderService.php +++ b/public/modules/custom/grants_handler/src/ApplicationUploaderService.php @@ -262,6 +262,9 @@ public function handleApplicationUploadViaIntegration( catch (\Exception $e) { $this->messenger->addError($this->t('Application saving failed, error has been logged.', [], $tOpts)); $this->logger->error('Error saving application: %msg', ['%msg' => $e->getMessage()]); + + \Sentry\captureException($e); + return FALSE; } } diff --git a/public/modules/custom/grants_handler/src/Plugin/WebformHandler/GrantsHandler.php b/public/modules/custom/grants_handler/src/Plugin/WebformHandler/GrantsHandler.php index c97c6f0070..35dfb62087 100644 --- a/public/modules/custom/grants_handler/src/Plugin/WebformHandler/GrantsHandler.php +++ b/public/modules/custom/grants_handler/src/Plugin/WebformHandler/GrantsHandler.php @@ -1489,13 +1489,9 @@ public function postSaveSubmitForm(): void { ); } } - catch (\Exception $e) { - $this->getLogger('grants_handler') - ->error('Error uploadind application: @error', ['@error' => $e->getMessage()]); - } - catch (GuzzleException $e) { + catch (\Exception | GuzzleException $e) { $this->getLogger('grants_handler') - ->error('Error uploadind application: @error', ['@error' => $e->getMessage()]); + ->error('Error uploading application: @error', ['@error' => $e->getMessage()]); } $this->formLockService->releaseApplicationLock($this->applicationNumber); @@ -1549,27 +1545,22 @@ public function postSave(WebformSubmissionInterface $webform_submission, $update $this->postSaveHandleApplicationNumber($webform_submission); - // If triggering element is either draft save or proper one, - // we want to parse attachments from form. - if ($this->triggeringElement == '::submitForm') { - try { + try { + // If triggering element is either draft save or proper one, + // we want to parse attachments from form. + if ($this->triggeringElement == '::submitForm') { $this->postSaveSubmitForm(); } - catch (GuzzleException $e) { - $this->messenger->addError($this->t('Error saving application. please contact support.')); - $this->getLogger('grants_handler') - ->error('Error saving application: @error', ['@error' => $e->getMessage()]); - } - } - if ($this->triggeringElement == '::submit') { - try { + if ($this->triggeringElement == '::submit') { $this->postSaveSubmit($webform_submission); } - catch (GuzzleException $e) { - $this->messenger->addError($this->t('Error saving application. please contact support.')); - $this->getLogger('grants_handler') - ->error('Error saving application: @error', ['@error' => $e->getMessage()]); - } + } + catch (GuzzleException $e) { + $this->messenger->addError($this->t('Error saving application. please contact support.')); + $this->getLogger('grants_handler') + ->error('Error saving application: @error', ['@error' => $e->getMessage()]); + + \Sentry\captureException($e); } } @@ -1659,6 +1650,8 @@ public function confirmForm( ] ) ); + + \Sentry\captureException($e); } } diff --git a/public/modules/custom/grants_logger/grants_logger.info.yml b/public/modules/custom/grants_logger/grants_logger.info.yml index de39d2fc6e..d490264609 100644 --- a/public/modules/custom/grants_logger/grants_logger.info.yml +++ b/public/modules/custom/grants_logger/grants_logger.info.yml @@ -1,7 +1,9 @@ name: 'Grants Logger' type: module -description: 'Grants logger override.' +description: 'Grants logging customization' package: 'helfi' -core_version_requirement: ^9 || ^10 +core_version_requirement: ^10 || ^11 dependencies: - - helfi_helsinki_profiili + - raven:raven + - helfi_atv:helfi_atv + - helfi_helsinki_profiili:helfi_helsinki_profiili diff --git a/public/modules/custom/grants_logger/grants_logger.services.yml b/public/modules/custom/grants_logger/grants_logger.services.yml index 9877d00fe2..4a9cf5d5b0 100644 --- a/public/modules/custom/grants_logger/grants_logger.services.yml +++ b/public/modules/custom/grants_logger/grants_logger.services.yml @@ -1,6 +1,6 @@ services: - logger.dblog: - class: Drupal\grants_logger\Logger\GrantsLogger - arguments: ['@database', '@logger.log_message_parser', '@helfi_helsinki_profiili.userdata'] - tags: - - { name: logger } + _defaults: + autowire: true + autoconfigure: true + + Drupal\grants_logger\EventSubscriber\SentryEventSubscriber: ~ diff --git a/public/modules/custom/grants_logger/src/EventSubscriber/SentryEventSubscriber.php b/public/modules/custom/grants_logger/src/EventSubscriber/SentryEventSubscriber.php new file mode 100644 index 0000000000..12b69d326f --- /dev/null +++ b/public/modules/custom/grants_logger/src/EventSubscriber/SentryEventSubscriber.php @@ -0,0 +1,49 @@ + 'onAtvException', + HelsinkiProfiiliExceptionEvent::EVENT_ID => 'onHelsinkiProfiiliException', + ]; + } + + /** + * Logs the event to sentry. + * + * @param \Drupal\helfi_atv\Event\AtvServiceExceptionEvent $event + * An exception event. + */ + public function onAtvException(AtvServiceExceptionEvent $event): void { + // Consider ignoring the event if $event is instanceof GuzzleException + // and http error status code is _some_status_code_ if, for example, 404 + // errors cause too much error spam here. + \Sentry\captureException($event->getException()); + } + + /** + * Logs the event to sentry. + * + * @param \Drupal\helfi_helsinki_profiili\Event\HelsinkiProfiiliExceptionEvent $event + * An exception event. + */ + public function onHelsinkiProfiiliException(HelsinkiProfiiliExceptionEvent $event): void { + \Sentry\captureException($event->getException()); + } + +} diff --git a/public/modules/custom/grants_logger/src/Logger/GrantsLogger.php b/public/modules/custom/grants_logger/src/Logger/GrantsLogger.php deleted file mode 100644 index f8fc036a19..0000000000 --- a/public/modules/custom/grants_logger/src/Logger/GrantsLogger.php +++ /dev/null @@ -1,72 +0,0 @@ -connection = $connection; - $this->parser = $parser; - $this->helfiHelsinkiProfiiliUserdata = $helfiHelsinkiProfiiliUserdata; - } - - /** - * {@inheritdoc} - */ - public function log($level, $message, array $context = []): void { - - if ($this->helfiHelsinkiProfiiliUserdata->isAuthenticatedExternally()) { - $userData = $this->helfiHelsinkiProfiiliUserdata->getUserData(); - if ($userData) { - $message = $message . (' (HP UUID: @helfi_hp_uid)'); - $context['@helfi_hp_uid'] = $userData["sub"]; - } - } - - parent::log($level, $message, $context); - } - -} diff --git a/public/modules/custom/grants_profile/src/GrantsProfileService.php b/public/modules/custom/grants_profile/src/GrantsProfileService.php index 614c213904..b030cd4056 100644 --- a/public/modules/custom/grants_profile/src/GrantsProfileService.php +++ b/public/modules/custom/grants_profile/src/GrantsProfileService.php @@ -303,8 +303,9 @@ public function createNewProfile( $this->logger ->error('Error fetching community data. Error: %error', [ '%error' => $e->getMessage(), - ] - ); + ]); + + \Sentry\captureException($e); } return $newProfile; } From 4eca6e9a901c932cf4eebede9d020e73750744cd Mon Sep 17 00:00:00 2001 From: Janne Suominen Date: Wed, 23 Oct 2024 09:49:59 +0300 Subject: [PATCH 05/74] feat: UHF-XXXX: Fix failing tests by fixing dependency-related errors. (#1517) * Refactor events to custom module to get installation to succeed * Make some services use lazyloading with events service. * Add update hook & make sure drush deploy is run 1st. * PHPCS * Try to clear caches after importing DB to no avail. --- conf/cmi/core.extension.yml | 5 +- .../src/Form/AtvFormBase.php | 4 +- .../grants_attachments.info.yml | 2 +- .../grants_attachments.services.yml | 3 +- .../src/AttachmentHandler.php | 22 +- .../GrantsAttachmentsController.php | 6 +- .../WebformElement/GrantsAttachments.php | 6 +- .../grants_events/grants_events.info.yml | 5 + .../custom/grants_events/grants_events.module | 6 + .../grants_events/grants_events.services.yml | 4 + .../grants_events/src/EventException.php | 10 + .../grants_events/src/EventsService.php | 248 ++++++++++++++++++ .../grants_handler/grants_handler.install | 10 + .../grants_handler/grants_handler.module | 6 +- .../grants_handler.services.yml | 7 +- .../src/Controller/MessageController.php | 6 +- .../src/Form/CopyApplicationModalForm.php | 4 +- .../grants_handler/src/MessageService.php | 17 +- .../tests/src/Kernel/DataConversionTest.php | 1 + .../grants_metadata.services.yml | 2 +- .../src/ApplicationDataService.php | 6 +- .../tests/src/Kernel/AtvSchemaTest.php | 1 + tools/make/project/install.mk | 2 +- tools/make/project/zzavustusasiointi.mk | 2 + 24 files changed, 346 insertions(+), 39 deletions(-) create mode 100644 public/modules/custom/grants_events/grants_events.info.yml create mode 100644 public/modules/custom/grants_events/grants_events.module create mode 100644 public/modules/custom/grants_events/grants_events.services.yml create mode 100644 public/modules/custom/grants_events/src/EventException.php create mode 100644 public/modules/custom/grants_events/src/EventsService.php diff --git a/conf/cmi/core.extension.yml b/conf/cmi/core.extension.yml index 6d902bec89..c1cc542cb9 100644 --- a/conf/cmi/core.extension.yml +++ b/conf/cmi/core.extension.yml @@ -49,12 +49,12 @@ module: flysystem: 0 focal_point: 0 gin_toolbar: 0 + grants_events: 0 grant_applications_content: 0 grant_applications_noscript: 0 grants_admin_applications: 0 grants_applicant_info: 0 grants_application_search: 0 - grants_attachments: 0 grants_audit_log: 0 grants_budget_components: 0 grants_club_section: 0 @@ -218,9 +218,10 @@ module: webform_translation_permissions: 0 webform_ui: 0 webform_views: 0 - grants_handler: 1 + grants_attachments: 1 menu_admin_per_menu: 1 pathauto: 1 + grants_handler: 2 content_translation: 10 externalauth: 10 views: 10 diff --git a/public/modules/custom/grants_admin_applications/src/Form/AtvFormBase.php b/public/modules/custom/grants_admin_applications/src/Form/AtvFormBase.php index 63a4a3f33d..75d6cbdae4 100644 --- a/public/modules/custom/grants_admin_applications/src/Form/AtvFormBase.php +++ b/public/modules/custom/grants_admin_applications/src/Form/AtvFormBase.php @@ -10,9 +10,9 @@ use Drupal\Core\Form\FormStateInterface; use Drupal\Core\Session\AccountProxyInterface; use Drupal\grants_attachments\AttachmentFixerService; +use Drupal\grants_events\EventsService; use Drupal\grants_handler\ApplicationGetterService; use Drupal\grants_handler\ApplicationHelpers; -use Drupal\grants_handler\EventsService; use Drupal\grants_handler\Helpers; use Drupal\grants_handler\MessageService; use Drupal\helfi_atv\AtvDocument; @@ -62,7 +62,7 @@ public static function create(ContainerInterface $container): self { $container->get('database'), $container->get('grants_handler.application_getter_service'), $container->get('http_client'), - $container->get('grants_handler.events_service'), + $container->get('grants_events.events_service'), $container->get('helfi_atv.atv_service'), $container->get('grants_handler.message_service'), $container->get('current_user'), diff --git a/public/modules/custom/grants_attachments/grants_attachments.info.yml b/public/modules/custom/grants_attachments/grants_attachments.info.yml index abda7bddc3..399ac80f5f 100644 --- a/public/modules/custom/grants_attachments/grants_attachments.info.yml +++ b/public/modules/custom/grants_attachments/grants_attachments.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^9 || ^10 dependencies: - webform - grants_metadata - - grants_handler + - grants_events 'interface translation project': grants_attachments 'interface translation server pattern': modules/custom/grants_attachments/translations/%language.po diff --git a/public/modules/custom/grants_attachments/grants_attachments.services.yml b/public/modules/custom/grants_attachments/grants_attachments.services.yml index e4c6f27dc7..b86c338f44 100644 --- a/public/modules/custom/grants_attachments/grants_attachments.services.yml +++ b/public/modules/custom/grants_attachments/grants_attachments.services.yml @@ -26,11 +26,12 @@ services: '@helfi_atv.atv_service', '@grants_profile.service', '@grants_metadata.atv_schema', - '@grants_handler.events_service', '@helfi_audit_log.audit_log', '@entity_type.manager', '@grants_metadata.application_data_service' ] + calls: + - [ setEventsService, [ '@?grants_events.events_service' ] ] grants_attachments.attachment_fixer_service: class: Drupal\grants_attachments\AttachmentFixerService diff --git a/public/modules/custom/grants_attachments/src/AttachmentHandler.php b/public/modules/custom/grants_attachments/src/AttachmentHandler.php index 63f8319e17..5730e689e3 100644 --- a/public/modules/custom/grants_attachments/src/AttachmentHandler.php +++ b/public/modules/custom/grants_attachments/src/AttachmentHandler.php @@ -12,10 +12,10 @@ use Drupal\Core\StringTranslation\StringTranslationTrait; use Drupal\Core\TempStore\TempStoreException; use Drupal\grants_attachments\Plugin\WebformElement\GrantsAttachments; +use Drupal\grants_events\EventsService; use Drupal\grants_handler\ApplicationHelpers; use Drupal\grants_handler\DebuggableTrait; use Drupal\grants_handler\EventException; -use Drupal\grants_handler\EventsService; use Drupal\grants_handler\Helpers; use Drupal\grants_metadata\ApplicationDataService; use Drupal\grants_metadata\AtvSchema; @@ -67,6 +67,13 @@ class AttachmentHandler { */ protected EntityStorageInterface $fileStorage; + /** + * Events service. + * + * @var \Drupal\grants_events\EventsService + */ + protected EventsService $eventService; + /** * Constructs an AttachmentHandler object. * @@ -82,8 +89,6 @@ class AttachmentHandler { * Profile service. * @param \Drupal\grants_metadata\AtvSchema $atvSchema * ATV schema. - * @param \Drupal\grants_handler\EventsService $eventService - * Events service. * @param \Drupal\helfi_audit_log\AuditLogService $auditLogService * Audit log mandate errors. * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entityTypeManager @@ -101,7 +106,6 @@ public function __construct( protected AtvService $atvService, protected GrantsProfileService $grantsProfileService, protected AtvSchema $atvSchema, - protected EventsService $eventService, protected AuditLogService $auditLogService, EntityTypeManagerInterface $entityTypeManager, protected ApplicationDataService $applicationDataService, @@ -113,6 +117,16 @@ public function __construct( $this->setDebug(NULL); } + /** + * Set the getter service. + * + * @param \Drupal\grants_events\EventsService $eventsService + * Events service. + */ + public function setEventsService(EventsService $eventsService): void { + $this->eventService = $eventsService; + } + /** * Get file fields. * diff --git a/public/modules/custom/grants_attachments/src/Controller/GrantsAttachmentsController.php b/public/modules/custom/grants_attachments/src/Controller/GrantsAttachmentsController.php index c5a4ff4910..65d79e1993 100644 --- a/public/modules/custom/grants_attachments/src/Controller/GrantsAttachmentsController.php +++ b/public/modules/custom/grants_attachments/src/Controller/GrantsAttachmentsController.php @@ -7,10 +7,10 @@ use Drupal\Core\Messenger\MessengerTrait; use Drupal\Core\StringTranslation\StringTranslationTrait; use Drupal\grants_attachments\Plugin\WebformElement\GrantsAttachments; +use Drupal\grants_events\EventsService; use Drupal\grants_handler\ApplicationGetterService; use Drupal\grants_handler\ApplicationStatusService; use Drupal\grants_handler\ApplicationUploaderService; -use Drupal\grants_handler\EventsService; use Drupal\grants_metadata\ApplicationDataService; use Drupal\helfi_atv\AtvService; use Symfony\Component\DependencyInjection\ContainerInterface; @@ -34,7 +34,7 @@ class GrantsAttachmentsController extends ControllerBase { * The helfi_atv service. * @param \Symfony\Component\HttpFoundation\RequestStack $requestStack * Drupal requests. - * @param \Drupal\grants_handler\EventsService $eventsService + * @param \Drupal\grants_events\EventsService $eventsService * Use submission events productively. * @param \Drupal\grants_handler\ApplicationStatusService $applicationStatusService * Application status service. @@ -62,7 +62,7 @@ public static function create(ContainerInterface $container): static { return new static( $container->get('helfi_atv.atv_service'), $container->get('request_stack'), - $container->get('grants_handler.events_service'), + $container->get('grants_events.events_service'), $container->get('grants_handler.application_status_service'), $container->get('grants_metadata.application_data_service'), $container->get('grants_handler.application_getter_service'), diff --git a/public/modules/custom/grants_attachments/src/Plugin/WebformElement/GrantsAttachments.php b/public/modules/custom/grants_attachments/src/Plugin/WebformElement/GrantsAttachments.php index ea2359470f..0511df78b9 100644 --- a/public/modules/custom/grants_attachments/src/Plugin/WebformElement/GrantsAttachments.php +++ b/public/modules/custom/grants_attachments/src/Plugin/WebformElement/GrantsAttachments.php @@ -5,7 +5,7 @@ use Drupal\Core\Form\FormStateInterface; use Drupal\grants_attachments\AttachmentHandler; use Drupal\grants_attachments\Element\GrantsAttachments as ElementGrantsAttachments; -use Drupal\grants_handler\EventsService; +use Drupal\grants_events\EventsService; use Drupal\webform\Plugin\WebformElement\WebformCompositeBase; use Drupal\webform\WebformSubmissionInterface; use Symfony\Component\DependencyInjection\ContainerInterface; @@ -79,7 +79,7 @@ final class GrantsAttachments extends WebformCompositeBase { /** * Events service. * - * @var \Drupal\grants_handler\EventsService + * @var \Drupal\grants_events\EventsService */ protected EventsService $eventsService; @@ -93,7 +93,7 @@ public static function create( $plugin_definition, ): GrantsAttachments { $instance = parent::create($container, $configuration, $plugin_id, $plugin_definition); - $instance->eventsService = $container->get('grants_handler.events_service'); + $instance->eventsService = $container->get('grants_events.events_service'); return $instance; } diff --git a/public/modules/custom/grants_events/grants_events.info.yml b/public/modules/custom/grants_events/grants_events.info.yml new file mode 100644 index 0000000000..e88ed228ff --- /dev/null +++ b/public/modules/custom/grants_events/grants_events.info.yml @@ -0,0 +1,5 @@ +name: 'grants_events' +type: module +description: 'Handle application events' +package: helfi +core_version_requirement: ^10 || ^11 diff --git a/public/modules/custom/grants_events/grants_events.module b/public/modules/custom/grants_events/grants_events.module new file mode 100644 index 0000000000..f55bd612b0 --- /dev/null +++ b/public/modules/custom/grants_events/grants_events.module @@ -0,0 +1,6 @@ + 'AVUSTUS2_MSG_OK', + 'AVUSTUS2_ATT_OK' => 'AVUSTUS2_ATT_OK', + 'STATUS_UPDATE' => 'STATUS_UPDATE', + 'MESSAGE_AVUS2' => 'MESSAGE_AVUS2', + 'MESSAGE_APP' => 'MESSAGE_APP', + 'MESSAGE_READ' => 'MESSAGE_READ', + 'MESSAGE_RESEND' => 'MESSAGE_RESEND', + 'HANDLER_ATT_OK' => 'HANDLER_ATT_OK', + 'HANDLER_ATT_DELETE' => 'HANDLER_ATT_DELETE', + 'HANDLER_RESEND_APP' => 'HANDLER_RESEND_APP', + 'HANDLER_APP_COPIED' => 'HANDLER_APP_COPIED', + 'INTEGRATION_INFO_ATT_OK' => 'INTEGRATION_INFO_ATT_OK', + 'INTEGRATION_INFO_APP_OK' => 'INTEGRATION_INFO_APP_OK', + 'EVENT_INFO' => 'EVENT_INFO', + 'HANDLER_ATT_DELETED' => 'HANDLER_ATT_DELETED', + 'INTEGRATION_ERROR_AVUS2' => 'INTEGRATION_ERROR_AVUS2', + 'INTEGRATION_ERROR_ATV_ATT' => 'INTEGRATION_ERROR_ATV_ATT', + ]; + + /** + * Constructs a MessageService object. + * + * @param \GuzzleHttp\Client $http_client + * Client to post data. + * @param \Drupal\Core\Logger\LoggerChannelFactory $loggerFactory + * Log things. + */ + public function __construct( + Client $http_client, + LoggerChannelFactoryInterface $loggerFactory, + ) { + $this->httpClient = $http_client; + $this->logger = $loggerFactory->get('grants_handler_events_service'); + + $this->endpoint = getenv('AVUSTUS2_EVENT_ENDPOINT'); + $this->username = getenv('AVUSTUS2_USERNAME'); + $this->password = getenv('AVUSTUS2_PASSWORD'); + + $this->setDebug(NULL); + + } + + /** + * Get event types. + * + * @return array|string[] + * Event types. + */ + public function getEventTypes(): array { + return $this->eventTypes; + } + + /** + * Log event to document via event integration. + * + * @param string $applicationNumber + * Application to be logged. + * @param string $eventType + * Type of event, must be configured in this class as active one. + * @param string $eventDescription + * Free message to be added. + * @param string $eventTarget + * Target ID for event. + * @param array $eventData + * If we have already built-up event data, use this. + * + * @return array|null + * EventID if success, otherways NULL + * + * @throws \Drupal\grants_events\EventException + */ + public function logEvent( + string $applicationNumber, + string $eventType, + string $eventDescription, + string $eventTarget, + array $eventData = [], + ): ?array { + + if (empty($eventData)) { + $eventData = self::getEventData($eventType, $applicationNumber, $eventDescription, $eventTarget); + } + + $eventDataJson = Json::encode($eventData); + + if (TRUE === $this->debug) { + $this->logger->debug( + 'Event ID: %eventId, JSON: %json', + [ + '%eventId' => $eventData['eventID'], + '%json' => $eventDataJson, + ]); + } + + try { + + $res = $this->httpClient->post($this->endpoint, [ + 'auth' => [$this->username, $this->password, "Basic"], + 'body' => $eventDataJson, + ]); + + if ($res->getStatusCode() == 200) { + $this->logger->info('Event logged: %eventId, message sent.', ['%eventId' => $eventData['eventID']]); + return $eventData; + } + + } + catch (\Exception $e) { + throw new EventException($e->getMessage()); + } + catch (GuzzleException $e) { + throw new EventException($e->getMessage()); + } + + return NULL; + } + + /** + * Filter events by given key. + * + * @param array $events + * Events to be filtered. + * @param string $typeKey + * Event type wanted. + * + * @return array + * Filtered events. + */ + public function filterEvents(array $events, string $typeKey): array { + $messageEvents = array_filter($events, function ($event) use ($typeKey) { + if ($event['eventType'] == $this->eventTypes[$typeKey]) { + return TRUE; + } + return FALSE; + }); + + return [ + 'events' => $messageEvents, + 'event_targets' => array_column($messageEvents, 'eventTarget'), + 'event_ids' => array_column($messageEvents, 'eventID'), + ]; + } + + /** + * Build event object/array from given data. + * + * @param string $eventType + * Type of event, must be in self::$eventTypes. + * @param string $applicationNumber + * Application number for event. + * @param string $eventDescription + * Event description. + * @param string $eventTarget + * Eent target. + * + * @return array + * Event data in array. + * + * @throws \Drupal\grants_events\EventException + */ + public function getEventData(string $eventType, string $applicationNumber, string $eventDescription, string $eventTarget): array { + $eventData = []; + + if (!in_array($eventType, $this->eventTypes)) { + throw new EventException('Not valid event type: ' . $eventType); + } + else { + $eventData['eventType'] = $eventType; + } + + $eventData['eventID'] = Uuid::uuid4()->toString(); + $eventData['caseId'] = $applicationNumber; + $eventData['eventDescription'] = AtvSchema::sanitizeInput($eventDescription); + $eventData['eventTarget'] = $eventTarget; + + if (!isset($eventData['eventSource'])) { + $eventData['eventSource'] = getenv('EVENTS_SOURCE'); + } + + $dt = new \DateTime(); + $dt->setTimezone(new \DateTimeZone('Europe/Helsinki')); + + $eventData['timeCreated'] = $eventData['timeUpdated'] = $dt->format('Y-m-d\TH:i:s'); + return $eventData; + } + +} diff --git a/public/modules/custom/grants_handler/grants_handler.install b/public/modules/custom/grants_handler/grants_handler.install index edab455b4e..c07bfd3951 100644 --- a/public/modules/custom/grants_handler/grants_handler.install +++ b/public/modules/custom/grants_handler/grants_handler.install @@ -216,6 +216,8 @@ function grants_handler_schema(): array { * Name of field. * @param int $new_length * New length for field. + * + * @throws \Exception */ function _module_change_text_field_max_length($entity_type_id, $field_name, $new_length) { $name = 'field.storage.' . $entity_type_id . "." . $field_name; @@ -369,3 +371,11 @@ function grants_handler_update_9008(&$sandbox) { ->schema() ->createTable('grants_handler_locks', $schema['grants_handler_locks']); } + +/** + * Install grants_events module. + */ +function grants_handler_update_9009(&$sandbox): void { + // Enable the grants_attachments module. + \Drupal::service('module_installer')->install(['grants_events']); +} diff --git a/public/modules/custom/grants_handler/grants_handler.module b/public/modules/custom/grants_handler/grants_handler.module index 9ba74435cf..8dbb351477 100644 --- a/public/modules/custom/grants_handler/grants_handler.module +++ b/public/modules/custom/grants_handler/grants_handler.module @@ -1289,8 +1289,8 @@ function grants_handler_preprocess_webform_submission_handler_details(&$variable $submission = $variables['submission']; $submissionData = $submission->getData(); - /** @var \Drupal\grants_handler\EventsService $eventService */ - $eventService = \Drupal::service('grants_handler.events_service'); + /** @var \Drupal\grants_events\EventsService $eventService */ + $eventService = \Drupal::service('grants_events.events_service'); $handlerEvents = array_filter($submissionData['events'], function ($event) use ($eventService) { if ($event['eventType'] == $eventService->getEventTypes()['EVENT_INFO']) { @@ -1314,7 +1314,7 @@ function grants_handler_preprocess_webform_submission_attachment_list(&$variable $submissionData = $submission->getData(); // Get submission events. - $eventService = \Drupal::service('grants_handler.events_service'); + $eventService = \Drupal::service('grants_events.events_service'); $attachmentEventsHandler = $eventService->filterEvents($submissionData['events'], 'HANDLER_ATT_OK'); $attachments = []; diff --git a/public/modules/custom/grants_handler/grants_handler.services.yml b/public/modules/custom/grants_handler/grants_handler.services.yml index 7f6beb7e17..c054cdd8b7 100644 --- a/public/modules/custom/grants_handler/grants_handler.services.yml +++ b/public/modules/custom/grants_handler/grants_handler.services.yml @@ -11,11 +11,12 @@ services: '@helfi_helsinki_profiili.userdata', '@http_client', '@logger.factory', - '@grants_handler.events_service', '@helfi_atv.atv_service', '@current_user', '@grants_handler.application_status_service' ] + calls: + - [ setEventsService, [ '@?grants_events.events_service' ] ] grants_handler.navigation_helper: class: Drupal\grants_handler\GrantsHandlerNavigationHelper @@ -28,10 +29,6 @@ services: '@datetime.time' ] - grants_handler.events_service: - class: Drupal\grants_handler\EventsService - arguments: [ '@http_client', '@logger.factory' ] - grants_handler.form_lock_service: class: Drupal\grants_handler\FormLockService arguments: [ diff --git a/public/modules/custom/grants_handler/src/Controller/MessageController.php b/public/modules/custom/grants_handler/src/Controller/MessageController.php index cf92cfe078..dce39f82ad 100644 --- a/public/modules/custom/grants_handler/src/Controller/MessageController.php +++ b/public/modules/custom/grants_handler/src/Controller/MessageController.php @@ -9,10 +9,10 @@ use Drupal\Core\Messenger\MessengerTrait; use Drupal\Core\Render\Renderer; use Drupal\Core\StringTranslation\StringTranslationTrait; +use Drupal\grants_events\EventsService; use Drupal\grants_handler\ApplicationGetterService; use Drupal\grants_handler\DebuggableTrait; use Drupal\grants_handler\EventException; -use Drupal\grants_handler\EventsService; use Drupal\grants_handler\MessageService; use Drupal\helfi_atv\AtvService; use GuzzleHttp\Exception\GuzzleException; @@ -33,7 +33,7 @@ class MessageController extends ControllerBase { /** * The controller constructor. * - * @param \Drupal\grants_handler\EventsService $eventsService + * @param \Drupal\grants_events\EventsService $eventsService * Use submission events productively. * @param \Drupal\grants_handler\MessageService $messageService * Use messages productively. @@ -62,7 +62,7 @@ public function __construct( */ public static function create(ContainerInterface $container): MessageController|static { return new static( - $container->get('grants_handler.events_service'), + $container->get('grants_events.events_service'), $container->get('grants_handler.message_service'), $container->get('request_stack'), $container->get('helfi_atv.atv_service'), diff --git a/public/modules/custom/grants_handler/src/Form/CopyApplicationModalForm.php b/public/modules/custom/grants_handler/src/Form/CopyApplicationModalForm.php index 3c3c6240df..7e2c463eb2 100644 --- a/public/modules/custom/grants_handler/src/Form/CopyApplicationModalForm.php +++ b/public/modules/custom/grants_handler/src/Form/CopyApplicationModalForm.php @@ -10,11 +10,11 @@ use Drupal\Core\Form\FormStateInterface; use Drupal\Core\Render\Renderer; use Drupal\Core\Url; +use Drupal\grants_events\EventsService; use Drupal\grants_handler\ApplicationGetterService; use Drupal\grants_handler\ApplicationInitService; use Drupal\grants_handler\ApplicationStatusService; use Drupal\grants_handler\DebuggableTrait; -use Drupal\grants_handler\EventsService; use GuzzleHttp\Exception\GuzzleException; use Symfony\Component\DependencyInjection\ContainerInterface; @@ -49,7 +49,7 @@ public static function create(ContainerInterface $container): CopyApplicationMod // Create a new form object and inject its services. $form = new static( $container->get('renderer'), - $container->get('grants_handler.events_service'), + $container->get('grants_events.events_service'), $container->get('grants_handler.application_status_service'), $container->get('grants_handler.application_init_service'), $container->get('grants_handler.application_getter_service') diff --git a/public/modules/custom/grants_handler/src/MessageService.php b/public/modules/custom/grants_handler/src/MessageService.php index 6c65dadb5f..419e565994 100644 --- a/public/modules/custom/grants_handler/src/MessageService.php +++ b/public/modules/custom/grants_handler/src/MessageService.php @@ -9,6 +9,7 @@ use Drupal\Core\Logger\LoggerChannelInterface; use Drupal\Core\Session\AccountProxyInterface; use Drupal\Core\StringTranslation\StringTranslationTrait; +use Drupal\grants_events\EventsService; use Drupal\grants_metadata\AtvSchema; use Drupal\helfi_atv\AtvService; use Drupal\helfi_helsinki_profiili\HelsinkiProfiiliUserData; @@ -47,7 +48,7 @@ class MessageService { /** * Log events via integration. * - * @var \Drupal\grants_handler\EventsService + * @var \Drupal\grants_events\EventsService */ protected EventsService $eventsService; @@ -103,8 +104,6 @@ class MessageService { * Client to post data. * @param \Drupal\Core\Logger\LoggerChannelFactoryInterface $loggerFactory * Log things. - * @param \Drupal\grants_handler\EventsService $eventsService - * Log events to atv document. * @param \Drupal\helfi_atv\AtvService $atvService * Access to ATV. * @param \Drupal\Core\Session\AccountProxyInterface $currentUser @@ -116,7 +115,6 @@ public function __construct( HelsinkiProfiiliUserData $helfi_helsinki_profiili_userdata, Client $http_client, LoggerChannelFactoryInterface $loggerFactory, - EventsService $eventsService, AtvService $atvService, AccountProxyInterface $currentUser, ApplicationStatusService $applicationStatusService, @@ -124,7 +122,6 @@ public function __construct( $this->helfiHelsinkiProfiiliUserdata = $helfi_helsinki_profiili_userdata; $this->httpClient = $http_client; $this->logger = $loggerFactory->get('grants_handler_message_service'); - $this->eventsService = $eventsService; $this->atvService = $atvService; $this->currentUser = $currentUser; $this->applicationStatusService = $applicationStatusService; @@ -136,6 +133,16 @@ public function __construct( $this->setDebug(NULL); } + /** + * Set the getter service. + * + * @param \Drupal\grants_events\EventsService $eventsService + * Events service. + */ + public function setEventsService(EventsService $eventsService): void { + $this->eventsService = $eventsService; + } + /** * Send message to backend. * diff --git a/public/modules/custom/grants_handler/tests/src/Kernel/DataConversionTest.php b/public/modules/custom/grants_handler/tests/src/Kernel/DataConversionTest.php index e7d65adab4..0af24b75cc 100644 --- a/public/modules/custom/grants_handler/tests/src/Kernel/DataConversionTest.php +++ b/public/modules/custom/grants_handler/tests/src/Kernel/DataConversionTest.php @@ -43,6 +43,7 @@ class DataConversionTest extends GrantsKernelTestBase implements ServiceModifier 'helfi_yjdh', // Project modules. 'grants_applicant_info', + 'grants_events', 'grants_attachments', 'grants_budget_components', 'grants_club_section', diff --git a/public/modules/custom/grants_metadata/grants_metadata.services.yml b/public/modules/custom/grants_metadata/grants_metadata.services.yml index fca9808161..deeb66bcf9 100644 --- a/public/modules/custom/grants_metadata/grants_metadata.services.yml +++ b/public/modules/custom/grants_metadata/grants_metadata.services.yml @@ -17,4 +17,4 @@ services: '@database' ] calls: - - [ setEventsService, [ '@?grants_handler.events_service' ] ] + - [ setEventsService, [ '@?grants_events.events_service' ] ] diff --git a/public/modules/custom/grants_metadata/src/ApplicationDataService.php b/public/modules/custom/grants_metadata/src/ApplicationDataService.php index 9125424e4b..2d2f18001c 100644 --- a/public/modules/custom/grants_metadata/src/ApplicationDataService.php +++ b/public/modules/custom/grants_metadata/src/ApplicationDataService.php @@ -7,8 +7,8 @@ use Drupal\Core\Logger\LoggerChannelInterface; use Drupal\Core\TypedData\TypedDataInterface; use Drupal\grants_attachments\AttachmentHandler; +use Drupal\grants_events\EventsService; use Drupal\grants_handler\DebuggableTrait; -use Drupal\grants_handler\EventsService; use Drupal\grants_handler\Helpers; /** @@ -40,7 +40,7 @@ final class ApplicationDataService { /** * Events service. * - * @var \Drupal\grants_handler\EventsService + * @var \Drupal\grants_events\EventsService */ protected EventsService $eventsService; @@ -63,7 +63,7 @@ public function __construct( /** * Set the getter service. * - * @param \Drupal\grants_handler\EventsService $eventsService + * @param \Drupal\grants_events\EventsService $eventsService * Events service. */ public function setEventsService(EventsService $eventsService): void { diff --git a/public/modules/custom/grants_metadata/tests/src/Kernel/AtvSchemaTest.php b/public/modules/custom/grants_metadata/tests/src/Kernel/AtvSchemaTest.php index e598954a25..b33245862b 100644 --- a/public/modules/custom/grants_metadata/tests/src/Kernel/AtvSchemaTest.php +++ b/public/modules/custom/grants_metadata/tests/src/Kernel/AtvSchemaTest.php @@ -45,6 +45,7 @@ class AtvSchemaTest extends GrantsKernelTestBase implements ServiceModifierInter 'helfi_yjdh', // Project modules. 'grants_applicant_info', + 'grants_events', 'grants_attachments', 'grants_budget_components', 'grants_club_section', diff --git a/tools/make/project/install.mk b/tools/make/project/install.mk index fade4de0d1..483d64f7e1 100644 --- a/tools/make/project/install.mk +++ b/tools/make/project/install.mk @@ -3,7 +3,7 @@ ifeq ($(DRUPAL_CONF_EXISTS),yes) else DRUPAL_NEW_TARGETS := up build drush-si drush-helfi-enable-modules drush-locale-update drush-helfi-locale-import drush-unblock drush-uli endif -DRUPAL_POST_INSTALL_TARGETS := drush-locale-update drush-deploy drush-helfi-locale-import drush-unblock +DRUPAL_POST_INSTALL_TARGETS := drush-deploy drush-locale-update drush-helfi-locale-import drush-unblock OC_LOGIN_TOKEN ?= $(shell bash -c 'read -s -p "You must obtain an API token by visiting https://oauth-openshift.apps.arodevtest.hel.fi/oauth/token/request (Token):" token; echo $$token') diff --git a/tools/make/project/zzavustusasiointi.mk b/tools/make/project/zzavustusasiointi.mk index ba94ad7f11..3ae0d5ae20 100644 --- a/tools/make/project/zzavustusasiointi.mk +++ b/tools/make/project/zzavustusasiointi.mk @@ -60,9 +60,11 @@ drush-sync-db: ## Sync database ifeq ($(DUMP_SQL_EXISTS),yes) $(call step,Import local SQL dump...) $(call drush,sql-query --file=${DOCKER_PROJECT_ROOT}/$(DUMP_SQL_FILENAME) && echo 'SQL dump imported') + $(call drush,cr -y) else $(call step,Sync database from @$(DRUPAL_SYNC_SOURCE)...) $(call drush,sql-sync -y --structure-tables-key=common,key_value_expire @$(DRUPAL_SYNC_SOURCE) @self) + $(call drush,cr -y) endif PHONY += drush-create-dump From 6eedab018dffbb49c1ca908b08951b3c75e7e627 Mon Sep 17 00:00:00 2001 From: Janne Suominen Date: Wed, 23 Oct 2024 10:35:05 +0300 Subject: [PATCH 06/74] fix: Disable pubsub (#1518) --- docker/openshift/crons/pubsub.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docker/openshift/crons/pubsub.sh b/docker/openshift/crons/pubsub.sh index be359b9f04..9322fdf876 100644 --- a/docker/openshift/crons/pubsub.sh +++ b/docker/openshift/crons/pubsub.sh @@ -1,10 +1,10 @@ #!/bin/bash -echo "Running PubSub daemon: $(date +'%Y-%m-%dT%H:%M:%S%:z')" +#echo "Running PubSub daemon: $(date +'%Y-%m-%dT%H:%M:%S%:z')" while true do # PubSub process exists with success return code after # certain number of messages and should then be restarted. - drush helfi:azure:pubsub-listen || exit 1 +# drush helfi:azure:pubsub-listen || exit 1 done From 279c894e2f113c40e97878f4ca3d3bed8ba19246 Mon Sep 17 00:00:00 2001 From: rpnykanen <48206082+rpnykanen@users.noreply.github.com> Date: Wed, 23 Oct 2024 11:01:38 +0300 Subject: [PATCH 07/74] must be completely commented out (#1519) --- docker/openshift/crons/pubsub.sh | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docker/openshift/crons/pubsub.sh b/docker/openshift/crons/pubsub.sh index 9322fdf876..8e62c2d688 100644 --- a/docker/openshift/crons/pubsub.sh +++ b/docker/openshift/crons/pubsub.sh @@ -1,10 +1,10 @@ #!/bin/bash -#echo "Running PubSub daemon: $(date +'%Y-%m-%dT%H:%M:%S%:z')" +# echo "Running PubSub daemon: $(date +'%Y-%m-%dT%H:%M:%S%:z')" -while true -do +# while true +# do # PubSub process exists with success return code after # certain number of messages and should then be restarted. -# drush helfi:azure:pubsub-listen || exit 1 -done + # drush helfi:azure:pubsub-listen || exit 1 +#done From cf2b04c26a459724700cc5ec6bf1523d479f56ed Mon Sep 17 00:00:00 2001 From: Tero Elonen <2276077+teroelonen@users.noreply.github.com> Date: Wed, 23 Oct 2024 12:53:02 +0300 Subject: [PATCH 08/74] UHF-10276: Replace old dialog.js implementation from forms (#1511) * UHF-10276: Replace the dialog.js functionality with custom dialog * UHF-10276: Fix translations, style the close button on the dialog * UHF-10276: Add focus trap for the dialog * UHF-10276: Refactor dialog and survey styles together * UHF-10276: Add comment about survey similarities * UHF-10276: Refactor dialog to a separate file so it can be used by other grants modules, refactored dialog.js away from grants_profile, add translations and remove old dialog.js --------- Co-authored-by: Janne Suominen --- .../grants_handler.libraries.yml | 8 + .../grants_handler/grants_handler.module | 8 + .../custom/grants_handler/js/grants-dialog.js | 110 ++ .../grants_handler/js/webform.form.unsaved.js | 79 +- .../custom/grants_handler/translations/fi.po | 46 +- .../custom/grants_handler/translations/sv.po | 53 +- .../grants_profile.libraries.yml | 3 +- .../grants_profile/js/profile_dialog.js | 66 +- .../custom/grants_profile/translations/fi.po | 18 +- .../custom/grants_profile/translations/sv.po | 18 +- .../hdbt_subtheme/dist/css/styles.min.css | 2 +- .../hdbt_subtheme/dist/js/dialog.min.js | 1 - .../hdbt_subtheme/hdbt_subtheme.info.yml | 3 - .../custom/hdbt_subtheme/src/js/dialog.js | 1003 ----------------- .../src/scss/06_components/__index.scss | 1 - .../scss/06_components/dialog/__index.scss | 1 - .../scss/06_components/dialog/_dialog.scss | 90 -- 17 files changed, 246 insertions(+), 1264 deletions(-) create mode 100644 public/modules/custom/grants_handler/js/grants-dialog.js delete mode 100644 public/themes/custom/hdbt_subtheme/dist/js/dialog.min.js delete mode 100644 public/themes/custom/hdbt_subtheme/src/js/dialog.js delete mode 100644 public/themes/custom/hdbt_subtheme/src/scss/06_components/dialog/__index.scss delete mode 100644 public/themes/custom/hdbt_subtheme/src/scss/06_components/dialog/_dialog.scss diff --git a/public/modules/custom/grants_handler/grants_handler.libraries.yml b/public/modules/custom/grants_handler/grants_handler.libraries.yml index bde18246cc..9ba38aff5b 100644 --- a/public/modules/custom/grants_handler/grants_handler.libraries.yml +++ b/public/modules/custom/grants_handler/grants_handler.libraries.yml @@ -53,3 +53,11 @@ application-timeout-message: dependencies: - core/jquery - core/drupalSettings + +# Grants Dialog +grants-dialog: + version: 1.0.0 + js: + js/grants-dialog.js: { } + dependencies: + - core/drupal diff --git a/public/modules/custom/grants_handler/grants_handler.module b/public/modules/custom/grants_handler/grants_handler.module index 8dbb351477..39f5111cd1 100644 --- a/public/modules/custom/grants_handler/grants_handler.module +++ b/public/modules/custom/grants_handler/grants_handler.module @@ -2100,3 +2100,11 @@ function grants_handler_options_list_alter(array &$options, array $context): voi } } } + +/** + * Implements hook_preprocess_HOOK(). + */ +function grants_handler_preprocess_webform(array &$variables) { + $variables['#attached']['library'][] = 'grants_handler/grants-dialog'; + $variables['#attached']['library'][] = 'hdbt/focus-trap'; +} diff --git a/public/modules/custom/grants_handler/js/grants-dialog.js b/public/modules/custom/grants_handler/js/grants-dialog.js new file mode 100644 index 0000000000..925eead272 --- /dev/null +++ b/public/modules/custom/grants_handler/js/grants-dialog.js @@ -0,0 +1,110 @@ +(function (Drupal) { + Drupal.dialogFunctions = { + + /** + * Creates a dialog and appends it to the body. + * + * @param {string} dialogContent - The title displayed at the top of the + * dialog. + * @param {string} actionButtonText - The text for the "leave" button. + * @param {string} backButtonText - The text for the "back" button. + * @param {string} closeButtonText - The text for the "close" button that + * closes the dialog. + * @param {Function} actionButtonCallback - The function to execute when + * the "action" button is clicked. + */ + createDialog: (dialogContent, actionButtonText, backButtonText, closeButtonText, actionButtonCallback = null) => { + const dialogTitle = Drupal.t('Attention', {}, { context: 'grants_handler' }); + const actionButtonHTML = actionButtonText && ``; + const backButtonHTML = backButtonText && ``; + const closeButtonHTML = closeButtonText && ``; + + const dialogHTML = ` +
+
+ +
+ ${closeButtonHTML} +

${dialogTitle}

+
+
+ ${dialogContent} +
+
+ ${actionButtonHTML} + ${backButtonHTML} +
+
+
+ `; + + // TODO: Surveys use very similar javascript dialog implementation. + // This and the survey implementation could possibly be merged with some + // refactoring. + + // Add the dialog to the body + document.body.insertAdjacentHTML('beforeend', dialogHTML); + + Drupal.dialogFunctions.setBodyPaddingRight(true); + + Drupal.dialogFunctions.toggleNoScroll(true); + + const actionButton = document.getElementById('helfi-dialog__action-button'); + const backButton = document.getElementById('helfi-dialog__back-button'); + const closeButton = document.getElementById('helfi-dialog__close-button'); + const dialog = document.getElementById('helfi-dialog__container'); + const dialogFocusTrap = window.focusTrap.createFocusTrap('#helfi-dialog__container', { + initialFocus: () => '#helfi-dialog__title' + }); + + // Activate the focus trap so that the user needs to react to the dialog. + dialogFocusTrap.activate(); + + // Add click event listener to action button + if (actionButtonCallback && actionButtonText) { + actionButton.addEventListener('click', actionButtonCallback); + } + + // Add click event listener to back button + backButton.addEventListener('click', () => { + dialogFocusTrap.deactivate(); + Drupal.dialogFunctions.removeDialog(dialog); + }); + + // Add click event listener to close button + closeButton.addEventListener('click', () => { + dialogFocusTrap.deactivate(); + Drupal.dialogFunctions.removeDialog(dialog); + }); + + // Add event listener to ESC button to remove the dialog + document.body.addEventListener('keydown', function (event) { + if (event.key === 'Escape') { + Drupal.dialogFunctions.removeDialog(dialog); + } + }); + }, + + setBodyPaddingRight: (enable) => { + if (enable) { + document.body.style.paddingRight = `${ + window.innerWidth - document.documentElement.clientWidth + }px`; + } + else { + document.body.style.removeProperty('padding-right'); + } + }, + + toggleNoScroll: (enable) => { + const root = document.documentElement; + root.classList.toggle('noscroll', enable); + }, + + removeDialog: (dialog) => { + dialog.remove(); + Drupal.dialogFunctions.toggleNoScroll(false); + Drupal.dialogFunctions.setBodyPaddingRight(false); + } + } +})(Drupal); diff --git a/public/modules/custom/grants_handler/js/webform.form.unsaved.js b/public/modules/custom/grants_handler/js/webform.form.unsaved.js index 3e4ae31671..99e66c6b8d 100644 --- a/public/modules/custom/grants_handler/js/webform.form.unsaved.js +++ b/public/modules/custom/grants_handler/js/webform.form.unsaved.js @@ -46,6 +46,7 @@ // Set the current unsaved flag state. unsaved = value; }, + attach: function (context) { // Detect general unsaved changes. // Look for the 'data-webform-unsaved' attribute which indicates that @@ -109,34 +110,24 @@ } } }; + $('a').on('click', function (event) { let containingElement = document.querySelector('form'); if (unsaved && !containingElement.contains(event.target) && !event.target.getAttribute('href').startsWith('#')) { event.preventDefault(); - const $previewDialog = $('
').appendTo('body'); - Drupal.dialog($previewDialog, { - title: Drupal.t('Are you sure you want to leave? Leave without saving.'), - width: '33%', - closeText: Drupal.t('Close', {}, { context: 'grants_handler' }), - buttons: [ - { - text: Drupal.t('Leave the application'), - click() { - unsaved = false; - $(this).dialog('close'); - modal = true; - window.top.location.href = event.currentTarget.href; - }, - }, - { - text: Drupal.t('Back to application'), - buttonType: 'secondary', - click() { - $(this).dialog('close'); - }, - }, - ], - }).showModal(); + + return Drupal.dialogFunctions.createDialog( + Drupal.t('You have unsaved changes. Are you sure you want to leave?', {}, { context: 'grants_handler' }), + Drupal.t('Leave the application', {}, { context: 'grants_handler' }), + Drupal.t('Back to application', {}, { context: 'grants_handler' }), + Drupal.t('Close', {}, { context: 'grants_handler' }), + () => { + unsaved = false; + const dialog = document.getElementById('helfi-dialog__container'); + Drupal.dialogFunctions.removeDialog(dialog); + window.top.location.href = event.currentTarget.href; + } + ); } }); @@ -144,7 +135,7 @@ $(window).on('beforeunload', function (event) { if (unsaved) { // Show a confirmation dialog when the user tries to refresh or leave the page - const message = Drupal.t('You have unsaved changes. Are you sure you want to leave?'); + const message = Drupal.t('You have unsaved changes. Are you sure you want to leave?', {}, { context: 'grants_handler' }); event.preventDefault(); event.returnValue = message; // For most browsers return message; // For older browsers @@ -155,35 +146,27 @@ $(document).on('keydown', function (e) { if (unsaved && (e.which === 116 || (e.which === 82 && (e.ctrlKey || e.metaKey)))) { e.preventDefault(); // Prevent F5 and Ctrl+R / Cmd+R refresh - const $previewDialog = $('
').appendTo('body'); - Drupal.dialog($previewDialog, { - title: Drupal.t('You have unsaved changes. Are you sure you want to refresh?'), - width: '33%', - closeText: Drupal.t('Close', {}, { context: 'grants_handler' }), - buttons: [ - { - text: Drupal.t('Refresh the page'), - click() { - unsaved = false; - $(this).dialog('close'); - location.reload(); // Perform the refresh - }, - }, - { - text: Drupal.t('Back to application'), - buttonType: 'secondary', - click() { - $(this).dialog('close'); - }, - }, - ], - }).showModal(); + + return Drupal.dialogFunctions.createDialog( + Drupal.t('You have unsaved changes. Are you sure you want to refresh?', {}, { context: 'grants_handler' }), + Drupal.t('Refresh the page', {}, { context: 'grants_handler' }), + Drupal.t('Back to application', {}, { context: 'grants_handler' }), + Drupal.t('Close', {}, { context: 'grants_handler' }), + () => { + unsaved = false; + const dialog = document.getElementById('helfi-dialog__container'); + Drupal.dialogFunctions.removeDialog(dialog); + location.reload(); + } + ); } }); + // Add an event listener for autologout. document.addEventListener('autologout', function () { autologout = true; }); + $(window).on('beforeunload', function () { if (autologout) { return; diff --git a/public/modules/custom/grants_handler/translations/fi.po b/public/modules/custom/grants_handler/translations/fi.po index d14718ea4a..22923ea94b 100644 --- a/public/modules/custom/grants_handler/translations/fi.po +++ b/public/modules/custom/grants_handler/translations/fi.po @@ -1,17 +1,5 @@ -# Finnish translation of City of Helsinki Grants Handler Module -# -msgctxt "grants_handler" msgid "" msgstr "" -"Project-Id-Version: PROJECT VERSION\n" -"POT-Creation-Date: 2022-01-18 16:58+0300\n" -"PO-Revision-Date: 2022-10-12 08:58+0300\n" -"Last-Translator: Petri Leinonen \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" msgctxt "grants_handler" msgid "Print table" @@ -552,16 +540,6 @@ msgstr "Pyyntösi keskeytyi verkkovirheen takia." msgid "Are you sure you want to leave? Leave without saving." msgstr "Oletko varma että haluat keskeyttää lomakkeen täyttämisen? Poistu tallentamatta." -msgctxt "grants_handler" -msgid "Close" -msgstr "Sulje" - -msgid "Leave the application" -msgstr "Poistu hakemukselta" - -msgid "Back to application" -msgstr "Takaisin hakemukselle" - msgctxt "grants_handler" msgid "View application" msgstr "Katsele hakemusta" @@ -653,3 +631,27 @@ msgstr "Poista @item @number" msgctxt "grants_handler" msgid "Refresh the page" msgstr "Lataa sivu uudelleen" + +msgctxt "grants_handler" +msgid "Leave the application" +msgstr "Poistu hakemukselta" + +msgctxt "grants_handler" +msgid "Close" +msgstr "Sulje" + +msgctxt "grants_handler" +msgid "Back to application" +msgstr "Takaisin hakemukselle" + +msgctxt "grants_handler" +msgid "You have unsaved changes. Are you sure you want to refresh?" +msgstr "Sinulla on tallentamattomia muutoksia. Haluatko varmasti ladata sivun uudelleen?" + +msgctxt "grants_handler" +msgid "You have unsaved changes. Are you sure you want to leave?" +msgstr "Sinulla on tallentamattomia muutoksia. Haluatko varmasti poistua hakemukselta?" + +msgctxt "grants_handler" +msgid "Attention" +msgstr "Huomio" diff --git a/public/modules/custom/grants_handler/translations/sv.po b/public/modules/custom/grants_handler/translations/sv.po index 3e7a7f1495..4f0a13a7af 100644 --- a/public/modules/custom/grants_handler/translations/sv.po +++ b/public/modules/custom/grants_handler/translations/sv.po @@ -1,17 +1,5 @@ -# Swedish translation of City of Helsinki Grants Handler Module -# -msgctxt "grants_handler" msgid "" msgstr "" -"Project-Id-Version: PROJECT VERSION\n" -"POT-Creation-Date: 2022-01-18 16:58+0300\n" -"PO-Revision-Date: 2022-10-12 08:58+0300\n" -"Last-Translator: Petri Leinonen \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" msgctxt "grants_handler" msgid "Print table" @@ -548,19 +536,6 @@ msgstr "Din begäran uppfylldes inte på grund av nätverksfel." msgid "Are you sure you want to leave? Leave without saving." msgstr "Är du säker att du vill stänga blanketten? Avsluta utan att spara." -msgctxt "grants_handler" -msgid "Close" -msgstr "Stäng" - -msgid "Leave the application" -msgstr "Avsluta från ansökningshandling" - -msgid "Back to application" -msgstr "Tillbaka till ansökningshandling" - -msgid "Refresh the page" -msgstr "Uppdatera sidan" - msgctxt "grants_handler" msgid "View application" msgstr "Visa ansökning" @@ -648,3 +623,31 @@ msgstr "%mail är inte en giltig e-postadress. Använd formen user@example.com." msgid "Remove @item @number" msgstr "Ta bort @item @number" + +msgctxt "grants_handler" +msgid "Refresh the page" +msgstr "Uppdatera sidan" + +msgctxt "grants_handler" +msgid "Leave the application" +msgstr "Avsluta från ansökningshandling" + +msgctxt "grants_handler" +msgid "Close" +msgstr "Stäng" + +msgctxt "grants_handler" +msgid "Back to application" +msgstr "Tillbaka till ansökningshandling" + +msgctxt "grants_handler" +msgid "You have unsaved changes. Are you sure you want to refresh?" +msgstr "Du har osparade ändringar. Är du säker på att du vill uppdatera?" + +msgctxt "grants_handler" +msgid "You have unsaved changes. Are you sure you want to leave?" +msgstr "Du har osparade ändringar. Är du säker på att du vill lämna?" + +msgctxt "grants_handler" +msgid "Attention" +msgstr "Observera" diff --git a/public/modules/custom/grants_profile/grants_profile.libraries.yml b/public/modules/custom/grants_profile/grants_profile.libraries.yml index 788788e0ca..cbee1ec7c5 100644 --- a/public/modules/custom/grants_profile/grants_profile.libraries.yml +++ b/public/modules/custom/grants_profile/grants_profile.libraries.yml @@ -1,11 +1,12 @@ profile_dialog: version: 1.x js: - js/profile_dialog.js: {} + js/profile_dialog.js: { } dependencies: - core/drupal - core/jquery - core/once + - grants_handler/grants-dialog pattern_error: js: diff --git a/public/modules/custom/grants_profile/js/profile_dialog.js b/public/modules/custom/grants_profile/js/profile_dialog.js index 7df4f03785..1ea699707b 100644 --- a/public/modules/custom/grants_profile/js/profile_dialog.js +++ b/public/modules/custom/grants_profile/js/profile_dialog.js @@ -29,58 +29,28 @@ let containingElement = document.querySelector('form'); if ((unset_name) && !containingElement.contains(event.target)) { event.preventDefault(); - const $previewDialog = $( - `
`, - ).appendTo('body'); - Drupal.dialog($previewDialog, { - title: Drupal.t('You need to have a name for your unregistered community or group. Please add a name and save or cancel them.'), - width: '33%', - buttons: [ - { - text: Drupal.t('Back to profile'), - buttonType: 'primary', - click() { - $(this).dialog('close'); - }, - }, - ], - }).showModal(); + return Drupal.dialogFunctions.createDialog( + Drupal.t('You need to have a name for your unregistered community or group. Please add a name and save or cancel them.', {}, { context: 'grants_profile' }), + '', + Drupal.t('Back to profile', {}, { context: 'grants_profile' }), + Drupal.t('Close', {}, { context: 'grants_profile' }), + ); } else if ((current_name !== initial_name) && !containingElement.contains(event.target)) { event.preventDefault(); - const $previewDialog = $( - `
`, - ).appendTo('body'); - Drupal.dialog($previewDialog, { - title: Drupal.t('You have unsaved changes in your profile. Please save or cancel them.'), - width: '33%', - buttons: [ - { - text: Drupal.t('Back to profile'), - buttonType: 'primary', - click() { - $(this).dialog('close'); - }, - }, - ], - }).showModal(); + return Drupal.dialogFunctions.createDialog( + Drupal.t('You have unsaved changes in your profile. Please save or cancel them.', {}, { context: 'grants_profile' }), + '', + Drupal.t('Back to profile', {}, { context: 'grants_profile' }), + Drupal.t('Close', {}, { context: 'grants_profile' }), + ); } else if (($('[data-drupal-selector="edit-isnewprofile"]').val() === 'initialSave') && !containingElement.contains(event.target)) { event.preventDefault(); - const $previewDialog = $( - `
`, - ).appendTo('body'); - Drupal.dialog($previewDialog, { - title: Drupal.t('You have not saved your profile. Please save your profile before leaving the form.'), - width: '33%', - buttons: [ - { - text: Drupal.t('Back to profile'), - buttonType: 'primary', - click() { - $(this).dialog('close'); - }, - }, - ], - }).showModal(); + return Drupal.dialogFunctions.createDialog( + Drupal.t('You have not saved your profile. Please save your profile before leaving the form.', {}, { context: 'grants_profile' }), + '', + Drupal.t('Back to profile', {}, { context: 'grants_profile' }), + Drupal.t('Close', {}, { context: 'grants_profile' }), + ); } is_element_click = false; diff --git a/public/modules/custom/grants_profile/translations/fi.po b/public/modules/custom/grants_profile/translations/fi.po index cceb749412..56bd6eb892 100644 --- a/public/modules/custom/grants_profile/translations/fi.po +++ b/public/modules/custom/grants_profile/translations/fi.po @@ -1,15 +1,5 @@ -# Finnish translation of City of Helsinki Grants Profile module msgid "" msgstr "" -"Project-Id-Version: 1.0\n" -"POT-Creation-Date: 2022-02-14 11:00+0300\n" -"PO-Revision-Date: 2022-10-12 11:00+0300\n" -"Last-Translator: Petri Leinonen \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" msgctxt "grants_profile" msgid "Delete bank account" @@ -557,9 +547,11 @@ msgctxt "grants_profile" msgid "Connection error" msgstr "Yhteysvirhe" +msgctxt "grants_profile" msgid 'You need to have a name for your unregistered community or group. Please add a name and save or cancel them.' msgstr 'Sinulla täytyy olla nimi rekisteröitymättömälle yhteisöllesi tai ryhmällesi. Lisää nimi ja tallenna tai peruuta ne.' +msgctxt "grants_profile" msgid 'You have unsaved changes in your profile. Please save or cancel them.' msgstr 'Sinulla on tallentamattomia muutoksia profiilissasi. Ole hyvä ja tallenna tai peruuta ne.' @@ -569,15 +561,21 @@ msgstr 'Sinulla on tallentamattomia muutoksia profiilissasi. Oletko varma, että msgid 'You have not saved your profile. Are you sure you want to leave the form?' msgstr 'Et ole tallentanut profiiliasi. Oletko varma, että haluat lähteä lomakkeelta?' +msgctxt "grants_profile" msgid 'You have not saved your profile. Please save your profile before leaving the form.' msgstr 'Et ole tallentanut profiiliasi. Tallenna profiili ennen lomakkeelta poistumista.' msgid 'You need to have a name for your unregistered community or group. Are you sure you want to leave the form?' msgstr 'Sinulla täytyy olla nimi rekisteröitymättömälle yhteisöllesi tai ryhmällesi. Oletko varma, että haluat lähteä lomakkeelta?' +msgctxt "grants_profile" msgid 'Back to profile' msgstr 'Takaisin profiiliin' +msgctxt "grants_profile" +msgid 'Close' +msgstr 'Sulje' + msgctxt "grants_profile" msgid "Fields marked with an asterisk * are required information." msgstr "Tähdellä * merkityt kentät ovat pakollisia tietoja." diff --git a/public/modules/custom/grants_profile/translations/sv.po b/public/modules/custom/grants_profile/translations/sv.po index ae8890b846..6324107914 100644 --- a/public/modules/custom/grants_profile/translations/sv.po +++ b/public/modules/custom/grants_profile/translations/sv.po @@ -1,15 +1,5 @@ -# Swedish translation of City of Helsinki Grants Profile module msgid "" msgstr "" -"Project-Id-Version: 1.0\n" -"POT-Creation-Date: 2022-02-14 11:00+0300\n" -"PO-Revision-Date: 2022-10-12 11:00+0300\n" -"Last-Translator: Petri Leinonen \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" msgctxt "grants_profile" msgid "Delete bank account" @@ -514,9 +504,11 @@ msgctxt "grants_profile" msgid "Connection error" msgstr "Anslutningsfel" +msgctxt "grants_profile" msgid 'You need to have a name for your unregistered community or group. Please add a name and save or cancel them.' msgstr 'Du måste ha ett namn för din icke-registrerad förening eller verksamhetsgrupp. Vänligen lägg till ett namn och spara eller avbryt dem.' +msgctxt "grants_profile" msgid 'You have unsaved changes in your profile. Please save or cancel them.' msgstr 'Du har osparade ändringar i din profil. Spara eller avbryt dem.' @@ -526,15 +518,21 @@ msgstr 'Du har osparade ändringar i din profil. Är du säker på att du vill l msgid 'You have not saved your profile. Are you sure you want to leave the form?' msgstr 'Du har inte sparat din profil. Är du säker på att du vill lämna formuläret?' +msgctxt "grants_profile" msgid 'You have not saved your profile. Please save your profile before leaving the form.' msgstr 'Du har inte sparat din profil. Spara din profil innan du lämnar formuläret.' msgid 'You need to have a name for your unregistered community or group. Are you sure you want to leave the form?' msgstr 'Du måste ha ett namn för din icke-registrerad förening eller verksamhetsgrupp. Är du säker på att du vill lämna formuläret?' +msgctxt "grants_profile" msgid 'Back to profile' msgstr 'Tillbaka till profilen' +msgctxt "grants_profile" +msgid 'Close' +msgstr "Stäng" + msgctxt "grants_profile" msgid "Fields marked with an asterisk * are required information." msgstr "Fält markerade med en asterisk * är obligatorisk information." diff --git a/public/themes/custom/hdbt_subtheme/dist/css/styles.min.css b/public/themes/custom/hdbt_subtheme/dist/css/styles.min.css index fd0dc903d2..c792cc8314 100644 --- a/public/themes/custom/hdbt_subtheme/dist/css/styles.min.css +++ b/public/themes/custom/hdbt_subtheme/dist/css/styles.min.css @@ -1 +1 @@ -body{--webform-element-width--input-small: 184px;--webform-element-width--input-medium: 332px;--webform-element-width--input-large: 591px;--webform-element-width--fieldset: 714px}.hel-icon--size-xs,.hds-icon--size-xs{height:16px;width:16px}.hel-icon--size-s,.hds-icon--size-s{height:24px;width:24px}.hel-icon--size-m,.hds-icon--size-m{height:32px;width:32px}.hel-icon--size-l,.hds-icon--size-l{height:48px;width:48px}.hel-icon--size-xl,.hds-icon--size-xl{height:64px;width:64px}.hel-icon.hel-icon--pen-line{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,");mask-image:url("data:image/svg+xml;charset=utf-8,")}.hel-icon.hds-icon--company{background:var(--color-black);-webkit-mask-image:url("data:image/svg+xml;charset=utf-8, ");mask-image:url("data:image/svg+xml;charset=utf-8, ")}.hds-button--secondary:not(.eu-cookie-compliance-default-button):not(.eu-cookie-compliance-save-preferences-button){--background-color: transparent;--background-color-hover: var(--color-black-80);--background-color-focus: transparent;--background-color-hover-focus: var(--color-black-80);--background-color-disabled: transparent;--color: var(--color-black);--color-hover: var(--color-white);--color-focus: var(--color-black);--color-hover-focus: var(--color-black);--color-disabled: var(--color-black-40)}.hds-button--secondary:not(:disabled):not(.eu-cookie-compliance-default-button):not(.eu-cookie-compliance-save-preferences-button),.hds-button--primary:not(:disabled){border-color:transparent;border-color:var(--color-black, transparent)}.hds-button.hds-button--supplementary .hds-button__label{margin:0;padding:0 var(--spacing-2-xs)}.hds-button.hds-button--supplementary::after,.hds-button.hds-button--supplementary::before{display:none !important}.hds-button--supplementary:not(:disabled){--background-color-hover: rgba(0, 0, 0, 0.1);background:rgba(0,0,0,0);border-color:rgba(0,0,0,0)}.hds-button--supplementary:not(:disabled):hover{background-color:var(--background-color-hover)}.hds-button--alert{--background-color: rgb(255, 0, 0)}a.hds-button.webform-button--delete-draft:not(:disabled){text-decoration:none}a.hds-button.webform-button--delete-draft:not(:disabled) .hds-button__label_wrapper{display:inline}a.hds-button.webform-button--delete-draft:not(:disabled) .hds-button__label{text-decoration:underline}a.hds-button.webform-button--delete-draft:not(:disabled):hover .hds-button__label{text-decoration:none}.openid-connect-login-form input[type=submit].hds-button{width:220px}.hds-button__label_wrapper{align-items:center;display:flex}.hds-button__label_wrapper:not(.hds-button)>.hds-button__label{margin:0 var(--spacing-2-xs)}.hds-link{--link-visited-color: var(--color-black);--link-color: var(--color-black)}.hds-card{--background-color: var(--color-white);--border-color: var(--color-black-90);--color: var(--color-black-90);--border-width: 2px;--padding-horizontal: var(--spacing-l);--padding-vertical: var(--spacing-m);background-color:var(--background-color);color:var(--color);padding:var(--padding-vertical) var(--padding-horizontal)}.hds-card--border{border:var(--border-width) solid var(--border-color)}.hds-card__body{display:grid;grid-gap:var(--spacing-m);gap:var(--spacing-m);margin-bottom:var(--spacing-l)}.hds-card__body:last-child{margin-bottom:0}.hds-card__heading{font-size:var(--fontsize-heading-m);font-weight:bold;line-height:var(--lineheight-m)}.hds-card__text{font-size:var(--fontsize-body-m);line-height:var(--lineheight-l)}.hds-card--applicant-role{margin-bottom:var(--spacing-l);margin-right:0;max-width:400px;width:100%}.hds-card__heading-m{font-size:var(--fontsize-heading-m);font-weight:500;letter-spacing:-0.2px;line-height:32px;margin-top:0}.grants-profile--menuitem--login,.grants-profile--menuitem--logout{align-items:center;display:flex;flex-flow:column;font-size:var(--fontsize-body-s);height:var(--spacing-xl);margin-left:var(--spacing-2-xs);margin-right:var(--spacing-2-xs);position:relative;text-align:center;width:var(--spacing-xl)}.grants-profile--menuitem--login .hel-icon,.grants-profile--menuitem--logout .hel-icon{display:block;margin:auto}.grants-profile--menuitem--login-triggertext,.grants-profile--menuitem--logout-triggertext{clip:rect(1px, 1px, 1px, 1px);clip-path:inset(50%);display:block;max-height:1px;max-width:1px;opacity:0;overflow:hidden;position:absolute;white-space:nowrap}.block--grants-profile--menuitem{align-items:center;display:flex;grid-area:brand;z-index:2}.block--branding{flex-grow:10}.grants-frontpage-info-block{margin-bottom:var(--spacing-layout-xl)}.grants-profile--menuitem{height:var(--spacing-m);margin-left:var(--spacing-2-xs);margin-right:var(--spacing-2-xs);position:relative;width:var(--spacing-m)}@media(min-width: 768px){.grants-profile--menuitem{height:var(--spacing-2-xl);width:var(--spacing-2-xl)}}.grants-profile--menuitem a{text-decoration:none}.grants-profile--menuitem--notifications{background-color:var(--color-error);border:2px var(--color-white) solid;border-radius:50%;color:var(--color-white);font-size:var(--fontsize-body-s);font-weight:bold;height:var(--spacing-xs) 1.25;line-height:var(--spacing-layout-2-xs);position:absolute;right:-5px;text-align:center;top:-5px;width:var(--spacing-xs) 1.25;z-index:2}.grants-profile--menuitem--initials{border-radius:50%;font-weight:bold;height:var(--spacing-m);line-height:var(--spacing-m);text-align:center;vertical-align:middle;width:var(--spacing-m)}@media(min-width: 768px){.grants-profile--menuitem--initials{height:var(--spacing-2-xl);line-height:var(--spacing-2-xl);width:var(--spacing-2-xl)}}.grants-profile--menuitem--initials:hover,.grants-profile--menuitem--initials:active,.grants-profile--menuitem--initials:focus{text-decoration:underline}.grants-profile--menuitem--initials-colorscheme-2{background-color:var(--color-bus);color:var(--color-white)}.grants-profile--menuitem--initials-colorscheme-1{background-color:var(--color-engel);color:var(--color-black)}.grants-profile--menuitem--initials-colorscheme-0{background-color:var(--color-tram);color:var(--color-white)}.sidebar-important-links{margin-top:var(--spacing-2-xl)}.sidebar-important-links .sidebar-text .sidebar-text__text-content>p{padding:var(--spacing-s) var(--spacing-m)}.block--service-page-banner{background-color:var(--color-engel);margin-top:var(--spacing-layout-s);padding:var(--spacing-layout-s)}.block--service-page-banner h2{margin-top:0}.block--service-page-banner .hds-icon{margin-bottom:var(--spacing-layout-s)}.hds-button.service-page-sidebar-link{background-color:var(--hdbt-color-palette--secondary);padding:var(--spacing-xs)}.hds-button.service-page-sidebar-link:hover{color:var(--color-black)}.terms_block{padding-bottom:var(--spacing-4-xl)}#block-servicepageauthblock h2,#block-servicepageanonblock h2{--line-height: 1.3;font-size:1.25rem;font-weight:500;line-height:var(--line-height)}@media(min-width: 992px){#block-servicepageauthblock h2,#block-servicepageanonblock h2{--line-height: 1.1666666667;font-size:1.5rem;font-weight:500}}#block-servicepageauthblock .hds-button,#block-servicepageanonblock .hds-button{margin-top:var(--spacing-m)}.grants-service-page-block{background-color:var(--color-alert-light);margin-top:var(--spacing-m);padding:var(--spacing-m)}.grants-service-page-block h3{font-size:var(--fontsize-heading-s);margin-top:0}.grants-service-page-block .hel-icon{vertical-align:text-bottom}.grants-service-page-block--auth{background-color:var(--color-info-light)}.hel-icon.hel-icon--swap-user{-webkit-mask-image:url('data:image/svg+xml, ');mask-image:url('data:image/svg+xml, ')}.nav-toggle-dropdown--profile .profile__information{background-color:var(--color-silver-light)}.nav-toggle-dropdown--profile .profile__full-name{font-weight:bold}.nav-toggle-dropdown--profile .grants-profile--menuitem--mandate,.nav-toggle-dropdown--profile .grants-profile--menuitem--switch-role{--line-height: 1.5555555556;font-size:1.125rem;font-weight:400;line-height:var(--line-height);border-top:1px solid #ccc;border-bottom:1px solid #ccc;display:block;font-weight:normal;padding:16px;text-decoration:none;width:100%}@media(min-width: 992px){.nav-toggle-dropdown--profile .grants-profile--menuitem--mandate,.nav-toggle-dropdown--profile .grants-profile--menuitem--switch-role{border-bottom:none}}.nav-toggle-dropdown--profile .grants-profile--menuitem--mandate:hover,.nav-toggle-dropdown--profile .grants-profile--menuitem--switch-role:hover{text-decoration:underline}.nav-toggle-dropdown--profile .grants-profile--menuitem--mandate:focus,.nav-toggle-dropdown--profile .grants-profile--menuitem--switch-role:focus{outline:3px solid #000;outline-offset:-3px}.application-timeout-message{display:none;padding-left:16px;padding-left:var(--spacing-s, 16px);position:fixed;right:0;top:50%;z-index:100}.application-timeout-message.slide-in{animation:slide-in-right .5s forwards ease;display:block}.application-timeout-message .close-application-timeout-message{cursor:pointer;font-size:1.25rem;position:absolute;right:1.25rem}@keyframes slide-in-right{from{right:-500px}to{right:1.25rem}}.ui-widget-overlay{z-index:99}.ui-dialog .ui-button:hover{border-width:2px}.ui-dialog .ui-dialog-titlebar-close{top:var(--spacing-s);z-index:1001}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:left}.ui-dialog .ui-dialog-buttonpane{padding:var(--spacing-2-xs) var(--spacing-m)}.ui-dialog .ui-dialog-buttonpane button{margin:0 var(--spacing-xs) 0 0}.ui-dialog .ui-dialog-content{padding:0 1em 1em;position:static;position:initial}.ui-dialog div.ui-dialog-titlebar{padding:0}.ui-dialog-titlebar{background:rgba(0,0,0,0);border:0}.ui-dialog-titlebar-close{background:none;border:none}.ui-dialog-titlebar .ui-dialog-title{display:block;font-size:var(--fontsize-heading-s);overflow:auto;padding:var(--spacing-layout-2-xs) var(--spacing-layout-2-xs) var(--spacing-layout-2-xs) var(--spacing-2-xl);position:relative;white-space:normal}.ui-dialog-title .hel-icon{left:var(--spacing-m);margin-right:var(--spacing-2-xs);position:absolute;top:var(--spacing-s)}.ui-widget-content{border:0 rgba(0,0,0,0) solid}.ui-widget-content h3{margin-top:0}div.ui-widget.ui-widget-content{border-top:var(--spacing-2-xs) solid var(--color-black);max-width:100vw;min-width:300px;padding-top:0}.ui-widget-content span.ui-icon{margin-left:-8px;margin-top:-8px;-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg role='img' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E %3Cg fill='none' fill-rule='evenodd'%3E %3Crect width='24' height='24'/%3E %3Cpolygon fill='currentColor' points='18 7.5 13.5 12 18 16.5 16.5 18 12 13.5 7.5 18 6 16.5 10.5 12 6 7.5 7.5 6 12 10.5 16.5 6'/%3E %3C/g%3E %3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg role='img' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E %3Cg fill='none' fill-rule='evenodd'%3E %3Crect width='24' height='24'/%3E %3Cpolygon fill='currentColor' points='18 7.5 13.5 12 18 16.5 16.5 18 12 13.5 7.5 18 6 16.5 10.5 12 6 7.5 7.5 6 12 10.5 16.5 6'/%3E %3C/g%3E %3C/svg%3E");transform:scale(1.5)}.submission-for-copying{margin-bottom:1em;margin-top:1em}.view_application_search_search_api .main-content{margin-top:0}.view_application_search_search_api .search-result-amount--wrapper{align-items:center;display:flex}.view_application_search_search_api .search-result-amount--wrapper p{margin-top:0}.view_application_search_search_api select.search-result-amount{border:1px solid var(--color-black-50);margin-left:var(--spacing-l);margin-right:var(--spacing-2-xs)}.view_application_search_search_api .search-filter-button{background-color:var(--color-black);border-radius:180px;border:0;color:var(--color-white);display:inline-block;margin:0 var(--spacing-2-xs) var(--spacing-2-xs) 0;padding:var(--spacing-2-xs) var(--spacing-xs)}.view_application_search_search_api .search-filter-button:focus{--focus-outline-color: #000000;box-shadow:none;outline:3px solid var(--focus-outline-color);outline:var(--outline-width, 3px) solid var(--focus-outline-color);outline-offset:2px;outline-offset:var(--outline-gutter, 2px)}.view_application_search_search_api .search-filter-button span{vertical-align:middle}.view_application_search_search_api .search-filter-button span.hel-icon:hover{cursor:pointer}.view-application-search-search-api .main-content{margin-top:var(--spacing-layout-s)}.view-application-search-search-api .main-content .view-header{align-items:center;display:flex;margin-bottom:var(--spacing-layout-s)}.application_search--link{display:block;height:100%;padding-bottom:var(--spacing-m);position:relative;text-decoration:none}.application_search--link::after{--icon-size: 1.5rem;background-color:#000;background-size:contain;content:"";display:inline-block;height:calc(var(--line-height) * 1em);height:var(--icon-size, calc(var(--line-height) * 1em));-webkit-mask-image:var(--hel-icon--arrow-right);mask-image:var(--hel-icon--arrow-right);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);-webkit-mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));vertical-align:bottom;width:calc(var(--line-height) * 1em);width:var(--icon-size, calc(var(--line-height) * 1em));transition:transform .2s linear;bottom:var(--spacing-s);content:"";display:block;flex-shrink:0;left:var(--spacing-m);margin-left:-4px;margin-top:8px;position:absolute}@media(prefers-reduced-motion){.application_search--link::after{transition:none}}@media(min-width: 576px){.application_search--link::after{--icon-size: 3rem;margin-left:-8px;margin-top:16px}}.application_search--link:focus h3,.application_search--link:hover h3{text-decoration:none}.application_search--link:focus::after,.application_search--link:hover::after{transform:translateX(8px)}@media(prefers-reduced-motion){.application_search--link:focus::after,.application_search--link:hover::after{transform:none}}.application_search--filter-wrapper{background:var(--color-black-5)}.application_search--filter-wrapper h2{font-size:var(--fontsize-heading-m);margin-bottom:var(--spacing-layout-s);margin-top:var(--spacing-layout-s)}.application_search--filter-wrapper form{align-items:center;border-bottom:2px solid var(--color-black-20);display:flex;flex-flow:row wrap;gap:var(--spacing-s);justify-content:space-between;margin-bottom:var(--spacing-layout-s);padding-bottom:var(--spacing-layout-s)}.application_search--filter-wrapper form .form-item{margin-bottom:0;min-width:-moz-fit-content;min-width:fit-content;width:calc((100% - var(--spacing-s) - var(--spacing-s))/3)}.application_search--filter-wrapper form .form-item label{color:var(--label-color-default);font-size:var(--fontsize-body-m);font-weight:500;margin-bottom:var(--spacing-3-xs)}.application_search--filter-wrapper form .form-item .grant-applications--select-wrapper{min-width:100%;width:100%}.application_search--filter-wrapper form .hds-text-input:first-child{max-width:none;width:100%}.application_search--filter-wrapper form .hds-text-input:first-child input{width:100%}.application_search--filter-wrapper form .form-actions{align-items:center;display:flex;gap:16px;order:6;padding-top:var(--spacing-m);width:100%}@media(min-width: 768px){.application_search--filter-wrapper form .form-actions{width:17%}}.application_search--filter-wrapper form .form-actions input{min-width:250px;width:100%}.application_search--filter-wrapper form .form-item-items-per-page{display:none}.application_search--filter-wrapper form .form-item-kohderyhma{order:1}.application_search--filter-wrapper form .form-item-avustuslaji{order:2}.application_search--filter-wrapper form .form-item-hakija{order:3}.application_search--filter-wrapper form .form-item-search{max-width:100%;order:4;width:50%}.application_search--filter-wrapper form .form-item-application-open{page-break-before:left;-moz-column-break-before:left;break-before:left;display:block;margin-top:var(--spacing-m);order:5;width:30%}.application_search--filter-wrapper form [data-drupal-selector=edit-reset]{background-color:rgba(0,0,0,0);border:0;color:var(--color-black)}.application_search--filter-wrapper .hds-koros svg pattern{color:var(--color-black-5)}.application_search--filter-wrapper .hero .hero__container{padding-bottom:var(--spacing-m)}.application_search--filters{padding-bottom:var(--spacing-layout-m);padding-top:0}.application_search--rows{display:flex;flex-direction:column;flex-wrap:wrap;justify-content:flex-start;width:100%}@media(min-width: 576px){.application_search--rows{flex-direction:row;margin-left:calc(-1*var(--spacing-m));width:calc(100% + var(--spacing-m))}}.application_search--row{box-shadow:1px 2px 4px 0 rgba(0,0,0,.5);margin-bottom:var(--spacing-l);position:relative;width:100%}@media(min-width: 576px){.application_search--row{margin-left:var(--spacing-m);width:calc(50% - var(--spacing-m))}}@media(min-width: 992px){.application_search--row{width:calc(33.3333333333% - var(--spacing-m))}}.application_search--row h3{font-size:var(--fontsize-heading-m);margin-top:var(--spacing-xs)}.application_search--row .views-field-search-api-excerpt{height:auto;overflow:auto;word-break:normal}.application_search--row .views-field{padding:var(--spacing-xs) var(--spacing-m)}.application_search--row .views-field-field-target-group{padding:0}.application_search--row .views-field-field-avustuslaji{padding:var(--spacing-xs) var(--spacing-m) var(--spacing-layout-m) var(--spacing-m)}.application_search--row .views-field-field-avustuslaji .tag_avustuslaji{background:var(--color-black);border-radius:var(--spacing-m);color:var(--color-white);display:inline-block;margin-bottom:var(--spacing-2-xs);padding:var(--spacing-3-xs) var(--spacing-xs)}.application_search--row .views-field-field-application-period .field-content{align-items:center;display:flex;gap:var(--spacing-s);position:relative}.application_search--row .views-field-field-application-period .field-content span{display:block}.application_search--row .tag_target_group{background:var(--color-black-20);color:var(--color-black);font-size:var(--fontsize-body-s);font-weight:bold;padding:var(--spacing-m);text-align:center;text-transform:uppercase;width:100%}.application_search--row .tag_target_group_12{background:var(--color-brick-medium-light)}.application_search--row .tag_target_group_20{background:var(--color-copper)}.application_search--row .tag_target_group_21{background:var(--color-metro-medium-light)}.application_search--row .tag_target_group_22{background:var(--color-suomenlinna-medium-light)}.application_search--row .tag_target_group_23{background:var(--color-engel)}.application_search--row .tag_target_group_24{background:var(--color-bus-medium-light)}.application_search--row .tag_target_group_25{background:var(--color-coat-of-arms-medium-light)}.application_search--row .tag_target_group_26{background:var(--color-gold-medium-light)}.application_search--row .tag_target_group_27{background:var(--color-tram-medium-light)}.application_search--row .tag_target_group_28{background:var(--color-summer-light)}.application_search--row .tag_target_group_29{background:var(--color-fog)}.application_search--row .tag_target_group_30{background:var(--color-copper-light)}.application_search--row .tag_target_group_31{background:var(--color-gold)}.view-ukk .view-filters{display:none}.view-ukk .ukk_categories{display:block;margin:var(--spacing-xl) 0;padding:0}.view-ukk .ukk_categories li{display:inline-block;list-style:none;margin:var(--spacing-m) var(--spacing-s) 0 0;padding:0}.view-ukk .hero .hero__text-content{max-width:100%}.view-ukk #edit-field-category-target-id{display:flex}.view-ukk #edit-field-category-target-id .hds-radio-button:first-of-type{margin-top:var(--spacing-2-xs)}.view-ukk #edit-field-category-target-id .hds-radio-button .hds-radio-button__input:checked+.hds-radio-button__label{background:var(--color-black);border-radius:var(--spacing-m);color:var(--color-white);padding:var(--spacing-2-xs) var(--spacing-s)}.view-ukk #edit-field-category-target-id .hds-radio-button__label{padding:var(--spacing-2-xs) var(--spacing-s)}.view-ukk #edit-field-category-target-id .hds-radio-button__label::before,.view-ukk #edit-field-category-target-id .hds-radio-button__label::after{display:none}.view-ukk .views-exposed-form fieldset{margin-bottom:0}.view-ukk .views-exposed-form .form-submit{margin-bottom:var(--spacing-l)}.view-ukk .category{background:var(--color-black);border-radius:var(--spacing-m);color:var(--color-white);display:inline-block;padding:var(--spacing-2-xs) var(--spacing-s);text-decoration:none}.view-ukk .category-unselected{background:var(--color-black-20);color:var(--color-black)}.page--select-applicant-role{background-color:var(--color-black-5)}.page--select-applicant-role body{background-color:var(--color-black-5)}.page--select-applicant-role .layout-main-wrapper{background-color:var(--color-black-5)}.page--select-applicant-role .main-content{margin-top:var(--spacing-l)}.page--select-applicant-role h1{margin-top:var(--spacing-l)}.page--select-applicant-role p{margin-bottom:var(--spacing-m)}.node--type-service .errand-service__channels .service-channel__links a[href^="https://avustukset.hel.fi"]{display:none}.node--type-service .service-channel__info p:first-of-type{margin-top:0}.node--type-service .service-channel--mail{display:none}#block-servicepageauthblock-2,#block-servicepageanonblock-2,#block-grantspreviewlink-2{display:none}@media(max-width: 767.9px){#block-servicepageauthblock-2,#block-servicepageanonblock-2,#block-grantspreviewlink-2{display:block;margin:var(--spacing-s)}}@media(max-width: 991.9px){#block-servicepageauthblock-2,#block-servicepageanonblock-2,#block-grantspreviewlink-2{display:block;margin:var(--spacing-l)}}#block-servicepageauthblock-2>.grants-service-page-block>*,#block-servicepageanonblock-2>.grants-service-page-block>*,#block-grantspreviewlink-2>.grants-service-page-block>*{margin:var(--spacing-2-xs) 0 var(--spacing-2-xs) var(--spacing-2-xs)}@media(max-width: 991.9px){#block-servicepageauthblock-2 .node--type-service a.hds-button[href*=uusi-hakemus],#block-servicepageanonblock-2 .node--type-service a.hds-button[href*=uusi-hakemus],#block-grantspreviewlink-2 .node--type-service a.hds-button[href*=uusi-hakemus]{display:none}}.user-login__text-container{background:var(--color-white);max-width:500px;padding:var(--spacing-m)}.user-login__text-container p:first-of-type{margin-top:0}.tabs{--tablist-border-color: var(--color-black-20);--tablist-border-size: 1px;--tab-color: var(--color-black);--tab-font-size: var(--fontsize-body-m);--tab-height: 48px;--tab-min-width: 148px;--tab-spacing: var(--spacing-s);--tab-active-border-size: 5px;--tab-active-border-color: var(--color-black);--tab-focus-outline-size: 2px;--tab-focus-outline-color: var(--color-coat-of-arms);display:flex;flex-flow:row wrap}.tabs--tablist{box-sizing:border-box;flex-grow:1;margin-bottom:-1px;overflow-x:hidden;position:relative;width:100%}.tabs--content-wrapper{width:100%}.tabs--content-wrapper .container{padding-top:1px}.tabs [role=tablist]{box-sizing:border-box;list-style:none;margin:0;padding:var(--tab-focus-outline-size) 0;white-space:nowrap}.tabs [role=tab]{background:rgba(0,0,0,0);border:0;cursor:pointer;display:inline-block;margin:0;outline:none;padding:0}.tabs [role=tab] span{align-items:center;box-sizing:border-box;color:var(--tab-color);display:flex;font-size:var(--tab-font-size);height:var(--tab-height);justify-content:center;margin:0;min-width:var(--tab-min-width);padding:0 var(--tab-spacing);pointer-events:none;position:relative}.tabs [role=tab] span::before{background:var(--tablist-border-color);bottom:0;content:"";height:var(--tablist-border-size);position:absolute;width:100%;z-index:100}.tabs [role=tab] span:hover::before,.tabs [role=tab] span:focus::before,.tabs [role=tab][aria-selected=true] span::before{background-color:var(--tab-active-border-color);bottom:0;content:"";height:var(--tab-active-border-size);position:absolute;width:100%;z-index:100}.tabs [role=tabpanel].is-hidden{display:none}.node--form-page .list-of-links{margin-left:0;margin-top:0;width:100%}@media(min-width: 768px){.node--form-page .list-of-links{margin-top:0}}.node--form-page .list-of-links>.container{padding-top:0}.node--form-page .list-of-links .list-of-links__title{border-top:2px solid var(--color-black-20);margin:0 0 var(--spacing-layout-xl)}@media(min-width: 576px){.node--form-page .list-of-links .list-of-links__container{width:calc(100% - var(--spacing-layout-xl))}}@media(min-width: 768px){.node--form-page .list-of-links .list-of-links__container{width:100%}}.node--form-page .list-of-links .list-of-links__content{height:auto;margin-top:0}@media(min-width: 768px){.node--form-page .list-of-links .list-of-links__content{display:grid;grid-template-columns:auto auto auto;margin:0 var(--spacing-m) 0 0}}.node--form-page .list-of-links .list-of-links__item{align-self:stretch;border-left:4px solid var(--color-copper);margin-right:-4px;padding-left:var(--spacing-m);padding-right:var(--spacing-m)}.list-of-links--without-image .list-of-links__item .list-of-links__item__desc{color:var(--color-black-90);font-size:var(--fontsize-body-m)}.list-of-links--without-image .list-of-links__item .list-of-links__item__title{font-size:var(--fontsize-heading-m)}.js-form-type-webform-custom-composite{--border-width: 2px;--outline-width: 3px;--input-height: 56px;--textarea-height: 149px;--icon-size: var(--spacing-m);--helper-color-default: var(--color-black-60);--helper-color-invalid: var(--color-error);--icon-color-invalid: var(--color-error);--input-background-default: var(--color-white);--input-background-disabled: var(--color-black-10);--input-border-color-default: var(--color-black-50);--input-border-color-hover: var(--color-black-90);--input-border-color-focus: var(--color-black-90);--input-border-color-invalid: var(--color-error);--input-border-color-disabled: var(--color-black-10);--input-color-default: var(--color-black-90);--input-color-disabled: var(--color-black-40);--label-color-default: var(--color-black-90);--label-color-invalid: var(--color-black-90);--placeholder-color: var(--color-black-60);--focus-outline-color: var(--color-coat-of-arms)}.js-form-type-webform-custom-composite a.tabledrag-handle .handle{height:24px;width:24px}.js-form-type-webform-custom-composite input.form-number{background-color:var(--input-background-default);border:var(--border-width) solid var(--input-border-color-default);box-sizing:border-box;color:var(--input-color-default);font-size:1.125em;height:var(--input-height);line-height:normal;padding:0 var(--spacing-s);width:100%}.js-form-type-webform-custom-composite table{border-collapse:collapse;border-spacing:0;margin-bottom:var(--spacing-m)}.js-form-type-webform-custom-composite table td{border-bottom:2px var(--color-black-20) solid;border-top:2px var(--color-black-20) solid;padding-left:var(--spacing-m);padding-top:var(--spacing-m)}@media(max-width: 768px){.js-form-type-webform-custom-composite table td{border:2px var(--color-black-20) solid}}.js-form-type-webform-custom-composite table td.webform-multiple-table--operations{border-bottom:2px var(--color-black-20) solid;border-top:2px var(--color-black-20) solid;padding-left:var(--spacing-m);padding-top:var(--spacing-m)}@media(max-width: 768px){.js-form-type-webform-custom-composite table td.webform-multiple-table--operations{background:var(--color-white);border:2px var(--color-black-20) solid;padding:10px 5px 5px}}.js-form-type-webform-custom-composite table td:first-child{border-left:2px var(--color-black-20) solid}.js-form-type-webform-custom-composite table td:last-child{border-right:2px var(--color-black-20) solid;padding:var(--spacing-s)}@media(min-width: 768px){.js-form-type-webform-custom-composite table td:last-child{min-width:400px;padding:var(--spacing-s) var(--spacing-m)}}div.ui-widget.ui-datepicker{padding:var(--spacing-2-xs)}div.ui-widget.ui-datepicker .ui-datepicker-header span.ui-icon{margin-left:-8px;margin-top:-8px;-webkit-mask-image:none;mask-image:none;transform:none}div.ui-widget.ui-datepicker .ui-datepicker-calendar{border:0;display:table;margin:0;max-width:100%}div.ui-widget.ui-datepicker .ui-datepicker-calendar th,div.ui-widget.ui-datepicker .ui-datepicker-calendar td{min-width:auto}details.accordion{--background-color: var(--color-white);--border-color: var(--color-black-60);--padding-horizontal: var(--spacing-m);--padding-vertical: var(--spacing-m);--header-font-color: var(--color-black-90);--header-font-size: var(--fontsize-heading-m);--header-line-height: var(--lineheight-m);--button-size: 28px;--header-focus-outline-color: var(--color-coat-of-arms);--content-font-color: var(--color-black-90);--content-font-size: var(--fontsize-body-m);--content-line-height: var(--lineheight-l);border-bottom:1px solid var(--border-color)}details.accordion .accordion_content{padding-bottom:var(--padding-vertical)}details.accordion[open] .accordion_heading_container span.hel-icon{transform:rotate(180deg)}.accordion_header{align-items:center;color:var(--header-font-color);display:flex;font-size:var(--header-font-size);font-weight:700;justify-content:space-between;line-height:var(--header-line-height);list-style:none;padding-bottom:var(--padding-vertical);padding-top:var(--padding-vertical);position:relative}.accordion_heading_container{align-items:center;box-sizing:border-box;cursor:pointer;display:grid;grid-template-columns:auto calc(var(--button-size));width:100%}.accordion_heading_container span.hel-icon{height:var(--button-size) !important;width:var(--button-size) !important}.accordion_heading_container span.hel-icon{border:2px solid rgba(0,0,0,0);box-sizing:border-box;margin:auto}.webform-element-description{--helper-color-default: var(--color-black-60);color:var(--helper-color-default);display:block;font-size:var(--fontsize-body-m);line-height:var(--lineheight-l);margin-top:var(--spacing-s)}.webform-element-help{background:var(--color-white);border:2px solid rgba(0,0,0,0);color:var(--hdbt-color-black);height:var(--spacing-layout-xs);margin-right:4px;padding:0;position:absolute;right:0;top:-3px;width:var(--spacing-layout-xs);z-index:10}div[data-tippy-root]{width:350px}.tippy-box{background-color:var(--color-black-5);border-left:var(--spacing-xs) var(--color-coat-of-arms) solid;border-radius:0;color:var(--hdbt-color-black);padding:var(--spacing-s)}.tippy-box .webform-element-help--content{white-space:normal}.tippy-box .webform-element-help--content a:link,.tippy-box .webform-element-help--content a:visited,.tippy-box .webform-element-help--content a:active,.tippy-box .webform-element-help--content a:hover{color:var(--hdbt-color-black)}.tippy-arrow{color:var(--color-black-5)}.webform-element-help--wrapper-short{max-width:-moz-fit-content;max-width:fit-content}.webform-element-help-container--title{--border-width: 2px;--outline-width: 3px;--input-height: 56px;--textarea-height: 149px;--icon-size: var(--spacing-m)}fieldset.grants-fieldset{padding:var(--spacing-s)}@media(min-width: 768px){fieldset.grants-fieldset{min-width:400px;padding:var(--spacing-s) var(--spacing-m)}}fieldset.grants-fieldset .fieldset-wrapper{align-items:flex-end;display:flex;flex-wrap:wrap;gap:0 var(--spacing-layout-2-xs)}fieldset.grants-fieldset .fieldset-wrapper .form-item--error-message{grid-column:1}fieldset.grants-fieldset-short{max-width:var(--webform-element-width--input-large)}fieldset.grants-fieldset-medium{max-width:var(--webform-element-width--fieldset)}fieldset.grants-fieldset-medium .fieldset-wrapper{justify-content:center}fieldset.premises-composite--wrapper.fieldgroup,fieldset.rented-premise-composite--wrapper.fieldgroup,.community_officials_wrapper fieldset.fieldgroup,fieldset.grants-budget-other-cost--wrapper.fieldgroup,fieldset.grants-budget-other-income--wrapper.fieldgroup,fieldset.place-of-operation-composite--wrapper.fieldgroup,fieldset.rent-income-composite--wrapper.fieldgroup,fieldset.rent-cost-composite--wrapper.fieldgroup,fieldset.club-section-composite--wrapper.fieldgroup,fieldset.members-composite--wrapper.fieldgroup,fieldset.orienteering-map-composite--wrapper,.form-item-muu-liite fieldset.grants-attachments--wrapper.fieldgroup{border-width:2px;margin-top:var(--spacing-layout-2-xs);max-width:100%;padding:var(--spacing-s);width:100%}@media(min-width: 768px){fieldset.premises-composite--wrapper.fieldgroup,fieldset.rented-premise-composite--wrapper.fieldgroup,.community_officials_wrapper fieldset.fieldgroup,fieldset.grants-budget-other-cost--wrapper.fieldgroup,fieldset.grants-budget-other-income--wrapper.fieldgroup,fieldset.place-of-operation-composite--wrapper.fieldgroup,fieldset.rent-income-composite--wrapper.fieldgroup,fieldset.rent-cost-composite--wrapper.fieldgroup,fieldset.club-section-composite--wrapper.fieldgroup,fieldset.members-composite--wrapper.fieldgroup,fieldset.orienteering-map-composite--wrapper,.form-item-muu-liite fieldset.grants-attachments--wrapper.fieldgroup{min-width:400px;padding:var(--spacing-s) var(--spacing-m)}}fieldset.premises-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.rented-premise-composite--wrapper.fieldgroup legend>span.visually-hidden,.community_officials_wrapper fieldset.fieldgroup legend>span.visually-hidden,fieldset.grants-budget-other-cost--wrapper.fieldgroup legend>span.visually-hidden,fieldset.grants-budget-other-income--wrapper.fieldgroup legend>span.visually-hidden,fieldset.place-of-operation-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.rent-income-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.rent-cost-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.club-section-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.members-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.orienteering-map-composite--wrapper legend>span.visually-hidden,.form-item-muu-liite fieldset.grants-attachments--wrapper.fieldgroup legend>span.visually-hidden{background:#fff;clip-path:initial;clip:auto;clip:initial;height:auto;margin-left:calc(var(--spacing-2-xs)*-1);left:auto;overflow:visible;padding:0 var(--spacing-2-xs);top:-12px;width:-moz-max-content;width:max-content}fieldset.premises-composite--wrapper.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)],fieldset.rented-premise-composite--wrapper.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)],.community_officials_wrapper fieldset.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)],fieldset.grants-budget-other-cost--wrapper.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)],fieldset.grants-budget-other-income--wrapper.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)],fieldset.place-of-operation-composite--wrapper.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)],fieldset.rent-income-composite--wrapper.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)],fieldset.rent-cost-composite--wrapper.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)],fieldset.club-section-composite--wrapper.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)],fieldset.members-composite--wrapper.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)],fieldset.orienteering-map-composite--wrapper legend>span.visually-hidden[\:has\(button.webform-element-help\)],.form-item-muu-liite fieldset.grants-attachments--wrapper.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)]{padding-right:var(--spacing-xl)}fieldset.premises-composite--wrapper.fieldgroup legend>span.visually-hidden:has(button.webform-element-help),fieldset.rented-premise-composite--wrapper.fieldgroup legend>span.visually-hidden:has(button.webform-element-help),.community_officials_wrapper fieldset.fieldgroup legend>span.visually-hidden:has(button.webform-element-help),fieldset.grants-budget-other-cost--wrapper.fieldgroup legend>span.visually-hidden:has(button.webform-element-help),fieldset.grants-budget-other-income--wrapper.fieldgroup legend>span.visually-hidden:has(button.webform-element-help),fieldset.place-of-operation-composite--wrapper.fieldgroup legend>span.visually-hidden:has(button.webform-element-help),fieldset.rent-income-composite--wrapper.fieldgroup legend>span.visually-hidden:has(button.webform-element-help),fieldset.rent-cost-composite--wrapper.fieldgroup legend>span.visually-hidden:has(button.webform-element-help),fieldset.club-section-composite--wrapper.fieldgroup legend>span.visually-hidden:has(button.webform-element-help),fieldset.members-composite--wrapper.fieldgroup legend>span.visually-hidden:has(button.webform-element-help),fieldset.orienteering-map-composite--wrapper legend>span.visually-hidden:has(button.webform-element-help),.form-item-muu-liite fieldset.grants-attachments--wrapper.fieldgroup legend>span.visually-hidden:has(button.webform-element-help){padding-right:var(--spacing-xl)}@media(min-width: 768px){fieldset.premises-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.rented-premise-composite--wrapper.fieldgroup legend>span.visually-hidden,.community_officials_wrapper fieldset.fieldgroup legend>span.visually-hidden,fieldset.grants-budget-other-cost--wrapper.fieldgroup legend>span.visually-hidden,fieldset.grants-budget-other-income--wrapper.fieldgroup legend>span.visually-hidden,fieldset.place-of-operation-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.rent-income-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.rent-cost-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.club-section-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.members-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.orienteering-map-composite--wrapper legend>span.visually-hidden,.form-item-muu-liite fieldset.grants-attachments--wrapper.fieldgroup legend>span.visually-hidden{left:auto}}.form-item-muu-liite fieldset.grants-attachments--wrapper{margin-bottom:0}fieldset.webform-composite-hidden-title .fieldset-wrapper>.form-item:last-child{margin-bottom:var(--spacing-layout-xs)}.js-form-type-webform-table table{width:100%}.js-form-type-webform-table th{text-align:left}.js-form-type-webform-table td{vertical-align:middle}.js-form-type-webform-table td>div{height:auto;margin-bottom:0}.js-form-type-webform-table td>div label{margin:-1px}.js-form-type-webform-table .hds-text-input label{border:0;clip:rect(0, 0, 0, 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.form-item{margin-bottom:var(--spacing-layout-xs);position:relative}.form-item input[type=date],.form-item input[type=time]{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--input-background-default);border:var(--border-width) solid var(--input-border-color-default);box-sizing:border-box;color:var(--input-color-default);font-size:1.125em;height:var(--input-height);line-height:normal;padding:0 var(--spacing-s);width:100%;will-change:transform,box-shadow}.webform-section{padding-bottom:var(--spacing-layout-2-xs)}.webform-section table:first-of-type{margin-top:0}.form-type-webform-multiple .webform-multiple-table table{max-width:100%;width:100%}@media(min-width: 768px){.form-type-webform-multiple .webform-multiple-table table{width:auto}}.hds-text-input{max-width:-moz-fit-content;max-width:fit-content;width:100%}.webform-section-grid-wrapper{display:grid;grid-template-columns:1fr}@media(min-width: 768px){.webform-section-grid-wrapper{grid-row-gap:var(--spacing-xl);grid-template-columns:1fr 2fr}}.webform-section-grid-wrapper>dt.webform-section-title{color:var(--hdbt-color-black);display:block;flex-shrink:0;font-size:var(--fontsize-heading-s);font-weight:500;-webkit-hyphens:none;hyphens:none;line-height:1;margin-bottom:var(--spacing-3-xs);margin-top:0;padding-right:var(--spacing-2-xl);width:100%}.webform-section-grid-wrapper .webform-section-wrapper{margin-bottom:var(--spacing-layout-xs);padding-left:var(--spacing-2-xl)}@media(min-width: 768px){.webform-section-grid-wrapper .webform-section-wrapper{margin-bottom:0;padding-left:0}}fieldset input[type=button]{margin-top:var(--spacing-m)}.webform-section-wrapper>.description{margin-bottom:var(--spacing-layout-xs)}.grants__page-header{margin-bottom:var(--spacing-layout-l);font-size:2rem}@media(min-width: 768px){.grants__page-header{font-size:3rem}}.webform-section-flex-wrapper{display:flex;flex-flow:row wrap;width:100%;justify-content:left}@media(min-width: 768px){.webform-section-flex-wrapper{flex-flow:row nowrap}.webform-section-flex-wrapper h3+*>*:first-child>label:first-of-type,.webform-section-flex-wrapper h3+*>*:first-child>*:first-child>label:first-of-type{margin-top:var(--spacing-2-xs);padding-top:0}.webform-section-flex-wrapper h3+*>*:first-child>p{line-height:normal;line-height:initial;margin-top:var(--spacing-2-xs)}.webform-section-flex-wrapper h3+*>*:first-child>h4{line-height:normal;line-height:initial;margin-top:var(--spacing-m)}}.webform-section-flex-wrapper .webform-element-help-container--title{position:relative}.webform-section-flex-wrapper>h2.webform-section-title,.webform-section-flex-wrapper>h3.webform-section-title,.webform-section-flex-wrapper>h4.webform-section-title,.webform-section-flex-wrapper>dt.webform-section-title{color:var(--hdbt-color-black);display:block;flex-shrink:0;font-size:24px;font-weight:500;-webkit-hyphens:manual;hyphens:manual;margin-bottom:var(--spacing-3-xs);margin-top:0;padding-right:var(--spacing-2-xl);width:100%}@media(min-width: 768px){.webform-section-flex-wrapper>h2.webform-section-title,.webform-section-flex-wrapper>h3.webform-section-title,.webform-section-flex-wrapper>h4.webform-section-title,.webform-section-flex-wrapper>dt.webform-section-title{font-size:32px;max-width:350px;width:30%}}.webform-section-flex-wrapper h4{font-size:var(--fontsize-heading-m);line-height:38px}.webform-section-flex-wrapper>.webform-section-wrapper{--line-height: 1.5;font-size:var(--fontsize-body-m);width:100%}@media(min-width: 768px){.webform-section-flex-wrapper>.webform-section-wrapper{padding-left:var(--spacing-2-xl)}}.webform-section-flex-wrapper .form-required::after{content:"*";display:inline}.webform-section-flex-wrapper legend,.webform-section-flex-wrapper label{display:block;font-size:var(--fontsize-body-m);font-weight:500;margin-bottom:var(--spacing-2-xs);max-width:-moz-fit-content;max-width:fit-content;position:relative}.webform-section-flex-wrapper legend{padding:0 var(--spacing-2-xs);margin-left:calc(var(--spacing-2-xs)*-1);left:auto}.webform-section-flex-wrapper legend[\:has\(button.webform-element-help\)],.webform-section-flex-wrapper label[\:has\(button.webform-element-help\)]{padding-right:var(--spacing-xl)}.webform-section-flex-wrapper legend:has(button.webform-element-help),.webform-section-flex-wrapper label:has(button.webform-element-help){padding-right:var(--spacing-xl)}.webform-section-flex-wrapper fieldset legend>span[\:has\(button.webform-element-help\)]{padding-right:var(--spacing-xl)}.webform-section-flex-wrapper fieldset legend>span:has(button.webform-element-help){padding-right:var(--spacing-xl)}.webform-section-flex-wrapper fieldset legend>span.fieldset-legend[\:has\(button.webform-element-help\)],.webform-section-flex-wrapper fieldset.fieldgroup legend>span[\:has\(button.webform-element-help\)]:not(.visually-hidden.fieldset-legend){padding-right:var(--spacing-l)}.webform-section-flex-wrapper fieldset legend>span.fieldset-legend:has(button.webform-element-help),.webform-section-flex-wrapper fieldset.fieldgroup legend>span:has(button.webform-element-help):not(.visually-hidden.fieldset-legend){padding-right:var(--spacing-l)}.webform-section-flex-wrapper fieldset legend>span.fieldset-legend[\:has\(button.webform-element-help\)],.webform-section-flex-wrapper fieldset.fieldgroup legend span.fieldset-legend:not(.visually-hidden)[\:has\(button.webform-element-help\)]{padding-right:0}.webform-section-flex-wrapper fieldset legend>span.fieldset-legend:has(button.webform-element-help),.webform-section-flex-wrapper fieldset.fieldgroup legend span.fieldset-legend:not(.visually-hidden):has(button.webform-element-help){padding-right:0}.webform-section-flex-wrapper label.hds-radio-button__label{font-weight:normal}.webform-section-flex-wrapper .checkboxes--wrapper label{font-weight:normal}.webform-section-flex-wrapper .js-form-type-textarea .hds-text-input__input-wrapper{display:block}.webform-section-flex-wrapper .has-error,.webform-section-flex-wrapper .grant-applications--select-wrapper[\:has\(.has-error\)]{border-color:var(--color-error)}.webform-section-flex-wrapper .has-error,.webform-section-flex-wrapper .grant-applications--select-wrapper:has(.has-error){border-color:var(--color-error)}form .hds-text-input__input-wrapper,.hds-text-input__input-wrapper{flex-flow:row wrap}form .hds-text-input__input-wrapper .text-count-wrapper,.hds-text-input__input-wrapper .text-count-wrapper{flex-basis:100%}form .hds-text-input__input-wrapper input.webform--small,form .hds-text-input__input-wrapper textarea.webform--small,.hds-text-input__input-wrapper input.webform--small,.hds-text-input__input-wrapper textarea.webform--small{max-width:var(--webform-element-width--input-small);min-width:var(--webform-element-width--input-small);width:100%}form .hds-text-input__input-wrapper input.webform--medium,form .hds-text-input__input-wrapper textarea.webform--medium,.hds-text-input__input-wrapper input.webform--medium,.hds-text-input__input-wrapper textarea.webform--medium{max-width:var(--webform-element-width--input-medium);min-width:var(--webform-element-width--input-small);width:100%}form .hds-text-input__input-wrapper input.webform--large,form .hds-text-input__input-wrapper textarea.webform--large,.hds-text-input__input-wrapper input.webform--large,.hds-text-input__input-wrapper textarea.webform--large{max-width:var(--webform-element-width--input-large);min-width:var(--webform-element-width--input-small);width:100%}.webform--small div.grant-applications--select-wrapper{max-width:var(--webform-element-width--input-small);min-width:var(--webform-element-width--input-small);width:100%}.webform--medium div.grant-applications--select-wrapper{max-width:var(--webform-element-width--input-medium);min-width:var(--webform-element-width--input-small);width:100%}.webform--large div.grant-applications--select-wrapper{max-width:var(--webform-element-width--input-medium);min-width:var(--webform-element-width--input-small);width:100%}form .hds-checkbox{display:block}form .hds-checkbox label.hds-checkbox__label::after{content:""}fieldset.webform-composite-hidden-title{margin-bottom:var(--spacing-layout-2-xs);margin-top:0}.form-item-bank-account-account-number-select,.form-item-community-address-community-address-select{margin-bottom:0}.grants-profile-grants-profile table thead th h4{margin:0}.hakemus-form-page .main-content{margin-top:0}.hakemus-form-page h1{-webkit-hyphens:auto;hyphens:auto;word-break:break-word}.hakemus-form-errors ul li{list-style-type:none}.community_officials_wrapper .webform-readonly{margin:0}.community_officials_wrapper .hds-text-input__input-wrapper{margin:0}.community_officials_wrapper input[readonly=readonly]{height:1.25rem;margin:0;max-width:330px}.form-item--error-message{color:var(--color-error);margin-bottom:var(--spacing-layout-s);margin-top:var(--spacing-layout-2-xs)}fieldset .form-item--error-message,.community_officials_wrapper .form-item--error-message{margin-bottom:0}.form-item--error-message::before{--icon-size: 1.6rem;background-color:#000;background-size:contain;content:"";display:inline-block;height:calc(var(--line-height) * 1em);height:var(--icon-size, calc(var(--line-height) * 1em));-webkit-mask-image:var(--hel-icon--alert-circle-fill);mask-image:var(--hel-icon--alert-circle-fill);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);-webkit-mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));vertical-align:bottom;width:calc(var(--line-height) * 1em);width:var(--icon-size, calc(var(--line-height) * 1em));background-color:var(--color-error);content:" ";display:inline-block}input[type=radio]+label.form-required::after{content:""}.hds-radio-button:last-of-type,.hds-checkbox:last-of-type{margin-bottom:0}.hds-radio-button:last-of-type>label,.hds-checkbox:last-of-type>label{margin-bottom:0}@media(min-width: 992px){.place-of-operation-composite--wrapper.fieldgroup .hds-text-input,.club-section-composite--wrapper.fieldgroup .hds-text-input{max-width:100%}}.place-of-operation-composite--wrapper.fieldgroup .hds-radio-button .hds-radio-button__label,.club-section-composite--wrapper.fieldgroup .hds-radio-button .hds-radio-button__label{line-height:var(--lineheight-m) !important}@media(min-width: 992px){.place-of-operation-group__location,.place-of-operation-group__students,.place-of-operation-group__groups,.place-of-operation-group__personnel,.place-of-operation-group__rent,.place-of-operation-group__time{display:flex;justify-content:space-between}}@media(min-width: 992px){.place-of-operation-group__location--address,.place-of-operation-group__students--address,.place-of-operation-group__groups--address,.place-of-operation-group__personnel--address,.place-of-operation-group__rent--address,.place-of-operation-group__time--address{margin-top:0 !important}.place-of-operation-group__location--address,.place-of-operation-group__students--address,.place-of-operation-group__groups--address,.place-of-operation-group__personnel--address,.place-of-operation-group__rent--address,.place-of-operation-group__time--address{width:65%}}@media(min-width: 992px){.place-of-operation-group__location--post-code,.place-of-operation-group__students--post-code,.place-of-operation-group__groups--post-code,.place-of-operation-group__personnel--post-code,.place-of-operation-group__rent--post-code,.place-of-operation-group__time--post-code{margin-top:0 !important}.place-of-operation-group__location--post-code,.place-of-operation-group__students--post-code,.place-of-operation-group__groups--post-code,.place-of-operation-group__personnel--post-code,.place-of-operation-group__rent--post-code,.place-of-operation-group__time--post-code{width:30%}}@media(min-width: 992px){.place-of-operation-group__location--student-count,.place-of-operation-group__location--special-student-count,.place-of-operation-group__location--group-count,.place-of-operation-group__location--special-group-count,.place-of-operation-group__location--personnel-count,.place-of-operation-group__location--rent-amount,.place-of-operation-group__location--time-start,.place-of-operation-group__location--time-end,.place-of-operation-group__students--student-count,.place-of-operation-group__students--special-student-count,.place-of-operation-group__students--group-count,.place-of-operation-group__students--special-group-count,.place-of-operation-group__students--personnel-count,.place-of-operation-group__students--rent-amount,.place-of-operation-group__students--time-start,.place-of-operation-group__students--time-end,.place-of-operation-group__groups--student-count,.place-of-operation-group__groups--special-student-count,.place-of-operation-group__groups--group-count,.place-of-operation-group__groups--special-group-count,.place-of-operation-group__groups--personnel-count,.place-of-operation-group__groups--rent-amount,.place-of-operation-group__groups--time-start,.place-of-operation-group__groups--time-end,.place-of-operation-group__personnel--student-count,.place-of-operation-group__personnel--special-student-count,.place-of-operation-group__personnel--group-count,.place-of-operation-group__personnel--special-group-count,.place-of-operation-group__personnel--personnel-count,.place-of-operation-group__personnel--rent-amount,.place-of-operation-group__personnel--time-start,.place-of-operation-group__personnel--time-end,.place-of-operation-group__rent--student-count,.place-of-operation-group__rent--special-student-count,.place-of-operation-group__rent--group-count,.place-of-operation-group__rent--special-group-count,.place-of-operation-group__rent--personnel-count,.place-of-operation-group__rent--rent-amount,.place-of-operation-group__rent--time-start,.place-of-operation-group__rent--time-end,.place-of-operation-group__time--student-count,.place-of-operation-group__time--special-student-count,.place-of-operation-group__time--group-count,.place-of-operation-group__time--special-group-count,.place-of-operation-group__time--personnel-count,.place-of-operation-group__time--rent-amount,.place-of-operation-group__time--time-start,.place-of-operation-group__time--time-end{margin-top:0 !important}.place-of-operation-group__location--student-count,.place-of-operation-group__location--special-student-count,.place-of-operation-group__location--group-count,.place-of-operation-group__location--special-group-count,.place-of-operation-group__location--personnel-count,.place-of-operation-group__location--rent-amount,.place-of-operation-group__location--time-start,.place-of-operation-group__location--time-end,.place-of-operation-group__students--student-count,.place-of-operation-group__students--special-student-count,.place-of-operation-group__students--group-count,.place-of-operation-group__students--special-group-count,.place-of-operation-group__students--personnel-count,.place-of-operation-group__students--rent-amount,.place-of-operation-group__students--time-start,.place-of-operation-group__students--time-end,.place-of-operation-group__groups--student-count,.place-of-operation-group__groups--special-student-count,.place-of-operation-group__groups--group-count,.place-of-operation-group__groups--special-group-count,.place-of-operation-group__groups--personnel-count,.place-of-operation-group__groups--rent-amount,.place-of-operation-group__groups--time-start,.place-of-operation-group__groups--time-end,.place-of-operation-group__personnel--student-count,.place-of-operation-group__personnel--special-student-count,.place-of-operation-group__personnel--group-count,.place-of-operation-group__personnel--special-group-count,.place-of-operation-group__personnel--personnel-count,.place-of-operation-group__personnel--rent-amount,.place-of-operation-group__personnel--time-start,.place-of-operation-group__personnel--time-end,.place-of-operation-group__rent--student-count,.place-of-operation-group__rent--special-student-count,.place-of-operation-group__rent--group-count,.place-of-operation-group__rent--special-group-count,.place-of-operation-group__rent--personnel-count,.place-of-operation-group__rent--rent-amount,.place-of-operation-group__rent--time-start,.place-of-operation-group__rent--time-end,.place-of-operation-group__time--student-count,.place-of-operation-group__time--special-student-count,.place-of-operation-group__time--group-count,.place-of-operation-group__time--special-group-count,.place-of-operation-group__time--personnel-count,.place-of-operation-group__time--rent-amount,.place-of-operation-group__time--time-start,.place-of-operation-group__time--time-end{width:47.5%}}@media(min-width: 768px){.club-section__participants{display:flex;gap:var(--spacing-l);justify-content:space-between}}.club-section__participants input.form-text.hds-text-input__input{max-width:100%;width:100%}.club-section__totalhours input.form-text.hds-text-input__input{max-width:100%;width:100%}.hel-icon--size-xs{--icon-size: var(--spacing-layout-2-xs)}.hel-icon--size-s{--icon-size: var(--spacing-layout-xs)}.hel-icon--size-m{--icon-size: var(--spacing-layout-s)}.hel-icon--size-l{--icon-size: var(--spacing-layout-m)}.hel-icon--size-xl{--icon-size: var(--spacing-layout-l)}.hds-text-input__input-wrapper[focus-within][\:has\(input\[readonly\]\)]{margin-right:var(--spacing-2-xs);outline:2px var(--color-black) solid;outline-offset:2px}.hds-text-input__input-wrapper[focus-within]:has(input[readonly]){margin-right:var(--spacing-2-xs);outline:2px var(--color-black) solid;outline-offset:2px}.hds-text-input__input-wrapper[focus-within][\:has\(input\[readonly\]\)]{margin-right:var(--spacing-2-xs);outline:2px var(--color-black) solid;outline-offset:2px}.hds-text-input__input-wrapper:focus-within[\:has\(input\[readonly\]\)]{margin-right:var(--spacing-2-xs);outline:2px var(--color-black) solid;outline-offset:2px}.hds-text-input__input-wrapper:focus-within:has(input[readonly]){margin-right:var(--spacing-2-xs);outline:2px var(--color-black) solid;outline-offset:2px}.hds-text-input__input-wrapper[focus-within][\:has\(input\[readonly\]\)] input[readonly]{width:calc(100% - var(--spacing-2-xs))}.hds-text-input__input-wrapper[focus-within]:has(input[readonly]) input[readonly]{width:calc(100% - var(--spacing-2-xs))}.hds-text-input__input-wrapper[focus-within][\:has\(input\[readonly\]\)] input[readonly]{width:calc(100% - var(--spacing-2-xs))}.hds-text-input__input-wrapper:focus-within[\:has\(input\[readonly\]\)] input[readonly]{width:calc(100% - var(--spacing-2-xs))}.hds-text-input__input-wrapper:focus-within:has(input[readonly]) input[readonly]{width:calc(100% - var(--spacing-2-xs))}.form-item-application-number,.form-item-status,.form-item-applicant-type{display:none}.grants-handler__completion{background:var(--color-bus-light);padding:var(--spacing-layout-l) var(--spacing-layout-2-xl)}.grants-handler__completion h2{margin-top:var(--spacing-l)}.grants-handler__completion h3{font-size:1rem;font-weight:bold;margin-top:var(--spacing-m)}.grants-handler__completion__info-row{display:flex;flex-flow:row wrap;gap:var(--spacing-m);justify-content:flex-start;margin-bottom:var(--spacing-m)}.grants-handler__completion__button-row{display:flex;flex-flow:row wrap;gap:var(--spacing-m);justify-content:flex-start}.grants-handler__completion__longtext{margin:var(--spacing-l) 0}.hds-notification.notification-margin-bottom{margin-bottom:var(--spacing-layout-m)}.hds-notification__label{align-items:center}.hds-checkbox__input label{font-weight:normal}fieldset.grants-attachments--wrapper{margin-bottom:var(--spacing-layout-m)}fieldset.grants-attachments--wrapper legend{margin-bottom:var(--spacing-2-xs)}fieldset.grants-attachments--wrapper .form-item--error-message{width:100%}fieldset.grants-attachments--wrapper .js-form-type-managed-file{margin-bottom:0}.grants-applications-managed_file{position:relative}.grants-applications-managed_file label.hds-button--secondary:not(:disabled):not(.eu-cookie-compliance-default-button):not(.eu-cookie-compliance-save-preferences-button){left:0;position:relative}.grants-applications-managed_file label.hds-button--secondary:not(:disabled):not(.eu-cookie-compliance-default-button):not(.eu-cookie-compliance-save-preferences-button)[\:has\(input\:disabled\)]{background-color:transparent;background-color:var(--background-color-disabled, transparent);border-color:transparent;border-color:var(--border-color-disabled, transparent);color:var(--color-disabled);cursor:not-allowed}.grants-applications-managed_file label.hds-button--secondary:not(:disabled):not(.eu-cookie-compliance-default-button):not(.eu-cookie-compliance-save-preferences-button)[\:has\(input\:disabled\)]{background-color:transparent;background-color:var(--background-color-disabled, transparent);border-color:transparent;border-color:var(--border-color-disabled, transparent);color:var(--color-disabled);cursor:not-allowed}.grants-applications-managed_file label.hds-button--secondary:not(:disabled):not(.eu-cookie-compliance-default-button):not(.eu-cookie-compliance-save-preferences-button):has(input:disabled){background-color:transparent;background-color:var(--background-color-disabled, transparent);border-color:transparent;border-color:var(--border-color-disabled, transparent);color:var(--color-disabled);cursor:not-allowed}.grants-applications-managed_file label.hds-button--secondary:not(:disabled):not(.eu-cookie-compliance-default-button):not(.eu-cookie-compliance-save-preferences-button)[focus-within]{background:var(--color-black);border-color:var(--color-white);color:var(--color-white);outline:2px var(--color-black) solid}.grants-applications-managed_file label.hds-button--secondary:not(:disabled):not(.eu-cookie-compliance-default-button):not(.eu-cookie-compliance-save-preferences-button):focus-within{background:var(--color-black);border-color:var(--color-white);color:var(--color-white);outline:2px var(--color-black) solid}.grants-applications-managed_file input[type=file]{opacity:0;position:absolute}.form-managed-file{display:flex;flex-wrap:wrap;white-space:inherit}.form-managed-file>span{background-color:var(--color-info-light);border-bottom:2px dotted var(--color-coat-of-arms);display:inline-block;padding:var(--spacing-s) var(--spacing-2-xs)}.form-managed-file>.file-upload-js-error{flex-basis:100%}.grants-applications-managed_file label.hds-button{display:flex}.grants-attachments--wrapper .webform-readonly{display:none}.webform-multiple-table table{border-collapse:collapse;border:0px var(--color-white) solid;margin-bottom:var(--spacing-2-xs);max-width:-moz-fit-content;max-width:fit-content}.webform-multiple-table .webform-multiple-table--operations-two{min-width:60px}.webform-multiple-table tbody tr,.webform-multiple-table thead tr{align-items:center;justify-content:space-between;width:100%}.webform-multiple-table td,.webform-multiple-table th{max-width:100%;min-width:0;padding:0;width:100%}.webform-multiple-table table thead th{padding:var(--spacing-layout-2-xs)}div.hidden-head table{display:table}div.hidden-head table thead th{padding:0}div.hidden-head table tbody tr{border-bottom:var(--spacing-s) var(--color-white) solid}div.hidden-head table tbody tr:hover{background:rgba(0,0,0,0)}div.table-layout-form input.hds-text-input__input{width:100%}div.table-layout-form table{border:1px var(--color-black) solid;max-width:var(--webform-element-width--input-large)}div.table-layout-form table tbody tr{border:§0px var(--color-black-30) solid}div.table-layout-form table tbody tr td{border:1px var(--color-black-30) solid;padding:0}div.table-layout-form table tbody tr td input.hds-text-input__input[readonly]{padding:var(--spacing-layout-2-xs)}div.table-layout-form table .form-item{margin-bottom:0}.hds-text-input .hds-text-input__input.input--borderless{border:0 rgba(0,0,0,0) solid}#edit-subventions-items thead{background:var(--color-black-90);color:var(--color-white);text-align:left}#edit-subventions-items input.hds-text-input,#edit-subventions-items input.hds-text-input__input{background:rgba(0,0,0,0)}#subventions_table td.webform-multiple-table--operations,#subventions_table th.webform-multiple-table--operations{display:none}#subventions_table input.hds-text-input__input[readonly][name$="[amount]"]{background-color:var(--input-background-disabled);border-color:var(--input-border-color-disabled);color:var(--input-color-disabled);cursor:not-allowed}.form-item-muu-liite .webform-multiple-table--operations{display:none}.hidden-head>label{display:none}.webform-preview .accordion_header{font-size:28px;font-weight:300}@media(min-width: 768px){.webform-preview .accordion_header{font-size:36px;font-weight:500}}.webform-preview label{display:block;font-weight:bold}.grants-profile-grants-profile fieldset{background:var(--color-black-5);border:0 rgba(0,0,0,0) solid;margin:0;max-width:var(--webform-element-width--fieldset);padding:0 var(--spacing-layout-s) var(--spacing-layout-s);top:calc(-1*var(--spacing-m))}.grants-profile-grants-profile fieldset label{margin-bottom:var(--spacing-3-xs)}.grants-profile-grants-profile fieldset legend{font-size:var(--fontsize-body-l);margin-bottom:var(--spacing-m);padding-bottom:var(--spacing-s);position:relative;top:var(--spacing-l)}.grants-profile-grants-profile fieldset .fieldset-wrapper{display:flex;flex-flow:row wrap;justify-content:space-between}.grants-profile-grants-profile fieldset .hds-text-input{max-width:100%}.grants-profile-grants-profile fieldset div[class*=-address-postcode]{width:32%}.grants-profile-grants-profile fieldset div[class*=-address-city]{width:65%}.grants-profile--extrainfo .form-actions .button{margin-right:var(--spacing-2-xs)}.grants-stepper{--grants-stepper-color: var(--color-black);--grants-stepper-background-color: var(--color-white);--grants-stepper-disabled-color: var(--color-black-20);--grants-stepper-selected-step-label-color: var(--color-black-90);--grants-stepper-not-selected-step-label-color: var(--color-black);--grants-step-background-color: var(--color-white);--grants-step-content-color: var(--color-black);--grants-stepper-focus-border-color: var(--color-coat-of-arms);--grants-step-width: 120px;--circle-container-size: 36px;--progress-line-height: 2px;background-color:var(--grants-stepper-background-color);margin-bottom:var(--spacing-layout-m);position:relative}@media(max-width: 725px){.grants-stepper{--grants-step-width: 40px}}@media(max-width: 725px){.grants-stepper .grants-stepper__text{display:none}}.grants-stepper__inner{align-items:flex-start;display:flex;justify-content:space-between;margin:0;-ms-overflow-style:none;padding:0;position:relative;scroll-behavior:smooth;scrollbar-width:none;width:100%}.grants-stepper__lines{display:flex;height:var(--progress-line-height);left:calc(var(--grants-step-width)/2);line-height:var(--lineheight-l);position:absolute;transform:translateY(calc(var(--circle-container-size) / 2 + var(--progress-line-height) / 2));z-index:1}.grants-stepper__line{background-color:var(--grants-stepper-color);display:inline-block;height:100%;position:relative}.grants-stepper__line__disabled{background-color:var(--grants-stepper-disabled-color)}.grants-stepper__steps{background-color:var(--grants-stepper-background-color);box-sizing:border-box;display:flex;flex-shrink:0;justify-content:center;max-width:var(--grants-step-width);min-width:var(--grants-step-width);padding:3px}.grants-stepper__step{align-items:center;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:rgba(0,0,0,0);border:0;box-sizing:content-box;color:var(--grants-stepper-color);cursor:pointer;display:flex;flex-direction:column;height:100%;justify-content:center;outline:none;overflow:visible;padding:0;position:relative}.grants-stepper__step[disabled],.grants-stepper__step__disabled{color:var(--grants-stepper-disabled-color);cursor:not-allowed}.grants-stepper__step[disabled] .grants-stepper__circle,.grants-stepper__step__disabled .grants-stepper__circle{background-color:var(--grants-stepper-background-color);border:2px solid var(--grants-stepper-disabled-color);color:var(--grants-stepper-disabled-color)}.grants-stepper__step[disabled] .grants-stepper__text,.grants-stepper__step__disabled .grants-stepper__text{color:var(--grants-stepper-disabled-color)}.grants-stepper__step__circle_container{align-items:center;display:flex;height:var(--circle-container-size);justify-content:center;width:var(--circle-container-size);z-index:2}.grants-stepper__step__completed_container{align-items:center;background-color:var(--grants-stepper-color);border-radius:16px;color:var(--color-white);display:none;justify-content:center;outline:2px solid var(--grants-stepper-background-color);padding:4px;vertical-align:middle}.grants-stepper .grants-stepper__error,.grants-stepper .grants-stepper__completed{display:none}.grants-stepper__text{color:var(--grants-stepper-not-selected-step-label-color);font-size:var(--fontsize-body-m);font-weight:500;line-height:var(--lineheight-l);margin-bottom:0;margin-top:6px;padding-left:var(--spacing-4-xs);padding-right:var(--spacing-4-xs);text-align:center;text-decoration:underline}.grants-stepper__circle{align-items:center;background-color:var(--grants-step-background-color);border:2px solid var(--grants-stepper-color);border-radius:16px;color:var(--grants-step-content-color);display:flex;height:28px;justify-content:center;outline:2px solid var(--grants-stepper-background-color);text-align:center;width:28px}.grants-stepper__number{font-size:var(--fontsize-body-m);font-weight:500;line-height:1.15}.grants-stepper .is-active .grants-stepper__circle{border:4px solid var(--grants-stepper-color);border-radius:18px;outline:none}.grants-stepper .is-active .grants-stepper__text{color:var(--grants-stepper-selected-step-label-color);font-weight:700;text-decoration:none}.grants-stepper .is-active .grants-stepper__number{color:var(--grants-stepper-selected-step-label-color);font-weight:700;text-decoration:none}.grants-stepper .is-complete .grants-stepper__container{align-items:center;background-color:var(--grants-stepper-color);border-radius:16px;color:var(--color-white);display:flex;justify-content:center;outline:2px solid var(--grants-stepper-background-color);padding:4px}.grants-stepper .is-complete .grants-stepper__number{display:none}.grants-stepper .is-complete .grants-stepper__completed{display:inline-block}.grants-stepper .is-complete .grants-stepper__circle{opacity:0}.grants-stepper .is-complete .grants-stepper__step__completed_container{display:flex}.grants-stepper .has-errors .grants-stepper__container{align-items:center;background-color:var(--grants-stepper-color);border-radius:16px;color:var(--color-white);display:flex;justify-content:center;outline:2px solid var(--grants-stepper-background-color);padding:4px}.grants-stepper .has-errors .grants-stepper__circle{border-color:var(--color-error);color:var(--color-error)}.grants-stepper .has-errors .grants-stepper__number{display:none}.grants-stepper .has-errors .grants-stepper__error{display:inline-block}.grants-stepper .progress-marker::before{display:none}.grants-stepper .progress-step .progress-marker{color:var(--color-black)}.grants-stepper .progress-step .progress-marker.focus-visible .grants-stepper__circle{outline:2px solid var(--color-black);outline:var(--outline-width, 2px) solid var(--color-black);outline-offset:2px}.grants-stepper .progress-step .progress-marker.focus-visible .grants-stepper__circle{outline:2px solid var(--color-black);outline:var(--outline-width, 2px) solid var(--color-black);outline-offset:2px}.grants-stepper .progress-step .progress-marker:focus-visible .grants-stepper__circle{outline:2px solid var(--color-black);outline:var(--outline-width, 2px) solid var(--color-black);outline-offset:2px}.grants-stepper .progress-step .progress-marker.focus-visible .grants-stepper__text{outline:2px solid var(--color-black);outline:var(--outline-width, 2px) solid var(--color-black)}.grants-stepper .progress-step .progress-marker.focus-visible .grants-stepper__text{outline:2px solid var(--color-black);outline:var(--outline-width, 2px) solid var(--color-black)}.grants-stepper .progress-step .progress-marker:focus-visible .grants-stepper__text{outline:2px solid var(--color-black);outline:var(--outline-width, 2px) solid var(--color-black)}.grants-stepper .progress-step:last-child{flex-grow:1}.grant-applications--select-wrapper{--border-width: 2px;--input-height: 56px;--menu-item-height: 53px;--icon-size: var(--spacing-m);--helper-color-default: var(--color-black-60);--helper-color-invalid: var(--color-error);--icon-color-invalid: var(--color-error);--input-background-default: var(--color-white);--input-background-disabled: var(--color-black-10);--input-border-color-default: var(--color-black-50);--input-border-color-hover: var(--color-black-90);--input-border-color-focus: var(--color-black-90);--input-border-color-invalid: var(--color-error);--input-border-color-disabled: var(--color-black-10);--input-color-default: var(--color-black-90);--input-color-disabled: var(--color-black-40);--label-color-default: var(--color-black-90);--label-color-invalid: var(--color-black-90);--placeholder-color: var(--color-black-60);--focus-outline-color: var(--color-coat-of-arms);align-items:center;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--input-background-default);border:var(--border-width) solid var(--input-border-color-default);box-sizing:border-box;color:var(--input-color-default);cursor:pointer;display:block;font-size:1.125em;grid-template-areas:"select";line-height:normal;max-width:30ch;min-width:15ch;padding:.25em .5em;position:relative;width:100%}.grant-applications--select-wrapper select{align-items:center;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:rgba(0,0,0,0);border:none;color:var(--dropdown-color-default);cursor:inherit;display:flex;font-family:inherit;font-size:var(--fontsize-body-l);height:var(--input-height);line-height:inherit;margin:0;min-height:var(--menu-item-height);outline:none;padding:calc(var(--spacing-s) - var(--border-width)*2) var(--spacing-s);width:100%;z-index:1}.grant-applications--select-wrapper select::-ms-expand{display:none}.grant-applications--select-wrapper i.hel-icon{pointer-events:none;position:absolute;right:calc(var(--spacing-s) - var(--border-width)*2);top:calc(var(--spacing-s) - var(--border-width)*2)}.grant-applications--select-wrapper select,.grant-applications--select-wrapper::after{grid-area:select}.grant-applications--select-wrapper:not(.select--multiple)::after{background-color:var(--helper-color-default);clip-path:polygon(100% 0%, 0 0%, 50% 100%);content:"";height:.5em;justify-self:end;width:.8em}.grant-applications--select-wrapper select:focus+.grant-applications--select-focus{border:2px solid var(--focus-outline-color);border-radius:inherit;bottom:-1px;left:-1px;position:absolute;right:-1px;top:-1px}.webform-submission__application_id{border-bottom:1px var(--color-black-20) solid;padding-bottom:var(--spacing-xl)}.webform-submission__application_id--header{font-size:1rem;font-weight:bold}.webform-submission__title-wrapper{padding-top:var(--spacing-2-xl)}.webform-submission__title-wrapper h1{max-width:100%}.webform-submission ul{list-style:none;margin-top:0;padding-left:0}.webform-submission-information{background:var(--color-silver-light);margin-top:var(--spacing-3-xl);padding:var(--spacing-l)}.webform-submission-information .webform-submission-information{margin-top:var(--spacing-l);padding:0}.webform-submission-information h4{margin-top:0}.webform-submission-information h5{font-size:var(--fontsize-body-m);margin-top:var(--spacing-s)}.webform-submission-information__row{display:flex}.webform-submission-information__row-edit{margin-top:var(--spacing-s)}.webform-submission-information__row-top{align-items:center;border-bottom:1px solid var(--color-black-20);justify-content:space-between}@media(max-width: 550px){.webform-submission-information__row-top{display:block}}.webform-submission-information__row-main{flex-flow:row nowrap;gap:var(--spacing-m);justify-content:space-between}@media(max-width: 1179px){.webform-submission-information__row-main{flex-flow:row wrap}}.webform-submission-information__row-main>div{flex:1}@media(max-width: 1179px){.webform-submission-information__row-main>div{flex:auto;width:100%}}.webform-submission-information__row-main>div ul{list-style-type:none;margin-bottom:0;padding-left:0}.webform-submission-information__row-main>div ul li{margin:0;padding:0}.webform-submission-information__supportlinks{display:flex;flex-flow:row nowrap;min-width:-moz-fit-content;min-width:fit-content}.webform-submission-information__supportlinks .hds-loading-spinner{left:0}.webform-submission-information__supportlinks .hds-button{min-width:-moz-fit-content;min-width:fit-content}.hel-icon.hel-icon--copy{-webkit-mask-image:url("data:image/svg+xml,%3Csvg class='Icon-module_icon__1Jtzj icon_hel-icon__1YqNC Icon-module_s__2WGWe icon_hel-icon--size-s__2Lkik' viewBox='0 0 24 24' role='img' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Crect width='24' height='24'%3E%3C/rect%3E%3Cpath fill='currentColor' d='M6,10 L6,12 L5,12 L5,18 L12,18 L12,17 L14,17 L14,19 C14,19.5522847 13.5522847,20 13,20 L4,20 C3.44771525,20 3,19.5522847 3,19 L3,11 C3,10.4477153 3.44771525,10 4,10 L6,10 Z M20,4 C20.5522847,4 21,4.44771525 21,5 L21,15 C21,15.5522847 20.5522847,16 20,16 L8,16 C7.44771525,16 7,15.5522847 7,15 L7,5 C7,4.44771525 7.44771525,4 8,4 L20,4 Z M19,6 L9,6 L9,14 L19,14 L19,6 Z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg class='Icon-module_icon__1Jtzj icon_hel-icon__1YqNC Icon-module_s__2WGWe icon_hel-icon--size-s__2Lkik' viewBox='0 0 24 24' role='img' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Crect width='24' height='24'%3E%3C/rect%3E%3Cpath fill='currentColor' d='M6,10 L6,12 L5,12 L5,18 L12,18 L12,17 L14,17 L14,19 C14,19.5522847 13.5522847,20 13,20 L4,20 C3.44771525,20 3,19.5522847 3,19 L3,11 C3,10.4477153 3.44771525,10 4,10 L6,10 Z M20,4 C20.5522847,4 21,4.44771525 21,5 L21,15 C21,15.5522847 20.5522847,16 20,16 L8,16 C7.44771525,16 7,15.5522847 7,15 L7,5 C7,4.44771525 7.44771525,4 8,4 L20,4 Z M19,6 L9,6 L9,14 L19,14 L19,6 Z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E")}.webform-submission-form .form-actions{border-top:1px rgba(0,0,0,.6) solid;margin-top:var(--spacing-l);padding-top:var(--spacing-2-xl)}@media(min-width: 768px){.webform-submission-form .form-actions{display:flex;flex-direction:row-reverse}}.webform-submission-form .form-actions .actions{display:flex;flex-wrap:wrap}.webform-submission-form .form-actions button{margin-left:0}@media(min-width: 768px){.webform-submission-form .form-actions button{margin-left:var(--spacing-2-xs)}}.webform-submission-form .form-actions input{margin-bottom:var(--spacing-layout-2-xs);width:100%}@media(min-width: 768px){.webform-submission-form .form-actions input{width:auto}}.webform-submission-form .form-actions input.webform-button--draft{background:rgba(0,0,0,0);border:0 rgba(0,0,0,0) solid;color:var(--hdbt-color-black);order:3;text-decoration:underline}.webform-submission-form .form-actions button.webform-button--next span::after,.webform-submission-form .form-actions button.webform-button--preview span::after{content:">";margin-left:var(--spacing-2-xs)}.webform-submission-form .form-actions button.webform-button--previous span::before{content:"<";margin-right:var(--spacing-2-xs)}.webform-submission-form .form-actions input.webform-button--previous{background:var(--color-white);color:var(--border-color)}.webform-button--draft .hds-button__label::before{background-color:currentColor;background-size:contain;content:"";display:inline-block;flex-shrink:0;height:24px;margin-right:var(--spacing-2-xs);-webkit-mask-image:var(--hel-icon--download-cloud);mask-image:var(--hel-icon--download-cloud);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:24px 24px;mask-size:24px 24px;transition:transform .2s linear;vertical-align:bottom;width:24px}.webform-submission-messages{background:var(--color-silver-light);margin-top:var(--spacing-3-xl);padding:var(--spacing-l)}.webform-submission-messages h4,.webform-submission-messages h5{margin-top:0}.webform-submission-messages hr{margin:var(--spacing-l) 0}.webform-submission-messages__new-message{align-items:center;background:var(--color-alert);display:inline-flex;font-weight:bold;gap:var(--spacing-2-xs);margin-bottom:var(--spacing-m);padding:var(--spacing-2-xs) var(--spacing-xs);text-transform:uppercase}.webform-submission-messages__messages-list{list-style:none;margin:0;padding:0}.webform-submission-messages__message{margin:0;padding:0}.webform-submission-messages__message__attachments{list-style:none}.webform-submission-messages__message .hds-button{margin-top:var(--spacing-s)}.js-form-type-grants-webform-summation-field{max-width:var(--webform-element-width--input-large);text-align:right}.js-form-type-grants-webform-summation-field .grants-webform-summation-field{display:inline-block;padding:var(--spacing-xs) var(--spacing-m)}.webform-print-header,.webform-print-footer{display:none}.webform-print .main-content{display:block}.webform-submission--view-mode-html .hds-text-input,.webform-submission-data-preview-page .hds-text-input,.webform-print-page-html .hds-text-input{max-width:100%}.webform-submission--view-mode-html .print-label,.webform-submission-data-preview-page .print-label,.webform-print-page-html .print-label{display:block;font-size:var(--fontsize-body-m);font-weight:500;margin-bottom:var(--spacing-3-xs);margin-top:0;max-width:-moz-fit-content;max-width:fit-content;padding-right:var(--spacing-xl);position:relative}.webform-submission--view-mode-html .webform-section-flex-wrapper h3+*>*:first-child>*:first-child,.webform-submission--view-mode-html .webform-section-flex-wrapper h3+*>*:first-child>*:first-child label:first-of-type,.webform-submission-data-preview-page .webform-section-flex-wrapper h3+*>*:first-child>*:first-child,.webform-submission-data-preview-page .webform-section-flex-wrapper h3+*>*:first-child>*:first-child label:first-of-type,.webform-print-page-html .webform-section-flex-wrapper h3+*>*:first-child>*:first-child,.webform-print-page-html .webform-section-flex-wrapper h3+*>*:first-child>*:first-child label:first-of-type{line-height:normal}.webform-submission--view-mode-html .print-notification,.webform-submission-data-preview-page .print-notification,.webform-print-page-html .print-notification{border:2px var(--color-black) solid;font-weight:bold;margin-top:var(--spacing-2-xl);padding:var(--spacing-layout-s)}.webform-submission--view-mode-html .print-notification .print-notification--icon,.webform-submission-data-preview-page .print-notification .print-notification--icon,.webform-print-page-html .print-notification .print-notification--icon{height:22px;margin-right:var(--spacing-2-xs);vertical-align:text-top;width:22px}.webform-submission--view-mode-html .webform-print-page-wizard-page~.webform-print-page-wizard-page h2,.webform-submission-data-preview-page .webform-print-page-wizard-page~.webform-print-page-wizard-page h2,.webform-print-page-html .webform-print-page-wizard-page~.webform-print-page-wizard-page h2{page-break-after:avoid;page-break-before:always}.webform-submission--view-mode-html div.hds-text-input__input,.webform-submission-data-preview-page div.hds-text-input__input,.webform-print-page-html div.hds-text-input__input{background:var(--color-white);border:2px var(--color-black) solid;height:var(--spacing-2-xl);width:100%}.webform-submission--view-mode-html div.hds-text-input__textarea,.webform-submission-data-preview-page div.hds-text-input__textarea,.webform-print-page-html div.hds-text-input__textarea{background:var(--color-white);border:2px var(--color-black) solid;height:var(--spacing-layout-2-xl);width:100%}.webform-submission--view-mode-html .webform-section-wrapper .hds-notification,.webform-submission-data-preview-page .webform-section-wrapper .hds-notification,.webform-print-page-html .webform-section-wrapper .hds-notification{margin-top:var(--spacing-s)}.webform-submission--view-mode-html .webform-print-page-body h2,.webform-submission-data-preview-page .webform-print-page-body h2,.webform-print-page-html .webform-print-page-body h2{margin-bottom:var(--spacing-layout-s)}.webform-submission--view-mode-html .webform-print-wrapper-table,.webform-submission-data-preview-page .webform-print-wrapper-table,.webform-print-page-html .webform-print-wrapper-table{border:0 rgba(0,0,0,0) solid;display:table;max-width:100%;overflow-x:visible;overflow-x:initial;width:100%}.webform-submission--view-mode-html .webform-print-wrapper-table thead,.webform-submission--view-mode-html .webform-print-wrapper-table tbody,.webform-submission--view-mode-html .webform-print-wrapper-table tfoot,.webform-submission--view-mode-html .webform-print-wrapper-table tr,.webform-submission--view-mode-html .webform-print-wrapper-table tbody tr:hover,.webform-submission--view-mode-html .webform-print-wrapper-table td,.webform-submission--view-mode-html .webform-print-wrapper-table td:first-child,.webform-submission--view-mode-html .webform-print-wrapper-table th,.webform-submission-data-preview-page .webform-print-wrapper-table thead,.webform-submission-data-preview-page .webform-print-wrapper-table tbody,.webform-submission-data-preview-page .webform-print-wrapper-table tfoot,.webform-submission-data-preview-page .webform-print-wrapper-table tr,.webform-submission-data-preview-page .webform-print-wrapper-table tbody tr:hover,.webform-submission-data-preview-page .webform-print-wrapper-table td,.webform-submission-data-preview-page .webform-print-wrapper-table td:first-child,.webform-submission-data-preview-page .webform-print-wrapper-table th,.webform-print-page-html .webform-print-wrapper-table thead,.webform-print-page-html .webform-print-wrapper-table tbody,.webform-print-page-html .webform-print-wrapper-table tfoot,.webform-print-page-html .webform-print-wrapper-table tr,.webform-print-page-html .webform-print-wrapper-table tbody tr:hover,.webform-print-page-html .webform-print-wrapper-table td,.webform-print-page-html .webform-print-wrapper-table td:first-child,.webform-print-page-html .webform-print-wrapper-table th{background:rgba(0,0,0,0);border:0;color:var(--color-black)}.webform-submission--view-mode-html .webform-print-wrapper-table ul,.webform-submission-data-preview-page .webform-print-wrapper-table ul,.webform-print-page-html .webform-print-wrapper-table ul{margin:0;padding:0}.webform-submission--view-mode-html .webform-print-wrapper-table ul li,.webform-submission-data-preview-page .webform-print-wrapper-table ul li,.webform-print-page-html .webform-print-wrapper-table ul li{border-bottom:1px var(--color-black-50) solid;list-style:none;margin-top:0;padding:1rem 0}.webform-submission--view-mode-html .webform-print-wrapper-table ul li:last-of-type,.webform-submission-data-preview-page .webform-print-wrapper-table ul li:last-of-type,.webform-print-page-html .webform-print-wrapper-table ul li:last-of-type{border-bottom:0 rgba(0,0,0,0) solid}.webform-submission--view-mode-html .webform-print-wrapper-table thead,.webform-submission-data-preview-page .webform-print-wrapper-table thead,.webform-print-page-html .webform-print-wrapper-table thead{display:table-header-group}.webform-submission--view-mode-html .webform-print-wrapper-table thead th,.webform-submission-data-preview-page .webform-print-wrapper-table thead th,.webform-print-page-html .webform-print-wrapper-table thead th{padding:0}.webform-submission--view-mode-html .webform-print-wrapper-table tfoot,.webform-submission-data-preview-page .webform-print-wrapper-table tfoot,.webform-print-page-html .webform-print-wrapper-table tfoot{display:table-footer-group}.webform-submission--view-mode-html .webform-submission-data>section,.webform-submission-data-preview-page .webform-submission-data>section,.webform-print-page-html .webform-submission-data>section{border-top:1px var(--color-black-20) solid;padding-top:var(--spacing-layout-l)}.webform-submission--view-mode-html .webform-submission-data>section>.webform-section-flex-wrapper,.webform-submission-data-preview-page .webform-submission-data>section>.webform-section-flex-wrapper,.webform-print-page-html .webform-submission-data>section>.webform-section-flex-wrapper{display:block}.webform-submission--view-mode-html .webform-submission-data>section>.webform-section-flex-wrapper>h2,.webform-submission-data-preview-page .webform-submission-data>section>.webform-section-flex-wrapper>h2,.webform-print-page-html .webform-submission-data>section>.webform-section-flex-wrapper>h2{font-size:var(--fontsize-heading-l) !important;margin:0 0 2mm !important;padding:0 !important;width:100% !important}.webform-submission--view-mode-html .webform-submission-data>section>.webform-section-flex-wrapper>h2,.webform-submission-data-preview-page .webform-submission-data>section>.webform-section-flex-wrapper>h2,.webform-print-page-html .webform-submission-data>section>.webform-section-flex-wrapper>h2{font-weight:500;min-width:100%}.webform-submission--view-mode-html .webform-submission-data>section>.webform-section-flex-wrapper>.webform-section-wrapper,.webform-submission-data-preview-page .webform-submission-data>section>.webform-section-flex-wrapper>.webform-section-wrapper,.webform-print-page-html .webform-submission-data>section>.webform-section-flex-wrapper>.webform-section-wrapper{padding:6mm 0}.webform-submission--view-mode-html .webform-submission-data>section>.webform-section-flex-wrapper>.webform-section-wrapper label,.webform-submission-data-preview-page .webform-submission-data>section>.webform-section-flex-wrapper>.webform-section-wrapper label,.webform-print-page-html .webform-submission-data>section>.webform-section-flex-wrapper>.webform-section-wrapper label{font-weight:500}.webform-submission--view-mode-html .webform-submission-data>section.hds-notification,.webform-submission-data-preview-page .webform-submission-data>section.hds-notification,.webform-print-page-html .webform-submission-data>section.hds-notification{padding-top:var(--spacing-s)}@media print{@page{.webform-submission--view-mode-html,.webform-submission-data-preview-page,.webform-print-page-html{margin:0;size:A4}}.webform-submission--view-mode-html h1,.webform-submission-data-preview-page h1,.webform-print-page-html h1{margin:0;position:relative}.webform-submission--view-mode-html details,.webform-submission-data-preview-page details,.webform-print-page-html details{page-break-before:always}.webform-submission--view-mode-html .details-section-divider,.webform-submission-data-preview-page .details-section-divider,.webform-print-page-html .details-section-divider{page-break-after:always}.webform-submission--view-mode-html label,.webform-submission-data-preview-page label,.webform-print-page-html label{font-size:8pt;margin-bottom:0}.webform-submission--view-mode-html section,.webform-submission-data-preview-page section,.webform-print-page-html section{border-top:0 var(--color-black-20) solid !important;padding-top:0 !important}.webform-submission--view-mode-html section,.webform-submission-data-preview-page section,.webform-print-page-html section{margin-bottom:0;padding-bottom:0}.webform-submission--view-mode-html div.main-content,.webform-submission-data-preview-page div.main-content,.webform-print-page-html div.main-content{margin:0}.webform-submission--view-mode-html button,.webform-submission--view-mode-html footer.footer,.webform-submission--view-mode-html header.header,.webform-submission--view-mode-html nav.breadcrumb,.webform-submission--view-mode-html .form-actions,.webform-submission--view-mode-html .hds-notification,.webform-submission--view-mode-html .messages__container,.webform-submission--view-mode-html .tools__container,.webform-submission--view-mode-html .breadcrumb__container,.webform-submission--view-mode-html .webform-progress,.webform-submission--view-mode-html .webform-progress-tracker,.webform-submission--view-mode-html .webform-progress-tracker-mobile,.webform-submission--view-mode-html .webform-multiple-add,.webform-submission--view-mode-html .webform-multiple-table--operations,.webform-submission-data-preview-page button,.webform-submission-data-preview-page footer.footer,.webform-submission-data-preview-page header.header,.webform-submission-data-preview-page nav.breadcrumb,.webform-submission-data-preview-page .form-actions,.webform-submission-data-preview-page .hds-notification,.webform-submission-data-preview-page .messages__container,.webform-submission-data-preview-page .tools__container,.webform-submission-data-preview-page .breadcrumb__container,.webform-submission-data-preview-page .webform-progress,.webform-submission-data-preview-page .webform-progress-tracker,.webform-submission-data-preview-page .webform-progress-tracker-mobile,.webform-submission-data-preview-page .webform-multiple-add,.webform-submission-data-preview-page .webform-multiple-table--operations,.webform-print-page-html button,.webform-print-page-html footer.footer,.webform-print-page-html header.header,.webform-print-page-html nav.breadcrumb,.webform-print-page-html .form-actions,.webform-print-page-html .hds-notification,.webform-print-page-html .messages__container,.webform-print-page-html .tools__container,.webform-print-page-html .breadcrumb__container,.webform-print-page-html .webform-progress,.webform-print-page-html .webform-progress-tracker,.webform-print-page-html .webform-progress-tracker-mobile,.webform-print-page-html .webform-multiple-add,.webform-print-page-html .webform-multiple-table--operations{display:none !important}.webform-submission--view-mode-html .gin--horizontal-toolbar .dialog-off-canvas-main-canvas,.webform-submission-data-preview-page .gin--horizontal-toolbar .dialog-off-canvas-main-canvas,.webform-print-page-html .gin--horizontal-toolbar .dialog-off-canvas-main-canvas{padding:0 !important}.webform-submission--view-mode-html .hds-text-input,.webform-submission-data-preview-page .hds-text-input,.webform-print-page-html .hds-text-input{max-width:100%}.webform-submission--view-mode-html .hds-text-input .hds-text-input__input,.webform-submission-data-preview-page .hds-text-input .hds-text-input__input,.webform-print-page-html .hds-text-input .hds-text-input__input{height:1cm}.webform-submission--view-mode-html .hds-text-input textarea.hds-text-input__input,.webform-submission--view-mode-html .hds-text-input div.hds-text-input__textarea,.webform-submission-data-preview-page .hds-text-input textarea.hds-text-input__input,.webform-submission-data-preview-page .hds-text-input div.hds-text-input__textarea,.webform-print-page-html .hds-text-input textarea.hds-text-input__input,.webform-print-page-html .hds-text-input div.hds-text-input__textarea{height:6cm;max-width:100%;min-width:100%;width:100%}.webform-submission--view-mode-html .hds-text-input .hds-text-input__input[readonly],.webform-submission--view-mode-html .hds-text-input .hds-text-input__input,.webform-submission-data-preview-page .hds-text-input .hds-text-input__input[readonly],.webform-submission-data-preview-page .hds-text-input .hds-text-input__input,.webform-print-page-html .hds-text-input .hds-text-input__input[readonly],.webform-print-page-html .hds-text-input .hds-text-input__input{border:2px var(--color-black) solid}.webform-submission--view-mode-html .webform-element,.webform-submission-data-preview-page .webform-element,.webform-print-page-html .webform-element{border:1px var(--color-black) solid;margin-bottom:8mm;padding:2.5mm;position:relative}.webform-submission--view-mode-html .webform-preview,.webform-submission-data-preview-page .webform-preview,.webform-print-page-html .webform-preview{margin-top:0}.webform-submission--view-mode-html .webform-preview label,.webform-submission-data-preview-page .webform-preview label,.webform-print-page-html .webform-preview label{align-items:flex-end;display:flex;font-size:8pt;height:100%;left:0;pointer-events:none;position:absolute;top:-100%;width:100%}.webform-submission--view-mode-html .webform-preview .webform-element,.webform-submission-data-preview-page .webform-preview .webform-element,.webform-print-page-html .webform-preview .webform-element{border:1px var(--color-black) solid;margin-bottom:8mm;padding:2.5mm;position:relative;top:5mm}.webform-submission--view-mode-html .webform-preview .webform-multiple-table--operations,.webform-submission-data-preview-page .webform-preview .webform-multiple-table--operations,.webform-print-page-html .webform-preview .webform-multiple-table--operations{display:none}.webform-submission--view-mode-html .webform-print-header,.webform-submission-data-preview-page .webform-print-header,.webform-print-page-html .webform-print-header{align-items:center;background:var(--color-white);border-bottom:1px var(--color-black-40) solid;display:flex;flex-flow:row nowrap;font-size:9pt;height:21mm;left:0;max-width:100%;min-width:100%;position:fixed;top:0;width:100%;z-index:1000}.webform-submission--view-mode-html .webform-print-header svg,.webform-submission-data-preview-page .webform-print-header svg,.webform-print-page-html .webform-print-header svg{color:var(--color-black);display:block;height:25mm;margin-right:3mm;width:55mm}.webform-submission--view-mode-html .webform-print-header .webform-print-header-left-text,.webform-submission-data-preview-page .webform-print-header .webform-print-header-left-text,.webform-print-page-html .webform-print-header .webform-print-header-left-text{color:var(--color-black-40);text-align:left;width:100%}.webform-submission--view-mode-html .webform-print-header .webform-print-header-right-text,.webform-submission-data-preview-page .webform-print-header .webform-print-header-right-text,.webform-print-page-html .webform-print-header .webform-print-header-right-text{color:var(--color-black-40);text-align:right;width:100%}.webform-submission--view-mode-html .webform-print-footer,.webform-submission-data-preview-page .webform-print-footer,.webform-print-page-html .webform-print-footer{align-items:center;background:var(--color-white);border-top:1px var(--color-black-40) solid;bottom:0;display:flex;flex-flow:row nowrap;font-size:9pt;height:17mm;left:0;max-width:100%;min-width:100%;position:fixed;width:100%;z-index:1000}.webform-submission--view-mode-html .webform-print-footer svg,.webform-submission-data-preview-page .webform-print-footer svg,.webform-print-page-html .webform-print-footer svg{color:var(--color-black);display:block;height:15mm;margin-right:3mm;width:33mm}.webform-submission--view-mode-html .webform-print-footer .webform-print-footer-left-text,.webform-submission-data-preview-page .webform-print-footer .webform-print-footer-left-text,.webform-print-page-html .webform-print-footer .webform-print-footer-left-text{color:var(--color-black-40);text-align:left;width:100%}.webform-submission--view-mode-html .webform-print-footer .webform-print-footer-right-text,.webform-submission-data-preview-page .webform-print-footer .webform-print-footer-right-text,.webform-print-page-html .webform-print-footer .webform-print-footer-right-text{color:var(--color-black-40);text-align:right;width:100%}.webform-submission--view-mode-html .webform-print-header-space,.webform-submission-data-preview-page .webform-print-header-space,.webform-print-page-html .webform-print-header-space{background:var(--color-white);font-size:9pt;height:21mm}.webform-submission--view-mode-html .webform-print-footer-space,.webform-submission-data-preview-page .webform-print-footer-space,.webform-print-page-html .webform-print-footer-space{background:var(--color-white);font-size:9pt;height:17mm}.webform-submission--view-mode-html .webform-print-wrapper-table,.webform-submission-data-preview-page .webform-print-wrapper-table,.webform-print-page-html .webform-print-wrapper-table{border:0;margin:0;overflow-x:visible;overflow-x:initial}.webform-submission--view-mode-html .webform-section-flex-wrapper,.webform-submission-data-preview-page .webform-section-flex-wrapper,.webform-print-page-html .webform-section-flex-wrapper{flex-flow:row wrap}.webform-submission--view-mode-html .webform-section-flex-wrapper>h3.webform-section-title,.webform-submission-data-preview-page .webform-section-flex-wrapper>h3.webform-section-title,.webform-print-page-html .webform-section-flex-wrapper>h3.webform-section-title{max-width:100%;width:100%}.webform-submission--view-mode-html .webform-section-grid-wrapper,.webform-submission-data-preview-page .webform-section-grid-wrapper,.webform-print-page-html .webform-section-grid-wrapper{display:flex;flex-flow:row nowrap}.webform-submission--view-mode-html .webform-section-grid-wrapper>h3.webform-section-title,.webform-submission-data-preview-page .webform-section-grid-wrapper>h3.webform-section-title,.webform-print-page-html .webform-section-grid-wrapper>h3.webform-section-title{font-size:1.25rem;margin-top:0;max-width:5cm;width:100%}.webform-submission--view-mode-html .webform-section-grid-wrapper>dl.webform-section-contents,.webform-submission-data-preview-page .webform-section-grid-wrapper>dl.webform-section-contents,.webform-print-page-html .webform-section-grid-wrapper>dl.webform-section-contents{margin-top:0;max-width:100%;padding-left:1cm;width:100%}.webform-submission--view-mode-html .webform-section-grid-wrapper>dl.webform-section-contents dt,.webform-submission-data-preview-page .webform-section-grid-wrapper>dl.webform-section-contents dt,.webform-print-page-html .webform-section-grid-wrapper>dl.webform-section-contents dt{font-weight:bold;margin:0;padding:0;page-break-after:avoid}.webform-submission--view-mode-html .webform-section-grid-wrapper>dl.webform-section-contents dd,.webform-submission-data-preview-page .webform-section-grid-wrapper>dl.webform-section-contents dd,.webform-print-page-html .webform-section-grid-wrapper>dl.webform-section-contents dd{margin:0;padding:0;page-break-before:avoid}.webform-submission--view-mode-html .webform-print-page-body h2,.webform-submission-data-preview-page .webform-print-page-body h2,.webform-print-page-html .webform-print-page-body h2{margin-bottom:1cm}}.webform-submission-data dl dt{font-weight:bold}.webform-submission-data dl dd{margin:0;padding:0}.webform-submission-data dl dl{padding-left:var(--spacing-2-xs)}.webform-submission-data dl>br{display:none}.webform-print-page-html .webform-section-wrapper>h4,.webform-print-page-html .webform-section-wrapper .print-label{margin-top:var(--spacing-2-xs);line-height:1.5}.webform-print-page-html .webform-section-wrapper fieldset{padding:var(--spacing-s)}@media(min-width: 768px){.webform-print-page-html .webform-section-wrapper fieldset{min-width:400px;padding:var(--spacing-s) var(--spacing-m)}}.application-list{padding-bottom:var(--spacing-xl);padding-left:0}.application-list__processed-human-readable{display:none}.application-list__item{background:var(--color-bus-light);display:block;margin:var(--spacing-m) 0;padding:var(--spacing-2-xl) var(--spacing-s) var(--spacing-m);position:relative}.application-list__item .new-message{background-color:var(--color-alert);border-radius:var(--spacing-xl);display:inline-block;padding:var(--spacing-2-xs)}.application-list__item .new-message .hel-icon--size-s{height:20px;width:20px}.application-list__item h3,.application-list__item h4{margin-top:var(--spacing-xs)}.application-list__item h4{font-size:1rem}.application-list__item--submitted{display:none}.application-list__item__link{display:flex;margin-top:var(--spacing-m)}.application-list__item__link a{font-size:1.25rem}.application-list__item__link a i{vertical-align:text-bottom}.application-list__item__row{display:flex;flex-flow:row wrap;gap:var(--spacing-m);justify-content:space-between}.application-list__item__row__left{justify-content:flex-start}.application-list__item__row__top{padding:var(--spacing-2-xs) var(--spacing-s) var(--spacing-2-xs) 0;position:absolute;top:0;width:100%}.application-list__item--status{--status-label-height: 32px;align-items:center;border-radius:20px;display:inline-flex;font-size:var(--fontsize-body-s);line-height:var(--status-label-height);min-height:var(--status-label-height);padding:var(--spacing-3-xs) var(--spacing-s);padding-left:var(--spacing-xs);vertical-align:middle}.application-list__item--status+.hds-loading-spinner{display:inline-block;left:10px;margin:0;padding:0;position:relative;top:var(--spacing-3-xs)}.application-list__item--status.hide-spinner+.hds-loading-spinner{display:none}.application-list__item--status+div+.application-list__item--error{display:none}.application-list__item--status.show-error{background:var(--color-black-20);color:var(--color-black-90)}.application-list__item--status.show-error+div+.application-list__item--error{display:inline-flex;left:var(--spacing-xs);margin:0;padding:0;position:relative;top:var(--spacing-3-xs)}.application-list__item--status.show-error+div+.application-list__item--error .application-list--error-text{display:inline-block;margin-left:var(--spacing-2-xs)}.application-list__item--status--draft{padding-left:0}.application-list__item--status--sent,.application-list__item--status--submitted{background:var(--color-black-10)}.application-list__item--status--sent::before,.application-list__item--status--submitted::before{--icon-size: 1.5rem;background-color:#000;background-size:contain;content:"";display:inline-block;height:calc(var(--line-height) * 1em);height:var(--icon-size, calc(var(--line-height) * 1em));-webkit-mask-image:var(--hel-icon--alert-circle);mask-image:var(--hel-icon--alert-circle);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);-webkit-mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));vertical-align:bottom;width:calc(var(--line-height) * 1em);width:var(--icon-size, calc(var(--line-height) * 1em));background-color:var(--color-black);content:"";margin-right:var(--spacing-2-xs)}.application-list__item--status--received,.application-list__item--status--pending,.application-list__item--status--processing,.application-list__item--status--preparing{background:var(--color-info);color:var(--color-white)}.application-list__item--status--received::before,.application-list__item--status--pending::before,.application-list__item--status--processing::before,.application-list__item--status--preparing::before{--icon-size: 1.5rem;background-color:#000;background-size:contain;content:"";display:inline-block;height:calc(var(--line-height) * 1em);height:var(--icon-size, calc(var(--line-height) * 1em));-webkit-mask-image:var(--hel-icon--info-circle);mask-image:var(--hel-icon--info-circle);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);-webkit-mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));vertical-align:bottom;width:calc(var(--line-height) * 1em);width:var(--icon-size, calc(var(--line-height) * 1em));background-color:var(--color-white);content:"";margin-right:var(--spacing-2-xs)}.application-list__item--status--done,.application-list__item--status--ready,.application-list__item--status--resolved{background:var(--color-success);color:var(--color-white)}.application-list__item--status--done::before,.application-list__item--status--ready::before,.application-list__item--status--resolved::before{--icon-size: 1.5rem;background-color:#000;background-size:contain;content:"";display:inline-block;height:calc(var(--line-height) * 1em);height:var(--icon-size, calc(var(--line-height) * 1em));-webkit-mask-image:var(--hel-icon--check-circle);mask-image:var(--hel-icon--check-circle);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);-webkit-mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));vertical-align:bottom;width:calc(var(--line-height) * 1em);width:var(--icon-size, calc(var(--line-height) * 1em));background-color:var(--color-white);content:"";margin-right:var(--spacing-2-xs)}.application-list__item--status--rejected,.application-list__item--status--deleted,.application-list__item--status--canceled,.application-list__item--status--cancelled{background:var(--color-alert)}.application-list__item--status--rejected::before,.application-list__item--status--deleted::before,.application-list__item--status--canceled::before,.application-list__item--status--cancelled::before{--icon-size: 1.5rem;background-color:#000;background-size:contain;content:"";display:inline-block;height:calc(var(--line-height) * 1em);height:var(--icon-size, calc(var(--line-height) * 1em));-webkit-mask-image:var(--hel-icon--alert-circle);mask-image:var(--hel-icon--alert-circle);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);-webkit-mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));vertical-align:bottom;width:calc(var(--line-height) * 1em);width:var(--icon-size, calc(var(--line-height) * 1em));background-color:var(--color-black);content:"";margin-right:var(--spacing-2-xs)}.application-list__item--status--error{background:var(--color-black-20);color:var(--color-black);text-transform:uppercase}.application-list__item--status--error .hel-icon{margin-right:var(--spacing-3-xs)}.application-list__count{font-size:1.5rem}.application-list__count-value{font-weight:bold}.application-list__information-row{align-items:flex-end;display:flex;flex-flow:row nowrap;justify-content:space-between;width:100%}@media(max-width: 35rem){.application-list__information-row{flex-flow:row wrap}}.application-list__information-row .grant-applications--select-wrapper select{max-width:100%;width:322px}.application-list__status__wrapper{background:var(--color-black-5)}.application-list__status__container{display:flex;flex-flow:row wrap;gap:var(--spacing-layout-m);justify-content:flex-start;padding-bottom:var(--spacing-m);padding-top:var(--spacing-m)}.application-list__status__label{font-weight:bold}.application-list__status__value{display:flex;flex-flow:row;justify-items:center;min-height:var(--spacing-xl)}.application-list__status__value>div{margin:auto}.application-list__search-row{align-items:flex-end;display:flex;flex-flow:row nowrap;gap:var(--spacing-s);justify-content:space-between;width:100%}@media(max-width: 35rem){.application-list__search-row{flex-flow:row wrap}}.application-list__search-row .hds-text-input{flex:1 100%;max-width:100%}.application-list__search-row .hds-text-input__input-wrapper{display:block}.application-list__search-row .hds-text-input__input-wrapper input{width:100%}.application-list__search-row button{white-space:nowrap}.application-list__pagination{--line-height: 1.5555555556;font-size:1.125rem;font-weight:400;line-height:var(--line-height);display:inline-flex;flex-wrap:wrap;font-weight:700;gap:var(--spacing-2-xs);justify-content:center;list-style:none;padding:0}.application-list__pagination li{margin-top:0}.application-list__pagination li.active a{text-decoration:underline}.application-list__pagination li.disabled a{cursor:default;text-decoration:none}.application-list__pagination li.disabled a:hover,.application-list__pagination li.disabled a:focus,.application-list__pagination li.disabled a:active{outline:none;text-decoration:none}.application-list__pagination li a{color:var(--color-black-90);display:block;height:var(--link-height);min-width:40px;padding-left:var(--spacing-3-xs);padding-right:var(--spacing-3-xs);text-decoration:none}.application-list__pagination li a:hover{text-decoration:underline}.application-list__pagination li a:focus,.application-list__pagination li a:active{outline:solid var(--color-coat-of-arms) 3px;outline-offset:1px}.grants-profile hr{border:1px solid var(--color-silver);margin:var(--spacing-layout-xs) 0}.grants-profile h3.info-grants{border-bottom:2px solid var(--color-silver);padding-bottom:var(--spacing-l)}.grants-profile--title{align-items:center;display:flex;flex-flow:row nowrap}.grants-profile--title .grants-profile--initials{border-radius:50%;display:none;font-size:var(--fontsize-body-xl);font-weight:bold;height:var(--spacing-4-xl);line-height:var(--spacing-4-xl);margin-right:var(--spacing-m);text-align:center;vertical-align:middle;width:var(--spacing-4-xl)}@media(min-width: 992px){.grants-profile--title .grants-profile--initials{display:block}}.grants-profile--title .grants-profile--initials:hover,.grants-profile--title .grants-profile--initials:active,.grants-profile--title .grants-profile--initials:focus{text-decoration:underline}.grants-profile--title .grants-profile--initials-colorscheme-2{background-color:var(--color-bus);color:var(--color-white)}.grants-profile--title .grants-profile--initials-colorscheme-1{background-color:var(--color-engel);color:var(--color-black)}.grants-profile--title .grants-profile--initials-colorscheme-0{background-color:var(--color-tram);color:var(--color-white)}.grants-profile--title h1{flex-grow:100}.grants-profile--basicinfo{--line-height: 1.5;background-color:var(--color-silver-light);border-bottom:8px solid var(--color-engel-dark);padding-bottom:var(--spacing-2-xs);padding-top:var(--spacing-l)}.grants-profile--basicinfo h3{font-size:var(--fontsize-heading-l);margin-top:0;padding-top:0}.grants-profile--extrainfo{padding-bottom:var(--spacing-l);padding-top:var(--spacing-l)}.grants-profile--extrainfo .hds-notification{margin-bottom:var(--spacing-xl)}.grants-profile--extrainfo fieldset.form-wrapper{background-color:var(--color-silver-light);border:0;padding:var(--spacing-l)}.grants-profile--extrainfo fieldset.inline-error-message{background-color:transparent;background-color:initial;padding:0 0 0 var(--spacing-2-xs)}.grants-profile--extrainfo fieldset.inline-error-message legend{display:none}.grants-profile--update-link{margin-bottom:var(--spacing-layout-2-xs);margin-top:var(--spacing-layout-xs)}.grants-profile--infotext{font-size:var(--fontsize-body-l);margin-bottom:var(--spacing-s)}.grants-profile--wrapper{display:flex;flex-wrap:wrap}.grants-profile--wrapper-item{margin-bottom:var(--spacing-layout-2-xs);width:100%}@media(min-width: 576px){.grants-profile--wrapper-item{flex:1;margin-bottom:0}}.grants-profile--wrapper-item:first-child{flex:auto;margin-bottom:var(--spacing-layout-2-xs);width:100%}.grants-profile .profile-add-more{margin-top:1em}[dir="ltr"] .grants-profile dd{margin-left:0}[dir="rtl"] .grants-profile dd{margin-right:0}.grants-profile--officials{margin-left:0;padding-left:0}.grants-profile--officials-item{border-left:4px var(--color-copper) solid;display:flex;flex-flow:row nowrap;justify-content:space-between;list-style:none;margin-bottom:var(--spacing-layout-s);margin-left:0;max-width:var(--webform-element-width--input-large);padding-left:var(--spacing-layout-xs);width:100%}.grants-profile--officials-item--position{font-size:var(--fontsize-heading-xs);font-weight:bold;margin-bottom:var(--spacing-layout-2-xs);margin-top:0;padding-top:0}.grants-profile--officials-edit-wrapper{text-align:right}.grants-profile--officials-edit-wrapper a{display:inline-block}.grants-profile .hel-icon--check-circle-fill{color:var(--color-success);vertical-align:middle}.grants-profile-grants-profile .tabledrag-toggle-weight-wrapper,.grants-profile-grants-profile .field-multiple-drag{display:none}.grants-profile .hds-text-input__label{display:inline-block;margin-top:0}.page--oma-asiointi__private-person .grants-profile--basicinfo{border-bottom:8px solid var(--color-copper)}.page--oma-asiointi__private-person .grants-profile--wrapper{display:grid;grid-template-columns:1fr 1fr}.page--oma-asiointi__unregistered-community .grants-profile--wrapper{display:grid;grid-template-columns:1fr 1fr}.hds-link .hel-icon{margin-right:var(--spacing-2-xs);vertical-align:bottom}.hds-link span.link-label{font-weight:bold;margin-right:var(--spacing-m)}.bold-link{font-weight:bold}div.applicant-info--from-prh,div.applicant-info--from-grants{display:grid;grid-template-columns:1fr}@media(min-width: 576px){div.applicant-info--from-prh,div.applicant-info--from-grants{grid-template-columns:1fr 1fr}}@media(min-width: 768px){div.applicant-info--from-prh,div.applicant-info--from-grants{grid-template-columns:1fr 1fr 1fr}}div.applicant-info--from-prh .form-required::after,div.applicant-info--from-grants .form-required::after{content:none}div.applicant-info--from-prh{border-bottom:2px solid var(--color-silver);margin-bottom:var(--spacing-layout-xs);padding-bottom:var(--spacing-layout-2-xs)}div.grants-handler--prefilled-field .field-prefix,.grants-profile-prh-info .field-prefix{display:block;position:absolute;right:var(--spacing-layout-s);top:0}div.grants-handler--prefilled-field .hds-text-input__input-wrapper,div.grants-handler--prefilled-field .description,.grants-profile-prh-info .hds-text-input__input-wrapper,.grants-profile-prh-info .description{display:inline-block;white-space:normal}div.grants-handler--prefilled-field .hel-icon--check-circle-fill,.grants-profile-prh-info .hel-icon--check-circle-fill{color:var(--color-success);vertical-align:middle}div.grants-handler--prefilled-field .hds-text-input__input,div.grants-handler--prefilled-field .webform-element-description,.grants-profile-prh-info .hds-text-input__input,.grants-profile-prh-info .webform-element-description{color:var(--color-black);display:block;font-size:var(--fontsize-body-m);line-height:var(--spacing-m);position:relative}div.grants-handler--prefilled-field .hds-text-input__label,.grants-profile-prh-info .hds-text-input__label{margin-bottom:0}.grants-profile--imported-section .webform-section-flex-wrapper{background-color:var(--color-silver-light);border-bottom:8px solid var(--color-engel-dark);display:block;padding-bottom:var(--spacing-2-xs);padding-left:var(--spacing-l);padding-right:var(--spacing-l);padding-top:var(--spacing-l);width:100%}.grants-profile--imported-section .webform-section-flex-wrapper h3.webform-section-title{font-size:var(--fontsize-heading-l);font-weight:400;margin-top:0;max-width:100%;padding-top:0;width:100%}.grants-profile--imported-section .webform-section-flex-wrapper .webform-section-wrapper{padding:0}.grants-profile--imported-section .webform-section-flex-wrapper .hds-text-input{margin-bottom:0}.grants-profile--imported-section .webform-section-flex-wrapper #edit-grants-profile-items-container{display:flex;flex-flow:row wrap;justify-content:space-between;margin-bottom:var(--spacing-layout-xs);margin-top:var(--spacing-layout-xs);width:100%}.grants-profile--imported-section .webform-section-flex-wrapper #edit-grants-profile-items-container>div{margin:0 var(--spacing-layout-xs) 0 0;min-width:160px}.grants-profile--imported-section .webform-section-flex-wrapper #edit-grants-profile-items-container .hds-text-input__input-wrapper{display:none}.grants-profile--imported-section .webform-section-flex-wrapper #edit-grants-profile-items-container label{font-size:var(--fontsize-body-m);font-weight:bold;margin:0}.grants-profile--imported-section .webform-section-flex-wrapper .form-item-prh-markup{border-bottom:2px solid var(--color-silver);padding-bottom:var(--spacing-layout-xs);padding-top:var(--spacing-layout-xs)}.grants-profile__local-tasks__wrapper{margin-bottom:0}.openid-connect-login-form.openid-connect-login-form{border-bottom:0;margin-bottom:0;padding-bottom:0}.grants-profile--links{display:flex;justify-content:space-between}.company-delete-confirm-form .form-actions{margin-top:var(--spacing-layout-xs)}.company-delete-confirm-form .form-submit{margin-right:var(--spacing-2-xs)}.page--oma-asiointi .main-content{margin-top:0}.page--oma-asiointi .main-content h2{margin-top:var(--spacing-m)}.hero--oma-asiointi{margin-bottom:var(--spacing-l)}.hero--oma-asiointi .container{padding-top:var(--spacing-layout-m)}.hero--oma-asiointi .hero__text-content{align-items:center;display:flex}.hero--oma-asiointi .hero__title{margin-left:0}@media(min-width: 576px){.hero--oma-asiointi .hero__title{margin-left:40px}}.hero--oma-asiointi .hel-icon{display:none}@media(min-width: 576px){.hero--oma-asiointi .hel-icon{--icon-size: 48px;display:block;flex-shrink:0}}#oma-asiointi__sent{background:var(--color-silver-light)}#oma-asiointi__sent .application-list__item{background:var(--color-white)}.oma-asiointi-block{background-color:var(--color-silver-light);padding-bottom:var(--spacing-l);padding-top:var(--spacing-l)}.oma-asiointi-block h2{margin-bottom:var(--spacing-s);margin-top:0}.oma-asiointi-block h3{font-size:var(--fontsize-heading-m);font-weight:500}.oma-asiointi-block .header{border-bottom:1px solid var(--color-silver-dark);display:flex;justify-content:space-between;padding-bottom:var(--spacing-xs)}.oma-asiointi-block .header .user,.oma-asiointi-block .header .link{font-weight:700}.oma-asiointi-block .header .link .hel-icon{vertical-align:text-top}.oma-asiointi-block--link{display:block;position:relative;text-decoration:none}.oma-asiointi-block--link::after{--icon-size: 1.5rem;background-color:#000;background-size:contain;content:"";display:inline-block;height:calc(var(--line-height) * 1em);height:var(--icon-size, calc(var(--line-height) * 1em));-webkit-mask-image:var(--hel-icon--arrow-right);mask-image:var(--hel-icon--arrow-right);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);-webkit-mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));vertical-align:bottom;width:calc(var(--line-height) * 1em);width:var(--icon-size, calc(var(--line-height) * 1em));transition:transform .2s linear;bottom:var(--spacing-m);content:"";display:block;flex-shrink:0;margin-left:-4px;margin-top:var(--spacing-2-xs);position:absolute;right:var(--spacing-m)}@media(prefers-reduced-motion){.oma-asiointi-block--link::after{transition:none}}@media(min-width: 576px){.oma-asiointi-block--link::after{--icon-size: 3rem;margin-left:-8px;margin-top:var(--spacing-s)}}.oma-asiointi-block--link:focus::after,.oma-asiointi-block--link:hover::after{transform:translateX(var(--spacing-2-xs))}@media(prefers-reduced-motion){.oma-asiointi-block--link:focus::after,.oma-asiointi-block--link:hover::after{transform:none}}.oma-asiointi-block .new-message{background-color:var(--color-alert);display:inline-block;font-weight:500;padding:var(--spacing-2-xs);text-transform:uppercase}.oma-asiointi-block .new-messages-length{background-color:var(--color-black-20);border-radius:50%;display:inline-block;font-size:var(--fontsize-heading-s);height:30px;line-height:30px;margin-left:var(--spacing-m);position:relative;text-align:center;width:30px}.oma-asiointi-block .new-messages-length.has-new-messages{background-color:var(--color-alert)}@media(min-width: 768px){.oma-asiointi-block .content{display:grid;grid-gap:var(--spacing-s);grid-template-columns:1fr 1fr}}.oma-asiointi-block .submission,.oma-asiointi-block .message{background-color:var(--color-white);margin-bottom:var(--spacing-s);margin-top:var(--spacing-s);padding:var(--spacing-m)}.oma-asiointi-block .submission .submission-title,.oma-asiointi-block .submission .message-title,.oma-asiointi-block .message .submission-title,.oma-asiointi-block .message .message-title{font-size:var(--fontsize-heading-s);font-weight:500;margin-bottom:var(--spacing-2-xs);margin-top:0;text-decoration:underline}.oma-asiointi-block .submission .message-title,.oma-asiointi-block .message .message-title{margin-top:var(--spacing-s)}.oma-asiointi-block .submission:hover .submission-title,.oma-asiointi-block .submission:hover .message-title,.oma-asiointi-block .message:hover .submission-title,.oma-asiointi-block .message:hover .message-title{text-decoration:none}.oma-asiointi-block .message{padding-right:var(--spacing-5-xl)}.oma-asiointi{margin-top:var(--spacing-l)}.oma-asiointi ul{padding:0}.oma-asiointi__list{padding-bottom:var(--spacing-l);padding-top:var(--spacing-l)}.oma-asiointi__list h2{margin-bottom:var(--spacing-m);margin-top:0}.oma-asiointi #oma-asiointi__sent{padding-top:var(--spacing-s)}.oma-asiointi .oma-asiointi-infoboxes-container .oma-asiointi-infoboxes{gap:var(--spacing-3-xl);margin:var(--spacing-2-xl) 0}@media(min-width: 768px){.oma-asiointi .oma-asiointi-infoboxes-container .oma-asiointi-infoboxes{display:flex}}.oma-asiointi .oma-asiointi-infoboxes-container .oma-asiointi-infobox{background-color:var(--color-info-light);flex:1;margin-bottom:var(--spacing-layout-2-xs);padding:var(--spacing-l)}@media(min-width: 768px){.oma-asiointi .oma-asiointi-infoboxes-container .oma-asiointi-infobox{margin-bottom:0}}.oma-asiointi .oma-asiointi-infoboxes-container .oma-asiointi-infobox:last-of-type{margin-bottom:0}.oma-asiointi .oma-asiointi-infoboxes-container .oma-asiointi-infobox--link{display:flex;margin-top:var(--spacing-layout-2-xs)}.oma-asiointi .oma-asiointi-infoboxes-container .oma-asiointi-infobox--link a{font-size:1.25rem}.oma-asiointi .oma-asiointi-infoboxes-container .oma-asiointi-infobox h3{margin-top:0}.asiointirooli-block{background-color:var(--color-black);color:var(--color-white);font-weight:500;margin-bottom:16px;padding:var(--spacing-2-xs)}.asiointirooli-block a{color:var(--color-white)}.asiointirooli-block .link--switch-role,.asiointirooli-block .link--stop-mandate{color:var(--color-white);margin-left:var(--spacing-layout-s)}@media(max-width: 768px){.asiointirooli-block .link--switch-role,.asiointirooli-block .link--stop-mandate{display:block;margin-left:0}}.asiointirooli-block .link--stop-mandate::before{--icon-size: 1.5rem;background-color:#000;background-size:contain;content:"";display:inline-block;height:calc(var(--line-height) * 1em);height:var(--icon-size, calc(var(--line-height) * 1em));-webkit-mask-image:var(--hel-icon--cross-circle-fill);mask-image:var(--hel-icon--cross-circle-fill);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);-webkit-mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));vertical-align:bottom;width:calc(var(--line-height) * 1em);width:var(--icon-size, calc(var(--line-height) * 1em));background-color:var(--color-white);content:"";display:inline-block;margin-right:10px;-webkit-mask-image:url('data:image/svg+xml, ');mask-image:url('data:image/svg+xml, ')}.asiointirooli-block .link--switch-role::before{--icon-size: 1.5rem;background-color:#000;background-size:contain;content:"";display:inline-block;height:calc(var(--line-height) * 1em);height:var(--icon-size, calc(var(--line-height) * 1em));-webkit-mask-image:var(--hel-icon--swap-user);mask-image:var(--hel-icon--swap-user);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);-webkit-mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));vertical-align:bottom;width:calc(var(--line-height) * 1em);width:var(--icon-size, calc(var(--line-height) * 1em));background-color:var(--color-white);content:"";display:inline-block;margin-right:10px;-webkit-mask-image:url('data:image/svg+xml, ');mask-image:url('data:image/svg+xml, ')}#grants-mandate-type .form-actions{display:flex;flex-direction:column;flex-wrap:wrap;justify-content:flex-start;width:100%}@media(min-width: 576px){#grants-mandate-type .form-actions{flex-direction:row;margin-left:calc(-1*var(--spacing-m));width:calc(100% + var(--spacing-m))}}#grants-mandate-type .form-actions .hds-card--applicant-role{margin-bottom:var(--spacing-l);position:relative;width:100%}@media(min-width: 576px){#grants-mandate-type .form-actions .hds-card--applicant-role{margin-left:var(--spacing-m);width:calc(50% - var(--spacing-m))}}@media(min-width: 992px){#grants-mandate-type .form-actions .hds-card--applicant-role{width:calc(33.3333333333% - var(--spacing-m))}}#grants-mandate-type .form-actions .hds-card--applicant-role .hds-card__body{align-content:space-between;height:100%}#grants-mandate-type .form-actions .hds-card--applicant-role .hds-card--mandate-card-content{display:grid;gap:var(--spacing-m);grid-gap:var(--spacing-m)} +body{--webform-element-width--input-small: 184px;--webform-element-width--input-medium: 332px;--webform-element-width--input-large: 591px;--webform-element-width--fieldset: 714px}.hel-icon--size-xs,.hds-icon--size-xs{height:16px;width:16px}.hel-icon--size-s,.hds-icon--size-s{height:24px;width:24px}.hel-icon--size-m,.hds-icon--size-m{height:32px;width:32px}.hel-icon--size-l,.hds-icon--size-l{height:48px;width:48px}.hel-icon--size-xl,.hds-icon--size-xl{height:64px;width:64px}.hel-icon.hel-icon--pen-line{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,");mask-image:url("data:image/svg+xml;charset=utf-8,")}.hel-icon.hds-icon--company{background:var(--color-black);-webkit-mask-image:url("data:image/svg+xml;charset=utf-8, ");mask-image:url("data:image/svg+xml;charset=utf-8, ")}.hds-button--secondary:not(.eu-cookie-compliance-default-button):not(.eu-cookie-compliance-save-preferences-button){--background-color: transparent;--background-color-hover: var(--color-black-80);--background-color-focus: transparent;--background-color-hover-focus: var(--color-black-80);--background-color-disabled: transparent;--color: var(--color-black);--color-hover: var(--color-white);--color-focus: var(--color-black);--color-hover-focus: var(--color-black);--color-disabled: var(--color-black-40)}.hds-button--secondary:not(:disabled):not(.eu-cookie-compliance-default-button):not(.eu-cookie-compliance-save-preferences-button),.hds-button--primary:not(:disabled){border-color:transparent;border-color:var(--color-black, transparent)}.hds-button.hds-button--supplementary .hds-button__label{margin:0;padding:0 var(--spacing-2-xs)}.hds-button.hds-button--supplementary::after,.hds-button.hds-button--supplementary::before{display:none !important}.hds-button--supplementary:not(:disabled){--background-color-hover: rgba(0, 0, 0, 0.1);background:rgba(0,0,0,0);border-color:rgba(0,0,0,0)}.hds-button--supplementary:not(:disabled):hover{background-color:var(--background-color-hover)}.hds-button--alert{--background-color: rgb(255, 0, 0)}a.hds-button.webform-button--delete-draft:not(:disabled){text-decoration:none}a.hds-button.webform-button--delete-draft:not(:disabled) .hds-button__label_wrapper{display:inline}a.hds-button.webform-button--delete-draft:not(:disabled) .hds-button__label{text-decoration:underline}a.hds-button.webform-button--delete-draft:not(:disabled):hover .hds-button__label{text-decoration:none}.openid-connect-login-form input[type=submit].hds-button{width:220px}.hds-button__label_wrapper{align-items:center;display:flex}.hds-button__label_wrapper:not(.hds-button)>.hds-button__label{margin:0 var(--spacing-2-xs)}.hds-link{--link-visited-color: var(--color-black);--link-color: var(--color-black)}.hds-card{--background-color: var(--color-white);--border-color: var(--color-black-90);--color: var(--color-black-90);--border-width: 2px;--padding-horizontal: var(--spacing-l);--padding-vertical: var(--spacing-m);background-color:var(--background-color);color:var(--color);padding:var(--padding-vertical) var(--padding-horizontal)}.hds-card--border{border:var(--border-width) solid var(--border-color)}.hds-card__body{display:grid;grid-gap:var(--spacing-m);gap:var(--spacing-m);margin-bottom:var(--spacing-l)}.hds-card__body:last-child{margin-bottom:0}.hds-card__heading{font-size:var(--fontsize-heading-m);font-weight:bold;line-height:var(--lineheight-m)}.hds-card__text{font-size:var(--fontsize-body-m);line-height:var(--lineheight-l)}.hds-card--applicant-role{margin-bottom:var(--spacing-l);margin-right:0;max-width:400px;width:100%}.hds-card__heading-m{font-size:var(--fontsize-heading-m);font-weight:500;letter-spacing:-0.2px;line-height:32px;margin-top:0}.grants-profile--menuitem--login,.grants-profile--menuitem--logout{align-items:center;display:flex;flex-flow:column;font-size:var(--fontsize-body-s);height:var(--spacing-xl);margin-left:var(--spacing-2-xs);margin-right:var(--spacing-2-xs);position:relative;text-align:center;width:var(--spacing-xl)}.grants-profile--menuitem--login .hel-icon,.grants-profile--menuitem--logout .hel-icon{display:block;margin:auto}.grants-profile--menuitem--login-triggertext,.grants-profile--menuitem--logout-triggertext{clip:rect(1px, 1px, 1px, 1px);clip-path:inset(50%);display:block;max-height:1px;max-width:1px;opacity:0;overflow:hidden;position:absolute;white-space:nowrap}.block--grants-profile--menuitem{align-items:center;display:flex;grid-area:brand;z-index:2}.block--branding{flex-grow:10}.grants-frontpage-info-block{margin-bottom:var(--spacing-layout-xl)}.grants-profile--menuitem{height:var(--spacing-m);margin-left:var(--spacing-2-xs);margin-right:var(--spacing-2-xs);position:relative;width:var(--spacing-m)}@media(min-width: 768px){.grants-profile--menuitem{height:var(--spacing-2-xl);width:var(--spacing-2-xl)}}.grants-profile--menuitem a{text-decoration:none}.grants-profile--menuitem--notifications{background-color:var(--color-error);border:2px var(--color-white) solid;border-radius:50%;color:var(--color-white);font-size:var(--fontsize-body-s);font-weight:bold;height:var(--spacing-xs) 1.25;line-height:var(--spacing-layout-2-xs);position:absolute;right:-5px;text-align:center;top:-5px;width:var(--spacing-xs) 1.25;z-index:2}.grants-profile--menuitem--initials{border-radius:50%;font-weight:bold;height:var(--spacing-m);line-height:var(--spacing-m);text-align:center;vertical-align:middle;width:var(--spacing-m)}@media(min-width: 768px){.grants-profile--menuitem--initials{height:var(--spacing-2-xl);line-height:var(--spacing-2-xl);width:var(--spacing-2-xl)}}.grants-profile--menuitem--initials:hover,.grants-profile--menuitem--initials:active,.grants-profile--menuitem--initials:focus{text-decoration:underline}.grants-profile--menuitem--initials-colorscheme-2{background-color:var(--color-bus);color:var(--color-white)}.grants-profile--menuitem--initials-colorscheme-1{background-color:var(--color-engel);color:var(--color-black)}.grants-profile--menuitem--initials-colorscheme-0{background-color:var(--color-tram);color:var(--color-white)}.sidebar-important-links{margin-top:var(--spacing-2-xl)}.sidebar-important-links .sidebar-text .sidebar-text__text-content>p{padding:var(--spacing-s) var(--spacing-m)}.block--service-page-banner{background-color:var(--color-engel);margin-top:var(--spacing-layout-s);padding:var(--spacing-layout-s)}.block--service-page-banner h2{margin-top:0}.block--service-page-banner .hds-icon{margin-bottom:var(--spacing-layout-s)}.hds-button.service-page-sidebar-link{background-color:var(--hdbt-color-palette--secondary);padding:var(--spacing-xs)}.hds-button.service-page-sidebar-link:hover{color:var(--color-black)}.terms_block{padding-bottom:var(--spacing-4-xl)}#block-servicepageauthblock h2,#block-servicepageanonblock h2{--line-height: 1.3;font-size:1.25rem;font-weight:500;line-height:var(--line-height)}@media(min-width: 992px){#block-servicepageauthblock h2,#block-servicepageanonblock h2{--line-height: 1.1666666667;font-size:1.5rem;font-weight:500}}#block-servicepageauthblock .hds-button,#block-servicepageanonblock .hds-button{margin-top:var(--spacing-m)}.grants-service-page-block{background-color:var(--color-alert-light);margin-top:var(--spacing-m);padding:var(--spacing-m)}.grants-service-page-block h3{font-size:var(--fontsize-heading-s);margin-top:0}.grants-service-page-block .hel-icon{vertical-align:text-bottom}.grants-service-page-block--auth{background-color:var(--color-info-light)}.hel-icon.hel-icon--swap-user{-webkit-mask-image:url('data:image/svg+xml, ');mask-image:url('data:image/svg+xml, ')}.nav-toggle-dropdown--profile .profile__information{background-color:var(--color-silver-light)}.nav-toggle-dropdown--profile .profile__full-name{font-weight:bold}.nav-toggle-dropdown--profile .grants-profile--menuitem--mandate,.nav-toggle-dropdown--profile .grants-profile--menuitem--switch-role{--line-height: 1.5555555556;font-size:1.125rem;font-weight:400;line-height:var(--line-height);border-top:1px solid #ccc;border-bottom:1px solid #ccc;display:block;font-weight:normal;padding:16px;text-decoration:none;width:100%}@media(min-width: 992px){.nav-toggle-dropdown--profile .grants-profile--menuitem--mandate,.nav-toggle-dropdown--profile .grants-profile--menuitem--switch-role{border-bottom:none}}.nav-toggle-dropdown--profile .grants-profile--menuitem--mandate:hover,.nav-toggle-dropdown--profile .grants-profile--menuitem--switch-role:hover{text-decoration:underline}.nav-toggle-dropdown--profile .grants-profile--menuitem--mandate:focus,.nav-toggle-dropdown--profile .grants-profile--menuitem--switch-role:focus{outline:3px solid #000;outline-offset:-3px}.application-timeout-message{display:none;padding-left:16px;padding-left:var(--spacing-s, 16px);position:fixed;right:0;top:50%;z-index:100}.application-timeout-message.slide-in{animation:slide-in-right .5s forwards ease;display:block}.application-timeout-message .close-application-timeout-message{cursor:pointer;font-size:1.25rem;position:absolute;right:1.25rem}@keyframes slide-in-right{from{right:-500px}to{right:1.25rem}}.view_application_search_search_api .main-content{margin-top:0}.view_application_search_search_api .search-result-amount--wrapper{align-items:center;display:flex}.view_application_search_search_api .search-result-amount--wrapper p{margin-top:0}.view_application_search_search_api select.search-result-amount{border:1px solid var(--color-black-50);margin-left:var(--spacing-l);margin-right:var(--spacing-2-xs)}.view_application_search_search_api .search-filter-button{background-color:var(--color-black);border-radius:180px;border:0;color:var(--color-white);display:inline-block;margin:0 var(--spacing-2-xs) var(--spacing-2-xs) 0;padding:var(--spacing-2-xs) var(--spacing-xs)}.view_application_search_search_api .search-filter-button:focus{--focus-outline-color: #000000;box-shadow:none;outline:3px solid var(--focus-outline-color);outline:var(--outline-width, 3px) solid var(--focus-outline-color);outline-offset:2px;outline-offset:var(--outline-gutter, 2px)}.view_application_search_search_api .search-filter-button span{vertical-align:middle}.view_application_search_search_api .search-filter-button span.hel-icon:hover{cursor:pointer}.view-application-search-search-api .main-content{margin-top:var(--spacing-layout-s)}.view-application-search-search-api .main-content .view-header{align-items:center;display:flex;margin-bottom:var(--spacing-layout-s)}.application_search--link{display:block;height:100%;padding-bottom:var(--spacing-m);position:relative;text-decoration:none}.application_search--link::after{--icon-size: 1.5rem;background-color:#000;background-size:contain;content:"";display:inline-block;height:calc(var(--line-height) * 1em);height:var(--icon-size, calc(var(--line-height) * 1em));-webkit-mask-image:var(--hel-icon--arrow-right);mask-image:var(--hel-icon--arrow-right);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);-webkit-mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));vertical-align:bottom;width:calc(var(--line-height) * 1em);width:var(--icon-size, calc(var(--line-height) * 1em));transition:transform .2s linear;bottom:var(--spacing-s);content:"";display:block;flex-shrink:0;left:var(--spacing-m);margin-left:-4px;margin-top:8px;position:absolute}@media(prefers-reduced-motion){.application_search--link::after{transition:none}}@media(min-width: 576px){.application_search--link::after{--icon-size: 3rem;margin-left:-8px;margin-top:16px}}.application_search--link:focus h3,.application_search--link:hover h3{text-decoration:none}.application_search--link:focus::after,.application_search--link:hover::after{transform:translateX(8px)}@media(prefers-reduced-motion){.application_search--link:focus::after,.application_search--link:hover::after{transform:none}}.application_search--filter-wrapper{background:var(--color-black-5)}.application_search--filter-wrapper h2{font-size:var(--fontsize-heading-m);margin-bottom:var(--spacing-layout-s);margin-top:var(--spacing-layout-s)}.application_search--filter-wrapper form{align-items:center;border-bottom:2px solid var(--color-black-20);display:flex;flex-flow:row wrap;gap:var(--spacing-s);justify-content:space-between;margin-bottom:var(--spacing-layout-s);padding-bottom:var(--spacing-layout-s)}.application_search--filter-wrapper form .form-item{margin-bottom:0;min-width:-moz-fit-content;min-width:fit-content;width:calc((100% - var(--spacing-s) - var(--spacing-s))/3)}.application_search--filter-wrapper form .form-item label{color:var(--label-color-default);font-size:var(--fontsize-body-m);font-weight:500;margin-bottom:var(--spacing-3-xs)}.application_search--filter-wrapper form .form-item .grant-applications--select-wrapper{min-width:100%;width:100%}.application_search--filter-wrapper form .hds-text-input:first-child{max-width:none;width:100%}.application_search--filter-wrapper form .hds-text-input:first-child input{width:100%}.application_search--filter-wrapper form .form-actions{align-items:center;display:flex;gap:16px;order:6;padding-top:var(--spacing-m);width:100%}@media(min-width: 768px){.application_search--filter-wrapper form .form-actions{width:17%}}.application_search--filter-wrapper form .form-actions input{min-width:250px;width:100%}.application_search--filter-wrapper form .form-item-items-per-page{display:none}.application_search--filter-wrapper form .form-item-kohderyhma{order:1}.application_search--filter-wrapper form .form-item-avustuslaji{order:2}.application_search--filter-wrapper form .form-item-hakija{order:3}.application_search--filter-wrapper form .form-item-search{max-width:100%;order:4;width:50%}.application_search--filter-wrapper form .form-item-application-open{page-break-before:left;-moz-column-break-before:left;break-before:left;display:block;margin-top:var(--spacing-m);order:5;width:30%}.application_search--filter-wrapper form [data-drupal-selector=edit-reset]{background-color:rgba(0,0,0,0);border:0;color:var(--color-black)}.application_search--filter-wrapper .hds-koros svg pattern{color:var(--color-black-5)}.application_search--filter-wrapper .hero .hero__container{padding-bottom:var(--spacing-m)}.application_search--filters{padding-bottom:var(--spacing-layout-m);padding-top:0}.application_search--rows{display:flex;flex-direction:column;flex-wrap:wrap;justify-content:flex-start;width:100%}@media(min-width: 576px){.application_search--rows{flex-direction:row;margin-left:calc(-1*var(--spacing-m));width:calc(100% + var(--spacing-m))}}.application_search--row{box-shadow:1px 2px 4px 0 rgba(0,0,0,.5);margin-bottom:var(--spacing-l);position:relative;width:100%}@media(min-width: 576px){.application_search--row{margin-left:var(--spacing-m);width:calc(50% - var(--spacing-m))}}@media(min-width: 992px){.application_search--row{width:calc(33.3333333333% - var(--spacing-m))}}.application_search--row h3{font-size:var(--fontsize-heading-m);margin-top:var(--spacing-xs)}.application_search--row .views-field-search-api-excerpt{height:auto;overflow:auto;word-break:normal}.application_search--row .views-field{padding:var(--spacing-xs) var(--spacing-m)}.application_search--row .views-field-field-target-group{padding:0}.application_search--row .views-field-field-avustuslaji{padding:var(--spacing-xs) var(--spacing-m) var(--spacing-layout-m) var(--spacing-m)}.application_search--row .views-field-field-avustuslaji .tag_avustuslaji{background:var(--color-black);border-radius:var(--spacing-m);color:var(--color-white);display:inline-block;margin-bottom:var(--spacing-2-xs);padding:var(--spacing-3-xs) var(--spacing-xs)}.application_search--row .views-field-field-application-period .field-content{align-items:center;display:flex;gap:var(--spacing-s);position:relative}.application_search--row .views-field-field-application-period .field-content span{display:block}.application_search--row .tag_target_group{background:var(--color-black-20);color:var(--color-black);font-size:var(--fontsize-body-s);font-weight:bold;padding:var(--spacing-m);text-align:center;text-transform:uppercase;width:100%}.application_search--row .tag_target_group_12{background:var(--color-brick-medium-light)}.application_search--row .tag_target_group_20{background:var(--color-copper)}.application_search--row .tag_target_group_21{background:var(--color-metro-medium-light)}.application_search--row .tag_target_group_22{background:var(--color-suomenlinna-medium-light)}.application_search--row .tag_target_group_23{background:var(--color-engel)}.application_search--row .tag_target_group_24{background:var(--color-bus-medium-light)}.application_search--row .tag_target_group_25{background:var(--color-coat-of-arms-medium-light)}.application_search--row .tag_target_group_26{background:var(--color-gold-medium-light)}.application_search--row .tag_target_group_27{background:var(--color-tram-medium-light)}.application_search--row .tag_target_group_28{background:var(--color-summer-light)}.application_search--row .tag_target_group_29{background:var(--color-fog)}.application_search--row .tag_target_group_30{background:var(--color-copper-light)}.application_search--row .tag_target_group_31{background:var(--color-gold)}.view-ukk .view-filters{display:none}.view-ukk .ukk_categories{display:block;margin:var(--spacing-xl) 0;padding:0}.view-ukk .ukk_categories li{display:inline-block;list-style:none;margin:var(--spacing-m) var(--spacing-s) 0 0;padding:0}.view-ukk .hero .hero__text-content{max-width:100%}.view-ukk #edit-field-category-target-id{display:flex}.view-ukk #edit-field-category-target-id .hds-radio-button:first-of-type{margin-top:var(--spacing-2-xs)}.view-ukk #edit-field-category-target-id .hds-radio-button .hds-radio-button__input:checked+.hds-radio-button__label{background:var(--color-black);border-radius:var(--spacing-m);color:var(--color-white);padding:var(--spacing-2-xs) var(--spacing-s)}.view-ukk #edit-field-category-target-id .hds-radio-button__label{padding:var(--spacing-2-xs) var(--spacing-s)}.view-ukk #edit-field-category-target-id .hds-radio-button__label::before,.view-ukk #edit-field-category-target-id .hds-radio-button__label::after{display:none}.view-ukk .views-exposed-form fieldset{margin-bottom:0}.view-ukk .views-exposed-form .form-submit{margin-bottom:var(--spacing-l)}.view-ukk .category{background:var(--color-black);border-radius:var(--spacing-m);color:var(--color-white);display:inline-block;padding:var(--spacing-2-xs) var(--spacing-s);text-decoration:none}.view-ukk .category-unselected{background:var(--color-black-20);color:var(--color-black)}.page--select-applicant-role{background-color:var(--color-black-5)}.page--select-applicant-role body{background-color:var(--color-black-5)}.page--select-applicant-role .layout-main-wrapper{background-color:var(--color-black-5)}.page--select-applicant-role .main-content{margin-top:var(--spacing-l)}.page--select-applicant-role h1{margin-top:var(--spacing-l)}.page--select-applicant-role p{margin-bottom:var(--spacing-m)}.node--type-service .errand-service__channels .service-channel__links a[href^="https://avustukset.hel.fi"]{display:none}.node--type-service .service-channel__info p:first-of-type{margin-top:0}.node--type-service .service-channel--mail{display:none}#block-servicepageauthblock-2,#block-servicepageanonblock-2,#block-grantspreviewlink-2{display:none}@media(max-width: 767.9px){#block-servicepageauthblock-2,#block-servicepageanonblock-2,#block-grantspreviewlink-2{display:block;margin:var(--spacing-s)}}@media(max-width: 991.9px){#block-servicepageauthblock-2,#block-servicepageanonblock-2,#block-grantspreviewlink-2{display:block;margin:var(--spacing-l)}}#block-servicepageauthblock-2>.grants-service-page-block>*,#block-servicepageanonblock-2>.grants-service-page-block>*,#block-grantspreviewlink-2>.grants-service-page-block>*{margin:var(--spacing-2-xs) 0 var(--spacing-2-xs) var(--spacing-2-xs)}@media(max-width: 991.9px){#block-servicepageauthblock-2 .node--type-service a.hds-button[href*=uusi-hakemus],#block-servicepageanonblock-2 .node--type-service a.hds-button[href*=uusi-hakemus],#block-grantspreviewlink-2 .node--type-service a.hds-button[href*=uusi-hakemus]{display:none}}.user-login__text-container{background:var(--color-white);max-width:500px;padding:var(--spacing-m)}.user-login__text-container p:first-of-type{margin-top:0}.tabs{--tablist-border-color: var(--color-black-20);--tablist-border-size: 1px;--tab-color: var(--color-black);--tab-font-size: var(--fontsize-body-m);--tab-height: 48px;--tab-min-width: 148px;--tab-spacing: var(--spacing-s);--tab-active-border-size: 5px;--tab-active-border-color: var(--color-black);--tab-focus-outline-size: 2px;--tab-focus-outline-color: var(--color-coat-of-arms);display:flex;flex-flow:row wrap}.tabs--tablist{box-sizing:border-box;flex-grow:1;margin-bottom:-1px;overflow-x:hidden;position:relative;width:100%}.tabs--content-wrapper{width:100%}.tabs--content-wrapper .container{padding-top:1px}.tabs [role=tablist]{box-sizing:border-box;list-style:none;margin:0;padding:var(--tab-focus-outline-size) 0;white-space:nowrap}.tabs [role=tab]{background:rgba(0,0,0,0);border:0;cursor:pointer;display:inline-block;margin:0;outline:none;padding:0}.tabs [role=tab] span{align-items:center;box-sizing:border-box;color:var(--tab-color);display:flex;font-size:var(--tab-font-size);height:var(--tab-height);justify-content:center;margin:0;min-width:var(--tab-min-width);padding:0 var(--tab-spacing);pointer-events:none;position:relative}.tabs [role=tab] span::before{background:var(--tablist-border-color);bottom:0;content:"";height:var(--tablist-border-size);position:absolute;width:100%;z-index:100}.tabs [role=tab] span:hover::before,.tabs [role=tab] span:focus::before,.tabs [role=tab][aria-selected=true] span::before{background-color:var(--tab-active-border-color);bottom:0;content:"";height:var(--tab-active-border-size);position:absolute;width:100%;z-index:100}.tabs [role=tabpanel].is-hidden{display:none}.node--form-page .list-of-links{margin-left:0;margin-top:0;width:100%}@media(min-width: 768px){.node--form-page .list-of-links{margin-top:0}}.node--form-page .list-of-links>.container{padding-top:0}.node--form-page .list-of-links .list-of-links__title{border-top:2px solid var(--color-black-20);margin:0 0 var(--spacing-layout-xl)}@media(min-width: 576px){.node--form-page .list-of-links .list-of-links__container{width:calc(100% - var(--spacing-layout-xl))}}@media(min-width: 768px){.node--form-page .list-of-links .list-of-links__container{width:100%}}.node--form-page .list-of-links .list-of-links__content{height:auto;margin-top:0}@media(min-width: 768px){.node--form-page .list-of-links .list-of-links__content{display:grid;grid-template-columns:auto auto auto;margin:0 var(--spacing-m) 0 0}}.node--form-page .list-of-links .list-of-links__item{align-self:stretch;border-left:4px solid var(--color-copper);margin-right:-4px;padding-left:var(--spacing-m);padding-right:var(--spacing-m)}.list-of-links--without-image .list-of-links__item .list-of-links__item__desc{color:var(--color-black-90);font-size:var(--fontsize-body-m)}.list-of-links--without-image .list-of-links__item .list-of-links__item__title{font-size:var(--fontsize-heading-m)}.js-form-type-webform-custom-composite{--border-width: 2px;--outline-width: 3px;--input-height: 56px;--textarea-height: 149px;--icon-size: var(--spacing-m);--helper-color-default: var(--color-black-60);--helper-color-invalid: var(--color-error);--icon-color-invalid: var(--color-error);--input-background-default: var(--color-white);--input-background-disabled: var(--color-black-10);--input-border-color-default: var(--color-black-50);--input-border-color-hover: var(--color-black-90);--input-border-color-focus: var(--color-black-90);--input-border-color-invalid: var(--color-error);--input-border-color-disabled: var(--color-black-10);--input-color-default: var(--color-black-90);--input-color-disabled: var(--color-black-40);--label-color-default: var(--color-black-90);--label-color-invalid: var(--color-black-90);--placeholder-color: var(--color-black-60);--focus-outline-color: var(--color-coat-of-arms)}.js-form-type-webform-custom-composite a.tabledrag-handle .handle{height:24px;width:24px}.js-form-type-webform-custom-composite input.form-number{background-color:var(--input-background-default);border:var(--border-width) solid var(--input-border-color-default);box-sizing:border-box;color:var(--input-color-default);font-size:1.125em;height:var(--input-height);line-height:normal;padding:0 var(--spacing-s);width:100%}.js-form-type-webform-custom-composite table{border-collapse:collapse;border-spacing:0;margin-bottom:var(--spacing-m)}.js-form-type-webform-custom-composite table td{border-bottom:2px var(--color-black-20) solid;border-top:2px var(--color-black-20) solid;padding-left:var(--spacing-m);padding-top:var(--spacing-m)}@media(max-width: 768px){.js-form-type-webform-custom-composite table td{border:2px var(--color-black-20) solid}}.js-form-type-webform-custom-composite table td.webform-multiple-table--operations{border-bottom:2px var(--color-black-20) solid;border-top:2px var(--color-black-20) solid;padding-left:var(--spacing-m);padding-top:var(--spacing-m)}@media(max-width: 768px){.js-form-type-webform-custom-composite table td.webform-multiple-table--operations{background:var(--color-white);border:2px var(--color-black-20) solid;padding:10px 5px 5px}}.js-form-type-webform-custom-composite table td:first-child{border-left:2px var(--color-black-20) solid}.js-form-type-webform-custom-composite table td:last-child{border-right:2px var(--color-black-20) solid;padding:var(--spacing-s)}@media(min-width: 768px){.js-form-type-webform-custom-composite table td:last-child{min-width:400px;padding:var(--spacing-s) var(--spacing-m)}}div.ui-widget.ui-datepicker{padding:var(--spacing-2-xs)}div.ui-widget.ui-datepicker .ui-datepicker-header span.ui-icon{margin-left:-8px;margin-top:-8px;-webkit-mask-image:none;mask-image:none;transform:none}div.ui-widget.ui-datepicker .ui-datepicker-calendar{border:0;display:table;margin:0;max-width:100%}div.ui-widget.ui-datepicker .ui-datepicker-calendar th,div.ui-widget.ui-datepicker .ui-datepicker-calendar td{min-width:auto}details.accordion{--background-color: var(--color-white);--border-color: var(--color-black-60);--padding-horizontal: var(--spacing-m);--padding-vertical: var(--spacing-m);--header-font-color: var(--color-black-90);--header-font-size: var(--fontsize-heading-m);--header-line-height: var(--lineheight-m);--button-size: 28px;--header-focus-outline-color: var(--color-coat-of-arms);--content-font-color: var(--color-black-90);--content-font-size: var(--fontsize-body-m);--content-line-height: var(--lineheight-l);border-bottom:1px solid var(--border-color)}details.accordion .accordion_content{padding-bottom:var(--padding-vertical)}details.accordion[open] .accordion_heading_container span.hel-icon{transform:rotate(180deg)}.accordion_header{align-items:center;color:var(--header-font-color);display:flex;font-size:var(--header-font-size);font-weight:700;justify-content:space-between;line-height:var(--header-line-height);list-style:none;padding-bottom:var(--padding-vertical);padding-top:var(--padding-vertical);position:relative}.accordion_heading_container{align-items:center;box-sizing:border-box;cursor:pointer;display:grid;grid-template-columns:auto calc(var(--button-size));width:100%}.accordion_heading_container span.hel-icon{height:var(--button-size) !important;width:var(--button-size) !important}.accordion_heading_container span.hel-icon{border:2px solid rgba(0,0,0,0);box-sizing:border-box;margin:auto}.webform-element-description{--helper-color-default: var(--color-black-60);color:var(--helper-color-default);display:block;font-size:var(--fontsize-body-m);line-height:var(--lineheight-l);margin-top:var(--spacing-s)}.webform-element-help{background:var(--color-white);border:2px solid rgba(0,0,0,0);color:var(--hdbt-color-black);height:var(--spacing-layout-xs);margin-right:4px;padding:0;position:absolute;right:0;top:-3px;width:var(--spacing-layout-xs);z-index:10}div[data-tippy-root]{width:350px}.tippy-box{background-color:var(--color-black-5);border-left:var(--spacing-xs) var(--color-coat-of-arms) solid;border-radius:0;color:var(--hdbt-color-black);padding:var(--spacing-s)}.tippy-box .webform-element-help--content{white-space:normal}.tippy-box .webform-element-help--content a:link,.tippy-box .webform-element-help--content a:visited,.tippy-box .webform-element-help--content a:active,.tippy-box .webform-element-help--content a:hover{color:var(--hdbt-color-black)}.tippy-arrow{color:var(--color-black-5)}.webform-element-help--wrapper-short{max-width:-moz-fit-content;max-width:fit-content}.webform-element-help-container--title{--border-width: 2px;--outline-width: 3px;--input-height: 56px;--textarea-height: 149px;--icon-size: var(--spacing-m)}fieldset.grants-fieldset{padding:var(--spacing-s)}@media(min-width: 768px){fieldset.grants-fieldset{min-width:400px;padding:var(--spacing-s) var(--spacing-m)}}fieldset.grants-fieldset .fieldset-wrapper{align-items:flex-end;display:flex;flex-wrap:wrap;gap:0 var(--spacing-layout-2-xs)}fieldset.grants-fieldset .fieldset-wrapper .form-item--error-message{grid-column:1}fieldset.grants-fieldset-short{max-width:var(--webform-element-width--input-large)}fieldset.grants-fieldset-medium{max-width:var(--webform-element-width--fieldset)}fieldset.grants-fieldset-medium .fieldset-wrapper{justify-content:center}fieldset.premises-composite--wrapper.fieldgroup,fieldset.rented-premise-composite--wrapper.fieldgroup,.community_officials_wrapper fieldset.fieldgroup,fieldset.grants-budget-other-cost--wrapper.fieldgroup,fieldset.grants-budget-other-income--wrapper.fieldgroup,fieldset.place-of-operation-composite--wrapper.fieldgroup,fieldset.rent-income-composite--wrapper.fieldgroup,fieldset.rent-cost-composite--wrapper.fieldgroup,fieldset.club-section-composite--wrapper.fieldgroup,fieldset.members-composite--wrapper.fieldgroup,fieldset.orienteering-map-composite--wrapper,.form-item-muu-liite fieldset.grants-attachments--wrapper.fieldgroup{border-width:2px;margin-top:var(--spacing-layout-2-xs);max-width:100%;padding:var(--spacing-s);width:100%}@media(min-width: 768px){fieldset.premises-composite--wrapper.fieldgroup,fieldset.rented-premise-composite--wrapper.fieldgroup,.community_officials_wrapper fieldset.fieldgroup,fieldset.grants-budget-other-cost--wrapper.fieldgroup,fieldset.grants-budget-other-income--wrapper.fieldgroup,fieldset.place-of-operation-composite--wrapper.fieldgroup,fieldset.rent-income-composite--wrapper.fieldgroup,fieldset.rent-cost-composite--wrapper.fieldgroup,fieldset.club-section-composite--wrapper.fieldgroup,fieldset.members-composite--wrapper.fieldgroup,fieldset.orienteering-map-composite--wrapper,.form-item-muu-liite fieldset.grants-attachments--wrapper.fieldgroup{min-width:400px;padding:var(--spacing-s) var(--spacing-m)}}fieldset.premises-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.rented-premise-composite--wrapper.fieldgroup legend>span.visually-hidden,.community_officials_wrapper fieldset.fieldgroup legend>span.visually-hidden,fieldset.grants-budget-other-cost--wrapper.fieldgroup legend>span.visually-hidden,fieldset.grants-budget-other-income--wrapper.fieldgroup legend>span.visually-hidden,fieldset.place-of-operation-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.rent-income-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.rent-cost-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.club-section-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.members-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.orienteering-map-composite--wrapper legend>span.visually-hidden,.form-item-muu-liite fieldset.grants-attachments--wrapper.fieldgroup legend>span.visually-hidden{background:#fff;clip-path:initial;clip:auto;clip:initial;height:auto;margin-left:calc(var(--spacing-2-xs)*-1);left:auto;overflow:visible;padding:0 var(--spacing-2-xs);top:-12px;width:-moz-max-content;width:max-content}fieldset.premises-composite--wrapper.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)],fieldset.rented-premise-composite--wrapper.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)],.community_officials_wrapper fieldset.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)],fieldset.grants-budget-other-cost--wrapper.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)],fieldset.grants-budget-other-income--wrapper.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)],fieldset.place-of-operation-composite--wrapper.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)],fieldset.rent-income-composite--wrapper.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)],fieldset.rent-cost-composite--wrapper.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)],fieldset.club-section-composite--wrapper.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)],fieldset.members-composite--wrapper.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)],fieldset.orienteering-map-composite--wrapper legend>span.visually-hidden[\:has\(button.webform-element-help\)],.form-item-muu-liite fieldset.grants-attachments--wrapper.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)]{padding-right:var(--spacing-xl)}fieldset.premises-composite--wrapper.fieldgroup legend>span.visually-hidden:has(button.webform-element-help),fieldset.rented-premise-composite--wrapper.fieldgroup legend>span.visually-hidden:has(button.webform-element-help),.community_officials_wrapper fieldset.fieldgroup legend>span.visually-hidden:has(button.webform-element-help),fieldset.grants-budget-other-cost--wrapper.fieldgroup legend>span.visually-hidden:has(button.webform-element-help),fieldset.grants-budget-other-income--wrapper.fieldgroup legend>span.visually-hidden:has(button.webform-element-help),fieldset.place-of-operation-composite--wrapper.fieldgroup legend>span.visually-hidden:has(button.webform-element-help),fieldset.rent-income-composite--wrapper.fieldgroup legend>span.visually-hidden:has(button.webform-element-help),fieldset.rent-cost-composite--wrapper.fieldgroup legend>span.visually-hidden:has(button.webform-element-help),fieldset.club-section-composite--wrapper.fieldgroup legend>span.visually-hidden:has(button.webform-element-help),fieldset.members-composite--wrapper.fieldgroup legend>span.visually-hidden:has(button.webform-element-help),fieldset.orienteering-map-composite--wrapper legend>span.visually-hidden:has(button.webform-element-help),.form-item-muu-liite fieldset.grants-attachments--wrapper.fieldgroup legend>span.visually-hidden:has(button.webform-element-help){padding-right:var(--spacing-xl)}@media(min-width: 768px){fieldset.premises-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.rented-premise-composite--wrapper.fieldgroup legend>span.visually-hidden,.community_officials_wrapper fieldset.fieldgroup legend>span.visually-hidden,fieldset.grants-budget-other-cost--wrapper.fieldgroup legend>span.visually-hidden,fieldset.grants-budget-other-income--wrapper.fieldgroup legend>span.visually-hidden,fieldset.place-of-operation-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.rent-income-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.rent-cost-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.club-section-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.members-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.orienteering-map-composite--wrapper legend>span.visually-hidden,.form-item-muu-liite fieldset.grants-attachments--wrapper.fieldgroup legend>span.visually-hidden{left:auto}}.form-item-muu-liite fieldset.grants-attachments--wrapper{margin-bottom:0}fieldset.webform-composite-hidden-title .fieldset-wrapper>.form-item:last-child{margin-bottom:var(--spacing-layout-xs)}.js-form-type-webform-table table{width:100%}.js-form-type-webform-table th{text-align:left}.js-form-type-webform-table td{vertical-align:middle}.js-form-type-webform-table td>div{height:auto;margin-bottom:0}.js-form-type-webform-table td>div label{margin:-1px}.js-form-type-webform-table .hds-text-input label{border:0;clip:rect(0, 0, 0, 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.form-item{margin-bottom:var(--spacing-layout-xs);position:relative}.form-item input[type=date],.form-item input[type=time]{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--input-background-default);border:var(--border-width) solid var(--input-border-color-default);box-sizing:border-box;color:var(--input-color-default);font-size:1.125em;height:var(--input-height);line-height:normal;padding:0 var(--spacing-s);width:100%;will-change:transform,box-shadow}.webform-section{padding-bottom:var(--spacing-layout-2-xs)}.webform-section table:first-of-type{margin-top:0}.form-type-webform-multiple .webform-multiple-table table{max-width:100%;width:100%}@media(min-width: 768px){.form-type-webform-multiple .webform-multiple-table table{width:auto}}.hds-text-input{max-width:-moz-fit-content;max-width:fit-content;width:100%}.webform-section-grid-wrapper{display:grid;grid-template-columns:1fr}@media(min-width: 768px){.webform-section-grid-wrapper{grid-row-gap:var(--spacing-xl);grid-template-columns:1fr 2fr}}.webform-section-grid-wrapper>dt.webform-section-title{color:var(--hdbt-color-black);display:block;flex-shrink:0;font-size:var(--fontsize-heading-s);font-weight:500;-webkit-hyphens:none;hyphens:none;line-height:1;margin-bottom:var(--spacing-3-xs);margin-top:0;padding-right:var(--spacing-2-xl);width:100%}.webform-section-grid-wrapper .webform-section-wrapper{margin-bottom:var(--spacing-layout-xs);padding-left:var(--spacing-2-xl)}@media(min-width: 768px){.webform-section-grid-wrapper .webform-section-wrapper{margin-bottom:0;padding-left:0}}fieldset input[type=button]{margin-top:var(--spacing-m)}.webform-section-wrapper>.description{margin-bottom:var(--spacing-layout-xs)}.grants__page-header{margin-bottom:var(--spacing-layout-l);font-size:2rem}@media(min-width: 768px){.grants__page-header{font-size:3rem}}.webform-section-flex-wrapper{display:flex;flex-flow:row wrap;width:100%;justify-content:left}@media(min-width: 768px){.webform-section-flex-wrapper{flex-flow:row nowrap}.webform-section-flex-wrapper h3+*>*:first-child>label:first-of-type,.webform-section-flex-wrapper h3+*>*:first-child>*:first-child>label:first-of-type{margin-top:var(--spacing-2-xs);padding-top:0}.webform-section-flex-wrapper h3+*>*:first-child>p{line-height:normal;line-height:initial;margin-top:var(--spacing-2-xs)}.webform-section-flex-wrapper h3+*>*:first-child>h4{line-height:normal;line-height:initial;margin-top:var(--spacing-m)}}.webform-section-flex-wrapper .webform-element-help-container--title{position:relative}.webform-section-flex-wrapper>h2.webform-section-title,.webform-section-flex-wrapper>h3.webform-section-title,.webform-section-flex-wrapper>h4.webform-section-title,.webform-section-flex-wrapper>dt.webform-section-title{color:var(--hdbt-color-black);display:block;flex-shrink:0;font-size:24px;font-weight:500;-webkit-hyphens:manual;hyphens:manual;margin-bottom:var(--spacing-3-xs);margin-top:0;padding-right:var(--spacing-2-xl);width:100%}@media(min-width: 768px){.webform-section-flex-wrapper>h2.webform-section-title,.webform-section-flex-wrapper>h3.webform-section-title,.webform-section-flex-wrapper>h4.webform-section-title,.webform-section-flex-wrapper>dt.webform-section-title{font-size:32px;max-width:350px;width:30%}}.webform-section-flex-wrapper h4{font-size:var(--fontsize-heading-m);line-height:38px}.webform-section-flex-wrapper>.webform-section-wrapper{--line-height: 1.5;font-size:var(--fontsize-body-m);width:100%}@media(min-width: 768px){.webform-section-flex-wrapper>.webform-section-wrapper{padding-left:var(--spacing-2-xl)}}.webform-section-flex-wrapper .form-required::after{content:"*";display:inline}.webform-section-flex-wrapper legend,.webform-section-flex-wrapper label{display:block;font-size:var(--fontsize-body-m);font-weight:500;margin-bottom:var(--spacing-2-xs);max-width:-moz-fit-content;max-width:fit-content;position:relative}.webform-section-flex-wrapper legend{padding:0 var(--spacing-2-xs);margin-left:calc(var(--spacing-2-xs)*-1);left:auto}.webform-section-flex-wrapper legend[\:has\(button.webform-element-help\)],.webform-section-flex-wrapper label[\:has\(button.webform-element-help\)]{padding-right:var(--spacing-xl)}.webform-section-flex-wrapper legend:has(button.webform-element-help),.webform-section-flex-wrapper label:has(button.webform-element-help){padding-right:var(--spacing-xl)}.webform-section-flex-wrapper fieldset legend>span[\:has\(button.webform-element-help\)]{padding-right:var(--spacing-xl)}.webform-section-flex-wrapper fieldset legend>span:has(button.webform-element-help){padding-right:var(--spacing-xl)}.webform-section-flex-wrapper fieldset legend>span.fieldset-legend[\:has\(button.webform-element-help\)],.webform-section-flex-wrapper fieldset.fieldgroup legend>span[\:has\(button.webform-element-help\)]:not(.visually-hidden.fieldset-legend){padding-right:var(--spacing-l)}.webform-section-flex-wrapper fieldset legend>span.fieldset-legend:has(button.webform-element-help),.webform-section-flex-wrapper fieldset.fieldgroup legend>span:has(button.webform-element-help):not(.visually-hidden.fieldset-legend){padding-right:var(--spacing-l)}.webform-section-flex-wrapper fieldset legend>span.fieldset-legend[\:has\(button.webform-element-help\)],.webform-section-flex-wrapper fieldset.fieldgroup legend span.fieldset-legend:not(.visually-hidden)[\:has\(button.webform-element-help\)]{padding-right:0}.webform-section-flex-wrapper fieldset legend>span.fieldset-legend:has(button.webform-element-help),.webform-section-flex-wrapper fieldset.fieldgroup legend span.fieldset-legend:not(.visually-hidden):has(button.webform-element-help){padding-right:0}.webform-section-flex-wrapper label.hds-radio-button__label{font-weight:normal}.webform-section-flex-wrapper .checkboxes--wrapper label{font-weight:normal}.webform-section-flex-wrapper .js-form-type-textarea .hds-text-input__input-wrapper{display:block}.webform-section-flex-wrapper .has-error,.webform-section-flex-wrapper .grant-applications--select-wrapper[\:has\(.has-error\)]{border-color:var(--color-error)}.webform-section-flex-wrapper .has-error,.webform-section-flex-wrapper .grant-applications--select-wrapper:has(.has-error){border-color:var(--color-error)}form .hds-text-input__input-wrapper,.hds-text-input__input-wrapper{flex-flow:row wrap}form .hds-text-input__input-wrapper .text-count-wrapper,.hds-text-input__input-wrapper .text-count-wrapper{flex-basis:100%}form .hds-text-input__input-wrapper input.webform--small,form .hds-text-input__input-wrapper textarea.webform--small,.hds-text-input__input-wrapper input.webform--small,.hds-text-input__input-wrapper textarea.webform--small{max-width:var(--webform-element-width--input-small);min-width:var(--webform-element-width--input-small);width:100%}form .hds-text-input__input-wrapper input.webform--medium,form .hds-text-input__input-wrapper textarea.webform--medium,.hds-text-input__input-wrapper input.webform--medium,.hds-text-input__input-wrapper textarea.webform--medium{max-width:var(--webform-element-width--input-medium);min-width:var(--webform-element-width--input-small);width:100%}form .hds-text-input__input-wrapper input.webform--large,form .hds-text-input__input-wrapper textarea.webform--large,.hds-text-input__input-wrapper input.webform--large,.hds-text-input__input-wrapper textarea.webform--large{max-width:var(--webform-element-width--input-large);min-width:var(--webform-element-width--input-small);width:100%}.webform--small div.grant-applications--select-wrapper{max-width:var(--webform-element-width--input-small);min-width:var(--webform-element-width--input-small);width:100%}.webform--medium div.grant-applications--select-wrapper{max-width:var(--webform-element-width--input-medium);min-width:var(--webform-element-width--input-small);width:100%}.webform--large div.grant-applications--select-wrapper{max-width:var(--webform-element-width--input-medium);min-width:var(--webform-element-width--input-small);width:100%}form .hds-checkbox{display:block}form .hds-checkbox label.hds-checkbox__label::after{content:""}fieldset.webform-composite-hidden-title{margin-bottom:var(--spacing-layout-2-xs);margin-top:0}.form-item-bank-account-account-number-select,.form-item-community-address-community-address-select{margin-bottom:0}.grants-profile-grants-profile table thead th h4{margin:0}.hakemus-form-page .main-content{margin-top:0}.hakemus-form-page h1{-webkit-hyphens:auto;hyphens:auto;word-break:break-word}.hakemus-form-errors ul li{list-style-type:none}.community_officials_wrapper .webform-readonly{margin:0}.community_officials_wrapper .hds-text-input__input-wrapper{margin:0}.community_officials_wrapper input[readonly=readonly]{height:1.25rem;margin:0;max-width:330px}.form-item--error-message{color:var(--color-error);margin-bottom:var(--spacing-layout-s);margin-top:var(--spacing-layout-2-xs)}fieldset .form-item--error-message,.community_officials_wrapper .form-item--error-message{margin-bottom:0}.form-item--error-message::before{--icon-size: 1.6rem;background-color:#000;background-size:contain;content:"";display:inline-block;height:calc(var(--line-height) * 1em);height:var(--icon-size, calc(var(--line-height) * 1em));-webkit-mask-image:var(--hel-icon--alert-circle-fill);mask-image:var(--hel-icon--alert-circle-fill);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);-webkit-mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));vertical-align:bottom;width:calc(var(--line-height) * 1em);width:var(--icon-size, calc(var(--line-height) * 1em));background-color:var(--color-error);content:" ";display:inline-block}input[type=radio]+label.form-required::after{content:""}.hds-radio-button:last-of-type,.hds-checkbox:last-of-type{margin-bottom:0}.hds-radio-button:last-of-type>label,.hds-checkbox:last-of-type>label{margin-bottom:0}@media(min-width: 992px){.place-of-operation-composite--wrapper.fieldgroup .hds-text-input,.club-section-composite--wrapper.fieldgroup .hds-text-input{max-width:100%}}.place-of-operation-composite--wrapper.fieldgroup .hds-radio-button .hds-radio-button__label,.club-section-composite--wrapper.fieldgroup .hds-radio-button .hds-radio-button__label{line-height:var(--lineheight-m) !important}@media(min-width: 992px){.place-of-operation-group__location,.place-of-operation-group__students,.place-of-operation-group__groups,.place-of-operation-group__personnel,.place-of-operation-group__rent,.place-of-operation-group__time{display:flex;justify-content:space-between}}@media(min-width: 992px){.place-of-operation-group__location--address,.place-of-operation-group__students--address,.place-of-operation-group__groups--address,.place-of-operation-group__personnel--address,.place-of-operation-group__rent--address,.place-of-operation-group__time--address{margin-top:0 !important}.place-of-operation-group__location--address,.place-of-operation-group__students--address,.place-of-operation-group__groups--address,.place-of-operation-group__personnel--address,.place-of-operation-group__rent--address,.place-of-operation-group__time--address{width:65%}}@media(min-width: 992px){.place-of-operation-group__location--post-code,.place-of-operation-group__students--post-code,.place-of-operation-group__groups--post-code,.place-of-operation-group__personnel--post-code,.place-of-operation-group__rent--post-code,.place-of-operation-group__time--post-code{margin-top:0 !important}.place-of-operation-group__location--post-code,.place-of-operation-group__students--post-code,.place-of-operation-group__groups--post-code,.place-of-operation-group__personnel--post-code,.place-of-operation-group__rent--post-code,.place-of-operation-group__time--post-code{width:30%}}@media(min-width: 992px){.place-of-operation-group__location--student-count,.place-of-operation-group__location--special-student-count,.place-of-operation-group__location--group-count,.place-of-operation-group__location--special-group-count,.place-of-operation-group__location--personnel-count,.place-of-operation-group__location--rent-amount,.place-of-operation-group__location--time-start,.place-of-operation-group__location--time-end,.place-of-operation-group__students--student-count,.place-of-operation-group__students--special-student-count,.place-of-operation-group__students--group-count,.place-of-operation-group__students--special-group-count,.place-of-operation-group__students--personnel-count,.place-of-operation-group__students--rent-amount,.place-of-operation-group__students--time-start,.place-of-operation-group__students--time-end,.place-of-operation-group__groups--student-count,.place-of-operation-group__groups--special-student-count,.place-of-operation-group__groups--group-count,.place-of-operation-group__groups--special-group-count,.place-of-operation-group__groups--personnel-count,.place-of-operation-group__groups--rent-amount,.place-of-operation-group__groups--time-start,.place-of-operation-group__groups--time-end,.place-of-operation-group__personnel--student-count,.place-of-operation-group__personnel--special-student-count,.place-of-operation-group__personnel--group-count,.place-of-operation-group__personnel--special-group-count,.place-of-operation-group__personnel--personnel-count,.place-of-operation-group__personnel--rent-amount,.place-of-operation-group__personnel--time-start,.place-of-operation-group__personnel--time-end,.place-of-operation-group__rent--student-count,.place-of-operation-group__rent--special-student-count,.place-of-operation-group__rent--group-count,.place-of-operation-group__rent--special-group-count,.place-of-operation-group__rent--personnel-count,.place-of-operation-group__rent--rent-amount,.place-of-operation-group__rent--time-start,.place-of-operation-group__rent--time-end,.place-of-operation-group__time--student-count,.place-of-operation-group__time--special-student-count,.place-of-operation-group__time--group-count,.place-of-operation-group__time--special-group-count,.place-of-operation-group__time--personnel-count,.place-of-operation-group__time--rent-amount,.place-of-operation-group__time--time-start,.place-of-operation-group__time--time-end{margin-top:0 !important}.place-of-operation-group__location--student-count,.place-of-operation-group__location--special-student-count,.place-of-operation-group__location--group-count,.place-of-operation-group__location--special-group-count,.place-of-operation-group__location--personnel-count,.place-of-operation-group__location--rent-amount,.place-of-operation-group__location--time-start,.place-of-operation-group__location--time-end,.place-of-operation-group__students--student-count,.place-of-operation-group__students--special-student-count,.place-of-operation-group__students--group-count,.place-of-operation-group__students--special-group-count,.place-of-operation-group__students--personnel-count,.place-of-operation-group__students--rent-amount,.place-of-operation-group__students--time-start,.place-of-operation-group__students--time-end,.place-of-operation-group__groups--student-count,.place-of-operation-group__groups--special-student-count,.place-of-operation-group__groups--group-count,.place-of-operation-group__groups--special-group-count,.place-of-operation-group__groups--personnel-count,.place-of-operation-group__groups--rent-amount,.place-of-operation-group__groups--time-start,.place-of-operation-group__groups--time-end,.place-of-operation-group__personnel--student-count,.place-of-operation-group__personnel--special-student-count,.place-of-operation-group__personnel--group-count,.place-of-operation-group__personnel--special-group-count,.place-of-operation-group__personnel--personnel-count,.place-of-operation-group__personnel--rent-amount,.place-of-operation-group__personnel--time-start,.place-of-operation-group__personnel--time-end,.place-of-operation-group__rent--student-count,.place-of-operation-group__rent--special-student-count,.place-of-operation-group__rent--group-count,.place-of-operation-group__rent--special-group-count,.place-of-operation-group__rent--personnel-count,.place-of-operation-group__rent--rent-amount,.place-of-operation-group__rent--time-start,.place-of-operation-group__rent--time-end,.place-of-operation-group__time--student-count,.place-of-operation-group__time--special-student-count,.place-of-operation-group__time--group-count,.place-of-operation-group__time--special-group-count,.place-of-operation-group__time--personnel-count,.place-of-operation-group__time--rent-amount,.place-of-operation-group__time--time-start,.place-of-operation-group__time--time-end{width:47.5%}}@media(min-width: 768px){.club-section__participants{display:flex;gap:var(--spacing-l);justify-content:space-between}}.club-section__participants input.form-text.hds-text-input__input{max-width:100%;width:100%}.club-section__totalhours input.form-text.hds-text-input__input{max-width:100%;width:100%}.hel-icon--size-xs{--icon-size: var(--spacing-layout-2-xs)}.hel-icon--size-s{--icon-size: var(--spacing-layout-xs)}.hel-icon--size-m{--icon-size: var(--spacing-layout-s)}.hel-icon--size-l{--icon-size: var(--spacing-layout-m)}.hel-icon--size-xl{--icon-size: var(--spacing-layout-l)}.hds-text-input__input-wrapper[focus-within][\:has\(input\[readonly\]\)]{margin-right:var(--spacing-2-xs);outline:2px var(--color-black) solid;outline-offset:2px}.hds-text-input__input-wrapper[focus-within]:has(input[readonly]){margin-right:var(--spacing-2-xs);outline:2px var(--color-black) solid;outline-offset:2px}.hds-text-input__input-wrapper[focus-within][\:has\(input\[readonly\]\)]{margin-right:var(--spacing-2-xs);outline:2px var(--color-black) solid;outline-offset:2px}.hds-text-input__input-wrapper:focus-within[\:has\(input\[readonly\]\)]{margin-right:var(--spacing-2-xs);outline:2px var(--color-black) solid;outline-offset:2px}.hds-text-input__input-wrapper:focus-within:has(input[readonly]){margin-right:var(--spacing-2-xs);outline:2px var(--color-black) solid;outline-offset:2px}.hds-text-input__input-wrapper[focus-within][\:has\(input\[readonly\]\)] input[readonly]{width:calc(100% - var(--spacing-2-xs))}.hds-text-input__input-wrapper[focus-within]:has(input[readonly]) input[readonly]{width:calc(100% - var(--spacing-2-xs))}.hds-text-input__input-wrapper[focus-within][\:has\(input\[readonly\]\)] input[readonly]{width:calc(100% - var(--spacing-2-xs))}.hds-text-input__input-wrapper:focus-within[\:has\(input\[readonly\]\)] input[readonly]{width:calc(100% - var(--spacing-2-xs))}.hds-text-input__input-wrapper:focus-within:has(input[readonly]) input[readonly]{width:calc(100% - var(--spacing-2-xs))}.form-item-application-number,.form-item-status,.form-item-applicant-type{display:none}.grants-handler__completion{background:var(--color-bus-light);padding:var(--spacing-layout-l) var(--spacing-layout-2-xl)}.grants-handler__completion h2{margin-top:var(--spacing-l)}.grants-handler__completion h3{font-size:1rem;font-weight:bold;margin-top:var(--spacing-m)}.grants-handler__completion__info-row{display:flex;flex-flow:row wrap;gap:var(--spacing-m);justify-content:flex-start;margin-bottom:var(--spacing-m)}.grants-handler__completion__button-row{display:flex;flex-flow:row wrap;gap:var(--spacing-m);justify-content:flex-start}.grants-handler__completion__longtext{margin:var(--spacing-l) 0}.hds-notification.notification-margin-bottom{margin-bottom:var(--spacing-layout-m)}.hds-notification__label{align-items:center}.hds-checkbox__input label{font-weight:normal}fieldset.grants-attachments--wrapper{margin-bottom:var(--spacing-layout-m)}fieldset.grants-attachments--wrapper legend{margin-bottom:var(--spacing-2-xs)}fieldset.grants-attachments--wrapper .form-item--error-message{width:100%}fieldset.grants-attachments--wrapper .js-form-type-managed-file{margin-bottom:0}.grants-applications-managed_file{position:relative}.grants-applications-managed_file label.hds-button--secondary:not(:disabled):not(.eu-cookie-compliance-default-button):not(.eu-cookie-compliance-save-preferences-button){left:0;position:relative}.grants-applications-managed_file label.hds-button--secondary:not(:disabled):not(.eu-cookie-compliance-default-button):not(.eu-cookie-compliance-save-preferences-button)[\:has\(input\:disabled\)]{background-color:transparent;background-color:var(--background-color-disabled, transparent);border-color:transparent;border-color:var(--border-color-disabled, transparent);color:var(--color-disabled);cursor:not-allowed}.grants-applications-managed_file label.hds-button--secondary:not(:disabled):not(.eu-cookie-compliance-default-button):not(.eu-cookie-compliance-save-preferences-button)[\:has\(input\:disabled\)]{background-color:transparent;background-color:var(--background-color-disabled, transparent);border-color:transparent;border-color:var(--border-color-disabled, transparent);color:var(--color-disabled);cursor:not-allowed}.grants-applications-managed_file label.hds-button--secondary:not(:disabled):not(.eu-cookie-compliance-default-button):not(.eu-cookie-compliance-save-preferences-button):has(input:disabled){background-color:transparent;background-color:var(--background-color-disabled, transparent);border-color:transparent;border-color:var(--border-color-disabled, transparent);color:var(--color-disabled);cursor:not-allowed}.grants-applications-managed_file label.hds-button--secondary:not(:disabled):not(.eu-cookie-compliance-default-button):not(.eu-cookie-compliance-save-preferences-button)[focus-within]{background:var(--color-black);border-color:var(--color-white);color:var(--color-white);outline:2px var(--color-black) solid}.grants-applications-managed_file label.hds-button--secondary:not(:disabled):not(.eu-cookie-compliance-default-button):not(.eu-cookie-compliance-save-preferences-button):focus-within{background:var(--color-black);border-color:var(--color-white);color:var(--color-white);outline:2px var(--color-black) solid}.grants-applications-managed_file input[type=file]{opacity:0;position:absolute}.form-managed-file{display:flex;flex-wrap:wrap;white-space:inherit}.form-managed-file>span{background-color:var(--color-info-light);border-bottom:2px dotted var(--color-coat-of-arms);display:inline-block;padding:var(--spacing-s) var(--spacing-2-xs)}.form-managed-file>.file-upload-js-error{flex-basis:100%}.grants-applications-managed_file label.hds-button{display:flex}.grants-attachments--wrapper .webform-readonly{display:none}.webform-multiple-table table{border-collapse:collapse;border:0px var(--color-white) solid;margin-bottom:var(--spacing-2-xs);max-width:-moz-fit-content;max-width:fit-content}.webform-multiple-table .webform-multiple-table--operations-two{min-width:60px}.webform-multiple-table tbody tr,.webform-multiple-table thead tr{align-items:center;justify-content:space-between;width:100%}.webform-multiple-table td,.webform-multiple-table th{max-width:100%;min-width:0;padding:0;width:100%}.webform-multiple-table table thead th{padding:var(--spacing-layout-2-xs)}div.hidden-head table{display:table}div.hidden-head table thead th{padding:0}div.hidden-head table tbody tr{border-bottom:var(--spacing-s) var(--color-white) solid}div.hidden-head table tbody tr:hover{background:rgba(0,0,0,0)}div.table-layout-form input.hds-text-input__input{width:100%}div.table-layout-form table{border:1px var(--color-black) solid;max-width:var(--webform-element-width--input-large)}div.table-layout-form table tbody tr{border:§0px var(--color-black-30) solid}div.table-layout-form table tbody tr td{border:1px var(--color-black-30) solid;padding:0}div.table-layout-form table tbody tr td input.hds-text-input__input[readonly]{padding:var(--spacing-layout-2-xs)}div.table-layout-form table .form-item{margin-bottom:0}.hds-text-input .hds-text-input__input.input--borderless{border:0 rgba(0,0,0,0) solid}#edit-subventions-items thead{background:var(--color-black-90);color:var(--color-white);text-align:left}#edit-subventions-items input.hds-text-input,#edit-subventions-items input.hds-text-input__input{background:rgba(0,0,0,0)}#subventions_table td.webform-multiple-table--operations,#subventions_table th.webform-multiple-table--operations{display:none}#subventions_table input.hds-text-input__input[readonly][name$="[amount]"]{background-color:var(--input-background-disabled);border-color:var(--input-border-color-disabled);color:var(--input-color-disabled);cursor:not-allowed}.form-item-muu-liite .webform-multiple-table--operations{display:none}.hidden-head>label{display:none}.webform-preview .accordion_header{font-size:28px;font-weight:300}@media(min-width: 768px){.webform-preview .accordion_header{font-size:36px;font-weight:500}}.webform-preview label{display:block;font-weight:bold}.grants-profile-grants-profile fieldset{background:var(--color-black-5);border:0 rgba(0,0,0,0) solid;margin:0;max-width:var(--webform-element-width--fieldset);padding:0 var(--spacing-layout-s) var(--spacing-layout-s);top:calc(-1*var(--spacing-m))}.grants-profile-grants-profile fieldset label{margin-bottom:var(--spacing-3-xs)}.grants-profile-grants-profile fieldset legend{font-size:var(--fontsize-body-l);margin-bottom:var(--spacing-m);padding-bottom:var(--spacing-s);position:relative;top:var(--spacing-l)}.grants-profile-grants-profile fieldset .fieldset-wrapper{display:flex;flex-flow:row wrap;justify-content:space-between}.grants-profile-grants-profile fieldset .hds-text-input{max-width:100%}.grants-profile-grants-profile fieldset div[class*=-address-postcode]{width:32%}.grants-profile-grants-profile fieldset div[class*=-address-city]{width:65%}.grants-profile--extrainfo .form-actions .button{margin-right:var(--spacing-2-xs)}.grants-stepper{--grants-stepper-color: var(--color-black);--grants-stepper-background-color: var(--color-white);--grants-stepper-disabled-color: var(--color-black-20);--grants-stepper-selected-step-label-color: var(--color-black-90);--grants-stepper-not-selected-step-label-color: var(--color-black);--grants-step-background-color: var(--color-white);--grants-step-content-color: var(--color-black);--grants-stepper-focus-border-color: var(--color-coat-of-arms);--grants-step-width: 120px;--circle-container-size: 36px;--progress-line-height: 2px;background-color:var(--grants-stepper-background-color);margin-bottom:var(--spacing-layout-m);position:relative}@media(max-width: 725px){.grants-stepper{--grants-step-width: 40px}}@media(max-width: 725px){.grants-stepper .grants-stepper__text{display:none}}.grants-stepper__inner{align-items:flex-start;display:flex;justify-content:space-between;margin:0;-ms-overflow-style:none;padding:0;position:relative;scroll-behavior:smooth;scrollbar-width:none;width:100%}.grants-stepper__lines{display:flex;height:var(--progress-line-height);left:calc(var(--grants-step-width)/2);line-height:var(--lineheight-l);position:absolute;transform:translateY(calc(var(--circle-container-size) / 2 + var(--progress-line-height) / 2));z-index:1}.grants-stepper__line{background-color:var(--grants-stepper-color);display:inline-block;height:100%;position:relative}.grants-stepper__line__disabled{background-color:var(--grants-stepper-disabled-color)}.grants-stepper__steps{background-color:var(--grants-stepper-background-color);box-sizing:border-box;display:flex;flex-shrink:0;justify-content:center;max-width:var(--grants-step-width);min-width:var(--grants-step-width);padding:3px}.grants-stepper__step{align-items:center;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:rgba(0,0,0,0);border:0;box-sizing:content-box;color:var(--grants-stepper-color);cursor:pointer;display:flex;flex-direction:column;height:100%;justify-content:center;outline:none;overflow:visible;padding:0;position:relative}.grants-stepper__step[disabled],.grants-stepper__step__disabled{color:var(--grants-stepper-disabled-color);cursor:not-allowed}.grants-stepper__step[disabled] .grants-stepper__circle,.grants-stepper__step__disabled .grants-stepper__circle{background-color:var(--grants-stepper-background-color);border:2px solid var(--grants-stepper-disabled-color);color:var(--grants-stepper-disabled-color)}.grants-stepper__step[disabled] .grants-stepper__text,.grants-stepper__step__disabled .grants-stepper__text{color:var(--grants-stepper-disabled-color)}.grants-stepper__step__circle_container{align-items:center;display:flex;height:var(--circle-container-size);justify-content:center;width:var(--circle-container-size);z-index:2}.grants-stepper__step__completed_container{align-items:center;background-color:var(--grants-stepper-color);border-radius:16px;color:var(--color-white);display:none;justify-content:center;outline:2px solid var(--grants-stepper-background-color);padding:4px;vertical-align:middle}.grants-stepper .grants-stepper__error,.grants-stepper .grants-stepper__completed{display:none}.grants-stepper__text{color:var(--grants-stepper-not-selected-step-label-color);font-size:var(--fontsize-body-m);font-weight:500;line-height:var(--lineheight-l);margin-bottom:0;margin-top:6px;padding-left:var(--spacing-4-xs);padding-right:var(--spacing-4-xs);text-align:center;text-decoration:underline}.grants-stepper__circle{align-items:center;background-color:var(--grants-step-background-color);border:2px solid var(--grants-stepper-color);border-radius:16px;color:var(--grants-step-content-color);display:flex;height:28px;justify-content:center;outline:2px solid var(--grants-stepper-background-color);text-align:center;width:28px}.grants-stepper__number{font-size:var(--fontsize-body-m);font-weight:500;line-height:1.15}.grants-stepper .is-active .grants-stepper__circle{border:4px solid var(--grants-stepper-color);border-radius:18px;outline:none}.grants-stepper .is-active .grants-stepper__text{color:var(--grants-stepper-selected-step-label-color);font-weight:700;text-decoration:none}.grants-stepper .is-active .grants-stepper__number{color:var(--grants-stepper-selected-step-label-color);font-weight:700;text-decoration:none}.grants-stepper .is-complete .grants-stepper__container{align-items:center;background-color:var(--grants-stepper-color);border-radius:16px;color:var(--color-white);display:flex;justify-content:center;outline:2px solid var(--grants-stepper-background-color);padding:4px}.grants-stepper .is-complete .grants-stepper__number{display:none}.grants-stepper .is-complete .grants-stepper__completed{display:inline-block}.grants-stepper .is-complete .grants-stepper__circle{opacity:0}.grants-stepper .is-complete .grants-stepper__step__completed_container{display:flex}.grants-stepper .has-errors .grants-stepper__container{align-items:center;background-color:var(--grants-stepper-color);border-radius:16px;color:var(--color-white);display:flex;justify-content:center;outline:2px solid var(--grants-stepper-background-color);padding:4px}.grants-stepper .has-errors .grants-stepper__circle{border-color:var(--color-error);color:var(--color-error)}.grants-stepper .has-errors .grants-stepper__number{display:none}.grants-stepper .has-errors .grants-stepper__error{display:inline-block}.grants-stepper .progress-marker::before{display:none}.grants-stepper .progress-step .progress-marker{color:var(--color-black)}.grants-stepper .progress-step .progress-marker.focus-visible .grants-stepper__circle{outline:2px solid var(--color-black);outline:var(--outline-width, 2px) solid var(--color-black);outline-offset:2px}.grants-stepper .progress-step .progress-marker.focus-visible .grants-stepper__circle{outline:2px solid var(--color-black);outline:var(--outline-width, 2px) solid var(--color-black);outline-offset:2px}.grants-stepper .progress-step .progress-marker:focus-visible .grants-stepper__circle{outline:2px solid var(--color-black);outline:var(--outline-width, 2px) solid var(--color-black);outline-offset:2px}.grants-stepper .progress-step .progress-marker.focus-visible .grants-stepper__text{outline:2px solid var(--color-black);outline:var(--outline-width, 2px) solid var(--color-black)}.grants-stepper .progress-step .progress-marker.focus-visible .grants-stepper__text{outline:2px solid var(--color-black);outline:var(--outline-width, 2px) solid var(--color-black)}.grants-stepper .progress-step .progress-marker:focus-visible .grants-stepper__text{outline:2px solid var(--color-black);outline:var(--outline-width, 2px) solid var(--color-black)}.grants-stepper .progress-step:last-child{flex-grow:1}.grant-applications--select-wrapper{--border-width: 2px;--input-height: 56px;--menu-item-height: 53px;--icon-size: var(--spacing-m);--helper-color-default: var(--color-black-60);--helper-color-invalid: var(--color-error);--icon-color-invalid: var(--color-error);--input-background-default: var(--color-white);--input-background-disabled: var(--color-black-10);--input-border-color-default: var(--color-black-50);--input-border-color-hover: var(--color-black-90);--input-border-color-focus: var(--color-black-90);--input-border-color-invalid: var(--color-error);--input-border-color-disabled: var(--color-black-10);--input-color-default: var(--color-black-90);--input-color-disabled: var(--color-black-40);--label-color-default: var(--color-black-90);--label-color-invalid: var(--color-black-90);--placeholder-color: var(--color-black-60);--focus-outline-color: var(--color-coat-of-arms);align-items:center;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--input-background-default);border:var(--border-width) solid var(--input-border-color-default);box-sizing:border-box;color:var(--input-color-default);cursor:pointer;display:block;font-size:1.125em;grid-template-areas:"select";line-height:normal;max-width:30ch;min-width:15ch;padding:.25em .5em;position:relative;width:100%}.grant-applications--select-wrapper select{align-items:center;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:rgba(0,0,0,0);border:none;color:var(--dropdown-color-default);cursor:inherit;display:flex;font-family:inherit;font-size:var(--fontsize-body-l);height:var(--input-height);line-height:inherit;margin:0;min-height:var(--menu-item-height);outline:none;padding:calc(var(--spacing-s) - var(--border-width)*2) var(--spacing-s);width:100%;z-index:1}.grant-applications--select-wrapper select::-ms-expand{display:none}.grant-applications--select-wrapper i.hel-icon{pointer-events:none;position:absolute;right:calc(var(--spacing-s) - var(--border-width)*2);top:calc(var(--spacing-s) - var(--border-width)*2)}.grant-applications--select-wrapper select,.grant-applications--select-wrapper::after{grid-area:select}.grant-applications--select-wrapper:not(.select--multiple)::after{background-color:var(--helper-color-default);clip-path:polygon(100% 0%, 0 0%, 50% 100%);content:"";height:.5em;justify-self:end;width:.8em}.grant-applications--select-wrapper select:focus+.grant-applications--select-focus{border:2px solid var(--focus-outline-color);border-radius:inherit;bottom:-1px;left:-1px;position:absolute;right:-1px;top:-1px}.webform-submission__application_id{border-bottom:1px var(--color-black-20) solid;padding-bottom:var(--spacing-xl)}.webform-submission__application_id--header{font-size:1rem;font-weight:bold}.webform-submission__title-wrapper{padding-top:var(--spacing-2-xl)}.webform-submission__title-wrapper h1{max-width:100%}.webform-submission ul{list-style:none;margin-top:0;padding-left:0}.webform-submission-information{background:var(--color-silver-light);margin-top:var(--spacing-3-xl);padding:var(--spacing-l)}.webform-submission-information .webform-submission-information{margin-top:var(--spacing-l);padding:0}.webform-submission-information h4{margin-top:0}.webform-submission-information h5{font-size:var(--fontsize-body-m);margin-top:var(--spacing-s)}.webform-submission-information__row{display:flex}.webform-submission-information__row-edit{margin-top:var(--spacing-s)}.webform-submission-information__row-top{align-items:center;border-bottom:1px solid var(--color-black-20);justify-content:space-between}@media(max-width: 550px){.webform-submission-information__row-top{display:block}}.webform-submission-information__row-main{flex-flow:row nowrap;gap:var(--spacing-m);justify-content:space-between}@media(max-width: 1179px){.webform-submission-information__row-main{flex-flow:row wrap}}.webform-submission-information__row-main>div{flex:1}@media(max-width: 1179px){.webform-submission-information__row-main>div{flex:auto;width:100%}}.webform-submission-information__row-main>div ul{list-style-type:none;margin-bottom:0;padding-left:0}.webform-submission-information__row-main>div ul li{margin:0;padding:0}.webform-submission-information__supportlinks{display:flex;flex-flow:row nowrap;min-width:-moz-fit-content;min-width:fit-content}.webform-submission-information__supportlinks .hds-loading-spinner{left:0}.webform-submission-information__supportlinks .hds-button{min-width:-moz-fit-content;min-width:fit-content}.hel-icon.hel-icon--copy{-webkit-mask-image:url("data:image/svg+xml,%3Csvg class='Icon-module_icon__1Jtzj icon_hel-icon__1YqNC Icon-module_s__2WGWe icon_hel-icon--size-s__2Lkik' viewBox='0 0 24 24' role='img' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Crect width='24' height='24'%3E%3C/rect%3E%3Cpath fill='currentColor' d='M6,10 L6,12 L5,12 L5,18 L12,18 L12,17 L14,17 L14,19 C14,19.5522847 13.5522847,20 13,20 L4,20 C3.44771525,20 3,19.5522847 3,19 L3,11 C3,10.4477153 3.44771525,10 4,10 L6,10 Z M20,4 C20.5522847,4 21,4.44771525 21,5 L21,15 C21,15.5522847 20.5522847,16 20,16 L8,16 C7.44771525,16 7,15.5522847 7,15 L7,5 C7,4.44771525 7.44771525,4 8,4 L20,4 Z M19,6 L9,6 L9,14 L19,14 L19,6 Z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg class='Icon-module_icon__1Jtzj icon_hel-icon__1YqNC Icon-module_s__2WGWe icon_hel-icon--size-s__2Lkik' viewBox='0 0 24 24' role='img' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Crect width='24' height='24'%3E%3C/rect%3E%3Cpath fill='currentColor' d='M6,10 L6,12 L5,12 L5,18 L12,18 L12,17 L14,17 L14,19 C14,19.5522847 13.5522847,20 13,20 L4,20 C3.44771525,20 3,19.5522847 3,19 L3,11 C3,10.4477153 3.44771525,10 4,10 L6,10 Z M20,4 C20.5522847,4 21,4.44771525 21,5 L21,15 C21,15.5522847 20.5522847,16 20,16 L8,16 C7.44771525,16 7,15.5522847 7,15 L7,5 C7,4.44771525 7.44771525,4 8,4 L20,4 Z M19,6 L9,6 L9,14 L19,14 L19,6 Z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E")}.webform-submission-form .form-actions{border-top:1px rgba(0,0,0,.6) solid;margin-top:var(--spacing-l);padding-top:var(--spacing-2-xl)}@media(min-width: 768px){.webform-submission-form .form-actions{display:flex;flex-direction:row-reverse}}.webform-submission-form .form-actions .actions{display:flex;flex-wrap:wrap}.webform-submission-form .form-actions button{margin-left:0}@media(min-width: 768px){.webform-submission-form .form-actions button{margin-left:var(--spacing-2-xs)}}.webform-submission-form .form-actions input{margin-bottom:var(--spacing-layout-2-xs);width:100%}@media(min-width: 768px){.webform-submission-form .form-actions input{width:auto}}.webform-submission-form .form-actions input.webform-button--draft{background:rgba(0,0,0,0);border:0 rgba(0,0,0,0) solid;color:var(--hdbt-color-black);order:3;text-decoration:underline}.webform-submission-form .form-actions button.webform-button--next span::after,.webform-submission-form .form-actions button.webform-button--preview span::after{content:">";margin-left:var(--spacing-2-xs)}.webform-submission-form .form-actions button.webform-button--previous span::before{content:"<";margin-right:var(--spacing-2-xs)}.webform-submission-form .form-actions input.webform-button--previous{background:var(--color-white);color:var(--border-color)}.webform-button--draft .hds-button__label::before{background-color:currentColor;background-size:contain;content:"";display:inline-block;flex-shrink:0;height:24px;margin-right:var(--spacing-2-xs);-webkit-mask-image:var(--hel-icon--download-cloud);mask-image:var(--hel-icon--download-cloud);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:24px 24px;mask-size:24px 24px;transition:transform .2s linear;vertical-align:bottom;width:24px}.webform-submission-messages{background:var(--color-silver-light);margin-top:var(--spacing-3-xl);padding:var(--spacing-l)}.webform-submission-messages h4,.webform-submission-messages h5{margin-top:0}.webform-submission-messages hr{margin:var(--spacing-l) 0}.webform-submission-messages__new-message{align-items:center;background:var(--color-alert);display:inline-flex;font-weight:bold;gap:var(--spacing-2-xs);margin-bottom:var(--spacing-m);padding:var(--spacing-2-xs) var(--spacing-xs);text-transform:uppercase}.webform-submission-messages__messages-list{list-style:none;margin:0;padding:0}.webform-submission-messages__message{margin:0;padding:0}.webform-submission-messages__message__attachments{list-style:none}.webform-submission-messages__message .hds-button{margin-top:var(--spacing-s)}.js-form-type-grants-webform-summation-field{max-width:var(--webform-element-width--input-large);text-align:right}.js-form-type-grants-webform-summation-field .grants-webform-summation-field{display:inline-block;padding:var(--spacing-xs) var(--spacing-m)}.webform-print-header,.webform-print-footer{display:none}.webform-print .main-content{display:block}.webform-submission--view-mode-html .hds-text-input,.webform-submission-data-preview-page .hds-text-input,.webform-print-page-html .hds-text-input{max-width:100%}.webform-submission--view-mode-html .print-label,.webform-submission-data-preview-page .print-label,.webform-print-page-html .print-label{display:block;font-size:var(--fontsize-body-m);font-weight:500;margin-bottom:var(--spacing-3-xs);margin-top:0;max-width:-moz-fit-content;max-width:fit-content;padding-right:var(--spacing-xl);position:relative}.webform-submission--view-mode-html .webform-section-flex-wrapper h3+*>*:first-child>*:first-child,.webform-submission--view-mode-html .webform-section-flex-wrapper h3+*>*:first-child>*:first-child label:first-of-type,.webform-submission-data-preview-page .webform-section-flex-wrapper h3+*>*:first-child>*:first-child,.webform-submission-data-preview-page .webform-section-flex-wrapper h3+*>*:first-child>*:first-child label:first-of-type,.webform-print-page-html .webform-section-flex-wrapper h3+*>*:first-child>*:first-child,.webform-print-page-html .webform-section-flex-wrapper h3+*>*:first-child>*:first-child label:first-of-type{line-height:normal}.webform-submission--view-mode-html .print-notification,.webform-submission-data-preview-page .print-notification,.webform-print-page-html .print-notification{border:2px var(--color-black) solid;font-weight:bold;margin-top:var(--spacing-2-xl);padding:var(--spacing-layout-s)}.webform-submission--view-mode-html .print-notification .print-notification--icon,.webform-submission-data-preview-page .print-notification .print-notification--icon,.webform-print-page-html .print-notification .print-notification--icon{height:22px;margin-right:var(--spacing-2-xs);vertical-align:text-top;width:22px}.webform-submission--view-mode-html .webform-print-page-wizard-page~.webform-print-page-wizard-page h2,.webform-submission-data-preview-page .webform-print-page-wizard-page~.webform-print-page-wizard-page h2,.webform-print-page-html .webform-print-page-wizard-page~.webform-print-page-wizard-page h2{page-break-after:avoid;page-break-before:always}.webform-submission--view-mode-html div.hds-text-input__input,.webform-submission-data-preview-page div.hds-text-input__input,.webform-print-page-html div.hds-text-input__input{background:var(--color-white);border:2px var(--color-black) solid;height:var(--spacing-2-xl);width:100%}.webform-submission--view-mode-html div.hds-text-input__textarea,.webform-submission-data-preview-page div.hds-text-input__textarea,.webform-print-page-html div.hds-text-input__textarea{background:var(--color-white);border:2px var(--color-black) solid;height:var(--spacing-layout-2-xl);width:100%}.webform-submission--view-mode-html .webform-section-wrapper .hds-notification,.webform-submission-data-preview-page .webform-section-wrapper .hds-notification,.webform-print-page-html .webform-section-wrapper .hds-notification{margin-top:var(--spacing-s)}.webform-submission--view-mode-html .webform-print-page-body h2,.webform-submission-data-preview-page .webform-print-page-body h2,.webform-print-page-html .webform-print-page-body h2{margin-bottom:var(--spacing-layout-s)}.webform-submission--view-mode-html .webform-print-wrapper-table,.webform-submission-data-preview-page .webform-print-wrapper-table,.webform-print-page-html .webform-print-wrapper-table{border:0 rgba(0,0,0,0) solid;display:table;max-width:100%;overflow-x:visible;overflow-x:initial;width:100%}.webform-submission--view-mode-html .webform-print-wrapper-table thead,.webform-submission--view-mode-html .webform-print-wrapper-table tbody,.webform-submission--view-mode-html .webform-print-wrapper-table tfoot,.webform-submission--view-mode-html .webform-print-wrapper-table tr,.webform-submission--view-mode-html .webform-print-wrapper-table tbody tr:hover,.webform-submission--view-mode-html .webform-print-wrapper-table td,.webform-submission--view-mode-html .webform-print-wrapper-table td:first-child,.webform-submission--view-mode-html .webform-print-wrapper-table th,.webform-submission-data-preview-page .webform-print-wrapper-table thead,.webform-submission-data-preview-page .webform-print-wrapper-table tbody,.webform-submission-data-preview-page .webform-print-wrapper-table tfoot,.webform-submission-data-preview-page .webform-print-wrapper-table tr,.webform-submission-data-preview-page .webform-print-wrapper-table tbody tr:hover,.webform-submission-data-preview-page .webform-print-wrapper-table td,.webform-submission-data-preview-page .webform-print-wrapper-table td:first-child,.webform-submission-data-preview-page .webform-print-wrapper-table th,.webform-print-page-html .webform-print-wrapper-table thead,.webform-print-page-html .webform-print-wrapper-table tbody,.webform-print-page-html .webform-print-wrapper-table tfoot,.webform-print-page-html .webform-print-wrapper-table tr,.webform-print-page-html .webform-print-wrapper-table tbody tr:hover,.webform-print-page-html .webform-print-wrapper-table td,.webform-print-page-html .webform-print-wrapper-table td:first-child,.webform-print-page-html .webform-print-wrapper-table th{background:rgba(0,0,0,0);border:0;color:var(--color-black)}.webform-submission--view-mode-html .webform-print-wrapper-table ul,.webform-submission-data-preview-page .webform-print-wrapper-table ul,.webform-print-page-html .webform-print-wrapper-table ul{margin:0;padding:0}.webform-submission--view-mode-html .webform-print-wrapper-table ul li,.webform-submission-data-preview-page .webform-print-wrapper-table ul li,.webform-print-page-html .webform-print-wrapper-table ul li{border-bottom:1px var(--color-black-50) solid;list-style:none;margin-top:0;padding:1rem 0}.webform-submission--view-mode-html .webform-print-wrapper-table ul li:last-of-type,.webform-submission-data-preview-page .webform-print-wrapper-table ul li:last-of-type,.webform-print-page-html .webform-print-wrapper-table ul li:last-of-type{border-bottom:0 rgba(0,0,0,0) solid}.webform-submission--view-mode-html .webform-print-wrapper-table thead,.webform-submission-data-preview-page .webform-print-wrapper-table thead,.webform-print-page-html .webform-print-wrapper-table thead{display:table-header-group}.webform-submission--view-mode-html .webform-print-wrapper-table thead th,.webform-submission-data-preview-page .webform-print-wrapper-table thead th,.webform-print-page-html .webform-print-wrapper-table thead th{padding:0}.webform-submission--view-mode-html .webform-print-wrapper-table tfoot,.webform-submission-data-preview-page .webform-print-wrapper-table tfoot,.webform-print-page-html .webform-print-wrapper-table tfoot{display:table-footer-group}.webform-submission--view-mode-html .webform-submission-data>section,.webform-submission-data-preview-page .webform-submission-data>section,.webform-print-page-html .webform-submission-data>section{border-top:1px var(--color-black-20) solid;padding-top:var(--spacing-layout-l)}.webform-submission--view-mode-html .webform-submission-data>section>.webform-section-flex-wrapper,.webform-submission-data-preview-page .webform-submission-data>section>.webform-section-flex-wrapper,.webform-print-page-html .webform-submission-data>section>.webform-section-flex-wrapper{display:block}.webform-submission--view-mode-html .webform-submission-data>section>.webform-section-flex-wrapper>h2,.webform-submission-data-preview-page .webform-submission-data>section>.webform-section-flex-wrapper>h2,.webform-print-page-html .webform-submission-data>section>.webform-section-flex-wrapper>h2{font-size:var(--fontsize-heading-l) !important;margin:0 0 2mm !important;padding:0 !important;width:100% !important}.webform-submission--view-mode-html .webform-submission-data>section>.webform-section-flex-wrapper>h2,.webform-submission-data-preview-page .webform-submission-data>section>.webform-section-flex-wrapper>h2,.webform-print-page-html .webform-submission-data>section>.webform-section-flex-wrapper>h2{font-weight:500;min-width:100%}.webform-submission--view-mode-html .webform-submission-data>section>.webform-section-flex-wrapper>.webform-section-wrapper,.webform-submission-data-preview-page .webform-submission-data>section>.webform-section-flex-wrapper>.webform-section-wrapper,.webform-print-page-html .webform-submission-data>section>.webform-section-flex-wrapper>.webform-section-wrapper{padding:6mm 0}.webform-submission--view-mode-html .webform-submission-data>section>.webform-section-flex-wrapper>.webform-section-wrapper label,.webform-submission-data-preview-page .webform-submission-data>section>.webform-section-flex-wrapper>.webform-section-wrapper label,.webform-print-page-html .webform-submission-data>section>.webform-section-flex-wrapper>.webform-section-wrapper label{font-weight:500}.webform-submission--view-mode-html .webform-submission-data>section.hds-notification,.webform-submission-data-preview-page .webform-submission-data>section.hds-notification,.webform-print-page-html .webform-submission-data>section.hds-notification{padding-top:var(--spacing-s)}@media print{@page{.webform-submission--view-mode-html,.webform-submission-data-preview-page,.webform-print-page-html{margin:0;size:A4}}.webform-submission--view-mode-html h1,.webform-submission-data-preview-page h1,.webform-print-page-html h1{margin:0;position:relative}.webform-submission--view-mode-html details,.webform-submission-data-preview-page details,.webform-print-page-html details{page-break-before:always}.webform-submission--view-mode-html .details-section-divider,.webform-submission-data-preview-page .details-section-divider,.webform-print-page-html .details-section-divider{page-break-after:always}.webform-submission--view-mode-html label,.webform-submission-data-preview-page label,.webform-print-page-html label{font-size:8pt;margin-bottom:0}.webform-submission--view-mode-html section,.webform-submission-data-preview-page section,.webform-print-page-html section{border-top:0 var(--color-black-20) solid !important;padding-top:0 !important}.webform-submission--view-mode-html section,.webform-submission-data-preview-page section,.webform-print-page-html section{margin-bottom:0;padding-bottom:0}.webform-submission--view-mode-html div.main-content,.webform-submission-data-preview-page div.main-content,.webform-print-page-html div.main-content{margin:0}.webform-submission--view-mode-html button,.webform-submission--view-mode-html footer.footer,.webform-submission--view-mode-html header.header,.webform-submission--view-mode-html nav.breadcrumb,.webform-submission--view-mode-html .form-actions,.webform-submission--view-mode-html .hds-notification,.webform-submission--view-mode-html .messages__container,.webform-submission--view-mode-html .tools__container,.webform-submission--view-mode-html .breadcrumb__container,.webform-submission--view-mode-html .webform-progress,.webform-submission--view-mode-html .webform-progress-tracker,.webform-submission--view-mode-html .webform-progress-tracker-mobile,.webform-submission--view-mode-html .webform-multiple-add,.webform-submission--view-mode-html .webform-multiple-table--operations,.webform-submission-data-preview-page button,.webform-submission-data-preview-page footer.footer,.webform-submission-data-preview-page header.header,.webform-submission-data-preview-page nav.breadcrumb,.webform-submission-data-preview-page .form-actions,.webform-submission-data-preview-page .hds-notification,.webform-submission-data-preview-page .messages__container,.webform-submission-data-preview-page .tools__container,.webform-submission-data-preview-page .breadcrumb__container,.webform-submission-data-preview-page .webform-progress,.webform-submission-data-preview-page .webform-progress-tracker,.webform-submission-data-preview-page .webform-progress-tracker-mobile,.webform-submission-data-preview-page .webform-multiple-add,.webform-submission-data-preview-page .webform-multiple-table--operations,.webform-print-page-html button,.webform-print-page-html footer.footer,.webform-print-page-html header.header,.webform-print-page-html nav.breadcrumb,.webform-print-page-html .form-actions,.webform-print-page-html .hds-notification,.webform-print-page-html .messages__container,.webform-print-page-html .tools__container,.webform-print-page-html .breadcrumb__container,.webform-print-page-html .webform-progress,.webform-print-page-html .webform-progress-tracker,.webform-print-page-html .webform-progress-tracker-mobile,.webform-print-page-html .webform-multiple-add,.webform-print-page-html .webform-multiple-table--operations{display:none !important}.webform-submission--view-mode-html .gin--horizontal-toolbar .dialog-off-canvas-main-canvas,.webform-submission-data-preview-page .gin--horizontal-toolbar .dialog-off-canvas-main-canvas,.webform-print-page-html .gin--horizontal-toolbar .dialog-off-canvas-main-canvas{padding:0 !important}.webform-submission--view-mode-html .hds-text-input,.webform-submission-data-preview-page .hds-text-input,.webform-print-page-html .hds-text-input{max-width:100%}.webform-submission--view-mode-html .hds-text-input .hds-text-input__input,.webform-submission-data-preview-page .hds-text-input .hds-text-input__input,.webform-print-page-html .hds-text-input .hds-text-input__input{height:1cm}.webform-submission--view-mode-html .hds-text-input textarea.hds-text-input__input,.webform-submission--view-mode-html .hds-text-input div.hds-text-input__textarea,.webform-submission-data-preview-page .hds-text-input textarea.hds-text-input__input,.webform-submission-data-preview-page .hds-text-input div.hds-text-input__textarea,.webform-print-page-html .hds-text-input textarea.hds-text-input__input,.webform-print-page-html .hds-text-input div.hds-text-input__textarea{height:6cm;max-width:100%;min-width:100%;width:100%}.webform-submission--view-mode-html .hds-text-input .hds-text-input__input[readonly],.webform-submission--view-mode-html .hds-text-input .hds-text-input__input,.webform-submission-data-preview-page .hds-text-input .hds-text-input__input[readonly],.webform-submission-data-preview-page .hds-text-input .hds-text-input__input,.webform-print-page-html .hds-text-input .hds-text-input__input[readonly],.webform-print-page-html .hds-text-input .hds-text-input__input{border:2px var(--color-black) solid}.webform-submission--view-mode-html .webform-element,.webform-submission-data-preview-page .webform-element,.webform-print-page-html .webform-element{border:1px var(--color-black) solid;margin-bottom:8mm;padding:2.5mm;position:relative}.webform-submission--view-mode-html .webform-preview,.webform-submission-data-preview-page .webform-preview,.webform-print-page-html .webform-preview{margin-top:0}.webform-submission--view-mode-html .webform-preview label,.webform-submission-data-preview-page .webform-preview label,.webform-print-page-html .webform-preview label{align-items:flex-end;display:flex;font-size:8pt;height:100%;left:0;pointer-events:none;position:absolute;top:-100%;width:100%}.webform-submission--view-mode-html .webform-preview .webform-element,.webform-submission-data-preview-page .webform-preview .webform-element,.webform-print-page-html .webform-preview .webform-element{border:1px var(--color-black) solid;margin-bottom:8mm;padding:2.5mm;position:relative;top:5mm}.webform-submission--view-mode-html .webform-preview .webform-multiple-table--operations,.webform-submission-data-preview-page .webform-preview .webform-multiple-table--operations,.webform-print-page-html .webform-preview .webform-multiple-table--operations{display:none}.webform-submission--view-mode-html .webform-print-header,.webform-submission-data-preview-page .webform-print-header,.webform-print-page-html .webform-print-header{align-items:center;background:var(--color-white);border-bottom:1px var(--color-black-40) solid;display:flex;flex-flow:row nowrap;font-size:9pt;height:21mm;left:0;max-width:100%;min-width:100%;position:fixed;top:0;width:100%;z-index:1000}.webform-submission--view-mode-html .webform-print-header svg,.webform-submission-data-preview-page .webform-print-header svg,.webform-print-page-html .webform-print-header svg{color:var(--color-black);display:block;height:25mm;margin-right:3mm;width:55mm}.webform-submission--view-mode-html .webform-print-header .webform-print-header-left-text,.webform-submission-data-preview-page .webform-print-header .webform-print-header-left-text,.webform-print-page-html .webform-print-header .webform-print-header-left-text{color:var(--color-black-40);text-align:left;width:100%}.webform-submission--view-mode-html .webform-print-header .webform-print-header-right-text,.webform-submission-data-preview-page .webform-print-header .webform-print-header-right-text,.webform-print-page-html .webform-print-header .webform-print-header-right-text{color:var(--color-black-40);text-align:right;width:100%}.webform-submission--view-mode-html .webform-print-footer,.webform-submission-data-preview-page .webform-print-footer,.webform-print-page-html .webform-print-footer{align-items:center;background:var(--color-white);border-top:1px var(--color-black-40) solid;bottom:0;display:flex;flex-flow:row nowrap;font-size:9pt;height:17mm;left:0;max-width:100%;min-width:100%;position:fixed;width:100%;z-index:1000}.webform-submission--view-mode-html .webform-print-footer svg,.webform-submission-data-preview-page .webform-print-footer svg,.webform-print-page-html .webform-print-footer svg{color:var(--color-black);display:block;height:15mm;margin-right:3mm;width:33mm}.webform-submission--view-mode-html .webform-print-footer .webform-print-footer-left-text,.webform-submission-data-preview-page .webform-print-footer .webform-print-footer-left-text,.webform-print-page-html .webform-print-footer .webform-print-footer-left-text{color:var(--color-black-40);text-align:left;width:100%}.webform-submission--view-mode-html .webform-print-footer .webform-print-footer-right-text,.webform-submission-data-preview-page .webform-print-footer .webform-print-footer-right-text,.webform-print-page-html .webform-print-footer .webform-print-footer-right-text{color:var(--color-black-40);text-align:right;width:100%}.webform-submission--view-mode-html .webform-print-header-space,.webform-submission-data-preview-page .webform-print-header-space,.webform-print-page-html .webform-print-header-space{background:var(--color-white);font-size:9pt;height:21mm}.webform-submission--view-mode-html .webform-print-footer-space,.webform-submission-data-preview-page .webform-print-footer-space,.webform-print-page-html .webform-print-footer-space{background:var(--color-white);font-size:9pt;height:17mm}.webform-submission--view-mode-html .webform-print-wrapper-table,.webform-submission-data-preview-page .webform-print-wrapper-table,.webform-print-page-html .webform-print-wrapper-table{border:0;margin:0;overflow-x:visible;overflow-x:initial}.webform-submission--view-mode-html .webform-section-flex-wrapper,.webform-submission-data-preview-page .webform-section-flex-wrapper,.webform-print-page-html .webform-section-flex-wrapper{flex-flow:row wrap}.webform-submission--view-mode-html .webform-section-flex-wrapper>h3.webform-section-title,.webform-submission-data-preview-page .webform-section-flex-wrapper>h3.webform-section-title,.webform-print-page-html .webform-section-flex-wrapper>h3.webform-section-title{max-width:100%;width:100%}.webform-submission--view-mode-html .webform-section-grid-wrapper,.webform-submission-data-preview-page .webform-section-grid-wrapper,.webform-print-page-html .webform-section-grid-wrapper{display:flex;flex-flow:row nowrap}.webform-submission--view-mode-html .webform-section-grid-wrapper>h3.webform-section-title,.webform-submission-data-preview-page .webform-section-grid-wrapper>h3.webform-section-title,.webform-print-page-html .webform-section-grid-wrapper>h3.webform-section-title{font-size:1.25rem;margin-top:0;max-width:5cm;width:100%}.webform-submission--view-mode-html .webform-section-grid-wrapper>dl.webform-section-contents,.webform-submission-data-preview-page .webform-section-grid-wrapper>dl.webform-section-contents,.webform-print-page-html .webform-section-grid-wrapper>dl.webform-section-contents{margin-top:0;max-width:100%;padding-left:1cm;width:100%}.webform-submission--view-mode-html .webform-section-grid-wrapper>dl.webform-section-contents dt,.webform-submission-data-preview-page .webform-section-grid-wrapper>dl.webform-section-contents dt,.webform-print-page-html .webform-section-grid-wrapper>dl.webform-section-contents dt{font-weight:bold;margin:0;padding:0;page-break-after:avoid}.webform-submission--view-mode-html .webform-section-grid-wrapper>dl.webform-section-contents dd,.webform-submission-data-preview-page .webform-section-grid-wrapper>dl.webform-section-contents dd,.webform-print-page-html .webform-section-grid-wrapper>dl.webform-section-contents dd{margin:0;padding:0;page-break-before:avoid}.webform-submission--view-mode-html .webform-print-page-body h2,.webform-submission-data-preview-page .webform-print-page-body h2,.webform-print-page-html .webform-print-page-body h2{margin-bottom:1cm}}.webform-submission-data dl dt{font-weight:bold}.webform-submission-data dl dd{margin:0;padding:0}.webform-submission-data dl dl{padding-left:var(--spacing-2-xs)}.webform-submission-data dl>br{display:none}.webform-print-page-html .webform-section-wrapper>h4,.webform-print-page-html .webform-section-wrapper .print-label{margin-top:var(--spacing-2-xs);line-height:1.5}.webform-print-page-html .webform-section-wrapper fieldset{padding:var(--spacing-s)}@media(min-width: 768px){.webform-print-page-html .webform-section-wrapper fieldset{min-width:400px;padding:var(--spacing-s) var(--spacing-m)}}.application-list{padding-bottom:var(--spacing-xl);padding-left:0}.application-list__processed-human-readable{display:none}.application-list__item{background:var(--color-bus-light);display:block;margin:var(--spacing-m) 0;padding:var(--spacing-2-xl) var(--spacing-s) var(--spacing-m);position:relative}.application-list__item .new-message{background-color:var(--color-alert);border-radius:var(--spacing-xl);display:inline-block;padding:var(--spacing-2-xs)}.application-list__item .new-message .hel-icon--size-s{height:20px;width:20px}.application-list__item h3,.application-list__item h4{margin-top:var(--spacing-xs)}.application-list__item h4{font-size:1rem}.application-list__item--submitted{display:none}.application-list__item__link{display:flex;margin-top:var(--spacing-m)}.application-list__item__link a{font-size:1.25rem}.application-list__item__link a i{vertical-align:text-bottom}.application-list__item__row{display:flex;flex-flow:row wrap;gap:var(--spacing-m);justify-content:space-between}.application-list__item__row__left{justify-content:flex-start}.application-list__item__row__top{padding:var(--spacing-2-xs) var(--spacing-s) var(--spacing-2-xs) 0;position:absolute;top:0;width:100%}.application-list__item--status{--status-label-height: 32px;align-items:center;border-radius:20px;display:inline-flex;font-size:var(--fontsize-body-s);line-height:var(--status-label-height);min-height:var(--status-label-height);padding:var(--spacing-3-xs) var(--spacing-s);padding-left:var(--spacing-xs);vertical-align:middle}.application-list__item--status+.hds-loading-spinner{display:inline-block;left:10px;margin:0;padding:0;position:relative;top:var(--spacing-3-xs)}.application-list__item--status.hide-spinner+.hds-loading-spinner{display:none}.application-list__item--status+div+.application-list__item--error{display:none}.application-list__item--status.show-error{background:var(--color-black-20);color:var(--color-black-90)}.application-list__item--status.show-error+div+.application-list__item--error{display:inline-flex;left:var(--spacing-xs);margin:0;padding:0;position:relative;top:var(--spacing-3-xs)}.application-list__item--status.show-error+div+.application-list__item--error .application-list--error-text{display:inline-block;margin-left:var(--spacing-2-xs)}.application-list__item--status--draft{padding-left:0}.application-list__item--status--sent,.application-list__item--status--submitted{background:var(--color-black-10)}.application-list__item--status--sent::before,.application-list__item--status--submitted::before{--icon-size: 1.5rem;background-color:#000;background-size:contain;content:"";display:inline-block;height:calc(var(--line-height) * 1em);height:var(--icon-size, calc(var(--line-height) * 1em));-webkit-mask-image:var(--hel-icon--alert-circle);mask-image:var(--hel-icon--alert-circle);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);-webkit-mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));vertical-align:bottom;width:calc(var(--line-height) * 1em);width:var(--icon-size, calc(var(--line-height) * 1em));background-color:var(--color-black);content:"";margin-right:var(--spacing-2-xs)}.application-list__item--status--received,.application-list__item--status--pending,.application-list__item--status--processing,.application-list__item--status--preparing{background:var(--color-info);color:var(--color-white)}.application-list__item--status--received::before,.application-list__item--status--pending::before,.application-list__item--status--processing::before,.application-list__item--status--preparing::before{--icon-size: 1.5rem;background-color:#000;background-size:contain;content:"";display:inline-block;height:calc(var(--line-height) * 1em);height:var(--icon-size, calc(var(--line-height) * 1em));-webkit-mask-image:var(--hel-icon--info-circle);mask-image:var(--hel-icon--info-circle);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);-webkit-mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));vertical-align:bottom;width:calc(var(--line-height) * 1em);width:var(--icon-size, calc(var(--line-height) * 1em));background-color:var(--color-white);content:"";margin-right:var(--spacing-2-xs)}.application-list__item--status--done,.application-list__item--status--ready,.application-list__item--status--resolved{background:var(--color-success);color:var(--color-white)}.application-list__item--status--done::before,.application-list__item--status--ready::before,.application-list__item--status--resolved::before{--icon-size: 1.5rem;background-color:#000;background-size:contain;content:"";display:inline-block;height:calc(var(--line-height) * 1em);height:var(--icon-size, calc(var(--line-height) * 1em));-webkit-mask-image:var(--hel-icon--check-circle);mask-image:var(--hel-icon--check-circle);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);-webkit-mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));vertical-align:bottom;width:calc(var(--line-height) * 1em);width:var(--icon-size, calc(var(--line-height) * 1em));background-color:var(--color-white);content:"";margin-right:var(--spacing-2-xs)}.application-list__item--status--rejected,.application-list__item--status--deleted,.application-list__item--status--canceled,.application-list__item--status--cancelled{background:var(--color-alert)}.application-list__item--status--rejected::before,.application-list__item--status--deleted::before,.application-list__item--status--canceled::before,.application-list__item--status--cancelled::before{--icon-size: 1.5rem;background-color:#000;background-size:contain;content:"";display:inline-block;height:calc(var(--line-height) * 1em);height:var(--icon-size, calc(var(--line-height) * 1em));-webkit-mask-image:var(--hel-icon--alert-circle);mask-image:var(--hel-icon--alert-circle);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);-webkit-mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));vertical-align:bottom;width:calc(var(--line-height) * 1em);width:var(--icon-size, calc(var(--line-height) * 1em));background-color:var(--color-black);content:"";margin-right:var(--spacing-2-xs)}.application-list__item--status--error{background:var(--color-black-20);color:var(--color-black);text-transform:uppercase}.application-list__item--status--error .hel-icon{margin-right:var(--spacing-3-xs)}.application-list__count{font-size:1.5rem}.application-list__count-value{font-weight:bold}.application-list__information-row{align-items:flex-end;display:flex;flex-flow:row nowrap;justify-content:space-between;width:100%}@media(max-width: 35rem){.application-list__information-row{flex-flow:row wrap}}.application-list__information-row .grant-applications--select-wrapper select{max-width:100%;width:322px}.application-list__status__wrapper{background:var(--color-black-5)}.application-list__status__container{display:flex;flex-flow:row wrap;gap:var(--spacing-layout-m);justify-content:flex-start;padding-bottom:var(--spacing-m);padding-top:var(--spacing-m)}.application-list__status__label{font-weight:bold}.application-list__status__value{display:flex;flex-flow:row;justify-items:center;min-height:var(--spacing-xl)}.application-list__status__value>div{margin:auto}.application-list__search-row{align-items:flex-end;display:flex;flex-flow:row nowrap;gap:var(--spacing-s);justify-content:space-between;width:100%}@media(max-width: 35rem){.application-list__search-row{flex-flow:row wrap}}.application-list__search-row .hds-text-input{flex:1 100%;max-width:100%}.application-list__search-row .hds-text-input__input-wrapper{display:block}.application-list__search-row .hds-text-input__input-wrapper input{width:100%}.application-list__search-row button{white-space:nowrap}.application-list__pagination{--line-height: 1.5555555556;font-size:1.125rem;font-weight:400;line-height:var(--line-height);display:inline-flex;flex-wrap:wrap;font-weight:700;gap:var(--spacing-2-xs);justify-content:center;list-style:none;padding:0}.application-list__pagination li{margin-top:0}.application-list__pagination li.active a{text-decoration:underline}.application-list__pagination li.disabled a{cursor:default;text-decoration:none}.application-list__pagination li.disabled a:hover,.application-list__pagination li.disabled a:focus,.application-list__pagination li.disabled a:active{outline:none;text-decoration:none}.application-list__pagination li a{color:var(--color-black-90);display:block;height:var(--link-height);min-width:40px;padding-left:var(--spacing-3-xs);padding-right:var(--spacing-3-xs);text-decoration:none}.application-list__pagination li a:hover{text-decoration:underline}.application-list__pagination li a:focus,.application-list__pagination li a:active{outline:solid var(--color-coat-of-arms) 3px;outline-offset:1px}.grants-profile hr{border:1px solid var(--color-silver);margin:var(--spacing-layout-xs) 0}.grants-profile h3.info-grants{border-bottom:2px solid var(--color-silver);padding-bottom:var(--spacing-l)}.grants-profile--title{align-items:center;display:flex;flex-flow:row nowrap}.grants-profile--title .grants-profile--initials{border-radius:50%;display:none;font-size:var(--fontsize-body-xl);font-weight:bold;height:var(--spacing-4-xl);line-height:var(--spacing-4-xl);margin-right:var(--spacing-m);text-align:center;vertical-align:middle;width:var(--spacing-4-xl)}@media(min-width: 992px){.grants-profile--title .grants-profile--initials{display:block}}.grants-profile--title .grants-profile--initials:hover,.grants-profile--title .grants-profile--initials:active,.grants-profile--title .grants-profile--initials:focus{text-decoration:underline}.grants-profile--title .grants-profile--initials-colorscheme-2{background-color:var(--color-bus);color:var(--color-white)}.grants-profile--title .grants-profile--initials-colorscheme-1{background-color:var(--color-engel);color:var(--color-black)}.grants-profile--title .grants-profile--initials-colorscheme-0{background-color:var(--color-tram);color:var(--color-white)}.grants-profile--title h1{flex-grow:100}.grants-profile--basicinfo{--line-height: 1.5;background-color:var(--color-silver-light);border-bottom:8px solid var(--color-engel-dark);padding-bottom:var(--spacing-2-xs);padding-top:var(--spacing-l)}.grants-profile--basicinfo h3{font-size:var(--fontsize-heading-l);margin-top:0;padding-top:0}.grants-profile--extrainfo{padding-bottom:var(--spacing-l);padding-top:var(--spacing-l)}.grants-profile--extrainfo .hds-notification{margin-bottom:var(--spacing-xl)}.grants-profile--extrainfo fieldset.form-wrapper{background-color:var(--color-silver-light);border:0;padding:var(--spacing-l)}.grants-profile--extrainfo fieldset.inline-error-message{background-color:transparent;background-color:initial;padding:0 0 0 var(--spacing-2-xs)}.grants-profile--extrainfo fieldset.inline-error-message legend{display:none}.grants-profile--update-link{margin-bottom:var(--spacing-layout-2-xs);margin-top:var(--spacing-layout-xs)}.grants-profile--infotext{font-size:var(--fontsize-body-l);margin-bottom:var(--spacing-s)}.grants-profile--wrapper{display:flex;flex-wrap:wrap}.grants-profile--wrapper-item{margin-bottom:var(--spacing-layout-2-xs);width:100%}@media(min-width: 576px){.grants-profile--wrapper-item{flex:1;margin-bottom:0}}.grants-profile--wrapper-item:first-child{flex:auto;margin-bottom:var(--spacing-layout-2-xs);width:100%}.grants-profile .profile-add-more{margin-top:1em}[dir="ltr"] .grants-profile dd{margin-left:0}[dir="rtl"] .grants-profile dd{margin-right:0}.grants-profile--officials{margin-left:0;padding-left:0}.grants-profile--officials-item{border-left:4px var(--color-copper) solid;display:flex;flex-flow:row nowrap;justify-content:space-between;list-style:none;margin-bottom:var(--spacing-layout-s);margin-left:0;max-width:var(--webform-element-width--input-large);padding-left:var(--spacing-layout-xs);width:100%}.grants-profile--officials-item--position{font-size:var(--fontsize-heading-xs);font-weight:bold;margin-bottom:var(--spacing-layout-2-xs);margin-top:0;padding-top:0}.grants-profile--officials-edit-wrapper{text-align:right}.grants-profile--officials-edit-wrapper a{display:inline-block}.grants-profile .hel-icon--check-circle-fill{color:var(--color-success);vertical-align:middle}.grants-profile-grants-profile .tabledrag-toggle-weight-wrapper,.grants-profile-grants-profile .field-multiple-drag{display:none}.grants-profile .hds-text-input__label{display:inline-block;margin-top:0}.page--oma-asiointi__private-person .grants-profile--basicinfo{border-bottom:8px solid var(--color-copper)}.page--oma-asiointi__private-person .grants-profile--wrapper{display:grid;grid-template-columns:1fr 1fr}.page--oma-asiointi__unregistered-community .grants-profile--wrapper{display:grid;grid-template-columns:1fr 1fr}.hds-link .hel-icon{margin-right:var(--spacing-2-xs);vertical-align:bottom}.hds-link span.link-label{font-weight:bold;margin-right:var(--spacing-m)}.bold-link{font-weight:bold}div.applicant-info--from-prh,div.applicant-info--from-grants{display:grid;grid-template-columns:1fr}@media(min-width: 576px){div.applicant-info--from-prh,div.applicant-info--from-grants{grid-template-columns:1fr 1fr}}@media(min-width: 768px){div.applicant-info--from-prh,div.applicant-info--from-grants{grid-template-columns:1fr 1fr 1fr}}div.applicant-info--from-prh .form-required::after,div.applicant-info--from-grants .form-required::after{content:none}div.applicant-info--from-prh{border-bottom:2px solid var(--color-silver);margin-bottom:var(--spacing-layout-xs);padding-bottom:var(--spacing-layout-2-xs)}div.grants-handler--prefilled-field .field-prefix,.grants-profile-prh-info .field-prefix{display:block;position:absolute;right:var(--spacing-layout-s);top:0}div.grants-handler--prefilled-field .hds-text-input__input-wrapper,div.grants-handler--prefilled-field .description,.grants-profile-prh-info .hds-text-input__input-wrapper,.grants-profile-prh-info .description{display:inline-block;white-space:normal}div.grants-handler--prefilled-field .hel-icon--check-circle-fill,.grants-profile-prh-info .hel-icon--check-circle-fill{color:var(--color-success);vertical-align:middle}div.grants-handler--prefilled-field .hds-text-input__input,div.grants-handler--prefilled-field .webform-element-description,.grants-profile-prh-info .hds-text-input__input,.grants-profile-prh-info .webform-element-description{color:var(--color-black);display:block;font-size:var(--fontsize-body-m);line-height:var(--spacing-m);position:relative}div.grants-handler--prefilled-field .hds-text-input__label,.grants-profile-prh-info .hds-text-input__label{margin-bottom:0}.grants-profile--imported-section .webform-section-flex-wrapper{background-color:var(--color-silver-light);border-bottom:8px solid var(--color-engel-dark);display:block;padding-bottom:var(--spacing-2-xs);padding-left:var(--spacing-l);padding-right:var(--spacing-l);padding-top:var(--spacing-l);width:100%}.grants-profile--imported-section .webform-section-flex-wrapper h3.webform-section-title{font-size:var(--fontsize-heading-l);font-weight:400;margin-top:0;max-width:100%;padding-top:0;width:100%}.grants-profile--imported-section .webform-section-flex-wrapper .webform-section-wrapper{padding:0}.grants-profile--imported-section .webform-section-flex-wrapper .hds-text-input{margin-bottom:0}.grants-profile--imported-section .webform-section-flex-wrapper #edit-grants-profile-items-container{display:flex;flex-flow:row wrap;justify-content:space-between;margin-bottom:var(--spacing-layout-xs);margin-top:var(--spacing-layout-xs);width:100%}.grants-profile--imported-section .webform-section-flex-wrapper #edit-grants-profile-items-container>div{margin:0 var(--spacing-layout-xs) 0 0;min-width:160px}.grants-profile--imported-section .webform-section-flex-wrapper #edit-grants-profile-items-container .hds-text-input__input-wrapper{display:none}.grants-profile--imported-section .webform-section-flex-wrapper #edit-grants-profile-items-container label{font-size:var(--fontsize-body-m);font-weight:bold;margin:0}.grants-profile--imported-section .webform-section-flex-wrapper .form-item-prh-markup{border-bottom:2px solid var(--color-silver);padding-bottom:var(--spacing-layout-xs);padding-top:var(--spacing-layout-xs)}.grants-profile__local-tasks__wrapper{margin-bottom:0}.openid-connect-login-form.openid-connect-login-form{border-bottom:0;margin-bottom:0;padding-bottom:0}.grants-profile--links{display:flex;justify-content:space-between}.company-delete-confirm-form .form-actions{margin-top:var(--spacing-layout-xs)}.company-delete-confirm-form .form-submit{margin-right:var(--spacing-2-xs)}.page--oma-asiointi .main-content{margin-top:0}.page--oma-asiointi .main-content h2{margin-top:var(--spacing-m)}.hero--oma-asiointi{margin-bottom:var(--spacing-l)}.hero--oma-asiointi .container{padding-top:var(--spacing-layout-m)}.hero--oma-asiointi .hero__text-content{align-items:center;display:flex}.hero--oma-asiointi .hero__title{margin-left:0}@media(min-width: 576px){.hero--oma-asiointi .hero__title{margin-left:40px}}.hero--oma-asiointi .hel-icon{display:none}@media(min-width: 576px){.hero--oma-asiointi .hel-icon{--icon-size: 48px;display:block;flex-shrink:0}}#oma-asiointi__sent{background:var(--color-silver-light)}#oma-asiointi__sent .application-list__item{background:var(--color-white)}.oma-asiointi-block{background-color:var(--color-silver-light);padding-bottom:var(--spacing-l);padding-top:var(--spacing-l)}.oma-asiointi-block h2{margin-bottom:var(--spacing-s);margin-top:0}.oma-asiointi-block h3{font-size:var(--fontsize-heading-m);font-weight:500}.oma-asiointi-block .header{border-bottom:1px solid var(--color-silver-dark);display:flex;justify-content:space-between;padding-bottom:var(--spacing-xs)}.oma-asiointi-block .header .user,.oma-asiointi-block .header .link{font-weight:700}.oma-asiointi-block .header .link .hel-icon{vertical-align:text-top}.oma-asiointi-block--link{display:block;position:relative;text-decoration:none}.oma-asiointi-block--link::after{--icon-size: 1.5rem;background-color:#000;background-size:contain;content:"";display:inline-block;height:calc(var(--line-height) * 1em);height:var(--icon-size, calc(var(--line-height) * 1em));-webkit-mask-image:var(--hel-icon--arrow-right);mask-image:var(--hel-icon--arrow-right);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);-webkit-mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));vertical-align:bottom;width:calc(var(--line-height) * 1em);width:var(--icon-size, calc(var(--line-height) * 1em));transition:transform .2s linear;bottom:var(--spacing-m);content:"";display:block;flex-shrink:0;margin-left:-4px;margin-top:var(--spacing-2-xs);position:absolute;right:var(--spacing-m)}@media(prefers-reduced-motion){.oma-asiointi-block--link::after{transition:none}}@media(min-width: 576px){.oma-asiointi-block--link::after{--icon-size: 3rem;margin-left:-8px;margin-top:var(--spacing-s)}}.oma-asiointi-block--link:focus::after,.oma-asiointi-block--link:hover::after{transform:translateX(var(--spacing-2-xs))}@media(prefers-reduced-motion){.oma-asiointi-block--link:focus::after,.oma-asiointi-block--link:hover::after{transform:none}}.oma-asiointi-block .new-message{background-color:var(--color-alert);display:inline-block;font-weight:500;padding:var(--spacing-2-xs);text-transform:uppercase}.oma-asiointi-block .new-messages-length{background-color:var(--color-black-20);border-radius:50%;display:inline-block;font-size:var(--fontsize-heading-s);height:30px;line-height:30px;margin-left:var(--spacing-m);position:relative;text-align:center;width:30px}.oma-asiointi-block .new-messages-length.has-new-messages{background-color:var(--color-alert)}@media(min-width: 768px){.oma-asiointi-block .content{display:grid;grid-gap:var(--spacing-s);grid-template-columns:1fr 1fr}}.oma-asiointi-block .submission,.oma-asiointi-block .message{background-color:var(--color-white);margin-bottom:var(--spacing-s);margin-top:var(--spacing-s);padding:var(--spacing-m)}.oma-asiointi-block .submission .submission-title,.oma-asiointi-block .submission .message-title,.oma-asiointi-block .message .submission-title,.oma-asiointi-block .message .message-title{font-size:var(--fontsize-heading-s);font-weight:500;margin-bottom:var(--spacing-2-xs);margin-top:0;text-decoration:underline}.oma-asiointi-block .submission .message-title,.oma-asiointi-block .message .message-title{margin-top:var(--spacing-s)}.oma-asiointi-block .submission:hover .submission-title,.oma-asiointi-block .submission:hover .message-title,.oma-asiointi-block .message:hover .submission-title,.oma-asiointi-block .message:hover .message-title{text-decoration:none}.oma-asiointi-block .message{padding-right:var(--spacing-5-xl)}.oma-asiointi{margin-top:var(--spacing-l)}.oma-asiointi ul{padding:0}.oma-asiointi__list{padding-bottom:var(--spacing-l);padding-top:var(--spacing-l)}.oma-asiointi__list h2{margin-bottom:var(--spacing-m);margin-top:0}.oma-asiointi #oma-asiointi__sent{padding-top:var(--spacing-s)}.oma-asiointi .oma-asiointi-infoboxes-container .oma-asiointi-infoboxes{gap:var(--spacing-3-xl);margin:var(--spacing-2-xl) 0}@media(min-width: 768px){.oma-asiointi .oma-asiointi-infoboxes-container .oma-asiointi-infoboxes{display:flex}}.oma-asiointi .oma-asiointi-infoboxes-container .oma-asiointi-infobox{background-color:var(--color-info-light);flex:1;margin-bottom:var(--spacing-layout-2-xs);padding:var(--spacing-l)}@media(min-width: 768px){.oma-asiointi .oma-asiointi-infoboxes-container .oma-asiointi-infobox{margin-bottom:0}}.oma-asiointi .oma-asiointi-infoboxes-container .oma-asiointi-infobox:last-of-type{margin-bottom:0}.oma-asiointi .oma-asiointi-infoboxes-container .oma-asiointi-infobox--link{display:flex;margin-top:var(--spacing-layout-2-xs)}.oma-asiointi .oma-asiointi-infoboxes-container .oma-asiointi-infobox--link a{font-size:1.25rem}.oma-asiointi .oma-asiointi-infoboxes-container .oma-asiointi-infobox h3{margin-top:0}.asiointirooli-block{background-color:var(--color-black);color:var(--color-white);font-weight:500;margin-bottom:16px;padding:var(--spacing-2-xs)}.asiointirooli-block a{color:var(--color-white)}.asiointirooli-block .link--switch-role,.asiointirooli-block .link--stop-mandate{color:var(--color-white);margin-left:var(--spacing-layout-s)}@media(max-width: 768px){.asiointirooli-block .link--switch-role,.asiointirooli-block .link--stop-mandate{display:block;margin-left:0}}.asiointirooli-block .link--stop-mandate::before{--icon-size: 1.5rem;background-color:#000;background-size:contain;content:"";display:inline-block;height:calc(var(--line-height) * 1em);height:var(--icon-size, calc(var(--line-height) * 1em));-webkit-mask-image:var(--hel-icon--cross-circle-fill);mask-image:var(--hel-icon--cross-circle-fill);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);-webkit-mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));vertical-align:bottom;width:calc(var(--line-height) * 1em);width:var(--icon-size, calc(var(--line-height) * 1em));background-color:var(--color-white);content:"";display:inline-block;margin-right:10px;-webkit-mask-image:url('data:image/svg+xml, ');mask-image:url('data:image/svg+xml, ')}.asiointirooli-block .link--switch-role::before{--icon-size: 1.5rem;background-color:#000;background-size:contain;content:"";display:inline-block;height:calc(var(--line-height) * 1em);height:var(--icon-size, calc(var(--line-height) * 1em));-webkit-mask-image:var(--hel-icon--swap-user);mask-image:var(--hel-icon--swap-user);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);-webkit-mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));vertical-align:bottom;width:calc(var(--line-height) * 1em);width:var(--icon-size, calc(var(--line-height) * 1em));background-color:var(--color-white);content:"";display:inline-block;margin-right:10px;-webkit-mask-image:url('data:image/svg+xml, ');mask-image:url('data:image/svg+xml, ')}#grants-mandate-type .form-actions{display:flex;flex-direction:column;flex-wrap:wrap;justify-content:flex-start;width:100%}@media(min-width: 576px){#grants-mandate-type .form-actions{flex-direction:row;margin-left:calc(-1*var(--spacing-m));width:calc(100% + var(--spacing-m))}}#grants-mandate-type .form-actions .hds-card--applicant-role{margin-bottom:var(--spacing-l);position:relative;width:100%}@media(min-width: 576px){#grants-mandate-type .form-actions .hds-card--applicant-role{margin-left:var(--spacing-m);width:calc(50% - var(--spacing-m))}}@media(min-width: 992px){#grants-mandate-type .form-actions .hds-card--applicant-role{width:calc(33.3333333333% - var(--spacing-m))}}#grants-mandate-type .form-actions .hds-card--applicant-role .hds-card__body{align-content:space-between;height:100%}#grants-mandate-type .form-actions .hds-card--applicant-role .hds-card--mandate-card-content{display:grid;gap:var(--spacing-m);grid-gap:var(--spacing-m)} diff --git a/public/themes/custom/hdbt_subtheme/dist/js/dialog.min.js b/public/themes/custom/hdbt_subtheme/dist/js/dialog.min.js deleted file mode 100644 index 807aa16578..0000000000 --- a/public/themes/custom/hdbt_subtheme/dist/js/dialog.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(){var t;!function(t,Drupal,drupalSettings){drupalSettings.dialog={autoOpen:!0,dialogClass:"",buttonClass:"button",buttonPrimaryClass:"button--primary",close:function(t){Drupal.dialog(t.target).close(),Drupal.detachBehaviors(t.target,null,"unload")}},Drupal.dialog=function(i,e){const s=t(i),o={open:!1,returnValue:undefined};function a(i){i=t.extend({},drupalSettings.dialog,e,i),t(window).trigger("dialog:beforecreate",[o,s,i]),s.dialog(i),o.open=!0,t(window).trigger("dialog:aftercreate",[o,s,i])}return o.show=function(){a({modal:!1})},o.showModal=function(){a({modal:!0})},o.close=function(i){t(window).trigger("dialog:beforeclose",[o,s]),s.dialog("close"),o.returnValue=i,o.open=!1,t(window).trigger("dialog:afterclose",[o,s])},o}}(jQuery,Drupal,drupalSettings),(t=jQuery).widget("ui.dialog",{version:"1.13.2",options:{appendTo:"body",autoOpen:!0,buttons:[],classes:{"ui-dialog":"ui-corner-all","ui-dialog-titlebar":"ui-corner-all"},closeOnEscape:!0,closeText:"Close",draggable:!0,hide:null,height:"auto",maxHeight:null,maxWidth:null,minHeight:150,minWidth:150,modal:!1,position:{my:"center",at:"center",of:window,collision:"fit",using(i){const e=t(this).css(i).offset().top;e<0&&t(this).css("top",i.top-e)}},resizable:!0,show:null,title:null,width:300,beforeClose:null,close:null,drag:null,dragStart:null,dragStop:null,focus:null,open:null,resize:null,resizeStart:null,resizeStop:null},sizeRelatedOptions:{buttons:!0,height:!0,maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0,width:!0},resizableRelatedOptions:{maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0},_create(){this.originalCss={display:this.element[0].style.display,width:this.element[0].style.width,minHeight:this.element[0].style.minHeight,maxHeight:this.element[0].style.maxHeight,height:this.element[0].style.height},this.originalPosition={parent:this.element.parent(),index:this.element.parent().children().index(this.element)},this.originalTitle=this.element.attr("title"),null==this.options.title&&null!=this.originalTitle&&(this.options.title=this.originalTitle),this.options.disabled&&(this.options.disabled=!1),this._createWrapper(),this.element.show().removeAttr("title").appendTo(this.uiDialog),this._addClass("ui-dialog-content","ui-widget-content"),this._createTitlebar(),this._createButtonPane(),this.options.draggable&&t.fn.draggable&&this._makeDraggable(),this.options.resizable&&t.fn.resizable&&this._makeResizable(),this._isOpen=!1,this._trackFocus()},_init(){this.options.autoOpen&&this.open()},_appendTo(){const i=this.options.appendTo;return i&&(i.jquery||i.nodeType)?t(i):this.document.find(i||"body").eq(0)},_destroy(){let t;const{originalPosition:i}=this;this._untrackInstance(),this._destroyOverlay(),this.element.removeUniqueId().css(this.originalCss).detach(),this.uiDialog.remove(),this.originalTitle&&this.element.attr("title",this.originalTitle),t=i.parent.children().eq(i.index),t.length&&t[0]!==this.element[0]?t.before(this.element):i.parent.append(this.element)},widget(){return this.uiDialog},disable:t.noop,enable:t.noop,close(i){const e=this;this._isOpen&&!1!==this._trigger("beforeClose",i)&&(this._isOpen=!1,this._focusedElement=null,this._destroyOverlay(),this._untrackInstance(),this.opener.filter(":focusable").trigger("focus").length||t.ui.safeBlur(t.ui.safeActiveElement(this.document[0])),this._hide(this.uiDialog,this.options.hide,(function(){e._trigger("close",i)})))},isOpen(){return this._isOpen},moveToTop(){this._moveToTop()},_moveToTop(i,e){let s=!1;const o=this.uiDialog.siblings(".ui-front:visible").map((function(){return+t(this).css("z-index")})).get(),a=Math.max.apply(null,o);return a>=+this.uiDialog.css("z-index")&&(this.uiDialog.css("z-index",a+1),s=!0),s&&!e&&this._trigger("focus",i),s},open(){const i=this;this._isOpen?this._moveToTop()&&this._focusTabbable():(this._isOpen=!0,this.opener=t(t.ui.safeActiveElement(this.document[0])),this._size(),this._position(),this._createOverlay(),this._moveToTop(null,!0),this.overlay&&this.overlay.css("z-index",this.uiDialog.css("z-index")-1),this._show(this.uiDialog,this.options.show,(function(){i._focusTabbable(),i._trigger("focus")})),this._makeFocusTarget(),this._trigger("open"))},_focusTabbable(){let t=this._focusedElement;t||(t=this.element.find("[autofocus]")),t.length||(t=this.element.find(":tabbable")),t.length||(t=this.uiDialogButtonPane.find(":tabbable")),t.length||(t=this.uiDialogTitlebarClose.filter(":tabbable")),t.length||(t=this.uiDialog),t.eq(0).trigger("focus")},_restoreTabbableFocus(){const i=t.ui.safeActiveElement(this.document[0]);this.uiDialog[0]===i||t.contains(this.uiDialog[0],i)||this._focusTabbable()},_keepFocus(t){t.preventDefault(),this._restoreTabbableFocus(),this._delay(this._restoreTabbableFocus)},_createWrapper(){this.uiDialog=t("
").hide().attr({tabIndex:-1,role:"dialog"}).appendTo(this._appendTo()),this._addClass(this.uiDialog,"ui-dialog","ui-widget ui-widget-content ui-front"),this._on(this.uiDialog,{keydown(i){if(this.options.closeOnEscape&&!i.isDefaultPrevented()&&i.keyCode&&i.keyCode===t.ui.keyCode.ESCAPE)return i.preventDefault(),void this.close(i);if(i.keyCode!==t.ui.keyCode.TAB||i.isDefaultPrevented())return;const e=this.uiDialog.find(":tabbable"),s=e.first(),o=e.last();i.target!==o[0]&&i.target!==this.uiDialog[0]||i.shiftKey?i.target!==s[0]&&i.target!==this.uiDialog[0]||!i.shiftKey||(this._delay((function(){o.trigger("focus")})),i.preventDefault()):(this._delay((function(){s.trigger("focus")})),i.preventDefault())},mousedown(t){this._moveToTop(t)&&this._focusTabbable()}}),this.element.find("[aria-describedby]").length||this.uiDialog.attr({"aria-describedby":this.element.uniqueId().attr("id")})},_createTitlebar(){let i;this.uiDialogTitlebar=t("
"),this._addClass(this.uiDialogTitlebar,"ui-dialog-titlebar","ui-widget-header ui-helper-clearfix"),this._on(this.uiDialogTitlebar,{mousedown(i){t(i.target).closest(".ui-dialog-titlebar-close")||this.uiDialog.trigger("focus")}}),this.uiDialogTitlebarClose=t("").button({label:t("").text(this.options.closeText).html(),icon:"ui-icon-closethick",showLabel:!1}).appendTo(this.uiDialogTitlebar),this._addClass(this.uiDialogTitlebarClose,"ui-dialog-titlebar-close"),this._on(this.uiDialogTitlebarClose,{click(t){t.preventDefault(),this.close(t)}}),i=t("

").uniqueId().prependTo(this.uiDialogTitlebar),this._addClass(i,"ui-dialog-title"),this._title(i),this.uiDialogTitlebar.prependTo(this.uiDialog),this.uiDialog.attr({"aria-labelledby":i.attr("id")})},_title(i){this.options.title?(i.text(this.options.title),t('').prependTo(i)):i.html(" ")},_createButtonPane(){this.uiDialogButtonPane=t("
"),this._addClass(this.uiDialogButtonPane,"ui-dialog-buttonpane","ui-widget-content ui-helper-clearfix"),this.uiButtonSet=t("
").appendTo(this.uiDialogButtonPane),this._addClass(this.uiButtonSet,"ui-dialog-buttonset"),this._createButtons()},_createButtons(){const i=this,{buttons:e}=this.options;this.uiDialogButtonPane.remove(),this.uiButtonSet.empty(),t.isEmptyObject(e)||Array.isArray(e)&&!e.length?this._removeClass(this.uiDialog,"ui-dialog-buttons"):(t.each(e,(function(e,s){let o,a;s="function"==typeof s?{click:s,text:e}:s,s=t.extend({type:"button"},s),o=s.click,a={icon:s.icon,iconPosition:s.iconPosition,showLabel:s.showLabel,icons:s.icons,text:s.text},delete s.click,delete s.icon,delete s.iconPosition,delete s.showLabel,delete s.icons,"boolean"==typeof s.text&&delete s.text,t("",s).button(a).addClass(` hds-button hds-button--${s.buttonType?s.buttonType:"primary"}`).appendTo(i.uiButtonSet).on("click",(function(){o.apply(i.element[0],arguments)}))})),this._addClass(this.uiDialog,"ui-dialog-buttons"),this.uiDialogButtonPane.appendTo(this.uiDialog))},_makeDraggable(){const i=this,{options:e}=this;function s(t){return{position:t.position,offset:t.offset}}this.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start(e,o){i._addClass(t(this),"ui-dialog-dragging"),i._blockFrames(),i._trigger("dragStart",e,s(o))},drag(t,e){i._trigger("drag",t,s(e))},stop(o,a){const n=a.offset.left-i.document.scrollLeft(),l=a.offset.top-i.document.scrollTop();e.position={my:"left top",at:`left${n>=0?"+":""}${n} top${l>=0?"+":""}${l}`,of:i.window},i._removeClass(t(this),"ui-dialog-dragging"),i._unblockFrames(),i._trigger("dragStop",o,s(a))}})},_makeResizable(){const i=this,{options:e}=this,s=e.resizable,o=this.uiDialog.css("position"),a="string"==typeof s?s:"n,e,s,w,se,sw,ne,nw";function n(t){return{originalPosition:t.originalPosition,originalSize:t.originalSize,position:t.position,size:t.size}}this.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:this.element,maxWidth:e.maxWidth,maxHeight:e.maxHeight,minWidth:e.minWidth,minHeight:this._minHeight(),handles:a,start(e,s){i._addClass(t(this),"ui-dialog-resizing"),i._blockFrames(),i._trigger("resizeStart",e,n(s))},resize(t,e){i._trigger("resize",t,n(e))},stop(s,o){const a=i.uiDialog.offset(),l=a.left-i.document.scrollLeft(),h=a.top-i.document.scrollTop();e.height=i.uiDialog.height(),e.width=i.uiDialog.width(),e.position={my:"left top",at:`left${l>=0?"+":""}${l} top${h>=0?"+":""}${h}`,of:i.window},i._removeClass(t(this),"ui-dialog-resizing"),i._unblockFrames(),i._trigger("resizeStop",s,n(o))}}).css("position",o)},_trackFocus(){this._on(this.widget(),{focusin(i){this._makeFocusTarget(),this._focusedElement=t(i.target)}})},_makeFocusTarget(){this._untrackInstance(),this._trackingInstances().unshift(this)},_untrackInstance(){const i=this._trackingInstances(),e=t.inArray(this,i);-1!==e&&i.splice(e,1)},_trackingInstances(){let t=this.document.data("ui-dialog-instances");return t||(t=[],this.document.data("ui-dialog-instances",t)),t},_minHeight(){const{options:t}=this;return"auto"===t.height?t.minHeight:Math.min(t.minHeight,t.height)},_position(){const t=this.uiDialog.is(":visible");t||this.uiDialog.show(),this.uiDialog.position(this.options.position),t||this.uiDialog.hide()},_setOptions(i){const e=this;let s=!1;const o={};t.each(i,(function(t,i){e._setOption(t,i),t in e.sizeRelatedOptions&&(s=!0),t in e.resizableRelatedOptions&&(o[t]=i)})),s&&(this._size(),this._position()),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option",o)},_setOption(i,e){let s,o;const{uiDialog:a}=this;"disabled"!==i&&(this._super(i,e),"appendTo"===i&&this.uiDialog.appendTo(this._appendTo()),"buttons"===i&&this._createButtons(),"closeText"===i&&this.uiDialogTitlebarClose.button({label:t("").text(`${this.options.closeText}`).html()}),"draggable"===i&&(s=a.is(":data(ui-draggable)"),s&&!e&&a.draggable("destroy"),!s&&e&&this._makeDraggable()),"position"===i&&this._position(),"resizable"===i&&(o=a.is(":data(ui-resizable)"),o&&!e&&a.resizable("destroy"),o&&"string"==typeof e&&a.resizable("option","handles",e),o||!1===e||this._makeResizable()),"title"===i&&this._title(this.uiDialogTitlebar.find(".ui-dialog-title")))},_size(){let t,i,e;const{options:s}=this;this.element.show().css({width:"auto",minHeight:0,maxHeight:"none",height:0}),s.minWidth>s.width&&(s.width=s.minWidth),t=this.uiDialog.css({height:"auto",width:s.width}).outerHeight(),i=Math.max(0,s.minHeight-t),e="number"==typeof s.maxHeight?Math.max(0,s.maxHeight-t):"none","auto"===s.height?this.element.css({minHeight:i,maxHeight:e,height:"auto"}):this.element.height(Math.max(0,s.height-t)),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())},_blockFrames(){this.iframeBlocks=this.document.find("iframe").map((function(){const i=t(this);return t("
").css({position:"absolute",width:i.outerWidth(),height:i.outerHeight()}).appendTo(i.parent()).offset(i.offset())[0]}))},_unblockFrames(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_allowInteraction:i=>!!t(i.target).closest(".ui-dialog").length||!!t(i.target).closest(".ui-datepicker").length,_createOverlay(){if(!this.options.modal)return;const i=t.fn.jquery.substring(0,4);let e=!0;this._delay((function(){e=!1})),this.document.data("ui-dialog-overlays")||this.document.on("focusin.ui-dialog",function(t){if(e)return;const s=this._trackingInstances()[0];s._allowInteraction(t)||(t.preventDefault(),s._focusTabbable(),"3.4."!==i&&"3.5."!==i||s._delay(s._restoreTabbableFocus))}.bind(this)),this.overlay=t("
").appendTo(this._appendTo()),this._addClass(this.overlay,null,"ui-widget-overlay ui-front"),this._on(this.overlay,{mousedown:"_keepFocus"}),this.document.data("ui-dialog-overlays",(this.document.data("ui-dialog-overlays")||0)+1)},_destroyOverlay(){if(this.options.modal&&this.overlay){const t=this.document.data("ui-dialog-overlays")-1;t?this.document.data("ui-dialog-overlays",t):(this.document.off("focusin.ui-dialog"),this.document.removeData("ui-dialog-overlays")),this.overlay.remove(),this.overlay=null}}}),!1!==t.uiBackCompat&&t.widget("ui.dialog",t.ui.dialog,{options:{dialogClass:""},_createWrapper(){this._super(),this.uiDialog.addClass(this.options.dialogClass)},_setOption(t,i){"dialogClass"===t&&this.uiDialog.removeClass(this.options.dialogClass).addClass(i),this._superApply(arguments)}}),t.ui.dialog}(); \ No newline at end of file diff --git a/public/themes/custom/hdbt_subtheme/hdbt_subtheme.info.yml b/public/themes/custom/hdbt_subtheme/hdbt_subtheme.info.yml index d0ffb5be1c..861f6de9a0 100644 --- a/public/themes/custom/hdbt_subtheme/hdbt_subtheme.info.yml +++ b/public/themes/custom/hdbt_subtheme/hdbt_subtheme.info.yml @@ -32,9 +32,6 @@ libraries: - hdbt_subtheme/global-scripting libraries-override: - core/drupal.dialog: - js: - misc/dialog/dialog.js: dist/js/dialog.min.js webform/webform.element.help: js: js/webform.element.help.js: dist/js/webform.element.help.min.js diff --git a/public/themes/custom/hdbt_subtheme/src/js/dialog.js b/public/themes/custom/hdbt_subtheme/src/js/dialog.js deleted file mode 100644 index ca09c5b16c..0000000000 --- a/public/themes/custom/hdbt_subtheme/src/js/dialog.js +++ /dev/null @@ -1,1003 +0,0 @@ -/** - * DO NOT EDIT THIS FILE. - * See the following change record for more information, - * https://www.drupal.org/node/2815083 - * @preserve - * */ - -(function ($, Drupal, drupalSettings) { - drupalSettings.dialog = { - autoOpen: true, - dialogClass: "", - buttonClass: "button", - buttonPrimaryClass: "button--primary", - close: function close(event) { - Drupal.dialog(event.target).close(); - Drupal.detachBehaviors(event.target, null, "unload"); - }, - }; - - Drupal.dialog = function (element, options) { - let undef; - const $element = $(element); - const dialog = { - open: false, - returnValue: undef, - }; - - function openDialog(settings) { - settings = $.extend({}, drupalSettings.dialog, options, settings); - $(window).trigger("dialog:beforecreate", [dialog, $element, settings]); - $element.dialog(settings); - dialog.open = true; - $(window).trigger("dialog:aftercreate", [dialog, $element, settings]); - } - - function closeDialog(value) { - $(window).trigger("dialog:beforeclose", [dialog, $element]); - $element.dialog("close"); - dialog.returnValue = value; - dialog.open = false; - $(window).trigger("dialog:afterclose", [dialog, $element]); - } - - dialog.show = function () { - openDialog({ - modal: false, - }); - }; - - dialog.showModal = function () { - openDialog({ - modal: true, - }); - }; - - dialog.close = closeDialog; - return dialog; - }; -})(jQuery, Drupal, drupalSettings); - -(function (factory) { - if (typeof define === "function" && define.amd) { - factory(jQuery); - } else { - // Browser globals - factory(jQuery); - } -})(function ($) { - $.widget("ui.dialog", { - version: "1.13.2", - options: { - appendTo: "body", - autoOpen: true, - buttons: [], - classes: { - "ui-dialog": "ui-corner-all", - "ui-dialog-titlebar": "ui-corner-all", - }, - closeOnEscape: true, - closeText: "Close", - draggable: true, - hide: null, - height: "auto", - maxHeight: null, - maxWidth: null, - minHeight: 150, - minWidth: 150, - modal: false, - position: { - my: "center", - at: "center", - of: window, - collision: "fit", - - // Ensure the titlebar is always visible - using(pos) { - const topOffset = $(this).css(pos).offset().top; - if (topOffset < 0) { - $(this).css("top", pos.top - topOffset); - } - }, - }, - resizable: true, - show: null, - title: null, - width: 300, - - // Callbacks - beforeClose: null, - close: null, - drag: null, - dragStart: null, - dragStop: null, - focus: null, - open: null, - resize: null, - resizeStart: null, - resizeStop: null, - }, - - sizeRelatedOptions: { - buttons: true, - height: true, - maxHeight: true, - maxWidth: true, - minHeight: true, - minWidth: true, - width: true, - }, - - resizableRelatedOptions: { - maxHeight: true, - maxWidth: true, - minHeight: true, - minWidth: true, - }, - - _create() { - this.originalCss = { - display: this.element[0].style.display, - width: this.element[0].style.width, - minHeight: this.element[0].style.minHeight, - maxHeight: this.element[0].style.maxHeight, - height: this.element[0].style.height, - }; - this.originalPosition = { - parent: this.element.parent(), - index: this.element.parent().children().index(this.element), - }; - this.originalTitle = this.element.attr("title"); - if (this.options.title == null && this.originalTitle != null) { - this.options.title = this.originalTitle; - } - - // Dialogs can't be disabled - if (this.options.disabled) { - this.options.disabled = false; - } - - this._createWrapper(); - - this.element.show().removeAttr("title").appendTo(this.uiDialog); - - this._addClass("ui-dialog-content", "ui-widget-content"); - - this._createTitlebar(); - - this._createButtonPane(); - - if (this.options.draggable && $.fn.draggable) { - this._makeDraggable(); - } - if (this.options.resizable && $.fn.resizable) { - this._makeResizable(); - } - - this._isOpen = false; - - this._trackFocus(); - }, - - _init() { - if (this.options.autoOpen) { - this.open(); - } - }, - - _appendTo() { - const element = this.options.appendTo; - if (element && (element.jquery || element.nodeType)) { - return $(element); - } - return this.document.find(element || "body").eq(0); - }, - - _destroy() { - let next; - const { originalPosition } = this; - - this._untrackInstance(); - this._destroyOverlay(); - - this.element - .removeUniqueId() - .css(this.originalCss) - - // Without detaching first, the following becomes really slow - .detach(); - - this.uiDialog.remove(); - - if (this.originalTitle) { - this.element.attr("title", this.originalTitle); - } - next = originalPosition.parent.children().eq(originalPosition.index); - - // Don't try to place the dialog next to itself (#8613) - if (next.length && next[0] !== this.element[0]) { - next.before(this.element); - } else { - originalPosition.parent.append(this.element); - } - }, - - widget() { - return this.uiDialog; - }, - - disable: $.noop, - enable: $.noop, - - close(event) { - const that = this; - - if (!this._isOpen || this._trigger("beforeClose", event) === false) { - return; - } - - this._isOpen = false; - this._focusedElement = null; - this._destroyOverlay(); - this._untrackInstance(); - - if (!this.opener.filter(":focusable").trigger("focus").length) { - // Hiding a focused element doesn't trigger blur in WebKit - // so in case we have nothing to focus on, explicitly blur the active element - // https://bugs.webkit.org/show_bug.cgi?id=47182 - $.ui.safeBlur($.ui.safeActiveElement(this.document[0])); - } - - this._hide(this.uiDialog, this.options.hide, function () { - that._trigger("close", event); - }); - }, - - isOpen() { - return this._isOpen; - }, - - moveToTop() { - this._moveToTop(); - }, - - _moveToTop(event, silent) { - let moved = false; - const zIndices = this.uiDialog - .siblings(".ui-front:visible") - .map(function () { - return +$(this).css("z-index"); - }) - .get(); - const zIndexMax = Math.max.apply(null, zIndices); - - if (zIndexMax >= +this.uiDialog.css("z-index")) { - this.uiDialog.css("z-index", zIndexMax + 1); - moved = true; - } - - if (moved && !silent) { - this._trigger("focus", event); - } - return moved; - }, - - open() { - const that = this; - if (this._isOpen) { - if (this._moveToTop()) { - this._focusTabbable(); - } - return; - } - - this._isOpen = true; - this.opener = $($.ui.safeActiveElement(this.document[0])); - - this._size(); - this._position(); - this._createOverlay(); - this._moveToTop(null, true); - - // Ensure the overlay is moved to the top with the dialog, but only when - // opening. The overlay shouldn't move after the dialog is open so that - // modeless dialogs opened after the modal dialog stack properly. - if (this.overlay) { - this.overlay.css("z-index", this.uiDialog.css("z-index") - 1); - } - - this._show(this.uiDialog, this.options.show, function () { - that._focusTabbable(); - that._trigger("focus"); - }); - - // Track the dialog immediately upon opening in case a focus event - // somehow occurs outside of the dialog before an element inside the - // dialog is focused (#10152) - this._makeFocusTarget(); - - this._trigger("open"); - }, - - _focusTabbable() { - // Set focus to the first match: - // 1. An element that was focused previously - // 2. First element inside the dialog matching [autofocus] - // 3. Tabbable element inside the content element - // 4. Tabbable element inside the buttonpane - // 5. The close button - // 6. The dialog itself - let hasFocus = this._focusedElement; - if (!hasFocus) { - hasFocus = this.element.find("[autofocus]"); - } - if (!hasFocus.length) { - hasFocus = this.element.find(":tabbable"); - } - if (!hasFocus.length) { - hasFocus = this.uiDialogButtonPane.find(":tabbable"); - } - if (!hasFocus.length) { - hasFocus = this.uiDialogTitlebarClose.filter(":tabbable"); - } - if (!hasFocus.length) { - hasFocus = this.uiDialog; - } - hasFocus.eq(0).trigger("focus"); - }, - - _restoreTabbableFocus() { - const activeElement = $.ui.safeActiveElement(this.document[0]); - const isActive = - this.uiDialog[0] === activeElement || - $.contains(this.uiDialog[0], activeElement); - if (!isActive) { - this._focusTabbable(); - } - }, - - _keepFocus(event) { - event.preventDefault(); - this._restoreTabbableFocus(); - - // support: IE - // IE <= 8 doesn't prevent moving focus even with event.preventDefault() - // so we check again later - this._delay(this._restoreTabbableFocus); - }, - - _createWrapper() { - this.uiDialog = $("
") - .hide() - .attr({ - // Setting tabIndex makes the div focusable - tabIndex: -1, - role: "dialog", - }) - .appendTo(this._appendTo()); - - this._addClass( - this.uiDialog, - "ui-dialog", - "ui-widget ui-widget-content ui-front", - ); - this._on(this.uiDialog, { - keydown(event) { - if ( - this.options.closeOnEscape && - !event.isDefaultPrevented() && - event.keyCode && - event.keyCode === $.ui.keyCode.ESCAPE - ) { - event.preventDefault(); - this.close(event); - return; - } - - // Prevent tabbing out of dialogs - if ( - event.keyCode !== $.ui.keyCode.TAB || - event.isDefaultPrevented() - ) { - return; - } - const tabbables = this.uiDialog.find(":tabbable"); - const first = tabbables.first(); - const last = tabbables.last(); - - if ( - (event.target === last[0] || event.target === this.uiDialog[0]) && - !event.shiftKey - ) { - this._delay(function () { - first.trigger("focus"); - }); - event.preventDefault(); - } else if ( - (event.target === first[0] || event.target === this.uiDialog[0]) && - event.shiftKey - ) { - this._delay(function () { - last.trigger("focus"); - }); - event.preventDefault(); - } - }, - mousedown(event) { - if (this._moveToTop(event)) { - this._focusTabbable(); - } - }, - }); - - // We assume that any existing aria-describedby attribute means - // that the dialog content is marked up properly - // otherwise we brute force the content as the description - if (!this.element.find("[aria-describedby]").length) { - this.uiDialog.attr({ - "aria-describedby": this.element.uniqueId().attr("id"), - }); - } - }, - - _createTitlebar() { - let uiDialogTitle; - - this.uiDialogTitlebar = $("
"); - this._addClass( - this.uiDialogTitlebar, - "ui-dialog-titlebar", - "ui-widget-header ui-helper-clearfix", - ); - this._on(this.uiDialogTitlebar, { - mousedown(event) { - // Don't prevent click on close button (#8838) - // Focusing a dialog that is partially scrolled out of view - // causes the browser to scroll it into view, preventing the click event - if (!$(event.target).closest(".ui-dialog-titlebar-close")) { - // Dialog isn't getting focus when dragging (#8063) - this.uiDialog.trigger("focus"); - } - }, - }); - - // Support: IE - // Use type="button" to prevent enter keypresses in textboxes from closing the - // dialog in IE (#9312) - this.uiDialogTitlebarClose = $("") - .button({ - label: $("").text(this.options.closeText).html(), - icon: "ui-icon-closethick", - showLabel: false, - }) - .appendTo(this.uiDialogTitlebar); - - this._addClass(this.uiDialogTitlebarClose, "ui-dialog-titlebar-close"); - this._on(this.uiDialogTitlebarClose, { - click(event) { - event.preventDefault(); - this.close(event); - }, - }); - let uiIcon; - uiDialogTitle = $("

").uniqueId().prependTo(this.uiDialogTitlebar); - - this._addClass(uiDialogTitle, "ui-dialog-title"); - this._title(uiDialogTitle); - - this.uiDialogTitlebar.prependTo(this.uiDialog); - - this.uiDialog.attr({ - "aria-labelledby": uiDialogTitle.attr("id"), - }); - }, - - _title(title) { - if (this.options.title) { - title.text(this.options.title); - $( - '', - ).prependTo(title); - } else { - title.html(" "); - } - }, - - _createButtonPane() { - this.uiDialogButtonPane = $("
"); - this._addClass( - this.uiDialogButtonPane, - "ui-dialog-buttonpane", - "ui-widget-content ui-helper-clearfix", - ); - - this.uiButtonSet = $("
").appendTo(this.uiDialogButtonPane); - this._addClass(this.uiButtonSet, "ui-dialog-buttonset"); - - this._createButtons(); - }, - - _createButtons() { - const that = this; - const { buttons } = this.options; - - // If we already have a button pane, remove it - this.uiDialogButtonPane.remove(); - this.uiButtonSet.empty(); - - if ( - $.isEmptyObject(buttons) || - (Array.isArray(buttons) && !buttons.length) - ) { - this._removeClass(this.uiDialog, "ui-dialog-buttons"); - return; - } - - $.each(buttons, function (name, props) { - let click; - let buttonOptions; - props = - typeof props === "function" ? { click: props, text: name } : props; - - // Default to a non-submitting button - props = $.extend({ type: "button" }, props); - // Change the context for the click callback to be the main element - click = props.click; - buttonOptions = { - icon: props.icon, - iconPosition: props.iconPosition, - showLabel: props.showLabel, - - // Deprecated options - icons: props.icons, - text: props.text, - }; - - delete props.click; - delete props.icon; - delete props.iconPosition; - delete props.showLabel; - - // Deprecated options - delete props.icons; - if (typeof props.text === "boolean") { - delete props.text; - } - - $("", props) - .button(buttonOptions) - .addClass( - ` hds-button hds-button--${ - props.buttonType ? props.buttonType : "primary" - }`, - ) - .appendTo(that.uiButtonSet) - .on("click", function () { - click.apply(that.element[0], arguments); - }); - }); - this._addClass(this.uiDialog, "ui-dialog-buttons"); - this.uiDialogButtonPane.appendTo(this.uiDialog); - }, - - _makeDraggable() { - const that = this; - const { options } = this; - - function filteredUi(ui) { - return { - position: ui.position, - offset: ui.offset, - }; - } - - this.uiDialog.draggable({ - cancel: ".ui-dialog-content, .ui-dialog-titlebar-close", - handle: ".ui-dialog-titlebar", - containment: "document", - start(event, ui) { - that._addClass($(this), "ui-dialog-dragging"); - that._blockFrames(); - that._trigger("dragStart", event, filteredUi(ui)); - }, - drag(event, ui) { - that._trigger("drag", event, filteredUi(ui)); - }, - stop(event, ui) { - const left = ui.offset.left - that.document.scrollLeft(); - const top = ui.offset.top - that.document.scrollTop(); - - options.position = { - my: "left top", - at: - `left${left >= 0 ? "+" : ""}${left} ` + - `top${top >= 0 ? "+" : ""}${top}`, - of: that.window, - }; - that._removeClass($(this), "ui-dialog-dragging"); - that._unblockFrames(); - that._trigger("dragStop", event, filteredUi(ui)); - }, - }); - }, - - _makeResizable() { - const that = this; - const { options } = this; - const handles = options.resizable; - - // .ui-resizable has position: relative defined in the stylesheet - // but dialogs have to use absolute or fixed positioning - const position = this.uiDialog.css("position"); - const resizeHandles = - typeof handles === "string" ? handles : "n,e,s,w,se,sw,ne,nw"; - - function filteredUi(ui) { - return { - originalPosition: ui.originalPosition, - originalSize: ui.originalSize, - position: ui.position, - size: ui.size, - }; - } - - this.uiDialog - .resizable({ - cancel: ".ui-dialog-content", - containment: "document", - alsoResize: this.element, - maxWidth: options.maxWidth, - maxHeight: options.maxHeight, - minWidth: options.minWidth, - minHeight: this._minHeight(), - handles: resizeHandles, - start(event, ui) { - that._addClass($(this), "ui-dialog-resizing"); - that._blockFrames(); - that._trigger("resizeStart", event, filteredUi(ui)); - }, - resize(event, ui) { - that._trigger("resize", event, filteredUi(ui)); - }, - stop(event, ui) { - const offset = that.uiDialog.offset(); - const left = offset.left - that.document.scrollLeft(); - const top = offset.top - that.document.scrollTop(); - - options.height = that.uiDialog.height(); - options.width = that.uiDialog.width(); - options.position = { - my: "left top", - at: - `left${left >= 0 ? "+" : ""}${left} ` + - `top${top >= 0 ? "+" : ""}${top}`, - of: that.window, - }; - that._removeClass($(this), "ui-dialog-resizing"); - that._unblockFrames(); - that._trigger("resizeStop", event, filteredUi(ui)); - }, - }) - .css("position", position); - }, - - _trackFocus() { - this._on(this.widget(), { - focusin(event) { - this._makeFocusTarget(); - this._focusedElement = $(event.target); - }, - }); - }, - - _makeFocusTarget() { - this._untrackInstance(); - this._trackingInstances().unshift(this); - }, - - _untrackInstance() { - const instances = this._trackingInstances(); - const exists = $.inArray(this, instances); - if (exists !== -1) { - instances.splice(exists, 1); - } - }, - - _trackingInstances() { - let instances = this.document.data("ui-dialog-instances"); - if (!instances) { - instances = []; - this.document.data("ui-dialog-instances", instances); - } - return instances; - }, - - _minHeight() { - const { options } = this; - - return options.height === "auto" - ? options.minHeight - : Math.min(options.minHeight, options.height); - }, - - _position() { - // Need to show the dialog to get the actual offset in the position plugin - const isVisible = this.uiDialog.is(":visible"); - if (!isVisible) { - this.uiDialog.show(); - } - this.uiDialog.position(this.options.position); - if (!isVisible) { - this.uiDialog.hide(); - } - }, - - _setOptions(options) { - const that = this; - let resize = false; - const resizableOptions = {}; - - $.each(options, function (key, value) { - that._setOption(key, value); - - if (key in that.sizeRelatedOptions) { - resize = true; - } - if (key in that.resizableRelatedOptions) { - resizableOptions[key] = value; - } - }); - - if (resize) { - this._size(); - this._position(); - } - if (this.uiDialog.is(":data(ui-resizable)")) { - this.uiDialog.resizable("option", resizableOptions); - } - }, - - _setOption(key, value) { - let isDraggable; - let isResizable; - const { uiDialog } = this; - - if (key === "disabled") { - return; - } - - this._super(key, value); - - if (key === "appendTo") { - this.uiDialog.appendTo(this._appendTo()); - } - - if (key === "buttons") { - this._createButtons(); - } - - if (key === "closeText") { - this.uiDialogTitlebarClose.button({ - // Ensure that we always pass a string - label: $("").text(`${this.options.closeText}`).html(), - }); - } - - if (key === "draggable") { - isDraggable = uiDialog.is(":data(ui-draggable)"); - if (isDraggable && !value) { - uiDialog.draggable("destroy"); - } - - if (!isDraggable && value) { - this._makeDraggable(); - } - } - - if (key === "position") { - this._position(); - } - - if (key === "resizable") { - // currently resizable, becoming non-resizable - isResizable = uiDialog.is(":data(ui-resizable)"); - if (isResizable && !value) { - uiDialog.resizable("destroy"); - } - - // Currently resizable, changing handles - if (isResizable && typeof value === "string") { - uiDialog.resizable("option", "handles", value); - } - - // Currently non-resizable, becoming resizable - if (!isResizable && value !== false) { - this._makeResizable(); - } - } - - if (key === "title") { - this._title(this.uiDialogTitlebar.find(".ui-dialog-title")); - } - }, - - _size() { - // If the user has resized the dialog, the .ui-dialog and .ui-dialog-content - // divs will both have width and height set, so we need to reset them - let nonContentHeight; - let minContentHeight; - let maxContentHeight; - const { options } = this; - - // Reset content sizing - this.element.show().css({ - width: "auto", - minHeight: 0, - maxHeight: "none", - height: 0, - }); - - if (options.minWidth > options.width) { - options.width = options.minWidth; - } - - // Reset wrapper sizing - // determine the height of all the non-content elements - nonContentHeight = this.uiDialog - .css({ - height: "auto", - width: options.width, - }) - .outerHeight(); - minContentHeight = Math.max(0, options.minHeight - nonContentHeight); - maxContentHeight = - typeof options.maxHeight === "number" - ? Math.max(0, options.maxHeight - nonContentHeight) - : "none"; - - if (options.height === "auto") { - this.element.css({ - minHeight: minContentHeight, - maxHeight: maxContentHeight, - height: "auto", - }); - } else { - this.element.height(Math.max(0, options.height - nonContentHeight)); - } - - if (this.uiDialog.is(":data(ui-resizable)")) { - this.uiDialog.resizable("option", "minHeight", this._minHeight()); - } - }, - - _blockFrames() { - this.iframeBlocks = this.document.find("iframe").map(function () { - const iframe = $(this); - - return $("
") - .css({ - position: "absolute", - width: iframe.outerWidth(), - height: iframe.outerHeight(), - }) - .appendTo(iframe.parent()) - .offset(iframe.offset())[0]; - }); - }, - - _unblockFrames() { - if (this.iframeBlocks) { - this.iframeBlocks.remove(); - delete this.iframeBlocks; - } - }, - - _allowInteraction(event) { - if ($(event.target).closest(".ui-dialog").length) { - return true; - } - - // TODO: Remove hack when datepicker implements - // the .ui-front logic (#8989) - return !!$(event.target).closest(".ui-datepicker").length; - }, - - _createOverlay() { - if (!this.options.modal) { - return; - } - - const jqMinor = $.fn.jquery.substring(0, 4); - - // We use a delay in case the overlay is created from an - // event that we're going to be cancelling (#2804) - let isOpening = true; - this._delay(function () { - isOpening = false; - }); - - if (!this.document.data("ui-dialog-overlays")) { - // Prevent use of anchors and inputs - // This doesn't use `_on()` because it is a shared event handler - // across all open modal dialogs. - this.document.on( - "focusin.ui-dialog", - function (event) { - if (isOpening) { - return; - } - - const instance = this._trackingInstances()[0]; - if (!instance._allowInteraction(event)) { - event.preventDefault(); - instance._focusTabbable(); - - // Support: jQuery >=3.4 <3.6 only - // Focus re-triggering in jQuery 3.4/3.5 makes the original element - // have its focus event propagated last, breaking the re-targeting. - // Trigger focus in a delay in addition if needed to avoid the issue - // See https://github.com/jquery/jquery/issues/4382 - if (jqMinor === "3.4." || jqMinor === "3.5.") { - instance._delay(instance._restoreTabbableFocus); - } - } - }.bind(this), - ); - } - - this.overlay = $("
").appendTo(this._appendTo()); - - this._addClass(this.overlay, null, "ui-widget-overlay ui-front"); - this._on(this.overlay, { - mousedown: "_keepFocus", - }); - this.document.data( - "ui-dialog-overlays", - (this.document.data("ui-dialog-overlays") || 0) + 1, - ); - }, - - _destroyOverlay() { - if (!this.options.modal) { - return; - } - - if (this.overlay) { - const overlays = this.document.data("ui-dialog-overlays") - 1; - - if (!overlays) { - this.document.off("focusin.ui-dialog"); - this.document.removeData("ui-dialog-overlays"); - } else { - this.document.data("ui-dialog-overlays", overlays); - } - - this.overlay.remove(); - this.overlay = null; - } - }, - }); - - // DEPRECATED - // TODO: switch return back to widget declaration at top of file when this is removed - if ($.uiBackCompat !== false) { - // Backcompat for dialogClass option - $.widget("ui.dialog", $.ui.dialog, { - options: { - dialogClass: "", - }, - _createWrapper() { - this._super(); - this.uiDialog.addClass(this.options.dialogClass); - }, - _setOption(key, value) { - if (key === "dialogClass") { - this.uiDialog.removeClass(this.options.dialogClass).addClass(value); - } - this._superApply(arguments); - }, - }); - } - - return $.ui.dialog; -}); diff --git a/public/themes/custom/hdbt_subtheme/src/scss/06_components/__index.scss b/public/themes/custom/hdbt_subtheme/src/scss/06_components/__index.scss index 58bd78771f..fad523ef8b 100644 --- a/public/themes/custom/hdbt_subtheme/src/scss/06_components/__index.scss +++ b/public/themes/custom/hdbt_subtheme/src/scss/06_components/__index.scss @@ -1,5 +1,4 @@ @import 'block/_index'; -@import 'dialog/_index'; @import 'pages/_index'; @import 'layout/_index'; @import 'navigation/_index'; diff --git a/public/themes/custom/hdbt_subtheme/src/scss/06_components/dialog/__index.scss b/public/themes/custom/hdbt_subtheme/src/scss/06_components/dialog/__index.scss deleted file mode 100644 index a10b4b1b34..0000000000 --- a/public/themes/custom/hdbt_subtheme/src/scss/06_components/dialog/__index.scss +++ /dev/null @@ -1 +0,0 @@ -@import 'dialog'; diff --git a/public/themes/custom/hdbt_subtheme/src/scss/06_components/dialog/_dialog.scss b/public/themes/custom/hdbt_subtheme/src/scss/06_components/dialog/_dialog.scss deleted file mode 100644 index c8043dc305..0000000000 --- a/public/themes/custom/hdbt_subtheme/src/scss/06_components/dialog/_dialog.scss +++ /dev/null @@ -1,90 +0,0 @@ -.ui-widget-overlay { - z-index: 99; -} - -.ui-dialog { - .ui-button:hover { - border-width: 2px; - } - - .ui-dialog-titlebar-close { - top: var(--spacing-s); - z-index: 1001; - } - - .ui-dialog-buttonpane .ui-dialog-buttonset { - float: left; - } - - .ui-dialog-buttonpane { - padding: var(--spacing-2-xs) var(--spacing-m); - - button { - margin: 0 var(--spacing-xs) 0 0; - } - } - - .ui-dialog-content { - padding: 0 1em 1em; - position: initial; - } - - div.ui-dialog-titlebar { - padding: 0; - } - - &-titlebar { - background: transparent; - border: 0; - - &-close { - background: none; - border: none; - } - - .ui-dialog-title { - display: block; - font-size: var(--fontsize-heading-s); - overflow: auto; - padding: var(--spacing-layout-2-xs) var(--spacing-layout-2-xs) var(--spacing-layout-2-xs) var(--spacing-2-xl); - position: relative; - white-space: normal; - } - } - - &-title { - .hel-icon { - left: var(--spacing-m); - margin-right: var(--spacing-2-xs); - position: absolute; - top: var(--spacing-s); - } - } -} - -.ui-widget-content { - border: 0 transparent solid; - - h3 { - margin-top: 0; - } -} - -div.ui-widget.ui-widget-content { - border-top: var(--spacing-2-xs) solid var(--color-black); - max-width: 100vw; - min-width: 300px; - padding-top: 0; -} - -.ui-widget-content span.ui-icon { - margin-left: -8px; - margin-top: -8px; - mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg role='img' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E %3Cg fill='none' fill-rule='evenodd'%3E %3Crect width='24' height='24'/%3E %3Cpolygon fill='currentColor' points='18 7.5 13.5 12 18 16.5 16.5 18 12 13.5 7.5 18 6 16.5 10.5 12 6 7.5 7.5 6 12 10.5 16.5 6'/%3E %3C/g%3E %3C/svg%3E"); - transform: scale(1.5); -} - -.submission-for-copying { - margin-bottom: 1em; - margin-top: 1em; -} From 0a38f45293df4b1cca9fc3ebe6a5cd31cf164d2d Mon Sep 17 00:00:00 2001 From: tuutti Date: Wed, 23 Oct 2024 14:07:07 +0300 Subject: [PATCH 09/74] Removed article permissions (#1522) --- conf/cmi/user.role.grants_admin.yml | 1 - conf/cmi/user.role.grants_producer.yml | 1 - 2 files changed, 2 deletions(-) diff --git a/conf/cmi/user.role.grants_admin.yml b/conf/cmi/user.role.grants_admin.yml index 715c5b5df6..323e4cf698 100644 --- a/conf/cmi/user.role.grants_admin.yml +++ b/conf/cmi/user.role.grants_admin.yml @@ -220,7 +220,6 @@ permissions: - 'set page published on date' - 'translate announcement node' - 'translate any webform' - - 'translate article node' - 'translate avustuslaji taxonomy_term' - 'translate block_content' - 'translate configuration' diff --git a/conf/cmi/user.role.grants_producer.yml b/conf/cmi/user.role.grants_producer.yml index fe781261f6..6353b17c99 100644 --- a/conf/cmi/user.role.grants_producer.yml +++ b/conf/cmi/user.role.grants_producer.yml @@ -29,7 +29,6 @@ permissions: - 'edit any webform' - 'edit terms in news_tags' - 'translate any webform' - - 'translate article node' - 'translate avustuslaji taxonomy_term' - 'translate block_content' - 'translate editable entities' From e00411a0d09aeaf100a81a2d7be009237d039ffd Mon Sep 17 00:00:00 2001 From: hel-platta-automation <95360595+hel-platta-automation@users.noreply.github.com> Date: Wed, 23 Oct 2024 14:44:14 +0300 Subject: [PATCH 10/74] Automatic update (#1520) * Update configuration * Revert unwanted changes from configuration * Revert unwanted changes from configuration * Update .gitignore * Removed article permissions --------- Co-authored-by: Tero Elonen Co-authored-by: Janne Suominen Co-authored-by: tuutti --- .platform/schema | 2 +- composer.json | 1 - composer.lock | 153 +++++++++--------- ...y.paragraph.curated_event_list.default.yml | 38 +++++ ...vents_event.linkedevents_event.default.yml | 75 +++++++++ ...y.paragraph.curated_event_list.default.yml | 40 +++++ conf/cmi/core.extension.yml | 3 +- ...xternal_entity_type.linkedevents_event.yml | 38 +++++ ....field.node.landing_page.field_content.yml | 5 + ...rated_event_list.field_all_events_link.yml | 30 ++++ ...agraph.curated_event_list.field_events.yml | 28 ++++ ...torage.paragraph.field_all_events_link.yml | 21 +++ .../field.storage.paragraph.field_events.yml | 22 +++ conf/cmi/grants_metadata.settings.yml | 1 - ...rated_event_list.field_all_events_link.yml | 5 + ...agraph.curated_event_list.field_events.yml | 2 + ...phs.paragraphs_type.curated_event_list.yml | 2 + ...phs.paragraphs_type.curated_event_list.yml | 12 ++ ...ponsive_image.styles.unit_contact_card.yml | 44 ++--- conf/cmi/user.role.anonymous.yml | 4 +- conf/cmi/user.role.authenticated.yml | 6 +- docker/openshift/crons/pubsub.sh | 15 +- public/sites/default/settings.php | 5 + 23 files changed, 441 insertions(+), 111 deletions(-) create mode 100644 conf/cmi/core.entity_form_display.paragraph.curated_event_list.default.yml create mode 100644 conf/cmi/core.entity_view_display.linkedevents_event.linkedevents_event.default.yml create mode 100644 conf/cmi/core.entity_view_display.paragraph.curated_event_list.default.yml create mode 100644 conf/cmi/external_entities.external_entity_type.linkedevents_event.yml create mode 100644 conf/cmi/field.field.paragraph.curated_event_list.field_all_events_link.yml create mode 100644 conf/cmi/field.field.paragraph.curated_event_list.field_events.yml create mode 100644 conf/cmi/field.storage.paragraph.field_all_events_link.yml create mode 100644 conf/cmi/field.storage.paragraph.field_events.yml create mode 100644 conf/cmi/language/fi/field.field.paragraph.curated_event_list.field_all_events_link.yml create mode 100644 conf/cmi/language/fi/field.field.paragraph.curated_event_list.field_events.yml create mode 100644 conf/cmi/language/fi/paragraphs.paragraphs_type.curated_event_list.yml create mode 100644 conf/cmi/paragraphs.paragraphs_type.curated_event_list.yml diff --git a/.platform/schema b/.platform/schema index f11c82a4cb..9a037142aa 100644 --- a/.platform/schema +++ b/.platform/schema @@ -1 +1 @@ -9 \ No newline at end of file +10 \ No newline at end of file diff --git a/composer.json b/composer.json index 21f4f044e3..5a69ea9472 100644 --- a/composer.json +++ b/composer.json @@ -56,7 +56,6 @@ "drupal/potx": "^1.0", "drupal/purge_users": "^3.1", "drupal/radioactivity": "^4.0", - "drupal/raven": "^5.0", "drupal/redis": "^1.7", "drupal/remove_http_headers": "^2.0.1", "drupal/restui": "^1.21", diff --git a/composer.lock b/composer.lock index 5fe9778a67..683b38a715 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "a3aa686902754cc000efad66a1cc666d", + "content-hash": "1d3ab16ba09ab7e754afd7b71ae122b5", "packages": [ { "name": "asm89/stack-cors", @@ -1037,16 +1037,16 @@ }, { "name": "consolidation/output-formatters", - "version": "4.5.0", + "version": "4.6.0", "source": { "type": "git", "url": "https://github.com/consolidation/output-formatters.git", - "reference": "7a611b01eb48eb19cd54672339fc08c0985bf540" + "reference": "5fd5656718d7068a02d046f418a7ba873d5abbfe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/consolidation/output-formatters/zipball/7a611b01eb48eb19cd54672339fc08c0985bf540", - "reference": "7a611b01eb48eb19cd54672339fc08c0985bf540", + "url": "https://api.github.com/repos/consolidation/output-formatters/zipball/5fd5656718d7068a02d046f418a7ba873d5abbfe", + "reference": "5fd5656718d7068a02d046f418a7ba873d5abbfe", "shasum": "" }, "require": { @@ -1085,9 +1085,9 @@ "description": "Format text by applying transformations provided by plug-in formatters.", "support": { "issues": "https://github.com/consolidation/output-formatters/issues", - "source": "https://github.com/consolidation/output-formatters/tree/4.5.0" + "source": "https://github.com/consolidation/output-formatters/tree/4.6.0" }, - "time": "2024-04-02T15:18:52+00:00" + "time": "2024-10-18T14:02:48+00:00" }, { "name": "consolidation/robo", @@ -5482,16 +5482,16 @@ }, { "name": "drupal/hdbt", - "version": "6.7.11", + "version": "6.7.19", "source": { "type": "git", "url": "https://github.com/City-of-Helsinki/drupal-hdbt.git", - "reference": "5f9902895d8690e0167af2b8df37e84798c1ab8b" + "reference": "2fadf070e0fee0baf582073856f47f9c62669d17" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/City-of-Helsinki/drupal-hdbt/zipball/5f9902895d8690e0167af2b8df37e84798c1ab8b", - "reference": "5f9902895d8690e0167af2b8df37e84798c1ab8b", + "url": "https://api.github.com/repos/City-of-Helsinki/drupal-hdbt/zipball/2fadf070e0fee0baf582073856f47f9c62669d17", + "reference": "2fadf070e0fee0baf582073856f47f9c62669d17", "shasum": "" }, "require": { @@ -5510,10 +5510,10 @@ "Drupal" ], "support": { - "source": "https://github.com/City-of-Helsinki/drupal-hdbt/tree/6.7.11", + "source": "https://github.com/City-of-Helsinki/drupal-hdbt/tree/6.7.19", "issues": "https://github.com/City-of-Helsinki/drupal-hdbt/issues" }, - "time": "2024-10-11T08:54:21+00:00" + "time": "2024-10-23T10:00:39+00:00" }, { "name": "drupal/hdbt_admin", @@ -5604,23 +5604,23 @@ }, { "name": "drupal/helfi_api_base", - "version": "2.7.9", + "version": "2.7.11", "source": { "type": "git", "url": "https://github.com/City-of-Helsinki/drupal-module-helfi-api-base.git", - "reference": "189161e8d674072f0a345c45b93dd4c42896b52b" + "reference": "77ba93f8f9b02bb3e74344e1de0c50caf4d1557c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/City-of-Helsinki/drupal-module-helfi-api-base/zipball/189161e8d674072f0a345c45b93dd4c42896b52b", - "reference": "189161e8d674072f0a345c45b93dd4c42896b52b", + "url": "https://api.github.com/repos/City-of-Helsinki/drupal-module-helfi-api-base/zipball/77ba93f8f9b02bb3e74344e1de0c50caf4d1557c", + "reference": "77ba93f8f9b02bb3e74344e1de0c50caf4d1557c", "shasum": "" }, "require": { "drupal/entity": "^1.0", "drupal/health_check": "^3.0", "drupal/monolog": "^3.0", - "drupal/raven": "^4.0 || ^5.0", + "drupal/raven": "^5.0 || ^6.0", "ext-curl": "*", "firebase/php-jwt": "^6.5", "php": "^8.1", @@ -5643,10 +5643,10 @@ ], "description": "Helfi - API Base", "support": { - "source": "https://github.com/City-of-Helsinki/drupal-module-helfi-api-base/tree/2.7.9", + "source": "https://github.com/City-of-Helsinki/drupal-module-helfi-api-base/tree/2.7.11", "issues": "https://github.com/City-of-Helsinki/drupal-module-helfi-api-base/issues" }, - "time": "2024-10-10T08:24:13+00:00" + "time": "2024-10-23T08:01:57+00:00" }, { "name": "drupal/helfi_atv", @@ -5767,12 +5767,12 @@ "source": { "type": "git", "url": "https://github.com/City-of-Helsinki/drupal-tools.git", - "reference": "8df65343c4ff937dcf143827e3182f10b8b1b4b6" + "reference": "82d8131850bb17d30ac8f72eec0bd5568e4b3640" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/City-of-Helsinki/drupal-tools/zipball/8df65343c4ff937dcf143827e3182f10b8b1b4b6", - "reference": "8df65343c4ff937dcf143827e3182f10b8b1b4b6", + "url": "https://api.github.com/repos/City-of-Helsinki/drupal-tools/zipball/82d8131850bb17d30ac8f72eec0bd5568e4b3640", + "reference": "82d8131850bb17d30ac8f72eec0bd5568e4b3640", "shasum": "" }, "require": { @@ -5844,7 +5844,7 @@ "source": "https://github.com/City-of-Helsinki/drupal-tools/tree/main", "issues": "https://github.com/City-of-Helsinki/drupal-tools/issues" }, - "time": "2024-09-24T07:18:32+00:00" + "time": "2024-10-23T08:02:58+00:00" }, { "name": "drupal/helfi_formtool_embed", @@ -5950,16 +5950,16 @@ }, { "name": "drupal/helfi_platform_config", - "version": "4.6.15", + "version": "4.6.19", "source": { "type": "git", "url": "https://github.com/City-of-Helsinki/drupal-helfi-platform-config.git", - "reference": "96e619f1399be1140cef46c5dd67cce2a035613e" + "reference": "c17835fd4b1629ab55852a857320d6bd102b963d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/City-of-Helsinki/drupal-helfi-platform-config/zipball/96e619f1399be1140cef46c5dd67cce2a035613e", - "reference": "96e619f1399be1140cef46c5dd67cce2a035613e", + "url": "https://api.github.com/repos/City-of-Helsinki/drupal-helfi-platform-config/zipball/c17835fd4b1629ab55852a857320d6bd102b963d", + "reference": "c17835fd4b1629ab55852a857320d6bd102b963d", "shasum": "" }, "require": { @@ -6078,10 +6078,10 @@ ], "description": "HELfi platform config", "support": { - "source": "https://github.com/City-of-Helsinki/drupal-helfi-platform-config/tree/4.6.15", + "source": "https://github.com/City-of-Helsinki/drupal-helfi-platform-config/tree/4.6.19", "issues": "https://github.com/City-of-Helsinki/drupal-helfi-platform-config/issues" }, - "time": "2024-10-14T06:10:36+00:00" + "time": "2024-10-22T08:56:56+00:00" }, { "name": "drupal/helfi_proxy", @@ -6983,17 +6983,17 @@ }, { "name": "drupal/linkit", - "version": "6.1.5", + "version": "6.1.6", "source": { "type": "git", "url": "https://git.drupalcode.org/project/linkit.git", - "reference": "6.1.5" + "reference": "6.1.6" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/linkit-6.1.5.zip", - "reference": "6.1.5", - "shasum": "ce2e0f545e5213874e658a44ed3ef606b80b760d" + "url": "https://ftp.drupal.org/files/projects/linkit-6.1.6.zip", + "reference": "6.1.6", + "shasum": "113d8e569cfb92f8d7feb0a2f7713953c0715e92" }, "require": { "drupal/core": "^10.1" @@ -7005,8 +7005,8 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "6.1.5", - "datestamp": "1728680387", + "version": "6.1.6", + "datestamp": "1729189029", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -8296,20 +8296,20 @@ }, { "name": "drupal/raven", - "version": "5.0.19", + "version": "6.0.10", "source": { "type": "git", "url": "https://git.drupalcode.org/project/raven.git", - "reference": "5.0.19" + "reference": "6.0.10" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/raven-5.0.19.zip", - "reference": "5.0.19", - "shasum": "7ff86084a389c0740a42aa1d23b5fbcaa1a42d9f" + "url": "https://ftp.drupal.org/files/projects/raven-6.0.10.zip", + "reference": "6.0.10", + "shasum": "df0cce5b87bd76ce933d88afd91ebcd75741d329" }, "require": { - "drupal/core": "^10.1 || ^11", + "drupal/core": "^10.2 || ^11", "sentry/sentry": "^4.9" }, "require-dev": { @@ -8320,8 +8320,8 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "5.0.19", - "datestamp": "1728261182", + "version": "6.0.10", + "datestamp": "1728022661", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -9516,30 +9516,30 @@ }, { "name": "drupal/tfa", - "version": "1.8.0", + "version": "1.9.0", "source": { "type": "git", "url": "https://git.drupalcode.org/project/tfa.git", - "reference": "8.x-1.8" + "reference": "8.x-1.9" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/tfa-8.x-1.8.zip", - "reference": "8.x-1.8", - "shasum": "fda56a048fc15d2d24601981785d3974cd29acd9" + "url": "https://ftp.drupal.org/files/projects/tfa-8.x-1.9.zip", + "reference": "8.x-1.9", + "shasum": "1d42020673e8c29259dd9b6b2a7c1f974e66a415" }, "require": { "chillerlan/php-qrcode": "^1.0.9 || ^2.0 || ^3.2 || ^4.0", "christian-riesen/otp": "^2.1", - "drupal/core": "^8 || ^9 || ^10", + "drupal/core": "^8 || ^9 || ^10 || ^11", "drupal/encrypt": "~3.0", "php": ">=7.0" }, "require-dev": { "drupal/encrypt": "*", "drupal/key": "*", - "drupal/services": "^4 || ^5", - "drush/drush": "^10 || ^11 || ^12", + "drupal/services": "*", + "drush/drush": "^10 || ^11 || ^12 || ^13", "mglaman/phpstan-drupal": "^1.1", "phpstan/extension-installer": "^1.2", "phpstan/phpstan": "^1.9", @@ -9549,8 +9549,8 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "8.x-1.8", - "datestamp": "1727892298", + "version": "8.x-1.9", + "datestamp": "1729138391", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -10072,42 +10072,39 @@ }, { "name": "drupal/views_bulk_operations", - "version": "4.2.7", + "version": "4.3.0", "source": { "type": "git", "url": "https://git.drupalcode.org/project/views_bulk_operations.git", - "reference": "4.2.7" + "reference": "4.3.0" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/views_bulk_operations-4.2.7.zip", - "reference": "4.2.7", - "shasum": "25c9fa531ac49664a361fdd2202eec0a6e53bc61" + "url": "https://ftp.drupal.org/files/projects/views_bulk_operations-4.3.0.zip", + "reference": "4.3.0", + "shasum": "887e784e3e41b05d6f8915c223d42f4273ada604" }, "require": { - "drupal/core": "^9.4 || ^10 || ^11", - "php": ">=7.4.0" + "drupal/core": "^10.3 || ^11" + }, + "conflict": { + "drush/drush": "<12.5.1" }, "require-dev": { - "drush/drush": "^12" + "drush/drush": "^12 || ^13" }, "suggest": { - "drush/drush": "^11 || ^12" + "drush/drush": "^12 || ^13" }, "type": "drupal-module", "extra": { "drupal": { - "version": "4.2.7", - "datestamp": "1717665214", + "version": "4.3.0", + "datestamp": "1729513620", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" } - }, - "drush": { - "services": { - "drush.services.yml": "^10 || ^11" - } } }, "notification-url": "https://packages.drupal.org/8/downloads", @@ -11647,16 +11644,16 @@ }, { "name": "guzzlehttp/promises", - "version": "2.0.3", + "version": "2.0.4", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "6ea8dd08867a2a42619d65c3deb2c0fcbf81c8f8" + "reference": "f9c436286ab2892c7db7be8c8da4ef61ccf7b455" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/6ea8dd08867a2a42619d65c3deb2c0fcbf81c8f8", - "reference": "6ea8dd08867a2a42619d65c3deb2c0fcbf81c8f8", + "url": "https://api.github.com/repos/guzzle/promises/zipball/f9c436286ab2892c7db7be8c8da4ef61ccf7b455", + "reference": "f9c436286ab2892c7db7be8c8da4ef61ccf7b455", "shasum": "" }, "require": { @@ -11710,7 +11707,7 @@ ], "support": { "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/2.0.3" + "source": "https://github.com/guzzle/promises/tree/2.0.4" }, "funding": [ { @@ -11726,7 +11723,7 @@ "type": "tidelift" } ], - "time": "2024-07-18T10:29:17+00:00" + "time": "2024-10-17T10:06:22+00:00" }, { "name": "guzzlehttp/psr7", @@ -23647,6 +23644,6 @@ "platform": { "ext-json": "*" }, - "platform-dev": [], + "platform-dev": {}, "plugin-api-version": "2.6.0" } diff --git a/conf/cmi/core.entity_form_display.paragraph.curated_event_list.default.yml b/conf/cmi/core.entity_form_display.paragraph.curated_event_list.default.yml new file mode 100644 index 0000000000..2514fff17a --- /dev/null +++ b/conf/cmi/core.entity_form_display.paragraph.curated_event_list.default.yml @@ -0,0 +1,38 @@ +uuid: b5c5ed81-d651-4db2-8d72-a67e7b66390e +langcode: en +status: true +dependencies: + config: + - field.field.paragraph.curated_event_list.field_all_events_link + - field.field.paragraph.curated_event_list.field_events + - paragraphs.paragraphs_type.curated_event_list + module: + - link +_core: + default_config_hash: xbLWsjGFnK8aSW5O_r3mVF5bAlCp8J6wP5mGihlXLfU +id: paragraph.curated_event_list.default +targetEntityType: paragraph +bundle: curated_event_list +mode: default +content: + field_all_events_link: + type: link_default + weight: 1 + region: content + settings: + placeholder_url: '' + placeholder_title: '' + third_party_settings: { } + field_events: + type: entity_reference_autocomplete + weight: 0 + region: content + settings: + match_operator: CONTAINS + match_limit: 5 + size: 60 + placeholder: '' + third_party_settings: { } +hidden: + created: true + status: true diff --git a/conf/cmi/core.entity_view_display.linkedevents_event.linkedevents_event.default.yml b/conf/cmi/core.entity_view_display.linkedevents_event.linkedevents_event.default.yml new file mode 100644 index 0000000000..78ab301eea --- /dev/null +++ b/conf/cmi/core.entity_view_display.linkedevents_event.linkedevents_event.default.yml @@ -0,0 +1,75 @@ +uuid: 22363443-8bc6-4b97-980f-6bfb225edb1b +langcode: en +status: true +dependencies: + config: + - responsive_image.styles.card_teaser + module: + - datetime + - external_entities + - imagecache_external + - linkit +_core: + default_config_hash: HLUzZHxqtb77OIc2B344fWXiNo5fO78woa0r4KmRGcA +id: linkedevents_event.linkedevents_event.default +targetEntityType: linkedevents_event +bundle: linkedevents_event +mode: default +content: + end_time: + type: datetime_default + label: hidden + settings: + timezone_override: '' + format_type: medium + third_party_settings: { } + weight: 3 + region: content + external_link: + type: linkit + label: hidden + settings: + trim_length: 80 + url_only: false + url_plain: false + rel: '' + target: '' + linkit_profile: default + third_party_settings: { } + weight: 4 + region: content + langcode: + type: string_default + label: hidden + settings: { } + third_party_settings: { } + weight: 5 + region: content + main_image: + type: imagecache_external_responsive_image + label: hidden + settings: + imagecache_external_link: '' + imagecache_external_responsive_style: card_teaser + third_party_settings: { } + weight: 1 + region: content + start_time: + type: datetime_default + label: hidden + settings: + timezone_override: '' + format_type: medium + third_party_settings: { } + weight: 2 + region: content + title: + type: string + label: hidden + settings: + link_to_entity: false + third_party_settings: { } + weight: 0 + region: content +hidden: + search_api_excerpt: true diff --git a/conf/cmi/core.entity_view_display.paragraph.curated_event_list.default.yml b/conf/cmi/core.entity_view_display.paragraph.curated_event_list.default.yml new file mode 100644 index 0000000000..966ffdd46e --- /dev/null +++ b/conf/cmi/core.entity_view_display.paragraph.curated_event_list.default.yml @@ -0,0 +1,40 @@ +uuid: 313ec60d-d84a-4e82-9ae3-ee3221c0e631 +langcode: en +status: true +dependencies: + config: + - field.field.paragraph.curated_event_list.field_all_events_link + - field.field.paragraph.curated_event_list.field_events + - paragraphs.paragraphs_type.curated_event_list + module: + - link +_core: + default_config_hash: kSyBcsfddKV9vQJsToglwPaZvKFQSf3GDFPLqkzIfTQ +id: paragraph.curated_event_list.default +targetEntityType: paragraph +bundle: curated_event_list +mode: default +content: + field_all_events_link: + type: link + label: hidden + settings: + trim_length: 80 + url_only: false + url_plain: false + rel: '' + target: '' + third_party_settings: { } + weight: 1 + region: content + field_events: + type: entity_reference_entity_view + label: hidden + settings: + view_mode: default + link: false + third_party_settings: { } + weight: 0 + region: content +hidden: + search_api_excerpt: true diff --git a/conf/cmi/core.extension.yml b/conf/cmi/core.extension.yml index c1cc542cb9..3794c42554 100644 --- a/conf/cmi/core.extension.yml +++ b/conf/cmi/core.extension.yml @@ -49,7 +49,6 @@ module: flysystem: 0 focal_point: 0 gin_toolbar: 0 - grants_events: 0 grant_applications_content: 0 grant_applications_noscript: 0 grants_admin_applications: 0 @@ -58,6 +57,7 @@ module: grants_audit_log: 0 grants_budget_components: 0 grants_club_section: 0 + grants_events: 0 grants_front_banner: 0 grants_industries: 0 grants_logger: 0 @@ -104,6 +104,7 @@ module: helfi_paragraphs_columns: 0 helfi_paragraphs_contact_card_listing: 0 helfi_paragraphs_content_cards: 0 + helfi_paragraphs_curated_event_list: 0 helfi_paragraphs_hearings: 0 helfi_paragraphs_hero: 0 helfi_paragraphs_image: 0 diff --git a/conf/cmi/external_entities.external_entity_type.linkedevents_event.yml b/conf/cmi/external_entities.external_entity_type.linkedevents_event.yml new file mode 100644 index 0000000000..f263c5183f --- /dev/null +++ b/conf/cmi/external_entities.external_entity_type.linkedevents_event.yml @@ -0,0 +1,38 @@ +uuid: 66fe8cbc-203c-40aa-ac7b-6e0e89470312 +langcode: en +status: true +dependencies: { } +_core: + default_config_hash: Ll_0kw3O6gGsRvmdTi7l4K2pwhUrL0yQT4uPcttspmA +id: linkedevents_event +label: 'LinkedEvents: Event' +label_plural: 'LinkedEvents: Events' +description: 'Event entities from https://api.hel.fi/linkedevents.' +generate_aliases: false +read_only: true +field_mapper_id: jsonpath +field_mapper_config: + field_mappings: + id: + value: $.id + uuid: + value: $.id + title: + value: $.title + main_image: + uri: '$.images[0].url' + title: '$.images[0].alt_text' + start_time: + value: $.start_time + end_time: + value: $.end_time + external_link: + uri: $.external_link + title: $.clean_title +storage_client_id: linkedevents_events +storage_client_config: null +persistent_cache_max_age: 0 +annotation_entity_type_id: null +annotation_bundle_id: null +annotation_field_name: null +inherits_annotation_fields: false diff --git a/conf/cmi/field.field.node.landing_page.field_content.yml b/conf/cmi/field.field.node.landing_page.field_content.yml index f79d0bf279..54981785dd 100644 --- a/conf/cmi/field.field.node.landing_page.field_content.yml +++ b/conf/cmi/field.field.node.landing_page.field_content.yml @@ -9,6 +9,7 @@ dependencies: - paragraphs.paragraphs_type.chart - paragraphs.paragraphs_type.columns - paragraphs.paragraphs_type.content_cards + - paragraphs.paragraphs_type.curated_event_list - paragraphs.paragraphs_type.event_list - paragraphs.paragraphs_type.from_library - paragraphs.paragraphs_type.front_banner @@ -65,6 +66,7 @@ settings: service_list_search: service_list_search unit_search: unit_search unit_contact_card: unit_contact_card + curated_event_list: curated_event_list negate: 0 target_bundles_drag_drop: banner: @@ -79,6 +81,9 @@ settings: content_cards: weight: 1 enabled: true + curated_event_list: + weight: 15 + enabled: true event_list: weight: 13 enabled: true diff --git a/conf/cmi/field.field.paragraph.curated_event_list.field_all_events_link.yml b/conf/cmi/field.field.paragraph.curated_event_list.field_all_events_link.yml new file mode 100644 index 0000000000..78d0b93564 --- /dev/null +++ b/conf/cmi/field.field.paragraph.curated_event_list.field_all_events_link.yml @@ -0,0 +1,30 @@ +uuid: b144b934-3c5a-4c5b-ae89-b477bfb8367d +langcode: en +status: true +dependencies: + config: + - field.storage.paragraph.field_all_events_link + - paragraphs.paragraphs_type.curated_event_list + module: + - link +_core: + default_config_hash: FfVydFQYnAcPJkSaTbBQoyzqe8k11WrSJ5tSxAt8b1k +id: paragraph.curated_event_list.field_all_events_link +field_name: field_all_events_link +entity_type: paragraph +bundle: curated_event_list +label: 'All events link' +description: "Add a link to the tapahtumat.hel.fi website. You may also filter the events in the event calendar as desired and copy the page's URL.\r\n

\r\nAlso provide a text for the link, eg. View all events." +required: false +translatable: false +default_value: + - + attributes: { } + uri: 'https://tapahtumat.hel.fi' + title: 'View all events' + options: { } +default_value_callback: '' +settings: + title: 2 + link_type: 16 +field_type: link diff --git a/conf/cmi/field.field.paragraph.curated_event_list.field_events.yml b/conf/cmi/field.field.paragraph.curated_event_list.field_events.yml new file mode 100644 index 0000000000..896f3cdee2 --- /dev/null +++ b/conf/cmi/field.field.paragraph.curated_event_list.field_events.yml @@ -0,0 +1,28 @@ +uuid: 41acbd4d-63ba-4cb7-919c-d6435553d4a9 +langcode: en +status: true +dependencies: + config: + - field.storage.paragraph.field_events + - paragraphs.paragraphs_type.curated_event_list +_core: + default_config_hash: XaOHQv-1E_t55GwYhhyvtA03_7mWbdEbmXA3YhGrHiA +id: paragraph.curated_event_list.field_events +field_name: field_events +entity_type: paragraph +bundle: curated_event_list +label: Events +description: "Pick events to display in the list. You may either search event by their name or enter their ID. \r\n

\r\nYou can find the ID of an event on tapahtumat.hel.fi site from the URL of the page. For example, in the url
https://tapahtumat.hel.fi/fi/events/helsinki:agiy4m4ida the helsinki:agiy4m4ida part is the ID of the event.\r\n

\r\nThe page will display the top three events. You can arrange the events by dragging. Expired events will be automatically removed from the page." +required: false +translatable: false +default_value: { } +default_value_callback: '' +settings: + handler: 'default:linkedevents_event' + handler_settings: + target_bundles: null + sort: + field: _none + direction: ASC + auto_create: false +field_type: entity_reference diff --git a/conf/cmi/field.storage.paragraph.field_all_events_link.yml b/conf/cmi/field.storage.paragraph.field_all_events_link.yml new file mode 100644 index 0000000000..046d3b06b4 --- /dev/null +++ b/conf/cmi/field.storage.paragraph.field_all_events_link.yml @@ -0,0 +1,21 @@ +uuid: 1dd4d7e6-e3be-490e-9309-e9380e0c33b4 +langcode: en +status: true +dependencies: + module: + - link + - paragraphs +_core: + default_config_hash: 7QiTeiuYd-9Za2xvC3WVShDfIhAcgIpMYzIV4PX2NLQ +id: paragraph.field_all_events_link +field_name: field_all_events_link +entity_type: paragraph +type: link +settings: { } +module: link +locked: false +cardinality: 1 +translatable: true +indexes: { } +persist_with_no_fields: false +custom_storage: false diff --git a/conf/cmi/field.storage.paragraph.field_events.yml b/conf/cmi/field.storage.paragraph.field_events.yml new file mode 100644 index 0000000000..aff4e3ba3e --- /dev/null +++ b/conf/cmi/field.storage.paragraph.field_events.yml @@ -0,0 +1,22 @@ +uuid: a381685c-627a-4ba4-8be3-5bb2d2a705bd +langcode: en +status: true +dependencies: + module: + - external_entities + - paragraphs +_core: + default_config_hash: 5xBhIfvn2RSNE7qg7Ep4BljIMo7j78jrEekdHV_eCgo +id: paragraph.field_events +field_name: field_events +entity_type: paragraph +type: entity_reference +settings: + target_type: linkedevents_event +module: core +locked: false +cardinality: -1 +translatable: true +indexes: { } +persist_with_no_fields: false +custom_storage: false diff --git a/conf/cmi/grants_metadata.settings.yml b/conf/cmi/grants_metadata.settings.yml index 0fbb803dbb..1b97e04b44 100644 --- a/conf/cmi/grants_metadata.settings.yml +++ b/conf/cmi/grants_metadata.settings.yml @@ -299,7 +299,6 @@ third_party_options: 52: 'Liikunnan erityisavustus 2' 53: 'Kulttuurin ja vapaa-ajan erityisavustus 1' 54: 'Kulttuurin ja vapaa-ajan erityisavustus 2' - langcode: en config_import_ignore: - 53 diff --git a/conf/cmi/language/fi/field.field.paragraph.curated_event_list.field_all_events_link.yml b/conf/cmi/language/fi/field.field.paragraph.curated_event_list.field_all_events_link.yml new file mode 100644 index 0000000000..baa2627931 --- /dev/null +++ b/conf/cmi/language/fi/field.field.paragraph.curated_event_list.field_all_events_link.yml @@ -0,0 +1,5 @@ +label: 'Kaikki tapahtumat -linkki' +description: "Lisää likki tapahtumat.hel.fi -sivulle. Voit halutessasi tehdä tapahtumakalenterissa haluamasi tapahtumien rajauksen ja kopioida sivun URL-osoitteen.\r\nLisää myös teksti linkille, esimerkiksi. Katso kaikki tapahtumat" +default_value: + - + title: 'Katso kaikki tapahtumat' diff --git a/conf/cmi/language/fi/field.field.paragraph.curated_event_list.field_events.yml b/conf/cmi/language/fi/field.field.paragraph.curated_event_list.field_events.yml new file mode 100644 index 0000000000..65cac6a6ed --- /dev/null +++ b/conf/cmi/language/fi/field.field.paragraph.curated_event_list.field_events.yml @@ -0,0 +1,2 @@ +label: Tapahtumat +description: "Valitse tapahtumat, jotka näytetään listassa. Voit hakea tapahtumaa sen nimellä tai tapahtuman ID:llä.\r\n

\r\nLöydät tapahtuman ID:n tapahtumat.hel.fi-sivun osoitteesta: esimerkiksi osoitteessa https://tapahtumat.hel.fi/fi/events/helsinki:agiy4m4ida kohta helsinki:agiy4m4ida on tapahtuman ID.\r\n

\r\nSivulla näytetään kolme ylintä tapahtumaa. Voit järjestää tapahtumia raahaamalla. Vanhentuneet tapahtumat poistuvat sivulta automaattisesti." diff --git a/conf/cmi/language/fi/paragraphs.paragraphs_type.curated_event_list.yml b/conf/cmi/language/fi/paragraphs.paragraphs_type.curated_event_list.yml new file mode 100644 index 0000000000..7d8f759d86 --- /dev/null +++ b/conf/cmi/language/fi/paragraphs.paragraphs_type.curated_event_list.yml @@ -0,0 +1,2 @@ +label: 'Kuratoitu tapahtumalista' +description: 'Manuaalisesti ylläpidettävä tapahtumalista tapahtumille Linked Events -rajapinnasta.' diff --git a/conf/cmi/paragraphs.paragraphs_type.curated_event_list.yml b/conf/cmi/paragraphs.paragraphs_type.curated_event_list.yml new file mode 100644 index 0000000000..b729b022a5 --- /dev/null +++ b/conf/cmi/paragraphs.paragraphs_type.curated_event_list.yml @@ -0,0 +1,12 @@ +uuid: 5b0c689e-1733-47ff-ba7c-63923e4f2116 +langcode: en +status: true +dependencies: { } +_core: + default_config_hash: OdlftsJm7cyT434X7pj43aSTgKo7t5f7eYxG3ShBimY +id: curated_event_list +label: 'Curated event list' +icon_uuid: null +icon_default: null +description: 'Event list with curated event picks loaded from Linked Events API.' +behavior_plugins: { } diff --git a/conf/cmi/responsive_image.styles.unit_contact_card.yml b/conf/cmi/responsive_image.styles.unit_contact_card.yml index 3893c27faa..3b41081f10 100644 --- a/conf/cmi/responsive_image.styles.unit_contact_card.yml +++ b/conf/cmi/responsive_image.styles.unit_contact_card.yml @@ -3,72 +3,72 @@ langcode: en status: true dependencies: config: - - image.style.1.5_1120w_746h_LQ - - image.style.1.5_1200w_800h_LQ - - image.style.1.5_1298w_866h_LQ - - image.style.1.5_1470w_980h_LQ - - image.style.1.5_1854w_1236h_LQ - - image.style.1.5_560w_373h - - image.style.1.5_600w_400h - - image.style.1.5_649w_433h - - image.style.1.5_735w_490h - - image.style.1.5_927w_618h + - image.style.1.5_1022w_682h_LQ + - image.style.1.5_217w_145h + - image.style.1.5_264w_176h + - image.style.1.5_341w_227h + - image.style.1.5_378w_252h + - image.style.1.5_434w_290h_LQ + - image.style.1.5_511w_341h + - image.style.1.5_528w_352h_LQ + - image.style.1.5_682w_454h_LQ + - image.style.1.5_756w_504h_LQ module: - helfi_image_styles _core: - default_config_hash: j4r0g0EtcwDoFwxEuB3RGVktSuN6LWThnZBfw2SpG6g + default_config_hash: VnnwBYRxRNKSPg5iTbuRmMLcv0ZtU6Tjd4crcbDTeCs id: unit_contact_card label: 'Unit Contact Card' image_style_mappings: - image_mapping_type: image_style - image_mapping: 1.5_649w_433h + image_mapping: 1.5_378w_252h breakpoint_id: helfi_image_styles.xl multiplier: 1x - image_mapping_type: image_style - image_mapping: 1.5_1298w_866h_LQ + image_mapping: 1.5_756w_504h_LQ breakpoint_id: helfi_image_styles.xl multiplier: 2x - image_mapping_type: image_style - image_mapping: 1.5_600w_400h + image_mapping: 1.5_341w_227h breakpoint_id: helfi_image_styles.l multiplier: 1x - image_mapping_type: image_style - image_mapping: 1.5_1200w_800h_LQ + image_mapping: 1.5_682w_454h_LQ breakpoint_id: helfi_image_styles.l multiplier: 2x - image_mapping_type: image_style - image_mapping: 1.5_927w_618h + image_mapping: 1.5_264w_176h breakpoint_id: helfi_image_styles.m multiplier: 1x - image_mapping_type: image_style - image_mapping: 1.5_1854w_1236h_LQ + image_mapping: 1.5_528w_352h_LQ breakpoint_id: helfi_image_styles.m multiplier: 2x - image_mapping_type: image_style - image_mapping: 1.5_735w_490h + image_mapping: 1.5_217w_145h breakpoint_id: helfi_image_styles.s multiplier: 1x - image_mapping_type: image_style - image_mapping: 1.5_1470w_980h_LQ + image_mapping: 1.5_434w_290h_LQ breakpoint_id: helfi_image_styles.s multiplier: 2x - image_mapping_type: image_style - image_mapping: 1.5_560w_373h + image_mapping: 1.5_511w_341h breakpoint_id: helfi_image_styles.xs multiplier: 1x - image_mapping_type: image_style - image_mapping: 1.5_1120w_746h_LQ + image_mapping: 1.5_1022w_682h_LQ breakpoint_id: helfi_image_styles.xs multiplier: 2x breakpoint_group: helfi_image_styles -fallback_image_style: 1.5_735w_490h +fallback_image_style: 1.5_378w_252h diff --git a/conf/cmi/user.role.anonymous.yml b/conf/cmi/user.role.anonymous.yml index 3aa3993dde..ad16764477 100644 --- a/conf/cmi/user.role.anonymous.yml +++ b/conf/cmi/user.role.anonymous.yml @@ -8,16 +8,18 @@ dependencies: - helfi_api_base - helfi_tpr - media + - raven - system _core: default_config_hash: EDyVdaROG6pYzyEct43c01Wq4gpATszrk-qR6gqnQ84 id: anonymous -label: 'Anonyymi käyttäjä' +label: 'Anonymous user' weight: -10 is_admin: false permissions: - 'access content' - 'display eu cookie compliance popup' + - 'send javascript errors to sentry' - 'view helfi_announcements external entity' - 'view helfi_news external entity' - 'view helfi_news_groups external entity' diff --git a/conf/cmi/user.role.authenticated.yml b/conf/cmi/user.role.authenticated.yml index ecda6e3ca1..4fb5f2c754 100644 --- a/conf/cmi/user.role.authenticated.yml +++ b/conf/cmi/user.role.authenticated.yml @@ -16,11 +16,13 @@ dependencies: - helfi_tpr - media - node + - paragraphs + - raven - system _core: default_config_hash: 83Nuup-6oYkkdAsvg3nrR2pBOgtTXEV1JrzpCCLkYLM id: authenticated -label: 'Sisäänkirjautunut käyttäjä' +label: 'Authenticated user' weight: -9 is_admin: false permissions: @@ -29,6 +31,7 @@ permissions: - 'delete own files' - 'display eu cookie compliance popup' - 'edit own address content' + - 'send javascript errors to sentry' - 'use text format full_html' - 'use text format minimal' - 'use text format webform_default' @@ -42,3 +45,4 @@ permissions: - 'view remote entities' - 'view tpr_service' - 'view tpr_unit' + - 'view unpublished paragraphs' diff --git a/docker/openshift/crons/pubsub.sh b/docker/openshift/crons/pubsub.sh index 8e62c2d688..7589ed46fa 100644 --- a/docker/openshift/crons/pubsub.sh +++ b/docker/openshift/crons/pubsub.sh @@ -1,10 +1,15 @@ #!/bin/bash -# echo "Running PubSub daemon: $(date +'%Y-%m-%dT%H:%M:%S%:z')" +if [ -z "$DRUPAL_PUBSUB_VAULT" ]; then + echo "PubSub is not configured, exiting." + exit 0 +fi -# while true -# do +echo "Running PubSub daemon: $(date +'%Y-%m-%dT%H:%M:%S%:z')" + +while true +do # PubSub process exists with success return code after # certain number of messages and should then be restarted. - # drush helfi:azure:pubsub-listen || exit 1 -#done + drush helfi:azure:pubsub-listen || exit 1 +done diff --git a/public/sites/default/settings.php b/public/sites/default/settings.php index 872d57aab5..2f8d1e8e87 100644 --- a/public/sites/default/settings.php +++ b/public/sites/default/settings.php @@ -389,6 +389,11 @@ function drupal_get_env(string|array $variables) : mixed { $default_log_level = getenv('APP_ENV') === 'production' ? 'info' : 'debug'; $settings['helfi_api_base.log_level'] = getenv('LOG_LEVEL') ?: $default_log_level; +// Turn sentry JS error tracking on if SENTRY_DSN_PUBLIC is defined. +if (getenv('SENTRY_DSN_PUBLIC')) { + $config['raven.settings']['javascript_error_handler'] = TRUE; +} + /** * Deployment identifier. * From c3de5b4c6ca1c50277f88ad3d936cebcc5da7798 Mon Sep 17 00:00:00 2001 From: Tero Elonen <2276077+teroelonen@users.noreply.github.com> Date: Wed, 23 Oct 2024 17:07:13 +0300 Subject: [PATCH 11/74] UHF-10276: Fix translations on webform.form.unsaved.js (#1525) * UHF-10276: Replace the dialog.js functionality with custom dialog * UHF-10276: Fix translations, style the close button on the dialog * UHF-10276: Add focus trap for the dialog * UHF-10276: Refactor dialog and survey styles together * UHF-10276: Add comment about survey similarities * UHF-10276: Refactor dialog to a separate file so it can be used by other grants modules, refactored dialog.js away from grants_profile, add translations and remove old dialog.js * UHF-10276: Manually trigger translations for the webform.form.unsaved javascript file --- .../modules/custom/grants_handler/grants_handler.install | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/public/modules/custom/grants_handler/grants_handler.install b/public/modules/custom/grants_handler/grants_handler.install index c07bfd3951..92f47b12dd 100644 --- a/public/modules/custom/grants_handler/grants_handler.install +++ b/public/modules/custom/grants_handler/grants_handler.install @@ -379,3 +379,10 @@ function grants_handler_update_9009(&$sandbox): void { // Enable the grants_attachments module. \Drupal::service('module_installer')->install(['grants_events']); } + +/** + * Manually trigger locale translation. + */ +function grants_handler_update_9010(&$sandbox): void { + _locale_parse_js_file('modules/custom/grants_handler/js/webform.form.unsaved.js'); +} From fb0fe894ffaa4f08c1ec8a57a29276652298aed5 Mon Sep 17 00:00:00 2001 From: Santeri Hurnanen Date: Fri, 25 Oct 2024 09:26:09 +0300 Subject: [PATCH 12/74] UHF-9938: Update pipeline triggers (#1529) * Update pipeline triggers * UHF-9938: Update README.md --- README.md | 15 +++++++-------- azure-pipelines-prod.yml | 9 +-------- azure-pipelines-staging.yml | 11 +++++++---- azure-pipelines-test.yml | 8 ++++++-- azure-pipelines.yml | 28 ---------------------------- 5 files changed, 21 insertions(+), 50 deletions(-) delete mode 100644 azure-pipelines.yml diff --git a/README.md b/README.md index 2694a3b942..4cedebc70a 100644 --- a/README.md +++ b/README.md @@ -6,14 +6,13 @@ This project offers citizens a way to apply for different city grants for their ## Environments -Env | Branch | Url ------- |-----------| ----- -local | * | [https://hel-fi-drupal-grant-applications.docker.so/](https://hel-fi-drupal-grant-applications.docker.so/) -development | * | [https://avustukset.dev.hel.ninja](https://avustukset.dev.hel.ninja) -testing | develop | [https://avustukset.test.hel.ninja](https://avustukset.test.hel.ninja) -staging | release/* | [https://avustukset.stage.hel.ninja](https://avustukset.stage.hel.ninja) -production | main | [https://avustukset.hel.fi](https://avustukset.hel.fi) (https://nginx-avustusasiointi-prod.apps.platta.hel.fi/ before release) - +| Env | Branch | Url | +|-------------|--------------------------|------------------------------------------------------------------------------------------------------------| +| local | `*` | [https://hel-fi-drupal-grant-applications.docker.so/](https://hel-fi-drupal-grant-applications.docker.so/) | +| development | `*` | [https://avustukset.dev.hel.ninja](https://avustukset.dev.hel.ninja) | +| testing | `dev` | [https://avustukset.test.hel.ninja](https://avustukset.test.hel.ninja) | +| staging | `main` | [https://avustukset.stage.hel.ninja](https://avustukset.stage.hel.ninja) | +| production | `refs/tags/YYYY-MM-DD.X` | [https://avustukset.hel.fi](https://avustukset.hel.fi) | ## Requirements diff --git a/azure-pipelines-prod.yml b/azure-pipelines-prod.yml index a64ea8dd7c..8df5632c9c 100644 --- a/azure-pipelines-prod.yml +++ b/azure-pipelines-prod.yml @@ -2,14 +2,7 @@ # Continuous integration (CI) triggers cause a pipeline to run whenever you push # an update to the specified branches or you push specified tags. -trigger: - batch: true - branches: - include: - - main - paths: - exclude: - - README.md +trigger: none # Pull request (PR) triggers cause a pipeline to run whenever a pull request is # opened with one of the specified target branches, or when updates are made to diff --git a/azure-pipelines-staging.yml b/azure-pipelines-staging.yml index d8f731ef88..8f833f0eec 100644 --- a/azure-pipelines-staging.yml +++ b/azure-pipelines-staging.yml @@ -3,14 +3,17 @@ # Continuous integration (CI) triggers cause a pipeline to run whenever you push # an update to the specified branches or you push specified tags. trigger: + batch: true branches: include: - - release/* - exclude: - - release/old* + - main paths: exclude: - - README.md + - '*.md' + - '.github/' + - 'azure-pipelines-dev.yml' + - 'azure-pipelines-test.yml' + - 'azure-pipelines-prod.yml' # Pull request (PR) triggers cause a pipeline to run whenever a pull request is # opened with one of the specified target branches, or when updates are made to diff --git a/azure-pipelines-test.yml b/azure-pipelines-test.yml index 8dc01b268b..3ed92852c0 100644 --- a/azure-pipelines-test.yml +++ b/azure-pipelines-test.yml @@ -6,10 +6,14 @@ trigger: batch: true branches: include: - - develop + - dev paths: exclude: - - README.md + - '*.md' + - '.github/' + - 'azure-pipelines-dev.yml' + - 'azure-pipelines-staging.yml' + - 'azure-pipelines-prod.yml' # Pull request (PR) triggers cause a pipeline to run whenever a pull request is # opened with one of the specified target branches, or when updates are made to diff --git a/azure-pipelines.yml b/azure-pipelines.yml deleted file mode 100644 index aac0767b3c..0000000000 --- a/azure-pipelines.yml +++ /dev/null @@ -1,28 +0,0 @@ -# File: drupal-helfi/azure-pipelines.yml - -# Continuous integration (CI) triggers cause a pipeline to run whenever you push -# an update to the specified branches or you push specified tags. -trigger: - branches: - include: - - dev - paths: - exclude: - - README.md - -# By default, use self-hosted agents -pool: Default - -# Opting out of pull request validation -pr: none - -resources: - repositories: - # Azure DevOps repository - - repository: avustusasiointi-pipelines - type: git - # project/repository - name: avustusasiointi/avustusasiointi-pipelines - -extends: - template: azure-pipelines-drupal.yml@drupal-helfi From e1c3606855f854a313c7dc8a3e1e027ae487233d Mon Sep 17 00:00:00 2001 From: Santeri Hurnanen Date: Fri, 25 Oct 2024 09:26:22 +0300 Subject: [PATCH 13/74] Update configuration (#1523) (#1530) Co-authored-by: hel-platta-automation <95360595+hel-platta-automation@users.noreply.github.com> --- composer.lock | 131 +++++++++--------- ...xternal_entity_type.linkedevents_event.yml | 2 +- conf/cmi/raven.settings.yml | 16 +-- conf/cmi/user.role.ad_user.yml | 2 + conf/cmi/user.role.admin.yml | 2 + conf/cmi/user.role.anonymous.yml | 1 + conf/cmi/user.role.authenticated.yml | 1 + conf/cmi/user.role.content_producer.yml | 2 + .../user.role.content_producer_industry.yml | 2 + conf/cmi/user.role.editor.yml | 2 + conf/cmi/user.role.grants_admin.yml | 2 + conf/cmi/user.role.grants_producer.yml | 15 ++ .../user.role.grants_producer_industry.yml | 2 + conf/cmi/user.role.helsinkiprofiili.yml | 2 + conf/cmi/user.role.json_api_user.yml | 2 + conf/cmi/user.role.performance_test_user.yml | 2 + conf/cmi/user.role.read_only.yml | 2 + conf/cmi/user.role.survey_editor.yml | 2 + docker/openshift/crons/pubsub.sh | 15 +- 19 files changed, 126 insertions(+), 79 deletions(-) diff --git a/composer.lock b/composer.lock index 683b38a715..281512f68c 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "1d3ab16ba09ab7e754afd7b71ae122b5", + "content-hash": "651e43dad6d2c4dc496a5ce9c851467f", "packages": [ { "name": "asm89/stack-cors", @@ -5404,6 +5404,10 @@ "name": "Sascha Eggenberger (saschaeggi)", "homepage": "https://www.drupal.org/u/saschaeggi", "role": "Maintainer" + }, + { + "name": "saschaeggi", + "homepage": "https://www.drupal.org/user/1999056" } ], "description": "Gin Toolbar for Frontend use", @@ -5714,16 +5718,16 @@ }, { "name": "drupal/helfi_azure_fs", - "version": "2.0.7", + "version": "2.0.8", "source": { "type": "git", "url": "https://github.com/City-of-Helsinki/drupal-module-helfi-azure-fs.git", - "reference": "f35b0a703e2da09374c4ca137dd6519274db552a" + "reference": "c1ce8909d3ab797bd75e391ed6d80c06b82799c9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/City-of-Helsinki/drupal-module-helfi-azure-fs/zipball/f35b0a703e2da09374c4ca137dd6519274db552a", - "reference": "f35b0a703e2da09374c4ca137dd6519274db552a", + "url": "https://api.github.com/repos/City-of-Helsinki/drupal-module-helfi-azure-fs/zipball/c1ce8909d3ab797bd75e391ed6d80c06b82799c9", + "reference": "c1ce8909d3ab797bd75e391ed6d80c06b82799c9", "shasum": "" }, "require": { @@ -5740,9 +5744,6 @@ "type": "drupal-module", "extra": { "patches": { - "drupal/core": { - "UHF-10533 D10.3 images": "https://raw.githubusercontent.com/City-of-Helsinki/drupal-module-helfi-azure-fs/f933226cdd9b046d76757d4f885d3d3567365264/patches/UHF-10533-d10-images.patch" - }, "twistor/flysystem-stream-wrapper": { "PHP 8.2 support (https://www.drupal.org/project/flysystem/issues/3387094)": "https://raw.githubusercontent.com/City-of-Helsinki/drupal-module-helfi-azure-fs/ddb222622b92d1c2b7db975a84167a00579a1ad0/patches/3387094-add-context-property-to-stream-wrapper.patch" }, @@ -5756,10 +5757,10 @@ ], "description": "Helfi - Azure FS", "support": { - "source": "https://github.com/City-of-Helsinki/drupal-module-helfi-azure-fs/tree/2.0.7", + "source": "https://github.com/City-of-Helsinki/drupal-module-helfi-azure-fs/tree/2.0.8", "issues": "https://github.com/City-of-Helsinki/drupal-module-helfi-azure-fs/issues" }, - "time": "2024-10-11T07:42:06+00:00" + "time": "2024-10-23T12:15:22+00:00" }, { "name": "drupal/helfi_drupal_tools", @@ -5767,12 +5768,12 @@ "source": { "type": "git", "url": "https://github.com/City-of-Helsinki/drupal-tools.git", - "reference": "82d8131850bb17d30ac8f72eec0bd5568e4b3640" + "reference": "53ad81c4249c6dd38deea3f6014ad0b1be47f2db" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/City-of-Helsinki/drupal-tools/zipball/82d8131850bb17d30ac8f72eec0bd5568e4b3640", - "reference": "82d8131850bb17d30ac8f72eec0bd5568e4b3640", + "url": "https://api.github.com/repos/City-of-Helsinki/drupal-tools/zipball/53ad81c4249c6dd38deea3f6014ad0b1be47f2db", + "reference": "53ad81c4249c6dd38deea3f6014ad0b1be47f2db", "shasum": "" }, "require": { @@ -5844,7 +5845,7 @@ "source": "https://github.com/City-of-Helsinki/drupal-tools/tree/main", "issues": "https://github.com/City-of-Helsinki/drupal-tools/issues" }, - "time": "2024-10-23T08:02:58+00:00" + "time": "2024-10-23T10:28:01+00:00" }, { "name": "drupal/helfi_formtool_embed", @@ -5950,16 +5951,16 @@ }, { "name": "drupal/helfi_platform_config", - "version": "4.6.19", + "version": "4.6.20", "source": { "type": "git", "url": "https://github.com/City-of-Helsinki/drupal-helfi-platform-config.git", - "reference": "c17835fd4b1629ab55852a857320d6bd102b963d" + "reference": "f5451a53f0e83dcf1fc811c9ced0687f43cd4b7f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/City-of-Helsinki/drupal-helfi-platform-config/zipball/c17835fd4b1629ab55852a857320d6bd102b963d", - "reference": "c17835fd4b1629ab55852a857320d6bd102b963d", + "url": "https://api.github.com/repos/City-of-Helsinki/drupal-helfi-platform-config/zipball/f5451a53f0e83dcf1fc811c9ced0687f43cd4b7f", + "reference": "f5451a53f0e83dcf1fc811c9ced0687f43cd4b7f", "shasum": "" }, "require": { @@ -6078,23 +6079,23 @@ ], "description": "HELfi platform config", "support": { - "source": "https://github.com/City-of-Helsinki/drupal-helfi-platform-config/tree/4.6.19", + "source": "https://github.com/City-of-Helsinki/drupal-helfi-platform-config/tree/4.6.20", "issues": "https://github.com/City-of-Helsinki/drupal-helfi-platform-config/issues" }, - "time": "2024-10-22T08:56:56+00:00" + "time": "2024-10-24T12:01:48+00:00" }, { "name": "drupal/helfi_proxy", - "version": "3.3.0", + "version": "3.3.1", "source": { "type": "git", "url": "https://github.com/City-of-Helsinki/drupal-module-helfi-proxy.git", - "reference": "efdf8d46f8b0f0114ab079f61661d1909b2a870e" + "reference": "0372472dbcc0ae1cea760a8d455b729ead9978f6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/City-of-Helsinki/drupal-module-helfi-proxy/zipball/efdf8d46f8b0f0114ab079f61661d1909b2a870e", - "reference": "efdf8d46f8b0f0114ab079f61661d1909b2a870e", + "url": "https://api.github.com/repos/City-of-Helsinki/drupal-module-helfi-proxy/zipball/0372472dbcc0ae1cea760a8d455b729ead9978f6", + "reference": "0372472dbcc0ae1cea760a8d455b729ead9978f6", "shasum": "" }, "require": { @@ -6123,10 +6124,10 @@ ], "description": "Provides various fixes so we can serve multiple Drupal instances in one domain.", "support": { - "source": "https://github.com/City-of-Helsinki/drupal-module-helfi-proxy/tree/3.3.0", + "source": "https://github.com/City-of-Helsinki/drupal-module-helfi-proxy/tree/3.3.1", "issues": "https://github.com/City-of-Helsinki/drupal-module-helfi-proxy/issues" }, - "time": "2024-06-26T05:50:50+00:00" + "time": "2024-10-25T05:12:00+00:00" }, { "name": "drupal/helfi_tpr", @@ -8514,7 +8515,7 @@ ], "authors": [ { - "name": "Heine", + "name": "heine", "homepage": "https://www.drupal.org/user/17943" }, { @@ -10072,17 +10073,17 @@ }, { "name": "drupal/views_bulk_operations", - "version": "4.3.0", + "version": "4.3.1", "source": { "type": "git", "url": "https://git.drupalcode.org/project/views_bulk_operations.git", - "reference": "4.3.0" + "reference": "4.3.1" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/views_bulk_operations-4.3.0.zip", - "reference": "4.3.0", - "shasum": "887e784e3e41b05d6f8915c223d42f4273ada604" + "url": "https://ftp.drupal.org/files/projects/views_bulk_operations-4.3.1.zip", + "reference": "4.3.1", + "shasum": "1089fe41ddb01313f34d55e19e8f3a5157889430" }, "require": { "drupal/core": "^10.3 || ^11" @@ -10099,8 +10100,8 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "4.3.0", - "datestamp": "1729513620", + "version": "4.3.1", + "datestamp": "1729683242", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -11068,29 +11069,29 @@ }, { "name": "fileeye/mimemap", - "version": "2.1.2", + "version": "2.2.0", "source": { "type": "git", "url": "https://github.com/FileEye/MimeMap.git", - "reference": "2cb60da59d5c6fb881a78b481d513c4c68a1a93c" + "reference": "c8c686cc6f77316b23128a83334877debf645dfb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FileEye/MimeMap/zipball/2cb60da59d5c6fb881a78b481d513c4c68a1a93c", - "reference": "2cb60da59d5c6fb881a78b481d513c4c68a1a93c", + "url": "https://api.github.com/repos/FileEye/MimeMap/zipball/c8c686cc6f77316b23128a83334877debf645dfb", + "reference": "c8c686cc6f77316b23128a83334877debf645dfb", "shasum": "" }, "require": { - "php": ">=7.4" + "php": ">=8.1" }, "require-dev": { "composer-runtime-api": "^2.0.0", - "sebastian/comparator": ">=4", - "sebastian/diff": ">=4", - "symfony/console": ">=5.4", - "symfony/filesystem": ">=5.4", - "symfony/var-dumper": ">=5.4", - "symfony/yaml": ">=5.4" + "sebastian/comparator": ">=5", + "sebastian/diff": ">=5", + "symfony/console": ">=6.4", + "symfony/filesystem": ">=6.4", + "symfony/var-dumper": ">=6.4", + "symfony/yaml": ">=6.4" }, "bin": [ "bin/fileeye-mimemap" @@ -11120,9 +11121,9 @@ ], "support": { "issues": "https://github.com/FileEye/MimeMap/issues", - "source": "https://github.com/FileEye/MimeMap/tree/2.1.2" + "source": "https://github.com/FileEye/MimeMap/tree/2.2.0" }, - "time": "2024-06-29T16:52:07+00:00" + "time": "2024-10-20T18:59:36+00:00" }, { "name": "fileeye/pel", @@ -11967,16 +11968,16 @@ }, { "name": "league/container", - "version": "4.2.2", + "version": "4.2.3", "source": { "type": "git", "url": "https://github.com/thephpleague/container.git", - "reference": "ff346319ca1ff0e78277dc2311a42107cc1aab88" + "reference": "72f9bebe7bd623007782a40f5ec305661ab706d8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/container/zipball/ff346319ca1ff0e78277dc2311a42107cc1aab88", - "reference": "ff346319ca1ff0e78277dc2311a42107cc1aab88", + "url": "https://api.github.com/repos/thephpleague/container/zipball/72f9bebe7bd623007782a40f5ec305661ab706d8", + "reference": "72f9bebe7bd623007782a40f5ec305661ab706d8", "shasum": "" }, "require": { @@ -12037,7 +12038,7 @@ ], "support": { "issues": "https://github.com/thephpleague/container/issues", - "source": "https://github.com/thephpleague/container/tree/4.2.2" + "source": "https://github.com/thephpleague/container/tree/4.2.3" }, "funding": [ { @@ -12045,7 +12046,7 @@ "type": "github" } ], - "time": "2024-03-13T13:12:53+00:00" + "time": "2024-10-23T12:06:58+00:00" }, { "name": "league/flysystem", @@ -20604,16 +20605,16 @@ }, { "name": "php-http/discovery", - "version": "1.19.4", + "version": "1.20.0", "source": { "type": "git", "url": "https://github.com/php-http/discovery.git", - "reference": "0700efda8d7526335132360167315fdab3aeb599" + "reference": "82fe4c73ef3363caed49ff8dd1539ba06044910d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-http/discovery/zipball/0700efda8d7526335132360167315fdab3aeb599", - "reference": "0700efda8d7526335132360167315fdab3aeb599", + "url": "https://api.github.com/repos/php-http/discovery/zipball/82fe4c73ef3363caed49ff8dd1539ba06044910d", + "reference": "82fe4c73ef3363caed49ff8dd1539ba06044910d", "shasum": "" }, "require": { @@ -20677,9 +20678,9 @@ ], "support": { "issues": "https://github.com/php-http/discovery/issues", - "source": "https://github.com/php-http/discovery/tree/1.19.4" + "source": "https://github.com/php-http/discovery/tree/1.20.0" }, - "time": "2024-03-29T13:00:05+00:00" + "time": "2024-10-02T11:20:13+00:00" }, { "name": "php-http/guzzle7-adapter", @@ -20745,16 +20746,16 @@ }, { "name": "php-http/httplug", - "version": "2.4.0", + "version": "2.4.1", "source": { "type": "git", "url": "https://github.com/php-http/httplug.git", - "reference": "625ad742c360c8ac580fcc647a1541d29e257f67" + "reference": "5cad731844891a4c282f3f3e1b582c46839d22f4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-http/httplug/zipball/625ad742c360c8ac580fcc647a1541d29e257f67", - "reference": "625ad742c360c8ac580fcc647a1541d29e257f67", + "url": "https://api.github.com/repos/php-http/httplug/zipball/5cad731844891a4c282f3f3e1b582c46839d22f4", + "reference": "5cad731844891a4c282f3f3e1b582c46839d22f4", "shasum": "" }, "require": { @@ -20796,9 +20797,9 @@ ], "support": { "issues": "https://github.com/php-http/httplug/issues", - "source": "https://github.com/php-http/httplug/tree/2.4.0" + "source": "https://github.com/php-http/httplug/tree/2.4.1" }, - "time": "2023-04-14T15:10:03+00:00" + "time": "2024-09-23T11:39:58+00:00" }, { "name": "php-http/promise", diff --git a/conf/cmi/external_entities.external_entity_type.linkedevents_event.yml b/conf/cmi/external_entities.external_entity_type.linkedevents_event.yml index f263c5183f..819ef5ee38 100644 --- a/conf/cmi/external_entities.external_entity_type.linkedevents_event.yml +++ b/conf/cmi/external_entities.external_entity_type.linkedevents_event.yml @@ -8,8 +8,8 @@ id: linkedevents_event label: 'LinkedEvents: Event' label_plural: 'LinkedEvents: Events' description: 'Event entities from https://api.hel.fi/linkedevents.' -generate_aliases: false read_only: true +generate_aliases: false field_mapper_id: jsonpath field_mapper_config: field_mappings: diff --git a/conf/cmi/raven.settings.yml b/conf/cmi/raven.settings.yml index 983d704b24..d2afac6392 100644 --- a/conf/cmi/raven.settings.yml +++ b/conf/cmi/raven.settings.yml @@ -4,14 +4,14 @@ client_key: '' environment: '' release: '' log_levels: - 1: 1 - 2: 2 - 3: 3 - 4: 4 - 5: 0 - 6: 0 - 7: 0 - 8: 0 + emergency: true + alert: true + critical: true + error: true + warning: false + notice: false + info: false + debug: false stack: true timeout: 2.0 message_limit: 2048 diff --git a/conf/cmi/user.role.ad_user.yml b/conf/cmi/user.role.ad_user.yml index d1c3ef4d7b..89763b05b0 100644 --- a/conf/cmi/user.role.ad_user.yml +++ b/conf/cmi/user.role.ad_user.yml @@ -6,6 +6,7 @@ dependencies: - taxonomy.vocabulary.news_tags module: - file + - raven - taxonomy id: ad_user label: 'AD User' @@ -14,3 +15,4 @@ is_admin: null permissions: - 'delete own files' - 'edit terms in news_tags' + - 'send performance traces to sentry' diff --git a/conf/cmi/user.role.admin.yml b/conf/cmi/user.role.admin.yml index c3ee3c3409..601310a188 100644 --- a/conf/cmi/user.role.admin.yml +++ b/conf/cmi/user.role.admin.yml @@ -56,6 +56,7 @@ dependencies: - path - pathauto - publication_date + - raven - redirect - responsive_image - role_delegation @@ -283,6 +284,7 @@ permissions: - 'revert service revisions' - 'schedule publishing of nodes' - 'select account cancellation method' + - 'send performance traces to sentry' - 'set announcement published on date' - 'set landing_page published on date' - 'set page published on date' diff --git a/conf/cmi/user.role.anonymous.yml b/conf/cmi/user.role.anonymous.yml index ad16764477..60e2693019 100644 --- a/conf/cmi/user.role.anonymous.yml +++ b/conf/cmi/user.role.anonymous.yml @@ -20,6 +20,7 @@ permissions: - 'access content' - 'display eu cookie compliance popup' - 'send javascript errors to sentry' + - 'send performance traces to sentry' - 'view helfi_announcements external entity' - 'view helfi_news external entity' - 'view helfi_news_groups external entity' diff --git a/conf/cmi/user.role.authenticated.yml b/conf/cmi/user.role.authenticated.yml index 4fb5f2c754..d1d55248c8 100644 --- a/conf/cmi/user.role.authenticated.yml +++ b/conf/cmi/user.role.authenticated.yml @@ -32,6 +32,7 @@ permissions: - 'display eu cookie compliance popup' - 'edit own address content' - 'send javascript errors to sentry' + - 'send performance traces to sentry' - 'use text format full_html' - 'use text format minimal' - 'use text format webform_default' diff --git a/conf/cmi/user.role.content_producer.yml b/conf/cmi/user.role.content_producer.yml index 8f35351246..c674e78fd1 100644 --- a/conf/cmi/user.role.content_producer.yml +++ b/conf/cmi/user.role.content_producer.yml @@ -35,6 +35,7 @@ dependencies: - path - pathauto - publication_date + - raven - scheduler - system - taxonomy @@ -125,6 +126,7 @@ permissions: - 'revert page revisions' - 'revert service revisions' - 'schedule publishing of nodes' + - 'send performance traces to sentry' - 'set announcement published on date' - 'set landing_page published on date' - 'set page published on date' diff --git a/conf/cmi/user.role.content_producer_industry.yml b/conf/cmi/user.role.content_producer_industry.yml index 5e7d0b7534..09c3a0656a 100644 --- a/conf/cmi/user.role.content_producer_industry.yml +++ b/conf/cmi/user.role.content_producer_industry.yml @@ -18,6 +18,7 @@ dependencies: - override_node_options - paragraphs - path + - raven - scheduler - system - taxonomy @@ -51,6 +52,7 @@ permissions: - 'override service published option' - 'revert service revisions' - 'schedule publishing of nodes' + - 'send performance traces to sentry' - 'translate editable entities' - 'translate interface' - 'update media' diff --git a/conf/cmi/user.role.editor.yml b/conf/cmi/user.role.editor.yml index 603f3c5a78..22a63ffb9f 100644 --- a/conf/cmi/user.role.editor.yml +++ b/conf/cmi/user.role.editor.yml @@ -32,6 +32,7 @@ dependencies: - paragraphs_library - path - publication_date + - raven - redirect - scheduler - system @@ -132,6 +133,7 @@ permissions: - 'revert news_item revisions' - 'revert page revisions' - 'schedule publishing of nodes' + - 'send performance traces to sentry' - 'set announcement published on date' - 'set landing_page published on date' - 'set news_item published on date' diff --git a/conf/cmi/user.role.grants_admin.yml b/conf/cmi/user.role.grants_admin.yml index 323e4cf698..11293a7ac7 100644 --- a/conf/cmi/user.role.grants_admin.yml +++ b/conf/cmi/user.role.grants_admin.yml @@ -44,6 +44,7 @@ dependencies: - path - pathauto - publication_date + - raven - role_delegation - scheduler - system @@ -214,6 +215,7 @@ permissions: - 'revert service revisions' - 'schedule publishing of nodes' - 'select account cancellation method' + - 'send performance traces to sentry' - 'set announcement published on date' - 'set landing_page published on date' - 'set news_item published on date' diff --git a/conf/cmi/user.role.grants_producer.yml b/conf/cmi/user.role.grants_producer.yml index 6353b17c99..9f11962e68 100644 --- a/conf/cmi/user.role.grants_producer.yml +++ b/conf/cmi/user.role.grants_producer.yml @@ -3,15 +3,29 @@ langcode: en status: true dependencies: config: + - media.type.file + - media.type.image + - media.type.remote_video - node.type.landing_page - node.type.page - node.type.service + - taxonomy.vocabulary.avustuslaji + - taxonomy.vocabulary.keywords + - taxonomy.vocabulary.news_tags + - taxonomy.vocabulary.target_group + - taxonomy.vocabulary.ukk_kategoriat + - taxonomy.vocabulary.unit_type module: + - block_content + - content_translation - file - locale - media + - menu_link_content - path + - raven - system + - taxonomy - toolbar - view_unpublished - webform @@ -28,6 +42,7 @@ permissions: - 'delete own files' - 'edit any webform' - 'edit terms in news_tags' + - 'send performance traces to sentry' - 'translate any webform' - 'translate avustuslaji taxonomy_term' - 'translate block_content' diff --git a/conf/cmi/user.role.grants_producer_industry.yml b/conf/cmi/user.role.grants_producer_industry.yml index ad77327c2f..bae9d5d196 100644 --- a/conf/cmi/user.role.grants_producer_industry.yml +++ b/conf/cmi/user.role.grants_producer_industry.yml @@ -11,6 +11,7 @@ dependencies: - locale - media - path + - raven - system - toolbar - view_unpublished @@ -26,6 +27,7 @@ permissions: - 'create url aliases' - 'delete own files' - 'edit any webform' + - 'send performance traces to sentry' - 'translate interface' - 'view any unpublished landing_page content' - 'view any unpublished page content' diff --git a/conf/cmi/user.role.helsinkiprofiili.yml b/conf/cmi/user.role.helsinkiprofiili.yml index 315cafb3c8..cb6fb13043 100644 --- a/conf/cmi/user.role.helsinkiprofiili.yml +++ b/conf/cmi/user.role.helsinkiprofiili.yml @@ -7,6 +7,7 @@ dependencies: - grants_mandate - grants_oma_asiointi - grants_profile + - raven - webform id: helsinkiprofiili label: HelsinkiProfiili @@ -18,5 +19,6 @@ permissions: - 'delete own files' - 'edit own webform submission' - 'get mandates from dvv' + - 'send performance traces to sentry' - 'view own grants_profile' - 'view own webform submission' diff --git a/conf/cmi/user.role.json_api_user.yml b/conf/cmi/user.role.json_api_user.yml index 9871557ef6..7ee500c140 100644 --- a/conf/cmi/user.role.json_api_user.yml +++ b/conf/cmi/user.role.json_api_user.yml @@ -4,6 +4,7 @@ status: true dependencies: module: - file + - raven - webform id: json_api_user label: 'JSON API User' @@ -12,3 +13,4 @@ is_admin: null permissions: - 'access any webform configuration' - 'delete own files' + - 'send performance traces to sentry' diff --git a/conf/cmi/user.role.performance_test_user.yml b/conf/cmi/user.role.performance_test_user.yml index b19cd6f36e..bc331adc52 100644 --- a/conf/cmi/user.role.performance_test_user.yml +++ b/conf/cmi/user.role.performance_test_user.yml @@ -4,9 +4,11 @@ status: true dependencies: module: - file + - raven id: performance_test_user label: 'Performance test user' weight: 8 is_admin: null permissions: - 'delete own files' + - 'send performance traces to sentry' diff --git a/conf/cmi/user.role.read_only.yml b/conf/cmi/user.role.read_only.yml index dfdf13bb4b..bc79e76464 100644 --- a/conf/cmi/user.role.read_only.yml +++ b/conf/cmi/user.role.read_only.yml @@ -11,6 +11,7 @@ dependencies: - helfi_tpr - node - paragraphs + - raven - view_unpublished id: read_only label: 'Vain luku' @@ -18,6 +19,7 @@ weight: -7 is_admin: null permissions: - 'delete own files' + - 'send performance traces to sentry' - 'view any unpublished announcement content' - 'view any unpublished landing_page content' - 'view any unpublished page content' diff --git a/conf/cmi/user.role.survey_editor.yml b/conf/cmi/user.role.survey_editor.yml index 7ba1bc811e..87fcad06df 100644 --- a/conf/cmi/user.role.survey_editor.yml +++ b/conf/cmi/user.role.survey_editor.yml @@ -8,6 +8,7 @@ dependencies: - content_translation - node - publication_date + - raven _core: default_config_hash: CliaTgzCQcvNF9ot3u_EbHnydymXh8bvNgNFlSffj9s id: survey_editor @@ -22,6 +23,7 @@ permissions: - 'edit any survey content' - 'edit own survey content' - 'revert survey revisions' + - 'send performance traces to sentry' - 'set survey published on date' - 'translate survey node' - 'view survey revisions' diff --git a/docker/openshift/crons/pubsub.sh b/docker/openshift/crons/pubsub.sh index c20c01a4ca..7589ed46fa 100644 --- a/docker/openshift/crons/pubsub.sh +++ b/docker/openshift/crons/pubsub.sh @@ -1,10 +1,15 @@ #!/bin/bash -#echo "Running PubSub daemon: $(date +'%Y-%m-%dT%H:%M:%S%:z')" +if [ -z "$DRUPAL_PUBSUB_VAULT" ]; then + echo "PubSub is not configured, exiting." + exit 0 +fi -#while true -#do +echo "Running PubSub daemon: $(date +'%Y-%m-%dT%H:%M:%S%:z')" + +while true +do # PubSub process exists with success return code after # certain number of messages and should then be restarted. -# drush helfi:azure:pubsub-listen || exit 1 -#done + drush helfi:azure:pubsub-listen || exit 1 +done From 0ff37172bf62260424cdaa90945ae71be65ce82a Mon Sep 17 00:00:00 2001 From: Janne Suominen Date: Mon, 28 Oct 2024 07:22:13 +0200 Subject: [PATCH 14/74] fix: UHF-10656: Add missing translations. Fix incorrect config name for help texts. (#1521) * UHF-10656: Add translations for issuer_name * UHF-10656: Fix translations, #text -> #markup --- conf/cmi/language/en/webform.webform.nuortoimpalkka.yml | 6 +++--- conf/cmi/language/sv/webform.webform.nuortoimpalkka.yml | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/conf/cmi/language/en/webform.webform.nuortoimpalkka.yml b/conf/cmi/language/en/webform.webform.nuortoimpalkka.yml index b5c5689c0e..5e9b484e19 100644 --- a/conf/cmi/language/en/webform.webform.nuortoimpalkka.yml +++ b/conf/cmi/language/en/webform.webform.nuortoimpalkka.yml @@ -66,7 +66,7 @@ elements: | muut_samaan_tarkoitukseen_myonnetyt_avustukset: '#title': 'Other grants received for the same purpose' info_muut_samaan_tarkoitukseen_myonnetty: - '#text': "

Indicate here only the grants received from somewhere other than the City of Helsinki in the current and two previous tax years.

\r\n\r\n
\r\n
\r\n
An affirmative answer opens a further question
\r\n
\r\n
\r\n" + '#markup': "

Indicate here only the grants received from somewhere other than the City of Helsinki in the current and two previous tax years.

\r\n\r\n
\r\n
\r\n
An affirmative answer opens a further question
\r\n
\r\n
\r\n" olemme_saaneet_muita_avustuksia: '#title': 'We have received other grants' '#options': @@ -87,7 +87,7 @@ elements: | '#title': 'Grant issuer' issuer_name: '#title': 'Issuer''s name' - '#help': '

Which body has granted the grant (e.g. name of the ministry)

' + '#help': '

Indicate here only the grants received from somewhere other than the City of Helsinki in the current and two previous tax years.

' year: '#title': Year '#pattern_error': 'Only numbers' @@ -100,7 +100,7 @@ elements: | muut_samaan_tarkoitukseen_haetut_avustukset: '#title': 'Other grants applied for to be used for the same purpose' info_muut_samaan_tarkoitukseen_haettu: - '#text': "

Indicate here only the grants that have been applied for from somewhere other than the City of Helsinki and for which the decisions have not been made yet.

\r\n\r\n
\r\n
\r\n
An affirmative answer opens a further question
\r\n
\r\n
\r\n" + '#markup': "

Indicate here only the grants that have been applied for from somewhere other than the City of Helsinki and for which the decisions have not been made yet.

\r\n\r\n
\r\n
\r\n
An affirmative answer opens a further question
\r\n
\r\n
\r\n" olemme_hakeneet_avustuksia_muualta_kuin_helsingin_kaupungilta: '#title': 'We have applied for grants from somewhere other than the City of Helsinki' '#options': diff --git a/conf/cmi/language/sv/webform.webform.nuortoimpalkka.yml b/conf/cmi/language/sv/webform.webform.nuortoimpalkka.yml index 401c25b623..25f5ca260a 100644 --- a/conf/cmi/language/sv/webform.webform.nuortoimpalkka.yml +++ b/conf/cmi/language/sv/webform.webform.nuortoimpalkka.yml @@ -69,7 +69,7 @@ elements: | muut_samaan_tarkoitukseen_myonnetyt_avustukset: '#title': 'Övriga understöd som beviljats för samma ändamål' info_muut_samaan_tarkoitukseen_myonnetty: - '#text': "

Ange här endast de understöd som beviljats från annanstans än Helsingfors stad under det innevarande beskattningsåret eller de föregående två beskattningsåren.

\r\n\r\n
\r\n
\r\n
Ett jakande svar öppnar ytterligare en fråga
\r\n
\r\n
\r\n" + '#markup': "

Ange här endast de understöd som beviljats från annanstans än Helsingfors stad under det innevarande beskattningsåret eller de föregående två beskattningsåren.

\r\n\r\n
\r\n
\r\n
Ett jakande svar öppnar ytterligare en fråga
\r\n
\r\n
\r\n" olemme_saaneet_muita_avustuksia: '#title': 'Vi har fått andra understöd' '#options': @@ -90,7 +90,7 @@ elements: | '#title': Bidragsgivare issuer_name: '#title': 'Emittentens namn' - '#help': '

Vilket organ har beviljat bidraget (t.ex. namnet på departementet)

' + '#help': '

Ange här endast de understöd som beviljats från annanstans än Helsingfors stad under det innevarande beskattningsåret eller de föregående två beskattningsåren.

' year: '#title': År '#pattern_error': 'Bara siffror' @@ -103,7 +103,7 @@ elements: | muut_samaan_tarkoitukseen_haetut_avustukset: '#title': 'Övriga understöd som ansökts för samma ändamål' info_muut_samaan_tarkoitukseen_haettu: - '#text': "

Ange här endast de understöd som har ansökts från annanstans än Helsingfors stad, men beslut har ännu inte fattats.

\r\n\r\n
\r\n
\r\n
Ett jakande svar öppnar ytterligare en fråga
\r\n
\r\n
\r\n" + '#markup': "

Ange här endast de understöd som har ansökts från annanstans än Helsingfors stad, men beslut har ännu inte fattats.

\r\n\r\n
\r\n
\r\n
Ett jakande svar öppnar ytterligare en fråga
\r\n
\r\n
\r\n" olemme_hakeneet_avustuksia_muualta_kuin_helsingin_kaupungilta: '#title': 'Vi har ansökt om understöd från annanstans än Helsingfors stad.' '#options': From a07b95e7c4a65d62421cd53775ce86ce76fe7b44 Mon Sep 17 00:00:00 2001 From: Janne Suominen Date: Mon, 28 Oct 2024 07:22:39 +0200 Subject: [PATCH 15/74] fix: Remove form tool from composer (#1526) * Remove form tool from composer * Update configuration (#1523) --------- Co-authored-by: hel-platta-automation <95360595+hel-platta-automation@users.noreply.github.com> --- composer.json | 1 - composer.lock | 1 - 2 files changed, 2 deletions(-) diff --git a/composer.json b/composer.json index 01674d2f9f..31032edea2 100644 --- a/composer.json +++ b/composer.json @@ -36,7 +36,6 @@ "drupal/helfi_audit_log": "^0.9", "drupal/helfi_azure_fs": "^2", "drupal/helfi_drupal_tools": "dev-main", - "drupal/helfi_formtool_embed": "dev-develop", "drupal/helfi_gdpr_api": "^0.9", "drupal/helfi_helsinki_profiili": "^0.9.27", "drupal/helfi_platform_config": "^4.4", diff --git a/composer.lock b/composer.lock index 281512f68c..05613b0792 100644 --- a/composer.lock +++ b/composer.lock @@ -23636,7 +23636,6 @@ "stability-flags": { "drupal/block_field": 5, "drupal/helfi_drupal_tools": 20, - "drupal/helfi_formtool_embed": 20, "drupal/multivalue_form_element": 10, "drupal/session_limit": 10 }, From c536cad4cf66662ad2f5da01a75345e5f6c594a6 Mon Sep 17 00:00:00 2001 From: hel-platta-automation <95360595+hel-platta-automation@users.noreply.github.com> Date: Mon, 28 Oct 2024 07:23:38 +0200 Subject: [PATCH 16/74] conf: Update configuration (#1532) --- compose.yaml | 2 +- composer.lock | 19 +++++++++++++------ conf/cmi/raven.settings.yml | 8 ++++---- docker/openshift/crons/pubsub.sh | 2 +- 4 files changed, 19 insertions(+), 12 deletions(-) diff --git a/compose.yaml b/compose.yaml index 99f55b2751..c680d449c0 100644 --- a/compose.yaml +++ b/compose.yaml @@ -163,7 +163,7 @@ services: chromium: # @todo Update this to newer version once minkphp supports Selenium 4. # @see https://github.com/minkphp/MinkSelenium2Driver/pull/372 - image: selenium/standalone-chrome:106.0 + image: seleniarm/standalone-chromium:106.0 networks: - internal profiles: diff --git a/composer.lock b/composer.lock index 05613b0792..b6b6f5f217 100644 --- a/composer.lock +++ b/composer.lock @@ -5521,16 +5521,16 @@ }, { "name": "drupal/hdbt_admin", - "version": "3.2.5", + "version": "3.2.6", "source": { "type": "git", "url": "https://github.com/City-of-Helsinki/drupal-hdbt-admin.git", - "reference": "f3284d00c7cb52126c727b744ccac5108195544c" + "reference": "911484522642d80e5a0a47cff1bd74aa578fb0b7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/City-of-Helsinki/drupal-hdbt-admin/zipball/f3284d00c7cb52126c727b744ccac5108195544c", - "reference": "f3284d00c7cb52126c727b744ccac5108195544c", + "url": "https://api.github.com/repos/City-of-Helsinki/drupal-hdbt-admin/zipball/911484522642d80e5a0a47cff1bd74aa578fb0b7", + "reference": "911484522642d80e5a0a47cff1bd74aa578fb0b7", "shasum": "" }, "require": { @@ -5543,6 +5543,13 @@ "drupal/helfi_platform_config": "<4.3" }, "type": "drupal-theme", + "extra": { + "patches": { + "drupal/gin": { + "[#UHF-10892] Gin sidebar nextsibling issue. (https://www.drupal.org/i/3460390)": "https://raw.githubusercontent.com/City-of-Helsinki/drupal-hdbt-admin/d3e6cb08315b8df38696489d2c8f406a67f224b8/patches/gin-3460390-sidebar-nextsibling-innerhtml-rc11.patch" + } + } + }, "license": [ "GPL-2.0+" ], @@ -5551,10 +5558,10 @@ "Drupal" ], "support": { - "source": "https://github.com/City-of-Helsinki/drupal-hdbt-admin/tree/3.2.5", + "source": "https://github.com/City-of-Helsinki/drupal-hdbt-admin/tree/3.2.6", "issues": "https://github.com/City-of-Helsinki/drupal-hdbt-admin/issues" }, - "time": "2024-10-11T08:52:57+00:00" + "time": "2024-10-25T09:29:34+00:00" }, { "name": "drupal/health_check", diff --git a/conf/cmi/raven.settings.yml b/conf/cmi/raven.settings.yml index d2afac6392..d5ad8ba29f 100644 --- a/conf/cmi/raven.settings.yml +++ b/conf/cmi/raven.settings.yml @@ -4,10 +4,10 @@ client_key: '' environment: '' release: '' log_levels: - emergency: true - alert: true - critical: true - error: true + emergency: false + alert: false + critical: false + error: false warning: false notice: false info: false diff --git a/docker/openshift/crons/pubsub.sh b/docker/openshift/crons/pubsub.sh index 7589ed46fa..2bbf674454 100644 --- a/docker/openshift/crons/pubsub.sh +++ b/docker/openshift/crons/pubsub.sh @@ -9,7 +9,7 @@ echo "Running PubSub daemon: $(date +'%Y-%m-%dT%H:%M:%S%:z')" while true do - # PubSub process exists with success return code after + # PubSub process exits with success return code after # certain number of messages and should then be restarted. drush helfi:azure:pubsub-listen || exit 1 done From 6f9c68e04f4f58a4419c1a1d9afd311bdae43473 Mon Sep 17 00:00:00 2001 From: hel-platta-automation <95360595+hel-platta-automation@users.noreply.github.com> Date: Wed, 30 Oct 2024 07:34:27 +0200 Subject: [PATCH 17/74] Update configuration (#1534) --- composer.lock | 322 +++++++++++++++++++++++--------------------------- 1 file changed, 146 insertions(+), 176 deletions(-) diff --git a/composer.lock b/composer.lock index b6b6f5f217..ad13b22899 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "651e43dad6d2c4dc496a5ce9c851467f", + "content-hash": "c161d4f3133fa1d78cc822560407e714", "packages": [ { "name": "asm89/stack-cors", @@ -5486,16 +5486,16 @@ }, { "name": "drupal/hdbt", - "version": "6.7.19", + "version": "6.7.21", "source": { "type": "git", "url": "https://github.com/City-of-Helsinki/drupal-hdbt.git", - "reference": "2fadf070e0fee0baf582073856f47f9c62669d17" + "reference": "1818c4dd00cecf28a890af46f0b59073f8726f43" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/City-of-Helsinki/drupal-hdbt/zipball/2fadf070e0fee0baf582073856f47f9c62669d17", - "reference": "2fadf070e0fee0baf582073856f47f9c62669d17", + "url": "https://api.github.com/repos/City-of-Helsinki/drupal-hdbt/zipball/1818c4dd00cecf28a890af46f0b59073f8726f43", + "reference": "1818c4dd00cecf28a890af46f0b59073f8726f43", "shasum": "" }, "require": { @@ -5514,10 +5514,10 @@ "Drupal" ], "support": { - "source": "https://github.com/City-of-Helsinki/drupal-hdbt/tree/6.7.19", + "source": "https://github.com/City-of-Helsinki/drupal-hdbt/tree/6.7.21", "issues": "https://github.com/City-of-Helsinki/drupal-hdbt/issues" }, - "time": "2024-10-23T10:00:39+00:00" + "time": "2024-10-28T11:30:18+00:00" }, { "name": "drupal/hdbt_admin", @@ -5615,16 +5615,16 @@ }, { "name": "drupal/helfi_api_base", - "version": "2.7.11", + "version": "2.7.12", "source": { "type": "git", "url": "https://github.com/City-of-Helsinki/drupal-module-helfi-api-base.git", - "reference": "77ba93f8f9b02bb3e74344e1de0c50caf4d1557c" + "reference": "386c2ad76f28d11510272497bb016c7fa20b6462" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/City-of-Helsinki/drupal-module-helfi-api-base/zipball/77ba93f8f9b02bb3e74344e1de0c50caf4d1557c", - "reference": "77ba93f8f9b02bb3e74344e1de0c50caf4d1557c", + "url": "https://api.github.com/repos/City-of-Helsinki/drupal-module-helfi-api-base/zipball/386c2ad76f28d11510272497bb016c7fa20b6462", + "reference": "386c2ad76f28d11510272497bb016c7fa20b6462", "shasum": "" }, "require": { @@ -5654,10 +5654,10 @@ ], "description": "Helfi - API Base", "support": { - "source": "https://github.com/City-of-Helsinki/drupal-module-helfi-api-base/tree/2.7.11", + "source": "https://github.com/City-of-Helsinki/drupal-module-helfi-api-base/tree/2.7.12", "issues": "https://github.com/City-of-Helsinki/drupal-module-helfi-api-base/issues" }, - "time": "2024-10-23T08:01:57+00:00" + "time": "2024-10-28T09:35:07+00:00" }, { "name": "drupal/helfi_atv", @@ -5725,16 +5725,16 @@ }, { "name": "drupal/helfi_azure_fs", - "version": "2.0.8", + "version": "2.0.9", "source": { "type": "git", "url": "https://github.com/City-of-Helsinki/drupal-module-helfi-azure-fs.git", - "reference": "c1ce8909d3ab797bd75e391ed6d80c06b82799c9" + "reference": "88aedf8ae9ba1216069fdb2e69366dd6b87c0a38" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/City-of-Helsinki/drupal-module-helfi-azure-fs/zipball/c1ce8909d3ab797bd75e391ed6d80c06b82799c9", - "reference": "c1ce8909d3ab797bd75e391ed6d80c06b82799c9", + "url": "https://api.github.com/repos/City-of-Helsinki/drupal-module-helfi-azure-fs/zipball/88aedf8ae9ba1216069fdb2e69366dd6b87c0a38", + "reference": "88aedf8ae9ba1216069fdb2e69366dd6b87c0a38", "shasum": "" }, "require": { @@ -5764,10 +5764,10 @@ ], "description": "Helfi - Azure FS", "support": { - "source": "https://github.com/City-of-Helsinki/drupal-module-helfi-azure-fs/tree/2.0.8", + "source": "https://github.com/City-of-Helsinki/drupal-module-helfi-azure-fs/tree/2.0.9", "issues": "https://github.com/City-of-Helsinki/drupal-module-helfi-azure-fs/issues" }, - "time": "2024-10-23T12:15:22+00:00" + "time": "2024-10-28T13:45:59+00:00" }, { "name": "drupal/helfi_drupal_tools", @@ -5854,36 +5854,6 @@ }, "time": "2024-10-23T10:28:01+00:00" }, - { - "name": "drupal/helfi_formtool_embed", - "version": "dev-develop", - "source": { - "type": "git", - "url": "https://github.com/City-of-Helsinki/drupal-module-helfi-form-tool-embed.git", - "reference": "535d08eba1b7cb3ae22b4002134c41c5c9c56b14" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/City-of-Helsinki/drupal-module-helfi-form-tool-embed/zipball/535d08eba1b7cb3ae22b4002134c41c5c9c56b14", - "reference": "535d08eba1b7cb3ae22b4002134c41c5c9c56b14", - "shasum": "" - }, - "type": "drupal-module", - "autoload": { - "psr-4": { - "Drupal\\HelfiFormtoolEmbed\\": "src/" - } - }, - "license": [ - "GPL-2.0-or-later" - ], - "description": "Embed form tool to Drupal", - "support": { - "source": "https://github.com/City-of-Helsinki/drupal-module-helfi-form-tool-embed/tree/develop", - "issues": "https://github.com/City-of-Helsinki/drupal-module-helfi-form-tool-embed/issues" - }, - "time": "2022-10-31T06:19:43+00:00" - }, { "name": "drupal/helfi_gdpr_api", "version": "0.9.8", @@ -7574,17 +7544,17 @@ }, { "name": "drupal/oembed_providers", - "version": "2.2.0", + "version": "2.2.1", "source": { "type": "git", "url": "https://git.drupalcode.org/project/oembed_providers.git", - "reference": "2.2.0" + "reference": "2.2.1" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/oembed_providers-2.2.0.zip", - "reference": "2.2.0", - "shasum": "318bafadd5e9b74a593f08e252dc5ea6dec98cd2" + "url": "https://ftp.drupal.org/files/projects/oembed_providers-2.2.1.zip", + "reference": "2.2.1", + "shasum": "b98ffb8bb1b16756bcb7a7ea207dee3e5d414759" }, "require": { "drupal/core": "^10|^11" @@ -7592,8 +7562,8 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "2.2.0", - "datestamp": "1723853165", + "version": "2.2.1", + "datestamp": "1729877996", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -15268,16 +15238,16 @@ }, { "name": "symfony/console", - "version": "v6.4.12", + "version": "v6.4.13", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "72d080eb9edf80e36c19be61f72c98ed8273b765" + "reference": "f793dd5a7d9ae9923e35d0503d08ba734cec1d79" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/72d080eb9edf80e36c19be61f72c98ed8273b765", - "reference": "72d080eb9edf80e36c19be61f72c98ed8273b765", + "url": "https://api.github.com/repos/symfony/console/zipball/f793dd5a7d9ae9923e35d0503d08ba734cec1d79", + "reference": "f793dd5a7d9ae9923e35d0503d08ba734cec1d79", "shasum": "" }, "require": { @@ -15342,7 +15312,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.4.12" + "source": "https://github.com/symfony/console/tree/v6.4.13" }, "funding": [ { @@ -15358,20 +15328,20 @@ "type": "tidelift" } ], - "time": "2024-09-20T08:15:52+00:00" + "time": "2024-10-09T08:40:40+00:00" }, { "name": "symfony/dependency-injection", - "version": "v6.4.12", + "version": "v6.4.13", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "cfb9d34a1cdd4911bc737a5358fd1cf8ebfb536e" + "reference": "728ae8f4e190133ce99d6d5f0bc1e8c8bd7c7a96" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/cfb9d34a1cdd4911bc737a5358fd1cf8ebfb536e", - "reference": "cfb9d34a1cdd4911bc737a5358fd1cf8ebfb536e", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/728ae8f4e190133ce99d6d5f0bc1e8c8bd7c7a96", + "reference": "728ae8f4e190133ce99d6d5f0bc1e8c8bd7c7a96", "shasum": "" }, "require": { @@ -15423,7 +15393,7 @@ "description": "Allows you to standardize and centralize the way objects are constructed in your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dependency-injection/tree/v6.4.12" + "source": "https://github.com/symfony/dependency-injection/tree/v6.4.13" }, "funding": [ { @@ -15439,7 +15409,7 @@ "type": "tidelift" } ], - "time": "2024-09-20T08:18:25+00:00" + "time": "2024-10-25T15:07:50+00:00" }, { "name": "symfony/deprecation-contracts", @@ -15510,16 +15480,16 @@ }, { "name": "symfony/error-handler", - "version": "v6.4.10", + "version": "v6.4.13", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "231f1b2ee80f72daa1972f7340297d67439224f0" + "reference": "e3c78742f86a5b65fe2ac4c4b6b776d92fd7ca0c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/231f1b2ee80f72daa1972f7340297d67439224f0", - "reference": "231f1b2ee80f72daa1972f7340297d67439224f0", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/e3c78742f86a5b65fe2ac4c4b6b776d92fd7ca0c", + "reference": "e3c78742f86a5b65fe2ac4c4b6b776d92fd7ca0c", "shasum": "" }, "require": { @@ -15565,7 +15535,7 @@ "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/error-handler/tree/v6.4.10" + "source": "https://github.com/symfony/error-handler/tree/v6.4.13" }, "funding": [ { @@ -15581,20 +15551,20 @@ "type": "tidelift" } ], - "time": "2024-07-26T12:30:32+00:00" + "time": "2024-09-25T14:18:03+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v6.4.8", + "version": "v6.4.13", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "8d7507f02b06e06815e56bb39aa0128e3806208b" + "reference": "0ffc48080ab3e9132ea74ef4e09d8dcf26bf897e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/8d7507f02b06e06815e56bb39aa0128e3806208b", - "reference": "8d7507f02b06e06815e56bb39aa0128e3806208b", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/0ffc48080ab3e9132ea74ef4e09d8dcf26bf897e", + "reference": "0ffc48080ab3e9132ea74ef4e09d8dcf26bf897e", "shasum": "" }, "require": { @@ -15645,7 +15615,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v6.4.8" + "source": "https://github.com/symfony/event-dispatcher/tree/v6.4.13" }, "funding": [ { @@ -15661,7 +15631,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-09-25T14:18:03+00:00" }, { "name": "symfony/event-dispatcher-contracts", @@ -15741,16 +15711,16 @@ }, { "name": "symfony/filesystem", - "version": "v6.4.12", + "version": "v6.4.13", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "f810e3cbdf7fdc35983968523d09f349fa9ada12" + "reference": "4856c9cf585d5a0313d8d35afd681a526f038dd3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/f810e3cbdf7fdc35983968523d09f349fa9ada12", - "reference": "f810e3cbdf7fdc35983968523d09f349fa9ada12", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/4856c9cf585d5a0313d8d35afd681a526f038dd3", + "reference": "4856c9cf585d5a0313d8d35afd681a526f038dd3", "shasum": "" }, "require": { @@ -15787,7 +15757,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v6.4.12" + "source": "https://github.com/symfony/filesystem/tree/v6.4.13" }, "funding": [ { @@ -15803,20 +15773,20 @@ "type": "tidelift" } ], - "time": "2024-09-16T16:01:33+00:00" + "time": "2024-10-25T15:07:50+00:00" }, { "name": "symfony/finder", - "version": "v6.4.11", + "version": "v6.4.13", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "d7eb6daf8cd7e9ac4976e9576b32042ef7253453" + "reference": "daea9eca0b08d0ed1dc9ab702a46128fd1be4958" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/d7eb6daf8cd7e9ac4976e9576b32042ef7253453", - "reference": "d7eb6daf8cd7e9ac4976e9576b32042ef7253453", + "url": "https://api.github.com/repos/symfony/finder/zipball/daea9eca0b08d0ed1dc9ab702a46128fd1be4958", + "reference": "daea9eca0b08d0ed1dc9ab702a46128fd1be4958", "shasum": "" }, "require": { @@ -15851,7 +15821,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v6.4.11" + "source": "https://github.com/symfony/finder/tree/v6.4.13" }, "funding": [ { @@ -15867,20 +15837,20 @@ "type": "tidelift" } ], - "time": "2024-08-13T14:27:37+00:00" + "time": "2024-10-01T08:30:56+00:00" }, { "name": "symfony/http-foundation", - "version": "v6.4.12", + "version": "v6.4.13", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "133ac043875f59c26c55e79cf074562127cce4d2" + "reference": "4c0341b3e0a7291e752c69d2a1ed9a84b68d604c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/133ac043875f59c26c55e79cf074562127cce4d2", - "reference": "133ac043875f59c26c55e79cf074562127cce4d2", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/4c0341b3e0a7291e752c69d2a1ed9a84b68d604c", + "reference": "4c0341b3e0a7291e752c69d2a1ed9a84b68d604c", "shasum": "" }, "require": { @@ -15928,7 +15898,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v6.4.12" + "source": "https://github.com/symfony/http-foundation/tree/v6.4.13" }, "funding": [ { @@ -15944,20 +15914,20 @@ "type": "tidelift" } ], - "time": "2024-09-20T08:18:25+00:00" + "time": "2024-10-11T19:20:58+00:00" }, { "name": "symfony/http-kernel", - "version": "v6.4.12", + "version": "v6.4.13", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "96df83d51b5f78804f70c093b97310794fd6257b" + "reference": "4474015c363ec0cd3bf47d55657e68630dbae66e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/96df83d51b5f78804f70c093b97310794fd6257b", - "reference": "96df83d51b5f78804f70c093b97310794fd6257b", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/4474015c363ec0cd3bf47d55657e68630dbae66e", + "reference": "4474015c363ec0cd3bf47d55657e68630dbae66e", "shasum": "" }, "require": { @@ -16042,7 +16012,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v6.4.12" + "source": "https://github.com/symfony/http-kernel/tree/v6.4.13" }, "funding": [ { @@ -16058,20 +16028,20 @@ "type": "tidelift" } ], - "time": "2024-09-21T06:02:57+00:00" + "time": "2024-10-27T13:00:29+00:00" }, { "name": "symfony/mailer", - "version": "v6.4.12", + "version": "v6.4.13", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", - "reference": "b6a25408c569ae2366b3f663a4edad19420a9c26" + "reference": "c2f7e0d8d7ac8fe25faccf5d8cac462805db2663" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/b6a25408c569ae2366b3f663a4edad19420a9c26", - "reference": "b6a25408c569ae2366b3f663a4edad19420a9c26", + "url": "https://api.github.com/repos/symfony/mailer/zipball/c2f7e0d8d7ac8fe25faccf5d8cac462805db2663", + "reference": "c2f7e0d8d7ac8fe25faccf5d8cac462805db2663", "shasum": "" }, "require": { @@ -16122,7 +16092,7 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailer/tree/v6.4.12" + "source": "https://github.com/symfony/mailer/tree/v6.4.13" }, "funding": [ { @@ -16138,20 +16108,20 @@ "type": "tidelift" } ], - "time": "2024-09-08T12:30:05+00:00" + "time": "2024-09-25T14:18:03+00:00" }, { "name": "symfony/mime", - "version": "v6.4.12", + "version": "v6.4.13", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "abe16ee7790b16aa525877419deb0f113953f0e1" + "reference": "1de1cf14d99b12c7ebbb850491ec6ae3ed468855" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/abe16ee7790b16aa525877419deb0f113953f0e1", - "reference": "abe16ee7790b16aa525877419deb0f113953f0e1", + "url": "https://api.github.com/repos/symfony/mime/zipball/1de1cf14d99b12c7ebbb850491ec6ae3ed468855", + "reference": "1de1cf14d99b12c7ebbb850491ec6ae3ed468855", "shasum": "" }, "require": { @@ -16207,7 +16177,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v6.4.12" + "source": "https://github.com/symfony/mime/tree/v6.4.13" }, "funding": [ { @@ -16223,20 +16193,20 @@ "type": "tidelift" } ], - "time": "2024-09-20T08:18:25+00:00" + "time": "2024-10-25T15:07:50+00:00" }, { "name": "symfony/options-resolver", - "version": "v7.1.1", + "version": "v7.1.6", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "47aa818121ed3950acd2b58d1d37d08a94f9bf55" + "reference": "85e95eeede2d41cd146146e98c9c81d9214cae85" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/47aa818121ed3950acd2b58d1d37d08a94f9bf55", - "reference": "47aa818121ed3950acd2b58d1d37d08a94f9bf55", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/85e95eeede2d41cd146146e98c9c81d9214cae85", + "reference": "85e95eeede2d41cd146146e98c9c81d9214cae85", "shasum": "" }, "require": { @@ -16274,7 +16244,7 @@ "options" ], "support": { - "source": "https://github.com/symfony/options-resolver/tree/v7.1.1" + "source": "https://github.com/symfony/options-resolver/tree/v7.1.6" }, "funding": [ { @@ -16290,7 +16260,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/polyfill-ctype", @@ -17151,16 +17121,16 @@ }, { "name": "symfony/process", - "version": "v6.4.12", + "version": "v6.4.13", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "3f94e5f13ff58df371a7ead461b6e8068900fbb3" + "reference": "1f9f59b46880201629df3bd950fc5ae8c55b960f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/3f94e5f13ff58df371a7ead461b6e8068900fbb3", - "reference": "3f94e5f13ff58df371a7ead461b6e8068900fbb3", + "url": "https://api.github.com/repos/symfony/process/zipball/1f9f59b46880201629df3bd950fc5ae8c55b960f", + "reference": "1f9f59b46880201629df3bd950fc5ae8c55b960f", "shasum": "" }, "require": { @@ -17192,7 +17162,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v6.4.12" + "source": "https://github.com/symfony/process/tree/v6.4.13" }, "funding": [ { @@ -17208,20 +17178,20 @@ "type": "tidelift" } ], - "time": "2024-09-17T12:47:12+00:00" + "time": "2024-09-25T14:18:03+00:00" }, { "name": "symfony/psr-http-message-bridge", - "version": "v6.4.11", + "version": "v6.4.13", "source": { "type": "git", "url": "https://github.com/symfony/psr-http-message-bridge.git", - "reference": "74835ba54eca99a38f374f7a6d932fa510124773" + "reference": "c9cf83326a1074f83a738fc5320945abf7fb7fec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/74835ba54eca99a38f374f7a6d932fa510124773", - "reference": "74835ba54eca99a38f374f7a6d932fa510124773", + "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/c9cf83326a1074f83a738fc5320945abf7fb7fec", + "reference": "c9cf83326a1074f83a738fc5320945abf7fb7fec", "shasum": "" }, "require": { @@ -17275,7 +17245,7 @@ "psr-7" ], "support": { - "source": "https://github.com/symfony/psr-http-message-bridge/tree/v6.4.11" + "source": "https://github.com/symfony/psr-http-message-bridge/tree/v6.4.13" }, "funding": [ { @@ -17291,20 +17261,20 @@ "type": "tidelift" } ], - "time": "2024-08-14T13:55:58+00:00" + "time": "2024-09-25T14:18:03+00:00" }, { "name": "symfony/routing", - "version": "v6.4.12", + "version": "v6.4.13", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "a7c8036bd159486228dc9be3e846a00a0dda9f9f" + "reference": "640a74250d13f9c30d5ca045b6aaaabcc8215278" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/a7c8036bd159486228dc9be3e846a00a0dda9f9f", - "reference": "a7c8036bd159486228dc9be3e846a00a0dda9f9f", + "url": "https://api.github.com/repos/symfony/routing/zipball/640a74250d13f9c30d5ca045b6aaaabcc8215278", + "reference": "640a74250d13f9c30d5ca045b6aaaabcc8215278", "shasum": "" }, "require": { @@ -17358,7 +17328,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v6.4.12" + "source": "https://github.com/symfony/routing/tree/v6.4.13" }, "funding": [ { @@ -17374,20 +17344,20 @@ "type": "tidelift" } ], - "time": "2024-09-20T08:32:26+00:00" + "time": "2024-10-01T08:30:56+00:00" }, { "name": "symfony/serializer", - "version": "v6.4.12", + "version": "v6.4.13", "source": { "type": "git", "url": "https://github.com/symfony/serializer.git", - "reference": "10ae9c1b90f4809ccb7277cc8fe8d80b3af4412c" + "reference": "8be421505938b11a0ca4f656e4322232236386f0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/serializer/zipball/10ae9c1b90f4809ccb7277cc8fe8d80b3af4412c", - "reference": "10ae9c1b90f4809ccb7277cc8fe8d80b3af4412c", + "url": "https://api.github.com/repos/symfony/serializer/zipball/8be421505938b11a0ca4f656e4322232236386f0", + "reference": "8be421505938b11a0ca4f656e4322232236386f0", "shasum": "" }, "require": { @@ -17456,7 +17426,7 @@ "description": "Handles serializing and deserializing data structures, including object graphs, into array structures or other formats like XML and JSON.", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/serializer/tree/v6.4.12" + "source": "https://github.com/symfony/serializer/tree/v6.4.13" }, "funding": [ { @@ -17472,7 +17442,7 @@ "type": "tidelift" } ], - "time": "2024-09-20T08:15:52+00:00" + "time": "2024-10-03T09:58:04+00:00" }, { "name": "symfony/service-contracts", @@ -17559,16 +17529,16 @@ }, { "name": "symfony/string", - "version": "v6.4.12", + "version": "v6.4.13", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "f8a1ccebd0997e16112dfecfd74220b78e5b284b" + "reference": "38371c60c71c72b3d64d8d76f6b1bb81a2cc3627" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/f8a1ccebd0997e16112dfecfd74220b78e5b284b", - "reference": "f8a1ccebd0997e16112dfecfd74220b78e5b284b", + "url": "https://api.github.com/repos/symfony/string/zipball/38371c60c71c72b3d64d8d76f6b1bb81a2cc3627", + "reference": "38371c60c71c72b3d64d8d76f6b1bb81a2cc3627", "shasum": "" }, "require": { @@ -17625,7 +17595,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v6.4.12" + "source": "https://github.com/symfony/string/tree/v6.4.13" }, "funding": [ { @@ -17641,7 +17611,7 @@ "type": "tidelift" } ], - "time": "2024-09-20T08:15:52+00:00" + "time": "2024-09-25T14:18:03+00:00" }, { "name": "symfony/translation", @@ -17818,16 +17788,16 @@ }, { "name": "symfony/validator", - "version": "v6.4.12", + "version": "v6.4.13", "source": { "type": "git", "url": "https://github.com/symfony/validator.git", - "reference": "6da1f0a1ee73d060a411d832cbe0539cfe9bbaa0" + "reference": "68e0bf4522756269d9bff801a16701b2ed5eb730" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/validator/zipball/6da1f0a1ee73d060a411d832cbe0539cfe9bbaa0", - "reference": "6da1f0a1ee73d060a411d832cbe0539cfe9bbaa0", + "url": "https://api.github.com/repos/symfony/validator/zipball/68e0bf4522756269d9bff801a16701b2ed5eb730", + "reference": "68e0bf4522756269d9bff801a16701b2ed5eb730", "shasum": "" }, "require": { @@ -17895,7 +17865,7 @@ "description": "Provides tools to validate values", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/validator/tree/v6.4.12" + "source": "https://github.com/symfony/validator/tree/v6.4.13" }, "funding": [ { @@ -17911,20 +17881,20 @@ "type": "tidelift" } ], - "time": "2024-09-20T08:18:25+00:00" + "time": "2024-10-25T15:07:50+00:00" }, { "name": "symfony/var-dumper", - "version": "v6.4.11", + "version": "v6.4.13", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "ee14c8254a480913268b1e3b1cba8045ed122694" + "reference": "2acb151474ed8cb43624e3f41a0bf7c4c8ce4f41" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/ee14c8254a480913268b1e3b1cba8045ed122694", - "reference": "ee14c8254a480913268b1e3b1cba8045ed122694", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/2acb151474ed8cb43624e3f41a0bf7c4c8ce4f41", + "reference": "2acb151474ed8cb43624e3f41a0bf7c4c8ce4f41", "shasum": "" }, "require": { @@ -17980,7 +17950,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v6.4.11" + "source": "https://github.com/symfony/var-dumper/tree/v6.4.13" }, "funding": [ { @@ -17996,20 +17966,20 @@ "type": "tidelift" } ], - "time": "2024-08-30T16:03:21+00:00" + "time": "2024-09-25T14:18:03+00:00" }, { "name": "symfony/var-exporter", - "version": "v7.1.2", + "version": "v7.1.6", "source": { "type": "git", "url": "https://github.com/symfony/var-exporter.git", - "reference": "b80a669a2264609f07f1667f891dbfca25eba44c" + "reference": "90173ef89c40e7c8c616653241048705f84130ef" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-exporter/zipball/b80a669a2264609f07f1667f891dbfca25eba44c", - "reference": "b80a669a2264609f07f1667f891dbfca25eba44c", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/90173ef89c40e7c8c616653241048705f84130ef", + "reference": "90173ef89c40e7c8c616653241048705f84130ef", "shasum": "" }, "require": { @@ -18056,7 +18026,7 @@ "serialize" ], "support": { - "source": "https://github.com/symfony/var-exporter/tree/v7.1.2" + "source": "https://github.com/symfony/var-exporter/tree/v7.1.6" }, "funding": [ { @@ -18072,20 +18042,20 @@ "type": "tidelift" } ], - "time": "2024-06-28T08:00:31+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/yaml", - "version": "v6.4.12", + "version": "v6.4.13", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "762ee56b2649659380e0ef4d592d807bc17b7971" + "reference": "e99b4e94d124b29ee4cf3140e1b537d2dad8cec9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/762ee56b2649659380e0ef4d592d807bc17b7971", - "reference": "762ee56b2649659380e0ef4d592d807bc17b7971", + "url": "https://api.github.com/repos/symfony/yaml/zipball/e99b4e94d124b29ee4cf3140e1b537d2dad8cec9", + "reference": "e99b4e94d124b29ee4cf3140e1b537d2dad8cec9", "shasum": "" }, "require": { @@ -18128,7 +18098,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v6.4.12" + "source": "https://github.com/symfony/yaml/tree/v6.4.13" }, "funding": [ { @@ -18144,7 +18114,7 @@ "type": "tidelift" } ], - "time": "2024-09-17T12:47:12+00:00" + "time": "2024-09-25T14:18:03+00:00" }, { "name": "t4web/composer-lock-parser", From 33186d8fc1b47ce3d7f0bf6e0c6d8db205aad7db Mon Sep 17 00:00:00 2001 From: Janne Suominen Date: Wed, 30 Oct 2024 08:59:28 +0200 Subject: [PATCH 18/74] fix: Add suffix for filenames to force unique files. (#1536) --- e2e/utils/input_helpers.ts | 42 +++++++++++++++++++++++++++----------- 1 file changed, 30 insertions(+), 12 deletions(-) diff --git a/e2e/utils/input_helpers.ts b/e2e/utils/input_helpers.ts index 4ab7e72794..ac828a354f 100644 --- a/e2e/utils/input_helpers.ts +++ b/e2e/utils/input_helpers.ts @@ -1,6 +1,8 @@ import {expect, Locator, Page} from "@playwright/test"; import {FormFieldWithRemove, Selector, isDynamicMultiValueField, isMultiValueField} from "./data/test_data"; import {logger} from "./logger"; +import { promises as fs } from 'fs'; +import { join, dirname, extname, basename } from 'path'; /** @@ -467,7 +469,8 @@ const fillMultiValueField = async (page: Page, formField: Partial { - if (!filePath) { logger('No file defined in', uploadSelector); return; } - const fileChooserPromise = page.waitForEvent('filechooser'); - const fileInput = await page.locator(uploadSelector); - await fileInput.click(); - const fileChooser = await fileChooserPromise; - await fileChooser.setFiles(filePath); - await fileInput.waitFor({state: 'hidden'}); - const resultLink = await page.locator(fileLinkSelector); - await expect(fileInput).toBeHidden(); - await expect(resultLink).toBeVisible(); -} + + // Create a new file name + const tempDir = dirname(filePath); + const fileExt = extname(filePath); + const fileName = basename(filePath, fileExt); + const newFileName = `${fileName}-${Date.now()}${fileExt}`; + const newFilePath = join(tempDir, newFileName); + + // Rename the original file to the new file name + await fs.rename(filePath, newFilePath); + + try { + const fileChooserPromise = page.waitForEvent('filechooser'); + const fileInput = page.locator(uploadSelector); + await fileInput.click(); + const fileChooser = await fileChooserPromise; + await fileChooser.setFiles(newFilePath); + await fileInput.waitFor({ state: 'hidden' }); + const resultLink = page.locator(fileLinkSelector); + await expect(fileInput).toBeHidden(); + await expect(resultLink).toBeVisible(); + } finally { + // Rename the file back to its original name + await fs.rename(newFilePath, filePath); + } +}; /** * The clickButton function. From 204cb91afe398881a4c5489a7067d6c449527b99 Mon Sep 17 00:00:00 2001 From: hel-platta-automation <95360595+hel-platta-automation@users.noreply.github.com> Date: Wed, 30 Oct 2024 12:08:02 +0200 Subject: [PATCH 19/74] Update configuration (#1537) Co-authored-by: khalima <1712902+khalima@users.noreply.github.com> --- composer.lock | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/composer.lock b/composer.lock index ad13b22899..51a5419b10 100644 --- a/composer.lock +++ b/composer.lock @@ -1450,16 +1450,16 @@ }, { "name": "devizzent/cebe-php-openapi", - "version": "1.0.3", + "version": "1.1.0", "source": { "type": "git", "url": "https://github.com/DEVizzent/cebe-php-openapi.git", - "reference": "b5a5de835dcb1642094fe76568451bd73b8fc0ab" + "reference": "9ae960c072eda54d8d0eb9dc14c1e6d815167347" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/DEVizzent/cebe-php-openapi/zipball/b5a5de835dcb1642094fe76568451bd73b8fc0ab", - "reference": "b5a5de835dcb1642094fe76568451bd73b8fc0ab", + "url": "https://api.github.com/repos/DEVizzent/cebe-php-openapi/zipball/9ae960c072eda54d8d0eb9dc14c1e6d815167347", + "reference": "9ae960c072eda54d8d0eb9dc14c1e6d815167347", "shasum": "" }, "require": { @@ -1471,6 +1471,9 @@ "conflict": { "symfony/yaml": "3.4.0 - 3.4.4 || 4.0.0 - 4.4.17 || 5.0.0 - 5.1.9 || 5.2.0" }, + "replace": { + "cebe/php-openapi": "1.7.0" + }, "require-dev": { "apis-guru/openapi-directory": "1.0.0", "cebe/indent": "*", @@ -1478,7 +1481,7 @@ "oai/openapi-specification-3.0": "3.0.3", "oai/openapi-specification-3.1": "3.1.0", "phpstan/phpstan": "^0.12.0", - "phpunit/phpunit": "^6.5 || ^7.5 || ^8.5 || ^9.4" + "phpunit/phpunit": "^6.5 || ^7.5 || ^8.5 || ^9.4 || ^11.4" }, "bin": [ "bin/php-openapi" @@ -1519,7 +1522,7 @@ "issues": "https://github.com/DEVizzent/cebe-php-openapi/issues", "source": "https://github.com/DEVizzent/cebe-php-openapi" }, - "time": "2024-01-10T11:41:55+00:00" + "time": "2024-10-30T05:57:15+00:00" }, { "name": "dflydev/dot-access-data", @@ -5928,16 +5931,16 @@ }, { "name": "drupal/helfi_platform_config", - "version": "4.6.20", + "version": "4.6.21", "source": { "type": "git", "url": "https://github.com/City-of-Helsinki/drupal-helfi-platform-config.git", - "reference": "f5451a53f0e83dcf1fc811c9ced0687f43cd4b7f" + "reference": "4b5281e6625b2b5f51e7f5a659d72b98ecc91853" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/City-of-Helsinki/drupal-helfi-platform-config/zipball/f5451a53f0e83dcf1fc811c9ced0687f43cd4b7f", - "reference": "f5451a53f0e83dcf1fc811c9ced0687f43cd4b7f", + "url": "https://api.github.com/repos/City-of-Helsinki/drupal-helfi-platform-config/zipball/4b5281e6625b2b5f51e7f5a659d72b98ecc91853", + "reference": "4b5281e6625b2b5f51e7f5a659d72b98ecc91853", "shasum": "" }, "require": { @@ -6056,10 +6059,10 @@ ], "description": "HELfi platform config", "support": { - "source": "https://github.com/City-of-Helsinki/drupal-helfi-platform-config/tree/4.6.20", + "source": "https://github.com/City-of-Helsinki/drupal-helfi-platform-config/tree/4.6.21", "issues": "https://github.com/City-of-Helsinki/drupal-helfi-platform-config/issues" }, - "time": "2024-10-24T12:01:48+00:00" + "time": "2024-10-29T13:15:35+00:00" }, { "name": "drupal/helfi_proxy", From 17f2f1933832c451d3996eb6245aa72270f07acc Mon Sep 17 00:00:00 2001 From: hel-platta-automation <95360595+hel-platta-automation@users.noreply.github.com> Date: Thu, 31 Oct 2024 09:14:46 +0200 Subject: [PATCH 20/74] Update configuration (#1538) --- composer.lock | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/composer.lock b/composer.lock index 51a5419b10..6368b12a3e 100644 --- a/composer.lock +++ b/composer.lock @@ -5489,16 +5489,16 @@ }, { "name": "drupal/hdbt", - "version": "6.7.21", + "version": "6.7.22", "source": { "type": "git", "url": "https://github.com/City-of-Helsinki/drupal-hdbt.git", - "reference": "1818c4dd00cecf28a890af46f0b59073f8726f43" + "reference": "2409e1caca4533d7d7ab8a504140190345ea56a1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/City-of-Helsinki/drupal-hdbt/zipball/1818c4dd00cecf28a890af46f0b59073f8726f43", - "reference": "1818c4dd00cecf28a890af46f0b59073f8726f43", + "url": "https://api.github.com/repos/City-of-Helsinki/drupal-hdbt/zipball/2409e1caca4533d7d7ab8a504140190345ea56a1", + "reference": "2409e1caca4533d7d7ab8a504140190345ea56a1", "shasum": "" }, "require": { @@ -5517,10 +5517,10 @@ "Drupal" ], "support": { - "source": "https://github.com/City-of-Helsinki/drupal-hdbt/tree/6.7.21", + "source": "https://github.com/City-of-Helsinki/drupal-hdbt/tree/6.7.22", "issues": "https://github.com/City-of-Helsinki/drupal-hdbt/issues" }, - "time": "2024-10-28T11:30:18+00:00" + "time": "2024-10-30T13:44:31+00:00" }, { "name": "drupal/hdbt_admin", @@ -5931,16 +5931,16 @@ }, { "name": "drupal/helfi_platform_config", - "version": "4.6.21", + "version": "4.6.22", "source": { "type": "git", "url": "https://github.com/City-of-Helsinki/drupal-helfi-platform-config.git", - "reference": "4b5281e6625b2b5f51e7f5a659d72b98ecc91853" + "reference": "b542e27a74fc2999ad82cd05a179b93058763f63" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/City-of-Helsinki/drupal-helfi-platform-config/zipball/4b5281e6625b2b5f51e7f5a659d72b98ecc91853", - "reference": "4b5281e6625b2b5f51e7f5a659d72b98ecc91853", + "url": "https://api.github.com/repos/City-of-Helsinki/drupal-helfi-platform-config/zipball/b542e27a74fc2999ad82cd05a179b93058763f63", + "reference": "b542e27a74fc2999ad82cd05a179b93058763f63", "shasum": "" }, "require": { @@ -6059,10 +6059,10 @@ ], "description": "HELfi platform config", "support": { - "source": "https://github.com/City-of-Helsinki/drupal-helfi-platform-config/tree/4.6.21", + "source": "https://github.com/City-of-Helsinki/drupal-helfi-platform-config/tree/4.6.22", "issues": "https://github.com/City-of-Helsinki/drupal-helfi-platform-config/issues" }, - "time": "2024-10-29T13:15:35+00:00" + "time": "2024-10-30T13:11:08+00:00" }, { "name": "drupal/helfi_proxy", From 8f0fdcf23507111706e6dbd403f0369f8b2f73ba Mon Sep 17 00:00:00 2001 From: rpnykanen <48206082+rpnykanen@users.noreply.github.com> Date: Thu, 31 Oct 2024 09:30:18 +0200 Subject: [PATCH 21/74] UHF-10826 Update ATV-profile after mandate has been requested (#1531) * UHF-10826: get rid of the unnecessary nesting * UHF-10826: clean the old style properties * UHF-10826: both traits are in base class * UHF-10826: get company data after mandating user and send it to ATV * UHF-10826: missing comment * UHF-10826: Add single document query to HTTP * UHF-10826: Small changes + handle new profile. --------- Co-authored-by: Janne Suominen --- .../Controller/GrantsMandateController.php | 282 +++++++++--------- tools/http/ATV.http | 7 +- 2 files changed, 152 insertions(+), 137 deletions(-) diff --git a/public/modules/custom/grants_mandate/src/Controller/GrantsMandateController.php b/public/modules/custom/grants_mandate/src/Controller/GrantsMandateController.php index 468716943c..234ac8684f 100644 --- a/public/modules/custom/grants_mandate/src/Controller/GrantsMandateController.php +++ b/public/modules/custom/grants_mandate/src/Controller/GrantsMandateController.php @@ -2,19 +2,15 @@ namespace Drupal\grants_mandate\Controller; -use Drupal\Core\Config\ConfigFactoryInterface; use Drupal\Core\Controller\ControllerBase; use Drupal\Core\DependencyInjection\ContainerInjectionInterface; -use Drupal\Core\Language\LanguageManagerInterface; -use Drupal\Core\Logger\LoggerChannel; -use Drupal\Core\Messenger\MessengerTrait; -use Drupal\Core\Session\AccountProxyInterface; -use Drupal\Core\StringTranslation\StringTranslationTrait; use Drupal\Core\Url; use Drupal\grants_handler\Helpers; use Drupal\grants_mandate\GrantsMandateRedirectService; use Drupal\grants_mandate\GrantsMandateService; use Drupal\grants_profile\GrantsProfileService; +use Drupal\grants_profile\ProfileConnector; +use Drupal\helfi_atv\AtvDocument; use Psr\Log\LoggerInterface; use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Component\HttpFoundation\RedirectResponse; @@ -27,52 +23,6 @@ */ class GrantsMandateController extends ControllerBase implements ContainerInjectionInterface { - use MessengerTrait; - use StringTranslationTrait; - - /** - * The request stack used to access request globals. - * - * @var \Symfony\Component\HttpFoundation\RequestStack - */ - protected RequestStack $requestStack; - - /** - * The current user. - * - * @var \Drupal\Core\Session\AccountProxyInterface - */ - protected $currentUser; - - /** - * The language manager. - * - * @var \Drupal\Core\Language\LanguageManagerInterface - */ - protected $languageManager; - - /** - * Mandate service. - * - * @var \Drupal\grants_mandate\GrantsMandateService - */ - protected GrantsMandateService $grantsMandateService; - - - /** - * Access to profile data. - * - * @var \Drupal\grants_profile\GrantsProfileService - */ - protected GrantsProfileService $grantsProfileService; - - /** - * Logger access. - * - * @var \Drupal\Core\Logger\LoggerChannel|\Psr\Log\LoggerInterface - */ - protected LoggerChannel|LoggerInterface $logger; - /** * Allowed roles. * @@ -81,75 +31,57 @@ class GrantsMandateController extends ControllerBase implements ContainerInjecti protected array $allowedRoles; /** - * The redirect service. + * The logger. * - * @var \Drupal\grants_mandate\GrantsMandateRedirectService + * @var \Psr\Log\LoggerInterface */ - protected $redirectService; + private LoggerInterface $logger; /** * Grants Mandate Controller constructor. + * + * @param \Symfony\Component\HttpFoundation\RequestStack $requestStack + * The request stack. + * @param \Drupal\grants_mandate\GrantsMandateService $grantsMandateService + * The grants mandate service. + * @param \Drupal\grants_profile\GrantsProfileService $grantsProfileService + * The grants profile service. + * @param \Drupal\grants_mandate\GrantsMandateRedirectService $redirectService + * The grants mandate redirect service. + * @param \Drupal\grants_profile\ProfileConnector $profileConnector + * The profile connector. */ public function __construct( - RequestStack $requestStack, - AccountProxyInterface $current_user, - LanguageManagerInterface $language_manager, - GrantsMandateService $grantsMandateService, - GrantsProfileService $grantsProfileService, - ConfigFactoryInterface $configFactory, - GrantsMandateRedirectService $redirectService, + private RequestStack $requestStack, + private GrantsMandateService $grantsMandateService, + private GrantsProfileService $grantsProfileService, + private GrantsMandateRedirectService $redirectService, + private ProfileConnector $profileConnector, ) { - $this->requestStack = $requestStack; - $this->currentUser = $current_user; - $this->languageManager = $language_manager; - $this->grantsMandateService = $grantsMandateService; - $this->grantsProfileService = $grantsProfileService; - $this->redirectService = $redirectService; $this->logger = $this->getLogger('grants_mandate'); + $config = $this->config('grants_mandate.settings'); + + $extraRoles = is_array($config->get('extra_access_roles')) ? $config->get('extra_access_roles') : []; $this->allowedRoles = [ 'http://valtuusrekisteri.suomi.fi/avustushakemuksen_tekeminen', 'PJ', 'J', + ...$extraRoles, ]; - $config = $configFactory->get('grants_mandate.settings'); - $extraRoles = $config->get('extra_access_roles'); - if ($extraRoles && is_array($extraRoles)) { - $this->allowedRoles = array_merge($this->allowedRoles, $extraRoles); - } - } - - /** - * Check if user has required role in their mandate. - * - * @param array $roles - * Array of user's roles. - * - * @return bool - * Is user allowed to use this mandate. - */ - protected function hasAllowedRole(array $roles) { - $allowedRoles = $this->allowedRoles; - foreach ($roles as $role) { - if (in_array($role, $allowedRoles)) { - return TRUE; - } - } - return FALSE; } /** * {@inheritdoc} */ public static function create(ContainerInterface $container): GrantsMandateController|static { - return new static( + $controller = new static( $container->get('request_stack'), - $container->get('current_user'), - $container->get('language_manager'), $container->get('grants_mandate.service'), $container->get('grants_profile.service'), - $container->get('config.factory'), $container->get('grants_mandate_redirect.service'), + $container->get('grants_profile.profile_connector'), ); + return $controller->setLoggerFactory($container->get('logger.factory')); } /** @@ -161,64 +93,52 @@ public static function create(ContainerInterface $container): GrantsMandateContr * * @throws \GuzzleHttp\Exception\GuzzleException * @throws \Drupal\grants_mandate\GrantsMandateException + * @throws \Drupal\grants_profile\GrantsProfileException */ public function mandateCallbackYpa(): RedirectResponse { $tOpts = ['context' => 'grants_mandate']; - - $code = $this->requestStack->getMainRequest()->query->get('code'); - $state = $this->requestStack->getMainRequest()->query->get('state'); - $callbackUrl = Url::fromRoute('grants_mandate.callback_ypa', [], ['absolute' => TRUE]) ->toString(); $appEnv = Helpers::getAppEnv(); - if (is_string($code) && $code != '') { - $this->grantsMandateService->changeCodeToToken($code, $callbackUrl); - $roles = $this->grantsMandateService->getRoles(); - $isAllowed = FALSE; - if ($roles && isset($roles[0]) && $roles[0]['roles']) { - $rolesArray = $roles[0]['roles']; - $isAllowed = $this->hasAllowedRole($rolesArray); - } - if (!$isAllowed && !str_contains($appEnv, 'LOCAL')) { - $this->messenger()->addError($this->t('Your mandate does not allow you to use this service.', [], $tOpts)); - // Redirect user to grants profile page. - $redirectUrl = Url::fromRoute('grants_mandate.mandateform'); - return new RedirectResponse($redirectUrl->toString()); - } - - $roles = reset($roles); - $roles['type'] = 'registered_community'; - $this->grantsProfileService->setSelectedRoleData($roles); + // We need to exchange the code to token that can be used to authorize + // the user in oAuth calls. + $code = $this->requestStack->getMainRequest()->query->get('code'); + if (!is_string($code) || !$code) { + // If code is not set, we need to handle the error and not allow + // user to progress. + return $this->handleNoCode($tOpts); } - else { - - $error = $this->requestStack->getMainRequest()->query->get('error'); - $error_description = $this->requestStack->getMainRequest()->query->get('error_description'); - $error_uri = $this->requestStack->getMainRequest()->query->get('error_uri'); - - $msg = $this->t('Code exchange error. @error: @error_desc. State: @state, Error URI: @error_uri', - [ - '@error' => $error, - '@error_description' => $error_description, - '@state' => $state, - '@error_uri' => $error_uri, - ], $tOpts); - - $this->logger->error('Error: %error', ['%error' => $msg->render()]); - - $this->messenger()->addError($this->t('Mandate process was interrupted or there was an error. Please try again.', [], $tOpts)); + // If we have code, we can then exchange it to token. + $this->grantsMandateService->changeCodeToToken($code, $callbackUrl); + $roles = $this->grantsMandateService->getRoles(); + $isAllowed = FALSE; + if ($roles && isset($roles[0]) && $roles[0]['roles']) { + $rolesArray = $roles[0]['roles']; + $isAllowed = $this->hasAllowedRole($rolesArray); + } + if (!$isAllowed && !str_contains($appEnv, 'LOCAL')) { + $this->messenger() + ->addError($this->t('Your mandate does not allow you to use this service.', [], $tOpts)); // Redirect user to grants profile page. $redirectUrl = Url::fromRoute('grants_mandate.mandateform'); return new RedirectResponse($redirectUrl->toString()); } + $roles = reset($roles); + $roles['type'] = 'registered_community'; + $this->grantsProfileService->setSelectedRoleData($roles); + $selectedRoleData = $this->grantsProfileService->getSelectedRoleData(); - // Load grants profile. + /** @var \Drupal\helfi_atv\AtvDocument $grantsProfile */ $grantsProfile = $this->grantsProfileService->getGrantsProfile($selectedRoleData, TRUE); + if ($grantsProfile) { + $this->updateProfileWithRecentData($selectedRoleData['identifier'], $grantsProfile); + } + // Redirect user based on if the user has a profile. $redirectUrl = $grantsProfile ? Url::fromRoute('grants_oma_asiointi.front') : Url::fromRoute('grants_profile.edit'); $defaultRedirect = new RedirectResponse($redirectUrl->toString()); @@ -226,16 +146,106 @@ public function mandateCallbackYpa(): RedirectResponse { return $this->redirectService->getRedirect($defaultRedirect); } + /** + * Api did not return a valid code. + * + * @param array $tOpts + * The options. + * + * @return \Symfony\Component\HttpFoundation\RedirectResponse + * Redirect in case of bad code. + */ + private function handleNoCode(array $tOpts): RedirectResponse { + $state = $this->requestStack->getMainRequest()->query->get('state'); + + $error = $this->requestStack->getMainRequest()->query->get('error'); + $error_description = $this->requestStack->getMainRequest()->query->get('error_description'); + $error_uri = $this->requestStack->getMainRequest()->query->get('error_uri'); + + $msg = $this->t('Code exchange error. @error: @error_desc. State: @state, Error URI: @error_uri', + [ + '@error' => $error, + '@error_description' => $error_description, + '@state' => $state, + '@error_uri' => $error_uri, + ], $tOpts); + + $this->logger->error('Error: %error', ['%error' => $msg->render()]); + + $this->messenger() + ->addError($this->t('Mandate process was interrupted or there was an error. Please try again.', [], $tOpts)); + // Redirect user to grants profile page. + $redirectUrl = Url::fromRoute('grants_mandate.mandateform'); + return new RedirectResponse($redirectUrl->toString()); + } + + /** + * Check if user has required role in their mandate. + * + * @param array $roles + * Array of user's roles. + * + * @return bool + * Is user allowed to use this mandate. + */ + protected function hasAllowedRole(array $roles) { + $allowedRoles = $this->allowedRoles; + foreach ($roles as $role) { + if (in_array($role, $allowedRoles)) { + return TRUE; + } + } + return FALSE; + } + /** * Callback for user mandates. */ public function mandateCallbackHpa() { + throw new \Exception('Called a function which has no implementation'); } /** * Callback for hpa listing. */ public function mandateCallbackHpaList() { + throw new \Exception('Called a function which has no implementation'); + } + + /** + * Update user profile data from ytj/yrtti and save it. + * + * @param string $identifier + * Business to get data for. + * @param \Drupal\helfi_atv\AtvDocument $grantsProfile + * Grants profile to update. + * + * @return void + * No return. + * + * @throws \GuzzleHttp\Exception\GuzzleException + */ + public function updateProfileWithRecentData( + string $identifier, + AtvDocument $grantsProfile, + ): void { + + $grantsProfileContent = $grantsProfile->getContent(); + try { + $companyData = $this->profileConnector + ->getRegisteredCompanyDataFromYdjhClient($identifier); + + $grantsProfileContent['businessId'] = $companyData['businessId']; + $grantsProfileContent['companyHome'] = $companyData['companyHome']; + $grantsProfileContent['registrationDate'] = $companyData['registrationDate']; + + $this->grantsProfileService->saveGrantsProfile($grantsProfileContent); + } + catch (\Exception $e) { + // Failing at this point does not matter, the execution can continue. + $this->logger + ->error('Failed to update grants profile after getting the mandate.'); + } } } diff --git a/tools/http/ATV.http b/tools/http/ATV.http index be6ec438c4..094be07b8b 100644 --- a/tools/http/ATV.http +++ b/tools/http/ATV.http @@ -1,4 +1,9 @@ -# Get single document by transaction_id +# Get single document by document id +GET {{atvUrl}}/v1/documents/{{document_id}} +Accept-Encoding: utf8 +X-Api-Key: {{atvApiKey}} + +#### Get single document by transaction_id GET {{atvUrl}}/v1/documents/? transaction_id={{transaction_id}} Accept-Encoding: utf8 From cd7080ad7253da6766d82d2da5ac51ce7cb90d1c Mon Sep 17 00:00:00 2001 From: hel-platta-automation <95360595+hel-platta-automation@users.noreply.github.com> Date: Mon, 4 Nov 2024 06:34:27 +0200 Subject: [PATCH 22/74] Update configuration (#1541) --- composer.lock | 52 +++++++++++++++++++++++++-------------------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/composer.lock b/composer.lock index 6368b12a3e..a953e63f0b 100644 --- a/composer.lock +++ b/composer.lock @@ -2320,17 +2320,17 @@ }, { "name": "drupal/admin_toolbar", - "version": "3.5.0", + "version": "3.5.1", "source": { "type": "git", "url": "https://git.drupalcode.org/project/admin_toolbar.git", - "reference": "3.5.0" + "reference": "3.5.1" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/admin_toolbar-3.5.0.zip", - "reference": "3.5.0", - "shasum": "099e8d4dc98e1d551b4f9cffdc39599eb8ad04e8" + "url": "https://ftp.drupal.org/files/projects/admin_toolbar-3.5.1.zip", + "reference": "3.5.1", + "shasum": "b5215109836f7fade374fef531231e36c1c9b945" }, "require": { "drupal/core": "^9.5 || ^10 || ^11" @@ -2341,8 +2341,8 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "3.5.0", - "datestamp": "1722639094", + "version": "3.5.1", + "datestamp": "1730409973", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -5524,16 +5524,16 @@ }, { "name": "drupal/hdbt_admin", - "version": "3.2.6", + "version": "3.2.7", "source": { "type": "git", "url": "https://github.com/City-of-Helsinki/drupal-hdbt-admin.git", - "reference": "911484522642d80e5a0a47cff1bd74aa578fb0b7" + "reference": "76454c97d12ea80c2e6859fea8d5926dca80bf7e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/City-of-Helsinki/drupal-hdbt-admin/zipball/911484522642d80e5a0a47cff1bd74aa578fb0b7", - "reference": "911484522642d80e5a0a47cff1bd74aa578fb0b7", + "url": "https://api.github.com/repos/City-of-Helsinki/drupal-hdbt-admin/zipball/76454c97d12ea80c2e6859fea8d5926dca80bf7e", + "reference": "76454c97d12ea80c2e6859fea8d5926dca80bf7e", "shasum": "" }, "require": { @@ -5561,10 +5561,10 @@ "Drupal" ], "support": { - "source": "https://github.com/City-of-Helsinki/drupal-hdbt-admin/tree/3.2.6", + "source": "https://github.com/City-of-Helsinki/drupal-hdbt-admin/tree/3.2.7", "issues": "https://github.com/City-of-Helsinki/drupal-hdbt-admin/issues" }, - "time": "2024-10-25T09:29:34+00:00" + "time": "2024-11-01T05:47:57+00:00" }, { "name": "drupal/health_check", @@ -5931,16 +5931,16 @@ }, { "name": "drupal/helfi_platform_config", - "version": "4.6.22", + "version": "4.6.23", "source": { "type": "git", "url": "https://github.com/City-of-Helsinki/drupal-helfi-platform-config.git", - "reference": "b542e27a74fc2999ad82cd05a179b93058763f63" + "reference": "fda61dc90882c4799f35cb7d6039987cff4883a4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/City-of-Helsinki/drupal-helfi-platform-config/zipball/b542e27a74fc2999ad82cd05a179b93058763f63", - "reference": "b542e27a74fc2999ad82cd05a179b93058763f63", + "url": "https://api.github.com/repos/City-of-Helsinki/drupal-helfi-platform-config/zipball/fda61dc90882c4799f35cb7d6039987cff4883a4", + "reference": "fda61dc90882c4799f35cb7d6039987cff4883a4", "shasum": "" }, "require": { @@ -6059,10 +6059,10 @@ ], "description": "HELfi platform config", "support": { - "source": "https://github.com/City-of-Helsinki/drupal-helfi-platform-config/tree/4.6.22", + "source": "https://github.com/City-of-Helsinki/drupal-helfi-platform-config/tree/4.6.23", "issues": "https://github.com/City-of-Helsinki/drupal-helfi-platform-config/issues" }, - "time": "2024-10-30T13:11:08+00:00" + "time": "2024-10-31T11:33:34+00:00" }, { "name": "drupal/helfi_proxy", @@ -10988,20 +10988,20 @@ }, { "name": "ezyang/htmlpurifier", - "version": "v4.17.0", + "version": "v4.18.0", "source": { "type": "git", "url": "https://github.com/ezyang/htmlpurifier.git", - "reference": "bbc513d79acf6691fa9cf10f192c90dd2957f18c" + "reference": "cb56001e54359df7ae76dc522d08845dc741621b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/bbc513d79acf6691fa9cf10f192c90dd2957f18c", - "reference": "bbc513d79acf6691fa9cf10f192c90dd2957f18c", + "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/cb56001e54359df7ae76dc522d08845dc741621b", + "reference": "cb56001e54359df7ae76dc522d08845dc741621b", "shasum": "" }, "require": { - "php": "~5.6.0 || ~7.0.0 || ~7.1.0 || ~7.2.0 || ~7.3.0 || ~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0" + "php": "~5.6.0 || ~7.0.0 || ~7.1.0 || ~7.2.0 || ~7.3.0 || ~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0" }, "require-dev": { "cerdic/css-tidy": "^1.7 || ^2.0", @@ -11043,9 +11043,9 @@ ], "support": { "issues": "https://github.com/ezyang/htmlpurifier/issues", - "source": "https://github.com/ezyang/htmlpurifier/tree/v4.17.0" + "source": "https://github.com/ezyang/htmlpurifier/tree/v4.18.0" }, - "time": "2023-11-17T15:01:25+00:00" + "time": "2024-11-01T03:51:45+00:00" }, { "name": "fileeye/mimemap", From 0dfc0ad4335b5b18ad82b41c78eb0925a5a8cca3 Mon Sep 17 00:00:00 2001 From: jeremysteerio <49063836+jeremysteerio@users.noreply.github.com> Date: Mon, 4 Nov 2024 09:43:27 +0200 Subject: [PATCH 23/74] UHF-10741: Force user to visit all pages before submitting application (#1533) * UHF-10741: Force user to visit all pages before submitting application * UHF-10741: Fix phpcs * UHF-10741: Fix translations --- .../grants_handler/grants_handler.module | 5 ++ .../src/GrantsHandlerNavigationHelper.php | 24 ++++++++ .../Plugin/WebformHandler/GrantsHandler.php | 18 +++++- .../custom/grants_handler/translations/fi.po | 12 ++++ .../custom/grants_handler/translations/sv.po | 12 ++++ .../webform/webform-submission-form.html.twig | 61 +++++++++++++------ .../custom/hdbt_subtheme/translations/fi.po | 8 +++ .../custom/hdbt_subtheme/translations/sv.po | 8 +++ 8 files changed, 128 insertions(+), 20 deletions(-) diff --git a/public/modules/custom/grants_handler/grants_handler.module b/public/modules/custom/grants_handler/grants_handler.module index 39f5111cd1..d5c7a9b218 100644 --- a/public/modules/custom/grants_handler/grants_handler.module +++ b/public/modules/custom/grants_handler/grants_handler.module @@ -1279,6 +1279,11 @@ function grants_handler_preprocess_webform_submission_form(&$variables) { $navigationHelper = \Drupal::service('grants_handler.navigation_helper'); // Get errors for printing. $variables['errors'] = $navigationHelper->getAllErrors($webform_submission); + + $variables['unvisited_pages'] = $navigationHelper->getUnvisitedPages($webform_submission); + $variables['display_visit_all_pages_warning'] = + $navigationHelper->getCurrentPage($webform_submission) === 'webform_preview' && + count($variables['unvisited_pages']) > 0; } /** diff --git a/public/modules/custom/grants_handler/src/GrantsHandlerNavigationHelper.php b/public/modules/custom/grants_handler/src/GrantsHandlerNavigationHelper.php index 3d97cc20f4..c8acccd2b8 100644 --- a/public/modules/custom/grants_handler/src/GrantsHandlerNavigationHelper.php +++ b/public/modules/custom/grants_handler/src/GrantsHandlerNavigationHelper.php @@ -118,6 +118,7 @@ public function __construct( public function getCurrentPage(WebformSubmissionInterface $webformSubmission): string { $pages = $webformSubmission->getWebform() ->getPages('edit', $webformSubmission); + return empty($webformSubmission->getCurrentPage()) ? array_keys($pages)[0] : $webformSubmission->getCurrentPage(); } @@ -267,6 +268,29 @@ public function getPageVisits(WebformSubmissionInterface $webformSubmission): ar return $submission_log; } + /** + * Check if user has visited each page. + * + * @param \Drupal\webform\WebformSubmissionInterface $webformSubmission + * The submission to check. + * + * @return array + * Array of unvisited pages. + */ + public function getUnvisitedPages(WebformSubmissionInterface $webformSubmission) : array { + $page_visits = array_map(function ($entry) { + return $entry->page; + }, $this->getPageVisits($webformSubmission)); + $ignore_visits = ['webform_preview', 'webform_confirmation']; + return array_filter( + $webformSubmission->getWebform()->getPages('edit', $webformSubmission), + function ($name) use ($ignore_visits, $page_visits) { + return !in_array($name, $ignore_visits, TRUE) && !in_array($name, $page_visits, TRUE); + }, + ARRAY_FILTER_USE_KEY + ); + } + /** * Logs the current submission page. * diff --git a/public/modules/custom/grants_handler/src/Plugin/WebformHandler/GrantsHandler.php b/public/modules/custom/grants_handler/src/Plugin/WebformHandler/GrantsHandler.php index 35dfb62087..5b7dcf842d 100644 --- a/public/modules/custom/grants_handler/src/Plugin/WebformHandler/GrantsHandler.php +++ b/public/modules/custom/grants_handler/src/Plugin/WebformHandler/GrantsHandler.php @@ -985,6 +985,13 @@ public function alterForm(array &$form, FormStateInterface $form_state, WebformS } GrantsErrorStorage::setErrors($errors); + + if ( + $this->grantsFormNavigationHelper->getCurrentPage($webform_submission) == 'webform_preview' && + count($this->grantsFormNavigationHelper->getUnvisitedPages($webform_submission)) > 0 + ) { + $form['actions']['submit']['#disabled'] = TRUE; + } } /** @@ -1269,12 +1276,19 @@ public function validateForm( $webform_submission ); - if ($violations->count() === 0) { + $allPagesVisited = count( + $this->grantsFormNavigationHelper->getUnvisitedPages($webform_submission) + ) === 0; + + if ($allPagesVisited && $violations->count() === 0) { // If we have no violations clear all errors. $form_state->clearErrors(); $this->grantsFormNavigationHelper->deleteSubmissionLogs($webform_submission, GrantsHandlerNavigationHelper::ERROR_OPERATION); } - else { + if (!$allPagesVisited) { + $form_state->setErrorByName('unvisited-pages', $this->t('You must visit all pages in the form before you can submit the application.', [], $tOpts)); + } + if ($violations->count() > 0) { // If we HAVE errors, then refresh them from the. $this->messenger() ->addError($this->t('The application cannot be submitted because not all diff --git a/public/modules/custom/grants_handler/translations/fi.po b/public/modules/custom/grants_handler/translations/fi.po index 22923ea94b..88e95d82b0 100644 --- a/public/modules/custom/grants_handler/translations/fi.po +++ b/public/modules/custom/grants_handler/translations/fi.po @@ -632,6 +632,14 @@ msgctxt "grants_handler" msgid "Refresh the page" msgstr "Lataa sivu uudelleen" +msgctxt "grants_handler" +msgid "You must visit all pages in the form before you can submit the application" +msgstr "Käy kaikilla sivuilla ennen kuin lähetät hakemuksen" + +msgctxt "grants_handler" +msgid "Unvisited pages:" +msgstr "Sivut, joilla ei ole käyty:" + msgctxt "grants_handler" msgid "Leave the application" msgstr "Poistu hakemukselta" @@ -655,3 +663,7 @@ msgstr "Sinulla on tallentamattomia muutoksia. Haluatko varmasti poistua hakemuk msgctxt "grants_handler" msgid "Attention" msgstr "Huomio" + +msgctxt "grants_handler" +msgid "You must visit all pages in the form before you can submit the application." +msgstr "Käy kaikilla sivuilla ennen kuin lähetät hakemuksen." diff --git a/public/modules/custom/grants_handler/translations/sv.po b/public/modules/custom/grants_handler/translations/sv.po index 4f0a13a7af..10ee574448 100644 --- a/public/modules/custom/grants_handler/translations/sv.po +++ b/public/modules/custom/grants_handler/translations/sv.po @@ -624,6 +624,14 @@ msgstr "%mail är inte en giltig e-postadress. Använd formen user@example.com." msgid "Remove @item @number" msgstr "Ta bort @item @number" +msgctxt "grants_handler" +msgid "You must visit all pages in the form before you can submit the application" +msgstr "Du måste besöka alla sidor i formuläret innan du kan skicka in ansökan." + +msgctxt "grants_handler" +msgid "Unvisited pages:" +msgstr "Obesökta sidor:" + msgctxt "grants_handler" msgid "Refresh the page" msgstr "Uppdatera sidan" @@ -651,3 +659,7 @@ msgstr "Du har osparade ändringar. Är du säker på att du vill lämna?" msgctxt "grants_handler" msgid "Attention" msgstr "Observera" + +msgctxt "grants_handler" +msgid "You must visit all pages in the form before you can submit the application." +msgstr "Du måste besöka alla sidor i formuläret innan du kan skicka in ansökan." diff --git a/public/themes/custom/hdbt_subtheme/templates/webform/webform-submission-form.html.twig b/public/themes/custom/hdbt_subtheme/templates/webform/webform-submission-form.html.twig index d649e3adf1..b723a4b8e6 100644 --- a/public/themes/custom/hdbt_subtheme/templates/webform/webform-submission-form.html.twig +++ b/public/themes/custom/hdbt_subtheme/templates/webform/webform-submission-form.html.twig @@ -52,27 +52,52 @@ {% endfor %} {% if has_errors is same as true %} -
-
-
- - {{ 'Missing or incomplete information'|t }} +
+
+
+ + {{ 'Missing or incomplete information'|t }} +
+
+
    + {% for page in errors %} + {% for name,element in page %} + {% if name is not same as 'title' %} +
  • + {{ 'Error in page'|t }} {{ page['title'] }}: {{ element }} +
  • + {% endif %} + {% endfor %} + {% endfor %} +
+
-
-
    - {% for page in errors %} - {% for name,element in page %} - {% if name is not same as 'title' %} -
  • - {{ 'Error in page'|t }} {{ page['title'] }}: {{ element }} -
  • - {% endif %} +
+ {% endif %} + + {% if display_visit_all_pages_warning %} +
+
+
+ + + {% trans with {'context': 'grants_theme'} %} + You must visit all pages in the form before you can submit the application + {% endtrans %} + +
+
+ {{ 'Unvisited pages:'|trans({}, {'context': 'grants_theme'}) }} +
    + {% for page in unvisited_pages %} +
  • + {{ page['#title'] }} +
  • {% endfor %} - {% endfor %} -
+ +
-
-
+ {% endif %} {{ form }} diff --git a/public/themes/custom/hdbt_subtheme/translations/fi.po b/public/themes/custom/hdbt_subtheme/translations/fi.po index c964ba099e..0cc19655ef 100644 --- a/public/themes/custom/hdbt_subtheme/translations/fi.po +++ b/public/themes/custom/hdbt_subtheme/translations/fi.po @@ -466,3 +466,11 @@ msgstr "kpl sivulla" msgctxt "grants_theme" msgid "Items per page" msgstr "Merkintöjä sivua kohti" + +msgctxt "grants_theme" +msgid "You must visit all pages in the form before you can submit the application" +msgstr "Käy kaikilla sivuilla ennen kuin lähetät hakemuksen" + +msgctxt "grants_theme" +msgid "Unvisited pages:" +msgstr "Sivut, joilla ei ole käyty:" diff --git a/public/themes/custom/hdbt_subtheme/translations/sv.po b/public/themes/custom/hdbt_subtheme/translations/sv.po index c8b62b047e..3e9662d29b 100644 --- a/public/themes/custom/hdbt_subtheme/translations/sv.po +++ b/public/themes/custom/hdbt_subtheme/translations/sv.po @@ -416,3 +416,11 @@ msgstr "per sida" msgctxt "grants_theme" msgid "Items per page" msgstr "Inlägg per sida" + +msgctxt "grants_theme" +msgid "You must visit all pages in the form before you can submit the application" +msgstr "Du måste besöka alla sidor i formuläret innan du kan skicka in ansökan" + +msgctxt "grants_theme" +msgid "Unvisited pages:" +msgstr "Obesökta sidor:" From 3f2a91cf665e76302c24178750e9998b26c17a73 Mon Sep 17 00:00:00 2001 From: rpnykanen <48206082+rpnykanen@users.noreply.github.com> Date: Tue, 5 Nov 2024 06:43:17 +0200 Subject: [PATCH 24/74] fix: UHF-10845: Update applications from profile data (#1540) * UHF-10845: cleanup * UHF-10845: comments * UHF-10845: update the company information after saing * UHF-10845: correct comment style * UHF-10845: code fixes * UHF-10845: added missing parameter types * UHF-10845: prevent phpstan error by making the class final * UHF-10845: missing entitytypemanager * UHF-10845: code fixes * UHF-10845: fixed docblok * UHF-10845: Refetch profile after saving it to make sure we use latest data. * UHF-10845: clarify that this change is on purpose --------- Co-authored-by: Janne Suominen --- .../Plugin/WebformHandler/GrantsHandler.php | 306 +++++++----------- .../Controller/GrantsMandateController.php | 9 + 2 files changed, 117 insertions(+), 198 deletions(-) diff --git a/public/modules/custom/grants_handler/src/Plugin/WebformHandler/GrantsHandler.php b/public/modules/custom/grants_handler/src/Plugin/WebformHandler/GrantsHandler.php index 5b7dcf842d..6bd4175e73 100644 --- a/public/modules/custom/grants_handler/src/Plugin/WebformHandler/GrantsHandler.php +++ b/public/modules/custom/grants_handler/src/Plugin/WebformHandler/GrantsHandler.php @@ -6,6 +6,7 @@ use Drupal\Core\Datetime\DateFormatter; use Drupal\Core\Datetime\DrupalDateTime; use Drupal\Core\DrupalKernel; +use Drupal\Core\Entity\EntityTypeManagerInterface; use Drupal\Core\Form\FormStateInterface; use Drupal\Core\Plugin\ContainerFactoryPluginInterface; use Drupal\Core\Session\AccountProxyInterface; @@ -58,7 +59,7 @@ * \Drupal\webform\Plugin\WebformHandlerInterface::SUBMISSION_REQUIRED, * ) */ -class GrantsHandler extends WebformHandlerBase { +final class GrantsHandler extends WebformHandlerBase { /** * Form data saved because the data in saved submission is not preserved. @@ -77,7 +78,7 @@ class GrantsHandler extends WebformHandlerBase { * * @var string */ - protected string $applicationType; + protected string $applicationType = ''; /** * Applicant type. @@ -86,21 +87,21 @@ class GrantsHandler extends WebformHandlerBase { * * @var string */ - protected string $applicantType; + protected string $applicantType = ''; /** * Application type ID. * * @var string */ - protected string $applicationTypeID; + protected string $applicationTypeID = ''; /** * Generated application number. * * @var string */ - protected string $applicationNumber; + protected string $applicationNumber = ''; /** * Application acting year options. @@ -118,54 +119,12 @@ class GrantsHandler extends WebformHandlerBase { */ protected string $newStatus; - /** - * Drupal\Core\Session\AccountProxyInterface definition. - * - * @var \Drupal\Core\Session\AccountProxyInterface - */ - protected AccountProxyInterface $currentUser; - - /** - * User data from helsinkiprofiili & auth methods. - * - * @var \Drupal\helfi_helsinki_profiili\HelsinkiProfiiliUserData - */ - protected HelsinkiProfiiliUserData $userExternalData; - - /** - * Access GRants profile. - * - * @var \Drupal\grants_profile\GrantsProfileService - */ - protected GrantsProfileService $grantsProfileService; - - /** - * Date formatter. - * - * @var \Drupal\Core\Datetime\DateFormatter - */ - protected DateFormatter $dateFormatter; - - /** - * All attachment-related things. - * - * @var \Drupal\grants_attachments\AttachmentHandler - */ - protected AttachmentHandler $attachmentHandler; - - /** - * Form lock service. - * - * @var \Drupal\grants_handler\FormLockService - */ - protected FormLockService $formLockService; - /** * Save form trigger for methods where form_state is not available. * * @var string */ - protected string $triggeringElement; + protected string $triggeringElement = ''; /** * Save form for methods where form is not available. @@ -186,80 +145,87 @@ class GrantsHandler extends WebformHandlerBase { * * @var bool */ - protected bool $isRedirect; - - /** - * Help with stored errors. - * - * @var \Drupal\grants_handler\GrantsHandlerNavigationHelper - */ - protected GrantsHandlerNavigationHelper $grantsFormNavigationHelper; - - /** - * The Drupal kernel. - * - * @var \Drupal\Core\DrupalKernel - */ - protected DrupalKernel $kernel; - - /** - * The request stack. - * - * @var \Symfony\Component\HttpFoundation\RequestStack - */ - protected RequestStack $requestStack; - - /** - * Application validator. - * - * @var \Drupal\grants_handler\ApplicationValidator - */ - protected ApplicationValidator $applicationValidator; - - /** - * Status service. - * - * @var \Drupal\grants_handler\ApplicationStatusService - */ - protected ApplicationStatusService $applicationStatusService; + protected bool $isRedirect = FALSE; /** - * Application data service. - * - * @var \Drupal\grants_metadata\ApplicationDataService - */ - protected ApplicationDataService $applicationDataService; - - /** - * Init application data. - * - * @var \Drupal\grants_handler\ApplicationInitService - */ - protected ApplicationInitService $applicationInitService; - - /** - * Uploader class. - * - * @var \Drupal\grants_handler\ApplicationUploaderService + * The constructor. + * + * @param array $configuration + * The configuration. + * @param string $plugin_id + * The plugin id. + * @param mixed $plugin_definition + * The plugin definition. + * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entityTypeManager + * The entity type manager. + * @param \Drupal\Core\Session\AccountProxyInterface $currentUser + * The account proxy. + * @param \Drupal\helfi_helsinki_profiili\HelsinkiProfiiliUserData $userExternalData + * The helsinki profiili user data. + * @param \Drupal\grants_profile\GrantsProfileService $grantsProfileService + * The grants profile service. + * @param \Drupal\Core\Datetime\DateFormatter $dateFormatter + * The date formatter. + * @param \Drupal\grants_attachments\AttachmentHandler $attachmentHandler + * The attachment handler. + * @param \Drupal\grants_handler\GrantsHandlerNavigationHelper $grantsFormNavigationHelper + * The grants form navigation helper. + * @param \Drupal\grants_handler\ApplicationValidator $applicationValidator + * The application validator. + * @param \Drupal\grants_handler\ApplicationStatusService $applicationStatusService + * The application status service. + * @param \Drupal\grants_handler\FormLockService $formLockService + * The form lock service. + * @param \Drupal\Core\DrupalKernel $kernel + * The kernel. + * @param \Symfony\Component\HttpFoundation\RequestStack $requestStack + * The request stack. + * @param \Drupal\grants_metadata\ApplicationDataService $applicationDataService + * The application data service. + * @param \Drupal\grants_handler\ApplicationInitService $applicationInitService + * The application init service. + * @param \Drupal\grants_handler\ApplicationUploaderService $applicationUploaderService + * The application upload service. + * @param \Drupal\grants_handler\ApplicationGetterService $applicationGetterService + * The application getter service. + * @param \Drupal\grants_attachments\AttachmentRemover $attachmentRemover + * The attachment remover. */ - protected ApplicationUploaderService $applicationUploaderService; - - /** - * Access to application data. - * - * @var \Drupal\grants_handler\ApplicationGetterService - */ - protected ApplicationGetterService $applicationGetterService; - - /** - * Attachment remover. - * - * @var \Drupal\grants_attachments\AttachmentRemover - */ - protected AttachmentRemover $attachmentRemover; + public function __construct( + array $configuration, + $plugin_id, + $plugin_definition, + EntityTypeManagerInterface $entityTypeManager, + protected AccountProxyInterface $currentUser, + protected HelsinkiProfiiliUserData $userExternalData, + protected GrantsProfileService $grantsProfileService, + protected DateFormatter $dateFormatter, + protected AttachmentHandler $attachmentHandler, + protected GrantsHandlerNavigationHelper $grantsFormNavigationHelper, + protected ApplicationValidator $applicationValidator, + protected ApplicationStatusService $applicationStatusService, + protected FormLockService $formLockService, + protected DrupalKernel $kernel, + protected RequestStack $requestStack, + protected ApplicationDataService $applicationDataService, + protected ApplicationInitService $applicationInitService, + protected ApplicationUploaderService $applicationUploaderService, + protected ApplicationGetterService $applicationGetterService, + protected AttachmentRemover $attachmentRemover, + ) { + parent::__construct( + $configuration, + $plugin_id, + $plugin_definition, + ); + $this->entityTypeManager = $entityTypeManager; + $this->attachmentHandler->setDebug($this->isDebug()); + $this->applicationValidator->setDebug($this->isDebug()); + $this->applicationStatusService->setDebug($this->isDebug()); + } /** - * {@inheritdoc} + * {@inheritDoc} */ public static function create( ContainerInterface $container, @@ -267,83 +233,28 @@ public static function create( $plugin_id, $plugin_definition, ): WebformHandlerBase|GrantsHandler|ContainerFactoryPluginInterface { - $instance = parent::create($container, $configuration, $plugin_id, $plugin_definition); - - /** @var \Drupal\Core\Session\AccountProxyInterface $currentUser */ - $currentUser = $container->get('current_user'); - $instance->currentUser = $currentUser; - - /** @var \Drupal\helfi_helsinki_profiili\HelsinkiProfiiliUserData $userExternalData */ - $userExternalData = $container->get('helfi_helsinki_profiili.userdata'); - $instance->userExternalData = $userExternalData; - - /** @var \Drupal\grants_profile\GrantsProfileService $grantsProfileService */ - $grantsProfileService = $container->get('grants_profile.service'); - $instance->grantsProfileService = $grantsProfileService; - - /** @var \Drupal\Core\Datetime\DateFormatter $dateFormatter */ - $dateFormatter = $container->get('date.formatter'); - $instance->dateFormatter = $dateFormatter; - - /** @var \Drupal\grants_attachments\AttachmentHandler $attachmentHandler */ - $attachmentHandler = $container->get('grants_attachments.attachment_handler'); - $instance->attachmentHandler = $attachmentHandler; - $instance->attachmentHandler->setDebug($instance->isDebug()); - - /** @var \Drupal\grants_handler\GrantsHandlerNavigationHelper $grantsFormNavigationHelper */ - $grantsFormNavigationHelper = $container->get('grants_handler.navigation_helper'); - $instance->grantsFormNavigationHelper = $grantsFormNavigationHelper; - - /** @var \Drupal\grants_handler\ApplicationValidator $applicationValidator */ - $applicationValidator = $container->get('grants_handler.application_validator'); - $instance->applicationValidator = $applicationValidator; - $instance->applicationValidator->setDebug($instance->isDebug()); - - /** @var \Drupal\grants_handler\ApplicationStatusService $applicationStatusService */ - $applicationStatusService = $container->get('grants_handler.application_status_service'); - $instance->applicationStatusService = $applicationStatusService; - $instance->applicationStatusService->setDebug($instance->isDebug()); - - /** @var \Drupal\grants_handler\FormLockService $formLockService */ - $formLockService = $container->get('grants_handler.form_lock_service'); - $instance->formLockService = $formLockService; - - /** @var \Drupal\Core\DrupalKernel $kernel */ - $kernel = $container->get('kernel'); - $instance->kernel = $kernel; - - /** @var \Symfony\Component\HttpFoundation\RequestStack $requestStack */ - $requestStack = $container->get('request_stack'); - $instance->requestStack = $requestStack; - - /** @var \Drupal\grants_metadata\ApplicationDataService $applicationDataService */ - $applicationDataService = $container->get('grants_metadata.application_data_service'); - $instance->applicationDataService = $applicationDataService; - - /** @var \Drupal\grants_handler\ApplicationInitService $applicationInitService */ - $applicationInitService = $container->get('grants_handler.application_init_service'); - $instance->applicationInitService = $applicationInitService; - - /** @var \Drupal\grants_handler\ApplicationUploaderService $applicationUploaderService */ - $applicationUploaderService = $container->get('grants_handler.application_uploader_service'); - $instance->applicationUploaderService = $applicationUploaderService; - - /** @var \Drupal\grants_handler\ApplicationGetterService $applicationGetterService */ - $applicationGetterService = $container->get('grants_handler.application_getter_service'); - $instance->applicationGetterService = $applicationGetterService; - - /** @var \Drupal\grants_attachments\AttachmentRemover $attachmentRemover */ - $attachmentRemover = $container->get('grants_attachments.attachment_remover'); - $instance->attachmentRemover = $attachmentRemover; - - $instance->triggeringElement = ''; - $instance->applicationNumber = ''; - $instance->applicantType = ''; - $instance->applicationTypeID = ''; - $instance->applicationType = ''; - $instance->isRedirect = FALSE; - - return $instance; + return new self( + $configuration, + $plugin_id, + $plugin_definition, + $container->get('entity_type.manager'), + $container->get('current_user'), + $container->get('helfi_helsinki_profiili.userdata'), + $container->get('grants_profile.service'), + $container->get('date.formatter'), + $container->get('grants_attachments.attachment_handler'), + $container->get('grants_handler.navigation_helper'), + $container->get('grants_handler.application_validator'), + $container->get('grants_handler.application_status_service'), + $container->get('grants_handler.form_lock_service'), + $container->get('kernel'), + $container->get('request_stack'), + $container->get('grants_metadata.application_data_service'), + $container->get('grants_handler.application_init_service'), + $container->get('grants_handler.application_uploader_service'), + $container->get('grants_handler.application_getter_service'), + $container->get('grants_attachments.attachment_remover'), + ); } /** @@ -1548,10 +1459,9 @@ public function postSaveHandleApplicationNumber(WebformSubmissionInterface $webf */ public function postSave(WebformSubmissionInterface $webform_submission, $update = TRUE): void { // Invalidate cache for this submission. - $this->entityTypeManager->getViewBuilder($webform_submission->getWebform() - ->getEntityTypeId())->resetCache([ - $webform_submission, - ]); + $this->entityTypeManager + ->getViewBuilder($webform_submission->getWebform()->getEntityTypeId()) + ->resetCache([$webform_submission]); if (empty($this->submittedFormData)) { return; diff --git a/public/modules/custom/grants_mandate/src/Controller/GrantsMandateController.php b/public/modules/custom/grants_mandate/src/Controller/GrantsMandateController.php index 234ac8684f..d06e91fcfd 100644 --- a/public/modules/custom/grants_mandate/src/Controller/GrantsMandateController.php +++ b/public/modules/custom/grants_mandate/src/Controller/GrantsMandateController.php @@ -237,9 +237,18 @@ public function updateProfileWithRecentData( $grantsProfileContent['businessId'] = $companyData['businessId']; $grantsProfileContent['companyHome'] = $companyData['companyHome']; + + // UHF-10845 Update and refetch the company data after mandating. + // Uncomment to test changing company data. + // phpcs:ignore + // $grantsProfileContent['companyHome'] .= ' test-override-'.random_int(1, 100); + $grantsProfileContent['registrationDate'] = $companyData['registrationDate']; $this->grantsProfileService->saveGrantsProfile($grantsProfileContent); + + $selectedCompany = $this->grantsProfileService->getSelectedRoleData(); + $this->grantsProfileService->getGrantsProfile($selectedCompany, TRUE); } catch (\Exception $e) { // Failing at this point does not matter, the execution can continue. From 3a9ffa336e28db320541471bb14a712218e03a7e Mon Sep 17 00:00:00 2001 From: Janne Suominen Date: Tue, 5 Nov 2024 11:12:00 +0200 Subject: [PATCH 25/74] fix: UHF-10817: Make loading of submissions better. Fix ID63 form same time. Also title loading for new applications. (#1539) * UHF-10537: Update document dl function * UHF-10537: Set processed file types to static * UHF-10537: Load application types via webform. * UHF-10537: Add new example applications. * UHF-10537: New configs * UHF-10537: PHPCS * UHF-10537: Add check for nonexistent UUID * Comment out parent_loadData in storage controller * Comment out parent_loadData in storage controller * UHF-10877: Add rest queries for testing race condition things. Suggestion for fixing race conditions. * UHF-10537: Refactor to support webform title usage. * UHF-10817: PHPCS * UHF-10817: Refactor ApplicationController. * UHF-10817: Remove base Exception throwing. * UHF-10817: A bit more refactoring to remove static methods & calls. * UHF-10817: Fix copy form button in admin UI. --- conf/examples/esimerkki_70_KUVAERILLIS.json | 118 +++-- .../src/AttachmentFixerService.php | 4 +- .../src/AttachmentHandler.php | 1 + .../grants_handler/grants_handler.module | 23 +- .../grants_handler/grants_handler.routing.yml | 4 +- .../grants_handler.services.yml | 9 +- .../src/ApplicationAccessHandler.php | 13 +- .../src/ApplicationGetterService.php | 268 ++++++----- .../grants_handler/src/ApplicationHelpers.php | 332 ++------------ .../src/ApplicationStatusService.php | 4 + .../src/ApplicationUploaderService.php | 70 ++- .../src/Controller/ApplicationController.php | 428 +++--------------- .../src/Controller/AtvPrintViewController.php | 415 +++++++++++++++++ .../src/GrantsHandlerSubmissionStorage.php | 13 - .../Block/ApplicationTimeoutMessageBlock.php | 2 +- .../Plugin/WebformHandler/GrantsHandler.php | 2 +- .../grants_metadata/grants_metadata.module | 3 +- .../grants_metadata.services.yml | 3 +- .../src/ApplicationDataService.php | 56 ++- .../src/DocumentContentMapper.php | 33 +- .../Definition/KuvaErillisDefinition.php | 318 +++++-------- tools/http/ATV.http | 4 +- tools/http/Integraatio.http | 50 ++ tools/http/http-client.env.json | 8 + 24 files changed, 1048 insertions(+), 1133 deletions(-) create mode 100644 public/modules/custom/grants_handler/src/Controller/AtvPrintViewController.php create mode 100644 tools/http/Integraatio.http create mode 100644 tools/http/http-client.env.json diff --git a/conf/examples/esimerkki_70_KUVAERILLIS.json b/conf/examples/esimerkki_70_KUVAERILLIS.json index 6bee156f4d..bbd0d2a5a3 100644 --- a/conf/examples/esimerkki_70_KUVAERILLIS.json +++ b/conf/examples/esimerkki_70_KUVAERILLIS.json @@ -208,62 +208,62 @@ ] ] }, - "customQuestionsInfo": { - "customQuestionsArray": [ - { - "ID": "a", - "label": "Label a", - "value": "Value a", - "valueType": "string" - }, - { - "ID": "b", - "label": "LABEL B", - "value": "Value B", - "valueType": "string" - } - ] - }, - "budgetInfo": { - "incomeGroupsArrayStatic": [ - { - "incomeGroupName": "general", - "otherIncomeRowsArrayStatic": [ - { - "ID": "a", - "label": "Kioskimyynti", - "value": "300.00", - "valueType": "double" - }, - { - "ID": "b", - "label": "Parkkitulot", - "value": "50.00", - "valueType": "double" - } - ] - } - ], - "costGroupsArrayStatic": [ - { - "costGroupName": "general", - "otherCostRowsArrayStatic": [ - { - "ID": "a", - "label": "Kioskiostot", - "value": "100.00", - "valueType": "double" - }, - { - "ID": "b", - "label": "Jätemaksut", - "value": "50.00", - "valueType": "double" - } - ] - } - ] - }, + "customQuestionsInfo": { + "customQuestionsArray": [ + { + "ID": "a", + "label": "Label a", + "value": "Value a", + "valueType": "string" + }, + { + "ID": "b", + "label": "LABEL B", + "value": "Value B", + "valueType": "string" + } + ] + }, + "budgetInfo": { + "incomeGroupsArrayStatic": [ + { + "incomeGroupName": "general", + "otherIncomeRowsArrayStatic": [ + { + "ID": "a", + "label": "Kioskimyynti", + "value": "300.00", + "valueType": "double" + }, + { + "ID": "b", + "label": "Parkkitulot", + "value": "50.00", + "valueType": "double" + } + ] + } + ], + "costGroupsArrayStatic": [ + { + "costGroupName": "general", + "otherCostRowsArrayStatic": [ + { + "ID": "a", + "label": "Kioskiostot", + "value": "100.00", + "valueType": "double" + }, + { + "ID": "b", + "label": "Jätemaksut", + "value": "50.00", + "valueType": "double" + } + ] + } + ] + }, "otherCompensationsInfo": { "otherCompensationsArray": [ [ @@ -299,7 +299,7 @@ } ] ], - "otherAppliedCompensationsArray": [ + "otherAppliedCompensationsArray": [ [ { "ID": "issuer", @@ -368,8 +368,6 @@ } ] }, - - "attachmentsInfo": { "attachmentsArray": [ [ @@ -405,4 +403,4 @@ ] }, "formUpdate": false -} \ No newline at end of file +} diff --git a/public/modules/custom/grants_attachments/src/AttachmentFixerService.php b/public/modules/custom/grants_attachments/src/AttachmentFixerService.php index 87d506fe6e..fd6f379764 100644 --- a/public/modules/custom/grants_attachments/src/AttachmentFixerService.php +++ b/public/modules/custom/grants_attachments/src/AttachmentFixerService.php @@ -40,11 +40,11 @@ public function fixAttachmentsOnApplication(AtvDocument $atvDoc): AtvDocument { // Get the events from the content. $events = $content['events']; // Get the attachment info from the content. - $attachmentInfo = $content['attachmentsInfo']['attachmentsArray']; + $attachmentInfo = $content['attachmentsInfo']['attachmentsArray'] ?? NULL; // Loop attachments and if attachment is not ok, update the integration ID. foreach ($attachments as $attachment) { - if ($this->areAttachmentsOk($events, $attachment, $attachmentInfo, $appEnv)['form'] === FALSE) { + if ($attachmentInfo && $this->areAttachmentsOk($events, $attachment, $attachmentInfo, $appEnv)['form'] === FALSE) { $this->updateIntegrationIdForAttachment($attachment, $attachmentInfo, $appEnv); } } diff --git a/public/modules/custom/grants_attachments/src/AttachmentHandler.php b/public/modules/custom/grants_attachments/src/AttachmentHandler.php index 5730e689e3..94049cbcda 100644 --- a/public/modules/custom/grants_attachments/src/AttachmentHandler.php +++ b/public/modules/custom/grants_attachments/src/AttachmentHandler.php @@ -138,6 +138,7 @@ public static function getAttachmentFieldNames(string $applicationNumber, $preve // This could probably be done just by parsing the application number, // however this more futureproof. $webform = ApplicationHelpers::getWebformFromApplicationNumber($applicationNumber); + if (!$webform) { return []; } diff --git a/public/modules/custom/grants_handler/grants_handler.module b/public/modules/custom/grants_handler/grants_handler.module index d5c7a9b218..ca838b7b9e 100644 --- a/public/modules/custom/grants_handler/grants_handler.module +++ b/public/modules/custom/grants_handler/grants_handler.module @@ -938,7 +938,8 @@ function grants_handler_preprocess_webform_submission_data(&$variables) { /** * Implements hook_preprocess_HOOK(). */ -function grants_handler_preprocess_webform_submission(&$variables) { +function grants_handler_preprocess_webform_submission(&$variables): void { + // Get submission object. /** @var \Drupal\webform\Entity\WebformSubmission $submission */ $submission = $variables['webform_submission']; @@ -1366,7 +1367,6 @@ function grants_handler_preprocess_application_list(&$variables) { * Implements hook_preprocess_HOOK(). */ function grants_handler_preprocess_application_list_item(&$variables): void { - $language = \Drupal::languageManager()->getCurrentLanguage()->getId(); $tOpts = ['context' => 'grants_handler']; // Get status service and get listed statuses. @@ -1382,9 +1382,20 @@ function grants_handler_preprocess_application_list_item(&$variables): void { return; } - $applicationTypes = Helpers::getApplicationTypes(); + if (!isset($submissionData["metadata"]["form_uuid"])) { + \Drupal::logger('grants_handler') + ->error('No form uuid found for submission @submissionId', + ['@submissionId' => $submissionData["application_number"]]); + return; + } + + /** @var \Drupal\grants_handler\ApplicationGetterService $applicationGetterService */ + $applicationGetterService = \Drupal::service('grants_handler.application_getter_service'); - $variables['applicationFormName'] = $applicationTypes[$submissionData["application_type"]][$language]; + // Get webform. + $webform = $applicationGetterService->getWebformFromApplicationNumber($submissionData["application_number"]); + // Set webform title. + $variables['applicationFormName'] = $webform->label(); $variables['applicationNumber'] = $submissionData["application_number"]; @@ -1508,8 +1519,8 @@ function grants_handler_preprocess_application_list_item(&$variables): void { $status = $applicationStatusService->getWebformStatus($webform); - $variables['openStartDate'] = strtotime($thirdPartySettings['applicationOpen']); - $variables['openEndDate'] = strtotime($thirdPartySettings['applicationClose']); + $variables['openStartDate'] = $thirdPartySettings['applicationOpen'] ? strtotime($thirdPartySettings['applicationOpen']) : ''; + $variables['openEndDate'] = $thirdPartySettings['applicationClose'] ? strtotime($thirdPartySettings['applicationClose']) : ''; $variables['isContinuous'] = $thirdPartySettings['applicationContinuous'] != 0; if (!$variables['isContinuous'] && ($variables['openStartDate'] > time() || $variables['openEndDate'] < time())) { $variables['errorType'] = 'NOT_OPEN'; diff --git a/public/modules/custom/grants_handler/grants_handler.routing.yml b/public/modules/custom/grants_handler/grants_handler.routing.yml index 70d03be369..8373248687 100644 --- a/public/modules/custom/grants_handler/grants_handler.routing.yml +++ b/public/modules/custom/grants_handler/grants_handler.routing.yml @@ -61,10 +61,10 @@ grants_handler.copy_application_modal: requirements: _custom_access: '\Drupal\grants_handler\Controller\ApplicationController::accessByApplicationNumber' -grants_handler.print_application_atv: +grants_handler.atv_print_view: path: '/hakemus/{submission_id}/tulosta' defaults: _title_callback: '\Drupal\grants_handler\Controller\ApplicationController::getTitle' - _controller: '\Drupal\grants_handler\Controller\ApplicationController::printViewAtv' + _controller: '\Drupal\grants_handler\Controller\AtvPrintViewController' requirements: _custom_access: '\Drupal\grants_handler\Controller\ApplicationController::accessByApplicationNumber' diff --git a/public/modules/custom/grants_handler/grants_handler.services.yml b/public/modules/custom/grants_handler/grants_handler.services.yml index c054cdd8b7..12ba9cd068 100644 --- a/public/modules/custom/grants_handler/grants_handler.services.yml +++ b/public/modules/custom/grants_handler/grants_handler.services.yml @@ -155,9 +155,14 @@ services: '@messenger', '@grants_handler.application_getter_service', '@helfi_helsinki_profiili.userdata', - '@grants_attachments.attachment_fixer_service' + '@grants_attachments.attachment_fixer_service', + '@current_user', + '@database' ] grants_handler.application_access_handler: class: Drupal\grants_handler\ApplicationAccessHandler - arguments: ['@grants_profile.service'] + arguments: [ + '@grants_profile.service', + '@grants_handler.application_getter_service' + ] diff --git a/public/modules/custom/grants_handler/src/ApplicationAccessHandler.php b/public/modules/custom/grants_handler/src/ApplicationAccessHandler.php index 3919b5d13e..c8181a755e 100644 --- a/public/modules/custom/grants_handler/src/ApplicationAccessHandler.php +++ b/public/modules/custom/grants_handler/src/ApplicationAccessHandler.php @@ -6,7 +6,6 @@ use Drupal\grants_mandate\CompanySelectException; use Drupal\grants_profile\GrantsProfileService; -use Drupal\helfi_atv\AtvDocumentNotFoundException; use Drupal\webform\Entity\WebformSubmission; /** @@ -19,6 +18,7 @@ */ public function __construct( private GrantsProfileService $grantsProfileService, + private ApplicationGetterService $applicationGetterService, ) {} /** @@ -30,7 +30,8 @@ public function __construct( * @return bool * Access status * - * @throws \GuzzleHttp\Exception\GuzzleException + * @throws \Drupal\grants_profile\GrantsProfileException + * @throws \Drupal\grants_mandate\CompanySelectException */ public function singleSubmissionAccess(WebformSubmission $webform_submission): bool { @@ -51,12 +52,12 @@ public function singleSubmissionAccess(WebformSubmission $webform_submission): b return FALSE; } - try { - $atvDoc = ApplicationHelpers::atvDocumentFromApplicationNumber($webformData['application_number']); - } - catch (AtvDocumentNotFoundException $e) { + $atvDoc = $this->applicationGetterService->getAtvDocument($webformData['application_number']); + + if (!$atvDoc) { return FALSE; } + $atvMetadata = $atvDoc->getMetadata(); // Mismatch between profile and application applicant type. if ($companyType !== $webformData['hakijan_tiedot']['applicantType']) { diff --git a/public/modules/custom/grants_handler/src/ApplicationGetterService.php b/public/modules/custom/grants_handler/src/ApplicationGetterService.php index c7b397538e..8e04eb45ee 100644 --- a/public/modules/custom/grants_handler/src/ApplicationGetterService.php +++ b/public/modules/custom/grants_handler/src/ApplicationGetterService.php @@ -6,19 +6,22 @@ use Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException; use Drupal\Component\Plugin\Exception\PluginNotFoundException; -use Drupal\Core\Entity\EntityStorageInterface; use Drupal\Core\Entity\EntityTypeManagerInterface; use Drupal\Core\Logger\LoggerChannelFactoryInterface; use Drupal\Core\Logger\LoggerChannelInterface; use Drupal\grants_mandate\CompanySelectException; -use Drupal\grants_metadata\AtvSchema; use Drupal\grants_metadata\DocumentContentMapper; use Drupal\grants_profile\GrantsProfileService; use Drupal\helfi_atv\AtvDocument; use Drupal\helfi_atv\AtvDocumentNotFoundException; +use Drupal\helfi_atv\AtvFailedToConnectException; use Drupal\helfi_atv\AtvService; use Drupal\helfi_helsinki_profiili\HelsinkiProfiiliUserData; +use Drupal\helfi_helsinki_profiili\TokenExpiredException; +use Drupal\webform\Entity\Webform; use Drupal\webform\Entity\WebformSubmission; +use Drupal\webform\WebformException; +use GuzzleHttp\Exception\GuzzleException; /** * Class to get things related to applications. @@ -32,13 +35,6 @@ final class ApplicationGetterService { */ protected GrantsProfileService $grantsProfileService; - /** - * Atv document holding this application. - * - * @var \Drupal\helfi_atv\AtvDocument - */ - protected AtvDocument $atvDocument; - /** * Log errors. * @@ -47,11 +43,11 @@ final class ApplicationGetterService { protected LoggerChannelInterface $logger; /** - * Webform submission storage. + * Loaded submissions in array to prevent multiple loads. * - * @var \Drupal\Core\Entity\EntityStorageInterface + * @var array */ - protected EntityStorageInterface $storage; + protected array $submissions = []; /** * Constructs an ApplicationGetterService object. @@ -65,11 +61,6 @@ public function __construct( private readonly EntityTypeManagerInterface $entityTypeManager, ) { $this->logger = $loggerChannelFactory->get('application_getter_service'); - try { - $this->storage = $entityTypeManager->getStorage('webform_submission'); - } - catch (InvalidPluginDefinitionException | PluginNotFoundException $e) { - } } /** @@ -90,26 +81,26 @@ public function setGrantsProfileService(GrantsProfileService $grantsProfileServi * @param bool $refetch * Force atv document fetch. * - * @return \Drupal\helfi_atv\AtvDocument + * @return \Drupal\helfi_atv\AtvDocument|null * FEtched document. - * - * @throws \Drupal\helfi_atv\AtvDocumentNotFoundException - * @throws \Drupal\helfi_atv\AtvFailedToConnectException - * @throws \GuzzleHttp\Exception\GuzzleException */ - public function getAtvDocument(string $transactionId, bool $refetch = FALSE): AtvDocument { - - if (!isset($this->atvDocument) || $refetch === TRUE) { - $sParams = [ - 'transaction_id' => $transactionId, - 'lookfor' => 'appenv:' . Helpers::getAppEnv(), - ]; + public function getAtvDocument(string $transactionId, bool $refetch = FALSE): ?AtvDocument { + $sParams = [ + 'transaction_id' => $transactionId, + 'lookfor' => 'appenv:' . Helpers::getAppEnv(), + ]; - $res = $this->helfiAtvAtvService->searchDocuments($sParams); - $this->atvDocument = reset($res); + try { + $result = $this->helfiAtvAtvService->searchDocuments($sParams, $refetch); } - - return $this->atvDocument; + catch (AtvDocumentNotFoundException | AtvFailedToConnectException | TokenExpiredException | GuzzleException $e) { + $this->logger->error( + 'Failed to get document from ATV. Error: @error', + ['@error' => $e->getMessage()] + ); + return NULL; + } + return reset($result); } /** @@ -132,7 +123,7 @@ public function getAtvDocument(string $transactionId, bool $refetch = FALSE): At * * @throws \Drupal\helfi_atv\AtvDocumentNotFoundException * @throws \Drupal\helfi_atv\AtvFailedToConnectException - * @throws \GuzzleHttp\Exception\GuzzleException + * @throws \GuzzleHttp\Exception\GuzzleException|\Drupal\helfi_helsinki_profiili\TokenExpiredException */ public function getCompanyApplications( array $selectedCompany, @@ -141,7 +132,6 @@ public function getCompanyApplications( bool $sortByStatus = FALSE, string $themeHook = '', ): array { - $userData = $this->helfiHelsinkiProfiiliUserdata->getUserData(); $applications = []; @@ -177,72 +167,37 @@ public function getCompanyApplications( $applicationDocuments = $this->helfiAtvAtvService->searchDocuments($searchParams); - /** + /* * Create rows for table. - * - * @var \Drupal\helfi_atv\AtvDocument $document */ foreach ($applicationDocuments as $document) { - // Make sure the type is acceptable one. - $docArray = $document->toArray(); - $id = AtvSchema::extractDataForWebForm( - $docArray['content'], ['applicationNumber'] - ); - if (empty($id['applicationNumber'])) { - continue; - } + $applicationNumber = $document->getTransactionId(); if (array_key_exists($document->getType(), Helpers::getApplicationTypes())) { try { - - // Convert the data. - $dataDefinition = ApplicationHelpers::getDataDefinition($document->getType()); - $submissionData = DocumentContentMapper::documentContentToTypedData( - $document->getContent(), - $dataDefinition, - $document->getMetadata() - ); - - $metaData = $document->getMetadata(); - - // Load the webform submission ID. - $applicationNumber = $submissionData['application_number']; - $serial = ApplicationHelpers::getSerialFromApplicationNumber($applicationNumber); - - $webformUuidExists = isset($metaData['form_uuid']) && !empty($metaData['form_uuid']); - $webform = $webformUuidExists - ? ApplicationHelpers::getWebformByUuid($metaData['form_uuid'], $applicationNumber) - : ApplicationHelpers::getWebformFromApplicationNumber($applicationNumber); - - if (!$webform || !$serial) { - continue; - } - - $submissionId = ApplicationHelpers::getSubmissionIdWithSerialAndWebformId($serial, $webform->id(), $document); + $submission = $this->submissionObjectFromApplicationNumber($applicationNumber, $document, FALSE, TRUE); } catch (\Throwable $e) { $this->logger->error( 'Failed to get submission object from application number. Submission skipped in application listing. ID: @id Error: @error', [ '@error' => $e->getMessage(), - '@id' => $document->getTransactionId(), + '@id' => $document->getTransactionId(), ] ); continue; } - if (!$submissionData || !$submissionId) { - continue; - } + $submissionData = $submission->getData(); $submissionData['messages'] = $this->grantsHandlerMessageService->parseMessages($submissionData); $submission = [ '#theme' => $themeHook, '#submission' => $submissionData, '#document' => $document, - '#webform' => $webform, - '#submission_id' => $submissionId, + '#webform' => $submission->getWebform(), + '#submission_id' => $submission->id(), ]; $ts = strtotime($submissionData['form_timestamp_created'] ?? ''); @@ -303,15 +258,8 @@ public function getCompanyApplications( * @return \Drupal\webform\Entity\WebformSubmission|null * Webform submission. * - * @throws \Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException - * @throws \Drupal\Component\Plugin\Exception\PluginNotFoundException * @throws \Drupal\Core\Entity\EntityStorageException - * @throws \Drupal\Core\TempStore\TempStoreException * @throws \Drupal\grants_mandate\CompanySelectException - * @throws \Drupal\helfi_atv\AtvDocumentNotFoundException - * @throws \Drupal\helfi_atv\AtvFailedToConnectException - * @throws \GuzzleHttp\Exception\GuzzleException - * @throws \Drupal\helfi_helsinki_profiili\TokenExpiredException */ public function submissionObjectFromApplicationNumber( string $applicationNumber, @@ -319,24 +267,10 @@ public function submissionObjectFromApplicationNumber( bool $refetch = FALSE, bool $skipAccessCheck = FALSE, ): ?WebformSubmission { - - $submissionSerial = ApplicationHelpers::getSerialFromApplicationNumber($applicationNumber); - $webform = ApplicationHelpers::getWebformFromApplicationNumber($applicationNumber, TRUE); - - if (!$webform) { - return NULL; + if (isset($this->submissions[$applicationNumber])) { + return $this->submissions[$applicationNumber]; } - $webformIds = array_map(function ($element) { - return $element->id(); - }, $webform); - - $result = $this->storage - ->loadByProperties([ - 'serial' => $submissionSerial, - 'webform_id' => $webformIds, - ]); - $selectedCompany = $this->grantsProfileService->getSelectedRoleData(); // If no company selected, no mandates no access. @@ -344,20 +278,30 @@ public function submissionObjectFromApplicationNumber( throw new CompanySelectException('User not authorised'); } + // We need the ATV document to get the form uuid. if ($document == NULL) { - $sParams = [ - 'transaction_id' => $applicationNumber, - 'lookfor' => 'appenv:' . Helpers::getAppEnv(), - ]; + $document = $this->getAtvDocument($applicationNumber, $refetch); + } - $document = $this->helfiAtvAtvService->searchDocuments( - $sParams, - $refetch - ); - if (empty($document)) { - throw new AtvDocumentNotFoundException('Document not found'); - } - $document = reset($document); + // Get WebFrom from application number. + $webform = $this->getWebformFromApplicationNumber($applicationNumber); + + // Should we throw an error here? + if (!$webform) { + throw new WebformException('Webform not found'); + } + // Get serial from application number. + $submissionSerial = ApplicationHelpers::getSerialFromApplicationNumber($applicationNumber); + + try { + $result = $this->entityTypeManager->getStorage('webform_submission') + ->loadByProperties([ + 'serial' => $submissionSerial, + 'webform_id' => $webform->id(), + ]); + } + catch (InvalidPluginDefinitionException | PluginNotFoundException $e) { + throw new WebformException('Failed to load submission object with ATV data'); } $submissionObject = NULL; @@ -365,48 +309,88 @@ public function submissionObjectFromApplicationNumber( // If there's no local submission with given serial // we can actually create that object on the fly and use that for editing. if (empty($result)) { - $webform = ApplicationHelpers::getWebformFromApplicationNumber($applicationNumber); - if ($webform) { - /** @var \Drupal\webform\Entity\WebformSubmission $submissionObject */ - $submissionObject = WebformSubmission::create(['webform_id' => $webform->id()]); - $submissionObject->set('serial', $submissionSerial); - - // Lets mark that we don't want to generate new application - // number, as we just assigned the serial from ATV application id. - // check GrantsHandler@preSave. - WebformSubmissionNotesHelper::setValue( - $submissionObject, - 'skip_available_number_check', - TRUE - ); - if ($document->getStatus() == 'DRAFT') { - $submissionObject->set('in_draft', TRUE); - } - $submissionObject->save(); + /** @var \Drupal\webform\Entity\WebformSubmission $submissionObject */ + $submissionObject = WebformSubmission::create(['webform_id' => $webform->id()]); + $submissionObject->set('serial', $submissionSerial); + + // Lets mark that we don't want to generate new application + // number, as we just assigned the serial from ATV application id. + // check GrantsHandler@preSave. + WebformSubmissionNotesHelper::setValue( + $submissionObject, + 'skip_available_number_check', + TRUE + ); + if ($document->getStatus() == 'DRAFT') { + $submissionObject->set('in_draft', TRUE); } + $submissionObject->save(); } else { /** @var \Drupal\webform\Entity\WebformSubmission $submissionObject */ $submissionObject = reset($result); } - if ($submissionObject) { - $dataDefinition = ApplicationHelpers::getDataDefinition($document->getType()); + if (!$submissionObject) { + throw new WebformException('Failed to load submission object with ATV data'); + } - $sData = DocumentContentMapper::documentContentToTypedData( - $document->getContent(), - $dataDefinition, - $document->getMetadata() - ); + // Load definition. + $dataDefinition = ApplicationHelpers::getDataDefinition($document->getType()); + + // Build data. + $sData = DocumentContentMapper::documentContentToTypedData( + $document->getContent(), + $dataDefinition, + $document->getMetadata() + ); - $sData['messages'] = $this->grantsHandlerMessageService->parseMessages($sData); + // Parse messages separately. + $sData['messages'] = $this->grantsHandlerMessageService->parseMessages($sData); + + // Set submission data from parsed mapper. + $submissionObject->setData($sData); + + // Set caching, as we don't want to load this again. + $this->submissions[$applicationNumber] = $submissionObject; + + return $submissionObject; + } - // Set submission data from parsed mapper. - $submissionObject->setData($sData); + /** + * Extract webform id from application number string. + * + * @param string $applicationNumber + * Application number. + * + * @return \Drupal\webform\Entity\Webform + * Webform object. + */ + public function getWebformFromApplicationNumber(string $applicationNumber): Webform { + // We need the ATV document to get the form uuid. + $document = $this->getAtvDocument($applicationNumber); + $uuid = $document->getMetadata()['form_uuid']; - return $submissionObject; + try { + // Try to load webform via UUID and return it. + $wids = $this->entityTypeManager->getStorage('webform') + ->getQuery() + ->condition('uuid', $uuid) + ->execute(); + return Webform::load(reset($wids)); + } + catch (InvalidPluginDefinitionException | PluginNotFoundException $e) { + // Log failure. + $this->logger->error( + 'Failed to load webform with uuid: @uuid. Error: @error', + [ + '@uuid' => $uuid, + '@error' => $e->getMessage(), + ] + ); } - return NULL; + // And return webform loaded the old way. + return ApplicationHelpers::getWebformFromApplicationNumber($applicationNumber); } } diff --git a/public/modules/custom/grants_handler/src/ApplicationHelpers.php b/public/modules/custom/grants_handler/src/ApplicationHelpers.php index e57a8d5793..ae7ca2219e 100644 --- a/public/modules/custom/grants_handler/src/ApplicationHelpers.php +++ b/public/modules/custom/grants_handler/src/ApplicationHelpers.php @@ -2,15 +2,8 @@ namespace Drupal\grants_handler; -use Drupal\Component\Datetime\Time; -use Drupal\Core\Database\Database; -use Drupal\grants_mandate\CompanySelectException; -use Drupal\helfi_atv\AtvDocument; -use Drupal\helfi_atv\AtvDocumentNotFoundException; use Drupal\webform\Entity\Webform; use Drupal\webform\Entity\WebformSubmission; -use Drupal\webform\WebformSubmissionInterface; -use Ramsey\Uuid\Uuid; /** * Handle all things related to applications & submission objects themselves. @@ -53,7 +46,6 @@ public static function createApplicationNumber(WebformSubmission &$submission, $ } return self::getApplicationNumberInEnvFormat($appParam, $applicationTypeId, $serial); - } /** @@ -72,7 +64,6 @@ public static function createApplicationNumber(WebformSubmission &$submission, $ * @throws \Drupal\helfi_atv\AtvUnexpectedResponseException */ public static function getAvailableApplicationNumber(WebformSubmission &$submission): string { - $appParam = Helpers::getAppEnv(); $serial = $submission->serial(); $webform_id = $submission->getWebform()->id(); @@ -207,7 +198,6 @@ public static function hasBreakingChangesInNewerVersion(Webform $webform): bool $hasBreakingChanges = $latestApplicationForm->getThirdPartySetting('grants_metadata', 'avus2BreakingChange'); while (!empty($parent)) { - $map[$parent] = $hasBreakingChanges; $loaded_webform = \Drupal::entityTypeManager() @@ -227,7 +217,6 @@ public static function hasBreakingChangesInNewerVersion(Webform $webform): bool } return $map[$uuid] ?? FALSE; - } /** @@ -264,7 +253,6 @@ public static function getWebformFromApplicationNumber(string $applicationNumber // Look for for application type and return if found. $webform = array_filter($webforms, function ($wf) use ($webformTypeId, $applicationTypes, $fieldToCheck) { - $thirdPartySettings = $wf->getThirdPartySettings('grants_metadata'); $thisApplicationTypeConfig = array_filter($applicationTypes, function ($appType) use ($thirdPartySettings) { if (isset($thirdPartySettings["applicationTypeID"]) && @@ -292,123 +280,6 @@ public static function getWebformFromApplicationNumber(string $applicationNumber return reset($webform); } - /** - * Get Webform object by UUID. - * - * @param string $uuid - * Uuid of the webform. - * @param string $application_number - * The application number. - * - * @return \Drupal\webform\Entity\Webform - * Webform object. - */ - public static function getWebformByUuid(string $uuid, string $application_number): Webform|bool|array { - - $wids = \Drupal::entityQuery('webform') - ->condition('uuid', $uuid) - ->execute(); - - // Fallback to original method, if webform for some reason is not found. - if (empty($wids)) { - return self::getWebformFromApplicationNumber($application_number); - } - - return Webform::load(reset($wids)); - } - - /** - * Extract serial numbor from application number string. - * - * @param string $applicationNumber - * Application number. - * @param bool $refetch - * Force refetch from ATV. - * - * @return array|\Drupal\helfi_atv\AtvDocument - * ATV Document - * - * @throws \Drupal\grants_mandate\CompanySelectException - * @throws \Drupal\helfi_atv\AtvDocumentNotFoundException - */ - public static function atvDocumentFromApplicationNumber( - string $applicationNumber, - bool $refetch = FALSE, - ): array|AtvDocument { - - /** @var \Drupal\helfi_atv\AtvService $atvService */ - $atvService = \Drupal::service('helfi_atv.atv_service'); - - $grantsProfileService = \Drupal::service('grants_profile.service'); - $selectedCompany = $grantsProfileService->getSelectedRoleData(); - - // If no company selected, no mandates no access. - if ($selectedCompany == NULL) { - throw new CompanySelectException('User not authorised'); - } - try { - $sParams = [ - 'transaction_id' => $applicationNumber, - 'lookfor' => 'appenv:' . Helpers::getAppEnv(), - ]; - - /** @var \Drupal\helfi_atv\AtvDocument[] $document */ - $document = $atvService->searchDocuments( - $sParams, - $refetch - ); - } - catch (\Throwable $e) { - } - - if (empty($document)) { - throw new AtvDocumentNotFoundException('Document not found'); - } - $document = reset($document); - return $document; - } - - /** - * Set up sender details from helsinkiprofiili data. - * - * @return array - * Sender details. - * - * @throws \Drupal\helfi_helsinki_profiili\TokenExpiredException - * @throws \Drupal\grants_handler\ApplicationException - */ - public static function parseSenderDetails(): array { - - $helfiHelsinkiProfiiliUserdata = \Drupal::service('helfi_helsinki_profiili.userdata'); - - // Set sender information after save so no accidental saving of data. - $userProfileData = $helfiHelsinkiProfiiliUserdata->getUserProfileData(); - $userData = $helfiHelsinkiProfiiliUserdata->getUserData(); - - $senderDetails = []; - - if (isset($userProfileData["myProfile"])) { - $data = $userProfileData["myProfile"]; - } - else { - $data = $userProfileData; - } - - // If no userprofile data, we need to hardcode these values. - if ($userProfileData == NULL || $userData == NULL) { - throw new ApplicationException('No profile data found for user.'); - } - else { - $senderDetails['sender_firstname'] = $data["verifiedPersonalInformation"]["firstName"]; - $senderDetails['sender_lastname'] = $data["verifiedPersonalInformation"]["lastName"]; - $senderDetails['sender_person_id'] = $data["verifiedPersonalInformation"]["nationalIdentificationNumber"]; - $senderDetails['sender_user_id'] = $userData["sub"]; - $senderDetails['sender_email'] = $data["primaryEmail"]["email"]; - } - - return $senderDetails; - } - /** * Get data definition class from application type. * @@ -421,167 +292,6 @@ public static function getDataDefinition(string $type) { return $defClass::create($defId); } - /** - * The getSubmissionIdWithSerialAndWebformId method. - * - * This method queries the database in an attempt to - * find a webform submission ID with the help of a - * submission serial and a webform ID. If one is not - * found, then we create a submission. - * - * @param string $serial - * A webform submission serial. - * @param string $webformId - * A webform ID. - * @param \Drupal\helfi_atv\AtvDocument $document - * An ATV document. - * - * @return string - * A webform submission ID. - * - * @throws \Drupal\Core\Entity\EntityStorageException - * Exception on EntityStorageException. - */ - public static function getSubmissionIdWithSerialAndWebformId( - string $serial, - string $webformId, - AtvDocument $document, - ): string { - $database = Database::getConnection(); - $query = $database->select('webform_submission', 'ws') - ->fields('ws', ['sid']) - ->condition('ws.serial', $serial) - ->condition('ws.webform_id', $webformId); - $result = $query->execute(); - $sid = $result->fetchField(); - - // If a submission ID is found, return it. - if ($sid) { - return $sid; - } - - // If we can't find a submission, then create one. - $webformSubmission = self::createWebformSubmissionWithSerialAndWebformId($serial, $document); - return $webformSubmission->id(); - } - - /** - * The createWebformSubmissionWithSerialAndWebformId method. - * - * This method creates a webform submission and sets the - * webform ID, serial and draft state if needed. - * - * @param string $serial - * A webform submission serial. - * @param \Drupal\helfi_atv\AtvDocument $document - * An ATV document. - * - * @return \Drupal\webform\Entity\WebformSubmission - * A webform submission. - * - * @throws \Drupal\Core\Entity\EntityStorageException - * Exception on EntityStorageException. - */ - protected static function createWebformSubmissionWithSerialAndWebformId( - string $serial, - AtvDocument $document, - ): WebformSubmission { - - $metaData = $document->getMetadata(); - $webformUuidExists = isset($metaData['form_uuid']) && !empty($metaData['form_uuid']); - - $webform = $webformUuidExists - ? self::getWebformByUuid($metaData['form_uuid'], $document->getTransactionId()) - : self::getWebformFromApplicationNumber($document->getTransactionId()); - - $webformId = $webform->id(); - - $submissionObject = WebformSubmission::create(['webform_id' => $webformId]); - $submissionObject->set('serial', $serial); - - // Mark that we don't want to generate new application - // number, as we just assigned the serial from ATV application id. - // Check GrantsHandler@preSave. - WebformSubmissionNotesHelper::setValue( - $submissionObject, - 'skip_available_number_check', - TRUE - ); - if ($document->getStatus() == 'DRAFT') { - $submissionObject->set('in_draft', TRUE); - } - $submissionObject->save(); - return $submissionObject; - } - - /** - * Logs the current submission page. - * - * @param \Drupal\webform\WebformSubmissionInterface|null $webform_submission - * A webform submission entity. - * @param string $applicationNumber - * The page to log. - * @param array $userData - * User data. - * @param string $saveId - * Submission save id. - * - * @return string - * The save ID. - * - * @throws \Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException - * @throws \Drupal\Component\Plugin\Exception\PluginNotFoundException - * @throws \Drupal\Core\Entity\EntityStorageException - * @throws \Drupal\Core\TempStore\TempStoreException - * @throws \Drupal\grants_mandate\CompanySelectException - * @throws \Drupal\helfi_atv\AtvDocumentNotFoundException - * @throws \Drupal\helfi_atv\AtvFailedToConnectException - * @throws \Drupal\helfi_helsinki_profiili\TokenExpiredException - * @throws \GuzzleHttp\Exception\GuzzleException - * @throws \Exception - */ - public static function logSubmissionSaveid( - ?WebformSubmissionInterface $webform_submission, - string $applicationNumber, - array $userData, - string $saveId = '', - ): string { - if (!$userData) { - throw new \Exception('User data is required'); - } - - if (empty($saveId)) { - $saveId = Uuid::uuid4()->toString(); - } - - if ($webform_submission == NULL) { - /** @var \Drupal\grants_handler\ApplicationGetterService $applicationGetterService */ - $applicationGetterService = \Drupal::service('grants_handler.application_getter_service'); - $webform_submission = $applicationGetterService->submissionObjectFromApplicationNumber($applicationNumber); - } - - $currentUser = \Drupal::currentUser(); - $database = \Drupal::database(); - - $fields = [ - 'webform_id' => ($webform_submission) ? $webform_submission->getWebform() - ->id() : '', - 'sid' => ($webform_submission) ? $webform_submission->id() : 0, - 'handler_id' => self::HANDLER_ID, - 'application_number' => $applicationNumber, - 'saveid' => $saveId, - 'uid' => $currentUser->id(), - 'user_uuid' => $userData['sub'] ?? '', - 'timestamp' => (string) (new Time)->getRequestTime(), - ]; - - $query = $database->insert(self::TABLE, $fields); - $query->fields($fields)->execute(); - - return $saveId; - - } - /** * Tries to find latest webform for given application ID. * @@ -594,8 +304,7 @@ public static function logSubmissionSaveid( * @throws \Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException * @throws \Drupal\Component\Plugin\Exception\PluginNotFoundException */ - public static function getLatestApplicationForm($id): Webform|NULL { - + public static function getLatestApplicationForm($id): Webform|null { $webforms = \Drupal::entityTypeManager() ->getStorage('webform') ->loadByProperties([ @@ -615,16 +324,34 @@ public static function getLatestApplicationForm($id): Webform|NULL { /** * Get all Webform objects for given application id. * - * @param string $id + * @param string $applicationTypeId * Application ID. + * @param null $formId + * Webform ID. + * + * @return array + * Active webforms. + * + * @throws \Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException + * @throws \Drupal\Component\Plugin\Exception\PluginNotFoundException */ - public static function getActiveApplicationWebforms(string $id): array { + public static function getActiveApplicationWebforms(string $applicationTypeId, $formId = NULL): array { + $properties = [ + 'third_party_settings.grants_metadata.applicationType' => $applicationTypeId, + 'archive' => FALSE, + ]; + + // If we've given form id, we want to load only that form. + if ($formId) { + // Effectevely this limits results to single form. + // But since we now can have multiple forms with same application type, + // we need to check that the form id is correct. + $properties['id'] = $formId; + } + $webforms = \Drupal::entityTypeManager() ->getStorage('webform') - ->loadByProperties([ - 'third_party_settings.grants_metadata.applicationType' => $id, - 'archive' => FALSE, - ]); + ->loadByProperties($properties); $result = [ 'released' => [], @@ -650,12 +377,17 @@ public static function getActiveApplicationWebforms(string $id): array { * * @param string $id * Application ID. + * @param string|null $formId + * Webform ID. Or null if all is wanted. * * @return bool * Can the webform be duplicated. + * + * @throws \Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException + * @throws \Drupal\Component\Plugin\Exception\PluginNotFoundException */ - public static function isApplicationWebformDuplicatable(string $id) { - $applicationForms = self::getActiveApplicationWebforms($id); + public static function isApplicationWebformDuplicatable(string $id, string $formId = NULL): bool { + $applicationForms = self::getActiveApplicationWebforms($id, $formId); return count($applicationForms['released']) <= 1 && count($applicationForms['development']) === 0; } diff --git a/public/modules/custom/grants_handler/src/ApplicationStatusService.php b/public/modules/custom/grants_handler/src/ApplicationStatusService.php index 7d078c6a33..be4a82503c 100644 --- a/public/modules/custom/grants_handler/src/ApplicationStatusService.php +++ b/public/modules/custom/grants_handler/src/ApplicationStatusService.php @@ -160,6 +160,10 @@ public function isApplicationOpen(Webform $webform): bool { $thirdPartySettings = $webform->getThirdPartySettings('grants_metadata'); $applicationContinuous = $thirdPartySettings["applicationContinuous"] == 1; + if (!$thirdPartySettings["applicationOpen"] && !$thirdPartySettings["applicationClose"]) { + return $applicationContinuous; + } + try { $now = new \DateTime(); $from = new \DateTime($thirdPartySettings["applicationOpen"]); diff --git a/public/modules/custom/grants_handler/src/ApplicationUploaderService.php b/public/modules/custom/grants_handler/src/ApplicationUploaderService.php index 38d88ae063..9add608ed5 100644 --- a/public/modules/custom/grants_handler/src/ApplicationUploaderService.php +++ b/public/modules/custom/grants_handler/src/ApplicationUploaderService.php @@ -4,11 +4,14 @@ namespace Drupal\grants_handler; +use Drupal\Component\Datetime\Time; use Drupal\Component\Serialization\Json; +use Drupal\Core\Database\Connection; use Drupal\Core\Language\LanguageManagerInterface; use Drupal\Core\Logger\LoggerChannelFactoryInterface; use Drupal\Core\Logger\LoggerChannelInterface; use Drupal\Core\Messenger\MessengerInterface; +use Drupal\Core\Session\AccountInterface; use Drupal\Core\StringTranslation\StringTranslationTrait; use Drupal\Core\TypedData\TypedDataInterface; use Drupal\grants_attachments\AttachmentFixerService; @@ -16,7 +19,9 @@ use Drupal\helfi_atv\AtvDocument; use Drupal\helfi_atv\AtvService; use Drupal\helfi_helsinki_profiili\HelsinkiProfiiliUserData; +use Drupal\webform\WebformSubmissionInterface; use GuzzleHttp\Client as HttpClient; +use Ramsey\Uuid\Uuid; /** * Class to handle application uploads. @@ -76,6 +81,8 @@ public function __construct( private readonly ApplicationGetterService $applicationGetterService, private readonly HelsinkiProfiiliUserData $helfiHelsinkiProfiiliUserdata, private readonly AttachmentFixerService $attachmentFixerService, + private readonly AccountInterface $currentUser, + private readonly Connection $database, ) { $this->logger = $this->loggerChannelFactory->get('application_uploader_service'); @@ -129,7 +136,7 @@ public function handleApplicationUploadToAtv( $atvDocument->addMetadata('language', $language); try { $userData = $this->helfiHelsinkiProfiiliUserdata->getUserData(); - $saveId = ApplicationHelpers::logSubmissionSaveid(NULL, $applicationNumber, $userData); + $saveId = $this->logSubmissionSaveid(NULL, $applicationNumber, $userData); $atvDocument->addMetadata('saveid', $saveId); } catch (\Exception $e) { @@ -213,6 +220,7 @@ public function handleApplicationUploadViaIntegration( try { $headers = []; + // Get status from updated document. $headers['X-Case-Status'] = $updatedDocumentFromAtv->getStatus(); // We set the data source for integration to be used in controlling @@ -225,7 +233,7 @@ public function handleApplicationUploadViaIntegration( $headers['X-hki-applicationNumber'] = $applicationNumber; // Set new saveid and save it to db. - $headers['X-hki-saveId'] = ApplicationHelpers::logSubmissionSaveid( + $headers['X-hki-saveId'] = $this->logSubmissionSaveid( NULL, $applicationNumber, $this->helfiHelsinkiProfiiliUserdata->getUserData() @@ -279,4 +287,62 @@ public function clearCache(string $applicationNumber): void { $this->helfiAtvAtvService->clearCache($applicationNumber); } + /** + * Logs the current submission page. + * + * @param \Drupal\webform\WebformSubmissionInterface|null $webform_submission + * A webform submission entity. + * @param string $applicationNumber + * The page to log. + * @param array $userData + * User data. + * @param string $saveId + * Submission save id. + * + * @return string + * The save ID. + * + * @throws \Drupal\Core\Entity\EntityStorageException + * @throws \Drupal\grants_mandate\CompanySelectException + * @throws \Exception + */ + public function logSubmissionSaveid( + ?WebformSubmissionInterface $webform_submission, + string $applicationNumber, + array $userData, + string $saveId = '', + ): string { + if (!$userData) { + throw new \Exception('User data is required'); + } + + if (empty($saveId)) { + $saveId = Uuid::uuid4()->toString(); + } + + if ($webform_submission == NULL) { + $webform_submission = + $this->applicationGetterService + ->submissionObjectFromApplicationNumber($applicationNumber); + } + + $fields = [ + 'webform_id' => ($webform_submission) ? $webform_submission->getWebform() + ->id() : '', + 'sid' => ($webform_submission) ? $webform_submission->id() : 0, + 'handler_id' => ApplicationHelpers::HANDLER_ID, + 'application_number' => $applicationNumber, + 'saveid' => $saveId, + 'uid' => $this->currentUser->id(), + 'user_uuid' => $userData['sub'] ?? '', + 'timestamp' => (string) (new Time)->getRequestTime(), + ]; + + $query = $this->database->insert(ApplicationHelpers::TABLE, $fields); + $query->fields($fields)->execute(); + + return $saveId; + + } + } diff --git a/public/modules/custom/grants_handler/src/Controller/ApplicationController.php b/public/modules/custom/grants_handler/src/Controller/ApplicationController.php index 289fdb8784..272cb2d1ff 100644 --- a/public/modules/custom/grants_handler/src/Controller/ApplicationController.php +++ b/public/modules/custom/grants_handler/src/Controller/ApplicationController.php @@ -9,24 +9,17 @@ use Drupal\Core\Controller\ControllerBase; use Drupal\Core\Entity\EntityRepositoryInterface; use Drupal\Core\Entity\EntityStorageException; -use Drupal\Core\Render\Markup; +use Drupal\Core\Render\RendererInterface; use Drupal\Core\Session\AccountInterface; use Drupal\Core\StringTranslation\StringTranslationTrait; -use Drupal\Core\TempStore\TempStoreException; use Drupal\grants_handler\ApplicationAccessHandler; use Drupal\grants_handler\ApplicationGetterService; -use Drupal\grants_handler\ApplicationHelpers; use Drupal\grants_handler\ApplicationInitService; use Drupal\grants_handler\ApplicationStatusService; -use Drupal\grants_handler\Plugin\WebformElement\CompensationsComposite; use Drupal\grants_mandate\CompanySelectException; use Drupal\grants_metadata\ApplicationDataService; -use Drupal\grants_metadata\InputmaskHandler; -use Drupal\grants_profile\Form\GrantsProfileFormRegisteredCommunity; use Drupal\grants_profile\GrantsProfileService; use Drupal\helfi_atv\AtvDocumentNotFoundException; -use Drupal\helfi_atv\AtvFailedToConnectException; -use Drupal\helfi_helsinki_profiili\TokenExpiredException; use Drupal\webform\Entity\Webform; use Drupal\webform\Entity\WebformSubmission; use Drupal\webform\WebformRequestInterface; @@ -39,121 +32,45 @@ /** * Returns responses for Grants Handler routes. */ -class ApplicationController extends ControllerBase { +final class ApplicationController extends ControllerBase { const ISO8601 = "/^(?:[1-9]\d{3}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1\d|2[0-8])" . - "|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)" . - "|(?:[1-9]\d(?:0[48]|[2468][048]|[13579][26])" . - "|(?:[2468][048]|[13579][26])00)-02-29)(T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d{1,9})" . - "?(?:Z|[+-][01]\d:[0-5]\d))?$/"; - + "|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)" . + "|(?:[1-9]\d(?:0[48]|[2468][048]|[13579][26])" . + "|(?:[2468][048]|[13579][26])00)-02-29)(T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d{1,9})" . + "?(?:Z|[+-][01]\d:[0-5]\d))?$/"; use StringTranslationTrait; - /** - * The current user. - * - * @var \Drupal\Core\Session\AccountInterface - */ - protected $currentUser; - - /** - * The entity repository. - * - * @var \Drupal\Core\Entity\EntityRepositoryInterface - */ - protected EntityRepositoryInterface $entityRepository; - - /** - * The webform request handler. - * - * @var \Drupal\webform\WebformRequestInterface - */ - protected WebformRequestInterface $requestHandler; - - /** - * The entity type manager. - * - * @var \Drupal\Core\Entity\EntityTypeManagerInterface - */ - protected $entityTypeManager; - - /** - * The renderer service. - * - * @var \Drupal\Core\Render\RendererInterface - */ - protected $renderer; - - /** - * The request service. - * - * @var \Symfony\Component\HttpFoundation\RequestStack - */ - protected RequestStack $request; - - /** - * Access to grants profile. - * - * @var \Drupal\grants_profile\GrantsProfileService - */ - protected GrantsProfileService $grantsProfileService; - - /** - * Application data service. - * - * @var \Drupal\grants_metadata\ApplicationDataService - */ - protected ApplicationDataService $applicationDataService; - - /** - * Application status service. - * - * @var \Drupal\grants_handler\ApplicationStatusService - */ - protected ApplicationStatusService $applicationStatusService; - - /** - * Application init service. - * - * @var \Drupal\grants_handler\ApplicationInitService - */ - protected ApplicationInitService $applicationInitService; - - /** - * Access handler for applications. - * - * @var \Drupal\grants_handler\ApplicationAccessHandler - */ - protected ApplicationAccessHandler $applicationAccessHandler; - - /** - * Getter service for applications. - * - * @var \Drupal\grants_handler\ApplicationGetterService - */ - protected ApplicationGetterService $applicationGetterService; + public function __construct( + private readonly EntityRepositoryInterface $entityRepository, + private readonly WebformRequestInterface $requestHandler, + private readonly RendererInterface $renderer, + private readonly RequestStack $request, + private readonly GrantsProfileService $grantsProfileService, + private readonly ApplicationDataService $applicationDataService, + private readonly ApplicationStatusService $applicationStatusService, + private readonly ApplicationInitService $applicationInitService, + private readonly ApplicationAccessHandler $applicationAccessHandler, + private readonly ApplicationGetterService $applicationGetterService, + ) {} /** * {@inheritdoc} */ public static function create(ContainerInterface $container): ApplicationController { - $instance = parent::create($container); - $instance->currentUser = $container->get('current_user'); - - $instance->entityRepository = $container->get('entity.repository'); - $instance->requestHandler = $container->get('webform.request'); - $instance->entityTypeManager = $container->get('entity_type.manager'); - $instance->renderer = $container->get('renderer'); - $instance->request = $container->get('request_stack'); - $instance->grantsProfileService = $container->get('grants_profile.service'); - $instance->applicationDataService = $container->get('grants_metadata.application_data_service'); - $instance->applicationStatusService = $container->get('grants_handler.application_status_service'); - $instance->applicationInitService = $container->get('grants_handler.application_init_service'); - $instance->applicationAccessHandler = $container->get('grants_handler.application_access_handler'); - $instance->applicationGetterService = $container->get('grants_handler.application_getter_service'); - - return $instance; + return new self( + $container->get('entity.repository'), + $container->get('webform.request'), + $container->get('renderer'), + $container->get('request_stack'), + $container->get('grants_profile.service'), + $container->get('grants_metadata.application_data_service'), + $container->get('grants_handler.application_status_service'), + $container->get('grants_handler.application_init_service'), + $container->get('grants_handler.application_access_handler'), + $container->get('grants_handler.application_getter_service') + ); } /** @@ -197,24 +114,15 @@ public function access(AccountInterface $account, string $webform, string $webfo * @return \Drupal\Core\Access\AccessResultInterface * The access result. * - * @throws \Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException - * @throws \Drupal\Component\Plugin\Exception\PluginNotFoundException - * @throws \Drupal\helfi_atv\AtvDocumentNotFoundException * @throws \GuzzleHttp\Exception\GuzzleException */ public function accessByApplicationNumber(AccountInterface $account, string $submission_id): AccessResultInterface { try { $webform_submission = $this->applicationGetterService->submissionObjectFromApplicationNumber($submission_id); } - catch (InvalidPluginDefinitionException | - PluginNotFoundException | + catch ( EntityStorageException | - TempStoreException | - CompanySelectException | - AtvDocumentNotFoundException | - AtvFailedToConnectException | - TokenExpiredException | - GuzzleException $e) { + CompanySelectException $e) { return AccessResult::forbidden('Submission gettting failed'); } @@ -261,12 +169,10 @@ public function showMessageForDataStatus(string $status): void { default: break; - } if ($message != NULL) { $this->messenger()->addWarning($message); } - } /** @@ -283,7 +189,6 @@ public function showMessageForDataStatus(string $status): void { * Build for the page. */ public function view(string $submission_id, string $view_mode = 'full', string $langcode = 'fi'): array { - $view_mode = 'default'; try { @@ -305,8 +210,6 @@ public function view(string $submission_id, string $view_mode = 'full', string $ '#theme' => 'webform_submission', '#view_mode' => $view_mode, '#webform_submission' => $webform_submission, - // '#editSubmissionLink' => - // Link::fromTextAndUrl(t('Edit application'), $url), ]; // Navigation. @@ -322,7 +225,7 @@ public function view(string $submission_id, string $view_mode = 'full', string $ '#source_entity' => $webform_submission, ]; - $page = $this->entityTypeManager + $page = $this->entityTypeManager() ->getViewBuilder($webform_submission->getEntityTypeId()) ->view($webform_submission, $view_mode); @@ -341,7 +244,6 @@ public function view(string $submission_id, string $view_mode = 'full', string $ else { throw new NotFoundHttpException('Application ' . $submission_id . ' not found.'); } - } catch (InvalidPluginDefinitionException | PluginNotFoundException | AtvDocumentNotFoundException | GuzzleException $e) { throw new NotFoundHttpException($e->getMessage()); @@ -366,13 +268,13 @@ public function view(string $submission_id, string $view_mode = 'full', string $ * @throws \GuzzleHttp\Exception\GuzzleException */ public function newApplication(string $webform_id): RedirectResponse { - $webform = Webform::load($webform_id); if (!$this->applicationStatusService->isApplicationOpen($webform)) { // Add message if application is not open. $tOpts = ['context' => 'grants_handler']; - $this->messenger()->addError($this->t('This application is not open', [], $tOpts), TRUE); + $this->messenger() + ->addError($this->t('This application is not open', [], $tOpts), TRUE); $node_storage = $this->entityTypeManager()->getStorage('node'); // @codingStandardsIgnoreStart // Get service page node. @@ -385,7 +287,8 @@ public function newApplication(string $webform_id): RedirectResponse { $res = $query->execute(); if (empty($res)) { // If we end up here, the real issue is with content input. - $this->messenger()->addError($this->t('Service page not found!', [], $tOpts), TRUE); + $this->messenger() + ->addError($this->t('Service page not found!', [], $tOpts), TRUE); return $this->redirect(''); } @@ -429,251 +332,38 @@ public function newApplication(string $webform_id): RedirectResponse { } /** - * Helper funtion to transform ATV data for print view. - */ - private function transformField($field, &$pages, &$isSubventionType, &$subventionType, $langcode) { - if (isset($field['ID'])) { - $labelData = json_decode($field['meta'], TRUE); - if (!$labelData || $labelData['element']['hidden']) { - return; - } - // Handle application type field. - if ($field['ID'] === 'applicantType' && $field['value'] === 'registered_community') { - $field['value'] = '' . $this->t('Registered community', [], ['langcode' => $langcode]); - // Add other types here when needed. - } - // Handle dates. - if (preg_match(self::ISO8601, $field['value'])) { - $field['value'] = date_format(date_create($field['value']), 'd.m.Y'); - } - - // Handle input masks. - if (isset($labelData['element']['input_mask'])) { - $field['value'] = InputmaskHandler::convertPossibleInputmaskValue($field['value'], $labelData); - } - - // Handle application type field. - if ($field['ID'] === 'issuer') { - $issuerLanguageOptions = [ - 'context' => 'Grant Issuers', - 'langcode' => $langcode, - ]; - $issuerArray = [ - "1" => $this->t('State', [], $issuerLanguageOptions), - "3" => $this->t('EU', [], $issuerLanguageOptions), - "4" => $this->t('Other', [], $issuerLanguageOptions), - "5" => $this->t('Foundation', [], $issuerLanguageOptions), - "6" => $this->t("STEA", [], $issuerLanguageOptions), - ]; - $field['value'] = $issuerArray[$field['value']]; - } - if ($labelData['section']['id'] === 'application_number' || $labelData['section']['id'] === 'status') { - unset($field); - unset($labelData['section']); - return; - } - if ($labelData['section']['id'] === 'lisatiedot_ja_liitteet_section') { - if ($field['ID'] === 'integrationID' || $field['ID'] === 'isNewAttachment' || $field['ID'] === 'fileType') { - unset($field); - return; - } - if ($field['ID'] === 'isDeliveredLater' || $field['ID'] === 'isIncludedInOtherFile') { - if ($field['value'] === 'false') { - unset($field); - return; - } - else { - $field['value'] = Markup::create('
'); - } - } - if ($field['ID'] === 'fileName') { - $field['value'] = Markup::create($field['value'] . '

'); - } - - } - - // Handle subvention type composite field. - if ($field['ID'] === 'subventionType') { - $typeNames = CompensationsComposite::getOptionsForTypes($langcode); - $subventionType = $typeNames[$field['value']]; - $isSubventionType = TRUE; - return; - } - elseif ($isSubventionType) { - $labelData['element']['label'] = $subventionType; - $isSubventionType = FALSE; - } - - if ($field['ID'] == 'role') { - $roles = GrantsProfileFormRegisteredCommunity::getOfficialRoles(); - $role = $roles[$field['value']]; - if ($role) { - $field['value'] = $role; - } - } - - if (isset($field) && array_key_exists('value', $field) && $field['value'] === 'true') { - $field['value'] = $this->t('Yes', [], [ - 'context' => 'grants_handler', - 'langcode' => $langcode, - ]); - } - - if (isset($field) && array_key_exists('value', $field) && $field['value'] === 'false') { - $field['value'] = $this->t('No', [], [ - 'context' => 'grants_handler', - 'langcode' => $langcode, - ]); - } - - if ($field['value'] === '') { - $field['value'] = '-'; - } - - $newField = [ - 'ID' => $field['ID'], - 'value' => $labelData['element']['valueTranslation'] ?? $field['value'], - 'valueType' => $field['valueType'], - 'label' => $labelData['element']['label'], - 'weight' => $labelData['element']['weight'], - ]; - $pageNumber = $labelData['page']['number']; - if (!isset($pages[$pageNumber])) { - $pages[$pageNumber] = [ - 'label' => $labelData['page']['label'], - 'id' => $labelData['page']['id'], - 'sections' => [], - ]; - } - $sectionId = $labelData['section']['id']; - if (!isset($pages[$pageNumber]['sections'][$sectionId])) { - $pages[$pageNumber]['sections'][$sectionId] = [ - 'label' => $labelData['section']['label'], - 'id' => $labelData['section']['id'], - 'weight' => $labelData['section']['weight'], - 'fields' => [], - ]; - } - $pages[$pageNumber]['sections'][$sectionId]['fields'][] = $newField; - return; - } - $isSubventionType = FALSE; - $subventionType = ''; - - if (is_array($field)) { - foreach ($field as $subField) { - $this->transformField($subField, $pages, $isSubventionType, $subventionType, $langcode); - } - } - } - - /** - * Print view for single application in ATV schema. + * Returns a page title. * - * @param string $submission_id - * Application number for submission. + * This works better than getTitle, since we know the webform object and can + * get the title from it. * - * @return array - * Render array for the page. - */ - public function printViewAtv(string $submission_id): array { - $isSubventionType = FALSE; - $subventionType = ''; - try { - /** @var \Drupal\helfi_atv\AtvDocument $atv_document */ - $atv_document = ApplicationHelpers::atvDocumentFromApplicationNumber($submission_id); - } - catch (\Exception $e) { - throw new NotFoundHttpException('Application ' . $submission_id . ' not found.'); - } - $langcode = $atv_document->getMetadata()['language']; - - $newPages = []; - // Iterate over regular fields. - $compensation = $atv_document->jsonSerialize()['content']['compensation']; - - foreach ($compensation as $page) { - if (!is_array($page)) { - continue; - } - foreach ($page as $field) { - $this->transformField($field, $newPages, $isSubventionType, $subventionType, $langcode); - } - } - $attachments = $atv_document->jsonSerialize()['content']['attachmentsInfo']; - foreach ($attachments as $page) { - if (!is_array($page)) { - continue; - } - foreach ($page as $field) { - $this->transformField($field, $newPages, $isSubventionType, $subventionType, $langcode); - } - } - - // Sort the fields based on weight. - foreach ($newPages as $pageKey => $page) { - foreach ($page['sections'] as $sectionKey => $section) { - usort($newPages[$pageKey]['sections'][$sectionKey]['fields'], function ($fieldA, $fieldB) { - return $fieldA['weight'] - $fieldB['weight']; - }); - } - } - - if (isset($compensation['additionalInformation'])) { - $tOpts = [ - 'context' => 'grants_handler', - 'langcode' => $langcode, - ]; - $field = [ - 'ID' => 'additionalInformationField', - 'value' => $compensation['additionalInformation'], - 'valueType' => 'string', - 'label' => $this->t('Additional Information', [], $tOpts), - 'weight' => 1, - ]; - $sections = []; - $sections['section'] = [ - 'label' => $this->t('Additional information concerning the application', [], $tOpts), - 'id' => 'additionalInformationPageSection', - 'weight' => 1, - 'fields' => [$field], - ]; - $newPages['additionalInformation'] = [ - 'label' => $this->t('Additional Information', [], $tOpts), - 'id' => 'additionalInformationPage', - 'sections' => $sections, - ]; - } - - // Set correct template. - $build = [ - '#theme' => 'grants_handler_print_atv_document', - '#atv_document' => $atv_document->jsonSerialize(), - '#pages' => $newPages, - '#document_langcode' => $atv_document->getMetadata()['language'], - '#cache' => [ - 'contexts' => [ - 'url.path', - ], - ], - ]; - - return $build; - } - - /** - * Returns a page title. + * @param \Drupal\webform\Entity\WebformSubmission $webform_submission + * Submission object. + * + * @return string + * Webform title. */ - public function getEditTitle($webform_submission): string { + public function getEditTitle(WebformSubmission $webform_submission): string { $webform = $webform_submission->getWebform(); return $webform->label(); } /** * Returns a page title. + * + * @param string $submission_id + * Application number of the submission. NOT THE OBJECT ID! + * + * @return string + * Webform title + * + * @throws \Drupal\Core\Entity\EntityStorageException + * @throws \Drupal\grants_mandate\CompanySelectException */ - public function getTitle($submission_id): string { - $webform = ApplicationHelpers::getWebformFromApplicationNumber($submission_id); + public function getTitle(string $submission_id): string { + $submission = $this->applicationGetterService->submissionObjectFromApplicationNumber($submission_id); + $webform = $submission->getWebform(); + return $webform->label(); } diff --git a/public/modules/custom/grants_handler/src/Controller/AtvPrintViewController.php b/public/modules/custom/grants_handler/src/Controller/AtvPrintViewController.php new file mode 100644 index 0000000000..be3b46fc3b --- /dev/null +++ b/public/modules/custom/grants_handler/src/Controller/AtvPrintViewController.php @@ -0,0 +1,415 @@ +get('grants_handler.application_getter_service') + ); + } + + /** + * Builds the response. + * + * @param string $submission_id + * The submission id. + * + * @return array + * The response.Render array. + */ + public function __invoke(string $submission_id): array { + $isSubventionType = FALSE; + $subventionType = ''; + try { + /** @var \Drupal\helfi_atv\AtvDocument $atv_document */ + $atv_document = $this->applicationGetterService->getAtvDocument($submission_id); + } + catch (\Exception $e) { + throw new NotFoundHttpException('Application ' . $submission_id . ' not found.'); + } + $langcode = $atv_document->getMetadata()['language']; + + $newPages = []; + // Iterate over regular fields. + $compensation = $atv_document->jsonSerialize()['content']['compensation']; + + foreach ($compensation as $page) { + if (!is_array($page)) { + continue; + } + foreach ($page as $field) { + $this->transformField($field, $newPages, $isSubventionType, $subventionType, $langcode); + } + } + $attachments = $atv_document->jsonSerialize()['content']['attachmentsInfo']; + foreach ($attachments as $page) { + if (!is_array($page)) { + continue; + } + foreach ($page as $field) { + $this->transformField($field, $newPages, $isSubventionType, $subventionType, $langcode); + } + } + + // Sort the fields based on weight. + foreach ($newPages as $pageKey => $page) { + foreach ($page['sections'] as $sectionKey => $section) { + usort($newPages[$pageKey]['sections'][$sectionKey]['fields'], function ($fieldA, $fieldB) { + return $fieldA['weight'] - $fieldB['weight']; + }); + } + } + + if (isset($compensation['additionalInformation'])) { + $tOpts = [ + 'context' => 'grants_handler', + 'langcode' => $langcode, + ]; + $field = [ + 'ID' => 'additionalInformationField', + 'value' => $compensation['additionalInformation'], + 'valueType' => 'string', + 'label' => $this->t('Additional Information', [], $tOpts), + 'weight' => 1, + ]; + $sections = []; + $sections['section'] = [ + 'label' => $this->t('Additional information concerning the application', [], $tOpts), + 'id' => 'additionalInformationPageSection', + 'weight' => 1, + 'fields' => [$field], + ]; + $newPages['additionalInformation'] = [ + 'label' => $this->t('Additional Information', [], $tOpts), + 'id' => 'additionalInformationPage', + 'sections' => $sections, + ]; + } + + // Set correct template. + return [ + '#theme' => 'grants_handler_print_atv_document', + '#atv_document' => $atv_document->jsonSerialize(), + '#pages' => $newPages, + '#document_langcode' => $atv_document->getMetadata()['language'], + '#cache' => [ + 'contexts' => [ + 'url.path', + ], + ], + ]; + } + + /** + * Helper funtion to transform ATV data for print view. + * + * @param mixed $field + * Field. + * @param array $pages + * Form pages. + * @param bool $isSubventionType + * Is subvention type. + * @param string $subventionType + * Subvention type. + * @param string $langcode + * Language code. + */ + private function transformField(mixed $field, array &$pages, bool &$isSubventionType, string &$subventionType, string $langcode): void { + if (isset($field['ID'])) { + $labelData = json_decode($field['meta'], TRUE); + if (!$labelData || $labelData['element']['hidden']) { + return; + } + + $this->handleContent($field, $labelData, $langcode, $isSubventionType, $subventionType); + + if ($field['value'] === '') { + $field['value'] = '-'; + } + + $newField = [ + 'ID' => $field['ID'], + 'value' => $labelData['element']['valueTranslation'] ?? $field['value'], + 'valueType' => $field['valueType'], + 'label' => $labelData['element']['label'], + 'weight' => $labelData['element']['weight'], + ]; + $pageNumber = $labelData['page']['number']; + if (!isset($pages[$pageNumber])) { + $pages[$pageNumber] = [ + 'label' => $labelData['page']['label'], + 'id' => $labelData['page']['id'], + 'sections' => [], + ]; + } + $sectionId = $labelData['section']['id']; + if (!isset($pages[$pageNumber]['sections'][$sectionId])) { + $pages[$pageNumber]['sections'][$sectionId] = [ + 'label' => $labelData['section']['label'], + 'id' => $labelData['section']['id'], + 'weight' => $labelData['section']['weight'], + 'fields' => [], + ]; + } + $pages[$pageNumber]['sections'][$sectionId]['fields'][] = $newField; + return; + } + $isSubventionType = FALSE; + $subventionType = ''; + + if (is_array($field)) { + foreach ($field as $subField) { + $this->transformField($subField, $pages, $isSubventionType, $subventionType, $langcode); + } + } + } + + /** + * Handle application content fields. + * + * @param array $field + * Field. + * @param array $labelData + * Label data. + * @param string $langcode + * Language code. + * @param bool $isSubventionType + * Is subvention type. + * @param string $subventionType + * Subvention type. + */ + private function handleContent( + array &$field, + array $labelData, + string $langcode, + bool &$isSubventionType, + string &$subventionType, + ): void { + $this->handleApplicantType($field, $langcode); + $this->handleDates($field); + $this->handleInputMasks($field, $labelData); + $this->handleIssuer($field, $langcode); + $this->handleSection($field, $labelData); + $this->handleLiitteetSection($field); + $this->handleSubventionType($field, $labelData, $langcode, $isSubventionType, $subventionType); + $this->handleRole($field); + $this->handleBooleanValues($field, $langcode); + } + + /** + * Handle applicant type. + * + * @param array $field + * Field. + * @param string $langcode + * Language code. + */ + private function handleApplicantType(array &$field, string $langcode): void { + if ($field['ID'] === 'applicantType' && $field['value'] === 'registered_community') { + $field['value'] = '' . $this->t('Registered community', [], ['langcode' => $langcode]); + } + } + + /** + * Handle dates. + * + * @param array $field + * Field. + */ + private function handleDates(array &$field): void { + if (preg_match(self::ISO8601, $field['value'])) { + $field['value'] = date_format(date_create($field['value']), 'd.m.Y'); + } + } + + /** + * Handle input masks. + * + * @param array $field + * Field. + * @param array $labelData + * Label data. + */ + private function handleInputMasks(array &$field, array $labelData): void { + if (isset($labelData['element']['input_mask'])) { + $field['value'] = InputmaskHandler::convertPossibleInputmaskValue($field['value'], $labelData); + } + } + + /** + * Handle issuer. + * + * @param array $field + * Field. + * @param string $langcode + * Language code. + */ + private function handleIssuer(array &$field, string $langcode): void { + if ($field['ID'] === 'issuer') { + $issuerLanguageOptions = [ + 'context' => 'Grant Issuers', + 'langcode' => $langcode, + ]; + $issuerArray = [ + "1" => $this->t('State', [], $issuerLanguageOptions), + "3" => $this->t('EU', [], $issuerLanguageOptions), + "4" => $this->t('Other', [], $issuerLanguageOptions), + "5" => $this->t('Foundation', [], $issuerLanguageOptions), + "6" => $this->t("STEA", [], $issuerLanguageOptions), + ]; + $field['value'] = $issuerArray[$field['value']]; + } + } + + /** + * Handle section. + * + * @param array $field + * Field. + * @param array $labelData + * Label data. + */ + private function handleSection(array &$field, array &$labelData): void { + if ($labelData['section']['id'] === 'application_number' || $labelData['section']['id'] === 'status') { + unset($field); + unset($labelData['section']); + } + } + + /** + * Handle liitteet section. + * + * @param array $field + * Field. + */ + private function handleLiitteetSection(array &$field): void { + if ($field['ID'] === 'integrationID' || $field['ID'] === 'isNewAttachment' || $field['ID'] === 'fileType') { + unset($field); + return; + } + if ($field['ID'] === 'isDeliveredLater' || $field['ID'] === 'isIncludedInOtherFile') { + if ($field['value'] === 'false') { + unset($field); + return; + } + else { + $field['value'] = Markup::create('
'); + } + } + if ($field['ID'] === 'fileName') { + $field['value'] = Markup::create($field['value'] . '

'); + } + } + + /** + * Handle subventiontypes. + * + * @param array $field + * Field. + * @param array $labelData + * Label data. + * @param string $langcode + * Language code. + * @param bool $isSubventionType + * Is subvention type. + * @param string $subventionType + * Subvention type. + */ + private function handleSubventionType( + array &$field, + array &$labelData, + string $langcode, + bool &$isSubventionType, + string &$subventionType, + ): void { + if ($field['ID'] === 'subventionType') { + $typeNames = CompensationsComposite::getOptionsForTypes($langcode); + $subventionType = $typeNames[$field['value']]; + $isSubventionType = TRUE; + } + elseif ($isSubventionType) { + $labelData['element']['label'] = $subventionType; + $isSubventionType = FALSE; + } + } + + /** + * Handle role. + * + * @param array $field + * Field. + */ + private function handleRole(array &$field): void { + if ($field['ID'] == 'role') { + $roles = GrantsProfileFormRegisteredCommunity::getOfficialRoles(); + $role = $roles[$field['value']]; + if ($role) { + $field['value'] = $role; + } + } + } + + /** + * Handle boolean values. + * + * @param array $field + * Field. + * @param string $langcode + * Language code. + */ + private function handleBooleanValues(array &$field, string $langcode): void { + if (array_key_exists('value', $field)) { + if ($field['value'] === 'true') { + $field['value'] = $this->t('Yes', [], [ + 'context' => 'grants_handler', + 'langcode' => $langcode, + ]); + } + elseif ($field['value'] === 'false') { + $field['value'] = $this->t('No', [], [ + 'context' => 'grants_handler', + 'langcode' => $langcode, + ]); + } + } + } + +} diff --git a/public/modules/custom/grants_handler/src/GrantsHandlerSubmissionStorage.php b/public/modules/custom/grants_handler/src/GrantsHandlerSubmissionStorage.php index 8dc7641142..00a21ae0c4 100644 --- a/public/modules/custom/grants_handler/src/GrantsHandlerSubmissionStorage.php +++ b/public/modules/custom/grants_handler/src/GrantsHandlerSubmissionStorage.php @@ -212,7 +212,6 @@ public function setAtvDataToSubmission(AtvDocument $document, WebformSubmissionI * @throws \GuzzleHttp\Exception\GuzzleException */ protected function loadData(array &$webform_submissions): void { - parent::loadData($webform_submissions); $userRoles = $this->account->getRoles(); // Check that we have required role. @@ -242,18 +241,6 @@ protected function loadData(array &$webform_submissions): void { /** @var \Drupal\helfi_atv\AtvDocument $document */ $document = reset($results); - if (!$document) { - $applicationNumber = ApplicationHelpers::createApplicationNumber($submission, TRUE); - $results = $this->atvService->searchDocuments( - [ - 'transaction_id' => $applicationNumber, - 'lookfor' => 'appenv:' . Helpers::getAppEnv(), - ] - ); - /** @var \Drupal\helfi_atv\AtvDocument $document */ - $document = reset($results); - } - if (!$document) { throw new \Exception('Submission data load failed.'); } diff --git a/public/modules/custom/grants_handler/src/Plugin/Block/ApplicationTimeoutMessageBlock.php b/public/modules/custom/grants_handler/src/Plugin/Block/ApplicationTimeoutMessageBlock.php index a53369b781..1b0b1c1c4a 100644 --- a/public/modules/custom/grants_handler/src/Plugin/Block/ApplicationTimeoutMessageBlock.php +++ b/public/modules/custom/grants_handler/src/Plugin/Block/ApplicationTimeoutMessageBlock.php @@ -44,7 +44,7 @@ public function build(): array { } $applicationCloseTime = $webform->getThirdPartySetting('grants_metadata', 'applicationClose'); - $applicationCloseTimestamp = strtotime($applicationCloseTime); + $applicationCloseTimestamp = $applicationCloseTime ? strtotime($applicationCloseTime) : FALSE; $currentTimestamp = strtotime('now'); // Do not render this message if the form is already closed. diff --git a/public/modules/custom/grants_handler/src/Plugin/WebformHandler/GrantsHandler.php b/public/modules/custom/grants_handler/src/Plugin/WebformHandler/GrantsHandler.php index 6bd4175e73..92363fc13e 100644 --- a/public/modules/custom/grants_handler/src/Plugin/WebformHandler/GrantsHandler.php +++ b/public/modules/custom/grants_handler/src/Plugin/WebformHandler/GrantsHandler.php @@ -1109,7 +1109,7 @@ public function validateForm( try { $this->submittedFormData = array_merge( $this->submittedFormData, - ApplicationHelpers::parseSenderDetails()); + $this->applicationDataService->parseSenderDetails()); } catch (ApplicationException $e) { } diff --git a/public/modules/custom/grants_metadata/grants_metadata.module b/public/modules/custom/grants_metadata/grants_metadata.module index 408f22b6c4..279ee8b1e4 100644 --- a/public/modules/custom/grants_metadata/grants_metadata.module +++ b/public/modules/custom/grants_metadata/grants_metadata.module @@ -724,8 +724,9 @@ from being edited, even if normal rules would otherwise permit it. $bundle = $formObject->getEntity(); $applicationTypeId = $bundle->getThirdPartySetting('grants_metadata', 'applicationType'); $isDuplicatable = in_array($formStatus, ['', 'released']); + if ($applicationTypeId && $isDuplicatable) { - $isDuplicatable = ApplicationHelpers::isApplicationWebformDuplicatable($applicationTypeId); + $isDuplicatable = ApplicationHelpers::isApplicationWebformDuplicatable($applicationTypeId, $webform->id()); } $route_parameters = ['webform' => $webform->id()]; diff --git a/public/modules/custom/grants_metadata/grants_metadata.services.yml b/public/modules/custom/grants_metadata/grants_metadata.services.yml index deeb66bcf9..5fbb9c68d1 100644 --- a/public/modules/custom/grants_metadata/grants_metadata.services.yml +++ b/public/modules/custom/grants_metadata/grants_metadata.services.yml @@ -14,7 +14,8 @@ services: class: Drupal\grants_metadata\ApplicationDataService arguments: [ '@logger.factory', - '@database' + '@database', + '@helfi_helsinki_profiili.userdata' ] calls: - [ setEventsService, [ '@?grants_events.events_service' ] ] diff --git a/public/modules/custom/grants_metadata/src/ApplicationDataService.php b/public/modules/custom/grants_metadata/src/ApplicationDataService.php index 2d2f18001c..87f3547a99 100644 --- a/public/modules/custom/grants_metadata/src/ApplicationDataService.php +++ b/public/modules/custom/grants_metadata/src/ApplicationDataService.php @@ -8,8 +8,10 @@ use Drupal\Core\TypedData\TypedDataInterface; use Drupal\grants_attachments\AttachmentHandler; use Drupal\grants_events\EventsService; +use Drupal\grants_handler\ApplicationException; use Drupal\grants_handler\DebuggableTrait; use Drupal\grants_handler\Helpers; +use Drupal\helfi_helsinki_profiili\HelsinkiProfiiliUserData; /** * Application data service. @@ -30,13 +32,6 @@ final class ApplicationDataService { */ protected LoggerChannelInterface $logger; - /** - * The database service. - * - * @var \Drupal\Core\Database\Connection - */ - protected Connection $database; - /** * Events service. * @@ -49,15 +44,17 @@ final class ApplicationDataService { * * @param \Drupal\Core\Logger\LoggerChannelFactoryInterface $loggerChannelFactory * Logger channel factory. - * @param \Drupal\Core\Database\Connection $datababse + * @param \Drupal\Core\Database\Connection $database * Database connection. + * @param \Drupal\helfi_helsinki_profiili\HelsinkiProfiiliUserData $helsinkiProfiiliUserData + * Helsinki profiili user data. */ public function __construct( LoggerChannelFactoryInterface $loggerChannelFactory, - Connection $datababse, + private readonly Connection $database, + private readonly HelsinkiProfiiliUserData $helsinkiProfiiliUserData, ) { $this->logger = $loggerChannelFactory->get('grants_application_helpers'); - $this->database = $datababse; } /** @@ -70,6 +67,43 @@ public function setEventsService(EventsService $eventsService): void { $this->eventsService = $eventsService; } + /** + * Set up sender details from helsinkiprofiili data. + * + * @return array + * Sender details. + * + * @throws \Drupal\helfi_helsinki_profiili\TokenExpiredException + * @throws \Drupal\grants_handler\ApplicationException + */ + public function parseSenderDetails(): array { + // Set sender information after save so no accidental saving of data. + $userProfileData = $this->helsinkiProfiiliUserData->getUserProfileData(); + $userData = $this->helsinkiProfiiliUserData->getUserData(); + + // If no userprofile data, we cannot proceed. + if (!$userProfileData || !$userData) { + throw new ApplicationException('No profile data found for user.'); + } + + $senderDetails = []; + + if (isset($userProfileData["myProfile"])) { + $data = $userProfileData["myProfile"]; + } + else { + $data = $userProfileData; + } + + $senderDetails['sender_firstname'] = $data["verifiedPersonalInformation"]["firstName"]; + $senderDetails['sender_lastname'] = $data["verifiedPersonalInformation"]["lastName"]; + $senderDetails['sender_person_id'] = $data["verifiedPersonalInformation"]["nationalIdentificationNumber"]; + $senderDetails['sender_user_id'] = $userData["sub"]; + $senderDetails['sender_email'] = $data["primaryEmail"]["email"]; + + return $senderDetails; + } + /** * Validate submission data integrity. * @@ -167,7 +201,7 @@ private function shouldSkipIntegrityCheck(array $submissionData): bool { * * @throws \Exception */ - private function getLatestSaveid(string $applicationNumber): string { + protected function getLatestSaveid(string $applicationNumber): string { $query = $this->database->select(self::TABLE, 'l'); $query->condition('application_number', $applicationNumber); $query->fields('l', ['lid', 'saveid']); diff --git a/public/modules/custom/grants_metadata/src/DocumentContentMapper.php b/public/modules/custom/grants_metadata/src/DocumentContentMapper.php index 79089613e6..e2521aeac9 100644 --- a/public/modules/custom/grants_metadata/src/DocumentContentMapper.php +++ b/public/modules/custom/grants_metadata/src/DocumentContentMapper.php @@ -13,6 +13,15 @@ */ class DocumentContentMapper { + /** + * Attachment file types. + * + * Saved statically to prevent too many queries. + * + * @var array + */ + private static array $attachmentFileTypes = []; + /** * Map document structure to typed data object. * @@ -120,7 +129,19 @@ private static function processStatusUpdates(array &$typedDataValues): void { */ private static function processAttachments(array &$typedDataValues): void { $other_attachments = []; - $attachmentFileTypes = AttachmentHandler::getAttachmentFieldNames($typedDataValues["application_number"], TRUE); + + $applicationNumber = $typedDataValues["application_number"]; + + // Check if the static variable is already populated + // for the given application number. + if (!isset(self::$attachmentFileTypes[$applicationNumber])) { + // If not, populate it. + self::$attachmentFileTypes[$applicationNumber] = + AttachmentHandler::getAttachmentFieldNames( + $applicationNumber, + TRUE + ); + } if (!isset($typedDataValues["attachments"])) { $typedDataValues["attachments"] = []; @@ -128,7 +149,8 @@ private static function processAttachments(array &$typedDataValues): void { foreach ($typedDataValues["attachments"] as $key => $attachment) { $fileType = $attachment["fileType"]; - $fieldName = array_search($fileType, $attachmentFileTypes); + // Get fieldname for the attachment. + $fieldName = array_search($fileType, self::$attachmentFileTypes[$applicationNumber]); $newValues = $attachment; if (!empty($attachment["fileName"])) { @@ -185,7 +207,12 @@ private static function updateIssuerNameCase(array &$typedDataValues, string $ke */ private static function processCommunityAddress(array &$typedDataValues): void { $community_address = []; - foreach (['community_street', 'community_city', 'community_post_code', 'community_country'] as $field) { + foreach ([ + 'community_street', + 'community_city', + 'community_post_code', + 'community_country', + ] as $field) { if (isset($typedDataValues[$field])) { $community_address[$field] = $typedDataValues[$field]; unset($typedDataValues[$field]); diff --git a/public/modules/custom/grants_metadata/src/TypedData/Definition/KuvaErillisDefinition.php b/public/modules/custom/grants_metadata/src/TypedData/Definition/KuvaErillisDefinition.php index 8ce6ad5ffe..d625fab6cf 100644 --- a/public/modules/custom/grants_metadata/src/TypedData/Definition/KuvaErillisDefinition.php +++ b/public/modules/custom/grants_metadata/src/TypedData/Definition/KuvaErillisDefinition.php @@ -18,7 +18,6 @@ class KuvaErillisDefinition extends ComplexDataDefinitionBase { */ public function getPropertyDefinitions() { if (!isset($this->propertyDefinitions)) { - $info = &$this->propertyDefinitions; foreach ($this->getBaseProperties() as $key => $property) { @@ -34,216 +33,78 @@ public function getPropertyDefinitions() { 'purpose', ]); - $info['hankesuunnitelma_jatkohakemus'] = DataDefinition::create('string') - ->setSetting('defaultValue', '') - ->setSetting('jsonPath', [ - 'compensation', - 'customQuestionsInfo', - 'customQuestionsArray', - 'hankesuunnitelma_jatkohakemus', - ]); - - $info['hankkeen_tarkoitus_tavoitteet'] = DataDefinition::create('string') - ->setSetting('defaultValue', '') - ->setSetting('jsonPath', [ - 'compensation', - 'customQuestionsInfo', - 'customQuestionsArray', - 'hankkeen_tarkoitus_tavoitteet', - ]); - - $info['hankkeen_toimenpiteet_aikataulu'] = DataDefinition::create('string') - ->setSetting('defaultValue', '') - ->setSetting('jsonPath', [ - 'compensation', - 'customQuestionsInfo', - 'customQuestionsArray', - 'hankkeen_toimenpiteet_aikataulu', - ]); - - $info['hankkeen_toimenpiteet_alkupvm'] = DataDefinition::create('string') - ->setSetting('defaultValue', '') - ->setSetting('jsonPath', [ - 'compensation', - 'customQuestionsInfo', - 'customQuestionsArray', - 'hankkeen_toimenpiteet_alkupvm', - ]) - ->setSetting('typeOverride', [ - 'dataType' => 'string', - 'jsonType' => 'datetime', - ]) - ->setSetting('valueCallback', [ - 'service' => 'grants_metadata.converter', - 'method' => 'convertDates', - 'arguments' => [ - 'dateFormat' => 'c', + $customQuestions = [ + 'hankesuunnitelma_radios' => [ + 'type' => 'boolean', + 'typeOverride' => [ + 'dataType' => 'string', + 'jsonType' => 'bool', ], - ]); - - $info['hankkeen_toimenpiteet_loppupvm'] = DataDefinition::create('string') - ->setSetting('defaultValue', '') - ->setSetting('jsonPath', [ - 'compensation', - 'customQuestionsInfo', - 'customQuestionsArray', - 'hankkeen_toimenpiteet_loppupvm', - ]) - ->setSetting('typeOverride', [ - 'dataType' => 'string', - 'jsonType' => 'datetime', - ]) - ->setSetting('valueCallback', [ - 'service' => 'grants_metadata.converter', - 'method' => 'convertDates', - 'arguments' => [ - 'dateFormat' => 'c', + ], + 'hankesuunnitelma_jatkohakemus' => [ + 'type' => 'boolean', + 'typeOverride' => [ + 'dataType' => 'string', + 'jsonType' => 'bool', ], - ]); - - $info['hankkeen_keskeisimmat_kumppanit'] = DataDefinition::create('string') - ->setSetting('defaultValue', '') - ->setSetting('jsonPath', [ - 'compensation', - 'customQuestionsInfo', - 'customQuestionsArray', - 'hankkeen_keskeisimmat_kumppanit', - ]); - - $info['haun_painopisteet_liikkumis_kehitys'] = DataDefinition::create('string') - ->setSetting('defaultValue', '') - ->setSetting('jsonPath', [ - 'compensation', - 'customQuestionsInfo', - 'customQuestionsArray', - 'haun_painopisteet_liikkumis_kehitys', - ]); - - $info['haun_painopisteet_digi_kehitys'] = DataDefinition::create('string') - ->setSetting('defaultValue', '') - ->setSetting('jsonPath', [ - 'compensation', - 'customQuestionsInfo', - 'customQuestionsArray', - 'haun_painopisteet_digi_kehitys', - ]); - - $info['haun_painopisteet_vertais_kehitys'] = DataDefinition::create('string') - ->setSetting('defaultValue', '') - ->setSetting('jsonPath', [ - 'compensation', - 'customQuestionsInfo', - 'customQuestionsArray', - 'haun_painopisteet_vertais_kehitys', - ]); - - $info['haun_painopisteet_kulttuuri_kehitys'] = DataDefinition::create('string') - ->setSetting('defaultValue', '') - ->setSetting('jsonPath', [ - 'compensation', - 'customQuestionsInfo', - 'customQuestionsArray', - 'haun_painopisteet_kulttuuri_kehitys', - ]); - - $info['hankkeen_kohderyhmat_kenelle'] = DataDefinition::create('string') - ->setSetting('defaultValue', '') - ->setSetting('jsonPath', [ - 'compensation', - 'customQuestionsInfo', - 'customQuestionsArray', - 'hankkeen_kohderyhmat_kenelle', - ]); - - $info['hankkeen_kohderyhmat_erityisryhmat'] = DataDefinition::create('string') - ->setSetting('defaultValue', '') - ->setSetting('jsonPath', [ - 'compensation', - 'customQuestionsInfo', - 'customQuestionsArray', - 'hankkeen_kohderyhmat_erityisryhmat', - ]); - - $info['hankkeen_kohderyhmat_tavoitus'] = DataDefinition::create('string') - ->setSetting('defaultValue', '') - ->setSetting('jsonPath', [ - 'compensation', - 'customQuestionsInfo', - 'customQuestionsArray', - 'hankkeen_kohderyhmat_tavoitus', - ]); - - $info['hankkeen_kohderyhmat_konkretia'] = DataDefinition::create('string') - ->setSetting('defaultValue', '') - ->setSetting('jsonPath', [ - 'compensation', - 'customQuestionsInfo', - 'customQuestionsArray', - 'hankkeen_kohderyhmat_konkretia', - ]); - - $info['hankkeen_kohderyhmat_osallisuus'] = DataDefinition::create('string') - ->setSetting('defaultValue', '') - ->setSetting('jsonPath', [ - 'compensation', - 'customQuestionsInfo', - 'customQuestionsArray', - 'hankkeen_kohderyhmat_osallisuus', - ]); - - $info['hankkeen_kohderyhmat_osaaminen'] = DataDefinition::create('string') - ->setSetting('defaultValue', '') - ->setSetting('jsonPath', [ - 'compensation', - 'customQuestionsInfo', - 'customQuestionsArray', - 'hankkeen_kohderyhmat_osaaminen', - ]); - - $info['hankkeen_kohderyhmat_postinrot'] = DataDefinition::create('string') - ->setSetting('defaultValue', '') - ->setSetting('jsonPath', [ - 'compensation', - 'customQuestionsInfo', - 'customQuestionsArray', - 'hankkeen_kohderyhmat_postinrot', - ]); - - $info['hankkeen_kohderyhmat_miksi_alue'] = DataDefinition::create('string') - ->setSetting('defaultValue', '') - ->setSetting('jsonPath', [ - 'compensation', - 'customQuestionsInfo', - 'customQuestionsArray', - 'hankkeen_kohderyhmat_miksi_alue', - ]); - - $info['hankkeen_riskit_keskeisimmat'] = DataDefinition::create('string') - ->setSetting('defaultValue', '') - ->setSetting('jsonPath', [ - 'compensation', - 'customQuestionsInfo', - 'customQuestionsArray', - 'hankkeen_riskit_keskeisimmat', - ]); - - $info['hankkeen_riskit_seuranta'] = DataDefinition::create('string') - ->setSetting('defaultValue', '') - ->setSetting('jsonPath', [ - 'compensation', - 'customQuestionsInfo', - 'customQuestionsArray', - 'hankkeen_riskit_seuranta', - ]); - - $info['hankkeen_riskit_vakiinnuttaminen'] = DataDefinition::create('string') - ->setSetting('defaultValue', '') - ->setSetting('jsonPath', [ - 'compensation', - 'customQuestionsInfo', - 'customQuestionsArray', - 'hankkeen_riskit_vakiinnuttaminen', - ]); + ], + 'hankkeen_tarkoitus_tavoitteet' => [], + 'hankkeen_toimenpiteet_aikataulu' => [], + 'hankkeen_toimenpiteet_alkupvm' => [ + 'typeOverride' => [ + 'dataType' => 'string', + 'jsonType' => 'datetime', + ], + 'valueCallback' => [ + 'service' => 'grants_metadata.converter', + 'method' => 'convertDates', + 'arguments' => [ + 'dateFormat' => 'c', + ], + ], + ], + 'hankkeen_toimenpiteet_loppupvm' => [ + 'typeOverride' => [ + 'dataType' => 'string', + 'jsonType' => 'datetime', + ], + 'valueCallback' => [ + 'service' => 'grants_metadata.converter', + 'method' => 'convertDates', + 'arguments' => [ + 'dateFormat' => 'c', + ], + ], + ], + 'hankkeen_keskeisimmat_kumppanit' => [], + 'haun_painopisteet_liikkumis_kehitys' => [], + 'haun_painopisteet_digi_kehitys' => [], + 'haun_painopisteet_vertais_kehitys' => [], + 'haun_painopisteet_kulttuuri_kehitys' => [], + 'hankkeen_kohderyhmat_kenelle' => [], + 'hankkeen_kohderyhmat_erityisryhmat' => [], + 'hankkeen_kohderyhmat_tavoitus' => [], + 'hankkeen_kohderyhmat_konkretia' => [], + 'hankkeen_kohderyhmat_osallisuus' => [], + 'hankkeen_kohderyhmat_osaaminen' => [], + 'hankkeen_kohderyhmat_postinrot' => [], + 'hankkeen_kohderyhmat_miksi_alue' => [], + 'hankkeen_riskit_keskeisimmat' => [], + 'hankkeen_riskit_seuranta' => [], + 'hankkeen_riskit_vakiinnuttaminen' => [], + // Example forms. + 'puuttuva_kentta_1' => [], + 'puuttuva_kentta_2' => [], + 'vaikka_sahkoposti' => [], + 'checkboksiki_onnistuu' => [], + 'tekstialue' => [], + 'tekstikentta' => [], + 'paivamaara' => [], + ]; + + foreach ($customQuestions as $key => $value) { + $this->createCustomQuestionDefinitions($key, $value, $info); + } $info['budgetInfo'] = GrantsBudgetInfoDefinition::create('grants_budget_info') ->setSetting('propertyStructureCallback', [ @@ -280,4 +141,43 @@ public function getPropertyDefinitions() { return $this->propertyDefinitions; } + /** + * Helper function generate repetitive definition. + * + * @param string $key + * Webform element key. + * @param array $value + * Additional settings for given field. + * @param array $info + * Data definitions. + */ + private function createCustomQuestionDefinitions(string $key, array $value, array &$info): void { + // Create initial definition with position in JSON. + $info[$key] = DataDefinition::create($value['type'] ?? 'string') + ->setSetting('jsonPath', [ + 'compensation', + 'customQuestionsInfo', + 'customQuestionsArray', + $key, + ]); + // Add type override if set. + if (isset($value['typeOverride'])) { + $info[$key]->setSetting('typeOverride', $value['typeOverride']); + } + // Add value callback if set. + if (isset($value['valueCallback'])) { + $info[$key]->setSetting('valueCallback', $value['valueCallback']); + } + // Add default value if set or empty value. + if (isset($value['defaultValue'])) { + $info[$key]->setSetting('defaultValue', $value['defaultValue']); + } + // DO not add defaultValue if not set, this makes all fields inserted into + // data, this is not an issue, but if there's lot of fields + // data may get confusing. + // The negative is that if field is not set required in form, it will not + // be added to data. If an empty field & value is wanted, the defaultValue + // can be added to specific field in array above. + } + } diff --git a/tools/http/ATV.http b/tools/http/ATV.http index 094be07b8b..bab68dfcab 100644 --- a/tools/http/ATV.http +++ b/tools/http/ATV.http @@ -5,7 +5,7 @@ X-Api-Key: {{atvApiKey}} #### Get single document by transaction_id GET {{atvUrl}}/v1/documents/? - transaction_id={{transaction_id}} + transaction_id={{transactionId}} Accept-Encoding: utf8 X-Api-Key: {{atvApiKey}} @@ -24,7 +24,7 @@ GET {{atvUrl}}/v1/documents/? user_id={{user_id}}& type={{type}}& service_name=AvustushakemusIntegraatio& - transaction_id={{transaction_id}} + transaction_id={{transactionId}} Accept-Encoding: utf8 X-Api-Key: {{atvApiKey}} diff --git a/tools/http/Integraatio.http b/tools/http/Integraatio.http new file mode 100644 index 0000000000..fe97c5a548 --- /dev/null +++ b/tools/http/Integraatio.http @@ -0,0 +1,50 @@ +### Create Event via integration API +POST {{integraatioUrl}}/createEvent +Authorization: Basic {{integraatioBasicToken}} +Content-Type: application/json + +{ + "caseId": "{{transactionId}}", + "eventType": "EVENT_INFO", + "eventCode": 0, + "eventSource": "Avustusten kasittelyjarjestelma", + "eventDescription": "Puhakka Tero;09 310 36070;tero.puhakka@hel.fi", + "eventDescription_SV": null, + "eventDescription_EN": null, + "timeUpdated": null, + "timeCreated": "{{$isoTimestamp}}", + "eventTarget": null, + "eventID": "{{$random.uuid}}" +} + +### Create Status Update via integration API +POST {{integraatioUrl}}/updateCitizenCaseStatus +Authorization: Basic {{integraatioBasicToken}} +Content-Type: application/json + +{ + "caseId": "{{transactionId}}", + "citizenCaseStatus" : "PROCESSING", + "eventType" : "STATUS_UPDATE", + "eventCode" : 0, + "eventSource" : "Avustusten kasittelyjarjestelma", + "timeUpdated" : null, + "timeCreated": "{{$isoTimestamp}}" +} + +### Create Message via integration API +POST {{integraatioUrl}}/createConversationMessage +Authorization: Basic {{integraatioBasicToken}} +Content-Type: application/json + +{ +"caseId": "{{transactionId}}", +"messageId" : "{{$random.uuid}}", +"body" : "Lorem ipsum dolor sit amet, consectetur adipiscing elit", +"sentBy" : "Avustusten kasittelyjarjestelma", +"sendDateTime" :"{{$isoTimestamp}}" +} + +### + + diff --git a/tools/http/http-client.env.json b/tools/http/http-client.env.json new file mode 100644 index 0000000000..b2d490c533 --- /dev/null +++ b/tools/http/http-client.env.json @@ -0,0 +1,8 @@ +{ + "dev": { + "atvUrl": "https://atv-api-hki-kanslia-atv-test.agw.arodevtest.hel.fi", + "transactionId": "LOCALYRTTI12-070-0000009", + "document_id": "28753685-24b8-4542-b1c1-cc70ff9f9fbc", + "integraatioUrl": "https://avustus-integration-test.agw.arodevtest.hel.fi" + } +} From c859d5631d01e6a0db7caaba9a8f0802f6841977 Mon Sep 17 00:00:00 2001 From: Janne Suominen Date: Wed, 6 Nov 2024 08:47:32 +0200 Subject: [PATCH 26/74] feat: Snyk upgrade b785815b434b86e46b4901cb202437dd (#1548) * Update configuration (#1523) * fix: upgrade @playwright/test from 1.41.2 to 1.48.0 Snyk has created this PR to upgrade @playwright/test from 1.41.2 to 1.48.0. See this package in npm: @playwright/test See this project in Snyk: https://app.snyk.io/org/city-of-helsinki/project/aed93529-486e-499e-9b12-5815057dc0ec?utm_source=github&utm_medium=referral&page=upgrade-pr * Update e2e docker image --------- Co-authored-by: hel-platta-automation <95360595+hel-platta-automation@users.noreply.github.com> Co-authored-by: snyk-bot --- compose.override.yml | 2 +- e2e/package-lock.json | 34 +++++++++++++++++++--------------- e2e/package.json | 2 +- 3 files changed, 21 insertions(+), 17 deletions(-) diff --git a/compose.override.yml b/compose.override.yml index fe608792e8..381542bd74 100644 --- a/compose.override.yml +++ b/compose.override.yml @@ -1,7 +1,7 @@ services: e2e: container_name: "${COMPOSE_PROJECT_NAME}-e2e" - image: mcr.microsoft.com/playwright:v1.41.0-jammy + image: mcr.microsoft.com/playwright:v1.48.0-jammy ipc: host network_mode: host tty: true diff --git a/e2e/package-lock.json b/e2e/package-lock.json index 73356a29a2..5c07515962 100644 --- a/e2e/package-lock.json +++ b/e2e/package-lock.json @@ -10,7 +10,7 @@ "license": "ISC", "devDependencies": { "@faker-js/faker": "^8.3.1", - "@playwright/test": "^1.41.2", + "@playwright/test": "^1.48.0", "@types/lodash.clonedeep": "^4.5.9", "@types/node": "^20.11.7", "dotenv": "^16.4.1", @@ -34,18 +34,19 @@ } }, "node_modules/@playwright/test": { - "version": "1.41.2", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.41.2.tgz", - "integrity": "sha512-qQB9h7KbibJzrDpkXkYvsmiDJK14FULCCZgEcoe2AvFAS64oCirWTwzTlAYEbKaRxWs5TFesE1Na6izMv3HfGg==", + "version": "1.48.0", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.48.0.tgz", + "integrity": "sha512-W5lhqPUVPqhtc/ySvZI5Q8X2ztBOUgZ8LbAFy0JQgrXZs2xaILrUcNO3rQjwbLPfGK13+rZsDa1FpG+tqYkT5w==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "playwright": "1.41.2" + "playwright": "1.48.0" }, "bin": { "playwright": "cli.js" }, "engines": { - "node": ">=16" + "node": ">=18" } }, "node_modules/@types/lodash": { @@ -90,6 +91,7 @@ "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, "hasInstallScript": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -105,33 +107,35 @@ "dev": true }, "node_modules/playwright": { - "version": "1.41.2", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.41.2.tgz", - "integrity": "sha512-v0bOa6H2GJChDL8pAeLa/LZC4feoAMbSQm1/jF/ySsWWoaNItvrMP7GEkvEEFyCTUYKMxjQKaTSg5up7nR6/8A==", + "version": "1.48.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.48.0.tgz", + "integrity": "sha512-qPqFaMEHuY/ug8o0uteYJSRfMGFikhUysk8ZvAtfKmUK3kc/6oNl/y3EczF8OFGYIi/Ex2HspMfzYArk6+XQSA==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "playwright-core": "1.41.2" + "playwright-core": "1.48.0" }, "bin": { "playwright": "cli.js" }, "engines": { - "node": ">=16" + "node": ">=18" }, "optionalDependencies": { "fsevents": "2.3.2" } }, "node_modules/playwright-core": { - "version": "1.41.2", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.41.2.tgz", - "integrity": "sha512-VaTvwCA4Y8kxEe+kfm2+uUUw5Lubf38RxF7FpBxLPmGe5sdNkSg5e3ChEigaGrX7qdqT3pt2m/98LiyvU2x6CA==", + "version": "1.48.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.48.0.tgz", + "integrity": "sha512-RBvzjM9rdpP7UUFrQzRwR8L/xR4HyC1QXMzGYTbf1vjw25/ya9NRAVnXi/0fvFopjebvyPzsmoK58xxeEOaVvA==", "dev": true, + "license": "Apache-2.0", "bin": { "playwright-core": "cli.js" }, "engines": { - "node": ">=16" + "node": ">=18" } }, "node_modules/undici-types": { diff --git a/e2e/package.json b/e2e/package.json index 73004b3bb6..98ce4905cf 100644 --- a/e2e/package.json +++ b/e2e/package.json @@ -13,7 +13,7 @@ "license": "ISC", "devDependencies": { "@faker-js/faker": "^8.3.1", - "@playwright/test": "^1.41.2", + "@playwright/test": "^1.48.0", "@types/lodash.clonedeep": "^4.5.9", "@types/node": "^20.11.7", "dotenv": "^16.4.1", From bd085969cf34bf55dee518a8cbd5153763564644 Mon Sep 17 00:00:00 2001 From: Janne Suominen Date: Wed, 6 Nov 2024 09:46:36 +0200 Subject: [PATCH 27/74] feat: [Snyk] Upgrade @types/node from 20.11.7 to 20.16.11 (#1545) * Update configuration (#1523) * fix: upgrade @types/node from 20.11.7 to 20.16.11 Snyk has created this PR to upgrade @types/node from 20.11.7 to 20.16.11. See this package in npm: @types/node See this project in Snyk: https://app.snyk.io/org/city-of-helsinki/project/aed93529-486e-499e-9b12-5815057dc0ec?utm_source=github&utm_medium=referral&page=upgrade-pr --------- Co-authored-by: hel-platta-automation <95360595+hel-platta-automation@users.noreply.github.com> Co-authored-by: snyk-bot --- e2e/package-lock.json | 20 +++++++++++--------- e2e/package.json | 2 +- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/e2e/package-lock.json b/e2e/package-lock.json index 5c07515962..0957977376 100644 --- a/e2e/package-lock.json +++ b/e2e/package-lock.json @@ -12,7 +12,7 @@ "@faker-js/faker": "^8.3.1", "@playwright/test": "^1.48.0", "@types/lodash.clonedeep": "^4.5.9", - "@types/node": "^20.11.7", + "@types/node": "^20.16.11", "dotenv": "^16.4.1", "lodash.clonedeep": "^4.5.0" } @@ -65,12 +65,13 @@ } }, "node_modules/@types/node": { - "version": "20.11.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.7.tgz", - "integrity": "sha512-GPmeN1C3XAyV5uybAf4cMLWT9fDWcmQhZVtMFu7OR32WjrqGG+Wnk2V1d0bmtUyE/Zy1QJ9BxyiTih9z8Oks8A==", + "version": "20.16.11", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.16.11.tgz", + "integrity": "sha512-y+cTCACu92FyA5fgQSAI8A1H429g7aSK2HsO7K4XYUWc4dY5IUz55JSDIYT6/VsOLfGy8vmvQYC2hfb0iF16Uw==", "dev": true, + "license": "MIT", "dependencies": { - "undici-types": "~5.26.4" + "undici-types": "~6.19.2" } }, "node_modules/dotenv": { @@ -139,10 +140,11 @@ } }, "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "dev": true + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "dev": true, + "license": "MIT" } } } diff --git a/e2e/package.json b/e2e/package.json index 98ce4905cf..cf4548d815 100644 --- a/e2e/package.json +++ b/e2e/package.json @@ -15,7 +15,7 @@ "@faker-js/faker": "^8.3.1", "@playwright/test": "^1.48.0", "@types/lodash.clonedeep": "^4.5.9", - "@types/node": "^20.11.7", + "@types/node": "^20.16.11", "dotenv": "^16.4.1", "lodash.clonedeep": "^4.5.0" } From 96fa0f6ba4aafbca92e2a1c1c58603c186db08c7 Mon Sep 17 00:00:00 2001 From: Janne Suominen Date: Wed, 6 Nov 2024 10:06:16 +0200 Subject: [PATCH 28/74] feat: [Snyk] Upgrade dotenv from 16.4.1 to 16.4.5 (#1546) * Update configuration (#1523) * fix: upgrade dotenv from 16.4.1 to 16.4.5 Snyk has created this PR to upgrade dotenv from 16.4.1 to 16.4.5. See this package in npm: dotenv See this project in Snyk: https://app.snyk.io/org/city-of-helsinki/project/aed93529-486e-499e-9b12-5815057dc0ec?utm_source=github&utm_medium=referral&page=upgrade-pr --------- Co-authored-by: hel-platta-automation <95360595+hel-platta-automation@users.noreply.github.com> Co-authored-by: snyk-bot --- e2e/package-lock.json | 11 ++++++----- e2e/package.json | 2 +- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/e2e/package-lock.json b/e2e/package-lock.json index 0957977376..f57e5e4825 100644 --- a/e2e/package-lock.json +++ b/e2e/package-lock.json @@ -13,7 +13,7 @@ "@playwright/test": "^1.48.0", "@types/lodash.clonedeep": "^4.5.9", "@types/node": "^20.16.11", - "dotenv": "^16.4.1", + "dotenv": "^16.4.5", "lodash.clonedeep": "^4.5.0" } }, @@ -75,15 +75,16 @@ } }, "node_modules/dotenv": { - "version": "16.4.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.1.tgz", - "integrity": "sha512-CjA3y+Dr3FyFDOAMnxZEGtnW9KBR2M0JvvUtXNW+dYJL5ROWxP9DUHCwgFqpMk0OXCc0ljhaNTr2w/kutYIcHQ==", + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=12" }, "funding": { - "url": "https://github.com/motdotla/dotenv?sponsor=1" + "url": "https://dotenvx.com" } }, "node_modules/fsevents": { diff --git a/e2e/package.json b/e2e/package.json index cf4548d815..290151488e 100644 --- a/e2e/package.json +++ b/e2e/package.json @@ -16,7 +16,7 @@ "@playwright/test": "^1.48.0", "@types/lodash.clonedeep": "^4.5.9", "@types/node": "^20.16.11", - "dotenv": "^16.4.1", + "dotenv": "^16.4.5", "lodash.clonedeep": "^4.5.0" } } From 5676c842932a22fe76389c2413cd03dffb634ccf Mon Sep 17 00:00:00 2001 From: Janne Suominen Date: Wed, 6 Nov 2024 11:23:32 +0200 Subject: [PATCH 29/74] feat: [Snyk] Upgrade @faker-js/faker from 8.3.1 to 8.4.1 (#1547) * Update configuration (#1523) * fix: upgrade @faker-js/faker from 8.3.1 to 8.4.1 Snyk has created this PR to upgrade @faker-js/faker from 8.3.1 to 8.4.1. See this package in npm: @faker-js/faker See this project in Snyk: https://app.snyk.io/org/city-of-helsinki/project/aed93529-486e-499e-9b12-5815057dc0ec?utm_source=github&utm_medium=referral&page=upgrade-pr * Update e2e tests --------- Co-authored-by: hel-platta-automation <95360595+hel-platta-automation@users.noreply.github.com> Co-authored-by: snyk-bot --- e2e/package-lock.json | 9 +++++---- e2e/package.json | 2 +- e2e/utils/data/application/application_data_29.ts | 12 ++++++------ e2e/utils/data/application/application_data_48.ts | 8 ++++---- e2e/utils/data/application/application_data_49.ts | 4 ++-- e2e/utils/data/application/application_data_51.ts | 8 ++++---- e2e/utils/data/application/application_data_52.ts | 6 +++--- e2e/utils/data/application/application_data_54.ts | 12 ++++++------ e2e/utils/data/application/application_data_57.ts | 8 ++++---- e2e/utils/data/application/application_data_60.ts | 4 ++-- e2e/utils/data/application/application_data_61.ts | 8 ++++---- e2e/utils/data/application/application_data_62.ts | 8 ++++---- e2e/utils/data/application/application_data_63.ts | 8 ++++---- e2e/utils/data/application/application_data_67.ts | 8 ++++---- e2e/utils/data/application/application_data_68.ts | 8 ++++---- 15 files changed, 57 insertions(+), 56 deletions(-) diff --git a/e2e/package-lock.json b/e2e/package-lock.json index f57e5e4825..e1e24d6a2e 100644 --- a/e2e/package-lock.json +++ b/e2e/package-lock.json @@ -9,7 +9,7 @@ "version": "1.0.0", "license": "ISC", "devDependencies": { - "@faker-js/faker": "^8.3.1", + "@faker-js/faker": "^8.4.1", "@playwright/test": "^1.48.0", "@types/lodash.clonedeep": "^4.5.9", "@types/node": "^20.16.11", @@ -18,9 +18,9 @@ } }, "node_modules/@faker-js/faker": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/@faker-js/faker/-/faker-8.3.1.tgz", - "integrity": "sha512-FdgpFxY6V6rLZE9mmIBb9hM0xpfvQOSNOLnzolzKwsE1DH+gC7lEKV1p1IbR0lAYyvYd5a4u3qWJzowUkw1bIw==", + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/@faker-js/faker/-/faker-8.4.1.tgz", + "integrity": "sha512-XQ3cU+Q8Uqmrbf2e0cIC/QN43sTBSC8KF12u29Mb47tWrt2hAgBXSgpZMj4Ao8Uk0iJcU99QsOCaIL8934obCg==", "dev": true, "funding": [ { @@ -28,6 +28,7 @@ "url": "https://opencollective.com/fakerjs" } ], + "license": "MIT", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0", "npm": ">=6.14.13" diff --git a/e2e/package.json b/e2e/package.json index 290151488e..17237d3fdc 100644 --- a/e2e/package.json +++ b/e2e/package.json @@ -12,7 +12,7 @@ "author": "", "license": "ISC", "devDependencies": { - "@faker-js/faker": "^8.3.1", + "@faker-js/faker": "^8.4.1", "@playwright/test": "^1.48.0", "@types/lodash.clonedeep": "^4.5.9", "@types/node": "^20.16.11", diff --git a/e2e/utils/data/application/application_data_29.ts b/e2e/utils/data/application/application_data_29.ts index eeeb460899..e56bb7ce9a 100644 --- a/e2e/utils/data/application/application_data_29.ts +++ b/e2e/utils/data/application/application_data_29.ts @@ -155,7 +155,7 @@ const baseForm_29: FormData = { value: faker.number.float({ min: 1000, max: 10000, - precision: 2 + multipleOf: 2 }).toString(), viewPageFormatter: viewPageFormatCurrency, }, @@ -207,7 +207,7 @@ const baseForm_29: FormData = { value: faker.number.float({ min: 1000, max: 10000, - precision: 2 + multipleOf: 2 }).toString(), viewPageFormatter: viewPageFormatCurrency, }, @@ -287,7 +287,7 @@ const baseForm_29: FormData = { value: faker.number.float({ min: 1000, max: 10000, - precision: 2 + multipleOf: 2 }).toString(), viewPageFormatter: viewPageFormatCurrency, }, @@ -339,7 +339,7 @@ const baseForm_29: FormData = { value: faker.number.float({ min: 1000, max: 10000, - precision: 2 + multipleOf: 2 }).toString(), viewPageFormatter: viewPageFormatCurrency, }, @@ -400,7 +400,7 @@ const baseForm_29: FormData = { value: faker.number.float({ min: 100, max: 1000, - precision: 2 + multipleOf: 2 }).toString(), viewPageFormatter: viewPageFormatCurrency, }, @@ -408,7 +408,7 @@ const baseForm_29: FormData = { value: faker.number.float({ min: 100, max: 1000, - precision: 2 + multipleOf: 2 }).toString(), viewPageFormatter: viewPageFormatCurrency, }, diff --git a/e2e/utils/data/application/application_data_48.ts b/e2e/utils/data/application/application_data_48.ts index dcddaa3685..52ab034a8f 100644 --- a/e2e/utils/data/application/application_data_48.ts +++ b/e2e/utils/data/application/application_data_48.ts @@ -179,7 +179,7 @@ const baseForm_48: FormData = { value: faker.number.float({ min: 1000, max: 10000, - precision: 2 + multipleOf: 2 }).toString(), viewPageFormatter: viewPageFormatCurrency, }, @@ -231,7 +231,7 @@ const baseForm_48: FormData = { value: faker.number.float({ min: 1000, max: 10000, - precision: 2 + multipleOf: 2 }).toString(), viewPageFormatter: viewPageFormatCurrency, }, @@ -287,7 +287,7 @@ const baseForm_48: FormData = { value: faker.number.float({ min: 1, max: 100, - precision: 2 + multipleOf: 2 }).toString(), }, "edit-osa-aikainen-henkilosto": { @@ -299,7 +299,7 @@ const baseForm_48: FormData = { value: faker.number.float({ min: 1, max: 100, - precision: 2 + multipleOf: 2 }).toString(), }, "edit-vapaaehtoinen-henkilosto": { diff --git a/e2e/utils/data/application/application_data_49.ts b/e2e/utils/data/application/application_data_49.ts index e6800b1b14..c37dde4c0b 100644 --- a/e2e/utils/data/application/application_data_49.ts +++ b/e2e/utils/data/application/application_data_49.ts @@ -205,7 +205,7 @@ const baseForm_49: FormData = { value: faker.number.float({ min: 1000, max: 10000, - precision: 2 + multipleOf: 2 }).toString(), viewPageFormatter: viewPageFormatCurrency, }, @@ -257,7 +257,7 @@ const baseForm_49: FormData = { value: faker.number.float({ min: 1000, max: 10000, - precision: 2 + multipleOf: 2 }).toString(), viewPageFormatter: viewPageFormatCurrency, }, diff --git a/e2e/utils/data/application/application_data_51.ts b/e2e/utils/data/application/application_data_51.ts index 4703024689..b8749458eb 100644 --- a/e2e/utils/data/application/application_data_51.ts +++ b/e2e/utils/data/application/application_data_51.ts @@ -146,7 +146,7 @@ const baseFormRegisteredCommunity_51: FormData = { // value: faker.number.float({ // min: 1000, // max: 10000, - // precision: 2 + // multipleOf: 2 // }).toString(), viewPageFormatter: viewPageFormatCurrency, }, @@ -198,7 +198,7 @@ const baseFormRegisteredCommunity_51: FormData = { value: faker.number.float({ min: 1000, max: 10000, - precision: 2 + multipleOf: 2 }).toString(), viewPageFormatter: viewPageFormatCurrency, }, @@ -260,7 +260,7 @@ const baseFormRegisteredCommunity_51: FormData = { value: faker.number.float({ min: 100, max: 1000, - precision: 2 + multipleOf: 2 }).toString(), viewPageFormatter: viewPageFormatCurrency, }, @@ -268,7 +268,7 @@ const baseFormRegisteredCommunity_51: FormData = { value: faker.number.float({ min: 100, max: 1000, - precision: 2 + multipleOf: 2 }).toString(), viewPageFormatter: viewPageFormatCurrency, }, diff --git a/e2e/utils/data/application/application_data_52.ts b/e2e/utils/data/application/application_data_52.ts index 69bbba8703..40690b0066 100644 --- a/e2e/utils/data/application/application_data_52.ts +++ b/e2e/utils/data/application/application_data_52.ts @@ -140,7 +140,7 @@ const baseFormRegisteredCommunity_52: FormData = { value: faker.number.float({ min: 1000, max: 10000, - precision: 2 + multipleOf: 2 }).toString(), viewPageFormatter: viewPageFormatCurrency, }, @@ -192,7 +192,7 @@ const baseFormRegisteredCommunity_52: FormData = { value: faker.number.float({ min: 1000, max: 10000, - precision: 2 + multipleOf: 2 }).toString(), viewPageFormatter: viewPageFormatCurrency, }, @@ -363,7 +363,7 @@ const baseFormRegisteredCommunity_52: FormData = { value: faker.number.float({ min: 100, max: 1000, - precision: 2 + multipleOf: 2 }).toString(), viewPageFormatter: viewPageFormatCurrency }, diff --git a/e2e/utils/data/application/application_data_54.ts b/e2e/utils/data/application/application_data_54.ts index 7c3bbebc84..3265cc7497 100644 --- a/e2e/utils/data/application/application_data_54.ts +++ b/e2e/utils/data/application/application_data_54.ts @@ -159,7 +159,7 @@ const baseFormRegisteredCommunity_54: FormData = { value: faker.number.float({ min: 1000, max: 10000, - precision: 2 + multipleOf: 2 }).toString(), viewPageFormatter: viewPageFormatCurrency, }, @@ -211,7 +211,7 @@ const baseFormRegisteredCommunity_54: FormData = { value: faker.number.float({ min: 1000, max: 10000, - precision: 2 + multipleOf: 2 }).toString(), viewPageFormatter: viewPageFormatCurrency, }, @@ -292,7 +292,7 @@ const baseFormRegisteredCommunity_54: FormData = { value: faker.number.float({ min: 1000, max: 10000, - precision: 2 + multipleOf: 2 }).toString(), viewPageFormatter: viewPageFormatCurrency, }, @@ -344,7 +344,7 @@ const baseFormRegisteredCommunity_54: FormData = { value: faker.number.float({ min: 1000, max: 10000, - precision: 2 + multipleOf: 2 }).toString(), viewPageFormatter: viewPageFormatCurrency, }, @@ -411,7 +411,7 @@ const baseFormRegisteredCommunity_54: FormData = { value: faker.number.float({ min: 100, max: 1000, - precision: 2 + multipleOf: 2 }).toString(), viewPageFormatter: viewPageFormatCurrency, }, @@ -419,7 +419,7 @@ const baseFormRegisteredCommunity_54: FormData = { value: faker.number.float({ min: 100, max: 1000, - precision: 2 + multipleOf: 2 }).toString(), viewPageFormatter: viewPageFormatCurrency, }, diff --git a/e2e/utils/data/application/application_data_57.ts b/e2e/utils/data/application/application_data_57.ts index 8a2a6bed9b..968ef4df42 100644 --- a/e2e/utils/data/application/application_data_57.ts +++ b/e2e/utils/data/application/application_data_57.ts @@ -155,7 +155,7 @@ const baseFormRegisteredCommunity_57: FormData = { value: faker.number.float({ min: 1000, max: 10000, - precision: 2 + multipleOf: 2 }).toString(), viewPageFormatter: viewPageFormatCurrency, }, @@ -207,7 +207,7 @@ const baseFormRegisteredCommunity_57: FormData = { value: faker.number.float({ min: 1000, max: 10000, - precision: 2 + multipleOf: 2 }).toString(), viewPageFormatter: viewPageFormatCurrency, }, @@ -288,7 +288,7 @@ const baseFormRegisteredCommunity_57: FormData = { value: faker.number.float({ min: 1000, max: 10000, - precision: 2 + multipleOf: 2 }).toString(), viewPageFormatter: viewPageFormatCurrency, }, @@ -340,7 +340,7 @@ const baseFormRegisteredCommunity_57: FormData = { value: faker.number.float({ min: 1000, max: 10000, - precision: 2 + multipleOf: 2 }).toString(), viewPageFormatter: viewPageFormatCurrency, }, diff --git a/e2e/utils/data/application/application_data_60.ts b/e2e/utils/data/application/application_data_60.ts index d1ee776eb8..a5c02811d6 100644 --- a/e2e/utils/data/application/application_data_60.ts +++ b/e2e/utils/data/application/application_data_60.ts @@ -168,7 +168,7 @@ const baseFormRegisteredCommunity_60: FormData = { value: faker.number.float({ min: 1000, max: 10000, - precision: 2 + multipleOf: 2 }).toString(), viewPageFormatter: viewPageFormatCurrency, }, @@ -220,7 +220,7 @@ const baseFormRegisteredCommunity_60: FormData = { value: faker.number.float({ min: 1000, max: 10000, - precision: 2 + multipleOf: 2 }).toString(), viewPageFormatter: viewPageFormatCurrency, }, diff --git a/e2e/utils/data/application/application_data_61.ts b/e2e/utils/data/application/application_data_61.ts index fe5db8dc34..fb2b008534 100644 --- a/e2e/utils/data/application/application_data_61.ts +++ b/e2e/utils/data/application/application_data_61.ts @@ -138,7 +138,7 @@ const baseFormRegisteredCommunity_61: FormData = { value: faker.number.float({ min: 1000, max: 10000, - precision: 2 + multipleOf: 2 }).toString(), viewPageFormatter: viewPageFormatCurrency, }, @@ -190,7 +190,7 @@ const baseFormRegisteredCommunity_61: FormData = { value: faker.number.float({ min: 1000, max: 10000, - precision: 2 + multipleOf: 2 }).toString(), viewPageFormatter: viewPageFormatCurrency, }, @@ -256,7 +256,7 @@ const baseFormRegisteredCommunity_61: FormData = { value: faker.number.float({ min: 100, max: 1000, - precision: 2 + multipleOf: 2 }).toString(), viewPageFormatter: viewPageFormatCurrency, }, @@ -264,7 +264,7 @@ const baseFormRegisteredCommunity_61: FormData = { value: faker.number.float({ min: 100, max: 1000, - precision: 2 + multipleOf: 2 }).toString(), viewPageFormatter: viewPageFormatCurrency, }, diff --git a/e2e/utils/data/application/application_data_62.ts b/e2e/utils/data/application/application_data_62.ts index 03e9e0bdcd..ccf930a737 100644 --- a/e2e/utils/data/application/application_data_62.ts +++ b/e2e/utils/data/application/application_data_62.ts @@ -145,7 +145,7 @@ const baseFormRegisteredCommunity_62: FormData = { value: faker.number.float({ min: 1000, max: 10000, - precision: 2 + multipleOf: 2 }).toString(), viewPageFormatter: viewPageFormatCurrency, }, @@ -197,7 +197,7 @@ const baseFormRegisteredCommunity_62: FormData = { value: faker.number.float({ min: 1000, max: 10000, - precision: 2 + multipleOf: 2 }).toString(), viewPageFormatter: viewPageFormatCurrency, }, @@ -278,7 +278,7 @@ const baseFormRegisteredCommunity_62: FormData = { value: faker.number.float({ min: 1000, max: 10000, - precision: 2 + multipleOf: 2 }).toString(), viewPageFormatter: viewPageFormatCurrency, }, @@ -330,7 +330,7 @@ const baseFormRegisteredCommunity_62: FormData = { value: faker.number.float({ min: 1000, max: 10000, - precision: 2 + multipleOf: 2 }).toString(), viewPageFormatter: viewPageFormatCurrency, }, diff --git a/e2e/utils/data/application/application_data_63.ts b/e2e/utils/data/application/application_data_63.ts index b212784333..30f24eaa0c 100644 --- a/e2e/utils/data/application/application_data_63.ts +++ b/e2e/utils/data/application/application_data_63.ts @@ -145,7 +145,7 @@ const baseFormRegisteredCommunity_63: FormData = { value: faker.number.float({ min: 1000, max: 10000, - precision: 2 + multipleOf: 2 }).toString(), viewPageFormatter: viewPageFormatCurrency, }, @@ -197,7 +197,7 @@ const baseFormRegisteredCommunity_63: FormData = { value: faker.number.float({ min: 1000, max: 10000, - precision: 2 + multipleOf: 2 }).toString(), viewPageFormatter: viewPageFormatCurrency, }, @@ -278,7 +278,7 @@ const baseFormRegisteredCommunity_63: FormData = { value: faker.number.float({ min: 1000, max: 10000, - precision: 2 + multipleOf: 2 }).toString(), viewPageFormatter: viewPageFormatCurrency, }, @@ -330,7 +330,7 @@ const baseFormRegisteredCommunity_63: FormData = { value: faker.number.float({ min: 1000, max: 10000, - precision: 2 + multipleOf: 2 }).toString(), viewPageFormatter: viewPageFormatCurrency, }, diff --git a/e2e/utils/data/application/application_data_67.ts b/e2e/utils/data/application/application_data_67.ts index a27923986f..52675d8a4c 100644 --- a/e2e/utils/data/application/application_data_67.ts +++ b/e2e/utils/data/application/application_data_67.ts @@ -140,7 +140,7 @@ const baseFormRegisteredCommunity_67: FormData = { value: faker.number.float({ min: 1000, max: 10000, - precision: 2 + multipleOf: 2 }).toString(), viewPageFormatter: viewPageFormatCurrency, }, @@ -192,7 +192,7 @@ const baseFormRegisteredCommunity_67: FormData = { value: faker.number.float({ min: 1000, max: 10000, - precision: 2 + multipleOf: 2 }).toString(), viewPageFormatter: viewPageFormatCurrency, }, @@ -272,7 +272,7 @@ const baseFormRegisteredCommunity_67: FormData = { value: faker.number.float({ min: 1000, max: 10000, - precision: 2 + multipleOf: 2 }).toString(), viewPageFormatter: viewPageFormatCurrency, }, @@ -324,7 +324,7 @@ const baseFormRegisteredCommunity_67: FormData = { value: faker.number.float({ min: 1000, max: 10000, - precision: 2 + multipleOf: 2 }).toString(), viewPageFormatter: viewPageFormatCurrency, }, diff --git a/e2e/utils/data/application/application_data_68.ts b/e2e/utils/data/application/application_data_68.ts index 0e43e5ea77..7187075095 100644 --- a/e2e/utils/data/application/application_data_68.ts +++ b/e2e/utils/data/application/application_data_68.ts @@ -157,7 +157,7 @@ const baseFormRegisteredCommunity_68: FormData = { value: faker.number.float({ min: 1000, max: 10000, - precision: 2 + multipleOf: 2 }).toString(), viewPageFormatter: viewPageFormatCurrency, }, @@ -209,7 +209,7 @@ const baseFormRegisteredCommunity_68: FormData = { value: faker.number.float({ min: 1000, max: 10000, - precision: 2 + multipleOf: 2 }).toString(), viewPageFormatter: viewPageFormatCurrency, }, @@ -264,7 +264,7 @@ const baseFormRegisteredCommunity_68: FormData = { value: faker.number.float({ min: 100, max: 1000, - precision: 2 + multipleOf: 2 }).toString(), viewPageFormatter: viewPageFormatCurrency, }, @@ -272,7 +272,7 @@ const baseFormRegisteredCommunity_68: FormData = { value: faker.number.float({ min: 100, max: 1000, - precision: 2 + multipleOf: 2 }).toString(), viewPageFormatter: viewPageFormatCurrency, }, From 3a4e8b25d5722152dcd374290f5c0aca6198c450 Mon Sep 17 00:00:00 2001 From: hel-platta-automation <95360595+hel-platta-automation@users.noreply.github.com> Date: Wed, 6 Nov 2024 11:24:00 +0200 Subject: [PATCH 30/74] Update configuration (#1542) --- composer.lock | 72 +++++++++++++++++++++++++-------------------------- 1 file changed, 36 insertions(+), 36 deletions(-) diff --git a/composer.lock b/composer.lock index a953e63f0b..f03bc1bbcf 100644 --- a/composer.lock +++ b/composer.lock @@ -4384,17 +4384,17 @@ }, { "name": "drupal/entity_browser", - "version": "2.11.0", + "version": "2.12.0", "source": { "type": "git", "url": "https://git.drupalcode.org/project/entity_browser.git", - "reference": "8.x-2.11" + "reference": "8.x-2.12" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/entity_browser-8.x-2.11.zip", - "reference": "8.x-2.11", - "shasum": "4ead3d3f9f6365fbc25cfbd0edcc5e0a9cc52e02" + "url": "https://ftp.drupal.org/files/projects/entity_browser-8.x-2.12.zip", + "reference": "8.x-2.12", + "shasum": "eeafb55f02317c63b17d71913cb918e6341b7c0d" }, "require": { "drupal/core": "^10.2 || ^11" @@ -4416,8 +4416,8 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "8.x-2.11", - "datestamp": "1723378138", + "version": "8.x-2.12", + "datestamp": "1730631838", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -4457,7 +4457,7 @@ "homepage": "https://www.drupal.org/user/471638" }, { - "name": "Primsi", + "name": "primsi", "homepage": "https://www.drupal.org/user/282629" }, { @@ -5489,16 +5489,16 @@ }, { "name": "drupal/hdbt", - "version": "6.7.22", + "version": "6.7.23", "source": { "type": "git", "url": "https://github.com/City-of-Helsinki/drupal-hdbt.git", - "reference": "2409e1caca4533d7d7ab8a504140190345ea56a1" + "reference": "c3eba8e806c2fc6746f0c79ff28a599ffc45963d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/City-of-Helsinki/drupal-hdbt/zipball/2409e1caca4533d7d7ab8a504140190345ea56a1", - "reference": "2409e1caca4533d7d7ab8a504140190345ea56a1", + "url": "https://api.github.com/repos/City-of-Helsinki/drupal-hdbt/zipball/c3eba8e806c2fc6746f0c79ff28a599ffc45963d", + "reference": "c3eba8e806c2fc6746f0c79ff28a599ffc45963d", "shasum": "" }, "require": { @@ -5517,10 +5517,10 @@ "Drupal" ], "support": { - "source": "https://github.com/City-of-Helsinki/drupal-hdbt/tree/6.7.22", + "source": "https://github.com/City-of-Helsinki/drupal-hdbt/tree/6.7.23", "issues": "https://github.com/City-of-Helsinki/drupal-hdbt/issues" }, - "time": "2024-10-30T13:44:31+00:00" + "time": "2024-10-31T14:57:06+00:00" }, { "name": "drupal/hdbt_admin", @@ -8277,17 +8277,17 @@ }, { "name": "drupal/raven", - "version": "6.0.10", + "version": "6.0.11", "source": { "type": "git", "url": "https://git.drupalcode.org/project/raven.git", - "reference": "6.0.10" + "reference": "6.0.11" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/raven-6.0.10.zip", - "reference": "6.0.10", - "shasum": "df0cce5b87bd76ce933d88afd91ebcd75741d329" + "url": "https://ftp.drupal.org/files/projects/raven-6.0.11.zip", + "reference": "6.0.11", + "shasum": "117934d82d34efde8a50247406fcf83d475a2be5" }, "require": { "drupal/core": "^10.2 || ^11", @@ -8301,8 +8301,8 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "6.0.10", - "datestamp": "1728022661", + "version": "6.0.11", + "datestamp": "1730515647", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -20888,16 +20888,16 @@ }, { "name": "phpdocumentor/reflection-docblock", - "version": "5.4.1", + "version": "5.5.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "9d07b3f7fdcf5efec5d1609cba3c19c5ea2bdc9c" + "reference": "54e10d44fc1a84e2598d26f70d4f6f1f233e228a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/9d07b3f7fdcf5efec5d1609cba3c19c5ea2bdc9c", - "reference": "9d07b3f7fdcf5efec5d1609cba3c19c5ea2bdc9c", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/54e10d44fc1a84e2598d26f70d4f6f1f233e228a", + "reference": "54e10d44fc1a84e2598d26f70d4f6f1f233e228a", "shasum": "" }, "require": { @@ -20910,13 +20910,13 @@ "webmozart/assert": "^1.9.1" }, "require-dev": { - "mockery/mockery": "~1.3.5", + "mockery/mockery": "~1.3.5 || ~1.6.0", "phpstan/extension-installer": "^1.1", "phpstan/phpstan": "^1.8", "phpstan/phpstan-mockery": "^1.1", "phpstan/phpstan-webmozart-assert": "^1.2", "phpunit/phpunit": "^9.5", - "vimeo/psalm": "^5.13" + "psalm/phar": "^5.26" }, "type": "library", "extra": { @@ -20946,29 +20946,29 @@ "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", "support": { "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.4.1" + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.5.0" }, - "time": "2024-05-21T05:55:05+00:00" + "time": "2024-11-04T21:26:31+00:00" }, { "name": "phpdocumentor/type-resolver", - "version": "1.8.2", + "version": "1.9.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "153ae662783729388a584b4361f2545e4d841e3c" + "reference": "1fb5ba8d045f5dd984ebded5b1cc66f29459422d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/153ae662783729388a584b4361f2545e4d841e3c", - "reference": "153ae662783729388a584b4361f2545e4d841e3c", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/1fb5ba8d045f5dd984ebded5b1cc66f29459422d", + "reference": "1fb5ba8d045f5dd984ebded5b1cc66f29459422d", "shasum": "" }, "require": { "doctrine/deprecations": "^1.0", "php": "^7.3 || ^8.0", "phpdocumentor/reflection-common": "^2.0", - "phpstan/phpdoc-parser": "^1.13" + "phpstan/phpdoc-parser": "^1.18" }, "require-dev": { "ext-tokenizer": "*", @@ -21004,9 +21004,9 @@ "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", "support": { "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.8.2" + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.9.0" }, - "time": "2024-02-23T11:10:43+00:00" + "time": "2024-11-03T20:11:34+00:00" }, { "name": "phpspec/prophecy", From 8fab2638edaa3b63f7cd47ef8e1009374bb3196c Mon Sep 17 00:00:00 2001 From: hel-platta-automation <95360595+hel-platta-automation@users.noreply.github.com> Date: Wed, 6 Nov 2024 11:47:38 +0200 Subject: [PATCH 31/74] Automatic update (#1549) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Update configuration * Reverted filter changes. --------- Co-authored-by: Markus Kalijärvi --- composer.lock | 28 ++++++++++++++-------------- conf/cmi/raven.settings.yml | 8 ++++---- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/composer.lock b/composer.lock index f03bc1bbcf..67e22795f3 100644 --- a/composer.lock +++ b/composer.lock @@ -5618,16 +5618,16 @@ }, { "name": "drupal/helfi_api_base", - "version": "2.7.12", + "version": "2.7.13", "source": { "type": "git", "url": "https://github.com/City-of-Helsinki/drupal-module-helfi-api-base.git", - "reference": "386c2ad76f28d11510272497bb016c7fa20b6462" + "reference": "b64e17819c3d21a8372c1325252f2cc294064d2d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/City-of-Helsinki/drupal-module-helfi-api-base/zipball/386c2ad76f28d11510272497bb016c7fa20b6462", - "reference": "386c2ad76f28d11510272497bb016c7fa20b6462", + "url": "https://api.github.com/repos/City-of-Helsinki/drupal-module-helfi-api-base/zipball/b64e17819c3d21a8372c1325252f2cc294064d2d", + "reference": "b64e17819c3d21a8372c1325252f2cc294064d2d", "shasum": "" }, "require": { @@ -5657,10 +5657,10 @@ ], "description": "Helfi - API Base", "support": { - "source": "https://github.com/City-of-Helsinki/drupal-module-helfi-api-base/tree/2.7.12", + "source": "https://github.com/City-of-Helsinki/drupal-module-helfi-api-base/tree/2.7.13", "issues": "https://github.com/City-of-Helsinki/drupal-module-helfi-api-base/issues" }, - "time": "2024-10-28T09:35:07+00:00" + "time": "2024-11-06T09:24:38+00:00" }, { "name": "drupal/helfi_atv", @@ -15079,16 +15079,16 @@ }, { "name": "sentry/sentry", - "version": "4.9.0", + "version": "4.10.0", "source": { "type": "git", "url": "https://github.com/getsentry/sentry-php.git", - "reference": "788ec170f51ebb22f2809a1e3f78b19ccd39b70d" + "reference": "2af937d47d8aadb8dab0b1d7b9557e495dd12856" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/getsentry/sentry-php/zipball/788ec170f51ebb22f2809a1e3f78b19ccd39b70d", - "reference": "788ec170f51ebb22f2809a1e3f78b19ccd39b70d", + "url": "https://api.github.com/repos/getsentry/sentry-php/zipball/2af937d47d8aadb8dab0b1d7b9557e495dd12856", + "reference": "2af937d47d8aadb8dab0b1d7b9557e495dd12856", "shasum": "" }, "require": { @@ -15106,12 +15106,12 @@ }, "require-dev": { "friendsofphp/php-cs-fixer": "^3.4", - "guzzlehttp/promises": "^1.0|^2.0", + "guzzlehttp/promises": "^2.0.3", "guzzlehttp/psr7": "^1.8.4|^2.1.1", "monolog/monolog": "^1.6|^2.0|^3.0", "phpbench/phpbench": "^1.0", "phpstan/phpstan": "^1.3", - "phpunit/phpunit": "^8.5.14|^9.4", + "phpunit/phpunit": "^8.5|^9.6", "symfony/phpunit-bridge": "^5.2|^6.0|^7.0", "vimeo/psalm": "^4.17" }, @@ -15152,7 +15152,7 @@ ], "support": { "issues": "https://github.com/getsentry/sentry-php/issues", - "source": "https://github.com/getsentry/sentry-php/tree/4.9.0" + "source": "https://github.com/getsentry/sentry-php/tree/4.10.0" }, "funding": [ { @@ -15164,7 +15164,7 @@ "type": "custom" } ], - "time": "2024-08-08T14:40:50+00:00" + "time": "2024-11-06T07:44:19+00:00" }, { "name": "stomp-php/stomp-php", diff --git a/conf/cmi/raven.settings.yml b/conf/cmi/raven.settings.yml index d5ad8ba29f..d2afac6392 100644 --- a/conf/cmi/raven.settings.yml +++ b/conf/cmi/raven.settings.yml @@ -4,10 +4,10 @@ client_key: '' environment: '' release: '' log_levels: - emergency: false - alert: false - critical: false - error: false + emergency: true + alert: true + critical: true + error: true warning: false notice: false info: false From 9d94891638ec984f937906b1aa24ac9a503e939d Mon Sep 17 00:00:00 2001 From: hel-platta-automation <95360595+hel-platta-automation@users.noreply.github.com> Date: Thu, 7 Nov 2024 07:33:09 +0200 Subject: [PATCH 32/74] Update configuration (#1550) --- composer.lock | 108 ++++++++++----------- conf/cmi/filter.format.sidebar.yml | 10 +- conf/cmi/filter.format.webform_default.yml | 10 +- 3 files changed, 72 insertions(+), 56 deletions(-) diff --git a/composer.lock b/composer.lock index 67e22795f3..ab1685c1d9 100644 --- a/composer.lock +++ b/composer.lock @@ -5489,16 +5489,16 @@ }, { "name": "drupal/hdbt", - "version": "6.7.23", + "version": "6.8.0", "source": { "type": "git", "url": "https://github.com/City-of-Helsinki/drupal-hdbt.git", - "reference": "c3eba8e806c2fc6746f0c79ff28a599ffc45963d" + "reference": "e280113e8961216ae1db8314745801b6c40b323a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/City-of-Helsinki/drupal-hdbt/zipball/c3eba8e806c2fc6746f0c79ff28a599ffc45963d", - "reference": "c3eba8e806c2fc6746f0c79ff28a599ffc45963d", + "url": "https://api.github.com/repos/City-of-Helsinki/drupal-hdbt/zipball/e280113e8961216ae1db8314745801b6c40b323a", + "reference": "e280113e8961216ae1db8314745801b6c40b323a", "shasum": "" }, "require": { @@ -5517,10 +5517,10 @@ "Drupal" ], "support": { - "source": "https://github.com/City-of-Helsinki/drupal-hdbt/tree/6.7.23", + "source": "https://github.com/City-of-Helsinki/drupal-hdbt/tree/6.8.0", "issues": "https://github.com/City-of-Helsinki/drupal-hdbt/issues" }, - "time": "2024-10-31T14:57:06+00:00" + "time": "2024-11-06T13:21:52+00:00" }, { "name": "drupal/hdbt_admin", @@ -15241,16 +15241,16 @@ }, { "name": "symfony/console", - "version": "v6.4.13", + "version": "v6.4.14", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "f793dd5a7d9ae9923e35d0503d08ba734cec1d79" + "reference": "897c2441ed4eec8a8a2c37b943427d24dba3f26b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/f793dd5a7d9ae9923e35d0503d08ba734cec1d79", - "reference": "f793dd5a7d9ae9923e35d0503d08ba734cec1d79", + "url": "https://api.github.com/repos/symfony/console/zipball/897c2441ed4eec8a8a2c37b943427d24dba3f26b", + "reference": "897c2441ed4eec8a8a2c37b943427d24dba3f26b", "shasum": "" }, "require": { @@ -15315,7 +15315,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.4.13" + "source": "https://github.com/symfony/console/tree/v6.4.14" }, "funding": [ { @@ -15331,7 +15331,7 @@ "type": "tidelift" } ], - "time": "2024-10-09T08:40:40+00:00" + "time": "2024-11-05T15:34:40+00:00" }, { "name": "symfony/dependency-injection", @@ -15483,16 +15483,16 @@ }, { "name": "symfony/error-handler", - "version": "v6.4.13", + "version": "v6.4.14", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "e3c78742f86a5b65fe2ac4c4b6b776d92fd7ca0c" + "reference": "9e024324511eeb00983ee76b9aedc3e6ecd993d9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/e3c78742f86a5b65fe2ac4c4b6b776d92fd7ca0c", - "reference": "e3c78742f86a5b65fe2ac4c4b6b776d92fd7ca0c", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/9e024324511eeb00983ee76b9aedc3e6ecd993d9", + "reference": "9e024324511eeb00983ee76b9aedc3e6ecd993d9", "shasum": "" }, "require": { @@ -15538,7 +15538,7 @@ "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/error-handler/tree/v6.4.13" + "source": "https://github.com/symfony/error-handler/tree/v6.4.14" }, "funding": [ { @@ -15554,7 +15554,7 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:18:03+00:00" + "time": "2024-11-05T15:34:40+00:00" }, { "name": "symfony/event-dispatcher", @@ -15844,16 +15844,16 @@ }, { "name": "symfony/http-foundation", - "version": "v6.4.13", + "version": "v6.4.14", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "4c0341b3e0a7291e752c69d2a1ed9a84b68d604c" + "reference": "ba020a321a95519303a3f09ec2824d34d601c388" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/4c0341b3e0a7291e752c69d2a1ed9a84b68d604c", - "reference": "4c0341b3e0a7291e752c69d2a1ed9a84b68d604c", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/ba020a321a95519303a3f09ec2824d34d601c388", + "reference": "ba020a321a95519303a3f09ec2824d34d601c388", "shasum": "" }, "require": { @@ -15901,7 +15901,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v6.4.13" + "source": "https://github.com/symfony/http-foundation/tree/v6.4.14" }, "funding": [ { @@ -15917,20 +15917,20 @@ "type": "tidelift" } ], - "time": "2024-10-11T19:20:58+00:00" + "time": "2024-11-05T16:39:55+00:00" }, { "name": "symfony/http-kernel", - "version": "v6.4.13", + "version": "v6.4.14", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "4474015c363ec0cd3bf47d55657e68630dbae66e" + "reference": "8278a947d0369754a47b758a9e17b72cab970951" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/4474015c363ec0cd3bf47d55657e68630dbae66e", - "reference": "4474015c363ec0cd3bf47d55657e68630dbae66e", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/8278a947d0369754a47b758a9e17b72cab970951", + "reference": "8278a947d0369754a47b758a9e17b72cab970951", "shasum": "" }, "require": { @@ -16015,7 +16015,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v6.4.13" + "source": "https://github.com/symfony/http-kernel/tree/v6.4.14" }, "funding": [ { @@ -16031,7 +16031,7 @@ "type": "tidelift" } ], - "time": "2024-10-27T13:00:29+00:00" + "time": "2024-11-06T09:45:21+00:00" }, { "name": "symfony/mailer", @@ -17124,16 +17124,16 @@ }, { "name": "symfony/process", - "version": "v6.4.13", + "version": "v6.4.14", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "1f9f59b46880201629df3bd950fc5ae8c55b960f" + "reference": "25214adbb0996d18112548de20c281be9f27279f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/1f9f59b46880201629df3bd950fc5ae8c55b960f", - "reference": "1f9f59b46880201629df3bd950fc5ae8c55b960f", + "url": "https://api.github.com/repos/symfony/process/zipball/25214adbb0996d18112548de20c281be9f27279f", + "reference": "25214adbb0996d18112548de20c281be9f27279f", "shasum": "" }, "require": { @@ -17165,7 +17165,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v6.4.13" + "source": "https://github.com/symfony/process/tree/v6.4.14" }, "funding": [ { @@ -17181,7 +17181,7 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:18:03+00:00" + "time": "2024-11-06T09:25:01+00:00" }, { "name": "symfony/psr-http-message-bridge", @@ -17791,16 +17791,16 @@ }, { "name": "symfony/validator", - "version": "v6.4.13", + "version": "v6.4.14", "source": { "type": "git", "url": "https://github.com/symfony/validator.git", - "reference": "68e0bf4522756269d9bff801a16701b2ed5eb730" + "reference": "dc259b85e59a6569e205966d447dec0a7d95facf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/validator/zipball/68e0bf4522756269d9bff801a16701b2ed5eb730", - "reference": "68e0bf4522756269d9bff801a16701b2ed5eb730", + "url": "https://api.github.com/repos/symfony/validator/zipball/dc259b85e59a6569e205966d447dec0a7d95facf", + "reference": "dc259b85e59a6569e205966d447dec0a7d95facf", "shasum": "" }, "require": { @@ -17868,7 +17868,7 @@ "description": "Provides tools to validate values", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/validator/tree/v6.4.13" + "source": "https://github.com/symfony/validator/tree/v6.4.14" }, "funding": [ { @@ -17884,20 +17884,20 @@ "type": "tidelift" } ], - "time": "2024-10-25T15:07:50+00:00" + "time": "2024-11-04T11:33:53+00:00" }, { "name": "symfony/var-dumper", - "version": "v6.4.13", + "version": "v6.4.14", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "2acb151474ed8cb43624e3f41a0bf7c4c8ce4f41" + "reference": "93c09246038178717a9c14b809ea8151ffcf7091" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/2acb151474ed8cb43624e3f41a0bf7c4c8ce4f41", - "reference": "2acb151474ed8cb43624e3f41a0bf7c4c8ce4f41", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/93c09246038178717a9c14b809ea8151ffcf7091", + "reference": "93c09246038178717a9c14b809ea8151ffcf7091", "shasum": "" }, "require": { @@ -17953,7 +17953,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v6.4.13" + "source": "https://github.com/symfony/var-dumper/tree/v6.4.14" }, "funding": [ { @@ -17969,7 +17969,7 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:18:03+00:00" + "time": "2024-11-05T15:34:40+00:00" }, { "name": "symfony/var-exporter", @@ -20888,16 +20888,16 @@ }, { "name": "phpdocumentor/reflection-docblock", - "version": "5.5.0", + "version": "5.5.1", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "54e10d44fc1a84e2598d26f70d4f6f1f233e228a" + "reference": "0c70d2c566e899666f367ab7b80986beb3581e6f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/54e10d44fc1a84e2598d26f70d4f6f1f233e228a", - "reference": "54e10d44fc1a84e2598d26f70d4f6f1f233e228a", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/0c70d2c566e899666f367ab7b80986beb3581e6f", + "reference": "0c70d2c566e899666f367ab7b80986beb3581e6f", "shasum": "" }, "require": { @@ -20946,9 +20946,9 @@ "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", "support": { "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.5.0" + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.5.1" }, - "time": "2024-11-04T21:26:31+00:00" + "time": "2024-11-06T11:58:54+00:00" }, { "name": "phpdocumentor/type-resolver", diff --git a/conf/cmi/filter.format.sidebar.yml b/conf/cmi/filter.format.sidebar.yml index 856a0de794..4c71b5ef49 100644 --- a/conf/cmi/filter.format.sidebar.yml +++ b/conf/cmi/filter.format.sidebar.yml @@ -1,7 +1,9 @@ uuid: 08dc13c1-c3be-4f15-abde-e23e88f4e4c5 langcode: en status: true -dependencies: { } +dependencies: + module: + - helfi_api_base name: Sidebar format: sidebar weight: 0 @@ -27,3 +29,9 @@ filters: status: true weight: 10 settings: { } + helfi_link_converter: + id: helfi_link_converter + provider: helfi_api_base + status: true + weight: -10 + settings: { } diff --git a/conf/cmi/filter.format.webform_default.yml b/conf/cmi/filter.format.webform_default.yml index d25ded5cc6..c5de45d1c3 100644 --- a/conf/cmi/filter.format.webform_default.yml +++ b/conf/cmi/filter.format.webform_default.yml @@ -2,10 +2,18 @@ uuid: 4ab1e9e9-3892-4151-8349-a3671950f4cc langcode: en status: true dependencies: + module: + - helfi_api_base enforced: module: - webform name: 'Webform (Default) - DO NOT EDIT' format: webform_default weight: 100 -filters: { } +filters: + helfi_link_converter: + id: helfi_link_converter + provider: helfi_api_base + status: true + weight: -10 + settings: { } From a847f40f7a4a41cbc2d3bc0ea9f7b60b03c66e3c Mon Sep 17 00:00:00 2001 From: Janne Suominen Date: Thu, 7 Nov 2024 13:30:29 +0200 Subject: [PATCH 33/74] fix: UHF-10656: Fix incorrectly copied transaltions (#1552) --- conf/cmi/language/en/webform.webform.nuortoimpalkka.yml | 2 +- conf/cmi/language/sv/webform.webform.nuortoimpalkka.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/conf/cmi/language/en/webform.webform.nuortoimpalkka.yml b/conf/cmi/language/en/webform.webform.nuortoimpalkka.yml index 5e9b484e19..a2275448d1 100644 --- a/conf/cmi/language/en/webform.webform.nuortoimpalkka.yml +++ b/conf/cmi/language/en/webform.webform.nuortoimpalkka.yml @@ -87,7 +87,7 @@ elements: | '#title': 'Grant issuer' issuer_name: '#title': 'Issuer''s name' - '#help': '

Indicate here only the grants received from somewhere other than the City of Helsinki in the current and two previous tax years.

' + '#help': '

Which body has granted the grant (e.g. name of the ministry).

' year: '#title': Year '#pattern_error': 'Only numbers' diff --git a/conf/cmi/language/sv/webform.webform.nuortoimpalkka.yml b/conf/cmi/language/sv/webform.webform.nuortoimpalkka.yml index 25f5ca260a..67e710adc4 100644 --- a/conf/cmi/language/sv/webform.webform.nuortoimpalkka.yml +++ b/conf/cmi/language/sv/webform.webform.nuortoimpalkka.yml @@ -90,7 +90,7 @@ elements: | '#title': Bidragsgivare issuer_name: '#title': 'Emittentens namn' - '#help': '

Ange här endast de understöd som beviljats från annanstans än Helsingfors stad under det innevarande beskattningsåret eller de föregående två beskattningsåren.

' + '#help': '

Vilket organ har beviljat bidraget (t.ex. namnet på departementet).

' year: '#title': År '#pattern_error': 'Bara siffror' From fe944be3b0950fd41dc7fcd67b9e0318ad54f625 Mon Sep 17 00:00:00 2001 From: hel-platta-automation <95360595+hel-platta-automation@users.noreply.github.com> Date: Fri, 8 Nov 2024 07:11:29 +0200 Subject: [PATCH 34/74] Update configuration (#1551) --- composer.lock | 94 +++++++++---------- ...e_video.field_remote_video_video_title.yml | 4 +- 2 files changed, 49 insertions(+), 49 deletions(-) diff --git a/composer.lock b/composer.lock index ab1685c1d9..cb21c69f62 100644 --- a/composer.lock +++ b/composer.lock @@ -3116,16 +3116,16 @@ }, { "name": "drupal/core", - "version": "10.3.6", + "version": "10.3.7", "source": { "type": "git", "url": "https://github.com/drupal/core.git", - "reference": "168ec99f2012aeb4e93c6c7dd4a90dc919ae96c6" + "reference": "5b11ec4e38e71748c51287cbd64cfcc43faeb624" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/drupal/core/zipball/168ec99f2012aeb4e93c6c7dd4a90dc919ae96c6", - "reference": "168ec99f2012aeb4e93c6c7dd4a90dc919ae96c6", + "url": "https://api.github.com/repos/drupal/core/zipball/5b11ec4e38e71748c51287cbd64cfcc43faeb624", + "reference": "5b11ec4e38e71748c51287cbd64cfcc43faeb624", "shasum": "" }, "require": { @@ -3274,13 +3274,13 @@ ], "description": "Drupal is an open source content management platform powering millions of websites and applications.", "support": { - "source": "https://github.com/drupal/core/tree/10.3.6" + "source": "https://github.com/drupal/core/tree/10.3.7" }, - "time": "2024-10-03T08:58:13+00:00" + "time": "2024-11-07T08:22:50+00:00" }, { "name": "drupal/core-composer-scaffold", - "version": "10.3.6", + "version": "10.3.7", "source": { "type": "git", "url": "https://github.com/drupal/core-composer-scaffold.git", @@ -3324,7 +3324,7 @@ "drupal" ], "support": { - "source": "https://github.com/drupal/core-composer-scaffold/tree/10.3.6" + "source": "https://github.com/drupal/core-composer-scaffold/tree/10.3.7" }, "time": "2024-08-22T14:31:34+00:00" }, @@ -5489,16 +5489,16 @@ }, { "name": "drupal/hdbt", - "version": "6.8.0", + "version": "6.8.1", "source": { "type": "git", "url": "https://github.com/City-of-Helsinki/drupal-hdbt.git", - "reference": "e280113e8961216ae1db8314745801b6c40b323a" + "reference": "02ce20fa1e68c272f12965f8cdbd00d6b41a3837" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/City-of-Helsinki/drupal-hdbt/zipball/e280113e8961216ae1db8314745801b6c40b323a", - "reference": "e280113e8961216ae1db8314745801b6c40b323a", + "url": "https://api.github.com/repos/City-of-Helsinki/drupal-hdbt/zipball/02ce20fa1e68c272f12965f8cdbd00d6b41a3837", + "reference": "02ce20fa1e68c272f12965f8cdbd00d6b41a3837", "shasum": "" }, "require": { @@ -5517,10 +5517,10 @@ "Drupal" ], "support": { - "source": "https://github.com/City-of-Helsinki/drupal-hdbt/tree/6.8.0", + "source": "https://github.com/City-of-Helsinki/drupal-hdbt/tree/6.8.1", "issues": "https://github.com/City-of-Helsinki/drupal-hdbt/issues" }, - "time": "2024-11-06T13:21:52+00:00" + "time": "2024-11-07T13:57:22+00:00" }, { "name": "drupal/hdbt_admin", @@ -5618,16 +5618,16 @@ }, { "name": "drupal/helfi_api_base", - "version": "2.7.13", + "version": "2.7.14", "source": { "type": "git", "url": "https://github.com/City-of-Helsinki/drupal-module-helfi-api-base.git", - "reference": "b64e17819c3d21a8372c1325252f2cc294064d2d" + "reference": "d149db10862c62980427c0ad124d0e54c7b97902" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/City-of-Helsinki/drupal-module-helfi-api-base/zipball/b64e17819c3d21a8372c1325252f2cc294064d2d", - "reference": "b64e17819c3d21a8372c1325252f2cc294064d2d", + "url": "https://api.github.com/repos/City-of-Helsinki/drupal-module-helfi-api-base/zipball/d149db10862c62980427c0ad124d0e54c7b97902", + "reference": "d149db10862c62980427c0ad124d0e54c7b97902", "shasum": "" }, "require": { @@ -5657,10 +5657,10 @@ ], "description": "Helfi - API Base", "support": { - "source": "https://github.com/City-of-Helsinki/drupal-module-helfi-api-base/tree/2.7.13", + "source": "https://github.com/City-of-Helsinki/drupal-module-helfi-api-base/tree/2.7.14", "issues": "https://github.com/City-of-Helsinki/drupal-module-helfi-api-base/issues" }, - "time": "2024-11-06T09:24:38+00:00" + "time": "2024-11-07T10:23:06+00:00" }, { "name": "drupal/helfi_atv", @@ -5931,16 +5931,16 @@ }, { "name": "drupal/helfi_platform_config", - "version": "4.6.23", + "version": "4.6.24", "source": { "type": "git", "url": "https://github.com/City-of-Helsinki/drupal-helfi-platform-config.git", - "reference": "fda61dc90882c4799f35cb7d6039987cff4883a4" + "reference": "07fd66ba2f3cb452db84940dc1d254b8466a75bd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/City-of-Helsinki/drupal-helfi-platform-config/zipball/fda61dc90882c4799f35cb7d6039987cff4883a4", - "reference": "fda61dc90882c4799f35cb7d6039987cff4883a4", + "url": "https://api.github.com/repos/City-of-Helsinki/drupal-helfi-platform-config/zipball/07fd66ba2f3cb452db84940dc1d254b8466a75bd", + "reference": "07fd66ba2f3cb452db84940dc1d254b8466a75bd", "shasum": "" }, "require": { @@ -6059,10 +6059,10 @@ ], "description": "HELfi platform config", "support": { - "source": "https://github.com/City-of-Helsinki/drupal-helfi-platform-config/tree/4.6.23", + "source": "https://github.com/City-of-Helsinki/drupal-helfi-platform-config/tree/4.6.24", "issues": "https://github.com/City-of-Helsinki/drupal-helfi-platform-config/issues" }, - "time": "2024-10-31T11:33:34+00:00" + "time": "2024-11-07T13:57:38+00:00" }, { "name": "drupal/helfi_proxy", @@ -6111,16 +6111,16 @@ }, { "name": "drupal/helfi_tpr", - "version": "2.3.8", + "version": "2.3.9", "source": { "type": "git", "url": "https://github.com/City-of-Helsinki/drupal-module-helfi-tpr.git", - "reference": "b64f239e7b8379cbc97dfc28d35e8c3f2db80162" + "reference": "6cca3df5dc891c98ae40e8259856a343d9abd8ca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/City-of-Helsinki/drupal-module-helfi-tpr/zipball/b64f239e7b8379cbc97dfc28d35e8c3f2db80162", - "reference": "b64f239e7b8379cbc97dfc28d35e8c3f2db80162", + "url": "https://api.github.com/repos/City-of-Helsinki/drupal-module-helfi-tpr/zipball/6cca3df5dc891c98ae40e8259856a343d9abd8ca", + "reference": "6cca3df5dc891c98ae40e8259856a343d9abd8ca", "shasum": "" }, "require": { @@ -6146,10 +6146,10 @@ ], "description": "TPR integration", "support": { - "source": "https://github.com/City-of-Helsinki/drupal-module-helfi-tpr/tree/2.3.8", + "source": "https://github.com/City-of-Helsinki/drupal-module-helfi-tpr/tree/2.3.9", "issues": "https://github.com/City-of-Helsinki/drupal-module-helfi-tpr/issues" }, - "time": "2024-03-25T06:40:36+00:00" + "time": "2024-11-07T13:09:51+00:00" }, { "name": "drupal/helfi_tunnistamo", @@ -6269,20 +6269,20 @@ }, { "name": "drupal/image_style_quality", - "version": "1.6.0", + "version": "1.7.0", "source": { "type": "git", "url": "https://git.drupalcode.org/project/image_style_quality.git", - "reference": "8.x-1.6" + "reference": "8.x-1.7" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/image_style_quality-8.x-1.6.zip", - "reference": "8.x-1.6", - "shasum": "262f63471c3765eb7c944476f18b27fb82bdeaa1" + "url": "https://ftp.drupal.org/files/projects/image_style_quality-8.x-1.7.zip", + "reference": "8.x-1.7", + "shasum": "3cb3d326e3df3b78cadc91bae1fd9de17dd27bc7" }, "require": { - "drupal/core": "^8 || ^9 || ^10", + "drupal/core": "^8 || ^9 || ^10 || ^11", "php": ">=7.4" }, "require-dev": { @@ -6296,8 +6296,8 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "8.x-1.6", - "datestamp": "1679497333", + "version": "8.x-1.7", + "datestamp": "1730925822", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -6318,7 +6318,7 @@ "homepage": "https://www.drupal.org/user/1463982" }, { - "name": "Sam152", + "name": "sam152", "homepage": "https://www.drupal.org/user/1485048" } ], @@ -18220,16 +18220,16 @@ }, { "name": "twig/twig", - "version": "v3.14.0", + "version": "v3.14.2", "source": { "type": "git", "url": "https://github.com/twigphp/Twig.git", - "reference": "126b2c97818dbff0cdf3fbfc881aedb3d40aae72" + "reference": "0b6f9d8370bb3b7f1ce5313ed8feb0fafd6e399a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/126b2c97818dbff0cdf3fbfc881aedb3d40aae72", - "reference": "126b2c97818dbff0cdf3fbfc881aedb3d40aae72", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/0b6f9d8370bb3b7f1ce5313ed8feb0fafd6e399a", + "reference": "0b6f9d8370bb3b7f1ce5313ed8feb0fafd6e399a", "shasum": "" }, "require": { @@ -18283,7 +18283,7 @@ ], "support": { "issues": "https://github.com/twigphp/Twig/issues", - "source": "https://github.com/twigphp/Twig/tree/v3.14.0" + "source": "https://github.com/twigphp/Twig/tree/v3.14.2" }, "funding": [ { @@ -18295,7 +18295,7 @@ "type": "tidelift" } ], - "time": "2024-09-09T17:55:12+00:00" + "time": "2024-11-07T12:36:22+00:00" }, { "name": "twistor/flysystem-stream-wrapper", diff --git a/conf/cmi/field.field.paragraph.remote_video.field_remote_video_video_title.yml b/conf/cmi/field.field.paragraph.remote_video.field_remote_video_video_title.yml index e677c2fdeb..a875bf217d 100644 --- a/conf/cmi/field.field.paragraph.remote_video.field_remote_video_video_title.yml +++ b/conf/cmi/field.field.paragraph.remote_video.field_remote_video_video_title.yml @@ -6,14 +6,14 @@ dependencies: - field.storage.paragraph.field_remote_video_video_title - paragraphs.paragraphs_type.remote_video _core: - default_config_hash: wDlJqGu3PbMmNtmqsuYHGbmIklPbceZDVZ17ENs2vAg + default_config_hash: OetItkfP7vdKFfRMKUkRAiIavZrk78vEeZ0lYtv3kU8 id: paragraph.remote_video.field_remote_video_video_title field_name: field_remote_video_video_title entity_type: paragraph bundle: remote_video label: 'Title of the video' description: '' -required: false +required: true translatable: false default_value: { } default_value_callback: '' From 6e7b63f24e39b66ccafa0a689784d8c341d83ce1 Mon Sep 17 00:00:00 2001 From: hel-platta-automation <95360595+hel-platta-automation@users.noreply.github.com> Date: Mon, 11 Nov 2024 06:57:15 +0200 Subject: [PATCH 35/74] Update configuration (#1554) --- composer.lock | 1430 +++++++++++++++------------------ conf/cmi/metatag.settings.yml | 1 + 2 files changed, 627 insertions(+), 804 deletions(-) diff --git a/composer.lock b/composer.lock index cb21c69f62..b78c76db2e 100644 --- a/composer.lock +++ b/composer.lock @@ -4170,38 +4170,43 @@ }, { "name": "drupal/elasticsearch_connector", - "version": "7.0.0-alpha5", + "version": "8.0.0-alpha2", "source": { "type": "git", "url": "https://git.drupalcode.org/project/elasticsearch_connector.git", - "reference": "8.x-7.0-alpha5" + "reference": "8.0.0-alpha2" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/elasticsearch_connector-8.x-7.0-alpha5.zip", - "reference": "8.x-7.0-alpha5", - "shasum": "75456c31f48d76b176d81f258aa589987cd16b87" + "url": "https://ftp.drupal.org/files/projects/elasticsearch_connector-8.0.0-alpha2.zip", + "reference": "8.0.0-alpha2", + "shasum": "35928100f913b7a1d57a362b528071034f2ae1ff" }, "require": { - "drupal/core": "^9.2 || ^10", - "ext-curl": "*", - "makinacorpus/php-lucene": "^1.0.2", - "nodespark/des-connector": "7.x-dev" + "drupal/core": "^9 || ^10 | ^11", + "drupal/search_api": "^1.23", + "elasticsearch/elasticsearch": "^8", + "makinacorpus/php-lucene": "^1.1", + "php": "^8" }, "require-dev": { - "behat/mink-selenium2-driver": "^1.3", - "bex/behat-screenshot": "^1.2", - "drupal/coder": "^8.2", - "drupal/drupal-extension": "master-dev", - "drupal/search_api": "^1.4", - "phpmd/phpmd": "^2.6", - "phpmetrics/phpmetrics": "^2.3" + "drupal/coder": "^8.3", + "drupal/devel": "^4.0|^5.0", + "drupal/geofield": "1.x-dev", + "drush/drush": "^12.0 || ^13", + "phayes/geophp": "^1.2" + }, + "suggest": { + "drupal/facets": "Provides facetted search.", + "drupal/search_api_autocomplete": "Provides auto complete for search boxes.", + "drupal/search_api_location": "Provides location searches.", + "drupal/search_api_spellcheck": "Provides spell checking and 'Did You Mean?'." }, "type": "drupal-module", "extra": { "drupal": { - "version": "8.x-7.0-alpha5", - "datestamp": "1718962853", + "version": "8.0.0-alpha2", + "datestamp": "1722668348", "security-coverage": { "status": "not-covered", "message": "Project has not opted into security advisory coverage!" @@ -4210,18 +4215,16 @@ }, "notification-url": "https://packages.drupal.org/8/downloads", "license": [ - "GPL-2.0+" + "GPL-2.0-or-later" ], "authors": [ { - "name": "Nikolay Ignatov", - "homepage": "http://www.nodespark.com", - "email": "nignatov@nodespark.com", - "role": "Creator and Maintainer" + "name": "lachezar.valchev", + "homepage": "https://www.drupal.org/user/1482368" }, { - "name": "See other contributors", - "homepage": "https://www.drupal.org/node/2159059/committers" + "name": "mparker17", + "homepage": "https://www.drupal.org/user/536298" }, { "name": "skek", @@ -4236,11 +4239,10 @@ "homepage": "https://www.drupal.org/user/257311" } ], - "description": "Elasticsearch Connector module for Drupal.", + "description": "Provides an ElasticSearch backend for Search API.", "homepage": "https://www.drupal.org/project/elasticsearch_connector", "support": { - "source": "https://github.com/nodespark/elasticsearch_connector", - "issues": "https://www.drupal.org/project/issues/elasticsearch_connector" + "source": "https://git.drupalcode.org/project/elasticsearch_connector" } }, { @@ -5489,16 +5491,16 @@ }, { "name": "drupal/hdbt", - "version": "6.8.1", + "version": "6.8.4", "source": { "type": "git", "url": "https://github.com/City-of-Helsinki/drupal-hdbt.git", - "reference": "02ce20fa1e68c272f12965f8cdbd00d6b41a3837" + "reference": "dfabf9a5cdc0953ea7e3078ed002fe4bc937abad" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/City-of-Helsinki/drupal-hdbt/zipball/02ce20fa1e68c272f12965f8cdbd00d6b41a3837", - "reference": "02ce20fa1e68c272f12965f8cdbd00d6b41a3837", + "url": "https://api.github.com/repos/City-of-Helsinki/drupal-hdbt/zipball/dfabf9a5cdc0953ea7e3078ed002fe4bc937abad", + "reference": "dfabf9a5cdc0953ea7e3078ed002fe4bc937abad", "shasum": "" }, "require": { @@ -5517,10 +5519,10 @@ "Drupal" ], "support": { - "source": "https://github.com/City-of-Helsinki/drupal-hdbt/tree/6.8.1", + "source": "https://github.com/City-of-Helsinki/drupal-hdbt/tree/6.8.4", "issues": "https://github.com/City-of-Helsinki/drupal-hdbt/issues" }, - "time": "2024-11-07T13:57:22+00:00" + "time": "2024-11-08T17:53:14+00:00" }, { "name": "drupal/hdbt_admin", @@ -5618,16 +5620,16 @@ }, { "name": "drupal/helfi_api_base", - "version": "2.7.14", + "version": "2.7.15", "source": { "type": "git", "url": "https://github.com/City-of-Helsinki/drupal-module-helfi-api-base.git", - "reference": "d149db10862c62980427c0ad124d0e54c7b97902" + "reference": "bfada1ee33120497e8dde6dbde201320f41e2dfc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/City-of-Helsinki/drupal-module-helfi-api-base/zipball/d149db10862c62980427c0ad124d0e54c7b97902", - "reference": "d149db10862c62980427c0ad124d0e54c7b97902", + "url": "https://api.github.com/repos/City-of-Helsinki/drupal-module-helfi-api-base/zipball/bfada1ee33120497e8dde6dbde201320f41e2dfc", + "reference": "bfada1ee33120497e8dde6dbde201320f41e2dfc", "shasum": "" }, "require": { @@ -5657,10 +5659,10 @@ ], "description": "Helfi - API Base", "support": { - "source": "https://github.com/City-of-Helsinki/drupal-module-helfi-api-base/tree/2.7.14", + "source": "https://github.com/City-of-Helsinki/drupal-module-helfi-api-base/tree/2.7.15", "issues": "https://github.com/City-of-Helsinki/drupal-module-helfi-api-base/issues" }, - "time": "2024-11-07T10:23:06+00:00" + "time": "2024-11-08T08:31:53+00:00" }, { "name": "drupal/helfi_atv", @@ -5931,16 +5933,16 @@ }, { "name": "drupal/helfi_platform_config", - "version": "4.6.24", + "version": "4.7.0", "source": { "type": "git", "url": "https://github.com/City-of-Helsinki/drupal-helfi-platform-config.git", - "reference": "07fd66ba2f3cb452db84940dc1d254b8466a75bd" + "reference": "1706882d4ccbeacf33175a30157a9495f891af39" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/City-of-Helsinki/drupal-helfi-platform-config/zipball/07fd66ba2f3cb452db84940dc1d254b8466a75bd", - "reference": "07fd66ba2f3cb452db84940dc1d254b8466a75bd", + "url": "https://api.github.com/repos/City-of-Helsinki/drupal-helfi-platform-config/zipball/1706882d4ccbeacf33175a30157a9495f891af39", + "reference": "1706882d4ccbeacf33175a30157a9495f891af39", "shasum": "" }, "require": { @@ -5958,7 +5960,7 @@ "drupal/diff": "^1.0", "drupal/easy_breadcrumb": "^2.0", "drupal/editoria11y": "^2.0", - "drupal/elasticsearch_connector": "^7.0@alpha", + "drupal/elasticsearch_connector": "^8.0@alpha", "drupal/entity_browser": "^2.5", "drupal/entity_usage": "^2.0@beta", "drupal/eu_cookie_compliance": "1.24", @@ -6005,7 +6007,8 @@ "drupal/views_bulk_operations": "^4.1", "ext-curl": "*", "league/uri": "^6.0", - "php": "^8.1" + "php": "^8.1", + "ruflin/elastica": "^8.0" }, "conflict": { "drupal/core": "<10.3", @@ -6017,6 +6020,9 @@ "drupal/stage_file_proxy": "<2.1.5", "drush/drush": "<12" }, + "require-dev": { + "dg/bypass-finals": "^1.0" + }, "type": "drupal-module", "extra": { "patches": { @@ -6059,10 +6065,10 @@ ], "description": "HELfi platform config", "support": { - "source": "https://github.com/City-of-Helsinki/drupal-helfi-platform-config/tree/4.6.24", + "source": "https://github.com/City-of-Helsinki/drupal-helfi-platform-config/tree/4.7.0", "issues": "https://github.com/City-of-Helsinki/drupal-helfi-platform-config/issues" }, - "time": "2024-11-07T13:57:38+00:00" + "time": "2024-11-08T08:46:24+00:00" }, { "name": "drupal/helfi_proxy", @@ -7357,17 +7363,17 @@ }, { "name": "drupal/metatag", - "version": "2.0.2", + "version": "2.1.0", "source": { "type": "git", "url": "https://git.drupalcode.org/project/metatag.git", - "reference": "2.0.2" + "reference": "2.1.0" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/metatag-2.0.2.zip", - "reference": "2.0.2", - "shasum": "748013c50a0ed5e10359413bb3481392a0bf0d3f" + "url": "https://ftp.drupal.org/files/projects/metatag-2.1.0.zip", + "reference": "2.1.0", + "shasum": "c28fe2fdac68a9370a6af6cbafff4425dd5148f3" }, "require": { "drupal/core": "^9.4 || ^10 || ^11", @@ -7375,6 +7381,7 @@ "php": ">=8.0" }, "require-dev": { + "drupal/forum": "*", "drupal/hal": "^1 || ^2 || ^9", "drupal/metatag_dc": "*", "drupal/metatag_open_graph": "*", @@ -7386,8 +7393,8 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "2.0.2", - "datestamp": "1722869772", + "version": "2.1.0", + "datestamp": "1731004042", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -10053,17 +10060,17 @@ }, { "name": "drupal/views_bulk_operations", - "version": "4.3.1", + "version": "4.3.2", "source": { "type": "git", "url": "https://git.drupalcode.org/project/views_bulk_operations.git", - "reference": "4.3.1" + "reference": "4.3.2" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/views_bulk_operations-4.3.1.zip", - "reference": "4.3.1", - "shasum": "1089fe41ddb01313f34d55e19e8f3a5157889430" + "url": "https://ftp.drupal.org/files/projects/views_bulk_operations-4.3.2.zip", + "reference": "4.3.2", + "shasum": "b3d0ee06abb15520595b83324e93c5500d5dcef3" }, "require": { "drupal/core": "^10.3 || ^11" @@ -10080,8 +10087,8 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "4.3.1", - "datestamp": "1729683242", + "version": "4.3.2", + "datestamp": "1731070018", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -10810,181 +10817,120 @@ "time": "2023-10-06T06:47:41+00:00" }, { - "name": "elasticsearch/elasticsearch", - "version": "v7.17.2", - "source": { - "type": "git", - "url": "https://github.com/elastic/elasticsearch-php.git", - "reference": "2d302233f2bb0926812d82823bb820d405e130fc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/elastic/elasticsearch-php/zipball/2d302233f2bb0926812d82823bb820d405e130fc", - "reference": "2d302233f2bb0926812d82823bb820d405e130fc", - "shasum": "" - }, - "require": { - "ext-json": ">=1.3.7", - "ezimuel/ringphp": "^1.1.2", - "php": "^7.3 || ^8.0", - "psr/log": "^1|^2|^3" - }, - "require-dev": { - "ext-yaml": "*", - "ext-zip": "*", - "mockery/mockery": "^1.2", - "phpstan/phpstan": "^1.10", - "phpunit/phpunit": "^9.3", - "squizlabs/php_codesniffer": "^3.4", - "symfony/finder": "~4.0" - }, - "suggest": { - "ext-curl": "*", - "monolog/monolog": "Allows for client-level logging and tracing" - }, - "type": "library", - "autoload": { - "files": [ - "src/autoload.php" - ], - "psr-4": { - "Elasticsearch\\": "src/Elasticsearch/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0", - "LGPL-2.1-only" - ], - "authors": [ - { - "name": "Zachary Tong" - }, - { - "name": "Enrico Zimuel" - } - ], - "description": "PHP Client for Elasticsearch", - "keywords": [ - "client", - "elasticsearch", - "search" - ], - "support": { - "issues": "https://github.com/elastic/elasticsearch-php/issues", - "source": "https://github.com/elastic/elasticsearch-php/tree/v7.17.2" - }, - "time": "2023-04-21T15:31:12+00:00" - }, - { - "name": "ezimuel/guzzlestreams", - "version": "3.1.0", + "name": "elastic/transport", + "version": "v8.10.0", "source": { "type": "git", - "url": "https://github.com/ezimuel/guzzlestreams.git", - "reference": "b4b5a025dfee70d6cd34c780e07330eb93d5b997" + "url": "https://github.com/elastic/elastic-transport-php.git", + "reference": "8be37d679637545e50b1cea9f8ee903888783021" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ezimuel/guzzlestreams/zipball/b4b5a025dfee70d6cd34c780e07330eb93d5b997", - "reference": "b4b5a025dfee70d6cd34c780e07330eb93d5b997", + "url": "https://api.github.com/repos/elastic/elastic-transport-php/zipball/8be37d679637545e50b1cea9f8ee903888783021", + "reference": "8be37d679637545e50b1cea9f8ee903888783021", "shasum": "" }, "require": { - "php": ">=5.4.0" + "composer-runtime-api": "^2.0", + "open-telemetry/api": "^1.0", + "php": "^7.4 || ^8.0", + "php-http/discovery": "^1.14", + "php-http/httplug": "^2.3", + "psr/http-client": "^1.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0 || ^2.0", + "psr/log": "^1 || ^2 || ^3" }, "require-dev": { - "phpunit/phpunit": "~9.0" + "nyholm/psr7": "^1.5", + "open-telemetry/sdk": "^1.0", + "php-http/mock-client": "^1.5", + "phpstan/phpstan": "^1.4", + "phpunit/phpunit": "^9.5", + "symfony/http-client": "^5.4" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, "autoload": { "psr-4": { - "GuzzleHttp\\Stream\\": "src/" + "Elastic\\Transport\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - } - ], - "description": "Fork of guzzle/streams (abandoned) to be used with elasticsearch-php", - "homepage": "http://guzzlephp.org/", + "description": "HTTP transport PHP library for Elastic products", "keywords": [ - "Guzzle", - "stream" + "PSR_17", + "elastic", + "http", + "psr-18", + "psr-7", + "transport" ], "support": { - "source": "https://github.com/ezimuel/guzzlestreams/tree/3.1.0" + "issues": "https://github.com/elastic/elastic-transport-php/issues", + "source": "https://github.com/elastic/elastic-transport-php/tree/v8.10.0" }, - "time": "2022-10-24T12:58:50+00:00" + "time": "2024-08-14T08:55:07+00:00" }, { - "name": "ezimuel/ringphp", - "version": "1.2.2", + "name": "elasticsearch/elasticsearch", + "version": "v8.15.0", "source": { "type": "git", - "url": "https://github.com/ezimuel/ringphp.git", - "reference": "7887fc8488013065f72f977dcb281994f5fde9f4" + "url": "https://github.com/elastic/elasticsearch-php.git", + "reference": "34c2444fa8d4c3e6c8b009bd8dea90bca007203b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ezimuel/ringphp/zipball/7887fc8488013065f72f977dcb281994f5fde9f4", - "reference": "7887fc8488013065f72f977dcb281994f5fde9f4", + "url": "https://api.github.com/repos/elastic/elasticsearch-php/zipball/34c2444fa8d4c3e6c8b009bd8dea90bca007203b", + "reference": "34c2444fa8d4c3e6c8b009bd8dea90bca007203b", "shasum": "" }, "require": { - "ezimuel/guzzlestreams": "^3.0.1", - "php": ">=5.4.0", - "react/promise": "~2.0" - }, - "replace": { - "guzzlehttp/ringphp": "self.version" + "elastic/transport": "^8.10", + "guzzlehttp/guzzle": "^7.0", + "php": "^7.4 || ^8.0", + "psr/http-client": "^1.0", + "psr/http-message": "^1.1 || ^2.0", + "psr/log": "^1|^2|^3" }, "require-dev": { - "ext-curl": "*", - "phpunit/phpunit": "~9.0" - }, - "suggest": { - "ext-curl": "Guzzle will use specific adapters if cURL is present" + "ext-yaml": "*", + "ext-zip": "*", + "mockery/mockery": "^1.5", + "nyholm/psr7": "^1.5", + "php-http/message-factory": "^1.0", + "php-http/mock-client": "^1.5", + "phpstan/phpstan": "^1.4", + "phpunit/phpunit": "^9.5", + "psr/http-factory": "^1.0", + "symfony/finder": "~4.0", + "symfony/http-client": "^5.0|^6.0|^7.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1-dev" - } - }, "autoload": { "psr-4": { - "GuzzleHttp\\Ring\\": "src/" + "Elastic\\Elasticsearch\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - } + "description": "PHP Client for Elasticsearch", + "keywords": [ + "client", + "elastic", + "elasticsearch", + "search" ], - "description": "Fork of guzzle/RingPHP (abandoned) to be used with elasticsearch-php", "support": { - "source": "https://github.com/ezimuel/ringphp/tree/1.2.2" + "issues": "https://github.com/elastic/elasticsearch-php/issues", + "source": "https://github.com/elastic/elasticsearch-php/tree/v8.15.0" }, - "time": "2022-12-07T11:28:53+00:00" + "time": "2024-08-14T14:32:50+00:00" }, { "name": "ezyang/htmlpurifier", @@ -13033,62 +12979,6 @@ }, "time": "2024-10-08T18:51:32+00:00" }, - { - "name": "nodespark/des-connector", - "version": "7.x-dev", - "source": { - "type": "git", - "url": "https://github.com/tuutti/des-connector.git", - "reference": "a075a6b9e54b5855d0a292d9266839312e6026dc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/tuutti/des-connector/zipball/a075a6b9e54b5855d0a292d9266839312e6026dc", - "reference": "a075a6b9e54b5855d0a292d9266839312e6026dc", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0", - "ruflin/elastica": "^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^8.4.1 || ^9" - }, - "type": "library", - "autoload": { - "psr-4": { - "nodespark\\DESConnector\\": "src/DESConnector/" - } - }, - "autoload-dev": { - "psr-4": { - "nodespark\\DESConnector\\Test\\": "tests/" - } - }, - "license": [ - "LGPL-2.1" - ], - "authors": [ - { - "name": "Nikolay Ignatov", - "email": "nignatov@nodespark.com", - "homepage": "http://www.nodespark.com", - "role": "Creator and Maintainer" - }, - { - "name": "Lachezar Valchev", - "email": "lachezar.valchev@gmail.com", - "homepage": "https://drupal.org/u/lachezar.valchev", - "role": "Maintainer" - } - ], - "description": "An abstraction library for Elasticsearch Connector module for Drupal.", - "homepage": "https://github.com/nodespark/des-connector", - "support": { - "source": "https://github.com/nodespark/des-connector" - }, - "time": "2022-12-05T10:56:20+00:00" - }, { "name": "npm-asset/select2", "version": "4.0.13", @@ -13101,67 +12991,6 @@ "MIT" ] }, - { - "name": "nyholm/dsn", - "version": "2.0.1", - "source": { - "type": "git", - "url": "https://github.com/Nyholm/dsn.git", - "reference": "9445621b426bac8c0ca161db8cd700da00a4e618" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Nyholm/dsn/zipball/9445621b426bac8c0ca161db8cd700da00a4e618", - "reference": "9445621b426bac8c0ca161db8cd700da00a4e618", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "require-dev": { - "symfony/phpunit-bridge": "^5.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "psr-4": { - "Nyholm\\Dsn\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Tobias Nyholm", - "email": "tobias.nyholm@gmail.com" - } - ], - "description": "Parse your DSN strings in a powerful and flexible way", - "homepage": "http://tnyholm.se", - "keywords": [ - "database", - "dsn", - "dsn parser", - "parser" - ], - "support": { - "issues": "https://github.com/Nyholm/dsn/issues", - "source": "https://github.com/Nyholm/dsn/tree/2.0.1" - }, - "funding": [ - { - "url": "https://github.com/Nyholm", - "type": "github" - } - ], - "time": "2021-11-18T09:23:29+00:00" - }, { "name": "oomphinc/composer-installers-extender", "version": "2.0.1", @@ -13220,41 +13049,167 @@ "time": "2021-12-15T12:32:42+00:00" }, { - "name": "paragonie/constant_time_encoding", - "version": "v2.7.0", + "name": "open-telemetry/api", + "version": "1.0.3", "source": { "type": "git", - "url": "https://github.com/paragonie/constant_time_encoding.git", - "reference": "52a0d99e69f56b9ec27ace92ba56897fe6993105" + "url": "https://github.com/opentelemetry-php/api.git", + "reference": "87de95d926f46262885d0d390060c095af13e2e5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/52a0d99e69f56b9ec27ace92ba56897fe6993105", - "reference": "52a0d99e69f56b9ec27ace92ba56897fe6993105", + "url": "https://api.github.com/repos/opentelemetry-php/api/zipball/87de95d926f46262885d0d390060c095af13e2e5", + "reference": "87de95d926f46262885d0d390060c095af13e2e5", "shasum": "" }, "require": { - "php": "^7|^8" + "open-telemetry/context": "^1.0", + "php": "^7.4 || ^8.0", + "psr/log": "^1.1|^2.0|^3.0", + "symfony/polyfill-php80": "^1.26", + "symfony/polyfill-php81": "^1.26", + "symfony/polyfill-php82": "^1.26" }, - "require-dev": { - "phpunit/phpunit": "^6|^7|^8|^9", - "vimeo/psalm": "^1|^2|^3|^4" + "conflict": { + "open-telemetry/sdk": "<=1.0.4" }, "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.0.x-dev" + } + }, "autoload": { + "files": [ + "Trace/functions.php" + ], "psr-4": { - "ParagonIE\\ConstantTime\\": "src/" + "OpenTelemetry\\API\\": "." } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "Apache-2.0" ], "authors": [ { - "name": "Paragon Initiative Enterprises", - "email": "security@paragonie.com", - "homepage": "https://paragonie.com", + "name": "opentelemetry-php contributors", + "homepage": "https://github.com/open-telemetry/opentelemetry-php/graphs/contributors" + } + ], + "description": "API for OpenTelemetry PHP.", + "keywords": [ + "Metrics", + "api", + "apm", + "logging", + "opentelemetry", + "otel", + "tracing" + ], + "support": { + "chat": "https://app.slack.com/client/T08PSQ7BQ/C01NFPCV44V", + "docs": "https://opentelemetry.io/docs/php", + "issues": "https://github.com/open-telemetry/opentelemetry-php/issues", + "source": "https://github.com/open-telemetry/opentelemetry-php" + }, + "time": "2024-02-06T01:32:25+00:00" + }, + { + "name": "open-telemetry/context", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/opentelemetry-php/context.git", + "reference": "0cba875ea1953435f78aec7f1d75afa87bdbf7f3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/opentelemetry-php/context/zipball/0cba875ea1953435f78aec7f1d75afa87bdbf7f3", + "reference": "0cba875ea1953435f78aec7f1d75afa87bdbf7f3", + "shasum": "" + }, + "require": { + "php": "^8.1", + "symfony/polyfill-php82": "^1.26" + }, + "suggest": { + "ext-ffi": "To allow context switching in Fibers" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.0.x-dev" + } + }, + "autoload": { + "files": [ + "fiber/initialize_fiber_handler.php" + ], + "psr-4": { + "OpenTelemetry\\Context\\": "." + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "opentelemetry-php contributors", + "homepage": "https://github.com/open-telemetry/opentelemetry-php/graphs/contributors" + } + ], + "description": "Context implementation for OpenTelemetry PHP.", + "keywords": [ + "Context", + "opentelemetry", + "otel" + ], + "support": { + "chat": "https://app.slack.com/client/T08PSQ7BQ/C01NFPCV44V", + "docs": "https://opentelemetry.io/docs/php", + "issues": "https://github.com/open-telemetry/opentelemetry-php/issues", + "source": "https://github.com/open-telemetry/opentelemetry-php" + }, + "time": "2024-08-21T00:29:20+00:00" + }, + { + "name": "paragonie/constant_time_encoding", + "version": "v2.7.0", + "source": { + "type": "git", + "url": "https://github.com/paragonie/constant_time_encoding.git", + "reference": "52a0d99e69f56b9ec27ace92ba56897fe6993105" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/52a0d99e69f56b9ec27ace92ba56897fe6993105", + "reference": "52a0d99e69f56b9ec27ace92ba56897fe6993105", + "shasum": "" + }, + "require": { + "php": "^7|^8" + }, + "require-dev": { + "phpunit/phpunit": "^6|^7|^8|^9", + "vimeo/psalm": "^1|^2|^3|^4" + }, + "type": "library", + "autoload": { + "psr-4": { + "ParagonIE\\ConstantTime\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Paragon Initiative Enterprises", + "email": "security@paragonie.com", + "homepage": "https://paragonie.com", "role": "Maintainer" }, { @@ -13669,6 +13624,194 @@ }, "time": "2024-10-03T13:43:19+00:00" }, + { + "name": "php-http/discovery", + "version": "1.20.0", + "source": { + "type": "git", + "url": "https://github.com/php-http/discovery.git", + "reference": "82fe4c73ef3363caed49ff8dd1539ba06044910d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/discovery/zipball/82fe4c73ef3363caed49ff8dd1539ba06044910d", + "reference": "82fe4c73ef3363caed49ff8dd1539ba06044910d", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.0|^2.0", + "php": "^7.1 || ^8.0" + }, + "conflict": { + "nyholm/psr7": "<1.0", + "zendframework/zend-diactoros": "*" + }, + "provide": { + "php-http/async-client-implementation": "*", + "php-http/client-implementation": "*", + "psr/http-client-implementation": "*", + "psr/http-factory-implementation": "*", + "psr/http-message-implementation": "*" + }, + "require-dev": { + "composer/composer": "^1.0.2|^2.0", + "graham-campbell/phpspec-skip-example-extension": "^5.0", + "php-http/httplug": "^1.0 || ^2.0", + "php-http/message-factory": "^1.0", + "phpspec/phpspec": "^5.1 || ^6.1 || ^7.3", + "sebastian/comparator": "^3.0.5 || ^4.0.8", + "symfony/phpunit-bridge": "^6.4.4 || ^7.0.1" + }, + "type": "composer-plugin", + "extra": { + "class": "Http\\Discovery\\Composer\\Plugin", + "plugin-optional": true + }, + "autoload": { + "psr-4": { + "Http\\Discovery\\": "src/" + }, + "exclude-from-classmap": [ + "src/Composer/Plugin.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } + ], + "description": "Finds and installs PSR-7, PSR-17, PSR-18 and HTTPlug implementations", + "homepage": "http://php-http.org", + "keywords": [ + "adapter", + "client", + "discovery", + "factory", + "http", + "message", + "psr17", + "psr7" + ], + "support": { + "issues": "https://github.com/php-http/discovery/issues", + "source": "https://github.com/php-http/discovery/tree/1.20.0" + }, + "time": "2024-10-02T11:20:13+00:00" + }, + { + "name": "php-http/httplug", + "version": "2.4.1", + "source": { + "type": "git", + "url": "https://github.com/php-http/httplug.git", + "reference": "5cad731844891a4c282f3f3e1b582c46839d22f4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/httplug/zipball/5cad731844891a4c282f3f3e1b582c46839d22f4", + "reference": "5cad731844891a4c282f3f3e1b582c46839d22f4", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0", + "php-http/promise": "^1.1", + "psr/http-client": "^1.0", + "psr/http-message": "^1.0 || ^2.0" + }, + "require-dev": { + "friends-of-phpspec/phpspec-code-coverage": "^4.1 || ^5.0 || ^6.0", + "phpspec/phpspec": "^5.1 || ^6.0 || ^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Http\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Eric GELOEN", + "email": "geloen.eric@gmail.com" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://sagikazarmark.hu" + } + ], + "description": "HTTPlug, the HTTP client abstraction for PHP", + "homepage": "http://httplug.io", + "keywords": [ + "client", + "http" + ], + "support": { + "issues": "https://github.com/php-http/httplug/issues", + "source": "https://github.com/php-http/httplug/tree/2.4.1" + }, + "time": "2024-09-23T11:39:58+00:00" + }, + { + "name": "php-http/promise", + "version": "1.3.1", + "source": { + "type": "git", + "url": "https://github.com/php-http/promise.git", + "reference": "fc85b1fba37c169a69a07ef0d5a8075770cc1f83" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/promise/zipball/fc85b1fba37c169a69a07ef0d5a8075770cc1f83", + "reference": "fc85b1fba37c169a69a07ef0d5a8075770cc1f83", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "friends-of-phpspec/phpspec-code-coverage": "^4.3.2 || ^6.3", + "phpspec/phpspec": "^5.1.2 || ^6.2 || ^7.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "Http\\Promise\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Joel Wurtz", + "email": "joel.wurtz@gmail.com" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } + ], + "description": "Promise used for asynchronous HTTP requests", + "homepage": "http://httplug.io", + "keywords": [ + "promise" + ], + "support": { + "issues": "https://github.com/php-http/promise/issues", + "source": "https://github.com/php-http/promise/tree/1.3.1" + }, + "time": "2024-03-15T13:55:21+00:00" + }, { "name": "phpowermove/docblock", "version": "v4.0", @@ -14692,78 +14835,6 @@ ], "time": "2024-04-27T21:32:50+00:00" }, - { - "name": "react/promise", - "version": "v2.11.0", - "source": { - "type": "git", - "url": "https://github.com/reactphp/promise.git", - "reference": "1a8460931ea36dc5c76838fec5734d55c88c6831" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/reactphp/promise/zipball/1a8460931ea36dc5c76838fec5734d55c88c6831", - "reference": "1a8460931ea36dc5c76838fec5734d55c88c6831", - "shasum": "" - }, - "require": { - "php": ">=5.4.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36" - }, - "type": "library", - "autoload": { - "files": [ - "src/functions_include.php" - ], - "psr-4": { - "React\\Promise\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jan Sorgalla", - "email": "jsorgalla@gmail.com", - "homepage": "https://sorgalla.com/" - }, - { - "name": "Christian Lück", - "email": "christian@clue.engineering", - "homepage": "https://clue.engineering/" - }, - { - "name": "Cees-Jan Kiewiet", - "email": "reactphp@ceesjankiewiet.nl", - "homepage": "https://wyrihaximus.net/" - }, - { - "name": "Chris Boden", - "email": "cboden@gmail.com", - "homepage": "https://cboden.dev/" - } - ], - "description": "A lightweight implementation of CommonJS Promises/A for PHP", - "keywords": [ - "promise", - "promises" - ], - "support": { - "issues": "https://github.com/reactphp/promise/issues", - "source": "https://github.com/reactphp/promise/tree/v2.11.0" - }, - "funding": [ - { - "url": "https://opencollective.com/reactphp", - "type": "open_collective" - } - ], - "time": "2023-11-16T16:16:50+00:00" - }, { "name": "respect/stringifier", "version": "0.2.0", @@ -14944,46 +15015,40 @@ }, { "name": "ruflin/elastica", - "version": "7.3.2", + "version": "8.0.0", "source": { "type": "git", "url": "https://github.com/ruflin/Elastica.git", - "reference": "84ba137678707a1aa4242d12bad891dc38fa2608" + "reference": "2fc446e37847e84cd9f9be8e75fd2b322007ea43" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ruflin/Elastica/zipball/84ba137678707a1aa4242d12bad891dc38fa2608", - "reference": "84ba137678707a1aa4242d12bad891dc38fa2608", + "url": "https://api.github.com/repos/ruflin/Elastica/zipball/2fc446e37847e84cd9f9be8e75fd2b322007ea43", + "reference": "2fc446e37847e84cd9f9be8e75fd2b322007ea43", "shasum": "" }, "require": { - "elasticsearch/elasticsearch": "^7.10", + "elastic/transport": "^8.8", + "elasticsearch/elasticsearch": "^8.4.1", "ext-json": "*", - "nyholm/dsn": "^2.0.0", - "php": "^7.2 || ^8.0", - "psr/log": "^1.0 || ^2.0 || ^3.0", - "symfony/deprecation-contracts": "^2.2 || ^3.0", - "symfony/polyfill-php73": "^1.19" + "php": "~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0", + "psr/log": "^1.0 || ^2.0 || ^3.0" + }, + "conflict": { + "guzzlehttp/psr7": "<2.0.0" }, "require-dev": { - "aws/aws-sdk-php": "^3.155", - "guzzlehttp/guzzle": "^6.3 || ^7.2", + "guzzlehttp/guzzle": "^7.2", "phpstan/phpstan": "^1.5", "phpstan/phpstan-phpunit": "^1.1", - "phpunit/phpunit": "^8.5.8 || ^9.4", + "phpunit/phpunit": "^9.5", "symfony/phpunit-bridge": "^6.0" }, "suggest": { "aws/aws-sdk-php": "Allow using IAM authentication with Amazon ElasticSearch Service", - "guzzlehttp/guzzle": "Allow using guzzle as transport", "monolog/monolog": "Logging request" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "7.0.x-dev" - } - }, "autoload": { "psr-4": { "Elastica\\": "src/" @@ -15007,9 +15072,9 @@ ], "support": { "issues": "https://github.com/ruflin/Elastica/issues", - "source": "https://github.com/ruflin/Elastica/tree/7.3.2" + "source": "https://github.com/ruflin/Elastica/tree/8.0.0" }, - "time": "2024-03-11T14:11:50+00:00" + "time": "2024-05-29T11:45:23+00:00" }, { "name": "sebastian/diff", @@ -16815,17 +16880,17 @@ "time": "2020-10-23T14:02:19+00:00" }, { - "name": "symfony/polyfill-php73", + "name": "symfony/polyfill-php80", "version": "v1.31.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "0f68c03565dcaaf25a890667542e8bd75fe7e5bb" + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/0f68c03565dcaaf25a890667542e8bd75fe7e5bb", - "reference": "0f68c03565dcaaf25a890667542e8bd75fe7e5bb", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", + "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", "shasum": "" }, "require": { @@ -16843,7 +16908,7 @@ "bootstrap.php" ], "psr-4": { - "Symfony\\Polyfill\\Php73\\": "" + "Symfony\\Polyfill\\Php80\\": "" }, "classmap": [ "Resources/stubs" @@ -16854,6 +16919,10 @@ "MIT" ], "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, { "name": "Nicolas Grekas", "email": "p@tchwork.com" @@ -16863,7 +16932,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ "compatibility", @@ -16872,7 +16941,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.31.0" }, "funding": [ { @@ -16891,17 +16960,17 @@ "time": "2024-09-09T11:45:10+00:00" }, { - "name": "symfony/polyfill-php80", + "name": "symfony/polyfill-php81", "version": "v1.31.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8" + "url": "https://github.com/symfony/polyfill-php81.git", + "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", - "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c", + "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c", "shasum": "" }, "require": { @@ -16919,7 +16988,7 @@ "bootstrap.php" ], "psr-4": { - "Symfony\\Polyfill\\Php80\\": "" + "Symfony\\Polyfill\\Php81\\": "" }, "classmap": [ "Resources/stubs" @@ -16930,10 +16999,6 @@ "MIT" ], "authors": [ - { - "name": "Ion Bazan", - "email": "ion.bazan@gmail.com" - }, { "name": "Nicolas Grekas", "email": "p@tchwork.com" @@ -16943,7 +17008,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ "compatibility", @@ -16952,7 +17017,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-php81/tree/v1.31.0" }, "funding": [ { @@ -16971,17 +17036,17 @@ "time": "2024-09-09T11:45:10+00:00" }, { - "name": "symfony/polyfill-php81", + "name": "symfony/polyfill-php82", "version": "v1.31.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c" + "url": "https://github.com/symfony/polyfill-php82.git", + "reference": "5d2ed36f7734637dacc025f179698031951b1692" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c", - "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c", + "url": "https://api.github.com/repos/symfony/polyfill-php82/zipball/5d2ed36f7734637dacc025f179698031951b1692", + "reference": "5d2ed36f7734637dacc025f179698031951b1692", "shasum": "" }, "require": { @@ -16999,7 +17064,7 @@ "bootstrap.php" ], "psr-4": { - "Symfony\\Polyfill\\Php81\\": "" + "Symfony\\Polyfill\\Php82\\": "" }, "classmap": [ "Resources/stubs" @@ -17019,7 +17084,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", + "description": "Symfony polyfill backporting some PHP 8.2+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ "compatibility", @@ -17028,7 +17093,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-php82/tree/v1.31.0" }, "funding": [ { @@ -20070,134 +20135,6 @@ ], "time": "2024-06-12T14:39:25+00:00" }, - { - "name": "open-telemetry/api", - "version": "1.0.3", - "source": { - "type": "git", - "url": "https://github.com/opentelemetry-php/api.git", - "reference": "87de95d926f46262885d0d390060c095af13e2e5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/opentelemetry-php/api/zipball/87de95d926f46262885d0d390060c095af13e2e5", - "reference": "87de95d926f46262885d0d390060c095af13e2e5", - "shasum": "" - }, - "require": { - "open-telemetry/context": "^1.0", - "php": "^7.4 || ^8.0", - "psr/log": "^1.1|^2.0|^3.0", - "symfony/polyfill-php80": "^1.26", - "symfony/polyfill-php81": "^1.26", - "symfony/polyfill-php82": "^1.26" - }, - "conflict": { - "open-telemetry/sdk": "<=1.0.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.0.x-dev" - } - }, - "autoload": { - "files": [ - "Trace/functions.php" - ], - "psr-4": { - "OpenTelemetry\\API\\": "." - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], - "authors": [ - { - "name": "opentelemetry-php contributors", - "homepage": "https://github.com/open-telemetry/opentelemetry-php/graphs/contributors" - } - ], - "description": "API for OpenTelemetry PHP.", - "keywords": [ - "Metrics", - "api", - "apm", - "logging", - "opentelemetry", - "otel", - "tracing" - ], - "support": { - "chat": "https://app.slack.com/client/T08PSQ7BQ/C01NFPCV44V", - "docs": "https://opentelemetry.io/docs/php", - "issues": "https://github.com/open-telemetry/opentelemetry-php/issues", - "source": "https://github.com/open-telemetry/opentelemetry-php" - }, - "time": "2024-02-06T01:32:25+00:00" - }, - { - "name": "open-telemetry/context", - "version": "1.0.2", - "source": { - "type": "git", - "url": "https://github.com/opentelemetry-php/context.git", - "reference": "e9d254a7c89885e63fd2fde54e31e81aaaf52b7c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/opentelemetry-php/context/zipball/e9d254a7c89885e63fd2fde54e31e81aaaf52b7c", - "reference": "e9d254a7c89885e63fd2fde54e31e81aaaf52b7c", - "shasum": "" - }, - "require": { - "php": "^7.4 || ^8.0", - "symfony/polyfill-php80": "^1.26", - "symfony/polyfill-php81": "^1.26", - "symfony/polyfill-php82": "^1.26" - }, - "suggest": { - "ext-ffi": "To allow context switching in Fibers" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.0.x-dev" - } - }, - "autoload": { - "files": [ - "fiber/initialize_fiber_handler.php" - ], - "psr-4": { - "OpenTelemetry\\Context\\": "." - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], - "authors": [ - { - "name": "opentelemetry-php contributors", - "homepage": "https://github.com/open-telemetry/opentelemetry-php/graphs/contributors" - } - ], - "description": "Context implementation for OpenTelemetry PHP.", - "keywords": [ - "Context", - "opentelemetry", - "otel" - ], - "support": { - "chat": "https://app.slack.com/client/T08PSQ7BQ/C01NFPCV44V", - "docs": "https://opentelemetry.io/docs/php", - "issues": "https://github.com/open-telemetry/opentelemetry-php/issues", - "source": "https://github.com/open-telemetry/opentelemetry-php" - }, - "time": "2024-01-13T05:50:44+00:00" - }, { "name": "open-telemetry/exporter-otlp", "version": "1.0.4", @@ -20410,16 +20347,16 @@ }, { "name": "open-telemetry/sem-conv", - "version": "1.25.0", + "version": "1.27.1", "source": { "type": "git", "url": "https://github.com/opentelemetry-php/sem-conv.git", - "reference": "23f457ba390847647a17068e0095d9ffe9a4824c" + "reference": "1dba705fea74bc0718d04be26090e3697e56f4e6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/opentelemetry-php/sem-conv/zipball/23f457ba390847647a17068e0095d9ffe9a4824c", - "reference": "23f457ba390847647a17068e0095d9ffe9a4824c", + "url": "https://api.github.com/repos/opentelemetry-php/sem-conv/zipball/1dba705fea74bc0718d04be26090e3697e56f4e6", + "reference": "1dba705fea74bc0718d04be26090e3697e56f4e6", "shasum": "" }, "require": { @@ -20463,7 +20400,7 @@ "issues": "https://github.com/open-telemetry/opentelemetry-php/issues", "source": "https://github.com/open-telemetry/opentelemetry-php" }, - "time": "2024-04-09T23:31:35+00:00" + "time": "2024-08-28T09:20:31+00:00" }, { "name": "phar-io/manifest", @@ -20536,131 +20473,52 @@ "name": "phar-io/version", "version": "3.2.1", "source": { - "type": "git", - "url": "https://github.com/phar-io/version.git", - "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", - "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" - } - ], - "description": "Library for handling version information and constraints", - "support": { - "issues": "https://github.com/phar-io/version/issues", - "source": "https://github.com/phar-io/version/tree/3.2.1" - }, - "time": "2022-02-21T01:04:05+00:00" - }, - { - "name": "php-http/discovery", - "version": "1.20.0", - "source": { - "type": "git", - "url": "https://github.com/php-http/discovery.git", - "reference": "82fe4c73ef3363caed49ff8dd1539ba06044910d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-http/discovery/zipball/82fe4c73ef3363caed49ff8dd1539ba06044910d", - "reference": "82fe4c73ef3363caed49ff8dd1539ba06044910d", - "shasum": "" - }, - "require": { - "composer-plugin-api": "^1.0|^2.0", - "php": "^7.1 || ^8.0" - }, - "conflict": { - "nyholm/psr7": "<1.0", - "zendframework/zend-diactoros": "*" - }, - "provide": { - "php-http/async-client-implementation": "*", - "php-http/client-implementation": "*", - "psr/http-client-implementation": "*", - "psr/http-factory-implementation": "*", - "psr/http-message-implementation": "*" + "type": "git", + "url": "https://github.com/phar-io/version.git", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" }, - "require-dev": { - "composer/composer": "^1.0.2|^2.0", - "graham-campbell/phpspec-skip-example-extension": "^5.0", - "php-http/httplug": "^1.0 || ^2.0", - "php-http/message-factory": "^1.0", - "phpspec/phpspec": "^5.1 || ^6.1 || ^7.3", - "sebastian/comparator": "^3.0.5 || ^4.0.8", - "symfony/phpunit-bridge": "^6.4.4 || ^7.0.1" + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "shasum": "" }, - "type": "composer-plugin", - "extra": { - "class": "Http\\Discovery\\Composer\\Plugin", - "plugin-optional": true + "require": { + "php": "^7.2 || ^8.0" }, + "type": "library", "autoload": { - "psr-4": { - "Http\\Discovery\\": "src/" - }, - "exclude-from-classmap": [ - "src/Composer/Plugin.php" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com" + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" } ], - "description": "Finds and installs PSR-7, PSR-17, PSR-18 and HTTPlug implementations", - "homepage": "http://php-http.org", - "keywords": [ - "adapter", - "client", - "discovery", - "factory", - "http", - "message", - "psr17", - "psr7" - ], + "description": "Library for handling version information and constraints", "support": { - "issues": "https://github.com/php-http/discovery/issues", - "source": "https://github.com/php-http/discovery/tree/1.20.0" + "issues": "https://github.com/phar-io/version/issues", + "source": "https://github.com/phar-io/version/tree/3.2.1" }, - "time": "2024-10-02T11:20:13+00:00" + "time": "2022-02-21T01:04:05+00:00" }, { "name": "php-http/guzzle7-adapter", @@ -20724,115 +20582,6 @@ }, "time": "2021-03-09T07:35:15+00:00" }, - { - "name": "php-http/httplug", - "version": "2.4.1", - "source": { - "type": "git", - "url": "https://github.com/php-http/httplug.git", - "reference": "5cad731844891a4c282f3f3e1b582c46839d22f4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-http/httplug/zipball/5cad731844891a4c282f3f3e1b582c46839d22f4", - "reference": "5cad731844891a4c282f3f3e1b582c46839d22f4", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0", - "php-http/promise": "^1.1", - "psr/http-client": "^1.0", - "psr/http-message": "^1.0 || ^2.0" - }, - "require-dev": { - "friends-of-phpspec/phpspec-code-coverage": "^4.1 || ^5.0 || ^6.0", - "phpspec/phpspec": "^5.1 || ^6.0 || ^7.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Http\\Client\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Eric GELOEN", - "email": "geloen.eric@gmail.com" - }, - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com", - "homepage": "https://sagikazarmark.hu" - } - ], - "description": "HTTPlug, the HTTP client abstraction for PHP", - "homepage": "http://httplug.io", - "keywords": [ - "client", - "http" - ], - "support": { - "issues": "https://github.com/php-http/httplug/issues", - "source": "https://github.com/php-http/httplug/tree/2.4.1" - }, - "time": "2024-09-23T11:39:58+00:00" - }, - { - "name": "php-http/promise", - "version": "1.3.1", - "source": { - "type": "git", - "url": "https://github.com/php-http/promise.git", - "reference": "fc85b1fba37c169a69a07ef0d5a8075770cc1f83" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-http/promise/zipball/fc85b1fba37c169a69a07ef0d5a8075770cc1f83", - "reference": "fc85b1fba37c169a69a07ef0d5a8075770cc1f83", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "friends-of-phpspec/phpspec-code-coverage": "^4.3.2 || ^6.3", - "phpspec/phpspec": "^5.1.2 || ^6.2 || ^7.4" - }, - "type": "library", - "autoload": { - "psr-4": { - "Http\\Promise\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Joel Wurtz", - "email": "joel.wurtz@gmail.com" - }, - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com" - } - ], - "description": "Promise used for asynchronous HTTP requests", - "homepage": "http://httplug.io", - "keywords": [ - "promise" - ], - "support": { - "issues": "https://github.com/php-http/promise/issues", - "source": "https://github.com/php-http/promise/tree/1.3.1" - }, - "time": "2024-03-15T13:55:21+00:00" - }, { "name": "phpdocumentor/reflection-common", "version": "2.2.0", @@ -21799,6 +21548,79 @@ ], "time": "2024-07-10T11:45:39+00:00" }, + { + "name": "react/promise", + "version": "v3.2.0", + "source": { + "type": "git", + "url": "https://github.com/reactphp/promise.git", + "reference": "8a164643313c71354582dc850b42b33fa12a4b63" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/promise/zipball/8a164643313c71354582dc850b42b33fa12a4b63", + "reference": "8a164643313c71354582dc850b42b33fa12a4b63", + "shasum": "" + }, + "require": { + "php": ">=7.1.0" + }, + "require-dev": { + "phpstan/phpstan": "1.10.39 || 1.4.10", + "phpunit/phpunit": "^9.6 || ^7.5" + }, + "type": "library", + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "React\\Promise\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], + "description": "A lightweight implementation of CommonJS Promises/A for PHP", + "keywords": [ + "promise", + "promises" + ], + "support": { + "issues": "https://github.com/reactphp/promise/issues", + "source": "https://github.com/reactphp/promise/tree/v3.2.0" + }, + "funding": [ + { + "url": "https://opencollective.com/reactphp", + "type": "open_collective" + } + ], + "time": "2024-05-24T10:39:05+00:00" + }, { "name": "sebastian/cli-parser", "version": "1.0.2", @@ -23434,21 +23256,21 @@ "time": "2024-06-21T16:04:15+00:00" }, { - "name": "symfony/polyfill-php82", - "version": "v1.30.0", + "name": "symfony/polyfill-php73", + "version": "v1.31.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php82.git", - "reference": "77ff49780f56906788a88974867ed68bc49fae5b" + "url": "https://github.com/symfony/polyfill-php73.git", + "reference": "0f68c03565dcaaf25a890667542e8bd75fe7e5bb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php82/zipball/77ff49780f56906788a88974867ed68bc49fae5b", - "reference": "77ff49780f56906788a88974867ed68bc49fae5b", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/0f68c03565dcaaf25a890667542e8bd75fe7e5bb", + "reference": "0f68c03565dcaaf25a890667542e8bd75fe7e5bb", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "type": "library", "extra": { @@ -23462,7 +23284,7 @@ "bootstrap.php" ], "psr-4": { - "Symfony\\Polyfill\\Php82\\": "" + "Symfony\\Polyfill\\Php73\\": "" }, "classmap": [ "Resources/stubs" @@ -23482,7 +23304,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 8.2+ features to lower PHP versions", + "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ "compatibility", @@ -23491,7 +23313,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php82/tree/v1.30.0" + "source": "https://github.com/symfony/polyfill-php73/tree/v1.31.0" }, "funding": [ { @@ -23507,7 +23329,7 @@ "type": "tidelift" } ], - "time": "2024-06-19T12:30:46+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "theseer/tokenizer", diff --git a/conf/cmi/metatag.settings.yml b/conf/cmi/metatag.settings.yml index 4a857d7011..f260a90c78 100644 --- a/conf/cmi/metatag.settings.yml +++ b/conf/cmi/metatag.settings.yml @@ -16,3 +16,4 @@ entity_type_groups: basic: basic open_graph: open_graph twitter_cards: twitter_cards +tag_trim_end: '|.,-:;/+&([{"''' From e3f02e4c5bfcaa580a6c6dbdcb010c852df743bd Mon Sep 17 00:00:00 2001 From: Janne Suominen Date: Mon, 11 Nov 2024 08:35:08 +0200 Subject: [PATCH 36/74] doc: UHF-10807: Add example for new form + update schema (#1555) * UHF-10807: Add example for new form + update schema * UHF-10807: Fix formatting for schema file. --- .gitignore | 3 + conf/examples/esimerkki_72_SOTEPEYLEIS.json | 398 ++++ conf/tietoliikennesanoma_schema.json | 1794 ++++++++++--------- 3 files changed, 1299 insertions(+), 896 deletions(-) create mode 100644 conf/examples/esimerkki_72_SOTEPEYLEIS.json diff --git a/.gitignore b/.gitignore index db56f02565..85db037008 100644 --- a/.gitignore +++ b/.gitignore @@ -36,3 +36,6 @@ public/sites/default/local.services.yml ## testing results *coverage.xml html-coverage + +# Ignore the folder created by Visual Studio Code +*:Zone.Identifier* diff --git a/conf/examples/esimerkki_72_SOTEPEYLEIS.json b/conf/examples/esimerkki_72_SOTEPEYLEIS.json new file mode 100644 index 0000000000..b3d54812f1 --- /dev/null +++ b/conf/examples/esimerkki_72_SOTEPEYLEIS.json @@ -0,0 +1,398 @@ +{ + "compensation": { + "applicationInfoArray": [ + { + "ID": "applicationType", + "label": "Hakemustyyppi", + "value": "SOTEPEYLEIS", + "valueType": "string" + }, + { + "ID": "applicationTypeID", + "label": "Hakemustyypin numero", + "value": "72", + "valueType": "int" + }, + { + "ID": "formTimeStamp", + "label": "Hakemuksen/sanoman lähetyshetki", + "value": "2024-10-01T12:43:02.001", + "valueType": "datetime" + }, + { + "ID": "applicationNumber", + "label": "Hakemusnumero", + "value": "SOTEPEYLEIS-1", + "valueType": "string" + }, + { + "ID": "status", + "label": "Tila", + "value": "Vastaanotettu", + "valueType": "string" + }, + { + "ID": "actingYear", + "label": "Hakemusvuosi", + "value": "2024", + "valueType": "int" + } + ], + "currentAddressInfoArray": [ + { + "ID": "contactPerson", + "label": "Yhteyshenkilö", + "value": "Teemu Testaushenkilö", + "valueType": "string" + }, + { + "ID": "phoneNumber", + "label": "Puhelinnumero", + "value": "+358404040404", + "valueType": "string" + }, + { + "ID": "street", + "label": "Katuosoite", + "value": "Annankatu 18 Ö 905", + "valueType": "string" + }, + { + "ID": "city", + "label": "Postitoimipaikka", + "value": "Helsinki", + "valueType": "string" + }, + { + "ID": "postCode", + "label": "Postinumero", + "value": "00120", + "valueType": "string" + }, + { + "ID": "country", + "label": "Maa", + "value": "Suomi", + "valueType": "string" + } + ], + "applicantInfoArray": [ + { + "ID": "applicantType", + "label": "Hakijan tyyppi", + "value": "2", + "valueType": "string" + }, + { + "ID": "companyNumber", + "label": "Rekisterinumero", + "value": "5647641-1", + "valueType": "string" + }, + { + "ID": "communityOfficialName", + "label": "Yhteisön nimi", + "value": "TietoTesti Kh yleis 001 10062021", + "valueType": "string" + }, + { + "ID": "communityOfficialNameShort", + "label": "Yhteisön lyhenne", + "value": "TT ry", + "valueType": "string" + }, + { + "ID": "registrationDate", + "label": "Rekisteröimispäivä", + "value": "2021-01-01T00:00:00.000", + "valueType": "datetime" + }, + { + "ID": "foundingYear", + "label": "Perustamisvuosi", + "value": "2021", + "valueType": "int" + }, + { + "ID": "home", + "label": "Kotipaikka", + "value": "Helsinki", + "valueType": "string" + }, + { + "ID": "homePage", + "label": "www-sivut", + "value": "www.ttry.fi", + "valueType": "string" + }, + { + "ID": "email", + "label": "Sähköpostiosoite", + "value": "tsto@ttry.fi", + "valueType": "string" + } + ], + "applicantOfficialsArray": [ + [ + { + "ID": "email", + "label": "Sähköposti", + "value": "teemu@ttry.fi", + "valueType": "string" + }, + { + "ID": "role", + "label": "Rooli", + "value": "1", + "valueType": "string" + }, + { + "ID": "name", + "label": "Nimi", + "value": "Teemu Testaushenkilö", + "valueType": "string" + }, + { + "ID": "phone", + "label": "Puhelinnumero", + "value": "09-616527788", + "valueType": "string" + } + ] + ], + "bankAccountArray": [ + { + "ID": "accountNumber", + "label": "Tilinumero", + "value": "FI9640231442000454", + "valueType": "string" + } + ], + "compensationInfo": { + "generalInfoArray": [ + { + "ID": "purpose", + "label": "Haetun avustuksen käyttötarkoitus", + "value": "Käyttötarkoituksenamme on se että ... kts. liite 10.", + "valueType": "string" + }, + { + "ID": "explanation", + "label": "Selvitys edellisen avustuksen käytöstä", + "value": "Emme saaneet viime vuonna avustusta lainkaan.", + "valueType": "string" + }, + { + "ID": "whoBenefits", + "label": "Ketkä toiminnastanne erityisesti hyötyvät", + "value": "Tästähän siis hyötyvät ihan kaikki", + "valueType": "string" + }, + { + "ID": "changesOnSuccess", + "label": "Minkälaisia muutoksia tapahtuu, jos onnistutte?", + "value": "Pelkästään positiivisia muutoksia", + "valueType": "string" + }, + { + "ID": "resultsOfActivities", + "label": "Minkälaisia hyötyjä avustettavan toiminnan seurauksena syntyy?", + "value": "Kaikki sujuu paremmin ja turvallisemmin jatkossa", + "valueType": "string" + } + ], + "compensationArray": [ + [ + { + "ID": "subventionType", + "label": "Avustuslaji", + "value": "6", + "valueType": "string" + }, + { + "ID": "amount", + "label": "Euroa", + "value": "3533.00", + "valueType": "double" + } + ] + ] + }, + "otherCompensationsInfo": { + "otherCompensationsArray": [ + [ + { + "ID": "issuer", + "label": "Myöntäjä", + "value": "5", + "valueType": "string" + }, + { + "ID": "issuerName", + "label": "Myöntäjän nimi", + "value": "Joku Säätiö Sr.", + "valueType": "string" + }, + { + "ID": "year", + "label": "Vuosi", + "value": "2021", + "valueType": "string" + }, + { + "ID": "amount", + "label": "Euroa", + "value": "2800", + "valueType": "double" + }, + { + "ID": "purpose", + "label": "Tarkoitus", + "value": "Matkakuluihin ja muihin ylimääräisiin menoihin.", + "valueType": "string" + } + ] + ] + }, + "activitiesInfoArray": [ + { + "ID": "businessPurpose", + "label": "Toiminnan tarkoitus", + "value": "Meidän toimintamme tarkoituksena on että ...", + "valueType": "string" + }, + { + "ID": "communityPracticesBusiness", + "label": "Yhteisö harjoittaa liiketoimintaa", + "value": "false", + "valueType": "bool" + }, + { + "ID": "membersApplicantPersonGlobal", + "label": "Hakijayhteisö, henkilöjäseniä", + "value": "50", + "valueType": "int" + }, + { + "ID": "membersApplicantCommunityGlobal", + "label": "Hakijayhteisö, yhteisöjäseniä", + "value": "12", + "valueType": "int" + }, + { + "ID": "membersApplicantPersonLocal", + "label": "Hakijayhteisö, helsinkiläisiä henkilöjäseniä", + "value": "45", + "valueType": "int" + }, + { + "ID": "membersApplicantCommunityLocal", + "label": "Hakijayhteisö, helsinkiläisiä yhteisöjäseniä", + "value": "23", + "valueType": "int" + }, + { + "ID": "feePerson", + "label": "Jäsenmaksun suuruus, Henkilöjäsen euroa", + "value": "38", + "valueType": "double" + }, + { + "ID": "feeCommunity", + "label": "Jäsenmaksun suuruus, Yhteisöjäsen euroa", + "value": "98", + "valueType": "double" + } + ], + "additionalInformation": "Tällä kertaa ei ole muuta ilmoitettavaa tähän hakemukseen", + "senderInfoArray": [ + { + "ID": "firstname", + "label": "Etunimi", + "value": "Testaaja", + "valueType": "string" + }, + { + "ID": "lastname", + "label": "Sukunimi", + "value": "Tiina", + "valueType": "string" + }, + { + "ID": "personID", + "label": "Henkilötunnus", + "value": "171756-1234", + "valueType": "string" + }, + { + "ID": "userID", + "label": "Käyttäjätunnus", + "value": "testatii", + "valueType": "string" + }, + { + "ID": "email", + "label": "Sähköposti", + "value": "tiina.testaaja@testiyhdistys.fi", + "valueType": "string" + } + ] + }, + "attachmentsInfo": { + "attachmentsArray": [ + [ + { + "ID": "description", + "value": "Vuosikokouksen pöytäkirja", + "valueType": "string" + }, + { + "ID": "fileType", + "value": "1", + "valueType": "int" + }, + { + "ID": "isDeliveredLater", + "value": "false", + "valueType": "bool" + }, + { + "ID": "isIncludedInOtherFile", + "value": "true", + "valueType": "bool" + } + ], + [ + { + "ID": "description", + "value": "Muu liite", + "valueType": "string" + }, + { + "ID": "fileType", + "value": "1", + "valueType": "int" + }, + { + "ID": "isDeliveredLater", + "value": "true", + "valueType": "bool" + }, + { + "ID": "isIncludedInOtherFile", + "value": "false", + "valueType": "bool" + } + ] + ], + "generalInfoArray": [ + { + "ID": "extraInfo", + "label": "Lisäselvitys liitteistä", + "value": "Tässä voi olla joku kaikkia liitteitä yhteisesti koskeva selvitys", + "valueType": "string" + } + ] + }, + "formUpdate": false +} \ No newline at end of file diff --git a/conf/tietoliikennesanoma_schema.json b/conf/tietoliikennesanoma_schema.json index ca6524b6f4..c2194c1bc2 100644 --- a/conf/tietoliikennesanoma_schema.json +++ b/conf/tietoliikennesanoma_schema.json @@ -17,9 +17,9 @@ "enum": [ "applicationType", "applicationTypeID", - "createdFormTimeStamp", + "createdFormTimeStamp", "formTimeStamp", - "submittedFormTimeStamp", + "submittedFormTimeStamp", "applicationNumber", "status", "sector", @@ -47,7 +47,7 @@ "bool", "datetime", "float", - "double" + "double" ] } }, @@ -91,7 +91,7 @@ "bool", "datetime", "float", - "double" + "double" ] } }, @@ -127,7 +127,7 @@ "email", "homePage", "isSportsClub", - "communityType" + "communityType" ] }, "label": { @@ -145,7 +145,7 @@ "bool", "datetime", "float", - "double" + "double" ] } }, @@ -191,7 +191,7 @@ "bool", "datetime", "float", - "double" + "double" ] } }, @@ -233,7 +233,7 @@ "bool", "datetime", "float", - "double" + "double" ] } }, @@ -268,21 +268,24 @@ "purpose", "description", "compensationPreviousYear", - "yearsForMultiYearApplication", - "breakdownOfYearlySums", - "organizationBelongsToStateShareSystem", - "primaryArt", - "isFestival", - "internalOrder", - "eventDayCount", - "performanceCount", - "estimatedVisitors", - "premiereLocation", - "firstPublicDate", - "nameOfEvent", - "rentalApplied", - "compensationExtraQuestion", - "targetOfSubvention" + "yearsForMultiYearApplication", + "breakdownOfYearlySums", + "organizationBelongsToStateShareSystem", + "primaryArt", + "isFestival", + "internalOrder", + "eventDayCount", + "performanceCount", + "estimatedVisitors", + "premiereLocation", + "firstPublicDate", + "nameOfEvent", + "rentalApplied", + "compensationExtraQuestion", + "targetOfSubvention", + "whoBenefits", + "changesOnSuccess", + "resultsOfActivities" ] }, "label": { @@ -300,7 +303,7 @@ "bool", "datetime", "float", - "double" + "double" ] } }, @@ -358,7 +361,7 @@ "bool", "datetime", "float", - "double" + "double" ] } }, @@ -398,7 +401,7 @@ "caretakerName", "caretakerAddress", "totalCostsOfType", - "usedAmount" + "usedAmount" ] }, "label": { @@ -416,7 +419,7 @@ "bool", "datetime", "float", - "double" + "double" ] }, "otherCostsArray": { @@ -491,7 +494,7 @@ "bool", "datetime", "float", - "double" + "double" ] } } @@ -537,7 +540,7 @@ "bool", "datetime", "float", - "double" + "double" ] } }, @@ -556,8 +559,8 @@ "compensationArray" ] }, - "communityInfo": { - "description": "'Yhteisön tiedot' section of the application", + "communityInfo": { + "description": "'Yhteisön tiedot' section of the application", "type": "object", "properties": { "generalCommunityInfoArray": { @@ -581,7 +584,7 @@ "staffManyearsParttime", "staffManyearsVoluntary", "staffManyearsSummary", - "isOwnerOrPrimaryTenantOfArtpremises" + "isOwnerOrPrimaryTenantOfArtpremises" ] }, "label": { @@ -599,7 +602,7 @@ "bool", "datetime", "float", - "double" + "double" ] } }, @@ -622,7 +625,7 @@ "description": "Identifies the data of the array item", "type": "string", "enum": [ - "premiseType", + "premiseType", "premiseName", "postCode", "isOthersUse", @@ -645,7 +648,7 @@ "bool", "datetime", "float", - "double" + "double" ] } }, @@ -661,252 +664,251 @@ "required": [ "generalCommunityInfoArray" ] - - }, - "activityInfo": { - "description": "'Toiminta' section of the application, for KUVA applications", - "type": "object", - "properties": { - "plannedActivityInfoArray": { - "type": "array", - "items": { - "type": "object", - "properties": { - "ID": { - "description": "Identifies the data of the array item", - "type": "string", - "enum": [ - "eventDaysCountHki", - "performanceCountHki", - "performanceCountAll", - "performanceVisitorsHki", - "performanceVisitorsAll", - "exhibitionCountHki", - "exhibitionCountAll", - "exhibitionVisitorsHki", - "exhibitionVisitorsAll", - "workshopCountHki", - "workshopCountAll", - "workshopVisitorsHki", - "workshopVisitorsAll", - "eventsHkiTotal", - "eventsTotal", - "eventsVisitorsHkiTotal", - "eventsVisitorsTotal", - "firstPublicPerformancesCount", - "premiereCountHki", - "firstPublicEventLocationHki", - "firstPublicEventLocationPostCode", - "isOwnedByCity", - "premisesCount", - "eventOrFestivalDates", - "firstPublicOccasionDate", - "projectStartDate", - "projectEndDate", - "detailedProjectDescription", - "otherKeyActivities" - ] - }, - "label": { - "description": "For future use, field's name in the UI", - "type": "string" - }, - "value": { - "type": "string" - }, - "valueType": { - "type": "string", - "enum": [ - "string", - "int", - "bool", - "datetime", - "float", - "double" - ] - } - }, - "required": [ - "ID", - "value", - "valueType" - ] - } - }, - "realizedActivityInfoArray": { - "type": "array", - "items": { - "type": "object", - "properties": { - "ID": { - "description": "Identifies the data of the array item", - "type": "string", - "enum": [ - "isEventOrFestival", - "eventDaysCount", - "performanceCountHki", - "performanceCountAll", - "performanceVisitorsHki", - "performanceVisitorsAll", - "exhibitionCountHki", - "exhibitionCountAll", - "exhibitionVisitorsHki", - "exhibitionVisitorsAll", - "workshopCountHki", - "workshopCountAll", - "workshopVisitorsHki", - "workshopVisitorsAll", - "eventsHkiTotal", - "eventsTotal", - "eventsVisitorsHkiTotal", - "eventsVisitorsTotal", - "firstPublicPerformancesCount", - "premiereCountHki", - "premisesCount", - "pupilsChildhoodAll", - "pupilsChildhoodGirls", - "pupilsChildhoodBoys", - "wideBasicStudiesAll", - "wideBasicStudiesGirls", - "wideBasicStudiesBoys", - "wideAdvancedStudiesAll", - "wideAdvancedStudiesGirls", - "wideAdvancedStudiesBoys", - "generalStudiesAll", - "generalStudiesGirls", - "generalStudiesBoys", - "teachingPersonnel", - "wayOfSelection", - "personalTeaching", - "freeStudents", - "lessonsChildhood", - "lessonsWideBasicStudies", - "lessonsWideAdvancedStudies", - "lessonsGeneralStudies", - "lessonsTotal" - ] - }, - "label": { - "description": "For future use, field's name in the UI", - "type": "string" - }, - "value": { - "type": "string" - }, - "valueType": { - "type": "string", - "enum": [ - "string", - "int", - "bool", - "datetime", - "float", - "double" - ] - } - }, - "required": [ - "ID", - "value", - "valueType" - ] - } - }, - "plannedPremisesArray": { - "description": "Information about several premises, each as one item/array of this array", - "type": "array", - "items": { - "type": "array", - "items": { - "type": "object", - "properties": { - "ID": { - "description": "Identifies the data of the array item", - "type": "string", - "enum": [ - "premiseName", - "postCode", - "isOwnedByCity" - ] - }, - "label": { - "description": "For future use, field's name in the UI", - "type": "string" - }, - "value": { - "type": "string" - }, - "valueType": { - "type": "string", - "enum": [ - "string", - "int", - "bool", - "datetime", - "float", - "double" - ] - } - }, - "required": [ - "ID", - "value", - "valueType" - ] - } - } - }, - "realizedPremisesArray": { - "description": "Information about several premises, each as one item/array of this array", - "type": "array", - "items": { - "type": "array", - "items": { - "type": "object", - "properties": { - "ID": { - "description": "Identifies the data of the array item", - "type": "string", - "enum": [ - "premiseName", - "postCode", - "isOwnedByCity", - "premiseType", - "premiseSuitability", - "citySection" - ] - }, - "label": { - "description": "For future use, field's name in the UI", - "type": "string" - }, - "value": { - "type": "string" - }, - "valueType": { - "type": "string", - "enum": [ - "string", - "int", - "bool", - "datetime", - "float", - "double" - ] - } - }, - "required": [ - "ID", - "value", - "valueType" - ] - } - } - } - } - }, - "activityBasisInfo": { - "description": "'Toiminnan lähtökohdat' section of the application, for KUVA applications", + }, + "activityInfo": { + "description": "'Toiminta' section of the application, for KUVA applications", + "type": "object", + "properties": { + "plannedActivityInfoArray": { + "type": "array", + "items": { + "type": "object", + "properties": { + "ID": { + "description": "Identifies the data of the array item", + "type": "string", + "enum": [ + "eventDaysCountHki", + "performanceCountHki", + "performanceCountAll", + "performanceVisitorsHki", + "performanceVisitorsAll", + "exhibitionCountHki", + "exhibitionCountAll", + "exhibitionVisitorsHki", + "exhibitionVisitorsAll", + "workshopCountHki", + "workshopCountAll", + "workshopVisitorsHki", + "workshopVisitorsAll", + "eventsHkiTotal", + "eventsTotal", + "eventsVisitorsHkiTotal", + "eventsVisitorsTotal", + "firstPublicPerformancesCount", + "premiereCountHki", + "firstPublicEventLocationHki", + "firstPublicEventLocationPostCode", + "isOwnedByCity", + "premisesCount", + "eventOrFestivalDates", + "firstPublicOccasionDate", + "projectStartDate", + "projectEndDate", + "detailedProjectDescription", + "otherKeyActivities" + ] + }, + "label": { + "description": "For future use, field's name in the UI", + "type": "string" + }, + "value": { + "type": "string" + }, + "valueType": { + "type": "string", + "enum": [ + "string", + "int", + "bool", + "datetime", + "float", + "double" + ] + } + }, + "required": [ + "ID", + "value", + "valueType" + ] + } + }, + "realizedActivityInfoArray": { + "type": "array", + "items": { + "type": "object", + "properties": { + "ID": { + "description": "Identifies the data of the array item", + "type": "string", + "enum": [ + "isEventOrFestival", + "eventDaysCount", + "performanceCountHki", + "performanceCountAll", + "performanceVisitorsHki", + "performanceVisitorsAll", + "exhibitionCountHki", + "exhibitionCountAll", + "exhibitionVisitorsHki", + "exhibitionVisitorsAll", + "workshopCountHki", + "workshopCountAll", + "workshopVisitorsHki", + "workshopVisitorsAll", + "eventsHkiTotal", + "eventsTotal", + "eventsVisitorsHkiTotal", + "eventsVisitorsTotal", + "firstPublicPerformancesCount", + "premiereCountHki", + "premisesCount", + "pupilsChildhoodAll", + "pupilsChildhoodGirls", + "pupilsChildhoodBoys", + "wideBasicStudiesAll", + "wideBasicStudiesGirls", + "wideBasicStudiesBoys", + "wideAdvancedStudiesAll", + "wideAdvancedStudiesGirls", + "wideAdvancedStudiesBoys", + "generalStudiesAll", + "generalStudiesGirls", + "generalStudiesBoys", + "teachingPersonnel", + "wayOfSelection", + "personalTeaching", + "freeStudents", + "lessonsChildhood", + "lessonsWideBasicStudies", + "lessonsWideAdvancedStudies", + "lessonsGeneralStudies", + "lessonsTotal" + ] + }, + "label": { + "description": "For future use, field's name in the UI", + "type": "string" + }, + "value": { + "type": "string" + }, + "valueType": { + "type": "string", + "enum": [ + "string", + "int", + "bool", + "datetime", + "float", + "double" + ] + } + }, + "required": [ + "ID", + "value", + "valueType" + ] + } + }, + "plannedPremisesArray": { + "description": "Information about several premises, each as one item/array of this array", + "type": "array", + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "ID": { + "description": "Identifies the data of the array item", + "type": "string", + "enum": [ + "premiseName", + "postCode", + "isOwnedByCity" + ] + }, + "label": { + "description": "For future use, field's name in the UI", + "type": "string" + }, + "value": { + "type": "string" + }, + "valueType": { + "type": "string", + "enum": [ + "string", + "int", + "bool", + "datetime", + "float", + "double" + ] + } + }, + "required": [ + "ID", + "value", + "valueType" + ] + } + } + }, + "realizedPremisesArray": { + "description": "Information about several premises, each as one item/array of this array", + "type": "array", + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "ID": { + "description": "Identifies the data of the array item", + "type": "string", + "enum": [ + "premiseName", + "postCode", + "isOwnedByCity", + "premiseType", + "premiseSuitability", + "citySection" + ] + }, + "label": { + "description": "For future use, field's name in the UI", + "type": "string" + }, + "value": { + "type": "string" + }, + "valueType": { + "type": "string", + "enum": [ + "string", + "int", + "bool", + "datetime", + "float", + "double" + ] + } + }, + "required": [ + "ID", + "value", + "valueType" + ] + } + } + } + } + }, + "activityBasisInfo": { + "description": "'Toiminnan lähtökohdat' section of the application, for KUVA applications", "type": "object", "properties": { "activityBasisArray": { @@ -933,20 +935,20 @@ "bool", "datetime", "float", - "double" + "double" ] } }, "required": [ "ID", - "label", + "label", "value", "valueType" ] } } } - }, + }, "customQuestionsInfo": { "description": "Made for 'Tarkemmat tiedot' but tried to be named generic enough so could be used in other places same as activityBasisInfo but that naming is too specific", "type": "object", @@ -988,7 +990,7 @@ } } } - }, + }, "eventInfoArray": { "description": "'Tapahtuman tiedot' and 'Kustannukset' (which is actually events info in application type 33) section of the application", "type": "array", @@ -1046,7 +1048,7 @@ "bool", "datetime", "float", - "double" + "double" ] } }, @@ -1096,7 +1098,7 @@ "bool", "datetime", "float", - "double" + "double" ] } }, @@ -1142,7 +1144,7 @@ "bool", "datetime", "float", - "double" + "double" ] } }, @@ -1154,40 +1156,40 @@ } } }, - "otherCompensationsInfoArray": { - "description": "Other compensations related information, like total sums of the arrays", - "type": "array", - "items": { - "type": "object", - "properties": { - "ID": { - "description": "Identifies the data of the array item", - "type": "string", - "enum": [ - "otherCompensationsTotal", - "otherAppliedCompensationsTotal" - ] - }, - "label": { - "description": "For future use, field's name in the UI", - "type": "string" - }, - "value": { - "type": "string" - }, - "valueType": { - "type": "string", - "enum": [ - "string", - "int", - "bool", - "datetime", - "float", - "double" - ] - } - } - } + "otherCompensationsInfoArray": { + "description": "Other compensations related information, like total sums of the arrays", + "type": "array", + "items": { + "type": "object", + "properties": { + "ID": { + "description": "Identifies the data of the array item", + "type": "string", + "enum": [ + "otherCompensationsTotal", + "otherAppliedCompensationsTotal" + ] + }, + "label": { + "description": "For future use, field's name in the UI", + "type": "string" + }, + "value": { + "type": "string" + }, + "valueType": { + "type": "string", + "enum": [ + "string", + "int", + "bool", + "datetime", + "float", + "double" + ] + } + } + } } } }, @@ -1230,7 +1232,7 @@ "bool", "datetime", "float", - "double" + "double" ] } }, @@ -1306,10 +1308,10 @@ "feeCommunity", "lastYearActiveMembersVisits", "lastYearOtherMemberVisits", - "youngPeopleParticipation", + "youngPeopleParticipation", "lastYearYoungPeopleParticipation", - "lastYearYoungPeopleParticipationDigital", - "participation" + "lastYearYoungPeopleParticipationDigital", + "participation" ] }, "label": { @@ -1327,7 +1329,7 @@ "bool", "datetime", "float", - "double" + "double" ] } }, @@ -1387,7 +1389,7 @@ "bool", "datetime", "float", - "double" + "double" ] } }, @@ -1410,11 +1412,11 @@ "enum": [ "adultsMale", "adultsFemale", - "adultsOther", + "adultsOther", "adultsAll", "juniorsMale", "juniorsFemale", - "juniorsOther", + "juniorsOther", "juniorsAll" ] }, @@ -1433,7 +1435,7 @@ "bool", "datetime", "float", - "double" + "double" ] } }, @@ -1477,7 +1479,7 @@ "bool", "datetime", "float", - "double" + "double" ] } }, @@ -1489,7 +1491,7 @@ } } }, - "hiredOfficialsInfo": { + "hiredOfficialsInfo": { "description": "Additional information for hiredOfficials.", "type": "array", "items": { @@ -1517,7 +1519,7 @@ "bool", "datetime", "float", - "double" + "double" ] } }, @@ -1564,7 +1566,7 @@ "bool", "datetime", "float", - "double" + "double" ] } }, @@ -1587,7 +1589,7 @@ "type": "string", "enum": [ "membershipsFeesTotal", - "descriptionOnYoungPeopleParticipation" + "descriptionOnYoungPeopleParticipation" ] }, "label": { @@ -1605,7 +1607,7 @@ "bool", "datetime", "float", - "double" + "double" ] } }, @@ -1634,48 +1636,48 @@ "enum": [ "adultMale", "adultFemale", - "adultOther", + "adultOther", "adultAll", "juniorMale", "juniorFemale", - "juniorOther", + "juniorOther", "juniorAll", "menGlobal", "menLocal", "womenGlobal", "womenLocal", - "adultOthersGlobal", - "adultOthersLocal", - "seniorMenGlobal", - "seniorMenLocal", - "seniorWomenGlobal", - "seniorWomenLocal", - "seniorOthersGlobal", - "seniorOthersLocal", + "adultOthersGlobal", + "adultOthersLocal", + "seniorMenGlobal", + "seniorMenLocal", + "seniorWomenGlobal", + "seniorWomenLocal", + "seniorOthersGlobal", + "seniorOthersLocal", "boysGlobal", "boysLocal", "girlsGlobal", "girlsLocal", - "juniorOthersGlobal", - "juniorOthersLocal", + "juniorOthersGlobal", + "juniorOthersLocal", "activeFanciersMenGlobal", "activeFanciersMenLocal", "activeFanciersWomenGlobal", "activeFanciersWomenLocal", - "activeFanciersAdultOthersGlobal", - "activeFanciersAdultOthersLocal", + "activeFanciersAdultOthersGlobal", + "activeFanciersAdultOthersLocal", "activeFanciersBoysGlobal", "activeFanciersBoysLocal", "activeFanciersGirlsGlobal", "activeFanciersGirlsLocal", - "activeFanciersJuniorOthersGlobal", + "activeFanciersJuniorOthersGlobal", "activeFanciersJuniorOthersLocal", - "activeFanciersSeniorMenGlobal", + "activeFanciersSeniorMenGlobal", "activeFanciersSeniorMenLocal", "activeFanciersSeniorWomenGlobal", "activeFanciersSeniorWomenLocal", - "activeFanciersSeniorOthersGlobal", - "activeFanciersSeniorOthersLocal", + "activeFanciersSeniorOthersGlobal", + "activeFanciersSeniorOthersLocal", "feeAdults", "feeJuniors", "allCoaches", @@ -1697,7 +1699,7 @@ "bool", "datetime", "float", - "double" + "double" ] } }, @@ -1721,18 +1723,18 @@ "type": "string", "enum": [ "sectionName", - "sectionOther", + "sectionOther", "men", "women", - "adultOthers", - "seniorMen", - "seniorWomen", - "seniorOthers", + "adultOthers", + "seniorMen", + "seniorWomen", + "seniorOthers", "boys", "girls", - "juniorOthers", + "juniorOthers", "adultHours", - "seniorHours", + "seniorHours", "juniorHours" ] }, @@ -1751,7 +1753,7 @@ "bool", "datetime", "float", - "double" + "double" ] } }, @@ -1813,13 +1815,13 @@ "bool", "datetime", "float", - "double" + "double" ] } }, "required": [ "ID", - "label", + "label", "value", "valueType" ] @@ -1843,7 +1845,7 @@ "totalSpecialGroupCount", "totalPersonnelCount", "totalRentCosts", - "digitalPremises" + "digitalPremises" ] }, "label": { @@ -1861,13 +1863,13 @@ "bool", "datetime", "float", - "double" + "double" ] } }, "required": [ "ID", - "label", + "label", "value", "valueType" ] @@ -1900,7 +1902,7 @@ "hoursPerDay", "lessorName", "lessorPhone", - "lessorPhoneOrEmail", + "lessorPhoneOrEmail", "lessorAddress", "lessorPostalCode", "lessorPostOffice" @@ -1921,7 +1923,7 @@ "bool", "datetime", "float", - "double" + "double" ] } }, @@ -1945,7 +1947,7 @@ "enum": [ "rentsInformation", "totalRentCosts", - "extraQuestion" + "extraQuestion" ] }, "label": { @@ -1963,7 +1965,7 @@ "bool", "datetime", "float", - "double" + "double" ] } }, @@ -2007,7 +2009,7 @@ "bool", "datetime", "float", - "double" + "double" ] } }, @@ -2041,17 +2043,17 @@ "eventOtherGrantedFrom", "employeeSalaries", "socialSecurityCosts", - "mandatoryAndOptionalPersonelCosts", + "mandatoryAndOptionalPersonelCosts", "travelCosts", - "travelAndTrainingCosts", + "travelAndTrainingCosts", "totalEmployeeCosts", - "otherValuables", - "isPartOfVOS", - "wasPartOfVOS", - "plannedCompensationsShareOfCosts", - "compensationsShareOfCosts", - "selfFinancingDescription", - "selfFinancingAmount" + "otherValuables", + "isPartOfVOS", + "wasPartOfVOS", + "plannedCompensationsShareOfCosts", + "compensationsShareOfCosts", + "selfFinancingDescription", + "selfFinancingAmount" ] }, "label": { @@ -2069,7 +2071,7 @@ "bool", "datetime", "float", - "double" + "double" ] } }, @@ -2081,497 +2083,497 @@ } }, "incomeGroupsArrayStatic": { - "description": "Each item in this array represents one income group.", - "type": "array", - "items": { - "type": "object", - "properties": { - "incomeGroupName": { - "type":"string", - "enum": [ - "general", - "budgetForProjectAndDevelopment", - "budgetForOperatingAndArtsTeaching" - ] - }, - "incomeRowsArrayStatic": { - "description": "Each item in this array represents one income line. The group in which it belongs in is identified by group name", - "type": "array", - "items": { - "type": "object", - "properties": { - "ID": { - "description": "Identifies the data of the array item", - "type": "string", - "enum": [ - "compensation", - "customerFees", - "donations", - "entryFees", - "otherCompensations", - "sponsorships", - "sales", - "compensationFromCulturalAffairs", - "otherCompensationFromCity", - "otherCompensationType", - "totalIncome", - "incomeWithoutCompensations", - "plannedStateOperativeSubvention", - "plannedOtherCompensations", - "ownFunding", - "financialFundingAndInterests", - "plannedTotalIncome", - "plannedTotalIncomeWithoutSubventions", - "plannedShareOfIncomeWithoutSubventions", - "stateOperativeSubvention", - "totalIncomeWithoutSubventions", - "shareOfIncomeWithoutSubventions" - ] - }, - "label": { - "description": "Field's name in the UI", - "type": "string" - }, - "value": { - "type": "string" - }, - "valueType": { - "type": "string", - "enum": [ - "string", - "int", - "bool", - "datetime", - "float", - "double" - ] - } - }, - "required": [ - "ID", - "label", - "value", - "valueType" - ] - } - }, - "otherIncomeRowsArrayStatic": { - "description": "Each item in this array represents one income line. The group in which it belongs in is identified by group name", - "type": "array", - "items": { - "type": "object", - "properties": { - "ID": { - "description": "Identifies the data of the array item", - "type": "string" - }, - "label": { - "description": "Field's name in the UI", - "type": "string" - }, - "value": { - "type": "string" - }, - "valueType": { - "type": "string", - "enum": [ - "string", - "int", - "bool", - "datetime", - "float", - "double" - ] - } - }, - "required": [ - "ID", - "label", - "value", - "valueType" - ] - } - }, - "groupsTotalSum": { - "type": "number" - } - } - } - }, - "costGroupsArrayStatic": { - "description": "Each item in this array represents one cost group.", - "type": "array", - "items": { - "type": "object", - "properties": { - "costGroupName": { - "type": "string", - "enum": [ - "general", - "budgetForProjectAndDevelopment", - "budgetForOperatingAndArtsTeaching", - "subventionUseCosts", - "costsForServicesAcquired", - "costsForMaterialsSuppliesAndGoods", - "otherCosts", - "useOfCustomerFeeIncome" - ] - }, - "costRowsArrayStatic": { - "description": "Each item in this array represents one cost line of the group.", - "type": "array", - "items": { - "type": "object", - "properties": { - "ID": { - "description": "Identifies the data of the array item", - "type": "string", - "enum": [ - "salaries", - "personnelSocialSecurityCosts", - "rentSum", - "materials", - "transport", - "food", - "pr", - "insurance", - "snacks", - "cleaning", - "premisesService", - "travel", - "heating", - "servicesTotal", - "water", - "electricity", - "suppliesTotal", - "admin", - "accounting", - "health", - "otherCostsTotal", - "services", - "supplies", - "useOfCustomerFeesTotal", - "totalCosts", - "netCosts", - "performerFees", - "otherFees", - "personnelSideCosts", - "generalCosts", - "permits", - "setsAndCostumes", - "equipment", - "premises", - "security", - "marketing", - "costsWithoutDeferredItems", - "generalCostsTotal", - "allCostsTotal", - "showCosts", - "travelCosts", - "transportCosts", - "plannedTotalCosts" - ] - }, - "label": { - "description": "Field's name in the UI", - "type": "string" - }, - "value": { - "type": "string" - }, - "valueType": { - "type": "string", - "enum": [ - "string", - "int", - "bool", - "datetime", - "float", - "double" - ] - } - }, - "required": [ - "ID", - "label", - "value", - "valueType" - ] - } - }, - "otherCostRowsArrayStatic": { - "description": "Each item in this array represents one cost line of the group.", - "type": "array", - "items": { - "type": "object", - "properties": { - "ID": { - "description": "Identifies the data of the array item", - "type": "string" - }, - "label": { - "description": "Field's name in the UI", - "type": "string" - }, - "value": { - "type": "string" - }, - "valueType": { - "type": "string", - "enum": [ - "string", - "int", - "bool", - "datetime", - "float", - "double" - ] - } - }, - "required": [ - "ID", - "label", - "value", - "valueType" - ] - } - }, - "groupsTotalSum": { - "type": "number" - } - } - } - }, - "incomeGroupsArrayDynamic": { - "description": "Each item in this array represents one income group.", - "type": "array", - "items": { - "type": "object", - "properties": { - "incomeGroupName": { - "type":"string" - }, - "incomeRowsArrayDynamic": { - "description": "Each item in this array represents one income line. The group in which it belongs in is identified by group name", - "type": "array", - "items": { - "type": "object", - "properties": { - "ID": { - "description": "Identifies the data of the array item", - "type": "string" - }, - "label": { - "description": "Field's name in the UI", - "type": "string" - }, - "value": { - "type": "string" - }, - "valueType": { - "type": "string", - "enum": [ - "string", - "int", - "bool", - "datetime", - "float", - "double" - ] - } - }, - "required": [ - "ID", - "label", - "value", - "valueType" - ] - } - }, - "otherIncomeGroupName": { - "type":"string" - }, - "otherIncomeRowsArrayDynamic": { - "description": "Each item in this array represents one income line. The group in which it belongs in is identified by group name", - "type": "array", - "items": { - "type": "object", - "properties": { - "ID": { - "description": "Identifies the data of the array item", - "type": "string" - }, - "label": { - "description": "Field's name in the UI", - "type": "string" - }, - "value": { - "type": "string" - }, - "valueType": { - "type": "string", - "enum": [ - "string", - "int", - "bool", - "datetime", - "float", - "double" - ] - } - }, - "required": [ - "ID", - "label", - "value", - "valueType" - ] - } - }, - "groupsTotalSum": { - "type": "number" - } - } - } - }, - "costGroupsArrayDynamic": { - "description": "Each item in this array represents one cost group.", - "type": "array", - "items": { - "type": "object", - "properties": { - "costGroupName": { - "type": "string" - }, - "costRowsArrayDynamic": { - "description": "Each item in this array represents one cost line of the group.", - "type": "array", - "items": { - "type": "object", - "properties": { - "ID": { - "description": "Identifies the data of the array item", - "type": "string" - }, - "label": { - "description": "Field's name in the UI", - "type": "string" - }, - "value": { - "type": "string" - }, - "valueType": { - "type": "string", - "enum": [ - "string", - "int", - "bool", - "datetime", - "float", - "double" - ] - } - }, - "required": [ - "ID", - "label", - "value", - "valueType" - ] - } - }, - "otherCostGroupName": { - "type": "string" - }, - "otherCostRowsArrayDynamic": { - "description": "Each item in this array represents one cost line of the group.", - "type": "array", - "items": { - "type": "object", - "properties": { - "ID": { - "description": "Identifies the data of the array item", - "type": "string" - }, - "label": { - "description": "Field's name in the UI", - "type": "string" - }, - "value": { - "type": "string" - }, - "valueType": { - "type": "string", - "enum": [ - "string", - "int", - "bool", - "datetime", - "float", - "double" - ] - } - }, - "required": [ - "ID", - "label", - "value", - "valueType" - ] - } - }, - "groupsTotalSum": { - "type": "number" - } - } - } - } - } - }, - "invoicesInfo": { - "description": "'Laskut' section of the application", - "type": "object", - "properties": { - "invoicesArray": { - "description": "Information about several invoices, each as one item/array of this array", + "description": "Each item in this array represents one income group.", "type": "array", "items": { - "type": "array", - "items": { - "type": "object", - "properties": { - "ID": { - "description": "Identifies the data of the array item", - "type": "string", - "enum": [ - "invoiceNumber", - "invoiceDate", - "invoiceSum", - "invoiceCopy" - ] - }, - "label": { - "description": "For future use, field's name in the UI", - "type": "string" - }, - "value": { - "type": "string" - }, - "valueType": { - "type": "string", - "enum": [ - "string", - "int", - "bool", - "datetime", - "float", - "double" - ] - } - }, - "required": [ - "ID", - "value", + "type": "object", + "properties": { + "incomeGroupName": { + "type": "string", + "enum": [ + "general", + "budgetForProjectAndDevelopment", + "budgetForOperatingAndArtsTeaching" + ] + }, + "incomeRowsArrayStatic": { + "description": "Each item in this array represents one income line. The group in which it belongs in is identified by group name", + "type": "array", + "items": { + "type": "object", + "properties": { + "ID": { + "description": "Identifies the data of the array item", + "type": "string", + "enum": [ + "compensation", + "customerFees", + "donations", + "entryFees", + "otherCompensations", + "sponsorships", + "sales", + "compensationFromCulturalAffairs", + "otherCompensationFromCity", + "otherCompensationType", + "totalIncome", + "incomeWithoutCompensations", + "plannedStateOperativeSubvention", + "plannedOtherCompensations", + "ownFunding", + "financialFundingAndInterests", + "plannedTotalIncome", + "plannedTotalIncomeWithoutSubventions", + "plannedShareOfIncomeWithoutSubventions", + "stateOperativeSubvention", + "totalIncomeWithoutSubventions", + "shareOfIncomeWithoutSubventions" + ] + }, + "label": { + "description": "Field's name in the UI", + "type": "string" + }, + "value": { + "type": "string" + }, + "valueType": { + "type": "string", + "enum": [ + "string", + "int", + "bool", + "datetime", + "float", + "double" + ] + } + }, + "required": [ + "ID", + "label", + "value", + "valueType" + ] + } + }, + "otherIncomeRowsArrayStatic": { + "description": "Each item in this array represents one income line. The group in which it belongs in is identified by group name", + "type": "array", + "items": { + "type": "object", + "properties": { + "ID": { + "description": "Identifies the data of the array item", + "type": "string" + }, + "label": { + "description": "Field's name in the UI", + "type": "string" + }, + "value": { + "type": "string" + }, + "valueType": { + "type": "string", + "enum": [ + "string", + "int", + "bool", + "datetime", + "float", + "double" + ] + } + }, + "required": [ + "ID", + "label", + "value", + "valueType" + ] + } + }, + "groupsTotalSum": { + "type": "number" + } + } + } + }, + "costGroupsArrayStatic": { + "description": "Each item in this array represents one cost group.", + "type": "array", + "items": { + "type": "object", + "properties": { + "costGroupName": { + "type": "string", + "enum": [ + "general", + "budgetForProjectAndDevelopment", + "budgetForOperatingAndArtsTeaching", + "subventionUseCosts", + "costsForServicesAcquired", + "costsForMaterialsSuppliesAndGoods", + "otherCosts", + "useOfCustomerFeeIncome" + ] + }, + "costRowsArrayStatic": { + "description": "Each item in this array represents one cost line of the group.", + "type": "array", + "items": { + "type": "object", + "properties": { + "ID": { + "description": "Identifies the data of the array item", + "type": "string", + "enum": [ + "salaries", + "personnelSocialSecurityCosts", + "rentSum", + "materials", + "transport", + "food", + "pr", + "insurance", + "snacks", + "cleaning", + "premisesService", + "travel", + "heating", + "servicesTotal", + "water", + "electricity", + "suppliesTotal", + "admin", + "accounting", + "health", + "otherCostsTotal", + "services", + "supplies", + "useOfCustomerFeesTotal", + "totalCosts", + "netCosts", + "performerFees", + "otherFees", + "personnelSideCosts", + "generalCosts", + "permits", + "setsAndCostumes", + "equipment", + "premises", + "security", + "marketing", + "costsWithoutDeferredItems", + "generalCostsTotal", + "allCostsTotal", + "showCosts", + "travelCosts", + "transportCosts", + "plannedTotalCosts" + ] + }, + "label": { + "description": "Field's name in the UI", + "type": "string" + }, + "value": { + "type": "string" + }, + "valueType": { + "type": "string", + "enum": [ + "string", + "int", + "bool", + "datetime", + "float", + "double" + ] + } + }, + "required": [ + "ID", + "label", + "value", + "valueType" + ] + } + }, + "otherCostRowsArrayStatic": { + "description": "Each item in this array represents one cost line of the group.", + "type": "array", + "items": { + "type": "object", + "properties": { + "ID": { + "description": "Identifies the data of the array item", + "type": "string" + }, + "label": { + "description": "Field's name in the UI", + "type": "string" + }, + "value": { + "type": "string" + }, + "valueType": { + "type": "string", + "enum": [ + "string", + "int", + "bool", + "datetime", + "float", + "double" + ] + } + }, + "required": [ + "ID", + "label", + "value", + "valueType" + ] + } + }, + "groupsTotalSum": { + "type": "number" + } + } + } + }, + "incomeGroupsArrayDynamic": { + "description": "Each item in this array represents one income group.", + "type": "array", + "items": { + "type": "object", + "properties": { + "incomeGroupName": { + "type": "string" + }, + "incomeRowsArrayDynamic": { + "description": "Each item in this array represents one income line. The group in which it belongs in is identified by group name", + "type": "array", + "items": { + "type": "object", + "properties": { + "ID": { + "description": "Identifies the data of the array item", + "type": "string" + }, + "label": { + "description": "Field's name in the UI", + "type": "string" + }, + "value": { + "type": "string" + }, + "valueType": { + "type": "string", + "enum": [ + "string", + "int", + "bool", + "datetime", + "float", + "double" + ] + } + }, + "required": [ + "ID", + "label", + "value", + "valueType" + ] + } + }, + "otherIncomeGroupName": { + "type": "string" + }, + "otherIncomeRowsArrayDynamic": { + "description": "Each item in this array represents one income line. The group in which it belongs in is identified by group name", + "type": "array", + "items": { + "type": "object", + "properties": { + "ID": { + "description": "Identifies the data of the array item", + "type": "string" + }, + "label": { + "description": "Field's name in the UI", + "type": "string" + }, + "value": { + "type": "string" + }, + "valueType": { + "type": "string", + "enum": [ + "string", + "int", + "bool", + "datetime", + "float", + "double" + ] + } + }, + "required": [ + "ID", + "label", + "value", + "valueType" + ] + } + }, + "groupsTotalSum": { + "type": "number" + } + } + } + }, + "costGroupsArrayDynamic": { + "description": "Each item in this array represents one cost group.", + "type": "array", + "items": { + "type": "object", + "properties": { + "costGroupName": { + "type": "string" + }, + "costRowsArrayDynamic": { + "description": "Each item in this array represents one cost line of the group.", + "type": "array", + "items": { + "type": "object", + "properties": { + "ID": { + "description": "Identifies the data of the array item", + "type": "string" + }, + "label": { + "description": "Field's name in the UI", + "type": "string" + }, + "value": { + "type": "string" + }, + "valueType": { + "type": "string", + "enum": [ + "string", + "int", + "bool", + "datetime", + "float", + "double" + ] + } + }, + "required": [ + "ID", + "label", + "value", + "valueType" + ] + } + }, + "otherCostGroupName": { + "type": "string" + }, + "otherCostRowsArrayDynamic": { + "description": "Each item in this array represents one cost line of the group.", + "type": "array", + "items": { + "type": "object", + "properties": { + "ID": { + "description": "Identifies the data of the array item", + "type": "string" + }, + "label": { + "description": "Field's name in the UI", + "type": "string" + }, + "value": { + "type": "string" + }, + "valueType": { + "type": "string", + "enum": [ + "string", + "int", + "bool", + "datetime", + "float", + "double" + ] + } + }, + "required": [ + "ID", + "label", + "value", + "valueType" + ] + } + }, + "groupsTotalSum": { + "type": "number" + } + } + } + } + } + }, + "invoicesInfo": { + "description": "'Laskut' section of the application", + "type": "object", + "properties": { + "invoicesArray": { + "description": "Information about several invoices, each as one item/array of this array", + "type": "array", + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "ID": { + "description": "Identifies the data of the array item", + "type": "string", + "enum": [ + "invoiceNumber", + "invoiceDate", + "invoiceSum", + "invoiceCopy" + ] + }, + "label": { + "description": "For future use, field's name in the UI", + "type": "string" + }, + "value": { + "type": "string" + }, + "valueType": { + "type": "string", + "enum": [ + "string", + "int", + "bool", + "datetime", + "float", + "double" + ] + } + }, + "required": [ + "ID", + "value", "valueType" ] } @@ -2591,7 +2593,7 @@ "enum": [ "projectName", "goal", - "content", + "content", "startDate", "endDate", "location", @@ -2599,9 +2601,9 @@ "membersLocal", "membersYoungest", "membersOldest", - "age7to28yearsLocal", - "all", - "extraQuestion" + "age7to28yearsLocal", + "all", + "extraQuestion" ] }, "label": { @@ -2619,7 +2621,7 @@ "bool", "datetime", "float", - "double" + "double" ] } }, @@ -2666,7 +2668,7 @@ "bool", "datetime", "float", - "double" + "double" ] } }, @@ -2761,7 +2763,7 @@ "bool", "datetime", "float", - "double" + "double" ] } }, @@ -2822,23 +2824,23 @@ "eventSource": { "type": "string" }, - "eventID": { - "type": "string" - }, - "eventTarget": { - "type": "string" - }, + "eventID": { + "type": "string" + }, + "eventTarget": { + "type": "string" + }, "timeUpdated": { "type": "string", "format": "date-time" }, - "timeCreated": { - "type": "string", - "format": "date-time" - }, - "eventDescription": { - "type": "string" - } + "timeCreated": { + "type": "string", + "format": "date-time" + }, + "eventDescription": { + "type": "string" + } } } }, @@ -2850,9 +2852,9 @@ "caseID": { "type": "string" }, - "messageID": { - "type": "string" - }, + "messageID": { + "type": "string" + }, "body": { "type": "string" }, From 33f5f788cb5d6f5aa680c8e7c4e0fb9943b2946b Mon Sep 17 00:00:00 2001 From: Janne Suominen Date: Mon, 11 Nov 2024 11:24:21 +0200 Subject: [PATCH 37/74] docs: UHF-10806: Example for form ID71 & schema updates (#1557) * UHF-10806: Example & schema updates * UHF-10806: Format --- conf/examples/esimerkki_71_HYTEEDYLEIS.json | 398 ++++++++++++++++++++ 1 file changed, 398 insertions(+) create mode 100644 conf/examples/esimerkki_71_HYTEEDYLEIS.json diff --git a/conf/examples/esimerkki_71_HYTEEDYLEIS.json b/conf/examples/esimerkki_71_HYTEEDYLEIS.json new file mode 100644 index 0000000000..08de06a81e --- /dev/null +++ b/conf/examples/esimerkki_71_HYTEEDYLEIS.json @@ -0,0 +1,398 @@ +{ + "compensation": { + "applicationInfoArray": [ + { + "ID": "applicationType", + "label": "Hakemustyyppi", + "value": "HYTEEDYLEIS", + "valueType": "string" + }, + { + "ID": "applicationTypeID", + "label": "Hakemustyypin numero", + "value": "71", + "valueType": "int" + }, + { + "ID": "formTimeStamp", + "label": "Hakemuksen/sanoman lähetyshetki", + "value": "2023-11-10T12:50:12.000", + "valueType": "datetime" + }, + { + "ID": "applicationNumber", + "label": "Hakemusnumero", + "value": "HYTEEDYLEIS-1", + "valueType": "string" + }, + { + "ID": "status", + "label": "Tila", + "value": "Vastaanotettu", + "valueType": "string" + }, + { + "ID": "actingYear", + "label": "Hakemusvuosi", + "value": "2023", + "valueType": "int" + } + ], + "currentAddressInfoArray": [ + { + "ID": "contactPerson", + "label": "Yhteyshenkilö", + "value": "Teemu Testaushenkilö", + "valueType": "string" + }, + { + "ID": "phoneNumber", + "label": "Puhelinnumero", + "value": "+358404040404", + "valueType": "string" + }, + { + "ID": "street", + "label": "Katuosoite", + "value": "Annankatu 18 Ö 905", + "valueType": "string" + }, + { + "ID": "city", + "label": "Postitoimipaikka", + "value": "Helsinki", + "valueType": "string" + }, + { + "ID": "postCode", + "label": "Postinumero", + "value": "00120", + "valueType": "string" + }, + { + "ID": "country", + "label": "Maa", + "value": "Suomi", + "valueType": "string" + } + ], + "applicantInfoArray": [ + { + "ID": "applicantType", + "label": "Hakijan tyyppi", + "value": "2", + "valueType": "string" + }, + { + "ID": "companyNumber", + "label": "Rekisterinumero", + "value": "5647641-1", + "valueType": "string" + }, + { + "ID": "communityOfficialName", + "label": "Yhteisön nimi", + "value": "TietoTesti Kh yleis 001 10062021", + "valueType": "string" + }, + { + "ID": "communityOfficialNameShort", + "label": "Yhteisön lyhenne", + "value": "TT ry", + "valueType": "string" + }, + { + "ID": "registrationDate", + "label": "Rekisteröimispäivä", + "value": "2021-01-01T00:00:00.000", + "valueType": "datetime" + }, + { + "ID": "foundingYear", + "label": "Perustamisvuosi", + "value": "2021", + "valueType": "int" + }, + { + "ID": "home", + "label": "Kotipaikka", + "value": "Helsinki", + "valueType": "string" + }, + { + "ID": "homePage", + "label": "www-sivut", + "value": "www.ttry.fi", + "valueType": "string" + }, + { + "ID": "email", + "label": "Sähköpostiosoite", + "value": "tsto@ttry.fi", + "valueType": "string" + } + ], + "applicantOfficialsArray": [ + [ + { + "ID": "email", + "label": "Sähköposti", + "value": "teemu@ttry.fi", + "valueType": "string" + }, + { + "ID": "role", + "label": "Rooli", + "value": "1", + "valueType": "string" + }, + { + "ID": "name", + "label": "Nimi", + "value": "Teemu Testaushenkilö", + "valueType": "string" + }, + { + "ID": "phone", + "label": "Puhelinnumero", + "value": "09-616527788", + "valueType": "string" + } + ] + ], + "bankAccountArray": [ + { + "ID": "accountNumber", + "label": "Tilinumero", + "value": "FI9640231442000454", + "valueType": "string" + } + ], + "compensationInfo": { + "generalInfoArray": [ + { + "ID": "purpose", + "label": "Haetun avustuksen käyttötarkoitus", + "value": "Käyttötarkoituksenamme on se että ... kts. liite 10.", + "valueType": "string" + }, + { + "ID": "explanation", + "label": "Selvitys edellisen avustuksen käytöstä", + "value": "Emme saaneet viime vuonna avustusta lainkaan.", + "valueType": "string" + }, + { + "ID": "whoBenefits", + "label": "Ketkä toiminnastanne erityisesti hyötyvät", + "value": "Kaikki kaikkialla.", + "valueType": "string" + }, + { + "ID": "changesOnSuccess", + "label": "Minkälaisia muutoksia tapahtuu, jos onnistutte?", + "value": "Asiat paranevat ympäriinsä.", + "valueType": "string" + }, + { + "ID": "resultsOfActivities", + "label": "Minkälaisia hyötyjä avustettavan toiminnan seurauksena syntyy?", + "value": "Positiivisia hyötyjä.", + "valueType": "string" + } + ], + "compensationArray": [ + [ + { + "ID": "subventionType", + "label": "Avustuslaji", + "value": "6", + "valueType": "string" + }, + { + "ID": "amount", + "label": "Euroa", + "value": "3533.00", + "valueType": "double" + } + ] + ] + }, + "otherCompensationsInfo": { + "otherCompensationsArray": [ + [ + { + "ID": "issuer", + "label": "Myöntäjä", + "value": "5", + "valueType": "string" + }, + { + "ID": "issuerName", + "label": "Myöntäjän nimi", + "value": "Joku Säätiö Sr.", + "valueType": "string" + }, + { + "ID": "year", + "label": "Vuosi", + "value": "2021", + "valueType": "string" + }, + { + "ID": "amount", + "label": "Euroa", + "value": "2800", + "valueType": "double" + }, + { + "ID": "purpose", + "label": "Tarkoitus", + "value": "Matkakuluihin ja muihin ylimääräisiin menoihin.", + "valueType": "string" + } + ] + ] + }, + "activitiesInfoArray": [ + { + "ID": "businessPurpose", + "label": "Toiminnan tarkoitus", + "value": "Meidän toimintamme tarkoituksena on että ...", + "valueType": "string" + }, + { + "ID": "communityPracticesBusiness", + "label": "Yhteisö harjoittaa liiketoimintaa", + "value": "false", + "valueType": "bool" + }, + { + "ID": "membersApplicantPersonGlobal", + "label": "Hakijayhteisö, henkilöjäseniä", + "value": "50", + "valueType": "int" + }, + { + "ID": "membersApplicantCommunityGlobal", + "label": "Hakijayhteisö, yhteisöjäseniä", + "value": "12", + "valueType": "int" + }, + { + "ID": "membersApplicantPersonLocal", + "label": "Hakijayhteisö, helsinkiläisiä henkilöjäseniä", + "value": "45", + "valueType": "int" + }, + { + "ID": "membersApplicantCommunityLocal", + "label": "Hakijayhteisö, helsinkiläisiä yhteisöjäseniä", + "value": "23", + "valueType": "int" + }, + { + "ID": "feePerson", + "label": "Jäsenmaksun suuruus, Henkilöjäsen euroa", + "value": "38", + "valueType": "double" + }, + { + "ID": "feeCommunity", + "label": "Jäsenmaksun suuruus, Yhteisöjäsen euroa", + "value": "98", + "valueType": "double" + } + ], + "additionalInformation": "Tällä kertaa ei ole muuta ilmoitettavaa tähän hakemukseen", + "senderInfoArray": [ + { + "ID": "firstname", + "label": "Etunimi", + "value": "Testaaja", + "valueType": "string" + }, + { + "ID": "lastname", + "label": "Sukunimi", + "value": "Tiina", + "valueType": "string" + }, + { + "ID": "personID", + "label": "Henkilötunnus", + "value": "171756-1234", + "valueType": "string" + }, + { + "ID": "userID", + "label": "Käyttäjätunnus", + "value": "testatii", + "valueType": "string" + }, + { + "ID": "email", + "label": "Sähköposti", + "value": "tiina.testaaja@testiyhdistys.fi", + "valueType": "string" + } + ] + }, + "attachmentsInfo": { + "attachmentsArray": [ + [ + { + "ID": "description", + "value": "Vuosikokouksen pöytäkirja", + "valueType": "string" + }, + { + "ID": "fileType", + "value": "1", + "valueType": "int" + }, + { + "ID": "isDeliveredLater", + "value": "false", + "valueType": "bool" + }, + { + "ID": "isIncludedInOtherFile", + "value": "true", + "valueType": "bool" + } + ], + [ + { + "ID": "description", + "value": "Muu liite", + "valueType": "string" + }, + { + "ID": "fileType", + "value": "1", + "valueType": "int" + }, + { + "ID": "isDeliveredLater", + "value": "true", + "valueType": "bool" + }, + { + "ID": "isIncludedInOtherFile", + "value": "false", + "valueType": "bool" + } + ] + ], + "generalInfoArray": [ + { + "ID": "extraInfo", + "label": "Lisäselvitys liitteistä", + "value": "Tässä voi olla joku kaikkia liitteitä yhteisesti koskeva selvitys", + "valueType": "string" + } + ] + }, + "formUpdate": false +} \ No newline at end of file From e0fca8deb61c931983e08dc8a6184f2e29516e73 Mon Sep 17 00:00:00 2001 From: hel-platta-automation <95360595+hel-platta-automation@users.noreply.github.com> Date: Thu, 14 Nov 2024 07:40:31 +0200 Subject: [PATCH 38/74] Update configuration (#1556) --- composer.lock | 59 +++++++++++++++++++++++++++------------------------ 1 file changed, 31 insertions(+), 28 deletions(-) diff --git a/composer.lock b/composer.lock index b78c76db2e..690a6d4d42 100644 --- a/composer.lock +++ b/composer.lock @@ -4106,17 +4106,17 @@ }, { "name": "drupal/editoria11y", - "version": "2.1.19", + "version": "2.1.20", "source": { "type": "git", "url": "https://git.drupalcode.org/project/editoria11y.git", - "reference": "2.1.19" + "reference": "2.1.20" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/editoria11y-2.1.19.zip", - "reference": "2.1.19", - "shasum": "0ccf651071837e1ee6fcfb8fbb1c279d2fc1bc27" + "url": "https://ftp.drupal.org/files/projects/editoria11y-2.1.20.zip", + "reference": "2.1.20", + "shasum": "67f8e2eb17ed3d3db6cd93782ed1faa88c206640" }, "require": { "drupal/core": "^9 || ^10 || ^11" @@ -4127,8 +4127,8 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "2.1.19", - "datestamp": "1726514804", + "version": "2.1.20", + "datestamp": "1731097435", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -5933,16 +5933,16 @@ }, { "name": "drupal/helfi_platform_config", - "version": "4.7.0", + "version": "4.7.1", "source": { "type": "git", "url": "https://github.com/City-of-Helsinki/drupal-helfi-platform-config.git", - "reference": "1706882d4ccbeacf33175a30157a9495f891af39" + "reference": "680984849f6f204b63af73efb0ae531ba121ff58" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/City-of-Helsinki/drupal-helfi-platform-config/zipball/1706882d4ccbeacf33175a30157a9495f891af39", - "reference": "1706882d4ccbeacf33175a30157a9495f891af39", + "url": "https://api.github.com/repos/City-of-Helsinki/drupal-helfi-platform-config/zipball/680984849f6f204b63af73efb0ae531ba121ff58", + "reference": "680984849f6f204b63af73efb0ae531ba121ff58", "shasum": "" }, "require": { @@ -6057,6 +6057,9 @@ }, "drupal/view_unpublished": { "[#UHF-9256] Fix missing dynamic permission dependencies.": "https://raw.githubusercontent.com/City-of-Helsinki/drupal-helfi-platform-config/cbb944ae79643ba7ed895db3fac7f3b3d90ac850/patches/view_unpublished_permissions_missing_dependencies.patch" + }, + "drupal/elasticsearch_connector": { + "https://drupal.org/i/3486375": "https://raw.githubusercontent.com/City-of-Helsinki/drupal-helfi-platform-config/be8a1fba1a5ea2422154caf4fb7183dfc3917599/patches/3486375.patch" } } }, @@ -6065,10 +6068,10 @@ ], "description": "HELfi platform config", "support": { - "source": "https://github.com/City-of-Helsinki/drupal-helfi-platform-config/tree/4.7.0", + "source": "https://github.com/City-of-Helsinki/drupal-helfi-platform-config/tree/4.7.1", "issues": "https://github.com/City-of-Helsinki/drupal-helfi-platform-config/issues" }, - "time": "2024-11-08T08:46:24+00:00" + "time": "2024-11-11T07:44:23+00:00" }, { "name": "drupal/helfi_proxy", @@ -7766,7 +7769,7 @@ ], "authors": [ { - "name": "Berdir", + "name": "berdir", "homepage": "https://www.drupal.org/user/214652" }, { @@ -7786,7 +7789,7 @@ "homepage": "https://www.drupal.org/user/227761" }, { - "name": "Primsi", + "name": "primsi", "homepage": "https://www.drupal.org/user/282629" } ], @@ -11894,16 +11897,16 @@ }, { "name": "league/container", - "version": "4.2.3", + "version": "4.2.4", "source": { "type": "git", "url": "https://github.com/thephpleague/container.git", - "reference": "72f9bebe7bd623007782a40f5ec305661ab706d8" + "reference": "7ea728b013b9a156c409c6f0fc3624071b742dec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/container/zipball/72f9bebe7bd623007782a40f5ec305661ab706d8", - "reference": "72f9bebe7bd623007782a40f5ec305661ab706d8", + "url": "https://api.github.com/repos/thephpleague/container/zipball/7ea728b013b9a156c409c6f0fc3624071b742dec", + "reference": "7ea728b013b9a156c409c6f0fc3624071b742dec", "shasum": "" }, "require": { @@ -11964,7 +11967,7 @@ ], "support": { "issues": "https://github.com/thephpleague/container/issues", - "source": "https://github.com/thephpleague/container/tree/4.2.3" + "source": "https://github.com/thephpleague/container/tree/4.2.4" }, "funding": [ { @@ -11972,7 +11975,7 @@ "type": "github" } ], - "time": "2024-10-23T12:06:58+00:00" + "time": "2024-11-10T12:42:13+00:00" }, { "name": "league/flysystem", @@ -20701,23 +20704,23 @@ }, { "name": "phpdocumentor/type-resolver", - "version": "1.9.0", + "version": "1.10.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "1fb5ba8d045f5dd984ebded5b1cc66f29459422d" + "reference": "679e3ce485b99e84c775d28e2e96fade9a7fb50a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/1fb5ba8d045f5dd984ebded5b1cc66f29459422d", - "reference": "1fb5ba8d045f5dd984ebded5b1cc66f29459422d", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/679e3ce485b99e84c775d28e2e96fade9a7fb50a", + "reference": "679e3ce485b99e84c775d28e2e96fade9a7fb50a", "shasum": "" }, "require": { "doctrine/deprecations": "^1.0", "php": "^7.3 || ^8.0", "phpdocumentor/reflection-common": "^2.0", - "phpstan/phpdoc-parser": "^1.18" + "phpstan/phpdoc-parser": "^1.18|^2.0" }, "require-dev": { "ext-tokenizer": "*", @@ -20753,9 +20756,9 @@ "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", "support": { "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.9.0" + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.10.0" }, - "time": "2024-11-03T20:11:34+00:00" + "time": "2024-11-09T15:12:26+00:00" }, { "name": "phpspec/prophecy", From 520938319eb59aca0e777a5e3d0794f07873456e Mon Sep 17 00:00:00 2001 From: Janne Suominen Date: Thu, 14 Nov 2024 07:40:50 +0200 Subject: [PATCH 39/74] =?UTF-8?q?feat:=20UHF-10556:=20Update=20dropdown=20?= =?UTF-8?q?options=20for=20My=C3=B6nnetyt=20/=20Haetut=20component.=20(#15?= =?UTF-8?q?58)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * UHF-10556: Add function to override issuer options. * UHF-10556: Remove STEA from dropdown options. * UHF-10556: Add tests for new field options + other things. * UHF-10556: Rollback yleisavustus? --- .../en/webform.webform.hyte_yleisavustus.yml | 2 - ...bform.kasvatus_ja_koulutus_toiminta_av.yml | 1 - ...bform.kasvatus_ja_koulutus_yleisavustu.yml | 1 - ...bform.kaupunginkanslia_tyollisyysavust.yml | 2 - .../en/webform.webform.kuva_projekti.yml | 1 - .../en/webform.webform.kuva_toiminta.yml | 1 - ....webform.liikunta_laitosavustushakemus.yml | 2 - ...bform.liikunta_toiminta_ja_tilankaytto.yml | 1 - ...bform.nuorisotoiminta_projektiavustush.yml | 2 - .../en/webform.webform.nuortoimpalkka.yml | 2 - ...bform.taide_ja_kulttuuri_kehittamisavu.yml | 1 - ...bform.taide_ja_kulttuuriavustukset_tai.yml | 1 - .../webform.webform.yleisavustushakemus.yml | 2 - ...webform.ymparistopalvelut_yleisavustus.yml | 1 - .../sv/webform.webform.hyte_yleisavustus.yml | 2 - ...bform.kasvatus_ja_koulutus_toiminta_av.yml | 1 - ...bform.kasvatus_ja_koulutus_yleisavustu.yml | 1 - ...bform.kaupunginkanslia_tyollisyysavust.yml | 2 - .../sv/webform.webform.kuva_projekti.yml | 1 - .../sv/webform.webform.kuva_toiminta.yml | 1 - ....webform.liikunta_laitosavustushakemus.yml | 2 - ...bform.liikunta_toiminta_ja_tilankaytto.yml | 1 - ...bform.nuorisotoiminta_projektiavustush.yml | 2 - .../sv/webform.webform.nuortoimpalkka.yml | 2 - ...bform.taide_ja_kulttuuri_kehittamisavu.yml | 1 - ...bform.taide_ja_kulttuuriavustukset_tai.yml | 1 - .../webform.webform.yleisavustushakemus.yml | 2 - ...webform.ymparistopalvelut_yleisavustus.yml | 1 - ...bform.asukasosallisuus_pienavustushake.yml | 2 - ...bform.asukasosallisuus_yleis_ja_toimin.yml | 2 - ...orm.webform.elderly_sports_and_culture.yml | 2 - .../cmi/webform.webform.hyte_yleisavustus.yml | 1 - ...bform.kasvatus_ja_koulutus_toiminta_av.yml | 1 - ...bform.kasvatus_ja_koulutus_yleisavustu.yml | 1 - ...bform.kaupunginkanslia_tyollisyysavust.yml | 2 - conf/cmi/webform.webform.kuva_projekti.yml | 1 - conf/cmi/webform.webform.kuva_toiminta.yml | 1 - ....webform.liikunta_laitosavustushakemus.yml | 2 - ...bform.liikunta_toiminta_ja_tilankaytto.yml | 1 - ...bform.nuorisotoiminta_projektiavustush.yml | 2 - conf/cmi/webform.webform.nuortoimpalkka.yml | 2 - ...bform.webform.performance_test_webform.yml | 2 - ...bform.taide_ja_kulttuuri_kehittamisavu.yml | 1 - ...bform.taide_ja_kulttuuriavustukset_tai.yml | 1 - ...webform.ymparistopalvelut_yleisavustus.yml | 1 - .../grants_handler/grants_handler.module | 26 ++ .../modules/custom/grants_handler/phpunit.xml | 85 +++--- .../src/ApplicationGetterService.php | 14 +- .../grants_handler/src/ApplicationHelpers.php | 86 ++++-- .../src/Unit/ApplicationHelpersExposed.php | 46 ++++ .../tests/src/Unit/ApplicationHelpersTest.php | 250 ++++++++++++++++++ .../src/Unit/ApplicationValidatorTest.php | 5 + 52 files changed, 445 insertions(+), 132 deletions(-) create mode 100644 public/modules/custom/grants_handler/tests/src/Unit/ApplicationHelpersExposed.php create mode 100644 public/modules/custom/grants_handler/tests/src/Unit/ApplicationHelpersTest.php diff --git a/conf/cmi/language/en/webform.webform.hyte_yleisavustus.yml b/conf/cmi/language/en/webform.webform.hyte_yleisavustus.yml index 71e89f43f0..ccc44651e3 100644 --- a/conf/cmi/language/en/webform.webform.hyte_yleisavustus.yml +++ b/conf/cmi/language/en/webform.webform.hyte_yleisavustus.yml @@ -82,7 +82,6 @@ elements: | 3: EU 4: Other 5: Foundation - 6: STEA '#title': ' Grant issuer' issuer_name: '#title': 'Issuer''s name' @@ -116,7 +115,6 @@ elements: | 3: EU 4: Other 5: Foundation - 6: STEA '#title': 'Grant issuer' issuer_name: '#title': 'Issuer''s name' diff --git a/conf/cmi/language/en/webform.webform.kasvatus_ja_koulutus_toiminta_av.yml b/conf/cmi/language/en/webform.webform.kasvatus_ja_koulutus_toiminta_av.yml index 4a52088f1a..baaa170e55 100644 --- a/conf/cmi/language/en/webform.webform.kasvatus_ja_koulutus_toiminta_av.yml +++ b/conf/cmi/language/en/webform.webform.kasvatus_ja_koulutus_toiminta_av.yml @@ -82,7 +82,6 @@ elements: | 3: EU 4: Other 5: Foundation - 6: STEA '#title': 'Grant issuer' issuer_name: '#title': 'Issuer''s name' diff --git a/conf/cmi/language/en/webform.webform.kasvatus_ja_koulutus_yleisavustu.yml b/conf/cmi/language/en/webform.webform.kasvatus_ja_koulutus_yleisavustu.yml index 9b176e5549..566f1b029a 100644 --- a/conf/cmi/language/en/webform.webform.kasvatus_ja_koulutus_yleisavustu.yml +++ b/conf/cmi/language/en/webform.webform.kasvatus_ja_koulutus_yleisavustu.yml @@ -84,7 +84,6 @@ elements: | 3: EU 4: Other 5: Foundation - 6: STEA '#title': ' Grant issuer' issuer_name: '#title': 'Issuer''s name' diff --git a/conf/cmi/language/en/webform.webform.kaupunginkanslia_tyollisyysavust.yml b/conf/cmi/language/en/webform.webform.kaupunginkanslia_tyollisyysavust.yml index 4061c225c6..a46e043077 100644 --- a/conf/cmi/language/en/webform.webform.kaupunginkanslia_tyollisyysavust.yml +++ b/conf/cmi/language/en/webform.webform.kaupunginkanslia_tyollisyysavust.yml @@ -85,7 +85,6 @@ elements: | 3: EU 4: Other 5: Foundation - 6: STEA '#title': 'Grant issuer' issuer_name: '#title': 'Issuer''s name' @@ -119,7 +118,6 @@ elements: | 3: EU 4: Other 5: Foundation - 6: STEA '#title': 'Grant issuer' issuer_name: '#title': 'Issuer''s name' diff --git a/conf/cmi/language/en/webform.webform.kuva_projekti.yml b/conf/cmi/language/en/webform.webform.kuva_projekti.yml index 25b02d5ff3..ba2f2050b7 100644 --- a/conf/cmi/language/en/webform.webform.kuva_projekti.yml +++ b/conf/cmi/language/en/webform.webform.kuva_projekti.yml @@ -104,7 +104,6 @@ elements: | 3: EU 4: Other 5: Foundation - 6: STEA '#title': 'Grant issuer' issuer_name: '#title': ' Issuer''s name' diff --git a/conf/cmi/language/en/webform.webform.kuva_toiminta.yml b/conf/cmi/language/en/webform.webform.kuva_toiminta.yml index 44d3d0a7e6..ce138a5ff9 100644 --- a/conf/cmi/language/en/webform.webform.kuva_toiminta.yml +++ b/conf/cmi/language/en/webform.webform.kuva_toiminta.yml @@ -119,7 +119,6 @@ elements: | 3: EU 4: Other 5: Foundation - 6: STEA '#title': 'Grant issuer' issuer_name: '#title': 'Issuer''s name' diff --git a/conf/cmi/language/en/webform.webform.liikunta_laitosavustushakemus.yml b/conf/cmi/language/en/webform.webform.liikunta_laitosavustushakemus.yml index 088d568abd..a4b7d15624 100644 --- a/conf/cmi/language/en/webform.webform.liikunta_laitosavustushakemus.yml +++ b/conf/cmi/language/en/webform.webform.liikunta_laitosavustushakemus.yml @@ -82,7 +82,6 @@ elements: | 3: EU 4: Other 5: Foundation - 6: STEA '#title': 'Grant issuer' issuer_name: '#title': 'Issuer''s name' @@ -116,7 +115,6 @@ elements: | 3: EU 4: Other 5: Foundation - 6: STEA '#title': 'Grant issuer' issuer_name: '#title': 'Issuer''s name' diff --git a/conf/cmi/language/en/webform.webform.liikunta_toiminta_ja_tilankaytto.yml b/conf/cmi/language/en/webform.webform.liikunta_toiminta_ja_tilankaytto.yml index 59405d65b8..0761b948d3 100644 --- a/conf/cmi/language/en/webform.webform.liikunta_toiminta_ja_tilankaytto.yml +++ b/conf/cmi/language/en/webform.webform.liikunta_toiminta_ja_tilankaytto.yml @@ -102,7 +102,6 @@ elements: | 3: EU 4: Other 5: Foundation - 6: STEA '#title': 'Grant issuer' issuer_name: '#title': 'Issuer''s name' diff --git a/conf/cmi/language/en/webform.webform.nuorisotoiminta_projektiavustush.yml b/conf/cmi/language/en/webform.webform.nuorisotoiminta_projektiavustush.yml index e0dcf1f654..be997d96c2 100644 --- a/conf/cmi/language/en/webform.webform.nuorisotoiminta_projektiavustush.yml +++ b/conf/cmi/language/en/webform.webform.nuorisotoiminta_projektiavustush.yml @@ -82,7 +82,6 @@ elements: | 3: EU 4: Other 5: Foundation - 6: STEA '#title': ' Grant issuer' issuer_name: '#title': 'Issuer''s name' @@ -115,7 +114,6 @@ elements: | 3: EU 4: Other 5: Foundation - 6: STEA '#title': 'Grant issuer' issuer_name: '#title': 'Issuer''s name' diff --git a/conf/cmi/language/en/webform.webform.nuortoimpalkka.yml b/conf/cmi/language/en/webform.webform.nuortoimpalkka.yml index a2275448d1..63a9f395b0 100644 --- a/conf/cmi/language/en/webform.webform.nuortoimpalkka.yml +++ b/conf/cmi/language/en/webform.webform.nuortoimpalkka.yml @@ -83,7 +83,6 @@ elements: | 3: EU 4: Other 5: Foundation - 6: STEA '#title': 'Grant issuer' issuer_name: '#title': 'Issuer''s name' @@ -117,7 +116,6 @@ elements: | 3: EU 4: Other 5: Foundation - 6: STEA '#title': 'Grant issuer' issuer_name: '#title': 'Issuer''s name' diff --git a/conf/cmi/language/en/webform.webform.taide_ja_kulttuuri_kehittamisavu.yml b/conf/cmi/language/en/webform.webform.taide_ja_kulttuuri_kehittamisavu.yml index 6a02c17a6f..1445e29f01 100644 --- a/conf/cmi/language/en/webform.webform.taide_ja_kulttuuri_kehittamisavu.yml +++ b/conf/cmi/language/en/webform.webform.taide_ja_kulttuuri_kehittamisavu.yml @@ -126,7 +126,6 @@ elements: | 3: EU 4: Other 5: Foundation - 6: STEA '#title': 'Grant issuer' issuer_name: '#title': ' Issuer''s name' diff --git a/conf/cmi/language/en/webform.webform.taide_ja_kulttuuriavustukset_tai.yml b/conf/cmi/language/en/webform.webform.taide_ja_kulttuuriavustukset_tai.yml index 38bae87209..7f97d89e9b 100644 --- a/conf/cmi/language/en/webform.webform.taide_ja_kulttuuriavustukset_tai.yml +++ b/conf/cmi/language/en/webform.webform.taide_ja_kulttuuriavustukset_tai.yml @@ -91,7 +91,6 @@ elements: | 3: EU 4: Other 5: Foundation - 6: STEA '#title': 'Grant issuer' issuer_name: '#title': 'Issuer''s name' diff --git a/conf/cmi/language/en/webform.webform.yleisavustushakemus.yml b/conf/cmi/language/en/webform.webform.yleisavustushakemus.yml index 9460ee28c3..3c9378bc81 100644 --- a/conf/cmi/language/en/webform.webform.yleisavustushakemus.yml +++ b/conf/cmi/language/en/webform.webform.yleisavustushakemus.yml @@ -80,7 +80,6 @@ elements: | 3: EU 4: Other 5: Foundation - 6: STEA '#title': 'Grant issuer' issuer_name: '#title': 'Issuer''s name' @@ -114,7 +113,6 @@ elements: | 3: EU 4: Other 5: Foundation - 6: STEA '#title': 'Grant issuer' issuer_name: '#title': 'Issuer''s name' diff --git a/conf/cmi/language/en/webform.webform.ymparistopalvelut_yleisavustus.yml b/conf/cmi/language/en/webform.webform.ymparistopalvelut_yleisavustus.yml index 7ec7f0db9c..8bbdf3a774 100644 --- a/conf/cmi/language/en/webform.webform.ymparistopalvelut_yleisavustus.yml +++ b/conf/cmi/language/en/webform.webform.ymparistopalvelut_yleisavustus.yml @@ -83,7 +83,6 @@ elements: | 3: EU 4: Other 5: Foundation - 6: STEA '#title': 'Grant issuer' issuer_name: '#title': 'Issuer''s name' diff --git a/conf/cmi/language/sv/webform.webform.hyte_yleisavustus.yml b/conf/cmi/language/sv/webform.webform.hyte_yleisavustus.yml index c19f2645b4..4f1a00f00a 100644 --- a/conf/cmi/language/sv/webform.webform.hyte_yleisavustus.yml +++ b/conf/cmi/language/sv/webform.webform.hyte_yleisavustus.yml @@ -85,7 +85,6 @@ elements: | 3: EU 4: Övrig 5: Fundament - 6: STEA '#title': Bidragsgivare issuer_name: '#title': 'Emittentens namn' @@ -119,7 +118,6 @@ elements: | 3: EU 4: Övrig 5: Fundament - 6: STEA '#title': Bidragsgivare issuer_name: '#title': 'Emittentens namn' diff --git a/conf/cmi/language/sv/webform.webform.kasvatus_ja_koulutus_toiminta_av.yml b/conf/cmi/language/sv/webform.webform.kasvatus_ja_koulutus_toiminta_av.yml index cfc0cd2964..568dfd85ba 100644 --- a/conf/cmi/language/sv/webform.webform.kasvatus_ja_koulutus_toiminta_av.yml +++ b/conf/cmi/language/sv/webform.webform.kasvatus_ja_koulutus_toiminta_av.yml @@ -85,7 +85,6 @@ elements: | 3: EU 4: Övrig 5: Fundament - 6: STEA '#title': Bidragsgivare issuer_name: '#title': 'Emittentens namn' diff --git a/conf/cmi/language/sv/webform.webform.kasvatus_ja_koulutus_yleisavustu.yml b/conf/cmi/language/sv/webform.webform.kasvatus_ja_koulutus_yleisavustu.yml index fa0f7d4b54..435b9a5907 100644 --- a/conf/cmi/language/sv/webform.webform.kasvatus_ja_koulutus_yleisavustu.yml +++ b/conf/cmi/language/sv/webform.webform.kasvatus_ja_koulutus_yleisavustu.yml @@ -87,7 +87,6 @@ elements: | 3: EU 4: Övrig 5: Fundament - 6: STEA '#title': Bidragsgivare issuer_name: '#title': 'Emittentens namn' diff --git a/conf/cmi/language/sv/webform.webform.kaupunginkanslia_tyollisyysavust.yml b/conf/cmi/language/sv/webform.webform.kaupunginkanslia_tyollisyysavust.yml index 7d24e07b6b..b1bd2a72a9 100644 --- a/conf/cmi/language/sv/webform.webform.kaupunginkanslia_tyollisyysavust.yml +++ b/conf/cmi/language/sv/webform.webform.kaupunginkanslia_tyollisyysavust.yml @@ -88,7 +88,6 @@ elements: | 3: EU 4: Övrig 5: Fundament - 6: STEA '#title': Bidragsgivare issuer_name: '#title': 'Emittentens namn' @@ -122,7 +121,6 @@ elements: | 3: EU 4: Övrig 5: Fundament - 6: STEA '#title': Bidragsgivare issuer_name: '#title': 'Emittentens namn' diff --git a/conf/cmi/language/sv/webform.webform.kuva_projekti.yml b/conf/cmi/language/sv/webform.webform.kuva_projekti.yml index 2962bcbd20..16930ff1b1 100644 --- a/conf/cmi/language/sv/webform.webform.kuva_projekti.yml +++ b/conf/cmi/language/sv/webform.webform.kuva_projekti.yml @@ -107,7 +107,6 @@ elements: | 3: EU 4: Övrig 5: Fundament - 6: STEA '#title': Bidragsgivare issuer_name: '#title': 'Emittentens namn' diff --git a/conf/cmi/language/sv/webform.webform.kuva_toiminta.yml b/conf/cmi/language/sv/webform.webform.kuva_toiminta.yml index 417f267211..40d69cdbda 100644 --- a/conf/cmi/language/sv/webform.webform.kuva_toiminta.yml +++ b/conf/cmi/language/sv/webform.webform.kuva_toiminta.yml @@ -121,7 +121,6 @@ elements: | 3: EU 4: Övrig 5: Fundament - 6: STEA '#title': Bidragsgivare issuer_name: '#title': 'Emittentens namn' diff --git a/conf/cmi/language/sv/webform.webform.liikunta_laitosavustushakemus.yml b/conf/cmi/language/sv/webform.webform.liikunta_laitosavustushakemus.yml index 363a343e43..7c3b12d8d7 100644 --- a/conf/cmi/language/sv/webform.webform.liikunta_laitosavustushakemus.yml +++ b/conf/cmi/language/sv/webform.webform.liikunta_laitosavustushakemus.yml @@ -85,7 +85,6 @@ elements: | 3: EU 4: Övrig 5: Fundament - 6: STEA '#title': Bidragsgivare issuer_name: '#title': 'Emittentens namn' @@ -119,7 +118,6 @@ elements: | 3: EU 4: Övrig 5: Fundament - 6: STEA '#title': Bidragsgivare issuer_name: '#title': 'Emittentens namn' diff --git a/conf/cmi/language/sv/webform.webform.liikunta_toiminta_ja_tilankaytto.yml b/conf/cmi/language/sv/webform.webform.liikunta_toiminta_ja_tilankaytto.yml index 92016a206a..2acd6606d1 100644 --- a/conf/cmi/language/sv/webform.webform.liikunta_toiminta_ja_tilankaytto.yml +++ b/conf/cmi/language/sv/webform.webform.liikunta_toiminta_ja_tilankaytto.yml @@ -107,7 +107,6 @@ elements: | 3: EU 4: Övrig 5: Fundament - 6: STEA '#title': Bidragsgivare issuer_name: '#title': 'Emittentens namn' diff --git a/conf/cmi/language/sv/webform.webform.nuorisotoiminta_projektiavustush.yml b/conf/cmi/language/sv/webform.webform.nuorisotoiminta_projektiavustush.yml index d7cdb0433f..8e3c9497f4 100644 --- a/conf/cmi/language/sv/webform.webform.nuorisotoiminta_projektiavustush.yml +++ b/conf/cmi/language/sv/webform.webform.nuorisotoiminta_projektiavustush.yml @@ -86,7 +86,6 @@ elements: | 3: EU 4: Övrig 5: Fundament - 6: STEA '#title': Bidragsgivare issuer_name: '#title': 'Emittentens namn' @@ -119,7 +118,6 @@ elements: | 3: EU 4: Övrig 5: Fundament - 6: STEA '#title': Bidragsgivare issuer_name: '#title': 'Emittentens namn' diff --git a/conf/cmi/language/sv/webform.webform.nuortoimpalkka.yml b/conf/cmi/language/sv/webform.webform.nuortoimpalkka.yml index 67e710adc4..970d0e6993 100644 --- a/conf/cmi/language/sv/webform.webform.nuortoimpalkka.yml +++ b/conf/cmi/language/sv/webform.webform.nuortoimpalkka.yml @@ -86,7 +86,6 @@ elements: | 3: EU 4: Övrig 5: Fundament - 6: STEA '#title': Bidragsgivare issuer_name: '#title': 'Emittentens namn' @@ -120,7 +119,6 @@ elements: | 3: EU 4: Övrig 5: Fundament - 6: STEA '#title': Bidragsgivare issuer_name: '#title': 'Emittentens namn' diff --git a/conf/cmi/language/sv/webform.webform.taide_ja_kulttuuri_kehittamisavu.yml b/conf/cmi/language/sv/webform.webform.taide_ja_kulttuuri_kehittamisavu.yml index ecf8d4620c..62fdc5fe86 100644 --- a/conf/cmi/language/sv/webform.webform.taide_ja_kulttuuri_kehittamisavu.yml +++ b/conf/cmi/language/sv/webform.webform.taide_ja_kulttuuri_kehittamisavu.yml @@ -129,7 +129,6 @@ elements: | 3: EU 4: Övrig 5: Fundament - 6: STEA '#title': Bidragsgivare issuer_name: '#title': 'Emittentens namn' diff --git a/conf/cmi/language/sv/webform.webform.taide_ja_kulttuuriavustukset_tai.yml b/conf/cmi/language/sv/webform.webform.taide_ja_kulttuuriavustukset_tai.yml index 51e4b97aae..7327233be4 100644 --- a/conf/cmi/language/sv/webform.webform.taide_ja_kulttuuriavustukset_tai.yml +++ b/conf/cmi/language/sv/webform.webform.taide_ja_kulttuuriavustukset_tai.yml @@ -94,7 +94,6 @@ elements: | 3: EU 4: Övrig 5: Fundament - 6: STEA '#title': Bidragsgivare issuer_name: '#title': 'Emittentens namn' diff --git a/conf/cmi/language/sv/webform.webform.yleisavustushakemus.yml b/conf/cmi/language/sv/webform.webform.yleisavustushakemus.yml index 67f569e281..25fe61efc0 100644 --- a/conf/cmi/language/sv/webform.webform.yleisavustushakemus.yml +++ b/conf/cmi/language/sv/webform.webform.yleisavustushakemus.yml @@ -85,7 +85,6 @@ elements: | 3: EU 4: Övrig 5: Fundament - 6: STEA '#title': Bidragsgivare issuer_name: '#title': 'Emittentens namn' @@ -119,7 +118,6 @@ elements: | 3: EU 4: Övrig 5: Fundament - 6: STEA '#title': Bidragsgivare issuer_name: '#title': 'Emittentens namn' diff --git a/conf/cmi/language/sv/webform.webform.ymparistopalvelut_yleisavustus.yml b/conf/cmi/language/sv/webform.webform.ymparistopalvelut_yleisavustus.yml index 4832d6732a..c7fddcabfc 100644 --- a/conf/cmi/language/sv/webform.webform.ymparistopalvelut_yleisavustus.yml +++ b/conf/cmi/language/sv/webform.webform.ymparistopalvelut_yleisavustus.yml @@ -87,7 +87,6 @@ elements: | 3: EU 4: Övrig 5: Fundament - 6: STEA '#title': Bidragsgivare issuer_name: '#title': 'Emittentens namn' diff --git a/conf/cmi/webform.webform.asukasosallisuus_pienavustushake.yml b/conf/cmi/webform.webform.asukasosallisuus_pienavustushake.yml index 2fbfa8523a..e3583b6ee3 100644 --- a/conf/cmi/webform.webform.asukasosallisuus_pienavustushake.yml +++ b/conf/cmi/webform.webform.asukasosallisuus_pienavustushake.yml @@ -265,7 +265,6 @@ elements: |- 3: EU 4: Muu 5: Säätiö - 6: STEA '#required': true '#title': 'Avustuksen myöntäjä' issuer_name: @@ -354,7 +353,6 @@ elements: |- 3: EU 4: Muu 5: Säätiö - 6: STEA '#required': true '#title': 'Avustuksen myöntäjä' issuer_name: diff --git a/conf/cmi/webform.webform.asukasosallisuus_yleis_ja_toimin.yml b/conf/cmi/webform.webform.asukasosallisuus_yleis_ja_toimin.yml index 594b01da19..c7aa003840 100644 --- a/conf/cmi/webform.webform.asukasosallisuus_yleis_ja_toimin.yml +++ b/conf/cmi/webform.webform.asukasosallisuus_yleis_ja_toimin.yml @@ -271,7 +271,6 @@ elements: |- 3: EU 4: Muu 5: Säätiö - 6: STEA '#required': true '#title': 'Avustuksen myöntäjä' issuer_name: @@ -360,7 +359,6 @@ elements: |- 3: EU 4: Muu 5: Säätiö - 6: STEA '#required': true '#title': 'Avustuksen myöntäjä' issuer_name: diff --git a/conf/cmi/webform.webform.elderly_sports_and_culture.yml b/conf/cmi/webform.webform.elderly_sports_and_culture.yml index 727b1593c8..f47562bb05 100644 --- a/conf/cmi/webform.webform.elderly_sports_and_culture.yml +++ b/conf/cmi/webform.webform.elderly_sports_and_culture.yml @@ -351,7 +351,6 @@ elements: |- 3: EU 4: Muu 5: Säätiö - 6: STEA '#required': true '#title': 'Avustuksen myöntäjä' issuer_name: @@ -440,7 +439,6 @@ elements: |- 3: EU 4: Muu 5: Säätiö - 6: STEA '#required': true '#title': 'Avustuksen myöntäjä' issuer_name: diff --git a/conf/cmi/webform.webform.hyte_yleisavustus.yml b/conf/cmi/webform.webform.hyte_yleisavustus.yml index 75267ef5cd..2450bdf09a 100644 --- a/conf/cmi/webform.webform.hyte_yleisavustus.yml +++ b/conf/cmi/webform.webform.hyte_yleisavustus.yml @@ -309,7 +309,6 @@ elements: |- 3: EU 4: Muu 5: Säätiö - 6: STEA '#required': true '#title': 'Avustuksen myöntäjä' issuer_name: diff --git a/conf/cmi/webform.webform.kasvatus_ja_koulutus_toiminta_av.yml b/conf/cmi/webform.webform.kasvatus_ja_koulutus_toiminta_av.yml index 8ba573d9b5..4f44ff90a9 100644 --- a/conf/cmi/webform.webform.kasvatus_ja_koulutus_toiminta_av.yml +++ b/conf/cmi/webform.webform.kasvatus_ja_koulutus_toiminta_av.yml @@ -313,7 +313,6 @@ elements: |- 3: EU 4: Muu 5: Säätiö - 6: STEA '#required': true '#title': 'Avustuksen myöntäjä' issuer_name: diff --git a/conf/cmi/webform.webform.kasvatus_ja_koulutus_yleisavustu.yml b/conf/cmi/webform.webform.kasvatus_ja_koulutus_yleisavustu.yml index e9992f05fc..c0ff3ce26c 100644 --- a/conf/cmi/webform.webform.kasvatus_ja_koulutus_yleisavustu.yml +++ b/conf/cmi/webform.webform.kasvatus_ja_koulutus_yleisavustu.yml @@ -319,7 +319,6 @@ elements: |- 3: EU 4: Muu 5: Säätiö - 6: STEA '#required': true '#title': 'Avustuksen myöntäjä' issuer_name: diff --git a/conf/cmi/webform.webform.kaupunginkanslia_tyollisyysavust.yml b/conf/cmi/webform.webform.kaupunginkanslia_tyollisyysavust.yml index cb1c7ccd4e..1070f3f136 100644 --- a/conf/cmi/webform.webform.kaupunginkanslia_tyollisyysavust.yml +++ b/conf/cmi/webform.webform.kaupunginkanslia_tyollisyysavust.yml @@ -318,7 +318,6 @@ elements: |- 3: EU 4: Muu 5: Säätiö - 6: STEA '#required': true '#title': 'Avustuksen myöntäjä' issuer_name: @@ -407,7 +406,6 @@ elements: |- 3: EU 4: Muu 5: Säätiö - 6: STEA '#required': true '#title': 'Avustuksen myöntäjä' issuer_name: diff --git a/conf/cmi/webform.webform.kuva_projekti.yml b/conf/cmi/webform.webform.kuva_projekti.yml index b72a931f4b..c68ba11f3c 100644 --- a/conf/cmi/webform.webform.kuva_projekti.yml +++ b/conf/cmi/webform.webform.kuva_projekti.yml @@ -385,7 +385,6 @@ elements: |- 3: EU 4: Muu 5: Säätiö - 6: STEA '#required': true '#title': 'Avustuksen myöntäjä' issuer_name: diff --git a/conf/cmi/webform.webform.kuva_toiminta.yml b/conf/cmi/webform.webform.kuva_toiminta.yml index 8dd86f607e..b5978324ff 100644 --- a/conf/cmi/webform.webform.kuva_toiminta.yml +++ b/conf/cmi/webform.webform.kuva_toiminta.yml @@ -440,7 +440,6 @@ elements: |- 3: EU 4: Muu 5: Säätiö - 6: STEA '#required': true '#title': 'Avustuksen myöntäjä' issuer_name: diff --git a/conf/cmi/webform.webform.liikunta_laitosavustushakemus.yml b/conf/cmi/webform.webform.liikunta_laitosavustushakemus.yml index 7ee910e8df..219c12af33 100644 --- a/conf/cmi/webform.webform.liikunta_laitosavustushakemus.yml +++ b/conf/cmi/webform.webform.liikunta_laitosavustushakemus.yml @@ -322,7 +322,6 @@ elements: |- 3: EU 4: Muu 5: Säätiö - 6: STEA '#required': true '#title': 'Avustuksen myöntäjä' issuer_name: @@ -411,7 +410,6 @@ elements: |- 3: EU 4: Muu 5: Säätiö - 6: STEA '#required': true '#title': 'Avustuksen myöntäjä' issuer_name: diff --git a/conf/cmi/webform.webform.liikunta_toiminta_ja_tilankaytto.yml b/conf/cmi/webform.webform.liikunta_toiminta_ja_tilankaytto.yml index 31e6a61256..615a789c9c 100644 --- a/conf/cmi/webform.webform.liikunta_toiminta_ja_tilankaytto.yml +++ b/conf/cmi/webform.webform.liikunta_toiminta_ja_tilankaytto.yml @@ -452,7 +452,6 @@ elements: |- 3: EU 4: Muu 5: Säätiö - 6: STEA '#required': true '#title': 'Avustuksen myöntäjä' issuer_name: diff --git a/conf/cmi/webform.webform.nuorisotoiminta_projektiavustush.yml b/conf/cmi/webform.webform.nuorisotoiminta_projektiavustush.yml index 502b597395..063b7b2304 100644 --- a/conf/cmi/webform.webform.nuorisotoiminta_projektiavustush.yml +++ b/conf/cmi/webform.webform.nuorisotoiminta_projektiavustush.yml @@ -342,7 +342,6 @@ elements: |- 3: EU 4: Muu 5: Säätiö - 6: STEA '#required': true '#title': 'Avustuksen myöntäjä' issuer_name: @@ -429,7 +428,6 @@ elements: |- 3: EU 4: Muu 5: Säätiö - 6: STEA '#required': true '#title': 'Avustuksen myöntäjä' issuer_name: diff --git a/conf/cmi/webform.webform.nuortoimpalkka.yml b/conf/cmi/webform.webform.nuortoimpalkka.yml index df748255a8..345e7e1638 100644 --- a/conf/cmi/webform.webform.nuortoimpalkka.yml +++ b/conf/cmi/webform.webform.nuortoimpalkka.yml @@ -367,7 +367,6 @@ elements: |- 3: EU 4: Muu 5: Säätiö - 6: STEA '#required': true '#title': 'Avustuksen myöntäjä' issuer_name: @@ -456,7 +455,6 @@ elements: |- 3: EU 4: Muu 5: Säätiö - 6: STEA '#required': true '#title': 'Avustuksen myöntäjä' issuer_name: diff --git a/conf/cmi/webform.webform.performance_test_webform.yml b/conf/cmi/webform.webform.performance_test_webform.yml index 97e84dce4f..a64de203bb 100644 --- a/conf/cmi/webform.webform.performance_test_webform.yml +++ b/conf/cmi/webform.webform.performance_test_webform.yml @@ -125,7 +125,6 @@ elements: |- 3: EU 4: Muu 5: Säätiö - 6: STEA '#required': true '#title': 'Avustuksen myöntäjä' issuer_name: @@ -214,7 +213,6 @@ elements: |- 3: EU 4: Muu 5: Säätiö - 6: STEA '#required': true '#title': 'Avustuksen myöntäjä' issuer_name: diff --git a/conf/cmi/webform.webform.taide_ja_kulttuuri_kehittamisavu.yml b/conf/cmi/webform.webform.taide_ja_kulttuuri_kehittamisavu.yml index 0da0e95333..de9456b7e7 100644 --- a/conf/cmi/webform.webform.taide_ja_kulttuuri_kehittamisavu.yml +++ b/conf/cmi/webform.webform.taide_ja_kulttuuri_kehittamisavu.yml @@ -363,7 +363,6 @@ elements: |- 3: EU 4: Muu 5: Säätiö - 6: STEA '#required': true '#title': 'Avustuksen myöntäjä' issuer_name: diff --git a/conf/cmi/webform.webform.taide_ja_kulttuuriavustukset_tai.yml b/conf/cmi/webform.webform.taide_ja_kulttuuriavustukset_tai.yml index 85d272c137..7387ded3b7 100644 --- a/conf/cmi/webform.webform.taide_ja_kulttuuriavustukset_tai.yml +++ b/conf/cmi/webform.webform.taide_ja_kulttuuriavustukset_tai.yml @@ -346,7 +346,6 @@ elements: |- 3: EU 4: Muu 5: Säätiö - 6: STEA '#required': true '#title': 'Avustuksen myöntäjä' issuer_name: diff --git a/conf/cmi/webform.webform.ymparistopalvelut_yleisavustus.yml b/conf/cmi/webform.webform.ymparistopalvelut_yleisavustus.yml index f310eb36ec..9d57d1198c 100644 --- a/conf/cmi/webform.webform.ymparistopalvelut_yleisavustus.yml +++ b/conf/cmi/webform.webform.ymparistopalvelut_yleisavustus.yml @@ -314,7 +314,6 @@ elements: |- 3: EU 4: Muu 5: Säätiö - 6: STEA '#required': true '#title': 'Avustuksen myöntäjä' issuer_name: diff --git a/public/modules/custom/grants_handler/grants_handler.module b/public/modules/custom/grants_handler/grants_handler.module index ca838b7b9e..d8680f8d66 100644 --- a/public/modules/custom/grants_handler/grants_handler.module +++ b/public/modules/custom/grants_handler/grants_handler.module @@ -648,6 +648,31 @@ function _grants_handler_alter_number_fields(&$element): void { } } +/** + * Function to update custom component dropdown value rather than via config. + * + * @param array $form + * The form. + * + * @return void + * No return? + */ +function grants_handler__update_issuer_dropdown(array &$form): void { + + $tOpts = ['context' => 'Grant Issuers']; + + $newOptions = [ + 1 => t('State', [], $tOpts), + 3 => t('EU', [], $tOpts), + 4 => t('Other', [], $tOpts), + 5 => t('Foundation', [], $tOpts), + ]; + + // Call the method with multiple field names. + ApplicationHelpers::updateFieldOptions($form, $newOptions, ['myonnetty_avustus', 'issuer']); + ApplicationHelpers::updateFieldOptions($form, $newOptions, ['haettu_avustus_tieto', 'issuer']); +} + /** * Implements hook_form_FORM_ID_alter(). */ @@ -667,6 +692,7 @@ function grants_handler_webform_submission_form_alter(&$form, FormStateInterface $form['actions']['wizard_next']['#validate'][] = '::noValidate'; _grants_handler_alter_number_fields($form); + grants_handler__update_issuer_dropdown($form); $grants_formnavigation_helper = \Drupal::service('grants_handler.navigation_helper'); $all_errors = []; diff --git a/public/modules/custom/grants_handler/phpunit.xml b/public/modules/custom/grants_handler/phpunit.xml index fd7672ac52..ec1307b36e 100644 --- a/public/modules/custom/grants_handler/phpunit.xml +++ b/public/modules/custom/grants_handler/phpunit.xml @@ -1,44 +1,47 @@ - - - - - - - - - - - ./tests/src/Kernel - - - - - - - - - ./src - ./*.module - - - - - - + xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/9.5/phpunit.xsd" + bootstrap="../../../core/tests/bootstrap.php" + colors="true" + cacheResultFile=".phpunit.cache/test-results" + executionOrder="depends,defects" + forceCoversAnnotation="true" + beStrictAboutTestsThatDoNotTestAnything="true" + beStrictAboutOutputDuringTests="true" + beStrictAboutChangesToGlobalState="true" + beStrictAboutCoversAnnotation="true" + printerClass="\Drupal\Tests\Listeners\HtmlOutputPrinter" + failOnRisky="true" + failOnWarning="true" + verbose="true"> + + + + + + + + + + + ./tests/src/Kernel + + + ./tests/src/Unit + + + + + + + + + ./src + ./*.module + + + + + + diff --git a/public/modules/custom/grants_handler/src/ApplicationGetterService.php b/public/modules/custom/grants_handler/src/ApplicationGetterService.php index 8e04eb45ee..0372e01b86 100644 --- a/public/modules/custom/grants_handler/src/ApplicationGetterService.php +++ b/public/modules/custom/grants_handler/src/ApplicationGetterService.php @@ -336,7 +336,7 @@ public function submissionObjectFromApplicationNumber( } // Load definition. - $dataDefinition = ApplicationHelpers::getDataDefinition($document->getType()); + $dataDefinition = $this->getDataDefinition($document->getType()); // Build data. $sData = DocumentContentMapper::documentContentToTypedData( @@ -357,6 +357,18 @@ public function submissionObjectFromApplicationNumber( return $submissionObject; } + /** + * Get data definition class from application type. + * + * @param string $type + * Type of the application. + */ + public function getDataDefinition(string $type) { + $defClass = Helpers::getApplicationTypes()[$type]['dataDefinition']['definitionClass']; + $defId = Helpers::getApplicationTypes()[$type]['dataDefinition']['definitionId']; + return $defClass::create($defId); + } + /** * Extract webform id from application number string. * diff --git a/public/modules/custom/grants_handler/src/ApplicationHelpers.php b/public/modules/custom/grants_handler/src/ApplicationHelpers.php index ae7ca2219e..110f4c5a6e 100644 --- a/public/modules/custom/grants_handler/src/ApplicationHelpers.php +++ b/public/modules/custom/grants_handler/src/ApplicationHelpers.php @@ -35,11 +35,12 @@ public static function createApplicationNumber(WebformSubmission &$submission, $ $appParam = Helpers::getAppEnv(); $serial = $submission->serial(); - $applicationType = $submission->getWebform() - ->getThirdPartySetting('grants_metadata', 'applicationType'); - $applicationTypeId = $submission->getWebform() - ->getThirdPartySetting('grants_metadata', 'applicationTypeID'); + $webform = $submission->getWebform(); + $third_party_settings = $webform->getThirdPartySettings('grants_metadata'); + + $applicationType = $third_party_settings['applicationType'] ?? NULL; + $applicationTypeId = $third_party_settings['applicationTypeID'] ?? NULL; if ($useOldFormat) { return self::getApplicationNumberInEnvFormatOldFormat($appParam, $applicationType, $serial); @@ -67,8 +68,10 @@ public static function getAvailableApplicationNumber(WebformSubmission &$submiss $appParam = Helpers::getAppEnv(); $serial = $submission->serial(); $webform_id = $submission->getWebform()->id(); - $applicationTypeId = $submission->getWebform() - ->getThirdPartySetting('grants_metadata', 'applicationTypeID'); + + $thirdPartySettings = $submission->getWebform()->getThirdPartySettings('grants_metadata'); + + $applicationTypeId = $thirdPartySettings['applicationTypeID'] ?? NULL; $lastSerialKey = $applicationTypeId . '_' . $appParam; $kvService = \Drupal::service('keyvalue.database'); @@ -120,7 +123,7 @@ public static function getAvailableApplicationNumber(WebformSubmission &$submiss /** * Format application number based by the enviroment. */ - private static function getApplicationNumberInEnvFormat($appParam, $typeId, $serial): string { + protected static function getApplicationNumberInEnvFormat($appParam, $typeId, $serial): string { $applicationNumber = $appParam . '-' . str_pad($typeId, 3, '0', STR_PAD_LEFT) . '-' . str_pad($serial, 7, '0', STR_PAD_LEFT); @@ -136,7 +139,7 @@ private static function getApplicationNumberInEnvFormat($appParam, $typeId, $ser /** * Format application number based by the enviroment in old format. */ - private static function getApplicationNumberInEnvFormatOldFormat($appParam, $typeId, $serial): string { + protected static function getApplicationNumberInEnvFormatOldFormat($appParam, $typeId, $serial): string { $applicationNumber = 'GRANTS-' . $appParam . '-' . $typeId . '-' . sprintf('%08d', $serial); if ($appParam == 'PROD') { @@ -185,7 +188,9 @@ public static function hasBreakingChangesInNewerVersion(Webform $webform): bool return $map[$uuid]; } - $applicationType = $webform->getThirdPartySetting('grants_metadata', 'applicationType'); + $thirdPartySettingsWebform = $webform->getThirdPartySettings('grants_metadata'); + + $applicationType = $thirdPartySettingsWebform['applicationType'] ?? NULL; $latestApplicationForm = self::getLatestApplicationForm($applicationType); @@ -194,8 +199,9 @@ public static function hasBreakingChangesInNewerVersion(Webform $webform): bool return FALSE; } - $parent = $latestApplicationForm->getThirdPartySetting('grants_metadata', 'parent'); - $hasBreakingChanges = $latestApplicationForm->getThirdPartySetting('grants_metadata', 'avus2BreakingChange'); + $thirdPartySettingsLatest = $webform->getThirdPartySettings('grants_metadata'); + $parent = $thirdPartySettingsLatest['parent'] ?? NULL; + $hasBreakingChanges = $thirdPartySettingsLatest['avus2BreakingChange'] ?? NULL; while (!empty($parent)) { $map[$parent] = $hasBreakingChanges; @@ -207,12 +213,14 @@ public static function hasBreakingChangesInNewerVersion(Webform $webform): bool ]); $wf = reset($loaded_webform); - $parent = $wf->getThirdPartySetting('grants_metadata', 'parent'); + + $thirdPartySettingsLatest = $wf->getThirdPartySettings('grants_metadata'); + $parent = $thirdPartySettingsLatest['parent'] ?? NULL; // No need to check the flag, // if we already have a newer version with breaking changes. if (!$hasBreakingChanges) { - $hasBreakingChanges = $wf->getThirdPartySetting('grants_metadata', 'avus2BreakingChange'); + $hasBreakingChanges = $thirdPartySettingsLatest['avus2BreakingChange'] ?? NULL; } } @@ -280,18 +288,6 @@ public static function getWebformFromApplicationNumber(string $applicationNumber return reset($webform); } - /** - * Get data definition class from application type. - * - * @param string $type - * Type of the application. - */ - public static function getDataDefinition(string $type) { - $defClass = Helpers::getApplicationTypes()[$type]['dataDefinition']['definitionClass']; - $defId = Helpers::getApplicationTypes()[$type]['dataDefinition']['definitionId']; - return $defClass::create($defId); - } - /** * Tries to find latest webform for given application ID. * @@ -391,4 +387,44 @@ public static function isApplicationWebformDuplicatable(string $id, string $form return count($applicationForms['released']) <= 1 && count($applicationForms['development']) === 0; } + /** + * Update field options in a form array. + * + * This method is used to update the options of a field in a form array. + * + * @param array $form + * The form array. + * @param array $newOptions + * The new options to set. + * @param array $fieldStructure + * The structure of the field. + */ + public static function updateFieldOptions(array &$form, array $newOptions, array $fieldStructure): void { + $currentField = &$form; + + // Traverse the form array based on the field structure. + foreach ($fieldStructure as $fieldName) { + if (isset($currentField[$fieldName])) { + $currentField = &$currentField[$fieldName]; + } + elseif (isset($currentField['#element'][$fieldName])) { + $currentField = &$currentField['#element'][$fieldName]; + } + else { + // If the field is not found, continue searching recursively. + foreach ($currentField as &$subField) { + if (is_array($subField)) { + self::updateFieldOptions($subField, $newOptions, $fieldStructure); + } + } + return; + } + } + + // Update the #options if the field with '#options' is found. + if (isset($currentField['#options'])) { + $currentField['#options'] = $newOptions; + } + } + } diff --git a/public/modules/custom/grants_handler/tests/src/Unit/ApplicationHelpersExposed.php b/public/modules/custom/grants_handler/tests/src/Unit/ApplicationHelpersExposed.php new file mode 100644 index 0000000000..4837bd0c16 --- /dev/null +++ b/public/modules/custom/grants_handler/tests/src/Unit/ApplicationHelpersExposed.php @@ -0,0 +1,46 @@ + [ + "2_avustustiedot" => [ + "muut_samaan_tarkoitukseen_myonnetyt_avustukset" => [ + "myonnetty_avustus" => [ + "#element" => [ + "issuer" => [ + "#options" => [], + ], + ], + ], + ], + "muut_samaan_tarkoitukseen_haetut_avustukset" => [ + "haettu_avustus_tieto" => [ + "#element" => [ + "issuer" => [ + "#options" => [], + ], + ], + ], + ], + ], + ], + ]; + + $fieldStructureMyonnetty = [ + 'myonnetty_avustus', + 'issuer', + ]; + + $fieldStructureHaettu = [ + 'haettu_avustus_tieto', + 'issuer', + ]; + + $newOptions = [ + 1 => 'State', + 3 => 'EU', + 4 => 'Other', + 5 => 'Foundation', + ]; + + // Test with a single field name. + ApplicationHelpers::updateFieldOptions($form, $newOptions, $fieldStructureMyonnetty); + $this->assertEquals($newOptions, + $form['elements']['2_avustustiedot']['muut_samaan_tarkoitukseen_myonnetyt_avustukset']['myonnetty_avustus']['#element']['issuer']['#options']); + + ApplicationHelpers::updateFieldOptions($form, $newOptions, $fieldStructureHaettu); + $this->assertEquals($newOptions, + $form['elements']['2_avustustiedot']['muut_samaan_tarkoitukseen_haetut_avustukset']['haettu_avustus_tieto']['#element']['issuer']['#options']); + + } + + /** + * Test the createApplicationNumber method. + * + * @covers ::createApplicationNumber + * @covers ::getApplicationNumberInEnvFormat + * @covers ::getApplicationNumberInEnvFormatOldFormat + * @covers \Drupal\grants_handler\Helpers::getAppEnv + */ + public function testCreateApplicationNumber() { + // Set the environment variable to the expected value. + putenv('APP_ENV=ENV'); + + $webform = $this->createMock(Webform::class); + $webform->method('getThirdPartySettings') + ->will($this->onConsecutiveCalls( + [ + 'applicationType' => 'TYPE', + 'applicationTypeID' => '001', + ], + [ + 'applicationType' => 'TYPE', + 'applicationTypeID' => '001', + ], + [ + 'applicationType' => 'TYPE', + 'applicationTypeID' => '001', + ], + [ + 'applicationType' => 'TYPE', + 'applicationTypeID' => '001', + ], + [ + 'applicationType' => 'NEWTYPE', + 'applicationTypeID' => '002', + ] + )); + + $submission = $this->createMock(WebformSubmission::class); + $submission->method('serial')->will($this->onConsecutiveCalls(123, 123, 456, 456, 456, 456)); + $submission->method('getWebform')->willReturn($webform); + + // Ensure the method is called with the correct parameters. + $this->assertEquals('ENV-001-0000123', ApplicationHelpers::createApplicationNumber($submission, FALSE)); + $this->assertEquals('GRANTS-ENV-TYPE-00000123', ApplicationHelpers::createApplicationNumber($submission, TRUE)); + + // Test with different serial numbers. + $this->assertEquals('ENV-001-0000456', ApplicationHelpers::createApplicationNumber($submission, FALSE)); + $this->assertEquals('GRANTS-ENV-TYPE-00000456', ApplicationHelpers::createApplicationNumber($submission, TRUE)); + + $this->assertEquals('ENV-002-0000456', ApplicationHelpers::createApplicationNumber($submission, FALSE)); + } + + /** + * Test the getSerialFromApplicationNumber method. + * + * @covers ::getSerialFromApplicationNumber + */ + public function testGetSerialFromApplicationNumber() { + $applicationNumber = 'ENV-001-0000123'; + $result = ApplicationHelpers::getSerialFromApplicationNumber($applicationNumber); + $this->assertEquals('123', $result); + + // Test with invalid application number. + $applicationNumber = 'INVALID45633465'; + $result = ApplicationHelpers::getSerialFromApplicationNumber($applicationNumber); + $this->assertEquals($result, $applicationNumber); + } + + /** + * @covers ::getApplicationNumberInEnvFormat + */ + public function testGetApplicationNumberInEnvFormat() { + $appParam = 'ENV'; + $typeId = '001'; + $serial = 123; + + $expected = 'ENV-001-0000123'; + $this->assertEquals($expected, ApplicationHelpersExposed::exposedGetApplicationNumberInEnvFormat($appParam, $typeId, $serial)); + + $appParam = 'PROD'; + $expected = '001-0000123'; + $this->assertEquals($expected, ApplicationHelpersExposed::exposedGetApplicationNumberInEnvFormat($appParam, $typeId, $serial)); + } + + /** + * @covers ::getApplicationNumberInEnvFormatOldFormat + */ + public function testGetApplicationNumberInEnvFormatOldFormat() { + $appParam = 'ENV'; + $typeId = 'TYPE'; + $serial = 123; + + $expected = 'GRANTS-ENV-TYPE-00000123'; + $this->assertEquals($expected, ApplicationHelpersExposed::exposedGetApplicationNumberInEnvFormatOldFormat($appParam, $typeId, $serial)); + + $appParam = 'PROD'; + $expected = 'GRANTS-TYPE-00000123'; + $this->assertEquals($expected, ApplicationHelpersExposed::exposedGetApplicationNumberInEnvFormatOldFormat($appParam, $typeId, $serial)); + } + + /** + * Test the hasBreakingChangesInNewerVersion method. + * + * @covers ::hasBreakingChangesInNewerVersion + * @covers Drupal\grants_handler\ApplicationHelpers::getLatestApplicationForm + */ + public function testHasBreakingChangesInNewerVersion() { + // Mock the Webform entity. + $webform = $this->createMock(Webform::class); + $webform->method('uuid')->willReturn('parent-uuid'); + $webform->method('getThirdPartySettings') + ->with('grants_metadata') + ->will($this->onConsecutiveCalls( + [ + 'applicationType' => 'test-application-type', + ], + [ + 'parent' => 'parent-uuid', + 'avus2BreakingChange' => TRUE, + ], + [ + 'parent' => 'parent-uuid', + 'avus2BreakingChange' => TRUE, + ], + [ + 'parent' => 'parent-uuid', + 'avus2BreakingChange' => TRUE, + ], + [ + 'parent' => 'parent-uuid', + 'avus2BreakingChange' => TRUE, + ] + )); + + // Mock the entity type manager and storage. + $entityTypeManager = $this->createMock('Drupal\Core\Entity\EntityTypeManagerInterface'); + $webformStorage = $this->createMock('Drupal\Core\Entity\EntityStorageInterface'); + $entityTypeManager->method('getStorage') + ->with('webform') + ->willReturn($webformStorage); + + // Mock the loading of webforms. + $webformStorage->method('loadByProperties') + ->willReturn([$webform]); + + // Set the entity type manager service. + \Drupal::setContainer(new ContainerBuilder()); + \Drupal::getContainer()->set('entity_type.manager', $entityTypeManager); + + // Call the method and assert the result. + $result = ApplicationHelpers::hasBreakingChangesInNewerVersion($webform); + $this->assertTrue($result); + + } + + /** + * Test the getAvailableApplicationNumber method. + * + * @covers \Drupal\grants_handler\ApplicationHelpers::getAvailableApplicationNumber + */ + public function testGetAvailableApplicationNumber() { + + // Can't get this one to work... + } + +} diff --git a/public/modules/custom/grants_handler/tests/src/Unit/ApplicationValidatorTest.php b/public/modules/custom/grants_handler/tests/src/Unit/ApplicationValidatorTest.php index 4fc471b54e..6c96fbeb83 100644 --- a/public/modules/custom/grants_handler/tests/src/Unit/ApplicationValidatorTest.php +++ b/public/modules/custom/grants_handler/tests/src/Unit/ApplicationValidatorTest.php @@ -70,6 +70,11 @@ protected function setUp(): void { /** * Test for validateApplication. + * + * @covers \Drupal\grants_handler\ApplicationValidator::processViolation + * @covers \Drupal\grants_handler\ApplicationValidator::__construct + * @covers \Drupal\grants_handler\ApplicationValidator::handleOtherViolation + * @covers \Drupal\grants_handler\ApplicationValidator::handleViolation */ public function testProcessViolation(): void { $violation = $this->createMock(ConstraintViolationInterface::class); From 6b0bb682f99552353df87be65b0298414e98fc6a Mon Sep 17 00:00:00 2001 From: rpnykanen <48206082+rpnykanen@users.noreply.github.com> Date: Thu, 14 Nov 2024 07:41:33 +0200 Subject: [PATCH 40/74] fix: UHF-10711: New form changes (#1560) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * UHF-10711: remove duplicate title * UHF-10711: date format from c which is datetime, to Y-m-d * UHF-10711: added missing 3.5 fields * UHF-10711: added the mappings * UHF-10711: langcode fi because we have to * UHF-10711: sv translation * UHF-10711: finnish translation * UHF-10711: rename the form * UHF-10711: small changes * UHF-10711: update the configuration with translation * UHF-10711: remove brs * UHF-10711: added summa fields * UHF-10711: remove wrong configuration, added texts / requirements in correct form * UHF-10711: added tulo and meno sv translation * UHF-10711: more sv translations * UHF-10711: more translations including english * UHF-10711: useless comment * UHF-10711: tweak translations * UHF-10711: Fix data type on other hidden field & remove required status from one * UHF-10711: Add new booleanish to Kyllä/Ei converter and use it for fields. * UHF-10711: Typo * UHF-10711: PHPCS * UHF-10711: Add ensisijainen taiteenala field. --------- Co-authored-by: Janne Suominen --- ...ebform.iakkaiden_kulttuuri_ja_liikunta.yml | 312 ++++ ...orm.webform.elderly_sports_and_culture.yml | 58 + ...ebform.iakkaiden_kulttuuri_ja_liikunta.yml | 313 ++++ ...orm.webform.elderly_sports_and_culture.yml | 105 +- ...ebform.iakkaiden_kulttuuri_ja_liikunta.yml | 1438 +++++++++++++++++ .../src/GrantsConverterService.php | 40 + .../Definition/KuvaErillisDefinition.php | 48 +- tools/http/http-client.env.json | 2 +- 8 files changed, 2290 insertions(+), 26 deletions(-) create mode 100644 conf/cmi/language/en/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml create mode 100644 conf/cmi/language/fi/webform.webform.elderly_sports_and_culture.yml create mode 100644 conf/cmi/language/sv/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml create mode 100644 conf/cmi/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml diff --git a/conf/cmi/language/en/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml b/conf/cmi/language/en/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml new file mode 100644 index 0000000000..0fa0190c3a --- /dev/null +++ b/conf/cmi/language/en/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml @@ -0,0 +1,312 @@ +title: 'KUVA: Culture grant for advancing cultural activities for the elderly' +elements: | + 1_hakijan_tiedot: + '#title': '1. Applicant details' + '#prev_button_label': 'Previous' + '#next_button_label': 'Next' + hakemusprofiili: + '#title': 'Retrieved information' + prh_markup: + '#markup': 'The information has been retrieved from your own profile.' + hakijan_tiedot: + '#title': 'Applicant' + contact_person_email_section: + '#title': Email + contact_markup: + '#markup': 'Provide here a community email address that is actively read. Contact requests related to the grant application, such as requests for further clarification and completion, will be sent to the email address.' + email: + '#title': 'Email address' + '#help': 'Provide the email address to which you want the messages and notifications related to this application to be sent and which is actively read.' + contact_person_section: + '#title': 'Contact person for the application' + contact_person: + '#title': 'Contact person' + contact_person_phone_number: + '#title': 'Phone number' + osoite: + '#title': Address + community_address: + '#title': Address + '#help': 'If you want to add, delete or change address information, save the application as a draft and go to maintain the address information in your own data.' + '#community_address_select__title': 'Select the address' + tilinumero: + '#title': 'Account number' + bank_account: + '#title': 'Account number' + '#help': 'If you want to add, delete or change account number information, save the application as a draft and go to maintain the account number information in your own data.' + '#account_number_select__title': 'Select the account number' + '#account_number__title': '' + toiminnasta_vastaavat_henkilot: + '#title': 'Persons responsible for operations' + community_officials: + '#help': 'If you want to add, delete or change people, save the application as a draft and go to maintain the people's information in your own data.' + '#title': 'Persons responsible for operations' + '#multiple__add_more_button_label': 'Add person' + '#community_officials_select__title': 'Select official' + '#role__title': Role + '#email__title': 'Email address' + '#phone__title': 'Phone number' + 2_avustustiedot: + '#title': '2. Grant details' + avustuksen_tiedot: + '#title': 'Grant details' + acting_year: + '#title': 'Year for which I am applying for a grant' + avustuslajit: + '#title': 'Types of grant' + subventions: + '#title': Grants + kayttotarkoitus: + '#title': 'Purpose of use' + compensation_purpose: + '#title': 'Brief description of the purpose(s) of the grant(s) applied for' + '#counter_maximum_message': '%d/5000 characters remaining' + other_grants_for_same_purpose: + '#title': 'Other grants applied for to be used for the same purpose' + info_muut_samaan_tarkoitukseen_myonnetty: + '#markup': '

Indicate here only the grants received from somewhere other than the City of Helsinki in the current and two previous tax years.

An affirmative answer opens a further question
' + olemme_saaneet_muita_avustuksia: + '#title': 'We have received other grants' + '#options': + 1: 'Yes' + 0: 'No' + myonnetty_avustus: + '#title': 'Received grant' + '#multiple__no_items_message': 'No values entered. Add the new grant granted below.' + '#multiple__add_more_button_label': 'Add received grant' + '#element': + issuer: + '#options': + 1: State + 4: Other + 5: Foundation + '#title': 'Grant issuer' + issuer_name: + '#title': 'Issuer''s name' + '#help': 'Which body has granted the grant (e.g. name of the ministry)' + year: + '#title': Year + '#pattern_error': 'Only numbers' + amount: + '#title': 'Amount of grant granted' + purpose: + '#title': 'Description of intended use' + '#help': 'Give a brief description, for what purpose has the grant been granted?' + '#counter_maximum_message': '%d/1000 characters remaining' + muut_samaan_tarkoitukseen_haetut_avustukset: + '#title': 'Other grants applied for to be used for the same purpose' + info_muut_samaan_tarkoitukseen_haettu: + '#markup': "

Indicate here only the grants that have been applied for from somewhere other than the City of Helsinki and for which the decisions have not been made yet.

\r\n\r\n
\r\n
\r\n
An affirmative answer opens a further question
\r\n
\r\n
\r\n" + olemme_hakeneet_avustuksia_muualta_kuin_helsingin_kaupungilta: + '#title': 'We have applied for grants from somewhere other than the City of Helsinki' + '#options': + 1: 'Yes' + 0: 'No' + haettu_avustus_tieto: + '#title': 'Add new grant applied for' + '#multiple__no_items_message': 'No values entered. Add a new applied for grant below.' + '#multiple__add_more_button_label': 'Add new grant applied for' + '#element': + issuer: + '#options': + 1: State + 4: Other + 5: Foundation + '#title': 'Grant issuer' + issuer_name: + '#title': 'Issuer''s name' + '#help': 'Which entity has granted the grant (e.g. name of the ministry)' + year: + '#title': Year + '#pattern_error': 'Only numbers' + amount: + '#title': 'The amount of the grant applied for' + purpose: + '#title': 'Description of intended use' + '#help': 'Give a brief description, for what purpose has the grant been granted?' + '#counter_maximum_message': '%d/1000 characters remaining' + 3_tarkemmat_tiedot: + '#title': '3. Information in more detail' + hankesuunnitelma_radios: + '#title': 'Is the 2nd part of the grant awarded in 2024 now being applied for?' + '#help': 'Only answer “yes” to this question if your community already has an ongoing project funded by the same grant and you are applying for additional funding for it.' + '#options': + 1: 'Yes' + 0: 'No' + ensisijainen_taiteen_ala: + '#title': 'Primary field of art' + '#help': '

Choose the option that best describes your activities.

' + '#options': + 'Design ja käsityö': 'Design and crafts' + 'Elokuva, valokuva ja media': 'Film, photography and media' + Kaupunkikulttuuri: 'Urban art and culture' + Kirjallisuus: Literature + 'Kuvataide ja sarjakuva': 'Visual arts and comics' + Monitaide: 'Multidisciplinary art' + Museo: Museum + Musiikki: Music + Muu: Other + Sirkus: Circus + Tanssi: Dance + Teatteri: Theatre + hankesuunnitelma_section: + '#title': '3.1 Project plan' + hankesuunnitelma_jatkohakemus: + '#title': 'Is the grant to be applied for a renewal application for an ongoing project?' + '#options': + 1: 'Yes' + 0: 'No' + hankkeen_tarkoitus_tavoitteet: + '#title': 'Purpose and goals of the project' + '#counter_maximum_message': '%d/2500 characters remaining' + hankkeen_toimenpiteet_aikataulu: + '#title': 'What are the concrete measures of the project and the schedule for their implementation?' + '#counter_maximum_message': '%d/4000 characters remaining' + hankkeen_toimenpiteet_toteutus: + '#title': 'The concrete measures of the project are to be implemented between' + hankkeen_toimenpiteet_alkupvm: + '#title': 'Start date' + hankkeen_toimenpiteet_loppupvm: + '#title': 'End date' + hankkeen_keskeisimmat_kumppanit: + '#title': 'Specify the main partners of the project and their role in the project' + '#counter_maximum_message': '%d/2500 characters remaining' + haun_painopisteet_section: + '#title': '3.2 Emphases of the grant program' + haun_painopisteet_ohje: + '#markup': 'Which of the following areas of emphasis of the grant for the promotion of sport and physical activity for the elderly does the project cover?

One or more areas must be implemented in the project. PLEASE NOTE: Only select the areas that you will contribute to in the project in a concrete way.

' + haun_painopisteet_liikkumis_kehitys: + '#title': 'Does the project develop sport and physical activity opportunities or art and cultural activities in the immediate environment / area? How?' + '#counter_maximum_message': '%d/1250 characters remaining' + haun_painopisteet_digi_kehitys: + '#title': 'Does the project develop digital / remote cultural activities or activities that encourage people to exercise? How?' + '#counter_maximum_message': '%d/1250 characters remaining' + haun_painopisteet_vertais_kehitys: + '#title': 'Does the project develop volunteering / peer activities? How?' + '#counter_maximum_message': '%d/1250 characters remaining' + haun_painopisteet_kulttuuri_kehitys: + '#title': 'Does the project develop the skills of art and cultural operators or create new working methods / structures? How?' + '#counter_maximum_message': '%d/1250 characters remaining' + hankkeen_kohderyhmat_section: + '#title': '3.3 Project target groups' + hankkeen_kohderyhmat_kenelle: + '#title': 'Who is the project primarily aimed at?' + '#counter_maximum_message': '%d/1250 characters remaining' + hankkeen_kohderyhmat_erityisryhmat: + '#title': 'Does the project target a special group?' + '#counter_maximum_message': '%d/1250 characters remaining' + hankkeen_kohderyhmat_tavoitus: + '#title': 'How will the target groups of the project be reached?' + '#counter_maximum_message': '%d/1250 characters remaining' + hankkeen_kohderyhmat_konkretia: + '#title': 'How will the project promote the functional capacity and well-being of the selected target group with concrete measures?' + '#counter_maximum_message': '%d/1250 characters remaining' + hankkeen_kohderyhmat_osallisuus: + '#title': 'How does the project promote inclusion? What is the role of elderly people in the project?' + '#counter_maximum_message': '%d/1250 characters remaining' + hankkeen_kohderyhmat_osaaminen: + '#title': 'What kind of expertise do the project operators already have in working with the target group(s) in question?' + '#counter_maximum_message': '%d/1250 characters remaining' + hankkeen_kohderyhmat_postinrot: + '#title': 'In which postal code area(s) in Helsinki will the project be implemented?' + hankkeen_kohderyhmat_miksi_alue: + '#title': 'Why is/are that particular area(s) selected?' + '#counter_maximum_message': '%d/1250 characters remaining' + hankkeen_riskit_section: + '#title': '3.4 Risks and analysis' + hankkeen_riskit_keskeisimmat: + '#title': 'What are the main risks from the point of view of project implementation?' + '#counter_maximum_message': '%d/2500 characters remaining' + hankkeen_riskit_seuranta: + '#title': 'How will monitoring and evaluation be carried out in the project?' + '#counter_maximum_message': '%d/2500 characters remaining' + hankkeen_riskit_vakiinnuttaminen: + '#title': 'Will the intended project activity be established as part of the basic activity of the applicant/other operator after the project? If yes, please describe in the text field how it will be established, otherwise leave the field blank.' + '#counter_maximum_message': '%d/2500 characters remaining' + hankkeen_valiarviointi_section: + '#title': '3.5 Mid-term evaluation of 2-year projects' + arviointi_markup: + '#markup': '

In this section, evaluate the activities of the project so far using the following questions. Applicants for the 2nd part of the grant must also attach to the application a cost centre report under “Other appendix” for the period 1 June - 31 December 2024.

' + arviointi_toteuma: + '#title': 'Has the project progressed according to plan? Please rate the project implementation so far on a scale of 1- 100% and justify your response.' + '#counter_maximum_message': '%d/1250 characters remaining' + arviointi_muutokset_markup: + '#markup': '

Have there been significant changes in the project?

' + arviointi_muutokset_talous: + '#title': 'In terms of economy; please specify' + '#counter_maximum_message': '%d/1250 characters remaining' + arviointi_muutokset_toiminta: + '#title': 'In terms of activity; please specify' + '#counter_maximum_message': '%d/1250 characters remaining' + arviointi_muutokset_aikataulu: + '#title': 'In terms of schedule; please specify' + '#counter_maximum_message': '%d/1250 characters remaining' + arviointi_haasteet: + '#title': 'Has the project faced operational challenges? If so, what type of challenges?' + '#counter_maximum_message': '%d/1250 characters remaining' + arviointi_saavutettavuus: + '#title': 'How have the activities reached the participants in relation to the goals?' + '#counter_maximum_message': '%d/1250 characters remaining' + arviointi_avustus_kaytto: + '#title': 'Is the grant for the first project period expected to be used by the deadline of 31 May 2025? If not, please explain the reasons that led to this.' + '#help': '

Grant conditions, section 10e: “A grant that has been granted must be returned to the City of Helsinki, the grant has not been used within the period as set down in the grant decision.”

' + '#counter_maximum_message': '%d/1250 characters remaining' + 4_talousarvio: + '#title': '4. Planned budget' + tulot_section: + '#title': '4.1 Incomes' + tulot: + '#title': Incomes + '#compensation__title': 'The applied grant (€)' + '#plannedOtherCompensations__title': 'Other grants (€)' + '#sales__title': 'Other incomes (€)' + '#ownFunding__title': 'The organizer’s own funding (€)' + talous_tulon_tyyppi: + '#title': 'Type of income' + '#help': '

Write down the type of income in question. Incomes can be, for example, other grants and admission or participation fees. Self financing has to be written down as an income even if the required self financing share is to be funded from the organisations overall operations.

' + '#multiple__add_more_button_label': 'Add new income' + menot_section: + '#title': '4.2 Expenses' + talous_menon_tyyppi: + '#title': 'Type of expense' + '#help': '

Write down the type of expense in question. Expenses can be, for example, rents and personnel costs..

' + '#multiple__add_more_button_label': 'Add new expense' + lisatiedot_ja_liitteet: + '#title': '5. Additional information and appendices' + lisatietoja_hakemukseen_liittyen: + '#title': 'Additional information concerning the application' + additional_information: + '#title': 'Additional information' + '#help': '

If necessary, you can write additional information or other justifications related to the application or report changes to the basic information

' + '#counter_maximum_message': '%d/5000 characters remaining' + liitteet: + '#title': Appendices + attachments_info: + '#markup': '

All the appendices listed in the call for applications must be submitted for the processing of the grant application. The grant application may be rejected if the appendices are not submitted. If any of the appendices is missing, let us know in the Further clarification on attachments section of the application.

Appendices previously submitted to the City of Helsinki

If the required appendices have already been submitted as appendices to another grant application addressed to the City of Helsinki, the same appendices do not need to be submitted again. The confirmed financial statements, annual report, action plan and budget of the community cannot be different from one application to another. In this case, under the submitted appendices, indicate “The appendix has been submitted as a single file or with another application”.

' + notification_attachments: + '#markup': '
The contents of the attachments cannot be viewed afterwards

Please note that you will not be able to open the attachments after you have attached them to the form. You will only see the file name of the attachment.

Although you cannot view the attachments afterwards, the attachments to the form are sent along with the other information on the form to the grant application processor.

' + extra_info: + '#title': 'Further clarification on attachments' + '#counter_maximum_message': '%d/5000 characters remaining' + muu_liite: + '#title': 'Other attachment' + '#multiple__add_more_button_label': 'Add attachment' + '#attachmentName__title': '' + '#fileStatus__title': '' + '#fileType__title': '' + '#integrationID__title': '' + '#isAttachmentNew__title': '' + actions: + '#submit__label': Submit + '#draft__label': 'Save as draft' + '#wizard_prev__label': 'Previous' + '#wizard_next__label': 'Next' + '#preview_prev__label': 'Previous' + '#preview_next__label': 'Preview' + '#delete__label': 'Delete unfinished' +settings: + wizard_confirmation_label: '7. Complete' + wizard_prev_button_label: Previous + wizard_next_button_label: Next + preview_label: '6. Confirm, preview, and submit' + preview_title: 'Confirm, preview, and submit' diff --git a/conf/cmi/language/fi/webform.webform.elderly_sports_and_culture.yml b/conf/cmi/language/fi/webform.webform.elderly_sports_and_culture.yml new file mode 100644 index 0000000000..1ebb24cb4a --- /dev/null +++ b/conf/cmi/language/fi/webform.webform.elderly_sports_and_culture.yml @@ -0,0 +1,58 @@ +elements: | + prh_markup: + '#markup': '

Tiedot on haettu hakuprofiilistasi.

' + contact_markup: + '#markup': '

Ilmoita tässä sellainen yhteisön sähköpostiosoite, jota luetaan aktiivisesti. Sähköpostiin lähetetään avustushakemukseen liittyviä yhteydenottoja esim. lisäselvitys- ja täydennyspyyntöjä.

' + email: + '#help': '

Ilmoita sähköpostiosoite, johon tähän hakemukseen liittyvät viestit sekä herätteet osoitetaan ja jota luetaan aktiivisesti

' + community_address: + '#help': '

Jos haluat lisätä, poistaa tai muuttaa osoitetietoa tallenna hakemus luonnokseksi ja siirry ylläpitämään osoitetietoa omiin tietoihin.

' + bank_account: + '#help': '

Jos haluat lisätä, poistaa tai muuttaa tilinumerotietoa tallenna hakemus luonnokseksi ja siirry ylläpitämään tilinumerotietoa omiin tietoihin.

' + '#account_number__title': '' + community_officials: + '#help': '

Jos haluat lisätä, poistaa tai muuttaa henkilöitä tallenna hakemus luonnokseksi ja siirry ylläpitämään henkilöiden tietoja omiin tietoihin.

' + info_muut_samaan_tarkoitukseen_myonnetty: + '#markup': '

Ilmoita tähän ainoastaan avustukset, jotka on myönnetty muualta kuin Helsingin kaupungilta kuluvana tai kahtena edellisenä verovuotena.

Myöntävä vastaus avaa lisäkysymyksen
' + myonnetty_avustus: + '#multiple__no_items_message': '

Ei syötettyjä arvoja. Lisää uusi myönnetty avustus alta.

' + '#element': + issuer_name: + '#help': '

Mikä taho avustusta on myöntänyt (esim. ministeriön nimi)

' + purpose: + '#help': '

Anna lyhyt kuvaus, mihin tarkoitukseen avustus on myönnetty?

' + info_muut_samaan_tarkoitukseen_haettu: + '#markup': '

Ilmoita tähän ainoastaan avustukset, jotka on haettu muualta kuin Helsingin kaupungilta, eikä päätöstä ole vielä tehty.

Myöntävä vastaus avaa lisäkysymyksen
' + haettu_avustus_tieto: + '#multiple__no_items_message': '

Ei syötettyjä arvoja. Lisää uusi haettu avustus alta.

' + '#element': + issuer_name: + '#help': '

Mikä taho avustusta on myöntänyt (esim. ministeriön nimi)

' + purpose: + '#help': '

Anna lyhyt kuvaus, mihin tarkoitukseen avustus on myönnetty?

' + hankesuunnitelma_radios: + '#help': '

Vastaa tähän kysymykseen "kyllä" vain siinä tapauksessa, jos yhteisölläsi on jo käynnissä oleva, samasta avustuksesta rahoitettu hanke ja haet sille jatkorahoitusta.

' + haun_painopisteet_ohje: + '#markup': '

Hankkeessa tulee toteuttaa yhtä tai useampaa painopistettä. HUOM! Valitse vain ne painopisteet, joita edistätte hankkeessa konkreettisella tavalla. Jos hanke ei toteuta jotakin painopistettä, jätä tekstikenttä tyhjäksi.

' + hankkeen_riskit_vakiinnuttaminen: + '#help': '

Jos kyllä, niin kuvaa tekstikenttään kuinka vakiinnuttaminen aiotaan tehdä, muuten jätä tyhjäksi.

' + arviointi_markup: + '#markup': '

Arvioi tässä osiossa hankkeen tähänastista toimintaa seuraavien kysymysten avulla. Avustuksen 2. osaa hakevien tulee liittää hakemukselle Muu liite-kohtaan niin ikään kustannuspaikkaraportti ajanjaksolta 1.6.-31.12.2024

' + arviointi_muutokset_markup: + '#markup': '

Onko hankkeessa tapahtunut merkittäviä muutoksia?

' + arviointi_avustus_kaytto: + '#help': '

Avustusehdot, kohta 10e: "Myönnetty avustus on palautettava Helsingin kaupungille, jos avustusta ei ole käytetty sinä aikana, jona se on avustuspäätöksen mukaan tullut käyttää.

' + talous_tulon_tyyppi: + '#help': '

Kerro tässä minkälainen tulo on kyseessä. Toiminnan tuloja voivat olla esimerkiksi muut avustukset ja pääsy- tai osallistumismaksut. Kirjaa tähän kohtaan myös omarahoitusosuus, jos hankkeen alijäämä kuitataan muusta taloudestanne.

' + talous_menon_tyyppi: + '#help': '

Kerro tässä minkälainen meno on kyseessä. Toiminnan menoja voivat olla esimerkiksi tilavuokrat ja henkilöstökulut.

' + additional_information: + '#help': '

Tähän voit tarvittaessa kirjoittaa lisätietoja tai muita perusteluja hakemukseen liittyen tai ilmoittaa perustietoihin tulleista muutoksista 

' + notification_attachments: + '#markup': '
Liitteiden sisältöä ei voi tarkastella jälkikäteen

Huomioithan, että et pysty avaamaan liitteitä sen jälkeen, kun olet liittänyt ne lomakkeelle. Näet liitteestä ainoastaan sen tiedostonimen.

Vaikka et voi tarkastella liitteiden sisältä jälkikäteen, lomakkeelle liitetyt liitteet lähtevät lomakkeen muiden tietojen mukana avustushakemuksen käsittelijälle.

' + muu_liite: + '#attachmentName__title': '' + '#fileStatus__title': '' + '#fileType__title': '' + '#integrationID__title': '' + '#isAttachmentNew__title': '' diff --git a/conf/cmi/language/sv/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml b/conf/cmi/language/sv/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml new file mode 100644 index 0000000000..f37b2d9c82 --- /dev/null +++ b/conf/cmi/language/sv/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml @@ -0,0 +1,313 @@ +title: 'KUVA: ansökan om understöd för främjande av motion och kulturverksamhet hos äldre' +elements: | + 1_hakijan_tiedot: + '#title': '1. Sökandens uppgifter' + '#prev_button_label': Tidigare + '#next_button_label': Nästa + hakemusprofiili: + '#title': 'Hämtade uppgifter' + prh_markup: + '#markup': '

Informationen har hämtats från din profil.

' + hakijan_tiedot: + '#title': Sökande + contact_person_email_section: + '#title': E-post + contact_markup: + '#markup': '

Ange här samfundets e-postadress som läses aktivt. Till e-postadressen skickas kontaktförfrågningar som är relaterade till ansökan om understöd, såsom begäranden om tilläggsutredning och komplettering

' + email: + '#title': E-postadress + '#help': '

Ange en e-postadress dit meddelandena och begärandena relaterade till denna ansökan kommer att skickas och som läses aktivt.

' + contact_person_section: + '#title': 'Kontaktperson för ansökan' + contact_person: + '#title': Kontaktperson + contact_person_phone_number: + '#title': Telefonnummer + osoite: + '#title': Adress + community_address: + '#title': Adress + '#help': '

Om du vill lägga till, ta bort eller ändra adressuppgifter, spara ansökan som ett utkast och gå till att behålla adressuppgifterna i dina egna uppgifter.

' + '#community_address_select__title': 'Välj en adress' + tilinumero: + '#title': Kontonummer + bank_account: + '#title': Kontonummer + '#help': '

Om du vill lägga till, radera eller ändra kontonummerinformation, spara applikationen som ett utkast och gå till att behålla kontonummerinformationen i din egen data.

' + '#account_number_select__title': 'Välj ett kontonummer' + '#account_number__title': '' + toiminnasta_vastaavat_henkilot: + '#title': 'Personer som ansvarar för verksamheten' + community_officials: + '#help': '

Om du vill lägga till, ta bort eller ändra personer, spara applikationen som ett utkast och gå till att underhålla personernas information i din egen data.

' + '#title': 'Personer som ansvarar för verksamheten' + '#multiple__add_more_button_label': 'Lägg till en person' + '#community_officials_select__title': 'Välj motsvarande person' + '#role__title': Roll + '#email__title': E-post + '#phone__title': Telefonnummer + 2_avustustiedot: + '#title': '2. Uppgifter om understödet' + avustuksen_tiedot: + '#title': 'Uppgifter om understödet' + acting_year: + '#title': 'År för vilket jag ansöker om understöd' + avustuslajit: + '#title': Understöd + subventions: + '#title': 'Typ av stöd' + kayttotarkoitus: + '#title': 'Användningsän damål' + compensation_purpose: + '#title': 'En kort beskrivning av användningsändamålet för det/de understöd som ansöks' + '#counter_maximum_message': '%d/5000 tecken kvar' + other_grants_for_same_purpose: + '#title': 'Övriga understöd som beviljats för samma ändamål' + info_muut_samaan_tarkoitukseen_myonnetty: + '#markup': '

Ange här endast de understöd som beviljats från annanstans
än Helsingfors stad under det innevarande beskattningsåret eller de föregående två beskattningsåren.

Ett jakande svar öppnar ytterligare en fråga
' + olemme_saaneet_muita_avustuksia: + '#title': 'Vi har fått andra understöd' + '#options': + 1: Ja + 0: Nej + myonnetty_avustus: + '#title': 'Bidrag beviljat' + '#multiple__no_items_message': '

Inga värden har angetts. Lägg till det nya beviljade bidraget nedan.

' + '#multiple__add_more_button_label': 'Lägg till understöd som beviljats' + '#element': + issuer: + '#options': + 1: Stat + 4: Övrig + 5: Fundament + '#title': Bidragsgivare + issuer_name: + '#title': 'Emittentens namn' + '#help': '

Vilket organ har beviljat bidraget (t.ex. namnet på departementet)

' + year: + '#title': År + '#pattern_error': 'Ange ett årtal' + amount: + '#title': 'Beviljat bidragsbelopp' + purpose: + '#title': 'Beskrivning av avsedd användning' + '#help': '

Ge en kort beskrivning, i vilket syfte har bidraget beviljats?

' + '#counter_maximum_message': '%d/1000 tecken kvar' + muut_samaan_tarkoitukseen_haetut_avustukset: + '#title': 'Övriga understöd som beviljats för samma ändamål' + info_muut_samaan_tarkoitukseen_haettu: + '#markup': '

Ange här endast de understöd som beviljats från annanstans än Helsingfors stad under det innevarande beskattningsåret eller de föregående två beskattningsåren.

Myöntävä vastaus avaa lisäkysymyksen
' + olemme_hakeneet_avustuksia_muualta_kuin_helsingin_kaupungilta: + '#title': 'Vi har fått andra understöd Lisää myönnetty avustus Custom composite Add received grant Lägg till understöd som beviljats' + '#options': + 1: Ja + 0: Nej + haettu_avustus_tieto: + '#title': 'Lägg till nytt understöd som ansökts' + '#multiple__no_items_message': '

Ei syötettyjä arvoja. Lisää uusi haettu avustus alta.

' + '#multiple__add_more_button_label': 'Lägg till nytt understöd som ansökts' + '#element': + issuer: + '#options': + 1: Stat + 4: Övrig + 5: Fundament + '#title': Bidragsgivare + issuer_name: + '#title': 'Emittentens namn' + '#help': '

Vilket organ har beviljat bidraget (t.ex. namnet på departementet)

' + year: + '#title': År + '#pattern_error': 'Ange ett årtal' + amount: + '#title': 'Beviljat bidragsbelopp' + purpose: + '#title': 'Beskrivning av avsedd användning' + '#help': '

Ge en kort beskrivning, i vilket syfte har bidraget beviljats?

' + '#counter_maximum_message': '%d/1000 tecken kvar' + 3_tarkemmat_tiedot: + '#title': '3. Mer detaljerad information' + hankesuunnitelma_radios: + '#title': 'Ansöker du nu om den andra delen av ett tvåårigt understöd som beviljades 2024?' + '#help': '

Svara bara ”ja” på den här frågan om din sammanslutning redan har ett pågående projekt som finansieras med samma understöd och du ansöker om fortsatt finansiering.

' + '#options': + 1: Ja + 0: Nej + ensisijainen_taiteen_ala: + '#title': 'Huvudsaklig konstart ' + '#help': '

Välj det alternativ, som bäst motsvarar er verksamhet.

' + '#options': + 'Design ja käsityö': 'Design och hantverk' + 'Elokuva, valokuva ja media': 'Film, fotokonst och media' + Kaupunkikulttuuri: Stadskultur + Kirjallisuus: Litteratur + 'Kuvataide ja sarjakuva': 'Bildkonst och seriekonst' + Monitaide: 'Tvärkonstnärlig verksamhet' + Museo: Museum + Musiikki: Musik + Muu: Annat + Sirkus: Cirkus + Tanssi: Dans + Teatteri: Teater + hankesuunnitelma_section: + '#title': '3.1 Projektplan' + hankesuunnitelma_jatkohakemus: + '#title': 'Är understödet du ansöker om en förlängning av ett pågående projekt?' + '#options': + 1: Ja + 0: Nej + hankkeen_tarkoitus_tavoitteet: + '#title': 'Syfte och mål med projektet' + '#counter_maximum_message': '%d/2500 tecken kvar' + hankkeen_toimenpiteet_aikataulu: + '#title': 'Vilka är de konkreta åtgärderna för projektet och tidtabellen för när de ska genomföras?' + '#counter_maximum_message': '%d/4000 tecken kvar' + hankkeen_toimenpiteet_toteutus: + '#title': 'Enligt planen ska de konkreta åtgärderna i projektet genomföras mellan' + hankkeen_toimenpiteet_alkupvm: + '#title': Startdatum + hankkeen_toimenpiteet_loppupvm: + '#title': Slutdatum + hankkeen_keskeisimmat_kumppanit: + '#title': 'Namnge de viktigaste samarbetspartnerna och deras roll i projektet' + '#counter_maximum_message': '%d/2500 tecken kvar' + haun_painopisteet_section: + '#title': '3.2 Tyngdpunkter för ansökan' + haun_painopisteet_ohje: + '#markup': '

Projektet ska arbeta för en eller flera tyngdpunkter. OBS! Välj bara de tyngdpunkter som ni kommer att bidra till på ett konkret sätt genom projektet.

' + haun_painopisteet_liikkumis_kehitys: + '#title': 'Bidrar projektet till att utveckla möjligheter till idrott eller konst- och kulturverksamhet i närområdet/regionalt? På vilket sätt?' + '#counter_maximum_message': '%d/1250 tecken kvar' + haun_painopisteet_digi_kehitys: + '#title': 'Bidrar projektet till att utveckla kulturaktiviteter eller verksamhet som uppmuntrar till idrott som ordnas digitalt/på distans? På vilket sätt?' + '#counter_maximum_message': '%d/1250 tecken kvar' + haun_painopisteet_vertais_kehitys: + '#title': 'Bidrar projektet till att utveckla frivillig- /kamratverksamhet? På vilket sätt?' + '#counter_maximum_message': '%d/1250 tecken kvar' + haun_painopisteet_kulttuuri_kehitys: + '#title': 'Bidrar projektet till att utveckla frivillig- /kamratverksamhet? På vilket sätt?' + '#counter_maximum_message': '%d/1250 tecken kvar' + hankkeen_kohderyhmat_section: + '#title': '3.3 Projektets målgrupper' + hankkeen_kohderyhmat_kenelle: + '#title': 'Vem är den huvudsakliga målgruppen för projektet?' + '#counter_maximum_message': '%d/1250 tecken kvar' + hankkeen_kohderyhmat_erityisryhmat: + '#title': 'Riktar sig projektet till någon särskild grupp?' + '#counter_maximum_message': '%d/1250 tecken kvar' + hankkeen_kohderyhmat_tavoitus: + '#title': 'Hur ska ni nå ut med projektet till målgrupperna?' + '#counter_maximum_message': '%d/1250 tecken kvar' + hankkeen_kohderyhmat_konkretia: + '#title': 'På vilket sätt bidrar projektet till att främja den valda målgruppens funktionsförmåga och välbefinnande genom konkreta åtgärder?' + '#counter_maximum_message': '%d/1250 tecken kvar' + hankkeen_kohderyhmat_osallisuus: + '#title': 'På vilket sätt främjar projektet delaktighet? Vilken roll har äldre personer i projektet?' + '#counter_maximum_message': '%d/1250 tecken kvar' + hankkeen_kohderyhmat_osaaminen: + '#title': 'Vilken kompetens har aktörerna i projektet i förväg att arbeta med målgruppen/- grupperna?' + '#counter_maximum_message': '%d/1250 tecken kvar' + hankkeen_kohderyhmat_postinrot: + '#title': 'Inom vilket/vilka postnummerområden i Helsingfors kommer projektet att genomföras?' + hankkeen_kohderyhmat_miksi_alue: + '#title': 'Varför har ni valt just det/de områdena?' + '#counter_maximum_message': '%d/1250 tecken kvar' + hankkeen_riskit_section: + '#title': '3.4 Risker och analys' + hankkeen_riskit_keskeisimmat: + '#title': 'Vilka är de största riskerna när det gäller genomförande av projektet?' + '#counter_maximum_message': '%d/2500 tecken kvar' + hankkeen_riskit_seuranta: + '#title': 'Hur kommer ni att följa upp och utvärdera projektet?' + '#counter_maximum_message': '%d/2500 tecken kvar' + hankkeen_riskit_vakiinnuttaminen: + '#title': 'Är den planerade verksamheten för projektet avsedd att bli en permanent del av den grundläggande verksamheten hos den sökande/en annan aktör efter projektet?' + '#help': '

Om ja, beskriv i textrutan hur det här kommer att ske, lämna annars tomt.

' + '#counter_maximum_message': '%d/2500 tecken kvar' + hankkeen_valiarviointi_section: + '#title': '3.5 Mellanutvärderin g av tvååriga projekt' + arviointi_markup: + '#markup': '

I den här delen ska du använda följande frågor för att utvärdera verksamheten inom projektet hittills. Om du ansöker om andra delen av understödet ska du även bifoga en
kostnadsställesrapport för perioden 1.6–31.12.2024 under Övriga bilagor.

' + arviointi_toteuma: + '#title': 'Har projektet framskridit enligt planen? Bedöm projektets resultat hittills på en skala 1–100 procent och motivera ditt svar.' + '#counter_maximum_message': '%d/1250 tecken kvar' + arviointi_muutokset_markup: + '#markup': '

Har det skett några väsentliga förändringar i projektet?

' + arviointi_muutokset_talous: + '#title': 'Gällande ekonomin; vilka?' + '#counter_maximum_message': '%d/1250 tecken kvar' + arviointi_muutokset_toiminta: + '#title': 'Gällande verksamheten; vilka?' + '#counter_maximum_message': '%d/1250 tecken kvar' + arviointi_muutokset_aikataulu: + '#title': 'Gällande tidsplanen; vilka?' + '#counter_maximum_message': '%d/1250 tecken kvar' + arviointi_haasteet: + '#title': 'Har projektet stött på utmaningar som har påverkat verksamheten? Om ja, vilka utmaningar?' + '#counter_maximum_message': '%d/1250 tecken kvar' + arviointi_saavutettavuus: + '#title': 'Hur har verksamheten nått ut till deltagarna i förhållande till målen?' + '#counter_maximum_message': '%d/1250 tecken kvar' + arviointi_avustus_kaytto: + '#help': '

Understödsvillkor, punkt 10 e: ”Beviljat understöd ska återbetalas till Helsingfors stad om understödet inte har använts inom den tid då det
enligt understödsbeslutet borde ha förbrukats.”

' + '#title': 'Kommer understödet för den första projektperioden att användas inom tidsfristen (31.5.2025)? Om inte, förklara orsakerna här.' + '#counter_maximum_message': '%d/1250 tecken kvar' + 4_talousarvio: + '#title': '4. Budget' + tulot_section: + '#title': '4.1 Inkomster' + tulot: + '#title': Inkomster + '#compensation__title': 'Ansökt projektstöd (€)' + '#plannedOtherCompensations__title': 'Övriga understöd (€)' + '#sales__title': 'Övriga egna inkomster (€)' + '#ownFunding__title': 'Egenfinansiering (€)' + talous_tulon_tyyppi: + '#title': 'Typ av inkomst ' + '#help': '

Skriv ner vilken typ av inkomst det gäller. Inkomster kan till exempel vara andra understöd och inträdes- eller
deltagaravgifter. Självfinansiering måste uppges som en inkomst även
om den självfinansierade delen finansieras med sökandes övrig  erksamhet.

' + '#multiple__add_more_button_label': 'Lägg till en intäkt' + menot_section: + '#title': '4.2 Utgifter' + talous_menon_tyyppi: + '#title': utgifter + '#help': '

Skriv ner vilken typ av utgift det gäller. Utgifter kan till exempel vara andra lokalhyror och personalkostnader.

' + '#multiple__add_more_button_label': 'Lägg till en utgift' + lisatiedot_ja_liitteet: + '#title': '5. Ytterligare information och bilagor' + lisatietoja_hakemukseen_liittyen: + '#title': 'Ytterligare information för ansökan' + additional_information: + '#title': 'Ytterligare information' + '#help': '

Här kan du vid behov skriva ytterligare information eller andra motiveringar som rör ansökan eller meddela om ändringar i basuppgifterna.

' + '#counter_maximum_message': '%d/5000 tecken kvar' + liitteet: + '#title': Bilagor + attachments_info: + '#markup': '

Alla bilagor som anges i utlysningen måste lämnas in för behandling av ansökan om understöd. Ansökan om understöd kan avslås om bilagorna inte har lämnats in. Om någon av bilagorna saknas, meddela oss om det i punkten Ytterligare information om bilagor i ansökan.

Bilagor som tidigare lämnats in till Helsingfors stad

Om de erforderliga bilagorna redan har lämnats in som bilaga till en annan ansökan om understöd till Helsingfors stad, behöver samma bilagor inte lämnas in igen. Samfundets fastställda bokslut, verksamhetsberättelse, verksamhetsplan och budget får inte vara olika i bilagor till de olika ansökningarna. Ange i detta fall vid de inlämnade bilagorna att ”Bilagan har lämnats in som en fil eller i samband med en annan ansökan”.

' + notification_attachments: + '#markup': '
Innehållet i bilagorna kan inte granskas i efterhand

Observera att du inte kan öppna bilagorna efter att du har bifogat dem blanketten. Du ser bara bilagans filnamn.

Även om du inte kan granska innehållet i bilagorna i efterhand skickas bilagorna som bifogats blanketten med övriga uppgifter till personen som behandlar ansökan om understöd.

' + extra_info: + '#title': 'Ytterligare information om bilagorna' + '#counter_maximum_message': '%d/5000 tecken kvar' + muu_liite: + '#title': 'Annan bilaga' + '#multiple__add_more_button_label': 'Lägg till en bilaga' + '#attachmentName__title': '' + '#fileStatus__title': '' + '#fileType__title': '' + '#integrationID__title': '' + '#isAttachmentNew__title': '' + actions: + '#submit__label': Skicka + '#draft__label': 'Spara som oavslutad' + '#wizard_prev__label': Tidigare + '#wizard_next__label': Nästa + '#preview_prev__label': Tidigare + '#preview_next__label': 'För förhandsvisning' + '#delete__label': 'Radera oavslutat' +settings: + wizard_confirmation_label: '7. Slutförd' + wizard_prev_button_label: Tidigare + wizard_next_button_label: Nästa + preview_label: '6. Bekräfta, förhandsgranska och skicka' + preview_title: 'Bekräfta, förhandsgranska och skicka' diff --git a/conf/cmi/webform.webform.elderly_sports_and_culture.yml b/conf/cmi/webform.webform.elderly_sports_and_culture.yml index f47562bb05..ff3f7ef37d 100644 --- a/conf/cmi/webform.webform.elderly_sports_and_culture.yml +++ b/conf/cmi/webform.webform.elderly_sports_and_culture.yml @@ -296,6 +296,7 @@ elements: |- compensation_purpose: '#type': textarea '#title': 'Lyhyt kuvaus haettavan / haettavien avustusten käyttötarkoituksista' + '#help': 'Kerro mitä tarkoitusta varten avustusta haetaan, erittele tarvittaessa eri käyttökohteet. Kerro myös mitä avustuksella on tarkoitus saada aikaiseksi ja millaisia tavoitteita avustettavaan toimintaan liittyy.' '#maxlength': 5000 '#required': true '#counter_type': character @@ -483,7 +484,7 @@ elements: |- '#title': '3. Tarkemmat tiedot' tarkemmat_tiedot_section: '#type': webform_section - '#title': '3.0 Tarkemmat tiedot' + '#title': ' ' hankesuunnitelma_radios: '#type': radios '#title': 'Haetaanko nyt vuonna 2024 myönnetyn kaksivuotisen avustuksen 2. osaa?' @@ -593,7 +594,6 @@ elements: |- visible: ':input[name="hankesuunnitelma_jatkohakemus"]': value: '0' - '#required': true haun_painopisteet_digi_kehitys: '#type': textarea '#title': 'Kehitetäänkö hankkeessa digitaalisesti / etänä toteutettavia kulttuuritoimintoja tai liikkumiseen aktivoivaa toimintaa? Miten?' @@ -752,7 +752,7 @@ elements: |- '#required': true '#counter_type': character '#counter_maximum': 2500 - '#counter_maximum_message': '%d/1250 merkkiä jäljellä' + '#counter_maximum_message': '%d/2500 merkkiä jäljellä' '#states': visible: ':input[name="hankesuunnitelma_jatkohakemus"]': @@ -764,7 +764,7 @@ elements: |- '#required': true '#counter_type': character '#counter_maximum': 2500 - '#counter_maximum_message': '%d/1250 merkkiä jäljellä' + '#counter_maximum_message': '%d/2500 merkkiä jäljellä' '#states': visible: ':input[name="hankesuunnitelma_jatkohakemus"]': @@ -777,18 +777,109 @@ elements: |- '#required': true '#counter_type': character '#counter_maximum': 2500 - '#counter_maximum_message': '%d/1250 merkkiä jäljellä' + '#counter_maximum_message': '%d/2500 merkkiä jäljellä' '#states': visible: ':input[name="hankesuunnitelma_jatkohakemus"]': value: '0' - unknown_for_now: + hankkeen_valiarviointi_section: '#type': webform_section - '#title': '3.5 puuttuva määritys' + '#title': '3.5 2-vuotisten hankkeiden väliarviointi' '#states': visible: ':input[name="hankesuunnitelma_radios"]': value: '1' + arviointi_markup: + '#type': webform_markup + '#markup': 'Arvioi tässä osiossa hankkeen tähänastista toimintaa seuraavien kysymysten avulla. Avustuksen 2. osaa hakevien tulee liittää hakemukselle Muu liite-kohtaan niin ikään kustannuspaikkaraportti ajanjaksolta 1.6.-31.12.2024' + arviointi_toteuma: + '#type': textarea + '#title': 'Onko hanke edennyt suunnitelman mukaisesti? Arvioikaa hankkeen toteumaa tähän asti asteikolla 1-100% ja perustelkaa vastauksenne.' + '#maxlength': 1250 + '#required': true + '#counter_type': character + '#counter_maximum': 1250 + '#counter_maximum_message': '%d/1250 merkkiä jäljellä' + '#states': + visible: + ':input[name="hankesuunnitelma_radios"]': + value: '1' + arviointi_muutokset_markup: + '#type': webform_markup + '#markup': 'Onko hankkeessa tapahtunut merkittäviä muutoksia?' + arviointi_muutokset_talous: + '#type': textarea + '#title': 'Talouteen liittyen; mitä?' + '#maxlength': 1250 + '#required': true + '#counter_type': character + '#counter_maximum': 1250 + '#counter_maximum_message': '%d/1250 merkkiä jäljellä' + '#states': + visible: + ':input[name="hankesuunnitelma_radios"]': + value: '1' + arviointi_muutokset_toiminta: + '#type': textarea + '#title': 'Toimintaan liittyen; mitä?' + '#maxlength': 1250 + '#required': true + '#counter_type': character + '#counter_maximum': 1250 + '#counter_maximum_message': '%d/1250 merkkiä jäljellä' + '#states': + visible: + ':input[name="hankesuunnitelma_radios"]': + value: '1' + arviointi_muutokset_aikataulu: + '#type': textarea + '#title': 'Aikatauluun liittyen; mitä?' + '#maxlength': 1250 + '#required': true + '#counter_type': character + '#counter_maximum': 1250 + '#counter_maximum_message': '%d/1250 merkkiä jäljellä' + '#states': + visible: + ':input[name="hankesuunnitelma_radios"]': + value: '1' + arviointi_haasteet: + '#type': textarea + '#title': 'Onko hanke kohdannut toimintaan vaikuttaneita haasteita? Jos, niin millaisia?' + '#maxlength': 1250 + '#required': true + '#counter_type': character + '#counter_maximum': 1250 + '#counter_maximum_message': '%d/1250 merkkiä jäljellä' + '#states': + visible: + ':input[name="hankesuunnitelma_radios"]': + value: '1' + arviointi_saavutettavuus: + '#type': textarea + '#title': 'Miten toiminta on tavoittanut osallistujia suhteessa tavoitteisiin?' + '#maxlength': 1250 + '#required': true + '#counter_type': character + '#counter_maximum': 1250 + '#counter_maximum_message': '%d/1250 merkkiä jäljellä' + '#states': + visible: + ':input[name="hankesuunnitelma_radios"]': + value: '1' + arviointi_avustus_kaytto: + '#type': textarea + '#help': 'Avustusehdot, kohta 10e: "Myönnetty avustus on palautettava Helsingin kaupungille, jos avustusta ei ole käytetty sinä aikana, jona se on avustuspäätöksen mukaan tullut käyttää.' + '#title': 'Tuleeko ensimmäiselle hankekaudelle myönnetty avustus käytettyä näillä näkymin määräaikaan (31.5.2025) mennessä? Jos ei, niin avatkaa tähän johtaneita syitä.' + '#maxlength': 1250 + '#required': true + '#counter_type': character + '#counter_maximum': 1250 + '#counter_maximum_message': '%d/1250 merkkiä jäljellä' + '#states': + visible: + ':input[name="hankesuunnitelma_radios"]': + value: '1' 4_talousarvio: '#type': webform_wizard_page '#title': '4. Talousarvio' diff --git a/conf/cmi/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml b/conf/cmi/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml new file mode 100644 index 0000000000..00d3f0afc3 --- /dev/null +++ b/conf/cmi/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml @@ -0,0 +1,1438 @@ +uuid: d6a6681d-87e8-4a48-aa5a-cb1c12bd160f +langcode: fi +status: open +dependencies: + module: + - grants_handler + - grants_metadata +third_party_settings: + grants_metadata: + applicationTypeSelect: '70' + applicationType: KUVAERILLIS + applicationTypeID: '70' + applicationIndustry: KUVA + applicantTypes: + registered_community: registered_community + applicationTypeTerms: + 62: '62' + applicationTargetGroup: '22' + applicationOpen: null + applicationClose: null + applicationActingYearsType: fixed + applicationActingYears: + 2024: '2024' + 2025: '2025' + 2026: '2026' + applicationActingYearsNextCount: '' + applicationContinuous: 1 + disableCopying: 0 + status: development + parent: '' + avus2BreakingChange: 0 +weight: 0 +open: null +close: null +uid: 1 +template: false +archive: false +id: iakkaiden_kulttuuri_ja_liikunta +title: 'Kulttuurin avustukset iäkkäiden ihmisten kulttuuritoiminnan edistämiseksi' +description: '

Kulttuurin ja vapaa-ajan erillisavustushakemus: Ikääntyneiden liikkumisen ja kulttuuritoiminnan avustus

' +categories: + - Kehityksessä +elements: |- + avustukset_summa: + '#type': grants_webform_summation_field + '#title': 'Avustukset summa' + '#title_display': none + '#collect_field': + subventions%%amount: subventions%%amount + applicant_type: 0 + application_number: 0 + status: 0 + hakijan_tiedot: 0 + email: 0 + contact_person: 0 + contact_person_phone_number: 0 + community_address: 0 + bank_account: 0 + community_officials: 0 + acting_year: 0 + subventions%%subventionTypeTitle: 0 + subventions%%subventionType: 0 + ensisijainen_taiteen_ala: 0 + hankkeen_nimi: 0 + kyseessa_on_festivaali_tai_tapahtuma: 0 + hankkeen_tai_toiminnan_lyhyt_esittelyteksti: 0 + olemme_saaneet_muita_avustuksia: 0 + myonnetty_avustus: 0 + members_applicant_person_global: 0 + members_applicant_person_local: 0 + members_applicant_community_global: 0 + members_applicant_community_local: 0 + kokoaikainen_henkilosto: 0 + kokoaikainen_henkilotyovuosia: 0 + osa_aikainen_henkilosto: 0 + osa_aikainen_henkilotyovuosia: 0 + vapaaehtoinen_henkilosto: 0 + tapahtuma_tai_esityspaivien_maara_helsingissa: 0 + esitykset_maara_helsingissa: 0 + nayttelyt_maara_helsingissa: 0 + tyopaja_maara_helsingissa: 0 + esitykset_maara_kaikkiaan: 0 + nayttelyt_maara_kaikkiaan: 0 + tyopaja_maara_kaikkiaan: 0 + esitykset_kavijamaara_helsingissa: 0 + nayttelyt_kavijamaara_helsingissa: 0 + tyopaja_kavijamaara_helsingissa: 0 + esitykset_kavijamaara_kaikkiaan: 0 + nayttelyt_kavijamaara_kaikkiaan: 0 + tyopaja_kavijamaara_kaikkiaan: 0 + kantaesitysten_maara: 0 + ensi_iltojen_maara_helsingissa: 0 + ensimmainen_yleisolle_avoimen_tilaisuuden_paikka_helsingissa: 0 + postinumero: 0 + kyseessa_on_kaupungin_omistama_tila: 0 + tila: 0 + ensimmaisen_yleisolle_avoimen_tilaisuuden_paivamaara: 0 + festivaalin_tai_tapahtuman_kohdalla_tapahtuman_paivamaarat: 0 + hanke_alkaa: 0 + hanke_loppuu: 0 + laajempi_hankekuvaus: 0 + toiminta_taiteelliset_lahtokohdat: 0 + toiminta_tasa_arvo: 0 + toiminta_saavutettavuus: 0 + toiminta_yhteisollisyys: 0 + toiminta_kohderyhmat: 0 + toiminta_ammattimaisuus: 0 + toiminta_ekologisuus: 0 + toiminta_yhteistyokumppanit: 0 + organisaatio_kuuluu_valtionosuusjarjestelmaan_vos_: 0 + budget_static_income: 0 + budget_static_cost: 0 + budget_other_cost: 0 + muu_huomioitava_panostus: 0 + additional_information: 0 + extra_info: 0 + muu_liite: 0 + '#data_type': euro + '#form_item': hidden + applicant_type: + '#type': hidden + '#title': 'Hakijan tyyppi' + kulttuuri1_summa: + '#type': grants_webform_summation_field + '#title': Kulttuuri1-summa + '#collect_field': + subventions%%amount: subventions%%amount + applicant_type: 0 + application_number: 0 + status: 0 + hakijan_tiedot: 0 + email: 0 + contact_person: 0 + contact_person_phone_number: 0 + community_address: 0 + bank_account: 0 + community_officials: 0 + acting_year: 0 + compensation_purpose: 0 + olemme_saaneet_muita_avustuksia: 0 + myonnetty_avustus: 0 + olemme_hakeneet_avustuksia_muualta_kuin_helsingin_kaupungilta: 0 + haettu_avustus_tieto: 0 + hankesuunnitelma_radios: 0 + hankesuunnitelma_jatkohakemus: 0 + hankkeen_tarkoitus_tavoitteet: 0 + hankkeen_toimenpiteet_aikataulu: 0 + hankkeen_toimenpiteet_alkupvm: 0 + hankkeen_toimenpiteet_loppupvm: 0 + hankkeen_keskeisimmat_kumppanit: 0 + haun_painopisteet_liikkumis_kehitys: 0 + haun_painopisteet_digi_kehitys: 0 + haun_painopisteet_vertais_kehitys: 0 + haun_painopisteet_kulttuuri_kehitys: 0 + hankkeen_kohderyhmat_kenelle: 0 + hankkeen_kohderyhmat_erityisryhmat: 0 + hankkeen_kohderyhmat_tavoitus: 0 + hankkeen_kohderyhmat_konkretia: 0 + hankkeen_kohderyhmat_osallisuus: 0 + hankkeen_kohderyhmat_osaaminen: 0 + hankkeen_kohderyhmat_postinrot: 0 + hankkeen_kohderyhmat_miksi_alue: 0 + hankkeen_riskit_keskeisimmat: 0 + hankkeen_riskit_seuranta: 0 + hankkeen_riskit_vakiinnuttaminen: 0 + arviointi_toteuma: 0 + arviointi_muutokset_talous: 0 + arviointi_muutokset_toiminta: 0 + arviointi_muutokset_aikataulu: 0 + arviointi_haasteet: 0 + arviointi_saavutettavuus: 0 + arviointi_avustus_kaytto: 0 + tulot: 0 + talous_tulon_tyyppi: 0 + talous_menon_tyyppi: 0 + additional_information: 0 + extra_info: 0 + muu_liite: 0 + '#subvention_type': '47' + '#data_type': euro + '#form_item': hidden + kulttuuri2_summa: + '#type': grants_webform_summation_field + '#title': Kulttuuri2-summa + '#collect_field': + subventions%%amount: subventions%%amount + applicant_type: 0 + application_number: 0 + status: 0 + hakijan_tiedot: 0 + email: 0 + contact_person: 0 + contact_person_phone_number: 0 + community_address: 0 + bank_account: 0 + community_officials: 0 + acting_year: 0 + compensation_purpose: 0 + olemme_saaneet_muita_avustuksia: 0 + myonnetty_avustus: 0 + olemme_hakeneet_avustuksia_muualta_kuin_helsingin_kaupungilta: 0 + haettu_avustus_tieto: 0 + hankesuunnitelma_radios: 0 + hankesuunnitelma_jatkohakemus: 0 + hankkeen_tarkoitus_tavoitteet: 0 + hankkeen_toimenpiteet_aikataulu: 0 + hankkeen_toimenpiteet_alkupvm: 0 + hankkeen_toimenpiteet_loppupvm: 0 + hankkeen_keskeisimmat_kumppanit: 0 + haun_painopisteet_liikkumis_kehitys: 0 + haun_painopisteet_digi_kehitys: 0 + haun_painopisteet_vertais_kehitys: 0 + haun_painopisteet_kulttuuri_kehitys: 0 + hankkeen_kohderyhmat_kenelle: 0 + hankkeen_kohderyhmat_erityisryhmat: 0 + hankkeen_kohderyhmat_tavoitus: 0 + hankkeen_kohderyhmat_konkretia: 0 + hankkeen_kohderyhmat_osallisuus: 0 + hankkeen_kohderyhmat_osaaminen: 0 + hankkeen_kohderyhmat_postinrot: 0 + hankkeen_kohderyhmat_miksi_alue: 0 + hankkeen_riskit_keskeisimmat: 0 + hankkeen_riskit_seuranta: 0 + hankkeen_riskit_vakiinnuttaminen: 0 + arviointi_toteuma: 0 + arviointi_muutokset_talous: 0 + arviointi_muutokset_toiminta: 0 + arviointi_muutokset_aikataulu: 0 + arviointi_haasteet: 0 + arviointi_saavutettavuus: 0 + arviointi_avustus_kaytto: 0 + tulot: 0 + talous_tulon_tyyppi: 0 + talous_menon_tyyppi: 0 + additional_information: 0 + extra_info: 0 + muu_liite: 0 + '#subvention_type': '48' + '#data_type': euro + '#form_item': hidden + 1_hakijan_tiedot: + '#type': webform_wizard_page + '#title': '1. Hakijan tiedot' + '#prev_button_label': Edellinen + '#next_button_label': Seuraava + application_number: + '#type': hidden + '#title': Hakemusnumero + '#disabled': true + status: + '#type': hidden + '#title': 'Hakemuksen tila' + '#readonly': true + hakemusprofiili: + '#type': webform_section + '#title': 'Haetut tiedot' + '#attributes': + class: + - grants-profile--imported-section + prh_markup: + '#type': webform_markup + '#markup': 'Tiedot on haettu hakuprofiilistasi.' + hakijan_tiedot: + '#type': applicant_info + '#title': Hakija + contact_person_email_section: + '#type': webform_section + '#title': Sähköposti + '#states': + visible: + ':input[name="applicant_type"]': + value: registered_community + contact_markup: + '#type': webform_markup + '#markup': 'Ilmoita tässä sellainen yhteisön sähköpostiosoite, jota luetaan aktiivisesti. Sähköpostiin lähetetään avustushakemukseen liittyviä yhteydenottoja esim. lisäselvitys- ja täydennyspyyntöjä.' + email: + '#type': email + '#title': Sähköpostiosoite + '#help': 'Ilmoita sähköpostiosoite, johon tähän hakemukseen liittyvät viestit sekä herätteet osoitetaan ja jota luetaan aktiivisesti' + '#size': 63 + '#autocomplete': 'off' + '#pattern': '(?:[a-zA-Z0-9!#$%&''*+/=?^_`{|}~-]+(?:\.[a-zA-Z0-9!#$%&''*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\.)+[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-zA-Z0-9-]*[a-zA-Z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])' + '#states': + required: + ':input[name="applicant_type"]': + value: registered_community + contact_person_section: + '#type': webform_section + '#title': 'Hakemuksen yhteyshenkilö' + '#states': + visible: + ':input[name="applicant_type"]': + value: registered_community + contact_person: + '#type': textfield + '#title': Yhteyshenkilö + '#autocomplete': 'off' + '#required': true + '#attributes': + class: + - webform--large + '#size': 63 + contact_person_phone_number: + '#type': textfield + '#title': Puhelinnumero + '#required': true + '#autocomplete': 'off' + '#attributes': + class: + - webform--medium + '#size': 32 + osoite: + '#type': webform_section + '#title': Osoite + '#states': + visible: + ':input[name="applicant_type"]': + value: registered_community + community_address: + '#type': community_address_composite + '#title': 'Yhteisön osoite' + '#help': 'Jos haluat lisätä, poistaa tai muuttaa osoitetietoa tallenna hakemus luonnokseksi ja siirry ylläpitämään osoitetietoa omiin tietoihin.' + '#attributes': + class: + - webform--large + '#required': true + '#states': + visible: + ':input[name="applicant_type"]': + value: registered_community + tilinumero: + '#type': webform_section + '#title': Tilinumero + bank_account: + '#type': bank_account_composite + '#title': Tilinumero + '#help': 'Jos haluat lisätä, poistaa tai muuttaa tilinumerotietoa tallenna hakemus luonnokseksi ja siirry ylläpitämään tilinumerotietoa omiin tietoihin.' + '#attributes': + class: + - webform--medium + '#required': true + toiminnasta_vastaavat_henkilot: + '#type': webform_section + '#title': 'Toiminnasta vastaavat henkilöt' + '#states': + visible: + ':input[name="applicant_type"]': + '!value': private_person + community_officials: + '#type': community_officials_composite + '#help': 'Jos haluat lisätä, poistaa tai muuttaa henkilöitä tallenna hakemus luonnokseksi ja siirry ylläpitämään henkilöiden tietoja omiin tietoihin.' + '#title': 'Valitse toiminnasta vastaavat henkilöt' + '#multiple': true + '#multiple__item_label': henkilö + '#multiple__min_items': 1 + '#multiple__empty_items': 0 + '#multiple__sorting': false + '#multiple__add': false + '#multiple__add_more_input': false + '#multiple__add_more_button_label': 'Lisää henkilö' + '#wrapper_attributes': + class: + - community_officials_wrapper + '#attributes': + class: + - webform--large + 2_avustustiedot: + '#type': webform_wizard_page + '#title': '2. Avustustiedot' + avustuksen_tiedot: + '#type': webform_section + '#title': 'Avustuksen tiedot' + acting_year: + '#type': select + '#title': 'Vuosi, jolle haen avustusta' + '#options': + 2024: '2024' + 2025: '2025' + 2026: '2026' + '#required': true + avustuslajit: + '#type': webform_section + '#title': Avustuslajit + subventions: + '#type': grants_compensations + '#title': Avustukset + '#multiple': true + '#subventionType': + 47: '47' + 51: '51' + '#onlyOneSubventionPerApplication': 1 + '#required': true + '#multiple__header': true + '#multiple__empty_items': 0 + '#multiple__sorting': false + '#multiple__add': false + '#multiple__remove': false + '#multiple__add_more': false + '#attributes': + class: + - subventions + '#subvention_type': + 1: '1' + 6: '6' + '#subvention_type_id__access': false + '#subvention_type__title': Avustuslaji + '#subvention_amount__title': 'Avustuksen summa' + grants_compensations_information: + '#type': webform_markup + '#markup': '

Hae yhdellä hakemuksella aina vain yhtä avustuslajia kerrallaan.

' + kayttotarkoitus: + '#type': webform_section + '#title': Käyttötarkoitus + compensation_purpose: + '#type': textarea + '#title': 'Lyhyt kuvaus haettavan / haettavien avustusten käyttötarkoituksista' + '#help': 'Kerro mitä tarkoitusta varten avustusta haetaan, erittele tarvittaessa eri käyttökohteet. Kerro myös mitä avustuksella on tarkoitus saada aikaiseksi ja millaisia tavoitteita avustettavaan toimintaan liittyy.' + '#maxlength': 5000 + '#required': true + '#counter_type': character + '#counter_maximum': 5000 + '#counter_maximum_message': '%d/5000 merkkiä jäljellä' + other_grants_for_same_purpose: + '#type': webform_section + '#title': 'Muut samaan tarkoitukseen myönnetyt avustukset' + info_muut_samaan_tarkoitukseen_myonnetty: + '#type': webform_markup + '#markup': | + Ilmoita tähän ainoastaan avustukset, jotka on myönnetty muualta kuin Helsingin kaupungilta kuluvana tai kahtena edellisenä verovuotena. +
+
+
+ + Myöntävä vastaus avaa lisäkysymyksen +
+
+
+ olemme_saaneet_muita_avustuksia: + '#type': radios + '#title': 'Olemme saaneet muita avustuksia' + '#description_display': before + '#options': + 1: Kyllä + 0: Ei + myonnetty_avustus: + '#type': webform_custom_composite + '#title': 'Myönnetty avustus' + '#title_display': before + '#states': + visible: + ':input[name="olemme_saaneet_muita_avustuksia"]': + value: '1' + required: + ':input[name="olemme_saaneet_muita_avustuksia"]': + value: '1' + '#multiple__header': false + '#multiple__item_label': 'myönnetty avustus' + '#multiple__no_items_message': 'Ei syötettyjä arvoja. Lisää uusi myönnetty avustus alta.' + '#multiple__min_items': 1 + '#multiple__empty_items': 0 + '#multiple__sorting': false + '#multiple__add': false + '#multiple__add_more_input': false + '#multiple__add_more_button_label': 'Lisää uusi myönnetty avustus' + '#element': + issuer: + '#type': select + '#options': + 1: Valtio + 3: EU + 4: Muu + 5: Säätiö + 6: STEA + '#required': true + '#title': 'Avustuksen myöntäjä' + issuer_name: + '#type': textfield + '#required': true + '#title': 'Myöntäjän nimi' + '#attributes': + class: + - webform--large + '#help': 'Mikä taho avustusta on myöntänyt (esim. ministeriön nimi)' + year: + '#type': textfield + '#required': true + '#title': Vuosi + '#attributes': + class: + - webform--small + '#maxlength': 4 + '#pattern': ^(19\d\d|20\d\d|2100)$ + '#pattern_error': 'Syötä vuosiluku väliltä 1900 - 2100' + amount: + '#type': textfield + '#required': true + '#attributes': + class: + - webform--small + '#title': 'Myönnetyn avustuksen summa' + '#input_mask': "'alias': 'currency', 'prefix': '', 'suffix': '€','groupSeparator': ' ','radixPoint':','" + purpose: + '#type': textarea + '#title': 'Kuvaus käyttötarkoituksesta' + '#help': 'Anna lyhyt kuvaus, mihin tarkoitukseen avustus on myönnetty?' + '#maxlength': 1000 + '#counter_type': character + '#attributes': + class: + - webform--large + '#counter_maximum': 1000 + '#counter_maximum_message': '%d/1000 merkkiä jäljellä' + muut_samaan_tarkoitukseen_haetut_avustukset: + '#type': webform_section + '#title': 'Muut samaan tarkoitukseen haetut avustukset' + info_muut_samaan_tarkoitukseen_haettu: + '#type': webform_markup + '#markup': | + Ilmoita tähän ainoastaan avustukset, jotka on haettu muualta kuin Helsingin kaupungilta, eikä päätöstä ole vielä tehty. +
+
+
+ + Myöntävä vastaus avaa lisäkysymyksen +
+
+
+ olemme_hakeneet_avustuksia_muualta_kuin_helsingin_kaupungilta: + '#type': radios + '#title': 'Olemme hakeneet avustuksia muualta kuin Helsingin kaupungilta' + '#options': + 1: Kyllä + 0: Ei + haettu_avustus_tieto: + '#type': webform_custom_composite + '#title': 'Lisää uusi haettu avustus' + '#title_display': before + '#states': + visible: + ':input[name="olemme_hakeneet_avustuksia_muualta_kuin_helsingin_kaupungilta"]': + value: '1' + required: + ':input[name="olemme_hakeneet_avustuksia_muualta_kuin_helsingin_kaupungilta"]': + value: '1' + '#multiple__header': false + '#multiple__item_label': 'haettu avustus' + '#multiple__no_items_message': 'Ei syötettyjä arvoja. Lisää uusi haettu avustus alta.' + '#multiple__min_items': 1 + '#multiple__empty_items': 0 + '#multiple__sorting': false + '#multiple__add': false + '#multiple__add_more_input': false + '#multiple__add_more_button_label': 'Lisää uusi haettu avustus' + '#element': + issuer: + '#type': select + '#options': + 1: Valtio + 3: EU + 4: Muu + 5: Säätiö + 6: STEA + '#required': true + '#title': 'Avustuksen myöntäjä' + issuer_name: + '#type': textfield + '#required': true + '#title': 'Myöntäjän nimi' + '#attributes': + class: + - webform--large + '#help': 'Mikä taho avustusta on myöntänyt (esim. ministeriön nimi)' + year: + '#type': textfield + '#required': true + '#attributes': + class: + - webform--small + '#title': Vuosi + '#maxlength': 4 + '#pattern': ^(19\d\d|20\d\d|2100)$ + '#pattern_error': 'Syötä vuosiluku väliltä 1900 - 2100' + amount: + '#type': textfield + '#required': true + '#attributes': + class: + - webform--small + '#title': 'Haetun avustuksen summa' + '#input_mask': "'alias': 'currency', 'prefix': '', 'suffix': '€','groupSeparator': ' ','radixPoint':','" + purpose: + '#type': textarea + '#title': 'Kuvaus käyttötarkoituksesta' + '#help': 'Anna lyhyt kuvaus, mihin tarkoitukseen avustus on myönnetty?' + '#maxlength': 1000 + '#counter_type': character + '#attributes': + class: + - webform--large + '#counter_maximum': 1000 + '#counter_maximum_message': '%d/1000 merkkiä jäljellä' + 3_tarkemmat_tiedot: + '#type': webform_wizard_page + '#title': '3. Tarkemmat tiedot' + tarkemmat_tiedot_section: + '#type': webform_section + '#title': ' ' + hankesuunnitelma_radios: + '#type': radios + '#title': 'Haetaanko nyt vuonna 2024 myönnetyn kaksivuotisen avustuksen 2. osaa?' + '#help': 'Vastaa tähän kysymykseen "kyllä" vain siinä tapauksessa, jos yhteisölläsi on jo käynnissä oleva, samasta avustuksesta rahoitettu hanke ja haet sille jatkorahoitusta.' + '#description_display': before + '#options': + 1: Kyllä + 0: Ei + '#default_value': '0' + ensisijainen_taiteen_ala: + '#type': select + '#title': 'Ensisijainen taiteenala' + '#help': 'Valitse pudotusvalikosta toimintaa parhaiten kuvaava vaihtoehto.' + '#options': + 'Design ja käsityö': 'Design ja käsityö' + 'Elokuva, valokuva ja media': 'Elokuva, valokuva ja media' + Kaupunkikulttuuri: Kaupunkikulttuuri + Kirjallisuus: Kirjallisuus + 'Kuvataide ja sarjakuva': 'Kuvataide ja sarjakuva' + Monitaide: Monitaide + Museo: Museo + Musiikki: Musiikki + Muu: Muu + Sirkus: Sirkus + Tanssi: Tanssi + Teatteri: Teatteri + '#wrapper_attributes': + class: + - webform-element-help--wrapper-short + '#states': + visible: + - ':input[name="kulttuuri1_summa"]': + value: + greater: '0' + - or + - ':input[name="kulttuuri2_summa"]': + value: + greater: '0' + hankesuunnitelma_section: + '#type': webform_section + '#title': '3.1 Hankesuunnitelma' + '#states': + visible: + ':input[name="hankesuunnitelma_radios"]': + value: '0' + hankesuunnitelma_jatkohakemus: + '#type': radios + '#title': 'Onko haettava avustus käynnissä olevan hankkeen jatkohakemus?' + '#description_display': before + '#options': + 1: Kyllä + 0: Ei + '#default_value': '0' + hankkeen_tarkoitus_tavoitteet: + '#type': textarea + '#title': 'Hankkeen tarkoitus ja tavoitteet' + '#maxlength': 2500 + '#required': true + '#counter_type': character + '#counter_maximum': 2500 + '#counter_maximum_message': '%d/2500 merkkiä jäljellä' + '#states': + visible: + ':input[name="hankesuunnitelma_jatkohakemus"]': + value: '0' + hankkeen_toimenpiteet_aikataulu: + '#type': textarea + '#title': 'Mitkä ovat hankkeen konkreettiset toimenpiteet ja niiden toteutusaikataulu?' + '#maxlength': 4000 + '#required': true + '#counter_type': character + '#counter_maximum': 4000 + '#counter_maximum_message': '%d/4000 merkkiä jäljellä' + '#states': + visible: + ':input[name="hankesuunnitelma_jatkohakemus"]': + value: '0' + hankkeen_toimenpiteet_toteutus: + '#type': fieldset + '#title': 'Hankkeen konkreettiset toimenpiteet on tarkoitus toteuttaa välillä' + '#attributes': + class: + - grants-fieldset + '#states': + visible: + ':input[name="hankesuunnitelma_jatkohakemus"]': + value: '0' + hankkeen_toimenpiteet_alkupvm: + '#type': date + '#title': Alkupäivämäärä + '#required': true + '#states': + visible: + ':input[name="hankesuunnitelma_jatkohakemus"]': + value: '0' + hankkeen_toimenpiteet_loppupvm: + '#type': date + '#title': Loppupäivämäärä + '#required': true + '#states': + visible: + ':input[name="hankesuunnitelma_jatkohakemus"]': + value: '0' + hankkeen_keskeisimmat_kumppanit: + '#type': textarea + '#title': 'Nimeä hankkeen keskeisimmät yhteistyökumppanit ja heidän roolinsa hankkeessa' + '#maxlength': 2500 + '#required': true + '#counter_type': character + '#counter_maximum': 2500 + '#counter_maximum_message': '%d/2500 merkkiä jäljellä' + '#states': + visible: + ':input[name="hankesuunnitelma_jatkohakemus"]': + value: '0' + haun_painopisteet_section: + '#type': webform_section + '#title': '3.2 Haun painopisteet' + '#states': + visible: + ':input[name="hankesuunnitelma_radios"]': + value: '0' + ':input[name="hankesuunnitelma_jatkohakemus"]': + value: '0' + haun_painopisteet_ohje: + '#type': webform_markup + '#markup': 'Mihin seuraavista iäkkäiden liikkumisen ja kulttuuritoiminnan edistämisen avustuksen painopisteistä hanke vastaa?

Hankkeessa tulee toteuttaa yhtä tai useampaa painopistettä. HUOM! Valitse vain ne painopisteet, joita edistätte hankkeessa konkreettisella tavalla. Jos hanke ei toteuta jotakin painopistettä, jätä tekstikenttä tyhjäksi.

' + haun_painopisteet_liikkumis_kehitys: + '#type': textarea + '#title': 'Kehitetäänkö hankkeessa liikkumismahdollisuuksia tai taide- ja kulttuuritoimintaa lähiympäristössä / alueellisesti? Miten?' + '#maxlength': 1250 + '#counter_type': character + '#counter_maximum': 1250 + '#counter_maximum_message': '%d/1250 merkkiä jäljellä' + '#states': + visible: + ':input[name="hankesuunnitelma_jatkohakemus"]': + value: '0' + haun_painopisteet_digi_kehitys: + '#type': textarea + '#title': 'Kehitetäänkö hankkeessa digitaalisesti / etänä toteutettavia kulttuuritoimintoja tai liikkumiseen aktivoivaa toimintaa? Miten?' + '#maxlength': 1250 + '#required': true + '#counter_type': character + '#counter_maximum': 1250 + '#counter_maximum_message': '%d/1250 merkkiä jäljellä' + '#states': + visible: + ':input[name="hankesuunnitelma_jatkohakemus"]': + value: '0' + haun_painopisteet_vertais_kehitys: + '#type': textarea + '#title': 'Kehitetäänkö hankkeessa vapaaehtois- / vertaistoimintaa? Miten?' + '#maxlength': 1250 + '#required': true + '#counter_type': character + '#counter_maximum': 1250 + '#counter_maximum_message': '%d/1250 merkkiä jäljellä' + '#states': + visible: + ':input[name="hankesuunnitelma_jatkohakemus"]': + value: '0' + haun_painopisteet_kulttuuri_kehitys: + '#type': textarea + '#title': 'Kehitetäänkö hankkeessa taide- ja kulttuuritoimijoiden osaamista tai luodaanko uusia työtapoja / rakenteita? Miten?' + '#maxlength': 1250 + '#required': true + '#counter_type': character + '#counter_maximum': 1250 + '#counter_maximum_message': '%d/1250 merkkiä jäljellä' + '#states': + visible: + - ':input[name="kulttuuri1_summa"]': + value: + greater: '0' + - or + - ':input[name="kulttuuri2_summa"]': + value: + greater: '0' + hankkeen_kohderyhmat_section: + '#type': webform_section + '#title': '3.3 Hankkeen kohderyhmät' + '#states': + visible: + ':input[name="hankesuunnitelma_radios"]': + value: '0' + ':input[name="hankesuunnitelma_jatkohakemus"]': + value: '0' + hankkeen_kohderyhmat_kenelle: + '#type': textarea + '#title': 'Kenelle hankkeen toiminta on pääasiallisesti suunnattu?' + '#maxlength': 1250 + '#required': true + '#counter_type': character + '#counter_maximum': 1250 + '#counter_maximum_message': '%d/1250 merkkiä jäljellä' + '#states': + visible: + ':input[name="hankesuunnitelma_jatkohakemus"]': + value: '0' + hankkeen_kohderyhmat_erityisryhmat: + '#type': textarea + '#title': 'Kohdennetaanko hankkeessa toimintaa jollekin erityisryhmälle?' + '#help': 'Mille erityisryhmälle? Jos ei toteuteta, niin jätetään tyhjäksi.' + '#maxlength': 1250 + '#counter_type': character + '#counter_maximum': 1250 + '#counter_maximum_message': '%d/1250 merkkiä jäljellä' + '#states': + visible: + ':input[name="hankesuunnitelma_jatkohakemus"]': + value: '0' + hankkeen_kohderyhmat_tavoitus: + '#type': textarea + '#title': 'Kuinka hankkeen kohderyhmät aiotaan tavoittaa?' + '#maxlength': 1250 + '#required': true + '#counter_type': character + '#counter_maximum': 1250 + '#counter_maximum_message': '%d/1250 merkkiä jäljellä' + '#states': + visible: + ':input[name="hankesuunnitelma_jatkohakemus"]': + value: '0' + hankkeen_kohderyhmat_konkretia: + '#type': textarea + '#title': 'Miten hankkeessa edistetään konkreettisin toimenpitein valitun kohderyhmän toimintakykyä ja hyvinvointia?' + '#maxlength': 1250 + '#required': true + '#counter_type': character + '#counter_maximum': 1250 + '#counter_maximum_message': '%d/1250 merkkiä jäljellä' + '#states': + visible: + ':input[name="hankesuunnitelma_jatkohakemus"]': + value: '0' + hankkeen_kohderyhmat_osallisuus: + '#type': textarea + '#title': 'Millä tavoin hankkeessa edistetään osallisuutta? Mikä ikäihmisten rooli hankkeessa on?' + '#maxlength': 1250 + '#required': true + '#counter_type': character + '#counter_maximum': 1250 + '#counter_maximum_message': '%d/1250 merkkiä jäljellä' + '#states': + visible: + ':input[name="hankesuunnitelma_jatkohakemus"]': + value: '0' + hankkeen_kohderyhmat_osaaminen: + '#type': textarea + '#title': 'Millaista osaamista kyseisen kohderyhmän/-ryhmien kanssa työskentelystä hanketoimijoilla on ennestään?' + '#maxlength': 1250 + '#required': true + '#counter_type': character + '#counter_maximum': 1250 + '#counter_maximum_message': '%d/1250 merkkiä jäljellä' + '#states': + visible: + ':input[name="hankesuunnitelma_jatkohakemus"]': + value: '0' + hankkeen_kohderyhmat_postinrot: + '#type': textfield + '#title': 'Millä postinumeroalueella tai -alueilla Helsingissä hanke toteutetaan?' + '#help': 'Kirjaa kenttään enintään kolme (3) postinumeroaluetta ja erottele ne toisistaan pilkulla (,)' + '#required': true + '#autocomplete': 'off' + '#attributes': + class: + - webform--medium + '#size': 32 + '#states': + visible: + ':input[name="hankesuunnitelma_jatkohakemus"]': + value: '0' + hankkeen_kohderyhmat_miksi_alue: + '#type': textarea + '#title': 'Miksi juuri kyseinen alue / alueet on valittu?' + '#maxlength': 1250 + '#required': true + '#counter_type': character + '#counter_maximum': 1250 + '#counter_maximum_message': '%d/1250 merkkiä jäljellä' + '#states': + visible: + ':input[name="hankesuunnitelma_jatkohakemus"]': + value: '0' + hankkeen_riskit_section: + '#type': webform_section + '#title': '3.4 Riskit & analyysi' + '#states': + visible: + ':input[name="hankesuunnitelma_radios"]': + value: '0' + ':input[name="hankesuunnitelma_jatkohakemus"]': + value: '0' + hankkeen_riskit_keskeisimmat: + '#type': textarea + '#title': 'Mitkä ovat hankkeen toteuttamisen näkökulmasta keskeisimmät riskit?' + '#maxlength': 2500 + '#required': true + '#counter_type': character + '#counter_maximum': 2500 + '#counter_maximum_message': '%d/2500 merkkiä jäljellä' + '#states': + visible: + ':input[name="hankesuunnitelma_jatkohakemus"]': + value: '0' + hankkeen_riskit_seuranta: + '#type': textarea + '#title': 'Miten hankkeessa aiotaan toteuttaa seurantaa ja arviointia?' + '#maxlength': 2500 + '#required': true + '#counter_type': character + '#counter_maximum': 2500 + '#counter_maximum_message': '%d/2500 merkkiä jäljellä' + '#states': + visible: + ':input[name="hankesuunnitelma_jatkohakemus"]': + value: '0' + hankkeen_riskit_vakiinnuttaminen: + '#type': textarea + '#title': 'Onko hankkeen suunniteltu toiminta aikomus vakiinnuttaa osaksi hakijan/jonkun muun toimijan perustoimintaa hankkeen jälkeen? Jos kyllä, niin kuvaa tekstikenttään kuinka vakiinnuttaminen aiotaan tehdä, muuten jätä tyhjäksi.' + '#maxlength': 2500 + '#counter_type': character + '#counter_maximum': 2500 + '#counter_maximum_message': '%d/2500 merkkiä jäljellä' + '#states': + visible: + ':input[name="hankesuunnitelma_jatkohakemus"]': + value: '0' + hankkeen_valiarviointi_section: + '#type': webform_section + '#title': '3.5 2-vuotisten hankkeiden väliarviointi' + '#states': + visible: + ':input[name="hankesuunnitelma_radios"]': + value: '1' + arviointi_markup: + '#type': webform_markup + '#markup': 'Arvioi tässä osiossa hankkeen tähänastista toimintaa seuraavien kysymysten avulla. Avustuksen 2. osaa hakevien tulee liittää hakemukselle Muu liite-kohtaan niin ikään kustannuspaikkaraportti ajanjaksolta 1.6.-31.12.2024' + arviointi_toteuma: + '#type': textarea + '#title': 'Onko hanke edennyt suunnitelman mukaisesti? Arvioikaa hankkeen toteumaa tähän asti asteikolla 1-100% ja perustelkaa vastauksenne.' + '#maxlength': 1250 + '#required': true + '#counter_type': character + '#counter_maximum': 1250 + '#counter_maximum_message': '%d/1250 merkkiä jäljellä' + '#states': + visible: + ':input[name="hankesuunnitelma_radios"]': + value: '1' + arviointi_muutokset_markup: + '#type': webform_markup + '#markup': 'Onko hankkeessa tapahtunut merkittäviä muutoksia?' + arviointi_muutokset_talous: + '#type': textarea + '#title': 'Talouteen liittyen; mitä?' + '#maxlength': 1250 + '#required': true + '#counter_type': character + '#counter_maximum': 1250 + '#counter_maximum_message': '%d/1250 merkkiä jäljellä' + '#states': + visible: + ':input[name="hankesuunnitelma_radios"]': + value: '1' + arviointi_muutokset_toiminta: + '#type': textarea + '#title': 'Toimintaan liittyen; mitä?' + '#maxlength': 1250 + '#required': true + '#counter_type': character + '#counter_maximum': 1250 + '#counter_maximum_message': '%d/1250 merkkiä jäljellä' + '#states': + visible: + ':input[name="hankesuunnitelma_radios"]': + value: '1' + arviointi_muutokset_aikataulu: + '#type': textarea + '#title': 'Aikatauluun liittyen; mitä?' + '#maxlength': 1250 + '#required': true + '#counter_type': character + '#counter_maximum': 1250 + '#counter_maximum_message': '%d/1250 merkkiä jäljellä' + '#states': + visible: + ':input[name="hankesuunnitelma_radios"]': + value: '1' + arviointi_haasteet: + '#type': textarea + '#title': 'Onko hanke kohdannut toimintaan vaikuttaneita haasteita? Jos, niin millaisia?' + '#maxlength': 1250 + '#required': true + '#counter_type': character + '#counter_maximum': 1250 + '#counter_maximum_message': '%d/1250 merkkiä jäljellä' + '#states': + visible: + ':input[name="hankesuunnitelma_radios"]': + value: '1' + arviointi_saavutettavuus: + '#type': textarea + '#title': 'Miten toiminta on tavoittanut osallistujia suhteessa tavoitteisiin?' + '#maxlength': 1250 + '#required': true + '#counter_type': character + '#counter_maximum': 1250 + '#counter_maximum_message': '%d/1250 merkkiä jäljellä' + '#states': + visible: + ':input[name="hankesuunnitelma_radios"]': + value: '1' + arviointi_avustus_kaytto: + '#type': textarea + '#help': 'Avustusehdot, kohta 10e: "Myönnetty avustus on palautettava Helsingin kaupungille, jos avustusta ei ole käytetty sinä aikana, jona se on avustuspäätöksen mukaan tullut käyttää.' + '#title': 'Tuleeko ensimmäiselle hankekaudelle myönnetty avustus käytettyä näillä näkymin määräaikaan (31.5.2025) mennessä? Jos ei, niin avatkaa tähän johtaneita syitä.' + '#maxlength': 1250 + '#required': true + '#counter_type': character + '#counter_maximum': 1250 + '#counter_maximum_message': '%d/1250 merkkiä jäljellä' + '#states': + visible: + ':input[name="hankesuunnitelma_radios"]': + value: '1' + 4_talousarvio: + '#type': webform_wizard_page + '#title': '4. Talousarvio' + tulot_section: + '#type': webform_section + '#title': '4.1 Tulot' + tulot: + '#type': grants_budget_income_static + '#title': Tulot + '#multiple': false + '#incomeGroup': general + '#plannedStateOperativeSubvention__access': false + '#otherCompensationFromCity__access': false + '#stateOperativeSubvention__access': false + '#plannedOtherCompensations__access': false + '#sponsorships__access': false + '#entryFees__access': false + '#sales__access': false + '#financialFundingAndInterests__access': false + '#customerFees__access': false + '#donations__access': false + '#compensationFromCulturalAffairs__access': false + '#otherCompensationType__access': false + '#incomeWithoutCompensations__access': false + '#ownFunding__access': false + '#plannedTotalIncome__access': false + '#otherCompensations__access': false + '#plannedTotalIncomeWithoutSubventions__access': false + '#plannedShareOfIncomeWithoutSubventions__access': false + '#shareOfIncomeWithoutSubventions__access': false + '#totalIncomeWithoutSubventions__access': false + '#totalIncome__access': false + '#incomeGroupName__access': false + talous_tulon_tyyppi: + '#type': grants_budget_other_income + '#title': 'Tulon tyyppi' + '#multiple': true + '#incomeGroup': general + '#help': 'Kerro tässä minkälainen tulo on kyseessä. Toiminnan tuloja voivat olla esimerkiksi muut avustukset ja pääsy- tai osallistumismaksut. Kirjaa tähän kohtaan myös omarahoitusosuus, jos hankkeen alijäämä kuitataan muusta taloudestanne.' + '#multiple__min_items': 1 + '#multiple__empty_items': 0 + '#multiple__add_more_input': false + '#multiple__add_more_button_label': 'Lisää uusi tulo' + '#multiple__item_label': tulo + menot_section: + '#type': webform_section + '#title': '4.2 Menot' + talous_menon_tyyppi: + '#type': grants_budget_other_cost + '#title': Meno + '#multiple': true + '#incomeGroup': general + '#help': 'Kerro tässä minkälainen meno on kyseessä. Toiminnan menoja voivat olla esimerkiksi tilavuokrat ja henkilöstökulut.' + '#multiple__min_items': 1 + '#multiple__empty_items': 0 + '#multiple__add_more_input': false + '#multiple__add_more_button_label': 'Lisää uusi meno' + '#multiple__item_label': meno + lisatiedot_ja_liitteet: + '#type': webform_wizard_page + '#title': '5. Lisätiedot ja liitteet' + lisatietoja_hakemukseen_liittyen: + '#type': webform_section + '#title': 'Lisätietoja hakemukseen liittyen' + additional_information: + '#type': textarea + '#title': Lisätiedot + '#attributes': + class: + - webform--large + '#help': 'Tähän voit tarvittaessa kirjoittaa lisätietoja tai muita perusteluja hakemukseen liittyen tai ilmoittaa perustietoihin tulleista muutoksista ' + '#counter_type': character + '#maxlength': 5000 + '#counter_maximum': 5000 + '#counter_maximum_message': '%d/5000 merkkiä jäljellä' + '#cols': 63 + liitteet: + '#type': webform_section + '#title': Liitteet + attachments_info: + '#type': webform_markup + '#markup': '

Avustushakemuksen käsittelyä varten tulee toimittaa kaikki hakuilmoituksessa luetellut liitteet. Avustushakemus voidaan hylätä, jos liitteitä ei ole toimitettu. Mikäli joku liitteistä puuttuu kerro siitä hakemuksen Lisäselvitys liitteistä -kohdassa.

Helsingin kaupungille aiemmin toimitetut liitteet

Jos vaaditut liitteet on jo toimitettu toisen Helsingin kaupungille osoitetun avustushakemuksen liitteenä, samoja liitteitä ei tarvitse toimittaa uudelleen. Yhteisön vahvistettu tilinpäätös, toimintakertomus, toimintasuunnitelma ja talousarvio eivät voi olla erilaisia eri hakemusten liitteenä. Merkitse tällöin toimitettujen liitteiden kohdalla ”Liite on toimitettu yhtenä tiedostona tai toisen hakemuksen yhteydessä”.

' + notification_attachments: + '#type': webform_markup + '#markup': | +
+
+
Liitteiden sisältöä ei voi tarkastella jälkikäteen
+ +

Huomioithan, että et pysty avaamaan liitteitä sen jälkeen, kun olet liittänyt ne lomakkeelle. Näet liitteestä ainoastaan sen tiedostonimen.

+

Vaikka et voi tarkastella liitteiden sisältä jälkikäteen, lomakkeelle liitetyt liitteet lähtevät lomakkeen muiden tietojen mukana avustushakemuksen käsittelijälle.

+
+
+ '#format': full_html + extra_info: + '#type': textarea + '#title': 'Lisäselvitys liitteistä' + '#maxlength': 5000 + '#counter_type': character + '#counter_maximum': 5000 + '#counter_maximum_message': '%d/5000 merkkiä jäljellä' + '#attributes': + class: + - webform--large + '#cols': 63 + muu_liite: + '#type': grants_attachments + '#title': 'Muu liite' + '#multiple': 10 + '#filetype': '0' + '#title_display': before + '#multiple__item_label': liite + '#multiple__sorting': false + '#multiple__add': false + '#multiple__remove': false + '#multiple__add_more_input': false + '#multiple__add_more_button_label': 'Lisää liite' + '#isDeliveredLater__access': false + '#isIncludedInOtherFile__access': false + actions: + '#type': webform_actions + '#title': 'Submit button(s)' + '#submit__label': Lähetä + '#draft__label': 'Tallenna keskeneräisenä' + '#wizard_prev__label': Edellinen + '#wizard_next__label': Seuraava + '#preview_prev__label': Edellinen + '#preview_next__label': Esikatseluun + '#delete_hide': false + '#delete__label': 'Poista keskeneräinen' + '#delete__attributes': + class: + - hds-button + - hds-button--primary + '#delete__dialog': true +css: '' +javascript: '' +settings: + ajax: false + ajax_scroll_top: form + ajax_progress_type: '' + ajax_effect: '' + ajax_speed: null + page: true + page_submit_path: '' + page_confirm_path: '' + page_theme_name: '' + form_title: source_entity_webform + form_submit_once: false + form_open_message: '' + form_close_message: '' + form_exception_message: '' + form_previous_submissions: false + form_confidential: false + form_confidential_message: '' + form_disable_remote_addr: false + form_convert_anonymous: false + form_prepopulate: false + form_prepopulate_source_entity: false + form_prepopulate_source_entity_required: false + form_prepopulate_source_entity_type: '' + form_unsaved: true + form_disable_back: false + form_submit_back: true + form_disable_autocomplete: false + form_novalidate: false + form_disable_inline_errors: false + form_required: false + form_autofocus: false + form_details_toggle: false + form_reset: false + form_access_denied: default + form_access_denied_title: '' + form_access_denied_message: '' + form_access_denied_attributes: { } + form_file_limit: '' + form_attributes: { } + form_method: '' + form_action: '' + share: false + share_node: false + share_theme_name: '' + share_title: true + share_page_body_attributes: { } + submission_label: '' + submission_exception_message: '' + submission_locked_message: '' + submission_log: false + submission_excluded_elements: { } + submission_exclude_empty: false + submission_exclude_empty_checkbox: false + submission_views: { } + submission_views_replace: { } + submission_user_columns: { } + submission_user_duplicate: false + submission_access_denied: default + submission_access_denied_title: '' + submission_access_denied_message: '' + submission_access_denied_attributes: { } + previous_submission_message: '' + previous_submissions_message: '' + autofill: false + autofill_message: '' + autofill_excluded_elements: { } + wizard_progress_bar: true + wizard_progress_pages: false + wizard_progress_percentage: false + wizard_progress_link: true + wizard_progress_states: false + wizard_start_label: '' + wizard_preview_link: false + wizard_confirmation: true + wizard_confirmation_label: '7. Valmis' + wizard_auto_forward: true + wizard_auto_forward_hide_next_button: false + wizard_keyboard: true + wizard_track: '' + wizard_prev_button_label: Edellinen + wizard_next_button_label: Seuraava + wizard_toggle: true + wizard_toggle_show_label: '' + wizard_toggle_hide_label: '' + wizard_page_type: container + wizard_page_title_tag: h2 + preview: 2 + preview_label: '6. Vahvista, esikatsele ja lähetä' + preview_title: 'Vahvista, esikatsele ja lähetä' + preview_message: '' + preview_attributes: { } + preview_excluded_elements: { } + preview_exclude_empty: false + preview_exclude_empty_checkbox: false + draft: all + draft_multiple: false + draft_auto_save: false + draft_saved_message: '' + draft_loaded_message: '' + draft_pending_single_message: '' + draft_pending_multiple_message: '' + confirmation_type: none + confirmation_url: '' + confirmation_title: '' + confirmation_message: '' + confirmation_attributes: { } + confirmation_back: true + confirmation_back_label: '' + confirmation_back_attributes: { } + confirmation_exclude_query: true + confirmation_exclude_token: true + confirmation_update: false + limit_total: null + limit_total_interval: null + limit_total_message: '' + limit_total_unique: false + limit_user: null + limit_user_interval: null + limit_user_message: '' + limit_user_unique: false + entity_limit_total: null + entity_limit_total_interval: null + entity_limit_user: null + entity_limit_user_interval: null + purge: draft + purge_days: 365 + results_disabled: false + results_disabled_ignore: false + results_customize: false + token_view: false + token_update: false + token_delete: false + serial_disabled: false +access: + create: + roles: + - anonymous + - authenticated + users: { } + permissions: { } + view_any: + roles: { } + users: { } + permissions: { } + update_any: + roles: { } + users: { } + permissions: { } + delete_any: + roles: { } + users: { } + permissions: { } + purge_any: + roles: { } + users: { } + permissions: { } + view_own: + roles: { } + users: { } + permissions: { } + update_own: + roles: { } + users: { } + permissions: { } + delete_own: + roles: { } + users: { } + permissions: { } + administer: + roles: { } + users: { } + permissions: { } + test: + roles: { } + users: { } + permissions: { } + configuration: + roles: { } + users: { } + permissions: { } +handlers: + grants_handler: + id: grants_handler + handler_id: null + label: 'Grants Handler' + notes: '' + status: true + conditions: { } + weight: null + settings: + id: grants_handler + handler_id: null + label: 'Grants Handler' + notes: '' + status: true + conditions: { } + weight: null + settings: + id: grants_handler + label: 'Grants Handler' + notes: '' + handler_id: null + status: 1 + conditions: { } + weight: '' + settings: + id: grants_handler + handler_id: null + label: 'Grants Handler' + notes: '' + status: true + conditions: { } + weight: null + settings: + id: grants_handler + handler_id: null + label: 'Grants Handler' + notes: '' + status: true + conditions: { } + weight: null + settings: + id: grants_handler + handler_id: null + label: 'Grants Handler' + notes: '' + status: true + conditions: { } + weight: null + settings: + id: grants_handler + handler_id: null + label: 'Grants Handler' + notes: '' + status: true + conditions: { } + weight: null + settings: + id: grants_handler + handler_id: null + label: 'Grants Handler' + notes: '' + status: true + conditions: { } + weight: null + settings: + id: grants_handler + handler_id: null + label: 'Grants Handler' + notes: '' + status: true + conditions: { } + weight: null + settings: + id: grants_handler + handler_id: grants_handler + label: 'Grants Handler' + notes: '' + status: true + conditions: { } + weight: 0 + settings: + debug: false + debug: false +variants: { } diff --git a/public/modules/custom/grants_metadata/src/GrantsConverterService.php b/public/modules/custom/grants_metadata/src/GrantsConverterService.php index d677e09005..b8994ca216 100644 --- a/public/modules/custom/grants_metadata/src/GrantsConverterService.php +++ b/public/modules/custom/grants_metadata/src/GrantsConverterService.php @@ -143,4 +143,44 @@ public function convertToCommaFloat(array $value): ?string { return str_replace(['€', '.', ' '], ['', ',', ''], $fieldValue); } + /** + * Converts a boolean value represented as a string to a Kyllä/Ei string. + * + * This will be called when converting Kyllä/Ei values to webform accepted + * booleanish values. They are stings with 1 or 0 as value. + * So not boolean per se, but this method can be made to support int values + * as well. + * + * @param string $value + * The boolean value as a string ('1', '0', 'Kyllä', 'Ei'). + * + * @return string + * The hard coded 'Yes' ('Kyllä') or 'No' ('Ei') string. + */ + public function convertBooleanToYesNo(string $value): string { + return match ($value) { + 'Kyllä', 'Ei' => $value, + '1' => 'Kyllä', + default => 'Ei', + }; + } + + /** + * Converts a string value back to a boolean integer. + * + * This method is used to convert the 'Kyllä' or 'Ei' strings to booleanish + * values for Webform to consume. While we return an integer, it is not a + * boolean per se, but a value that Webform uses to represent a boolean value. + * + * @param string $value + * The localized 'Yes' ('Kyllä') or 'No' ('Ei') string. + * + * @return int + * The boolean value as an integer (1 for 'Kyllä', 0 for 'Ei'). + */ + public function extractBooleanYesNoValue(string $value): int { + // Return 1 if the value is 'Kyllä', otherwise return 0. + return $value === 'Kyllä' ? 1 : 0; + } + } diff --git a/public/modules/custom/grants_metadata/src/TypedData/Definition/KuvaErillisDefinition.php b/public/modules/custom/grants_metadata/src/TypedData/Definition/KuvaErillisDefinition.php index d625fab6cf..2063f18de9 100644 --- a/public/modules/custom/grants_metadata/src/TypedData/Definition/KuvaErillisDefinition.php +++ b/public/modules/custom/grants_metadata/src/TypedData/Definition/KuvaErillisDefinition.php @@ -35,17 +35,26 @@ public function getPropertyDefinitions() { $customQuestions = [ 'hankesuunnitelma_radios' => [ - 'type' => 'boolean', - 'typeOverride' => [ - 'dataType' => 'string', - 'jsonType' => 'bool', + 'type' => 'string', + 'valueCallback' => [ + 'service' => 'grants_metadata.converter', + 'method' => 'convertBooleanToYesNo', + ], + 'webformValueExtracter' => [ + 'service' => 'grants_metadata.converter', + 'method' => 'extractBooleanYesNoValue', ], ], + 'ensisijainen_taiteen_ala' => [], 'hankesuunnitelma_jatkohakemus' => [ - 'type' => 'boolean', - 'typeOverride' => [ - 'dataType' => 'string', - 'jsonType' => 'bool', + 'type' => 'string', + 'valueCallback' => [ + 'service' => 'grants_metadata.converter', + 'method' => 'convertBooleanToYesNo', + ], + 'webformValueExtracter' => [ + 'service' => 'grants_metadata.converter', + 'method' => 'extractBooleanYesNoValue', ], ], 'hankkeen_tarkoitus_tavoitteet' => [], @@ -59,7 +68,7 @@ public function getPropertyDefinitions() { 'service' => 'grants_metadata.converter', 'method' => 'convertDates', 'arguments' => [ - 'dateFormat' => 'c', + 'dateFormat' => 'Y-m-d', ], ], ], @@ -72,7 +81,7 @@ public function getPropertyDefinitions() { 'service' => 'grants_metadata.converter', 'method' => 'convertDates', 'arguments' => [ - 'dateFormat' => 'c', + 'dateFormat' => 'Y-m-d', ], ], ], @@ -92,14 +101,13 @@ public function getPropertyDefinitions() { 'hankkeen_riskit_keskeisimmat' => [], 'hankkeen_riskit_seuranta' => [], 'hankkeen_riskit_vakiinnuttaminen' => [], - // Example forms. - 'puuttuva_kentta_1' => [], - 'puuttuva_kentta_2' => [], - 'vaikka_sahkoposti' => [], - 'checkboksiki_onnistuu' => [], - 'tekstialue' => [], - 'tekstikentta' => [], - 'paivamaara' => [], + 'arviointi_toteuma' => [], + 'arviointi_muutokset_talous' => [], + 'arviointi_muutokset_toiminta' => [], + 'arviointi_muutokset_aikataulu' => [], + 'arviointi_haasteet' => [], + 'arviointi_saavutettavuus' => [], + 'arviointi_avustus_kaytto' => [], ]; foreach ($customQuestions as $key => $value) { @@ -168,6 +176,10 @@ private function createCustomQuestionDefinitions(string $key, array $value, arra if (isset($value['valueCallback'])) { $info[$key]->setSetting('valueCallback', $value['valueCallback']); } + // Add value extractor if set. + if (isset($value['webformValueExtracter'])) { + $info[$key]->setSetting('webformValueExtracter', $value['webformValueExtracter']); + } // Add default value if set or empty value. if (isset($value['defaultValue'])) { $info[$key]->setSetting('defaultValue', $value['defaultValue']); diff --git a/tools/http/http-client.env.json b/tools/http/http-client.env.json index b2d490c533..edcbff3c8c 100644 --- a/tools/http/http-client.env.json +++ b/tools/http/http-client.env.json @@ -1,7 +1,7 @@ { "dev": { "atvUrl": "https://atv-api-hki-kanslia-atv-test.agw.arodevtest.hel.fi", - "transactionId": "LOCALYRTTI12-070-0000009", + "transactionId": "LOCALYRTTI12-070-0000012", "document_id": "28753685-24b8-4542-b1c1-cc70ff9f9fbc", "integraatioUrl": "https://avustus-integration-test.agw.arodevtest.hel.fi" } From f301ce69193abd5eafa62658571b6725548eee16 Mon Sep 17 00:00:00 2001 From: hel-platta-automation <95360595+hel-platta-automation@users.noreply.github.com> Date: Thu, 14 Nov 2024 16:07:45 +0200 Subject: [PATCH 41/74] Update configuration (#1562) --- composer.lock | 214 +++++++++++++++++++++++++------------------------- 1 file changed, 108 insertions(+), 106 deletions(-) diff --git a/composer.lock b/composer.lock index 690a6d4d42..84452c5fa7 100644 --- a/composer.lock +++ b/composer.lock @@ -3116,16 +3116,16 @@ }, { "name": "drupal/core", - "version": "10.3.7", + "version": "10.3.8", "source": { "type": "git", "url": "https://github.com/drupal/core.git", - "reference": "5b11ec4e38e71748c51287cbd64cfcc43faeb624" + "reference": "4006024a8dd7c9976fad0a2af7c9034d120c8e44" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/drupal/core/zipball/5b11ec4e38e71748c51287cbd64cfcc43faeb624", - "reference": "5b11ec4e38e71748c51287cbd64cfcc43faeb624", + "url": "https://api.github.com/repos/drupal/core/zipball/4006024a8dd7c9976fad0a2af7c9034d120c8e44", + "reference": "4006024a8dd7c9976fad0a2af7c9034d120c8e44", "shasum": "" }, "require": { @@ -3171,7 +3171,7 @@ "symfony/serializer": "^6.4", "symfony/validator": "^6.4", "symfony/yaml": "^6.4", - "twig/twig": "^3.14.0" + "twig/twig": "^3.14.2" }, "conflict": { "drush/drush": "<12.4.3" @@ -3274,13 +3274,13 @@ ], "description": "Drupal is an open source content management platform powering millions of websites and applications.", "support": { - "source": "https://github.com/drupal/core/tree/10.3.7" + "source": "https://github.com/drupal/core/tree/10.3.8" }, - "time": "2024-11-07T08:22:50+00:00" + "time": "2024-11-12T09:52:10+00:00" }, { "name": "drupal/core-composer-scaffold", - "version": "10.3.7", + "version": "10.3.8", "source": { "type": "git", "url": "https://github.com/drupal/core-composer-scaffold.git", @@ -3324,7 +3324,7 @@ "drupal" ], "support": { - "source": "https://github.com/drupal/core-composer-scaffold/tree/10.3.7" + "source": "https://github.com/drupal/core-composer-scaffold/tree/10.3.8" }, "time": "2024-08-22T14:31:34+00:00" }, @@ -5253,17 +5253,17 @@ }, { "name": "drupal/focal_point", - "version": "2.1.1", + "version": "2.1.2", "source": { "type": "git", "url": "https://git.drupalcode.org/project/focal_point.git", - "reference": "2.1.1" + "reference": "2.1.2" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/focal_point-2.1.1.zip", - "reference": "2.1.1", - "shasum": "f8c24bb4257f784176e79ec6f2b4c11ed46391e0" + "url": "https://ftp.drupal.org/files/projects/focal_point-2.1.2.zip", + "reference": "2.1.2", + "shasum": "5f8ffadd37748506c8f00314b1d45c947eb27cf7" }, "require": { "drupal/core": "^9.3 || ^10 || ^11", @@ -5275,8 +5275,8 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "2.1.1", - "datestamp": "1721126807", + "version": "2.1.2", + "datestamp": "1731556344", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -5491,16 +5491,16 @@ }, { "name": "drupal/hdbt", - "version": "6.8.4", + "version": "6.8.5", "source": { "type": "git", "url": "https://github.com/City-of-Helsinki/drupal-hdbt.git", - "reference": "dfabf9a5cdc0953ea7e3078ed002fe4bc937abad" + "reference": "45ae632cf0b62b990b8098f9a07f53a348fa1bf1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/City-of-Helsinki/drupal-hdbt/zipball/dfabf9a5cdc0953ea7e3078ed002fe4bc937abad", - "reference": "dfabf9a5cdc0953ea7e3078ed002fe4bc937abad", + "url": "https://api.github.com/repos/City-of-Helsinki/drupal-hdbt/zipball/45ae632cf0b62b990b8098f9a07f53a348fa1bf1", + "reference": "45ae632cf0b62b990b8098f9a07f53a348fa1bf1", "shasum": "" }, "require": { @@ -5519,10 +5519,10 @@ "Drupal" ], "support": { - "source": "https://github.com/City-of-Helsinki/drupal-hdbt/tree/6.8.4", + "source": "https://github.com/City-of-Helsinki/drupal-hdbt/tree/6.8.5", "issues": "https://github.com/City-of-Helsinki/drupal-hdbt/issues" }, - "time": "2024-11-08T17:53:14+00:00" + "time": "2024-11-14T10:30:35+00:00" }, { "name": "drupal/hdbt_admin", @@ -9432,17 +9432,17 @@ }, { "name": "drupal/stomp", - "version": "2.0.0-alpha4", + "version": "2.0.0-alpha5", "source": { "type": "git", "url": "https://git.drupalcode.org/project/stomp.git", - "reference": "2.0.0-alpha4" + "reference": "2.0.0-alpha5" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/stomp-2.0.0-alpha4.zip", - "reference": "2.0.0-alpha4", - "shasum": "624db88867009eab5da9ccc259a396eb79927809" + "url": "https://ftp.drupal.org/files/projects/stomp-2.0.0-alpha5.zip", + "reference": "2.0.0-alpha5", + "shasum": "5f904047325f8f55674c77e16f61a4807cb51f7e" }, "require": { "drupal/core": "^9 || ^10 || ^11", @@ -9455,18 +9455,18 @@ "require-dev": { "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", "drupal/coder": "^8.3", - "drush/drush": "^11.6 || ^12", + "drush/drush": "^11.6 || ^12 || ^13", "jangregor/phpstan-prophecy": "dev-master", "mglaman/phpstan-drupal": "^1.2", "phpstan/extension-installer": "^1.3", - "phpstan/phpstan": "1.11.x-dev", - "phpstan/phpstan-deprecation-rules": "1.2.x-dev" + "phpstan/phpstan": "^1.9", + "phpstan/phpstan-deprecation-rules": "^1.1" }, "type": "drupal-module", "extra": { "drupal": { - "version": "2.0.0-alpha4", - "datestamp": "1711347968", + "version": "2.0.0-alpha5", + "datestamp": "1731482648", "security-coverage": { "status": "not-covered", "message": "Alpha releases are not covered by Drupal security advisories." @@ -12718,16 +12718,16 @@ }, { "name": "monolog/monolog", - "version": "3.7.0", + "version": "3.8.0", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "f4393b648b78a5408747de94fca38beb5f7e9ef8" + "reference": "32e515fdc02cdafbe4593e30a9350d486b125b67" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/f4393b648b78a5408747de94fca38beb5f7e9ef8", - "reference": "f4393b648b78a5408747de94fca38beb5f7e9ef8", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/32e515fdc02cdafbe4593e30a9350d486b125b67", + "reference": "32e515fdc02cdafbe4593e30a9350d486b125b67", "shasum": "" }, "require": { @@ -12747,12 +12747,14 @@ "guzzlehttp/psr7": "^2.2", "mongodb/mongodb": "^1.8", "php-amqplib/php-amqplib": "~2.4 || ^3", - "phpstan/phpstan": "^1.9", - "phpstan/phpstan-deprecation-rules": "^1.0", - "phpstan/phpstan-strict-rules": "^1.4", - "phpunit/phpunit": "^10.5.17", + "php-console/php-console": "^3.1.8", + "phpstan/phpstan": "^2", + "phpstan/phpstan-deprecation-rules": "^2", + "phpstan/phpstan-strict-rules": "^2", + "phpunit/phpunit": "^10.5.17 || ^11.0.7", "predis/predis": "^1.1 || ^2", - "ruflin/elastica": "^7", + "rollbar/rollbar": "^4.0", + "ruflin/elastica": "^7 || ^8", "symfony/mailer": "^5.4 || ^6", "symfony/mime": "^5.4 || ^6" }, @@ -12803,7 +12805,7 @@ ], "support": { "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/3.7.0" + "source": "https://github.com/Seldaek/monolog/tree/3.8.0" }, "funding": [ { @@ -12815,7 +12817,7 @@ "type": "tidelift" } ], - "time": "2024-06-28T09:40:51+00:00" + "time": "2024-11-12T13:57:08+00:00" }, { "name": "nesbot/carbon", @@ -15309,16 +15311,16 @@ }, { "name": "symfony/console", - "version": "v6.4.14", + "version": "v6.4.15", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "897c2441ed4eec8a8a2c37b943427d24dba3f26b" + "reference": "f1fc6f47283e27336e7cebb9e8946c8de7bff9bd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/897c2441ed4eec8a8a2c37b943427d24dba3f26b", - "reference": "897c2441ed4eec8a8a2c37b943427d24dba3f26b", + "url": "https://api.github.com/repos/symfony/console/zipball/f1fc6f47283e27336e7cebb9e8946c8de7bff9bd", + "reference": "f1fc6f47283e27336e7cebb9e8946c8de7bff9bd", "shasum": "" }, "require": { @@ -15383,7 +15385,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.4.14" + "source": "https://github.com/symfony/console/tree/v6.4.15" }, "funding": [ { @@ -15399,20 +15401,20 @@ "type": "tidelift" } ], - "time": "2024-11-05T15:34:40+00:00" + "time": "2024-11-06T14:19:14+00:00" }, { "name": "symfony/dependency-injection", - "version": "v6.4.13", + "version": "v6.4.15", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "728ae8f4e190133ce99d6d5f0bc1e8c8bd7c7a96" + "reference": "70ab1f65a4516ef741e519ea938e6aa465e6aa36" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/728ae8f4e190133ce99d6d5f0bc1e8c8bd7c7a96", - "reference": "728ae8f4e190133ce99d6d5f0bc1e8c8bd7c7a96", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/70ab1f65a4516ef741e519ea938e6aa465e6aa36", + "reference": "70ab1f65a4516ef741e519ea938e6aa465e6aa36", "shasum": "" }, "require": { @@ -15464,7 +15466,7 @@ "description": "Allows you to standardize and centralize the way objects are constructed in your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dependency-injection/tree/v6.4.13" + "source": "https://github.com/symfony/dependency-injection/tree/v6.4.15" }, "funding": [ { @@ -15480,7 +15482,7 @@ "type": "tidelift" } ], - "time": "2024-10-25T15:07:50+00:00" + "time": "2024-11-09T06:56:25+00:00" }, { "name": "symfony/deprecation-contracts", @@ -15912,16 +15914,16 @@ }, { "name": "symfony/http-foundation", - "version": "v6.4.14", + "version": "v6.4.15", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "ba020a321a95519303a3f09ec2824d34d601c388" + "reference": "9b3165eb2f04aeaa1a5a2cfef73e63fe3b22dff6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/ba020a321a95519303a3f09ec2824d34d601c388", - "reference": "ba020a321a95519303a3f09ec2824d34d601c388", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/9b3165eb2f04aeaa1a5a2cfef73e63fe3b22dff6", + "reference": "9b3165eb2f04aeaa1a5a2cfef73e63fe3b22dff6", "shasum": "" }, "require": { @@ -15931,12 +15933,12 @@ "symfony/polyfill-php83": "^1.27" }, "conflict": { - "symfony/cache": "<6.3" + "symfony/cache": "<6.4.12|>=7.0,<7.1.5" }, "require-dev": { "doctrine/dbal": "^2.13.1|^3|^4", "predis/predis": "^1.1|^2.0", - "symfony/cache": "^6.3|^7.0", + "symfony/cache": "^6.4.12|^7.1.5", "symfony/dependency-injection": "^5.4|^6.0|^7.0", "symfony/expression-language": "^5.4|^6.0|^7.0", "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4|^7.0", @@ -15969,7 +15971,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v6.4.14" + "source": "https://github.com/symfony/http-foundation/tree/v6.4.15" }, "funding": [ { @@ -15985,20 +15987,20 @@ "type": "tidelift" } ], - "time": "2024-11-05T16:39:55+00:00" + "time": "2024-11-08T16:09:24+00:00" }, { "name": "symfony/http-kernel", - "version": "v6.4.14", + "version": "v6.4.15", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "8278a947d0369754a47b758a9e17b72cab970951" + "reference": "b002a5b3947653c5aee3adac2a024ea615fd3ff5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/8278a947d0369754a47b758a9e17b72cab970951", - "reference": "8278a947d0369754a47b758a9e17b72cab970951", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/b002a5b3947653c5aee3adac2a024ea615fd3ff5", + "reference": "b002a5b3947653c5aee3adac2a024ea615fd3ff5", "shasum": "" }, "require": { @@ -16083,7 +16085,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v6.4.14" + "source": "https://github.com/symfony/http-kernel/tree/v6.4.15" }, "funding": [ { @@ -16099,7 +16101,7 @@ "type": "tidelift" } ], - "time": "2024-11-06T09:45:21+00:00" + "time": "2024-11-13T13:57:37+00:00" }, { "name": "symfony/mailer", @@ -17192,16 +17194,16 @@ }, { "name": "symfony/process", - "version": "v6.4.14", + "version": "v6.4.15", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "25214adbb0996d18112548de20c281be9f27279f" + "reference": "3cb242f059c14ae08591c5c4087d1fe443564392" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/25214adbb0996d18112548de20c281be9f27279f", - "reference": "25214adbb0996d18112548de20c281be9f27279f", + "url": "https://api.github.com/repos/symfony/process/zipball/3cb242f059c14ae08591c5c4087d1fe443564392", + "reference": "3cb242f059c14ae08591c5c4087d1fe443564392", "shasum": "" }, "require": { @@ -17233,7 +17235,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v6.4.14" + "source": "https://github.com/symfony/process/tree/v6.4.15" }, "funding": [ { @@ -17249,7 +17251,7 @@ "type": "tidelift" } ], - "time": "2024-11-06T09:25:01+00:00" + "time": "2024-11-06T14:19:14+00:00" }, { "name": "symfony/psr-http-message-bridge", @@ -17419,16 +17421,16 @@ }, { "name": "symfony/serializer", - "version": "v6.4.13", + "version": "v6.4.15", "source": { "type": "git", "url": "https://github.com/symfony/serializer.git", - "reference": "8be421505938b11a0ca4f656e4322232236386f0" + "reference": "9d862d66198f3c2e30404228629ef4c18d5d608e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/serializer/zipball/8be421505938b11a0ca4f656e4322232236386f0", - "reference": "8be421505938b11a0ca4f656e4322232236386f0", + "url": "https://api.github.com/repos/symfony/serializer/zipball/9d862d66198f3c2e30404228629ef4c18d5d608e", + "reference": "9d862d66198f3c2e30404228629ef4c18d5d608e", "shasum": "" }, "require": { @@ -17497,7 +17499,7 @@ "description": "Handles serializing and deserializing data structures, including object graphs, into array structures or other formats like XML and JSON.", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/serializer/tree/v6.4.13" + "source": "https://github.com/symfony/serializer/tree/v6.4.15" }, "funding": [ { @@ -17513,7 +17515,7 @@ "type": "tidelift" } ], - "time": "2024-10-03T09:58:04+00:00" + "time": "2024-10-23T13:25:59+00:00" }, { "name": "symfony/service-contracts", @@ -17600,16 +17602,16 @@ }, { "name": "symfony/string", - "version": "v6.4.13", + "version": "v6.4.15", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "38371c60c71c72b3d64d8d76f6b1bb81a2cc3627" + "reference": "73a5e66ea2e1677c98d4449177c5a9cf9d8b4c6f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/38371c60c71c72b3d64d8d76f6b1bb81a2cc3627", - "reference": "38371c60c71c72b3d64d8d76f6b1bb81a2cc3627", + "url": "https://api.github.com/repos/symfony/string/zipball/73a5e66ea2e1677c98d4449177c5a9cf9d8b4c6f", + "reference": "73a5e66ea2e1677c98d4449177c5a9cf9d8b4c6f", "shasum": "" }, "require": { @@ -17666,7 +17668,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v6.4.13" + "source": "https://github.com/symfony/string/tree/v6.4.15" }, "funding": [ { @@ -17682,7 +17684,7 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:18:03+00:00" + "time": "2024-11-13T13:31:12+00:00" }, { "name": "symfony/translation", @@ -17859,16 +17861,16 @@ }, { "name": "symfony/validator", - "version": "v6.4.14", + "version": "v6.4.15", "source": { "type": "git", "url": "https://github.com/symfony/validator.git", - "reference": "dc259b85e59a6569e205966d447dec0a7d95facf" + "reference": "7541055cdaf54ff95f0735bf703d313374e8b20b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/validator/zipball/dc259b85e59a6569e205966d447dec0a7d95facf", - "reference": "dc259b85e59a6569e205966d447dec0a7d95facf", + "url": "https://api.github.com/repos/symfony/validator/zipball/7541055cdaf54ff95f0735bf703d313374e8b20b", + "reference": "7541055cdaf54ff95f0735bf703d313374e8b20b", "shasum": "" }, "require": { @@ -17936,7 +17938,7 @@ "description": "Provides tools to validate values", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/validator/tree/v6.4.14" + "source": "https://github.com/symfony/validator/tree/v6.4.15" }, "funding": [ { @@ -17952,20 +17954,20 @@ "type": "tidelift" } ], - "time": "2024-11-04T11:33:53+00:00" + "time": "2024-11-08T15:28:48+00:00" }, { "name": "symfony/var-dumper", - "version": "v6.4.14", + "version": "v6.4.15", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "93c09246038178717a9c14b809ea8151ffcf7091" + "reference": "38254d5a5ac2e61f2b52f9caf54e7aa3c9d36b80" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/93c09246038178717a9c14b809ea8151ffcf7091", - "reference": "93c09246038178717a9c14b809ea8151ffcf7091", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/38254d5a5ac2e61f2b52f9caf54e7aa3c9d36b80", + "reference": "38254d5a5ac2e61f2b52f9caf54e7aa3c9d36b80", "shasum": "" }, "require": { @@ -18021,7 +18023,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v6.4.14" + "source": "https://github.com/symfony/var-dumper/tree/v6.4.15" }, "funding": [ { @@ -18037,7 +18039,7 @@ "type": "tidelift" } ], - "time": "2024-11-05T15:34:40+00:00" + "time": "2024-11-08T15:28:48+00:00" }, { "name": "symfony/var-exporter", @@ -20640,16 +20642,16 @@ }, { "name": "phpdocumentor/reflection-docblock", - "version": "5.5.1", + "version": "5.6.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "0c70d2c566e899666f367ab7b80986beb3581e6f" + "reference": "f3558a4c23426d12bffeaab463f8a8d8b681193c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/0c70d2c566e899666f367ab7b80986beb3581e6f", - "reference": "0c70d2c566e899666f367ab7b80986beb3581e6f", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/f3558a4c23426d12bffeaab463f8a8d8b681193c", + "reference": "f3558a4c23426d12bffeaab463f8a8d8b681193c", "shasum": "" }, "require": { @@ -20658,7 +20660,7 @@ "php": "^7.4 || ^8.0", "phpdocumentor/reflection-common": "^2.2", "phpdocumentor/type-resolver": "^1.7", - "phpstan/phpdoc-parser": "^1.7", + "phpstan/phpdoc-parser": "^1.7|^2.0", "webmozart/assert": "^1.9.1" }, "require-dev": { @@ -20698,9 +20700,9 @@ "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", "support": { "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.5.1" + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.6.0" }, - "time": "2024-11-06T11:58:54+00:00" + "time": "2024-11-12T11:25:25+00:00" }, { "name": "phpdocumentor/type-resolver", From 02b60d329092599666a89e9b8821cb5830655b32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20Kalij=C3=A4rvi?= Date: Tue, 19 Nov 2024 09:52:16 +0200 Subject: [PATCH 42/74] feat: UHF-8678: Use Drupal.cookieConsent functions (#1559) * UHF-8678: Updated the matomo.js to use Drupal.cookieConsent functions. * UHF-8678: Added dist. --- .../custom/hdbt_subtheme/dist/js/matomo.min.js | 2 +- .../custom/hdbt_subtheme/src/js/matomo.js | 18 ++++++++---------- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/public/themes/custom/hdbt_subtheme/dist/js/matomo.min.js b/public/themes/custom/hdbt_subtheme/dist/js/matomo.min.js index 52425e03f8..97c4ae16ef 100644 --- a/public/themes/custom/hdbt_subtheme/dist/js/matomo.min.js +++ b/public/themes/custom/hdbt_subtheme/dist/js/matomo.min.js @@ -1 +1 @@ -!function(e,Drupal){function c(){if(void 0!==Drupal.eu_cookie_compliance&&Drupal.eu_cookie_compliance.hasAgreed("statistics")){const e=window._paq=window._paq||[];e.push(["trackPageView"]),e.push(["enableLinkTracking"]),function(){const c="//webanalytics.digiaiiris.com/js/";e.push(["setTrackerUrl",`${c}tracker.php`]),e.push(["setSiteId","1219"]);const i=document,n=i.createElement("script"),t=i.getElementsByTagName("script")[0];n.async=!0,n.src=`${c}piwik.min.js`,t.parentNode.insertBefore(n,t)}()}}e(document).on("eu_cookie_compliance.changeStatus",c()),e(document).ready(c)}(jQuery,Drupal); \ No newline at end of file +!function(e,Drupal){const t=()=>{if(Drupal.cookieConsent.getConsentStatus(["statistics"])){const e=window._paq=window._paq||[];e.push(["trackPageView"]),e.push(["enableLinkTracking"]),function(){const t="//webanalytics.digiaiiris.com/js/";e.push(["setTrackerUrl",`${t}tracker.php`]),e.push(["setSiteId","1219"]);const n=document,i=n.createElement("script"),s=n.getElementsByTagName("script")[0];i.async=!0,i.src=`${t}piwik.min.js`,s.parentNode.insertBefore(i,s)}()}};Drupal.cookieConsent.initialized()?t():Drupal.cookieConsent.loadFunction(t)}(jQuery,Drupal); \ No newline at end of file diff --git a/public/themes/custom/hdbt_subtheme/src/js/matomo.js b/public/themes/custom/hdbt_subtheme/src/js/matomo.js index 7a68ba381b..6e730bc240 100644 --- a/public/themes/custom/hdbt_subtheme/src/js/matomo.js +++ b/public/themes/custom/hdbt_subtheme/src/js/matomo.js @@ -1,12 +1,9 @@ // eslint-disable-next-line func-names (function ($, Drupal) { - function loadMatomoAnalytics() { - if (typeof Drupal.eu_cookie_compliance === "undefined") { - return; - } + const loadMatomoAnalytics = () => { // Load Matomo only if statistics cookies are allowed. - if (Drupal.eu_cookie_compliance.hasAgreed("statistics")) { + if (Drupal.cookieConsent.getConsentStatus(['statistics'])) { // Matomo Tag Manager // eslint-disable-next-line no-multi-assign const _paq = (window._paq = window._paq || []); @@ -25,11 +22,12 @@ s.parentNode.insertBefore(g, s); })(); } - } + }; // Load when cookie settings are changed. - $(document).on("eu_cookie_compliance.changeStatus", loadMatomoAnalytics()); - - // Load on page load. - $(document).ready(loadMatomoAnalytics); + if (Drupal.cookieConsent.initialized()) { + loadMatomoAnalytics(); + } else { + Drupal.cookieConsent.loadFunction(loadMatomoAnalytics); + } })(jQuery, Drupal); From 469a507a7323d6eec136f5f6a6e0b81b0f2d506a Mon Sep 17 00:00:00 2001 From: Janne Suominen Date: Tue, 19 Nov 2024 09:52:41 +0200 Subject: [PATCH 43/74] fix: UHF-10903: Update application copy modal to use new dialog (#1563) * UHF-10903: New dialog form * UHF-10903: Refactor application copy to custom controller. * UHF-10903: Add custom selector option for dialogs. * UHF-10903: Update tests for new copy functionality. * UHF-10903: Rename method + 1 error * UHF-10903: Fix typo * UHF-10903: Refactor createDialog to support object argument. --- e2e/utils/copying_helpers.ts | 25 +- .../grants_handler.libraries.yml | 8 + .../grants_handler/grants_handler.module | 42 +-- .../grants_handler/grants_handler.routing.yml | 24 +- .../js/application-copy-dialog.js | 36 +++ .../custom/grants_handler/js/grants-dialog.js | 77 +++-- .../grants_handler/js/webform.form.unsaved.js | 34 +- .../grants_handler/src/ApplicationHelpers.php | 4 + .../src/Controller/ApplicationController.php | 3 +- .../CopyApplicationAjaxController.php | 199 ++++++++++++ .../src/Form/CopyApplicationForm.php | 146 --------- .../src/Form/CopyApplicationModalForm.php | 300 ------------------ .../grants_profile/js/profile_dialog.js | 36 +-- .../application-copy-dialog-content.html.twig | 2 + .../webform-submission-information.html.twig | 70 ++-- 15 files changed, 428 insertions(+), 578 deletions(-) create mode 100644 public/modules/custom/grants_handler/js/application-copy-dialog.js create mode 100644 public/modules/custom/grants_handler/src/Controller/CopyApplicationAjaxController.php delete mode 100644 public/modules/custom/grants_handler/src/Form/CopyApplicationForm.php delete mode 100644 public/modules/custom/grants_handler/src/Form/CopyApplicationModalForm.php create mode 100644 public/themes/custom/hdbt_subtheme/templates/webform/application-copy-dialog-content.html.twig diff --git a/e2e/utils/copying_helpers.ts b/e2e/utils/copying_helpers.ts index fa20439edd..2a293a4c0b 100644 --- a/e2e/utils/copying_helpers.ts +++ b/e2e/utils/copying_helpers.ts @@ -117,13 +117,13 @@ const makeApplicationCopy = async ( logger(`Navigated to: ${viewPageURL}.`); // Make sure we get there. - const applicationIdContainer = await page.locator('.webform-submission__application_id'); + const applicationIdContainer = page.locator('.webform-submission__application_id'); const applicationIdContainerText = await applicationIdContainer.textContent(); expect(applicationIdContainerText).toContain(originalApplicationId); // Make sure the application can be copied. If not, skip this test. - const isCopyApplicationButtonVisible = await page.locator('#copy-application-modal-form-link').isVisible(); - if (!isCopyApplicationButtonVisible) { + const copyApplicationDialogButton = page.locator('#copy-application-button'); + if (!await copyApplicationDialogButton.isVisible()) { logger(`Copying disabled for application: ${originalApplicationId}. Skipping test.`); test.skip(true, 'Skip copy test'); } @@ -131,8 +131,23 @@ const makeApplicationCopy = async ( // Copy the original application. logger(`Copying application: ${originalApplicationId}...`); - await page.locator('#copy-application-modal-form-link').click(); - await page.locator('#copy-application-modal-form-submit').click(); + // click the copy button + await copyApplicationDialogButton.click(); + + const dialogSelector = '.dialog.application-copy-dialog'; + const actionButtonSelector = '#helfi-dialog__action-button'; + + // Wait for the dialog to appear + await page.waitForSelector(dialogSelector); + + // Check if the dialog is visible + const isDialogVisible = await page.locator(dialogSelector).isVisible(); + + // Assert that the dialog is visible + expect(isDialogVisible).toBe(true); + + // Click the action button within the specific dialog + await page.locator(`${dialogSelector} ${actionButtonSelector}`).click(); // Wait for a redirect to the new application and store the new application ID and submission URL. await logCurrentUrl(page); diff --git a/public/modules/custom/grants_handler/grants_handler.libraries.yml b/public/modules/custom/grants_handler/grants_handler.libraries.yml index 9ba38aff5b..029766017b 100644 --- a/public/modules/custom/grants_handler/grants_handler.libraries.yml +++ b/public/modules/custom/grants_handler/grants_handler.libraries.yml @@ -61,3 +61,11 @@ grants-dialog: js/grants-dialog.js: { } dependencies: - core/drupal + +application-copy-dialog: + js: + js/application-copy-dialog.js: {} + dependencies: + - core/jquery + - core/drupal + - core/drupalSettings diff --git a/public/modules/custom/grants_handler/grants_handler.module b/public/modules/custom/grants_handler/grants_handler.module index d8680f8d66..df4f2a8c13 100644 --- a/public/modules/custom/grants_handler/grants_handler.module +++ b/public/modules/custom/grants_handler/grants_handler.module @@ -21,7 +21,6 @@ use Drupal\Core\Url; use Drupal\grants_attachments\AttachmentHandlerHelper; use Drupal\grants_handler\ApplicationHelpers; use Drupal\grants_handler\Event\UserLogoutEvent; -use Drupal\grants_handler\Form\CopyApplicationModalForm; use Drupal\grants_handler\GrantsErrorStorage; use Drupal\grants_handler\Helpers; use Drupal\grants_handler\Plugin\WebformElement\CompensationsComposite; @@ -1771,6 +1770,8 @@ function grants_handler_preprocess_webform_submission_information(array &$variab $webform = $submission->getWebForm(); $thirdPartySettings = $webform->getThirdPartySettings('grants_metadata'); + $applicationNumber = $submissionData['application_number'] ?? ApplicationHelpers::createApplicationNumber($submission); + $printApplicationUrl = Url::fromRoute( 'grants_webform_print.submission_print', [ @@ -1836,38 +1837,36 @@ function grants_handler_preprocess_webform_submission_information(array &$variab !$isApplicationArchived && $isApplicationOpen ) { + $copyApplicationUrl = Url::fromRoute( - 'grants_handler.copy_application_modal', + 'grants_handler.copy_application', [ 'submission_id' => $submissionData['application_number'], - 'nojs' => 'ajax', - ], - [ - 'attributes' => [ - 'class' => ['use-ajax', 'hds-button', 'hds-button--supplementary'], - 'data-dialog-type' => 'modal', - 'data-dialog-options' => json_encode(CopyApplicationModalForm::getDataDialogOptions()), - // Add this id so that we can test this form. - 'id' => 'copy-application-modal-form-link', - ], ] ); - $copyApplicationLinkText = [ - '#theme' => 'edit-label-with-icon', - '#icon' => 'copy', - '#text_label' => t('Copy application', [], $tOpts), + + // Attach the JavaScript file. + $variables['#attached']['library'][] = 'grants_handler/grants-dialog'; + $variables['#attached']['library'][] = 'grants_handler/application-copy-dialog'; + + // Render a Twig template. + $html_content = \Drupal::service('twig')->render('themes/custom/hdbt_subtheme/templates/webform/application-copy-dialog-content.html.twig', [ + 'applicationNumber' => $applicationNumber, + 'webformTitle' => $webform->label(), + ]); + + // Define the settings you want to pass. + $variables['#attached']['drupalSettings']['grants_handler'] = [ + 'copyUrl' => $copyApplicationUrl->toString(), + 'htmlContent' => $html_content, ]; - $copyApplicationLink = Link::fromTextAndUrl($copyApplicationLinkText, $copyApplicationUrl); - $variables['copyApplicationLink'] = $copyApplicationLink; + $variables['copyText'] = t('Copy application', [], $tOpts); } $variables['formTitle'] = $webform->label(); $variables['printLink'] = ''; $variables['copyLink'] = ''; - $submissionData = $submission->getData(); - $applicationNumber = $submissionData['application_number'] ?? ApplicationHelpers::createApplicationNumber($submission); - $variables['applicationNumber'] = $applicationNumber; $variables['isEditable'] = $applicationStatusService->isSubmissionEditable($submission); $variables['isEditPage'] = 'grants_handler.edit_application' === \Drupal::routeMatch() @@ -1901,6 +1900,7 @@ function grants_handler_preprocess_webform_submission_information(array &$variab '#theme' => 'webform_submission_attachment_list', '#submission' => $submission, ]; + } /** diff --git a/public/modules/custom/grants_handler/grants_handler.routing.yml b/public/modules/custom/grants_handler/grants_handler.routing.yml index 8373248687..b183f94e71 100644 --- a/public/modules/custom/grants_handler/grants_handler.routing.yml +++ b/public/modules/custom/grants_handler/grants_handler.routing.yml @@ -22,6 +22,14 @@ grants_handler.view_application: requirements: _custom_access: '\Drupal\grants_handler\Controller\ApplicationController::accessByApplicationNumber' +grants_handler.copy_application: + path: '/hakemus/{submission_id}/kopioi' + defaults: + _title_callback: '\Drupal\grants_handler\Controller\ApplicationController::getTitle' + _controller: '\Drupal\grants_handler\Controller\CopyApplicationAjaxController' + requirements: + _custom_access: '\Drupal\grants_handler\Controller\ApplicationController::accessByApplicationNumber' + grants_handler.edit_application: path: '/hakemus/{webform}/{webform_submission}/muokkaa' defaults: @@ -45,22 +53,6 @@ grants_handler.message_read: requirements: _custom_access: '\Drupal\grants_handler\Controller\ApplicationController::accessByApplicationNumber' -grants_handler.copy_application: - path: '/hakemus/{submission_id}/kopioi' - defaults: - _title: 'Copy application' - _form: 'Drupal\grants_handler\Form\CopyApplicationForm' - requirements: - _custom_access: '\Drupal\grants_handler\Controller\ApplicationController::accessByApplicationNumber' - -grants_handler.copy_application_modal: - path: '/hakemus/{submission_id}/kopioi/{nojs}' - defaults: - _title: 'You are copying an application' - _form: 'Drupal\grants_handler\Form\CopyApplicationModalForm' - requirements: - _custom_access: '\Drupal\grants_handler\Controller\ApplicationController::accessByApplicationNumber' - grants_handler.atv_print_view: path: '/hakemus/{submission_id}/tulosta' defaults: diff --git a/public/modules/custom/grants_handler/js/application-copy-dialog.js b/public/modules/custom/grants_handler/js/application-copy-dialog.js new file mode 100644 index 0000000000..ae1477e94e --- /dev/null +++ b/public/modules/custom/grants_handler/js/application-copy-dialog.js @@ -0,0 +1,36 @@ +(function (Drupal) { + Drupal.behaviors.copyApplicationModalForm = { + attach: function (context, settings) { + const triggerButton = document.getElementById('copy-application-button'); + + triggerButton.addEventListener('click', function (event) { + + event.preventDefault(); + + const htmlContent = drupalSettings.grants_handler.htmlContent; + const copyUrl = drupalSettings.grants_handler.copyUrl; + + Drupal.dialogFunctions.createDialog({ + dialogContent: htmlContent, + actionButtonText: Drupal.t('Copy application', [], { context: 'grants_handler' }), + backButtonText: Drupal.t('Close', [], { context: 'grants_handler' }), + closeButtonText: Drupal.t('Close', [], { context: 'grants_handler' }), + actionButtonCallback: () => { + // Redirect to a new URL + window.location.href = copyUrl; + /* + We probably should handle the whole copy process here, but for + now we just redirect to the copy URL. + + Much better UX would be to show spinner here while copying + application and then redirect when it's ready + + */ + }, + dialogTitle: Drupal.t('Copy application', [], { context: 'grants_handler' }), + customSelector: 'application-copy-dialog' + }) + }); + }, + }; +})(Drupal); diff --git a/public/modules/custom/grants_handler/js/grants-dialog.js b/public/modules/custom/grants_handler/js/grants-dialog.js index 925eead272..a1f651173d 100644 --- a/public/modules/custom/grants_handler/js/grants-dialog.js +++ b/public/modules/custom/grants_handler/js/grants-dialog.js @@ -12,31 +12,51 @@ * closes the dialog. * @param {Function} actionButtonCallback - The function to execute when * the "action" button is clicked. + * @param dialogTitle + * If we want to override the default title + * @param {Function} closeButtonCallback + * The function to execute when the "close" button is clicked. + * @param {Function} backButtonCallback + * The function to execute when the "back" button is clicked. + * @param escapeButtonCallback + * The function to execute when the "escape" button is clicked. + * @param customSelector + * If we want to add a custom class to the dialog container */ - createDialog: (dialogContent, actionButtonText, backButtonText, closeButtonText, actionButtonCallback = null) => { - const dialogTitle = Drupal.t('Attention', {}, { context: 'grants_handler' }); + createDialog: ({ + dialogContent, + actionButtonText, + backButtonText, + closeButtonText, + dialogTitle = Drupal.t('Attention', {}, { context: 'grants_handler' }), + actionButtonCallback = null, + closeButtonCallback = null, + backButtonCallback = null, + escapeButtonCallback = null, + customSelector = '', + }) => { const actionButtonHTML = actionButtonText && ``; const backButtonHTML = backButtonText && ``; const closeButtonHTML = closeButtonText && ``; const dialogHTML = ` -
-
- -
- ${closeButtonHTML} -

${dialogTitle}

-
-
- ${dialogContent} -
-
- ${actionButtonHTML} - ${backButtonHTML} -
-
+
+
+ +
+ ${closeButtonHTML} +

${dialogTitle}

- `; +
+ ${dialogContent} +
+
+ ${actionButtonHTML} + ${backButtonHTML} +
+
+
+ `; // TODO: Surveys use very similar javascript dialog implementation. // This and the survey implementation could possibly be merged with some @@ -54,7 +74,7 @@ const closeButton = document.getElementById('helfi-dialog__close-button'); const dialog = document.getElementById('helfi-dialog__container'); const dialogFocusTrap = window.focusTrap.createFocusTrap('#helfi-dialog__container', { - initialFocus: () => '#helfi-dialog__title' + initialFocus: () => '#helfi-dialog__title', }); // Activate the focus trap so that the user needs to react to the dialog. @@ -68,18 +88,30 @@ // Add click event listener to back button backButton.addEventListener('click', () => { dialogFocusTrap.deactivate(); + // If we have a callback, execute it. + if (backButtonCallback) { + backButtonCallback(); + } Drupal.dialogFunctions.removeDialog(dialog); }); // Add click event listener to close button closeButton.addEventListener('click', () => { dialogFocusTrap.deactivate(); + // If we have a callback, execute it. + if (closeButtonCallback) { + closeButtonCallback(); + } Drupal.dialogFunctions.removeDialog(dialog); }); // Add event listener to ESC button to remove the dialog document.body.addEventListener('keydown', function (event) { if (event.key === 'Escape') { + // If we have a escapeButtonCallback, execute it also when pressing escape. + if (escapeButtonCallback) { + escapeButtonCallback(); + } Drupal.dialogFunctions.removeDialog(dialog); } }); @@ -90,8 +122,7 @@ document.body.style.paddingRight = `${ window.innerWidth - document.documentElement.clientWidth }px`; - } - else { + } else { document.body.style.removeProperty('padding-right'); } }, @@ -105,6 +136,6 @@ dialog.remove(); Drupal.dialogFunctions.toggleNoScroll(false); Drupal.dialogFunctions.setBodyPaddingRight(false); - } - } + }, + }; })(Drupal); diff --git a/public/modules/custom/grants_handler/js/webform.form.unsaved.js b/public/modules/custom/grants_handler/js/webform.form.unsaved.js index 99e66c6b8d..4f96d10cd1 100644 --- a/public/modules/custom/grants_handler/js/webform.form.unsaved.js +++ b/public/modules/custom/grants_handler/js/webform.form.unsaved.js @@ -108,7 +108,7 @@ }); }); } - } + }, }; $('a').on('click', function (event) { @@ -116,18 +116,18 @@ if (unsaved && !containingElement.contains(event.target) && !event.target.getAttribute('href').startsWith('#')) { event.preventDefault(); - return Drupal.dialogFunctions.createDialog( - Drupal.t('You have unsaved changes. Are you sure you want to leave?', {}, { context: 'grants_handler' }), - Drupal.t('Leave the application', {}, { context: 'grants_handler' }), - Drupal.t('Back to application', {}, { context: 'grants_handler' }), - Drupal.t('Close', {}, { context: 'grants_handler' }), - () => { + return Drupal.dialogFunctions.createDialog({ + dialogContent: Drupal.t('You have unsaved changes. Are you sure you want to leave?', {}, { context: 'grants_handler' }), + actionButtonText: Drupal.t('Leave the application', {}, { context: 'grants_handler' }), + backButtonText: Drupal.t('Back to application', {}, { context: 'grants_handler' }), + closeButtonText: Drupal.t('Close', {}, { context: 'grants_handler' }), + actionButtonCallback: () => { unsaved = false; const dialog = document.getElementById('helfi-dialog__container'); Drupal.dialogFunctions.removeDialog(dialog); window.top.location.href = event.currentTarget.href; - } - ); + }, + }); } }); @@ -147,18 +147,18 @@ if (unsaved && (e.which === 116 || (e.which === 82 && (e.ctrlKey || e.metaKey)))) { e.preventDefault(); // Prevent F5 and Ctrl+R / Cmd+R refresh - return Drupal.dialogFunctions.createDialog( - Drupal.t('You have unsaved changes. Are you sure you want to refresh?', {}, { context: 'grants_handler' }), - Drupal.t('Refresh the page', {}, { context: 'grants_handler' }), - Drupal.t('Back to application', {}, { context: 'grants_handler' }), - Drupal.t('Close', {}, { context: 'grants_handler' }), - () => { + return Drupal.dialogFunctions.createDialog({ + dialogContent: Drupal.t('You have unsaved changes. Are you sure you want to refresh?', {}, { context: 'grants_handler' }), + actionButtonText: Drupal.t('Refresh the page', {}, { context: 'grants_handler' }), + backButtonText: Drupal.t('Back to application', {}, { context: 'grants_handler' }), + closeButtonText: Drupal.t('Close', {}, { context: 'grants_handler' }), + actionButtonCallback: () => { unsaved = false; const dialog = document.getElementById('helfi-dialog__container'); Drupal.dialogFunctions.removeDialog(dialog); location.reload(); - } - ); + }, + }); } }); diff --git a/public/modules/custom/grants_handler/src/ApplicationHelpers.php b/public/modules/custom/grants_handler/src/ApplicationHelpers.php index 110f4c5a6e..bacfcf57ee 100644 --- a/public/modules/custom/grants_handler/src/ApplicationHelpers.php +++ b/public/modules/custom/grants_handler/src/ApplicationHelpers.php @@ -411,6 +411,10 @@ public static function updateFieldOptions(array &$form, array $newOptions, array $currentField = &$currentField['#element'][$fieldName]; } else { + // If we don't have current field array, we can't update the options. + if (!is_array($currentField)) { + return; + } // If the field is not found, continue searching recursively. foreach ($currentField as &$subField) { if (is_array($subField)) { diff --git a/public/modules/custom/grants_handler/src/Controller/ApplicationController.php b/public/modules/custom/grants_handler/src/Controller/ApplicationController.php index 272cb2d1ff..ffd9e645e7 100644 --- a/public/modules/custom/grants_handler/src/Controller/ApplicationController.php +++ b/public/modules/custom/grants_handler/src/Controller/ApplicationController.php @@ -114,7 +114,8 @@ public function access(AccountInterface $account, string $webform, string $webfo * @return \Drupal\Core\Access\AccessResultInterface * The access result. * - * @throws \GuzzleHttp\Exception\GuzzleException + * @throws \Drupal\grants_mandate\CompanySelectException + * @throws \Drupal\grants_profile\GrantsProfileException */ public function accessByApplicationNumber(AccountInterface $account, string $submission_id): AccessResultInterface { try { diff --git a/public/modules/custom/grants_handler/src/Controller/CopyApplicationAjaxController.php b/public/modules/custom/grants_handler/src/Controller/CopyApplicationAjaxController.php new file mode 100644 index 0000000000..0830d35494 --- /dev/null +++ b/public/modules/custom/grants_handler/src/Controller/CopyApplicationAjaxController.php @@ -0,0 +1,199 @@ +get('grants_handler.application_getter_service'), + $container->get('grants_handler.application_init_service'), + $container->get('grants_events.events_service'), + $container->get('grants_handler.application_status_service'), + ); + } + + /** + * Builds the response. + * + * @param string $submission_id + * The submission ID. + * + * @return \Symfony\Component\HttpFoundation\RedirectResponse + * The redirect response. + */ + public function __invoke(string $submission_id): RedirectResponse { + $oldApplicationUrl = $this->getOldApplicationUrl($submission_id); + + try { + $webform_submission = $this->getWebformSubmission($submission_id); + $webform = $webform_submission->getWebForm(); + $this->makeSureCopyingIsEnabled($webform); + + $newSubmission = $this->initNewApplication($webform->id(), $webform_submission->getData()); + $this->logEvent($newSubmission, $webform_submission->getData()); + + return $this->getNewApplicationRedirect($webform, $newSubmission); + } + catch (\Throwable $e) { + $this->messenger()->addError('Application copying failed.'); + $this->getLogger('grants_handler') + ->error('Application copying failed: @message', ['@message' => $e->getMessage()]); + return new RedirectResponse($oldApplicationUrl->toString()); + } + } + + /** + * Gets the URL of the old application. + * + * @param string $submission_id + * The submission ID. + * + * @return \Drupal\Core\Url + * The URL of the old application. + */ + private function getOldApplicationUrl(string $submission_id): Url { + return Url::fromRoute('grants_handler.view_application', ['submission_id' => $submission_id]); + } + + /** + * Gets the webform submission object. + * + * @param string $submission_id + * The submission ID. + * + * @return \Drupal\webform\Entity\WebformSubmission + * The webform submission object. + * + * @throws \RuntimeException + * If the webform submission cannot be retrieved. + */ + private function getWebformSubmission(string $submission_id): WebformSubmission { + try { + return $this->applicationGetterService->submissionObjectFromApplicationNumber($submission_id); + } + catch (EntityStorageException | CompanySelectException $e) { + throw new \RuntimeException('Failed to get webform submission.'); + } + } + + /** + * Validates the application. + * + * @param \Drupal\webform\WebformInterface $webform + * The webform object. + * + * @throws \RuntimeException + * If the application cannot be copied. + */ + private function makeSureCopyingIsEnabled(WebformInterface $webform): void { + $thirdPartySettings = $webform->getThirdPartySettings('grants_metadata'); + $isApplicationArchived = $thirdPartySettings["status"] === 'archived' ?? TRUE; + $isApplicationOpen = $this->applicationStatusService->isApplicationOpen($webform); + + if ($thirdPartySettings["disableCopying"] === 1 || $isApplicationArchived || !$isApplicationOpen) { + throw new \RuntimeException('Application copying disabled.'); + } + } + + /** + * Initializes a new application with copied data. + * + * @param string $webform_id + * The webform ID. + * @param array $data + * The data to initialize the new application with. + * + * @return \Drupal\webform\Entity\WebformSubmission + * The new webform submission object. + * + * @throws \RuntimeException + * If the new application cannot be initialized. + */ + private function initNewApplication(string $webform_id, array $data): WebformSubmission { + try { + return $this->applicationInitService->initApplication($webform_id, $data); + } + catch (\Throwable $e) { + throw new \RuntimeException('Failed to initialize new application.'); + } + } + + /** + * Logs the event of copying the application. + * + * @param \Drupal\webform\Entity\WebformSubmission $newSubmission + * The new webform submission object. + * @param array $oldData + * The data of the old application. + * + * @throws \Drupal\grants_events\EventException + */ + private function logEvent(WebformSubmission $newSubmission, array $oldData): void { + $newData = $newSubmission->getData(); + $this->messenger() + ->addStatus($this->t('Grant application copied, new id: @number', ['@number' => $newData['application_number']], ['context' => 'grants_handler'])); + $this->eventsService->logEvent($newData['application_number'], 'HANDLER_APP_COPIED', $this->t('Application copied from application id: @id', ['@id' => $oldData['application_number']], ['context' => 'grants_handler']) + ->render(), $newData['application_number']); + } + + /** + * Gets the redirect response for the new application. + * + * @param \Drupal\webform\WebformInterface $webform + * The webform object. + * @param \Drupal\webform\Entity\WebformSubmission $newSubmission + * The new webform submission object. + * + * @return \Symfony\Component\HttpFoundation\RedirectResponse + * The redirect response. + */ + private function getNewApplicationRedirect(WebformInterface $webform, WebformSubmission $newSubmission): RedirectResponse { + $newApplicationUrl = Url::fromRoute('grants_handler.edit_application', [ + 'webform' => $webform->id(), + 'webform_submission' => $newSubmission->id(), + ]); + return new RedirectResponse($newApplicationUrl->toString()); + } + +} diff --git a/public/modules/custom/grants_handler/src/Form/CopyApplicationForm.php b/public/modules/custom/grants_handler/src/Form/CopyApplicationForm.php deleted file mode 100644 index a40dcec15e..0000000000 --- a/public/modules/custom/grants_handler/src/Form/CopyApplicationForm.php +++ /dev/null @@ -1,146 +0,0 @@ -setDebug(NULL); - } - - /** - * {@inheritdoc} - */ - public static function create(ContainerInterface $container): MessageForm|static { - return new static( - $container->get('grants_handler.application_init_service'), - $container->get('grants_handler.application_getter_service') - ); - } - - /** - * {@inheritdoc} - */ - public function getFormId(): string { - return 'grants_handler_copy_application'; - } - - /** - * {@inheritdoc} - */ - public function buildForm(array $form, FormStateInterface $form_state, string $submission_id = ''): array { - $tOpts = ['context' => 'grants_handler']; - - try { - $webform_submission = $this->applicationGetterService->submissionObjectFromApplicationNumber($submission_id); - - if ($webform_submission != NULL) { - $form_state->setStorage(['submission' => $webform_submission]); - } - } - catch (\Exception | GuzzleException $e) { - $this->logger(self::LOGGER_CHANNEL)->error('Failed to load submission: @error', ['@error' => $e->getMessage()]); - } - $form['copyFrom'] = [ - '#type' => 'markup', - '#markup' => 'Tähän vois sitte laittaa hakemuksen perussettejä, tai vaikka koko hakemus näytille.', - ]; - - $form['actions'] = [ - '#type' => 'actions', - ]; - $form['actions']['submit'] = [ - '#type' => 'submit', - '#value' => $this->t('Copy application', [], $tOpts), - ]; - - return $form; - } - - /** - * {@inheritdoc} - */ - public function validateForm(array &$form, FormStateInterface $form_state) {} - - /** - * {@inheritdoc} - */ - public function submitForm(array &$form, FormStateInterface $form_state): void { - $storage = $form_state->getStorage(); - /** @var \Drupal\webform\Entity\WebformSubmission $webform_submission */ - $webform_submission = $storage['submission']; - $webform = $webform_submission->getWebForm(); - - // Init new application with copied data. - try { - $newSubmission = $this->applicationInitService->initApplication($webform->id(), $webform_submission->getData()); - } - catch (EntityStorageException | - GrantsProfileException | - AtvDocumentNotFoundException | - AtvFailedToConnectException | - ProfileDataException | - TokenExpiredException | - GuzzleException $e) { - $newSubmission = FALSE; - } - - if ($newSubmission) { - - $newData = $newSubmission->getData(); - - $this->messenger() - ->addStatus( - $this->t( - 'Grant application copied(@number)', - [ - '@number' => $newData['application_number'], - ] - ) - ); - - $form_state->setRedirect( - 'grants_handler.completion', - ['submission_id' => $newData['application_number']], - [ - 'attributes' => [ - 'data-drupal-selector' => 'application-saved-successfully-link', - ], - ] - ); - } - else { - $this->messenger()->addError('Grant application copy failed.'); - } - } - -} diff --git a/public/modules/custom/grants_handler/src/Form/CopyApplicationModalForm.php b/public/modules/custom/grants_handler/src/Form/CopyApplicationModalForm.php deleted file mode 100644 index 7e2c463eb2..0000000000 --- a/public/modules/custom/grants_handler/src/Form/CopyApplicationModalForm.php +++ /dev/null @@ -1,300 +0,0 @@ -setDebug(NULL); - } - - /** - * {@inheritdoc} - */ - public static function create(ContainerInterface $container): CopyApplicationModalForm|static { - - // Create a new form object and inject its services. - $form = new static( - $container->get('renderer'), - $container->get('grants_events.events_service'), - $container->get('grants_handler.application_status_service'), - $container->get('grants_handler.application_init_service'), - $container->get('grants_handler.application_getter_service') - ); - $form->setRequestStack($container->get('request_stack')); - $form->setStringTranslation($container->get('string_translation')); - $form->setMessenger($container->get('messenger')); - - return $form; - - } - - /** - * {@inheritdoc} - */ - public function getFormId(): string { - return 'grants_profile_copy_application_modal_form'; - } - - /** - * Helper method so we can have consistent dialog options. - * - * @return string[] - * An array of jQuery UI elements to pass on to our dialog form. - */ - public static function getDataDialogOptions(): array { - return [ - 'width' => '33%', - 'closeText' => t('Close'), - ]; - } - - /** - * {@inheritdoc} - */ - public function buildForm(array $form, FormStateInterface $form_state, string $submission_id = '', string $nojs = ''): array { - $tOpts = ['context' => 'grants_handler']; - - // Add the core AJAX library. - $form['#attached']['library'][] = 'core/drupal.ajax'; - $form['#theme'] = 'application_copy_modal_form'; - - try { - $webform_submission = $this->applicationGetterService->submissionObjectFromApplicationNumber($submission_id); - - if ($webform_submission != NULL) { - // Set webform submission template. - $build = [ - '#theme' => 'submission_for_modal_form', - '#submission' => $webform_submission, - '#submission_id' => $submission_id, - ]; - - $form_state->setStorage(['submission' => $webform_submission]); - $form['modal_markup'] = [ - '#markup' => $this->renderer->render($build), - ]; - } - - } - catch (\Exception | GuzzleException $e) { - $this->logger('copy_application_modal_form')->error('Error: %error', [ - '%error' => $e->getMessage(), - ]); - } - - // Add a link to show this form in a modal dialog if we're not already in - // one. - if ($nojs == 'nojs') { - $form['use_ajax_container'] = [ - '#type' => 'details', - '#open' => TRUE, - ]; - $form['use_ajax_container']['use_ajax'] = [ - '#type' => 'link', - '#title' => $this->t('See this form as a modal.', [], $tOpts), - '#url' => Url::fromRoute('grants_handler.copy_application_modal', ['nojs' => 'ajax']), - '#attributes' => [ - 'class' => ['use-ajax'], - 'data-dialog-type' => 'modal', - 'data-dialog-options' => json_encode(static::getDataDialogOptions()), - // Add this id so that we can test this form. - 'id' => 'copy-application-modal-form-link', - ], - ]; - } - - // This element is responsible for displaying form errors in the AJAX - // dialog. - if ($nojs == 'ajax') { - $form['status_messages'] = [ - '#type' => 'status_messages', - '#weight' => -999, - ]; - } - - // Add a submit button that handles the submission of the form. - $form['actions']['submit'] = [ - '#type' => 'submit', - '#value' => $this->t('Use application as base', [], $tOpts), - '#ajax' => [ - 'callback' => '::ajaxSubmitForm', - 'event' => 'click', - ], - '#attributes' => [ - 'id' => 'copy-application-modal-form-submit', - ], - ]; - - // Set the form to not use AJAX if we're on a nojs path. When this form is - // within the modal dialog, Drupal will make sure we're using an AJAX path - // instead of a nojs one. - if ($nojs == 'nojs') { - unset($form['actions']['submit']['#ajax']); - } - - return $form; - } - - /** - * {@inheritdoc} - */ - public function validateForm(array &$form, FormStateInterface $form_state): void { - $storage = $form_state->getStorage(); - /** @var \Drupal\webform\Entity\WebformSubmission $webform_submission */ - $webform_submission = $storage['submission']; - $webform = $webform_submission->getWebForm(); - - $isApplicationOpen = $this->applicationStatusService->isApplicationOpen($webform); - $thirdPartySettings = $webform->getThirdPartySettings('grants_metadata'); - - // If copying is disabled in 3rd party settings, do not allow forward. - if ($thirdPartySettings["disableCopying"] == 1 || - $thirdPartySettings["status"] === 'archived' || - !$isApplicationOpen - ) { - $form_state->setErrorByName('modal_markup', 'Copying is disabled for this form.'); - } - - } - - /** - * {@inheritdoc} - */ - public function submitForm(array &$form, FormStateInterface $form_state): void { - $storage = $form_state->getStorage(); - /** @var \Drupal\webform\Entity\WebformSubmission $webform_submission */ - $webform_submission = $storage['submission']; - $oldData = $webform_submission->getData(); - $webform = $webform_submission->getWebForm(); - - // Init new application with copied data. - try { - $newSubmission = $this->applicationInitService->initApplication($webform->id(), $webform_submission->getData()); - $newData = $newSubmission->getData(); - } - catch (\Exception $e) { - $newSubmission = FALSE; - $newData = []; - } - - if ($newSubmission) { - $this->messenger() - ->addStatus( - $this->t( - 'Grant application copied, new id: @number', - [ - '@number' => $newData['application_number'], - ], - ['context' => 'grants_handler'] - ) - ); - - $storage['newSubmission'] = $newSubmission; - $form_state->setStorage($storage); - - $this->eventsService->logEvent( - $newData['application_number'], - 'HANDLER_APP_COPIED', - $this->t('Application copied from application id: @id', ['@id' => $oldData['application_number']], ['context' => 'grants_handler']), - $newData['application_number'] - ); - - $form_state->setRedirect( - 'grants_handler.edit_application', - [ - 'webform_submission' => $newSubmission->id(), - 'webform' => $webform->id(), - ] - ); - } - else { - $this->messenger()->addError('Grant application copy failed'); - } - } - - /** - * Implements the submit handler for the modal dialog AJAX call. - * - * @param array $form - * Render array representing from. - * @param \Drupal\Core\Form\FormStateInterface $form_state - * Current form state. - * - * @return \Drupal\Core\Ajax\AjaxResponse - * Array of AJAX commands to execute on submit of the modal form. - */ - public function ajaxSubmitForm(array &$form, FormStateInterface $form_state) { - $tOpts = ['context' => 'grants_handler']; - - // We begin building a new ajax reponse. - $response = new AjaxResponse(); - - // If the user submitted the form and there are errors, show them the - // input dialog again with error messages. Since the title element is - // required, the empty string wont't validate and there will be an error. - if ($form_state->getErrors()) { - // If there are errors, we can show the form again with the errors in - // the status_messages section. - $form['status_messages'] = [ - '#type' => 'status_messages', - '#weight' => -10, - ]; - $response->addCommand(new OpenModalDialogCommand($this->t('Errors', [], $tOpts), $form, static::getDataDialogOptions())); - } - else { - // No errors, we load things from form state. - $storage = $form_state->getStorage(); - /** @var \Drupal\webform\Entity\WebformSubmission $webform_submission */ - $webform_submission = $storage['newSubmission']; - $webform = $webform_submission->getWebForm(); - - // Create url redirect for this new submission. - $url = Url::fromRoute('grants_handler.edit_application', - [ - 'webform_submission' => $webform_submission->id(), - 'webform' => $webform->id(), - ]); - $response->addCommand(new CloseModalDialogCommand()); - $command = new RedirectCommand($url->toString()); - $response->addCommand($command); - } - - // Finally return our response. - return $response; - } - -} diff --git a/public/modules/custom/grants_profile/js/profile_dialog.js b/public/modules/custom/grants_profile/js/profile_dialog.js index 1ea699707b..67aeeef575 100644 --- a/public/modules/custom/grants_profile/js/profile_dialog.js +++ b/public/modules/custom/grants_profile/js/profile_dialog.js @@ -29,28 +29,28 @@ let containingElement = document.querySelector('form'); if ((unset_name) && !containingElement.contains(event.target)) { event.preventDefault(); - return Drupal.dialogFunctions.createDialog( - Drupal.t('You need to have a name for your unregistered community or group. Please add a name and save or cancel them.', {}, { context: 'grants_profile' }), - '', - Drupal.t('Back to profile', {}, { context: 'grants_profile' }), - Drupal.t('Close', {}, { context: 'grants_profile' }), - ); + return Drupal.dialogFunctions.createDialog({ + dialogContent: Drupal.t('You need to have a name for your unregistered community or group. Please add a name and save or cancel them.', {}, { context: 'grants_profile' }), + actionButtonText: '', + backButtonText: Drupal.t('Back to profile', {}, { context: 'grants_profile' }), + closeButtonText: Drupal.t('Close', {}, { context: 'grants_profile' }), + }); } else if ((current_name !== initial_name) && !containingElement.contains(event.target)) { event.preventDefault(); - return Drupal.dialogFunctions.createDialog( - Drupal.t('You have unsaved changes in your profile. Please save or cancel them.', {}, { context: 'grants_profile' }), - '', - Drupal.t('Back to profile', {}, { context: 'grants_profile' }), - Drupal.t('Close', {}, { context: 'grants_profile' }), - ); + return Drupal.dialogFunctions.createDialog({ + dialogContent: Drupal.t('You have unsaved changes in your profile. Please save or cancel them.', {}, { context: 'grants_profile' }), + actionButtonText: '', + backButtonText: Drupal.t('Back to profile', {}, { context: 'grants_profile' }), + closeButtonText: Drupal.t('Close', {}, { context: 'grants_profile' }), + }); } else if (($('[data-drupal-selector="edit-isnewprofile"]').val() === 'initialSave') && !containingElement.contains(event.target)) { event.preventDefault(); - return Drupal.dialogFunctions.createDialog( - Drupal.t('You have not saved your profile. Please save your profile before leaving the form.', {}, { context: 'grants_profile' }), - '', - Drupal.t('Back to profile', {}, { context: 'grants_profile' }), - Drupal.t('Close', {}, { context: 'grants_profile' }), - ); + return Drupal.dialogFunctions.createDialog({ + dialogContent: Drupal.t('You have not saved your profile. Please save your profile before leaving the form.', {}, { context: 'grants_profile' }), + actionButtonText: '', + backButtonText: Drupal.t('Back to profile', {}, { context: 'grants_profile' }), + closeButtonText: Drupal.t('Close', {}, { context: 'grants_profile' }), + }); } is_element_click = false; diff --git a/public/themes/custom/hdbt_subtheme/templates/webform/application-copy-dialog-content.html.twig b/public/themes/custom/hdbt_subtheme/templates/webform/application-copy-dialog-content.html.twig new file mode 100644 index 0000000000..11fdb8af1c --- /dev/null +++ b/public/themes/custom/hdbt_subtheme/templates/webform/application-copy-dialog-content.html.twig @@ -0,0 +1,2 @@ +

Kopioitava hakemus: {{ webformTitle }}

+

Hakemustunnus: {{ applicationNumber }}

diff --git a/public/themes/custom/hdbt_subtheme/templates/webform/webform-submission-information.html.twig b/public/themes/custom/hdbt_subtheme/templates/webform/webform-submission-information.html.twig index 58cc39d906..daa38f316b 100644 --- a/public/themes/custom/hdbt_subtheme/templates/webform/webform-submission-information.html.twig +++ b/public/themes/custom/hdbt_subtheme/templates/webform/webform-submission-information.html.twig @@ -33,43 +33,51 @@

{{ 'Application info'|t }}

{{ 'Summary about your application and processing details.'|t }}

-
-

- {{ webform.text }} -

- +
+

+ {{ webform.text }} +

+ -
- -
-
{{ "Application number"|t }}
- {{ applicationNumber }} -
{{ 'Sent date'|t }}
- {{ applicationSent }} -
{{ 'Handler information'|t }}
- {{ handler }} -
-
-
{{ "Application statuses"|t }}
- {{ history }} +
+
+
+
{{ "Application number"|t }}
+ {{ applicationNumber }} +
{{ 'Sent date'|t }}
+ {{ applicationSent }} +
{{ 'Handler information'|t }}
+ {{ handler }} +
+
+
{{ "Application statuses"|t }}
+ {{ history }} -
-
-
{{ "Application attachments"|t }}
+
+
+
{{ "Application attachments"|t }}
- {{ attachments }} + {{ attachments }} -
+
+
+ {% if isEditable and not isEditPage %} +
+ {{ editApplicationLink }}
- {% if isEditable and not isEditPage %} -
- {{ editApplicationLink }} -
- {% endif %} + {% endif %}
From 436b2a4a185847f44cbee3025a500c9a70551495 Mon Sep 17 00:00:00 2001 From: rpnykanen <48206082+rpnykanen@users.noreply.github.com> Date: Tue, 19 Nov 2024 09:52:55 +0200 Subject: [PATCH 44/74] Uhf x more tranlations (#1569) * missing tooltip * more tooltips --- .../en/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml | 3 +++ .../sv/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml | 3 +++ 2 files changed, 6 insertions(+) diff --git a/conf/cmi/language/en/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml b/conf/cmi/language/en/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml index 0fa0190c3a..86e588bf7b 100644 --- a/conf/cmi/language/en/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml +++ b/conf/cmi/language/en/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml @@ -58,6 +58,7 @@ elements: | '#title': Grants kayttotarkoitus: '#title': 'Purpose of use' + '#help': 'Indicate the purpose for which the grant is applied for. If necessary, specify the different uses. Also tell us what is intended to be achieved with the grant and what goals are associated with the activities to be supported.' compensation_purpose: '#title': 'Brief description of the purpose(s) of the grant(s) applied for' '#counter_maximum_message': '%d/5000 characters remaining' @@ -195,6 +196,7 @@ elements: | hankkeen_kohderyhmat_erityisryhmat: '#title': 'Does the project target a special group?' '#counter_maximum_message': '%d/1250 characters remaining' + '#help': 'For which special group? If not implemented, leave the field blank.' hankkeen_kohderyhmat_tavoitus: '#title': 'How will the target groups of the project be reached?' '#counter_maximum_message': '%d/1250 characters remaining' @@ -209,6 +211,7 @@ elements: | '#counter_maximum_message': '%d/1250 characters remaining' hankkeen_kohderyhmat_postinrot: '#title': 'In which postal code area(s) in Helsinki will the project be implemented?' + '#help': 'Please enter up to three (3) postal code areas in the field and separate them with a comma (,).' hankkeen_kohderyhmat_miksi_alue: '#title': 'Why is/are that particular area(s) selected?' '#counter_maximum_message': '%d/1250 characters remaining' diff --git a/conf/cmi/language/sv/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml b/conf/cmi/language/sv/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml index f37b2d9c82..13e525d6d2 100644 --- a/conf/cmi/language/sv/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml +++ b/conf/cmi/language/sv/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml @@ -58,6 +58,7 @@ elements: | '#title': 'Typ av stöd' kayttotarkoitus: '#title': 'Användningsän damål' + '#help': 'Ange för vilket ändamål understödet ansöks och vid behov specificera de olika ändamålen. Ange också vad understödet är avsett för och vilka mål som är relaterade till den understödda verksamheten.' compensation_purpose: '#title': 'En kort beskrivning av användningsändamålet för det/de understöd som ansöks' '#counter_maximum_message': '%d/5000 tecken kvar' @@ -195,6 +196,7 @@ elements: | hankkeen_kohderyhmat_erityisryhmat: '#title': 'Riktar sig projektet till någon särskild grupp?' '#counter_maximum_message': '%d/1250 tecken kvar' + '#help': 'Till vilken särskild grupp? Om svaret är ”nej”, lämna tomt.' hankkeen_kohderyhmat_tavoitus: '#title': 'Hur ska ni nå ut med projektet till målgrupperna?' '#counter_maximum_message': '%d/1250 tecken kvar' @@ -209,6 +211,7 @@ elements: | '#counter_maximum_message': '%d/1250 tecken kvar' hankkeen_kohderyhmat_postinrot: '#title': 'Inom vilket/vilka postnummerområden i Helsingfors kommer projektet att genomföras?' + '#help': 'Ange upp till tre (3) postnummerområden och separera dem med kommatecken (,).' hankkeen_kohderyhmat_miksi_alue: '#title': 'Varför har ni valt just det/de områdena?' '#counter_maximum_message': '%d/1250 tecken kvar' From f88d479bfc0418d57027c7518a9113768c09c6bb Mon Sep 17 00:00:00 2001 From: hel-platta-automation <95360595+hel-platta-automation@users.noreply.github.com> Date: Tue, 19 Nov 2024 09:53:21 +0200 Subject: [PATCH 45/74] Update configuration (#1565) --- composer.lock | 102 +++++++++--------- ...view_display.media.image.image_gallery.yml | 38 +++++++ ...e.entity_view_mode.media.image_gallery.yml | 13 +++ conf/cmi/image.style.0.7_1086w_1630h_LQ.yml | 26 +++++ conf/cmi/image.style.0.7_352w_572h.yml | 19 ++++ conf/cmi/image.style.0.7_414w_621h.yml | 19 ++++ conf/cmi/image.style.0.7_543w_815h.yml | 19 ++++ conf/cmi/image.style.0.7_704w_1144h_LQ.yml | 26 +++++ conf/cmi/image.style.0.7_828w_1242h_LQ.yml | 26 +++++ conf/cmi/image.style.1_1086w_1086h_LQ.yml | 26 +++++ conf/cmi/image.style.1_414w_414h.yml | 19 ++++ conf/cmi/image.style.1_543w_543h.yml | 19 ++++ conf/cmi/image.style.1_828w_828h_LQ.yml | 26 +++++ ...ponsive_image.styles.image_gallery_1_1.yml | 38 +++++++ ...ponsive_image.styles.image_gallery_2_3.yml | 50 +++++++++ ...ponsive_image.styles.image_gallery_3_2.yml | 50 +++++++++ 16 files changed, 465 insertions(+), 51 deletions(-) create mode 100644 conf/cmi/core.entity_view_display.media.image.image_gallery.yml create mode 100644 conf/cmi/core.entity_view_mode.media.image_gallery.yml create mode 100644 conf/cmi/image.style.0.7_1086w_1630h_LQ.yml create mode 100644 conf/cmi/image.style.0.7_352w_572h.yml create mode 100644 conf/cmi/image.style.0.7_414w_621h.yml create mode 100644 conf/cmi/image.style.0.7_543w_815h.yml create mode 100644 conf/cmi/image.style.0.7_704w_1144h_LQ.yml create mode 100644 conf/cmi/image.style.0.7_828w_1242h_LQ.yml create mode 100644 conf/cmi/image.style.1_1086w_1086h_LQ.yml create mode 100644 conf/cmi/image.style.1_414w_414h.yml create mode 100644 conf/cmi/image.style.1_543w_543h.yml create mode 100644 conf/cmi/image.style.1_828w_828h_LQ.yml create mode 100644 conf/cmi/responsive_image.styles.image_gallery_1_1.yml create mode 100644 conf/cmi/responsive_image.styles.image_gallery_2_3.yml create mode 100644 conf/cmi/responsive_image.styles.image_gallery_3_2.yml diff --git a/composer.lock b/composer.lock index 84452c5fa7..46724ad5e2 100644 --- a/composer.lock +++ b/composer.lock @@ -314,29 +314,29 @@ }, { "name": "chillerlan/php-qrcode", - "version": "4.4.1", + "version": "4.4.2", "source": { "type": "git", "url": "https://github.com/chillerlan/php-qrcode.git", - "reference": "f5e243f3b61a60934780579430a951460f40888d" + "reference": "345ed8e4ffb56e6b3fcd9f42e3970b9026fa6ce4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/chillerlan/php-qrcode/zipball/f5e243f3b61a60934780579430a951460f40888d", - "reference": "f5e243f3b61a60934780579430a951460f40888d", + "url": "https://api.github.com/repos/chillerlan/php-qrcode/zipball/345ed8e4ffb56e6b3fcd9f42e3970b9026fa6ce4", + "reference": "345ed8e4ffb56e6b3fcd9f42e3970b9026fa6ce4", "shasum": "" }, "require": { - "chillerlan/php-settings-container": "^2.1.4 || ^3.1", + "chillerlan/php-settings-container": "^2.1.6 || ^3.2.1", "ext-mbstring": "*", "php": "^7.4 || ^8.0" }, "require-dev": { - "phan/phan": "^5.4", + "phan/phan": "^5.4.5", "phpmd/phpmd": "^2.15", "phpunit/phpunit": "^9.6", "setasign/fpdf": "^1.8.2", - "squizlabs/php_codesniffer": "^3.8" + "squizlabs/php_codesniffer": "^3.11" }, "suggest": { "chillerlan/php-authenticator": "Yet another Google authenticator! Also creates URIs for mobile apps.", @@ -379,19 +379,15 @@ ], "support": { "issues": "https://github.com/chillerlan/php-qrcode/issues", - "source": "https://github.com/chillerlan/php-qrcode/tree/4.4.1" + "source": "https://github.com/chillerlan/php-qrcode/tree/4.4.2" }, "funding": [ - { - "url": "https://www.paypal.com/donate?hosted_button_id=WLYUNAT9ZTJZ4", - "type": "custom" - }, { "url": "https://ko-fi.com/codemasher", "type": "ko_fi" } ], - "time": "2024-01-06T16:56:58+00:00" + "time": "2024-11-15T15:36:24+00:00" }, { "name": "chillerlan/php-settings-container", @@ -4106,17 +4102,17 @@ }, { "name": "drupal/editoria11y", - "version": "2.1.20", + "version": "2.1.21", "source": { "type": "git", "url": "https://git.drupalcode.org/project/editoria11y.git", - "reference": "2.1.20" + "reference": "2.1.21" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/editoria11y-2.1.20.zip", - "reference": "2.1.20", - "shasum": "67f8e2eb17ed3d3db6cd93782ed1faa88c206640" + "url": "https://ftp.drupal.org/files/projects/editoria11y-2.1.21.zip", + "reference": "2.1.21", + "shasum": "6ec1bb5cfa15408e3372d7e0d0a1355030a9f20b" }, "require": { "drupal/core": "^9 || ^10 || ^11" @@ -4127,8 +4123,8 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "2.1.20", - "datestamp": "1731097435", + "version": "2.1.21", + "datestamp": "1731602531", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -4521,7 +4517,7 @@ ], "authors": [ { - "name": "Berdir", + "name": "berdir", "homepage": "https://www.drupal.org/user/214652" }, { @@ -5491,16 +5487,16 @@ }, { "name": "drupal/hdbt", - "version": "6.8.5", + "version": "6.8.7", "source": { "type": "git", "url": "https://github.com/City-of-Helsinki/drupal-hdbt.git", - "reference": "45ae632cf0b62b990b8098f9a07f53a348fa1bf1" + "reference": "788a852f02962d5c38be053989b6a18ba00daf0b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/City-of-Helsinki/drupal-hdbt/zipball/45ae632cf0b62b990b8098f9a07f53a348fa1bf1", - "reference": "45ae632cf0b62b990b8098f9a07f53a348fa1bf1", + "url": "https://api.github.com/repos/City-of-Helsinki/drupal-hdbt/zipball/788a852f02962d5c38be053989b6a18ba00daf0b", + "reference": "788a852f02962d5c38be053989b6a18ba00daf0b", "shasum": "" }, "require": { @@ -5519,23 +5515,23 @@ "Drupal" ], "support": { - "source": "https://github.com/City-of-Helsinki/drupal-hdbt/tree/6.8.5", + "source": "https://github.com/City-of-Helsinki/drupal-hdbt/tree/6.8.7", "issues": "https://github.com/City-of-Helsinki/drupal-hdbt/issues" }, - "time": "2024-11-14T10:30:35+00:00" + "time": "2024-11-18T15:33:25+00:00" }, { "name": "drupal/hdbt_admin", - "version": "3.2.7", + "version": "3.2.8", "source": { "type": "git", "url": "https://github.com/City-of-Helsinki/drupal-hdbt-admin.git", - "reference": "76454c97d12ea80c2e6859fea8d5926dca80bf7e" + "reference": "d1c02090ec6536e3d43abeb236a535416b97e669" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/City-of-Helsinki/drupal-hdbt-admin/zipball/76454c97d12ea80c2e6859fea8d5926dca80bf7e", - "reference": "76454c97d12ea80c2e6859fea8d5926dca80bf7e", + "url": "https://api.github.com/repos/City-of-Helsinki/drupal-hdbt-admin/zipball/d1c02090ec6536e3d43abeb236a535416b97e669", + "reference": "d1c02090ec6536e3d43abeb236a535416b97e669", "shasum": "" }, "require": { @@ -5563,10 +5559,10 @@ "Drupal" ], "support": { - "source": "https://github.com/City-of-Helsinki/drupal-hdbt-admin/tree/3.2.7", + "source": "https://github.com/City-of-Helsinki/drupal-hdbt-admin/tree/3.2.8", "issues": "https://github.com/City-of-Helsinki/drupal-hdbt-admin/issues" }, - "time": "2024-11-01T05:47:57+00:00" + "time": "2024-11-18T15:28:13+00:00" }, { "name": "drupal/health_check", @@ -5933,16 +5929,16 @@ }, { "name": "drupal/helfi_platform_config", - "version": "4.7.1", + "version": "4.7.3", "source": { "type": "git", "url": "https://github.com/City-of-Helsinki/drupal-helfi-platform-config.git", - "reference": "680984849f6f204b63af73efb0ae531ba121ff58" + "reference": "45e879f0704b1f2b9d5f9c934fe662702483b9b7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/City-of-Helsinki/drupal-helfi-platform-config/zipball/680984849f6f204b63af73efb0ae531ba121ff58", - "reference": "680984849f6f204b63af73efb0ae531ba121ff58", + "url": "https://api.github.com/repos/City-of-Helsinki/drupal-helfi-platform-config/zipball/45e879f0704b1f2b9d5f9c934fe662702483b9b7", + "reference": "45e879f0704b1f2b9d5f9c934fe662702483b9b7", "shasum": "" }, "require": { @@ -6068,10 +6064,10 @@ ], "description": "HELfi platform config", "support": { - "source": "https://github.com/City-of-Helsinki/drupal-helfi-platform-config/tree/4.7.1", + "source": "https://github.com/City-of-Helsinki/drupal-helfi-platform-config/tree/4.7.3", "issues": "https://github.com/City-of-Helsinki/drupal-helfi-platform-config/issues" }, - "time": "2024-11-11T07:44:23+00:00" + "time": "2024-11-18T15:26:52+00:00" }, { "name": "drupal/helfi_proxy", @@ -8512,6 +8508,10 @@ "name": "nerdstein", "homepage": "https://www.drupal.org/user/1557710" }, + { + "name": "ptmkenny", + "homepage": "https://www.drupal.org/user/97885" + }, { "name": "rlhawk", "homepage": "https://www.drupal.org/user/352283" @@ -10879,16 +10879,16 @@ }, { "name": "elasticsearch/elasticsearch", - "version": "v8.15.0", + "version": "v8.16.0", "source": { "type": "git", "url": "https://github.com/elastic/elasticsearch-php.git", - "reference": "34c2444fa8d4c3e6c8b009bd8dea90bca007203b" + "reference": "ab0fdb43f9e69f0d0539028d8b0b56cdf3328d85" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/elastic/elasticsearch-php/zipball/34c2444fa8d4c3e6c8b009bd8dea90bca007203b", - "reference": "34c2444fa8d4c3e6c8b009bd8dea90bca007203b", + "url": "https://api.github.com/repos/elastic/elasticsearch-php/zipball/ab0fdb43f9e69f0d0539028d8b0b56cdf3328d85", + "reference": "ab0fdb43f9e69f0d0539028d8b0b56cdf3328d85", "shasum": "" }, "require": { @@ -10931,9 +10931,9 @@ ], "support": { "issues": "https://github.com/elastic/elasticsearch-php/issues", - "source": "https://github.com/elastic/elasticsearch-php/tree/v8.15.0" + "source": "https://github.com/elastic/elasticsearch-php/tree/v8.16.0" }, - "time": "2024-08-14T14:32:50+00:00" + "time": "2024-11-14T22:23:33+00:00" }, { "name": "ezyang/htmlpurifier", @@ -18290,16 +18290,16 @@ }, { "name": "twig/twig", - "version": "v3.14.2", + "version": "v3.15.0", "source": { "type": "git", "url": "https://github.com/twigphp/Twig.git", - "reference": "0b6f9d8370bb3b7f1ce5313ed8feb0fafd6e399a" + "reference": "2d5b3964cc21d0188633d7ddce732dc8e874db02" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/0b6f9d8370bb3b7f1ce5313ed8feb0fafd6e399a", - "reference": "0b6f9d8370bb3b7f1ce5313ed8feb0fafd6e399a", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/2d5b3964cc21d0188633d7ddce732dc8e874db02", + "reference": "2d5b3964cc21d0188633d7ddce732dc8e874db02", "shasum": "" }, "require": { @@ -18353,7 +18353,7 @@ ], "support": { "issues": "https://github.com/twigphp/Twig/issues", - "source": "https://github.com/twigphp/Twig/tree/v3.14.2" + "source": "https://github.com/twigphp/Twig/tree/v3.15.0" }, "funding": [ { @@ -18365,7 +18365,7 @@ "type": "tidelift" } ], - "time": "2024-11-07T12:36:22+00:00" + "time": "2024-11-17T15:59:19+00:00" }, { "name": "twistor/flysystem-stream-wrapper", diff --git a/conf/cmi/core.entity_view_display.media.image.image_gallery.yml b/conf/cmi/core.entity_view_display.media.image.image_gallery.yml new file mode 100644 index 0000000000..d9bbd4dc35 --- /dev/null +++ b/conf/cmi/core.entity_view_display.media.image.image_gallery.yml @@ -0,0 +1,38 @@ +uuid: 276c125d-e2db-44ce-9576-21c45385e0dc +langcode: en +status: true +dependencies: + config: + - core.entity_view_mode.media.image_gallery + - field.field.media.image.field_media_image + - field.field.media.image.field_photographer + - media.type.image + - responsive_image.styles.image_gallery_1_1 + module: + - responsive_image +_core: + default_config_hash: Ky7rUnc3u7APd8dH1E5EogiDjUtvkJvq0ZHfgG6OlQw +id: media.image.image_gallery +targetEntityType: media +bundle: image +mode: image_gallery +content: + field_media_image: + type: responsive_image + label: hidden + settings: + responsive_image_style: image_gallery_1_1 + image_link: '' + image_loading: + attribute: eager + third_party_settings: { } + weight: 0 + region: content +hidden: + created: true + field_photographer: true + langcode: true + name: true + search_api_excerpt: true + thumbnail: true + uid: true diff --git a/conf/cmi/core.entity_view_mode.media.image_gallery.yml b/conf/cmi/core.entity_view_mode.media.image_gallery.yml new file mode 100644 index 0000000000..aede92c6fb --- /dev/null +++ b/conf/cmi/core.entity_view_mode.media.image_gallery.yml @@ -0,0 +1,13 @@ +uuid: c52c9e44-0d46-417c-a8d9-372120b2c68a +langcode: en +status: true +dependencies: + module: + - media +_core: + default_config_hash: X_EeW1ealqkAjjQhcc2ehkJxyT9VZ9QH5iTYi-6NeYY +id: media.image_gallery +label: 'Image gallery' +description: '' +targetEntityType: media +cache: true diff --git a/conf/cmi/image.style.0.7_1086w_1630h_LQ.yml b/conf/cmi/image.style.0.7_1086w_1630h_LQ.yml new file mode 100644 index 0000000000..09db82eff8 --- /dev/null +++ b/conf/cmi/image.style.0.7_1086w_1630h_LQ.yml @@ -0,0 +1,26 @@ +uuid: 74ef3c22-d7ea-4cb1-8aab-01ba6b79bde5 +langcode: en +status: true +dependencies: + module: + - focal_point + - image_style_quality +_core: + default_config_hash: AeqLUQ96Cqn70SDi5us0fS8EdVFFfMUYhKl3Zf6DcBo +name: 0.7_1086w_1630h_LQ +label: 0.7_1086w_1630h_LQ +effects: + 1c1da0f4-bb6a-4f11-88eb-8cd33a8e0da2: + uuid: 1c1da0f4-bb6a-4f11-88eb-8cd33a8e0da2 + id: focal_point_scale_and_crop + weight: 1 + data: + width: 1086 + height: 1630 + crop_type: focal_point + c319bca0-92f7-4467-a5ec-1b902ce2be1b: + uuid: c319bca0-92f7-4467-a5ec-1b902ce2be1b + id: image_style_quality + weight: 2 + data: + quality: 65 diff --git a/conf/cmi/image.style.0.7_352w_572h.yml b/conf/cmi/image.style.0.7_352w_572h.yml new file mode 100644 index 0000000000..6aef21fe9d --- /dev/null +++ b/conf/cmi/image.style.0.7_352w_572h.yml @@ -0,0 +1,19 @@ +uuid: f0276d08-9181-4923-9b87-49e9bf5ee5f4 +langcode: en +status: true +dependencies: + module: + - focal_point +_core: + default_config_hash: cBN24Ntaz6rn8wtPWjCbT3-Hxq8qynjPGSmJFAV31Hk +name: 0.7_352w_572h +label: 0.7_352w_572h +effects: + 11ff7a5b-af0b-4eac-a4a3-7bc3b9ac6188: + uuid: 11ff7a5b-af0b-4eac-a4a3-7bc3b9ac6188 + id: focal_point_scale_and_crop + weight: 1 + data: + width: 352 + height: 572 + crop_type: focal_point diff --git a/conf/cmi/image.style.0.7_414w_621h.yml b/conf/cmi/image.style.0.7_414w_621h.yml new file mode 100644 index 0000000000..c93cd0363e --- /dev/null +++ b/conf/cmi/image.style.0.7_414w_621h.yml @@ -0,0 +1,19 @@ +uuid: 9ec716c1-6f6d-4d08-971f-a9d9230e43b7 +langcode: en +status: true +dependencies: + module: + - focal_point +_core: + default_config_hash: 9G0iI4Xc80IIrMDVw3MufI9ChwpU4MTr2DmAQBEsNww +name: 0.7_414w_621h +label: 0.7_414w_621h +effects: + dc8a6ee8-839c-4972-9eb8-5df5305dc75d: + uuid: dc8a6ee8-839c-4972-9eb8-5df5305dc75d + id: focal_point_scale_and_crop + weight: 1 + data: + width: 414 + height: 621 + crop_type: focal_point diff --git a/conf/cmi/image.style.0.7_543w_815h.yml b/conf/cmi/image.style.0.7_543w_815h.yml new file mode 100644 index 0000000000..b94f5f88f3 --- /dev/null +++ b/conf/cmi/image.style.0.7_543w_815h.yml @@ -0,0 +1,19 @@ +uuid: 6ff8a4a5-849c-4f94-8f22-1eb670793bdc +langcode: en +status: true +dependencies: + module: + - focal_point +_core: + default_config_hash: YnfcElLVLgfDdm94VOY-D0FddU7red0-u7cRiayv98Q +name: 0.7_543w_815h +label: 0.7_543w_815h +effects: + 6535b34f-21c8-4005-8561-d1936245e319: + uuid: 6535b34f-21c8-4005-8561-d1936245e319 + id: focal_point_scale_and_crop + weight: 1 + data: + width: 543 + height: 815 + crop_type: focal_point diff --git a/conf/cmi/image.style.0.7_704w_1144h_LQ.yml b/conf/cmi/image.style.0.7_704w_1144h_LQ.yml new file mode 100644 index 0000000000..74a2411b04 --- /dev/null +++ b/conf/cmi/image.style.0.7_704w_1144h_LQ.yml @@ -0,0 +1,26 @@ +uuid: 19aa2c22-c3e9-47cd-b767-9fca520ae4ba +langcode: en +status: true +dependencies: + module: + - focal_point + - image_style_quality +_core: + default_config_hash: pAcV7IybMiPiagIA-dUy4lmdI5voNIOyoE0Pkse5eV0 +name: 0.7_704w_1144h_LQ +label: 0.7_704w_1144h_LQ +effects: + 289822b3-1d38-43a4-a18e-0344b4ef9161: + uuid: 289822b3-1d38-43a4-a18e-0344b4ef9161 + id: focal_point_scale_and_crop + weight: 1 + data: + width: 704 + height: 1144 + crop_type: focal_point + c5118eb7-9ad5-4756-9515-d6358c38bd75: + uuid: c5118eb7-9ad5-4756-9515-d6358c38bd75 + id: image_style_quality + weight: 2 + data: + quality: 65 diff --git a/conf/cmi/image.style.0.7_828w_1242h_LQ.yml b/conf/cmi/image.style.0.7_828w_1242h_LQ.yml new file mode 100644 index 0000000000..445ae0479c --- /dev/null +++ b/conf/cmi/image.style.0.7_828w_1242h_LQ.yml @@ -0,0 +1,26 @@ +uuid: 5ebc2957-c7ca-4606-ba96-49486e6630e4 +langcode: en +status: true +dependencies: + module: + - focal_point + - image_style_quality +_core: + default_config_hash: mfxUI0GJzq_vdiXkYMnF9RUM07CwW2KKkEz14ofxTt8 +name: 0.7_828w_1242h_LQ +label: 0.7_828w_1242h_LQ +effects: + fb181588-37f9-4269-ae4e-7c93d76ffebe: + uuid: fb181588-37f9-4269-ae4e-7c93d76ffebe + id: focal_point_scale_and_crop + weight: 1 + data: + width: 828 + height: 1242 + crop_type: focal_point + a3284e2a-d636-4454-b7b6-3958d1db2b35: + uuid: a3284e2a-d636-4454-b7b6-3958d1db2b35 + id: image_style_quality + weight: 2 + data: + quality: 65 diff --git a/conf/cmi/image.style.1_1086w_1086h_LQ.yml b/conf/cmi/image.style.1_1086w_1086h_LQ.yml new file mode 100644 index 0000000000..c95dc13207 --- /dev/null +++ b/conf/cmi/image.style.1_1086w_1086h_LQ.yml @@ -0,0 +1,26 @@ +uuid: 9f76056d-d05c-40e9-9455-9caf237c2229 +langcode: en +status: true +dependencies: + module: + - focal_point + - image_style_quality +_core: + default_config_hash: mi1XUO2QcAKfZXGktQi8uH0YqSJQRPwztvP2d1hROLs +name: 1_1086w_1086h_LQ +label: 1_1086w_1086h_LQ +effects: + 3fe5b5a5-6dcd-4410-865d-22d39e20ae22: + uuid: 3fe5b5a5-6dcd-4410-865d-22d39e20ae22 + id: focal_point_scale_and_crop + weight: 1 + data: + width: 1086 + height: 1086 + crop_type: focal_point + 348c0fc5-7317-49a8-9a52-934e77165825: + uuid: 348c0fc5-7317-49a8-9a52-934e77165825 + id: image_style_quality + weight: 2 + data: + quality: 65 diff --git a/conf/cmi/image.style.1_414w_414h.yml b/conf/cmi/image.style.1_414w_414h.yml new file mode 100644 index 0000000000..21e0d11734 --- /dev/null +++ b/conf/cmi/image.style.1_414w_414h.yml @@ -0,0 +1,19 @@ +uuid: 0f96fcb7-856c-4d80-9a22-b1e88f44ca2b +langcode: en +status: true +dependencies: + module: + - focal_point +_core: + default_config_hash: hYrryvmZIFbqVuUffmELrMQU_CaSN30AKFOW_jHVzjA +name: 1_414w_414h +label: 1_414w_414h +effects: + 9ef8198f-6739-4a26-b0d7-157e42648cc4: + uuid: 9ef8198f-6739-4a26-b0d7-157e42648cc4 + id: focal_point_scale_and_crop + weight: 1 + data: + width: 414 + height: 414 + crop_type: focal_point diff --git a/conf/cmi/image.style.1_543w_543h.yml b/conf/cmi/image.style.1_543w_543h.yml new file mode 100644 index 0000000000..05eb86b0e3 --- /dev/null +++ b/conf/cmi/image.style.1_543w_543h.yml @@ -0,0 +1,19 @@ +uuid: ca8cb2c4-7e3c-4a4a-ae75-9520f628f369 +langcode: en +status: true +dependencies: + module: + - focal_point +_core: + default_config_hash: M4ETy7uSDV6Ww_h9CjHqPNr_G1ssAwvhYUP93h5drbs +name: 1_543w_543h +label: 1_543w_543h +effects: + ed62a58f-6f7b-47ff-b8c9-3574fb9abeba: + uuid: ed62a58f-6f7b-47ff-b8c9-3574fb9abeba + id: focal_point_scale_and_crop + weight: 1 + data: + width: 543 + height: 543 + crop_type: focal_point diff --git a/conf/cmi/image.style.1_828w_828h_LQ.yml b/conf/cmi/image.style.1_828w_828h_LQ.yml new file mode 100644 index 0000000000..2d33d9a48e --- /dev/null +++ b/conf/cmi/image.style.1_828w_828h_LQ.yml @@ -0,0 +1,26 @@ +uuid: d0a56f46-9d91-47a8-9269-57fda40b75ed +langcode: en +status: true +dependencies: + module: + - focal_point + - image_style_quality +_core: + default_config_hash: 5FDh9emCj1EzDriYUSM9-SHEBOkHjy6jkFjGruPs5Hw +name: 1_828w_828h_LQ +label: 1_828w_828h_LQ +effects: + c4554106-234a-4d04-a6cf-c7ae4f8886dd: + uuid: c4554106-234a-4d04-a6cf-c7ae4f8886dd + id: focal_point_scale_and_crop + weight: 1 + data: + width: 828 + height: 828 + crop_type: focal_point + ee011418-cb33-48a5-af34-10bfac5b3e64: + uuid: ee011418-cb33-48a5-af34-10bfac5b3e64 + id: image_style_quality + weight: 2 + data: + quality: 65 diff --git a/conf/cmi/responsive_image.styles.image_gallery_1_1.yml b/conf/cmi/responsive_image.styles.image_gallery_1_1.yml new file mode 100644 index 0000000000..4dfddfc68d --- /dev/null +++ b/conf/cmi/responsive_image.styles.image_gallery_1_1.yml @@ -0,0 +1,38 @@ +uuid: c0fef26d-9cc5-4756-b247-5a9c3f7b4550 +langcode: en +status: true +dependencies: + config: + - image.style.1_1086w_1086h_LQ + - image.style.1_414w_414h + - image.style.1_543w_543h + - image.style.1_828w_828h_LQ + module: + - helfi_image_styles +_core: + default_config_hash: 29_zAX_g0m2zPiaRWVs5QHweA-Yhu0_yQcb9LewDXMM +id: image_gallery_1_1 +label: 'Image gallery 1:1' +image_style_mappings: + - + image_mapping_type: image_style + image_mapping: 1_414w_414h + breakpoint_id: helfi_image_styles.m + multiplier: 1x + - + image_mapping_type: image_style + image_mapping: 1_828w_828h_LQ + breakpoint_id: helfi_image_styles.m + multiplier: 2x + - + image_mapping_type: image_style + image_mapping: 1_543w_543h + breakpoint_id: helfi_image_styles.xs + multiplier: 1x + - + image_mapping_type: image_style + image_mapping: 1_1086w_1086h_LQ + breakpoint_id: helfi_image_styles.xs + multiplier: 2x +breakpoint_group: helfi_image_styles +fallback_image_style: 1_414w_414h diff --git a/conf/cmi/responsive_image.styles.image_gallery_2_3.yml b/conf/cmi/responsive_image.styles.image_gallery_2_3.yml new file mode 100644 index 0000000000..f5a90b0cac --- /dev/null +++ b/conf/cmi/responsive_image.styles.image_gallery_2_3.yml @@ -0,0 +1,50 @@ +uuid: 4da06bdc-4ddf-479d-bd7a-e7ccbcf93a7e +langcode: en +status: true +dependencies: + config: + - image.style.0.7_1086w_1630h_LQ + - image.style.0.7_352w_572h + - image.style.0.7_414w_621h + - image.style.0.7_543w_815h + - image.style.0.7_704w_1144h_LQ + - image.style.0.7_828w_1242h_LQ + module: + - helfi_image_styles +_core: + default_config_hash: FsfbGbQamEyCjnhveCelHwebu8SHFK8rfWmoeeh7jEc +id: image_gallery_2_3 +label: 'Image gallery 2:3' +image_style_mappings: + - + image_mapping_type: image_style + image_mapping: 0.7_414w_621h + breakpoint_id: helfi_image_styles.m + multiplier: 1x + - + image_mapping_type: image_style + image_mapping: 0.7_828w_1242h_LQ + breakpoint_id: helfi_image_styles.m + multiplier: 2x + - + image_mapping_type: image_style + image_mapping: 0.7_352w_572h + breakpoint_id: helfi_image_styles.s + multiplier: 1x + - + image_mapping_type: image_style + image_mapping: 0.7_704w_1144h_LQ + breakpoint_id: helfi_image_styles.s + multiplier: 2x + - + image_mapping_type: image_style + image_mapping: 0.7_543w_815h + breakpoint_id: helfi_image_styles.xs + multiplier: 1x + - + image_mapping_type: image_style + image_mapping: 0.7_1086w_1630h_LQ + breakpoint_id: helfi_image_styles.xs + multiplier: 2x +breakpoint_group: helfi_image_styles +fallback_image_style: 0.7_414w_621h diff --git a/conf/cmi/responsive_image.styles.image_gallery_3_2.yml b/conf/cmi/responsive_image.styles.image_gallery_3_2.yml new file mode 100644 index 0000000000..02858796ef --- /dev/null +++ b/conf/cmi/responsive_image.styles.image_gallery_3_2.yml @@ -0,0 +1,50 @@ +uuid: 0011a33c-b46a-4354-af09-3ea3e656a790 +langcode: en +status: true +dependencies: + config: + - image.style.1.5_1120w_746h_LQ + - image.style.1.5_378w_252h + - image.style.1.5_452w_301h + - image.style.1.5_560w_373h + - image.style.1.5_756w_504h_LQ + - image.style.1.5_904w_602h_LQ + module: + - helfi_image_styles +_core: + default_config_hash: l_qdU6nExbacBLGCv5ZQHXE54vA49nRWaLcmwRL479U +id: image_gallery_3_2 +label: 'Image gallery 3:2' +image_style_mappings: + - + image_mapping_type: image_style + image_mapping: 1.5_452w_301h + breakpoint_id: helfi_image_styles.m + multiplier: 1x + - + image_mapping_type: image_style + image_mapping: 1.5_904w_602h_LQ + breakpoint_id: helfi_image_styles.m + multiplier: 2x + - + image_mapping_type: image_style + image_mapping: 1.5_378w_252h + breakpoint_id: helfi_image_styles.s + multiplier: 1x + - + image_mapping_type: image_style + image_mapping: 1.5_756w_504h_LQ + breakpoint_id: helfi_image_styles.s + multiplier: 2x + - + image_mapping_type: image_style + image_mapping: 1.5_560w_373h + breakpoint_id: helfi_image_styles.xs + multiplier: 1x + - + image_mapping_type: image_style + image_mapping: 1.5_1120w_746h_LQ + breakpoint_id: helfi_image_styles.xs + multiplier: 2x +breakpoint_group: helfi_image_styles +fallback_image_style: 1.5_452w_301h From c84d0c0c33ca8518e55f89c3ff79f7d07613a9c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20Kalij=C3=A4rvi?= Date: Tue, 19 Nov 2024 09:55:40 +0200 Subject: [PATCH 46/74] feat: UHF-10728: KUVA ID70 form e2e tests (#1566) * UHF-10728: Added SLOWMO environment variable to wait 1 second before clicking elements. Works like this: SLOWMO=true npx playwright... * UHF-10728: Added 'exit on first error' and 'slowmo' instructions. * UHF-10728: Added the application data for the iakkaiden-kulttuuri-ja-liikunta form. * UHF-10728: Added the registered_community test for the "iakkaiden-kulttuuri-ja-liikunta" webform. * UHF-10728: Minor changes to test + one warning removal. * UHF-10728: PHPCS --------- Co-authored-by: Janne Suominen --- e2e/README.md | 11 +- e2e/playwright.config.ts | 9 + e2e/tests/forms/registered_community_70.ts | 125 ++ .../data/application/application_data_70.ts | 1146 +++++++++++++++++ .../application_data_registered_community.ts | 2 + .../grants_handler/src/ApplicationHelpers.php | 5 +- 6 files changed, 1295 insertions(+), 3 deletions(-) create mode 100644 e2e/tests/forms/registered_community_70.ts create mode 100644 e2e/utils/data/application/application_data_70.ts diff --git a/e2e/README.md b/e2e/README.md index fc6ee6ca85..9bab60d8c1 100644 --- a/e2e/README.md +++ b/e2e/README.md @@ -187,6 +187,11 @@ To run all tests in headed mode (displays a browser): npx playwright test --headed ``` +To exit on first error: +``` +npx playwright test -x +``` + To run a specific set of tests. Available sets (projects) can be found in `playwright.config.ts`: ``` npx playwright test --project {NAME_OF_PROJECT} @@ -206,10 +211,14 @@ Example 1: npx playwright test --project forms-48 --headed Example 2: npx playwright test --project forms-48-registered --headed - Example 3: npx playwright test --project forms-all --headed ``` +To run a specific set of tests in headed mode with a slow-motion feature that pauses for one second before entering data: +``` +SLOWMO=true npx playwright test --project {NAME_OF_PROJECT} --headed +``` + Other command line options that can be utilized when running the test on your local machine can be found [here](https://playwright.dev/docs/test-cli). ### Deleting applications from your local env diff --git a/e2e/playwright.config.ts b/e2e/playwright.config.ts index d2f0bb37d8..6b4c52049f 100644 --- a/e2e/playwright.config.ts +++ b/e2e/playwright.config.ts @@ -32,6 +32,9 @@ export default defineConfig({ }, /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */ trace: 'on-first-retry', + launchOptions: { + slowMo: process.env.SLOWMO ? 1_000 : 0, + }, }, // For expect calls expect: { @@ -300,5 +303,11 @@ export default defineConfig({ testMatch: '/forms/registered_community_69.ts', dependencies: ['profile-registered_community'] }, + /* Form 70 tests. */ + { + name: 'forms-70', + testMatch: '/forms/registered_community_70.ts', + dependencies: ['profile-registered_community'] + }, ], }); diff --git a/e2e/tests/forms/registered_community_70.ts b/e2e/tests/forms/registered_community_70.ts new file mode 100644 index 0000000000..7cf4564c31 --- /dev/null +++ b/e2e/tests/forms/registered_community_70.ts @@ -0,0 +1,125 @@ +import {Page, test} from '@playwright/test'; +import {FormData, PageHandlers, FormPage} from "../../utils/data/test_data"; +import {fillHakijanTiedotRegisteredCommunity} from "../../utils/form_helpers"; +import {fillFormField} from "../../utils/input_helpers"; +import {generateTests} from "../../utils/test_generator_helpers"; +import {Role, selectRole} from "../../utils/auth_helpers"; +import {registeredCommunityApplications as applicationData} from '../../utils/data/application_data'; + +const formPages: PageHandlers = { + '1_hakijan_tiedot': async (page: Page, {items}: FormPage) => { + await fillHakijanTiedotRegisteredCommunity(items, page); + }, + '2_avustustiedot': async (page: Page, {items}: FormPage) => { + + if (items['edit-acting-year']) { + await fillFormField(page, items['edit-acting-year'], 'edit-acting-year'); + } + + // Kulttuurin erityisavustus 1 + if (items['edit-subventions-items-0-amount']) { + await page.locator('#edit-subventions-items-0-amount') + .fill(items['edit-subventions-items-0-amount'].value ?? ''); + } + + // Liikunnan erityisavustus 1. + if (items['edit-subventions-items-1-amount']) { + // Using the items['edit-subventions-items-0-amount'].value doesn't seem + // to work as expected. Use + await page.locator('#edit-subventions-items-1-amount') + .fill(items['edit-subventions-items-1-amount'].value ?? ''); + } + + if (items['edit-compensation-purpose']) { + await page.getByRole('textbox', {name: 'Lyhyt kuvaus haettavan / haettavien avustusten käyttötarkoituksista'}) + .fill(items['edit-compensation-purpose'].value ?? ''); + } + + if (items['edit-myonnetty-avustus']) { + await fillFormField(page, items['edit-myonnetty-avustus'], 'edit-myonnetty-avustus') + } + + if (items['edit-haettu-avustus-tieto']) { + await fillFormField(page, items['edit-haettu-avustus-tieto'], 'edit-haettu-avustus-tieto') + } + }, + '3_tarkemmat_tiedot': async (page: Page, {items}: FormPage) => { + + const skipItems = [ + 'edit-hankkeen-toimenpiteet-alkupvm', + 'edit-hankkeen-toimenpiteet-loppupvm', + 'edit-ensisijainen-taiteen-ala', + ]; + + // Loop all items from page 3. + for (const [itemKey, item] of Object.entries(items)) { + // Skip the date fields and the select list, and handle them separately. + if (skipItems.includes(itemKey)) { + continue; + } + await fillFormField(page, item, itemKey); + } + + // Handle the "taiteenala" select list separately. + if (items['edit-ensisijainen-taiteen-ala']) { + await page.selectOption('select#edit-ensisijainen-taiteen-ala', + items['edit-ensisijainen-taiteen-ala'].value ?? ''); + } + + // Handle date fields separately. + if (items['edit-hankkeen-toimenpiteet-alkupvm']) { + await page.getByLabel('Alkupäivämäärä') + .fill(items['edit-hankkeen-toimenpiteet-alkupvm'].value ?? ''); + } + + if (items['edit-hankkeen-toimenpiteet-loppupvm']) { + await page.getByLabel('Loppupäivämäärä') + .fill(items['edit-hankkeen-toimenpiteet-loppupvm'].value ?? ''); + } + }, + '4_talousarvio': async (page: Page, {items}: FormPage) => { + + // Loop all items from page 4. + for (const [itemKey, item] of Object.entries(items)) { + await fillFormField(page, item, itemKey); + } + }, + 'lisatiedot_ja_liitteet': async (page: Page, {items}: FormPage) => { + + // Loop all items from page 5. + for (const [itemKey, item] of Object.entries(items)) { + await fillFormField(page, item, itemKey); + } + }, + 'webform_preview': async (page: Page, {items}: FormPage) => { + if (items['accept_terms_1']) { + // Check data on confirmation page + await page.getByLabel('Vakuutamme, että hakemuksessa ja sen liitteissä antamamme tiedot ovat oikeita, ja hyväksymme avustusehdot').check(); + } + }, +}; + +test.describe('KUVAERILLIS(70)', () => { + let page: Page; + + const profileType = 'registered_community'; + const formId = '70'; + + test.beforeAll(async ({browser}) => { + page = await browser.newPage(); + await selectRole(page, profileType.toUpperCase() as Role); + }); + + test.afterAll(async() => { + await page.close(); + }); + + const testDataArray: [string, FormData][] = Object.entries(applicationData[formId]); + const tests = generateTests(profileType, formId, formPages, testDataArray); + + for (const { testName, testFunction } of tests) { + test(testName, async ({browser}) => { + await testFunction(page, browser); + }); + } +}); diff --git a/e2e/utils/data/application/application_data_70.ts b/e2e/utils/data/application/application_data_70.ts new file mode 100644 index 0000000000..197dba1302 --- /dev/null +++ b/e2e/utils/data/application/application_data_70.ts @@ -0,0 +1,1146 @@ +import {FormData, FormDataWithRemoveOptionalProps} from '../test_data'; +import {fakerFI as faker} from '@faker-js/faker' +import {PROFILE_INPUT_DATA} from '../profile_input_data'; +import {ATTACHMENTS} from '../attachment_data'; +import {createFormData} from '../../form_data_helpers'; +import { + viewPageFormatAddress, + viewPageFormatBoolean, + viewPageFormatCurrency, + viewPageFormatDate, + viewPageFormatFilePath, + viewPageFormatLowerCase, + viewPageFormatNumber +} from '../../view_page_formatters'; +import {getFakeEmailAddress} from '../../field_helpers'; + +/** + * Basic form data for successful save as a draft + */ +const baseForm_70: FormData = { + title: 'Save as draft.', + formSelector: 'webform-submission-iakkaiden-kulttuuri-ja-liikunta-form', + formPath: '/fi/form/iakkaiden-kulttuuri-ja-liikunta', + formPages: { + '1_hakijan_tiedot': { + items: { + 'edit-email': { + role: 'input', + selector: { + type: 'data-drupal-selector', + name: 'data-drupal-selector', + value: 'edit-email', + }, + value: getFakeEmailAddress(), + viewPageFormatter: viewPageFormatLowerCase, + }, + 'edit-contact-person': { + role: 'input', + selector: { + type: 'data-drupal-selector', + name: 'data-drupal-selector', + value: 'edit-contact-person', + }, + value: faker.person.fullName(), + }, + 'edit-contact-person-phone-number': { + role: 'input', + selector: { + type: 'data-drupal-selector', + name: 'data-drupal-selector', + value: 'edit-contact-person-phone-number', + }, + value: faker.phone.number(), + }, + 'edit-bank-account-account-number-select': { + role: 'select', + value: PROFILE_INPUT_DATA.iban, + viewPageSelector: '.form-item-bank-account', + }, + 'edit-community-address-community-address-select': { + value: `${PROFILE_INPUT_DATA.address}, ${PROFILE_INPUT_DATA.zipCode}, ${PROFILE_INPUT_DATA.city}`, + viewPageSelector: '.form-item-community-address', + viewPageFormatter: viewPageFormatAddress + }, + 'edit-community-officials-items-0-item-community-officials-select': { + role: 'select', + viewPageSelector: '.form-item-community-officials', + value: PROFILE_INPUT_DATA.communityOfficial, + }, + 'nextbutton': { + role: 'button', + selector: { + type: 'form-topnavi-link', + name: 'data-drupal-selector', + value: '2_avustustiedot', + }, + viewPageSkipValidation: true, + }, + }, + }, + '2_avustustiedot': { + items: { + 'edit-acting-year': { + role: 'select', + selector: { + type: 'dom-id-first', + name: '', + value: '#edit-acting-year', + }, + viewPageSkipValidation: true, + }, + 'edit-subventions-items-0-amount': { + role: 'number-input', + value: '5709,98', + viewPageSelector: '.form-item-subventions', + viewPageFormatter: viewPageFormatCurrency + }, + 'edit-compensation-purpose': { + value: faker.lorem.sentences(4), + }, + 'edit-myonnetty-avustus': { + role: 'dynamicmultivalue', + label: '', + dynamic_multi: { + radioSelector: { + type: 'dom-id-label', + name: 'data-drupal-selector', + value: 'edit-olemme-saaneet-muita-avustuksia-1', + }, + revealedElementSelector: { + type: 'dom-id', + name: '', + value: '#edit-myonnetty-avustus', + }, + multi: { + buttonSelector: { + type: 'data-drupal-selector', + name: 'data-drupal-selector', + value: 'edit-myonnetty-avustus-add-submit', + resultValue: 'edit-myonnetty-avustus-items-[INDEX]', + }, + //@ts-ignore + items: { + 0: [ + { + role: 'select', + selector: { + type: 'by-label', + name: '', + value: 'edit-myonnetty-avustus-items-[INDEX]-item-issuer', + }, + value: 'Valtio', + }, + { + role: 'input', + selector: { + type: 'data-drupal-selector', + name: 'data-drupal-selector', + value: 'edit-myonnetty-avustus-items-[INDEX]-item-issuer-name', + }, + value: faker.lorem.words(2).toUpperCase(), + }, + { + role: 'input', + selector: { + type: 'data-drupal-selector', + name: 'data-drupal-selector', + value: 'edit-myonnetty-avustus-items-[INDEX]-item-year', + }, + value: faker.date.past().getFullYear().toString(), + }, + { + role: 'input', + selector: { + type: 'data-drupal-selector-sequential', + name: 'data-drupal-selector-sequential', + value: 'edit-myonnetty-avustus-items-[INDEX]-item-amount', + }, + value: faker.number.float({ + min: 1000, + max: 10000, + multipleOf: 2 + }).toString(), + viewPageFormatter: viewPageFormatCurrency, + }, + { + role: 'input', + selector: { + type: 'data-drupal-selector', + name: 'data-drupal-selector', + value: 'edit-myonnetty-avustus-items-[INDEX]-item-purpose', + }, + value: faker.lorem.words(30), + }, + ], + 1: [ + { + role: 'select', + selector: { + type: 'by-label', + name: '', + value: 'edit-myonnetty-avustus-items-[INDEX]-item-issuer', + }, + value: 'EU', + }, + { + role: 'input', + selector: { + type: 'data-drupal-selector', + name: 'data-drupal-selector', + value: 'edit-myonnetty-avustus-items-[INDEX]-item-issuer-name', + }, + value: faker.lorem.words(2).toUpperCase(), + }, + { + role: 'input', + selector: { + type: 'data-drupal-selector', + name: 'data-drupal-selector', + value: 'edit-myonnetty-avustus-items-[INDEX]-item-year', + }, + value: faker.date.past().getFullYear().toString(), + }, + { + role: 'input', + selector: { + type: 'data-drupal-selector-sequential', + name: 'data-drupal-selector-sequential', + value: 'edit-myonnetty-avustus-items-[INDEX]-item-amount', + }, + value: faker.number.float({ + min: 1000, + max: 10000, + multipleOf: 2 + }).toString(), + viewPageFormatter: viewPageFormatCurrency, + }, + { + role: 'input', + selector: { + type: 'data-drupal-selector', + name: 'data-drupal-selector', + value: 'edit-myonnetty-avustus-items-[INDEX]-item-purpose', + }, + value: faker.lorem.words(30), + }, + ], + }, + expectedErrors: {} + } + }, + }, + 'edit-haettu-avustus-tieto': { + role: 'dynamicmultivalue', + label: '', + dynamic_multi: { + radioSelector: { + type: 'dom-id-label', + name: 'data-drupal-selector', + value: 'edit-olemme-hakeneet-avustuksia-muualta-kuin-helsingin-kaupungilta-1', + }, + revealedElementSelector: { + type: 'dom-id', + name: '', + value: '#edit-haettu-avustus-tieto', + }, + multi: { + buttonSelector: { + type: 'data-drupal-selector', + name: 'data-drupal-selector', + value: 'edit-haettu-avustus-tieto-add-submit', + resultValue: 'edit-haettu-avustus-tieto-items-[INDEX]', + }, + //@ts-ignore + items: { + 0: [ + { + role: 'select', + selector: { + type: 'by-label', + name: '', + value: 'edit-haettu-avustus-tieto-items-[INDEX]-item-issuer', + }, + value: 'Muu', + }, + { + role: 'input', + selector: { + type: 'data-drupal-selector', + name: 'data-drupal-selector', + value: 'edit-haettu-avustus-tieto-items-[INDEX]-item-issuer-name', + }, + value: faker.lorem.words(2).toUpperCase(), + }, + { + role: 'input', + selector: { + type: 'data-drupal-selector', + name: 'data-drupal-selector', + value: 'edit-haettu-avustus-tieto-items-[INDEX]-item-year', + }, + value: faker.date.past().getFullYear().toString(), + }, + { + role: 'input', + selector: { + type: 'data-drupal-selector-sequential', + name: 'data-drupal-selector-sequential', + value: 'edit-haettu-avustus-tieto-items-[INDEX]-item-amount', + }, + value: faker.number.float({ + min: 1000, + max: 10000, + multipleOf: 2 + }).toString(), + viewPageFormatter: viewPageFormatCurrency, + }, + { + role: 'input', + selector: { + type: 'data-drupal-selector', + name: 'data-drupal-selector', + value: 'edit-haettu-avustus-tieto-items-[INDEX]-item-purpose', + }, + value: faker.lorem.words(30), + }, + ], + 1: [ + { + role: 'select', + selector: { + type: 'by-label', + name: '', + value: 'edit-haettu-avustus-tieto-items-[INDEX]-item-issuer', + }, + value: 'Säätiö', + }, + { + role: 'input', + selector: { + type: 'data-drupal-selector', + name: 'data-drupal-selector', + value: 'edit-haettu-avustus-tieto-items-[INDEX]-item-issuer-name', + }, + value: faker.lorem.words(2).toUpperCase(), + }, + { + role: 'input', + selector: { + type: 'data-drupal-selector', + name: 'data-drupal-selector', + value: 'edit-haettu-avustus-tieto-items-[INDEX]-item-year', + }, + value: faker.date.past().getFullYear().toString(), + }, + { + role: 'input', + selector: { + type: 'data-drupal-selector-sequential', + name: 'data-drupal-selector-sequential', + value: 'edit-haettu-avustus-tieto-items-[INDEX]-item-amount', + }, + value: faker.number.float({ + min: 1000, + max: 10000, + multipleOf: 2 + }).toString(), + viewPageFormatter: viewPageFormatCurrency, + }, + { + role: 'input', + selector: { + type: 'data-drupal-selector', + name: 'data-drupal-selector', + value: 'edit-haettu-avustus-tieto-items-[INDEX]-item-purpose', + }, + value: faker.lorem.words(30), + }, + ], + }, + expectedErrors: {} + } + }, + }, + 'nextbutton': { + role: 'button', + selector: { + type: 'form-topnavi-link', + name: 'data-drupal-selector', + value: '3_tarkemmat_tiedot', + } + }, + }, + }, + '3_tarkemmat_tiedot': { + items: { + 'edit-hankesuunnitelma-radios-0': { + role: 'radio', + selector: { + type: 'dom-id-label', + name: 'data-drupal-selector', + value: 'edit-hankesuunnitelma-radios-0', + }, + value: 'Ei', + viewPageFormatter: viewPageFormatBoolean + }, + 'edit-ensisijainen-taiteen-ala': { + role: 'select', + viewPageSelector: '.form-item-ensisijainen-taiteen-ala', + value: 'Kirjallisuus', + }, + // Section 3.1. + 'edit-hankesuunnitelma-jatkohakemus': { + role: 'radio', + value: '0', + viewPageFormatter: viewPageFormatBoolean + }, + 'edit-hankkeen-tarkoitus-tavoitteet': { + role: 'input', + selector: { + type: 'data-drupal-selector', + name: 'data-drupal-selector', + value: 'edit-hankkeen-tarkoitus-tavoitteet', + }, + value: faker.lorem.words(10), + }, + 'edit-hankkeen-toimenpiteet-aikataulu': { + role: 'input', + selector: { + type: 'data-drupal-selector', + name: 'data-drupal-selector', + value: 'edit-hankkeen-toimenpiteet-aikataulu', + }, + value: faker.lorem.words(10), + }, + 'edit-hankkeen-toimenpiteet-alkupvm': { + role: 'input', + value: '2024-11-14', + viewPageFormatter: viewPageFormatDate, + viewPageSelector: '#iakkaiden_kulttuuri_ja_liikunta--hankesuunnitelma_section', + }, + 'edit-hankkeen-toimenpiteet-loppupvm': { + role: 'input', + value: '2025-11-14', + viewPageFormatter: viewPageFormatDate, + viewPageSelector: '#iakkaiden_kulttuuri_ja_liikunta--hankesuunnitelma_section', + }, + 'edit-hankkeen-keskeisimmat-kumppanit': { + role: 'input', + selector: { + type: 'data-drupal-selector', + name: 'data-drupal-selector', + value: 'edit-hankkeen-keskeisimmat-kumppanit', + }, + value: faker.lorem.words(10), + }, + // Section 3.2. + 'edit-haun-painopisteet-liikkumis-kehitys': { + role: 'input', + selector: { + type: 'data-drupal-selector', + name: 'data-drupal-selector', + value: 'edit-haun-painopisteet-liikkumis-kehitys', + }, + value: faker.lorem.words(10), + }, + 'edit-haun-painopisteet-digi-kehitys': { + role: 'input', + selector: { + type: 'data-drupal-selector', + name: 'data-drupal-selector', + value: 'edit-haun-painopisteet-digi-kehitys', + }, + value: faker.lorem.words(10), + }, + 'edit-haun-painopisteet-vertais-kehitys': { + role: 'input', + selector: { + type: 'data-drupal-selector', + name: 'data-drupal-selector', + value: 'edit-haun-painopisteet-vertais-kehitys', + }, + value: faker.lorem.words(10), + }, + 'edit-haun-painopisteet-kulttuuri-kehitys': { + role: 'input', + selector: { + type: 'data-drupal-selector', + name: 'data-drupal-selector', + value: 'edit-haun-painopisteet-kulttuuri-kehitys', + }, + value: faker.lorem.words(10), + }, + // Section 3.3. + 'edit-hankkeen-kohderyhmat-kenelle': { + role: 'input', + selector: { + type: 'data-drupal-selector', + name: 'data-drupal-selector', + value: 'edit-hankkeen-kohderyhmat-kenelle', + }, + value: faker.lorem.words(10), + }, + 'edit-hankkeen-kohderyhmat-erityisryhmat': { + role: 'input', + selector: { + type: 'data-drupal-selector', + name: 'data-drupal-selector', + value: 'edit-hankkeen-kohderyhmat-erityisryhmat', + }, + value: faker.lorem.words(10), + }, + 'edit-hankkeen-kohderyhmat-tavoitus': { + role: 'input', + selector: { + type: 'data-drupal-selector', + name: 'data-drupal-selector', + value: 'edit-hankkeen-kohderyhmat-tavoitus', + }, + value: faker.lorem.words(10), + }, + 'edit-hankkeen-kohderyhmat-konkretia': { + role: 'input', + selector: { + type: 'data-drupal-selector', + name: 'data-drupal-selector', + value: 'edit-hankkeen-kohderyhmat-konkretia', + }, + value: faker.lorem.words(10), + }, + 'edit-hankkeen-kohderyhmat-osallisuus': { + role: 'input', + selector: { + type: 'data-drupal-selector', + name: 'data-drupal-selector', + value: 'edit-hankkeen-kohderyhmat-osallisuus', + }, + value: faker.lorem.words(10), + }, + 'edit-hankkeen-kohderyhmat-osaaminen': { + role: 'input', + selector: { + type: 'data-drupal-selector', + name: 'data-drupal-selector', + value: 'edit-hankkeen-kohderyhmat-osaaminen', + }, + value: faker.lorem.words(10), + }, + 'edit-hankkeen-kohderyhmat-postinrot': { + role: 'input', + selector: { + type: 'data-drupal-selector', + name: 'data-drupal-selector', + value: 'edit-hankkeen-kohderyhmat-postinrot', + }, + value: faker.location.zipCode(), + }, + 'edit-hankkeen-kohderyhmat-miksi-alue': { + role: 'input', + selector: { + type: 'data-drupal-selector', + name: 'data-drupal-selector', + value: 'edit-hankkeen-kohderyhmat-miksi-alue', + }, + value: faker.lorem.words(10), + }, + // Section 3.4. + 'edit-hankkeen-riskit-keskeisimmat': { + role: 'input', + selector: { + type: 'data-drupal-selector', + name: 'data-drupal-selector', + value: 'edit-hankkeen-riskit-keskeisimmat', + }, + value: faker.lorem.words(10), + }, + 'edit-hankkeen-riskit-seuranta': { + role: 'input', + selector: { + type: 'data-drupal-selector', + name: 'data-drupal-selector', + value: 'edit-hankkeen-riskit-seuranta', + }, + value: faker.lorem.words(10), + }, + 'edit-hankkeen-riskit-vakiinnuttaminen': { + role: 'input', + selector: { + type: 'data-drupal-selector', + name: 'data-drupal-selector', + value: 'edit-hankkeen-riskit-vakiinnuttaminen', + }, + value: faker.lorem.words(10), + }, + 'nextbutton': { + role: 'button', + selector: { + type: 'form-topnavi-link', + name: 'data-drupal-selector', + value: '4_talousarvio', + }, + }, + }, + }, + '4_talousarvio': { + items: { + 'edit-talous-tulon-tyyppi': { + role: 'multivalue', + multi: { + buttonSelector: { + type: 'data-drupal-selector', + name: 'data-drupal-selector', + value: 'edit-talous-tulon-tyyppi-add-submit', + resultValue: 'edit-talous-tulon-tyyppi-items-[INDEX]', + }, + //@ts-ignore + items: { + 0: [ + { + role: 'input', + selector: { + type: 'data-drupal-selector', + name: 'data-drupal-selector', + value: 'edit-talous-tulon-tyyppi-items-[INDEX]-item-label', + }, + value: faker.lorem.words(2), + }, + { + role: 'input', + selector: { + type: 'data-drupal-selector-sequential', + name: 'data-drupal-selector-sequential', + value: 'edit-talous-tulon-tyyppi-items-[INDEX]-item-value', + }, + value: faker.number.int({min: 1, max: 5000}).toString(), + viewPageFormatter: viewPageFormatNumber, + }, + ], + 1: [ + { + role: 'input', + selector: { + type: 'data-drupal-selector', + name: 'data-drupal-selector', + value: 'edit-talous-tulon-tyyppi-items-[INDEX]-item-label', + }, + value: faker.lorem.words(2), + }, + { + role: 'input', + selector: { + type: 'data-drupal-selector-sequential', + name: 'data-drupal-selector-sequential', + value: 'edit-talous-tulon-tyyppi-items-[INDEX]-item-value', + }, + value: faker.number.int({min: 1, max: 5000}).toString(), + viewPageFormatter: viewPageFormatNumber, + }, + ], + }, + expectedErrors: {} + }, + }, + 'edit-talous-menon-tyyppi': { + role: 'multivalue', + multi: { + buttonSelector: { + type: 'data-drupal-selector', + name: 'data-drupal-selector', + value: 'edit-talous-menon-tyyppi-add-submit', + resultValue: 'edit-talous-menon-tyyppi-items-[INDEX]', + }, + //@ts-ignore + items: { + 0: [ + { + role: 'input', + selector: { + type: 'data-drupal-selector', + name: 'data-drupal-selector', + value: 'edit-talous-menon-tyyppi-items-[INDEX]-item-label', + }, + value: faker.lorem.words(2), + }, + { + role: 'input', + selector: { + type: 'data-drupal-selector-sequential', + name: 'data-drupal-selector-sequential', + value: 'edit-talous-menon-tyyppi-items-[INDEX]-item-value', + }, + value: faker.number.int({min: 1, max: 5000}).toString(), + viewPageFormatter: viewPageFormatNumber, + }, + ], + 1: [ + { + role: 'input', + selector: { + type: 'data-drupal-selector', + name: 'data-drupal-selector', + value: 'edit-talous-menon-tyyppi-items-[INDEX]-item-label', + }, + value: faker.lorem.words(2), + }, + { + role: 'input', + selector: { + type: 'data-drupal-selector-sequential', + name: 'data-drupal-selector-sequential', + value: 'edit-talous-menon-tyyppi-items-[INDEX]-item-value', + }, + value: faker.number.int({min: 1, max: 5000}).toString(), + viewPageFormatter: viewPageFormatNumber, + }, + ], + }, + expectedErrors: {} + }, + }, + 'nextbutton': { + role: 'button', + selector: { + type: 'form-topnavi-link', + name: 'data-drupal-selector', + value: 'lisatiedot_ja_liitteet', + } + }, + }, + }, + 'lisatiedot_ja_liitteet': { + items: { + 'edit-additional-information': { + role: 'input', + selector: { + type: 'data-drupal-selector', + name: 'data-drupal-selector', + value: 'edit-additional-information', + }, + value: faker.lorem.sentences(3), + }, + 'edit-extra-info': { + role: 'input', + selector: { + type: 'data-drupal-selector', + name: 'data-drupal-selector', + value: 'edit-extra-info', + }, + value: faker.lorem.sentences(3), + }, + 'edit-muu-liite': { + role: 'multivalue', + multi: { + buttonSelector: { + type: 'data-drupal-selector', + name: 'data-drupal-selector', + value: 'edit-muu-liite-add-submit', + resultValue: 'edit-muu-liite-items-[INDEX]', + }, + //@ts-ignore + items: { + 0: [ + { + role: 'fileupload', + selector: { + type: 'locator', + name: 'data-drupal-selector', + value: '[name="files[muu_liite_items_[INDEX]__item__attachment]"]', + resultValue: '.form-item-muu-liite-items-[INDEX]--item--attachment a', + }, + value: ATTACHMENTS.MUU_LIITE, + viewPageFormatter: viewPageFormatFilePath + }, + { + role: 'input', + selector: { + type: 'data-drupal-selector', + name: 'data-drupal-selector', + value: 'edit-muu-liite-items-[INDEX]-item-description', + }, + value: faker.lorem.sentences(1), + }, + ], + }, + }, + }, + 'nextbutton': { + role: 'button', + selector: { + type: 'form-topnavi-link', + name: 'data-drupal-selector', + value: 'webform_preview', + }, + viewPageSkipValidation: true, + }, + }, + }, + 'webform_preview': { + items: { + 'accept_terms_1': { + role: 'checkbox', + value: '1', + viewPageSkipValidation: true, + }, + 'sendbutton': { + role: 'button', + value: 'save-draft', + selector: { + type: 'data-drupal-selector', + name: 'data-drupal-selector', + value: 'edit-actions-draft', + }, + viewPageSkipValidation: true, + }, + }, + }, + }, + expectedErrors: {}, + expectedDestination: '/fi/hakemus/iakkaiden_kulttuuri_ja_liikunta/', +} + +/** + * Test the visibility of Section 3. fields which are controlled by the + * Section 2 "Kulttuurin erityisavustus 1" subventions value. + */ +const visibilityByState: FormDataWithRemoveOptionalProps = { + title: 'Kulttuuri1_summa is 0', + viewPageSkipValidation: true, + formPages: { + '2_avustustiedot': { + items: { + 'edit-subventions-items-1-amount': { + role: 'number-input', + value: '5000', + viewPageSelector: '.form-item-subventions', + viewPageFormatter: viewPageFormatCurrency + }, + }, + itemsToRemove: [ + 'edit-subventions-items-0-amount', + 'edit-bank-account-account-number-select', + ], + }, + '3_tarkemmat_tiedot': { + items: { + 'edit-hankesuunnitelma-radios-0': { + role: 'radio', + selector: { + type: 'dom-id-label', + name: 'data-drupal-selector', + value: 'edit-hankesuunnitelma-radios-0', + }, + value: 'Ei', + viewPageFormatter: viewPageFormatBoolean + }, + + }, + itemsToBeHidden: [ + 'edit-ensisijainen-taiteen-ala', + 'edit-haun-painopisteet-kulttuuri-kehitys', + ], + }, + }, + expectedErrors: {}, +}; + +/** + * Test the visibility of Section 3.5. This section is visible only when + * "Haetaanko nyt vuonna 2024 myönnetyn kaksivuotisen avustuksen 2. osaa?" + * form field (edit-hankesuunnitelma-radios) is set to "Kyllä". + */ +const visibilityByStateSection3Estimates: FormDataWithRemoveOptionalProps = { + title: 'Section 3.5 test hidden values', + viewPageSkipValidation: true, + formPages: { + '2_avustustiedot': { + items: { + 'edit-subventions-items-1-amount': { + role: 'number-input', + value: '5000', + viewPageSelector: '.form-item-subventions', + viewPageFormatter: viewPageFormatCurrency + }, + }, + itemsToRemove: [ + 'edit-subventions-items-0-amount', + 'edit-bank-account-account-number-select', + ], + }, + '3_tarkemmat_tiedot': { + items: { + 'edit-hankesuunnitelma-radios-1': { + role: 'radio', + selector: { + type: 'dom-id-label', + name: 'data-drupal-selector', + value: 'edit-hankesuunnitelma-radios-1', + }, + value: 'Kyllä', + viewPageFormatter: viewPageFormatBoolean + }, + + // Section 3.5. + 'edit-arviointi-toteuma': { + role: 'input', + selector: { + type: 'data-drupal-selector', + name: 'data-drupal-selector', + value: 'edit-arviointi-toteuma', + }, + value: faker.lorem.words(10), + }, + 'edit-arviointi-muutokset-talous': { + role: 'input', + selector: { + type: 'data-drupal-selector', + name: 'data-drupal-selector', + value: 'edit-arviointi-muutokset-talous', + }, + value: faker.lorem.words(10), + }, + 'edit-arviointi-muutokset-toiminta': { + role: 'input', + selector: { + type: 'data-drupal-selector', + name: 'data-drupal-selector', + value: 'edit-arviointi-muutokset-toiminta', + }, + value: faker.lorem.words(10), + }, + 'edit-arviointi-muutokset-aikataulu': { + role: 'input', + selector: { + type: 'data-drupal-selector', + name: 'data-drupal-selector', + value: 'edit-arviointi-muutokset-aikataulu', + }, + value: faker.lorem.words(10), + }, + 'edit-arviointi-haasteet': { + role: 'input', + selector: { + type: 'data-drupal-selector', + name: 'data-drupal-selector', + value: 'edit-arviointi-haasteet', + }, + value: faker.lorem.words(10), + }, + 'edit-arviointi-saavutettavuus': { + role: 'input', + selector: { + type: 'data-drupal-selector', + name: 'data-drupal-selector', + value: 'edit-arviointi-saavutettavuus', + }, + value: faker.lorem.words(10), + }, + 'edit-arviointi-avustus-kaytto': { + role: 'input', + selector: { + type: 'data-drupal-selector', + name: 'data-drupal-selector', + value: 'edit-arviointi-avustus-kaytto', + }, + value: faker.lorem.words(10), + }, + }, + itemsToRemove: [ + 'edit-hankesuunnitelma-radios-0', + 'edit-hankkeen-toimenpiteet-alkupvm', + 'edit-ensisijainen-taiteen-ala', + ], + itemsToBeHidden: [ + 'edit-hankesuunnitelma-jatkohakemus', + 'edit-hankkeen-tarkoitus-tavoitteet', + 'edit-hankkeen-toimenpiteet-aikataulu', + 'edit-hankkeen-toimenpiteet-alkupvm', + 'edit-hankkeen-toimenpiteet-loppupvm', + 'edit-hankkeen-keskeisimmat-kumppanit', + 'edit-haun-painopisteet-liikkumis-kehitys', + 'edit-haun-painopisteet-digi-kehitys', + 'edit-haun-painopisteet-vertais-kehitys', + 'edit-haun-painopisteet-kulttuuri-kehitys', + 'edit-hankkeen-kohderyhmat-kenelle', + 'edit-hankkeen-kohderyhmat-erityisryhmat', + 'edit-hankkeen-kohderyhmat-tavoitus', + 'edit-hankkeen-kohderyhmat-konkretia', + 'edit-hankkeen-kohderyhmat-osallisuus', + 'edit-hankkeen-kohderyhmat-osaaminen', + 'edit-hankkeen-kohderyhmat-postinrot', + 'edit-hankkeen-kohderyhmat-miksi-alue', + 'edit-hankkeen-riskit-keskeisimmat', + 'edit-hankkeen-riskit-seuranta', + 'edit-hankkeen-riskit-vakiinnuttaminen', + ], + }, + }, + expectedErrors: {}, +}; + +/** + * Test the missing values of the whole form. + */ +const missingValues: FormDataWithRemoveOptionalProps = { + title: 'Missing values', + viewPageSkipValidation: true, + formPages: { + '1_hakijan_tiedot': { + items: {}, + itemsToRemove: [ + 'edit-bank-account-account-number-select', + 'edit-email', + 'edit-contact-person', + 'edit-contact-person-phone-number', + 'edit-community-address-community-address-select', + ], + }, + '2_avustustiedot': { + items: {}, + itemsToRemove: [ + 'edit-acting-year', + 'edit-subventions-items-0-amount', + 'edit-myonnetty-avustus', + 'edit-haettu-avustus-tieto', + ], + }, + '3_tarkemmat_tiedot': { + items: { + 'edit-hankesuunnitelma-radios-0': { + role: 'radio', + selector: { + type: 'dom-id-label', + name: 'data-drupal-selector', + value: 'edit-hankesuunnitelma-radios-0', + }, + value: 'Ei', + viewPageFormatter: viewPageFormatBoolean + }, + }, + itemsToRemove: [ + 'edit-ensisijainen-taiteen-ala', + 'edit-hankkeen-tarkoitus-tavoitteet', + 'edit-hankkeen-toimenpiteet-aikataulu', + 'edit-hankkeen-toimenpiteet-alkupvm', + 'edit-hankkeen-toimenpiteet-loppupvm', + 'edit-hankkeen-keskeisimmat-kumppanit', + 'edit-haun-painopisteet-liikkumis-kehitys', + 'edit-haun-painopisteet-digi-kehitys', + 'edit-haun-painopisteet-vertais-kehitys', + 'edit-haun-painopisteet-kulttuuri-kehitys', + 'edit-hankkeen-kohderyhmat-kenelle', + 'edit-hankkeen-kohderyhmat-tavoitus', + 'edit-hankkeen-kohderyhmat-konkretia', + 'edit-hankkeen-kohderyhmat-osallisuus', + 'edit-hankkeen-kohderyhmat-osaaminen', + 'edit-hankkeen-kohderyhmat-postinrot', + 'edit-hankkeen-kohderyhmat-miksi-alue', + 'edit-hankkeen-riskit-keskeisimmat', + 'edit-hankkeen-riskit-seuranta', + ], + }, + }, + expectedErrors: { + 'edit-bank-account-account-number-select': 'Virhe sivulla 1. Hakijan tiedot: Valitse tilinumero kenttä on pakollinen.', + 'edit-email': 'Virhe sivulla 1. Hakijan tiedot: Sähköpostiosoite kenttä on pakollinen.', + 'edit-contact-person': 'Virhe sivulla 1. Hakijan tiedot: Yhteyshenkilö kenttä on pakollinen.', + 'edit-contact-person-phone-number': 'Virhe sivulla 1. Hakijan tiedot: Puhelinnumero kenttä on pakollinen.', + 'edit-community-address': 'Virhe sivulla 1. Hakijan tiedot: Yhteisön osoite kenttä on pakollinen.', + 'edit-community-address-community-address-select': 'Virhe sivulla 1. Hakijan tiedot: Valitse osoite kenttä on pakollinen.', + 'edit-acting-year': 'Virhe sivulla 2. Avustustiedot: Vuosi, jolle haen avustusta kenttä on pakollinen.', + 'edit-subventions-items-0-amount': 'Virhe sivulla 2. Avustustiedot: Sinun on syötettävä vähintään yhdelle avustuslajille summa', + 'edit-hankkeen-tarkoitus-tavoitteet': 'Virhe sivulla 3. Tarkemmat tiedot: Hankkeen tarkoitus ja tavoitteet kenttä on pakollinen.', + 'edit-hankkeen-toimenpiteet-aikataulu': 'Virhe sivulla 3. Tarkemmat tiedot: Mitkä ovat hankkeen konkreettiset toimenpiteet ja niiden toteutusaikataulu? kenttä on pakollinen.', + 'edit-hankkeen-toimenpiteet-alkupvm': 'Virhe sivulla 3. Tarkemmat tiedot: Alkupäivämäärä kenttä on pakollinen.', + 'edit-hankkeen-toimenpiteet-loppupvm': 'Virhe sivulla 3. Tarkemmat tiedot: Loppupäivämäärä kenttä on pakollinen.', + 'edit-hankkeen-keskeisimmat-kumppanit': 'Virhe sivulla 3. Tarkemmat tiedot: Nimeä hankkeen keskeisimmät yhteistyökumppanit ja heidän roolinsa hankkeessa kenttä on pakollinen.', + 'edit-haun-painopisteet-digi-kehitys': 'Virhe sivulla 3. Tarkemmat tiedot: Kehitetäänkö hankkeessa digitaalisesti / etänä toteutettavia kulttuuritoimintoja tai liikkumiseen aktivoivaa toimintaa? Miten? kenttä on pakollinen.', + 'edit-haun-painopisteet-vertais-kehitys': 'Virhe sivulla 3. Tarkemmat tiedot: Kehitetäänkö hankkeessa vapaaehtois- / vertaistoimintaa? Miten? kenttä on pakollinen.', + 'edit-hankkeen-kohderyhmat-kenelle': 'Virhe sivulla 3. Tarkemmat tiedot: Kenelle hankkeen toiminta on pääasiallisesti suunnattu? kenttä on pakollinen.', + 'edit-hankkeen-kohderyhmat-tavoitus': 'Virhe sivulla 3. Tarkemmat tiedot: Kuinka hankkeen kohderyhmät aiotaan tavoittaa? kenttä on pakollinen.', + 'edit-hankkeen-kohderyhmat-konkretia': 'Virhe sivulla 3. Tarkemmat tiedot: Miten hankkeessa edistetään konkreettisin toimenpitein valitun kohderyhmän toimintakykyä ja hyvinvointia? kenttä on pakollinen.', + 'edit-hankkeen-kohderyhmat-osallisuus': 'Virhe sivulla 3. Tarkemmat tiedot: Millä tavoin hankkeessa edistetään osallisuutta? Mikä ikäihmisten rooli hankkeessa on? kenttä on pakollinen.', + 'edit-hankkeen-kohderyhmat-osaaminen': 'Virhe sivulla 3. Tarkemmat tiedot: Millaista osaamista kyseisen kohderyhmän/-ryhmien kanssa työskentelystä hanketoimijoilla on ennestään? kenttä on pakollinen.', + 'edit-hankkeen-kohderyhmat-postinrot': 'Virhe sivulla 3. Tarkemmat tiedot: Millä postinumeroalueella tai -alueilla Helsingissä hanke toteutetaan? kenttä on pakollinen.', + 'edit-hankkeen-kohderyhmat-miksi-alue': 'Virhe sivulla 3. Tarkemmat tiedot: Miksi juuri kyseinen alue / alueet on valittu? kenttä on pakollinen.', + 'edit-hankkeen-riskit-keskeisimmat': 'Virhe sivulla 3. Tarkemmat tiedot: Mitkä ovat hankkeen toteuttamisen näkökulmasta keskeisimmät riskit? kenttä on pakollinen.', + 'edit-hankkeen-riskit-seuranta': 'Virhe sivulla 3. Tarkemmat tiedot: Miten hankkeessa aiotaan toteuttaa seurantaa ja arviointia? kenttä on pakollinen.', + }, +}; + +/** + * Test the wrong values for the whole form. + */ +const wrongValues: FormDataWithRemoveOptionalProps = { + title: 'Wrong values', + viewPageSkipValidation: true, + formPages: { + '1_hakijan_tiedot': { + items: { + 'edit-email': { + role: 'input', + value: 'ääkkösiävaa', + selector: { + type: 'data-drupal-selector', + name: 'data-drupal-selector', + value: 'edit-email', + } + }, + }, + itemsToRemove: [], + }, + '4_talousarvio': { + items: {}, + itemsToRemove: [ + 'edit-talous-tulon-tyyppi-items-0-item-label', + 'edit-talous-menon-tyyppi-items-0-item-value' + ], + }, + }, + expectedErrors: { + 'edit-email': 'Virhe sivulla 1. Hakijan tiedot: ääkkösiävaa ei ole kelvollinen sähköpostiosoite. Täytä sähköpostiosoite muodossa user@example.com.', + 'edit-talous-tulon-tyyppi-items-0-item-label': 'Virhe sivulla 4. Talousarvio: Kuvaus tulosta ei voi olla tyhjä, kun Määrä (€) sisältää arvon', + 'edit-talous-menon-tyyppi-items-0-item-value': 'Virhe sivulla 4. Talousarvio: Määrä (€) ei voi olla tyhjä, kun Kuvaus sisältää arvon' + }, +}; + +const sendApplication: FormDataWithRemoveOptionalProps = { + title: 'Send to AVUS2', + formPages: { + 'webform_preview': { + items: { + 'sendbutton': { + role: 'button', + value: 'submit-form', + selector: { + type: 'data-drupal-selector', + name: 'data-drupal-selector', + value: 'edit-actions-submit', + }, + viewPageSkipValidation: true, + }, + }, + itemsToRemove: [], + }, + }, + expectedErrors: {}, +}; + +/** + * All data for registered community, keyed with id. Those do not matter. + * + * Each keyed formdata in this object will result a new test run for this form. + * + */ +const registeredCommunityApplications_70 = { + draft: baseForm_70, + visibilityByState: createFormData(baseForm_70, visibilityByState), + visibilityByStateSection3Estimates: createFormData(baseForm_70, visibilityByStateSection3Estimates), + missingValues: createFormData(baseForm_70, missingValues), + wrongValues: createFormData(baseForm_70, wrongValues), + success: createFormData(baseForm_70, sendApplication), +} + +export { + registeredCommunityApplications_70 +} diff --git a/e2e/utils/data/application/application_data_registered_community.ts b/e2e/utils/data/application/application_data_registered_community.ts index 7e53ca8f35..b5e8011278 100644 --- a/e2e/utils/data/application/application_data_registered_community.ts +++ b/e2e/utils/data/application/application_data_registered_community.ts @@ -18,6 +18,7 @@ import {registeredCommunityApplications_66} from "./application_data_66"; import {registeredCommunityApplications_67} from "./application_data_67"; import {registeredCommunityApplications_68} from "./application_data_68"; import {registeredCommunityApplications_69} from "./application_data_69"; +import {registeredCommunityApplications_70} from "./application_data_70"; const registeredCommunityApplications = { 29: registeredCommunityApplications_29, @@ -40,6 +41,7 @@ const registeredCommunityApplications = { 67: registeredCommunityApplications_67, 68: registeredCommunityApplications_68, 69: registeredCommunityApplications_69, + 70: registeredCommunityApplications_70, } export { diff --git a/public/modules/custom/grants_handler/src/ApplicationHelpers.php b/public/modules/custom/grants_handler/src/ApplicationHelpers.php index bacfcf57ee..5e67ec59fe 100644 --- a/public/modules/custom/grants_handler/src/ApplicationHelpers.php +++ b/public/modules/custom/grants_handler/src/ApplicationHelpers.php @@ -69,7 +69,8 @@ public static function getAvailableApplicationNumber(WebformSubmission &$submiss $serial = $submission->serial(); $webform_id = $submission->getWebform()->id(); - $thirdPartySettings = $submission->getWebform()->getThirdPartySettings('grants_metadata'); + $thirdPartySettings = $submission->getWebform() + ->getThirdPartySettings('grants_metadata'); $applicationTypeId = $thirdPartySettings['applicationTypeID'] ?? NULL; @@ -412,7 +413,7 @@ public static function updateFieldOptions(array &$form, array $newOptions, array } else { // If we don't have current field array, we can't update the options. - if (!is_array($currentField)) { + if (!is_iterable($currentField)) { return; } // If the field is not found, continue searching recursively. From 88635c5c4705fcdbb5c73e271aeecb24540a3d43 Mon Sep 17 00:00:00 2001 From: hel-platta-automation <95360595+hel-platta-automation@users.noreply.github.com> Date: Wed, 20 Nov 2024 06:34:30 +0200 Subject: [PATCH 47/74] Update configuration (#1571) --- composer.lock | 47 ++++++++++++++++++++++++----------------------- 1 file changed, 24 insertions(+), 23 deletions(-) diff --git a/composer.lock b/composer.lock index 46724ad5e2..d19ebc8b07 100644 --- a/composer.lock +++ b/composer.lock @@ -5522,16 +5522,16 @@ }, { "name": "drupal/hdbt_admin", - "version": "3.2.8", + "version": "3.2.10", "source": { "type": "git", "url": "https://github.com/City-of-Helsinki/drupal-hdbt-admin.git", - "reference": "d1c02090ec6536e3d43abeb236a535416b97e669" + "reference": "36437872af9f46e205ec7aff2ff27115e9c6edf1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/City-of-Helsinki/drupal-hdbt-admin/zipball/d1c02090ec6536e3d43abeb236a535416b97e669", - "reference": "d1c02090ec6536e3d43abeb236a535416b97e669", + "url": "https://api.github.com/repos/City-of-Helsinki/drupal-hdbt-admin/zipball/36437872af9f46e205ec7aff2ff27115e9c6edf1", + "reference": "36437872af9f46e205ec7aff2ff27115e9c6edf1", "shasum": "" }, "require": { @@ -5559,10 +5559,10 @@ "Drupal" ], "support": { - "source": "https://github.com/City-of-Helsinki/drupal-hdbt-admin/tree/3.2.8", + "source": "https://github.com/City-of-Helsinki/drupal-hdbt-admin/tree/3.2.10", "issues": "https://github.com/City-of-Helsinki/drupal-hdbt-admin/issues" }, - "time": "2024-11-18T15:28:13+00:00" + "time": "2024-11-19T13:01:05+00:00" }, { "name": "drupal/health_check", @@ -5929,16 +5929,16 @@ }, { "name": "drupal/helfi_platform_config", - "version": "4.7.3", + "version": "4.7.5", "source": { "type": "git", "url": "https://github.com/City-of-Helsinki/drupal-helfi-platform-config.git", - "reference": "45e879f0704b1f2b9d5f9c934fe662702483b9b7" + "reference": "760d470ec819fcc7749d77d319b904a42812ac85" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/City-of-Helsinki/drupal-helfi-platform-config/zipball/45e879f0704b1f2b9d5f9c934fe662702483b9b7", - "reference": "45e879f0704b1f2b9d5f9c934fe662702483b9b7", + "url": "https://api.github.com/repos/City-of-Helsinki/drupal-helfi-platform-config/zipball/760d470ec819fcc7749d77d319b904a42812ac85", + "reference": "760d470ec819fcc7749d77d319b904a42812ac85", "shasum": "" }, "require": { @@ -6035,7 +6035,8 @@ "[#UHF-9388] Process configuration translation files for custom modules (https://www.drupal.org/i/2845437)": "https://raw.githubusercontent.com/City-of-Helsinki/drupal-helfi-platform-config/fd68277191b8f8ec290e53b5fbbae699b2260384/patches/drupal-2845437-process-custom-module-translation-config-10.3.x.patch", "[#UHF-9690] Allow updating lists when switching from allowed values to allowed values function (https://www.drupal.org/i/2873353)": "https://www.drupal.org/files/issues/2021-05-18/allow-allowed-values-function-update-D9-2873353_1.patch", "[#UHF-9952, #UHF-9980] Duplicate
tags (https://www.drupal.org/i/3083786)": "https://www.drupal.org/files/issues/2024-08-08/3083786--mr-8066--10-3-backport.patch", - "[#UHF-10716] Ensure consistent ordering when calculating library asset order (https://www.drupal.org/i/3467860)": "https://raw.githubusercontent.com/City-of-Helsinki/drupal-helfi-platform-config/955e2fc9493c6574ab070187b8a5a8634da7daab/patches/drupal-3467860-optimized-js-assets-mismatch.patch" + "[#UHF-10716] Ensure consistent ordering when calculating library asset order (https://www.drupal.org/i/3467860)": "https://raw.githubusercontent.com/City-of-Helsinki/drupal-helfi-platform-config/955e2fc9493c6574ab070187b8a5a8634da7daab/patches/drupal-3467860-optimized-js-assets-mismatch.patch", + "[#UHF-10967] Performance Degraded after update to twig 3.14.2 (https://www.drupal.org/project/drupal/issues/3487031)": "https://raw.githubusercontent.com/City-of-Helsinki/drupal-helfi-platform-config/90b44ce5a778d05bbe89f7eaca6412b7bd34efa0/patches/10177.patch" }, "drupal/default_content": { "https://www.drupal.org/project/default_content/issues/2640734#comment-14638943": "https://raw.githubusercontent.com/City-of-Helsinki/drupal-helfi-platform-config/main/patches/default_content_2.0.0-alpha2-2640734_manual_imports-e164a354.patch" @@ -6064,10 +6065,10 @@ ], "description": "HELfi platform config", "support": { - "source": "https://github.com/City-of-Helsinki/drupal-helfi-platform-config/tree/4.7.3", + "source": "https://github.com/City-of-Helsinki/drupal-helfi-platform-config/tree/4.7.5", "issues": "https://github.com/City-of-Helsinki/drupal-helfi-platform-config/issues" }, - "time": "2024-11-18T15:26:52+00:00" + "time": "2024-11-19T09:09:39+00:00" }, { "name": "drupal/helfi_proxy", @@ -11773,28 +11774,28 @@ }, { "name": "jean85/pretty-package-versions", - "version": "2.0.6", + "version": "2.1.0", "source": { "type": "git", "url": "https://github.com/Jean85/pretty-package-versions.git", - "reference": "f9fdd29ad8e6d024f52678b570e5593759b550b4" + "reference": "3c4e5f62ba8d7de1734312e4fff32f67a8daaf10" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Jean85/pretty-package-versions/zipball/f9fdd29ad8e6d024f52678b570e5593759b550b4", - "reference": "f9fdd29ad8e6d024f52678b570e5593759b550b4", + "url": "https://api.github.com/repos/Jean85/pretty-package-versions/zipball/3c4e5f62ba8d7de1734312e4fff32f67a8daaf10", + "reference": "3c4e5f62ba8d7de1734312e4fff32f67a8daaf10", "shasum": "" }, "require": { - "composer-runtime-api": "^2.0.0", - "php": "^7.1|^8.0" + "composer-runtime-api": "^2.1.0", + "php": "^7.4|^8.0" }, "require-dev": { "friendsofphp/php-cs-fixer": "^3.2", "jean85/composer-provided-replaced-stub-package": "^1.0", "phpstan/phpstan": "^1.4", - "phpunit/phpunit": "^7.5|^8.5|^9.4", - "vimeo/psalm": "^4.3" + "phpunit/phpunit": "^7.5|^8.5|^9.6", + "vimeo/psalm": "^4.3 || ^5.0" }, "type": "library", "extra": { @@ -11826,9 +11827,9 @@ ], "support": { "issues": "https://github.com/Jean85/pretty-package-versions/issues", - "source": "https://github.com/Jean85/pretty-package-versions/tree/2.0.6" + "source": "https://github.com/Jean85/pretty-package-versions/tree/2.1.0" }, - "time": "2024-03-08T09:58:59+00:00" + "time": "2024-11-18T16:19:46+00:00" }, { "name": "justinrainbow/json-schema", From 6b7bc79fa8ae88d16b3d85c3fcdfb1baf8e04dea Mon Sep 17 00:00:00 2001 From: rpnykanen <48206082+rpnykanen@users.noreply.github.com> Date: Wed, 20 Nov 2024 06:35:13 +0200 Subject: [PATCH 48/74] Uhf x more tranlations (#1572) * missing tooltip * more tooltips * more translations * duplicated for some reason --- .../en/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml | 4 +++- .../sv/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/conf/cmi/language/en/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml b/conf/cmi/language/en/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml index 86e588bf7b..01b851b82b 100644 --- a/conf/cmi/language/en/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml +++ b/conf/cmi/language/en/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml @@ -56,12 +56,14 @@ elements: | '#title': 'Types of grant' subventions: '#title': Grants + grants_compensations_information: + '#markup': '

Only apply for one grant type at a time with each application.

' kayttotarkoitus: '#title': 'Purpose of use' - '#help': 'Indicate the purpose for which the grant is applied for. If necessary, specify the different uses. Also tell us what is intended to be achieved with the grant and what goals are associated with the activities to be supported.' compensation_purpose: '#title': 'Brief description of the purpose(s) of the grant(s) applied for' '#counter_maximum_message': '%d/5000 characters remaining' + '#help': 'Indicate the purpose for which the grant is applied for. If necessary, specify the different uses. Also tell us what is intended to be achieved with the grant and what goals are associated with the activities to be supported.' other_grants_for_same_purpose: '#title': 'Other grants applied for to be used for the same purpose' info_muut_samaan_tarkoitukseen_myonnetty: diff --git a/conf/cmi/language/sv/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml b/conf/cmi/language/sv/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml index 13e525d6d2..c7e7007890 100644 --- a/conf/cmi/language/sv/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml +++ b/conf/cmi/language/sv/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml @@ -58,10 +58,12 @@ elements: | '#title': 'Typ av stöd' kayttotarkoitus: '#title': 'Användningsän damål' - '#help': 'Ange för vilket ändamål understödet ansöks och vid behov specificera de olika ändamålen. Ange också vad understödet är avsett för och vilka mål som är relaterade till den understödda verksamheten.' + grants_compensations_information: + '#markup': '

Ansök alltid endast om en typ av understöd åt gången.

' compensation_purpose: '#title': 'En kort beskrivning av användningsändamålet för det/de understöd som ansöks' '#counter_maximum_message': '%d/5000 tecken kvar' + '#help': 'Ange för vilket ändamål understödet ansöks och vid behov specificera de olika ändamålen. Ange också vad understödet är avsett för och vilka mål som är relaterade till den understödda verksamheten.' other_grants_for_same_purpose: '#title': 'Övriga understöd som beviljats för samma ändamål' info_muut_samaan_tarkoitukseen_myonnetty: From 5f6a34eef7edc67fdfb507710ed0403f91d2c8bd Mon Sep 17 00:00:00 2001 From: Janne Suominen Date: Wed, 20 Nov 2024 06:35:30 +0200 Subject: [PATCH 49/74] fix: Remove some remaining STEAs.. (#1573) --- conf/cmi/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml | 2 -- conf/cmi/webform.webform.yleisavustushakemus.yml | 2 -- 2 files changed, 4 deletions(-) diff --git a/conf/cmi/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml b/conf/cmi/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml index 00d3f0afc3..7b5623302c 100644 --- a/conf/cmi/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml +++ b/conf/cmi/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml @@ -470,7 +470,6 @@ elements: |- 3: EU 4: Muu 5: Säätiö - 6: STEA '#required': true '#title': 'Avustuksen myöntäjä' issuer_name: @@ -559,7 +558,6 @@ elements: |- 3: EU 4: Muu 5: Säätiö - 6: STEA '#required': true '#title': 'Avustuksen myöntäjä' issuer_name: diff --git a/conf/cmi/webform.webform.yleisavustushakemus.yml b/conf/cmi/webform.webform.yleisavustushakemus.yml index 9699ee3ee9..c1ddcb316b 100644 --- a/conf/cmi/webform.webform.yleisavustushakemus.yml +++ b/conf/cmi/webform.webform.yleisavustushakemus.yml @@ -311,7 +311,6 @@ elements: |- 3: EU 4: Muu 5: Säätiö - 6: STEA '#required': true '#title': 'Avustuksen myöntäjä' issuer_name: @@ -400,7 +399,6 @@ elements: |- 3: EU 4: Muu 5: Säätiö - 6: STEA '#required': true '#title': 'Avustuksen myöntäjä' issuer_name: From 0073ffad51fd16d0bb10b10b574ed552608dfe3c Mon Sep 17 00:00:00 2001 From: rpnykanen <48206082+rpnykanen@users.noreply.github.com> Date: Thu, 21 Nov 2024 07:08:58 +0200 Subject: [PATCH 50/74] fix: Remove config (#1577) --- ...orm.webform.elderly_sports_and_culture.yml | 58 - ...orm.webform.elderly_sports_and_culture.yml | 1212 ----------------- 2 files changed, 1270 deletions(-) delete mode 100644 conf/cmi/language/fi/webform.webform.elderly_sports_and_culture.yml delete mode 100644 conf/cmi/webform.webform.elderly_sports_and_culture.yml diff --git a/conf/cmi/language/fi/webform.webform.elderly_sports_and_culture.yml b/conf/cmi/language/fi/webform.webform.elderly_sports_and_culture.yml deleted file mode 100644 index 1ebb24cb4a..0000000000 --- a/conf/cmi/language/fi/webform.webform.elderly_sports_and_culture.yml +++ /dev/null @@ -1,58 +0,0 @@ -elements: | - prh_markup: - '#markup': '

Tiedot on haettu hakuprofiilistasi.

' - contact_markup: - '#markup': '

Ilmoita tässä sellainen yhteisön sähköpostiosoite, jota luetaan aktiivisesti. Sähköpostiin lähetetään avustushakemukseen liittyviä yhteydenottoja esim. lisäselvitys- ja täydennyspyyntöjä.

' - email: - '#help': '

Ilmoita sähköpostiosoite, johon tähän hakemukseen liittyvät viestit sekä herätteet osoitetaan ja jota luetaan aktiivisesti

' - community_address: - '#help': '

Jos haluat lisätä, poistaa tai muuttaa osoitetietoa tallenna hakemus luonnokseksi ja siirry ylläpitämään osoitetietoa omiin tietoihin.

' - bank_account: - '#help': '

Jos haluat lisätä, poistaa tai muuttaa tilinumerotietoa tallenna hakemus luonnokseksi ja siirry ylläpitämään tilinumerotietoa omiin tietoihin.

' - '#account_number__title': '' - community_officials: - '#help': '

Jos haluat lisätä, poistaa tai muuttaa henkilöitä tallenna hakemus luonnokseksi ja siirry ylläpitämään henkilöiden tietoja omiin tietoihin.

' - info_muut_samaan_tarkoitukseen_myonnetty: - '#markup': '

Ilmoita tähän ainoastaan avustukset, jotka on myönnetty muualta kuin Helsingin kaupungilta kuluvana tai kahtena edellisenä verovuotena.

Myöntävä vastaus avaa lisäkysymyksen
' - myonnetty_avustus: - '#multiple__no_items_message': '

Ei syötettyjä arvoja. Lisää uusi myönnetty avustus alta.

' - '#element': - issuer_name: - '#help': '

Mikä taho avustusta on myöntänyt (esim. ministeriön nimi)

' - purpose: - '#help': '

Anna lyhyt kuvaus, mihin tarkoitukseen avustus on myönnetty?

' - info_muut_samaan_tarkoitukseen_haettu: - '#markup': '

Ilmoita tähän ainoastaan avustukset, jotka on haettu muualta kuin Helsingin kaupungilta, eikä päätöstä ole vielä tehty.

Myöntävä vastaus avaa lisäkysymyksen
' - haettu_avustus_tieto: - '#multiple__no_items_message': '

Ei syötettyjä arvoja. Lisää uusi haettu avustus alta.

' - '#element': - issuer_name: - '#help': '

Mikä taho avustusta on myöntänyt (esim. ministeriön nimi)

' - purpose: - '#help': '

Anna lyhyt kuvaus, mihin tarkoitukseen avustus on myönnetty?

' - hankesuunnitelma_radios: - '#help': '

Vastaa tähän kysymykseen "kyllä" vain siinä tapauksessa, jos yhteisölläsi on jo käynnissä oleva, samasta avustuksesta rahoitettu hanke ja haet sille jatkorahoitusta.

' - haun_painopisteet_ohje: - '#markup': '

Hankkeessa tulee toteuttaa yhtä tai useampaa painopistettä. HUOM! Valitse vain ne painopisteet, joita edistätte hankkeessa konkreettisella tavalla. Jos hanke ei toteuta jotakin painopistettä, jätä tekstikenttä tyhjäksi.

' - hankkeen_riskit_vakiinnuttaminen: - '#help': '

Jos kyllä, niin kuvaa tekstikenttään kuinka vakiinnuttaminen aiotaan tehdä, muuten jätä tyhjäksi.

' - arviointi_markup: - '#markup': '

Arvioi tässä osiossa hankkeen tähänastista toimintaa seuraavien kysymysten avulla. Avustuksen 2. osaa hakevien tulee liittää hakemukselle Muu liite-kohtaan niin ikään kustannuspaikkaraportti ajanjaksolta 1.6.-31.12.2024

' - arviointi_muutokset_markup: - '#markup': '

Onko hankkeessa tapahtunut merkittäviä muutoksia?

' - arviointi_avustus_kaytto: - '#help': '

Avustusehdot, kohta 10e: "Myönnetty avustus on palautettava Helsingin kaupungille, jos avustusta ei ole käytetty sinä aikana, jona se on avustuspäätöksen mukaan tullut käyttää.

' - talous_tulon_tyyppi: - '#help': '

Kerro tässä minkälainen tulo on kyseessä. Toiminnan tuloja voivat olla esimerkiksi muut avustukset ja pääsy- tai osallistumismaksut. Kirjaa tähän kohtaan myös omarahoitusosuus, jos hankkeen alijäämä kuitataan muusta taloudestanne.

' - talous_menon_tyyppi: - '#help': '

Kerro tässä minkälainen meno on kyseessä. Toiminnan menoja voivat olla esimerkiksi tilavuokrat ja henkilöstökulut.

' - additional_information: - '#help': '

Tähän voit tarvittaessa kirjoittaa lisätietoja tai muita perusteluja hakemukseen liittyen tai ilmoittaa perustietoihin tulleista muutoksista 

' - notification_attachments: - '#markup': '
Liitteiden sisältöä ei voi tarkastella jälkikäteen

Huomioithan, että et pysty avaamaan liitteitä sen jälkeen, kun olet liittänyt ne lomakkeelle. Näet liitteestä ainoastaan sen tiedostonimen.

Vaikka et voi tarkastella liitteiden sisältä jälkikäteen, lomakkeelle liitetyt liitteet lähtevät lomakkeen muiden tietojen mukana avustushakemuksen käsittelijälle.

' - muu_liite: - '#attachmentName__title': '' - '#fileStatus__title': '' - '#fileType__title': '' - '#integrationID__title': '' - '#isAttachmentNew__title': '' diff --git a/conf/cmi/webform.webform.elderly_sports_and_culture.yml b/conf/cmi/webform.webform.elderly_sports_and_culture.yml deleted file mode 100644 index ff3f7ef37d..0000000000 --- a/conf/cmi/webform.webform.elderly_sports_and_culture.yml +++ /dev/null @@ -1,1212 +0,0 @@ -uuid: 6b799d6a-d01b-4f56-9075-59e76476952c -langcode: en -status: open -dependencies: - module: - - grants_handler - - grants_metadata -third_party_settings: - grants_metadata: - applicationTypeSelect: '70' - applicationType: KUVAERILLIS - applicationTypeID: '70' - applicationIndustry: KUVA - applicantTypes: - registered_community: registered_community - applicationTypeTerms: - 62: '62' - applicationTargetGroup: '22' - applicationOpen: null - applicationClose: null - applicationActingYearsType: fixed - applicationActingYears: - 2024: '2024' - 2025: '2025' - 2026: '2026' - applicationActingYearsNextCount: '' - applicationContinuous: 1 - disableCopying: 0 - status: development - parent: '' - avus2BreakingChange: 0 -weight: 0 -open: null -close: null -uid: 1 -template: false -archive: false -id: elderly_sports_and_culture -title: 'Kuva: Grant for elderly sports and culture' -description: '

Kulttuurin ja vapaa-ajan erillisavustushakemus: Ikääntyneiden liikkumisen ja kulttuuritoiminnan avustus

' -categories: - - Kehityksessä -elements: |- - avustukset_summa: - '#type': grants_webform_summation_field - '#title': 'Avustukset summa' - '#title_display': none - '#collect_field': - subventions%%amount: subventions%%amount - applicant_type: 0 - application_number: 0 - status: 0 - hakijan_tiedot: 0 - email: 0 - contact_person: 0 - contact_person_phone_number: 0 - community_address: 0 - bank_account: 0 - community_officials: 0 - acting_year: 0 - subventions%%subventionTypeTitle: 0 - subventions%%subventionType: 0 - ensisijainen_taiteen_ala: 0 - hankkeen_nimi: 0 - kyseessa_on_festivaali_tai_tapahtuma: 0 - hankkeen_tai_toiminnan_lyhyt_esittelyteksti: 0 - olemme_saaneet_muita_avustuksia: 0 - myonnetty_avustus: 0 - members_applicant_person_global: 0 - members_applicant_person_local: 0 - members_applicant_community_global: 0 - members_applicant_community_local: 0 - kokoaikainen_henkilosto: 0 - kokoaikainen_henkilotyovuosia: 0 - osa_aikainen_henkilosto: 0 - osa_aikainen_henkilotyovuosia: 0 - vapaaehtoinen_henkilosto: 0 - tapahtuma_tai_esityspaivien_maara_helsingissa: 0 - esitykset_maara_helsingissa: 0 - nayttelyt_maara_helsingissa: 0 - tyopaja_maara_helsingissa: 0 - esitykset_maara_kaikkiaan: 0 - nayttelyt_maara_kaikkiaan: 0 - tyopaja_maara_kaikkiaan: 0 - esitykset_kavijamaara_helsingissa: 0 - nayttelyt_kavijamaara_helsingissa: 0 - tyopaja_kavijamaara_helsingissa: 0 - esitykset_kavijamaara_kaikkiaan: 0 - nayttelyt_kavijamaara_kaikkiaan: 0 - tyopaja_kavijamaara_kaikkiaan: 0 - kantaesitysten_maara: 0 - ensi_iltojen_maara_helsingissa: 0 - ensimmainen_yleisolle_avoimen_tilaisuuden_paikka_helsingissa: 0 - postinumero: 0 - kyseessa_on_kaupungin_omistama_tila: 0 - tila: 0 - ensimmaisen_yleisolle_avoimen_tilaisuuden_paivamaara: 0 - festivaalin_tai_tapahtuman_kohdalla_tapahtuman_paivamaarat: 0 - hanke_alkaa: 0 - hanke_loppuu: 0 - laajempi_hankekuvaus: 0 - toiminta_taiteelliset_lahtokohdat: 0 - toiminta_tasa_arvo: 0 - toiminta_saavutettavuus: 0 - toiminta_yhteisollisyys: 0 - toiminta_kohderyhmat: 0 - toiminta_ammattimaisuus: 0 - toiminta_ekologisuus: 0 - toiminta_yhteistyokumppanit: 0 - organisaatio_kuuluu_valtionosuusjarjestelmaan_vos_: 0 - budget_static_income: 0 - budget_static_cost: 0 - budget_other_cost: 0 - muu_huomioitava_panostus: 0 - additional_information: 0 - extra_info: 0 - muu_liite: 0 - '#data_type': euro - '#form_item': hidden - applicant_type: - '#type': hidden - '#title': 'Hakijan tyyppi' - 1_hakijan_tiedot: - '#type': webform_wizard_page - '#title': '1. Hakijan tiedot' - '#prev_button_label': Edellinen - '#next_button_label': Seuraava - application_number: - '#type': hidden - '#title': Hakemusnumero - '#disabled': true - status: - '#type': hidden - '#title': 'Hakemuksen tila' - '#readonly': true - hakemusprofiili: - '#type': webform_section - '#title': 'Haetut tiedot' - '#attributes': - class: - - grants-profile--imported-section - prh_markup: - '#type': webform_markup - '#markup': 'Tiedot on haettu hakuprofiilistasi.' - hakijan_tiedot: - '#type': applicant_info - '#title': Hakija - contact_person_email_section: - '#type': webform_section - '#title': Sähköposti - '#states': - visible: - ':input[name="applicant_type"]': - value: registered_community - contact_markup: - '#type': webform_markup - '#markup': 'Ilmoita tässä sellainen yhteisön sähköpostiosoite, jota luetaan aktiivisesti. Sähköpostiin lähetetään avustushakemukseen liittyviä yhteydenottoja esim. lisäselvitys- ja täydennyspyyntöjä.' - email: - '#type': email - '#title': Sähköpostiosoite - '#help': 'Ilmoita sähköpostiosoite, johon tähän hakemukseen liittyvät viestit sekä herätteet osoitetaan ja jota luetaan aktiivisesti' - '#size': 63 - '#autocomplete': 'off' - '#pattern': '(?:[a-zA-Z0-9!#$%&''*+/=?^_`{|}~-]+(?:\.[a-zA-Z0-9!#$%&''*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\.)+[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-zA-Z0-9-]*[a-zA-Z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])' - '#states': - required: - ':input[name="applicant_type"]': - value: registered_community - contact_person_section: - '#type': webform_section - '#title': 'Hakemuksen yhteyshenkilö' - '#states': - visible: - ':input[name="applicant_type"]': - value: registered_community - contact_person: - '#type': textfield - '#title': Yhteyshenkilö - '#autocomplete': 'off' - '#required': true - '#attributes': - class: - - webform--large - '#size': 63 - contact_person_phone_number: - '#type': textfield - '#title': Puhelinnumero - '#required': true - '#autocomplete': 'off' - '#attributes': - class: - - webform--medium - '#size': 32 - osoite: - '#type': webform_section - '#title': Osoite - '#states': - visible: - ':input[name="applicant_type"]': - value: registered_community - community_address: - '#type': community_address_composite - '#title': 'Yhteisön osoite' - '#help': 'Jos haluat lisätä, poistaa tai muuttaa osoitetietoa tallenna hakemus luonnokseksi ja siirry ylläpitämään osoitetietoa omiin tietoihin.' - '#attributes': - class: - - webform--large - '#required': true - '#states': - visible: - ':input[name="applicant_type"]': - value: registered_community - tilinumero: - '#type': webform_section - '#title': Tilinumero - bank_account: - '#type': bank_account_composite - '#title': Tilinumero - '#help': 'Jos haluat lisätä, poistaa tai muuttaa tilinumerotietoa tallenna hakemus luonnokseksi ja siirry ylläpitämään tilinumerotietoa omiin tietoihin.' - '#attributes': - class: - - webform--medium - '#required': true - toiminnasta_vastaavat_henkilot: - '#type': webform_section - '#title': 'Toiminnasta vastaavat henkilöt' - '#states': - visible: - ':input[name="applicant_type"]': - '!value': private_person - community_officials: - '#type': community_officials_composite - '#help': 'Jos haluat lisätä, poistaa tai muuttaa henkilöitä tallenna hakemus luonnokseksi ja siirry ylläpitämään henkilöiden tietoja omiin tietoihin.' - '#title': 'Valitse toiminnasta vastaavat henkilöt' - '#multiple': true - '#multiple__item_label': henkilö - '#multiple__min_items': 1 - '#multiple__empty_items': 0 - '#multiple__sorting': false - '#multiple__add': false - '#multiple__add_more_input': false - '#multiple__add_more_button_label': 'Lisää henkilö' - '#wrapper_attributes': - class: - - community_officials_wrapper - '#attributes': - class: - - webform--large - 2_avustustiedot: - '#type': webform_wizard_page - '#title': '2. Avustustiedot' - avustuksen_tiedot: - '#type': webform_section - '#title': 'Avustuksen tiedot' - acting_year: - '#type': select - '#title': 'Vuosi, jolle haen avustusta' - '#options': - 2024: '2024' - 2025: '2025' - 2026: '2026' - '#required': true - avustuslajit: - '#type': webform_section - '#title': Avustuslajit - subventions: - '#type': grants_compensations - '#title': Avustukset - '#multiple': true - '#subventionType': - 47: '47' - 51: '51' - '#onlyOneSubventionPerApplication': 1 - '#required': true - '#multiple__header': true - '#multiple__empty_items': 0 - '#multiple__sorting': false - '#multiple__add': false - '#multiple__remove': false - '#multiple__add_more': false - '#attributes': - class: - - subventions - '#subvention_type': - 1: '1' - 6: '6' - '#subvention_type_id__access': false - '#subvention_type__title': Avustuslaji - '#subvention_amount__title': 'Avustuksen summa' - grants_compensations_information: - '#type': webform_markup - '#markup': '

Hae yhdellä hakemuksella aina vain yhtä avustuslajia kerrallaan.

' - kayttotarkoitus: - '#type': webform_section - '#title': Käyttötarkoitus - compensation_purpose: - '#type': textarea - '#title': 'Lyhyt kuvaus haettavan / haettavien avustusten käyttötarkoituksista' - '#help': 'Kerro mitä tarkoitusta varten avustusta haetaan, erittele tarvittaessa eri käyttökohteet. Kerro myös mitä avustuksella on tarkoitus saada aikaiseksi ja millaisia tavoitteita avustettavaan toimintaan liittyy.' - '#maxlength': 5000 - '#required': true - '#counter_type': character - '#counter_maximum': 5000 - '#counter_maximum_message': '%d/5000 merkkiä jäljellä' - other_grants_for_same_purpose: - '#type': webform_section - '#title': 'Muut samaan tarkoitukseen myönnetyt avustukset' - info_muut_samaan_tarkoitukseen_myonnetty: - '#type': webform_markup - '#markup': | - Ilmoita tähän ainoastaan avustukset, jotka on myönnetty muualta kuin Helsingin kaupungilta kuluvana tai kahtena edellisenä verovuotena. -
-
-
- - Myöntävä vastaus avaa lisäkysymyksen -
-
-
- olemme_saaneet_muita_avustuksia: - '#type': radios - '#title': 'Olemme saaneet muita avustuksia' - '#description_display': before - '#options': - 1: Kyllä - 0: Ei - myonnetty_avustus: - '#type': webform_custom_composite - '#title': 'Myönnetty avustus' - '#title_display': before - '#states': - visible: - ':input[name="olemme_saaneet_muita_avustuksia"]': - value: '1' - required: - ':input[name="olemme_saaneet_muita_avustuksia"]': - value: '1' - '#multiple__header': false - '#multiple__item_label': 'myönnetty avustus' - '#multiple__no_items_message': 'Ei syötettyjä arvoja. Lisää uusi myönnetty avustus alta.' - '#multiple__min_items': 1 - '#multiple__empty_items': 0 - '#multiple__sorting': false - '#multiple__add': false - '#multiple__add_more_input': false - '#multiple__add_more_button_label': 'Lisää uusi myönnetty avustus' - '#element': - issuer: - '#type': select - '#options': - 1: Valtio - 3: EU - 4: Muu - 5: Säätiö - '#required': true - '#title': 'Avustuksen myöntäjä' - issuer_name: - '#type': textfield - '#required': true - '#title': 'Myöntäjän nimi' - '#attributes': - class: - - webform--large - '#help': 'Mikä taho avustusta on myöntänyt (esim. ministeriön nimi)' - year: - '#type': textfield - '#required': true - '#title': Vuosi - '#attributes': - class: - - webform--small - '#maxlength': 4 - '#pattern': ^(19\d\d|20\d\d|2100)$ - '#pattern_error': 'Syötä vuosiluku väliltä 1900 - 2100' - amount: - '#type': textfield - '#required': true - '#attributes': - class: - - webform--small - '#title': 'Myönnetyn avustuksen summa' - '#input_mask': "'alias': 'currency', 'prefix': '', 'suffix': '€','groupSeparator': ' ','radixPoint':','" - purpose: - '#type': textarea - '#title': 'Kuvaus käyttötarkoituksesta' - '#help': 'Anna lyhyt kuvaus, mihin tarkoitukseen avustus on myönnetty?' - '#maxlength': 1000 - '#counter_type': character - '#attributes': - class: - - webform--large - '#counter_maximum': 1000 - '#counter_maximum_message': '%d/1000 merkkiä jäljellä' - muut_samaan_tarkoitukseen_haetut_avustukset: - '#type': webform_section - '#title': 'Muut samaan tarkoitukseen haetut avustukset' - info_muut_samaan_tarkoitukseen_haettu: - '#type': webform_markup - '#markup': | - Ilmoita tähän ainoastaan avustukset, jotka on haettu muualta kuin Helsingin kaupungilta, eikä päätöstä ole vielä tehty. -
-
-
- - Myöntävä vastaus avaa lisäkysymyksen -
-
-
- olemme_hakeneet_avustuksia_muualta_kuin_helsingin_kaupungilta: - '#type': radios - '#title': 'Olemme hakeneet avustuksia muualta kuin Helsingin kaupungilta' - '#options': - 1: Kyllä - 0: Ei - haettu_avustus_tieto: - '#type': webform_custom_composite - '#title': 'Lisää uusi haettu avustus' - '#title_display': before - '#states': - visible: - ':input[name="olemme_hakeneet_avustuksia_muualta_kuin_helsingin_kaupungilta"]': - value: '1' - required: - ':input[name="olemme_hakeneet_avustuksia_muualta_kuin_helsingin_kaupungilta"]': - value: '1' - '#multiple__header': false - '#multiple__item_label': 'haettu avustus' - '#multiple__no_items_message': 'Ei syötettyjä arvoja. Lisää uusi haettu avustus alta.' - '#multiple__min_items': 1 - '#multiple__empty_items': 0 - '#multiple__sorting': false - '#multiple__add': false - '#multiple__add_more_input': false - '#multiple__add_more_button_label': 'Lisää uusi haettu avustus' - '#element': - issuer: - '#type': select - '#options': - 1: Valtio - 3: EU - 4: Muu - 5: Säätiö - '#required': true - '#title': 'Avustuksen myöntäjä' - issuer_name: - '#type': textfield - '#required': true - '#title': 'Myöntäjän nimi' - '#attributes': - class: - - webform--large - '#help': 'Mikä taho avustusta on myöntänyt (esim. ministeriön nimi)' - year: - '#type': textfield - '#required': true - '#attributes': - class: - - webform--small - '#title': Vuosi - '#maxlength': 4 - '#pattern': ^(19\d\d|20\d\d|2100)$ - '#pattern_error': 'Syötä vuosiluku väliltä 1900 - 2100' - amount: - '#type': textfield - '#required': true - '#attributes': - class: - - webform--small - '#title': 'Haetun avustuksen summa' - '#input_mask': "'alias': 'currency', 'prefix': '', 'suffix': '€','groupSeparator': ' ','radixPoint':','" - purpose: - '#type': textarea - '#title': 'Kuvaus käyttötarkoituksesta' - '#help': 'Anna lyhyt kuvaus, mihin tarkoitukseen avustus on myönnetty?' - '#maxlength': 1000 - '#counter_type': character - '#attributes': - class: - - webform--large - '#counter_maximum': 1000 - '#counter_maximum_message': '%d/1000 merkkiä jäljellä' - 3_tarkemmat_tiedot: - '#type': webform_wizard_page - '#title': '3. Tarkemmat tiedot' - tarkemmat_tiedot_section: - '#type': webform_section - '#title': ' ' - hankesuunnitelma_radios: - '#type': radios - '#title': 'Haetaanko nyt vuonna 2024 myönnetyn kaksivuotisen avustuksen 2. osaa?' - '#help': 'Vastaa tähän kysymykseen "kyllä" vain siinä tapauksessa, jos yhteisölläsi on jo käynnissä oleva, samasta avustuksesta rahoitettu hanke ja haet sille jatkorahoitusta.' - '#description_display': before - '#options': - 1: Kyllä - 0: Ei - '#default_value': '0' - hankesuunnitelma_section: - '#type': webform_section - '#title': '3.1 Hankesuunnitelma' - '#states': - visible: - ':input[name="hankesuunnitelma_radios"]': - value: '0' - hankesuunnitelma_jatkohakemus: - '#type': radios - '#title': 'Onko haettava avustus käynnissä olevan hankkeen jatkohakemus?' - '#description_display': before - '#options': - 1: Kyllä - 0: Ei - '#default_value': '0' - hankkeen_tarkoitus_tavoitteet: - '#type': textarea - '#title': 'Hankkeen tarkoitus ja tavoitteet' - '#maxlength': 2500 - '#required': true - '#counter_type': character - '#counter_maximum': 2500 - '#counter_maximum_message': '%d/2500 merkkiä jäljellä' - '#states': - visible: - ':input[name="hankesuunnitelma_jatkohakemus"]': - value: '0' - hankkeen_toimenpiteet_aikataulu: - '#type': textarea - '#title': 'Mitkä ovat hankkeen konkreettiset toimenpiteet ja niiden toteutusaikataulu?' - '#maxlength': 4000 - '#required': true - '#counter_type': character - '#counter_maximum': 4000 - '#counter_maximum_message': '%d/4000 merkkiä jäljellä' - '#states': - visible: - ':input[name="hankesuunnitelma_jatkohakemus"]': - value: '0' - hankkeen_toimenpiteet_toteutus: - '#type': fieldset - '#title': 'Hankkeen konkreettiset toimenpiteet on tarkoitus toteuttaa välillä' - '#attributes': - class: - - grants-fieldset - '#states': - visible: - ':input[name="hankesuunnitelma_jatkohakemus"]': - value: '0' - hankkeen_toimenpiteet_alkupvm: - '#type': date - '#title': Alkupäivämäärä - '#required': true - '#states': - visible: - ':input[name="hankesuunnitelma_jatkohakemus"]': - value: '0' - hankkeen_toimenpiteet_loppupvm: - '#type': date - '#title': Loppupäivämäärä - '#required': true - '#states': - visible: - ':input[name="hankesuunnitelma_jatkohakemus"]': - value: '0' - hankkeen_keskeisimmat_kumppanit: - '#type': textarea - '#title': 'Nimeä hankkeen keskeisimmät yhteistyökumppanit ja heidän roolinsa hankkeessa' - '#maxlength': 2500 - '#required': true - '#counter_type': character - '#counter_maximum': 2500 - '#counter_maximum_message': '%d/2500 merkkiä jäljellä' - '#states': - visible: - ':input[name="hankesuunnitelma_jatkohakemus"]': - value: '0' - haun_painopisteet_section: - '#type': webform_section - '#title': '3.2 Haun painopisteet' - '#states': - visible: - ':input[name="hankesuunnitelma_radios"]': - value: '0' - ':input[name="hankesuunnitelma_jatkohakemus"]': - value: '0' - haun_painopisteet_ohje: - '#type': webform_markup - '#markup': 'Hankkeessa tulee toteuttaa yhtä tai useampaa painopistettä. HUOM! Valitse vain ne painopisteet, joita edistätte hankkeessa konkreettisella tavalla. Jos hanke ei toteuta jotakin painopistettä, jätä tekstikenttä tyhjäksi.' - haun_painopisteet_liikkumis_kehitys: - '#type': textarea - '#title': 'Kehitetäänkö hankkeessa liikkumismahdollisuuksia tai taide- ja kulttuuritoimintaa lähiympäristössä / alueellisesti? Miten?' - '#maxlength': 1250 - '#counter_type': character - '#counter_maximum': 1250 - '#counter_maximum_message': '%d/1250 merkkiä jäljellä' - '#states': - visible: - ':input[name="hankesuunnitelma_jatkohakemus"]': - value: '0' - haun_painopisteet_digi_kehitys: - '#type': textarea - '#title': 'Kehitetäänkö hankkeessa digitaalisesti / etänä toteutettavia kulttuuritoimintoja tai liikkumiseen aktivoivaa toimintaa? Miten?' - '#maxlength': 1250 - '#required': true - '#counter_type': character - '#counter_maximum': 1250 - '#counter_maximum_message': '%d/1250 merkkiä jäljellä' - '#states': - visible: - ':input[name="hankesuunnitelma_jatkohakemus"]': - value: '0' - haun_painopisteet_vertais_kehitys: - '#type': textarea - '#title': 'Kehitetäänkö hankkeessa vapaaehtois- / vertaistoimintaa? Miten?' - '#maxlength': 1250 - '#required': true - '#counter_type': character - '#counter_maximum': 1250 - '#counter_maximum_message': '%d/1250 merkkiä jäljellä' - '#states': - visible: - ':input[name="hankesuunnitelma_jatkohakemus"]': - value: '0' - haun_painopisteet_kulttuuri_kehitys: - '#type': textarea - '#title': 'Kehitetäänkö hankkeessa taide- ja kulttuuritoimijoiden osaamista tai luodaanko uusia työtapoja / rakenteita? Miten?' - '#maxlength': 1250 - '#required': true - '#counter_type': character - '#counter_maximum': 1250 - '#counter_maximum_message': '%d/1250 merkkiä jäljellä' - '#states': - visible: - ':input[name="hankesuunnitelma_jatkohakemus"]': - value: '0' - hankkeen_kohderyhmat_section: - '#type': webform_section - '#title': '3.3 Hankkeen kohderyhmät' - '#states': - visible: - ':input[name="hankesuunnitelma_radios"]': - value: '0' - ':input[name="hankesuunnitelma_jatkohakemus"]': - value: '0' - hankkeen_kohderyhmat_kenelle: - '#type': textarea - '#title': 'Kenelle hankkeen toiminta on pääasiallisesti suunnattu?' - '#maxlength': 1250 - '#required': true - '#counter_type': character - '#counter_maximum': 1250 - '#counter_maximum_message': '%d/1250 merkkiä jäljellä' - '#states': - visible: - ':input[name="hankesuunnitelma_jatkohakemus"]': - value: '0' - hankkeen_kohderyhmat_erityisryhmat: - '#type': textarea - '#title': 'Kohdennetaanko hankkeessa toimintaa jollekin erityisryhmälle?' - '#maxlength': 1250 - '#required': true - '#counter_type': character - '#counter_maximum': 1250 - '#counter_maximum_message': '%d/1250 merkkiä jäljellä' - '#states': - visible: - ':input[name="hankesuunnitelma_jatkohakemus"]': - value: '0' - hankkeen_kohderyhmat_tavoitus: - '#type': textarea - '#title': 'Kuinka hankkeen kohderyhmät aiotaan tavoittaa?' - '#maxlength': 1250 - '#required': true - '#counter_type': character - '#counter_maximum': 1250 - '#counter_maximum_message': '%d/1250 merkkiä jäljellä' - '#states': - visible: - ':input[name="hankesuunnitelma_jatkohakemus"]': - value: '0' - hankkeen_kohderyhmat_konkretia: - '#type': textarea - '#title': 'Miten hankkeessa edistetään konkreettisin toimenpitein valitun kohderyhmän toimintakykyä ja hyvinvointia?' - '#maxlength': 1250 - '#required': true - '#counter_type': character - '#counter_maximum': 1250 - '#counter_maximum_message': '%d/1250 merkkiä jäljellä' - '#states': - visible: - ':input[name="hankesuunnitelma_jatkohakemus"]': - value: '0' - hankkeen_kohderyhmat_osallisuus: - '#type': textarea - '#title': 'Millä tavoin hankkeessa edistetään osallisuutta? Mikä ikäihmisten rooli hankkeessa on?' - '#maxlength': 1250 - '#required': true - '#counter_type': character - '#counter_maximum': 1250 - '#counter_maximum_message': '%d/1250 merkkiä jäljellä' - '#states': - visible: - ':input[name="hankesuunnitelma_jatkohakemus"]': - value: '0' - hankkeen_kohderyhmat_osaaminen: - '#type': textarea - '#title': 'Millaista osaamista kyseisen kohderyhmän/-ryhmien kanssa työskentelystä hanketoimijoilla on ennestään?' - '#maxlength': 1250 - '#required': true - '#counter_type': character - '#counter_maximum': 1250 - '#counter_maximum_message': '%d/1250 merkkiä jäljellä' - '#states': - visible: - ':input[name="hankesuunnitelma_jatkohakemus"]': - value: '0' - hankkeen_kohderyhmat_postinrot: - '#type': textfield - '#title': 'Millä postinumeroalueella tai -alueilla Helsingissä hanke toteutetaan?' - '#required': true - '#autocomplete': 'off' - '#attributes': - class: - - webform--medium - '#size': 32 - '#states': - visible: - ':input[name="hankesuunnitelma_jatkohakemus"]': - value: '0' - hankkeen_kohderyhmat_miksi_alue: - '#type': textarea - '#title': 'Miksi juuri kyseinen alue / alueet on valittu?' - '#maxlength': 1250 - '#required': true - '#counter_type': character - '#counter_maximum': 1250 - '#counter_maximum_message': '%d/1250 merkkiä jäljellä' - '#states': - visible: - ':input[name="hankesuunnitelma_jatkohakemus"]': - value: '0' - hankkeen_riskit_section: - '#type': webform_section - '#title': '3.4 Riskit & analyysi' - '#states': - visible: - ':input[name="hankesuunnitelma_radios"]': - value: '0' - ':input[name="hankesuunnitelma_jatkohakemus"]': - value: '0' - hankkeen_riskit_keskeisimmat: - '#type': textarea - '#title': 'Mitkä ovat hankkeen toteuttamisen näkökulmasta keskeisimmät riskit?' - '#maxlength': 2500 - '#required': true - '#counter_type': character - '#counter_maximum': 2500 - '#counter_maximum_message': '%d/2500 merkkiä jäljellä' - '#states': - visible: - ':input[name="hankesuunnitelma_jatkohakemus"]': - value: '0' - hankkeen_riskit_seuranta: - '#type': textarea - '#title': 'Miten hankkeessa aiotaan toteuttaa seurantaa ja arviointia?' - '#maxlength': 2500 - '#required': true - '#counter_type': character - '#counter_maximum': 2500 - '#counter_maximum_message': '%d/2500 merkkiä jäljellä' - '#states': - visible: - ':input[name="hankesuunnitelma_jatkohakemus"]': - value: '0' - hankkeen_riskit_vakiinnuttaminen: - '#type': textarea - '#title': 'Onko hankkeen suunniteltu toiminta aikomus vakiinnuttaa osaksi hakijan/jonkun muun toimijan perustoimintaa hankkeen jälkeen?' - '#help': 'Jos kyllä, niin kuvaa tekstikenttään kuinka vakiinnuttaminen aiotaan tehdä, muuten jätä tyhjäksi.' - '#maxlength': 2500 - '#required': true - '#counter_type': character - '#counter_maximum': 2500 - '#counter_maximum_message': '%d/2500 merkkiä jäljellä' - '#states': - visible: - ':input[name="hankesuunnitelma_jatkohakemus"]': - value: '0' - hankkeen_valiarviointi_section: - '#type': webform_section - '#title': '3.5 2-vuotisten hankkeiden väliarviointi' - '#states': - visible: - ':input[name="hankesuunnitelma_radios"]': - value: '1' - arviointi_markup: - '#type': webform_markup - '#markup': 'Arvioi tässä osiossa hankkeen tähänastista toimintaa seuraavien kysymysten avulla. Avustuksen 2. osaa hakevien tulee liittää hakemukselle Muu liite-kohtaan niin ikään kustannuspaikkaraportti ajanjaksolta 1.6.-31.12.2024' - arviointi_toteuma: - '#type': textarea - '#title': 'Onko hanke edennyt suunnitelman mukaisesti? Arvioikaa hankkeen toteumaa tähän asti asteikolla 1-100% ja perustelkaa vastauksenne.' - '#maxlength': 1250 - '#required': true - '#counter_type': character - '#counter_maximum': 1250 - '#counter_maximum_message': '%d/1250 merkkiä jäljellä' - '#states': - visible: - ':input[name="hankesuunnitelma_radios"]': - value: '1' - arviointi_muutokset_markup: - '#type': webform_markup - '#markup': 'Onko hankkeessa tapahtunut merkittäviä muutoksia?' - arviointi_muutokset_talous: - '#type': textarea - '#title': 'Talouteen liittyen; mitä?' - '#maxlength': 1250 - '#required': true - '#counter_type': character - '#counter_maximum': 1250 - '#counter_maximum_message': '%d/1250 merkkiä jäljellä' - '#states': - visible: - ':input[name="hankesuunnitelma_radios"]': - value: '1' - arviointi_muutokset_toiminta: - '#type': textarea - '#title': 'Toimintaan liittyen; mitä?' - '#maxlength': 1250 - '#required': true - '#counter_type': character - '#counter_maximum': 1250 - '#counter_maximum_message': '%d/1250 merkkiä jäljellä' - '#states': - visible: - ':input[name="hankesuunnitelma_radios"]': - value: '1' - arviointi_muutokset_aikataulu: - '#type': textarea - '#title': 'Aikatauluun liittyen; mitä?' - '#maxlength': 1250 - '#required': true - '#counter_type': character - '#counter_maximum': 1250 - '#counter_maximum_message': '%d/1250 merkkiä jäljellä' - '#states': - visible: - ':input[name="hankesuunnitelma_radios"]': - value: '1' - arviointi_haasteet: - '#type': textarea - '#title': 'Onko hanke kohdannut toimintaan vaikuttaneita haasteita? Jos, niin millaisia?' - '#maxlength': 1250 - '#required': true - '#counter_type': character - '#counter_maximum': 1250 - '#counter_maximum_message': '%d/1250 merkkiä jäljellä' - '#states': - visible: - ':input[name="hankesuunnitelma_radios"]': - value: '1' - arviointi_saavutettavuus: - '#type': textarea - '#title': 'Miten toiminta on tavoittanut osallistujia suhteessa tavoitteisiin?' - '#maxlength': 1250 - '#required': true - '#counter_type': character - '#counter_maximum': 1250 - '#counter_maximum_message': '%d/1250 merkkiä jäljellä' - '#states': - visible: - ':input[name="hankesuunnitelma_radios"]': - value: '1' - arviointi_avustus_kaytto: - '#type': textarea - '#help': 'Avustusehdot, kohta 10e: "Myönnetty avustus on palautettava Helsingin kaupungille, jos avustusta ei ole käytetty sinä aikana, jona se on avustuspäätöksen mukaan tullut käyttää.' - '#title': 'Tuleeko ensimmäiselle hankekaudelle myönnetty avustus käytettyä näillä näkymin määräaikaan (31.5.2025) mennessä? Jos ei, niin avatkaa tähän johtaneita syitä.' - '#maxlength': 1250 - '#required': true - '#counter_type': character - '#counter_maximum': 1250 - '#counter_maximum_message': '%d/1250 merkkiä jäljellä' - '#states': - visible: - ':input[name="hankesuunnitelma_radios"]': - value: '1' - 4_talousarvio: - '#type': webform_wizard_page - '#title': '4. Talousarvio' - tulot_section: - '#type': webform_section - '#title': '4.1 Tulot' - tulot: - '#type': grants_budget_income_static - '#title': Tulot - '#multiple': false - '#incomeGroup': general - '#plannedStateOperativeSubvention__access': false - '#otherCompensationFromCity__access': false - '#stateOperativeSubvention__access': false - '#plannedOtherCompensations__access': false - '#sponsorships__access': false - '#entryFees__access': false - '#sales__access': false - '#financialFundingAndInterests__access': false - '#customerFees__access': false - '#donations__access': false - '#compensationFromCulturalAffairs__access': false - '#otherCompensationType__access': false - '#incomeWithoutCompensations__access': false - '#ownFunding__access': false - '#plannedTotalIncome__access': false - '#otherCompensations__access': false - '#plannedTotalIncomeWithoutSubventions__access': false - '#plannedShareOfIncomeWithoutSubventions__access': false - '#shareOfIncomeWithoutSubventions__access': false - '#totalIncomeWithoutSubventions__access': false - '#totalIncome__access': false - '#incomeGroupName__access': false - talous_tulon_tyyppi: - '#type': grants_budget_other_income - '#title': 'Tulon tyyppi' - '#multiple': true - '#incomeGroup': general - '#help': 'Kerro tässä minkälainen tulo on kyseessä. Toiminnan tuloja voivat olla esimerkiksi muut avustukset ja pääsy- tai osallistumismaksut. Kirjaa tähän kohtaan myös omarahoitusosuus, jos hankkeen alijäämä kuitataan muusta taloudestanne.' - '#multiple__min_items': 1 - '#multiple__empty_items': 0 - '#multiple__add_more_input': false - '#multiple__add_more_button_label': 'Lisää uusi tulo' - '#multiple__item_label': tulo - menot_section: - '#type': webform_section - '#title': '4.2 Menot' - talous_menon_tyyppi: - '#type': grants_budget_other_cost - '#title': Meno - '#multiple': true - '#incomeGroup': general - '#help': 'Kerro tässä minkälainen meno on kyseessä. Toiminnan menoja voivat olla esimerkiksi tilavuokrat ja henkilöstökulut.' - '#multiple__min_items': 1 - '#multiple__empty_items': 0 - '#multiple__add_more_input': false - '#multiple__add_more_button_label': 'Lisää uusi meno' - '#multiple__item_label': meno - lisatiedot_ja_liitteet: - '#type': webform_wizard_page - '#title': '5. Lisätiedot ja liitteet' - lisatietoja_hakemukseen_liittyen: - '#type': webform_section - '#title': 'Lisätietoja hakemukseen liittyen' - additional_information: - '#type': textarea - '#title': Lisätiedot - '#attributes': - class: - - webform--large - '#help': 'Tähän voit tarvittaessa kirjoittaa lisätietoja tai muita perusteluja hakemukseen liittyen tai ilmoittaa perustietoihin tulleista muutoksista ' - '#counter_type': character - '#maxlength': 5000 - '#counter_maximum': 5000 - '#counter_maximum_message': '%d/5000 merkkiä jäljellä' - '#cols': 63 - liitteet: - '#type': webform_section - '#title': Liitteet - attachments_info: - '#type': webform_markup - '#markup': '

Avustushakemuksen käsittelyä varten tulee toimittaa kaikki hakuilmoituksessa luetellut liitteet. Avustushakemus voidaan hylätä, jos liitteitä ei ole toimitettu. Mikäli joku liitteistä puuttuu kerro siitä hakemuksen Lisäselvitys liitteistä -kohdassa.

Helsingin kaupungille aiemmin toimitetut liitteet

Jos vaaditut liitteet on jo toimitettu toisen Helsingin kaupungille osoitetun avustushakemuksen liitteenä, samoja liitteitä ei tarvitse toimittaa uudelleen. Yhteisön vahvistettu tilinpäätös, toimintakertomus, toimintasuunnitelma ja talousarvio eivät voi olla erilaisia eri hakemusten liitteenä. Merkitse tällöin toimitettujen liitteiden kohdalla ”Liite on toimitettu yhtenä tiedostona tai toisen hakemuksen yhteydessä”.

' - notification_attachments: - '#type': webform_markup - '#markup': | -
-
-
Liitteiden sisältöä ei voi tarkastella jälkikäteen
- -

Huomioithan, että et pysty avaamaan liitteitä sen jälkeen, kun olet liittänyt ne lomakkeelle. Näet liitteestä ainoastaan sen tiedostonimen.

-

Vaikka et voi tarkastella liitteiden sisältä jälkikäteen, lomakkeelle liitetyt liitteet lähtevät lomakkeen muiden tietojen mukana avustushakemuksen käsittelijälle.

-
-
- '#format': full_html - extra_info: - '#type': textarea - '#title': 'Lisäselvitys liitteistä' - '#maxlength': 5000 - '#counter_type': character - '#counter_maximum': 5000 - '#counter_maximum_message': '%d/5000 merkkiä jäljellä' - '#attributes': - class: - - webform--large - '#cols': 63 - muu_liite: - '#type': grants_attachments - '#title': 'Muu liite' - '#multiple': 10 - '#filetype': '0' - '#title_display': before - '#multiple__item_label': liite - '#multiple__sorting': false - '#multiple__add': false - '#multiple__remove': false - '#multiple__add_more_input': false - '#multiple__add_more_button_label': 'Lisää liite' - '#isDeliveredLater__access': false - '#isIncludedInOtherFile__access': false - actions: - '#type': webform_actions - '#title': 'Submit button(s)' - '#submit__label': Lähetä - '#draft__label': 'Tallenna keskeneräisenä' - '#wizard_prev__label': Edellinen - '#wizard_next__label': Seuraava - '#preview_prev__label': Edellinen - '#preview_next__label': Esikatseluun - '#delete_hide': false - '#delete__label': 'Poista keskeneräinen' - '#delete__attributes': - class: - - hds-button - - hds-button--primary - '#delete__dialog': true -css: '' -javascript: '' -settings: - ajax: false - ajax_scroll_top: form - ajax_progress_type: '' - ajax_effect: '' - ajax_speed: null - page: true - page_submit_path: '' - page_confirm_path: '' - page_theme_name: '' - form_title: source_entity_webform - form_submit_once: false - form_open_message: '' - form_close_message: '' - form_exception_message: '' - form_previous_submissions: false - form_confidential: false - form_confidential_message: '' - form_disable_remote_addr: false - form_convert_anonymous: false - form_prepopulate: false - form_prepopulate_source_entity: false - form_prepopulate_source_entity_required: false - form_prepopulate_source_entity_type: '' - form_unsaved: true - form_disable_back: false - form_submit_back: true - form_disable_autocomplete: false - form_novalidate: false - form_disable_inline_errors: false - form_required: false - form_autofocus: false - form_details_toggle: false - form_reset: false - form_access_denied: default - form_access_denied_title: '' - form_access_denied_message: '' - form_access_denied_attributes: { } - form_file_limit: '' - form_attributes: { } - form_method: '' - form_action: '' - share: false - share_node: false - share_theme_name: '' - share_title: true - share_page_body_attributes: { } - submission_label: '' - submission_exception_message: '' - submission_locked_message: '' - submission_log: false - submission_excluded_elements: { } - submission_exclude_empty: false - submission_exclude_empty_checkbox: false - submission_views: { } - submission_views_replace: { } - submission_user_columns: { } - submission_user_duplicate: false - submission_access_denied: default - submission_access_denied_title: '' - submission_access_denied_message: '' - submission_access_denied_attributes: { } - previous_submission_message: '' - previous_submissions_message: '' - autofill: false - autofill_message: '' - autofill_excluded_elements: { } - wizard_progress_bar: true - wizard_progress_pages: false - wizard_progress_percentage: false - wizard_progress_link: true - wizard_progress_states: false - wizard_start_label: '' - wizard_preview_link: false - wizard_confirmation: true - wizard_confirmation_label: '7. Valmis' - wizard_auto_forward: true - wizard_auto_forward_hide_next_button: false - wizard_keyboard: true - wizard_track: '' - wizard_prev_button_label: Edellinen - wizard_next_button_label: Seuraava - wizard_toggle: true - wizard_toggle_show_label: '' - wizard_toggle_hide_label: '' - wizard_page_type: container - wizard_page_title_tag: h2 - preview: 2 - preview_label: '6. Vahvista, esikatsele ja lähetä' - preview_title: 'Vahvista, esikatsele ja lähetä' - preview_message: '' - preview_attributes: { } - preview_excluded_elements: { } - preview_exclude_empty: false - preview_exclude_empty_checkbox: false - draft: all - draft_multiple: false - draft_auto_save: false - draft_saved_message: '' - draft_loaded_message: '' - draft_pending_single_message: '' - draft_pending_multiple_message: '' - confirmation_type: none - confirmation_url: '' - confirmation_title: '' - confirmation_message: '' - confirmation_attributes: { } - confirmation_back: true - confirmation_back_label: '' - confirmation_back_attributes: { } - confirmation_exclude_query: true - confirmation_exclude_token: true - confirmation_update: false - limit_total: null - limit_total_interval: null - limit_total_message: '' - limit_total_unique: false - limit_user: null - limit_user_interval: null - limit_user_message: '' - limit_user_unique: false - entity_limit_total: null - entity_limit_total_interval: null - entity_limit_user: null - entity_limit_user_interval: null - purge: draft - purge_days: 365 - results_disabled: false - results_disabled_ignore: false - results_customize: false - token_view: false - token_update: false - token_delete: false - serial_disabled: false -access: - create: - roles: - - anonymous - - authenticated - users: { } - permissions: { } - view_any: - roles: { } - users: { } - permissions: { } - update_any: - roles: { } - users: { } - permissions: { } - delete_any: - roles: { } - users: { } - permissions: { } - purge_any: - roles: { } - users: { } - permissions: { } - view_own: - roles: { } - users: { } - permissions: { } - update_own: - roles: { } - users: { } - permissions: { } - delete_own: - roles: { } - users: { } - permissions: { } - administer: - roles: { } - users: { } - permissions: { } - test: - roles: { } - users: { } - permissions: { } - configuration: - roles: { } - users: { } - permissions: { } -handlers: - grants_handler: - id: grants_handler - handler_id: grants_handler - label: 'Grants Handler' - notes: '' - status: true - conditions: { } - weight: 0 - settings: - debug: false -variants: { } From e2c73995b60776c84965aff229b615ab4bbe5d17 Mon Sep 17 00:00:00 2001 From: hel-platta-automation <95360595+hel-platta-automation@users.noreply.github.com> Date: Thu, 21 Nov 2024 07:09:34 +0200 Subject: [PATCH 51/74] Update configuration (#1574) --- composer.lock | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/composer.lock b/composer.lock index d19ebc8b07..fa0bd8a7d7 100644 --- a/composer.lock +++ b/composer.lock @@ -4638,7 +4638,7 @@ ], "authors": [ { - "name": "Lullabot", + "name": "lullabot", "homepage": "https://www.drupal.org/user/3815489" }, { @@ -4646,7 +4646,7 @@ "homepage": "https://www.drupal.org/user/1288796" }, { - "name": "seanB", + "name": "seanb", "homepage": "https://www.drupal.org/user/545912" } ], @@ -5487,16 +5487,16 @@ }, { "name": "drupal/hdbt", - "version": "6.8.7", + "version": "6.8.9", "source": { "type": "git", "url": "https://github.com/City-of-Helsinki/drupal-hdbt.git", - "reference": "788a852f02962d5c38be053989b6a18ba00daf0b" + "reference": "01dac91a676828e19a6ace8b6e53a9e2a4c26b7a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/City-of-Helsinki/drupal-hdbt/zipball/788a852f02962d5c38be053989b6a18ba00daf0b", - "reference": "788a852f02962d5c38be053989b6a18ba00daf0b", + "url": "https://api.github.com/repos/City-of-Helsinki/drupal-hdbt/zipball/01dac91a676828e19a6ace8b6e53a9e2a4c26b7a", + "reference": "01dac91a676828e19a6ace8b6e53a9e2a4c26b7a", "shasum": "" }, "require": { @@ -5515,10 +5515,10 @@ "Drupal" ], "support": { - "source": "https://github.com/City-of-Helsinki/drupal-hdbt/tree/6.8.7", + "source": "https://github.com/City-of-Helsinki/drupal-hdbt/tree/6.8.9", "issues": "https://github.com/City-of-Helsinki/drupal-hdbt/issues" }, - "time": "2024-11-18T15:33:25+00:00" + "time": "2024-11-20T13:11:33+00:00" }, { "name": "drupal/hdbt_admin", From 40b22019a7d966b4bc79fc9ac3d8c93d5d954121 Mon Sep 17 00:00:00 2001 From: annadruid <161724181+annadruid@users.noreply.github.com> Date: Thu, 21 Nov 2024 16:12:40 +0200 Subject: [PATCH 52/74] UHF-10629: Added rent income composite to webform print controller (#1578) --- .../src/Controller/GrantsWebformPrintController.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/public/modules/custom/grants_webform_print/src/Controller/GrantsWebformPrintController.php b/public/modules/custom/grants_webform_print/src/Controller/GrantsWebformPrintController.php index 408ab0c616..1942ff75f8 100644 --- a/public/modules/custom/grants_webform_print/src/Controller/GrantsWebformPrintController.php +++ b/public/modules/custom/grants_webform_print/src/Controller/GrantsWebformPrintController.php @@ -13,6 +13,7 @@ use Drupal\grants_orienteering_map\Element\OrienteeringMapComposite; use Drupal\grants_place_of_operation\Element\PlaceOfOperationComposite; use Drupal\grants_premises\Element\PremisesComposite; +use Drupal\grants_premises\Element\RentIncomeComposite; use Drupal\webform\Entity\Webform; use Drupal\webform\WebformTranslationManager; use Symfony\Component\DependencyInjection\ContainerInterface; @@ -209,6 +210,7 @@ private function alterFieldTemplates(array $element, array $translatedFields) : case 'rented_premise_composite': case 'premises_composite': case 'members_composite': + case 'rent_income_composite': case 'club_section_composite': case 'orienteering_map_composite': case 'place_of_operation_composite': @@ -385,6 +387,7 @@ public function getCompositeInputFields(array $element, array $translatedFields) 'club_section_composite' => ClubSectionComposite::getCompositeElements($element), 'orienteering_map_composite' => OrienteeringMapComposite::getCompositeElements($element), 'place_of_operation_composite' => PlaceOfOperationComposite::getCompositeElements($element), + 'rent_income_composite' => RentIncomeComposite::getCompositeElements($element), 'default' => [], }; From 12fea7276a0b715f8c8d3e5d57ee60b03bfda73a Mon Sep 17 00:00:00 2001 From: Janne Suominen Date: Fri, 22 Nov 2024 08:33:40 +0200 Subject: [PATCH 53/74] fix: UHF-10711: Form & translation fixes (#1580) * UHF-10711: Form & translation fixes * UHF-10711: Form title + description * UHF-10711: Target group fix. * UHF-10711: Grant type translations. --- conf/cmi/grants_metadata.settings.yml | 16 ++-- ...ebform.iakkaiden_kulttuuri_ja_liikunta.yml | 58 ++++++------- .../language/fi/grants_metadata.settings.yml | 8 ++ .../language/sv/grants_metadata.settings.yml | 8 ++ ...ebform.iakkaiden_kulttuuri_ja_liikunta.yml | 15 ++-- ...ebform.iakkaiden_kulttuuri_ja_liikunta.yml | 84 ++----------------- 6 files changed, 69 insertions(+), 120 deletions(-) diff --git a/conf/cmi/grants_metadata.settings.yml b/conf/cmi/grants_metadata.settings.yml index 1b97e04b44..77ef0300af 100644 --- a/conf/cmi/grants_metadata.settings.yml +++ b/conf/cmi/grants_metadata.settings.yml @@ -291,14 +291,14 @@ third_party_options: 44: 'Development grant' 45: 'Development grant for the Helsinki Model' 46: 'Development grant for basic arts education' - 47: 'Kulttuurin erityisavustus 1' - 48: 'Kulttuurin erityisavustus 2' - 49: 'Nuorison erityisavustus 1' - 50: 'Nuorison erityisavustus 2' - 51: 'Liikunnan erityisavustus 1' - 52: 'Liikunnan erityisavustus 2' - 53: 'Kulttuurin ja vapaa-ajan erityisavustus 1' - 54: 'Kulttuurin ja vapaa-ajan erityisavustus 2' + 47: 'Special grant for culture 1' + 48: 'Special grant for culture 2' + 49: 'Special grant for youth activities 1' + 50: 'Special grant for youth activities 2' + 51: 'Special grant for sports 1' + 52: 'Special grant for sports 2' + 53: 'Special grant for culture and leisure 1' + 54: 'Special grant for culture and leisure 2' langcode: en config_import_ignore: - 53 diff --git a/conf/cmi/language/en/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml b/conf/cmi/language/en/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml index 01b851b82b..5ba986ee96 100644 --- a/conf/cmi/language/en/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml +++ b/conf/cmi/language/en/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml @@ -2,21 +2,21 @@ title: 'KUVA: Culture grant for advancing cultural activities for the elderly' elements: | 1_hakijan_tiedot: '#title': '1. Applicant details' - '#prev_button_label': 'Previous' - '#next_button_label': 'Next' + '#prev_button_label': Previous + '#next_button_label': Next hakemusprofiili: '#title': 'Retrieved information' prh_markup: - '#markup': 'The information has been retrieved from your own profile.' + '#markup': '

The information has been retrieved from your own profile.

' hakijan_tiedot: - '#title': 'Applicant' + '#title': Applicant contact_person_email_section: '#title': Email contact_markup: - '#markup': 'Provide here a community email address that is actively read. Contact requests related to the grant application, such as requests for further clarification and completion, will be sent to the email address.' + '#markup': '

Provide here a community email address that is actively read. Contact requests related to the grant application, such as requests for further clarification and completion, will be sent to the email address.

' email: '#title': 'Email address' - '#help': 'Provide the email address to which you want the messages and notifications related to this application to be sent and which is actively read.' + '#help': '

Provide the email address to which you want the messages and notifications related to this application to be sent and which is actively read.

' contact_person_section: '#title': 'Contact person for the application' contact_person: @@ -27,19 +27,19 @@ elements: | '#title': Address community_address: '#title': Address - '#help': 'If you want to add, delete or change address information, save the application as a draft and go to maintain the address information in your own data.' + '#help': '

If you want to add, delete or change address information, save the application as a draft and go to maintain the address information in your own data.

' '#community_address_select__title': 'Select the address' tilinumero: '#title': 'Account number' bank_account: '#title': 'Account number' - '#help': 'If you want to add, delete or change account number information, save the application as a draft and go to maintain the account number information in your own data.' + '#help': '

If you want to add, delete or change account number information, save the application as a draft and go to maintain the account number information in your own data.

' '#account_number_select__title': 'Select the account number' '#account_number__title': '' toiminnasta_vastaavat_henkilot: '#title': 'Persons responsible for operations' community_officials: - '#help': 'If you want to add, delete or change people, save the application as a draft and go to maintain the people's information in your own data.' + '#help': "

If you want to add, delete or change people, save the application as a draft and go to maintain the people's information in your own data.

" '#title': 'Persons responsible for operations' '#multiple__add_more_button_label': 'Add person' '#community_officials_select__title': 'Select official' @@ -62,8 +62,8 @@ elements: | '#title': 'Purpose of use' compensation_purpose: '#title': 'Brief description of the purpose(s) of the grant(s) applied for' + '#help': '

Indicate the purpose for which the grant is applied for. If necessary, specify the different uses. Also tell us what is intended to be achieved with the grant and what goals are associated with the activities to be supported.

' '#counter_maximum_message': '%d/5000 characters remaining' - '#help': 'Indicate the purpose for which the grant is applied for. If necessary, specify the different uses. Also tell us what is intended to be achieved with the grant and what goals are associated with the activities to be supported.' other_grants_for_same_purpose: '#title': 'Other grants applied for to be used for the same purpose' info_muut_samaan_tarkoitukseen_myonnetty: @@ -75,7 +75,7 @@ elements: | 0: 'No' myonnetty_avustus: '#title': 'Received grant' - '#multiple__no_items_message': 'No values entered. Add the new grant granted below.' + '#multiple__no_items_message': '

No values entered. Add the new grant granted below.

' '#multiple__add_more_button_label': 'Add received grant' '#element': issuer: @@ -85,8 +85,8 @@ elements: | 5: Foundation '#title': 'Grant issuer' issuer_name: - '#title': 'Issuer''s name' - '#help': 'Which body has granted the grant (e.g. name of the ministry)' + '#title': "Issuer's name" + '#help': '

Which body has granted the grant (e.g. name of the ministry)

' year: '#title': Year '#pattern_error': 'Only numbers' @@ -94,12 +94,12 @@ elements: | '#title': 'Amount of grant granted' purpose: '#title': 'Description of intended use' - '#help': 'Give a brief description, for what purpose has the grant been granted?' + '#help': '

Give a brief description, for what purpose has the grant been granted?

' '#counter_maximum_message': '%d/1000 characters remaining' muut_samaan_tarkoitukseen_haetut_avustukset: '#title': 'Other grants applied for to be used for the same purpose' info_muut_samaan_tarkoitukseen_haettu: - '#markup': "

Indicate here only the grants that have been applied for from somewhere other than the City of Helsinki and for which the decisions have not been made yet.

\r\n\r\n
\r\n
\r\n
An affirmative answer opens a further question
\r\n
\r\n
\r\n" + '#markup': '

Indicate here only the grants that have been applied for from somewhere other than the City of Helsinki and for which the decisions have not been made yet.

An affirmative answer opens a further question
' olemme_hakeneet_avustuksia_muualta_kuin_helsingin_kaupungilta: '#title': 'We have applied for grants from somewhere other than the City of Helsinki' '#options': @@ -107,7 +107,7 @@ elements: | 0: 'No' haettu_avustus_tieto: '#title': 'Add new grant applied for' - '#multiple__no_items_message': 'No values entered. Add a new applied for grant below.' + '#multiple__no_items_message': '

No values entered. Add a new applied for grant below.

' '#multiple__add_more_button_label': 'Add new grant applied for' '#element': issuer: @@ -117,8 +117,8 @@ elements: | 5: Foundation '#title': 'Grant issuer' issuer_name: - '#title': 'Issuer''s name' - '#help': 'Which entity has granted the grant (e.g. name of the ministry)' + '#title': "Issuer's name" + '#help': '

Which entity has granted the grant (e.g. name of the ministry)

' year: '#title': Year '#pattern_error': 'Only numbers' @@ -126,13 +126,15 @@ elements: | '#title': 'The amount of the grant applied for' purpose: '#title': 'Description of intended use' - '#help': 'Give a brief description, for what purpose has the grant been granted?' + '#help': '

Give a brief description, for what purpose has the grant been granted?

' '#counter_maximum_message': '%d/1000 characters remaining' 3_tarkemmat_tiedot: '#title': '3. Information in more detail' + markup: + '#markup': '

Grant decisions for 2024:

  • Sports Sub-committee: 11 April 2024 Section 10

  • Culture and Libraries Sub-committee: 16 April 2024 Section 15

' hankesuunnitelma_radios: '#title': 'Is the 2nd part of the grant awarded in 2024 now being applied for?' - '#help': 'Only answer “yes” to this question if your community already has an ongoing project funded by the same grant and you are applying for additional funding for it.' + '#help': '

Only answer “yes” to this question if your community already has an ongoing project funded by the same grant and you are applying for additional funding for it.

' '#options': 1: 'Yes' 0: 'No' @@ -177,7 +179,7 @@ elements: | haun_painopisteet_section: '#title': '3.2 Emphases of the grant program' haun_painopisteet_ohje: - '#markup': 'Which of the following areas of emphasis of the grant for the promotion of sport and physical activity for the elderly does the project cover?

One or more areas must be implemented in the project. PLEASE NOTE: Only select the areas that you will contribute to in the project in a concrete way.

' + '#markup': '

Which of the following areas of emphasis of the grant for the promotion of sport and physical activity for the elderly does the project cover?

One or more areas must be implemented in the project. PLEASE NOTE: Only select the areas that you will contribute to in the project in a concrete way.

' haun_painopisteet_liikkumis_kehitys: '#title': 'Does the project develop sport and physical activity opportunities or art and cultural activities in the immediate environment / area? How?' '#counter_maximum_message': '%d/1250 characters remaining' @@ -197,8 +199,8 @@ elements: | '#counter_maximum_message': '%d/1250 characters remaining' hankkeen_kohderyhmat_erityisryhmat: '#title': 'Does the project target a special group?' + '#help': '

For which special group? If not implemented, leave the field blank.

' '#counter_maximum_message': '%d/1250 characters remaining' - '#help': 'For which special group? If not implemented, leave the field blank.' hankkeen_kohderyhmat_tavoitus: '#title': 'How will the target groups of the project be reached?' '#counter_maximum_message': '%d/1250 characters remaining' @@ -213,7 +215,7 @@ elements: | '#counter_maximum_message': '%d/1250 characters remaining' hankkeen_kohderyhmat_postinrot: '#title': 'In which postal code area(s) in Helsinki will the project be implemented?' - '#help': 'Please enter up to three (3) postal code areas in the field and separate them with a comma (,).' + '#help': '

Please enter up to three (3) postal code areas in the field and separate them with a comma (,).

' hankkeen_kohderyhmat_miksi_alue: '#title': 'Why is/are that particular area(s) selected?' '#counter_maximum_message': '%d/1250 characters remaining' @@ -253,8 +255,8 @@ elements: | '#title': 'How have the activities reached the participants in relation to the goals?' '#counter_maximum_message': '%d/1250 characters remaining' arviointi_avustus_kaytto: - '#title': 'Is the grant for the first project period expected to be used by the deadline of 31 May 2025? If not, please explain the reasons that led to this.' '#help': '

Grant conditions, section 10e: “A grant that has been granted must be returned to the City of Helsinki, the grant has not been used within the period as set down in the grant decision.”

' + '#title': 'Is the grant for the first project period expected to be used by the deadline of 31 May 2025? If not, please explain the reasons that led to this.' '#counter_maximum_message': '%d/1250 characters remaining' 4_talousarvio: '#title': '4. Planned budget' @@ -304,10 +306,10 @@ elements: | actions: '#submit__label': Submit '#draft__label': 'Save as draft' - '#wizard_prev__label': 'Previous' - '#wizard_next__label': 'Next' - '#preview_prev__label': 'Previous' - '#preview_next__label': 'Preview' + '#wizard_prev__label': Previous + '#wizard_next__label': Next + '#preview_prev__label': Previous + '#preview_next__label': Preview '#delete__label': 'Delete unfinished' settings: wizard_confirmation_label: '7. Complete' diff --git a/conf/cmi/language/fi/grants_metadata.settings.yml b/conf/cmi/language/fi/grants_metadata.settings.yml index 6acfc02f84..a13f128953 100644 --- a/conf/cmi/language/fi/grants_metadata.settings.yml +++ b/conf/cmi/language/fi/grants_metadata.settings.yml @@ -69,4 +69,12 @@ third_party_options: 44: Kehittämisavustus 45: 'Helsingin mallin kehittämisavustus' 46: 'Taiteen perusopetuksen kehittämisavustus' + 47: 'Kulttuurin erityisavustus 1' + 48: 'Kulttuurin erityisavustus 2' + 49: 'Nuorison erityisavustus 1' + 50: 'Nuorison erityisavustus 2' + 51: 'Liikunnan erityisavustus 1' + 52: 'Liikunnan erityisavustus 2' + 53: 'Kulttuurin ja vapaa-ajan erityisavustus 1' + 54: 'Kulttuurin ja vapaa-ajan erityisavustus 2' langcode: fi diff --git a/conf/cmi/language/sv/grants_metadata.settings.yml b/conf/cmi/language/sv/grants_metadata.settings.yml index a5e6eb9a86..b4644c778c 100644 --- a/conf/cmi/language/sv/grants_metadata.settings.yml +++ b/conf/cmi/language/sv/grants_metadata.settings.yml @@ -69,4 +69,12 @@ third_party_options: 44: Utvecklingsunderstöd 45: 'Utvecklingsunderstöd för Helsingforsmodellen' 46: 'Utvecklingsunderstöd för grundläggande konstundervisning' + 47: 'Specialunderstöd för kultur 1' + 48: 'Specialunderstöd för kultur 2' + 49: 'Specialunderstöd för ungdomsverksamhet 1' + 50: 'Specialunderstöd för ungdomsverksamhet 2' + 51: 'Specialunderstöd för idrott 1' + 52: 'Specialunderstöd för idrott 2' + 53: 'Specialunderstöd för kultur och fritid 1' + 54: 'Specialunderstöd för kultur och fritid 2' langcode: sv diff --git a/conf/cmi/language/sv/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml b/conf/cmi/language/sv/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml index c7e7007890..9fa12188e0 100644 --- a/conf/cmi/language/sv/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml +++ b/conf/cmi/language/sv/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml @@ -56,14 +56,14 @@ elements: | '#title': Understöd subventions: '#title': 'Typ av stöd' - kayttotarkoitus: - '#title': 'Användningsän damål' grants_compensations_information: '#markup': '

Ansök alltid endast om en typ av understöd åt gången.

' + kayttotarkoitus: + '#title': 'Användningsän damål' compensation_purpose: '#title': 'En kort beskrivning av användningsändamålet för det/de understöd som ansöks' + '#help': '

Ange för vilket ändamål understödet ansöks och vid behov specificera de olika ändamålen. Ange också vad understödet är avsett för och vilka mål som är relaterade till den understödda verksamheten.

' '#counter_maximum_message': '%d/5000 tecken kvar' - '#help': 'Ange för vilket ändamål understödet ansöks och vid behov specificera de olika ändamålen. Ange också vad understödet är avsett för och vilka mål som är relaterade till den understödda verksamheten.' other_grants_for_same_purpose: '#title': 'Övriga understöd som beviljats för samma ändamål' info_muut_samaan_tarkoitukseen_myonnetty: @@ -130,6 +130,8 @@ elements: | '#counter_maximum_message': '%d/1000 tecken kvar' 3_tarkemmat_tiedot: '#title': '3. Mer detaljerad information' + markup: + '#markup': '

Beslut om understöd för 2024:

  • Idrottssektionen: 11.4.2024 §10

  • Kultur- och bibliotekssektionen: 16.4.2024 §15

' hankesuunnitelma_radios: '#title': 'Ansöker du nu om den andra delen av ett tvåårigt understöd som beviljades 2024?' '#help': '

Svara bara ”ja” på den här frågan om din sammanslutning redan har ett pågående projekt som finansieras med samma understöd och du ansöker om fortsatt finansiering.

' @@ -177,7 +179,7 @@ elements: | haun_painopisteet_section: '#title': '3.2 Tyngdpunkter för ansökan' haun_painopisteet_ohje: - '#markup': '

Projektet ska arbeta för en eller flera tyngdpunkter. OBS! Välj bara de tyngdpunkter som ni kommer att bidra till på ett konkret sätt genom projektet.

' + '#markup': '

Vilken av följande tyngdpunkter för understödet för främjande av idrott hos äldre är projektet inriktat på?

Projektet ska arbeta för en eller flera tyngdpunkter. OBS! Välj bara de tyngdpunkter som ni kommer att bidra till på ett konkret sätt genom projektet.

' haun_painopisteet_liikkumis_kehitys: '#title': 'Bidrar projektet till att utveckla möjligheter till idrott eller konst- och kulturverksamhet i närområdet/regionalt? På vilket sätt?' '#counter_maximum_message': '%d/1250 tecken kvar' @@ -197,8 +199,8 @@ elements: | '#counter_maximum_message': '%d/1250 tecken kvar' hankkeen_kohderyhmat_erityisryhmat: '#title': 'Riktar sig projektet till någon särskild grupp?' + '#help': '

Till vilken särskild grupp? Om svaret är ”nej”, lämna tomt.

' '#counter_maximum_message': '%d/1250 tecken kvar' - '#help': 'Till vilken särskild grupp? Om svaret är ”nej”, lämna tomt.' hankkeen_kohderyhmat_tavoitus: '#title': 'Hur ska ni nå ut med projektet till målgrupperna?' '#counter_maximum_message': '%d/1250 tecken kvar' @@ -213,7 +215,7 @@ elements: | '#counter_maximum_message': '%d/1250 tecken kvar' hankkeen_kohderyhmat_postinrot: '#title': 'Inom vilket/vilka postnummerområden i Helsingfors kommer projektet att genomföras?' - '#help': 'Ange upp till tre (3) postnummerområden och separera dem med kommatecken (,).' + '#help': '

Ange upp till tre (3) postnummerområden och separera dem med kommatecken (,).

' hankkeen_kohderyhmat_miksi_alue: '#title': 'Varför har ni valt just det/de områdena?' '#counter_maximum_message': '%d/1250 tecken kvar' @@ -227,7 +229,6 @@ elements: | '#counter_maximum_message': '%d/2500 tecken kvar' hankkeen_riskit_vakiinnuttaminen: '#title': 'Är den planerade verksamheten för projektet avsedd att bli en permanent del av den grundläggande verksamheten hos den sökande/en annan aktör efter projektet?' - '#help': '

Om ja, beskriv i textrutan hur det här kommer att ske, lämna annars tomt.

' '#counter_maximum_message': '%d/2500 tecken kvar' hankkeen_valiarviointi_section: '#title': '3.5 Mellanutvärderin g av tvååriga projekt' diff --git a/conf/cmi/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml b/conf/cmi/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml index 7b5623302c..dd26699e6f 100644 --- a/conf/cmi/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml +++ b/conf/cmi/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml @@ -15,7 +15,7 @@ third_party_settings: registered_community: registered_community applicationTypeTerms: 62: '62' - applicationTargetGroup: '22' + applicationTargetGroup: '75' applicationOpen: null applicationClose: null applicationActingYearsType: fixed @@ -36,8 +36,8 @@ uid: 1 template: false archive: false id: iakkaiden_kulttuuri_ja_liikunta -title: 'Kulttuurin avustukset iäkkäiden ihmisten kulttuuritoiminnan edistämiseksi' -description: '

Kulttuurin ja vapaa-ajan erillisavustushakemus: Ikääntyneiden liikkumisen ja kulttuuritoiminnan avustus

' +title: 'KUVA: avustushakemus iäkkäiden ihmisten liikkumisen ja kulttuuritoiminnan edistämiseksi' +description: '

KUVAERILLIS

' categories: - Kehityksessä elements: |- @@ -603,6 +603,9 @@ elements: |- tarkemmat_tiedot_section: '#type': webform_section '#title': ' ' + markup: + '#type': webform_markup + '#markup': '

Vuoden 2024 avustuspäätökset:

  • Liikuntajaosto: 11.4.2024 §10

  • Kulttuuri- ja kirjastojaosto: 16.4.2024 §15

' hankesuunnitelma_radios: '#type': radios '#title': 'Haetaanko nyt vuonna 2024 myönnetyn kaksivuotisen avustuksen 2. osaa?' @@ -1359,78 +1362,5 @@ handlers: conditions: { } weight: null settings: - id: grants_handler - handler_id: null - label: 'Grants Handler' - notes: '' - status: true - conditions: { } - weight: null - settings: - id: grants_handler - label: 'Grants Handler' - notes: '' - handler_id: null - status: 1 - conditions: { } - weight: '' - settings: - id: grants_handler - handler_id: null - label: 'Grants Handler' - notes: '' - status: true - conditions: { } - weight: null - settings: - id: grants_handler - handler_id: null - label: 'Grants Handler' - notes: '' - status: true - conditions: { } - weight: null - settings: - id: grants_handler - handler_id: null - label: 'Grants Handler' - notes: '' - status: true - conditions: { } - weight: null - settings: - id: grants_handler - handler_id: null - label: 'Grants Handler' - notes: '' - status: true - conditions: { } - weight: null - settings: - id: grants_handler - handler_id: null - label: 'Grants Handler' - notes: '' - status: true - conditions: { } - weight: null - settings: - id: grants_handler - handler_id: null - label: 'Grants Handler' - notes: '' - status: true - conditions: { } - weight: null - settings: - id: grants_handler - handler_id: grants_handler - label: 'Grants Handler' - notes: '' - status: true - conditions: { } - weight: 0 - settings: - debug: false - debug: false + debug: false variants: { } From 89f6c496cff591afe077341e7dfed95f44dc4a17 Mon Sep 17 00:00:00 2001 From: Tero Elonen <2276077+teroelonen@users.noreply.github.com> Date: Fri, 22 Nov 2024 15:09:28 +0200 Subject: [PATCH 54/74] UHF-10571: Modify the order where questions are asked in budget_cost_static webform element (#1575) --- .../src/Element/GrantsBudgetCostStatic.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/modules/custom/grants_budget_components/src/Element/GrantsBudgetCostStatic.php b/public/modules/custom/grants_budget_components/src/Element/GrantsBudgetCostStatic.php index 1b5161b2fb..654cde77b6 100644 --- a/public/modules/custom/grants_budget_components/src/Element/GrantsBudgetCostStatic.php +++ b/public/modules/custom/grants_budget_components/src/Element/GrantsBudgetCostStatic.php @@ -92,7 +92,6 @@ public static function getFieldNames(): array { $tOpts = ['context' => 'grants_budget_components']; return [ "salaries" => t("Salaries (€)", [], $tOpts), - "personnelSideCosts" => t("Personnel costs from salaries and fees (approx. 30%) (€)", [], $tOpts), "personnelSocialSecurityCosts" => t("personnelSocialSecurityCosts (€)", [], $tOpts), "rentSum" => t("Rents (€)", [], $tOpts), "materials" => t("Materials (€)", [], $tOpts), @@ -119,6 +118,7 @@ public static function getFieldNames(): array { "netCosts" => t("netCosts (€)", [], $tOpts), "performerFees" => t("Salaries and fees for performers and artists (€)", [], $tOpts), "otherFees" => t("Other salaries and fees (production, technology, etc.) (€)", [], $tOpts), + "personnelSideCosts" => t("Personnel costs from salaries and fees (approx. 30%) (€)", [], $tOpts), "generalCosts" => t("generalCosts (€)", [], $tOpts), "permits" => t("permits (€)", [], $tOpts), "setsAndCostumes" => t("setsAndCostumes (€)", [], $tOpts), From d6eb84465b4abffeed8e72aa9b9411d8e8c902dd Mon Sep 17 00:00:00 2001 From: Janne Suominen Date: Mon, 25 Nov 2024 06:35:58 +0200 Subject: [PATCH 55/74] feat: UHF-10693: Add copyable list for application delete function + new Event for sending to integration. (#1576) --- .../src/Form/DeleteApplicationsForm.php | 25 +- .../grants_events/src/EventsService.php | 24 +- .../grants_handler.services.yml | 3 +- .../src/ApplicationUploaderService.php | 33 ++- .../grants_handler/src/EventsService.php | 247 ------------------ 5 files changed, 73 insertions(+), 259 deletions(-) delete mode 100644 public/modules/custom/grants_handler/src/EventsService.php diff --git a/public/modules/custom/grants_admin_applications/src/Form/DeleteApplicationsForm.php b/public/modules/custom/grants_admin_applications/src/Form/DeleteApplicationsForm.php index 79d0071ec1..df10408cf0 100644 --- a/public/modules/custom/grants_admin_applications/src/Form/DeleteApplicationsForm.php +++ b/public/modules/custom/grants_admin_applications/src/Form/DeleteApplicationsForm.php @@ -189,7 +189,12 @@ public function buildForm(array $form, FormStateInterface $form_state): array { // Build the application listing form elements. if ($uuid || $businessId) { - $this->buildApplicationList($uuid, $businessId, $appEnv, $type, $status, $form_state, $form); + try { + $this->buildApplicationList($uuid, $businessId, $appEnv, $type, $status, $form_state, $form); + } + catch (\Throwable $e) { + $this->messenger()->addError($e->getMessage()); + } } $form['actions']['delete_selected'] = [ @@ -365,6 +370,8 @@ private function deleteDraftDocuments(array $documents): void { * The form state. * @param array $form * The form. + * + * @throws \Drupal\helfi_helsinki_profiili\TokenExpiredException */ private function buildApplicationList( mixed $uuid, @@ -384,6 +391,13 @@ private function buildApplicationList( return; } + // Extract the transaction_id values and join them into a string. + $transactionIds = array_map(function ($document) { + return $document->getTransactionId(); + }, $documents); + + $applicationNumberList = implode(',', $transactionIds); + $form_state->setStorage(['documents' => $documents]); $documentsByType = $this->sortDocuments($documents); @@ -413,6 +427,15 @@ private function buildApplicationList( ]; } } + + // Add the application numbers list to a form element. + $form['appData']['application_numbers'] = [ + '#type' => 'textarea', + '#title' => $this->t('Application numbers in copyable list.'), + '#value' => $applicationNumberList, + '#description' => $this->t('Total number of results: @count', ['@count' => count($transactionIds)]), + '#disabled' => TRUE, + ]; } catch (AtvDocumentNotFoundException | AtvFailedToConnectException | GuzzleException $e) { $this->messenger()->addError('Failed fetching applications.'); diff --git a/public/modules/custom/grants_events/src/EventsService.php b/public/modules/custom/grants_events/src/EventsService.php index 8e88fd2f7d..8ffa9df10c 100644 --- a/public/modules/custom/grants_events/src/EventsService.php +++ b/public/modules/custom/grants_events/src/EventsService.php @@ -7,6 +7,7 @@ use Drupal\Core\Logger\LoggerChannelInterface; use Drupal\grants_handler\DebuggableTrait; use Drupal\grants_metadata\AtvSchema; +use Drupal\helfi_atv\AtvDocument; use GuzzleHttp\Client; use GuzzleHttp\Exception\GuzzleException; use Ramsey\Uuid\Uuid; @@ -67,6 +68,7 @@ class EventsService { 'MESSAGE_READ' => 'MESSAGE_READ', 'MESSAGE_RESEND' => 'MESSAGE_RESEND', 'HANDLER_ATT_OK' => 'HANDLER_ATT_OK', + 'HANDLER_SEND_INTEGRATION' => 'HANDLER_SEND_INTEGRATION', 'HANDLER_ATT_DELETE' => 'HANDLER_ATT_DELETE', 'HANDLER_RESEND_APP' => 'HANDLER_RESEND_APP', 'HANDLER_APP_COPIED' => 'HANDLER_APP_COPIED', @@ -139,7 +141,7 @@ public function logEvent( ): ?array { if (empty($eventData)) { - $eventData = self::getEventData($eventType, $applicationNumber, $eventDescription, $eventTarget); + $eventData = $this->getEventData($eventType, $applicationNumber, $eventDescription, $eventTarget); } $eventDataJson = Json::encode($eventData); @@ -212,7 +214,7 @@ public function filterEvents(array $events, string $typeKey): array { * @param string $eventDescription * Event description. * @param string $eventTarget - * Eent target. + * Event target. * * @return array * Event data in array. @@ -245,4 +247,22 @@ public function getEventData(string $eventType, string $applicationNumber, strin return $eventData; } + /** + * Add new event to application document. + * + * @param \Drupal\helfi_atv\AtvDocument $document + * Document to be updated. + * @param array $eventData + * Event data to be added. + */ + public function addNewEventForApplication(AtvDocument &$document, array $eventData): void { + $documentContent = $document->getContent(); + $documentEvents = $documentContent['events'] ?? []; + $documentEvents[] = $eventData; + $documentContent['events'] = $documentEvents; + + $document->setContent($documentContent); + + } + } diff --git a/public/modules/custom/grants_handler/grants_handler.services.yml b/public/modules/custom/grants_handler/grants_handler.services.yml index 12ba9cd068..103f38847d 100644 --- a/public/modules/custom/grants_handler/grants_handler.services.yml +++ b/public/modules/custom/grants_handler/grants_handler.services.yml @@ -157,7 +157,8 @@ services: '@helfi_helsinki_profiili.userdata', '@grants_attachments.attachment_fixer_service', '@current_user', - '@database' + '@database', + '@grants_events.events_service' ] grants_handler.application_access_handler: diff --git a/public/modules/custom/grants_handler/src/ApplicationUploaderService.php b/public/modules/custom/grants_handler/src/ApplicationUploaderService.php index 9add608ed5..e6fec073de 100644 --- a/public/modules/custom/grants_handler/src/ApplicationUploaderService.php +++ b/public/modules/custom/grants_handler/src/ApplicationUploaderService.php @@ -15,6 +15,7 @@ use Drupal\Core\StringTranslation\StringTranslationTrait; use Drupal\Core\TypedData\TypedDataInterface; use Drupal\grants_attachments\AttachmentFixerService; +use Drupal\grants_events\EventsService; use Drupal\grants_metadata\AtvSchema; use Drupal\helfi_atv\AtvDocument; use Drupal\helfi_atv\AtvService; @@ -83,6 +84,7 @@ public function __construct( private readonly AttachmentFixerService $attachmentFixerService, private readonly AccountInterface $currentUser, private readonly Connection $database, + private readonly EventsService $eventsService, ) { $this->logger = $this->loggerChannelFactory->get('application_uploader_service'); @@ -185,6 +187,7 @@ public function handleApplicationUploadToAtv( * @throws \Drupal\helfi_atv\AtvFailedToConnectException * @throws \GuzzleHttp\Exception\GuzzleException * @throws \Drupal\helfi_helsinki_profiili\TokenExpiredException + * @throws \Drupal\grants_events\EventException */ public function handleApplicationUploadViaIntegration( TypedDataInterface $applicationData, @@ -199,6 +202,25 @@ public function handleApplicationUploadViaIntegration( * for some reason. */ $updatedDocumentFromAtv = $this->handleApplicationUploadToAtv($applicationData, $applicationNumber, $submittedFormData); + + // Create new saveid before sending data to integration, + // so we can add it to event data. + $newSaveId = $this->logSubmissionSaveid( + NULL, + $applicationNumber, + $this->helfiHelsinkiProfiiliUserdata->getUserData() + ); + + // Add new event for sending it to integration. + $this->eventsService->addNewEventForApplication( + $updatedDocumentFromAtv, + $this->eventsService->getEventData( + $this->eventsService->getEventTypes()['HANDLER_SEND_INTEGRATION'], + $applicationNumber, + 'Send application to integration.', + $newSaveId + )); + $myJSON = Json::encode($updatedDocumentFromAtv->getContent()); // No matter what the debug value is, we do NOT log json in PROD. @@ -232,12 +254,8 @@ public function handleApplicationUploadViaIntegration( // Set application number to meta as well to enable better searches. $headers['X-hki-applicationNumber'] = $applicationNumber; - // Set new saveid and save it to db. - $headers['X-hki-saveId'] = $this->logSubmissionSaveid( - NULL, - $applicationNumber, - $this->helfiHelsinkiProfiiliUserdata->getUserData() - ); + // Set new saveid to header. + $headers['X-hki-saveId'] = $newSaveId; $res = $this->httpClient->post($this->endpoint, [ 'auth' => [ @@ -335,14 +353,13 @@ public function logSubmissionSaveid( 'saveid' => $saveId, 'uid' => $this->currentUser->id(), 'user_uuid' => $userData['sub'] ?? '', - 'timestamp' => (string) (new Time)->getRequestTime(), + 'timestamp' => (string) (new Time())->getRequestTime(), ]; $query = $this->database->insert(ApplicationHelpers::TABLE, $fields); $query->fields($fields)->execute(); return $saveId; - } } diff --git a/public/modules/custom/grants_handler/src/EventsService.php b/public/modules/custom/grants_handler/src/EventsService.php deleted file mode 100644 index 64e201a3b9..0000000000 --- a/public/modules/custom/grants_handler/src/EventsService.php +++ /dev/null @@ -1,247 +0,0 @@ - 'AVUSTUS2_MSG_OK', - 'AVUSTUS2_ATT_OK' => 'AVUSTUS2_ATT_OK', - 'STATUS_UPDATE' => 'STATUS_UPDATE', - 'MESSAGE_AVUS2' => 'MESSAGE_AVUS2', - 'MESSAGE_APP' => 'MESSAGE_APP', - 'MESSAGE_READ' => 'MESSAGE_READ', - 'MESSAGE_RESEND' => 'MESSAGE_RESEND', - 'HANDLER_ATT_OK' => 'HANDLER_ATT_OK', - 'HANDLER_ATT_DELETE' => 'HANDLER_ATT_DELETE', - 'HANDLER_RESEND_APP' => 'HANDLER_RESEND_APP', - 'HANDLER_APP_COPIED' => 'HANDLER_APP_COPIED', - 'INTEGRATION_INFO_ATT_OK' => 'INTEGRATION_INFO_ATT_OK', - 'INTEGRATION_INFO_APP_OK' => 'INTEGRATION_INFO_APP_OK', - 'EVENT_INFO' => 'EVENT_INFO', - 'HANDLER_ATT_DELETED' => 'HANDLER_ATT_DELETED', - 'INTEGRATION_ERROR_AVUS2' => 'INTEGRATION_ERROR_AVUS2', - 'INTEGRATION_ERROR_ATV_ATT' => 'INTEGRATION_ERROR_ATV_ATT', - ]; - - /** - * Constructs a MessageService object. - * - * @param \GuzzleHttp\Client $http_client - * Client to post data. - * @param \Drupal\Core\Logger\LoggerChannelFactory $loggerFactory - * Log things. - */ - public function __construct( - Client $http_client, - LoggerChannelFactoryInterface $loggerFactory, - ) { - $this->httpClient = $http_client; - $this->logger = $loggerFactory->get('grants_handler_events_service'); - - $this->endpoint = getenv('AVUSTUS2_EVENT_ENDPOINT'); - $this->username = getenv('AVUSTUS2_USERNAME'); - $this->password = getenv('AVUSTUS2_PASSWORD'); - - $this->setDebug(NULL); - - } - - /** - * Get event types. - * - * @return array|string[] - * Event types. - */ - public function getEventTypes(): array { - return $this->eventTypes; - } - - /** - * Log event to document via event integration. - * - * @param string $applicationNumber - * Application to be logged. - * @param string $eventType - * Type of event, must be configured in this class as active one. - * @param string $eventDescription - * Free message to be added. - * @param string $eventTarget - * Target ID for event. - * @param array $eventData - * If we have already built-up event data, use this. - * - * @return array|null - * EventID if success, otherways NULL - * - * @throws \Drupal\grants_handler\EventException - */ - public function logEvent( - string $applicationNumber, - string $eventType, - string $eventDescription, - string $eventTarget, - array $eventData = [], - ): ?array { - - if (empty($eventData)) { - $eventData = self::getEventData($eventType, $applicationNumber, $eventDescription, $eventTarget); - } - - $eventDataJson = Json::encode($eventData); - - if (TRUE === $this->debug) { - $this->logger->debug( - 'Event ID: %eventId, JSON: %json', - [ - '%eventId' => $eventData['eventID'], - '%json' => $eventDataJson, - ]); - } - - try { - - $res = $this->httpClient->post($this->endpoint, [ - 'auth' => [$this->username, $this->password, "Basic"], - 'body' => $eventDataJson, - ]); - - if ($res->getStatusCode() == 200) { - $this->logger->info('Event logged: %eventId, message sent.', ['%eventId' => $eventData['eventID']]); - return $eventData; - } - - } - catch (\Exception $e) { - throw new EventException($e->getMessage()); - } - catch (GuzzleException $e) { - throw new EventException($e->getMessage()); - } - - return NULL; - } - - /** - * Filter events by given key. - * - * @param array $events - * Events to be filtered. - * @param string $typeKey - * Event type wanted. - * - * @return array - * Filtered events. - */ - public function filterEvents(array $events, string $typeKey): array { - $messageEvents = array_filter($events, function ($event) use ($typeKey) { - if ($event['eventType'] == $this->eventTypes[$typeKey]) { - return TRUE; - } - return FALSE; - }); - - return [ - 'events' => $messageEvents, - 'event_targets' => array_column($messageEvents, 'eventTarget'), - 'event_ids' => array_column($messageEvents, 'eventID'), - ]; - } - - /** - * Build event object/array from given data. - * - * @param string $eventType - * Type of event, must be in self::$eventTypes. - * @param string $applicationNumber - * Application number for event. - * @param string $eventDescription - * Event description. - * @param string $eventTarget - * Eent target. - * - * @return array - * Event data in array. - * - * @throws \Drupal\grants_handler\EventException - */ - public function getEventData(string $eventType, string $applicationNumber, string $eventDescription, string $eventTarget): array { - $eventData = []; - - if (!in_array($eventType, $this->eventTypes)) { - throw new EventException('Not valid event type: ' . $eventType); - } - else { - $eventData['eventType'] = $eventType; - } - - $eventData['eventID'] = Uuid::uuid4()->toString(); - $eventData['caseId'] = $applicationNumber; - $eventData['eventDescription'] = AtvSchema::sanitizeInput($eventDescription); - $eventData['eventTarget'] = $eventTarget; - - if (!isset($eventData['eventSource'])) { - $eventData['eventSource'] = getenv('EVENTS_SOURCE'); - } - - $dt = new \DateTime(); - $dt->setTimezone(new \DateTimeZone('Europe/Helsinki')); - - $eventData['timeCreated'] = $eventData['timeUpdated'] = $dt->format('Y-m-d\TH:i:s'); - return $eventData; - } - -} From d7ac5570ba36001f75ecd58477c98f6543debbec Mon Sep 17 00:00:00 2001 From: hel-platta-automation <95360595+hel-platta-automation@users.noreply.github.com> Date: Mon, 25 Nov 2024 06:36:46 +0200 Subject: [PATCH 56/74] Update configuration (#1579) --- composer.lock | 56 ++++++++++++++++++++++++++------------------------- 1 file changed, 29 insertions(+), 27 deletions(-) diff --git a/composer.lock b/composer.lock index fa0bd8a7d7..7cfdef1fc1 100644 --- a/composer.lock +++ b/composer.lock @@ -3112,16 +3112,16 @@ }, { "name": "drupal/core", - "version": "10.3.8", + "version": "10.3.9", "source": { "type": "git", "url": "https://github.com/drupal/core.git", - "reference": "4006024a8dd7c9976fad0a2af7c9034d120c8e44" + "reference": "42a6516491b4793158542a2326dc6ad1fe2aa5bd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/drupal/core/zipball/4006024a8dd7c9976fad0a2af7c9034d120c8e44", - "reference": "4006024a8dd7c9976fad0a2af7c9034d120c8e44", + "url": "https://api.github.com/repos/drupal/core/zipball/42a6516491b4793158542a2326dc6ad1fe2aa5bd", + "reference": "42a6516491b4793158542a2326dc6ad1fe2aa5bd", "shasum": "" }, "require": { @@ -3270,13 +3270,13 @@ ], "description": "Drupal is an open source content management platform powering millions of websites and applications.", "support": { - "source": "https://github.com/drupal/core/tree/10.3.8" + "source": "https://github.com/drupal/core/tree/10.3.9" }, - "time": "2024-11-12T09:52:10+00:00" + "time": "2024-11-20T17:59:45+00:00" }, { "name": "drupal/core-composer-scaffold", - "version": "10.3.8", + "version": "10.3.9", "source": { "type": "git", "url": "https://github.com/drupal/core-composer-scaffold.git", @@ -3320,7 +3320,7 @@ "drupal" ], "support": { - "source": "https://github.com/drupal/core-composer-scaffold/tree/10.3.8" + "source": "https://github.com/drupal/core-composer-scaffold/tree/10.3.9" }, "time": "2024-08-22T14:31:34+00:00" }, @@ -5487,16 +5487,16 @@ }, { "name": "drupal/hdbt", - "version": "6.8.9", + "version": "6.8.10", "source": { "type": "git", "url": "https://github.com/City-of-Helsinki/drupal-hdbt.git", - "reference": "01dac91a676828e19a6ace8b6e53a9e2a4c26b7a" + "reference": "2427bb6c2988c157285e685308e16f0c66e8d5e1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/City-of-Helsinki/drupal-hdbt/zipball/01dac91a676828e19a6ace8b6e53a9e2a4c26b7a", - "reference": "01dac91a676828e19a6ace8b6e53a9e2a4c26b7a", + "url": "https://api.github.com/repos/City-of-Helsinki/drupal-hdbt/zipball/2427bb6c2988c157285e685308e16f0c66e8d5e1", + "reference": "2427bb6c2988c157285e685308e16f0c66e8d5e1", "shasum": "" }, "require": { @@ -5515,10 +5515,10 @@ "Drupal" ], "support": { - "source": "https://github.com/City-of-Helsinki/drupal-hdbt/tree/6.8.9", + "source": "https://github.com/City-of-Helsinki/drupal-hdbt/tree/6.8.10", "issues": "https://github.com/City-of-Helsinki/drupal-hdbt/issues" }, - "time": "2024-11-20T13:11:33+00:00" + "time": "2024-11-22T12:52:59+00:00" }, { "name": "drupal/hdbt_admin", @@ -5616,16 +5616,16 @@ }, { "name": "drupal/helfi_api_base", - "version": "2.7.15", + "version": "2.7.17", "source": { "type": "git", "url": "https://github.com/City-of-Helsinki/drupal-module-helfi-api-base.git", - "reference": "bfada1ee33120497e8dde6dbde201320f41e2dfc" + "reference": "d5d46f30b9ec1ccac5b5bac130097454232e35a8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/City-of-Helsinki/drupal-module-helfi-api-base/zipball/bfada1ee33120497e8dde6dbde201320f41e2dfc", - "reference": "bfada1ee33120497e8dde6dbde201320f41e2dfc", + "url": "https://api.github.com/repos/City-of-Helsinki/drupal-module-helfi-api-base/zipball/d5d46f30b9ec1ccac5b5bac130097454232e35a8", + "reference": "d5d46f30b9ec1ccac5b5bac130097454232e35a8", "shasum": "" }, "require": { @@ -5647,7 +5647,9 @@ "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", "dg/bypass-finals": "^1.0", "donatj/mock-webserver": "dev-master", - "drupal/coder": "^8.3" + "drupal/coder": "^8.3", + "drupal/elasticsearch_connector": "^8.0@alpha", + "drupal/search_api": "^1.0" }, "type": "drupal-module", "license": [ @@ -5655,10 +5657,10 @@ ], "description": "Helfi - API Base", "support": { - "source": "https://github.com/City-of-Helsinki/drupal-module-helfi-api-base/tree/2.7.15", + "source": "https://github.com/City-of-Helsinki/drupal-module-helfi-api-base/tree/2.7.17", "issues": "https://github.com/City-of-Helsinki/drupal-module-helfi-api-base/issues" }, - "time": "2024-11-08T08:31:53+00:00" + "time": "2024-11-22T08:27:20+00:00" }, { "name": "drupal/helfi_atv", @@ -5929,16 +5931,16 @@ }, { "name": "drupal/helfi_platform_config", - "version": "4.7.5", + "version": "4.8.0", "source": { "type": "git", "url": "https://github.com/City-of-Helsinki/drupal-helfi-platform-config.git", - "reference": "760d470ec819fcc7749d77d319b904a42812ac85" + "reference": "d93cdc55e761665a2bb68503f466ab376a745c10" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/City-of-Helsinki/drupal-helfi-platform-config/zipball/760d470ec819fcc7749d77d319b904a42812ac85", - "reference": "760d470ec819fcc7749d77d319b904a42812ac85", + "url": "https://api.github.com/repos/City-of-Helsinki/drupal-helfi-platform-config/zipball/d93cdc55e761665a2bb68503f466ab376a745c10", + "reference": "d93cdc55e761665a2bb68503f466ab376a745c10", "shasum": "" }, "require": { @@ -6065,10 +6067,10 @@ ], "description": "HELfi platform config", "support": { - "source": "https://github.com/City-of-Helsinki/drupal-helfi-platform-config/tree/4.7.5", + "source": "https://github.com/City-of-Helsinki/drupal-helfi-platform-config/tree/4.8.0", "issues": "https://github.com/City-of-Helsinki/drupal-helfi-platform-config/issues" }, - "time": "2024-11-19T09:09:39+00:00" + "time": "2024-11-20T11:35:52+00:00" }, { "name": "drupal/helfi_proxy", From 270e8de6fbe4a3c6985a5cdd0d034cf10327cf15 Mon Sep 17 00:00:00 2001 From: Santeri Hurnanen Date: Wed, 27 Nov 2024 07:25:38 +0200 Subject: [PATCH 57/74] UHF-10883 (#1581) * UHF-10883: Change compensation_explanation * UHF-10883: Change liikuntatiloista_maksetut_vuokrat_fieldset * UHF-10883: Change lajijaostot_info * UHF-10883: Change ClubSectionComposite component * UHF-10883: Fix club-section styles * UHF-10883: Change lajijaostot_helsinkilaisille_aktiiviharrastajille --- ...bform.liikunta_toiminta_ja_tilankaytto.yml | 10 +++-- ...bform.liikunta_toiminta_ja_tilankaytto.yml | 10 +++-- ...bform.liikunta_toiminta_ja_tilankaytto.yml | 12 +++--- .../src/Element/ClubSectionComposite.php | 23 ++++++----- .../grants_club_section/translations/fi.po | 40 ++++++++++--------- .../grants_club_section/translations/sv.po | 22 +++++----- .../hdbt_subtheme/dist/css/styles.min.css | 2 +- .../custom/hdbt_subtheme/package-lock.json | 9 +++-- .../forms/webform/_form-elements.scss | 4 ++ 9 files changed, 77 insertions(+), 55 deletions(-) diff --git a/conf/cmi/language/en/webform.webform.liikunta_toiminta_ja_tilankaytto.yml b/conf/cmi/language/en/webform.webform.liikunta_toiminta_ja_tilankaytto.yml index 0761b948d3..4e2ce23982 100644 --- a/conf/cmi/language/en/webform.webform.liikunta_toiminta_ja_tilankaytto.yml +++ b/conf/cmi/language/en/webform.webform.liikunta_toiminta_ja_tilankaytto.yml @@ -74,7 +74,7 @@ elements: | '#markup': 'Provide a report on the use of the grant received from the City of Helsinki. A report on the use of the grant must be drawn up for the grant concerning the previous accounting period. A report on the use should not be drawn up for the current accounting period. Providing the report on the use is a prerequisite for receiving the next grant. If no report on the use is provided, the grant will not be awarded or paid. A grant awarded may be recovered if the use of the previous grant has not been satisfactorily reported.' compensation_explanation: '#title': 'Report on the use of the grant' - '#help': 'The report on the use must briefly describe how the received grant has been used. The recipient must arrange its accounting in such a way that it is possible to monitor the use of the grant. For example, if a community has received a lease grant, the profit and loss account in the financial statements must show the grant in both income and expenses. Further information on the use of the grant can also be written in a separate attachment, which can be returned under Report on the use.' + '#help': '

The report on the use must briefly describe how the received grant has been used. The recipient must arrange its accounting in such a way that it is possible to monitor the use of the grant. Further information on the use of the grant can also be written in a separate attachment, which can be returned under Report on the use.

' '#counter_maximum_message': '%d/5000 characters remaining' kayttotarkoitus: '#title': 'Purpose of use' @@ -118,7 +118,7 @@ elements: | tilankayttoavustus: '#title': 'Sports facility usage grant' maksetut_vuokrat_info: - '#markup': "

Summary of rent paid by the club/association for regular training slots elsewhere than in Sports Services’ own facilities, in the previous calendar year between 1 January and 31 December. The Rents paid for sports facilities section is mandatory if you are applying for a facility use grant.

\r\n" + '#markup': '

Summary of rent paid by the club/association for regular training slots elsewhere than in Sports Services’ own facilities, in the previous calendar year between 1 January and 31 December. The Rents paid for sports facilities section is mandatory if you are applying for a facility use grant.

' liikuntatiloista_maksetut_vuokrat_fieldset: '#title': 'Rent paid for sports facilities' tuntimaara_yhteensa: @@ -126,7 +126,8 @@ elements: | vuokrat_yhteensa: '#title': 'Total / EUR' seuraavalle_vuodelle_suunniteltu_muutos_tilojen_kaytossa_tunnit_: - '#title': 'Change in the use of facilities planned for the next year, +/- hours and reason' + '#title': 'Significant change in the use of facilities planned for the next year, +/- hours and reason' + '#help': '

It is possible to include significant changes in the club’s use of sports facilities over the application period for consideration in the amount of the facility usage grant at our discretion. The following are considered significant changes: club mergers, a section(s) joining the club or leaving the club, renting or purchasing a new sports facility (attach the rental agreement to the application) or relinquishing control over or selling a sports facility.

' seuran_yhdistyksen_saamat_vuokrat_edellisen_kalenterivuoden_ajal: '#title': 'Rent received by the club/association in the previous calendar year between 1 January and 31 December' '#description': 'If the club/association receives rental income for its premises, report it here' @@ -224,8 +225,9 @@ elements: | '#help': 'In addition to the VOK 1 training arranged by regional sports organisations, the calculation accounts for the number of instructors and coaches who have completed a sports federation’s coach and instructor training that are at least equal in terms of level and content, or who have completed a basic qualification in sports instruction (vocational college), a degree in sports instruction (university of applied sciences) or a master’s degree in sports sciences (sports pedagogy or sports biology).' lajijaostot_helsinkilaisille_aktiiviharrastajille: '#title': 'Operating sport divisions for Helsinki residents' + '#help': '

In this section, a single active member can be reported more than once, if the member meets the definition of an active member in several different sport divisions.

' lajijaostot_info: - '#markup': "

List the regular guided sports activities organised by the club/association by sport. Enter here the number of active members from Helsinki in the previous year, by sport, as well as their realized training hours.

\r\n" + '#markup': '

List the regular guided sports activities organised by the club/association by sport. Enter here the number of active members from Helsinki in the previous year, by sport, as well as their realized training hours by age group.

' club_section: '#multiple__add_more_button_label': 'Add new sport' '#multiple__item_label': 'sport' diff --git a/conf/cmi/language/sv/webform.webform.liikunta_toiminta_ja_tilankaytto.yml b/conf/cmi/language/sv/webform.webform.liikunta_toiminta_ja_tilankaytto.yml index 2acd6606d1..c8edc867e5 100644 --- a/conf/cmi/language/sv/webform.webform.liikunta_toiminta_ja_tilankaytto.yml +++ b/conf/cmi/language/sv/webform.webform.liikunta_toiminta_ja_tilankaytto.yml @@ -79,7 +79,7 @@ elements: | '#markup': 'Ge en redovisning om understödet som fåtts från Helsingfors stad. Redovisningen görs om understödet som beviljats för den senaste avslutade räkenskapsperioden. Redovisning görs inte om den innevarande räkenskapsperioden. Redovisningen krävs för att få ett nytt understöd. Om en redovisning inte görs, kommer ett understöd inte att beviljas eller betalas ut. Det beviljade understödet kan återkrävas om användningen av det tidigare understödet inte har redogjorts för på ett tillfredsställande sätt.' compensation_explanation: '#title': 'Redovisning om användningen av understödet' - '#help': 'I redovisningen ska det kortfattat anges hur det beviljade understödet har använts. Understödstagaren ska ordna sin bokföring så att användningen av understödet kan följas där. Om samfundet till exempel har fått hyresunderstöd ska det av resultaträkningen i bokslutet framgå både intäkter och utgifter vad gäller understödet. Mer information om användningen av understödet kan också skrivas i en separat bilaga som kan lämnas som Redovisning-bilaga.' + '#help': '

I redovisningen ska det kortfattat anges hur det beviljade understödet har använts. Understödstagaren ska ordna sin bokföring så att användningen av understödet kan följas där. Mer information om användningen av understödet kan också skrivas i en separat bilaga som kan lämnas som Redovisning-bilaga.

' '#counter_maximum_message': '%d/5000 tecken kvar' kayttotarkoitus: '#title': 'Användningsända­mål' @@ -123,7 +123,7 @@ elements: | tilankayttoavustus: '#title': 'Understöd för användning av idrottslokaler' maksetut_vuokrat_info: - '#markup': "

Sammanställning av de hyror som föreningen har betalatför regelbundna träningsskift förutom idrottstjänstens egna lokaler under föregående kalenderår 1.1. - 31.12.3. Avsnittet Hyror för idrottsanläggningar är obligatoriskt om du ansöker om understöd för användning av idrottslokaler.

\r\n" + '#markup': '

Sammanställning av de hyror som föreningen har betalatför regelbundna träningsskift förutom idrottstjänstens egna lokaler under föregående kalenderår 1.1. - 31.12.3. Avsnittet Hyror för idrottsanläggningar är obligatoriskt om du ansöker om understöd för användning av idrottslokaler.

' liikuntatiloista_maksetut_vuokrat_fieldset: '#title': 'Hyror betalda för idrottslokaler' tuntimaara_yhteensa: @@ -131,7 +131,8 @@ elements: | vuokrat_yhteensa: '#title': 'Totalt / EUR' seuraavalle_vuodelle_suunniteltu_muutos_tilojen_kaytossa_tunnit_: - '#title': 'Planerad ändring i användning av lokaler nästa år, +/- timmar och skäl' + '#title': 'Planerad väsentlig ändring i användning av lokaler nästa år, +/- timmar och skäl' + '#help': '

I beloppet av understödet för lokalanvändning kan enligt prövning beaktas väsentliga förändringar i föreningens användning av idrottslokaler rörande ansökningsåret. Med väsentliga förändringar avses: sammanslagning av föreningar, anslutning av en sektion eller sektioner till föreningen, avgång av en sektion eller sektioner från föreningen, en ny idrottslokal som hyrs av föreningen (hyresavtalet för lokalen i fråga ska bifogas ansökan) eller avstående från en idrottslokal som förvaltas eller ägs av föreningen.

' seuran_yhdistyksen_saamat_vuokrat_edellisen_kalenterivuoden_ajal: '#title': 'Föreningens hyresinkomster under föregående kalenderår 1.1. –31.12.' '#description': 'Om föreningen får hyresinkomster för sina lokaler, anges de här.' @@ -229,8 +230,9 @@ elements: | '#help': 'Utöver de VOK 1-utbildningar som ordnas av regionala idrottsorganisationer beaktas i beräkningen antalet handledare och tränare som har genomgått en utbildning för tränare och handledare som ordnas av ett grenförbund på minst motsvarande nivå och med motsvarande innehåll eller som har avlagt grundexamen i idrott, idrottsinstruktör (YH) eller magisterexamen i idrottsvetenskaper (idrottspedagogik eller motionsbiologi).' lajijaostot_helsinkilaisille_aktiiviharrastajille: '#title': 'Aktiva grengsektioner för helsingforsare' + '#help': '

I detta avsnitt kan en enskild aktiv idrottsutövare rapporteras mer än en gång, om den utövaren uppfyller definitionen av aktiv utövare i flera olika grensektioner.

' lajijaostot_info: - '#markup': "

Regelbunden handledd idrottsverksamhet som ordnas av föreningen, enligt gren. Ange här antalet aktiva idrottsutövare från Helsingfors under föregående år, per sport, samt deras realiserade träningstimmar.

\r\n" + '#markup': '

Regelbunden handledd idrottsverksamhet som ordnas av föreningen, enligt gren. Ange här antalet aktiva idrottsutövare från Helsingfors under föregående år, per sport, samt deras realiserade träningstimmar per åldersgrupp.

' club_section: '#multiple__add_more_button_label': 'Lägg till en sport' '#multiple__item_label': 'sport' diff --git a/conf/cmi/webform.webform.liikunta_toiminta_ja_tilankaytto.yml b/conf/cmi/webform.webform.liikunta_toiminta_ja_tilankaytto.yml index 615a789c9c..00fb3eb18c 100644 --- a/conf/cmi/webform.webform.liikunta_toiminta_ja_tilankaytto.yml +++ b/conf/cmi/webform.webform.liikunta_toiminta_ja_tilankaytto.yml @@ -370,7 +370,7 @@ elements: |- compensation_explanation: '#type': textarea '#title': 'Selvitys avustuksen käytöstä' - '#help': 'Käyttöselvityksessä tulee kuvata lyhyesti, miten myönnetty avustus on käytetty. Avustuksen saajan on järjestettävä kirjanpitonsa niin, että avustuksen käyttöä voidaan sieltä seurata. Esimerkiksi jos yhteisö on saanut vuokra-avustusta, tilinpäätöksen tuloslaskelmasta tulee käydä ilmi avustuksen toteutuminen sekä tuloissa että menoissa. Lisää tietoja avustuksen käytöstä voi myös kirjoittaa erilliseen liitteeseen, jonka voi palauttaa Käyttöselvitys-liite kohdasta.' + '#help': '

Käyttöselvityksessä tulee kuvata lyhyesti, miten myönnetty avustus on käytetty. Avustuksen saajan on järjestettävä kirjanpitonsa niin, että avustuksen käyttöä voidaan sieltä seurata. Lisää tietoja avustuksen käytöstä voi myös kirjoittaa erilliseen liitteeseen, jonka voi palauttaa Käyttöselvitys-liite kohdasta.

' '#maxlength': 5000 '#counter_type': character '#counter_maximum': 5000 @@ -496,8 +496,7 @@ elements: |- '#title': Tilankäyttöavustus maksetut_vuokrat_info: '#type': webform_markup - '#markup': | -

Yhteenveto seuran/yhdistyksen maksamista säännöllisten harjoitusvuorojen vuokrista, muiden kuin liikuntapalvelun omien tilojen osalta, edellisen kalenterivuoden 1.1. - 31.12. ajalta. Liikuntatiloista maksetut vuokrat -kohta on pakollinen täyttää, mikäli haet tilankäyttöavustusta.

+ '#markup': '

Yhteenveto seuran/yhdistyksen maksamista säännöllisten harjoitusvuorojen vuokrista, muiden kuin liikuntapalvelun omien tilojen osalta, edellisen kalenterivuoden 1.1. - 31.12. ajalta. Liikuntatiloista maksetut vuokrat -kohta on pakollinen täyttää, mikäli haet tilankäyttöavustusta.

' liikuntatiloista_maksetut_vuokrat_fieldset: '#type': fieldset '#title': 'Liikuntatiloista maksetut vuokrat' @@ -538,7 +537,8 @@ elements: |- - webform--small seuraavalle_vuodelle_suunniteltu_muutos_tilojen_kaytossa_tunnit_: '#type': textfield - '#title': 'Seuraavalle vuodelle suunniteltu muutos tilojen käytössä +/- tunnit ja syy' + '#title': 'Seuraavalle vuodelle suunniteltu merkittävä muutos tilojen käytössä +/- tunnit ja vuokrasumma sekä syy muutokseen.' + '#help': '

Tilankäyttöavustuksen määrässä voidaan harkinnanvaraisesti huomioida hakuvuotta koskevat merkittävät muutokset seuran liikuntatilojen käytössä. Merkittäviksi muutoksiksi katsotaan: seurojen yhteenliittyminen, jaoston tai jaostojen liittyminen seuraan tai irtautuminen seurasta, seuran vuokraama tai omistama uusi liikuntatila (kyseisen tilan vuokrasopimus tulee liittää hakemukseen) tai seuran hallinnoimasta tai omistamasta liikuntatilasta luopuminen.

' '#states': required: ':input[name="tilankayttosumma"]': @@ -815,10 +815,10 @@ elements: |- lajijaostot_helsinkilaisille_aktiiviharrastajille: '#type': webform_section '#title': 'Lajijaostot helsinkiläisille aktiiviharrastajille' + '#help': '

Tässä kohdassa yksittäinen aktiiviharrastaja voi tulla ilmoitetuksi useamman kerran, mikäli aktiivi täyttää aktiiviharrastajan määritelmän useammassa eri lajijaostossa.

' lajijaostot_info: '#type': webform_markup - '#markup': | -

Seuran/yhdistyksen järjestämä säännöllinen ohjattu liikuntatoiminta lajeittain. Ilmoita tähän lajeittain edellisen vuoden helsinkiläisten aktiiviharrastajien määrät sekä heidän toteutuneet harjoitustunnit.

+ '#markup': '

Seuran/yhdistyksen järjestämä säännöllinen ohjattu liikuntatoiminta lajeittain. Ilmoita tähän lajeittain edellisen vuoden helsinkiläisten aktiiviharrastajien määrät sekä heidän toteutuneet harjoitustunnit ikäryhmittäin.

' club_section: '#type': club_section_composite '#title': '' diff --git a/public/modules/custom/grants_club_section/src/Element/ClubSectionComposite.php b/public/modules/custom/grants_club_section/src/Element/ClubSectionComposite.php index fc83acb657..ab354e1d06 100644 --- a/public/modules/custom/grants_club_section/src/Element/ClubSectionComposite.php +++ b/public/modules/custom/grants_club_section/src/Element/ClubSectionComposite.php @@ -102,7 +102,7 @@ public static function getCompositeElements(array $element): array { '#type' => 'textfield', '#input_mask' => "'alias': 'numeric', 'groupSeparator': ' ', 'digits': '0'", '#pattern' => '^[0-9 ]*$', - '#title' => t('Men (20-63 years)', [], $tOpts), + '#title' => t('Men from Helsinki (20-63 years)', [], $tOpts), '#prefix' => '
', '#element_validate' => [ [FieldValueValidator::class, 'validate'], @@ -111,7 +111,7 @@ public static function getCompositeElements(array $element): array { $elements['women'] = [ '#type' => 'textfield', - '#title' => t('Women (20-63 years)', [], $tOpts), + '#title' => t('Women from Helsinki (20-63 years)', [], $tOpts), '#input_mask' => "'alias': 'numeric', 'groupSeparator': ' ', 'digits': '0'", '#pattern' => '^[0-9 ]*$', '#element_validate' => [ @@ -123,18 +123,21 @@ public static function getCompositeElements(array $element): array { '#type' => 'textfield', '#input_mask' => "'alias': 'numeric', 'groupSeparator': ' ', 'digits': '0'", '#pattern' => '^[0-9 ]*$', - '#title' => t('Others (20-63 years)', [], $tOpts), + '#title' => t('Others from Helsinki (20-63 years)', [], $tOpts), '#suffix' => '
', '#element_validate' => [ [FieldValueValidator::class, 'validate'], ], ]; + $hoursHelp = t('

In the practice hours section, do not report the training output of individual actives, but the actual practice hours organized for Helsinki residents belonging to the age group.

If the actual number of training hours for an age group cannot be ascertained (e.g. many mixed groups), can the share of that age group be calculated from the total number of hours based on the share of the number of active members from Helsinki in the age group out of the total number of active members from Helsinki. E.g. the total number of hours in the division (all mixed groups) is 100 hours, where 10 adults and 20 under 20-year-olds are active: the number of hours for adults is 33 hours and for under 20-year-olds 67 hours. However, the actual number of hours realized for the age group should be used primarily.

', [], $tOpts); + $elements['adultHours'] = [ '#type' => 'textfield', '#input_mask' => "'alias': 'numeric', 'groupSeparator': ' ', 'digits': '0'", '#pattern' => '^[0-9 ]*$', '#title' => t('Practice hours of adults (20-63 years)', [], $tOpts), + '#help' => $hoursHelp, '#prefix' => '
', '#suffix' => '
', '#element_validate' => [ @@ -146,7 +149,7 @@ public static function getCompositeElements(array $element): array { '#type' => 'textfield', '#input_mask' => "'alias': 'numeric', 'groupSeparator': ' ', 'digits': '0'", '#pattern' => '^[0-9 ]*$', - '#title' => t('Men (64 years and over)', [], $tOpts), + '#title' => t('Men from Helsinki (64 years and over)', [], $tOpts), '#prefix' => '
', '#element_validate' => [ [FieldValueValidator::class, 'validate'], @@ -157,7 +160,7 @@ public static function getCompositeElements(array $element): array { '#type' => 'textfield', '#input_mask' => "'alias': 'numeric', 'groupSeparator': ' ', 'digits': '0'", '#pattern' => '^[0-9 ]*$', - '#title' => t('Women (64 years and over)', [], $tOpts), + '#title' => t('Women from Helsinki (64 years and over)', [], $tOpts), '#element_validate' => [ [FieldValueValidator::class, 'validate'], ], @@ -167,7 +170,7 @@ public static function getCompositeElements(array $element): array { '#type' => 'textfield', '#input_mask' => "'alias': 'numeric', 'groupSeparator': ' ', 'digits': '0'", '#pattern' => '^[0-9 ]*$', - '#title' => t('Others (64 years and over)', [], $tOpts), + '#title' => t('Others from Helsinki (64 years and over)', [], $tOpts), '#suffix' => '
', '#element_validate' => [ [FieldValueValidator::class, 'validate'], @@ -179,6 +182,7 @@ public static function getCompositeElements(array $element): array { '#input_mask' => "'alias': 'numeric', 'groupSeparator': ' ', 'digits': '0'", '#pattern' => '^[0-9 ]*$', '#title' => t('Practice hours of adults (64 years and over)', [], $tOpts), + '#help' => $hoursHelp, '#prefix' => '
', '#suffix' => '
', '#element_validate' => [ @@ -190,7 +194,7 @@ public static function getCompositeElements(array $element): array { '#type' => 'textfield', '#input_mask' => "'alias': 'numeric', 'groupSeparator': ' ', 'digits': '0'", '#pattern' => '^[0-9 ]*$', - '#title' => t('Boys (under 20 years of age)', [], $tOpts), + '#title' => t('Boys from Helsinki (under 20 years of age)', [], $tOpts), '#prefix' => '
', '#element_validate' => [ [FieldValueValidator::class, 'validate'], @@ -201,7 +205,7 @@ public static function getCompositeElements(array $element): array { '#type' => 'textfield', '#input_mask' => "'alias': 'numeric', 'groupSeparator': ' ', 'digits': '0'", '#pattern' => '^[0-9 ]*$', - '#title' => t('Girls (under 20 years of age)', [], $tOpts), + '#title' => t('Girls from Helsinki (under 20 years of age)', [], $tOpts), '#element_validate' => [ [FieldValueValidator::class, 'validate'], ], @@ -211,7 +215,7 @@ public static function getCompositeElements(array $element): array { '#type' => 'textfield', '#input_mask' => "'alias': 'numeric', 'groupSeparator': ' ', 'digits': '0'", '#pattern' => '^[0-9 ]*$', - '#title' => t('Others (under 20 years of age)', [], $tOpts), + '#title' => t('Others from Helsinki (under 20 years of age)', [], $tOpts), '#suffix' => '
', '#element_validate' => [ [FieldValueValidator::class, 'validate'], @@ -223,6 +227,7 @@ public static function getCompositeElements(array $element): array { '#input_mask' => "'alias': 'numeric', 'groupSeparator': ' ', 'digits': '0'", '#pattern' => '^[0-9 ]*$', '#title' => t('Practice hours of children/young people (under 20 years of age)', [], $tOpts), + '#help' => $hoursHelp, '#prefix' => '
', '#suffix' => '
', '#element_validate' => [ diff --git a/public/modules/custom/grants_club_section/translations/fi.po b/public/modules/custom/grants_club_section/translations/fi.po index 2560d09e8e..d10d96c757 100644 --- a/public/modules/custom/grants_club_section/translations/fi.po +++ b/public/modules/custom/grants_club_section/translations/fi.po @@ -344,48 +344,52 @@ msgid "Sport" msgstr "Laji" msgctxt "grants_club_section" -msgid "Women (20-63 years)" -msgstr "Naiset (20-63-vuotiaat)" +msgid "Women from Helsinki (20-63 years)" +msgstr "Helsinkiläiset naiset (20-63-vuotiaat)" msgctxt "grants_club_section" -msgid "Men (20-63 years)" -msgstr "Miehet (20-63-vuotiaat)" +msgid "Men from Helsinki (20-63 years)" +msgstr "Helsinkiläiset miehet (20-63-vuotiaat)" msgctxt "grants_club_section" -msgid "Others (20-63 years)" -msgstr "Muut (20-63-vuotiaat)" +msgid "Others from Helsinki (20-63 years)" +msgstr "Helsinkiläiset muut (20-63-vuotiaat)" msgctxt "grants_club_section" msgid "Practice hours of adults (20-63 years)" msgstr "20-63-vuotiaiden harjoitustunnit yhteensä" msgctxt "grants_club_section" -msgid "Men (64 years and over)" -msgstr "Miehet (64 vuotta täyttäneet)" +msgid "

In the practice hours section, do not report the training output of individual actives, but the actual practice hours organized for Helsinki residents belonging to the age group.

If the actual number of training hours for an age group cannot be ascertained (e.g. many mixed groups), can the share of that age group be calculated from the total number of hours based on the share of the number of active members from Helsinki in the age group out of the total number of active members from Helsinki. E.g. the total number of hours in the division (all mixed groups) is 100 hours, where 10 adults and 20 under 20-year-olds are active: the number of hours for adults is 33 hours and for under 20-year-olds 67 hours. However, the actual number of hours realized for the age group should be used primarily.

" +msgstr "

Älä ilmoita harjoitustunnit-kohdassa yksittäisten harrastajien toteutuneita liikuntasuoritteita tunteina, vaan ikäryhmään kuuluville helsinkiläisille järjestetyt toteutuneet harjoitustunnit.

Mikäli ikäryhmän todellinen harjoitustuntimäärä ei ole selvitettävissä (esim. paljon sekaryhmiä), voit laskea kokonaistuntimäärästä kyseisen ikäryhmän osuuden perustuen ikäryhmän helsinkiläisten aktiiviharrastajien määrän osuuteen helsinkiläisten aktiiviharrastajien kokonaismäärästä. Esim. Jaoston kokonaistuntimäärä (kaikki sekaryhmiä) on 100 tuntia, jossa liikkuu aktiivisesti 10 aikuista ja 20 alle 20-vuotiasta: aikuisten tuntimäärä 33 tuntia ja alle 20-vuotiaiden tuntimäärä 67 tuntia. Ensisijaisesti tulee kuitenkin käyttää ikäryhmän osalta todellista toteutunutta tuntimäärää.

" msgctxt "grants_club_section" -msgid "Women (64 years and over)" -msgstr "Naiset (64 vuotta täyttäneet)" +msgid "Men from Helsinki (64 years and over)" +msgstr "Helsinkiläiset miehet (64 vuotta täyttäneet)" msgctxt "grants_club_section" -msgid "Others (64 years and over)" -msgstr "Muut (64 vuotta täyttäneet)" +msgid "Women from Helsinki (64 years and over)" +msgstr "Helsinkiläiset naiset (64 vuotta täyttäneet)" + +msgctxt "grants_club_section" +msgid "Others from Helsinki (64 years and over)" +msgstr "Helsinkiläiset muut (64 vuotta täyttäneet)" msgctxt "grants_club_section" msgid "Practice hours of adults (64 years and over)" msgstr "64 vuotta täyttäneiden harjoitustunnit yhteensä" msgctxt "grants_club_section" -msgid "Boys (under 20 years of age)" -msgstr "Pojat (alle 20-vuotiaat)" +msgid "Boys from Helsinki (under 20 years of age)" +msgstr "Helsinkiläiset pojat (alle 20-vuotiaat)" msgctxt "grants_club_section" -msgid "Girls (under 20 years of age)" -msgstr "Tytöt (alle 20-vuotiaat)" +msgid "Girls from Helsinki (under 20 years of age)" +msgstr "Helsinkiläiset tytöt (alle 20-vuotiaat)" msgctxt "grants_club_section" -msgid "Others (under 20 years of age)" -msgstr "Muut (alle 20-vuotiaat)" +msgid "Others from Helsinki (under 20 years of age)" +msgstr "Helsinkiläiset muut (alle 20-vuotiaat)" msgctxt "grants_club_section" msgid "Practice hours of children/young people (under 20 years of age)" diff --git a/public/modules/custom/grants_club_section/translations/sv.po b/public/modules/custom/grants_club_section/translations/sv.po index a8c1e3f35d..5becc618b5 100644 --- a/public/modules/custom/grants_club_section/translations/sv.po +++ b/public/modules/custom/grants_club_section/translations/sv.po @@ -344,15 +344,15 @@ msgid "Sport" msgstr "Sport" msgctxt "grants_club_section" -msgid "Women (20-63 years)" +msgid "Women from Helsinki (20-63 years)" msgstr "Kvinnor (20-63 år)" msgctxt "grants_club_section" -msgid "Men (20-63 years)" +msgid "Men from Helsinki (20-63 years)" msgstr "Män (20-63 år)" msgctxt "grants_club_section" -msgid "Others (20-63 years)" +msgid "Others from Helsinki (20-63 years)" msgstr "Övriga (20-63 år)" msgctxt "grants_club_section" @@ -360,15 +360,19 @@ msgid "Practice hours of adults (20-63 years)" msgstr "Träningstimmar för vuxna (20-63 år)" msgctxt "grants_club_section" -msgid "Men (64 years and over)" +msgid "

In the practice hours section, do not report the training output of individual actives, but the actual practice hours organized for Helsinki residents belonging to the age group.

If the actual number of training hours for an age group cannot be ascertained (e.g. many mixed groups), can the share of that age group be calculated from the total number of hours based on the share of the number of active members from Helsinki in the age group out of the total number of active members from Helsinki. E.g. the total number of hours in the division (all mixed groups) is 100 hours, where 10 adults and 20 under 20-year-olds are active: the number of hours for adults is 33 hours and for under 20-year-olds 67 hours. However, the actual number of hours realized for the age group should be used primarily.

" +msgstr "

I avsnittet träningstimmar, rapportera inte enskilda idrottsutövarnas träningsprestationer i timmar, utan de faktiska träningstimmar som organiserats för helsingforsare som tillhör åldersgruppen.

Om det faktiska antalet träningstimmar för en åldersgrupp inte kan fastställas (t. ex. många blandade träningsgrupper), kan andelen av den åldersgruppen beräknas från det totala antalet timmar baserat på andelen av antalet aktiva idrottsutövare från Helsingfors i åldersgruppen av det totala antalet aktiva idrottsutövare från Helsingfors. T. ex. totala antalet timmar i grensektionen (alla blandade grupper) är 100 timmar, där 10 vuxna och 20 under 20-åringar är aktiva: antalet timmar för vuxna är 33 timmar och för under 20-åringar 67 timmar. Det faktiska antalet realiserade timmar för åldersgruppen bör dock i första hand användas.

" + +msgctxt "grants_club_section" +msgid "Men from Helsinki (64 years and over)" msgstr "Män (64 år och äldre)" msgctxt "grants_club_section" -msgid "Women (64 years and over)" +msgid "Women from Helsinki (64 years and over)" msgstr "Kvinnor (64 år och äldre)" msgctxt "grants_club_section" -msgid "Others (64 years and over)" +msgid "Others from Helsinki (64 years and over)" msgstr "Övriga (64 år och äldre)" msgctxt "grants_club_section" @@ -376,15 +380,15 @@ msgid "Practice hours of adults (64 years and over)" msgstr "Träningstimmar för vuxna (64 år och äldre)" msgctxt "grants_club_section" -msgid "Boys (under 20 years of age)" +msgid "Boys from Helsinki (under 20 years of age)" msgstr "Pojkar (under 20 år)" msgctxt "grants_club_section" -msgid "Girls (under 20 years of age)" +msgid "Girls from Helsinki (under 20 years of age)" msgstr "Flickor (under 20 år)" msgctxt "grants_club_section" -msgid "Others (under 20 years of age)" +msgid "Others from Helsinki (under 20 years of age)" msgstr "Övriga (under 20 år)" msgctxt "grants_club_section" diff --git a/public/themes/custom/hdbt_subtheme/dist/css/styles.min.css b/public/themes/custom/hdbt_subtheme/dist/css/styles.min.css index c792cc8314..bfeef6de51 100644 --- a/public/themes/custom/hdbt_subtheme/dist/css/styles.min.css +++ b/public/themes/custom/hdbt_subtheme/dist/css/styles.min.css @@ -1 +1 @@ -body{--webform-element-width--input-small: 184px;--webform-element-width--input-medium: 332px;--webform-element-width--input-large: 591px;--webform-element-width--fieldset: 714px}.hel-icon--size-xs,.hds-icon--size-xs{height:16px;width:16px}.hel-icon--size-s,.hds-icon--size-s{height:24px;width:24px}.hel-icon--size-m,.hds-icon--size-m{height:32px;width:32px}.hel-icon--size-l,.hds-icon--size-l{height:48px;width:48px}.hel-icon--size-xl,.hds-icon--size-xl{height:64px;width:64px}.hel-icon.hel-icon--pen-line{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,");mask-image:url("data:image/svg+xml;charset=utf-8,")}.hel-icon.hds-icon--company{background:var(--color-black);-webkit-mask-image:url("data:image/svg+xml;charset=utf-8, ");mask-image:url("data:image/svg+xml;charset=utf-8, ")}.hds-button--secondary:not(.eu-cookie-compliance-default-button):not(.eu-cookie-compliance-save-preferences-button){--background-color: transparent;--background-color-hover: var(--color-black-80);--background-color-focus: transparent;--background-color-hover-focus: var(--color-black-80);--background-color-disabled: transparent;--color: var(--color-black);--color-hover: var(--color-white);--color-focus: var(--color-black);--color-hover-focus: var(--color-black);--color-disabled: var(--color-black-40)}.hds-button--secondary:not(:disabled):not(.eu-cookie-compliance-default-button):not(.eu-cookie-compliance-save-preferences-button),.hds-button--primary:not(:disabled){border-color:transparent;border-color:var(--color-black, transparent)}.hds-button.hds-button--supplementary .hds-button__label{margin:0;padding:0 var(--spacing-2-xs)}.hds-button.hds-button--supplementary::after,.hds-button.hds-button--supplementary::before{display:none !important}.hds-button--supplementary:not(:disabled){--background-color-hover: rgba(0, 0, 0, 0.1);background:rgba(0,0,0,0);border-color:rgba(0,0,0,0)}.hds-button--supplementary:not(:disabled):hover{background-color:var(--background-color-hover)}.hds-button--alert{--background-color: rgb(255, 0, 0)}a.hds-button.webform-button--delete-draft:not(:disabled){text-decoration:none}a.hds-button.webform-button--delete-draft:not(:disabled) .hds-button__label_wrapper{display:inline}a.hds-button.webform-button--delete-draft:not(:disabled) .hds-button__label{text-decoration:underline}a.hds-button.webform-button--delete-draft:not(:disabled):hover .hds-button__label{text-decoration:none}.openid-connect-login-form input[type=submit].hds-button{width:220px}.hds-button__label_wrapper{align-items:center;display:flex}.hds-button__label_wrapper:not(.hds-button)>.hds-button__label{margin:0 var(--spacing-2-xs)}.hds-link{--link-visited-color: var(--color-black);--link-color: var(--color-black)}.hds-card{--background-color: var(--color-white);--border-color: var(--color-black-90);--color: var(--color-black-90);--border-width: 2px;--padding-horizontal: var(--spacing-l);--padding-vertical: var(--spacing-m);background-color:var(--background-color);color:var(--color);padding:var(--padding-vertical) var(--padding-horizontal)}.hds-card--border{border:var(--border-width) solid var(--border-color)}.hds-card__body{display:grid;grid-gap:var(--spacing-m);gap:var(--spacing-m);margin-bottom:var(--spacing-l)}.hds-card__body:last-child{margin-bottom:0}.hds-card__heading{font-size:var(--fontsize-heading-m);font-weight:bold;line-height:var(--lineheight-m)}.hds-card__text{font-size:var(--fontsize-body-m);line-height:var(--lineheight-l)}.hds-card--applicant-role{margin-bottom:var(--spacing-l);margin-right:0;max-width:400px;width:100%}.hds-card__heading-m{font-size:var(--fontsize-heading-m);font-weight:500;letter-spacing:-0.2px;line-height:32px;margin-top:0}.grants-profile--menuitem--login,.grants-profile--menuitem--logout{align-items:center;display:flex;flex-flow:column;font-size:var(--fontsize-body-s);height:var(--spacing-xl);margin-left:var(--spacing-2-xs);margin-right:var(--spacing-2-xs);position:relative;text-align:center;width:var(--spacing-xl)}.grants-profile--menuitem--login .hel-icon,.grants-profile--menuitem--logout .hel-icon{display:block;margin:auto}.grants-profile--menuitem--login-triggertext,.grants-profile--menuitem--logout-triggertext{clip:rect(1px, 1px, 1px, 1px);clip-path:inset(50%);display:block;max-height:1px;max-width:1px;opacity:0;overflow:hidden;position:absolute;white-space:nowrap}.block--grants-profile--menuitem{align-items:center;display:flex;grid-area:brand;z-index:2}.block--branding{flex-grow:10}.grants-frontpage-info-block{margin-bottom:var(--spacing-layout-xl)}.grants-profile--menuitem{height:var(--spacing-m);margin-left:var(--spacing-2-xs);margin-right:var(--spacing-2-xs);position:relative;width:var(--spacing-m)}@media(min-width: 768px){.grants-profile--menuitem{height:var(--spacing-2-xl);width:var(--spacing-2-xl)}}.grants-profile--menuitem a{text-decoration:none}.grants-profile--menuitem--notifications{background-color:var(--color-error);border:2px var(--color-white) solid;border-radius:50%;color:var(--color-white);font-size:var(--fontsize-body-s);font-weight:bold;height:var(--spacing-xs) 1.25;line-height:var(--spacing-layout-2-xs);position:absolute;right:-5px;text-align:center;top:-5px;width:var(--spacing-xs) 1.25;z-index:2}.grants-profile--menuitem--initials{border-radius:50%;font-weight:bold;height:var(--spacing-m);line-height:var(--spacing-m);text-align:center;vertical-align:middle;width:var(--spacing-m)}@media(min-width: 768px){.grants-profile--menuitem--initials{height:var(--spacing-2-xl);line-height:var(--spacing-2-xl);width:var(--spacing-2-xl)}}.grants-profile--menuitem--initials:hover,.grants-profile--menuitem--initials:active,.grants-profile--menuitem--initials:focus{text-decoration:underline}.grants-profile--menuitem--initials-colorscheme-2{background-color:var(--color-bus);color:var(--color-white)}.grants-profile--menuitem--initials-colorscheme-1{background-color:var(--color-engel);color:var(--color-black)}.grants-profile--menuitem--initials-colorscheme-0{background-color:var(--color-tram);color:var(--color-white)}.sidebar-important-links{margin-top:var(--spacing-2-xl)}.sidebar-important-links .sidebar-text .sidebar-text__text-content>p{padding:var(--spacing-s) var(--spacing-m)}.block--service-page-banner{background-color:var(--color-engel);margin-top:var(--spacing-layout-s);padding:var(--spacing-layout-s)}.block--service-page-banner h2{margin-top:0}.block--service-page-banner .hds-icon{margin-bottom:var(--spacing-layout-s)}.hds-button.service-page-sidebar-link{background-color:var(--hdbt-color-palette--secondary);padding:var(--spacing-xs)}.hds-button.service-page-sidebar-link:hover{color:var(--color-black)}.terms_block{padding-bottom:var(--spacing-4-xl)}#block-servicepageauthblock h2,#block-servicepageanonblock h2{--line-height: 1.3;font-size:1.25rem;font-weight:500;line-height:var(--line-height)}@media(min-width: 992px){#block-servicepageauthblock h2,#block-servicepageanonblock h2{--line-height: 1.1666666667;font-size:1.5rem;font-weight:500}}#block-servicepageauthblock .hds-button,#block-servicepageanonblock .hds-button{margin-top:var(--spacing-m)}.grants-service-page-block{background-color:var(--color-alert-light);margin-top:var(--spacing-m);padding:var(--spacing-m)}.grants-service-page-block h3{font-size:var(--fontsize-heading-s);margin-top:0}.grants-service-page-block .hel-icon{vertical-align:text-bottom}.grants-service-page-block--auth{background-color:var(--color-info-light)}.hel-icon.hel-icon--swap-user{-webkit-mask-image:url('data:image/svg+xml, ');mask-image:url('data:image/svg+xml, ')}.nav-toggle-dropdown--profile .profile__information{background-color:var(--color-silver-light)}.nav-toggle-dropdown--profile .profile__full-name{font-weight:bold}.nav-toggle-dropdown--profile .grants-profile--menuitem--mandate,.nav-toggle-dropdown--profile .grants-profile--menuitem--switch-role{--line-height: 1.5555555556;font-size:1.125rem;font-weight:400;line-height:var(--line-height);border-top:1px solid #ccc;border-bottom:1px solid #ccc;display:block;font-weight:normal;padding:16px;text-decoration:none;width:100%}@media(min-width: 992px){.nav-toggle-dropdown--profile .grants-profile--menuitem--mandate,.nav-toggle-dropdown--profile .grants-profile--menuitem--switch-role{border-bottom:none}}.nav-toggle-dropdown--profile .grants-profile--menuitem--mandate:hover,.nav-toggle-dropdown--profile .grants-profile--menuitem--switch-role:hover{text-decoration:underline}.nav-toggle-dropdown--profile .grants-profile--menuitem--mandate:focus,.nav-toggle-dropdown--profile .grants-profile--menuitem--switch-role:focus{outline:3px solid #000;outline-offset:-3px}.application-timeout-message{display:none;padding-left:16px;padding-left:var(--spacing-s, 16px);position:fixed;right:0;top:50%;z-index:100}.application-timeout-message.slide-in{animation:slide-in-right .5s forwards ease;display:block}.application-timeout-message .close-application-timeout-message{cursor:pointer;font-size:1.25rem;position:absolute;right:1.25rem}@keyframes slide-in-right{from{right:-500px}to{right:1.25rem}}.view_application_search_search_api .main-content{margin-top:0}.view_application_search_search_api .search-result-amount--wrapper{align-items:center;display:flex}.view_application_search_search_api .search-result-amount--wrapper p{margin-top:0}.view_application_search_search_api select.search-result-amount{border:1px solid var(--color-black-50);margin-left:var(--spacing-l);margin-right:var(--spacing-2-xs)}.view_application_search_search_api .search-filter-button{background-color:var(--color-black);border-radius:180px;border:0;color:var(--color-white);display:inline-block;margin:0 var(--spacing-2-xs) var(--spacing-2-xs) 0;padding:var(--spacing-2-xs) var(--spacing-xs)}.view_application_search_search_api .search-filter-button:focus{--focus-outline-color: #000000;box-shadow:none;outline:3px solid var(--focus-outline-color);outline:var(--outline-width, 3px) solid var(--focus-outline-color);outline-offset:2px;outline-offset:var(--outline-gutter, 2px)}.view_application_search_search_api .search-filter-button span{vertical-align:middle}.view_application_search_search_api .search-filter-button span.hel-icon:hover{cursor:pointer}.view-application-search-search-api .main-content{margin-top:var(--spacing-layout-s)}.view-application-search-search-api .main-content .view-header{align-items:center;display:flex;margin-bottom:var(--spacing-layout-s)}.application_search--link{display:block;height:100%;padding-bottom:var(--spacing-m);position:relative;text-decoration:none}.application_search--link::after{--icon-size: 1.5rem;background-color:#000;background-size:contain;content:"";display:inline-block;height:calc(var(--line-height) * 1em);height:var(--icon-size, calc(var(--line-height) * 1em));-webkit-mask-image:var(--hel-icon--arrow-right);mask-image:var(--hel-icon--arrow-right);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);-webkit-mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));vertical-align:bottom;width:calc(var(--line-height) * 1em);width:var(--icon-size, calc(var(--line-height) * 1em));transition:transform .2s linear;bottom:var(--spacing-s);content:"";display:block;flex-shrink:0;left:var(--spacing-m);margin-left:-4px;margin-top:8px;position:absolute}@media(prefers-reduced-motion){.application_search--link::after{transition:none}}@media(min-width: 576px){.application_search--link::after{--icon-size: 3rem;margin-left:-8px;margin-top:16px}}.application_search--link:focus h3,.application_search--link:hover h3{text-decoration:none}.application_search--link:focus::after,.application_search--link:hover::after{transform:translateX(8px)}@media(prefers-reduced-motion){.application_search--link:focus::after,.application_search--link:hover::after{transform:none}}.application_search--filter-wrapper{background:var(--color-black-5)}.application_search--filter-wrapper h2{font-size:var(--fontsize-heading-m);margin-bottom:var(--spacing-layout-s);margin-top:var(--spacing-layout-s)}.application_search--filter-wrapper form{align-items:center;border-bottom:2px solid var(--color-black-20);display:flex;flex-flow:row wrap;gap:var(--spacing-s);justify-content:space-between;margin-bottom:var(--spacing-layout-s);padding-bottom:var(--spacing-layout-s)}.application_search--filter-wrapper form .form-item{margin-bottom:0;min-width:-moz-fit-content;min-width:fit-content;width:calc((100% - var(--spacing-s) - var(--spacing-s))/3)}.application_search--filter-wrapper form .form-item label{color:var(--label-color-default);font-size:var(--fontsize-body-m);font-weight:500;margin-bottom:var(--spacing-3-xs)}.application_search--filter-wrapper form .form-item .grant-applications--select-wrapper{min-width:100%;width:100%}.application_search--filter-wrapper form .hds-text-input:first-child{max-width:none;width:100%}.application_search--filter-wrapper form .hds-text-input:first-child input{width:100%}.application_search--filter-wrapper form .form-actions{align-items:center;display:flex;gap:16px;order:6;padding-top:var(--spacing-m);width:100%}@media(min-width: 768px){.application_search--filter-wrapper form .form-actions{width:17%}}.application_search--filter-wrapper form .form-actions input{min-width:250px;width:100%}.application_search--filter-wrapper form .form-item-items-per-page{display:none}.application_search--filter-wrapper form .form-item-kohderyhma{order:1}.application_search--filter-wrapper form .form-item-avustuslaji{order:2}.application_search--filter-wrapper form .form-item-hakija{order:3}.application_search--filter-wrapper form .form-item-search{max-width:100%;order:4;width:50%}.application_search--filter-wrapper form .form-item-application-open{page-break-before:left;-moz-column-break-before:left;break-before:left;display:block;margin-top:var(--spacing-m);order:5;width:30%}.application_search--filter-wrapper form [data-drupal-selector=edit-reset]{background-color:rgba(0,0,0,0);border:0;color:var(--color-black)}.application_search--filter-wrapper .hds-koros svg pattern{color:var(--color-black-5)}.application_search--filter-wrapper .hero .hero__container{padding-bottom:var(--spacing-m)}.application_search--filters{padding-bottom:var(--spacing-layout-m);padding-top:0}.application_search--rows{display:flex;flex-direction:column;flex-wrap:wrap;justify-content:flex-start;width:100%}@media(min-width: 576px){.application_search--rows{flex-direction:row;margin-left:calc(-1*var(--spacing-m));width:calc(100% + var(--spacing-m))}}.application_search--row{box-shadow:1px 2px 4px 0 rgba(0,0,0,.5);margin-bottom:var(--spacing-l);position:relative;width:100%}@media(min-width: 576px){.application_search--row{margin-left:var(--spacing-m);width:calc(50% - var(--spacing-m))}}@media(min-width: 992px){.application_search--row{width:calc(33.3333333333% - var(--spacing-m))}}.application_search--row h3{font-size:var(--fontsize-heading-m);margin-top:var(--spacing-xs)}.application_search--row .views-field-search-api-excerpt{height:auto;overflow:auto;word-break:normal}.application_search--row .views-field{padding:var(--spacing-xs) var(--spacing-m)}.application_search--row .views-field-field-target-group{padding:0}.application_search--row .views-field-field-avustuslaji{padding:var(--spacing-xs) var(--spacing-m) var(--spacing-layout-m) var(--spacing-m)}.application_search--row .views-field-field-avustuslaji .tag_avustuslaji{background:var(--color-black);border-radius:var(--spacing-m);color:var(--color-white);display:inline-block;margin-bottom:var(--spacing-2-xs);padding:var(--spacing-3-xs) var(--spacing-xs)}.application_search--row .views-field-field-application-period .field-content{align-items:center;display:flex;gap:var(--spacing-s);position:relative}.application_search--row .views-field-field-application-period .field-content span{display:block}.application_search--row .tag_target_group{background:var(--color-black-20);color:var(--color-black);font-size:var(--fontsize-body-s);font-weight:bold;padding:var(--spacing-m);text-align:center;text-transform:uppercase;width:100%}.application_search--row .tag_target_group_12{background:var(--color-brick-medium-light)}.application_search--row .tag_target_group_20{background:var(--color-copper)}.application_search--row .tag_target_group_21{background:var(--color-metro-medium-light)}.application_search--row .tag_target_group_22{background:var(--color-suomenlinna-medium-light)}.application_search--row .tag_target_group_23{background:var(--color-engel)}.application_search--row .tag_target_group_24{background:var(--color-bus-medium-light)}.application_search--row .tag_target_group_25{background:var(--color-coat-of-arms-medium-light)}.application_search--row .tag_target_group_26{background:var(--color-gold-medium-light)}.application_search--row .tag_target_group_27{background:var(--color-tram-medium-light)}.application_search--row .tag_target_group_28{background:var(--color-summer-light)}.application_search--row .tag_target_group_29{background:var(--color-fog)}.application_search--row .tag_target_group_30{background:var(--color-copper-light)}.application_search--row .tag_target_group_31{background:var(--color-gold)}.view-ukk .view-filters{display:none}.view-ukk .ukk_categories{display:block;margin:var(--spacing-xl) 0;padding:0}.view-ukk .ukk_categories li{display:inline-block;list-style:none;margin:var(--spacing-m) var(--spacing-s) 0 0;padding:0}.view-ukk .hero .hero__text-content{max-width:100%}.view-ukk #edit-field-category-target-id{display:flex}.view-ukk #edit-field-category-target-id .hds-radio-button:first-of-type{margin-top:var(--spacing-2-xs)}.view-ukk #edit-field-category-target-id .hds-radio-button .hds-radio-button__input:checked+.hds-radio-button__label{background:var(--color-black);border-radius:var(--spacing-m);color:var(--color-white);padding:var(--spacing-2-xs) var(--spacing-s)}.view-ukk #edit-field-category-target-id .hds-radio-button__label{padding:var(--spacing-2-xs) var(--spacing-s)}.view-ukk #edit-field-category-target-id .hds-radio-button__label::before,.view-ukk #edit-field-category-target-id .hds-radio-button__label::after{display:none}.view-ukk .views-exposed-form fieldset{margin-bottom:0}.view-ukk .views-exposed-form .form-submit{margin-bottom:var(--spacing-l)}.view-ukk .category{background:var(--color-black);border-radius:var(--spacing-m);color:var(--color-white);display:inline-block;padding:var(--spacing-2-xs) var(--spacing-s);text-decoration:none}.view-ukk .category-unselected{background:var(--color-black-20);color:var(--color-black)}.page--select-applicant-role{background-color:var(--color-black-5)}.page--select-applicant-role body{background-color:var(--color-black-5)}.page--select-applicant-role .layout-main-wrapper{background-color:var(--color-black-5)}.page--select-applicant-role .main-content{margin-top:var(--spacing-l)}.page--select-applicant-role h1{margin-top:var(--spacing-l)}.page--select-applicant-role p{margin-bottom:var(--spacing-m)}.node--type-service .errand-service__channels .service-channel__links a[href^="https://avustukset.hel.fi"]{display:none}.node--type-service .service-channel__info p:first-of-type{margin-top:0}.node--type-service .service-channel--mail{display:none}#block-servicepageauthblock-2,#block-servicepageanonblock-2,#block-grantspreviewlink-2{display:none}@media(max-width: 767.9px){#block-servicepageauthblock-2,#block-servicepageanonblock-2,#block-grantspreviewlink-2{display:block;margin:var(--spacing-s)}}@media(max-width: 991.9px){#block-servicepageauthblock-2,#block-servicepageanonblock-2,#block-grantspreviewlink-2{display:block;margin:var(--spacing-l)}}#block-servicepageauthblock-2>.grants-service-page-block>*,#block-servicepageanonblock-2>.grants-service-page-block>*,#block-grantspreviewlink-2>.grants-service-page-block>*{margin:var(--spacing-2-xs) 0 var(--spacing-2-xs) var(--spacing-2-xs)}@media(max-width: 991.9px){#block-servicepageauthblock-2 .node--type-service a.hds-button[href*=uusi-hakemus],#block-servicepageanonblock-2 .node--type-service a.hds-button[href*=uusi-hakemus],#block-grantspreviewlink-2 .node--type-service a.hds-button[href*=uusi-hakemus]{display:none}}.user-login__text-container{background:var(--color-white);max-width:500px;padding:var(--spacing-m)}.user-login__text-container p:first-of-type{margin-top:0}.tabs{--tablist-border-color: var(--color-black-20);--tablist-border-size: 1px;--tab-color: var(--color-black);--tab-font-size: var(--fontsize-body-m);--tab-height: 48px;--tab-min-width: 148px;--tab-spacing: var(--spacing-s);--tab-active-border-size: 5px;--tab-active-border-color: var(--color-black);--tab-focus-outline-size: 2px;--tab-focus-outline-color: var(--color-coat-of-arms);display:flex;flex-flow:row wrap}.tabs--tablist{box-sizing:border-box;flex-grow:1;margin-bottom:-1px;overflow-x:hidden;position:relative;width:100%}.tabs--content-wrapper{width:100%}.tabs--content-wrapper .container{padding-top:1px}.tabs [role=tablist]{box-sizing:border-box;list-style:none;margin:0;padding:var(--tab-focus-outline-size) 0;white-space:nowrap}.tabs [role=tab]{background:rgba(0,0,0,0);border:0;cursor:pointer;display:inline-block;margin:0;outline:none;padding:0}.tabs [role=tab] span{align-items:center;box-sizing:border-box;color:var(--tab-color);display:flex;font-size:var(--tab-font-size);height:var(--tab-height);justify-content:center;margin:0;min-width:var(--tab-min-width);padding:0 var(--tab-spacing);pointer-events:none;position:relative}.tabs [role=tab] span::before{background:var(--tablist-border-color);bottom:0;content:"";height:var(--tablist-border-size);position:absolute;width:100%;z-index:100}.tabs [role=tab] span:hover::before,.tabs [role=tab] span:focus::before,.tabs [role=tab][aria-selected=true] span::before{background-color:var(--tab-active-border-color);bottom:0;content:"";height:var(--tab-active-border-size);position:absolute;width:100%;z-index:100}.tabs [role=tabpanel].is-hidden{display:none}.node--form-page .list-of-links{margin-left:0;margin-top:0;width:100%}@media(min-width: 768px){.node--form-page .list-of-links{margin-top:0}}.node--form-page .list-of-links>.container{padding-top:0}.node--form-page .list-of-links .list-of-links__title{border-top:2px solid var(--color-black-20);margin:0 0 var(--spacing-layout-xl)}@media(min-width: 576px){.node--form-page .list-of-links .list-of-links__container{width:calc(100% - var(--spacing-layout-xl))}}@media(min-width: 768px){.node--form-page .list-of-links .list-of-links__container{width:100%}}.node--form-page .list-of-links .list-of-links__content{height:auto;margin-top:0}@media(min-width: 768px){.node--form-page .list-of-links .list-of-links__content{display:grid;grid-template-columns:auto auto auto;margin:0 var(--spacing-m) 0 0}}.node--form-page .list-of-links .list-of-links__item{align-self:stretch;border-left:4px solid var(--color-copper);margin-right:-4px;padding-left:var(--spacing-m);padding-right:var(--spacing-m)}.list-of-links--without-image .list-of-links__item .list-of-links__item__desc{color:var(--color-black-90);font-size:var(--fontsize-body-m)}.list-of-links--without-image .list-of-links__item .list-of-links__item__title{font-size:var(--fontsize-heading-m)}.js-form-type-webform-custom-composite{--border-width: 2px;--outline-width: 3px;--input-height: 56px;--textarea-height: 149px;--icon-size: var(--spacing-m);--helper-color-default: var(--color-black-60);--helper-color-invalid: var(--color-error);--icon-color-invalid: var(--color-error);--input-background-default: var(--color-white);--input-background-disabled: var(--color-black-10);--input-border-color-default: var(--color-black-50);--input-border-color-hover: var(--color-black-90);--input-border-color-focus: var(--color-black-90);--input-border-color-invalid: var(--color-error);--input-border-color-disabled: var(--color-black-10);--input-color-default: var(--color-black-90);--input-color-disabled: var(--color-black-40);--label-color-default: var(--color-black-90);--label-color-invalid: var(--color-black-90);--placeholder-color: var(--color-black-60);--focus-outline-color: var(--color-coat-of-arms)}.js-form-type-webform-custom-composite a.tabledrag-handle .handle{height:24px;width:24px}.js-form-type-webform-custom-composite input.form-number{background-color:var(--input-background-default);border:var(--border-width) solid var(--input-border-color-default);box-sizing:border-box;color:var(--input-color-default);font-size:1.125em;height:var(--input-height);line-height:normal;padding:0 var(--spacing-s);width:100%}.js-form-type-webform-custom-composite table{border-collapse:collapse;border-spacing:0;margin-bottom:var(--spacing-m)}.js-form-type-webform-custom-composite table td{border-bottom:2px var(--color-black-20) solid;border-top:2px var(--color-black-20) solid;padding-left:var(--spacing-m);padding-top:var(--spacing-m)}@media(max-width: 768px){.js-form-type-webform-custom-composite table td{border:2px var(--color-black-20) solid}}.js-form-type-webform-custom-composite table td.webform-multiple-table--operations{border-bottom:2px var(--color-black-20) solid;border-top:2px var(--color-black-20) solid;padding-left:var(--spacing-m);padding-top:var(--spacing-m)}@media(max-width: 768px){.js-form-type-webform-custom-composite table td.webform-multiple-table--operations{background:var(--color-white);border:2px var(--color-black-20) solid;padding:10px 5px 5px}}.js-form-type-webform-custom-composite table td:first-child{border-left:2px var(--color-black-20) solid}.js-form-type-webform-custom-composite table td:last-child{border-right:2px var(--color-black-20) solid;padding:var(--spacing-s)}@media(min-width: 768px){.js-form-type-webform-custom-composite table td:last-child{min-width:400px;padding:var(--spacing-s) var(--spacing-m)}}div.ui-widget.ui-datepicker{padding:var(--spacing-2-xs)}div.ui-widget.ui-datepicker .ui-datepicker-header span.ui-icon{margin-left:-8px;margin-top:-8px;-webkit-mask-image:none;mask-image:none;transform:none}div.ui-widget.ui-datepicker .ui-datepicker-calendar{border:0;display:table;margin:0;max-width:100%}div.ui-widget.ui-datepicker .ui-datepicker-calendar th,div.ui-widget.ui-datepicker .ui-datepicker-calendar td{min-width:auto}details.accordion{--background-color: var(--color-white);--border-color: var(--color-black-60);--padding-horizontal: var(--spacing-m);--padding-vertical: var(--spacing-m);--header-font-color: var(--color-black-90);--header-font-size: var(--fontsize-heading-m);--header-line-height: var(--lineheight-m);--button-size: 28px;--header-focus-outline-color: var(--color-coat-of-arms);--content-font-color: var(--color-black-90);--content-font-size: var(--fontsize-body-m);--content-line-height: var(--lineheight-l);border-bottom:1px solid var(--border-color)}details.accordion .accordion_content{padding-bottom:var(--padding-vertical)}details.accordion[open] .accordion_heading_container span.hel-icon{transform:rotate(180deg)}.accordion_header{align-items:center;color:var(--header-font-color);display:flex;font-size:var(--header-font-size);font-weight:700;justify-content:space-between;line-height:var(--header-line-height);list-style:none;padding-bottom:var(--padding-vertical);padding-top:var(--padding-vertical);position:relative}.accordion_heading_container{align-items:center;box-sizing:border-box;cursor:pointer;display:grid;grid-template-columns:auto calc(var(--button-size));width:100%}.accordion_heading_container span.hel-icon{height:var(--button-size) !important;width:var(--button-size) !important}.accordion_heading_container span.hel-icon{border:2px solid rgba(0,0,0,0);box-sizing:border-box;margin:auto}.webform-element-description{--helper-color-default: var(--color-black-60);color:var(--helper-color-default);display:block;font-size:var(--fontsize-body-m);line-height:var(--lineheight-l);margin-top:var(--spacing-s)}.webform-element-help{background:var(--color-white);border:2px solid rgba(0,0,0,0);color:var(--hdbt-color-black);height:var(--spacing-layout-xs);margin-right:4px;padding:0;position:absolute;right:0;top:-3px;width:var(--spacing-layout-xs);z-index:10}div[data-tippy-root]{width:350px}.tippy-box{background-color:var(--color-black-5);border-left:var(--spacing-xs) var(--color-coat-of-arms) solid;border-radius:0;color:var(--hdbt-color-black);padding:var(--spacing-s)}.tippy-box .webform-element-help--content{white-space:normal}.tippy-box .webform-element-help--content a:link,.tippy-box .webform-element-help--content a:visited,.tippy-box .webform-element-help--content a:active,.tippy-box .webform-element-help--content a:hover{color:var(--hdbt-color-black)}.tippy-arrow{color:var(--color-black-5)}.webform-element-help--wrapper-short{max-width:-moz-fit-content;max-width:fit-content}.webform-element-help-container--title{--border-width: 2px;--outline-width: 3px;--input-height: 56px;--textarea-height: 149px;--icon-size: var(--spacing-m)}fieldset.grants-fieldset{padding:var(--spacing-s)}@media(min-width: 768px){fieldset.grants-fieldset{min-width:400px;padding:var(--spacing-s) var(--spacing-m)}}fieldset.grants-fieldset .fieldset-wrapper{align-items:flex-end;display:flex;flex-wrap:wrap;gap:0 var(--spacing-layout-2-xs)}fieldset.grants-fieldset .fieldset-wrapper .form-item--error-message{grid-column:1}fieldset.grants-fieldset-short{max-width:var(--webform-element-width--input-large)}fieldset.grants-fieldset-medium{max-width:var(--webform-element-width--fieldset)}fieldset.grants-fieldset-medium .fieldset-wrapper{justify-content:center}fieldset.premises-composite--wrapper.fieldgroup,fieldset.rented-premise-composite--wrapper.fieldgroup,.community_officials_wrapper fieldset.fieldgroup,fieldset.grants-budget-other-cost--wrapper.fieldgroup,fieldset.grants-budget-other-income--wrapper.fieldgroup,fieldset.place-of-operation-composite--wrapper.fieldgroup,fieldset.rent-income-composite--wrapper.fieldgroup,fieldset.rent-cost-composite--wrapper.fieldgroup,fieldset.club-section-composite--wrapper.fieldgroup,fieldset.members-composite--wrapper.fieldgroup,fieldset.orienteering-map-composite--wrapper,.form-item-muu-liite fieldset.grants-attachments--wrapper.fieldgroup{border-width:2px;margin-top:var(--spacing-layout-2-xs);max-width:100%;padding:var(--spacing-s);width:100%}@media(min-width: 768px){fieldset.premises-composite--wrapper.fieldgroup,fieldset.rented-premise-composite--wrapper.fieldgroup,.community_officials_wrapper fieldset.fieldgroup,fieldset.grants-budget-other-cost--wrapper.fieldgroup,fieldset.grants-budget-other-income--wrapper.fieldgroup,fieldset.place-of-operation-composite--wrapper.fieldgroup,fieldset.rent-income-composite--wrapper.fieldgroup,fieldset.rent-cost-composite--wrapper.fieldgroup,fieldset.club-section-composite--wrapper.fieldgroup,fieldset.members-composite--wrapper.fieldgroup,fieldset.orienteering-map-composite--wrapper,.form-item-muu-liite fieldset.grants-attachments--wrapper.fieldgroup{min-width:400px;padding:var(--spacing-s) var(--spacing-m)}}fieldset.premises-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.rented-premise-composite--wrapper.fieldgroup legend>span.visually-hidden,.community_officials_wrapper fieldset.fieldgroup legend>span.visually-hidden,fieldset.grants-budget-other-cost--wrapper.fieldgroup legend>span.visually-hidden,fieldset.grants-budget-other-income--wrapper.fieldgroup legend>span.visually-hidden,fieldset.place-of-operation-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.rent-income-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.rent-cost-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.club-section-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.members-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.orienteering-map-composite--wrapper legend>span.visually-hidden,.form-item-muu-liite fieldset.grants-attachments--wrapper.fieldgroup legend>span.visually-hidden{background:#fff;clip-path:initial;clip:auto;clip:initial;height:auto;margin-left:calc(var(--spacing-2-xs)*-1);left:auto;overflow:visible;padding:0 var(--spacing-2-xs);top:-12px;width:-moz-max-content;width:max-content}fieldset.premises-composite--wrapper.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)],fieldset.rented-premise-composite--wrapper.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)],.community_officials_wrapper fieldset.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)],fieldset.grants-budget-other-cost--wrapper.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)],fieldset.grants-budget-other-income--wrapper.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)],fieldset.place-of-operation-composite--wrapper.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)],fieldset.rent-income-composite--wrapper.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)],fieldset.rent-cost-composite--wrapper.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)],fieldset.club-section-composite--wrapper.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)],fieldset.members-composite--wrapper.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)],fieldset.orienteering-map-composite--wrapper legend>span.visually-hidden[\:has\(button.webform-element-help\)],.form-item-muu-liite fieldset.grants-attachments--wrapper.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)]{padding-right:var(--spacing-xl)}fieldset.premises-composite--wrapper.fieldgroup legend>span.visually-hidden:has(button.webform-element-help),fieldset.rented-premise-composite--wrapper.fieldgroup legend>span.visually-hidden:has(button.webform-element-help),.community_officials_wrapper fieldset.fieldgroup legend>span.visually-hidden:has(button.webform-element-help),fieldset.grants-budget-other-cost--wrapper.fieldgroup legend>span.visually-hidden:has(button.webform-element-help),fieldset.grants-budget-other-income--wrapper.fieldgroup legend>span.visually-hidden:has(button.webform-element-help),fieldset.place-of-operation-composite--wrapper.fieldgroup legend>span.visually-hidden:has(button.webform-element-help),fieldset.rent-income-composite--wrapper.fieldgroup legend>span.visually-hidden:has(button.webform-element-help),fieldset.rent-cost-composite--wrapper.fieldgroup legend>span.visually-hidden:has(button.webform-element-help),fieldset.club-section-composite--wrapper.fieldgroup legend>span.visually-hidden:has(button.webform-element-help),fieldset.members-composite--wrapper.fieldgroup legend>span.visually-hidden:has(button.webform-element-help),fieldset.orienteering-map-composite--wrapper legend>span.visually-hidden:has(button.webform-element-help),.form-item-muu-liite fieldset.grants-attachments--wrapper.fieldgroup legend>span.visually-hidden:has(button.webform-element-help){padding-right:var(--spacing-xl)}@media(min-width: 768px){fieldset.premises-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.rented-premise-composite--wrapper.fieldgroup legend>span.visually-hidden,.community_officials_wrapper fieldset.fieldgroup legend>span.visually-hidden,fieldset.grants-budget-other-cost--wrapper.fieldgroup legend>span.visually-hidden,fieldset.grants-budget-other-income--wrapper.fieldgroup legend>span.visually-hidden,fieldset.place-of-operation-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.rent-income-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.rent-cost-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.club-section-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.members-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.orienteering-map-composite--wrapper legend>span.visually-hidden,.form-item-muu-liite fieldset.grants-attachments--wrapper.fieldgroup legend>span.visually-hidden{left:auto}}.form-item-muu-liite fieldset.grants-attachments--wrapper{margin-bottom:0}fieldset.webform-composite-hidden-title .fieldset-wrapper>.form-item:last-child{margin-bottom:var(--spacing-layout-xs)}.js-form-type-webform-table table{width:100%}.js-form-type-webform-table th{text-align:left}.js-form-type-webform-table td{vertical-align:middle}.js-form-type-webform-table td>div{height:auto;margin-bottom:0}.js-form-type-webform-table td>div label{margin:-1px}.js-form-type-webform-table .hds-text-input label{border:0;clip:rect(0, 0, 0, 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.form-item{margin-bottom:var(--spacing-layout-xs);position:relative}.form-item input[type=date],.form-item input[type=time]{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--input-background-default);border:var(--border-width) solid var(--input-border-color-default);box-sizing:border-box;color:var(--input-color-default);font-size:1.125em;height:var(--input-height);line-height:normal;padding:0 var(--spacing-s);width:100%;will-change:transform,box-shadow}.webform-section{padding-bottom:var(--spacing-layout-2-xs)}.webform-section table:first-of-type{margin-top:0}.form-type-webform-multiple .webform-multiple-table table{max-width:100%;width:100%}@media(min-width: 768px){.form-type-webform-multiple .webform-multiple-table table{width:auto}}.hds-text-input{max-width:-moz-fit-content;max-width:fit-content;width:100%}.webform-section-grid-wrapper{display:grid;grid-template-columns:1fr}@media(min-width: 768px){.webform-section-grid-wrapper{grid-row-gap:var(--spacing-xl);grid-template-columns:1fr 2fr}}.webform-section-grid-wrapper>dt.webform-section-title{color:var(--hdbt-color-black);display:block;flex-shrink:0;font-size:var(--fontsize-heading-s);font-weight:500;-webkit-hyphens:none;hyphens:none;line-height:1;margin-bottom:var(--spacing-3-xs);margin-top:0;padding-right:var(--spacing-2-xl);width:100%}.webform-section-grid-wrapper .webform-section-wrapper{margin-bottom:var(--spacing-layout-xs);padding-left:var(--spacing-2-xl)}@media(min-width: 768px){.webform-section-grid-wrapper .webform-section-wrapper{margin-bottom:0;padding-left:0}}fieldset input[type=button]{margin-top:var(--spacing-m)}.webform-section-wrapper>.description{margin-bottom:var(--spacing-layout-xs)}.grants__page-header{margin-bottom:var(--spacing-layout-l);font-size:2rem}@media(min-width: 768px){.grants__page-header{font-size:3rem}}.webform-section-flex-wrapper{display:flex;flex-flow:row wrap;width:100%;justify-content:left}@media(min-width: 768px){.webform-section-flex-wrapper{flex-flow:row nowrap}.webform-section-flex-wrapper h3+*>*:first-child>label:first-of-type,.webform-section-flex-wrapper h3+*>*:first-child>*:first-child>label:first-of-type{margin-top:var(--spacing-2-xs);padding-top:0}.webform-section-flex-wrapper h3+*>*:first-child>p{line-height:normal;line-height:initial;margin-top:var(--spacing-2-xs)}.webform-section-flex-wrapper h3+*>*:first-child>h4{line-height:normal;line-height:initial;margin-top:var(--spacing-m)}}.webform-section-flex-wrapper .webform-element-help-container--title{position:relative}.webform-section-flex-wrapper>h2.webform-section-title,.webform-section-flex-wrapper>h3.webform-section-title,.webform-section-flex-wrapper>h4.webform-section-title,.webform-section-flex-wrapper>dt.webform-section-title{color:var(--hdbt-color-black);display:block;flex-shrink:0;font-size:24px;font-weight:500;-webkit-hyphens:manual;hyphens:manual;margin-bottom:var(--spacing-3-xs);margin-top:0;padding-right:var(--spacing-2-xl);width:100%}@media(min-width: 768px){.webform-section-flex-wrapper>h2.webform-section-title,.webform-section-flex-wrapper>h3.webform-section-title,.webform-section-flex-wrapper>h4.webform-section-title,.webform-section-flex-wrapper>dt.webform-section-title{font-size:32px;max-width:350px;width:30%}}.webform-section-flex-wrapper h4{font-size:var(--fontsize-heading-m);line-height:38px}.webform-section-flex-wrapper>.webform-section-wrapper{--line-height: 1.5;font-size:var(--fontsize-body-m);width:100%}@media(min-width: 768px){.webform-section-flex-wrapper>.webform-section-wrapper{padding-left:var(--spacing-2-xl)}}.webform-section-flex-wrapper .form-required::after{content:"*";display:inline}.webform-section-flex-wrapper legend,.webform-section-flex-wrapper label{display:block;font-size:var(--fontsize-body-m);font-weight:500;margin-bottom:var(--spacing-2-xs);max-width:-moz-fit-content;max-width:fit-content;position:relative}.webform-section-flex-wrapper legend{padding:0 var(--spacing-2-xs);margin-left:calc(var(--spacing-2-xs)*-1);left:auto}.webform-section-flex-wrapper legend[\:has\(button.webform-element-help\)],.webform-section-flex-wrapper label[\:has\(button.webform-element-help\)]{padding-right:var(--spacing-xl)}.webform-section-flex-wrapper legend:has(button.webform-element-help),.webform-section-flex-wrapper label:has(button.webform-element-help){padding-right:var(--spacing-xl)}.webform-section-flex-wrapper fieldset legend>span[\:has\(button.webform-element-help\)]{padding-right:var(--spacing-xl)}.webform-section-flex-wrapper fieldset legend>span:has(button.webform-element-help){padding-right:var(--spacing-xl)}.webform-section-flex-wrapper fieldset legend>span.fieldset-legend[\:has\(button.webform-element-help\)],.webform-section-flex-wrapper fieldset.fieldgroup legend>span[\:has\(button.webform-element-help\)]:not(.visually-hidden.fieldset-legend){padding-right:var(--spacing-l)}.webform-section-flex-wrapper fieldset legend>span.fieldset-legend:has(button.webform-element-help),.webform-section-flex-wrapper fieldset.fieldgroup legend>span:has(button.webform-element-help):not(.visually-hidden.fieldset-legend){padding-right:var(--spacing-l)}.webform-section-flex-wrapper fieldset legend>span.fieldset-legend[\:has\(button.webform-element-help\)],.webform-section-flex-wrapper fieldset.fieldgroup legend span.fieldset-legend:not(.visually-hidden)[\:has\(button.webform-element-help\)]{padding-right:0}.webform-section-flex-wrapper fieldset legend>span.fieldset-legend:has(button.webform-element-help),.webform-section-flex-wrapper fieldset.fieldgroup legend span.fieldset-legend:not(.visually-hidden):has(button.webform-element-help){padding-right:0}.webform-section-flex-wrapper label.hds-radio-button__label{font-weight:normal}.webform-section-flex-wrapper .checkboxes--wrapper label{font-weight:normal}.webform-section-flex-wrapper .js-form-type-textarea .hds-text-input__input-wrapper{display:block}.webform-section-flex-wrapper .has-error,.webform-section-flex-wrapper .grant-applications--select-wrapper[\:has\(.has-error\)]{border-color:var(--color-error)}.webform-section-flex-wrapper .has-error,.webform-section-flex-wrapper .grant-applications--select-wrapper:has(.has-error){border-color:var(--color-error)}form .hds-text-input__input-wrapper,.hds-text-input__input-wrapper{flex-flow:row wrap}form .hds-text-input__input-wrapper .text-count-wrapper,.hds-text-input__input-wrapper .text-count-wrapper{flex-basis:100%}form .hds-text-input__input-wrapper input.webform--small,form .hds-text-input__input-wrapper textarea.webform--small,.hds-text-input__input-wrapper input.webform--small,.hds-text-input__input-wrapper textarea.webform--small{max-width:var(--webform-element-width--input-small);min-width:var(--webform-element-width--input-small);width:100%}form .hds-text-input__input-wrapper input.webform--medium,form .hds-text-input__input-wrapper textarea.webform--medium,.hds-text-input__input-wrapper input.webform--medium,.hds-text-input__input-wrapper textarea.webform--medium{max-width:var(--webform-element-width--input-medium);min-width:var(--webform-element-width--input-small);width:100%}form .hds-text-input__input-wrapper input.webform--large,form .hds-text-input__input-wrapper textarea.webform--large,.hds-text-input__input-wrapper input.webform--large,.hds-text-input__input-wrapper textarea.webform--large{max-width:var(--webform-element-width--input-large);min-width:var(--webform-element-width--input-small);width:100%}.webform--small div.grant-applications--select-wrapper{max-width:var(--webform-element-width--input-small);min-width:var(--webform-element-width--input-small);width:100%}.webform--medium div.grant-applications--select-wrapper{max-width:var(--webform-element-width--input-medium);min-width:var(--webform-element-width--input-small);width:100%}.webform--large div.grant-applications--select-wrapper{max-width:var(--webform-element-width--input-medium);min-width:var(--webform-element-width--input-small);width:100%}form .hds-checkbox{display:block}form .hds-checkbox label.hds-checkbox__label::after{content:""}fieldset.webform-composite-hidden-title{margin-bottom:var(--spacing-layout-2-xs);margin-top:0}.form-item-bank-account-account-number-select,.form-item-community-address-community-address-select{margin-bottom:0}.grants-profile-grants-profile table thead th h4{margin:0}.hakemus-form-page .main-content{margin-top:0}.hakemus-form-page h1{-webkit-hyphens:auto;hyphens:auto;word-break:break-word}.hakemus-form-errors ul li{list-style-type:none}.community_officials_wrapper .webform-readonly{margin:0}.community_officials_wrapper .hds-text-input__input-wrapper{margin:0}.community_officials_wrapper input[readonly=readonly]{height:1.25rem;margin:0;max-width:330px}.form-item--error-message{color:var(--color-error);margin-bottom:var(--spacing-layout-s);margin-top:var(--spacing-layout-2-xs)}fieldset .form-item--error-message,.community_officials_wrapper .form-item--error-message{margin-bottom:0}.form-item--error-message::before{--icon-size: 1.6rem;background-color:#000;background-size:contain;content:"";display:inline-block;height:calc(var(--line-height) * 1em);height:var(--icon-size, calc(var(--line-height) * 1em));-webkit-mask-image:var(--hel-icon--alert-circle-fill);mask-image:var(--hel-icon--alert-circle-fill);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);-webkit-mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));vertical-align:bottom;width:calc(var(--line-height) * 1em);width:var(--icon-size, calc(var(--line-height) * 1em));background-color:var(--color-error);content:" ";display:inline-block}input[type=radio]+label.form-required::after{content:""}.hds-radio-button:last-of-type,.hds-checkbox:last-of-type{margin-bottom:0}.hds-radio-button:last-of-type>label,.hds-checkbox:last-of-type>label{margin-bottom:0}@media(min-width: 992px){.place-of-operation-composite--wrapper.fieldgroup .hds-text-input,.club-section-composite--wrapper.fieldgroup .hds-text-input{max-width:100%}}.place-of-operation-composite--wrapper.fieldgroup .hds-radio-button .hds-radio-button__label,.club-section-composite--wrapper.fieldgroup .hds-radio-button .hds-radio-button__label{line-height:var(--lineheight-m) !important}@media(min-width: 992px){.place-of-operation-group__location,.place-of-operation-group__students,.place-of-operation-group__groups,.place-of-operation-group__personnel,.place-of-operation-group__rent,.place-of-operation-group__time{display:flex;justify-content:space-between}}@media(min-width: 992px){.place-of-operation-group__location--address,.place-of-operation-group__students--address,.place-of-operation-group__groups--address,.place-of-operation-group__personnel--address,.place-of-operation-group__rent--address,.place-of-operation-group__time--address{margin-top:0 !important}.place-of-operation-group__location--address,.place-of-operation-group__students--address,.place-of-operation-group__groups--address,.place-of-operation-group__personnel--address,.place-of-operation-group__rent--address,.place-of-operation-group__time--address{width:65%}}@media(min-width: 992px){.place-of-operation-group__location--post-code,.place-of-operation-group__students--post-code,.place-of-operation-group__groups--post-code,.place-of-operation-group__personnel--post-code,.place-of-operation-group__rent--post-code,.place-of-operation-group__time--post-code{margin-top:0 !important}.place-of-operation-group__location--post-code,.place-of-operation-group__students--post-code,.place-of-operation-group__groups--post-code,.place-of-operation-group__personnel--post-code,.place-of-operation-group__rent--post-code,.place-of-operation-group__time--post-code{width:30%}}@media(min-width: 992px){.place-of-operation-group__location--student-count,.place-of-operation-group__location--special-student-count,.place-of-operation-group__location--group-count,.place-of-operation-group__location--special-group-count,.place-of-operation-group__location--personnel-count,.place-of-operation-group__location--rent-amount,.place-of-operation-group__location--time-start,.place-of-operation-group__location--time-end,.place-of-operation-group__students--student-count,.place-of-operation-group__students--special-student-count,.place-of-operation-group__students--group-count,.place-of-operation-group__students--special-group-count,.place-of-operation-group__students--personnel-count,.place-of-operation-group__students--rent-amount,.place-of-operation-group__students--time-start,.place-of-operation-group__students--time-end,.place-of-operation-group__groups--student-count,.place-of-operation-group__groups--special-student-count,.place-of-operation-group__groups--group-count,.place-of-operation-group__groups--special-group-count,.place-of-operation-group__groups--personnel-count,.place-of-operation-group__groups--rent-amount,.place-of-operation-group__groups--time-start,.place-of-operation-group__groups--time-end,.place-of-operation-group__personnel--student-count,.place-of-operation-group__personnel--special-student-count,.place-of-operation-group__personnel--group-count,.place-of-operation-group__personnel--special-group-count,.place-of-operation-group__personnel--personnel-count,.place-of-operation-group__personnel--rent-amount,.place-of-operation-group__personnel--time-start,.place-of-operation-group__personnel--time-end,.place-of-operation-group__rent--student-count,.place-of-operation-group__rent--special-student-count,.place-of-operation-group__rent--group-count,.place-of-operation-group__rent--special-group-count,.place-of-operation-group__rent--personnel-count,.place-of-operation-group__rent--rent-amount,.place-of-operation-group__rent--time-start,.place-of-operation-group__rent--time-end,.place-of-operation-group__time--student-count,.place-of-operation-group__time--special-student-count,.place-of-operation-group__time--group-count,.place-of-operation-group__time--special-group-count,.place-of-operation-group__time--personnel-count,.place-of-operation-group__time--rent-amount,.place-of-operation-group__time--time-start,.place-of-operation-group__time--time-end{margin-top:0 !important}.place-of-operation-group__location--student-count,.place-of-operation-group__location--special-student-count,.place-of-operation-group__location--group-count,.place-of-operation-group__location--special-group-count,.place-of-operation-group__location--personnel-count,.place-of-operation-group__location--rent-amount,.place-of-operation-group__location--time-start,.place-of-operation-group__location--time-end,.place-of-operation-group__students--student-count,.place-of-operation-group__students--special-student-count,.place-of-operation-group__students--group-count,.place-of-operation-group__students--special-group-count,.place-of-operation-group__students--personnel-count,.place-of-operation-group__students--rent-amount,.place-of-operation-group__students--time-start,.place-of-operation-group__students--time-end,.place-of-operation-group__groups--student-count,.place-of-operation-group__groups--special-student-count,.place-of-operation-group__groups--group-count,.place-of-operation-group__groups--special-group-count,.place-of-operation-group__groups--personnel-count,.place-of-operation-group__groups--rent-amount,.place-of-operation-group__groups--time-start,.place-of-operation-group__groups--time-end,.place-of-operation-group__personnel--student-count,.place-of-operation-group__personnel--special-student-count,.place-of-operation-group__personnel--group-count,.place-of-operation-group__personnel--special-group-count,.place-of-operation-group__personnel--personnel-count,.place-of-operation-group__personnel--rent-amount,.place-of-operation-group__personnel--time-start,.place-of-operation-group__personnel--time-end,.place-of-operation-group__rent--student-count,.place-of-operation-group__rent--special-student-count,.place-of-operation-group__rent--group-count,.place-of-operation-group__rent--special-group-count,.place-of-operation-group__rent--personnel-count,.place-of-operation-group__rent--rent-amount,.place-of-operation-group__rent--time-start,.place-of-operation-group__rent--time-end,.place-of-operation-group__time--student-count,.place-of-operation-group__time--special-student-count,.place-of-operation-group__time--group-count,.place-of-operation-group__time--special-group-count,.place-of-operation-group__time--personnel-count,.place-of-operation-group__time--rent-amount,.place-of-operation-group__time--time-start,.place-of-operation-group__time--time-end{width:47.5%}}@media(min-width: 768px){.club-section__participants{display:flex;gap:var(--spacing-l);justify-content:space-between}}.club-section__participants input.form-text.hds-text-input__input{max-width:100%;width:100%}.club-section__totalhours input.form-text.hds-text-input__input{max-width:100%;width:100%}.hel-icon--size-xs{--icon-size: var(--spacing-layout-2-xs)}.hel-icon--size-s{--icon-size: var(--spacing-layout-xs)}.hel-icon--size-m{--icon-size: var(--spacing-layout-s)}.hel-icon--size-l{--icon-size: var(--spacing-layout-m)}.hel-icon--size-xl{--icon-size: var(--spacing-layout-l)}.hds-text-input__input-wrapper[focus-within][\:has\(input\[readonly\]\)]{margin-right:var(--spacing-2-xs);outline:2px var(--color-black) solid;outline-offset:2px}.hds-text-input__input-wrapper[focus-within]:has(input[readonly]){margin-right:var(--spacing-2-xs);outline:2px var(--color-black) solid;outline-offset:2px}.hds-text-input__input-wrapper[focus-within][\:has\(input\[readonly\]\)]{margin-right:var(--spacing-2-xs);outline:2px var(--color-black) solid;outline-offset:2px}.hds-text-input__input-wrapper:focus-within[\:has\(input\[readonly\]\)]{margin-right:var(--spacing-2-xs);outline:2px var(--color-black) solid;outline-offset:2px}.hds-text-input__input-wrapper:focus-within:has(input[readonly]){margin-right:var(--spacing-2-xs);outline:2px var(--color-black) solid;outline-offset:2px}.hds-text-input__input-wrapper[focus-within][\:has\(input\[readonly\]\)] input[readonly]{width:calc(100% - var(--spacing-2-xs))}.hds-text-input__input-wrapper[focus-within]:has(input[readonly]) input[readonly]{width:calc(100% - var(--spacing-2-xs))}.hds-text-input__input-wrapper[focus-within][\:has\(input\[readonly\]\)] input[readonly]{width:calc(100% - var(--spacing-2-xs))}.hds-text-input__input-wrapper:focus-within[\:has\(input\[readonly\]\)] input[readonly]{width:calc(100% - var(--spacing-2-xs))}.hds-text-input__input-wrapper:focus-within:has(input[readonly]) input[readonly]{width:calc(100% - var(--spacing-2-xs))}.form-item-application-number,.form-item-status,.form-item-applicant-type{display:none}.grants-handler__completion{background:var(--color-bus-light);padding:var(--spacing-layout-l) var(--spacing-layout-2-xl)}.grants-handler__completion h2{margin-top:var(--spacing-l)}.grants-handler__completion h3{font-size:1rem;font-weight:bold;margin-top:var(--spacing-m)}.grants-handler__completion__info-row{display:flex;flex-flow:row wrap;gap:var(--spacing-m);justify-content:flex-start;margin-bottom:var(--spacing-m)}.grants-handler__completion__button-row{display:flex;flex-flow:row wrap;gap:var(--spacing-m);justify-content:flex-start}.grants-handler__completion__longtext{margin:var(--spacing-l) 0}.hds-notification.notification-margin-bottom{margin-bottom:var(--spacing-layout-m)}.hds-notification__label{align-items:center}.hds-checkbox__input label{font-weight:normal}fieldset.grants-attachments--wrapper{margin-bottom:var(--spacing-layout-m)}fieldset.grants-attachments--wrapper legend{margin-bottom:var(--spacing-2-xs)}fieldset.grants-attachments--wrapper .form-item--error-message{width:100%}fieldset.grants-attachments--wrapper .js-form-type-managed-file{margin-bottom:0}.grants-applications-managed_file{position:relative}.grants-applications-managed_file label.hds-button--secondary:not(:disabled):not(.eu-cookie-compliance-default-button):not(.eu-cookie-compliance-save-preferences-button){left:0;position:relative}.grants-applications-managed_file label.hds-button--secondary:not(:disabled):not(.eu-cookie-compliance-default-button):not(.eu-cookie-compliance-save-preferences-button)[\:has\(input\:disabled\)]{background-color:transparent;background-color:var(--background-color-disabled, transparent);border-color:transparent;border-color:var(--border-color-disabled, transparent);color:var(--color-disabled);cursor:not-allowed}.grants-applications-managed_file label.hds-button--secondary:not(:disabled):not(.eu-cookie-compliance-default-button):not(.eu-cookie-compliance-save-preferences-button)[\:has\(input\:disabled\)]{background-color:transparent;background-color:var(--background-color-disabled, transparent);border-color:transparent;border-color:var(--border-color-disabled, transparent);color:var(--color-disabled);cursor:not-allowed}.grants-applications-managed_file label.hds-button--secondary:not(:disabled):not(.eu-cookie-compliance-default-button):not(.eu-cookie-compliance-save-preferences-button):has(input:disabled){background-color:transparent;background-color:var(--background-color-disabled, transparent);border-color:transparent;border-color:var(--border-color-disabled, transparent);color:var(--color-disabled);cursor:not-allowed}.grants-applications-managed_file label.hds-button--secondary:not(:disabled):not(.eu-cookie-compliance-default-button):not(.eu-cookie-compliance-save-preferences-button)[focus-within]{background:var(--color-black);border-color:var(--color-white);color:var(--color-white);outline:2px var(--color-black) solid}.grants-applications-managed_file label.hds-button--secondary:not(:disabled):not(.eu-cookie-compliance-default-button):not(.eu-cookie-compliance-save-preferences-button):focus-within{background:var(--color-black);border-color:var(--color-white);color:var(--color-white);outline:2px var(--color-black) solid}.grants-applications-managed_file input[type=file]{opacity:0;position:absolute}.form-managed-file{display:flex;flex-wrap:wrap;white-space:inherit}.form-managed-file>span{background-color:var(--color-info-light);border-bottom:2px dotted var(--color-coat-of-arms);display:inline-block;padding:var(--spacing-s) var(--spacing-2-xs)}.form-managed-file>.file-upload-js-error{flex-basis:100%}.grants-applications-managed_file label.hds-button{display:flex}.grants-attachments--wrapper .webform-readonly{display:none}.webform-multiple-table table{border-collapse:collapse;border:0px var(--color-white) solid;margin-bottom:var(--spacing-2-xs);max-width:-moz-fit-content;max-width:fit-content}.webform-multiple-table .webform-multiple-table--operations-two{min-width:60px}.webform-multiple-table tbody tr,.webform-multiple-table thead tr{align-items:center;justify-content:space-between;width:100%}.webform-multiple-table td,.webform-multiple-table th{max-width:100%;min-width:0;padding:0;width:100%}.webform-multiple-table table thead th{padding:var(--spacing-layout-2-xs)}div.hidden-head table{display:table}div.hidden-head table thead th{padding:0}div.hidden-head table tbody tr{border-bottom:var(--spacing-s) var(--color-white) solid}div.hidden-head table tbody tr:hover{background:rgba(0,0,0,0)}div.table-layout-form input.hds-text-input__input{width:100%}div.table-layout-form table{border:1px var(--color-black) solid;max-width:var(--webform-element-width--input-large)}div.table-layout-form table tbody tr{border:§0px var(--color-black-30) solid}div.table-layout-form table tbody tr td{border:1px var(--color-black-30) solid;padding:0}div.table-layout-form table tbody tr td input.hds-text-input__input[readonly]{padding:var(--spacing-layout-2-xs)}div.table-layout-form table .form-item{margin-bottom:0}.hds-text-input .hds-text-input__input.input--borderless{border:0 rgba(0,0,0,0) solid}#edit-subventions-items thead{background:var(--color-black-90);color:var(--color-white);text-align:left}#edit-subventions-items input.hds-text-input,#edit-subventions-items input.hds-text-input__input{background:rgba(0,0,0,0)}#subventions_table td.webform-multiple-table--operations,#subventions_table th.webform-multiple-table--operations{display:none}#subventions_table input.hds-text-input__input[readonly][name$="[amount]"]{background-color:var(--input-background-disabled);border-color:var(--input-border-color-disabled);color:var(--input-color-disabled);cursor:not-allowed}.form-item-muu-liite .webform-multiple-table--operations{display:none}.hidden-head>label{display:none}.webform-preview .accordion_header{font-size:28px;font-weight:300}@media(min-width: 768px){.webform-preview .accordion_header{font-size:36px;font-weight:500}}.webform-preview label{display:block;font-weight:bold}.grants-profile-grants-profile fieldset{background:var(--color-black-5);border:0 rgba(0,0,0,0) solid;margin:0;max-width:var(--webform-element-width--fieldset);padding:0 var(--spacing-layout-s) var(--spacing-layout-s);top:calc(-1*var(--spacing-m))}.grants-profile-grants-profile fieldset label{margin-bottom:var(--spacing-3-xs)}.grants-profile-grants-profile fieldset legend{font-size:var(--fontsize-body-l);margin-bottom:var(--spacing-m);padding-bottom:var(--spacing-s);position:relative;top:var(--spacing-l)}.grants-profile-grants-profile fieldset .fieldset-wrapper{display:flex;flex-flow:row wrap;justify-content:space-between}.grants-profile-grants-profile fieldset .hds-text-input{max-width:100%}.grants-profile-grants-profile fieldset div[class*=-address-postcode]{width:32%}.grants-profile-grants-profile fieldset div[class*=-address-city]{width:65%}.grants-profile--extrainfo .form-actions .button{margin-right:var(--spacing-2-xs)}.grants-stepper{--grants-stepper-color: var(--color-black);--grants-stepper-background-color: var(--color-white);--grants-stepper-disabled-color: var(--color-black-20);--grants-stepper-selected-step-label-color: var(--color-black-90);--grants-stepper-not-selected-step-label-color: var(--color-black);--grants-step-background-color: var(--color-white);--grants-step-content-color: var(--color-black);--grants-stepper-focus-border-color: var(--color-coat-of-arms);--grants-step-width: 120px;--circle-container-size: 36px;--progress-line-height: 2px;background-color:var(--grants-stepper-background-color);margin-bottom:var(--spacing-layout-m);position:relative}@media(max-width: 725px){.grants-stepper{--grants-step-width: 40px}}@media(max-width: 725px){.grants-stepper .grants-stepper__text{display:none}}.grants-stepper__inner{align-items:flex-start;display:flex;justify-content:space-between;margin:0;-ms-overflow-style:none;padding:0;position:relative;scroll-behavior:smooth;scrollbar-width:none;width:100%}.grants-stepper__lines{display:flex;height:var(--progress-line-height);left:calc(var(--grants-step-width)/2);line-height:var(--lineheight-l);position:absolute;transform:translateY(calc(var(--circle-container-size) / 2 + var(--progress-line-height) / 2));z-index:1}.grants-stepper__line{background-color:var(--grants-stepper-color);display:inline-block;height:100%;position:relative}.grants-stepper__line__disabled{background-color:var(--grants-stepper-disabled-color)}.grants-stepper__steps{background-color:var(--grants-stepper-background-color);box-sizing:border-box;display:flex;flex-shrink:0;justify-content:center;max-width:var(--grants-step-width);min-width:var(--grants-step-width);padding:3px}.grants-stepper__step{align-items:center;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:rgba(0,0,0,0);border:0;box-sizing:content-box;color:var(--grants-stepper-color);cursor:pointer;display:flex;flex-direction:column;height:100%;justify-content:center;outline:none;overflow:visible;padding:0;position:relative}.grants-stepper__step[disabled],.grants-stepper__step__disabled{color:var(--grants-stepper-disabled-color);cursor:not-allowed}.grants-stepper__step[disabled] .grants-stepper__circle,.grants-stepper__step__disabled .grants-stepper__circle{background-color:var(--grants-stepper-background-color);border:2px solid var(--grants-stepper-disabled-color);color:var(--grants-stepper-disabled-color)}.grants-stepper__step[disabled] .grants-stepper__text,.grants-stepper__step__disabled .grants-stepper__text{color:var(--grants-stepper-disabled-color)}.grants-stepper__step__circle_container{align-items:center;display:flex;height:var(--circle-container-size);justify-content:center;width:var(--circle-container-size);z-index:2}.grants-stepper__step__completed_container{align-items:center;background-color:var(--grants-stepper-color);border-radius:16px;color:var(--color-white);display:none;justify-content:center;outline:2px solid var(--grants-stepper-background-color);padding:4px;vertical-align:middle}.grants-stepper .grants-stepper__error,.grants-stepper .grants-stepper__completed{display:none}.grants-stepper__text{color:var(--grants-stepper-not-selected-step-label-color);font-size:var(--fontsize-body-m);font-weight:500;line-height:var(--lineheight-l);margin-bottom:0;margin-top:6px;padding-left:var(--spacing-4-xs);padding-right:var(--spacing-4-xs);text-align:center;text-decoration:underline}.grants-stepper__circle{align-items:center;background-color:var(--grants-step-background-color);border:2px solid var(--grants-stepper-color);border-radius:16px;color:var(--grants-step-content-color);display:flex;height:28px;justify-content:center;outline:2px solid var(--grants-stepper-background-color);text-align:center;width:28px}.grants-stepper__number{font-size:var(--fontsize-body-m);font-weight:500;line-height:1.15}.grants-stepper .is-active .grants-stepper__circle{border:4px solid var(--grants-stepper-color);border-radius:18px;outline:none}.grants-stepper .is-active .grants-stepper__text{color:var(--grants-stepper-selected-step-label-color);font-weight:700;text-decoration:none}.grants-stepper .is-active .grants-stepper__number{color:var(--grants-stepper-selected-step-label-color);font-weight:700;text-decoration:none}.grants-stepper .is-complete .grants-stepper__container{align-items:center;background-color:var(--grants-stepper-color);border-radius:16px;color:var(--color-white);display:flex;justify-content:center;outline:2px solid var(--grants-stepper-background-color);padding:4px}.grants-stepper .is-complete .grants-stepper__number{display:none}.grants-stepper .is-complete .grants-stepper__completed{display:inline-block}.grants-stepper .is-complete .grants-stepper__circle{opacity:0}.grants-stepper .is-complete .grants-stepper__step__completed_container{display:flex}.grants-stepper .has-errors .grants-stepper__container{align-items:center;background-color:var(--grants-stepper-color);border-radius:16px;color:var(--color-white);display:flex;justify-content:center;outline:2px solid var(--grants-stepper-background-color);padding:4px}.grants-stepper .has-errors .grants-stepper__circle{border-color:var(--color-error);color:var(--color-error)}.grants-stepper .has-errors .grants-stepper__number{display:none}.grants-stepper .has-errors .grants-stepper__error{display:inline-block}.grants-stepper .progress-marker::before{display:none}.grants-stepper .progress-step .progress-marker{color:var(--color-black)}.grants-stepper .progress-step .progress-marker.focus-visible .grants-stepper__circle{outline:2px solid var(--color-black);outline:var(--outline-width, 2px) solid var(--color-black);outline-offset:2px}.grants-stepper .progress-step .progress-marker.focus-visible .grants-stepper__circle{outline:2px solid var(--color-black);outline:var(--outline-width, 2px) solid var(--color-black);outline-offset:2px}.grants-stepper .progress-step .progress-marker:focus-visible .grants-stepper__circle{outline:2px solid var(--color-black);outline:var(--outline-width, 2px) solid var(--color-black);outline-offset:2px}.grants-stepper .progress-step .progress-marker.focus-visible .grants-stepper__text{outline:2px solid var(--color-black);outline:var(--outline-width, 2px) solid var(--color-black)}.grants-stepper .progress-step .progress-marker.focus-visible .grants-stepper__text{outline:2px solid var(--color-black);outline:var(--outline-width, 2px) solid var(--color-black)}.grants-stepper .progress-step .progress-marker:focus-visible .grants-stepper__text{outline:2px solid var(--color-black);outline:var(--outline-width, 2px) solid var(--color-black)}.grants-stepper .progress-step:last-child{flex-grow:1}.grant-applications--select-wrapper{--border-width: 2px;--input-height: 56px;--menu-item-height: 53px;--icon-size: var(--spacing-m);--helper-color-default: var(--color-black-60);--helper-color-invalid: var(--color-error);--icon-color-invalid: var(--color-error);--input-background-default: var(--color-white);--input-background-disabled: var(--color-black-10);--input-border-color-default: var(--color-black-50);--input-border-color-hover: var(--color-black-90);--input-border-color-focus: var(--color-black-90);--input-border-color-invalid: var(--color-error);--input-border-color-disabled: var(--color-black-10);--input-color-default: var(--color-black-90);--input-color-disabled: var(--color-black-40);--label-color-default: var(--color-black-90);--label-color-invalid: var(--color-black-90);--placeholder-color: var(--color-black-60);--focus-outline-color: var(--color-coat-of-arms);align-items:center;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--input-background-default);border:var(--border-width) solid var(--input-border-color-default);box-sizing:border-box;color:var(--input-color-default);cursor:pointer;display:block;font-size:1.125em;grid-template-areas:"select";line-height:normal;max-width:30ch;min-width:15ch;padding:.25em .5em;position:relative;width:100%}.grant-applications--select-wrapper select{align-items:center;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:rgba(0,0,0,0);border:none;color:var(--dropdown-color-default);cursor:inherit;display:flex;font-family:inherit;font-size:var(--fontsize-body-l);height:var(--input-height);line-height:inherit;margin:0;min-height:var(--menu-item-height);outline:none;padding:calc(var(--spacing-s) - var(--border-width)*2) var(--spacing-s);width:100%;z-index:1}.grant-applications--select-wrapper select::-ms-expand{display:none}.grant-applications--select-wrapper i.hel-icon{pointer-events:none;position:absolute;right:calc(var(--spacing-s) - var(--border-width)*2);top:calc(var(--spacing-s) - var(--border-width)*2)}.grant-applications--select-wrapper select,.grant-applications--select-wrapper::after{grid-area:select}.grant-applications--select-wrapper:not(.select--multiple)::after{background-color:var(--helper-color-default);clip-path:polygon(100% 0%, 0 0%, 50% 100%);content:"";height:.5em;justify-self:end;width:.8em}.grant-applications--select-wrapper select:focus+.grant-applications--select-focus{border:2px solid var(--focus-outline-color);border-radius:inherit;bottom:-1px;left:-1px;position:absolute;right:-1px;top:-1px}.webform-submission__application_id{border-bottom:1px var(--color-black-20) solid;padding-bottom:var(--spacing-xl)}.webform-submission__application_id--header{font-size:1rem;font-weight:bold}.webform-submission__title-wrapper{padding-top:var(--spacing-2-xl)}.webform-submission__title-wrapper h1{max-width:100%}.webform-submission ul{list-style:none;margin-top:0;padding-left:0}.webform-submission-information{background:var(--color-silver-light);margin-top:var(--spacing-3-xl);padding:var(--spacing-l)}.webform-submission-information .webform-submission-information{margin-top:var(--spacing-l);padding:0}.webform-submission-information h4{margin-top:0}.webform-submission-information h5{font-size:var(--fontsize-body-m);margin-top:var(--spacing-s)}.webform-submission-information__row{display:flex}.webform-submission-information__row-edit{margin-top:var(--spacing-s)}.webform-submission-information__row-top{align-items:center;border-bottom:1px solid var(--color-black-20);justify-content:space-between}@media(max-width: 550px){.webform-submission-information__row-top{display:block}}.webform-submission-information__row-main{flex-flow:row nowrap;gap:var(--spacing-m);justify-content:space-between}@media(max-width: 1179px){.webform-submission-information__row-main{flex-flow:row wrap}}.webform-submission-information__row-main>div{flex:1}@media(max-width: 1179px){.webform-submission-information__row-main>div{flex:auto;width:100%}}.webform-submission-information__row-main>div ul{list-style-type:none;margin-bottom:0;padding-left:0}.webform-submission-information__row-main>div ul li{margin:0;padding:0}.webform-submission-information__supportlinks{display:flex;flex-flow:row nowrap;min-width:-moz-fit-content;min-width:fit-content}.webform-submission-information__supportlinks .hds-loading-spinner{left:0}.webform-submission-information__supportlinks .hds-button{min-width:-moz-fit-content;min-width:fit-content}.hel-icon.hel-icon--copy{-webkit-mask-image:url("data:image/svg+xml,%3Csvg class='Icon-module_icon__1Jtzj icon_hel-icon__1YqNC Icon-module_s__2WGWe icon_hel-icon--size-s__2Lkik' viewBox='0 0 24 24' role='img' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Crect width='24' height='24'%3E%3C/rect%3E%3Cpath fill='currentColor' d='M6,10 L6,12 L5,12 L5,18 L12,18 L12,17 L14,17 L14,19 C14,19.5522847 13.5522847,20 13,20 L4,20 C3.44771525,20 3,19.5522847 3,19 L3,11 C3,10.4477153 3.44771525,10 4,10 L6,10 Z M20,4 C20.5522847,4 21,4.44771525 21,5 L21,15 C21,15.5522847 20.5522847,16 20,16 L8,16 C7.44771525,16 7,15.5522847 7,15 L7,5 C7,4.44771525 7.44771525,4 8,4 L20,4 Z M19,6 L9,6 L9,14 L19,14 L19,6 Z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg class='Icon-module_icon__1Jtzj icon_hel-icon__1YqNC Icon-module_s__2WGWe icon_hel-icon--size-s__2Lkik' viewBox='0 0 24 24' role='img' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Crect width='24' height='24'%3E%3C/rect%3E%3Cpath fill='currentColor' d='M6,10 L6,12 L5,12 L5,18 L12,18 L12,17 L14,17 L14,19 C14,19.5522847 13.5522847,20 13,20 L4,20 C3.44771525,20 3,19.5522847 3,19 L3,11 C3,10.4477153 3.44771525,10 4,10 L6,10 Z M20,4 C20.5522847,4 21,4.44771525 21,5 L21,15 C21,15.5522847 20.5522847,16 20,16 L8,16 C7.44771525,16 7,15.5522847 7,15 L7,5 C7,4.44771525 7.44771525,4 8,4 L20,4 Z M19,6 L9,6 L9,14 L19,14 L19,6 Z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E")}.webform-submission-form .form-actions{border-top:1px rgba(0,0,0,.6) solid;margin-top:var(--spacing-l);padding-top:var(--spacing-2-xl)}@media(min-width: 768px){.webform-submission-form .form-actions{display:flex;flex-direction:row-reverse}}.webform-submission-form .form-actions .actions{display:flex;flex-wrap:wrap}.webform-submission-form .form-actions button{margin-left:0}@media(min-width: 768px){.webform-submission-form .form-actions button{margin-left:var(--spacing-2-xs)}}.webform-submission-form .form-actions input{margin-bottom:var(--spacing-layout-2-xs);width:100%}@media(min-width: 768px){.webform-submission-form .form-actions input{width:auto}}.webform-submission-form .form-actions input.webform-button--draft{background:rgba(0,0,0,0);border:0 rgba(0,0,0,0) solid;color:var(--hdbt-color-black);order:3;text-decoration:underline}.webform-submission-form .form-actions button.webform-button--next span::after,.webform-submission-form .form-actions button.webform-button--preview span::after{content:">";margin-left:var(--spacing-2-xs)}.webform-submission-form .form-actions button.webform-button--previous span::before{content:"<";margin-right:var(--spacing-2-xs)}.webform-submission-form .form-actions input.webform-button--previous{background:var(--color-white);color:var(--border-color)}.webform-button--draft .hds-button__label::before{background-color:currentColor;background-size:contain;content:"";display:inline-block;flex-shrink:0;height:24px;margin-right:var(--spacing-2-xs);-webkit-mask-image:var(--hel-icon--download-cloud);mask-image:var(--hel-icon--download-cloud);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:24px 24px;mask-size:24px 24px;transition:transform .2s linear;vertical-align:bottom;width:24px}.webform-submission-messages{background:var(--color-silver-light);margin-top:var(--spacing-3-xl);padding:var(--spacing-l)}.webform-submission-messages h4,.webform-submission-messages h5{margin-top:0}.webform-submission-messages hr{margin:var(--spacing-l) 0}.webform-submission-messages__new-message{align-items:center;background:var(--color-alert);display:inline-flex;font-weight:bold;gap:var(--spacing-2-xs);margin-bottom:var(--spacing-m);padding:var(--spacing-2-xs) var(--spacing-xs);text-transform:uppercase}.webform-submission-messages__messages-list{list-style:none;margin:0;padding:0}.webform-submission-messages__message{margin:0;padding:0}.webform-submission-messages__message__attachments{list-style:none}.webform-submission-messages__message .hds-button{margin-top:var(--spacing-s)}.js-form-type-grants-webform-summation-field{max-width:var(--webform-element-width--input-large);text-align:right}.js-form-type-grants-webform-summation-field .grants-webform-summation-field{display:inline-block;padding:var(--spacing-xs) var(--spacing-m)}.webform-print-header,.webform-print-footer{display:none}.webform-print .main-content{display:block}.webform-submission--view-mode-html .hds-text-input,.webform-submission-data-preview-page .hds-text-input,.webform-print-page-html .hds-text-input{max-width:100%}.webform-submission--view-mode-html .print-label,.webform-submission-data-preview-page .print-label,.webform-print-page-html .print-label{display:block;font-size:var(--fontsize-body-m);font-weight:500;margin-bottom:var(--spacing-3-xs);margin-top:0;max-width:-moz-fit-content;max-width:fit-content;padding-right:var(--spacing-xl);position:relative}.webform-submission--view-mode-html .webform-section-flex-wrapper h3+*>*:first-child>*:first-child,.webform-submission--view-mode-html .webform-section-flex-wrapper h3+*>*:first-child>*:first-child label:first-of-type,.webform-submission-data-preview-page .webform-section-flex-wrapper h3+*>*:first-child>*:first-child,.webform-submission-data-preview-page .webform-section-flex-wrapper h3+*>*:first-child>*:first-child label:first-of-type,.webform-print-page-html .webform-section-flex-wrapper h3+*>*:first-child>*:first-child,.webform-print-page-html .webform-section-flex-wrapper h3+*>*:first-child>*:first-child label:first-of-type{line-height:normal}.webform-submission--view-mode-html .print-notification,.webform-submission-data-preview-page .print-notification,.webform-print-page-html .print-notification{border:2px var(--color-black) solid;font-weight:bold;margin-top:var(--spacing-2-xl);padding:var(--spacing-layout-s)}.webform-submission--view-mode-html .print-notification .print-notification--icon,.webform-submission-data-preview-page .print-notification .print-notification--icon,.webform-print-page-html .print-notification .print-notification--icon{height:22px;margin-right:var(--spacing-2-xs);vertical-align:text-top;width:22px}.webform-submission--view-mode-html .webform-print-page-wizard-page~.webform-print-page-wizard-page h2,.webform-submission-data-preview-page .webform-print-page-wizard-page~.webform-print-page-wizard-page h2,.webform-print-page-html .webform-print-page-wizard-page~.webform-print-page-wizard-page h2{page-break-after:avoid;page-break-before:always}.webform-submission--view-mode-html div.hds-text-input__input,.webform-submission-data-preview-page div.hds-text-input__input,.webform-print-page-html div.hds-text-input__input{background:var(--color-white);border:2px var(--color-black) solid;height:var(--spacing-2-xl);width:100%}.webform-submission--view-mode-html div.hds-text-input__textarea,.webform-submission-data-preview-page div.hds-text-input__textarea,.webform-print-page-html div.hds-text-input__textarea{background:var(--color-white);border:2px var(--color-black) solid;height:var(--spacing-layout-2-xl);width:100%}.webform-submission--view-mode-html .webform-section-wrapper .hds-notification,.webform-submission-data-preview-page .webform-section-wrapper .hds-notification,.webform-print-page-html .webform-section-wrapper .hds-notification{margin-top:var(--spacing-s)}.webform-submission--view-mode-html .webform-print-page-body h2,.webform-submission-data-preview-page .webform-print-page-body h2,.webform-print-page-html .webform-print-page-body h2{margin-bottom:var(--spacing-layout-s)}.webform-submission--view-mode-html .webform-print-wrapper-table,.webform-submission-data-preview-page .webform-print-wrapper-table,.webform-print-page-html .webform-print-wrapper-table{border:0 rgba(0,0,0,0) solid;display:table;max-width:100%;overflow-x:visible;overflow-x:initial;width:100%}.webform-submission--view-mode-html .webform-print-wrapper-table thead,.webform-submission--view-mode-html .webform-print-wrapper-table tbody,.webform-submission--view-mode-html .webform-print-wrapper-table tfoot,.webform-submission--view-mode-html .webform-print-wrapper-table tr,.webform-submission--view-mode-html .webform-print-wrapper-table tbody tr:hover,.webform-submission--view-mode-html .webform-print-wrapper-table td,.webform-submission--view-mode-html .webform-print-wrapper-table td:first-child,.webform-submission--view-mode-html .webform-print-wrapper-table th,.webform-submission-data-preview-page .webform-print-wrapper-table thead,.webform-submission-data-preview-page .webform-print-wrapper-table tbody,.webform-submission-data-preview-page .webform-print-wrapper-table tfoot,.webform-submission-data-preview-page .webform-print-wrapper-table tr,.webform-submission-data-preview-page .webform-print-wrapper-table tbody tr:hover,.webform-submission-data-preview-page .webform-print-wrapper-table td,.webform-submission-data-preview-page .webform-print-wrapper-table td:first-child,.webform-submission-data-preview-page .webform-print-wrapper-table th,.webform-print-page-html .webform-print-wrapper-table thead,.webform-print-page-html .webform-print-wrapper-table tbody,.webform-print-page-html .webform-print-wrapper-table tfoot,.webform-print-page-html .webform-print-wrapper-table tr,.webform-print-page-html .webform-print-wrapper-table tbody tr:hover,.webform-print-page-html .webform-print-wrapper-table td,.webform-print-page-html .webform-print-wrapper-table td:first-child,.webform-print-page-html .webform-print-wrapper-table th{background:rgba(0,0,0,0);border:0;color:var(--color-black)}.webform-submission--view-mode-html .webform-print-wrapper-table ul,.webform-submission-data-preview-page .webform-print-wrapper-table ul,.webform-print-page-html .webform-print-wrapper-table ul{margin:0;padding:0}.webform-submission--view-mode-html .webform-print-wrapper-table ul li,.webform-submission-data-preview-page .webform-print-wrapper-table ul li,.webform-print-page-html .webform-print-wrapper-table ul li{border-bottom:1px var(--color-black-50) solid;list-style:none;margin-top:0;padding:1rem 0}.webform-submission--view-mode-html .webform-print-wrapper-table ul li:last-of-type,.webform-submission-data-preview-page .webform-print-wrapper-table ul li:last-of-type,.webform-print-page-html .webform-print-wrapper-table ul li:last-of-type{border-bottom:0 rgba(0,0,0,0) solid}.webform-submission--view-mode-html .webform-print-wrapper-table thead,.webform-submission-data-preview-page .webform-print-wrapper-table thead,.webform-print-page-html .webform-print-wrapper-table thead{display:table-header-group}.webform-submission--view-mode-html .webform-print-wrapper-table thead th,.webform-submission-data-preview-page .webform-print-wrapper-table thead th,.webform-print-page-html .webform-print-wrapper-table thead th{padding:0}.webform-submission--view-mode-html .webform-print-wrapper-table tfoot,.webform-submission-data-preview-page .webform-print-wrapper-table tfoot,.webform-print-page-html .webform-print-wrapper-table tfoot{display:table-footer-group}.webform-submission--view-mode-html .webform-submission-data>section,.webform-submission-data-preview-page .webform-submission-data>section,.webform-print-page-html .webform-submission-data>section{border-top:1px var(--color-black-20) solid;padding-top:var(--spacing-layout-l)}.webform-submission--view-mode-html .webform-submission-data>section>.webform-section-flex-wrapper,.webform-submission-data-preview-page .webform-submission-data>section>.webform-section-flex-wrapper,.webform-print-page-html .webform-submission-data>section>.webform-section-flex-wrapper{display:block}.webform-submission--view-mode-html .webform-submission-data>section>.webform-section-flex-wrapper>h2,.webform-submission-data-preview-page .webform-submission-data>section>.webform-section-flex-wrapper>h2,.webform-print-page-html .webform-submission-data>section>.webform-section-flex-wrapper>h2{font-size:var(--fontsize-heading-l) !important;margin:0 0 2mm !important;padding:0 !important;width:100% !important}.webform-submission--view-mode-html .webform-submission-data>section>.webform-section-flex-wrapper>h2,.webform-submission-data-preview-page .webform-submission-data>section>.webform-section-flex-wrapper>h2,.webform-print-page-html .webform-submission-data>section>.webform-section-flex-wrapper>h2{font-weight:500;min-width:100%}.webform-submission--view-mode-html .webform-submission-data>section>.webform-section-flex-wrapper>.webform-section-wrapper,.webform-submission-data-preview-page .webform-submission-data>section>.webform-section-flex-wrapper>.webform-section-wrapper,.webform-print-page-html .webform-submission-data>section>.webform-section-flex-wrapper>.webform-section-wrapper{padding:6mm 0}.webform-submission--view-mode-html .webform-submission-data>section>.webform-section-flex-wrapper>.webform-section-wrapper label,.webform-submission-data-preview-page .webform-submission-data>section>.webform-section-flex-wrapper>.webform-section-wrapper label,.webform-print-page-html .webform-submission-data>section>.webform-section-flex-wrapper>.webform-section-wrapper label{font-weight:500}.webform-submission--view-mode-html .webform-submission-data>section.hds-notification,.webform-submission-data-preview-page .webform-submission-data>section.hds-notification,.webform-print-page-html .webform-submission-data>section.hds-notification{padding-top:var(--spacing-s)}@media print{@page{.webform-submission--view-mode-html,.webform-submission-data-preview-page,.webform-print-page-html{margin:0;size:A4}}.webform-submission--view-mode-html h1,.webform-submission-data-preview-page h1,.webform-print-page-html h1{margin:0;position:relative}.webform-submission--view-mode-html details,.webform-submission-data-preview-page details,.webform-print-page-html details{page-break-before:always}.webform-submission--view-mode-html .details-section-divider,.webform-submission-data-preview-page .details-section-divider,.webform-print-page-html .details-section-divider{page-break-after:always}.webform-submission--view-mode-html label,.webform-submission-data-preview-page label,.webform-print-page-html label{font-size:8pt;margin-bottom:0}.webform-submission--view-mode-html section,.webform-submission-data-preview-page section,.webform-print-page-html section{border-top:0 var(--color-black-20) solid !important;padding-top:0 !important}.webform-submission--view-mode-html section,.webform-submission-data-preview-page section,.webform-print-page-html section{margin-bottom:0;padding-bottom:0}.webform-submission--view-mode-html div.main-content,.webform-submission-data-preview-page div.main-content,.webform-print-page-html div.main-content{margin:0}.webform-submission--view-mode-html button,.webform-submission--view-mode-html footer.footer,.webform-submission--view-mode-html header.header,.webform-submission--view-mode-html nav.breadcrumb,.webform-submission--view-mode-html .form-actions,.webform-submission--view-mode-html .hds-notification,.webform-submission--view-mode-html .messages__container,.webform-submission--view-mode-html .tools__container,.webform-submission--view-mode-html .breadcrumb__container,.webform-submission--view-mode-html .webform-progress,.webform-submission--view-mode-html .webform-progress-tracker,.webform-submission--view-mode-html .webform-progress-tracker-mobile,.webform-submission--view-mode-html .webform-multiple-add,.webform-submission--view-mode-html .webform-multiple-table--operations,.webform-submission-data-preview-page button,.webform-submission-data-preview-page footer.footer,.webform-submission-data-preview-page header.header,.webform-submission-data-preview-page nav.breadcrumb,.webform-submission-data-preview-page .form-actions,.webform-submission-data-preview-page .hds-notification,.webform-submission-data-preview-page .messages__container,.webform-submission-data-preview-page .tools__container,.webform-submission-data-preview-page .breadcrumb__container,.webform-submission-data-preview-page .webform-progress,.webform-submission-data-preview-page .webform-progress-tracker,.webform-submission-data-preview-page .webform-progress-tracker-mobile,.webform-submission-data-preview-page .webform-multiple-add,.webform-submission-data-preview-page .webform-multiple-table--operations,.webform-print-page-html button,.webform-print-page-html footer.footer,.webform-print-page-html header.header,.webform-print-page-html nav.breadcrumb,.webform-print-page-html .form-actions,.webform-print-page-html .hds-notification,.webform-print-page-html .messages__container,.webform-print-page-html .tools__container,.webform-print-page-html .breadcrumb__container,.webform-print-page-html .webform-progress,.webform-print-page-html .webform-progress-tracker,.webform-print-page-html .webform-progress-tracker-mobile,.webform-print-page-html .webform-multiple-add,.webform-print-page-html .webform-multiple-table--operations{display:none !important}.webform-submission--view-mode-html .gin--horizontal-toolbar .dialog-off-canvas-main-canvas,.webform-submission-data-preview-page .gin--horizontal-toolbar .dialog-off-canvas-main-canvas,.webform-print-page-html .gin--horizontal-toolbar .dialog-off-canvas-main-canvas{padding:0 !important}.webform-submission--view-mode-html .hds-text-input,.webform-submission-data-preview-page .hds-text-input,.webform-print-page-html .hds-text-input{max-width:100%}.webform-submission--view-mode-html .hds-text-input .hds-text-input__input,.webform-submission-data-preview-page .hds-text-input .hds-text-input__input,.webform-print-page-html .hds-text-input .hds-text-input__input{height:1cm}.webform-submission--view-mode-html .hds-text-input textarea.hds-text-input__input,.webform-submission--view-mode-html .hds-text-input div.hds-text-input__textarea,.webform-submission-data-preview-page .hds-text-input textarea.hds-text-input__input,.webform-submission-data-preview-page .hds-text-input div.hds-text-input__textarea,.webform-print-page-html .hds-text-input textarea.hds-text-input__input,.webform-print-page-html .hds-text-input div.hds-text-input__textarea{height:6cm;max-width:100%;min-width:100%;width:100%}.webform-submission--view-mode-html .hds-text-input .hds-text-input__input[readonly],.webform-submission--view-mode-html .hds-text-input .hds-text-input__input,.webform-submission-data-preview-page .hds-text-input .hds-text-input__input[readonly],.webform-submission-data-preview-page .hds-text-input .hds-text-input__input,.webform-print-page-html .hds-text-input .hds-text-input__input[readonly],.webform-print-page-html .hds-text-input .hds-text-input__input{border:2px var(--color-black) solid}.webform-submission--view-mode-html .webform-element,.webform-submission-data-preview-page .webform-element,.webform-print-page-html .webform-element{border:1px var(--color-black) solid;margin-bottom:8mm;padding:2.5mm;position:relative}.webform-submission--view-mode-html .webform-preview,.webform-submission-data-preview-page .webform-preview,.webform-print-page-html .webform-preview{margin-top:0}.webform-submission--view-mode-html .webform-preview label,.webform-submission-data-preview-page .webform-preview label,.webform-print-page-html .webform-preview label{align-items:flex-end;display:flex;font-size:8pt;height:100%;left:0;pointer-events:none;position:absolute;top:-100%;width:100%}.webform-submission--view-mode-html .webform-preview .webform-element,.webform-submission-data-preview-page .webform-preview .webform-element,.webform-print-page-html .webform-preview .webform-element{border:1px var(--color-black) solid;margin-bottom:8mm;padding:2.5mm;position:relative;top:5mm}.webform-submission--view-mode-html .webform-preview .webform-multiple-table--operations,.webform-submission-data-preview-page .webform-preview .webform-multiple-table--operations,.webform-print-page-html .webform-preview .webform-multiple-table--operations{display:none}.webform-submission--view-mode-html .webform-print-header,.webform-submission-data-preview-page .webform-print-header,.webform-print-page-html .webform-print-header{align-items:center;background:var(--color-white);border-bottom:1px var(--color-black-40) solid;display:flex;flex-flow:row nowrap;font-size:9pt;height:21mm;left:0;max-width:100%;min-width:100%;position:fixed;top:0;width:100%;z-index:1000}.webform-submission--view-mode-html .webform-print-header svg,.webform-submission-data-preview-page .webform-print-header svg,.webform-print-page-html .webform-print-header svg{color:var(--color-black);display:block;height:25mm;margin-right:3mm;width:55mm}.webform-submission--view-mode-html .webform-print-header .webform-print-header-left-text,.webform-submission-data-preview-page .webform-print-header .webform-print-header-left-text,.webform-print-page-html .webform-print-header .webform-print-header-left-text{color:var(--color-black-40);text-align:left;width:100%}.webform-submission--view-mode-html .webform-print-header .webform-print-header-right-text,.webform-submission-data-preview-page .webform-print-header .webform-print-header-right-text,.webform-print-page-html .webform-print-header .webform-print-header-right-text{color:var(--color-black-40);text-align:right;width:100%}.webform-submission--view-mode-html .webform-print-footer,.webform-submission-data-preview-page .webform-print-footer,.webform-print-page-html .webform-print-footer{align-items:center;background:var(--color-white);border-top:1px var(--color-black-40) solid;bottom:0;display:flex;flex-flow:row nowrap;font-size:9pt;height:17mm;left:0;max-width:100%;min-width:100%;position:fixed;width:100%;z-index:1000}.webform-submission--view-mode-html .webform-print-footer svg,.webform-submission-data-preview-page .webform-print-footer svg,.webform-print-page-html .webform-print-footer svg{color:var(--color-black);display:block;height:15mm;margin-right:3mm;width:33mm}.webform-submission--view-mode-html .webform-print-footer .webform-print-footer-left-text,.webform-submission-data-preview-page .webform-print-footer .webform-print-footer-left-text,.webform-print-page-html .webform-print-footer .webform-print-footer-left-text{color:var(--color-black-40);text-align:left;width:100%}.webform-submission--view-mode-html .webform-print-footer .webform-print-footer-right-text,.webform-submission-data-preview-page .webform-print-footer .webform-print-footer-right-text,.webform-print-page-html .webform-print-footer .webform-print-footer-right-text{color:var(--color-black-40);text-align:right;width:100%}.webform-submission--view-mode-html .webform-print-header-space,.webform-submission-data-preview-page .webform-print-header-space,.webform-print-page-html .webform-print-header-space{background:var(--color-white);font-size:9pt;height:21mm}.webform-submission--view-mode-html .webform-print-footer-space,.webform-submission-data-preview-page .webform-print-footer-space,.webform-print-page-html .webform-print-footer-space{background:var(--color-white);font-size:9pt;height:17mm}.webform-submission--view-mode-html .webform-print-wrapper-table,.webform-submission-data-preview-page .webform-print-wrapper-table,.webform-print-page-html .webform-print-wrapper-table{border:0;margin:0;overflow-x:visible;overflow-x:initial}.webform-submission--view-mode-html .webform-section-flex-wrapper,.webform-submission-data-preview-page .webform-section-flex-wrapper,.webform-print-page-html .webform-section-flex-wrapper{flex-flow:row wrap}.webform-submission--view-mode-html .webform-section-flex-wrapper>h3.webform-section-title,.webform-submission-data-preview-page .webform-section-flex-wrapper>h3.webform-section-title,.webform-print-page-html .webform-section-flex-wrapper>h3.webform-section-title{max-width:100%;width:100%}.webform-submission--view-mode-html .webform-section-grid-wrapper,.webform-submission-data-preview-page .webform-section-grid-wrapper,.webform-print-page-html .webform-section-grid-wrapper{display:flex;flex-flow:row nowrap}.webform-submission--view-mode-html .webform-section-grid-wrapper>h3.webform-section-title,.webform-submission-data-preview-page .webform-section-grid-wrapper>h3.webform-section-title,.webform-print-page-html .webform-section-grid-wrapper>h3.webform-section-title{font-size:1.25rem;margin-top:0;max-width:5cm;width:100%}.webform-submission--view-mode-html .webform-section-grid-wrapper>dl.webform-section-contents,.webform-submission-data-preview-page .webform-section-grid-wrapper>dl.webform-section-contents,.webform-print-page-html .webform-section-grid-wrapper>dl.webform-section-contents{margin-top:0;max-width:100%;padding-left:1cm;width:100%}.webform-submission--view-mode-html .webform-section-grid-wrapper>dl.webform-section-contents dt,.webform-submission-data-preview-page .webform-section-grid-wrapper>dl.webform-section-contents dt,.webform-print-page-html .webform-section-grid-wrapper>dl.webform-section-contents dt{font-weight:bold;margin:0;padding:0;page-break-after:avoid}.webform-submission--view-mode-html .webform-section-grid-wrapper>dl.webform-section-contents dd,.webform-submission-data-preview-page .webform-section-grid-wrapper>dl.webform-section-contents dd,.webform-print-page-html .webform-section-grid-wrapper>dl.webform-section-contents dd{margin:0;padding:0;page-break-before:avoid}.webform-submission--view-mode-html .webform-print-page-body h2,.webform-submission-data-preview-page .webform-print-page-body h2,.webform-print-page-html .webform-print-page-body h2{margin-bottom:1cm}}.webform-submission-data dl dt{font-weight:bold}.webform-submission-data dl dd{margin:0;padding:0}.webform-submission-data dl dl{padding-left:var(--spacing-2-xs)}.webform-submission-data dl>br{display:none}.webform-print-page-html .webform-section-wrapper>h4,.webform-print-page-html .webform-section-wrapper .print-label{margin-top:var(--spacing-2-xs);line-height:1.5}.webform-print-page-html .webform-section-wrapper fieldset{padding:var(--spacing-s)}@media(min-width: 768px){.webform-print-page-html .webform-section-wrapper fieldset{min-width:400px;padding:var(--spacing-s) var(--spacing-m)}}.application-list{padding-bottom:var(--spacing-xl);padding-left:0}.application-list__processed-human-readable{display:none}.application-list__item{background:var(--color-bus-light);display:block;margin:var(--spacing-m) 0;padding:var(--spacing-2-xl) var(--spacing-s) var(--spacing-m);position:relative}.application-list__item .new-message{background-color:var(--color-alert);border-radius:var(--spacing-xl);display:inline-block;padding:var(--spacing-2-xs)}.application-list__item .new-message .hel-icon--size-s{height:20px;width:20px}.application-list__item h3,.application-list__item h4{margin-top:var(--spacing-xs)}.application-list__item h4{font-size:1rem}.application-list__item--submitted{display:none}.application-list__item__link{display:flex;margin-top:var(--spacing-m)}.application-list__item__link a{font-size:1.25rem}.application-list__item__link a i{vertical-align:text-bottom}.application-list__item__row{display:flex;flex-flow:row wrap;gap:var(--spacing-m);justify-content:space-between}.application-list__item__row__left{justify-content:flex-start}.application-list__item__row__top{padding:var(--spacing-2-xs) var(--spacing-s) var(--spacing-2-xs) 0;position:absolute;top:0;width:100%}.application-list__item--status{--status-label-height: 32px;align-items:center;border-radius:20px;display:inline-flex;font-size:var(--fontsize-body-s);line-height:var(--status-label-height);min-height:var(--status-label-height);padding:var(--spacing-3-xs) var(--spacing-s);padding-left:var(--spacing-xs);vertical-align:middle}.application-list__item--status+.hds-loading-spinner{display:inline-block;left:10px;margin:0;padding:0;position:relative;top:var(--spacing-3-xs)}.application-list__item--status.hide-spinner+.hds-loading-spinner{display:none}.application-list__item--status+div+.application-list__item--error{display:none}.application-list__item--status.show-error{background:var(--color-black-20);color:var(--color-black-90)}.application-list__item--status.show-error+div+.application-list__item--error{display:inline-flex;left:var(--spacing-xs);margin:0;padding:0;position:relative;top:var(--spacing-3-xs)}.application-list__item--status.show-error+div+.application-list__item--error .application-list--error-text{display:inline-block;margin-left:var(--spacing-2-xs)}.application-list__item--status--draft{padding-left:0}.application-list__item--status--sent,.application-list__item--status--submitted{background:var(--color-black-10)}.application-list__item--status--sent::before,.application-list__item--status--submitted::before{--icon-size: 1.5rem;background-color:#000;background-size:contain;content:"";display:inline-block;height:calc(var(--line-height) * 1em);height:var(--icon-size, calc(var(--line-height) * 1em));-webkit-mask-image:var(--hel-icon--alert-circle);mask-image:var(--hel-icon--alert-circle);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);-webkit-mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));vertical-align:bottom;width:calc(var(--line-height) * 1em);width:var(--icon-size, calc(var(--line-height) * 1em));background-color:var(--color-black);content:"";margin-right:var(--spacing-2-xs)}.application-list__item--status--received,.application-list__item--status--pending,.application-list__item--status--processing,.application-list__item--status--preparing{background:var(--color-info);color:var(--color-white)}.application-list__item--status--received::before,.application-list__item--status--pending::before,.application-list__item--status--processing::before,.application-list__item--status--preparing::before{--icon-size: 1.5rem;background-color:#000;background-size:contain;content:"";display:inline-block;height:calc(var(--line-height) * 1em);height:var(--icon-size, calc(var(--line-height) * 1em));-webkit-mask-image:var(--hel-icon--info-circle);mask-image:var(--hel-icon--info-circle);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);-webkit-mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));vertical-align:bottom;width:calc(var(--line-height) * 1em);width:var(--icon-size, calc(var(--line-height) * 1em));background-color:var(--color-white);content:"";margin-right:var(--spacing-2-xs)}.application-list__item--status--done,.application-list__item--status--ready,.application-list__item--status--resolved{background:var(--color-success);color:var(--color-white)}.application-list__item--status--done::before,.application-list__item--status--ready::before,.application-list__item--status--resolved::before{--icon-size: 1.5rem;background-color:#000;background-size:contain;content:"";display:inline-block;height:calc(var(--line-height) * 1em);height:var(--icon-size, calc(var(--line-height) * 1em));-webkit-mask-image:var(--hel-icon--check-circle);mask-image:var(--hel-icon--check-circle);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);-webkit-mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));vertical-align:bottom;width:calc(var(--line-height) * 1em);width:var(--icon-size, calc(var(--line-height) * 1em));background-color:var(--color-white);content:"";margin-right:var(--spacing-2-xs)}.application-list__item--status--rejected,.application-list__item--status--deleted,.application-list__item--status--canceled,.application-list__item--status--cancelled{background:var(--color-alert)}.application-list__item--status--rejected::before,.application-list__item--status--deleted::before,.application-list__item--status--canceled::before,.application-list__item--status--cancelled::before{--icon-size: 1.5rem;background-color:#000;background-size:contain;content:"";display:inline-block;height:calc(var(--line-height) * 1em);height:var(--icon-size, calc(var(--line-height) * 1em));-webkit-mask-image:var(--hel-icon--alert-circle);mask-image:var(--hel-icon--alert-circle);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);-webkit-mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));vertical-align:bottom;width:calc(var(--line-height) * 1em);width:var(--icon-size, calc(var(--line-height) * 1em));background-color:var(--color-black);content:"";margin-right:var(--spacing-2-xs)}.application-list__item--status--error{background:var(--color-black-20);color:var(--color-black);text-transform:uppercase}.application-list__item--status--error .hel-icon{margin-right:var(--spacing-3-xs)}.application-list__count{font-size:1.5rem}.application-list__count-value{font-weight:bold}.application-list__information-row{align-items:flex-end;display:flex;flex-flow:row nowrap;justify-content:space-between;width:100%}@media(max-width: 35rem){.application-list__information-row{flex-flow:row wrap}}.application-list__information-row .grant-applications--select-wrapper select{max-width:100%;width:322px}.application-list__status__wrapper{background:var(--color-black-5)}.application-list__status__container{display:flex;flex-flow:row wrap;gap:var(--spacing-layout-m);justify-content:flex-start;padding-bottom:var(--spacing-m);padding-top:var(--spacing-m)}.application-list__status__label{font-weight:bold}.application-list__status__value{display:flex;flex-flow:row;justify-items:center;min-height:var(--spacing-xl)}.application-list__status__value>div{margin:auto}.application-list__search-row{align-items:flex-end;display:flex;flex-flow:row nowrap;gap:var(--spacing-s);justify-content:space-between;width:100%}@media(max-width: 35rem){.application-list__search-row{flex-flow:row wrap}}.application-list__search-row .hds-text-input{flex:1 100%;max-width:100%}.application-list__search-row .hds-text-input__input-wrapper{display:block}.application-list__search-row .hds-text-input__input-wrapper input{width:100%}.application-list__search-row button{white-space:nowrap}.application-list__pagination{--line-height: 1.5555555556;font-size:1.125rem;font-weight:400;line-height:var(--line-height);display:inline-flex;flex-wrap:wrap;font-weight:700;gap:var(--spacing-2-xs);justify-content:center;list-style:none;padding:0}.application-list__pagination li{margin-top:0}.application-list__pagination li.active a{text-decoration:underline}.application-list__pagination li.disabled a{cursor:default;text-decoration:none}.application-list__pagination li.disabled a:hover,.application-list__pagination li.disabled a:focus,.application-list__pagination li.disabled a:active{outline:none;text-decoration:none}.application-list__pagination li a{color:var(--color-black-90);display:block;height:var(--link-height);min-width:40px;padding-left:var(--spacing-3-xs);padding-right:var(--spacing-3-xs);text-decoration:none}.application-list__pagination li a:hover{text-decoration:underline}.application-list__pagination li a:focus,.application-list__pagination li a:active{outline:solid var(--color-coat-of-arms) 3px;outline-offset:1px}.grants-profile hr{border:1px solid var(--color-silver);margin:var(--spacing-layout-xs) 0}.grants-profile h3.info-grants{border-bottom:2px solid var(--color-silver);padding-bottom:var(--spacing-l)}.grants-profile--title{align-items:center;display:flex;flex-flow:row nowrap}.grants-profile--title .grants-profile--initials{border-radius:50%;display:none;font-size:var(--fontsize-body-xl);font-weight:bold;height:var(--spacing-4-xl);line-height:var(--spacing-4-xl);margin-right:var(--spacing-m);text-align:center;vertical-align:middle;width:var(--spacing-4-xl)}@media(min-width: 992px){.grants-profile--title .grants-profile--initials{display:block}}.grants-profile--title .grants-profile--initials:hover,.grants-profile--title .grants-profile--initials:active,.grants-profile--title .grants-profile--initials:focus{text-decoration:underline}.grants-profile--title .grants-profile--initials-colorscheme-2{background-color:var(--color-bus);color:var(--color-white)}.grants-profile--title .grants-profile--initials-colorscheme-1{background-color:var(--color-engel);color:var(--color-black)}.grants-profile--title .grants-profile--initials-colorscheme-0{background-color:var(--color-tram);color:var(--color-white)}.grants-profile--title h1{flex-grow:100}.grants-profile--basicinfo{--line-height: 1.5;background-color:var(--color-silver-light);border-bottom:8px solid var(--color-engel-dark);padding-bottom:var(--spacing-2-xs);padding-top:var(--spacing-l)}.grants-profile--basicinfo h3{font-size:var(--fontsize-heading-l);margin-top:0;padding-top:0}.grants-profile--extrainfo{padding-bottom:var(--spacing-l);padding-top:var(--spacing-l)}.grants-profile--extrainfo .hds-notification{margin-bottom:var(--spacing-xl)}.grants-profile--extrainfo fieldset.form-wrapper{background-color:var(--color-silver-light);border:0;padding:var(--spacing-l)}.grants-profile--extrainfo fieldset.inline-error-message{background-color:transparent;background-color:initial;padding:0 0 0 var(--spacing-2-xs)}.grants-profile--extrainfo fieldset.inline-error-message legend{display:none}.grants-profile--update-link{margin-bottom:var(--spacing-layout-2-xs);margin-top:var(--spacing-layout-xs)}.grants-profile--infotext{font-size:var(--fontsize-body-l);margin-bottom:var(--spacing-s)}.grants-profile--wrapper{display:flex;flex-wrap:wrap}.grants-profile--wrapper-item{margin-bottom:var(--spacing-layout-2-xs);width:100%}@media(min-width: 576px){.grants-profile--wrapper-item{flex:1;margin-bottom:0}}.grants-profile--wrapper-item:first-child{flex:auto;margin-bottom:var(--spacing-layout-2-xs);width:100%}.grants-profile .profile-add-more{margin-top:1em}[dir="ltr"] .grants-profile dd{margin-left:0}[dir="rtl"] .grants-profile dd{margin-right:0}.grants-profile--officials{margin-left:0;padding-left:0}.grants-profile--officials-item{border-left:4px var(--color-copper) solid;display:flex;flex-flow:row nowrap;justify-content:space-between;list-style:none;margin-bottom:var(--spacing-layout-s);margin-left:0;max-width:var(--webform-element-width--input-large);padding-left:var(--spacing-layout-xs);width:100%}.grants-profile--officials-item--position{font-size:var(--fontsize-heading-xs);font-weight:bold;margin-bottom:var(--spacing-layout-2-xs);margin-top:0;padding-top:0}.grants-profile--officials-edit-wrapper{text-align:right}.grants-profile--officials-edit-wrapper a{display:inline-block}.grants-profile .hel-icon--check-circle-fill{color:var(--color-success);vertical-align:middle}.grants-profile-grants-profile .tabledrag-toggle-weight-wrapper,.grants-profile-grants-profile .field-multiple-drag{display:none}.grants-profile .hds-text-input__label{display:inline-block;margin-top:0}.page--oma-asiointi__private-person .grants-profile--basicinfo{border-bottom:8px solid var(--color-copper)}.page--oma-asiointi__private-person .grants-profile--wrapper{display:grid;grid-template-columns:1fr 1fr}.page--oma-asiointi__unregistered-community .grants-profile--wrapper{display:grid;grid-template-columns:1fr 1fr}.hds-link .hel-icon{margin-right:var(--spacing-2-xs);vertical-align:bottom}.hds-link span.link-label{font-weight:bold;margin-right:var(--spacing-m)}.bold-link{font-weight:bold}div.applicant-info--from-prh,div.applicant-info--from-grants{display:grid;grid-template-columns:1fr}@media(min-width: 576px){div.applicant-info--from-prh,div.applicant-info--from-grants{grid-template-columns:1fr 1fr}}@media(min-width: 768px){div.applicant-info--from-prh,div.applicant-info--from-grants{grid-template-columns:1fr 1fr 1fr}}div.applicant-info--from-prh .form-required::after,div.applicant-info--from-grants .form-required::after{content:none}div.applicant-info--from-prh{border-bottom:2px solid var(--color-silver);margin-bottom:var(--spacing-layout-xs);padding-bottom:var(--spacing-layout-2-xs)}div.grants-handler--prefilled-field .field-prefix,.grants-profile-prh-info .field-prefix{display:block;position:absolute;right:var(--spacing-layout-s);top:0}div.grants-handler--prefilled-field .hds-text-input__input-wrapper,div.grants-handler--prefilled-field .description,.grants-profile-prh-info .hds-text-input__input-wrapper,.grants-profile-prh-info .description{display:inline-block;white-space:normal}div.grants-handler--prefilled-field .hel-icon--check-circle-fill,.grants-profile-prh-info .hel-icon--check-circle-fill{color:var(--color-success);vertical-align:middle}div.grants-handler--prefilled-field .hds-text-input__input,div.grants-handler--prefilled-field .webform-element-description,.grants-profile-prh-info .hds-text-input__input,.grants-profile-prh-info .webform-element-description{color:var(--color-black);display:block;font-size:var(--fontsize-body-m);line-height:var(--spacing-m);position:relative}div.grants-handler--prefilled-field .hds-text-input__label,.grants-profile-prh-info .hds-text-input__label{margin-bottom:0}.grants-profile--imported-section .webform-section-flex-wrapper{background-color:var(--color-silver-light);border-bottom:8px solid var(--color-engel-dark);display:block;padding-bottom:var(--spacing-2-xs);padding-left:var(--spacing-l);padding-right:var(--spacing-l);padding-top:var(--spacing-l);width:100%}.grants-profile--imported-section .webform-section-flex-wrapper h3.webform-section-title{font-size:var(--fontsize-heading-l);font-weight:400;margin-top:0;max-width:100%;padding-top:0;width:100%}.grants-profile--imported-section .webform-section-flex-wrapper .webform-section-wrapper{padding:0}.grants-profile--imported-section .webform-section-flex-wrapper .hds-text-input{margin-bottom:0}.grants-profile--imported-section .webform-section-flex-wrapper #edit-grants-profile-items-container{display:flex;flex-flow:row wrap;justify-content:space-between;margin-bottom:var(--spacing-layout-xs);margin-top:var(--spacing-layout-xs);width:100%}.grants-profile--imported-section .webform-section-flex-wrapper #edit-grants-profile-items-container>div{margin:0 var(--spacing-layout-xs) 0 0;min-width:160px}.grants-profile--imported-section .webform-section-flex-wrapper #edit-grants-profile-items-container .hds-text-input__input-wrapper{display:none}.grants-profile--imported-section .webform-section-flex-wrapper #edit-grants-profile-items-container label{font-size:var(--fontsize-body-m);font-weight:bold;margin:0}.grants-profile--imported-section .webform-section-flex-wrapper .form-item-prh-markup{border-bottom:2px solid var(--color-silver);padding-bottom:var(--spacing-layout-xs);padding-top:var(--spacing-layout-xs)}.grants-profile__local-tasks__wrapper{margin-bottom:0}.openid-connect-login-form.openid-connect-login-form{border-bottom:0;margin-bottom:0;padding-bottom:0}.grants-profile--links{display:flex;justify-content:space-between}.company-delete-confirm-form .form-actions{margin-top:var(--spacing-layout-xs)}.company-delete-confirm-form .form-submit{margin-right:var(--spacing-2-xs)}.page--oma-asiointi .main-content{margin-top:0}.page--oma-asiointi .main-content h2{margin-top:var(--spacing-m)}.hero--oma-asiointi{margin-bottom:var(--spacing-l)}.hero--oma-asiointi .container{padding-top:var(--spacing-layout-m)}.hero--oma-asiointi .hero__text-content{align-items:center;display:flex}.hero--oma-asiointi .hero__title{margin-left:0}@media(min-width: 576px){.hero--oma-asiointi .hero__title{margin-left:40px}}.hero--oma-asiointi .hel-icon{display:none}@media(min-width: 576px){.hero--oma-asiointi .hel-icon{--icon-size: 48px;display:block;flex-shrink:0}}#oma-asiointi__sent{background:var(--color-silver-light)}#oma-asiointi__sent .application-list__item{background:var(--color-white)}.oma-asiointi-block{background-color:var(--color-silver-light);padding-bottom:var(--spacing-l);padding-top:var(--spacing-l)}.oma-asiointi-block h2{margin-bottom:var(--spacing-s);margin-top:0}.oma-asiointi-block h3{font-size:var(--fontsize-heading-m);font-weight:500}.oma-asiointi-block .header{border-bottom:1px solid var(--color-silver-dark);display:flex;justify-content:space-between;padding-bottom:var(--spacing-xs)}.oma-asiointi-block .header .user,.oma-asiointi-block .header .link{font-weight:700}.oma-asiointi-block .header .link .hel-icon{vertical-align:text-top}.oma-asiointi-block--link{display:block;position:relative;text-decoration:none}.oma-asiointi-block--link::after{--icon-size: 1.5rem;background-color:#000;background-size:contain;content:"";display:inline-block;height:calc(var(--line-height) * 1em);height:var(--icon-size, calc(var(--line-height) * 1em));-webkit-mask-image:var(--hel-icon--arrow-right);mask-image:var(--hel-icon--arrow-right);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);-webkit-mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));vertical-align:bottom;width:calc(var(--line-height) * 1em);width:var(--icon-size, calc(var(--line-height) * 1em));transition:transform .2s linear;bottom:var(--spacing-m);content:"";display:block;flex-shrink:0;margin-left:-4px;margin-top:var(--spacing-2-xs);position:absolute;right:var(--spacing-m)}@media(prefers-reduced-motion){.oma-asiointi-block--link::after{transition:none}}@media(min-width: 576px){.oma-asiointi-block--link::after{--icon-size: 3rem;margin-left:-8px;margin-top:var(--spacing-s)}}.oma-asiointi-block--link:focus::after,.oma-asiointi-block--link:hover::after{transform:translateX(var(--spacing-2-xs))}@media(prefers-reduced-motion){.oma-asiointi-block--link:focus::after,.oma-asiointi-block--link:hover::after{transform:none}}.oma-asiointi-block .new-message{background-color:var(--color-alert);display:inline-block;font-weight:500;padding:var(--spacing-2-xs);text-transform:uppercase}.oma-asiointi-block .new-messages-length{background-color:var(--color-black-20);border-radius:50%;display:inline-block;font-size:var(--fontsize-heading-s);height:30px;line-height:30px;margin-left:var(--spacing-m);position:relative;text-align:center;width:30px}.oma-asiointi-block .new-messages-length.has-new-messages{background-color:var(--color-alert)}@media(min-width: 768px){.oma-asiointi-block .content{display:grid;grid-gap:var(--spacing-s);grid-template-columns:1fr 1fr}}.oma-asiointi-block .submission,.oma-asiointi-block .message{background-color:var(--color-white);margin-bottom:var(--spacing-s);margin-top:var(--spacing-s);padding:var(--spacing-m)}.oma-asiointi-block .submission .submission-title,.oma-asiointi-block .submission .message-title,.oma-asiointi-block .message .submission-title,.oma-asiointi-block .message .message-title{font-size:var(--fontsize-heading-s);font-weight:500;margin-bottom:var(--spacing-2-xs);margin-top:0;text-decoration:underline}.oma-asiointi-block .submission .message-title,.oma-asiointi-block .message .message-title{margin-top:var(--spacing-s)}.oma-asiointi-block .submission:hover .submission-title,.oma-asiointi-block .submission:hover .message-title,.oma-asiointi-block .message:hover .submission-title,.oma-asiointi-block .message:hover .message-title{text-decoration:none}.oma-asiointi-block .message{padding-right:var(--spacing-5-xl)}.oma-asiointi{margin-top:var(--spacing-l)}.oma-asiointi ul{padding:0}.oma-asiointi__list{padding-bottom:var(--spacing-l);padding-top:var(--spacing-l)}.oma-asiointi__list h2{margin-bottom:var(--spacing-m);margin-top:0}.oma-asiointi #oma-asiointi__sent{padding-top:var(--spacing-s)}.oma-asiointi .oma-asiointi-infoboxes-container .oma-asiointi-infoboxes{gap:var(--spacing-3-xl);margin:var(--spacing-2-xl) 0}@media(min-width: 768px){.oma-asiointi .oma-asiointi-infoboxes-container .oma-asiointi-infoboxes{display:flex}}.oma-asiointi .oma-asiointi-infoboxes-container .oma-asiointi-infobox{background-color:var(--color-info-light);flex:1;margin-bottom:var(--spacing-layout-2-xs);padding:var(--spacing-l)}@media(min-width: 768px){.oma-asiointi .oma-asiointi-infoboxes-container .oma-asiointi-infobox{margin-bottom:0}}.oma-asiointi .oma-asiointi-infoboxes-container .oma-asiointi-infobox:last-of-type{margin-bottom:0}.oma-asiointi .oma-asiointi-infoboxes-container .oma-asiointi-infobox--link{display:flex;margin-top:var(--spacing-layout-2-xs)}.oma-asiointi .oma-asiointi-infoboxes-container .oma-asiointi-infobox--link a{font-size:1.25rem}.oma-asiointi .oma-asiointi-infoboxes-container .oma-asiointi-infobox h3{margin-top:0}.asiointirooli-block{background-color:var(--color-black);color:var(--color-white);font-weight:500;margin-bottom:16px;padding:var(--spacing-2-xs)}.asiointirooli-block a{color:var(--color-white)}.asiointirooli-block .link--switch-role,.asiointirooli-block .link--stop-mandate{color:var(--color-white);margin-left:var(--spacing-layout-s)}@media(max-width: 768px){.asiointirooli-block .link--switch-role,.asiointirooli-block .link--stop-mandate{display:block;margin-left:0}}.asiointirooli-block .link--stop-mandate::before{--icon-size: 1.5rem;background-color:#000;background-size:contain;content:"";display:inline-block;height:calc(var(--line-height) * 1em);height:var(--icon-size, calc(var(--line-height) * 1em));-webkit-mask-image:var(--hel-icon--cross-circle-fill);mask-image:var(--hel-icon--cross-circle-fill);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);-webkit-mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));vertical-align:bottom;width:calc(var(--line-height) * 1em);width:var(--icon-size, calc(var(--line-height) * 1em));background-color:var(--color-white);content:"";display:inline-block;margin-right:10px;-webkit-mask-image:url('data:image/svg+xml, ');mask-image:url('data:image/svg+xml, ')}.asiointirooli-block .link--switch-role::before{--icon-size: 1.5rem;background-color:#000;background-size:contain;content:"";display:inline-block;height:calc(var(--line-height) * 1em);height:var(--icon-size, calc(var(--line-height) * 1em));-webkit-mask-image:var(--hel-icon--swap-user);mask-image:var(--hel-icon--swap-user);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);-webkit-mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));vertical-align:bottom;width:calc(var(--line-height) * 1em);width:var(--icon-size, calc(var(--line-height) * 1em));background-color:var(--color-white);content:"";display:inline-block;margin-right:10px;-webkit-mask-image:url('data:image/svg+xml, ');mask-image:url('data:image/svg+xml, ')}#grants-mandate-type .form-actions{display:flex;flex-direction:column;flex-wrap:wrap;justify-content:flex-start;width:100%}@media(min-width: 576px){#grants-mandate-type .form-actions{flex-direction:row;margin-left:calc(-1*var(--spacing-m));width:calc(100% + var(--spacing-m))}}#grants-mandate-type .form-actions .hds-card--applicant-role{margin-bottom:var(--spacing-l);position:relative;width:100%}@media(min-width: 576px){#grants-mandate-type .form-actions .hds-card--applicant-role{margin-left:var(--spacing-m);width:calc(50% - var(--spacing-m))}}@media(min-width: 992px){#grants-mandate-type .form-actions .hds-card--applicant-role{width:calc(33.3333333333% - var(--spacing-m))}}#grants-mandate-type .form-actions .hds-card--applicant-role .hds-card__body{align-content:space-between;height:100%}#grants-mandate-type .form-actions .hds-card--applicant-role .hds-card--mandate-card-content{display:grid;gap:var(--spacing-m);grid-gap:var(--spacing-m)} +body{--webform-element-width--input-small: 184px;--webform-element-width--input-medium: 332px;--webform-element-width--input-large: 591px;--webform-element-width--fieldset: 714px}.hel-icon--size-xs,.hds-icon--size-xs{height:16px;width:16px}.hel-icon--size-s,.hds-icon--size-s{height:24px;width:24px}.hel-icon--size-m,.hds-icon--size-m{height:32px;width:32px}.hel-icon--size-l,.hds-icon--size-l{height:48px;width:48px}.hel-icon--size-xl,.hds-icon--size-xl{height:64px;width:64px}.hel-icon.hel-icon--pen-line{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,");mask-image:url("data:image/svg+xml;charset=utf-8,")}.hel-icon.hds-icon--company{background:var(--color-black);-webkit-mask-image:url("data:image/svg+xml;charset=utf-8, ");mask-image:url("data:image/svg+xml;charset=utf-8, ")}.hds-button--secondary:not(.eu-cookie-compliance-default-button):not(.eu-cookie-compliance-save-preferences-button){--background-color: transparent;--background-color-hover: var(--color-black-80);--background-color-focus: transparent;--background-color-hover-focus: var(--color-black-80);--background-color-disabled: transparent;--color: var(--color-black);--color-hover: var(--color-white);--color-focus: var(--color-black);--color-hover-focus: var(--color-black);--color-disabled: var(--color-black-40)}.hds-button--secondary:not(:disabled):not(.eu-cookie-compliance-default-button):not(.eu-cookie-compliance-save-preferences-button),.hds-button--primary:not(:disabled){border-color:transparent;border-color:var(--color-black, transparent)}.hds-button.hds-button--supplementary .hds-button__label{margin:0;padding:0 var(--spacing-2-xs)}.hds-button.hds-button--supplementary::after,.hds-button.hds-button--supplementary::before{display:none !important}.hds-button--supplementary:not(:disabled){--background-color-hover: rgba(0, 0, 0, 0.1);background:rgba(0,0,0,0);border-color:rgba(0,0,0,0)}.hds-button--supplementary:not(:disabled):hover{background-color:var(--background-color-hover)}.hds-button--alert{--background-color: rgb(255, 0, 0)}a.hds-button.webform-button--delete-draft:not(:disabled){text-decoration:none}a.hds-button.webform-button--delete-draft:not(:disabled) .hds-button__label_wrapper{display:inline}a.hds-button.webform-button--delete-draft:not(:disabled) .hds-button__label{text-decoration:underline}a.hds-button.webform-button--delete-draft:not(:disabled):hover .hds-button__label{text-decoration:none}.openid-connect-login-form input[type=submit].hds-button{width:220px}.hds-button__label_wrapper{align-items:center;display:flex}.hds-button__label_wrapper:not(.hds-button)>.hds-button__label{margin:0 var(--spacing-2-xs)}.hds-link{--link-visited-color: var(--color-black);--link-color: var(--color-black)}.hds-card{--background-color: var(--color-white);--border-color: var(--color-black-90);--color: var(--color-black-90);--border-width: 2px;--padding-horizontal: var(--spacing-l);--padding-vertical: var(--spacing-m);background-color:var(--background-color);color:var(--color);padding:var(--padding-vertical) var(--padding-horizontal)}.hds-card--border{border:var(--border-width) solid var(--border-color)}.hds-card__body{display:grid;grid-gap:var(--spacing-m);gap:var(--spacing-m);margin-bottom:var(--spacing-l)}.hds-card__body:last-child{margin-bottom:0}.hds-card__heading{font-size:var(--fontsize-heading-m);font-weight:bold;line-height:var(--lineheight-m)}.hds-card__text{font-size:var(--fontsize-body-m);line-height:var(--lineheight-l)}.hds-card--applicant-role{margin-bottom:var(--spacing-l);margin-right:0;max-width:400px;width:100%}.hds-card__heading-m{font-size:var(--fontsize-heading-m);font-weight:500;letter-spacing:-0.2px;line-height:32px;margin-top:0}.grants-profile--menuitem--login,.grants-profile--menuitem--logout{align-items:center;display:flex;flex-flow:column;font-size:var(--fontsize-body-s);height:var(--spacing-xl);margin-left:var(--spacing-2-xs);margin-right:var(--spacing-2-xs);position:relative;text-align:center;width:var(--spacing-xl)}.grants-profile--menuitem--login .hel-icon,.grants-profile--menuitem--logout .hel-icon{display:block;margin:auto}.grants-profile--menuitem--login-triggertext,.grants-profile--menuitem--logout-triggertext{clip:rect(1px, 1px, 1px, 1px);clip-path:inset(50%);display:block;max-height:1px;max-width:1px;opacity:0;overflow:hidden;position:absolute;white-space:nowrap}.block--grants-profile--menuitem{align-items:center;display:flex;grid-area:brand;z-index:2}.block--branding{flex-grow:10}.grants-frontpage-info-block{margin-bottom:var(--spacing-layout-xl)}.grants-profile--menuitem{height:var(--spacing-m);margin-left:var(--spacing-2-xs);margin-right:var(--spacing-2-xs);position:relative;width:var(--spacing-m)}@media(min-width: 768px){.grants-profile--menuitem{height:var(--spacing-2-xl);width:var(--spacing-2-xl)}}.grants-profile--menuitem a{text-decoration:none}.grants-profile--menuitem--notifications{background-color:var(--color-error);border:2px var(--color-white) solid;border-radius:50%;color:var(--color-white);font-size:var(--fontsize-body-s);font-weight:bold;height:var(--spacing-xs) 1.25;line-height:var(--spacing-layout-2-xs);position:absolute;right:-5px;text-align:center;top:-5px;width:var(--spacing-xs) 1.25;z-index:2}.grants-profile--menuitem--initials{border-radius:50%;font-weight:bold;height:var(--spacing-m);line-height:var(--spacing-m);text-align:center;vertical-align:middle;width:var(--spacing-m)}@media(min-width: 768px){.grants-profile--menuitem--initials{height:var(--spacing-2-xl);line-height:var(--spacing-2-xl);width:var(--spacing-2-xl)}}.grants-profile--menuitem--initials:hover,.grants-profile--menuitem--initials:active,.grants-profile--menuitem--initials:focus{text-decoration:underline}.grants-profile--menuitem--initials-colorscheme-2{background-color:var(--color-bus);color:var(--color-white)}.grants-profile--menuitem--initials-colorscheme-1{background-color:var(--color-engel);color:var(--color-black)}.grants-profile--menuitem--initials-colorscheme-0{background-color:var(--color-tram);color:var(--color-white)}.sidebar-important-links{margin-top:var(--spacing-2-xl)}.sidebar-important-links .sidebar-text .sidebar-text__text-content>p{padding:var(--spacing-s) var(--spacing-m)}.block--service-page-banner{background-color:var(--color-engel);margin-top:var(--spacing-layout-s);padding:var(--spacing-layout-s)}.block--service-page-banner h2{margin-top:0}.block--service-page-banner .hds-icon{margin-bottom:var(--spacing-layout-s)}.hds-button.service-page-sidebar-link{background-color:var(--hdbt-color-palette--secondary);padding:var(--spacing-xs)}.hds-button.service-page-sidebar-link:hover{color:var(--color-black)}.terms_block{padding-bottom:var(--spacing-4-xl)}#block-servicepageauthblock h2,#block-servicepageanonblock h2{--line-height: 1.3;font-size:1.25rem;font-weight:500;line-height:var(--line-height)}@media(min-width: 992px){#block-servicepageauthblock h2,#block-servicepageanonblock h2{--line-height: 1.1666666667;font-size:1.5rem;font-weight:500}}#block-servicepageauthblock .hds-button,#block-servicepageanonblock .hds-button{margin-top:var(--spacing-m)}.grants-service-page-block{background-color:var(--color-alert-light);margin-top:var(--spacing-m);padding:var(--spacing-m)}.grants-service-page-block h3{font-size:var(--fontsize-heading-s);margin-top:0}.grants-service-page-block .hel-icon{vertical-align:text-bottom}.grants-service-page-block--auth{background-color:var(--color-info-light)}.hel-icon.hel-icon--swap-user{-webkit-mask-image:url('data:image/svg+xml, ');mask-image:url('data:image/svg+xml, ')}.nav-toggle-dropdown--profile .profile__information{background-color:var(--color-silver-light)}.nav-toggle-dropdown--profile .profile__full-name{font-weight:bold}.nav-toggle-dropdown--profile .grants-profile--menuitem--mandate,.nav-toggle-dropdown--profile .grants-profile--menuitem--switch-role{--line-height: 1.5555555556;font-size:1.125rem;font-weight:400;line-height:var(--line-height);border-top:1px solid #ccc;border-bottom:1px solid #ccc;display:block;font-weight:normal;padding:16px;text-decoration:none;width:100%}@media(min-width: 992px){.nav-toggle-dropdown--profile .grants-profile--menuitem--mandate,.nav-toggle-dropdown--profile .grants-profile--menuitem--switch-role{border-bottom:none}}.nav-toggle-dropdown--profile .grants-profile--menuitem--mandate:hover,.nav-toggle-dropdown--profile .grants-profile--menuitem--switch-role:hover{text-decoration:underline}.nav-toggle-dropdown--profile .grants-profile--menuitem--mandate:focus,.nav-toggle-dropdown--profile .grants-profile--menuitem--switch-role:focus{outline:3px solid #000;outline-offset:-3px}.application-timeout-message{display:none;padding-left:16px;padding-left:var(--spacing-s, 16px);position:fixed;right:0;top:50%;z-index:100}.application-timeout-message.slide-in{animation:slide-in-right .5s forwards ease;display:block}.application-timeout-message .close-application-timeout-message{cursor:pointer;font-size:1.25rem;position:absolute;right:1.25rem}@keyframes slide-in-right{from{right:-500px}to{right:1.25rem}}.view_application_search_search_api .main-content{margin-top:0}.view_application_search_search_api .search-result-amount--wrapper{align-items:center;display:flex}.view_application_search_search_api .search-result-amount--wrapper p{margin-top:0}.view_application_search_search_api select.search-result-amount{border:1px solid var(--color-black-50);margin-left:var(--spacing-l);margin-right:var(--spacing-2-xs)}.view_application_search_search_api .search-filter-button{background-color:var(--color-black);border-radius:180px;border:0;color:var(--color-white);display:inline-block;margin:0 var(--spacing-2-xs) var(--spacing-2-xs) 0;padding:var(--spacing-2-xs) var(--spacing-xs)}.view_application_search_search_api .search-filter-button:focus{--focus-outline-color: #000000;box-shadow:none;outline:3px solid var(--focus-outline-color);outline:var(--outline-width, 3px) solid var(--focus-outline-color);outline-offset:2px;outline-offset:var(--outline-gutter, 2px)}.view_application_search_search_api .search-filter-button span{vertical-align:middle}.view_application_search_search_api .search-filter-button span.hel-icon:hover{cursor:pointer}.view-application-search-search-api .main-content{margin-top:var(--spacing-layout-s)}.view-application-search-search-api .main-content .view-header{align-items:center;display:flex;margin-bottom:var(--spacing-layout-s)}.application_search--link{display:block;height:100%;padding-bottom:var(--spacing-m);position:relative;text-decoration:none}.application_search--link::after{--icon-size: 1.5rem;background-color:#000;background-size:contain;content:"";display:inline-block;height:calc(var(--line-height) * 1em);height:var(--icon-size, calc(var(--line-height) * 1em));-webkit-mask-image:var(--hel-icon--arrow-right);mask-image:var(--hel-icon--arrow-right);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);-webkit-mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));vertical-align:bottom;width:calc(var(--line-height) * 1em);width:var(--icon-size, calc(var(--line-height) * 1em));transition:transform .2s linear;bottom:var(--spacing-s);content:"";display:block;flex-shrink:0;left:var(--spacing-m);margin-left:-4px;margin-top:8px;position:absolute}@media(prefers-reduced-motion){.application_search--link::after{transition:none}}@media(min-width: 576px){.application_search--link::after{--icon-size: 3rem;margin-left:-8px;margin-top:16px}}.application_search--link:focus h3,.application_search--link:hover h3{text-decoration:none}.application_search--link:focus::after,.application_search--link:hover::after{transform:translateX(8px)}@media(prefers-reduced-motion){.application_search--link:focus::after,.application_search--link:hover::after{transform:none}}.application_search--filter-wrapper{background:var(--color-black-5)}.application_search--filter-wrapper h2{font-size:var(--fontsize-heading-m);margin-bottom:var(--spacing-layout-s);margin-top:var(--spacing-layout-s)}.application_search--filter-wrapper form{align-items:center;border-bottom:2px solid var(--color-black-20);display:flex;flex-flow:row wrap;gap:var(--spacing-s);justify-content:space-between;margin-bottom:var(--spacing-layout-s);padding-bottom:var(--spacing-layout-s)}.application_search--filter-wrapper form .form-item{margin-bottom:0;min-width:-moz-fit-content;min-width:fit-content;width:calc((100% - var(--spacing-s) - var(--spacing-s))/3)}.application_search--filter-wrapper form .form-item label{color:var(--label-color-default);font-size:var(--fontsize-body-m);font-weight:500;margin-bottom:var(--spacing-3-xs)}.application_search--filter-wrapper form .form-item .grant-applications--select-wrapper{min-width:100%;width:100%}.application_search--filter-wrapper form .hds-text-input:first-child{max-width:none;width:100%}.application_search--filter-wrapper form .hds-text-input:first-child input{width:100%}.application_search--filter-wrapper form .form-actions{align-items:center;display:flex;gap:16px;order:6;padding-top:var(--spacing-m);width:100%}@media(min-width: 768px){.application_search--filter-wrapper form .form-actions{width:17%}}.application_search--filter-wrapper form .form-actions input{min-width:250px;width:100%}.application_search--filter-wrapper form .form-item-items-per-page{display:none}.application_search--filter-wrapper form .form-item-kohderyhma{order:1}.application_search--filter-wrapper form .form-item-avustuslaji{order:2}.application_search--filter-wrapper form .form-item-hakija{order:3}.application_search--filter-wrapper form .form-item-search{max-width:100%;order:4;width:50%}.application_search--filter-wrapper form .form-item-application-open{page-break-before:left;-moz-column-break-before:left;break-before:left;display:block;margin-top:var(--spacing-m);order:5;width:30%}.application_search--filter-wrapper form [data-drupal-selector=edit-reset]{background-color:rgba(0,0,0,0);border:0;color:var(--color-black)}.application_search--filter-wrapper .hds-koros svg pattern{color:var(--color-black-5)}.application_search--filter-wrapper .hero .hero__container{padding-bottom:var(--spacing-m)}.application_search--filters{padding-bottom:var(--spacing-layout-m);padding-top:0}.application_search--rows{display:flex;flex-direction:column;flex-wrap:wrap;justify-content:flex-start;width:100%}@media(min-width: 576px){.application_search--rows{flex-direction:row;margin-left:calc(-1*var(--spacing-m));width:calc(100% + var(--spacing-m))}}.application_search--row{box-shadow:1px 2px 4px 0 rgba(0,0,0,.5);margin-bottom:var(--spacing-l);position:relative;width:100%}@media(min-width: 576px){.application_search--row{margin-left:var(--spacing-m);width:calc(50% - var(--spacing-m))}}@media(min-width: 992px){.application_search--row{width:calc(33.3333333333% - var(--spacing-m))}}.application_search--row h3{font-size:var(--fontsize-heading-m);margin-top:var(--spacing-xs)}.application_search--row .views-field-search-api-excerpt{height:auto;overflow:auto;word-break:normal}.application_search--row .views-field{padding:var(--spacing-xs) var(--spacing-m)}.application_search--row .views-field-field-target-group{padding:0}.application_search--row .views-field-field-avustuslaji{padding:var(--spacing-xs) var(--spacing-m) var(--spacing-layout-m) var(--spacing-m)}.application_search--row .views-field-field-avustuslaji .tag_avustuslaji{background:var(--color-black);border-radius:var(--spacing-m);color:var(--color-white);display:inline-block;margin-bottom:var(--spacing-2-xs);padding:var(--spacing-3-xs) var(--spacing-xs)}.application_search--row .views-field-field-application-period .field-content{align-items:center;display:flex;gap:var(--spacing-s);position:relative}.application_search--row .views-field-field-application-period .field-content span{display:block}.application_search--row .tag_target_group{background:var(--color-black-20);color:var(--color-black);font-size:var(--fontsize-body-s);font-weight:bold;padding:var(--spacing-m);text-align:center;text-transform:uppercase;width:100%}.application_search--row .tag_target_group_12{background:var(--color-brick-medium-light)}.application_search--row .tag_target_group_20{background:var(--color-copper)}.application_search--row .tag_target_group_21{background:var(--color-metro-medium-light)}.application_search--row .tag_target_group_22{background:var(--color-suomenlinna-medium-light)}.application_search--row .tag_target_group_23{background:var(--color-engel)}.application_search--row .tag_target_group_24{background:var(--color-bus-medium-light)}.application_search--row .tag_target_group_25{background:var(--color-coat-of-arms-medium-light)}.application_search--row .tag_target_group_26{background:var(--color-gold-medium-light)}.application_search--row .tag_target_group_27{background:var(--color-tram-medium-light)}.application_search--row .tag_target_group_28{background:var(--color-summer-light)}.application_search--row .tag_target_group_29{background:var(--color-fog)}.application_search--row .tag_target_group_30{background:var(--color-copper-light)}.application_search--row .tag_target_group_31{background:var(--color-gold)}.view-ukk .view-filters{display:none}.view-ukk .ukk_categories{display:block;margin:var(--spacing-xl) 0;padding:0}.view-ukk .ukk_categories li{display:inline-block;list-style:none;margin:var(--spacing-m) var(--spacing-s) 0 0;padding:0}.view-ukk .hero .hero__text-content{max-width:100%}.view-ukk #edit-field-category-target-id{display:flex}.view-ukk #edit-field-category-target-id .hds-radio-button:first-of-type{margin-top:var(--spacing-2-xs)}.view-ukk #edit-field-category-target-id .hds-radio-button .hds-radio-button__input:checked+.hds-radio-button__label{background:var(--color-black);border-radius:var(--spacing-m);color:var(--color-white);padding:var(--spacing-2-xs) var(--spacing-s)}.view-ukk #edit-field-category-target-id .hds-radio-button__label{padding:var(--spacing-2-xs) var(--spacing-s)}.view-ukk #edit-field-category-target-id .hds-radio-button__label::before,.view-ukk #edit-field-category-target-id .hds-radio-button__label::after{display:none}.view-ukk .views-exposed-form fieldset{margin-bottom:0}.view-ukk .views-exposed-form .form-submit{margin-bottom:var(--spacing-l)}.view-ukk .category{background:var(--color-black);border-radius:var(--spacing-m);color:var(--color-white);display:inline-block;padding:var(--spacing-2-xs) var(--spacing-s);text-decoration:none}.view-ukk .category-unselected{background:var(--color-black-20);color:var(--color-black)}.page--select-applicant-role{background-color:var(--color-black-5)}.page--select-applicant-role body{background-color:var(--color-black-5)}.page--select-applicant-role .layout-main-wrapper{background-color:var(--color-black-5)}.page--select-applicant-role .main-content{margin-top:var(--spacing-l)}.page--select-applicant-role h1{margin-top:var(--spacing-l)}.page--select-applicant-role p{margin-bottom:var(--spacing-m)}.node--type-service .errand-service__channels .service-channel__links a[href^="https://avustukset.hel.fi"]{display:none}.node--type-service .service-channel__info p:first-of-type{margin-top:0}.node--type-service .service-channel--mail{display:none}#block-servicepageauthblock-2,#block-servicepageanonblock-2,#block-grantspreviewlink-2{display:none}@media(max-width: 767.9px){#block-servicepageauthblock-2,#block-servicepageanonblock-2,#block-grantspreviewlink-2{display:block;margin:var(--spacing-s)}}@media(max-width: 991.9px){#block-servicepageauthblock-2,#block-servicepageanonblock-2,#block-grantspreviewlink-2{display:block;margin:var(--spacing-l)}}#block-servicepageauthblock-2>.grants-service-page-block>*,#block-servicepageanonblock-2>.grants-service-page-block>*,#block-grantspreviewlink-2>.grants-service-page-block>*{margin:var(--spacing-2-xs) 0 var(--spacing-2-xs) var(--spacing-2-xs)}@media(max-width: 991.9px){#block-servicepageauthblock-2 .node--type-service a.hds-button[href*=uusi-hakemus],#block-servicepageanonblock-2 .node--type-service a.hds-button[href*=uusi-hakemus],#block-grantspreviewlink-2 .node--type-service a.hds-button[href*=uusi-hakemus]{display:none}}.user-login__text-container{background:var(--color-white);max-width:500px;padding:var(--spacing-m)}.user-login__text-container p:first-of-type{margin-top:0}.tabs{--tablist-border-color: var(--color-black-20);--tablist-border-size: 1px;--tab-color: var(--color-black);--tab-font-size: var(--fontsize-body-m);--tab-height: 48px;--tab-min-width: 148px;--tab-spacing: var(--spacing-s);--tab-active-border-size: 5px;--tab-active-border-color: var(--color-black);--tab-focus-outline-size: 2px;--tab-focus-outline-color: var(--color-coat-of-arms);display:flex;flex-flow:row wrap}.tabs--tablist{box-sizing:border-box;flex-grow:1;margin-bottom:-1px;overflow-x:hidden;position:relative;width:100%}.tabs--content-wrapper{width:100%}.tabs--content-wrapper .container{padding-top:1px}.tabs [role=tablist]{box-sizing:border-box;list-style:none;margin:0;padding:var(--tab-focus-outline-size) 0;white-space:nowrap}.tabs [role=tab]{background:rgba(0,0,0,0);border:0;cursor:pointer;display:inline-block;margin:0;outline:none;padding:0}.tabs [role=tab] span{align-items:center;box-sizing:border-box;color:var(--tab-color);display:flex;font-size:var(--tab-font-size);height:var(--tab-height);justify-content:center;margin:0;min-width:var(--tab-min-width);padding:0 var(--tab-spacing);pointer-events:none;position:relative}.tabs [role=tab] span::before{background:var(--tablist-border-color);bottom:0;content:"";height:var(--tablist-border-size);position:absolute;width:100%;z-index:100}.tabs [role=tab] span:hover::before,.tabs [role=tab] span:focus::before,.tabs [role=tab][aria-selected=true] span::before{background-color:var(--tab-active-border-color);bottom:0;content:"";height:var(--tab-active-border-size);position:absolute;width:100%;z-index:100}.tabs [role=tabpanel].is-hidden{display:none}.node--form-page .list-of-links{margin-left:0;margin-top:0;width:100%}@media(min-width: 768px){.node--form-page .list-of-links{margin-top:0}}.node--form-page .list-of-links>.container{padding-top:0}.node--form-page .list-of-links .list-of-links__title{border-top:2px solid var(--color-black-20);margin:0 0 var(--spacing-layout-xl)}@media(min-width: 576px){.node--form-page .list-of-links .list-of-links__container{width:calc(100% - var(--spacing-layout-xl))}}@media(min-width: 768px){.node--form-page .list-of-links .list-of-links__container{width:100%}}.node--form-page .list-of-links .list-of-links__content{height:auto;margin-top:0}@media(min-width: 768px){.node--form-page .list-of-links .list-of-links__content{display:grid;grid-template-columns:auto auto auto;margin:0 var(--spacing-m) 0 0}}.node--form-page .list-of-links .list-of-links__item{align-self:stretch;border-left:4px solid var(--color-copper);margin-right:-4px;padding-left:var(--spacing-m);padding-right:var(--spacing-m)}.list-of-links--without-image .list-of-links__item .list-of-links__item__desc{color:var(--color-black-90);font-size:var(--fontsize-body-m)}.list-of-links--without-image .list-of-links__item .list-of-links__item__title{font-size:var(--fontsize-heading-m)}.js-form-type-webform-custom-composite{--border-width: 2px;--outline-width: 3px;--input-height: 56px;--textarea-height: 149px;--icon-size: var(--spacing-m);--helper-color-default: var(--color-black-60);--helper-color-invalid: var(--color-error);--icon-color-invalid: var(--color-error);--input-background-default: var(--color-white);--input-background-disabled: var(--color-black-10);--input-border-color-default: var(--color-black-50);--input-border-color-hover: var(--color-black-90);--input-border-color-focus: var(--color-black-90);--input-border-color-invalid: var(--color-error);--input-border-color-disabled: var(--color-black-10);--input-color-default: var(--color-black-90);--input-color-disabled: var(--color-black-40);--label-color-default: var(--color-black-90);--label-color-invalid: var(--color-black-90);--placeholder-color: var(--color-black-60);--focus-outline-color: var(--color-coat-of-arms)}.js-form-type-webform-custom-composite a.tabledrag-handle .handle{height:24px;width:24px}.js-form-type-webform-custom-composite input.form-number{background-color:var(--input-background-default);border:var(--border-width) solid var(--input-border-color-default);box-sizing:border-box;color:var(--input-color-default);font-size:1.125em;height:var(--input-height);line-height:normal;padding:0 var(--spacing-s);width:100%}.js-form-type-webform-custom-composite table{border-collapse:collapse;border-spacing:0;margin-bottom:var(--spacing-m)}.js-form-type-webform-custom-composite table td{border-bottom:2px var(--color-black-20) solid;border-top:2px var(--color-black-20) solid;padding-left:var(--spacing-m);padding-top:var(--spacing-m)}@media(max-width: 768px){.js-form-type-webform-custom-composite table td{border:2px var(--color-black-20) solid}}.js-form-type-webform-custom-composite table td.webform-multiple-table--operations{border-bottom:2px var(--color-black-20) solid;border-top:2px var(--color-black-20) solid;padding-left:var(--spacing-m);padding-top:var(--spacing-m)}@media(max-width: 768px){.js-form-type-webform-custom-composite table td.webform-multiple-table--operations{background:var(--color-white);border:2px var(--color-black-20) solid;padding:10px 5px 5px}}.js-form-type-webform-custom-composite table td:first-child{border-left:2px var(--color-black-20) solid}.js-form-type-webform-custom-composite table td:last-child{border-right:2px var(--color-black-20) solid;padding:var(--spacing-s)}@media(min-width: 768px){.js-form-type-webform-custom-composite table td:last-child{min-width:400px;padding:var(--spacing-s) var(--spacing-m)}}div.ui-widget.ui-datepicker{padding:var(--spacing-2-xs)}div.ui-widget.ui-datepicker .ui-datepicker-header span.ui-icon{margin-left:-8px;margin-top:-8px;-webkit-mask-image:none;mask-image:none;transform:none}div.ui-widget.ui-datepicker .ui-datepicker-calendar{border:0;display:table;margin:0;max-width:100%}div.ui-widget.ui-datepicker .ui-datepicker-calendar th,div.ui-widget.ui-datepicker .ui-datepicker-calendar td{min-width:auto}details.accordion{--background-color: var(--color-white);--border-color: var(--color-black-60);--padding-horizontal: var(--spacing-m);--padding-vertical: var(--spacing-m);--header-font-color: var(--color-black-90);--header-font-size: var(--fontsize-heading-m);--header-line-height: var(--lineheight-m);--button-size: 28px;--header-focus-outline-color: var(--color-coat-of-arms);--content-font-color: var(--color-black-90);--content-font-size: var(--fontsize-body-m);--content-line-height: var(--lineheight-l);border-bottom:1px solid var(--border-color)}details.accordion .accordion_content{padding-bottom:var(--padding-vertical)}details.accordion[open] .accordion_heading_container span.hel-icon{transform:rotate(180deg)}.accordion_header{align-items:center;color:var(--header-font-color);display:flex;font-size:var(--header-font-size);font-weight:700;justify-content:space-between;line-height:var(--header-line-height);list-style:none;padding-bottom:var(--padding-vertical);padding-top:var(--padding-vertical);position:relative}.accordion_heading_container{align-items:center;box-sizing:border-box;cursor:pointer;display:grid;grid-template-columns:auto calc(var(--button-size));width:100%}.accordion_heading_container span.hel-icon{height:var(--button-size) !important;width:var(--button-size) !important}.accordion_heading_container span.hel-icon{border:2px solid rgba(0,0,0,0);box-sizing:border-box;margin:auto}.webform-element-description{--helper-color-default: var(--color-black-60);color:var(--helper-color-default);display:block;font-size:var(--fontsize-body-m);line-height:var(--lineheight-l);margin-top:var(--spacing-s)}.webform-element-help{background:var(--color-white);border:2px solid rgba(0,0,0,0);color:var(--hdbt-color-black);height:var(--spacing-layout-xs);margin-right:4px;padding:0;position:absolute;right:0;top:-3px;width:var(--spacing-layout-xs);z-index:10}div[data-tippy-root]{width:350px}.tippy-box{background-color:var(--color-black-5);border-left:var(--spacing-xs) var(--color-coat-of-arms) solid;border-radius:0;color:var(--hdbt-color-black);padding:var(--spacing-s)}.tippy-box .webform-element-help--content{white-space:normal}.tippy-box .webform-element-help--content a:link,.tippy-box .webform-element-help--content a:visited,.tippy-box .webform-element-help--content a:active,.tippy-box .webform-element-help--content a:hover{color:var(--hdbt-color-black)}.tippy-arrow{color:var(--color-black-5)}.webform-element-help--wrapper-short{max-width:-moz-fit-content;max-width:fit-content}.webform-element-help-container--title{--border-width: 2px;--outline-width: 3px;--input-height: 56px;--textarea-height: 149px;--icon-size: var(--spacing-m)}fieldset.grants-fieldset{padding:var(--spacing-s)}@media(min-width: 768px){fieldset.grants-fieldset{min-width:400px;padding:var(--spacing-s) var(--spacing-m)}}fieldset.grants-fieldset .fieldset-wrapper{align-items:flex-end;display:flex;flex-wrap:wrap;gap:0 var(--spacing-layout-2-xs)}fieldset.grants-fieldset .fieldset-wrapper .form-item--error-message{grid-column:1}fieldset.grants-fieldset-short{max-width:var(--webform-element-width--input-large)}fieldset.grants-fieldset-medium{max-width:var(--webform-element-width--fieldset)}fieldset.grants-fieldset-medium .fieldset-wrapper{justify-content:center}fieldset.premises-composite--wrapper.fieldgroup,fieldset.rented-premise-composite--wrapper.fieldgroup,.community_officials_wrapper fieldset.fieldgroup,fieldset.grants-budget-other-cost--wrapper.fieldgroup,fieldset.grants-budget-other-income--wrapper.fieldgroup,fieldset.place-of-operation-composite--wrapper.fieldgroup,fieldset.rent-income-composite--wrapper.fieldgroup,fieldset.rent-cost-composite--wrapper.fieldgroup,fieldset.club-section-composite--wrapper.fieldgroup,fieldset.members-composite--wrapper.fieldgroup,fieldset.orienteering-map-composite--wrapper,.form-item-muu-liite fieldset.grants-attachments--wrapper.fieldgroup{border-width:2px;margin-top:var(--spacing-layout-2-xs);max-width:100%;padding:var(--spacing-s);width:100%}@media(min-width: 768px){fieldset.premises-composite--wrapper.fieldgroup,fieldset.rented-premise-composite--wrapper.fieldgroup,.community_officials_wrapper fieldset.fieldgroup,fieldset.grants-budget-other-cost--wrapper.fieldgroup,fieldset.grants-budget-other-income--wrapper.fieldgroup,fieldset.place-of-operation-composite--wrapper.fieldgroup,fieldset.rent-income-composite--wrapper.fieldgroup,fieldset.rent-cost-composite--wrapper.fieldgroup,fieldset.club-section-composite--wrapper.fieldgroup,fieldset.members-composite--wrapper.fieldgroup,fieldset.orienteering-map-composite--wrapper,.form-item-muu-liite fieldset.grants-attachments--wrapper.fieldgroup{min-width:400px;padding:var(--spacing-s) var(--spacing-m)}}fieldset.premises-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.rented-premise-composite--wrapper.fieldgroup legend>span.visually-hidden,.community_officials_wrapper fieldset.fieldgroup legend>span.visually-hidden,fieldset.grants-budget-other-cost--wrapper.fieldgroup legend>span.visually-hidden,fieldset.grants-budget-other-income--wrapper.fieldgroup legend>span.visually-hidden,fieldset.place-of-operation-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.rent-income-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.rent-cost-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.club-section-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.members-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.orienteering-map-composite--wrapper legend>span.visually-hidden,.form-item-muu-liite fieldset.grants-attachments--wrapper.fieldgroup legend>span.visually-hidden{background:#fff;clip-path:initial;clip:auto;clip:initial;height:auto;margin-left:calc(var(--spacing-2-xs)*-1);left:auto;overflow:visible;padding:0 var(--spacing-2-xs);top:-12px;width:-moz-max-content;width:max-content}fieldset.premises-composite--wrapper.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)],fieldset.rented-premise-composite--wrapper.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)],.community_officials_wrapper fieldset.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)],fieldset.grants-budget-other-cost--wrapper.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)],fieldset.grants-budget-other-income--wrapper.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)],fieldset.place-of-operation-composite--wrapper.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)],fieldset.rent-income-composite--wrapper.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)],fieldset.rent-cost-composite--wrapper.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)],fieldset.club-section-composite--wrapper.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)],fieldset.members-composite--wrapper.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)],fieldset.orienteering-map-composite--wrapper legend>span.visually-hidden[\:has\(button.webform-element-help\)],.form-item-muu-liite fieldset.grants-attachments--wrapper.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)]{padding-right:var(--spacing-xl)}fieldset.premises-composite--wrapper.fieldgroup legend>span.visually-hidden:has(button.webform-element-help),fieldset.rented-premise-composite--wrapper.fieldgroup legend>span.visually-hidden:has(button.webform-element-help),.community_officials_wrapper fieldset.fieldgroup legend>span.visually-hidden:has(button.webform-element-help),fieldset.grants-budget-other-cost--wrapper.fieldgroup legend>span.visually-hidden:has(button.webform-element-help),fieldset.grants-budget-other-income--wrapper.fieldgroup legend>span.visually-hidden:has(button.webform-element-help),fieldset.place-of-operation-composite--wrapper.fieldgroup legend>span.visually-hidden:has(button.webform-element-help),fieldset.rent-income-composite--wrapper.fieldgroup legend>span.visually-hidden:has(button.webform-element-help),fieldset.rent-cost-composite--wrapper.fieldgroup legend>span.visually-hidden:has(button.webform-element-help),fieldset.club-section-composite--wrapper.fieldgroup legend>span.visually-hidden:has(button.webform-element-help),fieldset.members-composite--wrapper.fieldgroup legend>span.visually-hidden:has(button.webform-element-help),fieldset.orienteering-map-composite--wrapper legend>span.visually-hidden:has(button.webform-element-help),.form-item-muu-liite fieldset.grants-attachments--wrapper.fieldgroup legend>span.visually-hidden:has(button.webform-element-help){padding-right:var(--spacing-xl)}@media(min-width: 768px){fieldset.premises-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.rented-premise-composite--wrapper.fieldgroup legend>span.visually-hidden,.community_officials_wrapper fieldset.fieldgroup legend>span.visually-hidden,fieldset.grants-budget-other-cost--wrapper.fieldgroup legend>span.visually-hidden,fieldset.grants-budget-other-income--wrapper.fieldgroup legend>span.visually-hidden,fieldset.place-of-operation-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.rent-income-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.rent-cost-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.club-section-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.members-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.orienteering-map-composite--wrapper legend>span.visually-hidden,.form-item-muu-liite fieldset.grants-attachments--wrapper.fieldgroup legend>span.visually-hidden{left:auto}}.form-item-muu-liite fieldset.grants-attachments--wrapper{margin-bottom:0}fieldset.webform-composite-hidden-title .fieldset-wrapper>.form-item:last-child{margin-bottom:var(--spacing-layout-xs)}.js-form-type-webform-table table{width:100%}.js-form-type-webform-table th{text-align:left}.js-form-type-webform-table td{vertical-align:middle}.js-form-type-webform-table td>div{height:auto;margin-bottom:0}.js-form-type-webform-table td>div label{margin:-1px}.js-form-type-webform-table .hds-text-input label{border:0;clip:rect(0, 0, 0, 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.form-item{margin-bottom:var(--spacing-layout-xs);position:relative}.form-item input[type=date],.form-item input[type=time]{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--input-background-default);border:var(--border-width) solid var(--input-border-color-default);box-sizing:border-box;color:var(--input-color-default);font-size:1.125em;height:var(--input-height);line-height:normal;padding:0 var(--spacing-s);width:100%;will-change:transform,box-shadow}.webform-section{padding-bottom:var(--spacing-layout-2-xs)}.webform-section table:first-of-type{margin-top:0}.form-type-webform-multiple .webform-multiple-table table{max-width:100%;width:100%}@media(min-width: 768px){.form-type-webform-multiple .webform-multiple-table table{width:auto}}.hds-text-input{max-width:-moz-fit-content;max-width:fit-content;width:100%}.webform-section-grid-wrapper{display:grid;grid-template-columns:1fr}@media(min-width: 768px){.webform-section-grid-wrapper{grid-row-gap:var(--spacing-xl);grid-template-columns:1fr 2fr}}.webform-section-grid-wrapper>dt.webform-section-title{color:var(--hdbt-color-black);display:block;flex-shrink:0;font-size:var(--fontsize-heading-s);font-weight:500;-webkit-hyphens:none;hyphens:none;line-height:1;margin-bottom:var(--spacing-3-xs);margin-top:0;padding-right:var(--spacing-2-xl);width:100%}.webform-section-grid-wrapper .webform-section-wrapper{margin-bottom:var(--spacing-layout-xs);padding-left:var(--spacing-2-xl)}@media(min-width: 768px){.webform-section-grid-wrapper .webform-section-wrapper{margin-bottom:0;padding-left:0}}fieldset input[type=button]{margin-top:var(--spacing-m)}.webform-section-wrapper>.description{margin-bottom:var(--spacing-layout-xs)}.grants__page-header{margin-bottom:var(--spacing-layout-l);font-size:2rem}@media(min-width: 768px){.grants__page-header{font-size:3rem}}.webform-section-flex-wrapper{display:flex;flex-flow:row wrap;width:100%;justify-content:left}@media(min-width: 768px){.webform-section-flex-wrapper{flex-flow:row nowrap}.webform-section-flex-wrapper h3+*>*:first-child>label:first-of-type,.webform-section-flex-wrapper h3+*>*:first-child>*:first-child>label:first-of-type{margin-top:var(--spacing-2-xs);padding-top:0}.webform-section-flex-wrapper h3+*>*:first-child>p{line-height:normal;line-height:initial;margin-top:var(--spacing-2-xs)}.webform-section-flex-wrapper h3+*>*:first-child>h4{line-height:normal;line-height:initial;margin-top:var(--spacing-m)}}.webform-section-flex-wrapper .webform-element-help-container--title{position:relative}.webform-section-flex-wrapper>h2.webform-section-title,.webform-section-flex-wrapper>h3.webform-section-title,.webform-section-flex-wrapper>h4.webform-section-title,.webform-section-flex-wrapper>dt.webform-section-title{color:var(--hdbt-color-black);display:block;flex-shrink:0;font-size:24px;font-weight:500;-webkit-hyphens:manual;hyphens:manual;margin-bottom:var(--spacing-3-xs);margin-top:0;padding-right:var(--spacing-2-xl);width:100%}@media(min-width: 768px){.webform-section-flex-wrapper>h2.webform-section-title,.webform-section-flex-wrapper>h3.webform-section-title,.webform-section-flex-wrapper>h4.webform-section-title,.webform-section-flex-wrapper>dt.webform-section-title{font-size:32px;max-width:350px;width:30%}}.webform-section-flex-wrapper h4{font-size:var(--fontsize-heading-m);line-height:38px}.webform-section-flex-wrapper>.webform-section-wrapper{--line-height: 1.5;font-size:var(--fontsize-body-m);width:100%}@media(min-width: 768px){.webform-section-flex-wrapper>.webform-section-wrapper{padding-left:var(--spacing-2-xl)}}.webform-section-flex-wrapper .form-required::after{content:"*";display:inline}.webform-section-flex-wrapper legend,.webform-section-flex-wrapper label{display:block;font-size:var(--fontsize-body-m);font-weight:500;margin-bottom:var(--spacing-2-xs);max-width:-moz-fit-content;max-width:fit-content;position:relative}.webform-section-flex-wrapper legend{padding:0 var(--spacing-2-xs);margin-left:calc(var(--spacing-2-xs)*-1);left:auto}.webform-section-flex-wrapper legend[\:has\(button.webform-element-help\)],.webform-section-flex-wrapper label[\:has\(button.webform-element-help\)]{padding-right:var(--spacing-xl)}.webform-section-flex-wrapper legend:has(button.webform-element-help),.webform-section-flex-wrapper label:has(button.webform-element-help){padding-right:var(--spacing-xl)}.webform-section-flex-wrapper fieldset legend>span[\:has\(button.webform-element-help\)]{padding-right:var(--spacing-xl)}.webform-section-flex-wrapper fieldset legend>span:has(button.webform-element-help){padding-right:var(--spacing-xl)}.webform-section-flex-wrapper fieldset legend>span.fieldset-legend[\:has\(button.webform-element-help\)],.webform-section-flex-wrapper fieldset.fieldgroup legend>span[\:has\(button.webform-element-help\)]:not(.visually-hidden.fieldset-legend){padding-right:var(--spacing-l)}.webform-section-flex-wrapper fieldset legend>span.fieldset-legend:has(button.webform-element-help),.webform-section-flex-wrapper fieldset.fieldgroup legend>span:has(button.webform-element-help):not(.visually-hidden.fieldset-legend){padding-right:var(--spacing-l)}.webform-section-flex-wrapper fieldset legend>span.fieldset-legend[\:has\(button.webform-element-help\)],.webform-section-flex-wrapper fieldset.fieldgroup legend span.fieldset-legend:not(.visually-hidden)[\:has\(button.webform-element-help\)]{padding-right:0}.webform-section-flex-wrapper fieldset legend>span.fieldset-legend:has(button.webform-element-help),.webform-section-flex-wrapper fieldset.fieldgroup legend span.fieldset-legend:not(.visually-hidden):has(button.webform-element-help){padding-right:0}.webform-section-flex-wrapper label.hds-radio-button__label{font-weight:normal}.webform-section-flex-wrapper .checkboxes--wrapper label{font-weight:normal}.webform-section-flex-wrapper .js-form-type-textarea .hds-text-input__input-wrapper{display:block}.webform-section-flex-wrapper .has-error,.webform-section-flex-wrapper .grant-applications--select-wrapper[\:has\(.has-error\)]{border-color:var(--color-error)}.webform-section-flex-wrapper .has-error,.webform-section-flex-wrapper .grant-applications--select-wrapper:has(.has-error){border-color:var(--color-error)}form .hds-text-input__input-wrapper,.hds-text-input__input-wrapper{flex-flow:row wrap}form .hds-text-input__input-wrapper .text-count-wrapper,.hds-text-input__input-wrapper .text-count-wrapper{flex-basis:100%}form .hds-text-input__input-wrapper input.webform--small,form .hds-text-input__input-wrapper textarea.webform--small,.hds-text-input__input-wrapper input.webform--small,.hds-text-input__input-wrapper textarea.webform--small{max-width:var(--webform-element-width--input-small);min-width:var(--webform-element-width--input-small);width:100%}form .hds-text-input__input-wrapper input.webform--medium,form .hds-text-input__input-wrapper textarea.webform--medium,.hds-text-input__input-wrapper input.webform--medium,.hds-text-input__input-wrapper textarea.webform--medium{max-width:var(--webform-element-width--input-medium);min-width:var(--webform-element-width--input-small);width:100%}form .hds-text-input__input-wrapper input.webform--large,form .hds-text-input__input-wrapper textarea.webform--large,.hds-text-input__input-wrapper input.webform--large,.hds-text-input__input-wrapper textarea.webform--large{max-width:var(--webform-element-width--input-large);min-width:var(--webform-element-width--input-small);width:100%}.webform--small div.grant-applications--select-wrapper{max-width:var(--webform-element-width--input-small);min-width:var(--webform-element-width--input-small);width:100%}.webform--medium div.grant-applications--select-wrapper{max-width:var(--webform-element-width--input-medium);min-width:var(--webform-element-width--input-small);width:100%}.webform--large div.grant-applications--select-wrapper{max-width:var(--webform-element-width--input-medium);min-width:var(--webform-element-width--input-small);width:100%}form .hds-checkbox{display:block}form .hds-checkbox label.hds-checkbox__label::after{content:""}fieldset.webform-composite-hidden-title{margin-bottom:var(--spacing-layout-2-xs);margin-top:0}.form-item-bank-account-account-number-select,.form-item-community-address-community-address-select{margin-bottom:0}.grants-profile-grants-profile table thead th h4{margin:0}.hakemus-form-page .main-content{margin-top:0}.hakemus-form-page h1{-webkit-hyphens:auto;hyphens:auto;word-break:break-word}.hakemus-form-errors ul li{list-style-type:none}.community_officials_wrapper .webform-readonly{margin:0}.community_officials_wrapper .hds-text-input__input-wrapper{margin:0}.community_officials_wrapper input[readonly=readonly]{height:1.25rem;margin:0;max-width:330px}.form-item--error-message{color:var(--color-error);margin-bottom:var(--spacing-layout-s);margin-top:var(--spacing-layout-2-xs)}fieldset .form-item--error-message,.community_officials_wrapper .form-item--error-message{margin-bottom:0}.form-item--error-message::before{--icon-size: 1.6rem;background-color:#000;background-size:contain;content:"";display:inline-block;height:calc(var(--line-height) * 1em);height:var(--icon-size, calc(var(--line-height) * 1em));-webkit-mask-image:var(--hel-icon--alert-circle-fill);mask-image:var(--hel-icon--alert-circle-fill);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);-webkit-mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));vertical-align:bottom;width:calc(var(--line-height) * 1em);width:var(--icon-size, calc(var(--line-height) * 1em));background-color:var(--color-error);content:" ";display:inline-block}input[type=radio]+label.form-required::after{content:""}.hds-radio-button:last-of-type,.hds-checkbox:last-of-type{margin-bottom:0}.hds-radio-button:last-of-type>label,.hds-checkbox:last-of-type>label{margin-bottom:0}@media(min-width: 992px){.place-of-operation-composite--wrapper.fieldgroup .hds-text-input,.club-section-composite--wrapper.fieldgroup .hds-text-input{max-width:100%}}.place-of-operation-composite--wrapper.fieldgroup .hds-radio-button .hds-radio-button__label,.club-section-composite--wrapper.fieldgroup .hds-radio-button .hds-radio-button__label{line-height:var(--lineheight-m) !important}@media(min-width: 992px){.place-of-operation-group__location,.place-of-operation-group__students,.place-of-operation-group__groups,.place-of-operation-group__personnel,.place-of-operation-group__rent,.place-of-operation-group__time{display:flex;justify-content:space-between}}@media(min-width: 992px){.place-of-operation-group__location--address,.place-of-operation-group__students--address,.place-of-operation-group__groups--address,.place-of-operation-group__personnel--address,.place-of-operation-group__rent--address,.place-of-operation-group__time--address{margin-top:0 !important}.place-of-operation-group__location--address,.place-of-operation-group__students--address,.place-of-operation-group__groups--address,.place-of-operation-group__personnel--address,.place-of-operation-group__rent--address,.place-of-operation-group__time--address{width:65%}}@media(min-width: 992px){.place-of-operation-group__location--post-code,.place-of-operation-group__students--post-code,.place-of-operation-group__groups--post-code,.place-of-operation-group__personnel--post-code,.place-of-operation-group__rent--post-code,.place-of-operation-group__time--post-code{margin-top:0 !important}.place-of-operation-group__location--post-code,.place-of-operation-group__students--post-code,.place-of-operation-group__groups--post-code,.place-of-operation-group__personnel--post-code,.place-of-operation-group__rent--post-code,.place-of-operation-group__time--post-code{width:30%}}@media(min-width: 992px){.place-of-operation-group__location--student-count,.place-of-operation-group__location--special-student-count,.place-of-operation-group__location--group-count,.place-of-operation-group__location--special-group-count,.place-of-operation-group__location--personnel-count,.place-of-operation-group__location--rent-amount,.place-of-operation-group__location--time-start,.place-of-operation-group__location--time-end,.place-of-operation-group__students--student-count,.place-of-operation-group__students--special-student-count,.place-of-operation-group__students--group-count,.place-of-operation-group__students--special-group-count,.place-of-operation-group__students--personnel-count,.place-of-operation-group__students--rent-amount,.place-of-operation-group__students--time-start,.place-of-operation-group__students--time-end,.place-of-operation-group__groups--student-count,.place-of-operation-group__groups--special-student-count,.place-of-operation-group__groups--group-count,.place-of-operation-group__groups--special-group-count,.place-of-operation-group__groups--personnel-count,.place-of-operation-group__groups--rent-amount,.place-of-operation-group__groups--time-start,.place-of-operation-group__groups--time-end,.place-of-operation-group__personnel--student-count,.place-of-operation-group__personnel--special-student-count,.place-of-operation-group__personnel--group-count,.place-of-operation-group__personnel--special-group-count,.place-of-operation-group__personnel--personnel-count,.place-of-operation-group__personnel--rent-amount,.place-of-operation-group__personnel--time-start,.place-of-operation-group__personnel--time-end,.place-of-operation-group__rent--student-count,.place-of-operation-group__rent--special-student-count,.place-of-operation-group__rent--group-count,.place-of-operation-group__rent--special-group-count,.place-of-operation-group__rent--personnel-count,.place-of-operation-group__rent--rent-amount,.place-of-operation-group__rent--time-start,.place-of-operation-group__rent--time-end,.place-of-operation-group__time--student-count,.place-of-operation-group__time--special-student-count,.place-of-operation-group__time--group-count,.place-of-operation-group__time--special-group-count,.place-of-operation-group__time--personnel-count,.place-of-operation-group__time--rent-amount,.place-of-operation-group__time--time-start,.place-of-operation-group__time--time-end{margin-top:0 !important}.place-of-operation-group__location--student-count,.place-of-operation-group__location--special-student-count,.place-of-operation-group__location--group-count,.place-of-operation-group__location--special-group-count,.place-of-operation-group__location--personnel-count,.place-of-operation-group__location--rent-amount,.place-of-operation-group__location--time-start,.place-of-operation-group__location--time-end,.place-of-operation-group__students--student-count,.place-of-operation-group__students--special-student-count,.place-of-operation-group__students--group-count,.place-of-operation-group__students--special-group-count,.place-of-operation-group__students--personnel-count,.place-of-operation-group__students--rent-amount,.place-of-operation-group__students--time-start,.place-of-operation-group__students--time-end,.place-of-operation-group__groups--student-count,.place-of-operation-group__groups--special-student-count,.place-of-operation-group__groups--group-count,.place-of-operation-group__groups--special-group-count,.place-of-operation-group__groups--personnel-count,.place-of-operation-group__groups--rent-amount,.place-of-operation-group__groups--time-start,.place-of-operation-group__groups--time-end,.place-of-operation-group__personnel--student-count,.place-of-operation-group__personnel--special-student-count,.place-of-operation-group__personnel--group-count,.place-of-operation-group__personnel--special-group-count,.place-of-operation-group__personnel--personnel-count,.place-of-operation-group__personnel--rent-amount,.place-of-operation-group__personnel--time-start,.place-of-operation-group__personnel--time-end,.place-of-operation-group__rent--student-count,.place-of-operation-group__rent--special-student-count,.place-of-operation-group__rent--group-count,.place-of-operation-group__rent--special-group-count,.place-of-operation-group__rent--personnel-count,.place-of-operation-group__rent--rent-amount,.place-of-operation-group__rent--time-start,.place-of-operation-group__rent--time-end,.place-of-operation-group__time--student-count,.place-of-operation-group__time--special-student-count,.place-of-operation-group__time--group-count,.place-of-operation-group__time--special-group-count,.place-of-operation-group__time--personnel-count,.place-of-operation-group__time--rent-amount,.place-of-operation-group__time--time-start,.place-of-operation-group__time--time-end{width:47.5%}}@media(min-width: 768px){.club-section__participants{display:flex;gap:var(--spacing-l);justify-content:space-between}}.club-section__participants input.form-text.hds-text-input__input{max-width:100%;width:100%}.club-section__totalhours input.form-text.hds-text-input__input{max-width:100%;width:100%}.club-section__participants label{text-wrap:balance}.hel-icon--size-xs{--icon-size: var(--spacing-layout-2-xs)}.hel-icon--size-s{--icon-size: var(--spacing-layout-xs)}.hel-icon--size-m{--icon-size: var(--spacing-layout-s)}.hel-icon--size-l{--icon-size: var(--spacing-layout-m)}.hel-icon--size-xl{--icon-size: var(--spacing-layout-l)}.hds-text-input__input-wrapper[focus-within][\:has\(input\[readonly\]\)]{margin-right:var(--spacing-2-xs);outline:2px var(--color-black) solid;outline-offset:2px}.hds-text-input__input-wrapper[focus-within]:has(input[readonly]){margin-right:var(--spacing-2-xs);outline:2px var(--color-black) solid;outline-offset:2px}.hds-text-input__input-wrapper[focus-within][\:has\(input\[readonly\]\)]{margin-right:var(--spacing-2-xs);outline:2px var(--color-black) solid;outline-offset:2px}.hds-text-input__input-wrapper:focus-within[\:has\(input\[readonly\]\)]{margin-right:var(--spacing-2-xs);outline:2px var(--color-black) solid;outline-offset:2px}.hds-text-input__input-wrapper:focus-within:has(input[readonly]){margin-right:var(--spacing-2-xs);outline:2px var(--color-black) solid;outline-offset:2px}.hds-text-input__input-wrapper[focus-within][\:has\(input\[readonly\]\)] input[readonly]{width:calc(100% - var(--spacing-2-xs))}.hds-text-input__input-wrapper[focus-within]:has(input[readonly]) input[readonly]{width:calc(100% - var(--spacing-2-xs))}.hds-text-input__input-wrapper[focus-within][\:has\(input\[readonly\]\)] input[readonly]{width:calc(100% - var(--spacing-2-xs))}.hds-text-input__input-wrapper:focus-within[\:has\(input\[readonly\]\)] input[readonly]{width:calc(100% - var(--spacing-2-xs))}.hds-text-input__input-wrapper:focus-within:has(input[readonly]) input[readonly]{width:calc(100% - var(--spacing-2-xs))}.form-item-application-number,.form-item-status,.form-item-applicant-type{display:none}.grants-handler__completion{background:var(--color-bus-light);padding:var(--spacing-layout-l) var(--spacing-layout-2-xl)}.grants-handler__completion h2{margin-top:var(--spacing-l)}.grants-handler__completion h3{font-size:1rem;font-weight:bold;margin-top:var(--spacing-m)}.grants-handler__completion__info-row{display:flex;flex-flow:row wrap;gap:var(--spacing-m);justify-content:flex-start;margin-bottom:var(--spacing-m)}.grants-handler__completion__button-row{display:flex;flex-flow:row wrap;gap:var(--spacing-m);justify-content:flex-start}.grants-handler__completion__longtext{margin:var(--spacing-l) 0}.hds-notification.notification-margin-bottom{margin-bottom:var(--spacing-layout-m)}.hds-notification__label{align-items:center}.hds-checkbox__input label{font-weight:normal}fieldset.grants-attachments--wrapper{margin-bottom:var(--spacing-layout-m)}fieldset.grants-attachments--wrapper legend{margin-bottom:var(--spacing-2-xs)}fieldset.grants-attachments--wrapper .form-item--error-message{width:100%}fieldset.grants-attachments--wrapper .js-form-type-managed-file{margin-bottom:0}.grants-applications-managed_file{position:relative}.grants-applications-managed_file label.hds-button--secondary:not(:disabled):not(.eu-cookie-compliance-default-button):not(.eu-cookie-compliance-save-preferences-button){left:0;position:relative}.grants-applications-managed_file label.hds-button--secondary:not(:disabled):not(.eu-cookie-compliance-default-button):not(.eu-cookie-compliance-save-preferences-button)[\:has\(input\:disabled\)]{background-color:transparent;background-color:var(--background-color-disabled, transparent);border-color:transparent;border-color:var(--border-color-disabled, transparent);color:var(--color-disabled);cursor:not-allowed}.grants-applications-managed_file label.hds-button--secondary:not(:disabled):not(.eu-cookie-compliance-default-button):not(.eu-cookie-compliance-save-preferences-button)[\:has\(input\:disabled\)]{background-color:transparent;background-color:var(--background-color-disabled, transparent);border-color:transparent;border-color:var(--border-color-disabled, transparent);color:var(--color-disabled);cursor:not-allowed}.grants-applications-managed_file label.hds-button--secondary:not(:disabled):not(.eu-cookie-compliance-default-button):not(.eu-cookie-compliance-save-preferences-button):has(input:disabled){background-color:transparent;background-color:var(--background-color-disabled, transparent);border-color:transparent;border-color:var(--border-color-disabled, transparent);color:var(--color-disabled);cursor:not-allowed}.grants-applications-managed_file label.hds-button--secondary:not(:disabled):not(.eu-cookie-compliance-default-button):not(.eu-cookie-compliance-save-preferences-button)[focus-within]{background:var(--color-black);border-color:var(--color-white);color:var(--color-white);outline:2px var(--color-black) solid}.grants-applications-managed_file label.hds-button--secondary:not(:disabled):not(.eu-cookie-compliance-default-button):not(.eu-cookie-compliance-save-preferences-button):focus-within{background:var(--color-black);border-color:var(--color-white);color:var(--color-white);outline:2px var(--color-black) solid}.grants-applications-managed_file input[type=file]{opacity:0;position:absolute}.form-managed-file{display:flex;flex-wrap:wrap;white-space:inherit}.form-managed-file>span{background-color:var(--color-info-light);border-bottom:2px dotted var(--color-coat-of-arms);display:inline-block;padding:var(--spacing-s) var(--spacing-2-xs)}.form-managed-file>.file-upload-js-error{flex-basis:100%}.grants-applications-managed_file label.hds-button{display:flex}.grants-attachments--wrapper .webform-readonly{display:none}.webform-multiple-table table{border-collapse:collapse;border:0px var(--color-white) solid;margin-bottom:var(--spacing-2-xs);max-width:-moz-fit-content;max-width:fit-content}.webform-multiple-table .webform-multiple-table--operations-two{min-width:60px}.webform-multiple-table tbody tr,.webform-multiple-table thead tr{align-items:center;justify-content:space-between;width:100%}.webform-multiple-table td,.webform-multiple-table th{max-width:100%;min-width:0;padding:0;width:100%}.webform-multiple-table table thead th{padding:var(--spacing-layout-2-xs)}div.hidden-head table{display:table}div.hidden-head table thead th{padding:0}div.hidden-head table tbody tr{border-bottom:var(--spacing-s) var(--color-white) solid}div.hidden-head table tbody tr:hover{background:rgba(0,0,0,0)}div.table-layout-form input.hds-text-input__input{width:100%}div.table-layout-form table{border:1px var(--color-black) solid;max-width:var(--webform-element-width--input-large)}div.table-layout-form table tbody tr{border:§0px var(--color-black-30) solid}div.table-layout-form table tbody tr td{border:1px var(--color-black-30) solid;padding:0}div.table-layout-form table tbody tr td input.hds-text-input__input[readonly]{padding:var(--spacing-layout-2-xs)}div.table-layout-form table .form-item{margin-bottom:0}.hds-text-input .hds-text-input__input.input--borderless{border:0 rgba(0,0,0,0) solid}#edit-subventions-items thead{background:var(--color-black-90);color:var(--color-white);text-align:left}#edit-subventions-items input.hds-text-input,#edit-subventions-items input.hds-text-input__input{background:rgba(0,0,0,0)}#subventions_table td.webform-multiple-table--operations,#subventions_table th.webform-multiple-table--operations{display:none}#subventions_table input.hds-text-input__input[readonly][name$="[amount]"]{background-color:var(--input-background-disabled);border-color:var(--input-border-color-disabled);color:var(--input-color-disabled);cursor:not-allowed}.form-item-muu-liite .webform-multiple-table--operations{display:none}.hidden-head>label{display:none}.webform-preview .accordion_header{font-size:28px;font-weight:300}@media(min-width: 768px){.webform-preview .accordion_header{font-size:36px;font-weight:500}}.webform-preview label{display:block;font-weight:bold}.grants-profile-grants-profile fieldset{background:var(--color-black-5);border:0 rgba(0,0,0,0) solid;margin:0;max-width:var(--webform-element-width--fieldset);padding:0 var(--spacing-layout-s) var(--spacing-layout-s);top:calc(-1*var(--spacing-m))}.grants-profile-grants-profile fieldset label{margin-bottom:var(--spacing-3-xs)}.grants-profile-grants-profile fieldset legend{font-size:var(--fontsize-body-l);margin-bottom:var(--spacing-m);padding-bottom:var(--spacing-s);position:relative;top:var(--spacing-l)}.grants-profile-grants-profile fieldset .fieldset-wrapper{display:flex;flex-flow:row wrap;justify-content:space-between}.grants-profile-grants-profile fieldset .hds-text-input{max-width:100%}.grants-profile-grants-profile fieldset div[class*=-address-postcode]{width:32%}.grants-profile-grants-profile fieldset div[class*=-address-city]{width:65%}.grants-profile--extrainfo .form-actions .button{margin-right:var(--spacing-2-xs)}.grants-stepper{--grants-stepper-color: var(--color-black);--grants-stepper-background-color: var(--color-white);--grants-stepper-disabled-color: var(--color-black-20);--grants-stepper-selected-step-label-color: var(--color-black-90);--grants-stepper-not-selected-step-label-color: var(--color-black);--grants-step-background-color: var(--color-white);--grants-step-content-color: var(--color-black);--grants-stepper-focus-border-color: var(--color-coat-of-arms);--grants-step-width: 120px;--circle-container-size: 36px;--progress-line-height: 2px;background-color:var(--grants-stepper-background-color);margin-bottom:var(--spacing-layout-m);position:relative}@media(max-width: 725px){.grants-stepper{--grants-step-width: 40px}}@media(max-width: 725px){.grants-stepper .grants-stepper__text{display:none}}.grants-stepper__inner{align-items:flex-start;display:flex;justify-content:space-between;margin:0;-ms-overflow-style:none;padding:0;position:relative;scroll-behavior:smooth;scrollbar-width:none;width:100%}.grants-stepper__lines{display:flex;height:var(--progress-line-height);left:calc(var(--grants-step-width)/2);line-height:var(--lineheight-l);position:absolute;transform:translateY(calc(var(--circle-container-size) / 2 + var(--progress-line-height) / 2));z-index:1}.grants-stepper__line{background-color:var(--grants-stepper-color);display:inline-block;height:100%;position:relative}.grants-stepper__line__disabled{background-color:var(--grants-stepper-disabled-color)}.grants-stepper__steps{background-color:var(--grants-stepper-background-color);box-sizing:border-box;display:flex;flex-shrink:0;justify-content:center;max-width:var(--grants-step-width);min-width:var(--grants-step-width);padding:3px}.grants-stepper__step{align-items:center;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:rgba(0,0,0,0);border:0;box-sizing:content-box;color:var(--grants-stepper-color);cursor:pointer;display:flex;flex-direction:column;height:100%;justify-content:center;outline:none;overflow:visible;padding:0;position:relative}.grants-stepper__step[disabled],.grants-stepper__step__disabled{color:var(--grants-stepper-disabled-color);cursor:not-allowed}.grants-stepper__step[disabled] .grants-stepper__circle,.grants-stepper__step__disabled .grants-stepper__circle{background-color:var(--grants-stepper-background-color);border:2px solid var(--grants-stepper-disabled-color);color:var(--grants-stepper-disabled-color)}.grants-stepper__step[disabled] .grants-stepper__text,.grants-stepper__step__disabled .grants-stepper__text{color:var(--grants-stepper-disabled-color)}.grants-stepper__step__circle_container{align-items:center;display:flex;height:var(--circle-container-size);justify-content:center;width:var(--circle-container-size);z-index:2}.grants-stepper__step__completed_container{align-items:center;background-color:var(--grants-stepper-color);border-radius:16px;color:var(--color-white);display:none;justify-content:center;outline:2px solid var(--grants-stepper-background-color);padding:4px;vertical-align:middle}.grants-stepper .grants-stepper__error,.grants-stepper .grants-stepper__completed{display:none}.grants-stepper__text{color:var(--grants-stepper-not-selected-step-label-color);font-size:var(--fontsize-body-m);font-weight:500;line-height:var(--lineheight-l);margin-bottom:0;margin-top:6px;padding-left:var(--spacing-4-xs);padding-right:var(--spacing-4-xs);text-align:center;text-decoration:underline}.grants-stepper__circle{align-items:center;background-color:var(--grants-step-background-color);border:2px solid var(--grants-stepper-color);border-radius:16px;color:var(--grants-step-content-color);display:flex;height:28px;justify-content:center;outline:2px solid var(--grants-stepper-background-color);text-align:center;width:28px}.grants-stepper__number{font-size:var(--fontsize-body-m);font-weight:500;line-height:1.15}.grants-stepper .is-active .grants-stepper__circle{border:4px solid var(--grants-stepper-color);border-radius:18px;outline:none}.grants-stepper .is-active .grants-stepper__text{color:var(--grants-stepper-selected-step-label-color);font-weight:700;text-decoration:none}.grants-stepper .is-active .grants-stepper__number{color:var(--grants-stepper-selected-step-label-color);font-weight:700;text-decoration:none}.grants-stepper .is-complete .grants-stepper__container{align-items:center;background-color:var(--grants-stepper-color);border-radius:16px;color:var(--color-white);display:flex;justify-content:center;outline:2px solid var(--grants-stepper-background-color);padding:4px}.grants-stepper .is-complete .grants-stepper__number{display:none}.grants-stepper .is-complete .grants-stepper__completed{display:inline-block}.grants-stepper .is-complete .grants-stepper__circle{opacity:0}.grants-stepper .is-complete .grants-stepper__step__completed_container{display:flex}.grants-stepper .has-errors .grants-stepper__container{align-items:center;background-color:var(--grants-stepper-color);border-radius:16px;color:var(--color-white);display:flex;justify-content:center;outline:2px solid var(--grants-stepper-background-color);padding:4px}.grants-stepper .has-errors .grants-stepper__circle{border-color:var(--color-error);color:var(--color-error)}.grants-stepper .has-errors .grants-stepper__number{display:none}.grants-stepper .has-errors .grants-stepper__error{display:inline-block}.grants-stepper .progress-marker::before{display:none}.grants-stepper .progress-step .progress-marker{color:var(--color-black)}.grants-stepper .progress-step .progress-marker.focus-visible .grants-stepper__circle{outline:2px solid var(--color-black);outline:var(--outline-width, 2px) solid var(--color-black);outline-offset:2px}.grants-stepper .progress-step .progress-marker.focus-visible .grants-stepper__circle{outline:2px solid var(--color-black);outline:var(--outline-width, 2px) solid var(--color-black);outline-offset:2px}.grants-stepper .progress-step .progress-marker:focus-visible .grants-stepper__circle{outline:2px solid var(--color-black);outline:var(--outline-width, 2px) solid var(--color-black);outline-offset:2px}.grants-stepper .progress-step .progress-marker.focus-visible .grants-stepper__text{outline:2px solid var(--color-black);outline:var(--outline-width, 2px) solid var(--color-black)}.grants-stepper .progress-step .progress-marker.focus-visible .grants-stepper__text{outline:2px solid var(--color-black);outline:var(--outline-width, 2px) solid var(--color-black)}.grants-stepper .progress-step .progress-marker:focus-visible .grants-stepper__text{outline:2px solid var(--color-black);outline:var(--outline-width, 2px) solid var(--color-black)}.grants-stepper .progress-step:last-child{flex-grow:1}.grant-applications--select-wrapper{--border-width: 2px;--input-height: 56px;--menu-item-height: 53px;--icon-size: var(--spacing-m);--helper-color-default: var(--color-black-60);--helper-color-invalid: var(--color-error);--icon-color-invalid: var(--color-error);--input-background-default: var(--color-white);--input-background-disabled: var(--color-black-10);--input-border-color-default: var(--color-black-50);--input-border-color-hover: var(--color-black-90);--input-border-color-focus: var(--color-black-90);--input-border-color-invalid: var(--color-error);--input-border-color-disabled: var(--color-black-10);--input-color-default: var(--color-black-90);--input-color-disabled: var(--color-black-40);--label-color-default: var(--color-black-90);--label-color-invalid: var(--color-black-90);--placeholder-color: var(--color-black-60);--focus-outline-color: var(--color-coat-of-arms);align-items:center;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--input-background-default);border:var(--border-width) solid var(--input-border-color-default);box-sizing:border-box;color:var(--input-color-default);cursor:pointer;display:block;font-size:1.125em;grid-template-areas:"select";line-height:normal;max-width:30ch;min-width:15ch;padding:.25em .5em;position:relative;width:100%}.grant-applications--select-wrapper select{align-items:center;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:rgba(0,0,0,0);border:none;color:var(--dropdown-color-default);cursor:inherit;display:flex;font-family:inherit;font-size:var(--fontsize-body-l);height:var(--input-height);line-height:inherit;margin:0;min-height:var(--menu-item-height);outline:none;padding:calc(var(--spacing-s) - var(--border-width)*2) var(--spacing-s);width:100%;z-index:1}.grant-applications--select-wrapper select::-ms-expand{display:none}.grant-applications--select-wrapper i.hel-icon{pointer-events:none;position:absolute;right:calc(var(--spacing-s) - var(--border-width)*2);top:calc(var(--spacing-s) - var(--border-width)*2)}.grant-applications--select-wrapper select,.grant-applications--select-wrapper::after{grid-area:select}.grant-applications--select-wrapper:not(.select--multiple)::after{background-color:var(--helper-color-default);clip-path:polygon(100% 0%, 0 0%, 50% 100%);content:"";height:.5em;justify-self:end;width:.8em}.grant-applications--select-wrapper select:focus+.grant-applications--select-focus{border:2px solid var(--focus-outline-color);border-radius:inherit;bottom:-1px;left:-1px;position:absolute;right:-1px;top:-1px}.webform-submission__application_id{border-bottom:1px var(--color-black-20) solid;padding-bottom:var(--spacing-xl)}.webform-submission__application_id--header{font-size:1rem;font-weight:bold}.webform-submission__title-wrapper{padding-top:var(--spacing-2-xl)}.webform-submission__title-wrapper h1{max-width:100%}.webform-submission ul{list-style:none;margin-top:0;padding-left:0}.webform-submission-information{background:var(--color-silver-light);margin-top:var(--spacing-3-xl);padding:var(--spacing-l)}.webform-submission-information .webform-submission-information{margin-top:var(--spacing-l);padding:0}.webform-submission-information h4{margin-top:0}.webform-submission-information h5{font-size:var(--fontsize-body-m);margin-top:var(--spacing-s)}.webform-submission-information__row{display:flex}.webform-submission-information__row-edit{margin-top:var(--spacing-s)}.webform-submission-information__row-top{align-items:center;border-bottom:1px solid var(--color-black-20);justify-content:space-between}@media(max-width: 550px){.webform-submission-information__row-top{display:block}}.webform-submission-information__row-main{flex-flow:row nowrap;gap:var(--spacing-m);justify-content:space-between}@media(max-width: 1179px){.webform-submission-information__row-main{flex-flow:row wrap}}.webform-submission-information__row-main>div{flex:1}@media(max-width: 1179px){.webform-submission-information__row-main>div{flex:auto;width:100%}}.webform-submission-information__row-main>div ul{list-style-type:none;margin-bottom:0;padding-left:0}.webform-submission-information__row-main>div ul li{margin:0;padding:0}.webform-submission-information__supportlinks{display:flex;flex-flow:row nowrap;min-width:-moz-fit-content;min-width:fit-content}.webform-submission-information__supportlinks .hds-loading-spinner{left:0}.webform-submission-information__supportlinks .hds-button{min-width:-moz-fit-content;min-width:fit-content}.hel-icon.hel-icon--copy{-webkit-mask-image:url("data:image/svg+xml,%3Csvg class='Icon-module_icon__1Jtzj icon_hel-icon__1YqNC Icon-module_s__2WGWe icon_hel-icon--size-s__2Lkik' viewBox='0 0 24 24' role='img' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Crect width='24' height='24'%3E%3C/rect%3E%3Cpath fill='currentColor' d='M6,10 L6,12 L5,12 L5,18 L12,18 L12,17 L14,17 L14,19 C14,19.5522847 13.5522847,20 13,20 L4,20 C3.44771525,20 3,19.5522847 3,19 L3,11 C3,10.4477153 3.44771525,10 4,10 L6,10 Z M20,4 C20.5522847,4 21,4.44771525 21,5 L21,15 C21,15.5522847 20.5522847,16 20,16 L8,16 C7.44771525,16 7,15.5522847 7,15 L7,5 C7,4.44771525 7.44771525,4 8,4 L20,4 Z M19,6 L9,6 L9,14 L19,14 L19,6 Z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg class='Icon-module_icon__1Jtzj icon_hel-icon__1YqNC Icon-module_s__2WGWe icon_hel-icon--size-s__2Lkik' viewBox='0 0 24 24' role='img' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Crect width='24' height='24'%3E%3C/rect%3E%3Cpath fill='currentColor' d='M6,10 L6,12 L5,12 L5,18 L12,18 L12,17 L14,17 L14,19 C14,19.5522847 13.5522847,20 13,20 L4,20 C3.44771525,20 3,19.5522847 3,19 L3,11 C3,10.4477153 3.44771525,10 4,10 L6,10 Z M20,4 C20.5522847,4 21,4.44771525 21,5 L21,15 C21,15.5522847 20.5522847,16 20,16 L8,16 C7.44771525,16 7,15.5522847 7,15 L7,5 C7,4.44771525 7.44771525,4 8,4 L20,4 Z M19,6 L9,6 L9,14 L19,14 L19,6 Z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E")}.webform-submission-form .form-actions{border-top:1px rgba(0,0,0,.6) solid;margin-top:var(--spacing-l);padding-top:var(--spacing-2-xl)}@media(min-width: 768px){.webform-submission-form .form-actions{display:flex;flex-direction:row-reverse}}.webform-submission-form .form-actions .actions{display:flex;flex-wrap:wrap}.webform-submission-form .form-actions button{margin-left:0}@media(min-width: 768px){.webform-submission-form .form-actions button{margin-left:var(--spacing-2-xs)}}.webform-submission-form .form-actions input{margin-bottom:var(--spacing-layout-2-xs);width:100%}@media(min-width: 768px){.webform-submission-form .form-actions input{width:auto}}.webform-submission-form .form-actions input.webform-button--draft{background:rgba(0,0,0,0);border:0 rgba(0,0,0,0) solid;color:var(--hdbt-color-black);order:3;text-decoration:underline}.webform-submission-form .form-actions button.webform-button--next span::after,.webform-submission-form .form-actions button.webform-button--preview span::after{content:">";margin-left:var(--spacing-2-xs)}.webform-submission-form .form-actions button.webform-button--previous span::before{content:"<";margin-right:var(--spacing-2-xs)}.webform-submission-form .form-actions input.webform-button--previous{background:var(--color-white);color:var(--border-color)}.webform-button--draft .hds-button__label::before{background-color:currentColor;background-size:contain;content:"";display:inline-block;flex-shrink:0;height:24px;margin-right:var(--spacing-2-xs);-webkit-mask-image:var(--hel-icon--download-cloud);mask-image:var(--hel-icon--download-cloud);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:24px 24px;mask-size:24px 24px;transition:transform .2s linear;vertical-align:bottom;width:24px}.webform-submission-messages{background:var(--color-silver-light);margin-top:var(--spacing-3-xl);padding:var(--spacing-l)}.webform-submission-messages h4,.webform-submission-messages h5{margin-top:0}.webform-submission-messages hr{margin:var(--spacing-l) 0}.webform-submission-messages__new-message{align-items:center;background:var(--color-alert);display:inline-flex;font-weight:bold;gap:var(--spacing-2-xs);margin-bottom:var(--spacing-m);padding:var(--spacing-2-xs) var(--spacing-xs);text-transform:uppercase}.webform-submission-messages__messages-list{list-style:none;margin:0;padding:0}.webform-submission-messages__message{margin:0;padding:0}.webform-submission-messages__message__attachments{list-style:none}.webform-submission-messages__message .hds-button{margin-top:var(--spacing-s)}.js-form-type-grants-webform-summation-field{max-width:var(--webform-element-width--input-large);text-align:right}.js-form-type-grants-webform-summation-field .grants-webform-summation-field{display:inline-block;padding:var(--spacing-xs) var(--spacing-m)}.webform-print-header,.webform-print-footer{display:none}.webform-print .main-content{display:block}.webform-submission--view-mode-html .hds-text-input,.webform-submission-data-preview-page .hds-text-input,.webform-print-page-html .hds-text-input{max-width:100%}.webform-submission--view-mode-html .print-label,.webform-submission-data-preview-page .print-label,.webform-print-page-html .print-label{display:block;font-size:var(--fontsize-body-m);font-weight:500;margin-bottom:var(--spacing-3-xs);margin-top:0;max-width:-moz-fit-content;max-width:fit-content;padding-right:var(--spacing-xl);position:relative}.webform-submission--view-mode-html .webform-section-flex-wrapper h3+*>*:first-child>*:first-child,.webform-submission--view-mode-html .webform-section-flex-wrapper h3+*>*:first-child>*:first-child label:first-of-type,.webform-submission-data-preview-page .webform-section-flex-wrapper h3+*>*:first-child>*:first-child,.webform-submission-data-preview-page .webform-section-flex-wrapper h3+*>*:first-child>*:first-child label:first-of-type,.webform-print-page-html .webform-section-flex-wrapper h3+*>*:first-child>*:first-child,.webform-print-page-html .webform-section-flex-wrapper h3+*>*:first-child>*:first-child label:first-of-type{line-height:normal}.webform-submission--view-mode-html .print-notification,.webform-submission-data-preview-page .print-notification,.webform-print-page-html .print-notification{border:2px var(--color-black) solid;font-weight:bold;margin-top:var(--spacing-2-xl);padding:var(--spacing-layout-s)}.webform-submission--view-mode-html .print-notification .print-notification--icon,.webform-submission-data-preview-page .print-notification .print-notification--icon,.webform-print-page-html .print-notification .print-notification--icon{height:22px;margin-right:var(--spacing-2-xs);vertical-align:text-top;width:22px}.webform-submission--view-mode-html .webform-print-page-wizard-page~.webform-print-page-wizard-page h2,.webform-submission-data-preview-page .webform-print-page-wizard-page~.webform-print-page-wizard-page h2,.webform-print-page-html .webform-print-page-wizard-page~.webform-print-page-wizard-page h2{page-break-after:avoid;page-break-before:always}.webform-submission--view-mode-html div.hds-text-input__input,.webform-submission-data-preview-page div.hds-text-input__input,.webform-print-page-html div.hds-text-input__input{background:var(--color-white);border:2px var(--color-black) solid;height:var(--spacing-2-xl);width:100%}.webform-submission--view-mode-html div.hds-text-input__textarea,.webform-submission-data-preview-page div.hds-text-input__textarea,.webform-print-page-html div.hds-text-input__textarea{background:var(--color-white);border:2px var(--color-black) solid;height:var(--spacing-layout-2-xl);width:100%}.webform-submission--view-mode-html .webform-section-wrapper .hds-notification,.webform-submission-data-preview-page .webform-section-wrapper .hds-notification,.webform-print-page-html .webform-section-wrapper .hds-notification{margin-top:var(--spacing-s)}.webform-submission--view-mode-html .webform-print-page-body h2,.webform-submission-data-preview-page .webform-print-page-body h2,.webform-print-page-html .webform-print-page-body h2{margin-bottom:var(--spacing-layout-s)}.webform-submission--view-mode-html .webform-print-wrapper-table,.webform-submission-data-preview-page .webform-print-wrapper-table,.webform-print-page-html .webform-print-wrapper-table{border:0 rgba(0,0,0,0) solid;display:table;max-width:100%;overflow-x:visible;overflow-x:initial;width:100%}.webform-submission--view-mode-html .webform-print-wrapper-table thead,.webform-submission--view-mode-html .webform-print-wrapper-table tbody,.webform-submission--view-mode-html .webform-print-wrapper-table tfoot,.webform-submission--view-mode-html .webform-print-wrapper-table tr,.webform-submission--view-mode-html .webform-print-wrapper-table tbody tr:hover,.webform-submission--view-mode-html .webform-print-wrapper-table td,.webform-submission--view-mode-html .webform-print-wrapper-table td:first-child,.webform-submission--view-mode-html .webform-print-wrapper-table th,.webform-submission-data-preview-page .webform-print-wrapper-table thead,.webform-submission-data-preview-page .webform-print-wrapper-table tbody,.webform-submission-data-preview-page .webform-print-wrapper-table tfoot,.webform-submission-data-preview-page .webform-print-wrapper-table tr,.webform-submission-data-preview-page .webform-print-wrapper-table tbody tr:hover,.webform-submission-data-preview-page .webform-print-wrapper-table td,.webform-submission-data-preview-page .webform-print-wrapper-table td:first-child,.webform-submission-data-preview-page .webform-print-wrapper-table th,.webform-print-page-html .webform-print-wrapper-table thead,.webform-print-page-html .webform-print-wrapper-table tbody,.webform-print-page-html .webform-print-wrapper-table tfoot,.webform-print-page-html .webform-print-wrapper-table tr,.webform-print-page-html .webform-print-wrapper-table tbody tr:hover,.webform-print-page-html .webform-print-wrapper-table td,.webform-print-page-html .webform-print-wrapper-table td:first-child,.webform-print-page-html .webform-print-wrapper-table th{background:rgba(0,0,0,0);border:0;color:var(--color-black)}.webform-submission--view-mode-html .webform-print-wrapper-table ul,.webform-submission-data-preview-page .webform-print-wrapper-table ul,.webform-print-page-html .webform-print-wrapper-table ul{margin:0;padding:0}.webform-submission--view-mode-html .webform-print-wrapper-table ul li,.webform-submission-data-preview-page .webform-print-wrapper-table ul li,.webform-print-page-html .webform-print-wrapper-table ul li{border-bottom:1px var(--color-black-50) solid;list-style:none;margin-top:0;padding:1rem 0}.webform-submission--view-mode-html .webform-print-wrapper-table ul li:last-of-type,.webform-submission-data-preview-page .webform-print-wrapper-table ul li:last-of-type,.webform-print-page-html .webform-print-wrapper-table ul li:last-of-type{border-bottom:0 rgba(0,0,0,0) solid}.webform-submission--view-mode-html .webform-print-wrapper-table thead,.webform-submission-data-preview-page .webform-print-wrapper-table thead,.webform-print-page-html .webform-print-wrapper-table thead{display:table-header-group}.webform-submission--view-mode-html .webform-print-wrapper-table thead th,.webform-submission-data-preview-page .webform-print-wrapper-table thead th,.webform-print-page-html .webform-print-wrapper-table thead th{padding:0}.webform-submission--view-mode-html .webform-print-wrapper-table tfoot,.webform-submission-data-preview-page .webform-print-wrapper-table tfoot,.webform-print-page-html .webform-print-wrapper-table tfoot{display:table-footer-group}.webform-submission--view-mode-html .webform-submission-data>section,.webform-submission-data-preview-page .webform-submission-data>section,.webform-print-page-html .webform-submission-data>section{border-top:1px var(--color-black-20) solid;padding-top:var(--spacing-layout-l)}.webform-submission--view-mode-html .webform-submission-data>section>.webform-section-flex-wrapper,.webform-submission-data-preview-page .webform-submission-data>section>.webform-section-flex-wrapper,.webform-print-page-html .webform-submission-data>section>.webform-section-flex-wrapper{display:block}.webform-submission--view-mode-html .webform-submission-data>section>.webform-section-flex-wrapper>h2,.webform-submission-data-preview-page .webform-submission-data>section>.webform-section-flex-wrapper>h2,.webform-print-page-html .webform-submission-data>section>.webform-section-flex-wrapper>h2{font-size:var(--fontsize-heading-l) !important;margin:0 0 2mm !important;padding:0 !important;width:100% !important}.webform-submission--view-mode-html .webform-submission-data>section>.webform-section-flex-wrapper>h2,.webform-submission-data-preview-page .webform-submission-data>section>.webform-section-flex-wrapper>h2,.webform-print-page-html .webform-submission-data>section>.webform-section-flex-wrapper>h2{font-weight:500;min-width:100%}.webform-submission--view-mode-html .webform-submission-data>section>.webform-section-flex-wrapper>.webform-section-wrapper,.webform-submission-data-preview-page .webform-submission-data>section>.webform-section-flex-wrapper>.webform-section-wrapper,.webform-print-page-html .webform-submission-data>section>.webform-section-flex-wrapper>.webform-section-wrapper{padding:6mm 0}.webform-submission--view-mode-html .webform-submission-data>section>.webform-section-flex-wrapper>.webform-section-wrapper label,.webform-submission-data-preview-page .webform-submission-data>section>.webform-section-flex-wrapper>.webform-section-wrapper label,.webform-print-page-html .webform-submission-data>section>.webform-section-flex-wrapper>.webform-section-wrapper label{font-weight:500}.webform-submission--view-mode-html .webform-submission-data>section.hds-notification,.webform-submission-data-preview-page .webform-submission-data>section.hds-notification,.webform-print-page-html .webform-submission-data>section.hds-notification{padding-top:var(--spacing-s)}@media print{@page{.webform-submission--view-mode-html,.webform-submission-data-preview-page,.webform-print-page-html{margin:0;size:A4}}.webform-submission--view-mode-html h1,.webform-submission-data-preview-page h1,.webform-print-page-html h1{margin:0;position:relative}.webform-submission--view-mode-html details,.webform-submission-data-preview-page details,.webform-print-page-html details{page-break-before:always}.webform-submission--view-mode-html .details-section-divider,.webform-submission-data-preview-page .details-section-divider,.webform-print-page-html .details-section-divider{page-break-after:always}.webform-submission--view-mode-html label,.webform-submission-data-preview-page label,.webform-print-page-html label{font-size:8pt;margin-bottom:0}.webform-submission--view-mode-html section,.webform-submission-data-preview-page section,.webform-print-page-html section{border-top:0 var(--color-black-20) solid !important;padding-top:0 !important}.webform-submission--view-mode-html section,.webform-submission-data-preview-page section,.webform-print-page-html section{margin-bottom:0;padding-bottom:0}.webform-submission--view-mode-html div.main-content,.webform-submission-data-preview-page div.main-content,.webform-print-page-html div.main-content{margin:0}.webform-submission--view-mode-html button,.webform-submission--view-mode-html footer.footer,.webform-submission--view-mode-html header.header,.webform-submission--view-mode-html nav.breadcrumb,.webform-submission--view-mode-html .form-actions,.webform-submission--view-mode-html .hds-notification,.webform-submission--view-mode-html .messages__container,.webform-submission--view-mode-html .tools__container,.webform-submission--view-mode-html .breadcrumb__container,.webform-submission--view-mode-html .webform-progress,.webform-submission--view-mode-html .webform-progress-tracker,.webform-submission--view-mode-html .webform-progress-tracker-mobile,.webform-submission--view-mode-html .webform-multiple-add,.webform-submission--view-mode-html .webform-multiple-table--operations,.webform-submission-data-preview-page button,.webform-submission-data-preview-page footer.footer,.webform-submission-data-preview-page header.header,.webform-submission-data-preview-page nav.breadcrumb,.webform-submission-data-preview-page .form-actions,.webform-submission-data-preview-page .hds-notification,.webform-submission-data-preview-page .messages__container,.webform-submission-data-preview-page .tools__container,.webform-submission-data-preview-page .breadcrumb__container,.webform-submission-data-preview-page .webform-progress,.webform-submission-data-preview-page .webform-progress-tracker,.webform-submission-data-preview-page .webform-progress-tracker-mobile,.webform-submission-data-preview-page .webform-multiple-add,.webform-submission-data-preview-page .webform-multiple-table--operations,.webform-print-page-html button,.webform-print-page-html footer.footer,.webform-print-page-html header.header,.webform-print-page-html nav.breadcrumb,.webform-print-page-html .form-actions,.webform-print-page-html .hds-notification,.webform-print-page-html .messages__container,.webform-print-page-html .tools__container,.webform-print-page-html .breadcrumb__container,.webform-print-page-html .webform-progress,.webform-print-page-html .webform-progress-tracker,.webform-print-page-html .webform-progress-tracker-mobile,.webform-print-page-html .webform-multiple-add,.webform-print-page-html .webform-multiple-table--operations{display:none !important}.webform-submission--view-mode-html .gin--horizontal-toolbar .dialog-off-canvas-main-canvas,.webform-submission-data-preview-page .gin--horizontal-toolbar .dialog-off-canvas-main-canvas,.webform-print-page-html .gin--horizontal-toolbar .dialog-off-canvas-main-canvas{padding:0 !important}.webform-submission--view-mode-html .hds-text-input,.webform-submission-data-preview-page .hds-text-input,.webform-print-page-html .hds-text-input{max-width:100%}.webform-submission--view-mode-html .hds-text-input .hds-text-input__input,.webform-submission-data-preview-page .hds-text-input .hds-text-input__input,.webform-print-page-html .hds-text-input .hds-text-input__input{height:1cm}.webform-submission--view-mode-html .hds-text-input textarea.hds-text-input__input,.webform-submission--view-mode-html .hds-text-input div.hds-text-input__textarea,.webform-submission-data-preview-page .hds-text-input textarea.hds-text-input__input,.webform-submission-data-preview-page .hds-text-input div.hds-text-input__textarea,.webform-print-page-html .hds-text-input textarea.hds-text-input__input,.webform-print-page-html .hds-text-input div.hds-text-input__textarea{height:6cm;max-width:100%;min-width:100%;width:100%}.webform-submission--view-mode-html .hds-text-input .hds-text-input__input[readonly],.webform-submission--view-mode-html .hds-text-input .hds-text-input__input,.webform-submission-data-preview-page .hds-text-input .hds-text-input__input[readonly],.webform-submission-data-preview-page .hds-text-input .hds-text-input__input,.webform-print-page-html .hds-text-input .hds-text-input__input[readonly],.webform-print-page-html .hds-text-input .hds-text-input__input{border:2px var(--color-black) solid}.webform-submission--view-mode-html .webform-element,.webform-submission-data-preview-page .webform-element,.webform-print-page-html .webform-element{border:1px var(--color-black) solid;margin-bottom:8mm;padding:2.5mm;position:relative}.webform-submission--view-mode-html .webform-preview,.webform-submission-data-preview-page .webform-preview,.webform-print-page-html .webform-preview{margin-top:0}.webform-submission--view-mode-html .webform-preview label,.webform-submission-data-preview-page .webform-preview label,.webform-print-page-html .webform-preview label{align-items:flex-end;display:flex;font-size:8pt;height:100%;left:0;pointer-events:none;position:absolute;top:-100%;width:100%}.webform-submission--view-mode-html .webform-preview .webform-element,.webform-submission-data-preview-page .webform-preview .webform-element,.webform-print-page-html .webform-preview .webform-element{border:1px var(--color-black) solid;margin-bottom:8mm;padding:2.5mm;position:relative;top:5mm}.webform-submission--view-mode-html .webform-preview .webform-multiple-table--operations,.webform-submission-data-preview-page .webform-preview .webform-multiple-table--operations,.webform-print-page-html .webform-preview .webform-multiple-table--operations{display:none}.webform-submission--view-mode-html .webform-print-header,.webform-submission-data-preview-page .webform-print-header,.webform-print-page-html .webform-print-header{align-items:center;background:var(--color-white);border-bottom:1px var(--color-black-40) solid;display:flex;flex-flow:row nowrap;font-size:9pt;height:21mm;left:0;max-width:100%;min-width:100%;position:fixed;top:0;width:100%;z-index:1000}.webform-submission--view-mode-html .webform-print-header svg,.webform-submission-data-preview-page .webform-print-header svg,.webform-print-page-html .webform-print-header svg{color:var(--color-black);display:block;height:25mm;margin-right:3mm;width:55mm}.webform-submission--view-mode-html .webform-print-header .webform-print-header-left-text,.webform-submission-data-preview-page .webform-print-header .webform-print-header-left-text,.webform-print-page-html .webform-print-header .webform-print-header-left-text{color:var(--color-black-40);text-align:left;width:100%}.webform-submission--view-mode-html .webform-print-header .webform-print-header-right-text,.webform-submission-data-preview-page .webform-print-header .webform-print-header-right-text,.webform-print-page-html .webform-print-header .webform-print-header-right-text{color:var(--color-black-40);text-align:right;width:100%}.webform-submission--view-mode-html .webform-print-footer,.webform-submission-data-preview-page .webform-print-footer,.webform-print-page-html .webform-print-footer{align-items:center;background:var(--color-white);border-top:1px var(--color-black-40) solid;bottom:0;display:flex;flex-flow:row nowrap;font-size:9pt;height:17mm;left:0;max-width:100%;min-width:100%;position:fixed;width:100%;z-index:1000}.webform-submission--view-mode-html .webform-print-footer svg,.webform-submission-data-preview-page .webform-print-footer svg,.webform-print-page-html .webform-print-footer svg{color:var(--color-black);display:block;height:15mm;margin-right:3mm;width:33mm}.webform-submission--view-mode-html .webform-print-footer .webform-print-footer-left-text,.webform-submission-data-preview-page .webform-print-footer .webform-print-footer-left-text,.webform-print-page-html .webform-print-footer .webform-print-footer-left-text{color:var(--color-black-40);text-align:left;width:100%}.webform-submission--view-mode-html .webform-print-footer .webform-print-footer-right-text,.webform-submission-data-preview-page .webform-print-footer .webform-print-footer-right-text,.webform-print-page-html .webform-print-footer .webform-print-footer-right-text{color:var(--color-black-40);text-align:right;width:100%}.webform-submission--view-mode-html .webform-print-header-space,.webform-submission-data-preview-page .webform-print-header-space,.webform-print-page-html .webform-print-header-space{background:var(--color-white);font-size:9pt;height:21mm}.webform-submission--view-mode-html .webform-print-footer-space,.webform-submission-data-preview-page .webform-print-footer-space,.webform-print-page-html .webform-print-footer-space{background:var(--color-white);font-size:9pt;height:17mm}.webform-submission--view-mode-html .webform-print-wrapper-table,.webform-submission-data-preview-page .webform-print-wrapper-table,.webform-print-page-html .webform-print-wrapper-table{border:0;margin:0;overflow-x:visible;overflow-x:initial}.webform-submission--view-mode-html .webform-section-flex-wrapper,.webform-submission-data-preview-page .webform-section-flex-wrapper,.webform-print-page-html .webform-section-flex-wrapper{flex-flow:row wrap}.webform-submission--view-mode-html .webform-section-flex-wrapper>h3.webform-section-title,.webform-submission-data-preview-page .webform-section-flex-wrapper>h3.webform-section-title,.webform-print-page-html .webform-section-flex-wrapper>h3.webform-section-title{max-width:100%;width:100%}.webform-submission--view-mode-html .webform-section-grid-wrapper,.webform-submission-data-preview-page .webform-section-grid-wrapper,.webform-print-page-html .webform-section-grid-wrapper{display:flex;flex-flow:row nowrap}.webform-submission--view-mode-html .webform-section-grid-wrapper>h3.webform-section-title,.webform-submission-data-preview-page .webform-section-grid-wrapper>h3.webform-section-title,.webform-print-page-html .webform-section-grid-wrapper>h3.webform-section-title{font-size:1.25rem;margin-top:0;max-width:5cm;width:100%}.webform-submission--view-mode-html .webform-section-grid-wrapper>dl.webform-section-contents,.webform-submission-data-preview-page .webform-section-grid-wrapper>dl.webform-section-contents,.webform-print-page-html .webform-section-grid-wrapper>dl.webform-section-contents{margin-top:0;max-width:100%;padding-left:1cm;width:100%}.webform-submission--view-mode-html .webform-section-grid-wrapper>dl.webform-section-contents dt,.webform-submission-data-preview-page .webform-section-grid-wrapper>dl.webform-section-contents dt,.webform-print-page-html .webform-section-grid-wrapper>dl.webform-section-contents dt{font-weight:bold;margin:0;padding:0;page-break-after:avoid}.webform-submission--view-mode-html .webform-section-grid-wrapper>dl.webform-section-contents dd,.webform-submission-data-preview-page .webform-section-grid-wrapper>dl.webform-section-contents dd,.webform-print-page-html .webform-section-grid-wrapper>dl.webform-section-contents dd{margin:0;padding:0;page-break-before:avoid}.webform-submission--view-mode-html .webform-print-page-body h2,.webform-submission-data-preview-page .webform-print-page-body h2,.webform-print-page-html .webform-print-page-body h2{margin-bottom:1cm}}.webform-submission-data dl dt{font-weight:bold}.webform-submission-data dl dd{margin:0;padding:0}.webform-submission-data dl dl{padding-left:var(--spacing-2-xs)}.webform-submission-data dl>br{display:none}.webform-print-page-html .webform-section-wrapper>h4,.webform-print-page-html .webform-section-wrapper .print-label{margin-top:var(--spacing-2-xs);line-height:1.5}.webform-print-page-html .webform-section-wrapper fieldset{padding:var(--spacing-s)}@media(min-width: 768px){.webform-print-page-html .webform-section-wrapper fieldset{min-width:400px;padding:var(--spacing-s) var(--spacing-m)}}.application-list{padding-bottom:var(--spacing-xl);padding-left:0}.application-list__processed-human-readable{display:none}.application-list__item{background:var(--color-bus-light);display:block;margin:var(--spacing-m) 0;padding:var(--spacing-2-xl) var(--spacing-s) var(--spacing-m);position:relative}.application-list__item .new-message{background-color:var(--color-alert);border-radius:var(--spacing-xl);display:inline-block;padding:var(--spacing-2-xs)}.application-list__item .new-message .hel-icon--size-s{height:20px;width:20px}.application-list__item h3,.application-list__item h4{margin-top:var(--spacing-xs)}.application-list__item h4{font-size:1rem}.application-list__item--submitted{display:none}.application-list__item__link{display:flex;margin-top:var(--spacing-m)}.application-list__item__link a{font-size:1.25rem}.application-list__item__link a i{vertical-align:text-bottom}.application-list__item__row{display:flex;flex-flow:row wrap;gap:var(--spacing-m);justify-content:space-between}.application-list__item__row__left{justify-content:flex-start}.application-list__item__row__top{padding:var(--spacing-2-xs) var(--spacing-s) var(--spacing-2-xs) 0;position:absolute;top:0;width:100%}.application-list__item--status{--status-label-height: 32px;align-items:center;border-radius:20px;display:inline-flex;font-size:var(--fontsize-body-s);line-height:var(--status-label-height);min-height:var(--status-label-height);padding:var(--spacing-3-xs) var(--spacing-s);padding-left:var(--spacing-xs);vertical-align:middle}.application-list__item--status+.hds-loading-spinner{display:inline-block;left:10px;margin:0;padding:0;position:relative;top:var(--spacing-3-xs)}.application-list__item--status.hide-spinner+.hds-loading-spinner{display:none}.application-list__item--status+div+.application-list__item--error{display:none}.application-list__item--status.show-error{background:var(--color-black-20);color:var(--color-black-90)}.application-list__item--status.show-error+div+.application-list__item--error{display:inline-flex;left:var(--spacing-xs);margin:0;padding:0;position:relative;top:var(--spacing-3-xs)}.application-list__item--status.show-error+div+.application-list__item--error .application-list--error-text{display:inline-block;margin-left:var(--spacing-2-xs)}.application-list__item--status--draft{padding-left:0}.application-list__item--status--sent,.application-list__item--status--submitted{background:var(--color-black-10)}.application-list__item--status--sent::before,.application-list__item--status--submitted::before{--icon-size: 1.5rem;background-color:#000;background-size:contain;content:"";display:inline-block;height:calc(var(--line-height) * 1em);height:var(--icon-size, calc(var(--line-height) * 1em));-webkit-mask-image:var(--hel-icon--alert-circle);mask-image:var(--hel-icon--alert-circle);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);-webkit-mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));vertical-align:bottom;width:calc(var(--line-height) * 1em);width:var(--icon-size, calc(var(--line-height) * 1em));background-color:var(--color-black);content:"";margin-right:var(--spacing-2-xs)}.application-list__item--status--received,.application-list__item--status--pending,.application-list__item--status--processing,.application-list__item--status--preparing{background:var(--color-info);color:var(--color-white)}.application-list__item--status--received::before,.application-list__item--status--pending::before,.application-list__item--status--processing::before,.application-list__item--status--preparing::before{--icon-size: 1.5rem;background-color:#000;background-size:contain;content:"";display:inline-block;height:calc(var(--line-height) * 1em);height:var(--icon-size, calc(var(--line-height) * 1em));-webkit-mask-image:var(--hel-icon--info-circle);mask-image:var(--hel-icon--info-circle);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);-webkit-mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));vertical-align:bottom;width:calc(var(--line-height) * 1em);width:var(--icon-size, calc(var(--line-height) * 1em));background-color:var(--color-white);content:"";margin-right:var(--spacing-2-xs)}.application-list__item--status--done,.application-list__item--status--ready,.application-list__item--status--resolved{background:var(--color-success);color:var(--color-white)}.application-list__item--status--done::before,.application-list__item--status--ready::before,.application-list__item--status--resolved::before{--icon-size: 1.5rem;background-color:#000;background-size:contain;content:"";display:inline-block;height:calc(var(--line-height) * 1em);height:var(--icon-size, calc(var(--line-height) * 1em));-webkit-mask-image:var(--hel-icon--check-circle);mask-image:var(--hel-icon--check-circle);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);-webkit-mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));vertical-align:bottom;width:calc(var(--line-height) * 1em);width:var(--icon-size, calc(var(--line-height) * 1em));background-color:var(--color-white);content:"";margin-right:var(--spacing-2-xs)}.application-list__item--status--rejected,.application-list__item--status--deleted,.application-list__item--status--canceled,.application-list__item--status--cancelled{background:var(--color-alert)}.application-list__item--status--rejected::before,.application-list__item--status--deleted::before,.application-list__item--status--canceled::before,.application-list__item--status--cancelled::before{--icon-size: 1.5rem;background-color:#000;background-size:contain;content:"";display:inline-block;height:calc(var(--line-height) * 1em);height:var(--icon-size, calc(var(--line-height) * 1em));-webkit-mask-image:var(--hel-icon--alert-circle);mask-image:var(--hel-icon--alert-circle);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);-webkit-mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));vertical-align:bottom;width:calc(var(--line-height) * 1em);width:var(--icon-size, calc(var(--line-height) * 1em));background-color:var(--color-black);content:"";margin-right:var(--spacing-2-xs)}.application-list__item--status--error{background:var(--color-black-20);color:var(--color-black);text-transform:uppercase}.application-list__item--status--error .hel-icon{margin-right:var(--spacing-3-xs)}.application-list__count{font-size:1.5rem}.application-list__count-value{font-weight:bold}.application-list__information-row{align-items:flex-end;display:flex;flex-flow:row nowrap;justify-content:space-between;width:100%}@media(max-width: 35rem){.application-list__information-row{flex-flow:row wrap}}.application-list__information-row .grant-applications--select-wrapper select{max-width:100%;width:322px}.application-list__status__wrapper{background:var(--color-black-5)}.application-list__status__container{display:flex;flex-flow:row wrap;gap:var(--spacing-layout-m);justify-content:flex-start;padding-bottom:var(--spacing-m);padding-top:var(--spacing-m)}.application-list__status__label{font-weight:bold}.application-list__status__value{display:flex;flex-flow:row;justify-items:center;min-height:var(--spacing-xl)}.application-list__status__value>div{margin:auto}.application-list__search-row{align-items:flex-end;display:flex;flex-flow:row nowrap;gap:var(--spacing-s);justify-content:space-between;width:100%}@media(max-width: 35rem){.application-list__search-row{flex-flow:row wrap}}.application-list__search-row .hds-text-input{flex:1 100%;max-width:100%}.application-list__search-row .hds-text-input__input-wrapper{display:block}.application-list__search-row .hds-text-input__input-wrapper input{width:100%}.application-list__search-row button{white-space:nowrap}.application-list__pagination{--line-height: 1.5555555556;font-size:1.125rem;font-weight:400;line-height:var(--line-height);display:inline-flex;flex-wrap:wrap;font-weight:700;gap:var(--spacing-2-xs);justify-content:center;list-style:none;padding:0}.application-list__pagination li{margin-top:0}.application-list__pagination li.active a{text-decoration:underline}.application-list__pagination li.disabled a{cursor:default;text-decoration:none}.application-list__pagination li.disabled a:hover,.application-list__pagination li.disabled a:focus,.application-list__pagination li.disabled a:active{outline:none;text-decoration:none}.application-list__pagination li a{color:var(--color-black-90);display:block;height:var(--link-height);min-width:40px;padding-left:var(--spacing-3-xs);padding-right:var(--spacing-3-xs);text-decoration:none}.application-list__pagination li a:hover{text-decoration:underline}.application-list__pagination li a:focus,.application-list__pagination li a:active{outline:solid var(--color-coat-of-arms) 3px;outline-offset:1px}.grants-profile hr{border:1px solid var(--color-silver);margin:var(--spacing-layout-xs) 0}.grants-profile h3.info-grants{border-bottom:2px solid var(--color-silver);padding-bottom:var(--spacing-l)}.grants-profile--title{align-items:center;display:flex;flex-flow:row nowrap}.grants-profile--title .grants-profile--initials{border-radius:50%;display:none;font-size:var(--fontsize-body-xl);font-weight:bold;height:var(--spacing-4-xl);line-height:var(--spacing-4-xl);margin-right:var(--spacing-m);text-align:center;vertical-align:middle;width:var(--spacing-4-xl)}@media(min-width: 992px){.grants-profile--title .grants-profile--initials{display:block}}.grants-profile--title .grants-profile--initials:hover,.grants-profile--title .grants-profile--initials:active,.grants-profile--title .grants-profile--initials:focus{text-decoration:underline}.grants-profile--title .grants-profile--initials-colorscheme-2{background-color:var(--color-bus);color:var(--color-white)}.grants-profile--title .grants-profile--initials-colorscheme-1{background-color:var(--color-engel);color:var(--color-black)}.grants-profile--title .grants-profile--initials-colorscheme-0{background-color:var(--color-tram);color:var(--color-white)}.grants-profile--title h1{flex-grow:100}.grants-profile--basicinfo{--line-height: 1.5;background-color:var(--color-silver-light);border-bottom:8px solid var(--color-engel-dark);padding-bottom:var(--spacing-2-xs);padding-top:var(--spacing-l)}.grants-profile--basicinfo h3{font-size:var(--fontsize-heading-l);margin-top:0;padding-top:0}.grants-profile--extrainfo{padding-bottom:var(--spacing-l);padding-top:var(--spacing-l)}.grants-profile--extrainfo .hds-notification{margin-bottom:var(--spacing-xl)}.grants-profile--extrainfo fieldset.form-wrapper{background-color:var(--color-silver-light);border:0;padding:var(--spacing-l)}.grants-profile--extrainfo fieldset.inline-error-message{background-color:transparent;background-color:initial;padding:0 0 0 var(--spacing-2-xs)}.grants-profile--extrainfo fieldset.inline-error-message legend{display:none}.grants-profile--update-link{margin-bottom:var(--spacing-layout-2-xs);margin-top:var(--spacing-layout-xs)}.grants-profile--infotext{font-size:var(--fontsize-body-l);margin-bottom:var(--spacing-s)}.grants-profile--wrapper{display:flex;flex-wrap:wrap}.grants-profile--wrapper-item{margin-bottom:var(--spacing-layout-2-xs);width:100%}@media(min-width: 576px){.grants-profile--wrapper-item{flex:1;margin-bottom:0}}.grants-profile--wrapper-item:first-child{flex:auto;margin-bottom:var(--spacing-layout-2-xs);width:100%}.grants-profile .profile-add-more{margin-top:1em}[dir="ltr"] .grants-profile dd{margin-left:0}[dir="rtl"] .grants-profile dd{margin-right:0}.grants-profile--officials{margin-left:0;padding-left:0}.grants-profile--officials-item{border-left:4px var(--color-copper) solid;display:flex;flex-flow:row nowrap;justify-content:space-between;list-style:none;margin-bottom:var(--spacing-layout-s);margin-left:0;max-width:var(--webform-element-width--input-large);padding-left:var(--spacing-layout-xs);width:100%}.grants-profile--officials-item--position{font-size:var(--fontsize-heading-xs);font-weight:bold;margin-bottom:var(--spacing-layout-2-xs);margin-top:0;padding-top:0}.grants-profile--officials-edit-wrapper{text-align:right}.grants-profile--officials-edit-wrapper a{display:inline-block}.grants-profile .hel-icon--check-circle-fill{color:var(--color-success);vertical-align:middle}.grants-profile-grants-profile .tabledrag-toggle-weight-wrapper,.grants-profile-grants-profile .field-multiple-drag{display:none}.grants-profile .hds-text-input__label{display:inline-block;margin-top:0}.page--oma-asiointi__private-person .grants-profile--basicinfo{border-bottom:8px solid var(--color-copper)}.page--oma-asiointi__private-person .grants-profile--wrapper{display:grid;grid-template-columns:1fr 1fr}.page--oma-asiointi__unregistered-community .grants-profile--wrapper{display:grid;grid-template-columns:1fr 1fr}.hds-link .hel-icon{margin-right:var(--spacing-2-xs);vertical-align:bottom}.hds-link span.link-label{font-weight:bold;margin-right:var(--spacing-m)}.bold-link{font-weight:bold}div.applicant-info--from-prh,div.applicant-info--from-grants{display:grid;grid-template-columns:1fr}@media(min-width: 576px){div.applicant-info--from-prh,div.applicant-info--from-grants{grid-template-columns:1fr 1fr}}@media(min-width: 768px){div.applicant-info--from-prh,div.applicant-info--from-grants{grid-template-columns:1fr 1fr 1fr}}div.applicant-info--from-prh .form-required::after,div.applicant-info--from-grants .form-required::after{content:none}div.applicant-info--from-prh{border-bottom:2px solid var(--color-silver);margin-bottom:var(--spacing-layout-xs);padding-bottom:var(--spacing-layout-2-xs)}div.grants-handler--prefilled-field .field-prefix,.grants-profile-prh-info .field-prefix{display:block;position:absolute;right:var(--spacing-layout-s);top:0}div.grants-handler--prefilled-field .hds-text-input__input-wrapper,div.grants-handler--prefilled-field .description,.grants-profile-prh-info .hds-text-input__input-wrapper,.grants-profile-prh-info .description{display:inline-block;white-space:normal}div.grants-handler--prefilled-field .hel-icon--check-circle-fill,.grants-profile-prh-info .hel-icon--check-circle-fill{color:var(--color-success);vertical-align:middle}div.grants-handler--prefilled-field .hds-text-input__input,div.grants-handler--prefilled-field .webform-element-description,.grants-profile-prh-info .hds-text-input__input,.grants-profile-prh-info .webform-element-description{color:var(--color-black);display:block;font-size:var(--fontsize-body-m);line-height:var(--spacing-m);position:relative}div.grants-handler--prefilled-field .hds-text-input__label,.grants-profile-prh-info .hds-text-input__label{margin-bottom:0}.grants-profile--imported-section .webform-section-flex-wrapper{background-color:var(--color-silver-light);border-bottom:8px solid var(--color-engel-dark);display:block;padding-bottom:var(--spacing-2-xs);padding-left:var(--spacing-l);padding-right:var(--spacing-l);padding-top:var(--spacing-l);width:100%}.grants-profile--imported-section .webform-section-flex-wrapper h3.webform-section-title{font-size:var(--fontsize-heading-l);font-weight:400;margin-top:0;max-width:100%;padding-top:0;width:100%}.grants-profile--imported-section .webform-section-flex-wrapper .webform-section-wrapper{padding:0}.grants-profile--imported-section .webform-section-flex-wrapper .hds-text-input{margin-bottom:0}.grants-profile--imported-section .webform-section-flex-wrapper #edit-grants-profile-items-container{display:flex;flex-flow:row wrap;justify-content:space-between;margin-bottom:var(--spacing-layout-xs);margin-top:var(--spacing-layout-xs);width:100%}.grants-profile--imported-section .webform-section-flex-wrapper #edit-grants-profile-items-container>div{margin:0 var(--spacing-layout-xs) 0 0;min-width:160px}.grants-profile--imported-section .webform-section-flex-wrapper #edit-grants-profile-items-container .hds-text-input__input-wrapper{display:none}.grants-profile--imported-section .webform-section-flex-wrapper #edit-grants-profile-items-container label{font-size:var(--fontsize-body-m);font-weight:bold;margin:0}.grants-profile--imported-section .webform-section-flex-wrapper .form-item-prh-markup{border-bottom:2px solid var(--color-silver);padding-bottom:var(--spacing-layout-xs);padding-top:var(--spacing-layout-xs)}.grants-profile__local-tasks__wrapper{margin-bottom:0}.openid-connect-login-form.openid-connect-login-form{border-bottom:0;margin-bottom:0;padding-bottom:0}.grants-profile--links{display:flex;justify-content:space-between}.company-delete-confirm-form .form-actions{margin-top:var(--spacing-layout-xs)}.company-delete-confirm-form .form-submit{margin-right:var(--spacing-2-xs)}.page--oma-asiointi .main-content{margin-top:0}.page--oma-asiointi .main-content h2{margin-top:var(--spacing-m)}.hero--oma-asiointi{margin-bottom:var(--spacing-l)}.hero--oma-asiointi .container{padding-top:var(--spacing-layout-m)}.hero--oma-asiointi .hero__text-content{align-items:center;display:flex}.hero--oma-asiointi .hero__title{margin-left:0}@media(min-width: 576px){.hero--oma-asiointi .hero__title{margin-left:40px}}.hero--oma-asiointi .hel-icon{display:none}@media(min-width: 576px){.hero--oma-asiointi .hel-icon{--icon-size: 48px;display:block;flex-shrink:0}}#oma-asiointi__sent{background:var(--color-silver-light)}#oma-asiointi__sent .application-list__item{background:var(--color-white)}.oma-asiointi-block{background-color:var(--color-silver-light);padding-bottom:var(--spacing-l);padding-top:var(--spacing-l)}.oma-asiointi-block h2{margin-bottom:var(--spacing-s);margin-top:0}.oma-asiointi-block h3{font-size:var(--fontsize-heading-m);font-weight:500}.oma-asiointi-block .header{border-bottom:1px solid var(--color-silver-dark);display:flex;justify-content:space-between;padding-bottom:var(--spacing-xs)}.oma-asiointi-block .header .user,.oma-asiointi-block .header .link{font-weight:700}.oma-asiointi-block .header .link .hel-icon{vertical-align:text-top}.oma-asiointi-block--link{display:block;position:relative;text-decoration:none}.oma-asiointi-block--link::after{--icon-size: 1.5rem;background-color:#000;background-size:contain;content:"";display:inline-block;height:calc(var(--line-height) * 1em);height:var(--icon-size, calc(var(--line-height) * 1em));-webkit-mask-image:var(--hel-icon--arrow-right);mask-image:var(--hel-icon--arrow-right);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);-webkit-mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));vertical-align:bottom;width:calc(var(--line-height) * 1em);width:var(--icon-size, calc(var(--line-height) * 1em));transition:transform .2s linear;bottom:var(--spacing-m);content:"";display:block;flex-shrink:0;margin-left:-4px;margin-top:var(--spacing-2-xs);position:absolute;right:var(--spacing-m)}@media(prefers-reduced-motion){.oma-asiointi-block--link::after{transition:none}}@media(min-width: 576px){.oma-asiointi-block--link::after{--icon-size: 3rem;margin-left:-8px;margin-top:var(--spacing-s)}}.oma-asiointi-block--link:focus::after,.oma-asiointi-block--link:hover::after{transform:translateX(var(--spacing-2-xs))}@media(prefers-reduced-motion){.oma-asiointi-block--link:focus::after,.oma-asiointi-block--link:hover::after{transform:none}}.oma-asiointi-block .new-message{background-color:var(--color-alert);display:inline-block;font-weight:500;padding:var(--spacing-2-xs);text-transform:uppercase}.oma-asiointi-block .new-messages-length{background-color:var(--color-black-20);border-radius:50%;display:inline-block;font-size:var(--fontsize-heading-s);height:30px;line-height:30px;margin-left:var(--spacing-m);position:relative;text-align:center;width:30px}.oma-asiointi-block .new-messages-length.has-new-messages{background-color:var(--color-alert)}@media(min-width: 768px){.oma-asiointi-block .content{display:grid;grid-gap:var(--spacing-s);grid-template-columns:1fr 1fr}}.oma-asiointi-block .submission,.oma-asiointi-block .message{background-color:var(--color-white);margin-bottom:var(--spacing-s);margin-top:var(--spacing-s);padding:var(--spacing-m)}.oma-asiointi-block .submission .submission-title,.oma-asiointi-block .submission .message-title,.oma-asiointi-block .message .submission-title,.oma-asiointi-block .message .message-title{font-size:var(--fontsize-heading-s);font-weight:500;margin-bottom:var(--spacing-2-xs);margin-top:0;text-decoration:underline}.oma-asiointi-block .submission .message-title,.oma-asiointi-block .message .message-title{margin-top:var(--spacing-s)}.oma-asiointi-block .submission:hover .submission-title,.oma-asiointi-block .submission:hover .message-title,.oma-asiointi-block .message:hover .submission-title,.oma-asiointi-block .message:hover .message-title{text-decoration:none}.oma-asiointi-block .message{padding-right:var(--spacing-5-xl)}.oma-asiointi{margin-top:var(--spacing-l)}.oma-asiointi ul{padding:0}.oma-asiointi__list{padding-bottom:var(--spacing-l);padding-top:var(--spacing-l)}.oma-asiointi__list h2{margin-bottom:var(--spacing-m);margin-top:0}.oma-asiointi #oma-asiointi__sent{padding-top:var(--spacing-s)}.oma-asiointi .oma-asiointi-infoboxes-container .oma-asiointi-infoboxes{gap:var(--spacing-3-xl);margin:var(--spacing-2-xl) 0}@media(min-width: 768px){.oma-asiointi .oma-asiointi-infoboxes-container .oma-asiointi-infoboxes{display:flex}}.oma-asiointi .oma-asiointi-infoboxes-container .oma-asiointi-infobox{background-color:var(--color-info-light);flex:1;margin-bottom:var(--spacing-layout-2-xs);padding:var(--spacing-l)}@media(min-width: 768px){.oma-asiointi .oma-asiointi-infoboxes-container .oma-asiointi-infobox{margin-bottom:0}}.oma-asiointi .oma-asiointi-infoboxes-container .oma-asiointi-infobox:last-of-type{margin-bottom:0}.oma-asiointi .oma-asiointi-infoboxes-container .oma-asiointi-infobox--link{display:flex;margin-top:var(--spacing-layout-2-xs)}.oma-asiointi .oma-asiointi-infoboxes-container .oma-asiointi-infobox--link a{font-size:1.25rem}.oma-asiointi .oma-asiointi-infoboxes-container .oma-asiointi-infobox h3{margin-top:0}.asiointirooli-block{background-color:var(--color-black);color:var(--color-white);font-weight:500;margin-bottom:16px;padding:var(--spacing-2-xs)}.asiointirooli-block a{color:var(--color-white)}.asiointirooli-block .link--switch-role,.asiointirooli-block .link--stop-mandate{color:var(--color-white);margin-left:var(--spacing-layout-s)}@media(max-width: 768px){.asiointirooli-block .link--switch-role,.asiointirooli-block .link--stop-mandate{display:block;margin-left:0}}.asiointirooli-block .link--stop-mandate::before{--icon-size: 1.5rem;background-color:#000;background-size:contain;content:"";display:inline-block;height:calc(var(--line-height) * 1em);height:var(--icon-size, calc(var(--line-height) * 1em));-webkit-mask-image:var(--hel-icon--cross-circle-fill);mask-image:var(--hel-icon--cross-circle-fill);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);-webkit-mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));vertical-align:bottom;width:calc(var(--line-height) * 1em);width:var(--icon-size, calc(var(--line-height) * 1em));background-color:var(--color-white);content:"";display:inline-block;margin-right:10px;-webkit-mask-image:url('data:image/svg+xml, ');mask-image:url('data:image/svg+xml, ')}.asiointirooli-block .link--switch-role::before{--icon-size: 1.5rem;background-color:#000;background-size:contain;content:"";display:inline-block;height:calc(var(--line-height) * 1em);height:var(--icon-size, calc(var(--line-height) * 1em));-webkit-mask-image:var(--hel-icon--swap-user);mask-image:var(--hel-icon--swap-user);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);-webkit-mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));vertical-align:bottom;width:calc(var(--line-height) * 1em);width:var(--icon-size, calc(var(--line-height) * 1em));background-color:var(--color-white);content:"";display:inline-block;margin-right:10px;-webkit-mask-image:url('data:image/svg+xml, ');mask-image:url('data:image/svg+xml, ')}#grants-mandate-type .form-actions{display:flex;flex-direction:column;flex-wrap:wrap;justify-content:flex-start;width:100%}@media(min-width: 576px){#grants-mandate-type .form-actions{flex-direction:row;margin-left:calc(-1*var(--spacing-m));width:calc(100% + var(--spacing-m))}}#grants-mandate-type .form-actions .hds-card--applicant-role{margin-bottom:var(--spacing-l);position:relative;width:100%}@media(min-width: 576px){#grants-mandate-type .form-actions .hds-card--applicant-role{margin-left:var(--spacing-m);width:calc(50% - var(--spacing-m))}}@media(min-width: 992px){#grants-mandate-type .form-actions .hds-card--applicant-role{width:calc(33.3333333333% - var(--spacing-m))}}#grants-mandate-type .form-actions .hds-card--applicant-role .hds-card__body{align-content:space-between;height:100%}#grants-mandate-type .form-actions .hds-card--applicant-role .hds-card--mandate-card-content{display:grid;gap:var(--spacing-m);grid-gap:var(--spacing-m)} diff --git a/public/themes/custom/hdbt_subtheme/package-lock.json b/public/themes/custom/hdbt_subtheme/package-lock.json index 737369b2cb..416b9bcc7b 100644 --- a/public/themes/custom/hdbt_subtheme/package-lock.json +++ b/public/themes/custom/hdbt_subtheme/package-lock.json @@ -3310,9 +3310,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001669", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001669.tgz", - "integrity": "sha512-DlWzFDJqstqtIVx1zeSpIMLjunf5SmwOw0N2Ck/QSQdS8PLS4+9HrLaYei4w8BIAL7IB/UEDu889d8vhCTPA0w==", + "version": "1.0.30001683", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001683.tgz", + "integrity": "sha512-iqmNnThZ0n70mNwvxpEC2nBJ037ZHZUoBI5Gorh1Mw6IlEAZujEoU1tXA628iZfzm7R9FvFzxbfdgml82a3k8Q==", "funding": [ { "type": "opencollective", @@ -3326,7 +3326,8 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ] + ], + "license": "CC-BY-4.0" }, "node_modules/chalk": { "version": "2.4.2", diff --git a/public/themes/custom/hdbt_subtheme/src/scss/06_components/forms/webform/_form-elements.scss b/public/themes/custom/hdbt_subtheme/src/scss/06_components/forms/webform/_form-elements.scss index b90b09b3b0..0a4cf75121 100644 --- a/public/themes/custom/hdbt_subtheme/src/scss/06_components/forms/webform/_form-elements.scss +++ b/public/themes/custom/hdbt_subtheme/src/scss/06_components/forms/webform/_form-elements.scss @@ -470,6 +470,10 @@ input[type='radio'] + label.form-required::after { } } +.club-section__participants label { + text-wrap: balance; +} + .hel-icon--size { &-xs { --icon-size: var(--spacing-layout-2-xs); From 2ad4bd4a8457592fb7069f899c085a08d1d74f1b Mon Sep 17 00:00:00 2001 From: Janne Suominen Date: Wed, 27 Nov 2024 07:40:00 +0200 Subject: [PATCH 58/74] fix: UHF-10711: Requested changes ID70 form (#1582) * UHF-10711: Requested changes. * UHF-10711: Form title + some translations. * UHF-10711: Form item description styling fixes * UHF-10711: Last fixes from Janne. * UHF-10711: REbuilt styles --------- Co-authored-by: Tero Elonen --- ...ebform.iakkaiden_kulttuuri_ja_liikunta.yml | 18 +-- ...ebform.iakkaiden_kulttuuri_ja_liikunta.yml | 28 ++-- ...ebform.iakkaiden_kulttuuri_ja_liikunta.yml | 125 ++---------------- .../hdbt_subtheme/dist/css/styles.min.css | 2 +- .../forms/webform/_element-description.scss | 7 +- .../input-email/form-element--email.html.twig | 1 - .../form-element--number.html.twig | 1 - tools/http/http-client.env.json | 2 +- 8 files changed, 33 insertions(+), 151 deletions(-) diff --git a/conf/cmi/language/en/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml b/conf/cmi/language/en/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml index 5ba986ee96..863c6245d2 100644 --- a/conf/cmi/language/en/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml +++ b/conf/cmi/language/en/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml @@ -1,4 +1,4 @@ -title: 'KUVA: Culture grant for advancing cultural activities for the elderly' +title: 'KUVA: grant application for the promotion of physical activity and cultural activities for the elderly' elements: | 1_hakijan_tiedot: '#title': '1. Applicant details' @@ -65,7 +65,7 @@ elements: | '#help': '

Indicate the purpose for which the grant is applied for. If necessary, specify the different uses. Also tell us what is intended to be achieved with the grant and what goals are associated with the activities to be supported.

' '#counter_maximum_message': '%d/5000 characters remaining' other_grants_for_same_purpose: - '#title': 'Other grants applied for to be used for the same purpose' + '#title': 'Other grants received for the same purpose' info_muut_samaan_tarkoitukseen_myonnetty: '#markup': '

Indicate here only the grants received from somewhere other than the City of Helsinki in the current and two previous tax years.

An affirmative answer opens a further question
' olemme_saaneet_muita_avustuksia: @@ -130,11 +130,9 @@ elements: | '#counter_maximum_message': '%d/1000 characters remaining' 3_tarkemmat_tiedot: '#title': '3. Information in more detail' - markup: - '#markup': '

Grant decisions for 2024:

  • Sports Sub-committee: 11 April 2024 Section 10

  • Culture and Libraries Sub-committee: 16 April 2024 Section 15

' hankesuunnitelma_radios: '#title': 'Is the 2nd part of the grant awarded in 2024 now being applied for?' - '#help': '

Only answer “yes” to this question if your community already has an ongoing project funded by the same grant and you are applying for additional funding for it.

' + '#description': '

Grant decisions for 2024:

  • Sports Sub-committee: 11 April 2024 Section 10

  • Culture and Libraries Sub-committee: 16 April 2024 Section 15

' '#options': 1: 'Yes' 0: 'No' @@ -158,6 +156,7 @@ elements: | '#title': '3.1 Project plan' hankesuunnitelma_jatkohakemus: '#title': 'Is the grant to be applied for a renewal application for an ongoing project?' + '#description': '

Only answer “yes” to this question if your community already has an ongoing project funded by the same grant and you are applying for additional funding for it.

' '#options': 1: 'Yes' 0: 'No' @@ -198,8 +197,7 @@ elements: | '#title': 'Who is the project primarily aimed at?' '#counter_maximum_message': '%d/1250 characters remaining' hankkeen_kohderyhmat_erityisryhmat: - '#title': 'Does the project target a special group?' - '#help': '

For which special group? If not implemented, leave the field blank.

' + '#title': 'Does the project target a special group? For which special group? If not implemented, leave the field blank.' '#counter_maximum_message': '%d/1250 characters remaining' hankkeen_kohderyhmat_tavoitus: '#title': 'How will the target groups of the project be reached?' @@ -214,8 +212,7 @@ elements: | '#title': 'What kind of expertise do the project operators already have in working with the target group(s) in question?' '#counter_maximum_message': '%d/1250 characters remaining' hankkeen_kohderyhmat_postinrot: - '#title': 'In which postal code area(s) in Helsinki will the project be implemented?' - '#help': '

Please enter up to three (3) postal code areas in the field and separate them with a comma (,).

' + '#title': 'In which postal code area(s) in Helsinki will the project be implemented? Please enter up to three (3) postal code areas in the field and separate them with a comma (,).' hankkeen_kohderyhmat_miksi_alue: '#title': 'Why is/are that particular area(s) selected?' '#counter_maximum_message': '%d/1250 characters remaining' @@ -237,8 +234,7 @@ elements: | arviointi_toteuma: '#title': 'Has the project progressed according to plan? Please rate the project implementation so far on a scale of 1- 100% and justify your response.' '#counter_maximum_message': '%d/1250 characters remaining' - arviointi_muutokset_markup: - '#markup': '

Have there been significant changes in the project?

' + '#description': 'Have there been significant changes in the project?' arviointi_muutokset_talous: '#title': 'In terms of economy; please specify' '#counter_maximum_message': '%d/1250 characters remaining' diff --git a/conf/cmi/language/sv/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml b/conf/cmi/language/sv/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml index 9fa12188e0..7f1a275887 100644 --- a/conf/cmi/language/sv/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml +++ b/conf/cmi/language/sv/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml @@ -97,11 +97,11 @@ elements: | '#help': '

Ge en kort beskrivning, i vilket syfte har bidraget beviljats?

' '#counter_maximum_message': '%d/1000 tecken kvar' muut_samaan_tarkoitukseen_haetut_avustukset: - '#title': 'Övriga understöd som beviljats för samma ändamål' + '#title': 'Övriga understöd som ansökts för samma ändamål' info_muut_samaan_tarkoitukseen_haettu: - '#markup': '

Ange här endast de understöd som beviljats från annanstans än Helsingfors stad under det innevarande beskattningsåret eller de föregående två beskattningsåren.

Myöntävä vastaus avaa lisäkysymyksen
' + '#markup': '

Ange här endast de understöd som har ansökts från annanstans än Helsingfors stad, men beslut har ännu inte fattats.

Ett jakande svar öppnar ytterligare en fråga
' olemme_hakeneet_avustuksia_muualta_kuin_helsingin_kaupungilta: - '#title': 'Vi har fått andra understöd Lisää myönnetty avustus Custom composite Add received grant Lägg till understöd som beviljats' + '#title': 'Vi har ansökt om understöd från annanstans än Helsingfors Stad' '#options': 1: Ja 0: Nej @@ -130,11 +130,9 @@ elements: | '#counter_maximum_message': '%d/1000 tecken kvar' 3_tarkemmat_tiedot: '#title': '3. Mer detaljerad information' - markup: - '#markup': '

Beslut om understöd för 2024:

  • Idrottssektionen: 11.4.2024 §10

  • Kultur- och bibliotekssektionen: 16.4.2024 §15

' hankesuunnitelma_radios: '#title': 'Ansöker du nu om den andra delen av ett tvåårigt understöd som beviljades 2024?' - '#help': '

Svara bara ”ja” på den här frågan om din sammanslutning redan har ett pågående projekt som finansieras med samma understöd och du ansöker om fortsatt finansiering.

' + '#description': '

Beslut om understöd för 2024:

  • Idrottssektionen: 11.4.2024 §10

  • Kultur- och bibliotekssektionen: 16.4.2024 §15

' '#options': 1: Ja 0: Nej @@ -158,6 +156,7 @@ elements: | '#title': '3.1 Projektplan' hankesuunnitelma_jatkohakemus: '#title': 'Är understödet du ansöker om en förlängning av ett pågående projekt?' + '#description': '

Svara bara ”ja” på den här frågan om din sammanslutning redan har ett pågående projekt som finansieras med samma understöd och du ansöker om fortsatt finansiering.

' '#options': 1: Ja 0: Nej @@ -190,7 +189,7 @@ elements: | '#title': 'Bidrar projektet till att utveckla frivillig- /kamratverksamhet? På vilket sätt?' '#counter_maximum_message': '%d/1250 tecken kvar' haun_painopisteet_kulttuuri_kehitys: - '#title': 'Bidrar projektet till att utveckla frivillig- /kamratverksamhet? På vilket sätt?' + '#title': 'Bidrar projektet till att utveckla kompetensen hos konst- och kulturaktörer eller skapa nya arbetssätt/strukturer? På vilket sätt?' '#counter_maximum_message': '%d/1250 tecken kvar' hankkeen_kohderyhmat_section: '#title': '3.3 Projektets målgrupper' @@ -198,8 +197,7 @@ elements: | '#title': 'Vem är den huvudsakliga målgruppen för projektet?' '#counter_maximum_message': '%d/1250 tecken kvar' hankkeen_kohderyhmat_erityisryhmat: - '#title': 'Riktar sig projektet till någon särskild grupp?' - '#help': '

Till vilken särskild grupp? Om svaret är ”nej”, lämna tomt.

' + '#title': 'Riktar sig projektet till någon särskild grupp? Till vilken särskild grupp? Om svaret är ”nej”, lämna tomt.' '#counter_maximum_message': '%d/1250 tecken kvar' hankkeen_kohderyhmat_tavoitus: '#title': 'Hur ska ni nå ut med projektet till målgrupperna?' @@ -214,8 +212,7 @@ elements: | '#title': 'Vilken kompetens har aktörerna i projektet i förväg att arbeta med målgruppen/- grupperna?' '#counter_maximum_message': '%d/1250 tecken kvar' hankkeen_kohderyhmat_postinrot: - '#title': 'Inom vilket/vilka postnummerområden i Helsingfors kommer projektet att genomföras?' - '#help': '

Ange upp till tre (3) postnummerområden och separera dem med kommatecken (,).

' + '#title': 'Inom vilket/vilka postnummerområden i Helsingfors kommer projektet att genomföras? Ange upp till tre (3) postnummerområden och separera dem med kommatecken (,).' hankkeen_kohderyhmat_miksi_alue: '#title': 'Varför har ni valt just det/de områdena?' '#counter_maximum_message': '%d/1250 tecken kvar' @@ -228,7 +225,7 @@ elements: | '#title': 'Hur kommer ni att följa upp och utvärdera projektet?' '#counter_maximum_message': '%d/2500 tecken kvar' hankkeen_riskit_vakiinnuttaminen: - '#title': 'Är den planerade verksamheten för projektet avsedd att bli en permanent del av den grundläggande verksamheten hos den sökande/en annan aktör efter projektet?' + '#title': 'Är den planerade verksamheten för projektet avsedd att bli en permanent del av den grundläggande verksamheten hos den sökande/en annan aktör efter projektet? Om ja, beskriv i textrutan hur det här kommer att ske, lämna annars tomt.' '#counter_maximum_message': '%d/2500 tecken kvar' hankkeen_valiarviointi_section: '#title': '3.5 Mellanutvärderin g av tvååriga projekt' @@ -237,8 +234,7 @@ elements: | arviointi_toteuma: '#title': 'Har projektet framskridit enligt planen? Bedöm projektets resultat hittills på en skala 1–100 procent och motivera ditt svar.' '#counter_maximum_message': '%d/1250 tecken kvar' - arviointi_muutokset_markup: - '#markup': '

Har det skett några väsentliga förändringar i projektet?

' + '#description': 'Har det skett några väsentliga förändringar i projektet?' arviointi_muutokset_talous: '#title': 'Gällande ekonomin; vilka?' '#counter_maximum_message': '%d/1250 tecken kvar' @@ -264,7 +260,7 @@ elements: | '#title': '4.1 Inkomster' tulot: '#title': Inkomster - '#compensation__title': 'Ansökt projektstöd (€)' + '#compensation__title': 'Ansökt stöd (€)' '#plannedOtherCompensations__title': 'Övriga understöd (€)' '#sales__title': 'Övriga egna inkomster (€)' '#ownFunding__title': 'Egenfinansiering (€)' @@ -275,7 +271,7 @@ elements: | menot_section: '#title': '4.2 Utgifter' talous_menon_tyyppi: - '#title': utgifter + '#title': 'Typ av utgifter' '#help': '

Skriv ner vilken typ av utgift det gäller. Utgifter kan till exempel vara andra lokalhyror och personalkostnader.

' '#multiple__add_more_button_label': 'Lägg till en utgift' lisatiedot_ja_liitteet: diff --git a/conf/cmi/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml b/conf/cmi/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml index dd26699e6f..ce9649a71f 100644 --- a/conf/cmi/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml +++ b/conf/cmi/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml @@ -603,14 +603,12 @@ elements: |- tarkemmat_tiedot_section: '#type': webform_section '#title': ' ' - markup: - '#type': webform_markup - '#markup': '

Vuoden 2024 avustuspäätökset:

  • Liikuntajaosto: 11.4.2024 §10

  • Kulttuuri- ja kirjastojaosto: 16.4.2024 §15

' hankesuunnitelma_radios: '#type': radios + '#required': true '#title': 'Haetaanko nyt vuonna 2024 myönnetyn kaksivuotisen avustuksen 2. osaa?' - '#help': 'Vastaa tähän kysymykseen "kyllä" vain siinä tapauksessa, jos yhteisölläsi on jo käynnissä oleva, samasta avustuksesta rahoitettu hanke ja haet sille jatkorahoitusta.' - '#description_display': before + '#description': '

Vuoden 2024 avustuspäätökset:

  • Liikuntajaosto: 11.4.2024 §10

  • Kulttuuri- ja kirjastojaosto: 16.4.2024 §15

' + '#description_display': after '#options': 1: Kyllä 0: Ei @@ -654,7 +652,8 @@ elements: |- hankesuunnitelma_jatkohakemus: '#type': radios '#title': 'Onko haettava avustus käynnissä olevan hankkeen jatkohakemus?' - '#description_display': before + '#description': '

Vastaa tähän kysymykseen "kyllä" vain siinä tapauksessa, jos yhteisölläsi on jo käynnissä oleva, samasta avustuksesta rahoitettu hanke ja haet sille jatkorahoitusta.

' + '#description_display': after '#options': 1: Kyllä 0: Ei @@ -667,10 +666,6 @@ elements: |- '#counter_type': character '#counter_maximum': 2500 '#counter_maximum_message': '%d/2500 merkkiä jäljellä' - '#states': - visible: - ':input[name="hankesuunnitelma_jatkohakemus"]': - value: '0' hankkeen_toimenpiteet_aikataulu: '#type': textarea '#title': 'Mitkä ovat hankkeen konkreettiset toimenpiteet ja niiden toteutusaikataulu?' @@ -679,36 +674,20 @@ elements: |- '#counter_type': character '#counter_maximum': 4000 '#counter_maximum_message': '%d/4000 merkkiä jäljellä' - '#states': - visible: - ':input[name="hankesuunnitelma_jatkohakemus"]': - value: '0' hankkeen_toimenpiteet_toteutus: '#type': fieldset '#title': 'Hankkeen konkreettiset toimenpiteet on tarkoitus toteuttaa välillä' '#attributes': class: - grants-fieldset - '#states': - visible: - ':input[name="hankesuunnitelma_jatkohakemus"]': - value: '0' hankkeen_toimenpiteet_alkupvm: '#type': date '#title': Alkupäivämäärä '#required': true - '#states': - visible: - ':input[name="hankesuunnitelma_jatkohakemus"]': - value: '0' hankkeen_toimenpiteet_loppupvm: '#type': date '#title': Loppupäivämäärä '#required': true - '#states': - visible: - ':input[name="hankesuunnitelma_jatkohakemus"]': - value: '0' hankkeen_keskeisimmat_kumppanit: '#type': textarea '#title': 'Nimeä hankkeen keskeisimmät yhteistyökumppanit ja heidän roolinsa hankkeessa' @@ -717,19 +696,9 @@ elements: |- '#counter_type': character '#counter_maximum': 2500 '#counter_maximum_message': '%d/2500 merkkiä jäljellä' - '#states': - visible: - ':input[name="hankesuunnitelma_jatkohakemus"]': - value: '0' haun_painopisteet_section: '#type': webform_section '#title': '3.2 Haun painopisteet' - '#states': - visible: - ':input[name="hankesuunnitelma_radios"]': - value: '0' - ':input[name="hankesuunnitelma_jatkohakemus"]': - value: '0' haun_painopisteet_ohje: '#type': webform_markup '#markup': 'Mihin seuraavista iäkkäiden liikkumisen ja kulttuuritoiminnan edistämisen avustuksen painopisteistä hanke vastaa?

Hankkeessa tulee toteuttaa yhtä tai useampaa painopistettä. HUOM! Valitse vain ne painopisteet, joita edistätte hankkeessa konkreettisella tavalla. Jos hanke ei toteuta jotakin painopistettä, jätä tekstikenttä tyhjäksi.

' @@ -740,39 +709,24 @@ elements: |- '#counter_type': character '#counter_maximum': 1250 '#counter_maximum_message': '%d/1250 merkkiä jäljellä' - '#states': - visible: - ':input[name="hankesuunnitelma_jatkohakemus"]': - value: '0' haun_painopisteet_digi_kehitys: '#type': textarea '#title': 'Kehitetäänkö hankkeessa digitaalisesti / etänä toteutettavia kulttuuritoimintoja tai liikkumiseen aktivoivaa toimintaa? Miten?' '#maxlength': 1250 - '#required': true '#counter_type': character '#counter_maximum': 1250 '#counter_maximum_message': '%d/1250 merkkiä jäljellä' - '#states': - visible: - ':input[name="hankesuunnitelma_jatkohakemus"]': - value: '0' haun_painopisteet_vertais_kehitys: '#type': textarea '#title': 'Kehitetäänkö hankkeessa vapaaehtois- / vertaistoimintaa? Miten?' '#maxlength': 1250 - '#required': true '#counter_type': character '#counter_maximum': 1250 '#counter_maximum_message': '%d/1250 merkkiä jäljellä' - '#states': - visible: - ':input[name="hankesuunnitelma_jatkohakemus"]': - value: '0' haun_painopisteet_kulttuuri_kehitys: '#type': textarea '#title': 'Kehitetäänkö hankkeessa taide- ja kulttuuritoimijoiden osaamista tai luodaanko uusia työtapoja / rakenteita? Miten?' '#maxlength': 1250 - '#required': true '#counter_type': character '#counter_maximum': 1250 '#counter_maximum_message': '%d/1250 merkkiä jäljellä' @@ -788,12 +742,6 @@ elements: |- hankkeen_kohderyhmat_section: '#type': webform_section '#title': '3.3 Hankkeen kohderyhmät' - '#states': - visible: - ':input[name="hankesuunnitelma_radios"]': - value: '0' - ':input[name="hankesuunnitelma_jatkohakemus"]': - value: '0' hankkeen_kohderyhmat_kenelle: '#type': textarea '#title': 'Kenelle hankkeen toiminta on pääasiallisesti suunnattu?' @@ -802,22 +750,14 @@ elements: |- '#counter_type': character '#counter_maximum': 1250 '#counter_maximum_message': '%d/1250 merkkiä jäljellä' - '#states': - visible: - ':input[name="hankesuunnitelma_jatkohakemus"]': - value: '0' hankkeen_kohderyhmat_erityisryhmat: '#type': textarea - '#title': 'Kohdennetaanko hankkeessa toimintaa jollekin erityisryhmälle?' - '#help': 'Mille erityisryhmälle? Jos ei toteuteta, niin jätetään tyhjäksi.' + '#title': 'Kohdennetaanko hankkeessa toimintaa jollekin erityisryhmälle? Mille erityisryhmälle? Jos ei toteuteta, niin jätetään tyhjäksi.' + '#description_display': after '#maxlength': 1250 '#counter_type': character '#counter_maximum': 1250 '#counter_maximum_message': '%d/1250 merkkiä jäljellä' - '#states': - visible: - ':input[name="hankesuunnitelma_jatkohakemus"]': - value: '0' hankkeen_kohderyhmat_tavoitus: '#type': textarea '#title': 'Kuinka hankkeen kohderyhmät aiotaan tavoittaa?' @@ -826,10 +766,6 @@ elements: |- '#counter_type': character '#counter_maximum': 1250 '#counter_maximum_message': '%d/1250 merkkiä jäljellä' - '#states': - visible: - ':input[name="hankesuunnitelma_jatkohakemus"]': - value: '0' hankkeen_kohderyhmat_konkretia: '#type': textarea '#title': 'Miten hankkeessa edistetään konkreettisin toimenpitein valitun kohderyhmän toimintakykyä ja hyvinvointia?' @@ -838,10 +774,6 @@ elements: |- '#counter_type': character '#counter_maximum': 1250 '#counter_maximum_message': '%d/1250 merkkiä jäljellä' - '#states': - visible: - ':input[name="hankesuunnitelma_jatkohakemus"]': - value: '0' hankkeen_kohderyhmat_osallisuus: '#type': textarea '#title': 'Millä tavoin hankkeessa edistetään osallisuutta? Mikä ikäihmisten rooli hankkeessa on?' @@ -850,10 +782,6 @@ elements: |- '#counter_type': character '#counter_maximum': 1250 '#counter_maximum_message': '%d/1250 merkkiä jäljellä' - '#states': - visible: - ':input[name="hankesuunnitelma_jatkohakemus"]': - value: '0' hankkeen_kohderyhmat_osaaminen: '#type': textarea '#title': 'Millaista osaamista kyseisen kohderyhmän/-ryhmien kanssa työskentelystä hanketoimijoilla on ennestään?' @@ -862,24 +790,16 @@ elements: |- '#counter_type': character '#counter_maximum': 1250 '#counter_maximum_message': '%d/1250 merkkiä jäljellä' - '#states': - visible: - ':input[name="hankesuunnitelma_jatkohakemus"]': - value: '0' hankkeen_kohderyhmat_postinrot: '#type': textfield - '#title': 'Millä postinumeroalueella tai -alueilla Helsingissä hanke toteutetaan?' - '#help': 'Kirjaa kenttään enintään kolme (3) postinumeroaluetta ja erottele ne toisistaan pilkulla (,)' + '#title': 'Millä postinumeroalueella tai -alueilla Helsingissä hanke toteutetaan? Kirjaa kenttään enintään kolme (3) postinumeroaluetta ja erottele ne toisistaan pilkulla (,)' + '#description_display': after '#required': true '#autocomplete': 'off' '#attributes': class: - webform--medium '#size': 32 - '#states': - visible: - ':input[name="hankesuunnitelma_jatkohakemus"]': - value: '0' hankkeen_kohderyhmat_miksi_alue: '#type': textarea '#title': 'Miksi juuri kyseinen alue / alueet on valittu?' @@ -888,19 +808,9 @@ elements: |- '#counter_type': character '#counter_maximum': 1250 '#counter_maximum_message': '%d/1250 merkkiä jäljellä' - '#states': - visible: - ':input[name="hankesuunnitelma_jatkohakemus"]': - value: '0' hankkeen_riskit_section: '#type': webform_section '#title': '3.4 Riskit & analyysi' - '#states': - visible: - ':input[name="hankesuunnitelma_radios"]': - value: '0' - ':input[name="hankesuunnitelma_jatkohakemus"]': - value: '0' hankkeen_riskit_keskeisimmat: '#type': textarea '#title': 'Mitkä ovat hankkeen toteuttamisen näkökulmasta keskeisimmät riskit?' @@ -909,10 +819,6 @@ elements: |- '#counter_type': character '#counter_maximum': 2500 '#counter_maximum_message': '%d/2500 merkkiä jäljellä' - '#states': - visible: - ':input[name="hankesuunnitelma_jatkohakemus"]': - value: '0' hankkeen_riskit_seuranta: '#type': textarea '#title': 'Miten hankkeessa aiotaan toteuttaa seurantaa ja arviointia?' @@ -921,10 +827,6 @@ elements: |- '#counter_type': character '#counter_maximum': 2500 '#counter_maximum_message': '%d/2500 merkkiä jäljellä' - '#states': - visible: - ':input[name="hankesuunnitelma_jatkohakemus"]': - value: '0' hankkeen_riskit_vakiinnuttaminen: '#type': textarea '#title': 'Onko hankkeen suunniteltu toiminta aikomus vakiinnuttaa osaksi hakijan/jonkun muun toimijan perustoimintaa hankkeen jälkeen? Jos kyllä, niin kuvaa tekstikenttään kuinka vakiinnuttaminen aiotaan tehdä, muuten jätä tyhjäksi.' @@ -932,10 +834,6 @@ elements: |- '#counter_type': character '#counter_maximum': 2500 '#counter_maximum_message': '%d/2500 merkkiä jäljellä' - '#states': - visible: - ':input[name="hankesuunnitelma_jatkohakemus"]': - value: '0' hankkeen_valiarviointi_section: '#type': webform_section '#title': '3.5 2-vuotisten hankkeiden väliarviointi' @@ -949,6 +847,8 @@ elements: |- arviointi_toteuma: '#type': textarea '#title': 'Onko hanke edennyt suunnitelman mukaisesti? Arvioikaa hankkeen toteumaa tähän asti asteikolla 1-100% ja perustelkaa vastauksenne.' + '#description': 'Onko hankkeessa tapahtunut merkittäviä muutoksia?' + '#description_display': after '#maxlength': 1250 '#required': true '#counter_type': character @@ -958,9 +858,6 @@ elements: |- visible: ':input[name="hankesuunnitelma_radios"]': value: '1' - arviointi_muutokset_markup: - '#type': webform_markup - '#markup': 'Onko hankkeessa tapahtunut merkittäviä muutoksia?' arviointi_muutokset_talous: '#type': textarea '#title': 'Talouteen liittyen; mitä?' diff --git a/public/themes/custom/hdbt_subtheme/dist/css/styles.min.css b/public/themes/custom/hdbt_subtheme/dist/css/styles.min.css index bfeef6de51..501bf8a61c 100644 --- a/public/themes/custom/hdbt_subtheme/dist/css/styles.min.css +++ b/public/themes/custom/hdbt_subtheme/dist/css/styles.min.css @@ -1 +1 @@ -body{--webform-element-width--input-small: 184px;--webform-element-width--input-medium: 332px;--webform-element-width--input-large: 591px;--webform-element-width--fieldset: 714px}.hel-icon--size-xs,.hds-icon--size-xs{height:16px;width:16px}.hel-icon--size-s,.hds-icon--size-s{height:24px;width:24px}.hel-icon--size-m,.hds-icon--size-m{height:32px;width:32px}.hel-icon--size-l,.hds-icon--size-l{height:48px;width:48px}.hel-icon--size-xl,.hds-icon--size-xl{height:64px;width:64px}.hel-icon.hel-icon--pen-line{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,");mask-image:url("data:image/svg+xml;charset=utf-8,")}.hel-icon.hds-icon--company{background:var(--color-black);-webkit-mask-image:url("data:image/svg+xml;charset=utf-8, ");mask-image:url("data:image/svg+xml;charset=utf-8, ")}.hds-button--secondary:not(.eu-cookie-compliance-default-button):not(.eu-cookie-compliance-save-preferences-button){--background-color: transparent;--background-color-hover: var(--color-black-80);--background-color-focus: transparent;--background-color-hover-focus: var(--color-black-80);--background-color-disabled: transparent;--color: var(--color-black);--color-hover: var(--color-white);--color-focus: var(--color-black);--color-hover-focus: var(--color-black);--color-disabled: var(--color-black-40)}.hds-button--secondary:not(:disabled):not(.eu-cookie-compliance-default-button):not(.eu-cookie-compliance-save-preferences-button),.hds-button--primary:not(:disabled){border-color:transparent;border-color:var(--color-black, transparent)}.hds-button.hds-button--supplementary .hds-button__label{margin:0;padding:0 var(--spacing-2-xs)}.hds-button.hds-button--supplementary::after,.hds-button.hds-button--supplementary::before{display:none !important}.hds-button--supplementary:not(:disabled){--background-color-hover: rgba(0, 0, 0, 0.1);background:rgba(0,0,0,0);border-color:rgba(0,0,0,0)}.hds-button--supplementary:not(:disabled):hover{background-color:var(--background-color-hover)}.hds-button--alert{--background-color: rgb(255, 0, 0)}a.hds-button.webform-button--delete-draft:not(:disabled){text-decoration:none}a.hds-button.webform-button--delete-draft:not(:disabled) .hds-button__label_wrapper{display:inline}a.hds-button.webform-button--delete-draft:not(:disabled) .hds-button__label{text-decoration:underline}a.hds-button.webform-button--delete-draft:not(:disabled):hover .hds-button__label{text-decoration:none}.openid-connect-login-form input[type=submit].hds-button{width:220px}.hds-button__label_wrapper{align-items:center;display:flex}.hds-button__label_wrapper:not(.hds-button)>.hds-button__label{margin:0 var(--spacing-2-xs)}.hds-link{--link-visited-color: var(--color-black);--link-color: var(--color-black)}.hds-card{--background-color: var(--color-white);--border-color: var(--color-black-90);--color: var(--color-black-90);--border-width: 2px;--padding-horizontal: var(--spacing-l);--padding-vertical: var(--spacing-m);background-color:var(--background-color);color:var(--color);padding:var(--padding-vertical) var(--padding-horizontal)}.hds-card--border{border:var(--border-width) solid var(--border-color)}.hds-card__body{display:grid;grid-gap:var(--spacing-m);gap:var(--spacing-m);margin-bottom:var(--spacing-l)}.hds-card__body:last-child{margin-bottom:0}.hds-card__heading{font-size:var(--fontsize-heading-m);font-weight:bold;line-height:var(--lineheight-m)}.hds-card__text{font-size:var(--fontsize-body-m);line-height:var(--lineheight-l)}.hds-card--applicant-role{margin-bottom:var(--spacing-l);margin-right:0;max-width:400px;width:100%}.hds-card__heading-m{font-size:var(--fontsize-heading-m);font-weight:500;letter-spacing:-0.2px;line-height:32px;margin-top:0}.grants-profile--menuitem--login,.grants-profile--menuitem--logout{align-items:center;display:flex;flex-flow:column;font-size:var(--fontsize-body-s);height:var(--spacing-xl);margin-left:var(--spacing-2-xs);margin-right:var(--spacing-2-xs);position:relative;text-align:center;width:var(--spacing-xl)}.grants-profile--menuitem--login .hel-icon,.grants-profile--menuitem--logout .hel-icon{display:block;margin:auto}.grants-profile--menuitem--login-triggertext,.grants-profile--menuitem--logout-triggertext{clip:rect(1px, 1px, 1px, 1px);clip-path:inset(50%);display:block;max-height:1px;max-width:1px;opacity:0;overflow:hidden;position:absolute;white-space:nowrap}.block--grants-profile--menuitem{align-items:center;display:flex;grid-area:brand;z-index:2}.block--branding{flex-grow:10}.grants-frontpage-info-block{margin-bottom:var(--spacing-layout-xl)}.grants-profile--menuitem{height:var(--spacing-m);margin-left:var(--spacing-2-xs);margin-right:var(--spacing-2-xs);position:relative;width:var(--spacing-m)}@media(min-width: 768px){.grants-profile--menuitem{height:var(--spacing-2-xl);width:var(--spacing-2-xl)}}.grants-profile--menuitem a{text-decoration:none}.grants-profile--menuitem--notifications{background-color:var(--color-error);border:2px var(--color-white) solid;border-radius:50%;color:var(--color-white);font-size:var(--fontsize-body-s);font-weight:bold;height:var(--spacing-xs) 1.25;line-height:var(--spacing-layout-2-xs);position:absolute;right:-5px;text-align:center;top:-5px;width:var(--spacing-xs) 1.25;z-index:2}.grants-profile--menuitem--initials{border-radius:50%;font-weight:bold;height:var(--spacing-m);line-height:var(--spacing-m);text-align:center;vertical-align:middle;width:var(--spacing-m)}@media(min-width: 768px){.grants-profile--menuitem--initials{height:var(--spacing-2-xl);line-height:var(--spacing-2-xl);width:var(--spacing-2-xl)}}.grants-profile--menuitem--initials:hover,.grants-profile--menuitem--initials:active,.grants-profile--menuitem--initials:focus{text-decoration:underline}.grants-profile--menuitem--initials-colorscheme-2{background-color:var(--color-bus);color:var(--color-white)}.grants-profile--menuitem--initials-colorscheme-1{background-color:var(--color-engel);color:var(--color-black)}.grants-profile--menuitem--initials-colorscheme-0{background-color:var(--color-tram);color:var(--color-white)}.sidebar-important-links{margin-top:var(--spacing-2-xl)}.sidebar-important-links .sidebar-text .sidebar-text__text-content>p{padding:var(--spacing-s) var(--spacing-m)}.block--service-page-banner{background-color:var(--color-engel);margin-top:var(--spacing-layout-s);padding:var(--spacing-layout-s)}.block--service-page-banner h2{margin-top:0}.block--service-page-banner .hds-icon{margin-bottom:var(--spacing-layout-s)}.hds-button.service-page-sidebar-link{background-color:var(--hdbt-color-palette--secondary);padding:var(--spacing-xs)}.hds-button.service-page-sidebar-link:hover{color:var(--color-black)}.terms_block{padding-bottom:var(--spacing-4-xl)}#block-servicepageauthblock h2,#block-servicepageanonblock h2{--line-height: 1.3;font-size:1.25rem;font-weight:500;line-height:var(--line-height)}@media(min-width: 992px){#block-servicepageauthblock h2,#block-servicepageanonblock h2{--line-height: 1.1666666667;font-size:1.5rem;font-weight:500}}#block-servicepageauthblock .hds-button,#block-servicepageanonblock .hds-button{margin-top:var(--spacing-m)}.grants-service-page-block{background-color:var(--color-alert-light);margin-top:var(--spacing-m);padding:var(--spacing-m)}.grants-service-page-block h3{font-size:var(--fontsize-heading-s);margin-top:0}.grants-service-page-block .hel-icon{vertical-align:text-bottom}.grants-service-page-block--auth{background-color:var(--color-info-light)}.hel-icon.hel-icon--swap-user{-webkit-mask-image:url('data:image/svg+xml, ');mask-image:url('data:image/svg+xml, ')}.nav-toggle-dropdown--profile .profile__information{background-color:var(--color-silver-light)}.nav-toggle-dropdown--profile .profile__full-name{font-weight:bold}.nav-toggle-dropdown--profile .grants-profile--menuitem--mandate,.nav-toggle-dropdown--profile .grants-profile--menuitem--switch-role{--line-height: 1.5555555556;font-size:1.125rem;font-weight:400;line-height:var(--line-height);border-top:1px solid #ccc;border-bottom:1px solid #ccc;display:block;font-weight:normal;padding:16px;text-decoration:none;width:100%}@media(min-width: 992px){.nav-toggle-dropdown--profile .grants-profile--menuitem--mandate,.nav-toggle-dropdown--profile .grants-profile--menuitem--switch-role{border-bottom:none}}.nav-toggle-dropdown--profile .grants-profile--menuitem--mandate:hover,.nav-toggle-dropdown--profile .grants-profile--menuitem--switch-role:hover{text-decoration:underline}.nav-toggle-dropdown--profile .grants-profile--menuitem--mandate:focus,.nav-toggle-dropdown--profile .grants-profile--menuitem--switch-role:focus{outline:3px solid #000;outline-offset:-3px}.application-timeout-message{display:none;padding-left:16px;padding-left:var(--spacing-s, 16px);position:fixed;right:0;top:50%;z-index:100}.application-timeout-message.slide-in{animation:slide-in-right .5s forwards ease;display:block}.application-timeout-message .close-application-timeout-message{cursor:pointer;font-size:1.25rem;position:absolute;right:1.25rem}@keyframes slide-in-right{from{right:-500px}to{right:1.25rem}}.view_application_search_search_api .main-content{margin-top:0}.view_application_search_search_api .search-result-amount--wrapper{align-items:center;display:flex}.view_application_search_search_api .search-result-amount--wrapper p{margin-top:0}.view_application_search_search_api select.search-result-amount{border:1px solid var(--color-black-50);margin-left:var(--spacing-l);margin-right:var(--spacing-2-xs)}.view_application_search_search_api .search-filter-button{background-color:var(--color-black);border-radius:180px;border:0;color:var(--color-white);display:inline-block;margin:0 var(--spacing-2-xs) var(--spacing-2-xs) 0;padding:var(--spacing-2-xs) var(--spacing-xs)}.view_application_search_search_api .search-filter-button:focus{--focus-outline-color: #000000;box-shadow:none;outline:3px solid var(--focus-outline-color);outline:var(--outline-width, 3px) solid var(--focus-outline-color);outline-offset:2px;outline-offset:var(--outline-gutter, 2px)}.view_application_search_search_api .search-filter-button span{vertical-align:middle}.view_application_search_search_api .search-filter-button span.hel-icon:hover{cursor:pointer}.view-application-search-search-api .main-content{margin-top:var(--spacing-layout-s)}.view-application-search-search-api .main-content .view-header{align-items:center;display:flex;margin-bottom:var(--spacing-layout-s)}.application_search--link{display:block;height:100%;padding-bottom:var(--spacing-m);position:relative;text-decoration:none}.application_search--link::after{--icon-size: 1.5rem;background-color:#000;background-size:contain;content:"";display:inline-block;height:calc(var(--line-height) * 1em);height:var(--icon-size, calc(var(--line-height) * 1em));-webkit-mask-image:var(--hel-icon--arrow-right);mask-image:var(--hel-icon--arrow-right);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);-webkit-mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));vertical-align:bottom;width:calc(var(--line-height) * 1em);width:var(--icon-size, calc(var(--line-height) * 1em));transition:transform .2s linear;bottom:var(--spacing-s);content:"";display:block;flex-shrink:0;left:var(--spacing-m);margin-left:-4px;margin-top:8px;position:absolute}@media(prefers-reduced-motion){.application_search--link::after{transition:none}}@media(min-width: 576px){.application_search--link::after{--icon-size: 3rem;margin-left:-8px;margin-top:16px}}.application_search--link:focus h3,.application_search--link:hover h3{text-decoration:none}.application_search--link:focus::after,.application_search--link:hover::after{transform:translateX(8px)}@media(prefers-reduced-motion){.application_search--link:focus::after,.application_search--link:hover::after{transform:none}}.application_search--filter-wrapper{background:var(--color-black-5)}.application_search--filter-wrapper h2{font-size:var(--fontsize-heading-m);margin-bottom:var(--spacing-layout-s);margin-top:var(--spacing-layout-s)}.application_search--filter-wrapper form{align-items:center;border-bottom:2px solid var(--color-black-20);display:flex;flex-flow:row wrap;gap:var(--spacing-s);justify-content:space-between;margin-bottom:var(--spacing-layout-s);padding-bottom:var(--spacing-layout-s)}.application_search--filter-wrapper form .form-item{margin-bottom:0;min-width:-moz-fit-content;min-width:fit-content;width:calc((100% - var(--spacing-s) - var(--spacing-s))/3)}.application_search--filter-wrapper form .form-item label{color:var(--label-color-default);font-size:var(--fontsize-body-m);font-weight:500;margin-bottom:var(--spacing-3-xs)}.application_search--filter-wrapper form .form-item .grant-applications--select-wrapper{min-width:100%;width:100%}.application_search--filter-wrapper form .hds-text-input:first-child{max-width:none;width:100%}.application_search--filter-wrapper form .hds-text-input:first-child input{width:100%}.application_search--filter-wrapper form .form-actions{align-items:center;display:flex;gap:16px;order:6;padding-top:var(--spacing-m);width:100%}@media(min-width: 768px){.application_search--filter-wrapper form .form-actions{width:17%}}.application_search--filter-wrapper form .form-actions input{min-width:250px;width:100%}.application_search--filter-wrapper form .form-item-items-per-page{display:none}.application_search--filter-wrapper form .form-item-kohderyhma{order:1}.application_search--filter-wrapper form .form-item-avustuslaji{order:2}.application_search--filter-wrapper form .form-item-hakija{order:3}.application_search--filter-wrapper form .form-item-search{max-width:100%;order:4;width:50%}.application_search--filter-wrapper form .form-item-application-open{page-break-before:left;-moz-column-break-before:left;break-before:left;display:block;margin-top:var(--spacing-m);order:5;width:30%}.application_search--filter-wrapper form [data-drupal-selector=edit-reset]{background-color:rgba(0,0,0,0);border:0;color:var(--color-black)}.application_search--filter-wrapper .hds-koros svg pattern{color:var(--color-black-5)}.application_search--filter-wrapper .hero .hero__container{padding-bottom:var(--spacing-m)}.application_search--filters{padding-bottom:var(--spacing-layout-m);padding-top:0}.application_search--rows{display:flex;flex-direction:column;flex-wrap:wrap;justify-content:flex-start;width:100%}@media(min-width: 576px){.application_search--rows{flex-direction:row;margin-left:calc(-1*var(--spacing-m));width:calc(100% + var(--spacing-m))}}.application_search--row{box-shadow:1px 2px 4px 0 rgba(0,0,0,.5);margin-bottom:var(--spacing-l);position:relative;width:100%}@media(min-width: 576px){.application_search--row{margin-left:var(--spacing-m);width:calc(50% - var(--spacing-m))}}@media(min-width: 992px){.application_search--row{width:calc(33.3333333333% - var(--spacing-m))}}.application_search--row h3{font-size:var(--fontsize-heading-m);margin-top:var(--spacing-xs)}.application_search--row .views-field-search-api-excerpt{height:auto;overflow:auto;word-break:normal}.application_search--row .views-field{padding:var(--spacing-xs) var(--spacing-m)}.application_search--row .views-field-field-target-group{padding:0}.application_search--row .views-field-field-avustuslaji{padding:var(--spacing-xs) var(--spacing-m) var(--spacing-layout-m) var(--spacing-m)}.application_search--row .views-field-field-avustuslaji .tag_avustuslaji{background:var(--color-black);border-radius:var(--spacing-m);color:var(--color-white);display:inline-block;margin-bottom:var(--spacing-2-xs);padding:var(--spacing-3-xs) var(--spacing-xs)}.application_search--row .views-field-field-application-period .field-content{align-items:center;display:flex;gap:var(--spacing-s);position:relative}.application_search--row .views-field-field-application-period .field-content span{display:block}.application_search--row .tag_target_group{background:var(--color-black-20);color:var(--color-black);font-size:var(--fontsize-body-s);font-weight:bold;padding:var(--spacing-m);text-align:center;text-transform:uppercase;width:100%}.application_search--row .tag_target_group_12{background:var(--color-brick-medium-light)}.application_search--row .tag_target_group_20{background:var(--color-copper)}.application_search--row .tag_target_group_21{background:var(--color-metro-medium-light)}.application_search--row .tag_target_group_22{background:var(--color-suomenlinna-medium-light)}.application_search--row .tag_target_group_23{background:var(--color-engel)}.application_search--row .tag_target_group_24{background:var(--color-bus-medium-light)}.application_search--row .tag_target_group_25{background:var(--color-coat-of-arms-medium-light)}.application_search--row .tag_target_group_26{background:var(--color-gold-medium-light)}.application_search--row .tag_target_group_27{background:var(--color-tram-medium-light)}.application_search--row .tag_target_group_28{background:var(--color-summer-light)}.application_search--row .tag_target_group_29{background:var(--color-fog)}.application_search--row .tag_target_group_30{background:var(--color-copper-light)}.application_search--row .tag_target_group_31{background:var(--color-gold)}.view-ukk .view-filters{display:none}.view-ukk .ukk_categories{display:block;margin:var(--spacing-xl) 0;padding:0}.view-ukk .ukk_categories li{display:inline-block;list-style:none;margin:var(--spacing-m) var(--spacing-s) 0 0;padding:0}.view-ukk .hero .hero__text-content{max-width:100%}.view-ukk #edit-field-category-target-id{display:flex}.view-ukk #edit-field-category-target-id .hds-radio-button:first-of-type{margin-top:var(--spacing-2-xs)}.view-ukk #edit-field-category-target-id .hds-radio-button .hds-radio-button__input:checked+.hds-radio-button__label{background:var(--color-black);border-radius:var(--spacing-m);color:var(--color-white);padding:var(--spacing-2-xs) var(--spacing-s)}.view-ukk #edit-field-category-target-id .hds-radio-button__label{padding:var(--spacing-2-xs) var(--spacing-s)}.view-ukk #edit-field-category-target-id .hds-radio-button__label::before,.view-ukk #edit-field-category-target-id .hds-radio-button__label::after{display:none}.view-ukk .views-exposed-form fieldset{margin-bottom:0}.view-ukk .views-exposed-form .form-submit{margin-bottom:var(--spacing-l)}.view-ukk .category{background:var(--color-black);border-radius:var(--spacing-m);color:var(--color-white);display:inline-block;padding:var(--spacing-2-xs) var(--spacing-s);text-decoration:none}.view-ukk .category-unselected{background:var(--color-black-20);color:var(--color-black)}.page--select-applicant-role{background-color:var(--color-black-5)}.page--select-applicant-role body{background-color:var(--color-black-5)}.page--select-applicant-role .layout-main-wrapper{background-color:var(--color-black-5)}.page--select-applicant-role .main-content{margin-top:var(--spacing-l)}.page--select-applicant-role h1{margin-top:var(--spacing-l)}.page--select-applicant-role p{margin-bottom:var(--spacing-m)}.node--type-service .errand-service__channels .service-channel__links a[href^="https://avustukset.hel.fi"]{display:none}.node--type-service .service-channel__info p:first-of-type{margin-top:0}.node--type-service .service-channel--mail{display:none}#block-servicepageauthblock-2,#block-servicepageanonblock-2,#block-grantspreviewlink-2{display:none}@media(max-width: 767.9px){#block-servicepageauthblock-2,#block-servicepageanonblock-2,#block-grantspreviewlink-2{display:block;margin:var(--spacing-s)}}@media(max-width: 991.9px){#block-servicepageauthblock-2,#block-servicepageanonblock-2,#block-grantspreviewlink-2{display:block;margin:var(--spacing-l)}}#block-servicepageauthblock-2>.grants-service-page-block>*,#block-servicepageanonblock-2>.grants-service-page-block>*,#block-grantspreviewlink-2>.grants-service-page-block>*{margin:var(--spacing-2-xs) 0 var(--spacing-2-xs) var(--spacing-2-xs)}@media(max-width: 991.9px){#block-servicepageauthblock-2 .node--type-service a.hds-button[href*=uusi-hakemus],#block-servicepageanonblock-2 .node--type-service a.hds-button[href*=uusi-hakemus],#block-grantspreviewlink-2 .node--type-service a.hds-button[href*=uusi-hakemus]{display:none}}.user-login__text-container{background:var(--color-white);max-width:500px;padding:var(--spacing-m)}.user-login__text-container p:first-of-type{margin-top:0}.tabs{--tablist-border-color: var(--color-black-20);--tablist-border-size: 1px;--tab-color: var(--color-black);--tab-font-size: var(--fontsize-body-m);--tab-height: 48px;--tab-min-width: 148px;--tab-spacing: var(--spacing-s);--tab-active-border-size: 5px;--tab-active-border-color: var(--color-black);--tab-focus-outline-size: 2px;--tab-focus-outline-color: var(--color-coat-of-arms);display:flex;flex-flow:row wrap}.tabs--tablist{box-sizing:border-box;flex-grow:1;margin-bottom:-1px;overflow-x:hidden;position:relative;width:100%}.tabs--content-wrapper{width:100%}.tabs--content-wrapper .container{padding-top:1px}.tabs [role=tablist]{box-sizing:border-box;list-style:none;margin:0;padding:var(--tab-focus-outline-size) 0;white-space:nowrap}.tabs [role=tab]{background:rgba(0,0,0,0);border:0;cursor:pointer;display:inline-block;margin:0;outline:none;padding:0}.tabs [role=tab] span{align-items:center;box-sizing:border-box;color:var(--tab-color);display:flex;font-size:var(--tab-font-size);height:var(--tab-height);justify-content:center;margin:0;min-width:var(--tab-min-width);padding:0 var(--tab-spacing);pointer-events:none;position:relative}.tabs [role=tab] span::before{background:var(--tablist-border-color);bottom:0;content:"";height:var(--tablist-border-size);position:absolute;width:100%;z-index:100}.tabs [role=tab] span:hover::before,.tabs [role=tab] span:focus::before,.tabs [role=tab][aria-selected=true] span::before{background-color:var(--tab-active-border-color);bottom:0;content:"";height:var(--tab-active-border-size);position:absolute;width:100%;z-index:100}.tabs [role=tabpanel].is-hidden{display:none}.node--form-page .list-of-links{margin-left:0;margin-top:0;width:100%}@media(min-width: 768px){.node--form-page .list-of-links{margin-top:0}}.node--form-page .list-of-links>.container{padding-top:0}.node--form-page .list-of-links .list-of-links__title{border-top:2px solid var(--color-black-20);margin:0 0 var(--spacing-layout-xl)}@media(min-width: 576px){.node--form-page .list-of-links .list-of-links__container{width:calc(100% - var(--spacing-layout-xl))}}@media(min-width: 768px){.node--form-page .list-of-links .list-of-links__container{width:100%}}.node--form-page .list-of-links .list-of-links__content{height:auto;margin-top:0}@media(min-width: 768px){.node--form-page .list-of-links .list-of-links__content{display:grid;grid-template-columns:auto auto auto;margin:0 var(--spacing-m) 0 0}}.node--form-page .list-of-links .list-of-links__item{align-self:stretch;border-left:4px solid var(--color-copper);margin-right:-4px;padding-left:var(--spacing-m);padding-right:var(--spacing-m)}.list-of-links--without-image .list-of-links__item .list-of-links__item__desc{color:var(--color-black-90);font-size:var(--fontsize-body-m)}.list-of-links--without-image .list-of-links__item .list-of-links__item__title{font-size:var(--fontsize-heading-m)}.js-form-type-webform-custom-composite{--border-width: 2px;--outline-width: 3px;--input-height: 56px;--textarea-height: 149px;--icon-size: var(--spacing-m);--helper-color-default: var(--color-black-60);--helper-color-invalid: var(--color-error);--icon-color-invalid: var(--color-error);--input-background-default: var(--color-white);--input-background-disabled: var(--color-black-10);--input-border-color-default: var(--color-black-50);--input-border-color-hover: var(--color-black-90);--input-border-color-focus: var(--color-black-90);--input-border-color-invalid: var(--color-error);--input-border-color-disabled: var(--color-black-10);--input-color-default: var(--color-black-90);--input-color-disabled: var(--color-black-40);--label-color-default: var(--color-black-90);--label-color-invalid: var(--color-black-90);--placeholder-color: var(--color-black-60);--focus-outline-color: var(--color-coat-of-arms)}.js-form-type-webform-custom-composite a.tabledrag-handle .handle{height:24px;width:24px}.js-form-type-webform-custom-composite input.form-number{background-color:var(--input-background-default);border:var(--border-width) solid var(--input-border-color-default);box-sizing:border-box;color:var(--input-color-default);font-size:1.125em;height:var(--input-height);line-height:normal;padding:0 var(--spacing-s);width:100%}.js-form-type-webform-custom-composite table{border-collapse:collapse;border-spacing:0;margin-bottom:var(--spacing-m)}.js-form-type-webform-custom-composite table td{border-bottom:2px var(--color-black-20) solid;border-top:2px var(--color-black-20) solid;padding-left:var(--spacing-m);padding-top:var(--spacing-m)}@media(max-width: 768px){.js-form-type-webform-custom-composite table td{border:2px var(--color-black-20) solid}}.js-form-type-webform-custom-composite table td.webform-multiple-table--operations{border-bottom:2px var(--color-black-20) solid;border-top:2px var(--color-black-20) solid;padding-left:var(--spacing-m);padding-top:var(--spacing-m)}@media(max-width: 768px){.js-form-type-webform-custom-composite table td.webform-multiple-table--operations{background:var(--color-white);border:2px var(--color-black-20) solid;padding:10px 5px 5px}}.js-form-type-webform-custom-composite table td:first-child{border-left:2px var(--color-black-20) solid}.js-form-type-webform-custom-composite table td:last-child{border-right:2px var(--color-black-20) solid;padding:var(--spacing-s)}@media(min-width: 768px){.js-form-type-webform-custom-composite table td:last-child{min-width:400px;padding:var(--spacing-s) var(--spacing-m)}}div.ui-widget.ui-datepicker{padding:var(--spacing-2-xs)}div.ui-widget.ui-datepicker .ui-datepicker-header span.ui-icon{margin-left:-8px;margin-top:-8px;-webkit-mask-image:none;mask-image:none;transform:none}div.ui-widget.ui-datepicker .ui-datepicker-calendar{border:0;display:table;margin:0;max-width:100%}div.ui-widget.ui-datepicker .ui-datepicker-calendar th,div.ui-widget.ui-datepicker .ui-datepicker-calendar td{min-width:auto}details.accordion{--background-color: var(--color-white);--border-color: var(--color-black-60);--padding-horizontal: var(--spacing-m);--padding-vertical: var(--spacing-m);--header-font-color: var(--color-black-90);--header-font-size: var(--fontsize-heading-m);--header-line-height: var(--lineheight-m);--button-size: 28px;--header-focus-outline-color: var(--color-coat-of-arms);--content-font-color: var(--color-black-90);--content-font-size: var(--fontsize-body-m);--content-line-height: var(--lineheight-l);border-bottom:1px solid var(--border-color)}details.accordion .accordion_content{padding-bottom:var(--padding-vertical)}details.accordion[open] .accordion_heading_container span.hel-icon{transform:rotate(180deg)}.accordion_header{align-items:center;color:var(--header-font-color);display:flex;font-size:var(--header-font-size);font-weight:700;justify-content:space-between;line-height:var(--header-line-height);list-style:none;padding-bottom:var(--padding-vertical);padding-top:var(--padding-vertical);position:relative}.accordion_heading_container{align-items:center;box-sizing:border-box;cursor:pointer;display:grid;grid-template-columns:auto calc(var(--button-size));width:100%}.accordion_heading_container span.hel-icon{height:var(--button-size) !important;width:var(--button-size) !important}.accordion_heading_container span.hel-icon{border:2px solid rgba(0,0,0,0);box-sizing:border-box;margin:auto}.webform-element-description{--helper-color-default: var(--color-black-60);color:var(--helper-color-default);display:block;font-size:var(--fontsize-body-m);line-height:var(--lineheight-l);margin-top:var(--spacing-s)}.webform-element-help{background:var(--color-white);border:2px solid rgba(0,0,0,0);color:var(--hdbt-color-black);height:var(--spacing-layout-xs);margin-right:4px;padding:0;position:absolute;right:0;top:-3px;width:var(--spacing-layout-xs);z-index:10}div[data-tippy-root]{width:350px}.tippy-box{background-color:var(--color-black-5);border-left:var(--spacing-xs) var(--color-coat-of-arms) solid;border-radius:0;color:var(--hdbt-color-black);padding:var(--spacing-s)}.tippy-box .webform-element-help--content{white-space:normal}.tippy-box .webform-element-help--content a:link,.tippy-box .webform-element-help--content a:visited,.tippy-box .webform-element-help--content a:active,.tippy-box .webform-element-help--content a:hover{color:var(--hdbt-color-black)}.tippy-arrow{color:var(--color-black-5)}.webform-element-help--wrapper-short{max-width:-moz-fit-content;max-width:fit-content}.webform-element-help-container--title{--border-width: 2px;--outline-width: 3px;--input-height: 56px;--textarea-height: 149px;--icon-size: var(--spacing-m)}fieldset.grants-fieldset{padding:var(--spacing-s)}@media(min-width: 768px){fieldset.grants-fieldset{min-width:400px;padding:var(--spacing-s) var(--spacing-m)}}fieldset.grants-fieldset .fieldset-wrapper{align-items:flex-end;display:flex;flex-wrap:wrap;gap:0 var(--spacing-layout-2-xs)}fieldset.grants-fieldset .fieldset-wrapper .form-item--error-message{grid-column:1}fieldset.grants-fieldset-short{max-width:var(--webform-element-width--input-large)}fieldset.grants-fieldset-medium{max-width:var(--webform-element-width--fieldset)}fieldset.grants-fieldset-medium .fieldset-wrapper{justify-content:center}fieldset.premises-composite--wrapper.fieldgroup,fieldset.rented-premise-composite--wrapper.fieldgroup,.community_officials_wrapper fieldset.fieldgroup,fieldset.grants-budget-other-cost--wrapper.fieldgroup,fieldset.grants-budget-other-income--wrapper.fieldgroup,fieldset.place-of-operation-composite--wrapper.fieldgroup,fieldset.rent-income-composite--wrapper.fieldgroup,fieldset.rent-cost-composite--wrapper.fieldgroup,fieldset.club-section-composite--wrapper.fieldgroup,fieldset.members-composite--wrapper.fieldgroup,fieldset.orienteering-map-composite--wrapper,.form-item-muu-liite fieldset.grants-attachments--wrapper.fieldgroup{border-width:2px;margin-top:var(--spacing-layout-2-xs);max-width:100%;padding:var(--spacing-s);width:100%}@media(min-width: 768px){fieldset.premises-composite--wrapper.fieldgroup,fieldset.rented-premise-composite--wrapper.fieldgroup,.community_officials_wrapper fieldset.fieldgroup,fieldset.grants-budget-other-cost--wrapper.fieldgroup,fieldset.grants-budget-other-income--wrapper.fieldgroup,fieldset.place-of-operation-composite--wrapper.fieldgroup,fieldset.rent-income-composite--wrapper.fieldgroup,fieldset.rent-cost-composite--wrapper.fieldgroup,fieldset.club-section-composite--wrapper.fieldgroup,fieldset.members-composite--wrapper.fieldgroup,fieldset.orienteering-map-composite--wrapper,.form-item-muu-liite fieldset.grants-attachments--wrapper.fieldgroup{min-width:400px;padding:var(--spacing-s) var(--spacing-m)}}fieldset.premises-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.rented-premise-composite--wrapper.fieldgroup legend>span.visually-hidden,.community_officials_wrapper fieldset.fieldgroup legend>span.visually-hidden,fieldset.grants-budget-other-cost--wrapper.fieldgroup legend>span.visually-hidden,fieldset.grants-budget-other-income--wrapper.fieldgroup legend>span.visually-hidden,fieldset.place-of-operation-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.rent-income-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.rent-cost-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.club-section-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.members-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.orienteering-map-composite--wrapper legend>span.visually-hidden,.form-item-muu-liite fieldset.grants-attachments--wrapper.fieldgroup legend>span.visually-hidden{background:#fff;clip-path:initial;clip:auto;clip:initial;height:auto;margin-left:calc(var(--spacing-2-xs)*-1);left:auto;overflow:visible;padding:0 var(--spacing-2-xs);top:-12px;width:-moz-max-content;width:max-content}fieldset.premises-composite--wrapper.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)],fieldset.rented-premise-composite--wrapper.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)],.community_officials_wrapper fieldset.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)],fieldset.grants-budget-other-cost--wrapper.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)],fieldset.grants-budget-other-income--wrapper.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)],fieldset.place-of-operation-composite--wrapper.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)],fieldset.rent-income-composite--wrapper.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)],fieldset.rent-cost-composite--wrapper.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)],fieldset.club-section-composite--wrapper.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)],fieldset.members-composite--wrapper.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)],fieldset.orienteering-map-composite--wrapper legend>span.visually-hidden[\:has\(button.webform-element-help\)],.form-item-muu-liite fieldset.grants-attachments--wrapper.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)]{padding-right:var(--spacing-xl)}fieldset.premises-composite--wrapper.fieldgroup legend>span.visually-hidden:has(button.webform-element-help),fieldset.rented-premise-composite--wrapper.fieldgroup legend>span.visually-hidden:has(button.webform-element-help),.community_officials_wrapper fieldset.fieldgroup legend>span.visually-hidden:has(button.webform-element-help),fieldset.grants-budget-other-cost--wrapper.fieldgroup legend>span.visually-hidden:has(button.webform-element-help),fieldset.grants-budget-other-income--wrapper.fieldgroup legend>span.visually-hidden:has(button.webform-element-help),fieldset.place-of-operation-composite--wrapper.fieldgroup legend>span.visually-hidden:has(button.webform-element-help),fieldset.rent-income-composite--wrapper.fieldgroup legend>span.visually-hidden:has(button.webform-element-help),fieldset.rent-cost-composite--wrapper.fieldgroup legend>span.visually-hidden:has(button.webform-element-help),fieldset.club-section-composite--wrapper.fieldgroup legend>span.visually-hidden:has(button.webform-element-help),fieldset.members-composite--wrapper.fieldgroup legend>span.visually-hidden:has(button.webform-element-help),fieldset.orienteering-map-composite--wrapper legend>span.visually-hidden:has(button.webform-element-help),.form-item-muu-liite fieldset.grants-attachments--wrapper.fieldgroup legend>span.visually-hidden:has(button.webform-element-help){padding-right:var(--spacing-xl)}@media(min-width: 768px){fieldset.premises-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.rented-premise-composite--wrapper.fieldgroup legend>span.visually-hidden,.community_officials_wrapper fieldset.fieldgroup legend>span.visually-hidden,fieldset.grants-budget-other-cost--wrapper.fieldgroup legend>span.visually-hidden,fieldset.grants-budget-other-income--wrapper.fieldgroup legend>span.visually-hidden,fieldset.place-of-operation-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.rent-income-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.rent-cost-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.club-section-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.members-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.orienteering-map-composite--wrapper legend>span.visually-hidden,.form-item-muu-liite fieldset.grants-attachments--wrapper.fieldgroup legend>span.visually-hidden{left:auto}}.form-item-muu-liite fieldset.grants-attachments--wrapper{margin-bottom:0}fieldset.webform-composite-hidden-title .fieldset-wrapper>.form-item:last-child{margin-bottom:var(--spacing-layout-xs)}.js-form-type-webform-table table{width:100%}.js-form-type-webform-table th{text-align:left}.js-form-type-webform-table td{vertical-align:middle}.js-form-type-webform-table td>div{height:auto;margin-bottom:0}.js-form-type-webform-table td>div label{margin:-1px}.js-form-type-webform-table .hds-text-input label{border:0;clip:rect(0, 0, 0, 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.form-item{margin-bottom:var(--spacing-layout-xs);position:relative}.form-item input[type=date],.form-item input[type=time]{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--input-background-default);border:var(--border-width) solid var(--input-border-color-default);box-sizing:border-box;color:var(--input-color-default);font-size:1.125em;height:var(--input-height);line-height:normal;padding:0 var(--spacing-s);width:100%;will-change:transform,box-shadow}.webform-section{padding-bottom:var(--spacing-layout-2-xs)}.webform-section table:first-of-type{margin-top:0}.form-type-webform-multiple .webform-multiple-table table{max-width:100%;width:100%}@media(min-width: 768px){.form-type-webform-multiple .webform-multiple-table table{width:auto}}.hds-text-input{max-width:-moz-fit-content;max-width:fit-content;width:100%}.webform-section-grid-wrapper{display:grid;grid-template-columns:1fr}@media(min-width: 768px){.webform-section-grid-wrapper{grid-row-gap:var(--spacing-xl);grid-template-columns:1fr 2fr}}.webform-section-grid-wrapper>dt.webform-section-title{color:var(--hdbt-color-black);display:block;flex-shrink:0;font-size:var(--fontsize-heading-s);font-weight:500;-webkit-hyphens:none;hyphens:none;line-height:1;margin-bottom:var(--spacing-3-xs);margin-top:0;padding-right:var(--spacing-2-xl);width:100%}.webform-section-grid-wrapper .webform-section-wrapper{margin-bottom:var(--spacing-layout-xs);padding-left:var(--spacing-2-xl)}@media(min-width: 768px){.webform-section-grid-wrapper .webform-section-wrapper{margin-bottom:0;padding-left:0}}fieldset input[type=button]{margin-top:var(--spacing-m)}.webform-section-wrapper>.description{margin-bottom:var(--spacing-layout-xs)}.grants__page-header{margin-bottom:var(--spacing-layout-l);font-size:2rem}@media(min-width: 768px){.grants__page-header{font-size:3rem}}.webform-section-flex-wrapper{display:flex;flex-flow:row wrap;width:100%;justify-content:left}@media(min-width: 768px){.webform-section-flex-wrapper{flex-flow:row nowrap}.webform-section-flex-wrapper h3+*>*:first-child>label:first-of-type,.webform-section-flex-wrapper h3+*>*:first-child>*:first-child>label:first-of-type{margin-top:var(--spacing-2-xs);padding-top:0}.webform-section-flex-wrapper h3+*>*:first-child>p{line-height:normal;line-height:initial;margin-top:var(--spacing-2-xs)}.webform-section-flex-wrapper h3+*>*:first-child>h4{line-height:normal;line-height:initial;margin-top:var(--spacing-m)}}.webform-section-flex-wrapper .webform-element-help-container--title{position:relative}.webform-section-flex-wrapper>h2.webform-section-title,.webform-section-flex-wrapper>h3.webform-section-title,.webform-section-flex-wrapper>h4.webform-section-title,.webform-section-flex-wrapper>dt.webform-section-title{color:var(--hdbt-color-black);display:block;flex-shrink:0;font-size:24px;font-weight:500;-webkit-hyphens:manual;hyphens:manual;margin-bottom:var(--spacing-3-xs);margin-top:0;padding-right:var(--spacing-2-xl);width:100%}@media(min-width: 768px){.webform-section-flex-wrapper>h2.webform-section-title,.webform-section-flex-wrapper>h3.webform-section-title,.webform-section-flex-wrapper>h4.webform-section-title,.webform-section-flex-wrapper>dt.webform-section-title{font-size:32px;max-width:350px;width:30%}}.webform-section-flex-wrapper h4{font-size:var(--fontsize-heading-m);line-height:38px}.webform-section-flex-wrapper>.webform-section-wrapper{--line-height: 1.5;font-size:var(--fontsize-body-m);width:100%}@media(min-width: 768px){.webform-section-flex-wrapper>.webform-section-wrapper{padding-left:var(--spacing-2-xl)}}.webform-section-flex-wrapper .form-required::after{content:"*";display:inline}.webform-section-flex-wrapper legend,.webform-section-flex-wrapper label{display:block;font-size:var(--fontsize-body-m);font-weight:500;margin-bottom:var(--spacing-2-xs);max-width:-moz-fit-content;max-width:fit-content;position:relative}.webform-section-flex-wrapper legend{padding:0 var(--spacing-2-xs);margin-left:calc(var(--spacing-2-xs)*-1);left:auto}.webform-section-flex-wrapper legend[\:has\(button.webform-element-help\)],.webform-section-flex-wrapper label[\:has\(button.webform-element-help\)]{padding-right:var(--spacing-xl)}.webform-section-flex-wrapper legend:has(button.webform-element-help),.webform-section-flex-wrapper label:has(button.webform-element-help){padding-right:var(--spacing-xl)}.webform-section-flex-wrapper fieldset legend>span[\:has\(button.webform-element-help\)]{padding-right:var(--spacing-xl)}.webform-section-flex-wrapper fieldset legend>span:has(button.webform-element-help){padding-right:var(--spacing-xl)}.webform-section-flex-wrapper fieldset legend>span.fieldset-legend[\:has\(button.webform-element-help\)],.webform-section-flex-wrapper fieldset.fieldgroup legend>span[\:has\(button.webform-element-help\)]:not(.visually-hidden.fieldset-legend){padding-right:var(--spacing-l)}.webform-section-flex-wrapper fieldset legend>span.fieldset-legend:has(button.webform-element-help),.webform-section-flex-wrapper fieldset.fieldgroup legend>span:has(button.webform-element-help):not(.visually-hidden.fieldset-legend){padding-right:var(--spacing-l)}.webform-section-flex-wrapper fieldset legend>span.fieldset-legend[\:has\(button.webform-element-help\)],.webform-section-flex-wrapper fieldset.fieldgroup legend span.fieldset-legend:not(.visually-hidden)[\:has\(button.webform-element-help\)]{padding-right:0}.webform-section-flex-wrapper fieldset legend>span.fieldset-legend:has(button.webform-element-help),.webform-section-flex-wrapper fieldset.fieldgroup legend span.fieldset-legend:not(.visually-hidden):has(button.webform-element-help){padding-right:0}.webform-section-flex-wrapper label.hds-radio-button__label{font-weight:normal}.webform-section-flex-wrapper .checkboxes--wrapper label{font-weight:normal}.webform-section-flex-wrapper .js-form-type-textarea .hds-text-input__input-wrapper{display:block}.webform-section-flex-wrapper .has-error,.webform-section-flex-wrapper .grant-applications--select-wrapper[\:has\(.has-error\)]{border-color:var(--color-error)}.webform-section-flex-wrapper .has-error,.webform-section-flex-wrapper .grant-applications--select-wrapper:has(.has-error){border-color:var(--color-error)}form .hds-text-input__input-wrapper,.hds-text-input__input-wrapper{flex-flow:row wrap}form .hds-text-input__input-wrapper .text-count-wrapper,.hds-text-input__input-wrapper .text-count-wrapper{flex-basis:100%}form .hds-text-input__input-wrapper input.webform--small,form .hds-text-input__input-wrapper textarea.webform--small,.hds-text-input__input-wrapper input.webform--small,.hds-text-input__input-wrapper textarea.webform--small{max-width:var(--webform-element-width--input-small);min-width:var(--webform-element-width--input-small);width:100%}form .hds-text-input__input-wrapper input.webform--medium,form .hds-text-input__input-wrapper textarea.webform--medium,.hds-text-input__input-wrapper input.webform--medium,.hds-text-input__input-wrapper textarea.webform--medium{max-width:var(--webform-element-width--input-medium);min-width:var(--webform-element-width--input-small);width:100%}form .hds-text-input__input-wrapper input.webform--large,form .hds-text-input__input-wrapper textarea.webform--large,.hds-text-input__input-wrapper input.webform--large,.hds-text-input__input-wrapper textarea.webform--large{max-width:var(--webform-element-width--input-large);min-width:var(--webform-element-width--input-small);width:100%}.webform--small div.grant-applications--select-wrapper{max-width:var(--webform-element-width--input-small);min-width:var(--webform-element-width--input-small);width:100%}.webform--medium div.grant-applications--select-wrapper{max-width:var(--webform-element-width--input-medium);min-width:var(--webform-element-width--input-small);width:100%}.webform--large div.grant-applications--select-wrapper{max-width:var(--webform-element-width--input-medium);min-width:var(--webform-element-width--input-small);width:100%}form .hds-checkbox{display:block}form .hds-checkbox label.hds-checkbox__label::after{content:""}fieldset.webform-composite-hidden-title{margin-bottom:var(--spacing-layout-2-xs);margin-top:0}.form-item-bank-account-account-number-select,.form-item-community-address-community-address-select{margin-bottom:0}.grants-profile-grants-profile table thead th h4{margin:0}.hakemus-form-page .main-content{margin-top:0}.hakemus-form-page h1{-webkit-hyphens:auto;hyphens:auto;word-break:break-word}.hakemus-form-errors ul li{list-style-type:none}.community_officials_wrapper .webform-readonly{margin:0}.community_officials_wrapper .hds-text-input__input-wrapper{margin:0}.community_officials_wrapper input[readonly=readonly]{height:1.25rem;margin:0;max-width:330px}.form-item--error-message{color:var(--color-error);margin-bottom:var(--spacing-layout-s);margin-top:var(--spacing-layout-2-xs)}fieldset .form-item--error-message,.community_officials_wrapper .form-item--error-message{margin-bottom:0}.form-item--error-message::before{--icon-size: 1.6rem;background-color:#000;background-size:contain;content:"";display:inline-block;height:calc(var(--line-height) * 1em);height:var(--icon-size, calc(var(--line-height) * 1em));-webkit-mask-image:var(--hel-icon--alert-circle-fill);mask-image:var(--hel-icon--alert-circle-fill);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);-webkit-mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));vertical-align:bottom;width:calc(var(--line-height) * 1em);width:var(--icon-size, calc(var(--line-height) * 1em));background-color:var(--color-error);content:" ";display:inline-block}input[type=radio]+label.form-required::after{content:""}.hds-radio-button:last-of-type,.hds-checkbox:last-of-type{margin-bottom:0}.hds-radio-button:last-of-type>label,.hds-checkbox:last-of-type>label{margin-bottom:0}@media(min-width: 992px){.place-of-operation-composite--wrapper.fieldgroup .hds-text-input,.club-section-composite--wrapper.fieldgroup .hds-text-input{max-width:100%}}.place-of-operation-composite--wrapper.fieldgroup .hds-radio-button .hds-radio-button__label,.club-section-composite--wrapper.fieldgroup .hds-radio-button .hds-radio-button__label{line-height:var(--lineheight-m) !important}@media(min-width: 992px){.place-of-operation-group__location,.place-of-operation-group__students,.place-of-operation-group__groups,.place-of-operation-group__personnel,.place-of-operation-group__rent,.place-of-operation-group__time{display:flex;justify-content:space-between}}@media(min-width: 992px){.place-of-operation-group__location--address,.place-of-operation-group__students--address,.place-of-operation-group__groups--address,.place-of-operation-group__personnel--address,.place-of-operation-group__rent--address,.place-of-operation-group__time--address{margin-top:0 !important}.place-of-operation-group__location--address,.place-of-operation-group__students--address,.place-of-operation-group__groups--address,.place-of-operation-group__personnel--address,.place-of-operation-group__rent--address,.place-of-operation-group__time--address{width:65%}}@media(min-width: 992px){.place-of-operation-group__location--post-code,.place-of-operation-group__students--post-code,.place-of-operation-group__groups--post-code,.place-of-operation-group__personnel--post-code,.place-of-operation-group__rent--post-code,.place-of-operation-group__time--post-code{margin-top:0 !important}.place-of-operation-group__location--post-code,.place-of-operation-group__students--post-code,.place-of-operation-group__groups--post-code,.place-of-operation-group__personnel--post-code,.place-of-operation-group__rent--post-code,.place-of-operation-group__time--post-code{width:30%}}@media(min-width: 992px){.place-of-operation-group__location--student-count,.place-of-operation-group__location--special-student-count,.place-of-operation-group__location--group-count,.place-of-operation-group__location--special-group-count,.place-of-operation-group__location--personnel-count,.place-of-operation-group__location--rent-amount,.place-of-operation-group__location--time-start,.place-of-operation-group__location--time-end,.place-of-operation-group__students--student-count,.place-of-operation-group__students--special-student-count,.place-of-operation-group__students--group-count,.place-of-operation-group__students--special-group-count,.place-of-operation-group__students--personnel-count,.place-of-operation-group__students--rent-amount,.place-of-operation-group__students--time-start,.place-of-operation-group__students--time-end,.place-of-operation-group__groups--student-count,.place-of-operation-group__groups--special-student-count,.place-of-operation-group__groups--group-count,.place-of-operation-group__groups--special-group-count,.place-of-operation-group__groups--personnel-count,.place-of-operation-group__groups--rent-amount,.place-of-operation-group__groups--time-start,.place-of-operation-group__groups--time-end,.place-of-operation-group__personnel--student-count,.place-of-operation-group__personnel--special-student-count,.place-of-operation-group__personnel--group-count,.place-of-operation-group__personnel--special-group-count,.place-of-operation-group__personnel--personnel-count,.place-of-operation-group__personnel--rent-amount,.place-of-operation-group__personnel--time-start,.place-of-operation-group__personnel--time-end,.place-of-operation-group__rent--student-count,.place-of-operation-group__rent--special-student-count,.place-of-operation-group__rent--group-count,.place-of-operation-group__rent--special-group-count,.place-of-operation-group__rent--personnel-count,.place-of-operation-group__rent--rent-amount,.place-of-operation-group__rent--time-start,.place-of-operation-group__rent--time-end,.place-of-operation-group__time--student-count,.place-of-operation-group__time--special-student-count,.place-of-operation-group__time--group-count,.place-of-operation-group__time--special-group-count,.place-of-operation-group__time--personnel-count,.place-of-operation-group__time--rent-amount,.place-of-operation-group__time--time-start,.place-of-operation-group__time--time-end{margin-top:0 !important}.place-of-operation-group__location--student-count,.place-of-operation-group__location--special-student-count,.place-of-operation-group__location--group-count,.place-of-operation-group__location--special-group-count,.place-of-operation-group__location--personnel-count,.place-of-operation-group__location--rent-amount,.place-of-operation-group__location--time-start,.place-of-operation-group__location--time-end,.place-of-operation-group__students--student-count,.place-of-operation-group__students--special-student-count,.place-of-operation-group__students--group-count,.place-of-operation-group__students--special-group-count,.place-of-operation-group__students--personnel-count,.place-of-operation-group__students--rent-amount,.place-of-operation-group__students--time-start,.place-of-operation-group__students--time-end,.place-of-operation-group__groups--student-count,.place-of-operation-group__groups--special-student-count,.place-of-operation-group__groups--group-count,.place-of-operation-group__groups--special-group-count,.place-of-operation-group__groups--personnel-count,.place-of-operation-group__groups--rent-amount,.place-of-operation-group__groups--time-start,.place-of-operation-group__groups--time-end,.place-of-operation-group__personnel--student-count,.place-of-operation-group__personnel--special-student-count,.place-of-operation-group__personnel--group-count,.place-of-operation-group__personnel--special-group-count,.place-of-operation-group__personnel--personnel-count,.place-of-operation-group__personnel--rent-amount,.place-of-operation-group__personnel--time-start,.place-of-operation-group__personnel--time-end,.place-of-operation-group__rent--student-count,.place-of-operation-group__rent--special-student-count,.place-of-operation-group__rent--group-count,.place-of-operation-group__rent--special-group-count,.place-of-operation-group__rent--personnel-count,.place-of-operation-group__rent--rent-amount,.place-of-operation-group__rent--time-start,.place-of-operation-group__rent--time-end,.place-of-operation-group__time--student-count,.place-of-operation-group__time--special-student-count,.place-of-operation-group__time--group-count,.place-of-operation-group__time--special-group-count,.place-of-operation-group__time--personnel-count,.place-of-operation-group__time--rent-amount,.place-of-operation-group__time--time-start,.place-of-operation-group__time--time-end{width:47.5%}}@media(min-width: 768px){.club-section__participants{display:flex;gap:var(--spacing-l);justify-content:space-between}}.club-section__participants input.form-text.hds-text-input__input{max-width:100%;width:100%}.club-section__totalhours input.form-text.hds-text-input__input{max-width:100%;width:100%}.club-section__participants label{text-wrap:balance}.hel-icon--size-xs{--icon-size: var(--spacing-layout-2-xs)}.hel-icon--size-s{--icon-size: var(--spacing-layout-xs)}.hel-icon--size-m{--icon-size: var(--spacing-layout-s)}.hel-icon--size-l{--icon-size: var(--spacing-layout-m)}.hel-icon--size-xl{--icon-size: var(--spacing-layout-l)}.hds-text-input__input-wrapper[focus-within][\:has\(input\[readonly\]\)]{margin-right:var(--spacing-2-xs);outline:2px var(--color-black) solid;outline-offset:2px}.hds-text-input__input-wrapper[focus-within]:has(input[readonly]){margin-right:var(--spacing-2-xs);outline:2px var(--color-black) solid;outline-offset:2px}.hds-text-input__input-wrapper[focus-within][\:has\(input\[readonly\]\)]{margin-right:var(--spacing-2-xs);outline:2px var(--color-black) solid;outline-offset:2px}.hds-text-input__input-wrapper:focus-within[\:has\(input\[readonly\]\)]{margin-right:var(--spacing-2-xs);outline:2px var(--color-black) solid;outline-offset:2px}.hds-text-input__input-wrapper:focus-within:has(input[readonly]){margin-right:var(--spacing-2-xs);outline:2px var(--color-black) solid;outline-offset:2px}.hds-text-input__input-wrapper[focus-within][\:has\(input\[readonly\]\)] input[readonly]{width:calc(100% - var(--spacing-2-xs))}.hds-text-input__input-wrapper[focus-within]:has(input[readonly]) input[readonly]{width:calc(100% - var(--spacing-2-xs))}.hds-text-input__input-wrapper[focus-within][\:has\(input\[readonly\]\)] input[readonly]{width:calc(100% - var(--spacing-2-xs))}.hds-text-input__input-wrapper:focus-within[\:has\(input\[readonly\]\)] input[readonly]{width:calc(100% - var(--spacing-2-xs))}.hds-text-input__input-wrapper:focus-within:has(input[readonly]) input[readonly]{width:calc(100% - var(--spacing-2-xs))}.form-item-application-number,.form-item-status,.form-item-applicant-type{display:none}.grants-handler__completion{background:var(--color-bus-light);padding:var(--spacing-layout-l) var(--spacing-layout-2-xl)}.grants-handler__completion h2{margin-top:var(--spacing-l)}.grants-handler__completion h3{font-size:1rem;font-weight:bold;margin-top:var(--spacing-m)}.grants-handler__completion__info-row{display:flex;flex-flow:row wrap;gap:var(--spacing-m);justify-content:flex-start;margin-bottom:var(--spacing-m)}.grants-handler__completion__button-row{display:flex;flex-flow:row wrap;gap:var(--spacing-m);justify-content:flex-start}.grants-handler__completion__longtext{margin:var(--spacing-l) 0}.hds-notification.notification-margin-bottom{margin-bottom:var(--spacing-layout-m)}.hds-notification__label{align-items:center}.hds-checkbox__input label{font-weight:normal}fieldset.grants-attachments--wrapper{margin-bottom:var(--spacing-layout-m)}fieldset.grants-attachments--wrapper legend{margin-bottom:var(--spacing-2-xs)}fieldset.grants-attachments--wrapper .form-item--error-message{width:100%}fieldset.grants-attachments--wrapper .js-form-type-managed-file{margin-bottom:0}.grants-applications-managed_file{position:relative}.grants-applications-managed_file label.hds-button--secondary:not(:disabled):not(.eu-cookie-compliance-default-button):not(.eu-cookie-compliance-save-preferences-button){left:0;position:relative}.grants-applications-managed_file label.hds-button--secondary:not(:disabled):not(.eu-cookie-compliance-default-button):not(.eu-cookie-compliance-save-preferences-button)[\:has\(input\:disabled\)]{background-color:transparent;background-color:var(--background-color-disabled, transparent);border-color:transparent;border-color:var(--border-color-disabled, transparent);color:var(--color-disabled);cursor:not-allowed}.grants-applications-managed_file label.hds-button--secondary:not(:disabled):not(.eu-cookie-compliance-default-button):not(.eu-cookie-compliance-save-preferences-button)[\:has\(input\:disabled\)]{background-color:transparent;background-color:var(--background-color-disabled, transparent);border-color:transparent;border-color:var(--border-color-disabled, transparent);color:var(--color-disabled);cursor:not-allowed}.grants-applications-managed_file label.hds-button--secondary:not(:disabled):not(.eu-cookie-compliance-default-button):not(.eu-cookie-compliance-save-preferences-button):has(input:disabled){background-color:transparent;background-color:var(--background-color-disabled, transparent);border-color:transparent;border-color:var(--border-color-disabled, transparent);color:var(--color-disabled);cursor:not-allowed}.grants-applications-managed_file label.hds-button--secondary:not(:disabled):not(.eu-cookie-compliance-default-button):not(.eu-cookie-compliance-save-preferences-button)[focus-within]{background:var(--color-black);border-color:var(--color-white);color:var(--color-white);outline:2px var(--color-black) solid}.grants-applications-managed_file label.hds-button--secondary:not(:disabled):not(.eu-cookie-compliance-default-button):not(.eu-cookie-compliance-save-preferences-button):focus-within{background:var(--color-black);border-color:var(--color-white);color:var(--color-white);outline:2px var(--color-black) solid}.grants-applications-managed_file input[type=file]{opacity:0;position:absolute}.form-managed-file{display:flex;flex-wrap:wrap;white-space:inherit}.form-managed-file>span{background-color:var(--color-info-light);border-bottom:2px dotted var(--color-coat-of-arms);display:inline-block;padding:var(--spacing-s) var(--spacing-2-xs)}.form-managed-file>.file-upload-js-error{flex-basis:100%}.grants-applications-managed_file label.hds-button{display:flex}.grants-attachments--wrapper .webform-readonly{display:none}.webform-multiple-table table{border-collapse:collapse;border:0px var(--color-white) solid;margin-bottom:var(--spacing-2-xs);max-width:-moz-fit-content;max-width:fit-content}.webform-multiple-table .webform-multiple-table--operations-two{min-width:60px}.webform-multiple-table tbody tr,.webform-multiple-table thead tr{align-items:center;justify-content:space-between;width:100%}.webform-multiple-table td,.webform-multiple-table th{max-width:100%;min-width:0;padding:0;width:100%}.webform-multiple-table table thead th{padding:var(--spacing-layout-2-xs)}div.hidden-head table{display:table}div.hidden-head table thead th{padding:0}div.hidden-head table tbody tr{border-bottom:var(--spacing-s) var(--color-white) solid}div.hidden-head table tbody tr:hover{background:rgba(0,0,0,0)}div.table-layout-form input.hds-text-input__input{width:100%}div.table-layout-form table{border:1px var(--color-black) solid;max-width:var(--webform-element-width--input-large)}div.table-layout-form table tbody tr{border:§0px var(--color-black-30) solid}div.table-layout-form table tbody tr td{border:1px var(--color-black-30) solid;padding:0}div.table-layout-form table tbody tr td input.hds-text-input__input[readonly]{padding:var(--spacing-layout-2-xs)}div.table-layout-form table .form-item{margin-bottom:0}.hds-text-input .hds-text-input__input.input--borderless{border:0 rgba(0,0,0,0) solid}#edit-subventions-items thead{background:var(--color-black-90);color:var(--color-white);text-align:left}#edit-subventions-items input.hds-text-input,#edit-subventions-items input.hds-text-input__input{background:rgba(0,0,0,0)}#subventions_table td.webform-multiple-table--operations,#subventions_table th.webform-multiple-table--operations{display:none}#subventions_table input.hds-text-input__input[readonly][name$="[amount]"]{background-color:var(--input-background-disabled);border-color:var(--input-border-color-disabled);color:var(--input-color-disabled);cursor:not-allowed}.form-item-muu-liite .webform-multiple-table--operations{display:none}.hidden-head>label{display:none}.webform-preview .accordion_header{font-size:28px;font-weight:300}@media(min-width: 768px){.webform-preview .accordion_header{font-size:36px;font-weight:500}}.webform-preview label{display:block;font-weight:bold}.grants-profile-grants-profile fieldset{background:var(--color-black-5);border:0 rgba(0,0,0,0) solid;margin:0;max-width:var(--webform-element-width--fieldset);padding:0 var(--spacing-layout-s) var(--spacing-layout-s);top:calc(-1*var(--spacing-m))}.grants-profile-grants-profile fieldset label{margin-bottom:var(--spacing-3-xs)}.grants-profile-grants-profile fieldset legend{font-size:var(--fontsize-body-l);margin-bottom:var(--spacing-m);padding-bottom:var(--spacing-s);position:relative;top:var(--spacing-l)}.grants-profile-grants-profile fieldset .fieldset-wrapper{display:flex;flex-flow:row wrap;justify-content:space-between}.grants-profile-grants-profile fieldset .hds-text-input{max-width:100%}.grants-profile-grants-profile fieldset div[class*=-address-postcode]{width:32%}.grants-profile-grants-profile fieldset div[class*=-address-city]{width:65%}.grants-profile--extrainfo .form-actions .button{margin-right:var(--spacing-2-xs)}.grants-stepper{--grants-stepper-color: var(--color-black);--grants-stepper-background-color: var(--color-white);--grants-stepper-disabled-color: var(--color-black-20);--grants-stepper-selected-step-label-color: var(--color-black-90);--grants-stepper-not-selected-step-label-color: var(--color-black);--grants-step-background-color: var(--color-white);--grants-step-content-color: var(--color-black);--grants-stepper-focus-border-color: var(--color-coat-of-arms);--grants-step-width: 120px;--circle-container-size: 36px;--progress-line-height: 2px;background-color:var(--grants-stepper-background-color);margin-bottom:var(--spacing-layout-m);position:relative}@media(max-width: 725px){.grants-stepper{--grants-step-width: 40px}}@media(max-width: 725px){.grants-stepper .grants-stepper__text{display:none}}.grants-stepper__inner{align-items:flex-start;display:flex;justify-content:space-between;margin:0;-ms-overflow-style:none;padding:0;position:relative;scroll-behavior:smooth;scrollbar-width:none;width:100%}.grants-stepper__lines{display:flex;height:var(--progress-line-height);left:calc(var(--grants-step-width)/2);line-height:var(--lineheight-l);position:absolute;transform:translateY(calc(var(--circle-container-size) / 2 + var(--progress-line-height) / 2));z-index:1}.grants-stepper__line{background-color:var(--grants-stepper-color);display:inline-block;height:100%;position:relative}.grants-stepper__line__disabled{background-color:var(--grants-stepper-disabled-color)}.grants-stepper__steps{background-color:var(--grants-stepper-background-color);box-sizing:border-box;display:flex;flex-shrink:0;justify-content:center;max-width:var(--grants-step-width);min-width:var(--grants-step-width);padding:3px}.grants-stepper__step{align-items:center;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:rgba(0,0,0,0);border:0;box-sizing:content-box;color:var(--grants-stepper-color);cursor:pointer;display:flex;flex-direction:column;height:100%;justify-content:center;outline:none;overflow:visible;padding:0;position:relative}.grants-stepper__step[disabled],.grants-stepper__step__disabled{color:var(--grants-stepper-disabled-color);cursor:not-allowed}.grants-stepper__step[disabled] .grants-stepper__circle,.grants-stepper__step__disabled .grants-stepper__circle{background-color:var(--grants-stepper-background-color);border:2px solid var(--grants-stepper-disabled-color);color:var(--grants-stepper-disabled-color)}.grants-stepper__step[disabled] .grants-stepper__text,.grants-stepper__step__disabled .grants-stepper__text{color:var(--grants-stepper-disabled-color)}.grants-stepper__step__circle_container{align-items:center;display:flex;height:var(--circle-container-size);justify-content:center;width:var(--circle-container-size);z-index:2}.grants-stepper__step__completed_container{align-items:center;background-color:var(--grants-stepper-color);border-radius:16px;color:var(--color-white);display:none;justify-content:center;outline:2px solid var(--grants-stepper-background-color);padding:4px;vertical-align:middle}.grants-stepper .grants-stepper__error,.grants-stepper .grants-stepper__completed{display:none}.grants-stepper__text{color:var(--grants-stepper-not-selected-step-label-color);font-size:var(--fontsize-body-m);font-weight:500;line-height:var(--lineheight-l);margin-bottom:0;margin-top:6px;padding-left:var(--spacing-4-xs);padding-right:var(--spacing-4-xs);text-align:center;text-decoration:underline}.grants-stepper__circle{align-items:center;background-color:var(--grants-step-background-color);border:2px solid var(--grants-stepper-color);border-radius:16px;color:var(--grants-step-content-color);display:flex;height:28px;justify-content:center;outline:2px solid var(--grants-stepper-background-color);text-align:center;width:28px}.grants-stepper__number{font-size:var(--fontsize-body-m);font-weight:500;line-height:1.15}.grants-stepper .is-active .grants-stepper__circle{border:4px solid var(--grants-stepper-color);border-radius:18px;outline:none}.grants-stepper .is-active .grants-stepper__text{color:var(--grants-stepper-selected-step-label-color);font-weight:700;text-decoration:none}.grants-stepper .is-active .grants-stepper__number{color:var(--grants-stepper-selected-step-label-color);font-weight:700;text-decoration:none}.grants-stepper .is-complete .grants-stepper__container{align-items:center;background-color:var(--grants-stepper-color);border-radius:16px;color:var(--color-white);display:flex;justify-content:center;outline:2px solid var(--grants-stepper-background-color);padding:4px}.grants-stepper .is-complete .grants-stepper__number{display:none}.grants-stepper .is-complete .grants-stepper__completed{display:inline-block}.grants-stepper .is-complete .grants-stepper__circle{opacity:0}.grants-stepper .is-complete .grants-stepper__step__completed_container{display:flex}.grants-stepper .has-errors .grants-stepper__container{align-items:center;background-color:var(--grants-stepper-color);border-radius:16px;color:var(--color-white);display:flex;justify-content:center;outline:2px solid var(--grants-stepper-background-color);padding:4px}.grants-stepper .has-errors .grants-stepper__circle{border-color:var(--color-error);color:var(--color-error)}.grants-stepper .has-errors .grants-stepper__number{display:none}.grants-stepper .has-errors .grants-stepper__error{display:inline-block}.grants-stepper .progress-marker::before{display:none}.grants-stepper .progress-step .progress-marker{color:var(--color-black)}.grants-stepper .progress-step .progress-marker.focus-visible .grants-stepper__circle{outline:2px solid var(--color-black);outline:var(--outline-width, 2px) solid var(--color-black);outline-offset:2px}.grants-stepper .progress-step .progress-marker.focus-visible .grants-stepper__circle{outline:2px solid var(--color-black);outline:var(--outline-width, 2px) solid var(--color-black);outline-offset:2px}.grants-stepper .progress-step .progress-marker:focus-visible .grants-stepper__circle{outline:2px solid var(--color-black);outline:var(--outline-width, 2px) solid var(--color-black);outline-offset:2px}.grants-stepper .progress-step .progress-marker.focus-visible .grants-stepper__text{outline:2px solid var(--color-black);outline:var(--outline-width, 2px) solid var(--color-black)}.grants-stepper .progress-step .progress-marker.focus-visible .grants-stepper__text{outline:2px solid var(--color-black);outline:var(--outline-width, 2px) solid var(--color-black)}.grants-stepper .progress-step .progress-marker:focus-visible .grants-stepper__text{outline:2px solid var(--color-black);outline:var(--outline-width, 2px) solid var(--color-black)}.grants-stepper .progress-step:last-child{flex-grow:1}.grant-applications--select-wrapper{--border-width: 2px;--input-height: 56px;--menu-item-height: 53px;--icon-size: var(--spacing-m);--helper-color-default: var(--color-black-60);--helper-color-invalid: var(--color-error);--icon-color-invalid: var(--color-error);--input-background-default: var(--color-white);--input-background-disabled: var(--color-black-10);--input-border-color-default: var(--color-black-50);--input-border-color-hover: var(--color-black-90);--input-border-color-focus: var(--color-black-90);--input-border-color-invalid: var(--color-error);--input-border-color-disabled: var(--color-black-10);--input-color-default: var(--color-black-90);--input-color-disabled: var(--color-black-40);--label-color-default: var(--color-black-90);--label-color-invalid: var(--color-black-90);--placeholder-color: var(--color-black-60);--focus-outline-color: var(--color-coat-of-arms);align-items:center;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--input-background-default);border:var(--border-width) solid var(--input-border-color-default);box-sizing:border-box;color:var(--input-color-default);cursor:pointer;display:block;font-size:1.125em;grid-template-areas:"select";line-height:normal;max-width:30ch;min-width:15ch;padding:.25em .5em;position:relative;width:100%}.grant-applications--select-wrapper select{align-items:center;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:rgba(0,0,0,0);border:none;color:var(--dropdown-color-default);cursor:inherit;display:flex;font-family:inherit;font-size:var(--fontsize-body-l);height:var(--input-height);line-height:inherit;margin:0;min-height:var(--menu-item-height);outline:none;padding:calc(var(--spacing-s) - var(--border-width)*2) var(--spacing-s);width:100%;z-index:1}.grant-applications--select-wrapper select::-ms-expand{display:none}.grant-applications--select-wrapper i.hel-icon{pointer-events:none;position:absolute;right:calc(var(--spacing-s) - var(--border-width)*2);top:calc(var(--spacing-s) - var(--border-width)*2)}.grant-applications--select-wrapper select,.grant-applications--select-wrapper::after{grid-area:select}.grant-applications--select-wrapper:not(.select--multiple)::after{background-color:var(--helper-color-default);clip-path:polygon(100% 0%, 0 0%, 50% 100%);content:"";height:.5em;justify-self:end;width:.8em}.grant-applications--select-wrapper select:focus+.grant-applications--select-focus{border:2px solid var(--focus-outline-color);border-radius:inherit;bottom:-1px;left:-1px;position:absolute;right:-1px;top:-1px}.webform-submission__application_id{border-bottom:1px var(--color-black-20) solid;padding-bottom:var(--spacing-xl)}.webform-submission__application_id--header{font-size:1rem;font-weight:bold}.webform-submission__title-wrapper{padding-top:var(--spacing-2-xl)}.webform-submission__title-wrapper h1{max-width:100%}.webform-submission ul{list-style:none;margin-top:0;padding-left:0}.webform-submission-information{background:var(--color-silver-light);margin-top:var(--spacing-3-xl);padding:var(--spacing-l)}.webform-submission-information .webform-submission-information{margin-top:var(--spacing-l);padding:0}.webform-submission-information h4{margin-top:0}.webform-submission-information h5{font-size:var(--fontsize-body-m);margin-top:var(--spacing-s)}.webform-submission-information__row{display:flex}.webform-submission-information__row-edit{margin-top:var(--spacing-s)}.webform-submission-information__row-top{align-items:center;border-bottom:1px solid var(--color-black-20);justify-content:space-between}@media(max-width: 550px){.webform-submission-information__row-top{display:block}}.webform-submission-information__row-main{flex-flow:row nowrap;gap:var(--spacing-m);justify-content:space-between}@media(max-width: 1179px){.webform-submission-information__row-main{flex-flow:row wrap}}.webform-submission-information__row-main>div{flex:1}@media(max-width: 1179px){.webform-submission-information__row-main>div{flex:auto;width:100%}}.webform-submission-information__row-main>div ul{list-style-type:none;margin-bottom:0;padding-left:0}.webform-submission-information__row-main>div ul li{margin:0;padding:0}.webform-submission-information__supportlinks{display:flex;flex-flow:row nowrap;min-width:-moz-fit-content;min-width:fit-content}.webform-submission-information__supportlinks .hds-loading-spinner{left:0}.webform-submission-information__supportlinks .hds-button{min-width:-moz-fit-content;min-width:fit-content}.hel-icon.hel-icon--copy{-webkit-mask-image:url("data:image/svg+xml,%3Csvg class='Icon-module_icon__1Jtzj icon_hel-icon__1YqNC Icon-module_s__2WGWe icon_hel-icon--size-s__2Lkik' viewBox='0 0 24 24' role='img' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Crect width='24' height='24'%3E%3C/rect%3E%3Cpath fill='currentColor' d='M6,10 L6,12 L5,12 L5,18 L12,18 L12,17 L14,17 L14,19 C14,19.5522847 13.5522847,20 13,20 L4,20 C3.44771525,20 3,19.5522847 3,19 L3,11 C3,10.4477153 3.44771525,10 4,10 L6,10 Z M20,4 C20.5522847,4 21,4.44771525 21,5 L21,15 C21,15.5522847 20.5522847,16 20,16 L8,16 C7.44771525,16 7,15.5522847 7,15 L7,5 C7,4.44771525 7.44771525,4 8,4 L20,4 Z M19,6 L9,6 L9,14 L19,14 L19,6 Z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg class='Icon-module_icon__1Jtzj icon_hel-icon__1YqNC Icon-module_s__2WGWe icon_hel-icon--size-s__2Lkik' viewBox='0 0 24 24' role='img' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Crect width='24' height='24'%3E%3C/rect%3E%3Cpath fill='currentColor' d='M6,10 L6,12 L5,12 L5,18 L12,18 L12,17 L14,17 L14,19 C14,19.5522847 13.5522847,20 13,20 L4,20 C3.44771525,20 3,19.5522847 3,19 L3,11 C3,10.4477153 3.44771525,10 4,10 L6,10 Z M20,4 C20.5522847,4 21,4.44771525 21,5 L21,15 C21,15.5522847 20.5522847,16 20,16 L8,16 C7.44771525,16 7,15.5522847 7,15 L7,5 C7,4.44771525 7.44771525,4 8,4 L20,4 Z M19,6 L9,6 L9,14 L19,14 L19,6 Z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E")}.webform-submission-form .form-actions{border-top:1px rgba(0,0,0,.6) solid;margin-top:var(--spacing-l);padding-top:var(--spacing-2-xl)}@media(min-width: 768px){.webform-submission-form .form-actions{display:flex;flex-direction:row-reverse}}.webform-submission-form .form-actions .actions{display:flex;flex-wrap:wrap}.webform-submission-form .form-actions button{margin-left:0}@media(min-width: 768px){.webform-submission-form .form-actions button{margin-left:var(--spacing-2-xs)}}.webform-submission-form .form-actions input{margin-bottom:var(--spacing-layout-2-xs);width:100%}@media(min-width: 768px){.webform-submission-form .form-actions input{width:auto}}.webform-submission-form .form-actions input.webform-button--draft{background:rgba(0,0,0,0);border:0 rgba(0,0,0,0) solid;color:var(--hdbt-color-black);order:3;text-decoration:underline}.webform-submission-form .form-actions button.webform-button--next span::after,.webform-submission-form .form-actions button.webform-button--preview span::after{content:">";margin-left:var(--spacing-2-xs)}.webform-submission-form .form-actions button.webform-button--previous span::before{content:"<";margin-right:var(--spacing-2-xs)}.webform-submission-form .form-actions input.webform-button--previous{background:var(--color-white);color:var(--border-color)}.webform-button--draft .hds-button__label::before{background-color:currentColor;background-size:contain;content:"";display:inline-block;flex-shrink:0;height:24px;margin-right:var(--spacing-2-xs);-webkit-mask-image:var(--hel-icon--download-cloud);mask-image:var(--hel-icon--download-cloud);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:24px 24px;mask-size:24px 24px;transition:transform .2s linear;vertical-align:bottom;width:24px}.webform-submission-messages{background:var(--color-silver-light);margin-top:var(--spacing-3-xl);padding:var(--spacing-l)}.webform-submission-messages h4,.webform-submission-messages h5{margin-top:0}.webform-submission-messages hr{margin:var(--spacing-l) 0}.webform-submission-messages__new-message{align-items:center;background:var(--color-alert);display:inline-flex;font-weight:bold;gap:var(--spacing-2-xs);margin-bottom:var(--spacing-m);padding:var(--spacing-2-xs) var(--spacing-xs);text-transform:uppercase}.webform-submission-messages__messages-list{list-style:none;margin:0;padding:0}.webform-submission-messages__message{margin:0;padding:0}.webform-submission-messages__message__attachments{list-style:none}.webform-submission-messages__message .hds-button{margin-top:var(--spacing-s)}.js-form-type-grants-webform-summation-field{max-width:var(--webform-element-width--input-large);text-align:right}.js-form-type-grants-webform-summation-field .grants-webform-summation-field{display:inline-block;padding:var(--spacing-xs) var(--spacing-m)}.webform-print-header,.webform-print-footer{display:none}.webform-print .main-content{display:block}.webform-submission--view-mode-html .hds-text-input,.webform-submission-data-preview-page .hds-text-input,.webform-print-page-html .hds-text-input{max-width:100%}.webform-submission--view-mode-html .print-label,.webform-submission-data-preview-page .print-label,.webform-print-page-html .print-label{display:block;font-size:var(--fontsize-body-m);font-weight:500;margin-bottom:var(--spacing-3-xs);margin-top:0;max-width:-moz-fit-content;max-width:fit-content;padding-right:var(--spacing-xl);position:relative}.webform-submission--view-mode-html .webform-section-flex-wrapper h3+*>*:first-child>*:first-child,.webform-submission--view-mode-html .webform-section-flex-wrapper h3+*>*:first-child>*:first-child label:first-of-type,.webform-submission-data-preview-page .webform-section-flex-wrapper h3+*>*:first-child>*:first-child,.webform-submission-data-preview-page .webform-section-flex-wrapper h3+*>*:first-child>*:first-child label:first-of-type,.webform-print-page-html .webform-section-flex-wrapper h3+*>*:first-child>*:first-child,.webform-print-page-html .webform-section-flex-wrapper h3+*>*:first-child>*:first-child label:first-of-type{line-height:normal}.webform-submission--view-mode-html .print-notification,.webform-submission-data-preview-page .print-notification,.webform-print-page-html .print-notification{border:2px var(--color-black) solid;font-weight:bold;margin-top:var(--spacing-2-xl);padding:var(--spacing-layout-s)}.webform-submission--view-mode-html .print-notification .print-notification--icon,.webform-submission-data-preview-page .print-notification .print-notification--icon,.webform-print-page-html .print-notification .print-notification--icon{height:22px;margin-right:var(--spacing-2-xs);vertical-align:text-top;width:22px}.webform-submission--view-mode-html .webform-print-page-wizard-page~.webform-print-page-wizard-page h2,.webform-submission-data-preview-page .webform-print-page-wizard-page~.webform-print-page-wizard-page h2,.webform-print-page-html .webform-print-page-wizard-page~.webform-print-page-wizard-page h2{page-break-after:avoid;page-break-before:always}.webform-submission--view-mode-html div.hds-text-input__input,.webform-submission-data-preview-page div.hds-text-input__input,.webform-print-page-html div.hds-text-input__input{background:var(--color-white);border:2px var(--color-black) solid;height:var(--spacing-2-xl);width:100%}.webform-submission--view-mode-html div.hds-text-input__textarea,.webform-submission-data-preview-page div.hds-text-input__textarea,.webform-print-page-html div.hds-text-input__textarea{background:var(--color-white);border:2px var(--color-black) solid;height:var(--spacing-layout-2-xl);width:100%}.webform-submission--view-mode-html .webform-section-wrapper .hds-notification,.webform-submission-data-preview-page .webform-section-wrapper .hds-notification,.webform-print-page-html .webform-section-wrapper .hds-notification{margin-top:var(--spacing-s)}.webform-submission--view-mode-html .webform-print-page-body h2,.webform-submission-data-preview-page .webform-print-page-body h2,.webform-print-page-html .webform-print-page-body h2{margin-bottom:var(--spacing-layout-s)}.webform-submission--view-mode-html .webform-print-wrapper-table,.webform-submission-data-preview-page .webform-print-wrapper-table,.webform-print-page-html .webform-print-wrapper-table{border:0 rgba(0,0,0,0) solid;display:table;max-width:100%;overflow-x:visible;overflow-x:initial;width:100%}.webform-submission--view-mode-html .webform-print-wrapper-table thead,.webform-submission--view-mode-html .webform-print-wrapper-table tbody,.webform-submission--view-mode-html .webform-print-wrapper-table tfoot,.webform-submission--view-mode-html .webform-print-wrapper-table tr,.webform-submission--view-mode-html .webform-print-wrapper-table tbody tr:hover,.webform-submission--view-mode-html .webform-print-wrapper-table td,.webform-submission--view-mode-html .webform-print-wrapper-table td:first-child,.webform-submission--view-mode-html .webform-print-wrapper-table th,.webform-submission-data-preview-page .webform-print-wrapper-table thead,.webform-submission-data-preview-page .webform-print-wrapper-table tbody,.webform-submission-data-preview-page .webform-print-wrapper-table tfoot,.webform-submission-data-preview-page .webform-print-wrapper-table tr,.webform-submission-data-preview-page .webform-print-wrapper-table tbody tr:hover,.webform-submission-data-preview-page .webform-print-wrapper-table td,.webform-submission-data-preview-page .webform-print-wrapper-table td:first-child,.webform-submission-data-preview-page .webform-print-wrapper-table th,.webform-print-page-html .webform-print-wrapper-table thead,.webform-print-page-html .webform-print-wrapper-table tbody,.webform-print-page-html .webform-print-wrapper-table tfoot,.webform-print-page-html .webform-print-wrapper-table tr,.webform-print-page-html .webform-print-wrapper-table tbody tr:hover,.webform-print-page-html .webform-print-wrapper-table td,.webform-print-page-html .webform-print-wrapper-table td:first-child,.webform-print-page-html .webform-print-wrapper-table th{background:rgba(0,0,0,0);border:0;color:var(--color-black)}.webform-submission--view-mode-html .webform-print-wrapper-table ul,.webform-submission-data-preview-page .webform-print-wrapper-table ul,.webform-print-page-html .webform-print-wrapper-table ul{margin:0;padding:0}.webform-submission--view-mode-html .webform-print-wrapper-table ul li,.webform-submission-data-preview-page .webform-print-wrapper-table ul li,.webform-print-page-html .webform-print-wrapper-table ul li{border-bottom:1px var(--color-black-50) solid;list-style:none;margin-top:0;padding:1rem 0}.webform-submission--view-mode-html .webform-print-wrapper-table ul li:last-of-type,.webform-submission-data-preview-page .webform-print-wrapper-table ul li:last-of-type,.webform-print-page-html .webform-print-wrapper-table ul li:last-of-type{border-bottom:0 rgba(0,0,0,0) solid}.webform-submission--view-mode-html .webform-print-wrapper-table thead,.webform-submission-data-preview-page .webform-print-wrapper-table thead,.webform-print-page-html .webform-print-wrapper-table thead{display:table-header-group}.webform-submission--view-mode-html .webform-print-wrapper-table thead th,.webform-submission-data-preview-page .webform-print-wrapper-table thead th,.webform-print-page-html .webform-print-wrapper-table thead th{padding:0}.webform-submission--view-mode-html .webform-print-wrapper-table tfoot,.webform-submission-data-preview-page .webform-print-wrapper-table tfoot,.webform-print-page-html .webform-print-wrapper-table tfoot{display:table-footer-group}.webform-submission--view-mode-html .webform-submission-data>section,.webform-submission-data-preview-page .webform-submission-data>section,.webform-print-page-html .webform-submission-data>section{border-top:1px var(--color-black-20) solid;padding-top:var(--spacing-layout-l)}.webform-submission--view-mode-html .webform-submission-data>section>.webform-section-flex-wrapper,.webform-submission-data-preview-page .webform-submission-data>section>.webform-section-flex-wrapper,.webform-print-page-html .webform-submission-data>section>.webform-section-flex-wrapper{display:block}.webform-submission--view-mode-html .webform-submission-data>section>.webform-section-flex-wrapper>h2,.webform-submission-data-preview-page .webform-submission-data>section>.webform-section-flex-wrapper>h2,.webform-print-page-html .webform-submission-data>section>.webform-section-flex-wrapper>h2{font-size:var(--fontsize-heading-l) !important;margin:0 0 2mm !important;padding:0 !important;width:100% !important}.webform-submission--view-mode-html .webform-submission-data>section>.webform-section-flex-wrapper>h2,.webform-submission-data-preview-page .webform-submission-data>section>.webform-section-flex-wrapper>h2,.webform-print-page-html .webform-submission-data>section>.webform-section-flex-wrapper>h2{font-weight:500;min-width:100%}.webform-submission--view-mode-html .webform-submission-data>section>.webform-section-flex-wrapper>.webform-section-wrapper,.webform-submission-data-preview-page .webform-submission-data>section>.webform-section-flex-wrapper>.webform-section-wrapper,.webform-print-page-html .webform-submission-data>section>.webform-section-flex-wrapper>.webform-section-wrapper{padding:6mm 0}.webform-submission--view-mode-html .webform-submission-data>section>.webform-section-flex-wrapper>.webform-section-wrapper label,.webform-submission-data-preview-page .webform-submission-data>section>.webform-section-flex-wrapper>.webform-section-wrapper label,.webform-print-page-html .webform-submission-data>section>.webform-section-flex-wrapper>.webform-section-wrapper label{font-weight:500}.webform-submission--view-mode-html .webform-submission-data>section.hds-notification,.webform-submission-data-preview-page .webform-submission-data>section.hds-notification,.webform-print-page-html .webform-submission-data>section.hds-notification{padding-top:var(--spacing-s)}@media print{@page{.webform-submission--view-mode-html,.webform-submission-data-preview-page,.webform-print-page-html{margin:0;size:A4}}.webform-submission--view-mode-html h1,.webform-submission-data-preview-page h1,.webform-print-page-html h1{margin:0;position:relative}.webform-submission--view-mode-html details,.webform-submission-data-preview-page details,.webform-print-page-html details{page-break-before:always}.webform-submission--view-mode-html .details-section-divider,.webform-submission-data-preview-page .details-section-divider,.webform-print-page-html .details-section-divider{page-break-after:always}.webform-submission--view-mode-html label,.webform-submission-data-preview-page label,.webform-print-page-html label{font-size:8pt;margin-bottom:0}.webform-submission--view-mode-html section,.webform-submission-data-preview-page section,.webform-print-page-html section{border-top:0 var(--color-black-20) solid !important;padding-top:0 !important}.webform-submission--view-mode-html section,.webform-submission-data-preview-page section,.webform-print-page-html section{margin-bottom:0;padding-bottom:0}.webform-submission--view-mode-html div.main-content,.webform-submission-data-preview-page div.main-content,.webform-print-page-html div.main-content{margin:0}.webform-submission--view-mode-html button,.webform-submission--view-mode-html footer.footer,.webform-submission--view-mode-html header.header,.webform-submission--view-mode-html nav.breadcrumb,.webform-submission--view-mode-html .form-actions,.webform-submission--view-mode-html .hds-notification,.webform-submission--view-mode-html .messages__container,.webform-submission--view-mode-html .tools__container,.webform-submission--view-mode-html .breadcrumb__container,.webform-submission--view-mode-html .webform-progress,.webform-submission--view-mode-html .webform-progress-tracker,.webform-submission--view-mode-html .webform-progress-tracker-mobile,.webform-submission--view-mode-html .webform-multiple-add,.webform-submission--view-mode-html .webform-multiple-table--operations,.webform-submission-data-preview-page button,.webform-submission-data-preview-page footer.footer,.webform-submission-data-preview-page header.header,.webform-submission-data-preview-page nav.breadcrumb,.webform-submission-data-preview-page .form-actions,.webform-submission-data-preview-page .hds-notification,.webform-submission-data-preview-page .messages__container,.webform-submission-data-preview-page .tools__container,.webform-submission-data-preview-page .breadcrumb__container,.webform-submission-data-preview-page .webform-progress,.webform-submission-data-preview-page .webform-progress-tracker,.webform-submission-data-preview-page .webform-progress-tracker-mobile,.webform-submission-data-preview-page .webform-multiple-add,.webform-submission-data-preview-page .webform-multiple-table--operations,.webform-print-page-html button,.webform-print-page-html footer.footer,.webform-print-page-html header.header,.webform-print-page-html nav.breadcrumb,.webform-print-page-html .form-actions,.webform-print-page-html .hds-notification,.webform-print-page-html .messages__container,.webform-print-page-html .tools__container,.webform-print-page-html .breadcrumb__container,.webform-print-page-html .webform-progress,.webform-print-page-html .webform-progress-tracker,.webform-print-page-html .webform-progress-tracker-mobile,.webform-print-page-html .webform-multiple-add,.webform-print-page-html .webform-multiple-table--operations{display:none !important}.webform-submission--view-mode-html .gin--horizontal-toolbar .dialog-off-canvas-main-canvas,.webform-submission-data-preview-page .gin--horizontal-toolbar .dialog-off-canvas-main-canvas,.webform-print-page-html .gin--horizontal-toolbar .dialog-off-canvas-main-canvas{padding:0 !important}.webform-submission--view-mode-html .hds-text-input,.webform-submission-data-preview-page .hds-text-input,.webform-print-page-html .hds-text-input{max-width:100%}.webform-submission--view-mode-html .hds-text-input .hds-text-input__input,.webform-submission-data-preview-page .hds-text-input .hds-text-input__input,.webform-print-page-html .hds-text-input .hds-text-input__input{height:1cm}.webform-submission--view-mode-html .hds-text-input textarea.hds-text-input__input,.webform-submission--view-mode-html .hds-text-input div.hds-text-input__textarea,.webform-submission-data-preview-page .hds-text-input textarea.hds-text-input__input,.webform-submission-data-preview-page .hds-text-input div.hds-text-input__textarea,.webform-print-page-html .hds-text-input textarea.hds-text-input__input,.webform-print-page-html .hds-text-input div.hds-text-input__textarea{height:6cm;max-width:100%;min-width:100%;width:100%}.webform-submission--view-mode-html .hds-text-input .hds-text-input__input[readonly],.webform-submission--view-mode-html .hds-text-input .hds-text-input__input,.webform-submission-data-preview-page .hds-text-input .hds-text-input__input[readonly],.webform-submission-data-preview-page .hds-text-input .hds-text-input__input,.webform-print-page-html .hds-text-input .hds-text-input__input[readonly],.webform-print-page-html .hds-text-input .hds-text-input__input{border:2px var(--color-black) solid}.webform-submission--view-mode-html .webform-element,.webform-submission-data-preview-page .webform-element,.webform-print-page-html .webform-element{border:1px var(--color-black) solid;margin-bottom:8mm;padding:2.5mm;position:relative}.webform-submission--view-mode-html .webform-preview,.webform-submission-data-preview-page .webform-preview,.webform-print-page-html .webform-preview{margin-top:0}.webform-submission--view-mode-html .webform-preview label,.webform-submission-data-preview-page .webform-preview label,.webform-print-page-html .webform-preview label{align-items:flex-end;display:flex;font-size:8pt;height:100%;left:0;pointer-events:none;position:absolute;top:-100%;width:100%}.webform-submission--view-mode-html .webform-preview .webform-element,.webform-submission-data-preview-page .webform-preview .webform-element,.webform-print-page-html .webform-preview .webform-element{border:1px var(--color-black) solid;margin-bottom:8mm;padding:2.5mm;position:relative;top:5mm}.webform-submission--view-mode-html .webform-preview .webform-multiple-table--operations,.webform-submission-data-preview-page .webform-preview .webform-multiple-table--operations,.webform-print-page-html .webform-preview .webform-multiple-table--operations{display:none}.webform-submission--view-mode-html .webform-print-header,.webform-submission-data-preview-page .webform-print-header,.webform-print-page-html .webform-print-header{align-items:center;background:var(--color-white);border-bottom:1px var(--color-black-40) solid;display:flex;flex-flow:row nowrap;font-size:9pt;height:21mm;left:0;max-width:100%;min-width:100%;position:fixed;top:0;width:100%;z-index:1000}.webform-submission--view-mode-html .webform-print-header svg,.webform-submission-data-preview-page .webform-print-header svg,.webform-print-page-html .webform-print-header svg{color:var(--color-black);display:block;height:25mm;margin-right:3mm;width:55mm}.webform-submission--view-mode-html .webform-print-header .webform-print-header-left-text,.webform-submission-data-preview-page .webform-print-header .webform-print-header-left-text,.webform-print-page-html .webform-print-header .webform-print-header-left-text{color:var(--color-black-40);text-align:left;width:100%}.webform-submission--view-mode-html .webform-print-header .webform-print-header-right-text,.webform-submission-data-preview-page .webform-print-header .webform-print-header-right-text,.webform-print-page-html .webform-print-header .webform-print-header-right-text{color:var(--color-black-40);text-align:right;width:100%}.webform-submission--view-mode-html .webform-print-footer,.webform-submission-data-preview-page .webform-print-footer,.webform-print-page-html .webform-print-footer{align-items:center;background:var(--color-white);border-top:1px var(--color-black-40) solid;bottom:0;display:flex;flex-flow:row nowrap;font-size:9pt;height:17mm;left:0;max-width:100%;min-width:100%;position:fixed;width:100%;z-index:1000}.webform-submission--view-mode-html .webform-print-footer svg,.webform-submission-data-preview-page .webform-print-footer svg,.webform-print-page-html .webform-print-footer svg{color:var(--color-black);display:block;height:15mm;margin-right:3mm;width:33mm}.webform-submission--view-mode-html .webform-print-footer .webform-print-footer-left-text,.webform-submission-data-preview-page .webform-print-footer .webform-print-footer-left-text,.webform-print-page-html .webform-print-footer .webform-print-footer-left-text{color:var(--color-black-40);text-align:left;width:100%}.webform-submission--view-mode-html .webform-print-footer .webform-print-footer-right-text,.webform-submission-data-preview-page .webform-print-footer .webform-print-footer-right-text,.webform-print-page-html .webform-print-footer .webform-print-footer-right-text{color:var(--color-black-40);text-align:right;width:100%}.webform-submission--view-mode-html .webform-print-header-space,.webform-submission-data-preview-page .webform-print-header-space,.webform-print-page-html .webform-print-header-space{background:var(--color-white);font-size:9pt;height:21mm}.webform-submission--view-mode-html .webform-print-footer-space,.webform-submission-data-preview-page .webform-print-footer-space,.webform-print-page-html .webform-print-footer-space{background:var(--color-white);font-size:9pt;height:17mm}.webform-submission--view-mode-html .webform-print-wrapper-table,.webform-submission-data-preview-page .webform-print-wrapper-table,.webform-print-page-html .webform-print-wrapper-table{border:0;margin:0;overflow-x:visible;overflow-x:initial}.webform-submission--view-mode-html .webform-section-flex-wrapper,.webform-submission-data-preview-page .webform-section-flex-wrapper,.webform-print-page-html .webform-section-flex-wrapper{flex-flow:row wrap}.webform-submission--view-mode-html .webform-section-flex-wrapper>h3.webform-section-title,.webform-submission-data-preview-page .webform-section-flex-wrapper>h3.webform-section-title,.webform-print-page-html .webform-section-flex-wrapper>h3.webform-section-title{max-width:100%;width:100%}.webform-submission--view-mode-html .webform-section-grid-wrapper,.webform-submission-data-preview-page .webform-section-grid-wrapper,.webform-print-page-html .webform-section-grid-wrapper{display:flex;flex-flow:row nowrap}.webform-submission--view-mode-html .webform-section-grid-wrapper>h3.webform-section-title,.webform-submission-data-preview-page .webform-section-grid-wrapper>h3.webform-section-title,.webform-print-page-html .webform-section-grid-wrapper>h3.webform-section-title{font-size:1.25rem;margin-top:0;max-width:5cm;width:100%}.webform-submission--view-mode-html .webform-section-grid-wrapper>dl.webform-section-contents,.webform-submission-data-preview-page .webform-section-grid-wrapper>dl.webform-section-contents,.webform-print-page-html .webform-section-grid-wrapper>dl.webform-section-contents{margin-top:0;max-width:100%;padding-left:1cm;width:100%}.webform-submission--view-mode-html .webform-section-grid-wrapper>dl.webform-section-contents dt,.webform-submission-data-preview-page .webform-section-grid-wrapper>dl.webform-section-contents dt,.webform-print-page-html .webform-section-grid-wrapper>dl.webform-section-contents dt{font-weight:bold;margin:0;padding:0;page-break-after:avoid}.webform-submission--view-mode-html .webform-section-grid-wrapper>dl.webform-section-contents dd,.webform-submission-data-preview-page .webform-section-grid-wrapper>dl.webform-section-contents dd,.webform-print-page-html .webform-section-grid-wrapper>dl.webform-section-contents dd{margin:0;padding:0;page-break-before:avoid}.webform-submission--view-mode-html .webform-print-page-body h2,.webform-submission-data-preview-page .webform-print-page-body h2,.webform-print-page-html .webform-print-page-body h2{margin-bottom:1cm}}.webform-submission-data dl dt{font-weight:bold}.webform-submission-data dl dd{margin:0;padding:0}.webform-submission-data dl dl{padding-left:var(--spacing-2-xs)}.webform-submission-data dl>br{display:none}.webform-print-page-html .webform-section-wrapper>h4,.webform-print-page-html .webform-section-wrapper .print-label{margin-top:var(--spacing-2-xs);line-height:1.5}.webform-print-page-html .webform-section-wrapper fieldset{padding:var(--spacing-s)}@media(min-width: 768px){.webform-print-page-html .webform-section-wrapper fieldset{min-width:400px;padding:var(--spacing-s) var(--spacing-m)}}.application-list{padding-bottom:var(--spacing-xl);padding-left:0}.application-list__processed-human-readable{display:none}.application-list__item{background:var(--color-bus-light);display:block;margin:var(--spacing-m) 0;padding:var(--spacing-2-xl) var(--spacing-s) var(--spacing-m);position:relative}.application-list__item .new-message{background-color:var(--color-alert);border-radius:var(--spacing-xl);display:inline-block;padding:var(--spacing-2-xs)}.application-list__item .new-message .hel-icon--size-s{height:20px;width:20px}.application-list__item h3,.application-list__item h4{margin-top:var(--spacing-xs)}.application-list__item h4{font-size:1rem}.application-list__item--submitted{display:none}.application-list__item__link{display:flex;margin-top:var(--spacing-m)}.application-list__item__link a{font-size:1.25rem}.application-list__item__link a i{vertical-align:text-bottom}.application-list__item__row{display:flex;flex-flow:row wrap;gap:var(--spacing-m);justify-content:space-between}.application-list__item__row__left{justify-content:flex-start}.application-list__item__row__top{padding:var(--spacing-2-xs) var(--spacing-s) var(--spacing-2-xs) 0;position:absolute;top:0;width:100%}.application-list__item--status{--status-label-height: 32px;align-items:center;border-radius:20px;display:inline-flex;font-size:var(--fontsize-body-s);line-height:var(--status-label-height);min-height:var(--status-label-height);padding:var(--spacing-3-xs) var(--spacing-s);padding-left:var(--spacing-xs);vertical-align:middle}.application-list__item--status+.hds-loading-spinner{display:inline-block;left:10px;margin:0;padding:0;position:relative;top:var(--spacing-3-xs)}.application-list__item--status.hide-spinner+.hds-loading-spinner{display:none}.application-list__item--status+div+.application-list__item--error{display:none}.application-list__item--status.show-error{background:var(--color-black-20);color:var(--color-black-90)}.application-list__item--status.show-error+div+.application-list__item--error{display:inline-flex;left:var(--spacing-xs);margin:0;padding:0;position:relative;top:var(--spacing-3-xs)}.application-list__item--status.show-error+div+.application-list__item--error .application-list--error-text{display:inline-block;margin-left:var(--spacing-2-xs)}.application-list__item--status--draft{padding-left:0}.application-list__item--status--sent,.application-list__item--status--submitted{background:var(--color-black-10)}.application-list__item--status--sent::before,.application-list__item--status--submitted::before{--icon-size: 1.5rem;background-color:#000;background-size:contain;content:"";display:inline-block;height:calc(var(--line-height) * 1em);height:var(--icon-size, calc(var(--line-height) * 1em));-webkit-mask-image:var(--hel-icon--alert-circle);mask-image:var(--hel-icon--alert-circle);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);-webkit-mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));vertical-align:bottom;width:calc(var(--line-height) * 1em);width:var(--icon-size, calc(var(--line-height) * 1em));background-color:var(--color-black);content:"";margin-right:var(--spacing-2-xs)}.application-list__item--status--received,.application-list__item--status--pending,.application-list__item--status--processing,.application-list__item--status--preparing{background:var(--color-info);color:var(--color-white)}.application-list__item--status--received::before,.application-list__item--status--pending::before,.application-list__item--status--processing::before,.application-list__item--status--preparing::before{--icon-size: 1.5rem;background-color:#000;background-size:contain;content:"";display:inline-block;height:calc(var(--line-height) * 1em);height:var(--icon-size, calc(var(--line-height) * 1em));-webkit-mask-image:var(--hel-icon--info-circle);mask-image:var(--hel-icon--info-circle);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);-webkit-mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));vertical-align:bottom;width:calc(var(--line-height) * 1em);width:var(--icon-size, calc(var(--line-height) * 1em));background-color:var(--color-white);content:"";margin-right:var(--spacing-2-xs)}.application-list__item--status--done,.application-list__item--status--ready,.application-list__item--status--resolved{background:var(--color-success);color:var(--color-white)}.application-list__item--status--done::before,.application-list__item--status--ready::before,.application-list__item--status--resolved::before{--icon-size: 1.5rem;background-color:#000;background-size:contain;content:"";display:inline-block;height:calc(var(--line-height) * 1em);height:var(--icon-size, calc(var(--line-height) * 1em));-webkit-mask-image:var(--hel-icon--check-circle);mask-image:var(--hel-icon--check-circle);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);-webkit-mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));vertical-align:bottom;width:calc(var(--line-height) * 1em);width:var(--icon-size, calc(var(--line-height) * 1em));background-color:var(--color-white);content:"";margin-right:var(--spacing-2-xs)}.application-list__item--status--rejected,.application-list__item--status--deleted,.application-list__item--status--canceled,.application-list__item--status--cancelled{background:var(--color-alert)}.application-list__item--status--rejected::before,.application-list__item--status--deleted::before,.application-list__item--status--canceled::before,.application-list__item--status--cancelled::before{--icon-size: 1.5rem;background-color:#000;background-size:contain;content:"";display:inline-block;height:calc(var(--line-height) * 1em);height:var(--icon-size, calc(var(--line-height) * 1em));-webkit-mask-image:var(--hel-icon--alert-circle);mask-image:var(--hel-icon--alert-circle);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);-webkit-mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));vertical-align:bottom;width:calc(var(--line-height) * 1em);width:var(--icon-size, calc(var(--line-height) * 1em));background-color:var(--color-black);content:"";margin-right:var(--spacing-2-xs)}.application-list__item--status--error{background:var(--color-black-20);color:var(--color-black);text-transform:uppercase}.application-list__item--status--error .hel-icon{margin-right:var(--spacing-3-xs)}.application-list__count{font-size:1.5rem}.application-list__count-value{font-weight:bold}.application-list__information-row{align-items:flex-end;display:flex;flex-flow:row nowrap;justify-content:space-between;width:100%}@media(max-width: 35rem){.application-list__information-row{flex-flow:row wrap}}.application-list__information-row .grant-applications--select-wrapper select{max-width:100%;width:322px}.application-list__status__wrapper{background:var(--color-black-5)}.application-list__status__container{display:flex;flex-flow:row wrap;gap:var(--spacing-layout-m);justify-content:flex-start;padding-bottom:var(--spacing-m);padding-top:var(--spacing-m)}.application-list__status__label{font-weight:bold}.application-list__status__value{display:flex;flex-flow:row;justify-items:center;min-height:var(--spacing-xl)}.application-list__status__value>div{margin:auto}.application-list__search-row{align-items:flex-end;display:flex;flex-flow:row nowrap;gap:var(--spacing-s);justify-content:space-between;width:100%}@media(max-width: 35rem){.application-list__search-row{flex-flow:row wrap}}.application-list__search-row .hds-text-input{flex:1 100%;max-width:100%}.application-list__search-row .hds-text-input__input-wrapper{display:block}.application-list__search-row .hds-text-input__input-wrapper input{width:100%}.application-list__search-row button{white-space:nowrap}.application-list__pagination{--line-height: 1.5555555556;font-size:1.125rem;font-weight:400;line-height:var(--line-height);display:inline-flex;flex-wrap:wrap;font-weight:700;gap:var(--spacing-2-xs);justify-content:center;list-style:none;padding:0}.application-list__pagination li{margin-top:0}.application-list__pagination li.active a{text-decoration:underline}.application-list__pagination li.disabled a{cursor:default;text-decoration:none}.application-list__pagination li.disabled a:hover,.application-list__pagination li.disabled a:focus,.application-list__pagination li.disabled a:active{outline:none;text-decoration:none}.application-list__pagination li a{color:var(--color-black-90);display:block;height:var(--link-height);min-width:40px;padding-left:var(--spacing-3-xs);padding-right:var(--spacing-3-xs);text-decoration:none}.application-list__pagination li a:hover{text-decoration:underline}.application-list__pagination li a:focus,.application-list__pagination li a:active{outline:solid var(--color-coat-of-arms) 3px;outline-offset:1px}.grants-profile hr{border:1px solid var(--color-silver);margin:var(--spacing-layout-xs) 0}.grants-profile h3.info-grants{border-bottom:2px solid var(--color-silver);padding-bottom:var(--spacing-l)}.grants-profile--title{align-items:center;display:flex;flex-flow:row nowrap}.grants-profile--title .grants-profile--initials{border-radius:50%;display:none;font-size:var(--fontsize-body-xl);font-weight:bold;height:var(--spacing-4-xl);line-height:var(--spacing-4-xl);margin-right:var(--spacing-m);text-align:center;vertical-align:middle;width:var(--spacing-4-xl)}@media(min-width: 992px){.grants-profile--title .grants-profile--initials{display:block}}.grants-profile--title .grants-profile--initials:hover,.grants-profile--title .grants-profile--initials:active,.grants-profile--title .grants-profile--initials:focus{text-decoration:underline}.grants-profile--title .grants-profile--initials-colorscheme-2{background-color:var(--color-bus);color:var(--color-white)}.grants-profile--title .grants-profile--initials-colorscheme-1{background-color:var(--color-engel);color:var(--color-black)}.grants-profile--title .grants-profile--initials-colorscheme-0{background-color:var(--color-tram);color:var(--color-white)}.grants-profile--title h1{flex-grow:100}.grants-profile--basicinfo{--line-height: 1.5;background-color:var(--color-silver-light);border-bottom:8px solid var(--color-engel-dark);padding-bottom:var(--spacing-2-xs);padding-top:var(--spacing-l)}.grants-profile--basicinfo h3{font-size:var(--fontsize-heading-l);margin-top:0;padding-top:0}.grants-profile--extrainfo{padding-bottom:var(--spacing-l);padding-top:var(--spacing-l)}.grants-profile--extrainfo .hds-notification{margin-bottom:var(--spacing-xl)}.grants-profile--extrainfo fieldset.form-wrapper{background-color:var(--color-silver-light);border:0;padding:var(--spacing-l)}.grants-profile--extrainfo fieldset.inline-error-message{background-color:transparent;background-color:initial;padding:0 0 0 var(--spacing-2-xs)}.grants-profile--extrainfo fieldset.inline-error-message legend{display:none}.grants-profile--update-link{margin-bottom:var(--spacing-layout-2-xs);margin-top:var(--spacing-layout-xs)}.grants-profile--infotext{font-size:var(--fontsize-body-l);margin-bottom:var(--spacing-s)}.grants-profile--wrapper{display:flex;flex-wrap:wrap}.grants-profile--wrapper-item{margin-bottom:var(--spacing-layout-2-xs);width:100%}@media(min-width: 576px){.grants-profile--wrapper-item{flex:1;margin-bottom:0}}.grants-profile--wrapper-item:first-child{flex:auto;margin-bottom:var(--spacing-layout-2-xs);width:100%}.grants-profile .profile-add-more{margin-top:1em}[dir="ltr"] .grants-profile dd{margin-left:0}[dir="rtl"] .grants-profile dd{margin-right:0}.grants-profile--officials{margin-left:0;padding-left:0}.grants-profile--officials-item{border-left:4px var(--color-copper) solid;display:flex;flex-flow:row nowrap;justify-content:space-between;list-style:none;margin-bottom:var(--spacing-layout-s);margin-left:0;max-width:var(--webform-element-width--input-large);padding-left:var(--spacing-layout-xs);width:100%}.grants-profile--officials-item--position{font-size:var(--fontsize-heading-xs);font-weight:bold;margin-bottom:var(--spacing-layout-2-xs);margin-top:0;padding-top:0}.grants-profile--officials-edit-wrapper{text-align:right}.grants-profile--officials-edit-wrapper a{display:inline-block}.grants-profile .hel-icon--check-circle-fill{color:var(--color-success);vertical-align:middle}.grants-profile-grants-profile .tabledrag-toggle-weight-wrapper,.grants-profile-grants-profile .field-multiple-drag{display:none}.grants-profile .hds-text-input__label{display:inline-block;margin-top:0}.page--oma-asiointi__private-person .grants-profile--basicinfo{border-bottom:8px solid var(--color-copper)}.page--oma-asiointi__private-person .grants-profile--wrapper{display:grid;grid-template-columns:1fr 1fr}.page--oma-asiointi__unregistered-community .grants-profile--wrapper{display:grid;grid-template-columns:1fr 1fr}.hds-link .hel-icon{margin-right:var(--spacing-2-xs);vertical-align:bottom}.hds-link span.link-label{font-weight:bold;margin-right:var(--spacing-m)}.bold-link{font-weight:bold}div.applicant-info--from-prh,div.applicant-info--from-grants{display:grid;grid-template-columns:1fr}@media(min-width: 576px){div.applicant-info--from-prh,div.applicant-info--from-grants{grid-template-columns:1fr 1fr}}@media(min-width: 768px){div.applicant-info--from-prh,div.applicant-info--from-grants{grid-template-columns:1fr 1fr 1fr}}div.applicant-info--from-prh .form-required::after,div.applicant-info--from-grants .form-required::after{content:none}div.applicant-info--from-prh{border-bottom:2px solid var(--color-silver);margin-bottom:var(--spacing-layout-xs);padding-bottom:var(--spacing-layout-2-xs)}div.grants-handler--prefilled-field .field-prefix,.grants-profile-prh-info .field-prefix{display:block;position:absolute;right:var(--spacing-layout-s);top:0}div.grants-handler--prefilled-field .hds-text-input__input-wrapper,div.grants-handler--prefilled-field .description,.grants-profile-prh-info .hds-text-input__input-wrapper,.grants-profile-prh-info .description{display:inline-block;white-space:normal}div.grants-handler--prefilled-field .hel-icon--check-circle-fill,.grants-profile-prh-info .hel-icon--check-circle-fill{color:var(--color-success);vertical-align:middle}div.grants-handler--prefilled-field .hds-text-input__input,div.grants-handler--prefilled-field .webform-element-description,.grants-profile-prh-info .hds-text-input__input,.grants-profile-prh-info .webform-element-description{color:var(--color-black);display:block;font-size:var(--fontsize-body-m);line-height:var(--spacing-m);position:relative}div.grants-handler--prefilled-field .hds-text-input__label,.grants-profile-prh-info .hds-text-input__label{margin-bottom:0}.grants-profile--imported-section .webform-section-flex-wrapper{background-color:var(--color-silver-light);border-bottom:8px solid var(--color-engel-dark);display:block;padding-bottom:var(--spacing-2-xs);padding-left:var(--spacing-l);padding-right:var(--spacing-l);padding-top:var(--spacing-l);width:100%}.grants-profile--imported-section .webform-section-flex-wrapper h3.webform-section-title{font-size:var(--fontsize-heading-l);font-weight:400;margin-top:0;max-width:100%;padding-top:0;width:100%}.grants-profile--imported-section .webform-section-flex-wrapper .webform-section-wrapper{padding:0}.grants-profile--imported-section .webform-section-flex-wrapper .hds-text-input{margin-bottom:0}.grants-profile--imported-section .webform-section-flex-wrapper #edit-grants-profile-items-container{display:flex;flex-flow:row wrap;justify-content:space-between;margin-bottom:var(--spacing-layout-xs);margin-top:var(--spacing-layout-xs);width:100%}.grants-profile--imported-section .webform-section-flex-wrapper #edit-grants-profile-items-container>div{margin:0 var(--spacing-layout-xs) 0 0;min-width:160px}.grants-profile--imported-section .webform-section-flex-wrapper #edit-grants-profile-items-container .hds-text-input__input-wrapper{display:none}.grants-profile--imported-section .webform-section-flex-wrapper #edit-grants-profile-items-container label{font-size:var(--fontsize-body-m);font-weight:bold;margin:0}.grants-profile--imported-section .webform-section-flex-wrapper .form-item-prh-markup{border-bottom:2px solid var(--color-silver);padding-bottom:var(--spacing-layout-xs);padding-top:var(--spacing-layout-xs)}.grants-profile__local-tasks__wrapper{margin-bottom:0}.openid-connect-login-form.openid-connect-login-form{border-bottom:0;margin-bottom:0;padding-bottom:0}.grants-profile--links{display:flex;justify-content:space-between}.company-delete-confirm-form .form-actions{margin-top:var(--spacing-layout-xs)}.company-delete-confirm-form .form-submit{margin-right:var(--spacing-2-xs)}.page--oma-asiointi .main-content{margin-top:0}.page--oma-asiointi .main-content h2{margin-top:var(--spacing-m)}.hero--oma-asiointi{margin-bottom:var(--spacing-l)}.hero--oma-asiointi .container{padding-top:var(--spacing-layout-m)}.hero--oma-asiointi .hero__text-content{align-items:center;display:flex}.hero--oma-asiointi .hero__title{margin-left:0}@media(min-width: 576px){.hero--oma-asiointi .hero__title{margin-left:40px}}.hero--oma-asiointi .hel-icon{display:none}@media(min-width: 576px){.hero--oma-asiointi .hel-icon{--icon-size: 48px;display:block;flex-shrink:0}}#oma-asiointi__sent{background:var(--color-silver-light)}#oma-asiointi__sent .application-list__item{background:var(--color-white)}.oma-asiointi-block{background-color:var(--color-silver-light);padding-bottom:var(--spacing-l);padding-top:var(--spacing-l)}.oma-asiointi-block h2{margin-bottom:var(--spacing-s);margin-top:0}.oma-asiointi-block h3{font-size:var(--fontsize-heading-m);font-weight:500}.oma-asiointi-block .header{border-bottom:1px solid var(--color-silver-dark);display:flex;justify-content:space-between;padding-bottom:var(--spacing-xs)}.oma-asiointi-block .header .user,.oma-asiointi-block .header .link{font-weight:700}.oma-asiointi-block .header .link .hel-icon{vertical-align:text-top}.oma-asiointi-block--link{display:block;position:relative;text-decoration:none}.oma-asiointi-block--link::after{--icon-size: 1.5rem;background-color:#000;background-size:contain;content:"";display:inline-block;height:calc(var(--line-height) * 1em);height:var(--icon-size, calc(var(--line-height) * 1em));-webkit-mask-image:var(--hel-icon--arrow-right);mask-image:var(--hel-icon--arrow-right);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);-webkit-mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));vertical-align:bottom;width:calc(var(--line-height) * 1em);width:var(--icon-size, calc(var(--line-height) * 1em));transition:transform .2s linear;bottom:var(--spacing-m);content:"";display:block;flex-shrink:0;margin-left:-4px;margin-top:var(--spacing-2-xs);position:absolute;right:var(--spacing-m)}@media(prefers-reduced-motion){.oma-asiointi-block--link::after{transition:none}}@media(min-width: 576px){.oma-asiointi-block--link::after{--icon-size: 3rem;margin-left:-8px;margin-top:var(--spacing-s)}}.oma-asiointi-block--link:focus::after,.oma-asiointi-block--link:hover::after{transform:translateX(var(--spacing-2-xs))}@media(prefers-reduced-motion){.oma-asiointi-block--link:focus::after,.oma-asiointi-block--link:hover::after{transform:none}}.oma-asiointi-block .new-message{background-color:var(--color-alert);display:inline-block;font-weight:500;padding:var(--spacing-2-xs);text-transform:uppercase}.oma-asiointi-block .new-messages-length{background-color:var(--color-black-20);border-radius:50%;display:inline-block;font-size:var(--fontsize-heading-s);height:30px;line-height:30px;margin-left:var(--spacing-m);position:relative;text-align:center;width:30px}.oma-asiointi-block .new-messages-length.has-new-messages{background-color:var(--color-alert)}@media(min-width: 768px){.oma-asiointi-block .content{display:grid;grid-gap:var(--spacing-s);grid-template-columns:1fr 1fr}}.oma-asiointi-block .submission,.oma-asiointi-block .message{background-color:var(--color-white);margin-bottom:var(--spacing-s);margin-top:var(--spacing-s);padding:var(--spacing-m)}.oma-asiointi-block .submission .submission-title,.oma-asiointi-block .submission .message-title,.oma-asiointi-block .message .submission-title,.oma-asiointi-block .message .message-title{font-size:var(--fontsize-heading-s);font-weight:500;margin-bottom:var(--spacing-2-xs);margin-top:0;text-decoration:underline}.oma-asiointi-block .submission .message-title,.oma-asiointi-block .message .message-title{margin-top:var(--spacing-s)}.oma-asiointi-block .submission:hover .submission-title,.oma-asiointi-block .submission:hover .message-title,.oma-asiointi-block .message:hover .submission-title,.oma-asiointi-block .message:hover .message-title{text-decoration:none}.oma-asiointi-block .message{padding-right:var(--spacing-5-xl)}.oma-asiointi{margin-top:var(--spacing-l)}.oma-asiointi ul{padding:0}.oma-asiointi__list{padding-bottom:var(--spacing-l);padding-top:var(--spacing-l)}.oma-asiointi__list h2{margin-bottom:var(--spacing-m);margin-top:0}.oma-asiointi #oma-asiointi__sent{padding-top:var(--spacing-s)}.oma-asiointi .oma-asiointi-infoboxes-container .oma-asiointi-infoboxes{gap:var(--spacing-3-xl);margin:var(--spacing-2-xl) 0}@media(min-width: 768px){.oma-asiointi .oma-asiointi-infoboxes-container .oma-asiointi-infoboxes{display:flex}}.oma-asiointi .oma-asiointi-infoboxes-container .oma-asiointi-infobox{background-color:var(--color-info-light);flex:1;margin-bottom:var(--spacing-layout-2-xs);padding:var(--spacing-l)}@media(min-width: 768px){.oma-asiointi .oma-asiointi-infoboxes-container .oma-asiointi-infobox{margin-bottom:0}}.oma-asiointi .oma-asiointi-infoboxes-container .oma-asiointi-infobox:last-of-type{margin-bottom:0}.oma-asiointi .oma-asiointi-infoboxes-container .oma-asiointi-infobox--link{display:flex;margin-top:var(--spacing-layout-2-xs)}.oma-asiointi .oma-asiointi-infoboxes-container .oma-asiointi-infobox--link a{font-size:1.25rem}.oma-asiointi .oma-asiointi-infoboxes-container .oma-asiointi-infobox h3{margin-top:0}.asiointirooli-block{background-color:var(--color-black);color:var(--color-white);font-weight:500;margin-bottom:16px;padding:var(--spacing-2-xs)}.asiointirooli-block a{color:var(--color-white)}.asiointirooli-block .link--switch-role,.asiointirooli-block .link--stop-mandate{color:var(--color-white);margin-left:var(--spacing-layout-s)}@media(max-width: 768px){.asiointirooli-block .link--switch-role,.asiointirooli-block .link--stop-mandate{display:block;margin-left:0}}.asiointirooli-block .link--stop-mandate::before{--icon-size: 1.5rem;background-color:#000;background-size:contain;content:"";display:inline-block;height:calc(var(--line-height) * 1em);height:var(--icon-size, calc(var(--line-height) * 1em));-webkit-mask-image:var(--hel-icon--cross-circle-fill);mask-image:var(--hel-icon--cross-circle-fill);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);-webkit-mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));vertical-align:bottom;width:calc(var(--line-height) * 1em);width:var(--icon-size, calc(var(--line-height) * 1em));background-color:var(--color-white);content:"";display:inline-block;margin-right:10px;-webkit-mask-image:url('data:image/svg+xml, ');mask-image:url('data:image/svg+xml, ')}.asiointirooli-block .link--switch-role::before{--icon-size: 1.5rem;background-color:#000;background-size:contain;content:"";display:inline-block;height:calc(var(--line-height) * 1em);height:var(--icon-size, calc(var(--line-height) * 1em));-webkit-mask-image:var(--hel-icon--swap-user);mask-image:var(--hel-icon--swap-user);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);-webkit-mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));vertical-align:bottom;width:calc(var(--line-height) * 1em);width:var(--icon-size, calc(var(--line-height) * 1em));background-color:var(--color-white);content:"";display:inline-block;margin-right:10px;-webkit-mask-image:url('data:image/svg+xml, ');mask-image:url('data:image/svg+xml, ')}#grants-mandate-type .form-actions{display:flex;flex-direction:column;flex-wrap:wrap;justify-content:flex-start;width:100%}@media(min-width: 576px){#grants-mandate-type .form-actions{flex-direction:row;margin-left:calc(-1*var(--spacing-m));width:calc(100% + var(--spacing-m))}}#grants-mandate-type .form-actions .hds-card--applicant-role{margin-bottom:var(--spacing-l);position:relative;width:100%}@media(min-width: 576px){#grants-mandate-type .form-actions .hds-card--applicant-role{margin-left:var(--spacing-m);width:calc(50% - var(--spacing-m))}}@media(min-width: 992px){#grants-mandate-type .form-actions .hds-card--applicant-role{width:calc(33.3333333333% - var(--spacing-m))}}#grants-mandate-type .form-actions .hds-card--applicant-role .hds-card__body{align-content:space-between;height:100%}#grants-mandate-type .form-actions .hds-card--applicant-role .hds-card--mandate-card-content{display:grid;gap:var(--spacing-m);grid-gap:var(--spacing-m)} +body{--webform-element-width--input-small: 184px;--webform-element-width--input-medium: 332px;--webform-element-width--input-large: 591px;--webform-element-width--fieldset: 714px}.hel-icon--size-xs,.hds-icon--size-xs{height:16px;width:16px}.hel-icon--size-s,.hds-icon--size-s{height:24px;width:24px}.hel-icon--size-m,.hds-icon--size-m{height:32px;width:32px}.hel-icon--size-l,.hds-icon--size-l{height:48px;width:48px}.hel-icon--size-xl,.hds-icon--size-xl{height:64px;width:64px}.hel-icon.hel-icon--pen-line{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,");mask-image:url("data:image/svg+xml;charset=utf-8,")}.hel-icon.hds-icon--company{background:var(--color-black);-webkit-mask-image:url("data:image/svg+xml;charset=utf-8, ");mask-image:url("data:image/svg+xml;charset=utf-8, ")}.hds-button--secondary:not(.eu-cookie-compliance-default-button):not(.eu-cookie-compliance-save-preferences-button){--background-color: transparent;--background-color-hover: var(--color-black-80);--background-color-focus: transparent;--background-color-hover-focus: var(--color-black-80);--background-color-disabled: transparent;--color: var(--color-black);--color-hover: var(--color-white);--color-focus: var(--color-black);--color-hover-focus: var(--color-black);--color-disabled: var(--color-black-40)}.hds-button--secondary:not(:disabled):not(.eu-cookie-compliance-default-button):not(.eu-cookie-compliance-save-preferences-button),.hds-button--primary:not(:disabled){border-color:transparent;border-color:var(--color-black, transparent)}.hds-button.hds-button--supplementary .hds-button__label{margin:0;padding:0 var(--spacing-2-xs)}.hds-button.hds-button--supplementary::after,.hds-button.hds-button--supplementary::before{display:none !important}.hds-button--supplementary:not(:disabled){--background-color-hover: rgba(0, 0, 0, 0.1);background:rgba(0,0,0,0);border-color:rgba(0,0,0,0)}.hds-button--supplementary:not(:disabled):hover{background-color:var(--background-color-hover)}.hds-button--alert{--background-color: rgb(255, 0, 0)}a.hds-button.webform-button--delete-draft:not(:disabled){text-decoration:none}a.hds-button.webform-button--delete-draft:not(:disabled) .hds-button__label_wrapper{display:inline}a.hds-button.webform-button--delete-draft:not(:disabled) .hds-button__label{text-decoration:underline}a.hds-button.webform-button--delete-draft:not(:disabled):hover .hds-button__label{text-decoration:none}.openid-connect-login-form input[type=submit].hds-button{width:220px}.hds-button__label_wrapper{align-items:center;display:flex}.hds-button__label_wrapper:not(.hds-button)>.hds-button__label{margin:0 var(--spacing-2-xs)}.hds-link{--link-visited-color: var(--color-black);--link-color: var(--color-black)}.hds-card{--background-color: var(--color-white);--border-color: var(--color-black-90);--color: var(--color-black-90);--border-width: 2px;--padding-horizontal: var(--spacing-l);--padding-vertical: var(--spacing-m);background-color:var(--background-color);color:var(--color);padding:var(--padding-vertical) var(--padding-horizontal)}.hds-card--border{border:var(--border-width) solid var(--border-color)}.hds-card__body{display:grid;grid-gap:var(--spacing-m);gap:var(--spacing-m);margin-bottom:var(--spacing-l)}.hds-card__body:last-child{margin-bottom:0}.hds-card__heading{font-size:var(--fontsize-heading-m);font-weight:bold;line-height:var(--lineheight-m)}.hds-card__text{font-size:var(--fontsize-body-m);line-height:var(--lineheight-l)}.hds-card--applicant-role{margin-bottom:var(--spacing-l);margin-right:0;max-width:400px;width:100%}.hds-card__heading-m{font-size:var(--fontsize-heading-m);font-weight:500;letter-spacing:-0.2px;line-height:32px;margin-top:0}.grants-profile--menuitem--login,.grants-profile--menuitem--logout{align-items:center;display:flex;flex-flow:column;font-size:var(--fontsize-body-s);height:var(--spacing-xl);margin-left:var(--spacing-2-xs);margin-right:var(--spacing-2-xs);position:relative;text-align:center;width:var(--spacing-xl)}.grants-profile--menuitem--login .hel-icon,.grants-profile--menuitem--logout .hel-icon{display:block;margin:auto}.grants-profile--menuitem--login-triggertext,.grants-profile--menuitem--logout-triggertext{clip:rect(1px, 1px, 1px, 1px);-webkit-clip-path:inset(50%);clip-path:inset(50%);display:block;max-height:1px;max-width:1px;opacity:0;overflow:hidden;position:absolute;white-space:nowrap}.block--grants-profile--menuitem{align-items:center;display:flex;grid-area:brand;z-index:2}.block--branding{flex-grow:10}.grants-frontpage-info-block{margin-bottom:var(--spacing-layout-xl)}.grants-profile--menuitem{height:var(--spacing-m);margin-left:var(--spacing-2-xs);margin-right:var(--spacing-2-xs);position:relative;width:var(--spacing-m)}@media(min-width: 768px){.grants-profile--menuitem{height:var(--spacing-2-xl);width:var(--spacing-2-xl)}}.grants-profile--menuitem a{text-decoration:none}.grants-profile--menuitem--notifications{background-color:var(--color-error);border:2px var(--color-white) solid;border-radius:50%;color:var(--color-white);font-size:var(--fontsize-body-s);font-weight:bold;height:var(--spacing-xs) 1.25;line-height:var(--spacing-layout-2-xs);position:absolute;right:-5px;text-align:center;top:-5px;width:var(--spacing-xs) 1.25;z-index:2}.grants-profile--menuitem--initials{border-radius:50%;font-weight:bold;height:var(--spacing-m);line-height:var(--spacing-m);text-align:center;vertical-align:middle;width:var(--spacing-m)}@media(min-width: 768px){.grants-profile--menuitem--initials{height:var(--spacing-2-xl);line-height:var(--spacing-2-xl);width:var(--spacing-2-xl)}}.grants-profile--menuitem--initials:hover,.grants-profile--menuitem--initials:active,.grants-profile--menuitem--initials:focus{text-decoration:underline}.grants-profile--menuitem--initials-colorscheme-2{background-color:var(--color-bus);color:var(--color-white)}.grants-profile--menuitem--initials-colorscheme-1{background-color:var(--color-engel);color:var(--color-black)}.grants-profile--menuitem--initials-colorscheme-0{background-color:var(--color-tram);color:var(--color-white)}.sidebar-important-links{margin-top:var(--spacing-2-xl)}.sidebar-important-links .sidebar-text .sidebar-text__text-content>p{padding:var(--spacing-s) var(--spacing-m)}.block--service-page-banner{background-color:var(--color-engel);margin-top:var(--spacing-layout-s);padding:var(--spacing-layout-s)}.block--service-page-banner h2{margin-top:0}.block--service-page-banner .hds-icon{margin-bottom:var(--spacing-layout-s)}.hds-button.service-page-sidebar-link{background-color:var(--hdbt-color-palette--secondary);padding:var(--spacing-xs)}.hds-button.service-page-sidebar-link:hover{color:var(--color-black)}.terms_block{padding-bottom:var(--spacing-4-xl)}#block-servicepageauthblock h2,#block-servicepageanonblock h2{--line-height: 1.3;font-size:1.25rem;font-weight:500;line-height:var(--line-height)}@media(min-width: 992px){#block-servicepageauthblock h2,#block-servicepageanonblock h2{--line-height: 1.1666666667;font-size:1.5rem;font-weight:500}}#block-servicepageauthblock .hds-button,#block-servicepageanonblock .hds-button{margin-top:var(--spacing-m)}.grants-service-page-block{background-color:var(--color-alert-light);margin-top:var(--spacing-m);padding:var(--spacing-m)}.grants-service-page-block h3{font-size:var(--fontsize-heading-s);margin-top:0}.grants-service-page-block .hel-icon{vertical-align:text-bottom}.grants-service-page-block--auth{background-color:var(--color-info-light)}.hel-icon.hel-icon--swap-user{-webkit-mask-image:url('data:image/svg+xml, ');mask-image:url('data:image/svg+xml, ')}.nav-toggle-dropdown--profile .profile__information{background-color:var(--color-silver-light)}.nav-toggle-dropdown--profile .profile__full-name{font-weight:bold}.nav-toggle-dropdown--profile .grants-profile--menuitem--mandate,.nav-toggle-dropdown--profile .grants-profile--menuitem--switch-role{--line-height: 1.5555555556;font-size:1.125rem;font-weight:400;line-height:var(--line-height);border-top:1px solid #ccc;border-bottom:1px solid #ccc;display:block;font-weight:normal;padding:16px;text-decoration:none;width:100%}@media(min-width: 992px){.nav-toggle-dropdown--profile .grants-profile--menuitem--mandate,.nav-toggle-dropdown--profile .grants-profile--menuitem--switch-role{border-bottom:none}}.nav-toggle-dropdown--profile .grants-profile--menuitem--mandate:hover,.nav-toggle-dropdown--profile .grants-profile--menuitem--switch-role:hover{text-decoration:underline}.nav-toggle-dropdown--profile .grants-profile--menuitem--mandate:focus,.nav-toggle-dropdown--profile .grants-profile--menuitem--switch-role:focus{outline:3px solid #000;outline-offset:-3px}.application-timeout-message{display:none;padding-left:16px;padding-left:var(--spacing-s, 16px);position:fixed;right:0;top:50%;z-index:100}.application-timeout-message.slide-in{animation:slide-in-right .5s forwards ease;display:block}.application-timeout-message .close-application-timeout-message{cursor:pointer;font-size:1.25rem;position:absolute;right:1.25rem}@keyframes slide-in-right{from{right:-500px}to{right:1.25rem}}.view_application_search_search_api .main-content{margin-top:0}.view_application_search_search_api .search-result-amount--wrapper{align-items:center;display:flex}.view_application_search_search_api .search-result-amount--wrapper p{margin-top:0}.view_application_search_search_api select.search-result-amount{border:1px solid var(--color-black-50);margin-left:var(--spacing-l);margin-right:var(--spacing-2-xs)}.view_application_search_search_api .search-filter-button{background-color:var(--color-black);border-radius:180px;border:0;color:var(--color-white);display:inline-block;margin:0 var(--spacing-2-xs) var(--spacing-2-xs) 0;padding:var(--spacing-2-xs) var(--spacing-xs)}.view_application_search_search_api .search-filter-button:focus{--focus-outline-color: #000000;box-shadow:none;outline:3px solid var(--focus-outline-color);outline:var(--outline-width, 3px) solid var(--focus-outline-color);outline-offset:2px;outline-offset:var(--outline-gutter, 2px)}.view_application_search_search_api .search-filter-button span{vertical-align:middle}.view_application_search_search_api .search-filter-button span.hel-icon:hover{cursor:pointer}.view-application-search-search-api .main-content{margin-top:var(--spacing-layout-s)}.view-application-search-search-api .main-content .view-header{align-items:center;display:flex;margin-bottom:var(--spacing-layout-s)}.application_search--link{display:block;height:100%;padding-bottom:var(--spacing-m);position:relative;text-decoration:none}.application_search--link::after{--icon-size: 1.5rem;background-color:#000;background-size:contain;content:"";display:inline-block;height:calc(var(--line-height) * 1em);height:var(--icon-size, calc(var(--line-height) * 1em));-webkit-mask-image:var(--hel-icon--arrow-right);mask-image:var(--hel-icon--arrow-right);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);-webkit-mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));vertical-align:bottom;width:calc(var(--line-height) * 1em);width:var(--icon-size, calc(var(--line-height) * 1em));transition:transform .2s linear;bottom:var(--spacing-s);content:"";display:block;flex-shrink:0;left:var(--spacing-m);margin-left:-4px;margin-top:8px;position:absolute}@media(prefers-reduced-motion){.application_search--link::after{transition:none}}@media(min-width: 576px){.application_search--link::after{--icon-size: 3rem;margin-left:-8px;margin-top:16px}}.application_search--link:focus h3,.application_search--link:hover h3{text-decoration:none}.application_search--link:focus::after,.application_search--link:hover::after{transform:translateX(8px)}@media(prefers-reduced-motion){.application_search--link:focus::after,.application_search--link:hover::after{transform:none}}.application_search--filter-wrapper{background:var(--color-black-5)}.application_search--filter-wrapper h2{font-size:var(--fontsize-heading-m);margin-bottom:var(--spacing-layout-s);margin-top:var(--spacing-layout-s)}.application_search--filter-wrapper form{align-items:center;border-bottom:2px solid var(--color-black-20);display:flex;flex-flow:row wrap;gap:var(--spacing-s);justify-content:space-between;margin-bottom:var(--spacing-layout-s);padding-bottom:var(--spacing-layout-s)}.application_search--filter-wrapper form .form-item{margin-bottom:0;min-width:-moz-fit-content;min-width:fit-content;width:calc((100% - var(--spacing-s) - var(--spacing-s))/3)}.application_search--filter-wrapper form .form-item label{color:var(--label-color-default);font-size:var(--fontsize-body-m);font-weight:500;margin-bottom:var(--spacing-3-xs)}.application_search--filter-wrapper form .form-item .grant-applications--select-wrapper{min-width:100%;width:100%}.application_search--filter-wrapper form .hds-text-input:first-child{max-width:none;width:100%}.application_search--filter-wrapper form .hds-text-input:first-child input{width:100%}.application_search--filter-wrapper form .form-actions{align-items:center;display:flex;gap:16px;order:6;padding-top:var(--spacing-m);width:100%}@media(min-width: 768px){.application_search--filter-wrapper form .form-actions{width:17%}}.application_search--filter-wrapper form .form-actions input{min-width:250px;width:100%}.application_search--filter-wrapper form .form-item-items-per-page{display:none}.application_search--filter-wrapper form .form-item-kohderyhma{order:1}.application_search--filter-wrapper form .form-item-avustuslaji{order:2}.application_search--filter-wrapper form .form-item-hakija{order:3}.application_search--filter-wrapper form .form-item-search{max-width:100%;order:4;width:50%}.application_search--filter-wrapper form .form-item-application-open{page-break-before:left;-moz-column-break-before:left;break-before:left;display:block;margin-top:var(--spacing-m);order:5;width:30%}.application_search--filter-wrapper form [data-drupal-selector=edit-reset]{background-color:rgba(0,0,0,0);border:0;color:var(--color-black)}.application_search--filter-wrapper .hds-koros svg pattern{color:var(--color-black-5)}.application_search--filter-wrapper .hero .hero__container{padding-bottom:var(--spacing-m)}.application_search--filters{padding-bottom:var(--spacing-layout-m);padding-top:0}.application_search--rows{display:flex;flex-direction:column;flex-wrap:wrap;justify-content:flex-start;width:100%}@media(min-width: 576px){.application_search--rows{flex-direction:row;margin-left:calc(-1*var(--spacing-m));width:calc(100% + var(--spacing-m))}}.application_search--row{box-shadow:1px 2px 4px 0 rgba(0,0,0,.5);margin-bottom:var(--spacing-l);position:relative;width:100%}@media(min-width: 576px){.application_search--row{margin-left:var(--spacing-m);width:calc(50% - var(--spacing-m))}}@media(min-width: 992px){.application_search--row{width:calc(33.3333333333% - var(--spacing-m))}}.application_search--row h3{font-size:var(--fontsize-heading-m);margin-top:var(--spacing-xs)}.application_search--row .views-field-search-api-excerpt{height:auto;overflow:auto;word-break:normal}.application_search--row .views-field{padding:var(--spacing-xs) var(--spacing-m)}.application_search--row .views-field-field-target-group{padding:0}.application_search--row .views-field-field-avustuslaji{padding:var(--spacing-xs) var(--spacing-m) var(--spacing-layout-m) var(--spacing-m)}.application_search--row .views-field-field-avustuslaji .tag_avustuslaji{background:var(--color-black);border-radius:var(--spacing-m);color:var(--color-white);display:inline-block;margin-bottom:var(--spacing-2-xs);padding:var(--spacing-3-xs) var(--spacing-xs)}.application_search--row .views-field-field-application-period .field-content{align-items:center;display:flex;gap:var(--spacing-s);position:relative}.application_search--row .views-field-field-application-period .field-content span{display:block}.application_search--row .tag_target_group{background:var(--color-black-20);color:var(--color-black);font-size:var(--fontsize-body-s);font-weight:bold;padding:var(--spacing-m);text-align:center;text-transform:uppercase;width:100%}.application_search--row .tag_target_group_12{background:var(--color-brick-medium-light)}.application_search--row .tag_target_group_20{background:var(--color-copper)}.application_search--row .tag_target_group_21{background:var(--color-metro-medium-light)}.application_search--row .tag_target_group_22{background:var(--color-suomenlinna-medium-light)}.application_search--row .tag_target_group_23{background:var(--color-engel)}.application_search--row .tag_target_group_24{background:var(--color-bus-medium-light)}.application_search--row .tag_target_group_25{background:var(--color-coat-of-arms-medium-light)}.application_search--row .tag_target_group_26{background:var(--color-gold-medium-light)}.application_search--row .tag_target_group_27{background:var(--color-tram-medium-light)}.application_search--row .tag_target_group_28{background:var(--color-summer-light)}.application_search--row .tag_target_group_29{background:var(--color-fog)}.application_search--row .tag_target_group_30{background:var(--color-copper-light)}.application_search--row .tag_target_group_31{background:var(--color-gold)}.view-ukk .view-filters{display:none}.view-ukk .ukk_categories{display:block;margin:var(--spacing-xl) 0;padding:0}.view-ukk .ukk_categories li{display:inline-block;list-style:none;margin:var(--spacing-m) var(--spacing-s) 0 0;padding:0}.view-ukk .hero .hero__text-content{max-width:100%}.view-ukk #edit-field-category-target-id{display:flex}.view-ukk #edit-field-category-target-id .hds-radio-button:first-of-type{margin-top:var(--spacing-2-xs)}.view-ukk #edit-field-category-target-id .hds-radio-button .hds-radio-button__input:checked+.hds-radio-button__label{background:var(--color-black);border-radius:var(--spacing-m);color:var(--color-white);padding:var(--spacing-2-xs) var(--spacing-s)}.view-ukk #edit-field-category-target-id .hds-radio-button__label{padding:var(--spacing-2-xs) var(--spacing-s)}.view-ukk #edit-field-category-target-id .hds-radio-button__label::before,.view-ukk #edit-field-category-target-id .hds-radio-button__label::after{display:none}.view-ukk .views-exposed-form fieldset{margin-bottom:0}.view-ukk .views-exposed-form .form-submit{margin-bottom:var(--spacing-l)}.view-ukk .category{background:var(--color-black);border-radius:var(--spacing-m);color:var(--color-white);display:inline-block;padding:var(--spacing-2-xs) var(--spacing-s);text-decoration:none}.view-ukk .category-unselected{background:var(--color-black-20);color:var(--color-black)}.page--select-applicant-role{background-color:var(--color-black-5)}.page--select-applicant-role body{background-color:var(--color-black-5)}.page--select-applicant-role .layout-main-wrapper{background-color:var(--color-black-5)}.page--select-applicant-role .main-content{margin-top:var(--spacing-l)}.page--select-applicant-role h1{margin-top:var(--spacing-l)}.page--select-applicant-role p{margin-bottom:var(--spacing-m)}.node--type-service .errand-service__channels .service-channel__links a[href^="https://avustukset.hel.fi"]{display:none}.node--type-service .service-channel__info p:first-of-type{margin-top:0}.node--type-service .service-channel--mail{display:none}#block-servicepageauthblock-2,#block-servicepageanonblock-2,#block-grantspreviewlink-2{display:none}@media(max-width: 767.9px){#block-servicepageauthblock-2,#block-servicepageanonblock-2,#block-grantspreviewlink-2{display:block;margin:var(--spacing-s)}}@media(max-width: 991.9px){#block-servicepageauthblock-2,#block-servicepageanonblock-2,#block-grantspreviewlink-2{display:block;margin:var(--spacing-l)}}#block-servicepageauthblock-2>.grants-service-page-block>*,#block-servicepageanonblock-2>.grants-service-page-block>*,#block-grantspreviewlink-2>.grants-service-page-block>*{margin:var(--spacing-2-xs) 0 var(--spacing-2-xs) var(--spacing-2-xs)}@media(max-width: 991.9px){#block-servicepageauthblock-2 .node--type-service a.hds-button[href*=uusi-hakemus],#block-servicepageanonblock-2 .node--type-service a.hds-button[href*=uusi-hakemus],#block-grantspreviewlink-2 .node--type-service a.hds-button[href*=uusi-hakemus]{display:none}}.user-login__text-container{background:var(--color-white);max-width:500px;padding:var(--spacing-m)}.user-login__text-container p:first-of-type{margin-top:0}.tabs{--tablist-border-color: var(--color-black-20);--tablist-border-size: 1px;--tab-color: var(--color-black);--tab-font-size: var(--fontsize-body-m);--tab-height: 48px;--tab-min-width: 148px;--tab-spacing: var(--spacing-s);--tab-active-border-size: 5px;--tab-active-border-color: var(--color-black);--tab-focus-outline-size: 2px;--tab-focus-outline-color: var(--color-coat-of-arms);display:flex;flex-flow:row wrap}.tabs--tablist{box-sizing:border-box;flex-grow:1;margin-bottom:-1px;overflow-x:hidden;position:relative;width:100%}.tabs--content-wrapper{width:100%}.tabs--content-wrapper .container{padding-top:1px}.tabs [role=tablist]{box-sizing:border-box;list-style:none;margin:0;padding:var(--tab-focus-outline-size) 0;white-space:nowrap}.tabs [role=tab]{background:rgba(0,0,0,0);border:0;cursor:pointer;display:inline-block;margin:0;outline:none;padding:0}.tabs [role=tab] span{align-items:center;box-sizing:border-box;color:var(--tab-color);display:flex;font-size:var(--tab-font-size);height:var(--tab-height);justify-content:center;margin:0;min-width:var(--tab-min-width);padding:0 var(--tab-spacing);pointer-events:none;position:relative}.tabs [role=tab] span::before{background:var(--tablist-border-color);bottom:0;content:"";height:var(--tablist-border-size);position:absolute;width:100%;z-index:100}.tabs [role=tab] span:hover::before,.tabs [role=tab] span:focus::before,.tabs [role=tab][aria-selected=true] span::before{background-color:var(--tab-active-border-color);bottom:0;content:"";height:var(--tab-active-border-size);position:absolute;width:100%;z-index:100}.tabs [role=tabpanel].is-hidden{display:none}.node--form-page .list-of-links{margin-left:0;margin-top:0;width:100%}@media(min-width: 768px){.node--form-page .list-of-links{margin-top:0}}.node--form-page .list-of-links>.container{padding-top:0}.node--form-page .list-of-links .list-of-links__title{border-top:2px solid var(--color-black-20);margin:0 0 var(--spacing-layout-xl)}@media(min-width: 576px){.node--form-page .list-of-links .list-of-links__container{width:calc(100% - var(--spacing-layout-xl))}}@media(min-width: 768px){.node--form-page .list-of-links .list-of-links__container{width:100%}}.node--form-page .list-of-links .list-of-links__content{height:auto;margin-top:0}@media(min-width: 768px){.node--form-page .list-of-links .list-of-links__content{display:grid;grid-template-columns:auto auto auto;margin:0 var(--spacing-m) 0 0}}.node--form-page .list-of-links .list-of-links__item{align-self:stretch;border-left:4px solid var(--color-copper);margin-right:-4px;padding-left:var(--spacing-m);padding-right:var(--spacing-m)}.list-of-links--without-image .list-of-links__item .list-of-links__item__desc{color:var(--color-black-90);font-size:var(--fontsize-body-m)}.list-of-links--without-image .list-of-links__item .list-of-links__item__title{font-size:var(--fontsize-heading-m)}.js-form-type-webform-custom-composite{--border-width: 2px;--outline-width: 3px;--input-height: 56px;--textarea-height: 149px;--icon-size: var(--spacing-m);--helper-color-default: var(--color-black-60);--helper-color-invalid: var(--color-error);--icon-color-invalid: var(--color-error);--input-background-default: var(--color-white);--input-background-disabled: var(--color-black-10);--input-border-color-default: var(--color-black-50);--input-border-color-hover: var(--color-black-90);--input-border-color-focus: var(--color-black-90);--input-border-color-invalid: var(--color-error);--input-border-color-disabled: var(--color-black-10);--input-color-default: var(--color-black-90);--input-color-disabled: var(--color-black-40);--label-color-default: var(--color-black-90);--label-color-invalid: var(--color-black-90);--placeholder-color: var(--color-black-60);--focus-outline-color: var(--color-coat-of-arms)}.js-form-type-webform-custom-composite a.tabledrag-handle .handle{height:24px;width:24px}.js-form-type-webform-custom-composite input.form-number{background-color:var(--input-background-default);border:var(--border-width) solid var(--input-border-color-default);box-sizing:border-box;color:var(--input-color-default);font-size:1.125em;height:var(--input-height);line-height:normal;padding:0 var(--spacing-s);width:100%}.js-form-type-webform-custom-composite table{border-collapse:collapse;border-spacing:0;margin-bottom:var(--spacing-m)}.js-form-type-webform-custom-composite table td{border-bottom:2px var(--color-black-20) solid;border-top:2px var(--color-black-20) solid;padding-left:var(--spacing-m);padding-top:var(--spacing-m)}@media(max-width: 768px){.js-form-type-webform-custom-composite table td{border:2px var(--color-black-20) solid}}.js-form-type-webform-custom-composite table td.webform-multiple-table--operations{border-bottom:2px var(--color-black-20) solid;border-top:2px var(--color-black-20) solid;padding-left:var(--spacing-m);padding-top:var(--spacing-m)}@media(max-width: 768px){.js-form-type-webform-custom-composite table td.webform-multiple-table--operations{background:var(--color-white);border:2px var(--color-black-20) solid;padding:10px 5px 5px}}.js-form-type-webform-custom-composite table td:first-child{border-left:2px var(--color-black-20) solid}.js-form-type-webform-custom-composite table td:last-child{border-right:2px var(--color-black-20) solid;padding:var(--spacing-s)}@media(min-width: 768px){.js-form-type-webform-custom-composite table td:last-child{min-width:400px;padding:var(--spacing-s) var(--spacing-m)}}div.ui-widget.ui-datepicker{padding:var(--spacing-2-xs)}div.ui-widget.ui-datepicker .ui-datepicker-header span.ui-icon{margin-left:-8px;margin-top:-8px;-webkit-mask-image:none;mask-image:none;transform:none}div.ui-widget.ui-datepicker .ui-datepicker-calendar{border:0;display:table;margin:0;max-width:100%}div.ui-widget.ui-datepicker .ui-datepicker-calendar th,div.ui-widget.ui-datepicker .ui-datepicker-calendar td{min-width:auto}details.accordion{--background-color: var(--color-white);--border-color: var(--color-black-60);--padding-horizontal: var(--spacing-m);--padding-vertical: var(--spacing-m);--header-font-color: var(--color-black-90);--header-font-size: var(--fontsize-heading-m);--header-line-height: var(--lineheight-m);--button-size: 28px;--header-focus-outline-color: var(--color-coat-of-arms);--content-font-color: var(--color-black-90);--content-font-size: var(--fontsize-body-m);--content-line-height: var(--lineheight-l);border-bottom:1px solid var(--border-color)}details.accordion .accordion_content{padding-bottom:var(--padding-vertical)}details.accordion[open] .accordion_heading_container span.hel-icon{transform:rotate(180deg)}.accordion_header{align-items:center;color:var(--header-font-color);display:flex;font-size:var(--header-font-size);font-weight:700;justify-content:space-between;line-height:var(--header-line-height);list-style:none;padding-bottom:var(--padding-vertical);padding-top:var(--padding-vertical);position:relative}.accordion_heading_container{align-items:center;box-sizing:border-box;cursor:pointer;display:grid;grid-template-columns:auto calc(var(--button-size));width:100%}.accordion_heading_container span.hel-icon{height:var(--button-size) !important;width:var(--button-size) !important}.accordion_heading_container span.hel-icon{border:2px solid rgba(0,0,0,0);box-sizing:border-box;margin:auto}.webform-element-description{margin-top:8px}.webform-element-help{background:var(--color-white);border:2px solid rgba(0,0,0,0);color:var(--hdbt-color-black);height:var(--spacing-layout-xs);margin-right:4px;padding:0;position:absolute;right:0;top:-3px;width:var(--spacing-layout-xs);z-index:10}div[data-tippy-root]{width:350px}.tippy-box{background-color:var(--color-black-5);border-left:var(--spacing-xs) var(--color-coat-of-arms) solid;border-radius:0;color:var(--hdbt-color-black);padding:var(--spacing-s)}.tippy-box .webform-element-help--content{white-space:normal}.tippy-box .webform-element-help--content a:link,.tippy-box .webform-element-help--content a:visited,.tippy-box .webform-element-help--content a:active,.tippy-box .webform-element-help--content a:hover{color:var(--hdbt-color-black)}.tippy-arrow{color:var(--color-black-5)}.webform-element-help--wrapper-short{max-width:-moz-fit-content;max-width:fit-content}.webform-element-help-container--title{--border-width: 2px;--outline-width: 3px;--input-height: 56px;--textarea-height: 149px;--icon-size: var(--spacing-m)}fieldset.grants-fieldset{padding:var(--spacing-s)}@media(min-width: 768px){fieldset.grants-fieldset{min-width:400px;padding:var(--spacing-s) var(--spacing-m)}}fieldset.grants-fieldset .fieldset-wrapper{align-items:flex-end;display:flex;flex-wrap:wrap;gap:0 var(--spacing-layout-2-xs)}fieldset.grants-fieldset .fieldset-wrapper .form-item--error-message{grid-column:1}fieldset.grants-fieldset-short{max-width:var(--webform-element-width--input-large)}fieldset.grants-fieldset-medium{max-width:var(--webform-element-width--fieldset)}fieldset.grants-fieldset-medium .fieldset-wrapper{justify-content:center}fieldset.premises-composite--wrapper.fieldgroup,fieldset.rented-premise-composite--wrapper.fieldgroup,.community_officials_wrapper fieldset.fieldgroup,fieldset.grants-budget-other-cost--wrapper.fieldgroup,fieldset.grants-budget-other-income--wrapper.fieldgroup,fieldset.place-of-operation-composite--wrapper.fieldgroup,fieldset.rent-income-composite--wrapper.fieldgroup,fieldset.rent-cost-composite--wrapper.fieldgroup,fieldset.club-section-composite--wrapper.fieldgroup,fieldset.members-composite--wrapper.fieldgroup,fieldset.orienteering-map-composite--wrapper,.form-item-muu-liite fieldset.grants-attachments--wrapper.fieldgroup{border-width:2px;margin-top:var(--spacing-layout-2-xs);max-width:100%;padding:var(--spacing-s);width:100%}@media(min-width: 768px){fieldset.premises-composite--wrapper.fieldgroup,fieldset.rented-premise-composite--wrapper.fieldgroup,.community_officials_wrapper fieldset.fieldgroup,fieldset.grants-budget-other-cost--wrapper.fieldgroup,fieldset.grants-budget-other-income--wrapper.fieldgroup,fieldset.place-of-operation-composite--wrapper.fieldgroup,fieldset.rent-income-composite--wrapper.fieldgroup,fieldset.rent-cost-composite--wrapper.fieldgroup,fieldset.club-section-composite--wrapper.fieldgroup,fieldset.members-composite--wrapper.fieldgroup,fieldset.orienteering-map-composite--wrapper,.form-item-muu-liite fieldset.grants-attachments--wrapper.fieldgroup{min-width:400px;padding:var(--spacing-s) var(--spacing-m)}}fieldset.premises-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.rented-premise-composite--wrapper.fieldgroup legend>span.visually-hidden,.community_officials_wrapper fieldset.fieldgroup legend>span.visually-hidden,fieldset.grants-budget-other-cost--wrapper.fieldgroup legend>span.visually-hidden,fieldset.grants-budget-other-income--wrapper.fieldgroup legend>span.visually-hidden,fieldset.place-of-operation-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.rent-income-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.rent-cost-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.club-section-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.members-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.orienteering-map-composite--wrapper legend>span.visually-hidden,.form-item-muu-liite fieldset.grants-attachments--wrapper.fieldgroup legend>span.visually-hidden{background:#fff;-webkit-clip-path:initial;clip-path:initial;clip:auto;clip:initial;height:auto;margin-left:calc(var(--spacing-2-xs)*-1);left:auto;overflow:visible;padding:0 var(--spacing-2-xs);top:-12px;width:-moz-max-content;width:max-content}fieldset.premises-composite--wrapper.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)],fieldset.rented-premise-composite--wrapper.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)],.community_officials_wrapper fieldset.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)],fieldset.grants-budget-other-cost--wrapper.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)],fieldset.grants-budget-other-income--wrapper.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)],fieldset.place-of-operation-composite--wrapper.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)],fieldset.rent-income-composite--wrapper.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)],fieldset.rent-cost-composite--wrapper.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)],fieldset.club-section-composite--wrapper.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)],fieldset.members-composite--wrapper.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)],fieldset.orienteering-map-composite--wrapper legend>span.visually-hidden[\:has\(button.webform-element-help\)],.form-item-muu-liite fieldset.grants-attachments--wrapper.fieldgroup legend>span.visually-hidden[\:has\(button.webform-element-help\)]{padding-right:var(--spacing-xl)}fieldset.premises-composite--wrapper.fieldgroup legend>span.visually-hidden:has(button.webform-element-help),fieldset.rented-premise-composite--wrapper.fieldgroup legend>span.visually-hidden:has(button.webform-element-help),.community_officials_wrapper fieldset.fieldgroup legend>span.visually-hidden:has(button.webform-element-help),fieldset.grants-budget-other-cost--wrapper.fieldgroup legend>span.visually-hidden:has(button.webform-element-help),fieldset.grants-budget-other-income--wrapper.fieldgroup legend>span.visually-hidden:has(button.webform-element-help),fieldset.place-of-operation-composite--wrapper.fieldgroup legend>span.visually-hidden:has(button.webform-element-help),fieldset.rent-income-composite--wrapper.fieldgroup legend>span.visually-hidden:has(button.webform-element-help),fieldset.rent-cost-composite--wrapper.fieldgroup legend>span.visually-hidden:has(button.webform-element-help),fieldset.club-section-composite--wrapper.fieldgroup legend>span.visually-hidden:has(button.webform-element-help),fieldset.members-composite--wrapper.fieldgroup legend>span.visually-hidden:has(button.webform-element-help),fieldset.orienteering-map-composite--wrapper legend>span.visually-hidden:has(button.webform-element-help),.form-item-muu-liite fieldset.grants-attachments--wrapper.fieldgroup legend>span.visually-hidden:has(button.webform-element-help){padding-right:var(--spacing-xl)}@media(min-width: 768px){fieldset.premises-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.rented-premise-composite--wrapper.fieldgroup legend>span.visually-hidden,.community_officials_wrapper fieldset.fieldgroup legend>span.visually-hidden,fieldset.grants-budget-other-cost--wrapper.fieldgroup legend>span.visually-hidden,fieldset.grants-budget-other-income--wrapper.fieldgroup legend>span.visually-hidden,fieldset.place-of-operation-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.rent-income-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.rent-cost-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.club-section-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.members-composite--wrapper.fieldgroup legend>span.visually-hidden,fieldset.orienteering-map-composite--wrapper legend>span.visually-hidden,.form-item-muu-liite fieldset.grants-attachments--wrapper.fieldgroup legend>span.visually-hidden{left:auto}}.form-item-muu-liite fieldset.grants-attachments--wrapper{margin-bottom:0}fieldset.webform-composite-hidden-title .fieldset-wrapper>.form-item:last-child{margin-bottom:var(--spacing-layout-xs)}.js-form-type-webform-table table{width:100%}.js-form-type-webform-table th{text-align:left}.js-form-type-webform-table td{vertical-align:middle}.js-form-type-webform-table td>div{height:auto;margin-bottom:0}.js-form-type-webform-table td>div label{margin:-1px}.js-form-type-webform-table .hds-text-input label{border:0;clip:rect(0, 0, 0, 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.form-item{margin-bottom:var(--spacing-layout-xs);position:relative}.form-item input[type=date],.form-item input[type=time]{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--input-background-default);border:var(--border-width) solid var(--input-border-color-default);box-sizing:border-box;color:var(--input-color-default);font-size:1.125em;height:var(--input-height);line-height:normal;padding:0 var(--spacing-s);width:100%;will-change:transform,box-shadow}.webform-section{padding-bottom:var(--spacing-layout-2-xs)}.webform-section table:first-of-type{margin-top:0}.form-type-webform-multiple .webform-multiple-table table{max-width:100%;width:100%}@media(min-width: 768px){.form-type-webform-multiple .webform-multiple-table table{width:auto}}.hds-text-input{max-width:-moz-fit-content;max-width:fit-content;width:100%}.webform-section-grid-wrapper{display:grid;grid-template-columns:1fr}@media(min-width: 768px){.webform-section-grid-wrapper{grid-row-gap:var(--spacing-xl);grid-template-columns:1fr 2fr}}.webform-section-grid-wrapper>dt.webform-section-title{color:var(--hdbt-color-black);display:block;flex-shrink:0;font-size:var(--fontsize-heading-s);font-weight:500;-webkit-hyphens:none;hyphens:none;line-height:1;margin-bottom:var(--spacing-3-xs);margin-top:0;padding-right:var(--spacing-2-xl);width:100%}.webform-section-grid-wrapper .webform-section-wrapper{margin-bottom:var(--spacing-layout-xs);padding-left:var(--spacing-2-xl)}@media(min-width: 768px){.webform-section-grid-wrapper .webform-section-wrapper{margin-bottom:0;padding-left:0}}fieldset input[type=button]{margin-top:var(--spacing-m)}.webform-section-wrapper>.description{margin-bottom:var(--spacing-layout-xs)}.grants__page-header{margin-bottom:var(--spacing-layout-l);font-size:2rem}@media(min-width: 768px){.grants__page-header{font-size:3rem}}.webform-section-flex-wrapper{display:flex;flex-flow:row wrap;width:100%;justify-content:left}@media(min-width: 768px){.webform-section-flex-wrapper{flex-flow:row nowrap}.webform-section-flex-wrapper h3+*>*:first-child>label:first-of-type,.webform-section-flex-wrapper h3+*>*:first-child>*:first-child>label:first-of-type{margin-top:var(--spacing-2-xs);padding-top:0}.webform-section-flex-wrapper h3+*>*:first-child>p{line-height:normal;line-height:initial;margin-top:var(--spacing-2-xs)}.webform-section-flex-wrapper h3+*>*:first-child>h4{line-height:normal;line-height:initial;margin-top:var(--spacing-m)}}.webform-section-flex-wrapper .webform-element-help-container--title{position:relative}.webform-section-flex-wrapper>h2.webform-section-title,.webform-section-flex-wrapper>h3.webform-section-title,.webform-section-flex-wrapper>h4.webform-section-title,.webform-section-flex-wrapper>dt.webform-section-title{color:var(--hdbt-color-black);display:block;flex-shrink:0;font-size:24px;font-weight:500;-webkit-hyphens:manual;hyphens:manual;margin-bottom:var(--spacing-3-xs);margin-top:0;padding-right:var(--spacing-2-xl);width:100%}@media(min-width: 768px){.webform-section-flex-wrapper>h2.webform-section-title,.webform-section-flex-wrapper>h3.webform-section-title,.webform-section-flex-wrapper>h4.webform-section-title,.webform-section-flex-wrapper>dt.webform-section-title{font-size:32px;max-width:350px;width:30%}}.webform-section-flex-wrapper h4{font-size:var(--fontsize-heading-m);line-height:38px}.webform-section-flex-wrapper>.webform-section-wrapper{--line-height: 1.5;font-size:var(--fontsize-body-m);width:100%}@media(min-width: 768px){.webform-section-flex-wrapper>.webform-section-wrapper{padding-left:var(--spacing-2-xl)}}.webform-section-flex-wrapper .form-required::after{content:"*";display:inline}.webform-section-flex-wrapper legend,.webform-section-flex-wrapper label{display:block;font-size:var(--fontsize-body-m);font-weight:500;margin-bottom:var(--spacing-2-xs);max-width:-moz-fit-content;max-width:fit-content;position:relative}.webform-section-flex-wrapper legend{padding:0 var(--spacing-2-xs);margin-left:calc(var(--spacing-2-xs)*-1);left:auto}.webform-section-flex-wrapper legend[\:has\(button.webform-element-help\)],.webform-section-flex-wrapper label[\:has\(button.webform-element-help\)]{padding-right:var(--spacing-xl)}.webform-section-flex-wrapper legend:has(button.webform-element-help),.webform-section-flex-wrapper label:has(button.webform-element-help){padding-right:var(--spacing-xl)}.webform-section-flex-wrapper fieldset legend>span[\:has\(button.webform-element-help\)]{padding-right:var(--spacing-xl)}.webform-section-flex-wrapper fieldset legend>span:has(button.webform-element-help){padding-right:var(--spacing-xl)}.webform-section-flex-wrapper fieldset legend>span.fieldset-legend[\:has\(button.webform-element-help\)],.webform-section-flex-wrapper fieldset.fieldgroup legend>span[\:has\(button.webform-element-help\)]:not(.visually-hidden.fieldset-legend){padding-right:var(--spacing-l)}.webform-section-flex-wrapper fieldset legend>span.fieldset-legend:has(button.webform-element-help),.webform-section-flex-wrapper fieldset.fieldgroup legend>span:has(button.webform-element-help):not(.visually-hidden.fieldset-legend){padding-right:var(--spacing-l)}.webform-section-flex-wrapper fieldset legend>span.fieldset-legend[\:has\(button.webform-element-help\)],.webform-section-flex-wrapper fieldset.fieldgroup legend span.fieldset-legend:not(.visually-hidden)[\:has\(button.webform-element-help\)]{padding-right:0}.webform-section-flex-wrapper fieldset legend>span.fieldset-legend:has(button.webform-element-help),.webform-section-flex-wrapper fieldset.fieldgroup legend span.fieldset-legend:not(.visually-hidden):has(button.webform-element-help){padding-right:0}.webform-section-flex-wrapper label.hds-radio-button__label{font-weight:normal}.webform-section-flex-wrapper .checkboxes--wrapper label{font-weight:normal}.webform-section-flex-wrapper .js-form-type-textarea .hds-text-input__input-wrapper{display:block}.webform-section-flex-wrapper .has-error,.webform-section-flex-wrapper .grant-applications--select-wrapper[\:has\(.has-error\)]{border-color:var(--color-error)}.webform-section-flex-wrapper .has-error,.webform-section-flex-wrapper .grant-applications--select-wrapper:has(.has-error){border-color:var(--color-error)}form .hds-text-input__input-wrapper,.hds-text-input__input-wrapper{flex-flow:row wrap}form .hds-text-input__input-wrapper .text-count-wrapper,.hds-text-input__input-wrapper .text-count-wrapper{flex-basis:100%}form .hds-text-input__input-wrapper input.webform--small,form .hds-text-input__input-wrapper textarea.webform--small,.hds-text-input__input-wrapper input.webform--small,.hds-text-input__input-wrapper textarea.webform--small{max-width:var(--webform-element-width--input-small);min-width:var(--webform-element-width--input-small);width:100%}form .hds-text-input__input-wrapper input.webform--medium,form .hds-text-input__input-wrapper textarea.webform--medium,.hds-text-input__input-wrapper input.webform--medium,.hds-text-input__input-wrapper textarea.webform--medium{max-width:var(--webform-element-width--input-medium);min-width:var(--webform-element-width--input-small);width:100%}form .hds-text-input__input-wrapper input.webform--large,form .hds-text-input__input-wrapper textarea.webform--large,.hds-text-input__input-wrapper input.webform--large,.hds-text-input__input-wrapper textarea.webform--large{max-width:var(--webform-element-width--input-large);min-width:var(--webform-element-width--input-small);width:100%}.webform--small div.grant-applications--select-wrapper{max-width:var(--webform-element-width--input-small);min-width:var(--webform-element-width--input-small);width:100%}.webform--medium div.grant-applications--select-wrapper{max-width:var(--webform-element-width--input-medium);min-width:var(--webform-element-width--input-small);width:100%}.webform--large div.grant-applications--select-wrapper{max-width:var(--webform-element-width--input-medium);min-width:var(--webform-element-width--input-small);width:100%}form .hds-checkbox{display:block}form .hds-checkbox label.hds-checkbox__label::after{content:""}fieldset.webform-composite-hidden-title{margin-bottom:var(--spacing-layout-2-xs);margin-top:0}.form-item-bank-account-account-number-select,.form-item-community-address-community-address-select{margin-bottom:0}.grants-profile-grants-profile table thead th h4{margin:0}.hakemus-form-page .main-content{margin-top:0}.hakemus-form-page h1{-webkit-hyphens:auto;hyphens:auto;word-break:break-word}.hakemus-form-errors ul li{list-style-type:none}.community_officials_wrapper .webform-readonly{margin:0}.community_officials_wrapper .hds-text-input__input-wrapper{margin:0}.community_officials_wrapper input[readonly=readonly]{height:1.25rem;margin:0;max-width:330px}.form-item--error-message{color:var(--color-error);margin-bottom:var(--spacing-layout-s);margin-top:var(--spacing-layout-2-xs)}fieldset .form-item--error-message,.community_officials_wrapper .form-item--error-message{margin-bottom:0}.form-item--error-message::before{--icon-size: 1.6rem;background-color:#000;background-size:contain;content:"";display:inline-block;height:calc(var(--line-height) * 1em);height:var(--icon-size, calc(var(--line-height) * 1em));-webkit-mask-image:var(--hel-icon--alert-circle-fill);mask-image:var(--hel-icon--alert-circle-fill);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);-webkit-mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));vertical-align:bottom;width:calc(var(--line-height) * 1em);width:var(--icon-size, calc(var(--line-height) * 1em));background-color:var(--color-error);content:" ";display:inline-block}input[type=radio]+label.form-required::after{content:""}.hds-radio-button:last-of-type,.hds-checkbox:last-of-type{margin-bottom:0}.hds-radio-button:last-of-type>label,.hds-checkbox:last-of-type>label{margin-bottom:0}@media(min-width: 992px){.place-of-operation-composite--wrapper.fieldgroup .hds-text-input,.club-section-composite--wrapper.fieldgroup .hds-text-input{max-width:100%}}.place-of-operation-composite--wrapper.fieldgroup .hds-radio-button .hds-radio-button__label,.club-section-composite--wrapper.fieldgroup .hds-radio-button .hds-radio-button__label{line-height:var(--lineheight-m) !important}@media(min-width: 992px){.place-of-operation-group__location,.place-of-operation-group__students,.place-of-operation-group__groups,.place-of-operation-group__personnel,.place-of-operation-group__rent,.place-of-operation-group__time{display:flex;justify-content:space-between}}@media(min-width: 992px){.place-of-operation-group__location--address,.place-of-operation-group__students--address,.place-of-operation-group__groups--address,.place-of-operation-group__personnel--address,.place-of-operation-group__rent--address,.place-of-operation-group__time--address{margin-top:0 !important}.place-of-operation-group__location--address,.place-of-operation-group__students--address,.place-of-operation-group__groups--address,.place-of-operation-group__personnel--address,.place-of-operation-group__rent--address,.place-of-operation-group__time--address{width:65%}}@media(min-width: 992px){.place-of-operation-group__location--post-code,.place-of-operation-group__students--post-code,.place-of-operation-group__groups--post-code,.place-of-operation-group__personnel--post-code,.place-of-operation-group__rent--post-code,.place-of-operation-group__time--post-code{margin-top:0 !important}.place-of-operation-group__location--post-code,.place-of-operation-group__students--post-code,.place-of-operation-group__groups--post-code,.place-of-operation-group__personnel--post-code,.place-of-operation-group__rent--post-code,.place-of-operation-group__time--post-code{width:30%}}@media(min-width: 992px){.place-of-operation-group__location--student-count,.place-of-operation-group__location--special-student-count,.place-of-operation-group__location--group-count,.place-of-operation-group__location--special-group-count,.place-of-operation-group__location--personnel-count,.place-of-operation-group__location--rent-amount,.place-of-operation-group__location--time-start,.place-of-operation-group__location--time-end,.place-of-operation-group__students--student-count,.place-of-operation-group__students--special-student-count,.place-of-operation-group__students--group-count,.place-of-operation-group__students--special-group-count,.place-of-operation-group__students--personnel-count,.place-of-operation-group__students--rent-amount,.place-of-operation-group__students--time-start,.place-of-operation-group__students--time-end,.place-of-operation-group__groups--student-count,.place-of-operation-group__groups--special-student-count,.place-of-operation-group__groups--group-count,.place-of-operation-group__groups--special-group-count,.place-of-operation-group__groups--personnel-count,.place-of-operation-group__groups--rent-amount,.place-of-operation-group__groups--time-start,.place-of-operation-group__groups--time-end,.place-of-operation-group__personnel--student-count,.place-of-operation-group__personnel--special-student-count,.place-of-operation-group__personnel--group-count,.place-of-operation-group__personnel--special-group-count,.place-of-operation-group__personnel--personnel-count,.place-of-operation-group__personnel--rent-amount,.place-of-operation-group__personnel--time-start,.place-of-operation-group__personnel--time-end,.place-of-operation-group__rent--student-count,.place-of-operation-group__rent--special-student-count,.place-of-operation-group__rent--group-count,.place-of-operation-group__rent--special-group-count,.place-of-operation-group__rent--personnel-count,.place-of-operation-group__rent--rent-amount,.place-of-operation-group__rent--time-start,.place-of-operation-group__rent--time-end,.place-of-operation-group__time--student-count,.place-of-operation-group__time--special-student-count,.place-of-operation-group__time--group-count,.place-of-operation-group__time--special-group-count,.place-of-operation-group__time--personnel-count,.place-of-operation-group__time--rent-amount,.place-of-operation-group__time--time-start,.place-of-operation-group__time--time-end{margin-top:0 !important}.place-of-operation-group__location--student-count,.place-of-operation-group__location--special-student-count,.place-of-operation-group__location--group-count,.place-of-operation-group__location--special-group-count,.place-of-operation-group__location--personnel-count,.place-of-operation-group__location--rent-amount,.place-of-operation-group__location--time-start,.place-of-operation-group__location--time-end,.place-of-operation-group__students--student-count,.place-of-operation-group__students--special-student-count,.place-of-operation-group__students--group-count,.place-of-operation-group__students--special-group-count,.place-of-operation-group__students--personnel-count,.place-of-operation-group__students--rent-amount,.place-of-operation-group__students--time-start,.place-of-operation-group__students--time-end,.place-of-operation-group__groups--student-count,.place-of-operation-group__groups--special-student-count,.place-of-operation-group__groups--group-count,.place-of-operation-group__groups--special-group-count,.place-of-operation-group__groups--personnel-count,.place-of-operation-group__groups--rent-amount,.place-of-operation-group__groups--time-start,.place-of-operation-group__groups--time-end,.place-of-operation-group__personnel--student-count,.place-of-operation-group__personnel--special-student-count,.place-of-operation-group__personnel--group-count,.place-of-operation-group__personnel--special-group-count,.place-of-operation-group__personnel--personnel-count,.place-of-operation-group__personnel--rent-amount,.place-of-operation-group__personnel--time-start,.place-of-operation-group__personnel--time-end,.place-of-operation-group__rent--student-count,.place-of-operation-group__rent--special-student-count,.place-of-operation-group__rent--group-count,.place-of-operation-group__rent--special-group-count,.place-of-operation-group__rent--personnel-count,.place-of-operation-group__rent--rent-amount,.place-of-operation-group__rent--time-start,.place-of-operation-group__rent--time-end,.place-of-operation-group__time--student-count,.place-of-operation-group__time--special-student-count,.place-of-operation-group__time--group-count,.place-of-operation-group__time--special-group-count,.place-of-operation-group__time--personnel-count,.place-of-operation-group__time--rent-amount,.place-of-operation-group__time--time-start,.place-of-operation-group__time--time-end{width:47.5%}}@media(min-width: 768px){.club-section__participants{display:flex;gap:var(--spacing-l);justify-content:space-between}}.club-section__participants input.form-text.hds-text-input__input{max-width:100%;width:100%}.club-section__totalhours input.form-text.hds-text-input__input{max-width:100%;width:100%}.club-section__participants label{text-wrap:balance}.hel-icon--size-xs{--icon-size: var(--spacing-layout-2-xs)}.hel-icon--size-s{--icon-size: var(--spacing-layout-xs)}.hel-icon--size-m{--icon-size: var(--spacing-layout-s)}.hel-icon--size-l{--icon-size: var(--spacing-layout-m)}.hel-icon--size-xl{--icon-size: var(--spacing-layout-l)}.hds-text-input__input-wrapper[focus-within][\:has\(input\[readonly\]\)]{margin-right:var(--spacing-2-xs);outline:2px var(--color-black) solid;outline-offset:2px}.hds-text-input__input-wrapper[focus-within]:has(input[readonly]){margin-right:var(--spacing-2-xs);outline:2px var(--color-black) solid;outline-offset:2px}.hds-text-input__input-wrapper[focus-within][\:has\(input\[readonly\]\)]{margin-right:var(--spacing-2-xs);outline:2px var(--color-black) solid;outline-offset:2px}.hds-text-input__input-wrapper:focus-within[\:has\(input\[readonly\]\)]{margin-right:var(--spacing-2-xs);outline:2px var(--color-black) solid;outline-offset:2px}.hds-text-input__input-wrapper:focus-within:has(input[readonly]){margin-right:var(--spacing-2-xs);outline:2px var(--color-black) solid;outline-offset:2px}.hds-text-input__input-wrapper[focus-within][\:has\(input\[readonly\]\)] input[readonly]{width:calc(100% - var(--spacing-2-xs))}.hds-text-input__input-wrapper[focus-within]:has(input[readonly]) input[readonly]{width:calc(100% - var(--spacing-2-xs))}.hds-text-input__input-wrapper[focus-within][\:has\(input\[readonly\]\)] input[readonly]{width:calc(100% - var(--spacing-2-xs))}.hds-text-input__input-wrapper:focus-within[\:has\(input\[readonly\]\)] input[readonly]{width:calc(100% - var(--spacing-2-xs))}.hds-text-input__input-wrapper:focus-within:has(input[readonly]) input[readonly]{width:calc(100% - var(--spacing-2-xs))}.form-item-application-number,.form-item-status,.form-item-applicant-type{display:none}.grants-handler__completion{background:var(--color-bus-light);padding:var(--spacing-layout-l) var(--spacing-layout-2-xl)}.grants-handler__completion h2{margin-top:var(--spacing-l)}.grants-handler__completion h3{font-size:1rem;font-weight:bold;margin-top:var(--spacing-m)}.grants-handler__completion__info-row{display:flex;flex-flow:row wrap;gap:var(--spacing-m);justify-content:flex-start;margin-bottom:var(--spacing-m)}.grants-handler__completion__button-row{display:flex;flex-flow:row wrap;gap:var(--spacing-m);justify-content:flex-start}.grants-handler__completion__longtext{margin:var(--spacing-l) 0}.hds-notification.notification-margin-bottom{margin-bottom:var(--spacing-layout-m)}.hds-notification__label{align-items:center}.hds-checkbox__input label{font-weight:normal}fieldset.grants-attachments--wrapper{margin-bottom:var(--spacing-layout-m)}fieldset.grants-attachments--wrapper legend{margin-bottom:var(--spacing-2-xs)}fieldset.grants-attachments--wrapper .form-item--error-message{width:100%}fieldset.grants-attachments--wrapper .js-form-type-managed-file{margin-bottom:0}.grants-applications-managed_file{position:relative}.grants-applications-managed_file label.hds-button--secondary:not(:disabled):not(.eu-cookie-compliance-default-button):not(.eu-cookie-compliance-save-preferences-button){left:0;position:relative}.grants-applications-managed_file label.hds-button--secondary:not(:disabled):not(.eu-cookie-compliance-default-button):not(.eu-cookie-compliance-save-preferences-button)[\:has\(input\:disabled\)]{background-color:transparent;background-color:var(--background-color-disabled, transparent);border-color:transparent;border-color:var(--border-color-disabled, transparent);color:var(--color-disabled);cursor:not-allowed}.grants-applications-managed_file label.hds-button--secondary:not(:disabled):not(.eu-cookie-compliance-default-button):not(.eu-cookie-compliance-save-preferences-button)[\:has\(input\:disabled\)]{background-color:transparent;background-color:var(--background-color-disabled, transparent);border-color:transparent;border-color:var(--border-color-disabled, transparent);color:var(--color-disabled);cursor:not-allowed}.grants-applications-managed_file label.hds-button--secondary:not(:disabled):not(.eu-cookie-compliance-default-button):not(.eu-cookie-compliance-save-preferences-button):has(input:disabled){background-color:transparent;background-color:var(--background-color-disabled, transparent);border-color:transparent;border-color:var(--border-color-disabled, transparent);color:var(--color-disabled);cursor:not-allowed}.grants-applications-managed_file label.hds-button--secondary:not(:disabled):not(.eu-cookie-compliance-default-button):not(.eu-cookie-compliance-save-preferences-button)[focus-within]{background:var(--color-black);border-color:var(--color-white);color:var(--color-white);outline:2px var(--color-black) solid}.grants-applications-managed_file label.hds-button--secondary:not(:disabled):not(.eu-cookie-compliance-default-button):not(.eu-cookie-compliance-save-preferences-button):focus-within{background:var(--color-black);border-color:var(--color-white);color:var(--color-white);outline:2px var(--color-black) solid}.grants-applications-managed_file input[type=file]{opacity:0;position:absolute}.form-managed-file{display:flex;flex-wrap:wrap;white-space:inherit}.form-managed-file>span{background-color:var(--color-info-light);border-bottom:2px dotted var(--color-coat-of-arms);display:inline-block;padding:var(--spacing-s) var(--spacing-2-xs)}.form-managed-file>.file-upload-js-error{flex-basis:100%}.grants-applications-managed_file label.hds-button{display:flex}.grants-attachments--wrapper .webform-readonly{display:none}.webform-multiple-table table{border-collapse:collapse;border:0px var(--color-white) solid;margin-bottom:var(--spacing-2-xs);max-width:-moz-fit-content;max-width:fit-content}.webform-multiple-table .webform-multiple-table--operations-two{min-width:60px}.webform-multiple-table tbody tr,.webform-multiple-table thead tr{align-items:center;justify-content:space-between;width:100%}.webform-multiple-table td,.webform-multiple-table th{max-width:100%;min-width:0;padding:0;width:100%}.webform-multiple-table table thead th{padding:var(--spacing-layout-2-xs)}div.hidden-head table{display:table}div.hidden-head table thead th{padding:0}div.hidden-head table tbody tr{border-bottom:var(--spacing-s) var(--color-white) solid}div.hidden-head table tbody tr:hover{background:rgba(0,0,0,0)}div.table-layout-form input.hds-text-input__input{width:100%}div.table-layout-form table{border:1px var(--color-black) solid;max-width:var(--webform-element-width--input-large)}div.table-layout-form table tbody tr{border:§0px var(--color-black-30) solid}div.table-layout-form table tbody tr td{border:1px var(--color-black-30) solid;padding:0}div.table-layout-form table tbody tr td input.hds-text-input__input[readonly]{padding:var(--spacing-layout-2-xs)}div.table-layout-form table .form-item{margin-bottom:0}.hds-text-input .hds-text-input__input.input--borderless{border:0 rgba(0,0,0,0) solid}#edit-subventions-items thead{background:var(--color-black-90);color:var(--color-white);text-align:left}#edit-subventions-items input.hds-text-input,#edit-subventions-items input.hds-text-input__input{background:rgba(0,0,0,0)}#subventions_table td.webform-multiple-table--operations,#subventions_table th.webform-multiple-table--operations{display:none}#subventions_table input.hds-text-input__input[readonly][name$="[amount]"]{background-color:var(--input-background-disabled);border-color:var(--input-border-color-disabled);color:var(--input-color-disabled);cursor:not-allowed}.form-item-muu-liite .webform-multiple-table--operations{display:none}.hidden-head>label{display:none}.webform-preview .accordion_header{font-size:28px;font-weight:300}@media(min-width: 768px){.webform-preview .accordion_header{font-size:36px;font-weight:500}}.webform-preview label{display:block;font-weight:bold}.grants-profile-grants-profile fieldset{background:var(--color-black-5);border:0 rgba(0,0,0,0) solid;margin:0;max-width:var(--webform-element-width--fieldset);padding:0 var(--spacing-layout-s) var(--spacing-layout-s);top:calc(-1*var(--spacing-m))}.grants-profile-grants-profile fieldset label{margin-bottom:var(--spacing-3-xs)}.grants-profile-grants-profile fieldset legend{font-size:var(--fontsize-body-l);margin-bottom:var(--spacing-m);padding-bottom:var(--spacing-s);position:relative;top:var(--spacing-l)}.grants-profile-grants-profile fieldset .fieldset-wrapper{display:flex;flex-flow:row wrap;justify-content:space-between}.grants-profile-grants-profile fieldset .hds-text-input{max-width:100%}.grants-profile-grants-profile fieldset div[class*=-address-postcode]{width:32%}.grants-profile-grants-profile fieldset div[class*=-address-city]{width:65%}.grants-profile--extrainfo .form-actions .button{margin-right:var(--spacing-2-xs)}.grants-stepper{--grants-stepper-color: var(--color-black);--grants-stepper-background-color: var(--color-white);--grants-stepper-disabled-color: var(--color-black-20);--grants-stepper-selected-step-label-color: var(--color-black-90);--grants-stepper-not-selected-step-label-color: var(--color-black);--grants-step-background-color: var(--color-white);--grants-step-content-color: var(--color-black);--grants-stepper-focus-border-color: var(--color-coat-of-arms);--grants-step-width: 120px;--circle-container-size: 36px;--progress-line-height: 2px;background-color:var(--grants-stepper-background-color);margin-bottom:var(--spacing-layout-m);position:relative}@media(max-width: 725px){.grants-stepper{--grants-step-width: 40px}}@media(max-width: 725px){.grants-stepper .grants-stepper__text{display:none}}.grants-stepper__inner{align-items:flex-start;display:flex;justify-content:space-between;margin:0;-ms-overflow-style:none;padding:0;position:relative;scroll-behavior:smooth;scrollbar-width:none;width:100%}.grants-stepper__lines{display:flex;height:var(--progress-line-height);left:calc(var(--grants-step-width)/2);line-height:var(--lineheight-l);position:absolute;transform:translateY(calc(var(--circle-container-size) / 2 + var(--progress-line-height) / 2));z-index:1}.grants-stepper__line{background-color:var(--grants-stepper-color);display:inline-block;height:100%;position:relative}.grants-stepper__line__disabled{background-color:var(--grants-stepper-disabled-color)}.grants-stepper__steps{background-color:var(--grants-stepper-background-color);box-sizing:border-box;display:flex;flex-shrink:0;justify-content:center;max-width:var(--grants-step-width);min-width:var(--grants-step-width);padding:3px}.grants-stepper__step{align-items:center;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:rgba(0,0,0,0);border:0;box-sizing:content-box;color:var(--grants-stepper-color);cursor:pointer;display:flex;flex-direction:column;height:100%;justify-content:center;outline:none;overflow:visible;padding:0;position:relative}.grants-stepper__step[disabled],.grants-stepper__step__disabled{color:var(--grants-stepper-disabled-color);cursor:not-allowed}.grants-stepper__step[disabled] .grants-stepper__circle,.grants-stepper__step__disabled .grants-stepper__circle{background-color:var(--grants-stepper-background-color);border:2px solid var(--grants-stepper-disabled-color);color:var(--grants-stepper-disabled-color)}.grants-stepper__step[disabled] .grants-stepper__text,.grants-stepper__step__disabled .grants-stepper__text{color:var(--grants-stepper-disabled-color)}.grants-stepper__step__circle_container{align-items:center;display:flex;height:var(--circle-container-size);justify-content:center;width:var(--circle-container-size);z-index:2}.grants-stepper__step__completed_container{align-items:center;background-color:var(--grants-stepper-color);border-radius:16px;color:var(--color-white);display:none;justify-content:center;outline:2px solid var(--grants-stepper-background-color);padding:4px;vertical-align:middle}.grants-stepper .grants-stepper__error,.grants-stepper .grants-stepper__completed{display:none}.grants-stepper__text{color:var(--grants-stepper-not-selected-step-label-color);font-size:var(--fontsize-body-m);font-weight:500;line-height:var(--lineheight-l);margin-bottom:0;margin-top:6px;padding-left:var(--spacing-4-xs);padding-right:var(--spacing-4-xs);text-align:center;text-decoration:underline}.grants-stepper__circle{align-items:center;background-color:var(--grants-step-background-color);border:2px solid var(--grants-stepper-color);border-radius:16px;color:var(--grants-step-content-color);display:flex;height:28px;justify-content:center;outline:2px solid var(--grants-stepper-background-color);text-align:center;width:28px}.grants-stepper__number{font-size:var(--fontsize-body-m);font-weight:500;line-height:1.15}.grants-stepper .is-active .grants-stepper__circle{border:4px solid var(--grants-stepper-color);border-radius:18px;outline:none}.grants-stepper .is-active .grants-stepper__text{color:var(--grants-stepper-selected-step-label-color);font-weight:700;text-decoration:none}.grants-stepper .is-active .grants-stepper__number{color:var(--grants-stepper-selected-step-label-color);font-weight:700;text-decoration:none}.grants-stepper .is-complete .grants-stepper__container{align-items:center;background-color:var(--grants-stepper-color);border-radius:16px;color:var(--color-white);display:flex;justify-content:center;outline:2px solid var(--grants-stepper-background-color);padding:4px}.grants-stepper .is-complete .grants-stepper__number{display:none}.grants-stepper .is-complete .grants-stepper__completed{display:inline-block}.grants-stepper .is-complete .grants-stepper__circle{opacity:0}.grants-stepper .is-complete .grants-stepper__step__completed_container{display:flex}.grants-stepper .has-errors .grants-stepper__container{align-items:center;background-color:var(--grants-stepper-color);border-radius:16px;color:var(--color-white);display:flex;justify-content:center;outline:2px solid var(--grants-stepper-background-color);padding:4px}.grants-stepper .has-errors .grants-stepper__circle{border-color:var(--color-error);color:var(--color-error)}.grants-stepper .has-errors .grants-stepper__number{display:none}.grants-stepper .has-errors .grants-stepper__error{display:inline-block}.grants-stepper .progress-marker::before{display:none}.grants-stepper .progress-step .progress-marker{color:var(--color-black)}.grants-stepper .progress-step .progress-marker.focus-visible .grants-stepper__circle{outline:2px solid var(--color-black);outline:var(--outline-width, 2px) solid var(--color-black);outline-offset:2px}.grants-stepper .progress-step .progress-marker.focus-visible .grants-stepper__circle{outline:2px solid var(--color-black);outline:var(--outline-width, 2px) solid var(--color-black);outline-offset:2px}.grants-stepper .progress-step .progress-marker:focus-visible .grants-stepper__circle{outline:2px solid var(--color-black);outline:var(--outline-width, 2px) solid var(--color-black);outline-offset:2px}.grants-stepper .progress-step .progress-marker.focus-visible .grants-stepper__text{outline:2px solid var(--color-black);outline:var(--outline-width, 2px) solid var(--color-black)}.grants-stepper .progress-step .progress-marker.focus-visible .grants-stepper__text{outline:2px solid var(--color-black);outline:var(--outline-width, 2px) solid var(--color-black)}.grants-stepper .progress-step .progress-marker:focus-visible .grants-stepper__text{outline:2px solid var(--color-black);outline:var(--outline-width, 2px) solid var(--color-black)}.grants-stepper .progress-step:last-child{flex-grow:1}.grant-applications--select-wrapper{--border-width: 2px;--input-height: 56px;--menu-item-height: 53px;--icon-size: var(--spacing-m);--helper-color-default: var(--color-black-60);--helper-color-invalid: var(--color-error);--icon-color-invalid: var(--color-error);--input-background-default: var(--color-white);--input-background-disabled: var(--color-black-10);--input-border-color-default: var(--color-black-50);--input-border-color-hover: var(--color-black-90);--input-border-color-focus: var(--color-black-90);--input-border-color-invalid: var(--color-error);--input-border-color-disabled: var(--color-black-10);--input-color-default: var(--color-black-90);--input-color-disabled: var(--color-black-40);--label-color-default: var(--color-black-90);--label-color-invalid: var(--color-black-90);--placeholder-color: var(--color-black-60);--focus-outline-color: var(--color-coat-of-arms);align-items:center;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--input-background-default);border:var(--border-width) solid var(--input-border-color-default);box-sizing:border-box;color:var(--input-color-default);cursor:pointer;display:block;font-size:1.125em;grid-template-areas:"select";line-height:normal;max-width:30ch;min-width:15ch;padding:.25em .5em;position:relative;width:100%}.grant-applications--select-wrapper select{align-items:center;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:rgba(0,0,0,0);border:none;color:var(--dropdown-color-default);cursor:inherit;display:flex;font-family:inherit;font-size:var(--fontsize-body-l);height:var(--input-height);line-height:inherit;margin:0;min-height:var(--menu-item-height);outline:none;padding:calc(var(--spacing-s) - var(--border-width)*2) var(--spacing-s);width:100%;z-index:1}.grant-applications--select-wrapper select::-ms-expand{display:none}.grant-applications--select-wrapper i.hel-icon{pointer-events:none;position:absolute;right:calc(var(--spacing-s) - var(--border-width)*2);top:calc(var(--spacing-s) - var(--border-width)*2)}.grant-applications--select-wrapper select,.grant-applications--select-wrapper::after{grid-area:select}.grant-applications--select-wrapper:not(.select--multiple)::after{background-color:var(--helper-color-default);-webkit-clip-path:polygon(100% 0%, 0 0%, 50% 100%);clip-path:polygon(100% 0%, 0 0%, 50% 100%);content:"";height:.5em;justify-self:end;width:.8em}.grant-applications--select-wrapper select:focus+.grant-applications--select-focus{border:2px solid var(--focus-outline-color);border-radius:inherit;bottom:-1px;left:-1px;position:absolute;right:-1px;top:-1px}.webform-submission__application_id{border-bottom:1px var(--color-black-20) solid;padding-bottom:var(--spacing-xl)}.webform-submission__application_id--header{font-size:1rem;font-weight:bold}.webform-submission__title-wrapper{padding-top:var(--spacing-2-xl)}.webform-submission__title-wrapper h1{max-width:100%}.webform-submission ul{list-style:none;margin-top:0;padding-left:0}.webform-submission-information{background:var(--color-silver-light);margin-top:var(--spacing-3-xl);padding:var(--spacing-l)}.webform-submission-information .webform-submission-information{margin-top:var(--spacing-l);padding:0}.webform-submission-information h4{margin-top:0}.webform-submission-information h5{font-size:var(--fontsize-body-m);margin-top:var(--spacing-s)}.webform-submission-information__row{display:flex}.webform-submission-information__row-edit{margin-top:var(--spacing-s)}.webform-submission-information__row-top{align-items:center;border-bottom:1px solid var(--color-black-20);justify-content:space-between}@media(max-width: 550px){.webform-submission-information__row-top{display:block}}.webform-submission-information__row-main{flex-flow:row nowrap;gap:var(--spacing-m);justify-content:space-between}@media(max-width: 1179px){.webform-submission-information__row-main{flex-flow:row wrap}}.webform-submission-information__row-main>div{flex:1}@media(max-width: 1179px){.webform-submission-information__row-main>div{flex:auto;width:100%}}.webform-submission-information__row-main>div ul{list-style-type:none;margin-bottom:0;padding-left:0}.webform-submission-information__row-main>div ul li{margin:0;padding:0}.webform-submission-information__supportlinks{display:flex;flex-flow:row nowrap;min-width:-moz-fit-content;min-width:fit-content}.webform-submission-information__supportlinks .hds-loading-spinner{left:0}.webform-submission-information__supportlinks .hds-button{min-width:-moz-fit-content;min-width:fit-content}.hel-icon.hel-icon--copy{-webkit-mask-image:url("data:image/svg+xml,%3Csvg class='Icon-module_icon__1Jtzj icon_hel-icon__1YqNC Icon-module_s__2WGWe icon_hel-icon--size-s__2Lkik' viewBox='0 0 24 24' role='img' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Crect width='24' height='24'%3E%3C/rect%3E%3Cpath fill='currentColor' d='M6,10 L6,12 L5,12 L5,18 L12,18 L12,17 L14,17 L14,19 C14,19.5522847 13.5522847,20 13,20 L4,20 C3.44771525,20 3,19.5522847 3,19 L3,11 C3,10.4477153 3.44771525,10 4,10 L6,10 Z M20,4 C20.5522847,4 21,4.44771525 21,5 L21,15 C21,15.5522847 20.5522847,16 20,16 L8,16 C7.44771525,16 7,15.5522847 7,15 L7,5 C7,4.44771525 7.44771525,4 8,4 L20,4 Z M19,6 L9,6 L9,14 L19,14 L19,6 Z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg class='Icon-module_icon__1Jtzj icon_hel-icon__1YqNC Icon-module_s__2WGWe icon_hel-icon--size-s__2Lkik' viewBox='0 0 24 24' role='img' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Crect width='24' height='24'%3E%3C/rect%3E%3Cpath fill='currentColor' d='M6,10 L6,12 L5,12 L5,18 L12,18 L12,17 L14,17 L14,19 C14,19.5522847 13.5522847,20 13,20 L4,20 C3.44771525,20 3,19.5522847 3,19 L3,11 C3,10.4477153 3.44771525,10 4,10 L6,10 Z M20,4 C20.5522847,4 21,4.44771525 21,5 L21,15 C21,15.5522847 20.5522847,16 20,16 L8,16 C7.44771525,16 7,15.5522847 7,15 L7,5 C7,4.44771525 7.44771525,4 8,4 L20,4 Z M19,6 L9,6 L9,14 L19,14 L19,6 Z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E")}.webform-submission-form .form-actions{border-top:1px rgba(0,0,0,.6) solid;margin-top:var(--spacing-l);padding-top:var(--spacing-2-xl)}@media(min-width: 768px){.webform-submission-form .form-actions{display:flex;flex-direction:row-reverse}}.webform-submission-form .form-actions .actions{display:flex;flex-wrap:wrap}.webform-submission-form .form-actions button{margin-left:0}@media(min-width: 768px){.webform-submission-form .form-actions button{margin-left:var(--spacing-2-xs)}}.webform-submission-form .form-actions input{margin-bottom:var(--spacing-layout-2-xs);width:100%}@media(min-width: 768px){.webform-submission-form .form-actions input{width:auto}}.webform-submission-form .form-actions input.webform-button--draft{background:rgba(0,0,0,0);border:0 rgba(0,0,0,0) solid;color:var(--hdbt-color-black);order:3;text-decoration:underline}.webform-submission-form .form-actions button.webform-button--next span::after,.webform-submission-form .form-actions button.webform-button--preview span::after{content:">";margin-left:var(--spacing-2-xs)}.webform-submission-form .form-actions button.webform-button--previous span::before{content:"<";margin-right:var(--spacing-2-xs)}.webform-submission-form .form-actions input.webform-button--previous{background:var(--color-white);color:var(--border-color)}.webform-button--draft .hds-button__label::before{background-color:currentColor;background-size:contain;content:"";display:inline-block;flex-shrink:0;height:24px;margin-right:var(--spacing-2-xs);-webkit-mask-image:var(--hel-icon--download-cloud);mask-image:var(--hel-icon--download-cloud);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:24px 24px;mask-size:24px 24px;transition:transform .2s linear;vertical-align:bottom;width:24px}.webform-submission-messages{background:var(--color-silver-light);margin-top:var(--spacing-3-xl);padding:var(--spacing-l)}.webform-submission-messages h4,.webform-submission-messages h5{margin-top:0}.webform-submission-messages hr{margin:var(--spacing-l) 0}.webform-submission-messages__new-message{align-items:center;background:var(--color-alert);display:inline-flex;font-weight:bold;gap:var(--spacing-2-xs);margin-bottom:var(--spacing-m);padding:var(--spacing-2-xs) var(--spacing-xs);text-transform:uppercase}.webform-submission-messages__messages-list{list-style:none;margin:0;padding:0}.webform-submission-messages__message{margin:0;padding:0}.webform-submission-messages__message__attachments{list-style:none}.webform-submission-messages__message .hds-button{margin-top:var(--spacing-s)}.js-form-type-grants-webform-summation-field{max-width:var(--webform-element-width--input-large);text-align:right}.js-form-type-grants-webform-summation-field .grants-webform-summation-field{display:inline-block;padding:var(--spacing-xs) var(--spacing-m)}.webform-print-header,.webform-print-footer{display:none}.webform-print .main-content{display:block}.webform-submission--view-mode-html .hds-text-input,.webform-submission-data-preview-page .hds-text-input,.webform-print-page-html .hds-text-input{max-width:100%}.webform-submission--view-mode-html .print-label,.webform-submission-data-preview-page .print-label,.webform-print-page-html .print-label{display:block;font-size:var(--fontsize-body-m);font-weight:500;margin-bottom:var(--spacing-3-xs);margin-top:0;max-width:-moz-fit-content;max-width:fit-content;padding-right:var(--spacing-xl);position:relative}.webform-submission--view-mode-html .webform-section-flex-wrapper h3+*>*:first-child>*:first-child,.webform-submission--view-mode-html .webform-section-flex-wrapper h3+*>*:first-child>*:first-child label:first-of-type,.webform-submission-data-preview-page .webform-section-flex-wrapper h3+*>*:first-child>*:first-child,.webform-submission-data-preview-page .webform-section-flex-wrapper h3+*>*:first-child>*:first-child label:first-of-type,.webform-print-page-html .webform-section-flex-wrapper h3+*>*:first-child>*:first-child,.webform-print-page-html .webform-section-flex-wrapper h3+*>*:first-child>*:first-child label:first-of-type{line-height:normal}.webform-submission--view-mode-html .print-notification,.webform-submission-data-preview-page .print-notification,.webform-print-page-html .print-notification{border:2px var(--color-black) solid;font-weight:bold;margin-top:var(--spacing-2-xl);padding:var(--spacing-layout-s)}.webform-submission--view-mode-html .print-notification .print-notification--icon,.webform-submission-data-preview-page .print-notification .print-notification--icon,.webform-print-page-html .print-notification .print-notification--icon{height:22px;margin-right:var(--spacing-2-xs);vertical-align:text-top;width:22px}.webform-submission--view-mode-html .webform-print-page-wizard-page~.webform-print-page-wizard-page h2,.webform-submission-data-preview-page .webform-print-page-wizard-page~.webform-print-page-wizard-page h2,.webform-print-page-html .webform-print-page-wizard-page~.webform-print-page-wizard-page h2{page-break-after:avoid;page-break-before:always}.webform-submission--view-mode-html div.hds-text-input__input,.webform-submission-data-preview-page div.hds-text-input__input,.webform-print-page-html div.hds-text-input__input{background:var(--color-white);border:2px var(--color-black) solid;height:var(--spacing-2-xl);width:100%}.webform-submission--view-mode-html div.hds-text-input__textarea,.webform-submission-data-preview-page div.hds-text-input__textarea,.webform-print-page-html div.hds-text-input__textarea{background:var(--color-white);border:2px var(--color-black) solid;height:var(--spacing-layout-2-xl);width:100%}.webform-submission--view-mode-html .webform-section-wrapper .hds-notification,.webform-submission-data-preview-page .webform-section-wrapper .hds-notification,.webform-print-page-html .webform-section-wrapper .hds-notification{margin-top:var(--spacing-s)}.webform-submission--view-mode-html .webform-print-page-body h2,.webform-submission-data-preview-page .webform-print-page-body h2,.webform-print-page-html .webform-print-page-body h2{margin-bottom:var(--spacing-layout-s)}.webform-submission--view-mode-html .webform-print-wrapper-table,.webform-submission-data-preview-page .webform-print-wrapper-table,.webform-print-page-html .webform-print-wrapper-table{border:0 rgba(0,0,0,0) solid;display:table;max-width:100%;overflow-x:visible;overflow-x:initial;width:100%}.webform-submission--view-mode-html .webform-print-wrapper-table thead,.webform-submission--view-mode-html .webform-print-wrapper-table tbody,.webform-submission--view-mode-html .webform-print-wrapper-table tfoot,.webform-submission--view-mode-html .webform-print-wrapper-table tr,.webform-submission--view-mode-html .webform-print-wrapper-table tbody tr:hover,.webform-submission--view-mode-html .webform-print-wrapper-table td,.webform-submission--view-mode-html .webform-print-wrapper-table td:first-child,.webform-submission--view-mode-html .webform-print-wrapper-table th,.webform-submission-data-preview-page .webform-print-wrapper-table thead,.webform-submission-data-preview-page .webform-print-wrapper-table tbody,.webform-submission-data-preview-page .webform-print-wrapper-table tfoot,.webform-submission-data-preview-page .webform-print-wrapper-table tr,.webform-submission-data-preview-page .webform-print-wrapper-table tbody tr:hover,.webform-submission-data-preview-page .webform-print-wrapper-table td,.webform-submission-data-preview-page .webform-print-wrapper-table td:first-child,.webform-submission-data-preview-page .webform-print-wrapper-table th,.webform-print-page-html .webform-print-wrapper-table thead,.webform-print-page-html .webform-print-wrapper-table tbody,.webform-print-page-html .webform-print-wrapper-table tfoot,.webform-print-page-html .webform-print-wrapper-table tr,.webform-print-page-html .webform-print-wrapper-table tbody tr:hover,.webform-print-page-html .webform-print-wrapper-table td,.webform-print-page-html .webform-print-wrapper-table td:first-child,.webform-print-page-html .webform-print-wrapper-table th{background:rgba(0,0,0,0);border:0;color:var(--color-black)}.webform-submission--view-mode-html .webform-print-wrapper-table ul,.webform-submission-data-preview-page .webform-print-wrapper-table ul,.webform-print-page-html .webform-print-wrapper-table ul{margin:0;padding:0}.webform-submission--view-mode-html .webform-print-wrapper-table ul li,.webform-submission-data-preview-page .webform-print-wrapper-table ul li,.webform-print-page-html .webform-print-wrapper-table ul li{border-bottom:1px var(--color-black-50) solid;list-style:none;margin-top:0;padding:1rem 0}.webform-submission--view-mode-html .webform-print-wrapper-table ul li:last-of-type,.webform-submission-data-preview-page .webform-print-wrapper-table ul li:last-of-type,.webform-print-page-html .webform-print-wrapper-table ul li:last-of-type{border-bottom:0 rgba(0,0,0,0) solid}.webform-submission--view-mode-html .webform-print-wrapper-table thead,.webform-submission-data-preview-page .webform-print-wrapper-table thead,.webform-print-page-html .webform-print-wrapper-table thead{display:table-header-group}.webform-submission--view-mode-html .webform-print-wrapper-table thead th,.webform-submission-data-preview-page .webform-print-wrapper-table thead th,.webform-print-page-html .webform-print-wrapper-table thead th{padding:0}.webform-submission--view-mode-html .webform-print-wrapper-table tfoot,.webform-submission-data-preview-page .webform-print-wrapper-table tfoot,.webform-print-page-html .webform-print-wrapper-table tfoot{display:table-footer-group}.webform-submission--view-mode-html .webform-submission-data>section,.webform-submission-data-preview-page .webform-submission-data>section,.webform-print-page-html .webform-submission-data>section{border-top:1px var(--color-black-20) solid;padding-top:var(--spacing-layout-l)}.webform-submission--view-mode-html .webform-submission-data>section>.webform-section-flex-wrapper,.webform-submission-data-preview-page .webform-submission-data>section>.webform-section-flex-wrapper,.webform-print-page-html .webform-submission-data>section>.webform-section-flex-wrapper{display:block}.webform-submission--view-mode-html .webform-submission-data>section>.webform-section-flex-wrapper>h2,.webform-submission-data-preview-page .webform-submission-data>section>.webform-section-flex-wrapper>h2,.webform-print-page-html .webform-submission-data>section>.webform-section-flex-wrapper>h2{font-size:var(--fontsize-heading-l) !important;margin:0 0 2mm !important;padding:0 !important;width:100% !important}.webform-submission--view-mode-html .webform-submission-data>section>.webform-section-flex-wrapper>h2,.webform-submission-data-preview-page .webform-submission-data>section>.webform-section-flex-wrapper>h2,.webform-print-page-html .webform-submission-data>section>.webform-section-flex-wrapper>h2{font-weight:500;min-width:100%}.webform-submission--view-mode-html .webform-submission-data>section>.webform-section-flex-wrapper>.webform-section-wrapper,.webform-submission-data-preview-page .webform-submission-data>section>.webform-section-flex-wrapper>.webform-section-wrapper,.webform-print-page-html .webform-submission-data>section>.webform-section-flex-wrapper>.webform-section-wrapper{padding:6mm 0}.webform-submission--view-mode-html .webform-submission-data>section>.webform-section-flex-wrapper>.webform-section-wrapper label,.webform-submission-data-preview-page .webform-submission-data>section>.webform-section-flex-wrapper>.webform-section-wrapper label,.webform-print-page-html .webform-submission-data>section>.webform-section-flex-wrapper>.webform-section-wrapper label{font-weight:500}.webform-submission--view-mode-html .webform-submission-data>section.hds-notification,.webform-submission-data-preview-page .webform-submission-data>section.hds-notification,.webform-print-page-html .webform-submission-data>section.hds-notification{padding-top:var(--spacing-s)}@media print{@page{.webform-submission--view-mode-html,.webform-submission-data-preview-page,.webform-print-page-html{margin:0;size:A4}}.webform-submission--view-mode-html h1,.webform-submission-data-preview-page h1,.webform-print-page-html h1{margin:0;position:relative}.webform-submission--view-mode-html details,.webform-submission-data-preview-page details,.webform-print-page-html details{page-break-before:always}.webform-submission--view-mode-html .details-section-divider,.webform-submission-data-preview-page .details-section-divider,.webform-print-page-html .details-section-divider{page-break-after:always}.webform-submission--view-mode-html label,.webform-submission-data-preview-page label,.webform-print-page-html label{font-size:8pt;margin-bottom:0}.webform-submission--view-mode-html section,.webform-submission-data-preview-page section,.webform-print-page-html section{border-top:0 var(--color-black-20) solid !important;padding-top:0 !important}.webform-submission--view-mode-html section,.webform-submission-data-preview-page section,.webform-print-page-html section{margin-bottom:0;padding-bottom:0}.webform-submission--view-mode-html div.main-content,.webform-submission-data-preview-page div.main-content,.webform-print-page-html div.main-content{margin:0}.webform-submission--view-mode-html button,.webform-submission--view-mode-html footer.footer,.webform-submission--view-mode-html header.header,.webform-submission--view-mode-html nav.breadcrumb,.webform-submission--view-mode-html .form-actions,.webform-submission--view-mode-html .hds-notification,.webform-submission--view-mode-html .messages__container,.webform-submission--view-mode-html .tools__container,.webform-submission--view-mode-html .breadcrumb__container,.webform-submission--view-mode-html .webform-progress,.webform-submission--view-mode-html .webform-progress-tracker,.webform-submission--view-mode-html .webform-progress-tracker-mobile,.webform-submission--view-mode-html .webform-multiple-add,.webform-submission--view-mode-html .webform-multiple-table--operations,.webform-submission-data-preview-page button,.webform-submission-data-preview-page footer.footer,.webform-submission-data-preview-page header.header,.webform-submission-data-preview-page nav.breadcrumb,.webform-submission-data-preview-page .form-actions,.webform-submission-data-preview-page .hds-notification,.webform-submission-data-preview-page .messages__container,.webform-submission-data-preview-page .tools__container,.webform-submission-data-preview-page .breadcrumb__container,.webform-submission-data-preview-page .webform-progress,.webform-submission-data-preview-page .webform-progress-tracker,.webform-submission-data-preview-page .webform-progress-tracker-mobile,.webform-submission-data-preview-page .webform-multiple-add,.webform-submission-data-preview-page .webform-multiple-table--operations,.webform-print-page-html button,.webform-print-page-html footer.footer,.webform-print-page-html header.header,.webform-print-page-html nav.breadcrumb,.webform-print-page-html .form-actions,.webform-print-page-html .hds-notification,.webform-print-page-html .messages__container,.webform-print-page-html .tools__container,.webform-print-page-html .breadcrumb__container,.webform-print-page-html .webform-progress,.webform-print-page-html .webform-progress-tracker,.webform-print-page-html .webform-progress-tracker-mobile,.webform-print-page-html .webform-multiple-add,.webform-print-page-html .webform-multiple-table--operations{display:none !important}.webform-submission--view-mode-html .gin--horizontal-toolbar .dialog-off-canvas-main-canvas,.webform-submission-data-preview-page .gin--horizontal-toolbar .dialog-off-canvas-main-canvas,.webform-print-page-html .gin--horizontal-toolbar .dialog-off-canvas-main-canvas{padding:0 !important}.webform-submission--view-mode-html .hds-text-input,.webform-submission-data-preview-page .hds-text-input,.webform-print-page-html .hds-text-input{max-width:100%}.webform-submission--view-mode-html .hds-text-input .hds-text-input__input,.webform-submission-data-preview-page .hds-text-input .hds-text-input__input,.webform-print-page-html .hds-text-input .hds-text-input__input{height:1cm}.webform-submission--view-mode-html .hds-text-input textarea.hds-text-input__input,.webform-submission--view-mode-html .hds-text-input div.hds-text-input__textarea,.webform-submission-data-preview-page .hds-text-input textarea.hds-text-input__input,.webform-submission-data-preview-page .hds-text-input div.hds-text-input__textarea,.webform-print-page-html .hds-text-input textarea.hds-text-input__input,.webform-print-page-html .hds-text-input div.hds-text-input__textarea{height:6cm;max-width:100%;min-width:100%;width:100%}.webform-submission--view-mode-html .hds-text-input .hds-text-input__input[readonly],.webform-submission--view-mode-html .hds-text-input .hds-text-input__input,.webform-submission-data-preview-page .hds-text-input .hds-text-input__input[readonly],.webform-submission-data-preview-page .hds-text-input .hds-text-input__input,.webform-print-page-html .hds-text-input .hds-text-input__input[readonly],.webform-print-page-html .hds-text-input .hds-text-input__input{border:2px var(--color-black) solid}.webform-submission--view-mode-html .webform-element,.webform-submission-data-preview-page .webform-element,.webform-print-page-html .webform-element{border:1px var(--color-black) solid;margin-bottom:8mm;padding:2.5mm;position:relative}.webform-submission--view-mode-html .webform-preview,.webform-submission-data-preview-page .webform-preview,.webform-print-page-html .webform-preview{margin-top:0}.webform-submission--view-mode-html .webform-preview label,.webform-submission-data-preview-page .webform-preview label,.webform-print-page-html .webform-preview label{align-items:flex-end;display:flex;font-size:8pt;height:100%;left:0;pointer-events:none;position:absolute;top:-100%;width:100%}.webform-submission--view-mode-html .webform-preview .webform-element,.webform-submission-data-preview-page .webform-preview .webform-element,.webform-print-page-html .webform-preview .webform-element{border:1px var(--color-black) solid;margin-bottom:8mm;padding:2.5mm;position:relative;top:5mm}.webform-submission--view-mode-html .webform-preview .webform-multiple-table--operations,.webform-submission-data-preview-page .webform-preview .webform-multiple-table--operations,.webform-print-page-html .webform-preview .webform-multiple-table--operations{display:none}.webform-submission--view-mode-html .webform-print-header,.webform-submission-data-preview-page .webform-print-header,.webform-print-page-html .webform-print-header{align-items:center;background:var(--color-white);border-bottom:1px var(--color-black-40) solid;display:flex;flex-flow:row nowrap;font-size:9pt;height:21mm;left:0;max-width:100%;min-width:100%;position:fixed;top:0;width:100%;z-index:1000}.webform-submission--view-mode-html .webform-print-header svg,.webform-submission-data-preview-page .webform-print-header svg,.webform-print-page-html .webform-print-header svg{color:var(--color-black);display:block;height:25mm;margin-right:3mm;width:55mm}.webform-submission--view-mode-html .webform-print-header .webform-print-header-left-text,.webform-submission-data-preview-page .webform-print-header .webform-print-header-left-text,.webform-print-page-html .webform-print-header .webform-print-header-left-text{color:var(--color-black-40);text-align:left;width:100%}.webform-submission--view-mode-html .webform-print-header .webform-print-header-right-text,.webform-submission-data-preview-page .webform-print-header .webform-print-header-right-text,.webform-print-page-html .webform-print-header .webform-print-header-right-text{color:var(--color-black-40);text-align:right;width:100%}.webform-submission--view-mode-html .webform-print-footer,.webform-submission-data-preview-page .webform-print-footer,.webform-print-page-html .webform-print-footer{align-items:center;background:var(--color-white);border-top:1px var(--color-black-40) solid;bottom:0;display:flex;flex-flow:row nowrap;font-size:9pt;height:17mm;left:0;max-width:100%;min-width:100%;position:fixed;width:100%;z-index:1000}.webform-submission--view-mode-html .webform-print-footer svg,.webform-submission-data-preview-page .webform-print-footer svg,.webform-print-page-html .webform-print-footer svg{color:var(--color-black);display:block;height:15mm;margin-right:3mm;width:33mm}.webform-submission--view-mode-html .webform-print-footer .webform-print-footer-left-text,.webform-submission-data-preview-page .webform-print-footer .webform-print-footer-left-text,.webform-print-page-html .webform-print-footer .webform-print-footer-left-text{color:var(--color-black-40);text-align:left;width:100%}.webform-submission--view-mode-html .webform-print-footer .webform-print-footer-right-text,.webform-submission-data-preview-page .webform-print-footer .webform-print-footer-right-text,.webform-print-page-html .webform-print-footer .webform-print-footer-right-text{color:var(--color-black-40);text-align:right;width:100%}.webform-submission--view-mode-html .webform-print-header-space,.webform-submission-data-preview-page .webform-print-header-space,.webform-print-page-html .webform-print-header-space{background:var(--color-white);font-size:9pt;height:21mm}.webform-submission--view-mode-html .webform-print-footer-space,.webform-submission-data-preview-page .webform-print-footer-space,.webform-print-page-html .webform-print-footer-space{background:var(--color-white);font-size:9pt;height:17mm}.webform-submission--view-mode-html .webform-print-wrapper-table,.webform-submission-data-preview-page .webform-print-wrapper-table,.webform-print-page-html .webform-print-wrapper-table{border:0;margin:0;overflow-x:visible;overflow-x:initial}.webform-submission--view-mode-html .webform-section-flex-wrapper,.webform-submission-data-preview-page .webform-section-flex-wrapper,.webform-print-page-html .webform-section-flex-wrapper{flex-flow:row wrap}.webform-submission--view-mode-html .webform-section-flex-wrapper>h3.webform-section-title,.webform-submission-data-preview-page .webform-section-flex-wrapper>h3.webform-section-title,.webform-print-page-html .webform-section-flex-wrapper>h3.webform-section-title{max-width:100%;width:100%}.webform-submission--view-mode-html .webform-section-grid-wrapper,.webform-submission-data-preview-page .webform-section-grid-wrapper,.webform-print-page-html .webform-section-grid-wrapper{display:flex;flex-flow:row nowrap}.webform-submission--view-mode-html .webform-section-grid-wrapper>h3.webform-section-title,.webform-submission-data-preview-page .webform-section-grid-wrapper>h3.webform-section-title,.webform-print-page-html .webform-section-grid-wrapper>h3.webform-section-title{font-size:1.25rem;margin-top:0;max-width:5cm;width:100%}.webform-submission--view-mode-html .webform-section-grid-wrapper>dl.webform-section-contents,.webform-submission-data-preview-page .webform-section-grid-wrapper>dl.webform-section-contents,.webform-print-page-html .webform-section-grid-wrapper>dl.webform-section-contents{margin-top:0;max-width:100%;padding-left:1cm;width:100%}.webform-submission--view-mode-html .webform-section-grid-wrapper>dl.webform-section-contents dt,.webform-submission-data-preview-page .webform-section-grid-wrapper>dl.webform-section-contents dt,.webform-print-page-html .webform-section-grid-wrapper>dl.webform-section-contents dt{font-weight:bold;margin:0;padding:0;page-break-after:avoid}.webform-submission--view-mode-html .webform-section-grid-wrapper>dl.webform-section-contents dd,.webform-submission-data-preview-page .webform-section-grid-wrapper>dl.webform-section-contents dd,.webform-print-page-html .webform-section-grid-wrapper>dl.webform-section-contents dd{margin:0;padding:0;page-break-before:avoid}.webform-submission--view-mode-html .webform-print-page-body h2,.webform-submission-data-preview-page .webform-print-page-body h2,.webform-print-page-html .webform-print-page-body h2{margin-bottom:1cm}}.webform-submission-data dl dt{font-weight:bold}.webform-submission-data dl dd{margin:0;padding:0}.webform-submission-data dl dl{padding-left:var(--spacing-2-xs)}.webform-submission-data dl>br{display:none}.webform-print-page-html .webform-section-wrapper>h4,.webform-print-page-html .webform-section-wrapper .print-label{margin-top:var(--spacing-2-xs);line-height:1.5}.webform-print-page-html .webform-section-wrapper fieldset{padding:var(--spacing-s)}@media(min-width: 768px){.webform-print-page-html .webform-section-wrapper fieldset{min-width:400px;padding:var(--spacing-s) var(--spacing-m)}}.application-list{padding-bottom:var(--spacing-xl);padding-left:0}.application-list__processed-human-readable{display:none}.application-list__item{background:var(--color-bus-light);display:block;margin:var(--spacing-m) 0;padding:var(--spacing-2-xl) var(--spacing-s) var(--spacing-m);position:relative}.application-list__item .new-message{background-color:var(--color-alert);border-radius:var(--spacing-xl);display:inline-block;padding:var(--spacing-2-xs)}.application-list__item .new-message .hel-icon--size-s{height:20px;width:20px}.application-list__item h3,.application-list__item h4{margin-top:var(--spacing-xs)}.application-list__item h4{font-size:1rem}.application-list__item--submitted{display:none}.application-list__item__link{display:flex;margin-top:var(--spacing-m)}.application-list__item__link a{font-size:1.25rem}.application-list__item__link a i{vertical-align:text-bottom}.application-list__item__row{display:flex;flex-flow:row wrap;gap:var(--spacing-m);justify-content:space-between}.application-list__item__row__left{justify-content:flex-start}.application-list__item__row__top{padding:var(--spacing-2-xs) var(--spacing-s) var(--spacing-2-xs) 0;position:absolute;top:0;width:100%}.application-list__item--status{--status-label-height: 32px;align-items:center;border-radius:20px;display:inline-flex;font-size:var(--fontsize-body-s);line-height:var(--status-label-height);min-height:var(--status-label-height);padding:var(--spacing-3-xs) var(--spacing-s);padding-left:var(--spacing-xs);vertical-align:middle}.application-list__item--status+.hds-loading-spinner{display:inline-block;left:10px;margin:0;padding:0;position:relative;top:var(--spacing-3-xs)}.application-list__item--status.hide-spinner+.hds-loading-spinner{display:none}.application-list__item--status+div+.application-list__item--error{display:none}.application-list__item--status.show-error{background:var(--color-black-20);color:var(--color-black-90)}.application-list__item--status.show-error+div+.application-list__item--error{display:inline-flex;left:var(--spacing-xs);margin:0;padding:0;position:relative;top:var(--spacing-3-xs)}.application-list__item--status.show-error+div+.application-list__item--error .application-list--error-text{display:inline-block;margin-left:var(--spacing-2-xs)}.application-list__item--status--draft{padding-left:0}.application-list__item--status--sent,.application-list__item--status--submitted{background:var(--color-black-10)}.application-list__item--status--sent::before,.application-list__item--status--submitted::before{--icon-size: 1.5rem;background-color:#000;background-size:contain;content:"";display:inline-block;height:calc(var(--line-height) * 1em);height:var(--icon-size, calc(var(--line-height) * 1em));-webkit-mask-image:var(--hel-icon--alert-circle);mask-image:var(--hel-icon--alert-circle);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);-webkit-mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));vertical-align:bottom;width:calc(var(--line-height) * 1em);width:var(--icon-size, calc(var(--line-height) * 1em));background-color:var(--color-black);content:"";margin-right:var(--spacing-2-xs)}.application-list__item--status--received,.application-list__item--status--pending,.application-list__item--status--processing,.application-list__item--status--preparing{background:var(--color-info);color:var(--color-white)}.application-list__item--status--received::before,.application-list__item--status--pending::before,.application-list__item--status--processing::before,.application-list__item--status--preparing::before{--icon-size: 1.5rem;background-color:#000;background-size:contain;content:"";display:inline-block;height:calc(var(--line-height) * 1em);height:var(--icon-size, calc(var(--line-height) * 1em));-webkit-mask-image:var(--hel-icon--info-circle);mask-image:var(--hel-icon--info-circle);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);-webkit-mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));vertical-align:bottom;width:calc(var(--line-height) * 1em);width:var(--icon-size, calc(var(--line-height) * 1em));background-color:var(--color-white);content:"";margin-right:var(--spacing-2-xs)}.application-list__item--status--done,.application-list__item--status--ready,.application-list__item--status--resolved{background:var(--color-success);color:var(--color-white)}.application-list__item--status--done::before,.application-list__item--status--ready::before,.application-list__item--status--resolved::before{--icon-size: 1.5rem;background-color:#000;background-size:contain;content:"";display:inline-block;height:calc(var(--line-height) * 1em);height:var(--icon-size, calc(var(--line-height) * 1em));-webkit-mask-image:var(--hel-icon--check-circle);mask-image:var(--hel-icon--check-circle);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);-webkit-mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));vertical-align:bottom;width:calc(var(--line-height) * 1em);width:var(--icon-size, calc(var(--line-height) * 1em));background-color:var(--color-white);content:"";margin-right:var(--spacing-2-xs)}.application-list__item--status--rejected,.application-list__item--status--deleted,.application-list__item--status--canceled,.application-list__item--status--cancelled{background:var(--color-alert)}.application-list__item--status--rejected::before,.application-list__item--status--deleted::before,.application-list__item--status--canceled::before,.application-list__item--status--cancelled::before{--icon-size: 1.5rem;background-color:#000;background-size:contain;content:"";display:inline-block;height:calc(var(--line-height) * 1em);height:var(--icon-size, calc(var(--line-height) * 1em));-webkit-mask-image:var(--hel-icon--alert-circle);mask-image:var(--hel-icon--alert-circle);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);-webkit-mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));vertical-align:bottom;width:calc(var(--line-height) * 1em);width:var(--icon-size, calc(var(--line-height) * 1em));background-color:var(--color-black);content:"";margin-right:var(--spacing-2-xs)}.application-list__item--status--error{background:var(--color-black-20);color:var(--color-black);text-transform:uppercase}.application-list__item--status--error .hel-icon{margin-right:var(--spacing-3-xs)}.application-list__count{font-size:1.5rem}.application-list__count-value{font-weight:bold}.application-list__information-row{align-items:flex-end;display:flex;flex-flow:row nowrap;justify-content:space-between;width:100%}@media(max-width: 35rem){.application-list__information-row{flex-flow:row wrap}}.application-list__information-row .grant-applications--select-wrapper select{max-width:100%;width:322px}.application-list__status__wrapper{background:var(--color-black-5)}.application-list__status__container{display:flex;flex-flow:row wrap;gap:var(--spacing-layout-m);justify-content:flex-start;padding-bottom:var(--spacing-m);padding-top:var(--spacing-m)}.application-list__status__label{font-weight:bold}.application-list__status__value{display:flex;flex-flow:row;justify-items:center;min-height:var(--spacing-xl)}.application-list__status__value>div{margin:auto}.application-list__search-row{align-items:flex-end;display:flex;flex-flow:row nowrap;gap:var(--spacing-s);justify-content:space-between;width:100%}@media(max-width: 35rem){.application-list__search-row{flex-flow:row wrap}}.application-list__search-row .hds-text-input{flex:1 100%;max-width:100%}.application-list__search-row .hds-text-input__input-wrapper{display:block}.application-list__search-row .hds-text-input__input-wrapper input{width:100%}.application-list__search-row button{white-space:nowrap}.application-list__pagination{--line-height: 1.5555555556;font-size:1.125rem;font-weight:400;line-height:var(--line-height);display:inline-flex;flex-wrap:wrap;font-weight:700;gap:var(--spacing-2-xs);justify-content:center;list-style:none;padding:0}.application-list__pagination li{margin-top:0}.application-list__pagination li.active a{text-decoration:underline}.application-list__pagination li.disabled a{cursor:default;text-decoration:none}.application-list__pagination li.disabled a:hover,.application-list__pagination li.disabled a:focus,.application-list__pagination li.disabled a:active{outline:none;text-decoration:none}.application-list__pagination li a{color:var(--color-black-90);display:block;height:var(--link-height);min-width:40px;padding-left:var(--spacing-3-xs);padding-right:var(--spacing-3-xs);text-decoration:none}.application-list__pagination li a:hover{text-decoration:underline}.application-list__pagination li a:focus,.application-list__pagination li a:active{outline:solid var(--color-coat-of-arms) 3px;outline-offset:1px}.grants-profile hr{border:1px solid var(--color-silver);margin:var(--spacing-layout-xs) 0}.grants-profile h3.info-grants{border-bottom:2px solid var(--color-silver);padding-bottom:var(--spacing-l)}.grants-profile--title{align-items:center;display:flex;flex-flow:row nowrap}.grants-profile--title .grants-profile--initials{border-radius:50%;display:none;font-size:var(--fontsize-body-xl);font-weight:bold;height:var(--spacing-4-xl);line-height:var(--spacing-4-xl);margin-right:var(--spacing-m);text-align:center;vertical-align:middle;width:var(--spacing-4-xl)}@media(min-width: 992px){.grants-profile--title .grants-profile--initials{display:block}}.grants-profile--title .grants-profile--initials:hover,.grants-profile--title .grants-profile--initials:active,.grants-profile--title .grants-profile--initials:focus{text-decoration:underline}.grants-profile--title .grants-profile--initials-colorscheme-2{background-color:var(--color-bus);color:var(--color-white)}.grants-profile--title .grants-profile--initials-colorscheme-1{background-color:var(--color-engel);color:var(--color-black)}.grants-profile--title .grants-profile--initials-colorscheme-0{background-color:var(--color-tram);color:var(--color-white)}.grants-profile--title h1{flex-grow:100}.grants-profile--basicinfo{--line-height: 1.5;background-color:var(--color-silver-light);border-bottom:8px solid var(--color-engel-dark);padding-bottom:var(--spacing-2-xs);padding-top:var(--spacing-l)}.grants-profile--basicinfo h3{font-size:var(--fontsize-heading-l);margin-top:0;padding-top:0}.grants-profile--extrainfo{padding-bottom:var(--spacing-l);padding-top:var(--spacing-l)}.grants-profile--extrainfo .hds-notification{margin-bottom:var(--spacing-xl)}.grants-profile--extrainfo fieldset.form-wrapper{background-color:var(--color-silver-light);border:0;padding:var(--spacing-l)}.grants-profile--extrainfo fieldset.inline-error-message{background-color:transparent;background-color:initial;padding:0 0 0 var(--spacing-2-xs)}.grants-profile--extrainfo fieldset.inline-error-message legend{display:none}.grants-profile--update-link{margin-bottom:var(--spacing-layout-2-xs);margin-top:var(--spacing-layout-xs)}.grants-profile--infotext{font-size:var(--fontsize-body-l);margin-bottom:var(--spacing-s)}.grants-profile--wrapper{display:flex;flex-wrap:wrap}.grants-profile--wrapper-item{margin-bottom:var(--spacing-layout-2-xs);width:100%}@media(min-width: 576px){.grants-profile--wrapper-item{flex:1;margin-bottom:0}}.grants-profile--wrapper-item:first-child{flex:auto;margin-bottom:var(--spacing-layout-2-xs);width:100%}.grants-profile .profile-add-more{margin-top:1em}[dir="ltr"] .grants-profile dd{margin-left:0}[dir="rtl"] .grants-profile dd{margin-right:0}.grants-profile--officials{margin-left:0;padding-left:0}.grants-profile--officials-item{border-left:4px var(--color-copper) solid;display:flex;flex-flow:row nowrap;justify-content:space-between;list-style:none;margin-bottom:var(--spacing-layout-s);margin-left:0;max-width:var(--webform-element-width--input-large);padding-left:var(--spacing-layout-xs);width:100%}.grants-profile--officials-item--position{font-size:var(--fontsize-heading-xs);font-weight:bold;margin-bottom:var(--spacing-layout-2-xs);margin-top:0;padding-top:0}.grants-profile--officials-edit-wrapper{text-align:right}.grants-profile--officials-edit-wrapper a{display:inline-block}.grants-profile .hel-icon--check-circle-fill{color:var(--color-success);vertical-align:middle}.grants-profile-grants-profile .tabledrag-toggle-weight-wrapper,.grants-profile-grants-profile .field-multiple-drag{display:none}.grants-profile .hds-text-input__label{display:inline-block;margin-top:0}.page--oma-asiointi__private-person .grants-profile--basicinfo{border-bottom:8px solid var(--color-copper)}.page--oma-asiointi__private-person .grants-profile--wrapper{display:grid;grid-template-columns:1fr 1fr}.page--oma-asiointi__unregistered-community .grants-profile--wrapper{display:grid;grid-template-columns:1fr 1fr}.hds-link .hel-icon{margin-right:var(--spacing-2-xs);vertical-align:bottom}.hds-link span.link-label{font-weight:bold;margin-right:var(--spacing-m)}.bold-link{font-weight:bold}div.applicant-info--from-prh,div.applicant-info--from-grants{display:grid;grid-template-columns:1fr}@media(min-width: 576px){div.applicant-info--from-prh,div.applicant-info--from-grants{grid-template-columns:1fr 1fr}}@media(min-width: 768px){div.applicant-info--from-prh,div.applicant-info--from-grants{grid-template-columns:1fr 1fr 1fr}}div.applicant-info--from-prh .form-required::after,div.applicant-info--from-grants .form-required::after{content:none}div.applicant-info--from-prh{border-bottom:2px solid var(--color-silver);margin-bottom:var(--spacing-layout-xs);padding-bottom:var(--spacing-layout-2-xs)}div.grants-handler--prefilled-field .field-prefix,.grants-profile-prh-info .field-prefix{display:block;position:absolute;right:var(--spacing-layout-s);top:0}div.grants-handler--prefilled-field .hds-text-input__input-wrapper,div.grants-handler--prefilled-field .description,.grants-profile-prh-info .hds-text-input__input-wrapper,.grants-profile-prh-info .description{display:inline-block;white-space:normal}div.grants-handler--prefilled-field .hel-icon--check-circle-fill,.grants-profile-prh-info .hel-icon--check-circle-fill{color:var(--color-success);vertical-align:middle}div.grants-handler--prefilled-field .hds-text-input__input,div.grants-handler--prefilled-field .webform-element-description,.grants-profile-prh-info .hds-text-input__input,.grants-profile-prh-info .webform-element-description{color:var(--color-black);display:block;font-size:var(--fontsize-body-m);line-height:var(--spacing-m);position:relative}div.grants-handler--prefilled-field .hds-text-input__label,.grants-profile-prh-info .hds-text-input__label{margin-bottom:0}.grants-profile--imported-section .webform-section-flex-wrapper{background-color:var(--color-silver-light);border-bottom:8px solid var(--color-engel-dark);display:block;padding-bottom:var(--spacing-2-xs);padding-left:var(--spacing-l);padding-right:var(--spacing-l);padding-top:var(--spacing-l);width:100%}.grants-profile--imported-section .webform-section-flex-wrapper h3.webform-section-title{font-size:var(--fontsize-heading-l);font-weight:400;margin-top:0;max-width:100%;padding-top:0;width:100%}.grants-profile--imported-section .webform-section-flex-wrapper .webform-section-wrapper{padding:0}.grants-profile--imported-section .webform-section-flex-wrapper .hds-text-input{margin-bottom:0}.grants-profile--imported-section .webform-section-flex-wrapper #edit-grants-profile-items-container{display:flex;flex-flow:row wrap;justify-content:space-between;margin-bottom:var(--spacing-layout-xs);margin-top:var(--spacing-layout-xs);width:100%}.grants-profile--imported-section .webform-section-flex-wrapper #edit-grants-profile-items-container>div{margin:0 var(--spacing-layout-xs) 0 0;min-width:160px}.grants-profile--imported-section .webform-section-flex-wrapper #edit-grants-profile-items-container .hds-text-input__input-wrapper{display:none}.grants-profile--imported-section .webform-section-flex-wrapper #edit-grants-profile-items-container label{font-size:var(--fontsize-body-m);font-weight:bold;margin:0}.grants-profile--imported-section .webform-section-flex-wrapper .form-item-prh-markup{border-bottom:2px solid var(--color-silver);padding-bottom:var(--spacing-layout-xs);padding-top:var(--spacing-layout-xs)}.grants-profile__local-tasks__wrapper{margin-bottom:0}.openid-connect-login-form.openid-connect-login-form{border-bottom:0;margin-bottom:0;padding-bottom:0}.grants-profile--links{display:flex;justify-content:space-between}.company-delete-confirm-form .form-actions{margin-top:var(--spacing-layout-xs)}.company-delete-confirm-form .form-submit{margin-right:var(--spacing-2-xs)}.page--oma-asiointi .main-content{margin-top:0}.page--oma-asiointi .main-content h2{margin-top:var(--spacing-m)}.hero--oma-asiointi{margin-bottom:var(--spacing-l)}.hero--oma-asiointi .container{padding-top:var(--spacing-layout-m)}.hero--oma-asiointi .hero__text-content{align-items:center;display:flex}.hero--oma-asiointi .hero__title{margin-left:0}@media(min-width: 576px){.hero--oma-asiointi .hero__title{margin-left:40px}}.hero--oma-asiointi .hel-icon{display:none}@media(min-width: 576px){.hero--oma-asiointi .hel-icon{--icon-size: 48px;display:block;flex-shrink:0}}#oma-asiointi__sent{background:var(--color-silver-light)}#oma-asiointi__sent .application-list__item{background:var(--color-white)}.oma-asiointi-block{background-color:var(--color-silver-light);padding-bottom:var(--spacing-l);padding-top:var(--spacing-l)}.oma-asiointi-block h2{margin-bottom:var(--spacing-s);margin-top:0}.oma-asiointi-block h3{font-size:var(--fontsize-heading-m);font-weight:500}.oma-asiointi-block .header{border-bottom:1px solid var(--color-silver-dark);display:flex;justify-content:space-between;padding-bottom:var(--spacing-xs)}.oma-asiointi-block .header .user,.oma-asiointi-block .header .link{font-weight:700}.oma-asiointi-block .header .link .hel-icon{vertical-align:text-top}.oma-asiointi-block--link{display:block;position:relative;text-decoration:none}.oma-asiointi-block--link::after{--icon-size: 1.5rem;background-color:#000;background-size:contain;content:"";display:inline-block;height:calc(var(--line-height) * 1em);height:var(--icon-size, calc(var(--line-height) * 1em));-webkit-mask-image:var(--hel-icon--arrow-right);mask-image:var(--hel-icon--arrow-right);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);-webkit-mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));vertical-align:bottom;width:calc(var(--line-height) * 1em);width:var(--icon-size, calc(var(--line-height) * 1em));transition:transform .2s linear;bottom:var(--spacing-m);content:"";display:block;flex-shrink:0;margin-left:-4px;margin-top:var(--spacing-2-xs);position:absolute;right:var(--spacing-m)}@media(prefers-reduced-motion){.oma-asiointi-block--link::after{transition:none}}@media(min-width: 576px){.oma-asiointi-block--link::after{--icon-size: 3rem;margin-left:-8px;margin-top:var(--spacing-s)}}.oma-asiointi-block--link:focus::after,.oma-asiointi-block--link:hover::after{transform:translateX(var(--spacing-2-xs))}@media(prefers-reduced-motion){.oma-asiointi-block--link:focus::after,.oma-asiointi-block--link:hover::after{transform:none}}.oma-asiointi-block .new-message{background-color:var(--color-alert);display:inline-block;font-weight:500;padding:var(--spacing-2-xs);text-transform:uppercase}.oma-asiointi-block .new-messages-length{background-color:var(--color-black-20);border-radius:50%;display:inline-block;font-size:var(--fontsize-heading-s);height:30px;line-height:30px;margin-left:var(--spacing-m);position:relative;text-align:center;width:30px}.oma-asiointi-block .new-messages-length.has-new-messages{background-color:var(--color-alert)}@media(min-width: 768px){.oma-asiointi-block .content{display:grid;grid-gap:var(--spacing-s);grid-template-columns:1fr 1fr}}.oma-asiointi-block .submission,.oma-asiointi-block .message{background-color:var(--color-white);margin-bottom:var(--spacing-s);margin-top:var(--spacing-s);padding:var(--spacing-m)}.oma-asiointi-block .submission .submission-title,.oma-asiointi-block .submission .message-title,.oma-asiointi-block .message .submission-title,.oma-asiointi-block .message .message-title{font-size:var(--fontsize-heading-s);font-weight:500;margin-bottom:var(--spacing-2-xs);margin-top:0;text-decoration:underline}.oma-asiointi-block .submission .message-title,.oma-asiointi-block .message .message-title{margin-top:var(--spacing-s)}.oma-asiointi-block .submission:hover .submission-title,.oma-asiointi-block .submission:hover .message-title,.oma-asiointi-block .message:hover .submission-title,.oma-asiointi-block .message:hover .message-title{text-decoration:none}.oma-asiointi-block .message{padding-right:var(--spacing-5-xl)}.oma-asiointi{margin-top:var(--spacing-l)}.oma-asiointi ul{padding:0}.oma-asiointi__list{padding-bottom:var(--spacing-l);padding-top:var(--spacing-l)}.oma-asiointi__list h2{margin-bottom:var(--spacing-m);margin-top:0}.oma-asiointi #oma-asiointi__sent{padding-top:var(--spacing-s)}.oma-asiointi .oma-asiointi-infoboxes-container .oma-asiointi-infoboxes{gap:var(--spacing-3-xl);margin:var(--spacing-2-xl) 0}@media(min-width: 768px){.oma-asiointi .oma-asiointi-infoboxes-container .oma-asiointi-infoboxes{display:flex}}.oma-asiointi .oma-asiointi-infoboxes-container .oma-asiointi-infobox{background-color:var(--color-info-light);flex:1;margin-bottom:var(--spacing-layout-2-xs);padding:var(--spacing-l)}@media(min-width: 768px){.oma-asiointi .oma-asiointi-infoboxes-container .oma-asiointi-infobox{margin-bottom:0}}.oma-asiointi .oma-asiointi-infoboxes-container .oma-asiointi-infobox:last-of-type{margin-bottom:0}.oma-asiointi .oma-asiointi-infoboxes-container .oma-asiointi-infobox--link{display:flex;margin-top:var(--spacing-layout-2-xs)}.oma-asiointi .oma-asiointi-infoboxes-container .oma-asiointi-infobox--link a{font-size:1.25rem}.oma-asiointi .oma-asiointi-infoboxes-container .oma-asiointi-infobox h3{margin-top:0}.asiointirooli-block{background-color:var(--color-black);color:var(--color-white);font-weight:500;margin-bottom:16px;padding:var(--spacing-2-xs)}.asiointirooli-block a{color:var(--color-white)}.asiointirooli-block .link--switch-role,.asiointirooli-block .link--stop-mandate{color:var(--color-white);margin-left:var(--spacing-layout-s)}@media(max-width: 768px){.asiointirooli-block .link--switch-role,.asiointirooli-block .link--stop-mandate{display:block;margin-left:0}}.asiointirooli-block .link--stop-mandate::before{--icon-size: 1.5rem;background-color:#000;background-size:contain;content:"";display:inline-block;height:calc(var(--line-height) * 1em);height:var(--icon-size, calc(var(--line-height) * 1em));-webkit-mask-image:var(--hel-icon--cross-circle-fill);mask-image:var(--hel-icon--cross-circle-fill);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);-webkit-mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));vertical-align:bottom;width:calc(var(--line-height) * 1em);width:var(--icon-size, calc(var(--line-height) * 1em));background-color:var(--color-white);content:"";display:inline-block;margin-right:10px;-webkit-mask-image:url('data:image/svg+xml, ');mask-image:url('data:image/svg+xml, ')}.asiointirooli-block .link--switch-role::before{--icon-size: 1.5rem;background-color:#000;background-size:contain;content:"";display:inline-block;height:calc(var(--line-height) * 1em);height:var(--icon-size, calc(var(--line-height) * 1em));-webkit-mask-image:var(--hel-icon--swap-user);mask-image:var(--hel-icon--swap-user);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);mask-size:calc(var(--line-height) * 1em) calc(var(--line-height) * 1em);-webkit-mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));mask-size:var(--icon-size, calc(var(--line-height) * 1em)) var(--icon-size, calc(var(--line-height) * 1em));vertical-align:bottom;width:calc(var(--line-height) * 1em);width:var(--icon-size, calc(var(--line-height) * 1em));background-color:var(--color-white);content:"";display:inline-block;margin-right:10px;-webkit-mask-image:url('data:image/svg+xml, ');mask-image:url('data:image/svg+xml, ')}#grants-mandate-type .form-actions{display:flex;flex-direction:column;flex-wrap:wrap;justify-content:flex-start;width:100%}@media(min-width: 576px){#grants-mandate-type .form-actions{flex-direction:row;margin-left:calc(-1*var(--spacing-m));width:calc(100% + var(--spacing-m))}}#grants-mandate-type .form-actions .hds-card--applicant-role{margin-bottom:var(--spacing-l);position:relative;width:100%}@media(min-width: 576px){#grants-mandate-type .form-actions .hds-card--applicant-role{margin-left:var(--spacing-m);width:calc(50% - var(--spacing-m))}}@media(min-width: 992px){#grants-mandate-type .form-actions .hds-card--applicant-role{width:calc(33.3333333333% - var(--spacing-m))}}#grants-mandate-type .form-actions .hds-card--applicant-role .hds-card__body{align-content:space-between;height:100%}#grants-mandate-type .form-actions .hds-card--applicant-role .hds-card--mandate-card-content{display:grid;gap:var(--spacing-m);grid-gap:var(--spacing-m)} diff --git a/public/themes/custom/hdbt_subtheme/src/scss/06_components/forms/webform/_element-description.scss b/public/themes/custom/hdbt_subtheme/src/scss/06_components/forms/webform/_element-description.scss index 933c75cb0b..8dd1687fe6 100644 --- a/public/themes/custom/hdbt_subtheme/src/scss/06_components/forms/webform/_element-description.scss +++ b/public/themes/custom/hdbt_subtheme/src/scss/06_components/forms/webform/_element-description.scss @@ -1,8 +1,3 @@ .webform-element-description { - --helper-color-default: var(--color-black-60); - color: var(--helper-color-default); - display: block; - font-size: var(--fontsize-body-m); - line-height: var(--lineheight-l); - margin-top: var(--spacing-s); + margin-top: $spacing-half; } diff --git a/public/themes/custom/hdbt_subtheme/templates/form/input-email/form-element--email.html.twig b/public/themes/custom/hdbt_subtheme/templates/form/input-email/form-element--email.html.twig index b28d9195cf..f7725a03af 100644 --- a/public/themes/custom/hdbt_subtheme/templates/form/input-email/form-element--email.html.twig +++ b/public/themes/custom/hdbt_subtheme/templates/form/input-email/form-element--email.html.twig @@ -60,7 +60,6 @@ {% set description_classes = [ 'description', - 'hds-text-input__helper-text', description_display == 'invisible' ? 'visually-hidden', ] %} diff --git a/public/themes/custom/hdbt_subtheme/templates/form/input-number/form-element--number.html.twig b/public/themes/custom/hdbt_subtheme/templates/form/input-number/form-element--number.html.twig index b28d9195cf..f7725a03af 100644 --- a/public/themes/custom/hdbt_subtheme/templates/form/input-number/form-element--number.html.twig +++ b/public/themes/custom/hdbt_subtheme/templates/form/input-number/form-element--number.html.twig @@ -60,7 +60,6 @@ {% set description_classes = [ 'description', - 'hds-text-input__helper-text', description_display == 'invisible' ? 'visually-hidden', ] %} diff --git a/tools/http/http-client.env.json b/tools/http/http-client.env.json index edcbff3c8c..71ea491f75 100644 --- a/tools/http/http-client.env.json +++ b/tools/http/http-client.env.json @@ -1,7 +1,7 @@ { "dev": { "atvUrl": "https://atv-api-hki-kanslia-atv-test.agw.arodevtest.hel.fi", - "transactionId": "LOCALYRTTI12-070-0000012", + "transactionId": "TEST-070-0000052", "document_id": "28753685-24b8-4542-b1c1-cc70ff9f9fbc", "integraatioUrl": "https://avustus-integration-test.agw.arodevtest.hel.fi" } From 2b4301c5f1d9792523eea8998e3842edd2bdbb99 Mon Sep 17 00:00:00 2001 From: Janne Suominen Date: Wed, 27 Nov 2024 10:59:31 +0200 Subject: [PATCH 59/74] UHF-10711: Last(?) fixes.. (#1583) --- ...ebform.iakkaiden_kulttuuri_ja_liikunta.yml | 2 +- ...ebform.iakkaiden_kulttuuri_ja_liikunta.yml | 204 ++++++++++++++++-- 2 files changed, 184 insertions(+), 22 deletions(-) diff --git a/conf/cmi/language/sv/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml b/conf/cmi/language/sv/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml index 7f1a275887..3f0586b494 100644 --- a/conf/cmi/language/sv/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml +++ b/conf/cmi/language/sv/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml @@ -271,7 +271,7 @@ elements: | menot_section: '#title': '4.2 Utgifter' talous_menon_tyyppi: - '#title': 'Typ av utgifter' + '#title': 'Typ av utgift' '#help': '

Skriv ner vilken typ av utgift det gäller. Utgifter kan till exempel vara andra lokalhyror och personalkostnader.

' '#multiple__add_more_button_label': 'Lägg till en utgift' lisatiedot_ja_liitteet: diff --git a/conf/cmi/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml b/conf/cmi/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml index ce9649a71f..17f89b89c8 100644 --- a/conf/cmi/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml +++ b/conf/cmi/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml @@ -642,6 +642,14 @@ elements: |- - ':input[name="kulttuuri2_summa"]': value: greater: '0' + required: + - ':input[name="kulttuuri1_summa"]': + value: + greater: '0' + - or + - ':input[name="kulttuuri2_summa"]': + value: + greater: '0' hankesuunnitelma_section: '#type': webform_section '#title': '3.1 Hankesuunnitelma' @@ -658,50 +666,99 @@ elements: |- 1: Kyllä 0: Ei '#default_value': '0' + '#states': + visible: + ':input[name="hankesuunnitelma_radios"]': + value: '0' + required: + ':input[name="hankesuunnitelma_radios"]': + value: '0' hankkeen_tarkoitus_tavoitteet: '#type': textarea '#title': 'Hankkeen tarkoitus ja tavoitteet' '#maxlength': 2500 - '#required': true '#counter_type': character '#counter_maximum': 2500 '#counter_maximum_message': '%d/2500 merkkiä jäljellä' + '#states': + visible: + ':input[name="hankesuunnitelma_radios"]': + value: '0' + required: + ':input[name="hankesuunnitelma_radios"]': + value: '0' hankkeen_toimenpiteet_aikataulu: '#type': textarea '#title': 'Mitkä ovat hankkeen konkreettiset toimenpiteet ja niiden toteutusaikataulu?' '#maxlength': 4000 - '#required': true '#counter_type': character '#counter_maximum': 4000 '#counter_maximum_message': '%d/4000 merkkiä jäljellä' + '#states': + visible: + ':input[name="hankesuunnitelma_radios"]': + value: '0' + required: + ':input[name="hankesuunnitelma_radios"]': + value: '0' hankkeen_toimenpiteet_toteutus: '#type': fieldset '#title': 'Hankkeen konkreettiset toimenpiteet on tarkoitus toteuttaa välillä' '#attributes': class: - grants-fieldset + '#states': + visible: + ':input[name="hankesuunnitelma_radios"]': + value: '0' hankkeen_toimenpiteet_alkupvm: '#type': date '#title': Alkupäivämäärä - '#required': true + '#states': + visible: + ':input[name="hankesuunnitelma_radios"]': + value: '0' + required: + ':input[name="hankesuunnitelma_radios"]': + value: '0' hankkeen_toimenpiteet_loppupvm: '#type': date '#title': Loppupäivämäärä - '#required': true + '#states': + visible: + ':input[name="hankesuunnitelma_radios"]': + value: '0' + required: + ':input[name="hankesuunnitelma_radios"]': + value: '0' hankkeen_keskeisimmat_kumppanit: '#type': textarea '#title': 'Nimeä hankkeen keskeisimmät yhteistyökumppanit ja heidän roolinsa hankkeessa' '#maxlength': 2500 - '#required': true '#counter_type': character '#counter_maximum': 2500 '#counter_maximum_message': '%d/2500 merkkiä jäljellä' + '#states': + visible: + ':input[name="hankesuunnitelma_radios"]': + value: '0' + required: + ':input[name="hankesuunnitelma_radios"]': + value: '0' haun_painopisteet_section: '#type': webform_section '#title': '3.2 Haun painopisteet' + '#states': + visible: + ':input[name="hankesuunnitelma_radios"]': + value: '0' haun_painopisteet_ohje: '#type': webform_markup '#markup': 'Mihin seuraavista iäkkäiden liikkumisen ja kulttuuritoiminnan edistämisen avustuksen painopisteistä hanke vastaa?

Hankkeessa tulee toteuttaa yhtä tai useampaa painopistettä. HUOM! Valitse vain ne painopisteet, joita edistätte hankkeessa konkreettisella tavalla. Jos hanke ei toteuta jotakin painopistettä, jätä tekstikenttä tyhjäksi.

' + '#states': + visible: + ':input[name="hankesuunnitelma_radios"]': + value: '0' haun_painopisteet_liikkumis_kehitys: '#type': textarea '#title': 'Kehitetäänkö hankkeessa liikkumismahdollisuuksia tai taide- ja kulttuuritoimintaa lähiympäristössä / alueellisesti? Miten?' @@ -709,6 +766,10 @@ elements: |- '#counter_type': character '#counter_maximum': 1250 '#counter_maximum_message': '%d/1250 merkkiä jäljellä' + '#states': + visible: + ':input[name="hankesuunnitelma_radios"]': + value: '0' haun_painopisteet_digi_kehitys: '#type': textarea '#title': 'Kehitetäänkö hankkeessa digitaalisesti / etänä toteutettavia kulttuuritoimintoja tai liikkumiseen aktivoivaa toimintaa? Miten?' @@ -716,6 +777,10 @@ elements: |- '#counter_type': character '#counter_maximum': 1250 '#counter_maximum_message': '%d/1250 merkkiä jäljellä' + '#states': + visible: + ':input[name="hankesuunnitelma_radios"]': + value: '0' haun_painopisteet_vertais_kehitys: '#type': textarea '#title': 'Kehitetäänkö hankkeessa vapaaehtois- / vertaistoimintaa? Miten?' @@ -723,6 +788,10 @@ elements: |- '#counter_type': character '#counter_maximum': 1250 '#counter_maximum_message': '%d/1250 merkkiä jäljellä' + '#states': + visible: + ':input[name="hankesuunnitelma_radios"]': + value: '0' haun_painopisteet_kulttuuri_kehitys: '#type': textarea '#title': 'Kehitetäänkö hankkeessa taide- ja kulttuuritoimijoiden osaamista tai luodaanko uusia työtapoja / rakenteita? Miten?' @@ -739,17 +808,29 @@ elements: |- - ':input[name="kulttuuri2_summa"]': value: greater: '0' + - ':input[name="hankesuunnitelma_radios"]': + value: '0' hankkeen_kohderyhmat_section: '#type': webform_section '#title': '3.3 Hankkeen kohderyhmät' + '#states': + visible: + ':input[name="hankesuunnitelma_radios"]': + value: '0' hankkeen_kohderyhmat_kenelle: '#type': textarea '#title': 'Kenelle hankkeen toiminta on pääasiallisesti suunnattu?' '#maxlength': 1250 - '#required': true '#counter_type': character '#counter_maximum': 1250 '#counter_maximum_message': '%d/1250 merkkiä jäljellä' + '#states': + visible: + ':input[name="hankesuunnitelma_radios"]': + value: '0' + required: + ':input[name="hankesuunnitelma_radios"]': + value: '0' hankkeen_kohderyhmat_erityisryhmat: '#type': textarea '#title': 'Kohdennetaanko hankkeessa toimintaa jollekin erityisryhmälle? Mille erityisryhmälle? Jos ei toteuteta, niin jätetään tyhjäksi.' @@ -758,75 +839,131 @@ elements: |- '#counter_type': character '#counter_maximum': 1250 '#counter_maximum_message': '%d/1250 merkkiä jäljellä' + '#states': + visible: + ':input[name="hankesuunnitelma_radios"]': + value: '0' hankkeen_kohderyhmat_tavoitus: '#type': textarea '#title': 'Kuinka hankkeen kohderyhmät aiotaan tavoittaa?' '#maxlength': 1250 - '#required': true '#counter_type': character '#counter_maximum': 1250 '#counter_maximum_message': '%d/1250 merkkiä jäljellä' + '#states': + visible: + ':input[name="hankesuunnitelma_radios"]': + value: '0' + required: + ':input[name="hankesuunnitelma_radios"]': + value: '0' hankkeen_kohderyhmat_konkretia: '#type': textarea '#title': 'Miten hankkeessa edistetään konkreettisin toimenpitein valitun kohderyhmän toimintakykyä ja hyvinvointia?' '#maxlength': 1250 - '#required': true '#counter_type': character '#counter_maximum': 1250 '#counter_maximum_message': '%d/1250 merkkiä jäljellä' + '#states': + visible: + ':input[name="hankesuunnitelma_radios"]': + value: '0' + required: + ':input[name="hankesuunnitelma_radios"]': + value: '0' hankkeen_kohderyhmat_osallisuus: '#type': textarea '#title': 'Millä tavoin hankkeessa edistetään osallisuutta? Mikä ikäihmisten rooli hankkeessa on?' '#maxlength': 1250 - '#required': true '#counter_type': character '#counter_maximum': 1250 '#counter_maximum_message': '%d/1250 merkkiä jäljellä' + '#states': + visible: + ':input[name="hankesuunnitelma_radios"]': + value: '0' + required: + ':input[name="hankesuunnitelma_radios"]': + value: '0' hankkeen_kohderyhmat_osaaminen: '#type': textarea '#title': 'Millaista osaamista kyseisen kohderyhmän/-ryhmien kanssa työskentelystä hanketoimijoilla on ennestään?' '#maxlength': 1250 - '#required': true '#counter_type': character '#counter_maximum': 1250 '#counter_maximum_message': '%d/1250 merkkiä jäljellä' + '#states': + visible: + ':input[name="hankesuunnitelma_radios"]': + value: '0' + required: + ':input[name="hankesuunnitelma_radios"]': + value: '0' hankkeen_kohderyhmat_postinrot: '#type': textfield '#title': 'Millä postinumeroalueella tai -alueilla Helsingissä hanke toteutetaan? Kirjaa kenttään enintään kolme (3) postinumeroaluetta ja erottele ne toisistaan pilkulla (,)' '#description_display': after - '#required': true '#autocomplete': 'off' '#attributes': class: - webform--medium '#size': 32 + '#states': + visible: + ':input[name="hankesuunnitelma_radios"]': + value: '0' + required: + ':input[name="hankesuunnitelma_radios"]': + value: '0' hankkeen_kohderyhmat_miksi_alue: '#type': textarea '#title': 'Miksi juuri kyseinen alue / alueet on valittu?' '#maxlength': 1250 - '#required': true '#counter_type': character '#counter_maximum': 1250 '#counter_maximum_message': '%d/1250 merkkiä jäljellä' + '#states': + visible: + ':input[name="hankesuunnitelma_radios"]': + value: '0' + required: + ':input[name="hankesuunnitelma_radios"]': + value: '0' hankkeen_riskit_section: '#type': webform_section '#title': '3.4 Riskit & analyysi' + '#states': + visible: + ':input[name="hankesuunnitelma_radios"]': + value: '0' hankkeen_riskit_keskeisimmat: '#type': textarea '#title': 'Mitkä ovat hankkeen toteuttamisen näkökulmasta keskeisimmät riskit?' '#maxlength': 2500 - '#required': true '#counter_type': character '#counter_maximum': 2500 '#counter_maximum_message': '%d/2500 merkkiä jäljellä' + '#states': + visible: + ':input[name="hankesuunnitelma_radios"]': + value: '0' + required: + ':input[name="hankesuunnitelma_radios"]': + value: '0' hankkeen_riskit_seuranta: '#type': textarea '#title': 'Miten hankkeessa aiotaan toteuttaa seurantaa ja arviointia?' '#maxlength': 2500 - '#required': true '#counter_type': character '#counter_maximum': 2500 '#counter_maximum_message': '%d/2500 merkkiä jäljellä' + '#states': + visible: + ':input[name="hankesuunnitelma_radios"]': + value: '0' + required: + ':input[name="hankesuunnitelma_radios"]': + value: '0' hankkeen_riskit_vakiinnuttaminen: '#type': textarea '#title': 'Onko hankkeen suunniteltu toiminta aikomus vakiinnuttaa osaksi hakijan/jonkun muun toimijan perustoimintaa hankkeen jälkeen? Jos kyllä, niin kuvaa tekstikenttään kuinka vakiinnuttaminen aiotaan tehdä, muuten jätä tyhjäksi.' @@ -834,6 +971,13 @@ elements: |- '#counter_type': character '#counter_maximum': 2500 '#counter_maximum_message': '%d/2500 merkkiä jäljellä' + '#states': + visible: + ':input[name="hankesuunnitelma_radios"]': + value: '0' + required: + ':input[name="hankesuunnitelma_radios"]': + value: '0' hankkeen_valiarviointi_section: '#type': webform_section '#title': '3.5 2-vuotisten hankkeiden väliarviointi' @@ -844,13 +988,16 @@ elements: |- arviointi_markup: '#type': webform_markup '#markup': 'Arvioi tässä osiossa hankkeen tähänastista toimintaa seuraavien kysymysten avulla. Avustuksen 2. osaa hakevien tulee liittää hakemukselle Muu liite-kohtaan niin ikään kustannuspaikkaraportti ajanjaksolta 1.6.-31.12.2024' + '#states': + visible: + ':input[name="hankesuunnitelma_radios"]': + value: '1' arviointi_toteuma: '#type': textarea '#title': 'Onko hanke edennyt suunnitelman mukaisesti? Arvioikaa hankkeen toteumaa tähän asti asteikolla 1-100% ja perustelkaa vastauksenne.' '#description': 'Onko hankkeessa tapahtunut merkittäviä muutoksia?' '#description_display': after '#maxlength': 1250 - '#required': true '#counter_type': character '#counter_maximum': 1250 '#counter_maximum_message': '%d/1250 merkkiä jäljellä' @@ -858,11 +1005,13 @@ elements: |- visible: ':input[name="hankesuunnitelma_radios"]': value: '1' + required: + ':input[name="hankesuunnitelma_radios"]': + value: '1' arviointi_muutokset_talous: '#type': textarea '#title': 'Talouteen liittyen; mitä?' '#maxlength': 1250 - '#required': true '#counter_type': character '#counter_maximum': 1250 '#counter_maximum_message': '%d/1250 merkkiä jäljellä' @@ -870,11 +1019,13 @@ elements: |- visible: ':input[name="hankesuunnitelma_radios"]': value: '1' + required: + ':input[name="hankesuunnitelma_radios"]': + value: '1' arviointi_muutokset_toiminta: '#type': textarea '#title': 'Toimintaan liittyen; mitä?' '#maxlength': 1250 - '#required': true '#counter_type': character '#counter_maximum': 1250 '#counter_maximum_message': '%d/1250 merkkiä jäljellä' @@ -882,11 +1033,13 @@ elements: |- visible: ':input[name="hankesuunnitelma_radios"]': value: '1' + required: + ':input[name="hankesuunnitelma_radios"]': + value: '1' arviointi_muutokset_aikataulu: '#type': textarea '#title': 'Aikatauluun liittyen; mitä?' '#maxlength': 1250 - '#required': true '#counter_type': character '#counter_maximum': 1250 '#counter_maximum_message': '%d/1250 merkkiä jäljellä' @@ -894,11 +1047,13 @@ elements: |- visible: ':input[name="hankesuunnitelma_radios"]': value: '1' + required: + ':input[name="hankesuunnitelma_radios"]': + value: '1' arviointi_haasteet: '#type': textarea '#title': 'Onko hanke kohdannut toimintaan vaikuttaneita haasteita? Jos, niin millaisia?' '#maxlength': 1250 - '#required': true '#counter_type': character '#counter_maximum': 1250 '#counter_maximum_message': '%d/1250 merkkiä jäljellä' @@ -906,11 +1061,13 @@ elements: |- visible: ':input[name="hankesuunnitelma_radios"]': value: '1' + required: + ':input[name="hankesuunnitelma_radios"]': + value: '1' arviointi_saavutettavuus: '#type': textarea '#title': 'Miten toiminta on tavoittanut osallistujia suhteessa tavoitteisiin?' '#maxlength': 1250 - '#required': true '#counter_type': character '#counter_maximum': 1250 '#counter_maximum_message': '%d/1250 merkkiä jäljellä' @@ -918,12 +1075,14 @@ elements: |- visible: ':input[name="hankesuunnitelma_radios"]': value: '1' + required: + ':input[name="hankesuunnitelma_radios"]': + value: '1' arviointi_avustus_kaytto: '#type': textarea '#help': 'Avustusehdot, kohta 10e: "Myönnetty avustus on palautettava Helsingin kaupungille, jos avustusta ei ole käytetty sinä aikana, jona se on avustuspäätöksen mukaan tullut käyttää.' '#title': 'Tuleeko ensimmäiselle hankekaudelle myönnetty avustus käytettyä näillä näkymin määräaikaan (31.5.2025) mennessä? Jos ei, niin avatkaa tähän johtaneita syitä.' '#maxlength': 1250 - '#required': true '#counter_type': character '#counter_maximum': 1250 '#counter_maximum_message': '%d/1250 merkkiä jäljellä' @@ -931,6 +1090,9 @@ elements: |- visible: ':input[name="hankesuunnitelma_radios"]': value: '1' + required: + ':input[name="hankesuunnitelma_radios"]': + value: '1' 4_talousarvio: '#type': webform_wizard_page '#title': '4. Talousarvio' From 900e381c1db7eb6df9caef580746d6753c7ef406 Mon Sep 17 00:00:00 2001 From: Janne Suominen Date: Wed, 27 Nov 2024 11:10:07 +0200 Subject: [PATCH 60/74] Uhf 10711 fixes 3 (#1584) * UHF-10711: Last(?) fixes.. * UHF-10711: HDBT version --- composer.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.lock b/composer.lock index 7cfdef1fc1..d12e87a4fa 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "c161d4f3133fa1d78cc822560407e714", + "content-hash": "38071525925e6bd7d00e824da7bdc2fb", "packages": [ { "name": "asm89/stack-cors", From dee63c5436ac4a93f55672a7313dfe871c39461c Mon Sep 17 00:00:00 2001 From: jeremysteerio <49063836+jeremysteerio@users.noreply.github.com> Date: Thu, 28 Nov 2024 09:49:25 +0200 Subject: [PATCH 61/74] UHF-10456: Sosiaali-, terveys- ja pelastustoimen yleisavustus (#1567) * UHF-10456: Add configs * UHF-10456: Add rest of necessary configs * UHF-10456: Fix translations * UHF-10456: Missing title translations * UHF-10456: Fix mismapping * UHF-10456: Fix phpcs --- conf/cmi/grants_metadata.settings.yml | 16 + .../en/webform.webform.sotepe_yleis.yml | 295 ++++++ .../sv/webform.webform.sotepe_yleis.yml | 297 ++++++ conf/cmi/webform.webform.sotepe_yleis.yml | 907 ++++++++++++++++++ .../src/Plugin/DataType/SotepeYleisData.php | 39 + .../Definition/SotepeyleisDefinition.php | 188 ++++ 6 files changed, 1742 insertions(+) create mode 100644 conf/cmi/language/en/webform.webform.sotepe_yleis.yml create mode 100644 conf/cmi/language/sv/webform.webform.sotepe_yleis.yml create mode 100644 conf/cmi/webform.webform.sotepe_yleis.yml create mode 100644 public/modules/custom/grants_metadata/src/Plugin/DataType/SotepeYleisData.php create mode 100644 public/modules/custom/grants_metadata/src/TypedData/Definition/SotepeyleisDefinition.php diff --git a/conf/cmi/grants_metadata.settings.yml b/conf/cmi/grants_metadata.settings.yml index 77ef0300af..fd564d5239 100644 --- a/conf/cmi/grants_metadata.settings.yml +++ b/conf/cmi/grants_metadata.settings.yml @@ -251,6 +251,16 @@ third_party_options: fi: 'KuvaErillis FI' en: 'KuvaErillis EN' sv: 'KuvaErillis SV' + 72: + id: SOTEPEYLEIS + code: SOTEPEYLEIS + dataDefinition: + definitionClass: Drupal\grants_metadata\TypedData\Definition\SotepeyleisDefinition + definitionId: grants_metadata_sotepeyleis + labels: + fi: 'Sosiaali-, terveys- ja pelastustoimen yleisavustus' + en: 'EN Sosiaali-, terveys- ja pelastustoimen yleisavustus' + sv: 'SV Sosiaali-, terveys- ja pelastustoimen yleisavustus' application_statuses: DRAFT: DRAFT SUBMITTED: SUBMITTED @@ -464,3 +474,9 @@ overridden_configuration: applicationOpen: '2024-01-03T11:08:26' applicationClose: '2029-07-30T11:19:00' disableCopying: 0 + - + 72: + grants_metadata: + applicationOpen: '2022-10-03T11:08:26' + applicationClose: '2029-07-30T11:19:00' + disableCopying: 0 diff --git a/conf/cmi/language/en/webform.webform.sotepe_yleis.yml b/conf/cmi/language/en/webform.webform.sotepe_yleis.yml new file mode 100644 index 0000000000..8e69b3da2e --- /dev/null +++ b/conf/cmi/language/en/webform.webform.sotepe_yleis.yml @@ -0,0 +1,295 @@ +title: 'General grants for social welfare, health care and rescue services' +elements: | + 1_hakijan_tiedot: + '#title': '1. Applicant details' + '#prev_button_label': 'Previous' + '#next_button_label': 'Next' + yhteiso_jolle_haetaan_avustusta: + '#title': 'Community for which the grant is being applied for' + prh_markup: + '#markup': '
The indicated information has been retrieved from the register of the Finnish Patent and Registration Office (PRH), and changing the information is only possible in the online service in question.
' + hakijan_tiedot: + '#title': Applicant + contact_person_email_section: + '#title': Email + contact_markup: + '#markup': 'Provide here a community email address that is actively read. Contact requests related to the grant application, such as requests for further clarification and completion, will be sent to the email address.' + email: + '#title': 'Email address' + '#help': 'Provide the email address to which you want the messages and notifications related to this application to be sent and which is actively read.' + contact_person_section: + '#title': 'Contact person for the application' + contact_person: + '#title': 'Contact person' + contact_person_phone_number: + '#title': 'Phone number' + osoite: + '#title': Address + community_address: + '#title': Address + '#help': 'If you want to add, delete or change address information, save the application as a draft and go to maintain the address information in your own data.' + '#community_address_select__title': 'Select the address' + tilinumero: + '#title': 'Account number' + bank_account: + '#title': 'Account number' + '#help': 'If you want to add, delete or change account number information, save the application as a draft and go to maintain the account number information in your own data.' + '#account_number_select__title': 'Select the account number' + '#account_number__title': '' + toiminnasta_vastaavat_henkilot: + '#title': 'Persons responsible for operations' + community_officials: + '#help': 'If you want to add, delete or change people, save the application as a draft and go to maintain the people's information in your own data.' + '#title': 'Persons responsible for operations' + '#multiple__add_more_button_label': 'Add person' + '#multiple__item_label': person + '#community_officials_select__title': 'Select official' + 2_avustustiedot: + '#title': '2. Grant details' + '#prev_button_label': 'Previous' + '#next_button_label': 'Next' + avustuksen_tiedot: + '#title': 'Grant details' + acting_year: + '#title': 'Year for which I am applying for a grant' + avustuslajit: + '#title': 'Types of grant' + subventions: + '#title': Grants + kayttotarkoitus: + '#title': 'Purpose of use' + compensation_purpose: + '#title': 'Brief description of the purpose(s) of the grant(s) applied for' + '#help': 'Indicate the purpose for which the grant is applied for. If necessary, specify the different uses. Also tell us what is intended to be achieved with the grant and what goals are associated with the activities to be supported.' + '#counter_maximum_message': '%d/5000 characters remaining' + who_benefits: + '#title': 'Who are the main beneficiaries of your activities?' + '#help': 'Describe who belong to your target group and possibly also how many target group members there are in your operational area. It is important that the target group description shows what kind of people you want and can reach or what kind of people and in what situation will benefit most from your activities.' + changes_on_success: + '#title': 'What kind of changes will take place if you succeed?' + '#help': 'Your activities may have many goals. Describe and assess the key changes you are seeking to achieve in your target group's functioning and in their everyday life, relationships or other aspects related to well-being and health or involvement, for example. So what will change if you have succeeded or what kind of phenomena do your activities prevent?' + results_of_activities: + '#title': 'What are the benefits of the activities to be supported?' + '#help': 'Briefly describe the effects of the activities and how they are achieved. You can describe the effects in the order in which they occur: which effects occur first and which after a little longer time. However, focus on the immediate effects of the activities.
You can indicate what is special about your activities or what (quality) factors need to be taken care of in order to achieve the desired effects. You can also describe how any cooperation you have pursued will contribute to achieving the effects.' + muut_samaan_tarkoitukseen_myonnetyt_avustukset: + '#title': 'Other grants received for the same purpose' + info_muut_samaan_tarkoitukseen_myonnetty: + '#markup': "

Indicate here only the grants received from somewhere other than the City of Helsinki in the current and two previous tax years.

\r\n\r\n
\r\n
\r\n
An affirmative answer opens a further question
\r\n
\r\n
\r\n" + olemme_saaneet_muita_avustuksia: + '#title': 'We have received other grants' + '#options': + 1: 'Yes' + 0: 'No' + myonnetty_avustus: + '#title': 'Received grant' + '#multiple__no_items_message': 'No values entered. Add the new grant granted below.' + '#multiple__add_more_button_label': 'Add new received grant' + '#element': + issuer: + '#options': + 1: State + 3: EU + 4: Other + 5: Foundation + '#title': ' Grant issuer' + issuer_name: + '#title': 'Issuer''s name' + '#help': 'Which body has granted the grant (e.g. name of the ministry)' + year: + '#title': Year + '#pattern_error': 'Enter a year between 1900 - 2100' + amount: + '#title': 'Amount of grant granted' + purpose: + '#title': ' Description of intended use' + '#help': 'Give a brief description, for what purpose has the grant been granted?' + '#counter_maximum_message': '%d/1000 characters remaining' + muut_samaan_tarkoitukseen_haetut_avustukset: + '#title': 'Other grants applied for to be used for the same purpose' + info_muut_samaan_tarkoitukseen_haettu: + '#markup': "

Indicate here only the grants that have been applied for from somewhere other than the City of Helsinki and for which the decisions have not been made yet.

\r\n\r\n
\r\n
\r\n
An affirmative answer opens a further question
\r\n
\r\n
\r\n" + olemme_hakeneet_avustuksia_muualta_kuin_helsingin_kaupungilta: + '#title': 'We have applied for grants from somewhere other than the City of Helsinki' + '#options': + 1: 'Yes' + 0: 'No' + haettu_avustus_tieto: + '#title': 'Add new grant applied for' + '#multiple__no_items_message': 'No values ​​entered. Add a new applied for grant below.' + '#multiple__add_more_button_label': 'Add new grant applied for' + '#element': + issuer: + '#options': + 1: State + 3: EU + 4: Other + 5: Foundation + '#title': 'Grant issuer' + issuer_name: + '#title': 'Issuer''s name' + '#help': 'Which body has granted the grant (e.g. name of the ministry)' + year: + '#title': Year + '#pattern_error': 'Enter a year between 1900 - 2100' + amount: + '#title': 'The amount of the grant applied for' + purpose: + '#title': 'Description of intended use' + '#help': 'Give a brief description, for what purpose has the grant been granted?' + '#counter_maximum_message': '%d/1000 characters remaining' + edellisen_avustuksen_kayttoselvitys: + '#title': 'Report on the use of the previous grant' + compensation_boolean_info: + '#markup': "
\r\n
\r\n
An affirmative answer opens a further question
\r\n
\r\n
\r\n" + compensation_boolean: + '#title': 'Report on the use of the grant I received in the previous year' + '#options': + - 'I have not received a grant from the City of Helsinki for the same purpose in the previous year.' + - 'I received a grant from the city of Helsinki for the same purpose last year.' + markup: + '#markup': 'Provide a report on the use of the grant received from the City of Helsinki. A report on the use of the grant must be drawn up for the grant concerning the previous accounting period. A report on the use should not be drawn up for the current accounting period. Providing the report on the use is a prerequisite for receiving the next grant. If no report on the use is provided, the grant will not be awarded or paid. A grant awarded may be recovered if the use of the previous grant has not been satisfactorily reported.' + compensation_explanation: + '#title': 'Report on the use of the grant' + '#help': 'The report on the use must briefly describe how the received grant has been used. The recipient must arrange its accounting in such a way that it is possible to monitor the use of the grant. For example, if a community has received a lease grant, the profit and loss account in the financial statements must show the grant in both income and expenses. Further information on the use of the grant can also be written in a separate attachment, which can be returned under Report on the use.' + '#counter_maximum_message': '%d/5000 characters remaining' + 3_yhteison_tiedot: + '#title': '3. Activities of the community' + '#prev_button_label': 'Previous' + '#next_button_label': 'Next' + business_info: + '#title': 'Description of activities' + business_purpose: + '#title': 'Description of activities' + '#help': 'If you want to add, remove or change the description of activities, save the application as a draft and go to your data to maintain the description of activities.' + '#counter_maximum_message': '%d/500 characters remaining' + community_practices_business: + '#title': 'Is the entity engaged in business?' + '#options': + 1: 'Yes' + 0: 'No' + ensimmainen_otsikko: + '#title': 'Membership fees' + fee_person: + '#title': 'Individual membership fee (€/year)' + fee_community: + '#title': 'Community member (€/year)' + jasenmaara: + '#title': 'Numbers of members' + jasenmaara_fieldset: + '#title': 'Numbers of members' + '#help': 'If the community has members, please list them here.' + members_applicant_person_global: + '#title': 'Total number of individual members' + '#help': 'How many individual members does the community currently have who have paid the membership fee?' + members_applicant_person_local: + '#title': 'Total number of individual members in Helsinki' + '#help': 'How many individual members does the community currently have in Helsinki who have paid the membership fee?' + members_applicant_community_global: + '#title': 'Community members' + '#help': 'How many community members does the community currently have who have paid the membership fee? Community members are non-individual members, such as associations, foundations, companies or municipalities.' + members_applicant_community_local: + '#title': 'Total number of community members in Helsinki' + '#help': 'How many community members does the community currently have in Helsinki who have paid the membership fee? Community members are non-individual members, such as associations, foundations, companies or municipalities.' + lisatiedot_ja_liitteet: + '#title': '4. Additional information and attachments' + lisatietoja_hakemukseen_liittyen: + '#title': 'Additional information concerning the application' + additional_information: + '#title': 'Additional information' + '#help': 'If necessary, you can write additional information or other justifications related to the application.' + '#counter_maximum_message': '%d/5000 characters remaining' + liitteet: + '#title': Attachments + attachments_info: + '#markup': |- +

All the attachments listed below must be submitted for the processing of the grant application. The grant application may be rejected if the attachments are not submitted. If any of the attachments is missing, let us know in the Further clarification on attachments section of the application. +

+

Required attachments

+

For the processing of the grant application, the required attachments are the confirmed attachments approved and signed by the community at its meeting for the previous accounting period and for the operating year for which the grant is being applied for. The attachments concerning the previous accounting period are the financial statements, the annual report, the audit or performance audit report and the minutes of the annual meeting. The attachments for the year for which the grant is being applied for are the budget and action plan.

+

Submission of several attachments as a single file

+

If you wish, you can submit several attachments as a single file under Financial statements or Budget. In this case, under the other attachment headings, indicate “The attachment has been submitted as a single file or with another application.”

+

Attachments previously submitted to the City of Helsinki

+

If the required attachments have already been submitted as attachments to another grant application addressed to the City of Helsinki, the same attachments do not need to be submitted again. The confirmed financial statements, annual report, action plan and budget of the community cannot be different from one application to another. In this case, under the submitted attachments, indicate “The attachment has been submitted as a single file or with another application”.

+ notification_attachments: + '#markup': "
\r\n
\r\n
The contents of the attachments cannot be viewed afterwards
\r\n\r\n
\r\n

Please note that you will not be able to open the attachments after you have attached them to the form. You will only see the file name of the attachment.

\r\n\r\n

Although you cannot view the attachments afterwards, the attachments to the form are sent along with the other information on the form to the grant application processor.

\r\n
\r\n
\r\n
\r\n" + yhteison_saannot: + '#title': 'Community Rules' + '#help': 'A new applicant or the rules have changed.' + '#attachmentName__title': '' + '#fileStatus__title': '' + '#fileType__title': '' + '#integrationID__title': '' + '#isAttachmentNew__title': '' + vahvistettu_tilinpaatos: + '#title': 'Confirmed financial statements (for the previous accounting period)' + '#help': "The financial statements must include at least the profit and loss account and the balance sheet. An association must append to this section the financial statements confirmed and signed at the association’s annual meeting. \r\nThe community’s accounting period may be a calendar year or some other period. In the case of associations, their own rules state what the association’s accounting period is." + '#attachmentName__title': '' + '#fileStatus__title': '' + '#fileType__title': '' + '#integrationID__title': '' + '#isAttachmentNew__title': '' + vahvistettu_toimintakertomus: + '#title': 'Confirmed annual report (for the previous accounting period)' + '#help': "An association must append to this section the annual report confirmed at the association’s annual meeting. If the annual report is part of the financial statements and you have already appended it to the form with the financial statements, it does not need to be appended here separately. In this case, under the annual report, indicate “The attachment has been submitted as a single file or with another application”." + '#attachmentName__title': '' + '#fileStatus__title': '' + '#fileType__title': '' + '#integrationID__title': '' + '#isAttachmentNew__title': '' + vahvistettu_tilin_tai_toiminnantarkastuskertomus: + '#title': 'Confirmed audit or performance audit report (for the previous accounting period)' + '#help': "An association must append to this section the annual report confirmed at the association’s annual meeting. If the annual report is part of the financial statements and you have already appended it to the form with the financial statements, it does not need to be appended here separately. In this case, under the annual report, indicate “The attachment has been submitted as a single file or with another application”." + '#attachmentName__title': '' + '#fileStatus__title': '' + '#fileType__title': '' + '#integrationID__title': '' + '#isAttachmentNew__title': '' + vuosikokouksen_poytakirja: + '#title': 'Minutes of the annual meeting confirming the financial statements for the previous accounting period' + '#help': 'Append here the minutes of the community meeting in which the financial statements for the previous accounting period are confirmed and discharge from liability granted. For associations, the financial statements are always confirmed at the association’s annual meeting. If the community is not required to have an annual meeting or other community meeting at which the financial statements should be approved and discharge from liability granted, this attachment does not need to be submitted.' + '#attachmentName__title': '' + '#fileStatus__title': '' + '#fileType__title': '' + '#integrationID__title': '' + '#isAttachmentNew__title': '' + toimintasuunnitelma: + '#title': 'Action plan (for the year for which you are applying for a grant)' + '#help': 'Append here the action plan for the whole community.' + '#attachmentName__title': '' + '#fileStatus__title': '' + '#fileType__title': '' + '#integrationID__title': '' + '#isAttachmentNew__title': '' + talousarvio: + '#title': 'Budget (for the year for which you are applying for a grant)' + '#help': 'Budget (for the year for which you are applying for a grant)' + '#attachmentName__title': '' + '#fileStatus__title': '' + '#fileType__title': '' + '#integrationID__title': '' + '#isAttachmentNew__title': '' + extra_info: + '#title': 'Further clarification on attachments' + '#counter_maximum_message': '%d/5000 characters remaining' + muu_liite: + '#title': 'Other attachment' + '#multiple__add_more_button_label': 'Add attachment' + '#attachmentName__title': '' + '#fileStatus__title': '' + '#fileType__title': '' + '#integrationID__title': '' + '#isAttachmentNew__title': '' + actions: + '#submit__label': Submit + '#draft__label': 'Save as draft' + '#wizard_prev__label': 'Previous' + '#wizard_next__label': 'Next' + '#preview_prev__label': 'Previous' + '#preview_next__label': 'Preview' + '#delete__label': ' Delete unfinished' +settings: + wizard_prev_button_label: Previous + wizard_next_button_label: Next + preview_label: '5. Confirm, preview, and submit' + preview_title: 'Confirm, preview, and submit' + wizard_confirmation_label: '6. Complete' diff --git a/conf/cmi/language/sv/webform.webform.sotepe_yleis.yml b/conf/cmi/language/sv/webform.webform.sotepe_yleis.yml new file mode 100644 index 0000000000..8b080c478e --- /dev/null +++ b/conf/cmi/language/sv/webform.webform.sotepe_yleis.yml @@ -0,0 +1,297 @@ +title: 'Allmänt understöd inom social-, hälsovårds- och räddningssektorn' +elements: | + 1_hakijan_tiedot: + '#title': '1. Sökandens uppgifter' + '#prev_button_label': '< Tidigare' + '#next_button_label': 'Nästa' + yhteiso_jolle_haetaan_avustusta: + '#title': 'Samfund för vilket understödet ansöks' + prh_markup: + '#markup': '
De markerade uppgifterna har hämtats från Patent- och registerstyrelsens register (PRH) och det är endast möjligt att ändra uppgifterna i nättjänsten i fråga.
' + hakijan_tiedot: + '#title': Sökande + contact_person_email_section: + '#title': E-post + contact_markup: + '#markup': 'Ange här samfundets e-postadress som läses aktivt. Till e-postadressen skickas kontaktförfrågningar som är relaterade till ansökan om understöd, såsom begäranden om tilläggsutredning och komplettering' + email: + '#title': E-postadress + '#help': 'Ange en e-postadress dit meddelandena och begärandena relaterade till denna ansökan kommer att skickas och som läses aktivt.' + contact_person_section: + '#title': 'Kontaktperson för ansökan' + contact_person: + '#title': Kontaktperson + contact_person_phone_number: + '#title': Telefonnummer + osoite: + '#title': Adress + community_address: + '#title': Adress + '#help': 'Om du vill lägga till, ta bort eller ändra adressuppgifter, spara ansökan som ett utkast och gå till att behålla adressuppgifterna i dina egna uppgifter.' + '#community_address_select__title': 'Välj en adress' + tilinumero: + '#title': Kontonummer + bank_account: + '#title': Kontonummer + '#help': 'Om du vill lägga till, radera eller ändra kontonummerinformation, spara applikationen som ett utkast och gå till att behålla kontonummerinformationen i din egen data.' + '#account_number_select__title': 'Välj ett kontonummer' + '#account_number__title': '' + toiminnasta_vastaavat_henkilot: + '#title': 'Personer som ansvarar för verksamheten' + community_officials: + '#help': 'Om du vill lägga till, ta bort eller ändra personer, spara applikationen som ett utkast och gå till att underhålla personernas information i din egen data.' + '#title': 'Personer som ansvarar för verksamheten' + '#multiple__add_more_button_label': 'Lägg till en person' + '#multiple__item_label': person + '#community_officials_select__title': 'Välj motsvarande person' + '#role__title': Roll + '#email__title': E-post + '#phone__title': Telefonnummer + 2_avustustiedot: + '#title': '2. Uppgifter om understödet' + '#prev_button_label': 'Tidigare' + '#next_button_label': 'Nästa' + avustuksen_tiedot: + '#title': 'Uppgifter om understödet' + acting_year: + '#title': 'År för vilket jag ansöker om understöd' + avustuslajit: + '#title': 'Understödskatego­rier' + subventions: + '#title': Understöd + kayttotarkoitus: + '#title': 'Användningsända­mål' + compensation_purpose: + '#title': 'En kort beskrivning av användningsändamålet för det/de understöd som ansöks' + '#help': 'Ange för vilket ändamål understödet ansöks och vid behov specificera de olika ändamålen. Ange också vad understödet är avsett för och vilka mål som är relaterade till den understödda verksamheten.' + '#counter_maximum_message': '%d/5000 tecken kvar' + who_benefits: + '#title': 'Who are the main beneficiaries of your activities?' + '#help': 'Beskriv vem som hör till er målgrupp och eventuellt också hur många av dem som hör till er målgrupp det finns i ert verksamhetsområde. I beskrivningen av målgruppen är det viktigt att det framgår vilka slags människor just ni önskar och kan bemöta, eller de situationer i vilka människor får den största nyttan av er verksamhet.' + changes_on_success: + '#title': 'What kind of changes will take place if you succeed?' + '#help': 'Er verksamhet kan ha flera mål. Beskriv och bedöm här de centrala förändringar som ni eftersträvar exempelvis i er målgrupps funktionsförmåga, vardag, människorelationer eller andra aspekter som anknyter till välfärd och hälsa eller delaktighet. Vilka slags förändringar kommer det alltså att ske om ni lyckas eller vilka slags fenomen förebygger er verksamhet?' + results_of_activities: + '#title': 'What are the benefits of the activities to be supported?' + '#help': 'Beskriv kort vilka effekter som uppnås genom verksamheten och på vilket sätt de uppstår. Du kan beskriva effekterna i den ordning de sker: vilka effekter uppstår först och vilka efter en längre tid. Koncentrera dig dock på verksamhetens omedelbara effekter.
Du kan även berätta vad som är speciellt med er verksamhet eller vilka (kvalitets)faktorer som bör beaktas särskilt för att de effekter som eftersträvas ska uppnås. Du kan även beskriva hur något samarbete ni har främjar uppnåendet av effekterna.' + muut_samaan_tarkoitukseen_myonnetyt_avustukset: + '#title': 'Övriga understöd som beviljats för samma ändamål' + info_muut_samaan_tarkoitukseen_myonnetty: + '#markup': "

Ange här endast de understöd som beviljats från annanstans än Helsingfors stad under det innevarande beskattningsåret eller de föregående två beskattningsåren.

\r\n\r\n
\r\n
\r\n
Ett jakande svar öppnar ytterligare en fråga
\r\n
\r\n
\r\n" + olemme_saaneet_muita_avustuksia: + '#title': 'Vi har fått andra understöd' + '#options': + 1: Ja + 0: Nej + myonnetty_avustus: + '#title': 'Bidrag beviljat' + '#multiple__no_items_message': 'Inga värden har angetts. Lägg till det nya beviljade bidraget nedan.' + '#multiple__add_more_button_label': 'Lägg till understöd som beviljats' + '#element': + issuer: + '#options': + 1: Stat + 3: EU + 4: Övrig + 5: Fundament + '#title': Bidragsgivare + issuer_name: + '#title': 'Emittentens namn' + '#help': 'Vilket organ har beviljat bidraget (t.ex. namnet på departementet)' + year: + '#title': År + '#pattern_error': 'Ange ett årtal' + amount: + '#title': 'Beviljat bidragsbelopp' + purpose: + '#title': 'Beskrivning av avsedd användning' + '#help': 'Ge en kort beskrivning, i vilket syfte har bidraget beviljats?' + '#counter_maximum_message': '%d/1000 tecken kvar' + muut_samaan_tarkoitukseen_haetut_avustukset: + '#title': 'Övriga understöd som ansökts för samma ändamål' + info_muut_samaan_tarkoitukseen_haettu: + '#markup': "

Ange här endast de understöd som har ansökts från annanstans än Helsingfors stad, men beslut har ännu inte fattats.

\r\n\r\n
\r\n
\r\n
Ett jakande svar öppnar ytterligare en fråga
\r\n
\r\n
\r\n" + olemme_hakeneet_avustuksia_muualta_kuin_helsingin_kaupungilta: + '#title': 'Vi har ansökt om understöd från annanstans än Helsingfors stad.' + '#options': + 1: Ja + 0: Nej + haettu_avustus_tieto: + '#title': 'Lägg till nytt understöd som ansökts' + '#multiple__no_items_message': 'Inga värden har angetts. Lägg till ett nytt ansökt bidrag nedan.' + '#multiple__add_more_button_label': 'Lägg till nytt understöd som ansökts' + '#element': + issuer: + '#options': + 1: Stat + 3: EU + 4: Övrig + 5: Fundament + '#title': Bidragsgivare + issuer_name: + '#title': 'Emittentens namn' + '#help': 'Vilket organ har beviljat bidraget (t.ex. namnet på departementet)' + year: + '#title': År + '#pattern_error': 'Ange ett årtal' + amount: + '#title': 'Beviljat bidragsbelopp' + purpose: + '#title': 'Beskrivning av avsedd användning' + '#help': 'Ge en kort beskrivning, i vilket syfte har bidraget beviljats?' + '#counter_maximum_message': '%d/1000 tecken kvar' + edellisen_avustuksen_kayttoselvitys: + '#title': 'Redovisning om det tidigare understödet' + compensation_boolean_info: + '#markup': "
\r\n
\r\n
Ett jakande svar öppnar ytterligare en fråga
\r\n
\r\n
\r\n" + compensation_boolean: + '#title': 'Redovisning om understödet som jag fick under det föregående året' + '#options': + - 'Jag har inte fått bidrag från Helsingfors stad för samma ändamål föregående år.' + - 'Jag fick ett bidrag från Helsingfors stad för samma ändamål förra året.' + markup: + '#markup': 'Ge en redovisning om understödet som fåtts från Helsingfors stad. Redovisningen görs om understödet som beviljats för den senaste avslutade räkenskapsperioden. Redovisning görs inte om den innevarande räkenskapsperioden. Redovisningen krävs för att få ett nytt understöd. Om en redovisning inte görs, kommer ett understöd inte att beviljas eller betalas ut. Det beviljade understödet kan återkrävas om användningen av det tidigare understödet inte har redogjorts för på ett tillfredsställande sätt.' + compensation_explanation: + '#title': 'Redovisning om användningen av understödet' + '#help': 'I redovisningen ska det kortfattat anges hur det beviljade understödet har använts. Understödstagaren ska ordna sin bokföring så att användningen av understödet kan följas där. Om samfundet till exempel har fått hyresunderstöd ska det av resultaträkningen i bokslutet framgå både intäkter och utgifter vad gäller understödet. Mer information om användningen av understödet kan också skrivas i en separat bilaga som kan läggas till och skickas som Annan bilaga.' + '#counter_maximum_message': '%d/5000 tecken kvar' + 3_yhteison_tiedot: + '#title': '3. Samfundets verksamhet' + '#prev_button_label': 'Tidigare' + '#next_button_label': 'Nästa' + business_info: + '#title': Verksamhets­beskrivning + business_purpose: + '#title': Verksamhets­beskrivning + '#help': 'Om du vill lägga till, ta bort eller ändra verksamhetsbeskrivningen, spara ansökan som ett utkast och gå till dina uppgifter för att redigera verksamhetsbeskrivningen.' + '#counter_maximum_message': '%d/500 tecken kvar' + community_practices_business: + '#title': 'Bedriver samfundet affärsverksamhet' + '#options': + 1: Ja + 0: Nej + ensimmainen_otsikko: + '#title': Medlemsavgifter + fee_person: + '#title': 'Medlemsavgift för personmedlemmar (€/år)' + fee_community: + '#title': 'Samfundsmedlem (€/år)' + jasenmaara: + '#title': 'Antal medlemmar' + jasenmaara_fieldset: + '#title': Medlemskap + '#help': 'Om gruppen har medlemmar, vänligen ange dem här.' + members_applicant_person_global: + '#title': 'Personmedlemmar sammanlagt' + '#help': 'Hur många personmedlemmar som har betalat medlemsavgiften har samfundet för närvarande?' + members_applicant_person_local: + '#title': 'Personmedlemmar från Helsingfors sammanlagt' + '#help': 'Hur många personmedlemmar från Helsingfors som har betalat medlemsavgiften har samfundet för närvarande?' + members_applicant_community_global: + '#title': Samfundsmedlemmar + '#help': 'Hur många samfundsmedlemmar som har betalat medlemsavgiften har samfundet för närvarande? Samfundsmedlemmar är andra än personmedlemmar, såsom föreningar, stiftelser, företag eller kommuner.' + members_applicant_community_local: + '#title': 'Samfundsmedlemmar från Helsingfors sammanlagt' + '#help': 'Hur många samfundsmedlemmar från Helsingfors som har betalat medlemsavgiften har samfundet för närvarande? Samfundsmedlemmar är andra än personmedlemmar, såsom föreningar, stiftelser, företag eller kommuner.' + lisatiedot_ja_liitteet: + '#title': '4. Ytterligare information och bilagor' + lisatietoja_hakemukseen_liittyen: + '#title': 'Ytterligare information för ansökan' + additional_information: + '#title': 'Ytterligare information' + '#help': 'Här kan du vid behov skriva ytterligare information eller andra motiveringar som rör ansökan.' + '#counter_maximum_message': '%d/5000 tecken kvar' + liitteet: + '#title': Bilagor + attachments_info: + '#markup': |- +

Alla bilagor som anges nedan måste lämnas in för behandling av ansökan om understöd. Ansökan om understöd kan avslås om bilagorna inte har lämnats in. Om någon av bilagorna saknas, meddela oss om det i punkten Ytterligare information om bilagor i ansökan.

+

Erforderliga bilagor

+

För behandling av ansökan om understöd behövs styrkta bilagor från den föregående räkenskapsperioden som samfundet har godkänt och undertecknat vid sitt möte samt bilagor för det verksamhetsår för vilket understödet ansöks. Bilagorna från den föregående räkenskapsperioden är: bokslut, verksamhetsberättelse, revisionsberättelse och protokoll från årsstämman. Bilagorna för det år för vilket understödet ansöks är: budget och verksamhetsplan.

+

Inlämning av flera bilagor i en fil

+

Om du vill kan du lämna in flera bilagor i en fil i punkten Bokslut eller budget. Ange i detta fall vid andra bilagor att ”Bilagan har lämnats in som en fil eller i samband med en annan ansökan”.

+

Bilagor som tidigare lämnats in till Helsingfors stad

+

Om de erforderliga bilagorna redan har lämnats in som bilaga till en annan ansökan om understöd till Helsingfors stad, behöver samma bilagor inte lämnas in igen. Samfundets fastställda bokslut, verksamhetsberättelse, verksamhetsplan och budget får inte vara olika i bilagor till de olika ansökningarna. Ange i detta fall vid de inlämnade bilagorna att ”Bilagan har lämnats in som en fil eller i samband med en annan ansökan”.

+ notification_attachments: + '#markup': "
\r\n
\r\n
Innehållet i bilagorna kan inte granskas i efterhand
\r\n\r\n
\r\n

Observera att du inte kan öppna bilagorna efter att du har bifogat dem blanketten. Du ser bara bilagans filnamn.

\r\n\r\n

Även om du inte kan granska innehållet i bilagorna i efterhand skickas bilagorna som bifogats blanketten med övriga uppgifter till personen som behandlar ansökan om understöd.

\r\n
\r\n
\r\n
\r\n" + yhteison_saannot: + '#title': 'Samfundets stadgar' + '#help': 'En ny sökande eller reglerna har ändrats.' + '#attachmentName__title': '' + '#fileStatus__title': '' + '#fileType__title': '' + '#integrationID__title': '' + '#isAttachmentNew__title': '' + vahvistettu_tilinpaatos: + '#title': 'Fastställt bokslut (för den föregående avslutade räkenskapsperioden)' + '#help': "Bokslutet ska innehålla minst resultaträkningen och balansräkningen. Samfundet ska till denna punkt lägga till bokslutet som godkänts och undertecknats vid samfundets medlemsmöte. Samfundets räkenskapsperiod kan vara ett kalenderår eller en annan period. Vad gäller samfund anges det i deras egna stadgar vad samfundets räkenskapsperiod är." + '#attachmentName__title': '' + '#fileStatus__title': '' + '#fileType__title': '' + '#integrationID__title': '' + '#isAttachmentNew__title': '' + vahvistettu_toimintakertomus: + '#title': 'Fastställd verksamhetsberättelse (för den föregående avslutade räkenskapsperioden)' + '#help': "Samfundet ska till denna punkt bifoga verksamhetsberättelsen som godkänts och undertecknats vid samfundets medlemsmöte. Om verksamhetsberättelsen ingår i bokslutet och du redan har bifogat den blanketten, behöver den inte bifogas separat. Ange i detta fall vid verksamhetsberättelsen att ”Bilagan har lämnats in som en fil eller i samband med en annan ansökan”." + '#attachmentName__title': '' + '#fileStatus__title': '' + '#fileType__title': '' + '#integrationID__title': '' + '#isAttachmentNew__title': '' + vahvistettu_tilin_tai_toiminnantarkastuskertomus: + '#title': 'Fastställd revisionsberättelse (för det föregående avslutade räkenskapsåret)' + '#help': "Bifoga den undertecknade revisionsberättelsen för samfundets senaste avslutade räkenskapsperiod här. Om den undertecknade revisionsberättelsen ingår i samfundets bokslut och du redan bifogat den till blanketten i samband med bokslutet, ange ”Bilagan har lämnats in som en fil eller i samband med en annan ansökan” här." + '#attachmentName__title': '' + '#fileStatus__title': '' + '#fileType__title': '' + '#integrationID__title': '' + '#isAttachmentNew__title': '' + vuosikokouksen_poytakirja: + '#title': 'Protokoll från årsstämman med det godkända bokslutet för den föregående räkenskapsperioden' + '#help': 'Bifoga protokollet från samfundets möte här, där bokslutet för den föregående avslutade räkenskapsperioden har godkänts och ansvarsfrihet beviljats. Samfundens bokslut fastställs alltid vid samfundets medlemsmöte. Om samfundet inte är skyldigt att ha ett årsmöte eller annat samfundsmöte där bokslutet bör godkännas och ansvarsfrihet beviljas, behöver denna bilaga inte lämnas in.' + '#attachmentName__title': '' + '#fileStatus__title': '' + '#fileType__title': '' + '#integrationID__title': '' + '#isAttachmentNew__title': '' + toimintasuunnitelma: + '#title': 'Verksamhetsplan (för det år du ansöker om understödet)' + '#help': 'Bifoga verksamhetsplanen för hela för samfundet här.' + '#attachmentName__title': '' + '#fileStatus__title': '' + '#fileType__title': '' + '#integrationID__title': '' + '#isAttachmentNew__title': '' + talousarvio: + '#title': 'Budget (för det år du ansöker om understödet)' + '#help': 'Budget (för det år du ansöker om understödet)' + '#attachmentName__title': '' + '#fileStatus__title': '' + '#fileType__title': '' + '#integrationID__title': '' + '#isAttachmentNew__title': '' + extra_info: + '#title': 'Ytterligare information om bilagorna' + '#counter_maximum_message': '%d/5000 tecken kvar' + muu_liite: + '#title': 'Annan bilaga' + '#multiple__add_more_button_label': 'Lägg till en bilaga' + '#attachmentName__title': '' + '#fileStatus__title': '' + '#fileType__title': '' + '#integrationID__title': '' + '#isAttachmentNew__title': '' + actions: + '#submit__label': Skicka + '#draft__label': 'Spara som oavslutad' + '#wizard_prev__label': 'Tidigare' + '#wizard_next__label': 'Nästa' + '#preview_prev__label': 'Tidigare' + '#preview_next__label': 'För förhandsvisning' + '#delete__label': ' Radera oavslutat' +settings: + wizard_prev_button_label: Tidigare + wizard_next_button_label: Nästa + preview_label: '5. Bekräfta, förhandsgranska och skicka' + preview_title: 'Bekräfta, förhandsgranska och skicka' + wizard_confirmation_label: '6. Slutförd' diff --git a/conf/cmi/webform.webform.sotepe_yleis.yml b/conf/cmi/webform.webform.sotepe_yleis.yml new file mode 100644 index 0000000000..59baeea245 --- /dev/null +++ b/conf/cmi/webform.webform.sotepe_yleis.yml @@ -0,0 +1,907 @@ +uuid: a8d4d2d7-30bf-4091-a86f-978b99358957 +langcode: fi +status: open +dependencies: + module: + - grants_handler + - grants_metadata +third_party_settings: + grants_metadata: + applicationTypeSelect: '72' + applicationType: SOTEPEYLEIS + applicationTypeID: '72' + applicationIndustry: KANSLIA + applicantTypes: + registered_community: registered_community + applicationTypeTerms: + 49: '49' + applicationTargetGroup: '30' + applicationOpen: '2022-10-03T11:08:26' + applicationClose: '2029-07-30T11:19:00' + applicationActingYearsType: next_x_years + applicationActingYears: { } + applicationActingYearsNextCount: '1' + applicationContinuous: 0 + disableCopying: 0 + status: development + parent: d8472e68-d6bd-4de2-a409-f0a177bf9e94 + avus2BreakingChange: 0 +weight: 0 +open: null +close: null +uid: 1 +template: false +archive: false +id: sotepe_yleis +title: 'Sosiaali-, terveys- ja pelastustoimen yleisavustus' +description: '

SOTEPEYLEIS

' +categories: + - Kehityksessä +elements: |- + applicant_type: + '#type': hidden + '#title': 'Applicant type' + avustukset_summa: + '#type': grants_webform_summation_field + '#title': 'Avustukset summa' + '#title_display': none + '#description_display': invisible + '#collect_field': + subventions%%amount: subventions%%amount + application_number: 0 + status: 0 + hakijan_tiedot: 0 + email: 0 + contact_person: 0 + contact_person_phone_number: 0 + community_address: 0 + bank_account: 0 + community_officials: 0 + acting_year: 0 + subventions%%subventionTypeTitle: 0 + subventions%%subventionType: 0 + compensation_purpose: 0 + olemme_saaneet_muita_avustuksia: 0 + myonnetty_avustus: 0 + benefits_loans: 0 + benefits_premises: 0 + compensation_boolean: 0 + compensation_explanation: 0 + business_purpose: 0 + community_practices_business: 0 + fee_person: 0 + fee_community: 0 + members_applicant_person_local: 0 + members_applicant_person_global: 0 + members_applicant_community_local: 0 + members_applicant_community_global: 0 + additional_information: 0 + yhteison_saannot: 0 + vahvistettu_tilinpaatos: 0 + vahvistettu_toimintakertomus: 0 + vahvistettu_tilin_tai_toiminnantarkastuskertomus: 0 + vuosikokouksen_poytakirja: 0 + toimintasuunnitelma: 0 + talousarvio: 0 + extra_info: 0 + muu_liite: 0 + '#data_type': euro + '#form_item': hidden + 1_hakijan_tiedot: + '#type': webform_wizard_page + '#title': '1. Hakijan tiedot' + '#prev_button_label': 'Edellinen' + '#next_button_label': 'Seuraava' + application_number: + '#type': hidden + '#title': Hakemusnumero + '#disabled': true + status: + '#type': hidden + '#title': 'Hakemuksen tila' + '#readonly': true + yhteiso_jolle_haetaan_avustusta: + '#type': webform_section + '#title': 'Yhteisö, jolle haetaan avustusta' + '#attributes': + class: + - grants-profile--imported-section + prh_markup: + '#type': webform_markup + '#markup': '
Tiedot on haettu Patentti- ja rekisterihallinnon rekisteristä (PRH), eikä niitä voi tämän takia muokata.
' + hakijan_tiedot: + '#type': applicant_info + '#title': Hakija + contact_person_email_section: + '#type': webform_section + '#title': Sähköposti + contact_markup: + '#type': webform_markup + '#markup': 'Ilmoita tässä sellainen yhteisön sähköpostiosoite, jota luetaan aktiivisesti. Sähköpostiin lähetetään avustushakemukseen liittyviä yhteydenottoja esim. lisäselvitys- ja täydennyspyyntöjä.' + email: + '#type': email + '#title': Sähköpostiosoite + '#required': true + '#autocomplete': 'off' + '#pattern': '(?:[a-zA-Z0-9!#$%&''*+/=?^_`{|}~-]+(?:\.[a-zA-Z0-9!#$%&''*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\.)+[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-zA-Z0-9-]*[a-zA-Z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])' + '#size': 63 + '#help': 'Ilmoita sähköpostiosoite, johon tähän hakemukseen liittyvät viestit sekä herätteet osoitetaan ja jota luetaan aktiivisesti' + contact_person_section: + '#type': webform_section + '#title': 'Hakemuksen yhteyshenkilö' + contact_person: + '#type': textfield + '#title': Yhteyshenkilö + '#attributes': + class: + - webform--large + '#autocomplete': 'off' + '#required': true + '#size': 63 + contact_person_phone_number: + '#type': textfield + '#title': Puhelinnumero + '#attributes': + class: + - webform--medium + '#required': true + '#autocomplete': 'off' + '#size': 32 + osoite: + '#type': webform_section + '#title': Osoite + '#states': + visible: + ':input[name="applicant_type"]': + value: registered_community + community_address: + '#type': community_address_composite + '#title': 'Yhteisön osoite' + '#help': 'Jos haluat lisätä, poistaa tai muuttaa osoitetietoa tallenna hakemus luonnokseksi ja siirry ylläpitämään osoitetietoa omiin tietoihin.' + '#attributes': + class: + - webform--large + '#required': true + '#states': + visible: + ':input[name="applicant_type"]': + value: registered_community + tilinumero: + '#type': webform_section + '#title': Tilinumero + bank_account: + '#type': bank_account_composite + '#title': Tilinumero + '#help': 'Jos haluat lisätä, poistaa tai muuttaa tilinumerotietoa tallenna hakemus luonnokseksi ja siirry ylläpitämään tilinumerotietoa omiin tietoihin.' + '#attributes': + class: + - webform--medium + '#required': true + toiminnasta_vastaavat_henkilot: + '#type': webform_section + '#title': 'Toiminnasta vastaavat henkilöt' + '#states': + visible: + ':input[name="applicant_type"]': + '!value': private_person + community_officials: + '#type': community_officials_composite + '#help': 'Jos haluat lisätä, poistaa tai muuttaa henkilöitä tallenna hakemus luonnokseksi ja siirry ylläpitämään henkilöiden tietoja omiin tietoihin.' + '#title': 'Valitse toiminnasta vastaavat henkilöt' + '#multiple': true + '#multiple__item_label': henkilö + '#multiple__min_items': 1 + '#multiple__empty_items': 0 + '#multiple__sorting': false + '#multiple__add': false + '#multiple__add_more_input': false + '#multiple__add_more_button_label': 'Lisää henkilö' + '#wrapper_attributes': + class: + - community_officials_wrapper + '#attributes': + class: + - webform--large + 2_avustustiedot: + '#type': webform_wizard_page + '#title': '2. Avustustiedot' + '#prev_button_label': 'Edellinen' + '#next_button_label': 'Seuraava' + avustuksen_tiedot: + '#type': webform_section + '#title': 'Avustuksen tiedot' + acting_year: + '#type': select + '#title': 'Vuosi, jolle haen avustusta' + '#options': + 2022: '2022' + 2023: '2023' + 2024: '2024' + '#required': true + avustuslajit: + '#type': webform_section + '#title': Avustuslajit + subventions: + '#type': grants_compensations + '#title': Avustukset + '#multiple': true + '#subventionType': + 6: '6' + '#onlyOneSubventionPerApplication': 1 + '#required': true + '#multiple__header': true + '#multiple__empty_items': 0 + '#multiple__sorting': false + '#multiple__add': false + '#multiple__remove': false + '#multiple__add_more': false + '#attributes': + class: + - subventions + '#subvention_type': + 1: '1' + 6: '6' + '#subvention_type_id__access': false + '#subvention_type__title': Avustuslaji + '#subvention_amount__title': 'Avustuksen summa' + kayttotarkoitus: + '#type': webform_section + '#title': 'Mihin avustus käytetään?' + compensation_purpose: + '#type': textarea + '#title': 'Lyhyt kuvaus haettavan / haettavien avustusten käyttötarkoituksista' + '#help': 'Kerro mitä tarkoitusta varten avustusta haetaan, erittele tarvittaessa eri käyttökohteet. Kerro myös mitä avustuksella on tarkoitus saada aikaiseksi ja millaisia tavoitteita avustettavaan toimintaan liittyy.' + '#required': true + '#counter_type': character + '#maxlength': 5000 + '#counter_maximum': 5000 + '#cols': 63 + '#attributes': + class: + - webform--large + '#counter_maximum_message': '%d/5000 merkkiä jäljellä' + who_benefits: + '#type': textarea + '#title': 'Ketkä toiminnastanne erityisesti hyötyvät?' + '#help': 'Kuvaa keitä kohderyhmäänne kuuluu ja mahdollisesti myös kuinka paljon kohderyhmään kuuluvia toiminta-alueellanne on. Kohderyhmän kuvauksessa on tärkeää, että siitä käy ilmi minkälaisia ihmisiä juuri te haluatte ja osaatte kohdata, tai millaisessa tilanteessa olevat hyötyvät toiminnastanne eniten.' + '#counter_type': character + '#maxlength': 5000 + '#counter_maximum': 5000 + '#cols': 63 + '#attributes': + class: + - webform--large + '#counter_maximum_message': '%d/5000 merkkiä jäljellä' + '#states': + visible: + ':input[name="avustukset_summa"]': + value: + greater_equal: '10000' + required: + ':input[name="avustukset_summa"]': + value: + greater_equal: '10000' + changes_on_success: + '#type': textarea + '#title': 'Minkälaisia muutoksia tapahtuu, jos onnistutte?' + '#help': 'Toiminnallanne voi olla monia tavoitteita. Kuvatkaa ja arvioikaa tässä keskeiset muutokset, joita tavoittelette esimerkiksi kohderyhmänne toimintakyvyssä, arjessa, ihmissuhteissa tai muussa hyvinvointiin ja terveyteen tai osallisuuteen liittyvässä asiassa. Mikä siis muuttuu, jos olette onnistuneet tai minkälaisia ilmiöitä toimintanne ennaltaehkäisee?' + '#counter_type': character + '#maxlength': 5000 + '#counter_maximum': 5000 + '#cols': 63 + '#attributes': + class: + - webform--large + '#counter_maximum_message': '%d/5000 merkkiä jäljellä' + '#states': + visible: + ':input[name="avustukset_summa"]': + value: + greater_equal: '10000' + required: + ':input[name="avustukset_summa"]': + value: + greater_equal: '10000' + results_of_activities: + '#type': textarea + '#title': 'Minkälaisia hyötyjä avustettavan toiminnan seurauksena syntyy?' + '#help': 'Kuvaa lyhyesti, mitä vaikutuksia toiminnalla saadaan aikaan ja millä tavoin ne syntyvät. Voit kuvata vaikutukset niiden tapahtumisjärjestyksessä: mitä vaikutuksia syntyy ensin, ja mitä vähän pidemmän ajan kuluttua. Keskity kuitenkin toiminnan välittömiin vaikutuksiin.
Voit myös kertoa, mikä toiminnassanne on erityistä tai mistä (laatu)tekijöistä on erityisesti huolehdittava, että tavoiteltavia vaikutuksia saavutetaan. Voit myös kuvata, miten jokin tekemänne yhteistyö edistää vaikutusten saavuttamista.' + '#counter_type': character + '#maxlength': 5000 + '#counter_maximum': 5000 + '#cols': 63 + '#attributes': + class: + - webform--large + '#counter_maximum_message': '%d/5000 merkkiä jäljellä' + '#states': + visible: + ':input[name="avustukset_summa"]': + value: + greater_equal: '10000' + required: + ':input[name="avustukset_summa"]': + value: + greater_equal: '10000' + muut_samaan_tarkoitukseen_myonnetyt_avustukset: + '#type': webform_section + '#title': 'Muut samaan tarkoitukseen myönnetyt avustukset' + info_muut_samaan_tarkoitukseen_myonnetty: + '#type': webform_markup + '#markup': | + Ilmoita tähän ainoastaan avustukset, jotka on myönnetty muualta kuin Helsingin kaupungilta kuluvana tai kahtena edellisenä verovuotena. +
+
+
+ + Myöntävä vastaus avaa lisäkysymyksen +
+
+
+ olemme_saaneet_muita_avustuksia: + '#type': radios + '#title': 'Olemme saaneet muita avustuksia' + '#description_display': before + '#options': + 1: Kyllä + 0: Ei + myonnetty_avustus: + '#type': webform_custom_composite + '#title': 'Myönnetty avustus' + '#title_display': before + '#states': + visible: + ':input[name="olemme_saaneet_muita_avustuksia"]': + value: '1' + required: + ':input[name="olemme_saaneet_muita_avustuksia"]': + value: '1' + '#multiple__header': false + '#multiple__item_label': 'myönnetty avustus' + '#multiple__no_items_message': 'Ei syötettyjä arvoja. Lisää uusi myönnetty avustus alta.' + '#multiple__min_items': 1 + '#multiple__empty_items': 0 + '#multiple__sorting': false + '#multiple__add': false + '#multiple__add_more_input': false + '#multiple__add_more_button_label': 'Lisää uusi myönnetty avustus' + '#element': + issuer: + '#type': select + '#options': + 1: Valtio + 3: EU + 4: Muu + 5: Säätiö + 6: STEA + '#required': true + '#title': 'Avustuksen myöntäjä' + issuer_name: + '#type': textfield + '#required': true + '#title': 'Myöntäjän nimi' + '#attributes': + class: + - webform--large + '#help': 'Mikä taho avustusta on myöntänyt (esim. ministeriön nimi)' + year: + '#type': textfield + '#required': true + '#attributes': + class: + - webform--small + '#title': Vuosi + '#maxlength': 4 + '#pattern': ^(19\d\d|20\d\d|2100)$ + '#pattern_error': 'Syötä vuosiluku väliltä 1900 - 2100' + amount: + '#type': textfield + '#attributes': + class: + - webform--small + '#required': true + '#title': 'Myönnetyn avustuksen summa' + '#input_mask': '''alias'': ''currency'', ''prefix'': '''', ''suffix'': ''€'',''groupSeparator'': '' '',''radixPoint'':'',''' + purpose: + '#type': textarea + '#title': 'Kuvaus käyttötarkoituksesta' + '#help': 'Anna lyhyt kuvaus, mihin tarkoitukseen avustus on myönnetty?' + '#maxlength': 1000 + '#counter_type': character + '#attributes': + class: + - webform--large + '#counter_maximum': 1000 + '#counter_maximum_message': '%d/1000 merkkiä jäljellä' + edellisen_avustuksen_kayttoselvitys: + '#type': webform_section + '#title': 'Edellisen avustuksen käyttöselvitys' + compensation_boolean_info: + '#type': webform_markup + '#markup': | +
+
+
+ + Myöntävä vastaus avaa lisäkysymyksen +
+
+
+ compensation_boolean: + '#type': radios + '#title': 'Käyttöselvitys edellisenä vuonna saamastani avustuksesta' + '#options': + - 'En ole saanut Helsingin kaupungilta avustusta samaan käyttötarkoitukseen edellisenä vuonna.' + - 'Olen saanut Helsingin kaupungilta avustusta samaan käyttötarkoitukseen edellisenä vuonna.' + '#required': true + markup: + '#type': webform_markup + '#states': + visible: + ':input[name="compensation_boolean"]': + value: '1' + '#markup': 'Anna käyttöselvitys Helsingin kaupungilta saadusta avustuksesta. Avustuksen käyttöselvitys tehdään avustuksesta, joka koskee viimeisintä päättynyttä tilikautta. Käyttöselvitystä ei tehdä käynnissä olevalta tilikaudelta. Käyttöselvityksen antaminen on seuraavan avustuksen saamisen ehtona. Mikäli käyttöselvitystä ei tehdä, avustusta ei myönnetä eikä makseta. Myönnetty avustus voidaan periä takaisin, jos edellisen avustuksen käyttöä ei ole hyväksyttävästi selvitetty.' + compensation_explanation: + '#type': textarea + '#title': 'Selvitys avustuksen käytöstä' + '#help': 'Käyttöselvityksessä tulee kuvata lyhyesti, miten myönnetty avustus on käytetty. Avustuksen saajan on järjestettävä kirjanpitonsa niin, että avustuksen käyttöä voidaan sieltä seurata. Esimerkiksi jos yhteisö on saanut vuokra-avustusta, tilinpäätöksen tuloslaskelmasta tulee käydä ilmi avustuksen toteutuminen sekä tuloissa että menoissa. Lisää tietoja avustuksen käytöstä voi myös kirjoittaa erilliseen liitteeseen, jonka voi ladata ja lähettää Muu-liitteenä.' + '#maxlength': 5000 + '#counter_type': character + '#counter_maximum': 5000 + '#counter_maximum_message': '%d/5000 merkkiä jäljellä' + '#states': + visible: + ':input[name="compensation_boolean"]': + value: '1' + required: + ':input[name="compensation_boolean"]': + value: '1' + '#attributes': + class: + - webform--large + '#cols': 63 + 3_yhteison_tiedot: + '#type': webform_wizard_page + '#title': '3. Yhteisön toiminta' + '#prev_button_label': 'Edellinen' + '#next_button_label': 'Seuraava' + business_info: + '#type': webform_section + '#title': 'Toiminnan kuvaus' + business_purpose: + '#type': textarea + '#title': 'Toiminnan kuvaus' + '#help': 'Tieto haetaan omat tiedot -osiosta' + '#maxlength': 500 + '#counter_type': character + '#counter_maximum': 500 + '#counter_maximum_message': '%d/500 merkkiä jäljellä' + community_practices_business: + '#type': radios + '#title': 'Harjoittaako yhteisö liiketoimintaa' + '#options': + 1: Kyllä + 0: Ei + '#options_display': side_by_side + '#options_description_display': help + '#required': true + ensimmainen_otsikko: + '#type': webform_section + '#title': Jäsenmaksut + fee_person: + '#type': textfield + '#title': 'Henkilöjäsenen jäsenmaksu (€ / vuosi)' + '#attributes': + class: + - webform--small + '#maxlength': 50 + '#input_mask': '''alias'': ''currency'', ''prefix'': '''', ''suffix'': ''€'',''groupSeparator'': '' '',''radixPoint'':'',''' + '#size': 16 + fee_community: + '#type': textfield + '#title': 'Yhteisöjäsen (€ / vuosi)' + '#attributes': + class: + - webform--small + '#maxlength': 50 + '#input_mask': '''alias'': ''currency'', ''prefix'': '''', ''suffix'': ''€'',''groupSeparator'': '' '',''radixPoint'':'',''' + '#size': 16 + jasenmaara: + '#type': webform_section + '#title': Jäsenmäärä + jasenmaara_fieldset: + '#type': fieldset + '#title': Jäsenmäärä + '#help': 'Jos yhteisöllä on jäseniä, merkitse ne tähän.' + '#attributes': + class: + - grants-fieldset + - grants-fieldset-short + members_applicant_person_global: + '#type': textfield + '#title': 'Henkilöjäseniä yhteensä' + '#help': 'Kuinka monta jäsenmaksun maksanutta henkilöjäsentä yhteisöllä on tällä hetkellä?' + '#maxlength': 9 + '#input_mask': '''alias'': ''numeric'', ''groupSeparator'': '' '', ''digits'': ''0''' + '#pattern': '^[0-9 ]*$' + '#pattern_error': 'Vain numeroita' + '#size': 16 + '#attributes': + class: + - webform--small + members_applicant_person_local: + '#type': textfield + '#title': 'Helsinkiläisiä henkilöjäseniä yhteensä' + '#help': 'Kuinka monta jäsenmaksun maksanutta helsinkiläistä henkilöjäsentä yhteisöllä on tällä hetkellä?' + '#maxlength': 9 + '#input_mask': '''alias'': ''numeric'', ''groupSeparator'': '' '', ''digits'': ''0''' + '#pattern': '^[0-9 ]*$' + '#pattern_error': 'Vain numeroita' + '#size': 16 + '#attributes': + class: + - webform--small + members_applicant_community_global: + '#type': textfield + '#title': 'Yhteisöjäseniä yhteensä' + '#help': 'Kuinka monta jäsenmaksun maksanutta yhteisöjäsentä yhteisöllä on tällä hetkellä? Yhteisöjäseniä ovat muut kuin henkilöjäsenet, esimerkiksi yhdistykset, säätiöt, yritykset tai kunnat.' + '#maxlength': 9 + '#size': 16 + '#input_mask': '''alias'': ''numeric'', ''groupSeparator'': '' '', ''digits'': ''0''' + '#pattern': '^[0-9 ]*$' + '#pattern_error': 'Vain numeroita' + '#attributes': + class: + - webform--small + members_applicant_community_local: + '#type': textfield + '#title': 'Helsinkiläisiä yhteisöjäseniä yhteensä' + '#help': 'Kuinka monta jäsenmaksun maksanutta helsinkiläistä yhteisöjäsentä yhteisöllä on tällä hetkellä? Yhteisöjäseniä ovat muut kuin henkilöjäsenet, esimerkiksi yhdistykset, säätiöt, yritykset tai kunnat.' + '#maxlength': 9 + '#input_mask': '''alias'': ''numeric'', ''groupSeparator'': '' '', ''digits'': ''0''' + '#pattern': '^[0-9 ]*$' + '#pattern_error': 'Vain numeroita' + '#size': 16 + '#attributes': + class: + - webform--small + lisatiedot_ja_liitteet: + '#type': webform_wizard_page + '#title': '4. Lisätiedot ja liitteet' + lisatietoja_hakemukseen_liittyen: + '#type': webform_section + '#title': 'Lisätietoja hakemukseen liittyen' + additional_information: + '#type': textarea + '#title': Lisätiedot + '#attributes': + class: + - webform--large + '#help': 'Tähän voit tarvittaessa kirjoittaa lisätietoja tai muita perusteluja hakemukseen liittyen.' + '#counter_type': character + '#maxlength': 5000 + '#counter_maximum': 5000 + '#counter_maximum_message': '%d/5000 merkkiä jäljellä' + '#cols': 63 + liitteet: + '#type': webform_section + '#title': Liitteet + attachments_info: + '#type': webform_markup + '#markup': |- +

Avustushakemuksen käsittelyä varten tulee toimittaa kaikki alla luetellut liitteet. Avustushakemus voidaan hylätä, jos liitteitä ei ole toimitettu. Mikäli joku liitteistä puuttuu kerro siitä hakemuksen Lisäselvitys liitteistä -kohdassa. +

Vaaditut liitteet

+

Avustushakemuksen käsittelyä varten tarvitaan vahvistettuja, yhteisön kokouksessaan hyväksymiä ja allekirjoittamia, liitteitä edelliseltä päättyneeltä tilikaudelta sekä liitteitä sille toimintavuodelle, jolle avustusta haetaan. Edellistä tilikautta koskevat liitteet ovat: tilinpäätös, toimintakertomus ja tilin- tai toiminnantarkastuskertomus sekä vuosikokouksen pöytäkirja. Liitteet vuodelle, jolle avustusta haetaan ovat: talousarvio ja toimintasuunnitelma. +

Usean liitteen toimittaminen yhtenä tiedostona

+

Voit halutessasi toimittaa useampia liitteitä yhtenä tiedostona Tilinpäätös tai talousarvio -liitekohdassa. Merkitse tällöin muiden liiteotsikoiden kohdalla ”Liite on toimitettu yhtenä tiedostona tai toisen hakemuksen yhteydessä”. +

Helsingin kaupungille aiemmin toimitetut liitteet

+

Jos vaaditut liitteet on jo toimitettu toisen Helsingin kaupungille osoitetun avustushakemuksen liitteenä, samoja liitteitä ei tarvitse toimittaa uudelleen. Yhteisön vahvistettu tilinpäätös, toimintakertomus, toimintasuunnitelma ja talousarvio eivät voi olla erilaisia eri hakemusten liitteenä. Merkitse tällöin toimitettujen liitteiden kohdalla ”Liite on toimitettu yhtenä tiedostona tai toisen hakemuksen yhteydessä”.

+ notification_attachments: + '#type': webform_markup + '#markup': | +
+
+
Liitteiden sisältöä ei voi tarkastella jälkikäteen
+

Huomioithan, että et pysty avaamaan liitteitä sen jälkeen, kun olet liittänyt ne lomakkeelle. Näet liitteestä ainoastaan sen tiedostonimen.

+

Vaikka et voi tarkastella liitteiden sisältöä jälkikäteen, lomakkeelle liitetyt liitteet lähtevät lomakkeen muiden tietojen mukana avustushakemuksen käsittelijälle.

+
+
+ yhteison_saannot: + '#type': grants_attachments + '#title': 'Yhteisön säännöt' + '#multiple': false + '#filetype': '7' + '#help': 'Uusi hakija tai säännöt muuttuneet.' + '#title_display': before + '#description__access': false + vahvistettu_tilinpaatos: + '#type': grants_attachments + '#title': 'Vahvistettu tilinpäätös (edelliseltä päättyneeltä tilikaudelta)' + '#multiple': false + '#filetype': '43' + '#help': |- +

Tilinpäätöksen täytyy sisältää vähintään tuloslaskelma ja tase. Yhdistys liittää tähän kohtaan yhdistyksen jäsenkokouksessa vahvistetun ja allekirjoitetun tilinpäätöksen.

+

Yhteisön tilikausi voi olla kalenterivuosi tai jokin muu kausi. Yhdistysten kohdalla niiden omissa säännöissä lukee, mikä on yhdistyksen tilikausi.

+ '#title_display': before + '#multiple__no_items_message': 'Ei syötettyjä arvoja. Lisää uusi sisältö alta.' + '#description__access': false + vahvistettu_toimintakertomus: + '#type': grants_attachments + '#title': 'Vahvistettu toimintakertomus (edelliseltä päättyneeltä tilikaudelta)' + '#multiple': false + '#filetype': '4' + '#help': |- +

Yhdistys liittää tähän kohtaan yhdistyksen jäsenkokouksessa vahvistetun toimintakertomuksen.

+

Jos toimintakertomus on osana tilinpäätöstä ja liititte sen jo tilinpäätöksen mukana lomakkeelle, sitä ei tarvitse liittää tähän erikseen. Valitse tällaisessa tilanteessa toimintakertomuksen kohdalla ”Liite on toimitettu yhtenä tiedostona tai toisen hakemuksen yhteydessä”.

+ '#title_display': before + '#description__access': false + vahvistettu_tilin_tai_toiminnantarkastuskertomus: + '#type': grants_attachments + '#title': 'Vahvistettu tilin- tai toiminnantarkastuskertomus (edelliseltä päättyneeltä tilikaudelta)' + '#multiple': false + '#filetype': '5' + '#help': |- +

Liitä tähän allekirjoitettu tilin- tai toiminnantarkastuskertomus yhteisön edelliseltä päättyneeltä tilikaudelta.

+

Jos allekirjoitettu tilin- tai toiminnantarkastuskertomus on osa yhteisönne tilinpäätöstä ja liitit sen jo lomakkeelle tilinpäätöksen kohdalla, valitse tässä kohdassa ”Liite on toimitettu yhtenä tiedostona tai toisen hakemuksen yhteydessä”.

+ '#title_display': before + '#description__access': false + vuosikokouksen_poytakirja: + '#type': grants_attachments + '#title': 'Vuosikokouksen pöytäkirja, jossa on vahvistettu edellisen päättyneen tilikauden tilinpäätös' + '#multiple': false + '#filetype': '8' + '#help': 'Liitä tähän yhteisön kokouksen pöytäkirja, jossa edellisen päättyneen tilikauden tilinpäätös on vahvistettu ja vastuuvapaus myönnetty. Yhdistyksillä tilinpäätös vahvistetaan aina yhdistyksen jäsenkokouksessa. Mikäli yhteisöltä ei edellytetä vuosikokousta tai muuta yhteisön kokousta, jossa tilinpäätös tulisi vahvistaa ja vastuuvapaus myöntää, ei tätä liitettä tarvitse toimittaa.' + '#title_display': before + '#description__access': false + toimintasuunnitelma: + '#type': grants_attachments + '#title': 'Toimintasuunnitelma (sille vuodelle jolle haet avustusta)' + '#multiple': false + '#filetype': '1' + '#help': 'Liitä tähän koko yhteisön toimintasuunnitelma. ' + '#title_display': before + '#description__access': false + talousarvio: + '#type': grants_attachments + '#title': 'Talousarvio (sille vuodelle jolle haet avustusta)' + '#multiple': false + '#filetype': '22' + '#help': 'Talousarvio (sille vuodelle jolle haet avustusta)' + '#title_display': before + '#description__access': false + extra_info: + '#type': textarea + '#title': 'Lisäselvitys liitteistä' + '#maxlength': 5000 + '#counter_type': character + '#counter_maximum': 5000 + '#counter_maximum_message': '%d/5000 merkkiä jäljellä' + '#attributes': + class: + - webform--large + '#cols': 63 + muu_liite: + '#type': grants_attachments + '#title': 'Muu liite' + '#multiple': 10 + '#filetype': '0' + '#title_display': before + '#multiple__item_label': liite + '#multiple__sorting': false + '#multiple__add': false + '#multiple__remove': false + '#multiple__add_more_input': false + '#multiple__add_more_button_label': 'Lisää uusi liite' + '#isDeliveredLater__access': false + '#isIncludedInOtherFile__access': false + actions: + '#type': webform_actions + '#title': 'Submit button(s)' + '#submit__label': Lähetä + '#draft__label': 'Tallenna keskeneräisenä' + '#wizard_prev__label': 'Edellinen' + '#wizard_next__label': 'Seuraava' + '#preview_prev__label': 'Edellinen' + '#preview_next__label': 'Esikatseluun' + '#delete_hide': false + '#delete__label': 'Poista keskeneräinen' + '#delete__attributes': + class: + - hds-button + - hds-button--primary + '#delete__dialog': true +css: '' +javascript: '' +settings: + ajax: false + ajax_scroll_top: form + ajax_progress_type: '' + ajax_effect: '' + ajax_speed: null + page: true + page_submit_path: '' + page_confirm_path: '' + page_theme_name: '' + form_title: source_entity_webform + form_submit_once: false + form_open_message: '' + form_close_message: '' + form_exception_message: '' + form_previous_submissions: false + form_confidential: false + form_confidential_message: '' + form_disable_remote_addr: true + form_convert_anonymous: false + form_prepopulate: false + form_prepopulate_source_entity: false + form_prepopulate_source_entity_required: false + form_prepopulate_source_entity_type: '' + form_unsaved: true + form_disable_back: false + form_submit_back: true + form_disable_autocomplete: false + form_novalidate: false + form_disable_inline_errors: false + form_required: false + form_autofocus: false + form_details_toggle: false + form_reset: false + form_access_denied: default + form_access_denied_title: '' + form_access_denied_message: '' + form_access_denied_attributes: { } + form_file_limit: '' + form_attributes: { } + form_method: '' + form_action: '' + share: false + share_node: false + share_theme_name: '' + share_title: true + share_page_body_attributes: { } + submission_label: '' + submission_exception_message: '' + submission_locked_message: '' + submission_log: true + submission_excluded_elements: { } + submission_exclude_empty: false + submission_exclude_empty_checkbox: false + submission_views: { } + submission_views_replace: { } + submission_user_columns: { } + submission_user_duplicate: false + submission_access_denied: default + submission_access_denied_title: '' + submission_access_denied_message: '' + submission_access_denied_attributes: { } + previous_submission_message: '' + previous_submissions_message: '' + autofill: false + autofill_message: '' + autofill_excluded_elements: { } + wizard_progress_bar: true + wizard_progress_pages: false + wizard_progress_percentage: false + wizard_progress_link: true + wizard_progress_states: false + wizard_start_label: '' + wizard_preview_link: false + wizard_confirmation: true + wizard_confirmation_label: '6. Valmis' + wizard_auto_forward: true + wizard_auto_forward_hide_next_button: false + wizard_keyboard: true + wizard_track: '' + wizard_prev_button_label: Edellinen + wizard_next_button_label: Seuraava + wizard_toggle: true + wizard_toggle_show_label: '' + wizard_toggle_hide_label: '' + wizard_page_type: container + wizard_page_title_tag: h2 + preview: 2 + preview_label: '5. Vahvista, esikatsele ja lähetä' + preview_title: 'Vahvista, esikatsele ja lähetä' + preview_message: '' + preview_attributes: { } + preview_excluded_elements: { } + preview_exclude_empty: false + preview_exclude_empty_checkbox: false + draft: all + draft_multiple: false + draft_auto_save: false + draft_saved_message: '' + draft_loaded_message: '' + draft_pending_single_message: '' + draft_pending_multiple_message: '' + confirmation_type: none + confirmation_url: '' + confirmation_title: '' + confirmation_message: '' + confirmation_attributes: { } + confirmation_back: true + confirmation_back_label: '' + confirmation_back_attributes: { } + confirmation_exclude_query: true + confirmation_exclude_token: true + confirmation_update: false + limit_total: null + limit_total_interval: null + limit_total_message: '' + limit_total_unique: false + limit_user: null + limit_user_interval: null + limit_user_message: '' + limit_user_unique: false + entity_limit_total: null + entity_limit_total_interval: null + entity_limit_user: null + entity_limit_user_interval: null + purge: draft + purge_days: 365 + results_disabled: false + results_disabled_ignore: false + results_customize: false + token_view: false + token_update: false + token_delete: false + serial_disabled: false +access: + create: + roles: + - anonymous + - authenticated + users: { } + permissions: { } + view_any: + roles: { } + users: { } + permissions: { } + update_any: + roles: { } + users: { } + permissions: { } + delete_any: + roles: { } + users: { } + permissions: { } + purge_any: + roles: { } + users: { } + permissions: { } + view_own: + roles: { } + users: { } + permissions: { } + update_own: + roles: { } + users: { } + permissions: { } + delete_own: + roles: { } + users: { } + permissions: { } + administer: + roles: { } + users: { } + permissions: { } + test: + roles: { } + users: { } + permissions: { } + configuration: + roles: { } + users: { } + permissions: { } +handlers: + grants_handler: + id: grants_handler + handler_id: grants_handler + label: 'Grants Handler' + notes: '' + status: true + conditions: { } + weight: 0 + settings: + debug: false +variants: { } diff --git a/public/modules/custom/grants_metadata/src/Plugin/DataType/SotepeYleisData.php b/public/modules/custom/grants_metadata/src/Plugin/DataType/SotepeYleisData.php new file mode 100644 index 0000000000..38a61fc0ea --- /dev/null +++ b/public/modules/custom/grants_metadata/src/Plugin/DataType/SotepeYleisData.php @@ -0,0 +1,39 @@ +parent)) { + // The property path of this data object is the parent's path appended + // by this object's name. + $prefix = $this->parent->getPropertyPath(); + return ((is_string($prefix) && strlen($prefix)) ? $prefix . '.' : '') . $this->name; + } + // If no parent is set, this is the root of the data tree. Thus the property + // path equals the name of this data object. + elseif (isset($this->name)) { + return $this->name; + } + return ''; + } + +} diff --git a/public/modules/custom/grants_metadata/src/TypedData/Definition/SotepeyleisDefinition.php b/public/modules/custom/grants_metadata/src/TypedData/Definition/SotepeyleisDefinition.php new file mode 100644 index 0000000000..2541e39ab7 --- /dev/null +++ b/public/modules/custom/grants_metadata/src/TypedData/Definition/SotepeyleisDefinition.php @@ -0,0 +1,188 @@ +propertyDefinitions)) { + + $info = &$this->propertyDefinitions; + + foreach ($this->getBaseProperties() as $key => $property) { + $info[$key] = $property; + } + } + + $info['members_applicant_person_local'] = DataDefinition::create('integer') + ->setSetting('defaultValue', "") + ->setSetting('valueCallback', [ + '\Drupal\grants_handler\Plugin\WebformHandler\GrantsHandler', + 'convertToInt', + ]) + ->setSetting('typeOverride', [ + 'dataType' => 'integer', + 'jsonType' => 'int', + ]) + ->setSetting('jsonPath', [ + 'compensation', + 'activitiesInfoArray', + 'membersApplicantPersonLocal', + ]); + + $info['members_applicant_person_global'] = DataDefinition::create('integer') + ->setSetting('defaultValue', "") + ->setSetting('valueCallback', [ + '\Drupal\grants_handler\Plugin\WebformHandler\GrantsHandler', + 'convertToInt', + ]) + ->setSetting('jsonPath', [ + 'compensation', + 'activitiesInfoArray', + 'membersApplicantPersonGlobal', + ]); + + $info['members_applicant_community_local'] = DataDefinition::create('integer') + ->setSetting('defaultValue', "") + ->setSetting('valueCallback', [ + '\Drupal\grants_handler\Plugin\WebformHandler\GrantsHandler', + 'convertToInt', + ]) + ->setSetting('jsonPath', [ + 'compensation', + 'activitiesInfoArray', + 'membersApplicantCommunityLocal', + ]); + + $info['members_applicant_community_global'] = DataDefinition::create('integer') + ->setSetting('valueCallback', [ + '\Drupal\grants_handler\Plugin\WebformHandler\GrantsHandler', + 'convertToInt', + ]) + ->setSetting('jsonPath', [ + 'compensation', + 'activitiesInfoArray', + 'membersApplicantCommunityGlobal', + ]); + + $info['subventions'] = ListDataDefinition::create('grants_metadata_compensation_type') + ->setSetting('jsonPath', [ + 'compensation', + 'compensationInfo', + 'compensationArray', + ]); + + $info['compensation_purpose'] = DataDefinition::create('string') + ->setSetting('jsonPath', [ + 'compensation', + 'compensationInfo', + 'generalInfoArray', + 'purpose', + ]); + + $info['compensation_boolean'] = DataDefinition::create('boolean') + ->setRequired(TRUE) + ->setSetting('typeOverride', [ + 'dataType' => 'string', + 'jsonType' => 'bool', + ]) + ->setSetting('jsonPath', [ + 'compensation', + 'compensationInfo', + 'generalInfoArray', + 'compensationPreviousYear', + ]); + + $info['compensation_explanation'] = DataDefinition::create('string') + ->setSetting('defaultValue', "") + ->setSetting('jsonPath', [ + 'compensation', + 'compensationInfo', + 'generalInfoArray', + 'explanation', + ]); + + $info['who_benefits'] = DataDefinition::create('string') + ->setSetting('jsonPath', [ + 'compensation', + 'compensationInfo', + 'generalInfoArray', + 'whoBenefits', + ]); + + $info['changes_on_success'] = DataDefinition::create('string') + ->setSetting('jsonPath', [ + 'compensation', + 'compensationInfo', + 'generalInfoArray', + 'changesOnSuccess', + ]); + + $info['results_of_activities'] = DataDefinition::create('string') + ->setSetting('jsonPath', [ + 'compensation', + 'compensationInfo', + 'generalInfoArray', + 'resultsOfActivities', + ]); + + $info['fee_person'] = DataDefinition::create('float') + ->setSetting('jsonPath', [ + 'compensation', + 'activitiesInfoArray', + 'feePerson', + ]) + ->setSetting('valueCallback', [ + '\Drupal\grants_handler\Plugin\WebformHandler\GrantsHandler', + 'convertToFloat', + ]) + ->setSetting('typeOverride', [ + 'dataType' => 'string', + 'jsonType' => 'float', + ]); + + $info['fee_community'] = DataDefinition::create('float') + ->setSetting('jsonPath', [ + 'compensation', + 'activitiesInfoArray', + 'feeCommunity', + ]) + ->setSetting('valueCallback', [ + '\Drupal\grants_handler\Plugin\WebformHandler\GrantsHandler', + 'convertToFloat', + ]) + ->setSetting('typeOverride', [ + 'dataType' => 'string', + 'jsonType' => 'float', + ]); + + return $this->propertyDefinitions; + } + + /** + * Override property definition. + * + * @param string $name + * Property name. + * + * @return \Drupal\Core\TypedData\DataDefinitionInterface|void|null + * Property definition. + */ + public function getPropertyDefinition($name) { + $retval = parent::getPropertyDefinition($name); + return $retval; + } + +} From 676dc70f41e038802740a53603f225619ddf9f63 Mon Sep 17 00:00:00 2001 From: Santeri Hurnanen Date: Thu, 28 Nov 2024 09:53:16 +0200 Subject: [PATCH 62/74] UHF-10952: Allow login with high eIDAS levels of assurance (#1585) https://ec.europa.eu/digital-building-blocks/sites/display/DIGITAL/eIDAS+Levels+of+Assurance --- public/sites/default/all.settings.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/public/sites/default/all.settings.php b/public/sites/default/all.settings.php index c76f7f8294..70a795d624 100644 --- a/public/sites/default/all.settings.php +++ b/public/sites/default/all.settings.php @@ -22,6 +22,10 @@ 'loa' => 'substantial', 'roles' => ['helsinkiprofiili'], ], + [ + 'loa' => 'high', + 'roles' => ['helsinkiprofiili'], + ], ]; $config['openid_connect.client.tunnistamoadmin']['settings']['client_roles'] = ['ad_user']; From aa3409f9903b2482b3e73273a7ca2cb20ed07bdd Mon Sep 17 00:00:00 2001 From: Janne Suominen Date: Fri, 29 Nov 2024 08:14:24 +0200 Subject: [PATCH 63/74] fix: UHF-10711: Last fix to form & test update (#1586) --- ...ebform.iakkaiden_kulttuuri_ja_liikunta.yml | 26 ++++++++----------- .../data/application/application_data_70.ts | 12 ++++----- 2 files changed, 16 insertions(+), 22 deletions(-) diff --git a/conf/cmi/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml b/conf/cmi/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml index 17f89b89c8..19469c1d65 100644 --- a/conf/cmi/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml +++ b/conf/cmi/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml @@ -681,12 +681,12 @@ elements: |- '#counter_maximum': 2500 '#counter_maximum_message': '%d/2500 merkkiä jäljellä' '#states': - visible: - ':input[name="hankesuunnitelma_radios"]': - value: '0' - required: - ':input[name="hankesuunnitelma_radios"]': - value: '0' + visible: + ':input[name="hankesuunnitelma_radios"]': + value: '0' + required: + ':input[name="hankesuunnitelma_radios"]': + value: '0' hankkeen_toimenpiteet_aikataulu: '#type': textarea '#title': 'Mitkä ovat hankkeen konkreettiset toimenpiteet ja niiden toteutusaikataulu?' @@ -801,15 +801,11 @@ elements: |- '#counter_maximum_message': '%d/1250 merkkiä jäljellä' '#states': visible: - - ':input[name="kulttuuri1_summa"]': - value: - greater: '0' - - or - - ':input[name="kulttuuri2_summa"]': - value: - greater: '0' - - ':input[name="hankesuunnitelma_radios"]': - value: '0' + ':input[name="kulttuuri1_summa"]': + value: + greater: '0' + ':input[name="hankesuunnitelma_radios"]': + value: '0' hankkeen_kohderyhmat_section: '#type': webform_section '#title': '3.3 Hankkeen kohderyhmät' diff --git a/e2e/utils/data/application/application_data_70.ts b/e2e/utils/data/application/application_data_70.ts index 197dba1302..50345825b0 100644 --- a/e2e/utils/data/application/application_data_70.ts +++ b/e2e/utils/data/application/application_data_70.ts @@ -1054,14 +1054,12 @@ const missingValues: FormDataWithRemoveOptionalProps = { 'edit-hankkeen-toimenpiteet-alkupvm': 'Virhe sivulla 3. Tarkemmat tiedot: Alkupäivämäärä kenttä on pakollinen.', 'edit-hankkeen-toimenpiteet-loppupvm': 'Virhe sivulla 3. Tarkemmat tiedot: Loppupäivämäärä kenttä on pakollinen.', 'edit-hankkeen-keskeisimmat-kumppanit': 'Virhe sivulla 3. Tarkemmat tiedot: Nimeä hankkeen keskeisimmät yhteistyökumppanit ja heidän roolinsa hankkeessa kenttä on pakollinen.', - 'edit-haun-painopisteet-digi-kehitys': 'Virhe sivulla 3. Tarkemmat tiedot: Kehitetäänkö hankkeessa digitaalisesti / etänä toteutettavia kulttuuritoimintoja tai liikkumiseen aktivoivaa toimintaa? Miten? kenttä on pakollinen.', - 'edit-haun-painopisteet-vertais-kehitys': 'Virhe sivulla 3. Tarkemmat tiedot: Kehitetäänkö hankkeessa vapaaehtois- / vertaistoimintaa? Miten? kenttä on pakollinen.', 'edit-hankkeen-kohderyhmat-kenelle': 'Virhe sivulla 3. Tarkemmat tiedot: Kenelle hankkeen toiminta on pääasiallisesti suunnattu? kenttä on pakollinen.', 'edit-hankkeen-kohderyhmat-tavoitus': 'Virhe sivulla 3. Tarkemmat tiedot: Kuinka hankkeen kohderyhmät aiotaan tavoittaa? kenttä on pakollinen.', 'edit-hankkeen-kohderyhmat-konkretia': 'Virhe sivulla 3. Tarkemmat tiedot: Miten hankkeessa edistetään konkreettisin toimenpitein valitun kohderyhmän toimintakykyä ja hyvinvointia? kenttä on pakollinen.', 'edit-hankkeen-kohderyhmat-osallisuus': 'Virhe sivulla 3. Tarkemmat tiedot: Millä tavoin hankkeessa edistetään osallisuutta? Mikä ikäihmisten rooli hankkeessa on? kenttä on pakollinen.', 'edit-hankkeen-kohderyhmat-osaaminen': 'Virhe sivulla 3. Tarkemmat tiedot: Millaista osaamista kyseisen kohderyhmän/-ryhmien kanssa työskentelystä hanketoimijoilla on ennestään? kenttä on pakollinen.', - 'edit-hankkeen-kohderyhmat-postinrot': 'Virhe sivulla 3. Tarkemmat tiedot: Millä postinumeroalueella tai -alueilla Helsingissä hanke toteutetaan? kenttä on pakollinen.', + 'edit-hankkeen-kohderyhmat-postinrot': 'Virhe sivulla 3. Tarkemmat tiedot: Millä postinumeroalueella tai -alueilla Helsingissä hanke toteutetaan? Kirjaa kenttään enintään kolme (3) postinumeroaluetta ja erottele ne toisistaan pilkulla (,) kenttä on pakollinen.', 'edit-hankkeen-kohderyhmat-miksi-alue': 'Virhe sivulla 3. Tarkemmat tiedot: Miksi juuri kyseinen alue / alueet on valittu? kenttä on pakollinen.', 'edit-hankkeen-riskit-keskeisimmat': 'Virhe sivulla 3. Tarkemmat tiedot: Mitkä ovat hankkeen toteuttamisen näkökulmasta keskeisimmät riskit? kenttä on pakollinen.', 'edit-hankkeen-riskit-seuranta': 'Virhe sivulla 3. Tarkemmat tiedot: Miten hankkeessa aiotaan toteuttaa seurantaa ja arviointia? kenttä on pakollinen.', @@ -1134,10 +1132,10 @@ const sendApplication: FormDataWithRemoveOptionalProps = { */ const registeredCommunityApplications_70 = { draft: baseForm_70, - visibilityByState: createFormData(baseForm_70, visibilityByState), - visibilityByStateSection3Estimates: createFormData(baseForm_70, visibilityByStateSection3Estimates), - missingValues: createFormData(baseForm_70, missingValues), - wrongValues: createFormData(baseForm_70, wrongValues), + visibility_by_state: createFormData(baseForm_70, visibilityByState), + visibility_by_state_section3_estimates: createFormData(baseForm_70, visibilityByStateSection3Estimates), + missing_values: createFormData(baseForm_70, missingValues), + wrong_values: createFormData(baseForm_70, wrongValues), success: createFormData(baseForm_70, sendApplication), } From 0d99948ae07f378f50e0b36619636f03c0dca1f3 Mon Sep 17 00:00:00 2001 From: Tero Virtanen <105207219+terovirtanen@users.noreply.github.com> Date: Fri, 29 Nov 2024 10:17:33 +0200 Subject: [PATCH 64/74] Update Azure Devops pipelines (#1568) * build: pipeline templates by Ansible scripts * Remove obsolete pipeline files --- azure-pipelines-prod.yml | 30 ------------ azure-pipelines-staging.yml | 41 ---------------- pipelines/drupal-dev.yml | 49 +++++++++++++++++++ .../drupal-production.yml | 26 +++++----- pipelines/drupal-staging.yml | 48 ++++++++++++++++++ .../drupal-test.yml | 27 ++++++---- 6 files changed, 125 insertions(+), 96 deletions(-) delete mode 100644 azure-pipelines-prod.yml delete mode 100644 azure-pipelines-staging.yml create mode 100644 pipelines/drupal-dev.yml rename azure-pipelines-dev.yml => pipelines/drupal-production.yml (58%) create mode 100644 pipelines/drupal-staging.yml rename azure-pipelines-test.yml => pipelines/drupal-test.yml (54%) diff --git a/azure-pipelines-prod.yml b/azure-pipelines-prod.yml deleted file mode 100644 index 8df5632c9c..0000000000 --- a/azure-pipelines-prod.yml +++ /dev/null @@ -1,30 +0,0 @@ -# File: drupal-helfi/azure-pipelines.yml - -# Continuous integration (CI) triggers cause a pipeline to run whenever you push -# an update to the specified branches or you push specified tags. -trigger: none - -# Pull request (PR) triggers cause a pipeline to run whenever a pull request is -# opened with one of the specified target branches, or when updates are made to -# such a pull request. -# -# GitHub creates a new ref when a pull request is created. The ref points to a -# merge commit, which is the merged code between the source and target branches -# of the pull request. -# -# Opt out of pull request validation -pr: none - -# By default, use self-hosted agents -pool: Default - -resources: - repositories: - # Azure DevOps repository - - repository: avustusasiointi-pipelines - type: git - # project/repository - name: avustusasiointi/avustusasiointi-pipelines - -extends: - template: azure-pipelines-drupal-prod.yml@avustusasiointi-pipelines diff --git a/azure-pipelines-staging.yml b/azure-pipelines-staging.yml deleted file mode 100644 index 8f833f0eec..0000000000 --- a/azure-pipelines-staging.yml +++ /dev/null @@ -1,41 +0,0 @@ -# File: drupal-helfi/azure-pipelines.yml - -# Continuous integration (CI) triggers cause a pipeline to run whenever you push -# an update to the specified branches or you push specified tags. -trigger: - batch: true - branches: - include: - - main - paths: - exclude: - - '*.md' - - '.github/' - - 'azure-pipelines-dev.yml' - - 'azure-pipelines-test.yml' - - 'azure-pipelines-prod.yml' - -# Pull request (PR) triggers cause a pipeline to run whenever a pull request is -# opened with one of the specified target branches, or when updates are made to -# such a pull request. -# -# GitHub creates a new ref when a pull request is created. The ref points to a -# merge commit, which is the merged code between the source and target branches -# of the pull request. -# -# Opt out of pull request validation -pr: none - -# By default, use self-hosted agents -pool: Default - -resources: - repositories: - # Azure DevOps repository - - repository: avustusasiointi-pipelines - type: git - # project/repository - name: avustusasiointi/avustusasiointi-pipelines - -extends: - template: azure-pipelines-drupal-staging.yml@avustusasiointi-pipelines diff --git a/pipelines/drupal-dev.yml b/pipelines/drupal-dev.yml new file mode 100644 index 0000000000..cd16817b23 --- /dev/null +++ b/pipelines/drupal-dev.yml @@ -0,0 +1,49 @@ +# Continuous integration (CI) triggers cause a pipeline to run whenever you push +# an update to the specified branches or you push specified tags. +trigger: none + # batch: true + # branches: + # include: + # - dev + # paths: + # exclude: + # - '*.md' + # - '.github/' + # - 'pipelines/drupal-production.yml' + # - 'pipelines/drupal-staging.yml' + # - 'pipelines/drupal-test.yml' + # - 'compose*' + +# Pull request (PR) triggers cause a pipeline to run whenever a pull request is +# opened with one of the specified target branches, or when updates are made to +# such a pull request. +# +# GitHub creates a new ref when a pull request is created. The ref points to a +# merge commit, which is the merged code between the source and target branches +# of the pull request. +# +# Opt out of pull request validation +pr: none + +# By default, use self-hosted agents +pool: Default + +resources: + repositories: + # Azure DevOps repository + - repository: avustusasiointi-pipelines + type: git + # Azure DevOps project/repository + name: avustusasiointi/avustusasiointi-pipelines + +extends: + # Filename in Azure DevOps Repository + template: components/drupal/pipelines/drupal-dev.yml@avustusasiointi-pipelines + # parameters: + # Application build arguments and config map values as key value pairs. + # Does not contain all buildArguments or configMap values, the rest located in avustusasiointi-pipelines + # The values here will override the values defined in the avustusasiointi-pipelines repository + # buildArgs: + # DEBUG: 1 + # configMap: # pod environment variables + # DEBUG: 1 diff --git a/azure-pipelines-dev.yml b/pipelines/drupal-production.yml similarity index 58% rename from azure-pipelines-dev.yml rename to pipelines/drupal-production.yml index 1b7ed5ebe5..fd7c3b2b21 100644 --- a/azure-pipelines-dev.yml +++ b/pipelines/drupal-production.yml @@ -1,15 +1,6 @@ -# File: drupal-helfi/azure-pipelines.yml - # Continuous integration (CI) triggers cause a pipeline to run whenever you push # an update to the specified branches or you push specified tags. trigger: none -# batch: true -# tags: -# include: -# - deploy-to-dev -# paths: -# exclude: -# - README.md # Pull request (PR) triggers cause a pipeline to run whenever a pull request is # opened with one of the specified target branches, or when updates are made to @@ -30,12 +21,17 @@ resources: # Azure DevOps repository - repository: avustusasiointi-pipelines type: git - # project/repository + # Azure DevOps project/repository name: avustusasiointi/avustusasiointi-pipelines - - repository: robottests - type: github - name: City-of-Helsinki/hel-fi-drupal-grants - endpoint: City-of-Helsinki extends: - template: azure-pipelines-drupal-dev.yml@avustusasiointi-pipelines + # Filename in Azure DevOps Repository + template: components/drupal/pipelines/drupal-production.yml@avustusasiointi-pipelines + # parameters: + # Application build arguments and config map values as key value pairs. + # Does not contain all buildArguments or configMap values, the rest located in avustusasiointi-pipelines + # The values here will override the values defined in the avustusasiointi-pipelines repository + # buildArgs: + # DEBUG: 1 + # configMap: # pod environment variables + # DEBUG: 1 diff --git a/pipelines/drupal-staging.yml b/pipelines/drupal-staging.yml new file mode 100644 index 0000000000..84e86e1dfd --- /dev/null +++ b/pipelines/drupal-staging.yml @@ -0,0 +1,48 @@ +# Continuous integration (CI) triggers cause a pipeline to run whenever you push +# an update to the specified branches or you push specified tags. +trigger: + batch: true + branches: + include: + - main + paths: + exclude: + - '*.md' + - '.github/' + - 'pipelines/drupal-production.yml' + - 'pipelines/drupal-test.yml' + - 'pipelines/drupal-dev.yml' + +# Pull request (PR) triggers cause a pipeline to run whenever a pull request is +# opened with one of the specified target branches, or when updates are made to +# such a pull request. +# +# GitHub creates a new ref when a pull request is created. The ref points to a +# merge commit, which is the merged code between the source and target branches +# of the pull request. +# +# Opt out of pull request validation +pr: none + +# By default, use self-hosted agents +pool: Default + +resources: + repositories: + # Azure DevOps repository + - repository: avustusasiointi-pipelines + type: git + # Azure DevOps project/repository + name: avustusasiointi/avustusasiointi-pipelines + +extends: + # Filename in Azure DevOps Repository + template: components/drupal/pipelines/drupal-staging.yml@avustusasiointi-pipelines + # parameters: + # Application build arguments and config map values as key value pairs. + # Does not contain all buildArguments or configMap values, the rest located in avustusasiointi-pipelines + # The values here will override the values defined in the avustusasiointi-pipelines repository + # buildArgs: + # DEBUG: 1 + # configMap: # pod environment variables + # DEBUG: 1 diff --git a/azure-pipelines-test.yml b/pipelines/drupal-test.yml similarity index 54% rename from azure-pipelines-test.yml rename to pipelines/drupal-test.yml index 3ed92852c0..36823a8f68 100644 --- a/azure-pipelines-test.yml +++ b/pipelines/drupal-test.yml @@ -1,19 +1,17 @@ -# File: drupal-helfi/azure-pipelines.yml - # Continuous integration (CI) triggers cause a pipeline to run whenever you push # an update to the specified branches or you push specified tags. trigger: batch: true branches: include: - - dev + - dev paths: exclude: - - '*.md' - - '.github/' - - 'azure-pipelines-dev.yml' - - 'azure-pipelines-staging.yml' - - 'azure-pipelines-prod.yml' + - '*.md' + - '.github/' + - 'pipelines/drupal-production.yml' + - 'pipelines/drupal-staging.yml' + - 'pipelines/drupal-dev.yml' # Pull request (PR) triggers cause a pipeline to run whenever a pull request is # opened with one of the specified target branches, or when updates are made to @@ -34,8 +32,17 @@ resources: # Azure DevOps repository - repository: avustusasiointi-pipelines type: git - # project/repository + # Azure DevOps project/repository name: avustusasiointi/avustusasiointi-pipelines extends: - template: azure-pipelines-drupal-test.yml@avustusasiointi-pipelines + # Filename in Azure DevOps Repository + template: components/drupal/pipelines/drupal-test.yml@avustusasiointi-pipelines + # parameters: + # Application build arguments and config map values as key value pairs. + # Does not contain all buildArguments or configMap values, the rest located in avustusasiointi-pipelines + # The values here will override the values defined in the avustusasiointi-pipelines repository + # buildArgs: + # DEBUG: 1 + # configMap: # pod environment variables + # DEBUG: 1 From 49720a7cf6007ec155c5fbe0a66b11b5fb229fd3 Mon Sep 17 00:00:00 2001 From: rpnykanen <48206082+rpnykanen@users.noreply.github.com> Date: Mon, 2 Dec 2024 06:35:13 +0200 Subject: [PATCH 65/74] UHF-10722 (#1587) * UHF-10722: separate function for rented premise and premise * UHF-10722: missing help text * UHF-10722: missing return type * UHF-10722: phpcs fixes * UHF-10722: the needed composite class was already made. Revert the change and use the ready made class instead * UHF-10722: correct comment --- .../src/Controller/GrantsWebformPrintController.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/public/modules/custom/grants_webform_print/src/Controller/GrantsWebformPrintController.php b/public/modules/custom/grants_webform_print/src/Controller/GrantsWebformPrintController.php index 1942ff75f8..5d6e2707f7 100644 --- a/public/modules/custom/grants_webform_print/src/Controller/GrantsWebformPrintController.php +++ b/public/modules/custom/grants_webform_print/src/Controller/GrantsWebformPrintController.php @@ -13,6 +13,7 @@ use Drupal\grants_orienteering_map\Element\OrienteeringMapComposite; use Drupal\grants_place_of_operation\Element\PlaceOfOperationComposite; use Drupal\grants_premises\Element\PremisesComposite; +use Drupal\grants_premises\Element\RentedPremiseComposite; use Drupal\grants_premises\Element\RentIncomeComposite; use Drupal\webform\Entity\Webform; use Drupal\webform\WebformTranslationManager; @@ -382,7 +383,8 @@ public function getTranslatedOptions(array $element, array $translatedFields): a */ public function getCompositeInputFields(array $element, array $translatedFields): array { $composite_inputs = match ($element['#type']) { - 'rented_premise_composite', 'premises_composite' => PremisesComposite::getCompositeElements($element), + 'rented_premise_composite' => RentedPremiseComposite::getCompositeElements($element), + 'premises_composite' => PremisesComposite::getCompositeElements($element), 'members_composite' => MembersComposite::getCompositeElements($element), 'club_section_composite' => ClubSectionComposite::getCompositeElements($element), 'orienteering_map_composite' => OrienteeringMapComposite::getCompositeElements($element), From 1389ac2d7e47a648b091c9eda9444363b5093cbb Mon Sep 17 00:00:00 2001 From: Santeri Hurnanen Date: Mon, 2 Dec 2024 06:35:43 +0200 Subject: [PATCH 66/74] Add missing translations (#1589) --- .../grants_club_section/translations/sv.po | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/public/modules/custom/grants_club_section/translations/sv.po b/public/modules/custom/grants_club_section/translations/sv.po index 5becc618b5..9845ed3de1 100644 --- a/public/modules/custom/grants_club_section/translations/sv.po +++ b/public/modules/custom/grants_club_section/translations/sv.po @@ -345,15 +345,15 @@ msgstr "Sport" msgctxt "grants_club_section" msgid "Women from Helsinki (20-63 years)" -msgstr "Kvinnor (20-63 år)" +msgstr "Kvinnor från Helsingfors (20-63 år)" msgctxt "grants_club_section" msgid "Men from Helsinki (20-63 years)" -msgstr "Män (20-63 år)" +msgstr "Män från Helsingfors (20-63 år)" msgctxt "grants_club_section" msgid "Others from Helsinki (20-63 years)" -msgstr "Övriga (20-63 år)" +msgstr "Övriga från Helsingfors (20-63 år)" msgctxt "grants_club_section" msgid "Practice hours of adults (20-63 years)" @@ -365,15 +365,15 @@ msgstr "

I avsnittet träningstimmar, rapportera inte enskilda idrottsutövarn msgctxt "grants_club_section" msgid "Men from Helsinki (64 years and over)" -msgstr "Män (64 år och äldre)" +msgstr "Män från Helsingfors (64 år och äldre)" msgctxt "grants_club_section" msgid "Women from Helsinki (64 years and over)" -msgstr "Kvinnor (64 år och äldre)" +msgstr "Kvinnor från Helsingfors (64 år och äldre)" msgctxt "grants_club_section" msgid "Others from Helsinki (64 years and over)" -msgstr "Övriga (64 år och äldre)" +msgstr "Övriga från Helsingfors (64 år och äldre)" msgctxt "grants_club_section" msgid "Practice hours of adults (64 years and over)" @@ -381,15 +381,15 @@ msgstr "Träningstimmar för vuxna (64 år och äldre)" msgctxt "grants_club_section" msgid "Boys from Helsinki (under 20 years of age)" -msgstr "Pojkar (under 20 år)" +msgstr "Pojkar från Helsingfors (under 20 år)" msgctxt "grants_club_section" msgid "Girls from Helsinki (under 20 years of age)" -msgstr "Flickor (under 20 år)" +msgstr "Flickor från Helsingfors (under 20 år)" msgctxt "grants_club_section" msgid "Others from Helsinki (under 20 years of age)" -msgstr "Övriga (under 20 år)" +msgstr "Övriga från Helsingfors (under 20 år)" msgctxt "grants_club_section" msgid "Practice hours of children/young people (under 20 years of age)" From 361c65619a13121c34414d9a670d2538321b1a26 Mon Sep 17 00:00:00 2001 From: Janne Suominen Date: Mon, 2 Dec 2024 06:36:24 +0200 Subject: [PATCH 67/74] Set form_submit & form_submit_back values for forms & default values. (#1588) --- conf/cmi/webform.settings.yml | 4 ++-- conf/cmi/webform.webform.asukasosallisuus_pienavustushake.yml | 4 ++-- conf/cmi/webform.webform.asukasosallisuus_yleis_ja_toimin.yml | 4 ++-- conf/cmi/webform.webform.grants_handler.yml | 4 ++-- conf/cmi/webform.webform.liikunta_tapahtuma.yml | 4 ++-- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/conf/cmi/webform.settings.yml b/conf/cmi/webform.settings.yml index 5011ceaaaf..af11329b16 100644 --- a/conf/cmi/webform.settings.yml +++ b/conf/cmi/webform.settings.yml @@ -24,9 +24,9 @@ settings: default_form_disable_inline_errors: false default_form_required: false default_form_required_label: 'Indicates required field' - default_form_unsaved: false + default_form_unsaved: true default_form_disable_back: false - default_form_submit_back: false + default_form_submit_back: true default_form_details_toggle: true default_form_file_limit: '' default_wizard_prev_button_label: Previous diff --git a/conf/cmi/webform.webform.asukasosallisuus_pienavustushake.yml b/conf/cmi/webform.webform.asukasosallisuus_pienavustushake.yml index e3583b6ee3..ad82299cb1 100644 --- a/conf/cmi/webform.webform.asukasosallisuus_pienavustushake.yml +++ b/conf/cmi/webform.webform.asukasosallisuus_pienavustushake.yml @@ -635,9 +635,9 @@ settings: form_prepopulate_source_entity: false form_prepopulate_source_entity_required: false form_prepopulate_source_entity_type: '' - form_unsaved: false + form_unsaved: true form_disable_back: false - form_submit_back: false + form_submit_back: true form_disable_autocomplete: false form_novalidate: false form_disable_inline_errors: false diff --git a/conf/cmi/webform.webform.asukasosallisuus_yleis_ja_toimin.yml b/conf/cmi/webform.webform.asukasosallisuus_yleis_ja_toimin.yml index c7aa003840..c6b1c01061 100644 --- a/conf/cmi/webform.webform.asukasosallisuus_yleis_ja_toimin.yml +++ b/conf/cmi/webform.webform.asukasosallisuus_yleis_ja_toimin.yml @@ -755,9 +755,9 @@ settings: form_prepopulate_source_entity: false form_prepopulate_source_entity_required: false form_prepopulate_source_entity_type: '' - form_unsaved: false + form_unsaved: true form_disable_back: false - form_submit_back: false + form_submit_back: true form_disable_autocomplete: false form_novalidate: false form_disable_inline_errors: false diff --git a/conf/cmi/webform.webform.grants_handler.yml b/conf/cmi/webform.webform.grants_handler.yml index 29def5ffc9..bed09391bb 100644 --- a/conf/cmi/webform.webform.grants_handler.yml +++ b/conf/cmi/webform.webform.grants_handler.yml @@ -67,9 +67,9 @@ settings: form_prepopulate_source_entity: false form_prepopulate_source_entity_required: false form_prepopulate_source_entity_type: '' - form_unsaved: false + form_unsaved: true form_disable_back: false - form_submit_back: false + form_submit_back: true form_disable_autocomplete: false form_novalidate: false form_disable_inline_errors: false diff --git a/conf/cmi/webform.webform.liikunta_tapahtuma.yml b/conf/cmi/webform.webform.liikunta_tapahtuma.yml index 537f2c5544..e108b662d1 100644 --- a/conf/cmi/webform.webform.liikunta_tapahtuma.yml +++ b/conf/cmi/webform.webform.liikunta_tapahtuma.yml @@ -618,9 +618,9 @@ settings: form_prepopulate_source_entity: false form_prepopulate_source_entity_required: false form_prepopulate_source_entity_type: '' - form_unsaved: false + form_unsaved: true form_disable_back: false - form_submit_back: false + form_submit_back: true form_disable_autocomplete: false form_novalidate: false form_disable_inline_errors: false From 101214d1023d638a3a2e2b2ef0a18317dd2841c3 Mon Sep 17 00:00:00 2001 From: rpnykanen <48206082+rpnykanen@users.noreply.github.com> Date: Tue, 3 Dec 2024 08:29:47 +0200 Subject: [PATCH 68/74] UHF-10722: remove the visibility helper text (#1591) * UHF-10722: remove the visibility helper text * UHF-10722: remove also the text from part4 * UHF-10722: added comment --- .../src/Controller/GrantsWebformPrintController.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/public/modules/custom/grants_webform_print/src/Controller/GrantsWebformPrintController.php b/public/modules/custom/grants_webform_print/src/Controller/GrantsWebformPrintController.php index 5d6e2707f7..8db4e409f6 100644 --- a/public/modules/custom/grants_webform_print/src/Controller/GrantsWebformPrintController.php +++ b/public/modules/custom/grants_webform_print/src/Controller/GrantsWebformPrintController.php @@ -185,6 +185,14 @@ private function fixWebformElement(array $element, string $key, array $translate $element['#title'] = $element['#title'] ?? ''; $element['#description'] = $element['#description'] ?? ''; + // Remove visibility texts from nuortoimpalkk print form. + if ($key === 'vuokra_avustushakemuksen_tiedot') { + unset($element['markup_01']); + } + if ($key === '4_palkkaustiedot') { + unset($element['markup_02']); + } + return $this->alterFieldTemplates($element, $translatedFields); } From f9169ca114d1bee61d7218a51e4e1f165a902733 Mon Sep 17 00:00:00 2001 From: jeremysteerio <49063836+jeremysteerio@users.noreply.github.com> Date: Tue, 3 Dec 2024 09:12:17 +0200 Subject: [PATCH 69/74] UHF-10456: Compensation purpose fixes (#1592) --- conf/cmi/language/en/webform.webform.sotepe_yleis.yml | 4 ++-- conf/cmi/language/sv/webform.webform.sotepe_yleis.yml | 4 ++-- conf/cmi/webform.webform.sotepe_yleis.yml | 10 +++++----- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/conf/cmi/language/en/webform.webform.sotepe_yleis.yml b/conf/cmi/language/en/webform.webform.sotepe_yleis.yml index 8e69b3da2e..4f4a941508 100644 --- a/conf/cmi/language/en/webform.webform.sotepe_yleis.yml +++ b/conf/cmi/language/en/webform.webform.sotepe_yleis.yml @@ -59,8 +59,8 @@ elements: | kayttotarkoitus: '#title': 'Purpose of use' compensation_purpose: - '#title': 'Brief description of the purpose(s) of the grant(s) applied for' - '#help': 'Indicate the purpose for which the grant is applied for. If necessary, specify the different uses. Also tell us what is intended to be achieved with the grant and what goals are associated with the activities to be supported.' + '#title': 'For what purpose will the grant be used?' + '#help': 'Provide a short description of the scope and nature of the activities to be carried out with the grant e.g. as follows:
How much or how often will you organise groups, events or other activities during the period of the grant? How many target group representatives do you expect to reach? In what areas of Helsinki will the activities be arranged? What kind of cooperation do you pursue with other operators in Helsinki?' '#counter_maximum_message': '%d/5000 characters remaining' who_benefits: '#title': 'Who are the main beneficiaries of your activities?' diff --git a/conf/cmi/language/sv/webform.webform.sotepe_yleis.yml b/conf/cmi/language/sv/webform.webform.sotepe_yleis.yml index 8b080c478e..e78fbdb049 100644 --- a/conf/cmi/language/sv/webform.webform.sotepe_yleis.yml +++ b/conf/cmi/language/sv/webform.webform.sotepe_yleis.yml @@ -62,8 +62,8 @@ elements: | kayttotarkoitus: '#title': 'Användningsända­mål' compensation_purpose: - '#title': 'En kort beskrivning av användningsändamålet för det/de understöd som ansöks' - '#help': 'Ange för vilket ändamål understödet ansöks och vid behov specificera de olika ändamålen. Ange också vad understödet är avsett för och vilka mål som är relaterade till den understödda verksamheten.' + '#title': 'Vad kommer understödet att användas till?' + '#help': 'Beskriv den verksamhet som ska genomföras med hjälp av understödet och verksamhetens omfattning i korthet exempelvis på följande sätt:
Hur mycket eller ofta ordnar ni grupper, evenemang eller annan verksamhet under den understödda perioden? Hur många representanter för målgruppen kommer ni att nå enligt er uppskattning? Inom vilka områden i Helsingfors kommer verksamheten att ordnas? På vilka sätt samarbetar ni med andra aktörer i Helsingfors?' '#counter_maximum_message': '%d/5000 tecken kvar' who_benefits: '#title': 'Who are the main beneficiaries of your activities?' diff --git a/conf/cmi/webform.webform.sotepe_yleis.yml b/conf/cmi/webform.webform.sotepe_yleis.yml index 59baeea245..bdf09319ae 100644 --- a/conf/cmi/webform.webform.sotepe_yleis.yml +++ b/conf/cmi/webform.webform.sotepe_yleis.yml @@ -246,11 +246,11 @@ elements: |- '#subvention_amount__title': 'Avustuksen summa' kayttotarkoitus: '#type': webform_section - '#title': 'Mihin avustus käytetään?' + '#title': 'Käyttötarkoitus' compensation_purpose: '#type': textarea - '#title': 'Lyhyt kuvaus haettavan / haettavien avustusten käyttötarkoituksista' - '#help': 'Kerro mitä tarkoitusta varten avustusta haetaan, erittele tarvittaessa eri käyttökohteet. Kerro myös mitä avustuksella on tarkoitus saada aikaiseksi ja millaisia tavoitteita avustettavaan toimintaan liittyy.' + '#title': 'Mihin avustus käytetään?' + '#help': 'Kuvaa tiiviisti avustuksella toteutettavaa toimintaa ja toiminnan laajuutta esimerkiksi seuraavilla tavoilla:
Kuinka paljon tai kuinka usein järjestätte ryhmiä, tapahtumia tai muuta toimintaa avustettavan ajanjakson aikana? Kuinka paljon kohderyhmän edustajia arvioitte tavoittavanne? Missä Helsingin alueilla toimintaa järjestetään? Minkälaista yhteistyötä teette Helsingissä muiden toimijoiden kanssa?' '#required': true '#counter_type': character '#maxlength': 5000 @@ -318,11 +318,11 @@ elements: |- visible: ':input[name="avustukset_summa"]': value: - greater_equal: '10000' + greater_equal: '50000' required: ':input[name="avustukset_summa"]': value: - greater_equal: '10000' + greater_equal: '50000' muut_samaan_tarkoitukseen_myonnetyt_avustukset: '#type': webform_section '#title': 'Muut samaan tarkoitukseen myönnetyt avustukset' From a2aa3ef67800e3a9ed9b1017ef8ac301976412cd Mon Sep 17 00:00:00 2001 From: Janne Suominen Date: Tue, 3 Dec 2024 12:23:34 +0200 Subject: [PATCH 70/74] UHF-11044: Update texts (#1593) --- .../en/webform.webform.liikunta_toiminta_ja_tilankaytto.yml | 4 ++-- .../sv/webform.webform.liikunta_toiminta_ja_tilankaytto.yml | 4 ++-- conf/cmi/webform.webform.liikunta_toiminta_ja_tilankaytto.yml | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/conf/cmi/language/en/webform.webform.liikunta_toiminta_ja_tilankaytto.yml b/conf/cmi/language/en/webform.webform.liikunta_toiminta_ja_tilankaytto.yml index 4e2ce23982..5b4d9d68ab 100644 --- a/conf/cmi/language/en/webform.webform.liikunta_toiminta_ja_tilankaytto.yml +++ b/conf/cmi/language/en/webform.webform.liikunta_toiminta_ja_tilankaytto.yml @@ -118,7 +118,7 @@ elements: | tilankayttoavustus: '#title': 'Sports facility usage grant' maksetut_vuokrat_info: - '#markup': '

Summary of rent paid by the club/association for regular training slots elsewhere than in Sports Services’ own facilities, in the previous calendar year between 1 January and 31 December. The Rents paid for sports facilities section is mandatory if you are applying for a facility use grant.

' + '#markup': '

Summary of rent paid by the club/association for regular training slots elsewhere than in Sports Services’ own facilities. Declare the realized paid rent sum and total hours in the previous calendar year between 1 January and 31 December according to the facility use appendix. The Rents paid for sports facilities section is mandatory if you are applying for a facility use grant.

' liikuntatiloista_maksetut_vuokrat_fieldset: '#title': 'Rent paid for sports facilities' tuntimaara_yhteensa: @@ -225,7 +225,7 @@ elements: | '#help': 'In addition to the VOK 1 training arranged by regional sports organisations, the calculation accounts for the number of instructors and coaches who have completed a sports federation’s coach and instructor training that are at least equal in terms of level and content, or who have completed a basic qualification in sports instruction (vocational college), a degree in sports instruction (university of applied sciences) or a master’s degree in sports sciences (sports pedagogy or sports biology).' lajijaostot_helsinkilaisille_aktiiviharrastajille: '#title': 'Operating sport divisions for Helsinki residents' - '#help': '

In this section, a single active member can be reported more than once, if the member meets the definition of an active member in several different sport divisions.

' + '#help': '

In the practice hours section, do not report the training output of individual actives, but the actual practice hours organized for Helsinki residents belonging to the age group.

If the actual number of training hours for an age group cannot be ascertained (e.g. many mixed groups), can the share of that age group be calculated from the total number of hours based on the share of the number of active members from Helsinki in the age group out of the total number of active members from Helsinki. E.g. the total number of hours in the division (all mixed groups) is 100 hours, where 10 adults and 20 under 20-year-olds are active: the number of hours for adults is 33 hours and for under 20-year-olds 67 hours. However, the actual number of hours realized for the age group should be used primarily.

' lajijaostot_info: '#markup': '

List the regular guided sports activities organised by the club/association by sport. Enter here the number of active members from Helsinki in the previous year, by sport, as well as their realized training hours by age group.

' club_section: diff --git a/conf/cmi/language/sv/webform.webform.liikunta_toiminta_ja_tilankaytto.yml b/conf/cmi/language/sv/webform.webform.liikunta_toiminta_ja_tilankaytto.yml index c8edc867e5..ab4e408957 100644 --- a/conf/cmi/language/sv/webform.webform.liikunta_toiminta_ja_tilankaytto.yml +++ b/conf/cmi/language/sv/webform.webform.liikunta_toiminta_ja_tilankaytto.yml @@ -123,7 +123,7 @@ elements: | tilankayttoavustus: '#title': 'Understöd för användning av idrottslokaler' maksetut_vuokrat_info: - '#markup': '

Sammanställning av de hyror som föreningen har betalatför regelbundna träningsskift förutom idrottstjänstens egna lokaler under föregående kalenderår 1.1. - 31.12.3. Avsnittet Hyror för idrottsanläggningar är obligatoriskt om du ansöker om understöd för användning av idrottslokaler.

' + '#markup': '

Sammanställning av de hyror som föreningen har betalat för regelbundna träningsskift förutom idrottstjänstens egna lokaler. Uppge de realiserade hyrorna och antalet timmar under föregående kalenderår 1.1. - 31.12. i enlighet med lokalanvändningsbilaga. Avsnittet Hyror betalda för idrottslokaler är obligatoriskt om du ansöker om understöd för användning av idrottslokaler.

' liikuntatiloista_maksetut_vuokrat_fieldset: '#title': 'Hyror betalda för idrottslokaler' tuntimaara_yhteensa: @@ -230,7 +230,7 @@ elements: | '#help': 'Utöver de VOK 1-utbildningar som ordnas av regionala idrottsorganisationer beaktas i beräkningen antalet handledare och tränare som har genomgått en utbildning för tränare och handledare som ordnas av ett grenförbund på minst motsvarande nivå och med motsvarande innehåll eller som har avlagt grundexamen i idrott, idrottsinstruktör (YH) eller magisterexamen i idrottsvetenskaper (idrottspedagogik eller motionsbiologi).' lajijaostot_helsinkilaisille_aktiiviharrastajille: '#title': 'Aktiva grengsektioner för helsingforsare' - '#help': '

I detta avsnitt kan en enskild aktiv idrottsutövare rapporteras mer än en gång, om den utövaren uppfyller definitionen av aktiv utövare i flera olika grensektioner.

' + '#help': '

I avsnittet träningstimmar, rapportera inte enskilda idrottsutövarnas träningsprestationer i timmar, utan de faktiska träningstimmar som organiserats för helsingforsare som tillhör åldersgruppen.

Om det faktiska antalet träningstimmar för en åldersgrupp inte kan fastställas (t. ex. många blandade träningsgrupper), kan andelen av den åldersgruppen beräknas från det totala antalet timmar baserat på andelen av antalet aktiva idrottsutövare från Helsingfors i åldersgruppen av det totala antalet aktiva idrottsutövare från Helsingfors. T. ex. totala antalet timmar i grensektionen (alla blandade grupper) är 100 timmar, där 10 vuxna och 20 under 20-åringar är aktiva: antalet timmar för vuxna är 33 timmar och för under 20-åringar 67 timmar. Det faktiska antalet realiserade timmar för åldersgruppen bör dock i första hand användas.

' lajijaostot_info: '#markup': '

Regelbunden handledd idrottsverksamhet som ordnas av föreningen, enligt gren. Ange här antalet aktiva idrottsutövare från Helsingfors under föregående år, per sport, samt deras realiserade träningstimmar per åldersgrupp.

' club_section: diff --git a/conf/cmi/webform.webform.liikunta_toiminta_ja_tilankaytto.yml b/conf/cmi/webform.webform.liikunta_toiminta_ja_tilankaytto.yml index 00fb3eb18c..e4985ba16a 100644 --- a/conf/cmi/webform.webform.liikunta_toiminta_ja_tilankaytto.yml +++ b/conf/cmi/webform.webform.liikunta_toiminta_ja_tilankaytto.yml @@ -496,7 +496,7 @@ elements: |- '#title': Tilankäyttöavustus maksetut_vuokrat_info: '#type': webform_markup - '#markup': '

Yhteenveto seuran/yhdistyksen maksamista säännöllisten harjoitusvuorojen vuokrista, muiden kuin liikuntapalvelun omien tilojen osalta, edellisen kalenterivuoden 1.1. - 31.12. ajalta. Liikuntatiloista maksetut vuokrat -kohta on pakollinen täyttää, mikäli haet tilankäyttöavustusta.

' + '#markup': '

Yhteenveto seuran/yhdistyksen maksamista toteutuneista säännöllisten harjoitusvuorojen vuokrista, muiden kuin liikuntapalvelun omien tilojen osalta. Ilmoita toteutuneet vuokrat ja tuntimäärä edellisen kalenterivuoden 1.1. - 31.12. ajalta tilankäyttöliitteen mukaisesti. Liikuntatiloista maksetut vuokrat -kohta on pakollinen täyttää, mikäli haet tilankäyttöavustusta.

' liikuntatiloista_maksetut_vuokrat_fieldset: '#type': fieldset '#title': 'Liikuntatiloista maksetut vuokrat' @@ -815,7 +815,7 @@ elements: |- lajijaostot_helsinkilaisille_aktiiviharrastajille: '#type': webform_section '#title': 'Lajijaostot helsinkiläisille aktiiviharrastajille' - '#help': '

Tässä kohdassa yksittäinen aktiiviharrastaja voi tulla ilmoitetuksi useamman kerran, mikäli aktiivi täyttää aktiiviharrastajan määritelmän useammassa eri lajijaostossa.

' + '#help': '

Älä ilmoita harjoitustunnit-kohdassa yksittäisten harrastajien toteutuneita liikuntasuoritteita tunteina, vaan ikäryhmään kuuluville helsinkiläisille järjestetyt toteutuneet harjoitustunnit.

Mikäli ikäryhmän todellinen harjoitustuntimäärä ei ole selvitettävissä (esim. paljon sekaryhmiä), voit laskea kokonaistuntimäärästä kyseisen ikäryhmän osuuden perustuen ikäryhmän helsinkiläisten aktiiviharrastajien määrän osuuteen helsinkiläisten aktiiviharrastajien kokonaismäärästä. Esim. Jaoston kokonaistuntimäärä (kaikki sekaryhmiä) on 100 tuntia, jossa liikkuu aktiivisesti 10 aikuista ja 20 alle 20-vuotiasta: aikuisten tuntimäärä 33 tuntia ja alle 20-vuotiaiden tuntimäärä 67 tuntia. Ensisijaisesti tulee kuitenkin käyttää ikäryhmän osalta todellista toteutunutta tuntimäärää.

' lajijaostot_info: '#type': webform_markup '#markup': '

Seuran/yhdistyksen järjestämä säännöllinen ohjattu liikuntatoiminta lajeittain. Ilmoita tähän lajeittain edellisen vuoden helsinkiläisten aktiiviharrastajien määrät sekä heidän toteutuneet harjoitustunnit ikäryhmittäin.

' From d51eda736dbd5d29af3328af1a00c06bd3c7ce56 Mon Sep 17 00:00:00 2001 From: Janne Suominen Date: Wed, 4 Dec 2024 12:32:21 +0200 Subject: [PATCH 71/74] UHF-10903: Fix missing dialog translations. (#1595) --- .../custom/grants_handler/js/application-copy-dialog.js | 8 ++++---- public/modules/custom/grants_handler/translations/fi.po | 8 ++++++++ public/modules/custom/grants_handler/translations/sv.po | 4 ++++ .../webform/application-copy-dialog-content.html.twig | 4 ++-- 4 files changed, 18 insertions(+), 6 deletions(-) diff --git a/public/modules/custom/grants_handler/js/application-copy-dialog.js b/public/modules/custom/grants_handler/js/application-copy-dialog.js index ae1477e94e..3482db5ca0 100644 --- a/public/modules/custom/grants_handler/js/application-copy-dialog.js +++ b/public/modules/custom/grants_handler/js/application-copy-dialog.js @@ -12,9 +12,9 @@ Drupal.dialogFunctions.createDialog({ dialogContent: htmlContent, - actionButtonText: Drupal.t('Copy application', [], { context: 'grants_handler' }), - backButtonText: Drupal.t('Close', [], { context: 'grants_handler' }), - closeButtonText: Drupal.t('Close', [], { context: 'grants_handler' }), + actionButtonText: Drupal.t('Copy application'), + backButtonText: Drupal.t('Close', {}, { context: 'grants_handler' }), + closeButtonText: Drupal.t('Close', {}, { context: 'grants_handler' }), actionButtonCallback: () => { // Redirect to a new URL window.location.href = copyUrl; @@ -27,7 +27,7 @@ */ }, - dialogTitle: Drupal.t('Copy application', [], { context: 'grants_handler' }), + dialogTitle: Drupal.t('Copy application'), customSelector: 'application-copy-dialog' }) }); diff --git a/public/modules/custom/grants_handler/translations/fi.po b/public/modules/custom/grants_handler/translations/fi.po index 88e95d82b0..3159975018 100644 --- a/public/modules/custom/grants_handler/translations/fi.po +++ b/public/modules/custom/grants_handler/translations/fi.po @@ -667,3 +667,11 @@ msgstr "Huomio" msgctxt "grants_handler" msgid "You must visit all pages in the form before you can submit the application." msgstr "Käy kaikilla sivuilla ennen kuin lähetät hakemuksen." + +msgctxt "grants_handler" +msgid "Application to copy" +msgstr "Kopioitava hakemus" + +msgctxt "grants_handler" +msgid "Application to copy" +msgstr "Kopioitava hakemus" diff --git a/public/modules/custom/grants_handler/translations/sv.po b/public/modules/custom/grants_handler/translations/sv.po index 10ee574448..7b8dcd42c7 100644 --- a/public/modules/custom/grants_handler/translations/sv.po +++ b/public/modules/custom/grants_handler/translations/sv.po @@ -663,3 +663,7 @@ msgstr "Observera" msgctxt "grants_handler" msgid "You must visit all pages in the form before you can submit the application." msgstr "Du måste besöka alla sidor i formuläret innan du kan skicka in ansökan." + +msgctxt "grants_handler" +msgid "Application to copy" +msgstr "Ansökan om att kopiera" diff --git a/public/themes/custom/hdbt_subtheme/templates/webform/application-copy-dialog-content.html.twig b/public/themes/custom/hdbt_subtheme/templates/webform/application-copy-dialog-content.html.twig index 11fdb8af1c..3cc165767a 100644 --- a/public/themes/custom/hdbt_subtheme/templates/webform/application-copy-dialog-content.html.twig +++ b/public/themes/custom/hdbt_subtheme/templates/webform/application-copy-dialog-content.html.twig @@ -1,2 +1,2 @@ -

Kopioitava hakemus: {{ webformTitle }}

-

Hakemustunnus: {{ applicationNumber }}

+

{{ "Application to copy"|t({}, {'context': 'grants_handler'})}}: {{ webformTitle }}

+

{{ "Application number"|t({}, {'context': 'grants_handler'})}}: {{ applicationNumber }}

From cb47bc7d62b030052141197a0ee6bca7e442f819 Mon Sep 17 00:00:00 2001 From: Santeri Hurnanen Date: Wed, 4 Dec 2024 12:33:10 +0200 Subject: [PATCH 72/74] UHF-11041: Change pipeline triggers (#1594) --- pipelines/drupal-dev.yml | 25 ++++++++++++------------- pipelines/drupal-test.yml | 24 ++++++++++++------------ 2 files changed, 24 insertions(+), 25 deletions(-) diff --git a/pipelines/drupal-dev.yml b/pipelines/drupal-dev.yml index cd16817b23..30aeba7d40 100644 --- a/pipelines/drupal-dev.yml +++ b/pipelines/drupal-dev.yml @@ -1,18 +1,17 @@ # Continuous integration (CI) triggers cause a pipeline to run whenever you push # an update to the specified branches or you push specified tags. -trigger: none - # batch: true - # branches: - # include: - # - dev - # paths: - # exclude: - # - '*.md' - # - '.github/' - # - 'pipelines/drupal-production.yml' - # - 'pipelines/drupal-staging.yml' - # - 'pipelines/drupal-test.yml' - # - 'compose*' +trigger: + batch: true + branches: + include: + - dev + paths: + exclude: + - '*.md' + - '.github/' + - 'pipelines/drupal-production.yml' + - 'pipelines/drupal-staging.yml' + - 'pipelines/drupal-test.yml' # Pull request (PR) triggers cause a pipeline to run whenever a pull request is # opened with one of the specified target branches, or when updates are made to diff --git a/pipelines/drupal-test.yml b/pipelines/drupal-test.yml index 36823a8f68..aecbb6489d 100644 --- a/pipelines/drupal-test.yml +++ b/pipelines/drupal-test.yml @@ -1,17 +1,17 @@ # Continuous integration (CI) triggers cause a pipeline to run whenever you push # an update to the specified branches or you push specified tags. -trigger: - batch: true - branches: - include: - - dev - paths: - exclude: - - '*.md' - - '.github/' - - 'pipelines/drupal-production.yml' - - 'pipelines/drupal-staging.yml' - - 'pipelines/drupal-dev.yml' +trigger: none + # batch: true + # branches: + # include: + # - dev + # paths: + # exclude: + # - '*.md' + # - '.github/' + # - 'pipelines/drupal-production.yml' + # - 'pipelines/drupal-staging.yml' + # - 'pipelines/drupal-dev.yml' # Pull request (PR) triggers cause a pipeline to run whenever a pull request is # opened with one of the specified target branches, or when updates are made to From 9d26396bb9d5bf71532d27e8d3a0b38ba50b6577 Mon Sep 17 00:00:00 2001 From: Janne Suominen Date: Thu, 5 Dec 2024 07:28:18 +0200 Subject: [PATCH 73/74] UHF-10711: Fixes per comments (#1598) --- .../en/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml | 2 +- .../sv/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml | 2 +- conf/cmi/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml | 3 --- 3 files changed, 2 insertions(+), 5 deletions(-) diff --git a/conf/cmi/language/en/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml b/conf/cmi/language/en/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml index 863c6245d2..ff758a416b 100644 --- a/conf/cmi/language/en/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml +++ b/conf/cmi/language/en/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml @@ -272,7 +272,7 @@ elements: | '#title': '4.2 Expenses' talous_menon_tyyppi: '#title': 'Type of expense' - '#help': '

Write down the type of expense in question. Expenses can be, for example, rents and personnel costs..

' + '#help': '

Write down the type of expense in question. Expenses can be, for example, rents and personnel costs.

' '#multiple__add_more_button_label': 'Add new expense' lisatiedot_ja_liitteet: '#title': '5. Additional information and appendices' diff --git a/conf/cmi/language/sv/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml b/conf/cmi/language/sv/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml index 3f0586b494..be67445b87 100644 --- a/conf/cmi/language/sv/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml +++ b/conf/cmi/language/sv/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml @@ -266,7 +266,7 @@ elements: | '#ownFunding__title': 'Egenfinansiering (€)' talous_tulon_tyyppi: '#title': 'Typ av inkomst ' - '#help': '

Skriv ner vilken typ av inkomst det gäller. Inkomster kan till exempel vara andra understöd och inträdes- eller
deltagaravgifter. Självfinansiering måste uppges som en inkomst även
om den självfinansierade delen finansieras med sökandes övrig  erksamhet.

' + '#help': '

Skriv ner vilken typ av inkomst det gäller. Inkomster kan till exempel vara andra understöd och inträdes- eller
deltagaravgifter. Självfinansiering måste uppges som en inkomst även
om den självfinansierade delen finansieras med sökandes övrig verksamhet.

' '#multiple__add_more_button_label': 'Lägg till en intäkt' menot_section: '#title': '4.2 Utgifter' diff --git a/conf/cmi/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml b/conf/cmi/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml index 19469c1d65..ca85e6f327 100644 --- a/conf/cmi/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml +++ b/conf/cmi/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml @@ -971,9 +971,6 @@ elements: |- visible: ':input[name="hankesuunnitelma_radios"]': value: '0' - required: - ':input[name="hankesuunnitelma_radios"]': - value: '0' hankkeen_valiarviointi_section: '#type': webform_section '#title': '3.5 2-vuotisten hankkeiden väliarviointi' From b508ee3ec09f7e20bd95f64276c106b696b0c0fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20Kalij=C3=A4rvi?= Date: Thu, 5 Dec 2024 07:29:06 +0200 Subject: [PATCH 74/74] UHF-10345: Uncommentend previously failing tests. (#1596) --- e2e/utils/data/application/application_data_48.ts | 2 +- e2e/utils/data/application/application_data_52.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/e2e/utils/data/application/application_data_48.ts b/e2e/utils/data/application/application_data_48.ts index 52ab034a8f..0cabf7efc1 100644 --- a/e2e/utils/data/application/application_data_48.ts +++ b/e2e/utils/data/application/application_data_48.ts @@ -1116,7 +1116,7 @@ const sendApplication: FormDataWithRemoveOptionalProps = { const registeredCommunityApplications_48 = { draft: baseForm_48, copy: createFormData(baseForm_48, copyForm), - // swap_fields: createFormData(baseForm_48, fieldSwapForm), + swap_fields: createFormData(baseForm_48, fieldSwapForm), missing_values: createFormData(baseForm_48, missingValues), wrong_email: createFormData(baseForm_48, wrongEmail), wrong_email_2: createFormData(baseForm_48, wrongEmail2), diff --git a/e2e/utils/data/application/application_data_52.ts b/e2e/utils/data/application/application_data_52.ts index 40690b0066..da9e3878df 100644 --- a/e2e/utils/data/application/application_data_52.ts +++ b/e2e/utils/data/application/application_data_52.ts @@ -1332,7 +1332,7 @@ const registeredCommunityApplications_52 = { draft: baseFormRegisteredCommunity_52, missing_values: createFormData(baseFormRegisteredCommunity_52, missingValues), wrong_values: createFormData(baseFormRegisteredCommunity_52, wrongValues), - // swap_fields: createFormData(baseFormRegisteredCommunity_52, fieldSwapForm), + swap_fields: createFormData(baseFormRegisteredCommunity_52, fieldSwapForm), success: createFormData(baseFormRegisteredCommunity_52, sendApplication), }