/* button styles: wave, wipe, throb, spin */

* {
  /* hue - also controls the button text */
  --h: 150;
  --s: 80%;
  --l: 22%;

  /* button text color */
  --canvas: var(--h);
  --bg: hsl(var(--canvas), 15%, 100%);

  /* --light: hsl(var(--h), var(--s), 95%);
  --dark: hsl(var(--h), var(--s), 20%); */
  --tint: hsl(41, 80%, 41%);
  --tint2: hsl(36, 78%, 60%);

  /* controls the color of the button */
  --shimmer-hue-1: 385deg;
  --shimmer-sat-1: 95%;
  --shimmer-lit-1: 51%;
  --shimmer-hue-2: 380deg;
  --shimmer-sat-2: 100%;
  --shimmer-lit-2: 67%;
  --shimmer-hue-3: 381deg;
  --shimmer-sat-3: 86%;
  --shimmer-lit-3: 54%;

  /* glow and shadow of button */
  --glow-hue: 222deg;
  --shadow-hue: 180deg;
  --spring-easing: linear(
    0,
    0.002,
    0.01 0.9%,
    0.038 1.8%,
    0.156,
    0.312 5.8%,
    0.789 11.1%,
    1.015 14.2%,
    1.096,
    1.157,
    1.199,
    1.224 20.3%,
    1.231,
    1.231,
    1.226,
    1.214 24.6%,
    1.176 26.9%,
    1.057 32.6%,
    1.007 35.5%,
    0.984,
    0.968,
    0.956,
    0.949 42%,
    0.946 44.1%,
    0.95 46.5%,
    0.998 57.2%,
    1.007,
    1.011 63.3%,
    1.012 68.3%,
    0.998 84%,
    1
  );
  --spring-duration: 1.33s;
}

@property --mask {
  syntax: "<angle>";
  inherits: false;
  initial-value: 33deg;
}

@keyframes spin {
  0% {
    --mask: 0deg;
  }
  100% {
    --mask: 360deg;
  }
}

@keyframes pulse {
  0%,
  90%,
  100% {
    opacity: 0;
  }
  20% {
    opacity: 1;
  }
}

@keyframes wipe {
  0% {
    mask-position: 200% center;
  }
  100% {
    mask-position: 0% center;
  }
}

@keyframes shine {
  0% {
    opacity: 0;
  }
  15% {
    opacity: 1;
  }
  55% {
    opacity: 1;
  }
  100% {
    opacity: 0;
  }
}

@keyframes text {
  0% {
    background-position: 100% center;
  }
  100% {
    background-position: -100% center;
  }
}
/* box shadow for dark mode only */
button {
  color: var(--bg);
  font-weight: 600;
  font-size: 1rem;
  background-image: linear-gradient(
    315deg,
    hsl(var(--shimmer-hue-1), var(--shimmer-sat-1), var(--shimmer-lit-1)) 0%,
    hsl(var(--shimmer-hue-2), var(--shimmer-sat-2), var(--shimmer-lit-2)) 47%,
    hsl(var(--shimmer-hue-3), var(--shimmer-sat-3), var(--shimmer-lit-3)) 100%
  );
  padding: 0.8em 1.4em;
  position: relative;
  isolation: isolate;
  /* box-shadow: 0 2px 3px 1px hsl(var(--glow-hue) 50% 20% / 50%); */
  border: none;
  outline: none;
  border-radius: 0.66em;
  scale: 1;
  transition: all var(--spring-duration) var(--spring-easing);
  text-transform: capitalize;
  accent-color: var(--tint2);
  cursor: pointer;
}

.secondary {
  background-image: none;
  background-color: unset;
  border: 1px solid orange;
  color: light-dark(var(--primary-color-1), var(--primary-color-2));

  .text {
    color: light-dark(var(--primary-color-1), var(--primary-color-2));
    /* background-clip:unset; */
    background-color:unset;
  }
}

.shimmer {
  position: absolute;
  inset: -40px;
  border-radius: inherit;
  mix-blend-mode: color-dodge;
  mix-blend-mode: plus-lighter;
  pointer-events: none;
}

.shimmer::before,
.shimmer::after {
  transition: all 0.5s ease;
  opacity: 0;
  content: "";
  border-radius: inherit;
  position: absolute;
  inset: 40px;
}

.shimmer::before {
  box-shadow: 0 0 0 1px hsl(var(--shimmer-hue-1) 70% 95%),
    0 0 3px 1px hsl(var(--shimmer-hue-1) 100% 80%),
    0 0 20px 1px hsl(var(--shimmer-hue-1) 100% 70%);
  z-index: -1;
}

.shimmer::after {
  box-shadow: inset 0 0 0 1px hsl(var(--shimmer-hue-1) 70% 25%),
    inset 0 0 3px 1px hsl(var(--shimmer-hue-1) 100% 30%),
    inset 0 0 10px 1px hsl(var(--shimmer-hue-1) 100% 20%);
  z-index: 2;
}

button[disabled] {
  background: rgb(76 76 92);
  background-image: none;
}

button:hover:not(:active):not([disabled]) {
  scale: 1.05;
  transition-duration: calc(var(--spring-duration) * 0.5);
  background-size: 110%;
  opacity: 1;
}

button:active:not([disabled]) {
  scale: 1.05;
  transition-duration: calc(var(--spring-duration) * 0.5);
}

button:focus .shimmer,
button:active .shimmer {
  animation-play-state: paused !important;
  mask-image: none !important;
}

button:hover:not([disabled]),
button:hover:not([disabled]) .shimmer::before,
button:hover:not([disabled]) .shimmer::after {
  opacity: 1;
}

button .text {
  color: transparent;
  background-clip: text;
  background-color: var(--bg);
  background-image: linear-gradient(
    120deg,
    transparent,
    hsla(var(--shimmer-hue-1), 100%, 80%, 0.66) 40%,
    hsla(var(--shimmer-hue-2), 100%, 90%, 0.9) 50%,
    transparent 52%
  );
  background-repeat: no-repeat;
  background-size: 300% 300%;
  background-position: center 200%;
}

button:not([disabled]):hover .text {
  animation: text 0.66s ease-in-out 1;
}

button:not([disabled]) .shimmer::before,
button:not([disabled]) .shimmer::after {
  opacity: 1;
}

button:not([disabled]) .shimmer {
  mask-image: conic-gradient(
    from var(--mask, 0deg),
    transparent 0%,
    transparent 10%,
    black 36%,
    black 45%,
    transparent 50%,
    transparent 60%,
    black 85%,
    black 95%,
    transparent 100%
  );
  mask-size: cover;
  animation: spin 3s linear infinite both -0.5s;
}

button:not([disabled])[data-effect="wipe"] .shimmer {
  mask-image: linear-gradient(
    90deg,
    transparent 20%,
    black 88%,
    transparent 90%
  );
  mask-size: 200% 200%;
  mask-position: center;
  animation: wipe 1.5s linear infinite both -0.5s;
}

button:not([disabled])[data-effect="wave"] .shimmer {
  mask-image: linear-gradient(
    90deg,
    transparent 15%,
    black 45%,
    black 55%,
    transparent 85%
  );
  mask-size: 200% 200%;
  mask-position: center;
  animation: wipe 3s linear infinite both -0.5s;
}

button:not([disabled])[data-effect="throb"] .shimmer {
  mask-image: none;
  animation: pulse 3s ease infinite both -0.5s;
}

button:not([disabled])[data-effect="none"] .shimmer {
  mask-image: none;
  &::before,
  &::after {
    opacity: 0;
  }
}

button:focus {
  transform: scale(105%);
}

button:focus-visible {
  transform: scale(105%);
}