@import url("https://fonts.googleapis.com/css2?family=Noto+Sans+JP:wght@400;700&family=Ubuntu+Mono&display=swap");
* {
  padding: 0;
  margin: 0;
  box-sizing: border-box;
}

:root {
  /* MAIN COLORS */
  --black: #000000;
  --white: #ffffff;
  --red: #7600ed;

  --bg-color: #090909;
  --text-color: #f0f0f0;

  --primary-color: #7600ed;
  --primary-color-light: #7600ed;
  --primary-color-dark: #7600ed;
  --primary-color-text: var(--black);
  --primary-color-light-text: var(--black);
  --primary-color-dark-text: var(--black);

  /* COLORS BASED ON COMPONENTS */
  --loading-middle-circle-bg-color: var(--black);
  --loading-flapper-bg-color: #111111;

  --font-sans: "Noto Sans JP", sans-serif;
  --font-monospace: "Ubuntu Mono", monospace;
}

body {
  padding: 0;
  margin: 0;
  background-color: var(--bg-color);
  /* background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'%3E%3Cpath fill='%23535353' fill-opacity='0.4' d='M1 3h1v1H1V3zm2-2h1v1H3V1z'%3E%3C/path%3E%3C/svg%3E"); */
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='80' height='80' viewBox='0 0 80 80'%3E%3Cg fill-rule='evenodd'%3E%3Cg fill='%232f2f2f' fill-opacity='0.4'%3E%3Cpath d='M0 38.59l2.83-2.83 1.41 1.41L1.41 40H0v-1.41zM0 1.4l2.83 2.83 1.41-1.41L1.41 0H0v1.41zM38.59 40l-2.83-2.83 1.41-1.41L40 38.59V40h-1.41zM40 1.41l-2.83 2.83-1.41-1.41L38.59 0H40v1.41zM20 18.6l2.83-2.83 1.41 1.41L21.41 20l2.83 2.83-1.41 1.41L20 21.41l-2.83 2.83-1.41-1.41L18.59 20l-2.83-2.83 1.41-1.41L20 18.59z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E");
  color: var(--text-color);
  font-family: var(--font-sans);
}

/****************************************************
                  ORDINATY TAGS
*****************************************************/
input, select, textarea, a {
  font-family: inherit;
  color: inherit;
  font-size: inherit;
}
svg {
  fill: currentColor;
}
/****************************************************
                  LOADING SCREEN
*****************************************************/
.loading-main {
  z-index: 50;
  position: fixed;
  display: flex;
  top: 0;
  left: 0;
  height: 100vh;
  width: 100%;
}
.loading-main path.stroke {
  stroke-dasharray: 1228.8612060546875;
  stroke-dashoffset: 1228.8612060546875;
}
.loading-main svg.active path.stroke {
  stroke: var(--primary-color);
  animation: 1.2s ease-in-out 0.2s loading-draw;
  animation-fill-mode: forwards;
}
.loading-main svg path {
  fill: var(--loading-flapper-bg-color);
}
.loading-main svg.active path.upper-half {
  animation: 0.6s ease-out 0.8s loading-up;
  animation-fill-mode: forwards;
}
.loading-main svg.active path.bottom-half {
  fill: var(--loading-flapper-bg-color);
  animation: 0.6s ease-out 0.8s loading-down;
  animation-fill-mode: forwards;
}
.loading-main svg ~ .circle {
  position: fixed;
  top: calc(60vh - 75px);
  left: calc(50% - 75px);
  height: 150px;
  width: 150px;
  border-radius: 75px;
  transition: transform 400ms ease-in;
  background-color: var(--loading-middle-circle-bg-color);
  animation: 500ms ease-in-out 0s loading-breathe;
  animation-iteration-count: infinite;
  animation-direction: alternate;
}
.loading-main svg.active ~ .circle {
  transform: scale(0);
}
@keyframes loading-breathe {
  to {
    box-shadow: 0 0 80px var(--black);
  }
}
@keyframes loading-up {
  to {
    transform: translateY(-100vh);
  }
}
@keyframes loading-down {
  to {
    transform: translateY(130vh);
  }
}
@keyframes loading-draw {
  60% {
    stroke-dashoffset: 0;
    opacity: 1;
  }
  100% {
    stroke-dashoffset: -1228.8612060546875;
    opacity: 0;
  }
}

/****************************************************
                    TOP LOADER
*****************************************************/
.top-loader {
  --loader-height: 3px;
  position: fixed;
  top: 0;
  left: 0;
  width: 100vw;
  height: var(--loader-height);
}

.top-loader .loader {
  height: 100%;
  width: 200px;
  max-width: 40vw;
  background-color: var(--primary-color);
  border-radius: calc(var(--loader-height) / 2);
  position: relative;
  transform: translateX(-100%);
  animation: 1500ms ease-in-out 0s loading-run;
  animation-iteration-count: infinite;
}
.top-loader .loader:nth-child(2) {
  animation-delay: 700ms;
  top: calc(-1 * var(--loader-height));
}
@keyframes loading-run {
  to {
    transform: translateX(100vw);
  }
}

/****************************************************
                      MAIN
*****************************************************/
main.main-page {
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;
  text-align: center;
  min-height: calc(100vh - 86px);
}
main .logo-container svg {
  height: 250px;
  width: 250px;
  animation: 50s linear 0s logo-rotate;
  animation-iteration-count: infinite;
  filter: drop-shadow(0px 0px 5px var(--primary-color));
}
main .heading-container {
  padding: 40px 0;
}
main .heading-container h1 {
  font-weight: 700;
  font-size: 2.7rem;
}
main .heading-container .sub-heading {
  font-weight: 400;
  font-size: 1.2rem;
}
@keyframes logo-rotate {
  to {
    transform: rotate(-360deg);
  }
}

.link {
  color: var(--text-color);
  text-decoration: underline;
  cursor: pointer;
}
.button {
  color: var(--text-color);
  border: 2px solid var(--text-color);
  padding: 2px 15px;
  text-decoration: none;
  transition: all 300ms ease-in-out;
  cursor: pointer;
}
.button:hover {
  background-color: var(--text-color);
  color: var(--bg-color);
}

/****************************************************
                      FOOTER
*****************************************************/
footer {
  display: flex;
  justify-content: center;
}

footer .social-links {
  display: flex;
  justify-content: space-evenly;
  align-items: center;
  width: 100vw;
  max-width: 900px;
  height: 86px;
}

footer .social-links .link {
  padding: 4px 15px;
}

.special-link {
  text-decoration: none;
  transition: color 300ms ease-in-out;
}

.special-link::after {
  content: "";
  position: relative;
  display: block;
  height: 2px;
  width: 0;
  transition: width 300ms ease-in-out;
  background-color: var(--primary-color);
}
.special-link:hover {
  color: var(--primary-color);
}
.special-link:hover::after {
  width: 100%;
}

/****************************************
            TERMINAL PAGE
*****************************************/
main.terminal {
  font-family: var(--font-monospace);
  color: #00FF55;
}
main.terminal .typed-letters {
  font-size: 2rem;
  padding: 10px 0 20px;
}
main.terminal .message { 
  margin-bottom: 10px;
}
main.terminal .tag-line {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  margin-bottom: 30px;
}
main .tag-line .logo-container {
  display: flex;
  align-items: center;
  margin: 0 8px;
}
main.terminal .tag-line .logo-container svg {
  width: 1.5rem;
  height: 1.5rem;
  filter: drop-shadow(0px 0px 1px #00FF55);
  animation: none;
}
main.terminal .tag-line .logo-container svg.smaller {
  height: 1rem;
  width: 1rem;
}
main.terminal .tag-line .logo-container svg.rotate {
  animation: 5s linear 0s logo-rotate;
  animation-iteration-count: infinite;
}
main.terminal .terminal-screen .command-output {
  margin: 10px 0;
  white-space: pre-wrap;
}
main.terminal .terminal-screen .command-output .input-part {
  display: flex;
  align-items: center;
  margin-bottom: 5px;
}
main.terminal .terminal-screen .command-output .input-part .command:focus {
  outline: none;
}
main.terminal .terminal-screen .command-output .input-part .command {
  flex: 1;
  background-color: transparent;
  border: none;
  color: inherit;
  font-size: inherit;
}

main.terminal .terminal-screen .command-output .output-part {
  color: #FFFFFF;
}
