<span class="supt-button -icon ">
<button class="supt-button__link">
<span class="supt-button__icon">
<svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5">
<path d="M14 12V2.31766C14 2.04152 13.7761 1.81766 13.5 1.81766H3.81766" stroke-linecap="round" vector-effect="non-scaling-stroke" />
<path d="M2 14L13 3" stroke-linecap="round" vector-effect="non-scaling-stroke" />
</svg>
</span>
</button>
<span class="supt-button__wrapper">
<span class="supt-button__inner">
<span class="supt-button__title -clone" aria-hidden="true">
</span>
<span class="supt-button__mask">
<span class="supt-button__mask__inner"></span>
</span>
</span>
</span>
</span>
No notes defined.
{% set tag = href ? 'a' : 'button' %}
<span class="supt-button {{ modifiers|modifiersAttr }} {{ class|default('') }}">
<{{tag}} class="supt-button__link" {% for name, value in attributes %} {{ name }}="{{ value }}" {% endfor %} {{ href ? 'href=' ~ href : '' }}>
{% if icon %}
<span class="supt-button__icon">
{% include "02-icons/" ~ icon ~ "-icon.twig" %}
</span>
{% else %}
<span
class="supt-button__title">
{# <span class="supt-button__title__text"> #}
{{ title }}
{# </span>
<span aria-hidden="true" class="supt-button__title__clone">
{{ title }}
</span> #}
</span>
{% endif %}
</{{tag}}>
<span class="supt-button__wrapper">
<span class="supt-button__inner">
<span class="supt-button__title -clone" aria-hidden="true">
{{ title }}
</span>
<span class="supt-button__mask">
<span class="supt-button__mask__inner"></span>
</span>
</span>
</span>
</span>
{
"icon": "external-link",
"title": "",
"modifiers": [
"icon"
]
}
@property --supt-button-mask-gradient-value {
syntax: '<percentage>';
inherits: false;
initial-value: 20%;
}
.supt-button {
display: block;
position: relative;
width: fit-content;
&__wrapper {
display: block;
border-radius: 9999px;
padding: 10px 8px 8px 10px;
background: $color-grey-background;
box-shadow:
8px 8px 16px 0px $color-grey-1,
-8px -8px 16px 0px $color-white;
position: relative;
z-index: 0;
}
&__link {
@extend %reset-button;
position: absolute;
inset: 0;
z-index: 1;
display: flex;
align-items: center;
justify-content: center;
}
&__inner {
display: flex;
align-items: center;
justify-content: center;
position: relative;
padding: $spacing-2-5 $spacing-4;
border-radius: 9999px;
box-shadow:
-1px -1px 0px 0px $color-white inset,
-2px -2px 2px 0px $color-grey-2 inset,
-1px -1px 0px 0px $color-white,
-2px -2px 2px 0px $color-grey-2;
@media (min-width: $breakpoint-md) {
padding: $spacing-3 18px;
}
}
&__mask {
--supt-button-mask-color: $color-main;
position: absolute;
inset: 0;
border-radius: 9999px;
overflow: hidden;
top: -1.5px;
left: -1.5px;
z-index: 0;
opacity: 0;
transition: opacity $transition-fast;
/* Safari only fix */
@supports (hanging-punctuation: first) and (font: -apple-system-body) and
(-webkit-appearance: none) {
bottom: 0.5px;
}
/* Non-retina screens: use 1px border */
@media (max-resolution: 1dppx) {
top: -1px;
left: -1px;
}
&::before,
&::after {
content: '';
position: absolute;
background: radial-gradient(
var(--supt-button-mask-color) var(--supt-button-mask-gradient-value, 20%),
transparent
);
width: 100%;
height: 100%;
top: 50%;
animation-duration: 0.75s;
animation-timing-function: linear;
animation-fill-mode: forwards;
}
&::before {
left: 0;
translate: -50% -50%;
transform-origin: 100% 50%;
}
&::after {
right: 0;
translate: 50% -50%;
transform-origin: 0% 50%;
}
&__inner {
position: absolute;
inset: 1.5px;
background-color: $color-grey-background;
border-radius: 9999px;
z-index: 1;
/* Non-retina screens: use 1px border */
@media (max-resolution: 1dppx) {
inset: 1px;
}
}
}
&__title,
&__icon {
display: block;
color: $color-main;
z-index: 1;
}
&__title {
@extend %t-body-sm;
font-weight: 500;
/* position: relative;
overflow: hidden; */
transition: color $transition-fast;
/* &__text,
&__clone {
display: block;
transition: transform $transition-fast ease-in-out;
}
&__text {
transition-timing-function: ease-out;
}
&__clone {
position: absolute;
inset: 0;
transform: translateY(100%);
transition-timing-function: ease-in;
} */
&.-clone {
opacity: 0;
visibility: hidden;
}
}
&__icon {
padding: 0 2px 2px 0;
svg {
display: block;
width: 10px;
height: auto;
}
}
&:hover,
&:focus-within {
.supt-button__mask {
opacity: 1;
&::before,
&::after {
animation-name: mask-animation;
}
/* &::before {
animation-name: mask-before;
}
&::after {
animation-name: mask-after;
} */
}
/* .supt-button__title {
&__text {
transform: translateY(-100%);
transition-timing-function: ease-in;
}
&__clone {
transform: translateY(0);
transition-timing-function: ease-out;
}
} */
}
&:focus-within {
.supt-button__mask {
--supt-button-mask-color: $color-medium;
}
.supt-button__title,
.supt-button__icon {
color: $color-medium;
}
}
/* Red variant */
&.-dark {
.supt-button__wrapper {
background-color: $color-medium;
box-shadow:
8px 8px 16px 0px rgb(102 0 14 / 60%),
-8px -8px 16px 0px rgb(233 53 89 / 40%);
}
.supt-button__inner {
box-shadow:
-1px -1px 0px 0px #eb2f54 inset,
-2px -2px 2px 0px rgb(63 0 11 / 80%) inset,
-1px -1px 0px 0px #eb2f54,
-2px -2px 2px 0px rgb(102 0 14 / 80%);
}
.supt-button__mask {
--supt-button-mask-color: $color-white;
transition: box-shadow $transition-fast;
&__inner {
background-color: $color-medium;
transition: box-shadow $transition-fast;
}
}
.supt-button__title,
.supt-button__icon {
color: $color-white;
}
&:hover,
&:focus-within {
.supt-button__mask {
box-shadow: 0 0 6px 2px $color-main;
transition-delay: 0.47s;
&__inner {
box-shadow: inset 0 0 6px 2px $color-main;
transition-delay: 0.47s;
}
}
}
&:focus-within {
.supt-button__mask {
&__inner {
inset: 2px;
}
}
}
}
/* Icon variant */
&.-icon {
.supt-button__inner {
width: 40px;
height: 40px;
padding: 0;
@media (min-width: $breakpoint-md) {
width: 44px;
height: 44px;
}
}
&:hover,
&:focus-within {
.supt-button__mask {
&::before,
&::after {
animation-name: mask-animation-icon;
}
}
}
}
}
@keyframes mask-animation {
0% {
rotate: 0deg;
scale: 1 0;
--supt-button-mask-gradient-value: 20%;
}
70% {
scale: 1 1;
--supt-button-mask-gradient-value: 40%;
}
100% {
rotate: 250deg;
scale: 1 7;
--supt-button-mask-gradient-value: 100%;
}
}
/* Animation for icon variant */
@keyframes mask-animation-icon {
0% {
rotate: 0deg;
scale: 1 0;
--supt-button-mask-gradient-value: 20%;
}
70% {
scale: 1 1;
--supt-button-mask-gradient-value: 40%;
}
100% {
rotate: 270deg;
scale: 1 2;
--supt-button-mask-gradient-value: 100%;
}
}