@import url('https://fonts.googleapis.com/css2?family=Redacted+Script:wght@300;400;700&display=swap');
@import url('https://fonts.googleapis.com/css2?family=Cherry+Bomb+One&family=Indie+Flower&display=swap');
@import url('https://fonts.googleapis.com/css2?family=Hachi+Maru+Pop&display=swap');
:root {
  interpolate-size: allow-keywords;

  --bg-pink: rgb(252, 193, 225);
  --bg-blue: rgb(140, 189, 218);
  --bg-lightblue: rgb(184, 208, 221);
  --bg-yellow: rgb(224, 247, 23);
  --accent-pink: rgb(250, 58, 116);
  --outline: rgb(197, 58, 125);
  --white: white;

  --twilight: rgb(21, 10, 32, 0.7);

  /*header and footer colors*/
  --clr-text: black;
  --clr-outline: var(--bg-pink);
  --clr-outline-accent: var(--bg-yellow);

  --font-squiggle: 'Redacted Script', fantasy;
  --font-handwriting: 'Indie Flower', cursive;
  --font-pumpkin: 'Cherry Bomb One', system-ui;
  --font-japanese: 'Hachi Maru Pop', system-ui;
}

/*My styles*/
* {
  scrollbar-color: black var(--bg-blue);
}

body {
  background-image:
    url(/assets/svgs/doodle-bg.svg),
    repeating-linear-gradient(
      0deg,
      transparent,
      transparent 30px,
      var(--bg-lightblue) 30px,
      var(--bg-lightblue) 32px
    );

  background-size: 800px;

  color: black;
  font-family: var(--font-handwriting);
  margin-block: 0;
}

.body-wrapper {
  max-width: 800px;
  height: 100%;
  margin-inline: auto;
  padding-inline: 1rem;
}

.space {
  margin-top: 2rem;
}

.kanji-title {
  font-family: var(--font-pumpkin);
  line-height: 0.8;
  width: 40cqi;
  color: var(--clr-text);
  font-size: clamp(2rem, 7cqi + 1rem, 5rem);
  text-shadow:
    0.01em 0.01em 0 var(--bg-yellow),
    0.04em 0.04em 0 var(--bg-yellow),
    -0.01em -0.01em 0 var(--bg-pink),
    -0.04em -0.04em 0 var(--bg-pink);
  text-transform: uppercase;
  paint-order: stroke;
  margin-top: 2rem;
  margin-bottom: 3rem;
  -ms-hyphens: auto;
  -moz-hyphens: auto;
  -webkit-hyphens: auto;
  hyphens: manual;
}

.heading {
  container-type: inline-size;
}

.ed-whistle {
  float: right;
  shape-outside: circle();
  width: 40cqw;
  margin: 1rem;
  margin-top: 2rem;
  rotate: 10deg;
  filter: drop-shadow(0.25em 0.25em 0px var(--bg-blue));
}

main {
  color: var(--clr-text);
  font-size: clamp(1rem, 1.25vw + 1rem, 1.5rem);
  font-weight: 800;
  line-height: 1;
  text-shadow:
    1px 1px 0px var(--bg-blue),
    2px 2px 0px var(--bg-blue);
}

main a {
  color: inherit;
  font-weight: 800;
  text-decoration-style: wavy;
}

main a:hover,
main a:focus-visible {
  color: var(--accent-pink);
}

main ul {
  list-style: none;
  margin-top: 2rem;
  display: flex;
  flex-wrap: wrap;
  justify-content: space-evenly;
  gap: 1rem;
}

/*forces open detail element to be first in the list if opened*/
main li:has(details[open]) {
  order: -1;
}

/*close animation doesn't work*/
details {
  & .kanji-facts {
    animation: vanish 1000ms linear forwards;
    line-height: 1.5;
  }
  & summary {
    list-style: none;
  }

  & summary::marker {
    content: '';
  }
}

details[open] {
  & .kanji-facts {
    animation: appear 1800ms linear forwards;
    margin-bottom: 2rem;
  }
  & .kanji-btn {
    display: block;
    width: fit-content;
    font-size: 4rem;
    text-shadow:
      0.02em 0.02em 0 var(--bg-yellow),
      0.04em 0.04em 0 var(--bg-yellow),
      -0.02em -0.02em 0 var(--bg-pink),
      -0.04em -0.04em 0 var(--bg-pink);
    line-height: 0.8;
    flex-grow: none;
    margin-inline: auto;
    margin-bottom: 1.5rem;
  }
}

.japanese {
  font-family: var(--font-japanese);
}

.kanji-btn {
  font-family: var(--font-japanese);
  font-size: 2rem;
  text-align: center;
  text-shadow:
    1px 1px 0px var(--bg-blue),
    2px 2px 0px var(--bg-blue);
  box-shadow:
    1px 1px 0px var(--bg-blue),
    2px 2px 0px var(--bg-blue);
  border-radius: 5px;
  border: 2px solid black;
  background: transparent;
  margin-block: 1rem;
  padding-block: 0.4em;
  padding-inline: 0.8em;

  & span {
    font-size: 2rem;
    font-family: var(--font-handwriting);
  }

  &:hover,
  &:focus-visible {
    border-color: var(--accent-pink);
    color: var(--accent-pink);
  }

  &:active {
    box-shadow:
      1px 1px 0px var(--bg-blue),
      2px 2px 0px var(--bg-blue),
      3px 3px 0px var(--bg-blue),
      4px 4px 0px var(--bg-blue);
  }
}

.kanji {
  font-family: var(--font-japanese);
  font-size: clamp(3rem, 20cqi + 1rem, 150px);
  text-align: center;
  margin-bottom: 2rem;
  text-shadow:
    0.01em 0.01em 0 var(--bg-yellow),
    0.02em 0.02em 0 var(--bg-yellow),
    -0.01em -0.01em 0 var(--bg-pink),
    -0.02em -0.02em 0 var(--bg-pink);
}

/* kanji facts animations*/

@keyframes appear {
  0% {
    opacity: 0;
    color: transparent;
  }

  40% {
    color: white;
    opacity: 1;
  }

  100% {
    color: black;
  }
}

@keyframes vanish {
  from {
    display: block;
    opacity: 1;
  }
  to {
    display: none;
    opacity: 0;
  }
}

.appear {
  display: block;
  opacity: 1;
  animation: appear 1800ms linear forwards;
}

.vanish {
  animation: vanish 1000ms ease-in forwards;
  display: none;
}

.kanji-wrapper {
  background: rgb(0, 0, 0, 0);

  position: fixed;
  z-index: 1000;
  top: 0;
  height: 100vh;
  width: 100vw;
  font-size: 1.125rem;
  overflow: hidden;
  font-family: var(--font-japanese);
  pointer-events: none;
  user-select: none;

  &[data-effect='rain'] {
    z-index: -1;
  }

  &[data-effect='twilight'] {
    z-index: -1;
    background-color: var(--twilight);
    animation: sunset 2500ms linear;
  }
}

/* IT'S SNOWING!!!!! */
@keyframes fall {
  to {
    transform: translateX(-50%) translateY(100vh);
  }
}

.snow-position {
  position: absolute;
  top: 0;
}

.snow {
  user-select: none;
  transform: translateX(-50%) translateY(-200%);
  animation: fall infinite forwards linear;
  color: var(--bg-blue);
  text-shadow: 0em 0em 1em rgb(0, 160, 253);
}

/* IT'S RAINING!!!!! */

/*rain drop falls further the larger the font size is*/
@keyframes rain {
  0% {
    transform: translateY(-150%);
  }

  70% {
    transform: translateY(calc(var(--kanji-font-size) * 28));
  }

  100% {
    transform: translateY(calc(var(--kanji-font-size) * 28));
  }
}

/*smooshes the kanji as hits the ground*/
@keyframes sploosh {
  0% {
    transform: translate(-50%, -90%) scale(1, 1);
  }
  70% {
    transform: translate(-50%, -90%) scale(1, 1.5);
    opacity: 1;
  }
  78% {
    transform: translate(-50%, -90%) scale(3, 0);
  }
  80% {
    opacity: 0;
  }

  100% {
    transform: translate(-50%, -90%) scale(3, 0);
  }
}
/*scales the ellipse to make it look like a ripple*/
@keyframes ripple {
  0% {
    transform: scale(0);
  }
  70% {
    transform: scale(0);
  }
  90% {
    opacity: 1;
  }
  100% {
    transform: scale(1);
    opacity: 0;
  }
}

.drop {
  --duration: 3000ms;
  --kanji-font-size: 25px;
  --animation-delay: 0ms;
  --left-position: 50vw;
  --drop-clr: var(--accent-pink);
  position: absolute;
  width: auto;
  height: auto;
  left: var(--left-position);
  font-size: var(--kanji-font-size);
  color: var(--drop-clr);
  animation: rain var(--duration) var(--animation-delay) infinite forwards
    linear;
  translate: -50% -150%;
  & span {
    font-size: var(--font-size);
    position: absolute;
    top: 50%;
    left: 50%;
    animation: sploosh var(--duration) var(--animation-delay) infinite forwards
      linear;
  }
  & svg {
    stroke: var(--drop-clr);
    /*ripple size is based on kanji font size*/
    width: calc(15 * var(--kanji-font-size));
    animation: ripple var(--duration) var(--animation-delay) infinite forwards
      linear;
  }
}

/* wind emoji stuff */
.wind-position {
  position: absolute;

  top: 0;
}

#two-gusts {
  width: 100%;
  height: 70vh;
  stroke: rgb(255, 192, 203, 0.6);

  stroke-width: 1px;

  & .small {
    font-size: 0.4rem;
    stroke: none;
    fill: pink;
  }

  & .big {
    font-size: 0.8rem;
    stroke: none;
    fill: pink;
  }
}

@keyframes wind-appear {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}

.wind-appear {
  animation: 3000ms wind-appear ease-in;
}

.wind-hide {
  display: none;
}

/* FIREFLY KANJI */

/*this is used in the twilight data-attribute for the kanji-wrapper*/
@keyframes sunset {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}

/*firefly flight path animation*/
@keyframes fly {
  25% {
    transform: translate(-300%, -40%);
  }
  35% {
    transform: translate(-400%, -70%);
  }
  60% {
    transform: translate(100%, -100%);
  }
}

/*firefly blinking pattern*/
@keyframes blinkblink {
  0% {
    text-shadow: none;
    color: transparent;
  }

  20% {
    text-shadow: none;
    color: transparent;
  }

  50% {
    text-shadow: 0em 0em 0.5em var(--bg-yellow);
    color: var(--bg-yellow);
  }

  60% {
    text-shadow: none;
    color: rgb(from var(--bg-yellow) r g b / 0.4);
  }

  70% {
    text-shadow: 0em 0em 0.5em var(--bg-yellow);
    color: var(--bg-yellow);
  }

  80% {
    text-shadow: none;
    color: transparent;
  }

  100% {
    text-shadow: none;
    color: transparent;
  }
}

/* is this part neccessary? */

.firefly {
  --fly-duration: 4000ms;
  --direction: forwards;
  --blink-duration: 4000ms;
  --blink-delay: 0;
  --bug-size: 20px;
  position: absolute;
  user-select: none;
  animation: fly var(--fly-duration) infinite var(--direction) ease-in-out;
  & span {
    font-size: var(--bug-size);
    font-family: var(--font-japanese);
    color: transparent;
    animation: blinkblink var(--blink-duration) var(--blink-delay) infinite;
  }
}

/* STAR KANJI */

@keyframes twinkle {
  0% {
    opacity: 1;
  }

  70% {
    opacity: 1;
  }

  80% {
    opacity: 0.1;
  }

  100% {
    opacity: 1;
  }
}

.star {
  --star-size: 20px;
  --star-glow: rgb(0, 142, 224);
  --twinkle-delay: 0ms;
  position: absolute;
  user-select: none;
  & span {
    font-size: var(--star-size);
    font-family: var(--font-japanese);
    color: var(--white);
    text-shadow:
      0em 0em 0.2em var(--white),
      0em 0em 0.5em var(--star-glow);
    animation: twinkle 5000ms var(--twinkle-delay) infinite;
  }
}
