<div class="Contact-modal" id="modal_form-footer" data-modal="true" data-modal-close="Close" data-modal-close-class="Contact-modal__close">
<div data-modal-document="true" class="Contact-modal__modal constrain pad-after-m">
<header class="Contact-modal__header">
<a href="/" class="Contact-modal__logo focus">
<svg role="img" aria-labelledby="clearleft-logo" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 154 54">
<title id="clearleft-logo">Clearleft</title>
<style>
.Logo-streak {
mask-repeat: no-repeat;
stroke-dasharray: 150% 150%;
stroke-dashoffset: 150%;
}
.animateLogo-streak {
animation: swipe 0.4s cubic-bezier(0.39, 0.575, 0.565, 1) 0.8s forwards;
}
@keyframes swipe {
from {
stroke-dashoffset: 150%;
}
to {
stroke-dashoffset: 0;
}
}
</style>
<path class="Logo-text" fill="currentColor" d="M152.5 27.5v5.4h-2.4c-5.5 0-8.6-3.3-8.6-9.3v-6.8h-7.4v16.1h-5.6V16.8h-3.1l-.1-4.6h3.1v-.6c0-6 3-9.3 8.6-9.3h2.4v5.4H137c-2 0-2.9 1.3-2.9 4v.6h7.4v-4l5.6-3.6v7.4h4v4.6h-4v6.8c0 2.7 1 4 2.9 4h2.5zM77 11.9h5.6v21H77v-2c-1.7 1.7-4 2.7-6.4 2.6-5.7 0-10.1-4.8-10.1-11s4.4-11 10.1-11c2.4-.1 4.7.8 6.4 2.5v-2.1zm0 10.5c0-3.5-2.4-6.1-5.6-6.1s-5.6 2.6-5.6 6.1 2.3 6.1 5.6 6.1S77 26 77 22.4zm12.9-8.7v-1.8h-5.4v21h5.6v-9.5c0-4.5.8-6.8 5-6.8h1.5v-5.4h-.2c-3 0-5.2.9-6.5 2.5zM98 32.8h5.6V2.4H98v30.4zM17 8.1c3.2 0 6.1 1.8 7.6 4.5l.1.2.2-.1 4.8-3.1.3-.1-.1-.2C27 5 22.2 2.4 17.1 2.4 8.6 2.3 1.6 9.1 1.5 17.5v.3c-.1 8.5 6.8 15.4 15.3 15.5h.3c5.1.1 9.9-2.5 12.8-6.7l.1-.2-5.2-3.4-.1.2c-1.6 2.7-4.5 4.4-7.6 4.5-5.2 0-9.2-4.3-9.2-9.8 0-4.8 3.4-9.8 9.1-9.8zm14.6 24.7h5.6V2.4h-5.6v30.4zm94-10.5c0 .6 0 1.1-.1 1.7v.5h-14.8c.5 2.5 2.8 4.3 5.4 4.1 2 0 3.9-.7 5.5-2l.4-.3 2.8 4-.3.3c-2.4 2-5.5 3.1-8.6 3-6.4 0-10.8-4.6-10.8-11.1s4.3-11.1 10.6-11.1c5.7-.2 9.8 4.4 9.9 10.9zm-5.7-2.2c-.6-2.5-2.2-3.9-4.5-3.9-2.4-.1-4.4 1.6-4.7 3.9h9.2zm-60.7 2.2c0 .6 0 1.1-.1 1.7v.5H44.3c.5 2.5 2.8 4.3 5.4 4.1 2 0 3.9-.7 5.5-2l.4-.3 2.8 4-.3.3c-2.4 2-5.5 3.1-8.6 3-6.4 0-10.8-4.6-10.8-11.1S43 11.2 49.2 11.2c5.9 0 10 4.6 10 11.1zm-5.6-2.2c-.6-2.5-2.2-3.9-4.5-3.9-2.4-.1-4.4 1.6-4.7 3.9h9.2z" />
<clippath id="contactMask">
<path d="M151.8 44c-.2-1-1.1-1.6-2-1.4h-.1c-1.1.4-2.2.4-3.3.2-1.4-.2-2.9-.3-4.3-.5-2.4-.3-4.8-.5-7.2-.7-2.6-.2-5.3-.3-7.9-.5-2.5-.2-4.9-.4-7.4-.5-5.2-.3-10.5-.5-15.7-.6-4.4-.2-19.6-.3-23.9-.3-3.1 0-6.1.1-9.2.2-4.1 0-18.9.3-23 .6-4.3.2-8.7.4-13 .7-4 .3-8 .5-11.9.7-.9 0-1.8.1-2.7.3-2.4 0-4.4.2-6.5.3-1.7.1-3.4.1-5 .4v0c-.7 0-1-.4-2.1-.3s-2.1.5-2.1 1.1c-.5.1 0 .4-.6.5v.5c.4.2.6.4 0 .7v.2c.3-.1.4 0 .6.1v.4c-.4.2-.2.4-.1.5s.5.4.4.7c-.1.5.1 1 .5 1.3v.2c.1.7 1.1 1.3 1.2 2 .1.5 1 1 2.3.9 1.1-.1 1.5-.5 2.5-.7.2 0 .8-.1 1-.1 4.2-.3 8.5-.6 12.7-1 1.2-.1 2.6-.1 3.7-.3 1.5-.3 3.1-.3 4.6-.5 2.9-.3 5.8-.5 8.6-.5 2.4 0 4.8-.3 7.2-.4 1.3-.1 2.7.1 4-.1.5-.1 1-.1 1.6-.1 1.4.1 13.7-.1 15.1-.1 2.8 0 5.6-.1 8.4-.2 3.3-.1 17.4-.2 20.7 0 1.1 0 2.3.2 3.4.2 3.1-.2 6.2.1 9.3.2 2.7.1 5.4.3 8.1.4s5.2.2 7.8.5c1 .1 2.1.2 3.1.3.8.1 1.4-.2 2.2-.1 2 .3 4.1.5 6.2.6 1.1 0 2.2.1 3.2.3 1.6.3 3.1.5 4.7.7l1 .4c.9.4 1.8.5 2.8.3.5-.3.8-1 .6-1.6v-.2c.1-.2.2-.3.1-.5.3-.1.3-.2.2-.4.2-.6.7-1.1.4-1.7-.1-.2-.4-.6.4-.8v-.5c-.4 0-.4-.2-.5-.3-.2-.5-.1-1-.1-1.5zM78.3 45.3h-.2.2" />
</clippath>
<path class="Logo-streak animateLogo-streak" clip-path="url(#contactMask)" fill-rule="evenodd" fill="none" stroke="#23D8A0" stroke-width="13" d="M-1.1 49.4s50.4-6.3 81.9-6 77.1 4.6 77.1 4.6" />
</svg> </a>
</header>
<div class="Contact-modal__inner pad-before-m">
<div class="Contact-modal__intro flow">
<h2 class="h h-3"></h2>
<div class="body flow">
<p></p>
</div>
<svg class="Contact-modal__arrow" width="112px" viewbox="0 0 122 76">
<clippath id="arrowClip1">
<path d="M110.26,43.62s-23.75-7.29-30.33-9.08A163.57,163.57,0,0,1,57.5,26.31c-15-6.85-29.58-14.51-44.43-21.67-1.15-.57-3.05-1.16-4.52.19s-.3,3.75.56,4.58c5.58,5.44,11,11.15,17.27,15.71,13.15,9.54,27.7,16.49,43,22.31h.21s5.63,3,21.4,6.47,16.5.54,20.06-1C113.93,49.12,114.18,45.88,110.26,43.62Z" />
</clippath>
<clippath id="arrowClip2">
<path d="M113.16,43.39c-10.5-5-17.7-13.78-26.2-21.06a30.51,30.51,0,0,0-5.28-3.83c-3.6-1.94-6.68,0-5.77,3.92a42.59,42.59,0,0,0,5.5,11.87c1.69,2.44,8,8.91,9.14,10.23s2.53,1.77,1.12,3.18-18.58,2-20.27,1.69c-.15,0-.63-.07-1.34-.13-2.2.09-4.39.19-6.58.35-4.55.36-7.31,3.1-7.1,7.18.08,3.67,2.87,6.21,7.26,6.44,17,.89,33.09-3.35,48.63-10.31C117,50.81,117.62,45.51,113.16,43.39Z" />
</clippath>
<path class="anim-arrow__path" pathlength="1" clip-path="url(#arrowClip1)" d="M5.2,2.66S31.57,24.48,61,35.88,113.5,50,113.5,50" fill="none" stroke="#23d8a0" stroke-linecap="round" stroke-miterlimit="10" stroke-width="17" />
<path class="anim-arrow__path" pathlength="1" clip-path="url(#arrowClip2)" d="M74.51,15.61S106.25,43,105.83,48.48s-34.14,9.79-52.16,9.08" fill="none" stroke="#23d8a0" stroke-linecap="round" stroke-miterlimit="10" stroke-width="21" />
</svg>
</div>
[object Object]
<button class="Button focus" type="submit"><span>Send</span></button>
</div>
</div>
</div>
<div class="Contact-modal" id="modal_form-footer" data-modal="true" data-modal-close="Close" data-modal-close-class="Contact-modal__close">
<div data-modal-document="true" class="Contact-modal__modal constrain pad-after-m">
<header class="Contact-modal__header">
<a href="/" class="Contact-modal__logo focus">
{% include '@logo' with {
mask : 'contactMask'
} %}
</a>
</header>
<div class="Contact-modal__inner pad-before-m">
<div class="Contact-modal__intro flow">
<h2 class="h h-3">{{ form.name }}</h2>
<div class="body flow">
<p>{{ form.description }}</p>
</div>
<svg class="Contact-modal__arrow" width="112px" viewbox="0 0 122 76">
<clippath id="arrowClip1">
<path d="M110.26,43.62s-23.75-7.29-30.33-9.08A163.57,163.57,0,0,1,57.5,26.31c-15-6.85-29.58-14.51-44.43-21.67-1.15-.57-3.05-1.16-4.52.19s-.3,3.75.56,4.58c5.58,5.44,11,11.15,17.27,15.71,13.15,9.54,27.7,16.49,43,22.31h.21s5.63,3,21.4,6.47,16.5.54,20.06-1C113.93,49.12,114.18,45.88,110.26,43.62Z"/>
</clippath>
<clippath id="arrowClip2">
<path d="M113.16,43.39c-10.5-5-17.7-13.78-26.2-21.06a30.51,30.51,0,0,0-5.28-3.83c-3.6-1.94-6.68,0-5.77,3.92a42.59,42.59,0,0,0,5.5,11.87c1.69,2.44,8,8.91,9.14,10.23s2.53,1.77,1.12,3.18-18.58,2-20.27,1.69c-.15,0-.63-.07-1.34-.13-2.2.09-4.39.19-6.58.35-4.55.36-7.31,3.1-7.1,7.18.08,3.67,2.87,6.21,7.26,6.44,17,.89,33.09-3.35,48.63-10.31C117,50.81,117.62,45.51,113.16,43.39Z"/>
</clippath>
<path class="anim-arrow__path" pathlength="1" clip-path="url(#arrowClip1)" d="M5.2,2.66S31.57,24.48,61,35.88,113.5,50,113.5,50" fill="none" stroke="#23d8a0" stroke-linecap="round" stroke-miterlimit="10" stroke-width="17"/>
<path class="anim-arrow__path" pathlength="1" clip-path="url(#arrowClip2)" d="M74.51,15.61S106.25,43,105.83,48.48s-34.14,9.79-52.16,9.08" fill="none" stroke="#23d8a0" stroke-linecap="round" stroke-miterlimit="10" stroke-width="21"/>
</svg>
</div>
{% set testTags = form.testTags is defined and form.testTags %}
{% if testTags %}
<form class="Contact-modal__form flow">
{% else %}
{{ form.openTag({
attributes: {
class: 'Contact-modal__form flow',
novalidate: true
}
}) }}
{% endif %}
{% if form.submittedSuccessfully %}
{% else %}
{% for field in form.fields %}
{% if field.handle == 'help' %}
{% include '@checkboxes' with {
title: field.label,
name: field.handle ~ '[]',
required: field.required,
checkboxes: [
{
label: 'User research and human insight',
id: 'user-research-and-human-insight',
},
{
label: 'Internal service design',
id: 'internal-service-design',
},
{
label: 'Product design and design systems',
id: 'product-design-and-design-systems',
},
]
} %}
{% elseif field.handle == 'budget' %}
{% include '@radio-buttons' with {
title: field.label,
name: field.handle,
required: field.required,
buttons: [
{
label: 'N/A',
id: 'na',
checked: true,
},
{
label: 'up to £50k',
id: '50k'
},
{
label: '£50 - £100k',
id: '100k'
},
{
label: '£100 - £250k',
id: '250k'
},
{
label: '£250k+',
id: 'plus'
},
]
} %}
{% elseif field.handle == 'message' %}
{% include '@textarea' with {
id : field.handle,
name: field.handle,
label: field.label,
required: field.required,
errors: field.errors,
value: field.value
} %}
{% elseif field.handle == 'email' %}
{% include '@text-input' with {
label: field.label,
name: field.handle,
id: field.handle,
required: field.required,
errors: field.errors,
type: 'email',
value: field.value
} %}
{% else %}
{% include '@text-input' with {
label: field.label,
name: field.handle,
id: field.handle,
required: field.required,
errors: field.errors,
type: 'text',
value: field.value
} %}
{% endif %}
{% endfor %}
{% include "@button" with {
text: "Send",
attributes: {
type: "submit",
}
} %}
{% endif %}
{% if testTags %}
</form>
{% else %}
{{ form.closeTag() }}
{% endif %}
</div>
</div>
</div>
/* No context defined. */
.Contact-modal {
background-color: var(--transparent);
&__modal {
position: relative;
}
/* green swipe block */
&:before {
position: fixed;
content: '';
top: 0;
right: 0;
left: 0;
bottom: 0;
background-color: var(--green);
width: 120%;
height: 100%;
transform: translateX(-120%);
transform-origin: right;
z-index: 2;
}
&__header {
/* default hide - show if JS is enabled & it is in a modal */
display: none;
padding-top: 2rem;
padding-bottom: 2rem;
}
&__close {
position: absolute;
top: 2rem;
right: 2rem;
font-size: var(--step--1);
font-weight: bold;
padding: 0.5rem;
padding-right: 1.7rem;
background-color: var(--white);
&:after {
position: absolute;
content: '';
width: 13px;
height: 100%;
top: 0;
right: 0.5rem;
background-repeat: no-repeat;
background-position: center;
background-image: url("data:image/svg+xml,%3Csvg width='12' height='12' viewBox='0 0 12 12' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M11 1L1 11' stroke='%2325333a' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M1 1L11 11' stroke='%2325333a' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
}
&:focus {
outline: 2px solid var(--orange);
outline-offset: 2px;
}
}
&__logo {
display: block;
width: var(--logo-width);
color: var(--dark);
}
&__intro {
display: flex;
flex-direction: column;
p {
padding-right: 7rem;
}
}
&__arrow {
transform: rotate(260deg) scale(-0.8, 0.8) translateX(-3rem);
margin-left: auto;
}
&__form {
--flow: 1.5rem;
margin-top: 1rem;
}
}
.has-js .Contact {
&__modal {
opacity: 0;
}
&:before {
transform: translateX(-120%);
}
}
.Contact[active-modal='true'] {
background-color: var(--white);
transition: background-color 0.1s 0.5s;
.Contact__modal {
transition: opacity 1.5s ease-out 0.4s;
opacity: 1;
}
&:before {
transition: transform 1.6s ease-out;
transform: translateX(120%);
}
.Contact__header {
display: block;
}
.animateLogo-streak {
animation-delay: 1.5s;
}
.anim-arrow__path {
stroke-dasharray: 1 1.5;
stroke-dashoffset: 1;
animation: draw 0.4s ease-out both;
animation-delay: 2.2s;
}
.anim-arrow__path:last-of-type {
animation-delay: 2.6s;
}
}
/* petit swipey on lil screens */
@media screen and (max-width: 1000px) {
.Contact[active-modal='true'] {
background-color: var(--white);
transition: background-color 0.1s 0.3s;
.Contact__modal {
transition-delay: 0.4s;
}
&:before {
transition-duration: 1s;
}
.animateLogo-streak {
animation-delay: 1.2s;
}
.anim-arrow__path {
animation-delay: 1.5s;
}
.anim-arrow__path:last-of-type {
animation-delay: 1.8s;
}
}
}
/* no swipey on big screens - such swipey - much headache */
@media screen and (min-width: 125rem) {
.Contact[active-modal='true'] {
background-color: var(--white);
transition-duration: 0.001s;
transition-delay: 0.001s;
.Contact__modal {
transition-duration: 0.001s;
transition-delay: 0.001s;
}
&:before {
transition-duration: 0.001s;
}
}
}
/* media */
@media screen and (min-width: 62.5rem) {
.Contact {
&__arrow {
display: block;
transform: rotate(0deg) scale(1) translate(0);
margin-left: auto;
margin-top: 3rem;
margin-right: 7rem;
}
&__inner {
display: flex;
}
&__form {
width: 80%;
}
&__intro {
margin-right: 3rem;
}
}
}
/* keyframes */
@keyframes draw {
from {
stroke-dashoffset: 1;
}
to {
stroke-dashoffset: 0;
}
}
No notes defined.