diff --git a/src/lib/components/ContactCanvas.svelte b/src/lib/components/ContactCanvas.svelte new file mode 100644 index 0000000..54acd9b --- /dev/null +++ b/src/lib/components/ContactCanvas.svelte @@ -0,0 +1,226 @@ + + + + + \ No newline at end of file diff --git a/src/lib/components/Faq.svelte b/src/lib/components/Faq.svelte index 0f0b71f..89bcaf2 100644 --- a/src/lib/components/Faq.svelte +++ b/src/lib/components/Faq.svelte @@ -39,10 +39,12 @@ '--height': summaryHeight, duration: .4, ease: 'power4.out', overwrite: true, onComplete: () => { details.toggleAttribute('open') + details.classList.remove('is-open'); } }) } else { details.toggleAttribute('open'); + details.classList.add('is-open'); contentHeight = (details?.querySelector('.faq-content') as HTMLElement).offsetHeight; let fullHeight = contentHeight + summaryHeight; gsap.to( details, { @@ -61,7 +63,7 @@
- {summary} + {@html summary}
@@ -82,11 +84,15 @@ display: block; cursor: url('/pointer.svg'), auto; position: relative; - z-index: 2; + z-index: 1; line-height: 1.2; font-size: 1em; padding: 0.5em 0 0.5em 1.5em; + &::-webkit-details-marker { + display:none; + } + &:before, &:after { content: ''; position: absolute; @@ -95,16 +101,23 @@ width: 17px; height: 2px; background-color: var(--color-text); - transform-origin: center; - transition: transform .2s ease-in-out; + transform-origin: 50% 50%; } &:before { transform: rotate(90deg); + transition: all .2s ease-in-out; } - } - details[open] summary { - &::before { + } + :global(summary em) { + font-weight: 800; + color: var(--color-highlight); + } + // details[open] summary, + :global(details.is-open summary) { + + &:before { + transition: all .2s ease-in-out; transform: rotate(0deg); } } diff --git a/src/lib/components/HomeCanvas.svelte b/src/lib/components/HomeCanvas.svelte index 345bb58..d8ea244 100644 --- a/src/lib/components/HomeCanvas.svelte +++ b/src/lib/components/HomeCanvas.svelte @@ -64,8 +64,8 @@ onMount(()=>{ let center = [0.5, 0.5]; let bulgefilter = new BulgePinchFilter(); - bulgefilter.radius = xFrac(0.5); - bulgefilter.strength = is_fine ? 0.5 : 0.4; + bulgefilter.radius = is_landscape ? xFrac(0.5) : xFrac(0.55); + bulgefilter.strength = 0.5; bulgefilter.center = center; bulgefilter.resolution = 2; @@ -75,14 +75,19 @@ onMount(()=>{ let introTl = gsap.timeline(); introTl.to(bulgefilter, { - strength: 0.75, - duration: .75, - ease: 'power4.out', + strength: -0.25, + duration: .5, + ease: 'power4.inOut', }, 1.5) + // introTl.to(bulgefilter, { + // strength: 0.75, + // duration: .75, + // ease: 'power4.inOut', + // }) introTl.to(bulgefilter, { - strength: is_fine ? 0.5 : 0.4, + strength: 0.5, duration: 1.25, - ease: 'elastic.out(1.5, .2)', + ease: 'elastic.out(1.25, .2)', }) /*---------------------------------- @@ -198,10 +203,11 @@ onMount(()=>{ app.ticker.add((delta) => { elapsed += delta; - if (is_coarse) { - bulgefilter.center = [(tween.x + Math.sin(elapsed/200)/20 ),(tween.y + Math.cos(elapsed/200)/20 )]; + if (is_portrait) { + bulgefilter.center = [(0.5 + Math.sin(elapsed/200)/20 ),(0.45 + Math.cos(elapsed/200)/20 )]; + // bulgefilter.center = [0.5, 0.45]; } else { - bulgefilter.center = [tween.x, tween.y]; + bulgefilter.center = [tween.x, 0.5]; } updateImgs(); updateText(); diff --git a/src/lib/components/HomeIlluShapes.svelte b/src/lib/components/HomeIlluShapes.svelte index 8a807bf..b479ec1 100644 --- a/src/lib/components/HomeIlluShapes.svelte +++ b/src/lib/components/HomeIlluShapes.svelte @@ -36,16 +36,14 @@ const randomShape = shapes[Math.floor(Math.random() * shapes.length)]; let rowindex = (index: number) => { - // based on the index of an element within an array of 5x3 grid, return the columns index, so for example 0, 5 and 10 would return 0, index 1, 6 and 11 would return 1, etc return index % 5; }; - gsap.to(shape, { duration: 1, rotationZ: "+=" + generateAngle(), morphSVG: randomShape, ease: 'power4.out', - delay: rowindex(index) * 0.1, + delay: rowindex(index) * 0.05, onComplete: () => { setTimeout( () => randomMorph(shape), 2000 ) } }); } @@ -79,10 +77,10 @@ .home-illu-shapes { display: flex; flex-wrap: wrap; - gap: 5px; + gap: clamp(1px, 0.3vw, 5px); } :global(.home-illu-shapes > *) { - flex-basis: calc(20% - 5px); + flex-basis: calc(20% - clamp(1px, 0.3vw, 5px)); opacity: 0; } \ No newline at end of file diff --git a/src/lib/styles/global.scss b/src/lib/styles/global.scss index eb42bae..dde6ba1 100644 --- a/src/lib/styles/global.scss +++ b/src/lib/styles/global.scss @@ -80,8 +80,9 @@ a { .button { font-weight: 900; font-style: italic; + font-family: stratos, sans-serif; display: inline-block; - margin: 1em 0.125em; + margin: 1em 0; padding: .75em; text-decoration: none; box-sizing: border-box; @@ -91,9 +92,6 @@ a { z-index: 2; transition: all .3s cubic-bezier(0.175, 0.885, 0.32, 1.275); - &:hover { - font-size: clamp(21px, 1.7vw, 1.7vw); - } &:before { content: ''; display: block; @@ -109,9 +107,9 @@ a { transition: all .3s cubic-bezier(0.175, 0.885, 0.32, 1.275); } &:hover:before { - width: 100%; + width: calc(100% + 0.25em); height: calc(100% + 10px); - left: 0; + left: -0.125em; bottom: -5px; transition: all .3s cubic-bezier(0.175, 0.885, 0.32, 1.275); } diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index 841e9a6..6d06086 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -63,6 +63,7 @@ }) canvasElems = Array.from(document.querySelectorAll('.lineChildren, .wordChildren')); imgElems = Array.from(document.querySelectorAll('img')); + return () => { gsap.killTweensOf(canvasElems); ScrollTrigger.getAll().forEach( instance => instance.kill() ); @@ -75,14 +76,14 @@ {/if}
-

Hallo! I'm Simon.
I forge websites
that stand out with great beauty.

+

Hallo! I'm Simon. I forge websites that stand out with exemplary beauty.

-

Creative Development

-

I specialise in fashioning exquisitly tailored websites and webapps for the discerning enterprise executive.

+

Creative Development

+

I fashion exquisitly tailored web experiences for discerning enterprises and their audiences.

My Services Hire Simon @@ -93,15 +94,15 @@

Visual Design

-

With years in the craft, I've mastered the art of designing websites, user interfaces, illustrations, house styles, and everything betwixt.

+

I'm also a seasoned designer, sculpting communication that's wickedly nice, full of jaw-dropping surprises, and utterly delightful.

-

I create products that help great companies reach their audiences.

+

I work as a free agent. Both companies and noble causes can enlist my services for a reasonable wage.

@@ -165,12 +166,29 @@ .design-illu { position:relative; left: 0; - width: 40%; + width: 60%; margin: 0 auto; text-align: center; display: block; margin-bottom: -1em; z-index: -2; + + @media screen and (min-width: 768px) { + width: 40%; + } + } + .more { + @media screen and (min-width: 768px) { + max-width: 95vw; + } + } + .more h2 { + margin-top: -2em; + margin-bottom: 1em; + @media screen and (min-width: 768px) { + margin-bottom: 0.5em; + margin-top: 0; + } } h1, h2 { line-height: 1.1; @@ -183,19 +201,14 @@ user-select: none; } h1 { - line-height: 1; - font-size: 11vw; + line-height: .9; + font-size: 13.25vw; margin-top: -.5em; - letter-spacing: -0.05em; + letter-spacing: -0.02em; opacity: 0; @media screen and (min-width: 768px) { font-size: 9vw; - line-height: .9; - } - & em { - color: var(--color-highlight); - font-style: normal; } } h2 { @@ -203,11 +216,6 @@ letter-spacing: -0.033em; margin-bottom: 0; line-height: .9; - - & em { - color: var(--color-highlight); - font-style: normal; - } } .toCanvas { visibility: hidden; diff --git a/src/routes/contact/+page.svelte b/src/routes/contact/+page.svelte new file mode 100644 index 0000000..2a381a6 --- /dev/null +++ b/src/routes/contact/+page.svelte @@ -0,0 +1,214 @@ + + +
+
+
+

Don't be a stranger. Let's get acquainted.

+
+

You can fill in the form below or:

+
+ + +
+
+

How can I assist in your noble cause?

+