﻿/*@import 'animate.css';*/
@import 'animations.css';
:root {
  --font-header: "Stack Sans Notch", "Segoe UI", Tahoma, Geneva, Verdana, sans-serif;
  --font-title: "Rubik Doodle Shadow", system-ui;
  --font-body: "Stack Sans Text", "Segoe UI", Tahoma, Geneva, Verdana, sans-serif;
  --primary: hsl(233 22% 23%);
  --secondary: hsl(126 61% 80%);
  --accent-1: hsl(268 17% 66%);
  --accent-2: hsl(176 94% 28%);
  --accent-3: hsl(198 100% 71%);
  --success: hsl(86 93% 24%);
  --danger: hsl(360 82% 45%);
  --primary-000: hsl(from var(--primary) h s calc(l * 0.1));
  --primary-050: hsl(from var(--primary) h s calc(l * 0.2));
  --primary-100: hsl(from var(--primary) h s calc(l * 0.4));
  --primary-300: hsl(from var(--primary) h s calc(l * 0.8));
  --primary-500: hsl(from var(--primary) h s l);
  --primary-600: hsl(from var(--primary) h s calc(l * 1.875));
  --primary-700: hsl(from var(--primary) h s calc(l * 2.75));
  --primary-800: hsl(from var(--primary) h s calc(l * 3.625));
  --primary-900: hsl(from var(--primary) h s calc(l * 4.5));
  --primary-text: light-dark(var(--grey-100), var(--grey-900));
  --secondary-000: hsl(from var(--secondary) h calc(s * 0.4) calc(l * 0.4));
  --secondary-050: hsl(from var(--secondary) h calc(s * 0.5) calc(l * 0.55));
  --secondary-100: hsl(from var(--secondary) h calc(s * 0.6) calc(l * 0.7));
  --secondary-300: hsl(from var(--secondary) h calc(s * 0.7) calc(l * 0.85));
  --secondary-500: hsl(from var(--secondary) h s l);
  --secondary-600: hsl(from var(--secondary) h s calc(l * 1.04));
  --secondary-700: hsl(from var(--secondary) h s calc(l * 1.08));
  --secondary-800: hsl(from var(--secondary) h s calc(l * 1.12));
  --secondary-900: hsl(from var(--secondary) h s calc(l * 1.16));
  --secondary-text: var(--grey-100);
  --accent-1-000: hsl(from var(--accent-1) h s calc(l * 0.2));
  --accent-1-050: hsl(from var(--accent-1) h s calc(l * 0.4));
  --accent-1-100: hsl(from var(--accent-1) h s calc(l * 0.6));
  --accent-1-300: hsl(from var(--accent-1) h s calc(l * 0.8));
  --accent-1-500: hsl(from var(--accent-1) h s l);
  --accent-1-600: hsl(from var(--accent-1) h s calc(l * 1.075));
  --accent-1-700: hsl(from var(--accent-1) h s calc(l * 1.15));
  --accent-1-800: hsl(from var(--accent-1) h s calc(l * 1.225));
  --accent-1-900: hsl(from var(--accent-1) h s calc(l * 1.3));
  --accent-1-text: var(--grey-100);
  --accent-2-000: hsl(from var(--accent-2) h s calc(l * 0.1));
  --accent-2-050: hsl(from var(--accent-2) h s calc(l * 0.2));
  --accent-2-100: hsl(from var(--accent-2) h s calc(l * 0.4));
  --accent-2-300: hsl(from var(--accent-2) h s calc(l * 0.8));
  --accent-2-500: hsl(from var(--accent-2) h s l);
  --accent-2-600: hsl(from var(--accent-2) h calc(s * 0.8) calc(l * 1.35));
  --accent-2-700: hsl(from var(--accent-2) h calc(s * 0.7) calc(l * 1.7));
  --accent-2-800: hsl(from var(--accent-2) h calc(s * 0.6) calc(l * 2.05));
  --accent-2-900: hsl(from var(--accent-2) h calc(s * 0.5) calc(l * 2.4));
  --accent-2-text: var(--grey-100);
  --accent-3-000: hsl(from var(--accent-3) h calc(s * 0.5) calc(l * 0.1));
  --accent-3-050: hsl(from var(--accent-3) h calc(s * 0.6) calc(l * 0.2));
  --accent-3-100: hsl(from var(--accent-3) h calc(s * 0.7) calc(l * 0.4));
  --accent-3-300: hsl(from var(--accent-3) h calc(s * 0.8) calc(l * 0.8));
  --accent-3-500: hsl(from var(--accent-3) h s l);
  --accent-3-600: hsl(from var(--accent-3) h s calc(l * 1.0625));
  --accent-3-700: hsl(from var(--accent-3) h s calc(l * 1.125));
  --accent-3-800: hsl(from var(--accent-3) h s calc(l * 1.1875));
  --accent-3-900: hsl(from var(--accent-3) h s calc(l * 1.25));
  --accent-3-text: var(--grey-100);
  --success-100: hsl(from var(--success) h s calc(l * 0.2));
  --success-300: hsl(from var(--success) h s calc(l * 0.6));
  --success-500: hsl(from var(--success) h s l);
  --success-600: hsl(from var(--success) h calc(s * 1.0) calc(l * 1.2));
  --success-700: hsl(from var(--success) h calc(s * 0.9) calc(l * 1.4));
  --success-800: hsl(from var(--success) h calc(s * 0.85) calc(l * 1.6));
  --success-900: hsl(from var(--success) h calc(s * 0.8) calc(l * 1.8));
  --danger-h: 360;
  --danger-s: 82%;
  --danger-l: 45%;
  --danger-100: hsl(from var(--danger) h s calc(l * 0.2));
  --danger-300: hsl(from var(--danger) h s calc(l * 0.6));
  --danger-500: hsl(from var(--danger) h s l);
  --danger-600: hsl(from var(--danger) h s calc(l * 1.1));
  --danger-700: hsl(from var(--danger) h s calc(l * 1.2));
  --danger-800: hsl(from var(--danger) h s calc(l * 1.3));
  --danger-900: hsl(from var(--danger) h s calc(l * 1.4));
  --grey-100: hsl(233 8% 10%);
  --grey-300: hsl(233 8% 30%);
  --grey-500: hsl(233 8% 50%);
  --grey-600: hsl(233 8% 60%);
  --grey-700: hsl(233 8% 70%);
  --grey-800: hsl(233 8% 80%);
  --grey-900: hsl(233 8% 90%);
  --fs-h-0: clamp(1.5rem, 2vw + 1rem, 3.5rem);
  --fs-h-1: clamp(2rem, 8vw + 1rem, 10rem);
  --fs-h-2: clamp(2rem, 5vw + 1rem, 8rem);
  --fs-h-3: clamp(2rem, 3vw + 1rem, 5rem);
  --fs-h-4: clamp(1.5rem, 2vw + 1rem, 3.5rem);
  --fs-h-5: clamp(1rem, 1vw + 1rem, 2rem);
  --fs-p-1: clamp(0.75rem, 0.3vw + 0.8rem, 1.5rem);
  --fs-p-2: clamp(0.8rem, 0.5vw + 0.75rem, 2rem);
  --fs-p-3: clamp(0.4rem, 0.3vw + 0.65rem, 2rem);
  --fs-st-1: clamp(0.5rem, 0.25vw + 0.65rem, 1rem);
  --fs-form: clamp(0.7rem, 0.3vw + 0.6rem, 1.25rem);
  --box-shadow-primary: 0.1rem 0.1rem 0.15rem hsl(from var(--grey-100) h s l / 0.35),
                        0.1rem 0.1rem 0.5rem hsl(from var(--grey-100) h s l / 0.15);
  --box-shadow-card: 0.15rem 0.15rem 0.15rem hsl(from var(--grey-100) h s l / 0.25),
                     0.15rem 0.15rem 0.5rem hsl(from var(--grey-100) h s l / 0.15);
  --screen-size-sm: $screen-size-sm;
  --screen-size-md: $screen-size-md;
  --screen-size-lg: $screen-size-lg;
  --container-bg-color: light-dark(var(--primary-900), var(--primary-500));
  --container-border-color: light-dark(var(--primary-900), var(--primary-600));
  --card-bg-color: light-dark(var(--primary-900), var(--primary-500));
  --card-bg-color-sub: light-dark(var(--primary-900), var(--primary-500));
  --card-border-color: light-dark(var(--primary-900), var(--primary-600));
  --card-text-color: var(--primary-text);
  --card-highlight-color: light-dark(var(--accent-1-300), var(--accent-1-700));
  --input-size: clamp(0.75rem, 0.3vw + 1rem, 2rem);
  --input-padding: 0.5rem;
  --input-bg-color: var(--grey-900);
  --input-color: var(--grey-100);
  --input-border-color: var(--accent-1-500);
  --input-border-color-hover: var(--accent-1-700);
  --input-valid-color: var(--success-500);
  --input-valid-color-hover: var(--success-700);
  --input-invalid-color: var(--danger-500);
  --input-invalid-color-hover: var(--danger-700);
}
@media (prefers-color-scheme: light) {
  :root {
    --color-scheme: light;
    color-scheme: light;
    --background-image: url("img/topography-light.svg");
  }
}
@media (prefers-color-scheme: dark) {
  :root {
    --color-scheme: dark;
    color-scheme: dark;
    --background-image: url("img/topography-dark.svg");
  }
}

@keyframes background-drift {
  0% {
    background-position: 0rem 0rem;
  }
  100% {
    background-position: -100rem -50rem;
  }
}
@keyframes background-color-shift {
  0% {
    --background-dot-color: var(--accent-1-300);
    /*background-image: radial-gradient(var(--accent-1-300) 4%, transparent 4% );*/
  }
  100% {
    /*background-image: radial-gradient(var(--accent-2-900) 4%, transparent 4% );*/
    --background-dot-color: var(--accent-2-900);
  }
}
:root {
  --font-header: "Stack Sans Notch", "Segoe UI", Tahoma, Geneva, Verdana, sans-serif;
  --font-title: "Rubik Doodle Shadow", system-ui;
  --font-body: "Stack Sans Text", "Segoe UI", Tahoma, Geneva, Verdana, sans-serif;
  --primary: hsl(233 22% 23%);
  --secondary: hsl(126 61% 80%);
  --accent-1: hsl(268 17% 66%);
  --accent-2: hsl(176 94% 28%);
  --accent-3: hsl(198 100% 71%);
  --success: hsl(86 93% 24%);
  --danger: hsl(360 82% 45%);
  --primary-000: hsl(from var(--primary) h s calc(l * 0.1));
  --primary-050: hsl(from var(--primary) h s calc(l * 0.2));
  --primary-100: hsl(from var(--primary) h s calc(l * 0.4));
  --primary-300: hsl(from var(--primary) h s calc(l * 0.8));
  --primary-500: hsl(from var(--primary) h s l);
  --primary-600: hsl(from var(--primary) h s calc(l * 1.875));
  --primary-700: hsl(from var(--primary) h s calc(l * 2.75));
  --primary-800: hsl(from var(--primary) h s calc(l * 3.625));
  --primary-900: hsl(from var(--primary) h s calc(l * 4.5));
  --primary-text: light-dark(var(--grey-100), var(--grey-900));
  --secondary-000: hsl(from var(--secondary) h calc(s * 0.4) calc(l * 0.4));
  --secondary-050: hsl(from var(--secondary) h calc(s * 0.5) calc(l * 0.55));
  --secondary-100: hsl(from var(--secondary) h calc(s * 0.6) calc(l * 0.7));
  --secondary-300: hsl(from var(--secondary) h calc(s * 0.7) calc(l * 0.85));
  --secondary-500: hsl(from var(--secondary) h s l);
  --secondary-600: hsl(from var(--secondary) h s calc(l * 1.04));
  --secondary-700: hsl(from var(--secondary) h s calc(l * 1.08));
  --secondary-800: hsl(from var(--secondary) h s calc(l * 1.12));
  --secondary-900: hsl(from var(--secondary) h s calc(l * 1.16));
  --secondary-text: var(--grey-100);
  --accent-1-000: hsl(from var(--accent-1) h s calc(l * 0.2));
  --accent-1-050: hsl(from var(--accent-1) h s calc(l * 0.4));
  --accent-1-100: hsl(from var(--accent-1) h s calc(l * 0.6));
  --accent-1-300: hsl(from var(--accent-1) h s calc(l * 0.8));
  --accent-1-500: hsl(from var(--accent-1) h s l);
  --accent-1-600: hsl(from var(--accent-1) h s calc(l * 1.075));
  --accent-1-700: hsl(from var(--accent-1) h s calc(l * 1.15));
  --accent-1-800: hsl(from var(--accent-1) h s calc(l * 1.225));
  --accent-1-900: hsl(from var(--accent-1) h s calc(l * 1.3));
  --accent-1-text: var(--grey-100);
  --accent-2-000: hsl(from var(--accent-2) h s calc(l * 0.1));
  --accent-2-050: hsl(from var(--accent-2) h s calc(l * 0.2));
  --accent-2-100: hsl(from var(--accent-2) h s calc(l * 0.4));
  --accent-2-300: hsl(from var(--accent-2) h s calc(l * 0.8));
  --accent-2-500: hsl(from var(--accent-2) h s l);
  --accent-2-600: hsl(from var(--accent-2) h calc(s * 0.8) calc(l * 1.35));
  --accent-2-700: hsl(from var(--accent-2) h calc(s * 0.7) calc(l * 1.7));
  --accent-2-800: hsl(from var(--accent-2) h calc(s * 0.6) calc(l * 2.05));
  --accent-2-900: hsl(from var(--accent-2) h calc(s * 0.5) calc(l * 2.4));
  --accent-2-text: var(--grey-100);
  --accent-3-000: hsl(from var(--accent-3) h calc(s * 0.5) calc(l * 0.1));
  --accent-3-050: hsl(from var(--accent-3) h calc(s * 0.6) calc(l * 0.2));
  --accent-3-100: hsl(from var(--accent-3) h calc(s * 0.7) calc(l * 0.4));
  --accent-3-300: hsl(from var(--accent-3) h calc(s * 0.8) calc(l * 0.8));
  --accent-3-500: hsl(from var(--accent-3) h s l);
  --accent-3-600: hsl(from var(--accent-3) h s calc(l * 1.0625));
  --accent-3-700: hsl(from var(--accent-3) h s calc(l * 1.125));
  --accent-3-800: hsl(from var(--accent-3) h s calc(l * 1.1875));
  --accent-3-900: hsl(from var(--accent-3) h s calc(l * 1.25));
  --accent-3-text: var(--grey-100);
  --success-100: hsl(from var(--success) h s calc(l * 0.2));
  --success-300: hsl(from var(--success) h s calc(l * 0.6));
  --success-500: hsl(from var(--success) h s l);
  --success-600: hsl(from var(--success) h calc(s * 1.0) calc(l * 1.2));
  --success-700: hsl(from var(--success) h calc(s * 0.9) calc(l * 1.4));
  --success-800: hsl(from var(--success) h calc(s * 0.85) calc(l * 1.6));
  --success-900: hsl(from var(--success) h calc(s * 0.8) calc(l * 1.8));
  --danger-h: 360;
  --danger-s: 82%;
  --danger-l: 45%;
  --danger-100: hsl(from var(--danger) h s calc(l * 0.2));
  --danger-300: hsl(from var(--danger) h s calc(l * 0.6));
  --danger-500: hsl(from var(--danger) h s l);
  --danger-600: hsl(from var(--danger) h s calc(l * 1.1));
  --danger-700: hsl(from var(--danger) h s calc(l * 1.2));
  --danger-800: hsl(from var(--danger) h s calc(l * 1.3));
  --danger-900: hsl(from var(--danger) h s calc(l * 1.4));
  --grey-100: hsl(233 8% 10%);
  --grey-300: hsl(233 8% 30%);
  --grey-500: hsl(233 8% 50%);
  --grey-600: hsl(233 8% 60%);
  --grey-700: hsl(233 8% 70%);
  --grey-800: hsl(233 8% 80%);
  --grey-900: hsl(233 8% 90%);
  --fs-h-0: clamp(1.5rem, 2vw + 1rem, 3.5rem);
  --fs-h-1: clamp(2rem, 8vw + 1rem, 10rem);
  --fs-h-2: clamp(2rem, 5vw + 1rem, 8rem);
  --fs-h-3: clamp(2rem, 3vw + 1rem, 5rem);
  --fs-h-4: clamp(1.5rem, 2vw + 1rem, 3.5rem);
  --fs-h-5: clamp(1rem, 1vw + 1rem, 2rem);
  --fs-p-1: clamp(0.75rem, 0.3vw + 0.8rem, 1.5rem);
  --fs-p-2: clamp(0.8rem, 0.5vw + 0.75rem, 2rem);
  --fs-p-3: clamp(0.4rem, 0.3vw + 0.65rem, 2rem);
  --fs-st-1: clamp(0.5rem, 0.25vw + 0.65rem, 1rem);
  --fs-form: clamp(0.7rem, 0.3vw + 0.6rem, 1.25rem);
  --box-shadow-primary: 0.1rem 0.1rem 0.15rem hsl(from var(--grey-100) h s l / 0.35),
                        0.1rem 0.1rem 0.5rem hsl(from var(--grey-100) h s l / 0.15);
  --box-shadow-card: 0.15rem 0.15rem 0.15rem hsl(from var(--grey-100) h s l / 0.25),
                     0.15rem 0.15rem 0.5rem hsl(from var(--grey-100) h s l / 0.15);
  --screen-size-sm: $screen-size-sm;
  --screen-size-md: $screen-size-md;
  --screen-size-lg: $screen-size-lg;
  --container-bg-color: light-dark(var(--primary-900), var(--primary-500));
  --container-border-color: light-dark(var(--primary-900), var(--primary-600));
  --card-bg-color: light-dark(var(--primary-900), var(--primary-500));
  --card-bg-color-sub: light-dark(var(--primary-900), var(--primary-500));
  --card-border-color: light-dark(var(--primary-900), var(--primary-600));
  --card-text-color: var(--primary-text);
  --card-highlight-color: light-dark(var(--accent-1-300), var(--accent-1-700));
  --input-size: clamp(0.75rem, 0.3vw + 1rem, 2rem);
  --input-padding: 0.5rem;
  --input-bg-color: var(--grey-900);
  --input-color: var(--grey-100);
  --input-border-color: var(--accent-1-500);
  --input-border-color-hover: var(--accent-1-700);
  --input-valid-color: var(--success-500);
  --input-valid-color-hover: var(--success-700);
  --input-invalid-color: var(--danger-500);
  --input-invalid-color-hover: var(--danger-700);
}

@media (prefers-color-scheme: light) {
  :root {
    --color-scheme: light;
    color-scheme: light;
    --background-image: url("img/topography-light.svg");
  }
}
@media (prefers-color-scheme: dark) {
  :root {
    --color-scheme: dark;
    color-scheme: dark;
    --background-image: url("img/topography-dark.svg");
  }
}
@keyframes background-drift {
  0% {
    background-position: 0rem 0rem;
  }
  100% {
    background-position: -100rem -50rem;
  }
}
@keyframes background-color-shift {
  0% {
    --background-dot-color: var(--accent-1-300);
    /*background-image: radial-gradient(var(--accent-1-300) 4%, transparent 4% );*/
  }
  100% {
    /*background-image: radial-gradient(var(--accent-2-900) 4%, transparent 4% );*/
    --background-dot-color: var(--accent-2-900);
  }
}
*, ::before, ::after {
  box-sizing: border-box;
}

@media (prefers-reduced-motion: no-preference) {
  .separate-view {
    view-transition-name: match-element;
  }
  .theme-switcher-label {
    view-transition-name: theme-switcher;
  }
  ::view-transition {
    background: var(--grey-500);
    --transition-duration: 1s;
    --transition-half-duration: calc(var(--transition-duration) / 2);
  }
  ::view-transition-group(*) {
    animation: initial;
    animation-duration: var(--transition-duration);
  }
  ::view-transition-group(theme-switcher) {
    animation-duration: 0s;
  }
  ::view-transition-image-pair(root) {
    perspective: 2500px;
    perspective-origin: center;
    transform-style: preserve-3d;
    transform-origin: 50% 50%;
  }
  ::view-transition-old(root) {
    animation: theme-transition-out ease-in var(--transition-half-duration);
    opacity: 0;
    left: 0;
    right: auto;
    transform-style: preserve-3d;
    transform-origin: center center;
    backface-visibility: hidden;
    filter: drop-shadow(0px 0px 3rem hsla(0, 0%, 0%, 0.5));
  }
  ::view-transition-new(root) {
    animation: theme-transition-in ease-out var(--transition-half-duration);
    animation-delay: var(--transition-half-duration);
    opacity: 0;
    left: 0;
    right: auto;
    transform-style: preserve-3d;
    transform-origin: center center;
    backface-visibility: hidden;
    filter: drop-shadow(0px 0px 3rem hsla(0, 0%, 0%, 0.5));
  }
}
html, body {
  scroll-behavior: smooth;
  font-family: var(--font-body);
  font-size: 1.05rem;
  color: var(--primary-text);
  line-height: 1.1;
}

html.dark {
  --grain-opacity: 0.15;
}
html.dark body {
  background-image: url("img/topography-dark.svg");
}

html.light {
  --grain-opacity: 0.25;
}
html.light body {
  background-image: url("img/topography-light.svg");
}

body {
  background-color: light-dark(var(--secondary-700), var(--primary-100));
  --background-line-color-1: light-dark(var(--secondary-300), var(--primary-100));
  --background-line-color-2: light-dark(var(--secondary-100), var(--primary-100));
  --background-line-size-1: 2px;
  --background-line-size-2: 1px;
  --background-box-size: 16vmin;
  --background-small-box-size: calc(var(--background-box-size) / 4);
  background-size: clamp(10rem, 15vmax, 30rem);
  background-image: url(light-dark("img/topography-light.svg", "img/topography-dark.svg"));
  animation: background-drift 120s linear -30s infinite;
}

.pattern {
  position: fixed;
  inset: 0;
  width: 100%;
  height: 100%;
}
.pattern .bg-pattern-hidden {
  visibility: hidden;
}

.grain {
  position: fixed;
  inset: 0;
  z-index: -100;
  opacity: var(--grain-opacity, 0.25);
  background-image: url("img/spaced-noise-md.png");
  background-size: clamp(10rem, 15vmax, 30rem);
  animation: grain 1s steps(1, jump-end) infinite;
}

button {
  border: none;
  background: none;
}

h1, h2, h3, h4, h5 {
  font-family: var(--font-header);
  font-weight: lighter;
  color: var(--grey-900);
}

h1 {
  font-size: var(--fs-h-1);
}

h2 {
  font-size: var(--fs-h-2);
}

h3 {
  font-size: var(--fs-h-3);
}

h4 {
  font-size: var(--fs-h-4);
}

h5 {
  font-size: var(--fs-h-5);
}

blockquote {
  line-height: 1.8rem;
  z-index: 4;
}

/* Tile Styles */
.tile-grid {
  display: grid;
  grid-auto-flow: dense;
  place-items: center;
  max-width: 100%;
  grid-template-columns: repeat(auto-fit, clamp(10rem, 25vw + 14rem, 30rem));
  justify-content: center;
  gap: var(--gap, 1rem);
}

.skills-grid {
  display: grid;
  grid-auto-flow: dense;
  place-items: start;
  justify-content: center;
  max-width: 100%;
  grid-template-columns: repeat(auto-fit, clamp(10rem, 25vw + 14rem, 30rem));
  gap: var(--gap, 1rem);
}

/* Button Styles */
.btn {
  --button-font-size: 1rem;
  --button-font-weight: 400;
  --button-padding: 0.75em 1em;
  --button-background-color: light-dark(var(--primary-800), var(--primary-600));
  --button-color: var(--primary-text);
  --button-hover-background-color: light-dark(var(--primary-700), var(--primary-500));
  --button-hover-color: var(--primary-text);
  --button-hover-bottom-border: var(--primary-300);
  position: relative;
  display: inline-block;
  background-color: var(--button-background-color);
  border: 0.1rem var(--button-background-color) solid;
  color: var(--button-color);
  padding: var(--button-padding);
  font-size: var(--button-font-size);
  font-weight: var(--button-font-weight);
  line-height: 1em;
  letter-spacing: 0.15ch;
  border-radius: 0.5rem;
  text-decoration: none;
  text-align: center;
  vertical-align: middle;
  cursor: pointer;
  transition: background-color ease-out 0.15s, border-color ease-out 0.15s, color ease-out 0.15s;
}

.btn.sm {
  --button-font-size: 0.875rem;
  --button-font-weight: 400;
}

.btn.lg {
  --button-font-size: 1.25rem;
  --button-font-weight: 500;
}

.btn::after {
  position: absolute;
  content: "";
  left: 0.15rem;
  right: 0.15rem;
  bottom: 0.1rem;
  height: 0.25rem;
  border-radius: 0.5rem;
  z-index: 1;
  background-color: var(--button-hover-bottom-border);
  transform: translateY(100%);
  opacity: 0;
  transition: transform ease-out 0.15s, opacity ease-out 0.15s;
}

.btn:hover, .btn:focus-visible {
  background-color: var(--button-hover-background-color);
  border-color: var(--button-hover-background-color);
  color: var(--button-hover-color);
}

.btn:hover::after,
.btn:focus-visible::after {
  transform: translateY(0%);
  opacity: 1;
}

.btn.outline {
  background: none;
  border: 0.1rem var(--button-background-color) solid;
  color: var(--button-background-color);
  box-shadow: 0px 0px 0.25rem inset var(--button-background-color);
}

.btn.outline:hover, .btn.outline:focus-visible {
  background-color: var(--button-background-color);
  color: var(--grey-900);
}

.btn.outline:hover::after,
.btn.outline:focus-visible::after {
  background-color: var(--button-hover-background-color);
}

.btn.primary {
  --button-background-color: light-dark(var(--primary-800), var(--primary-600));
  --button-color: var(--primary-text);
  --button-hover-background-color: light-dark(var(--primary-700), var(--primary-500));
  --button-hover-color: var(--primary-text);
  --button-hover-bottom-border: var(--primary-100);
}

.btn.secondary {
  --button-background-color: var(--secondary-500);
  --button-color: var(--secondary-text);
  --button-hover-background-color: var(--secondary-300);
  --button-hover-color: var(--secondary-text);
  --button-hover-bottom-border: var(--secondary-100);
}

.btn.accent-1 {
  --button-background-color: var(--accent-1-500);
  --button-color: var(--accent-1-text);
  --button-hover-background-color: var(--accent-1-300);
  --button-hover-color: var(--accent-1-text);
  --button-hover-bottom-border: var(--accent-1-100);
}

.btn.accent-2 {
  --button-background-color: var(--accent-2-500);
  --button-color: var(--accent-2-text);
  --button-hover-background-color: var(--accent-2-300);
  --button-hover-color: var(--accent-2-text);
  --button-hover-bottom-border: var(--accent-2-100);
}

.btn.accent-3 {
  --button-background-color: var(--accent-3-500);
  --button-color: var(--accent-3-text);
  --button-hover-background-color: var(--accent-3-300);
  --button-hover-color: var(--accent-3-text);
  --button-hover-bottom-border: var(--accent-3-100);
}

.btn.success {
  --button-background-color: var(--success-700);
  --button-color: var(--grey-900);
  --button-hover-background-color: var(--success-500);
  --button-hover-color: var(--grey-900);
  --button-hover-bottom-border: var(--success-300);
}

.btn.danger {
  --button-background-color: var(--danger-500);
  --button-color: var(--grey-900);
  --button-hover-background-color: var(--danger-300);
  --button-hover-color: var(--grey-900);
  --button-hover-bottom-border: var(--danger-100);
}

/* Form Base Styles */
form {
  width: 100%;
}

.form-field:hover,
label:hover,
input:hover {
  --input-border-color: var(--input-border-color-hover);
}

label,
input {
  margin: 0;
  padding: 0;
}

label {
  font-size: var(--fs-p-1);
}

input, select {
  position: relative;
  border-radius: 0.25rem;
  background-color: var(--input-bg-color);
  color: var(--input-color);
  border: 0.15rem solid var(--input-border-color);
  padding-block: var(--input-padding);
  padding-inline: var(--input-padding);
  padding-left: var(--input-padding);
  height: var(--input-size);
  width: 100%;
  height: auto;
  font-family: var(--font-body);
  font-size: var(--fs-form);
  background-image: none;
  background-repeat: no-repeat;
  background-position: left calc(var(--input-size) * -1) center;
  background-size: var(--input-size);
  transition: border-color ease 150ms, background-color ease 150ms, padding-left ease 500ms, background-position ease 500ms;
}

input:focus-visible, select:focus-visible {
  outline: 0.25rem solid transparent;
}

input:hover, select:hover {
  --input-border-color: var(--input-border-color-hover);
}

.validated input, .validated select {
  padding-left: calc(var(--input-size) + var(--input-padding));
  background-position: left calc(var(--input-padding) / 2) center;
}

.validated input.valid, .validated select.valid {
  --input-border-color: var(--input-valid-color);
  background-image: url("icons/fi-xwsuxl-check.svg");
}

.validated input.valid:hover, .validated select.valid:hover {
  --input-border-color: var(--input-valid-color-hover);
}

.validated input.invalid, .validated select.invalid {
  --input-border-color: var(--input-invalid-color);
  background-image: url("icons/fi-xnsuxl-times-solid.svg");
}

.validated input.invalid:hover, .validated select.invalid:hover {
  --input-border-color: var(--input-invalid-color-hover);
}

div.validation-message {
  position: absolute;
  top: 100%;
  left: var(--input-padding);
  width: fit-content;
  padding: calc(var(--input-padding) / 2);
  margin-top: calc(var(--input-padding) / 4);
  background-color: var(--danger-500);
  border-radius: 0.25rem;
  color: var(--grey-900);
  font-size: var(--fs-st-1);
  z-index: 10;
  animation: fade-in 250ms ease normal, slide-in-down 250ms ease normal;
}

/* Scrollable Classes */
.scrollable {
  position: relative;
  min-height: 100vh;
  max-width: 100%;
  display: flex;
  justify-content: center;
  align-items: center;
}

.scrollable-background, .scrollable-foreground {
  position: absolute;
  height: 100%;
  max-width: 100%;
  object-fit: cover;
  object-position: center;
  z-index: -1;
  inset: 0;
  pointer-events: none;
  color: light-dark(var(--secondary-300), var(--primary-500));
}
.scrollable-background svg, .scrollable-foreground svg {
  stroke-width: 2px;
}
@media (width <= 1400px) {
  .scrollable-background, .scrollable-foreground {
    width: auto;
    height: 100%;
  }
}

.scrollable-background > *,
.scrollable-foreground > * {
  min-width: 100%;
  min-height: 100%;
}

.scrollable-foreground {
  transform: translateZ(-5px);
}

.scrollable-title {
  font-family: var(--font-header);
  font-size: var(--fs-h-2);
  color: white;
  text-shadow: 0 0 5px black;
  text-align: center;
  letter-spacing: -0.02em;
  pointer-events: none;
}

.pin-spacer {
  margin: 0;
}

.side-header {
  font-family: var(--font-header);
  font-size: var(--fs-h-0);
  font-variant: small-caps;
  color: light-dark(var(--secondary-100), var(--primary-700));
  text-align: end;
  letter-spacing: 0.15em;
  display: inline-block;
  transform-origin: top left;
  transform: rotate(-90deg) translateX(-100%);
  margin: 4rem 1rem;
  pointer-events: none;
  opacity: 0;
  transition: opacity ease 1s;
}

.side-header.active {
  opacity: 1;
}

.splash-block {
  position: relative;
  left: -15%;
  width: min(70vmin, 48rem);
  aspect-ratio: 1/1;
  filter: drop-shadow(0.25rem 0.15rem 0.1rem hsl(from var(--grey-100) h s l/0.35)) drop-shadow(0.5rem 0.25rem 0.5rem hsl(from var(--grey-100) h s l/0.25));
  pointer-events: none;
}

.splash-block-img {
  position: absolute;
  inset: 0;
  width: 100%;
  aspect-ratio: 1/1;
  object-fit: cover;
  background-image: linear-gradient(to top, hsla(0, 0%, 0%, 0.5) 50%, hsla(0, 0%, 0%, 0) 100%);
  background-color: var(--primary-300);
  background-position: center;
  background-size: cover;
  background-repeat: no-repeat, no-repeat;
  filter: blur(0.5rem) opacity(50%) saturate(50%);
  z-index: -1;
}

.splash-block::after {
  content: "";
  position: absolute;
  inset: 0;
  background-image: linear-gradient(to top, hsla(0, 0%, 0%, 0.5) 25%, hsla(0, 0%, 0%, 0.25) 100%);
  z-index: -1;
}

.splash-block-title {
  position: absolute;
  left: 25%;
  font-family: var(--font-title);
  font-size: clamp(2rem, 18vmin, 15rem);
  text-align: left;
  letter-spacing: clamp(0.05em, 0.5vw, 0.25em);
  color: var(--primary-900);
  text-shadow: none;
  background: linear-gradient(60deg, var(--accent-1-700) 50%, var(--accent-1-500) 100%);
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
}

.splash-accent-1 {
  display: inline-block;
  padding-left: 0.1em;
  background: linear-gradient(60deg, var(--secondary) 20%, var(--accent-1-300) 100%);
  background-clip: text;
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
}

.splash-accent-2 {
  background: linear-gradient(60deg, var(--accent-1-300) 0%, var(--secondary) 80%);
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
}

.splash-block-subtitle {
  position: absolute;
  bottom: 1rem;
  right: 1rem;
  display: grid;
  gap: clamp(0.25rem, 2vmin, 1rem);
  font-family: var(--font-title);
  font-size: clamp(0.8rem, 3vmin, 4rem);
  font-weight: 100;
  letter-spacing: -0.01em;
  color: var(--grey-900);
  text-align: right;
}

/* Icon Styles */
.icon-grid {
  --icon-size: clamp(2.5rem, 1vw + 1.5rem, 4rem);
  --icon-gap: max(0.5rem, 0.75vw);
  max-width: 100%;
  margin-top: auto;
  display: grid;
  grid-template-columns: repeat(auto-fit, var(--icon-size));
  gap: var(--icon-gap);
}

.icon {
  --icon-size: clamp(2.5rem, 1.5vw + 1.5rem, 4rem);
  --icon-padding: 0.25rem;
  width: var(--icon-size);
  aspect-ratio: 1/1;
  padding: var(--icon-padding);
  mix-blend-mode: normal;
  background-image: linear-gradient(-45deg, var(--accent-3-500) 25%, var(--accent-3-900) 75%);
  background-position: 0 0;
  border-radius: 50%;
}

/* Spinner Classes */
#app > .spinner {
  position: absolute;
  left: 50%;
  top: 50%;
  translate: -50% -75%;
}

.spinner {
  --spinner-height: 50vmin;
  --spinner-width: 2vmin;
  --spinner-animation-duration: 5000ms;
  position: relative;
  width: calc(var(--spinner-height) * 2);
  aspect-ratio: 1/1;
  background: none;
}

.spinner::after {
  content: "";
  position: absolute;
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%);
  border-radius: 50%;
  width: calc(var(--spinner-width) * 2);
  aspect-ratio: 1/1;
  background: var(--primary-500);
}

.spinner > h1 {
  position: absolute;
  left: 50%;
  top: 100%;
  transform: translateX(-50%);
  color: var(--accent-1-900);
  width: max-content;
}

.spinner > .spinner-arm {
  position: absolute;
  left: 50%;
  translate: -50% 0%;
  height: var(--spinner-height);
  width: var(--spinner-width);
  border-radius: 2rem;
  transform: rotate(0deg) scale(0, 0.5);
  transform-origin: 50% 100%;
  animation: spinner var(--spinner-animation-duration) ease infinite;
}

.spinner > .spinner-arm:nth-child(1) {
  background-color: var(--accent-1-700);
  animation-delay: calc(var(--spinner-animation-duration) / 7 * 0);
}

.spinner > .spinner-arm:nth-child(2) {
  background-color: var(--accent-2-700);
  animation-delay: calc(var(--spinner-animation-duration) / 7 * 1);
}

.spinner > .spinner-arm:nth-child(3) {
  background-color: var(--accent-3-700);
  animation-delay: calc(var(--spinner-animation-duration) / 7 * 2);
}

.spinner > .spinner-arm:nth-child(4) {
  background-color: var(--success-700);
  animation-delay: calc(var(--spinner-animation-duration) / 7 * 3);
}

.spinner > .spinner-arm:nth-child(5) {
  background-color: var(--danger-700);
  animation-delay: calc(var(--spinner-animation-duration) / 7 * 4);
}

@keyframes spinner {
  0% {
    transform: rotate(0deg) scale(0, 0.5);
  }
  50% {
    transform: rotate(180deg) scale(1);
  }
  100% {
    transform: rotate(360deg) scale(0, 0.5);
  }
}
/* Utility Classes */
.hidden {
  visibility: hidden;
  height: 0;
}

.flex {
  display: flex;
  margin-block: 1rem;
  gap: var(--gap, 1rem);
}

.flex.row {
  flex-direction: row;
}

.flex.column {
  flex-direction: column;
}

.flex.wrap {
  flex-wrap: wrap;
}

.flex.no-wrap {
  flex-wrap: nowrap;
}

.flex.space-around {
  justify-content: space-around;
}

.flex.space-between {
  justify-content: space-between;
}

.grid {
  display: grid;
  gap: var(--gap, 1rem);
}

.grid-2-columns {
  grid-template-columns: 1fr 1fr;
}

.grid-3-columns {
  grid-template-columns: 1fr 1fr 1fr;
}

.grid-4-columns {
  grid-template-columns: 1fr 1fr 1fr 1fr;
}

.grid-2-rows {
  grid-template-rows: 1fr 1fr;
}

.grid-3-rows {
  grid-template-rows: 1fr 1fr 1fr;
}

.grid-4-rows {
  grid-template-rows: 1fr 1fr 1fr 1fr;
}

.m-block-0 {
  margin-block: 0;
}

.m-inline-0 {
  margin-inline: 0;
}

.p-block-0 {
  padding-block: 0;
}

.p-inline-0 {
  padding-inline: 0;
}

.filter-blur-1 {
  filter: blur(0.1rem);
}

.filter-blur-2 {
  filter: blur(0.25rem);
}

.filter-blur-3 {
  filter: blur(0.5rem);
}

.filter-blur-4 {
  filter: blur(1rem);
}

.image-width-1 {
  width: 4rem;
}

.image-width-2 {
  width: 6rem;
}

.image-width-3 {
  width: 8rem;
}

.image-width-4 {
  width: 10rem;
}

.image-width-5 {
  width: 12rem;
}

.image-height-1 {
  height: 4rem;
}

.image-height-2 {
  height: 6rem;
}

.image-height-3 {
  height: 8rem;
}

.image-height-4 {
  height: 10rem;
}

.image-height-5 {
  height: 12rem;
}

.aspect-ratio-1-1 {
  aspect-ratio: 1/1;
  height: auto;
}

.aspect-ratio-1-2 {
  aspect-ratio: 1/2;
  height: auto;
}

.aspect-ratio-2-1 {
  aspect-ratio: 2/1;
  height: auto;
}

.aspect-ratio-4-3 {
  aspect-ratio: 4/3;
  height: auto;
}

.aspect-ratio-16-9 {
  aspect-ratio: 16/9;
  height: auto;
}

/* Colors */
.text-primary-0 {
  color: var(--primary-000);
}

.text-primary-1 {
  color: var(--primary-100);
}

.text-primary-3 {
  color: var(--primary-300);
}

.text-primary-5, .text-primary {
  color: var(--primary-500);
}

.text-primary-7 {
  color: var(--primary-700);
}

.text-primary-9 {
  color: var(--primary-900);
}

.text-secondary-0 {
  color: var(--secondary-000);
}

.text-secondary-1 {
  color: var(--secondary-100);
}

.text-secondary-3 {
  color: var(--secondary-300);
}

.text-secondary-5, .text-secondary {
  color: var(--secondary-500);
}

.text-secondary-7 {
  color: var(--secondary-700);
}

.text-secondary-9 {
  color: var(--secondary-900);
}

.text-accent-1-1 {
  color: var(--accent-1-100);
}

.text-accent-1-3 {
  color: var(--accent-1-300);
}

.text-accent-1-5, .text-accent-1 {
  color: var(--accent-1-500);
}

.text-accent-1-7 {
  color: var(--accent-1-700);
}

.text-accent-1-9 {
  color: var(--accent-1-900);
}

.text-accent-2-1 {
  color: var(--accent-2-100);
}

.text-accent-2-3 {
  color: var(--accent-2-300);
}

.text-accent-2-5, .text-accent-2 {
  color: var(--accent-2-500);
}

.text-accent-2-7 {
  color: var(--accent-2-700);
}

.text-accent-2-9 {
  color: var(--accent-2-900);
}

.bg-primary-0 {
  background-color: var(--primary-000);
}

.bg-primary-050 {
  background-color: var(--primary-050);
}

.bg-primary-1 {
  background-color: var(--primary-100);
}

.bg-primary-3 {
  background-color: var(--primary-300);
}

.bg-primary-5, .bg-primary {
  background-color: var(--primary-500);
}

.bg-primary-7 {
  background-color: var(--primary-700);
}

.bg-primary-9 {
  background-color: var(--primary-900);
}

.bg-secondary-0 {
  background-color: var(--secondary-000);
}

.bg-secondary-050 {
  background-color: var(--secondary-050);
}

.bg-secondary-1 {
  background-color: var(--secondary-100);
}

.bg-secondary-3 {
  background-color: var(--secondary-300);
}

.bg-secondary-5, .bg-secondary {
  background-color: var(--secondary-500);
}

.bg-secondary-7 {
  background-color: var(--secondary-700);
}

.bg-secondary-9 {
  background-color: var(--secondary-900);
}

.bg-accent-1-1 {
  background-color: var(--accent-1-100);
}

.bg-accent-1-3 {
  background-color: var(--accent-1-300);
}

.bg-accent-1-5, .bg-accent-1 {
  background-color: var(--accent-1-500);
}

.bg-accent-1-7 {
  background-color: var(--accent-1-700);
}

.bg-accent-1-9 {
  background-color: var(--accent-1-900);
}

.bg-accent-2-1 {
  background-color: var(--accent-2-100);
}

.bg-accent-2-3 {
  background-color: var(--accent-2-300);
}

.bg-accent-2-5, .bg-accent-2 {
  background-color: var(--accent-2-500);
}

.bg-accent-2-7 {
  background-color: var(--accent-2-700);
}

.bg-accent-2-9 {
  background-color: var(--accent-2-900);
}

.bg-success-1 {
  background-color: var(--success-100);
}

.bg-success-3 {
  background-color: var(--success-300);
}

.bg-success-5 {
  background-color: var(--success-500);
}

.bg-success-7 {
  background-color: var(--success-700);
}

.bg-success-9 {
  background-color: var(--success-900);
}

.bg-danger-1 {
  background-color: var(--danger-100);
}

.bg-danger-3 {
  background-color: var(--danger-300);
}

.bg-danger-5 {
  background-color: var(--danger-500);
}

.bg-danger-7 {
  background-color: var(--danger-700);
}

.bg-danger-9 {
  background-color: var(--danger-900);
}

.bg-grey-1 {
  background-color: var(--grey-100);
}

.bg-grey-3 {
  background-color: var(--grey-300);
}

.bg-grey-5 {
  background-color: var(--grey-500);
}

.bg-grey-7 {
  background-color: var(--grey-700);
}

.bg-grey-9 {
  background-color: var(--grey-900);
}

/* Effects */
.effect-speed-1 {
  --effect-speed: 100ms;
}

.effect-speed-2 {
  --effect-speed: 200ms;
}

.effect-speed-3 {
  --effect-speed: 300ms;
}

.effect-speed-4 {
  --effect-speed: 400ms;
}

.effect-speed-5 {
  --effect-speed: 500ms;
}

.effect-ease-out {
  --effect-type: ease-out;
}

.effect-ease-in {
  --effect-type: ease-in;
}

.effect-ease-in-out {
  --effect-type: ease-in-out ;
}

.effect-linear {
  --effect-type: linear;
}

.effect-hover-1 {
  filter: grayscale(1);
  transition: transform var(--effect-type, ease-out) var(--effect-speed, 300ms), filter var(--effect-type, ease-out) var(--effect-speed, 300ms);
}

.effect-hover-1:hover {
  filter: grayscale(0);
  transform: scale(1.1);
  z-index: 3;
}
