Commits: 3
Change the legal address in privacy policy
index a251b55..e9dfd58 100644
--- a/content/market-research/_index.md
+++ b/content/market-research/_index.md
@@ -46,7 +46,7 @@ Privacy Policy for Tad Market Research
= * Correct any inaccurate information.
= * Withdraw the data processing consent at any time.
=
- To exercise these rights, email us at <data@tad-lispy.com>
+ To exercise these rights, email us at <legal@tad-lispy.com>
=
=6. Data Security
=Shift the clients tiles initial position a bit
for more natural look
index 9066fdc..dd76de7 100644
--- a/sass/style.scss
+++ b/sass/style.scss
@@ -272,6 +272,7 @@ ul.client-logos {
= rem(var(--step-count), 1.0)
= * var(--step-length)
= * -1
+ - 5rem
= ));
= order: rem(
= calc(var(--tile-index) - var(--step-count) - var(--tiles-count)),Animate client quotes
index 485a34b..3201b16 100644
--- a/content/works/_index.md
+++ b/content/works/_index.md
@@ -24,6 +24,7 @@ I have over 15 years of experience in software development and training. Over th
=
=Here is what some of my clients have to say about me:
=
+{\% wrap_with(class="client-quotes") %}
=> I've been working with Tad on a range of software development and security trainings. The labs were creative and fun. I can definitely recommend him and I'll be happy to work with him again.
=>
=> <cite>Maaike van Putten, (Virtual) Trainer and developer</cite>
@@ -43,6 +44,7 @@ Here is what some of my clients have to say about me:
=> Tad understands technology well, listens carefully and communicates very clearly. Many times he helped us find pragmatic, simple and elegant solutions. We are glad to have him as a consultant.
=>
=> <cite>Neyts Zupan, Open Source geek & founder, Niteo</cite>
+{\% end %}
=
=Most of my work revolves around software development - custom work for clients, free software projects or training. Except for proprietary client projects, I publish most of it on [Codeberg](https://codeberg.org/tad-lispy), [GitLab](https://gitlab.com/dashboard/projects/member) or [GitHub](https://github.com/tad-lispy?tab=repositories). Below are selected examples of my work.
=index dd76de7..335ae7d 100644
--- a/sass/style.scss
+++ b/sass/style.scss
@@ -294,3 +294,76 @@ ul.client-logos {
= }
=
=}
+
+
+.client-quotes {
+ --quotes-count: 5;
+ --pace: 10s;
+
+ margin: 1rem auto;
+ font-size: .9rem;
+ display: flex;
+ overflow: hidden visible;
+ position: relative;
+ align-items: center;
+
+ @keyframes count-steps {
+ from {
+ --step-count: 0;
+ }
+ to {
+ --step-count: 5; // TODO: This must match --quotes-count, but using a variable here doesn't work. Why?
+ }
+ }
+
+ animation-name: count-steps;
+ animation-duration: calc(var(--pace) * var(--quotes-count));
+ animation-iteration-count: infinite;
+ animation-timing-function: steps(var(--quotes-count));
+
+ &> * {
+ // opacity: 0;
+
+ transform: translate(calc(
+ -100% * var(--step-count)
+ ));
+
+ @keyframes pulse {
+ 0% {
+ opacity: 0%;
+ }
+ 20% {
+ opacity: 100%;
+ }
+ 80% {
+ opacity: 100%;
+ }
+ 100% {
+ opacity: 0%;
+ }
+ }
+
+ animation-name: pulse;
+ animation-duration: var(--pace);
+ animation-iteration-count: infinite;
+ animation-timing-function: linear;
+
+ flex-shrink: 0;
+ width: 100%;
+ text-decoration: none;
+ transition: opacity 1s, margin-left 0s 1s;
+ display: block;
+
+ p {
+ font-size: 1.2rem;
+ font-style: italic;
+ line-height: 2;
+ }
+
+ cite {
+ font-style: initial;
+ font-weight: bold;
+ }
+ }
+}
+