@import url("https://fonts.googleapis.com/css2?family=Outfit:wght@100..900&display=swap");
*,
*::after,
*::before {
  margin: 0;
  padding: 0;
  box-sizing: inherit; }

html {
  box-sizing: border-box;
  font-size: 62.5%;
  scrollbar-width: none; }
  @media only screen and (max-width: 53.125em) {
    html {
      font-size: 50%; } }

body {
  font-family: "Outfit", sans-serif;
  color: #e1e1e1;
  background: radial-gradient(circle at 10% 20%, #141414 0%, #0a0a0a 90.2%), 50% 100% url("../img/bg-contact.png");
  background-repeat: no-repeat;
  background-size: contain;
  background-blend-mode: overlay;
  font-weight: 300; }

body,
html {
  overflow-x: hidden; }

.background {
  position: absolute;
  z-index: -100; }
  .background--1 {
    filter: blur(1rem);
    top: 0; }
  .background--2 {
    bottom: 0;
    left: 50%;
    transform: translateX(-50%);
    filter: grayscale(1);
    background-image: linear-gradient(transparent, transparent);
    mask-image: linear-gradient(rgba(0, 0, 0, 0), black, rgba(0, 0, 0, 0)); }

html.lenis,
html.lenis body {
  height: auto; }

.lenis.lenis-smooth {
  scroll-behavior: auto !important; }

.lenis.lenis-smooth [data-lenis-prevent] {
  overscroll-behavior: contain; }

.lenis.lenis-stopped {
  overflow: hidden; }

.lenis.lenis-smooth iframe {
  pointer-events: none; }

.icon {
  font-style: normal; }
  .icon--info {
    margin-right: 3rem;
    cursor: default; }
  .icon--link {
    height: 100%;
    display: flex;
    justify-content: center;
    align-items: center; }
  .icon--send {
    width: 2rem;
    height: 2rem;
    margin-right: -0.5rem;
    transform: all 0.3s ease; }
    .icon--send svg {
      height: 100%;
      width: 100%;
      transition: all 0.3s; }

.button--submit {
  font-size: 1.7rem;
  font-family: inherit;
  color: #e1e1e1;
  background-color: transparent;
  backdrop-filter: blur(1rem);
  border: 1px solid #808080;
  border-radius: 2rem;
  display: flex;
  justify-content: center;
  align-items: center;
  gap: 0.5rem;
  padding: 1rem 2rem;
  cursor: pointer;
  z-index: 10;
  overflow: hidden;
  transition: all 0.3s ease; }
  @media only screen and (max-width: 37.5em) {
    .button--submit {
      width: 100%; } }
  .button--submit.error, .button--submit.error:hover {
    border: 1px solid transparent;
    color: black;
    background-color: #8a0606; }
  .button--submit:hover {
    border: 1px solid transparent;
    color: black;
    background-color: #e1e1e1; }
    .button--submit:hover svg {
      transform: translateY(-3px);
      color: black; }
  .button--submit:active, .button--submit:focus {
    scale: 1.1; }
  .button--submit:disabled {
    color: black;
    background-color: #0c960c;
    border: 1px solid transparent;
    cursor: not-allowed; }
    .button--submit:disabled svg {
      color: black; }
    .button--submit:disabled + .form__submit-info {
      opacity: 1; }
    .button--submit:disabled:hover {
      background-color: #808080; }

.button--back {
  display: inline-block;
  position: absolute;
  right: 0;
  top: 0;
  margin: 5rem;
  font-size: 2rem;
  padding: 0.5rem;
  color: #e1e1e1;
  transition: all 0.3s ease; }
  .button--back:hover, .button--back:focus, .button--back:active {
    color: #102597;
    background-color: #e1e1e1; }

@keyframes l20-1 {
  0% {
    clip-path: polygon(50% 50%, 0 0, 50% 0%, 50% 0%, 50% 0%, 50% 0%, 50% 0%); }
  12.5% {
    clip-path: polygon(50% 50%, 0 0, 50% 0%, 100% 0%, 100% 0%, 100% 0%, 100% 0%); }
  25% {
    clip-path: polygon(50% 50%, 0 0, 50% 0%, 100% 0%, 100% 100%, 100% 100%, 100% 100%); }
  50% {
    clip-path: polygon(50% 50%, 0 0, 50% 0%, 100% 0%, 100% 100%, 50% 100%, 0% 100%); }
  62.5% {
    clip-path: polygon(50% 50%, 100% 0, 100% 0%, 100% 0%, 100% 100%, 50% 100%, 0% 100%); }
  75% {
    clip-path: polygon(50% 50%, 100% 100%, 100% 100%, 100% 100%, 100% 100%, 50% 100%, 0% 100%); }
  100% {
    clip-path: polygon(50% 50%, 50% 100%, 50% 100%, 50% 100%, 50% 100%, 50% 100%, 0% 100%); } }

@keyframes l20-2 {
  0% {
    transform: scaleY(1) rotate(0deg); }
  49.99% {
    transform: scaleY(1) rotate(135deg); }
  50% {
    transform: scaleY(-1) rotate(0deg); }
  100% {
    transform: scaleY(-1) rotate(-135deg); } }

.loader {
  width: 50px;
  aspect-ratio: 1;
  border-radius: 50%;
  border: 5px solid white;
  animation: l20-1 0.8s infinite linear alternate, l20-2 1.6s infinite linear; }
  .loader__img {
    width: 200px; }

.loader-container {
  position: fixed;
  width: 100vw;
  height: 100vh;
  display: grid;
  place-content: center;
  background-color: black;
  z-index: 10001;
  transition: transform 1s cubic-bezier(1, -0.01, 1, -0.03); }
  .loader-container div {
    display: flex;
    flex-direction: column;
    align-items: center;
    transform: translateY(-25%); }

.weight-light {
  font-weight: 100; }

.heading-primary, .heading-secondary, .heading-tertiary, .heading-4, .heading-5 {
  font-family: "Outfit", sans-serif;
  font-weight: bold;
  text-transform: lowercase; }

.heading-primary {
  font-size: 15vw;
  line-height: 1;
  letter-spacing: -3rem;
  white-space: nowrap;
  text-align: center;
  color: transparent;
  z-index: 10; }
  @media only screen and (max-width: 75em) {
    .heading-primary {
      font-size: 20vw;
      letter-spacing: -1rem;
      white-space: wrap; } }
  @media only screen and (max-width: 37.5em) {
    .heading-primary {
      line-height: normal; } }
  .heading-primary-wrapper {
    position: relative;
    display: flex;
    align-items: center;
    justify-content: center;
    top: 4rem; }
    @media only screen and (max-width: 37.5em) {
      .heading-primary-wrapper {
        flex-direction: column; } }
  .heading-primary-background {
    position: absolute;
    height: 100%;
    width: 90%;
    background-image: url(../img/h1.svg);
    background-size: contain;
    background-position: center;
    background-repeat: no-repeat;
    opacity: 0.7; }
    @media only screen and (max-width: 75em) {
      .heading-primary-background {
        background-image: url(../img/h1-rows.svg);
        background-size: 80%; } }
    @media only screen and (max-width: 37.5em) {
      .heading-primary-background {
        background-size: 90%;
        width: 100%; } }

.heading-secondary {
  display: inline-block;
  position: absolute;
  bottom: 10%;
  left: 5%;
  font-size: 5rem; }
  @media only screen and (max-width: 75em) {
    .heading-secondary {
      left: 14%;
      bottom: 50%; } }
  @media only screen and (max-width: 37.5em) {
    .heading-secondary {
      left: 50%;
      transform: translateX(-50%);
      bottom: -20%; } }
  .heading-secondary--gradient {
    background: #36d1dc;
    /* fallback for old browsers */
    background: -webkit-linear-gradient(to right, #36d1dc, #5b86e5);
    /* Chrome 10-25, Safari 5.1-6 */
    background: linear-gradient(to right, #36d1dc, #5b86e5);
    /* W3C, IE 10+/ Edge, Firefox 16+, Chrome 26+, Opera 12+, Safari 7+ */
    background-clip: text;
    -webkit-text-fill-color: transparent; }

.heading-tertiary {
  color: rgba(225, 225, 225, 0.8);
  font-weight: 300;
  font-size: 3.5rem; }

.heading-4 {
  font-size: 2rem;
  font-weight: 300;
  text-transform: none;
  background-color: #0a0a0a;
  border-radius: 1.5rem;
  display: inline-block;
  padding: 0.5rem 1rem;
  transition: all 0.3s ease; }

.heading-5 {
  font-size: 1rem;
  font-weight: 700;
  text-transform: none;
  background-color: #0a0a0a;
  border-radius: 1.5rem;
  display: inline-block;
  padding: 0.5rem 1rem;
  margin-top: 0.5rem;
  transition: all 0.3s ease; }

.about-me {
  position: absolute;
  width: 100vw;
  min-height: 100vh;
  display: flex;
  font-size: 3.5rem;
  font-weight: 400;
  background-image: linear-gradient(#050505, #050505), url("../img/bg-about-me.png"), linear-gradient(rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.5));
  background-size: cover;
  background-repeat: no-repeat;
  background-blend-mode: overlay;
  z-index: 10001;
  transition: transform 1s cubic-bezier(1, -0.01, 1, -0.03); }
  .about-me__info {
    max-width: 100rem;
    padding: 5rem;
    display: flex;
    flex-direction: column;
    gap: 5rem;
    overflow: auto; }
  .about-me__main {
    font-size: 2.5rem;
    color: #aeaeae; }
    .about-me__main p:not(:last-child) {
      margin-bottom: 2rem; }

.header {
  font-size: 2rem;
  backdrop-filter: blur(10px);
  -webkit-mask-image: linear-gradient(to bottom, black 60%, rgba(0, 0, 0, 0) 100%);
  mask-image: linear-gradient(to bottom, black 0, rgba(0, 0, 0, 0) 100%);
  position: fixed;
  width: 100vw;
  z-index: 10000; }
  @media only screen and (max-width: 18.75em) {
    .header {
      font-size: 1.7rem; } }
  .header__nav {
    padding: 2rem 3rem; }
    @media only screen and (max-width: 18.75em) {
      .header__nav {
        padding: 2rem 1rem; } }
  .header__list {
    list-style: none;
    display: flex;
    align-items: center;
    gap: 2rem; }
    .header__list *:first-child {
      margin-right: auto; }
  .header__link {
    text-transform: lowercase;
    text-decoration: none;
    color: #e1e1e1;
    cursor: pointer; }
  .header__about-me {
    text-transform: lowercase;
    text-decoration: none;
    color: #e1e1e1;
    cursor: pointer;
    text-wrap: nowrap; }

.highlight {
  display: block;
  position: absolute;
  top: 0;
  left: 0;
  transform: translateX(100vw);
  height: 2px;
  background-color: #e1e1e1;
  filter: opacity(50%);
  transition: all 0.3s; }

.hero {
  position: relative;
  width: 100vw;
  height: MAX(100vh, 500px);
  background-image: linear-gradient(rgba(0, 0, 0, 0.5), transparent); }
  .hero__wrapper {
    padding: 0 5rem; }
    @media only screen and (max-width: 53.125em) {
      .hero__wrapper {
        position: relative;
        top: 5rem; } }
    @media only screen and (max-width: 37.5em) {
      .hero__wrapper {
        padding: 0 2rem;
        top: 10rem; } }
  .hero__info {
    position: relative;
    font-size: 3.5rem;
    line-height: 1.4;
    display: grid;
    grid-template-rows: auto 1fr;
    max-width: 120rem;
    margin: 0 auto;
    height: 45vh; }
    @media only screen and (max-width: 75em) {
      .hero__info {
        height: 30vh; } }
    @media only screen and (max-width: 37.5em) {
      .hero__info {
        height: 50vh; } }
    .hero__info p {
      color: rgba(225, 225, 225, 0.5);
      font-weight: bold;
      text-transform: lowercase;
      opacity: 0.5; }
  .hero__links {
    list-style: none;
    margin: 0 auto;
    margin-top: auto;
    display: flex;
    gap: 2rem; }
    .hero__links li {
      width: 6rem;
      height: 6rem;
      border-radius: 50%;
      background-color: black;
      overflow: hidden;
      transition: transform 0.3s ease; }
      .hero__links li a:focus img,
      .hero__links li a:active img {
        scale: 1.1; }
      .hero__links li img {
        background-color: #e1e1e1;
        border-radius: 50%;
        backface-visibility: hidden;
        -webkit-backface-visibility: hidden;
        transform: translateZ(0) scale(1, 1);
        -webkit-transform: translateZ(0) scale(1, 1);
        width: 6rem;
        height: 6rem;
        scale: 1.05;
        transition: scale 0.3s ease; }
      .hero__links li:hover {
        transform: scale(1.2); }
    .hero__links:hover li:not(:hover) {
      transform: scale(0.7); }

.projects {
  position: relative;
  max-width: MIN(120rem, 90vw);
  margin: 0 auto; }
  .projects__wrapper {
    padding: 5rem 0;
    position: relative;
    opacity: 0;
    transform: translateY(100px); }
    .projects__wrapper:first-child {
      padding-top: 15rem; }
  .projects__list {
    list-style: none;
    padding: 5rem;
    display: grid;
    gap: 5rem;
    grid-template-columns: repeat(auto-fit, 30rem);
    align-items: end;
    justify-content: center; }
    .projects__list:has(.projects__item:hover) .projects__item:not(:hover) img,
    .projects__list:has(.projects__item:focus) .projects__item:not(:focus) img,
    .projects__list:has(.projects__item:active) .projects__item:not(:active) img {
      filter: blur(0.5rem) grayscale(90%); }
  .projects__item {
    height: 45rem;
    position: relative;
    border-radius: 2rem;
    overflow: hidden;
    will-change: transform;
    transition: transform 0.3s cubic-bezier(0.68, -0.6, 0.32, 1.6); }
    .projects__item-info {
      height: 100%;
      top: 1rem;
      left: 0.3rem;
      padding: 1rem;
      user-select: none;
      position: relative;
      z-index: 100; }
      .projects__item-info-desc {
        color: #e1e1e1;
        font-size: 2rem;
        font-weight: 100;
        max-width: 60ch;
        margin-top: 1rem;
        transition: transform 0.3s ease; }
      .projects__item-info-technologies {
        color: #e1e1e1;
        font-size: 1.3rem;
        transition: transform 0.3s ease; }
      .projects__item-info-actions {
        display: flex;
        gap: .5rem;
        justify-content: left;
        margin-top: 1rem;
        transition: transform .3s ease; }
      .projects__item-info-link {
        color: #e1e1e1;
        text-decoration: none;
        font-size: 1.5rem; }
        .projects__item-info-link > :hover {
          color: black;
          background-color: #e1e1e1;
          box-shadow: 0 0 2rem #e1e1e1; }
        .projects__item-info-link > p {
          transition: all .3s ease;
          padding: .1rem .5rem;
          width: max-content;
          border: 1px solid #e1e1e1;
          border-radius: 1rem;
          display: flex;
          gap: .5rem;
          align-items: center;
          margin-left: auto; }
          .projects__item-info-link > p > i > img {
            top: 2px;
            position: relative;
            height: 1.7rem;
            width: 1.7rem;
            border-radius: 50%; }
      .projects__item-info-date {
        width: 100%;
        position: absolute;
        bottom: 2rem;
        right: 2rem;
        text-align: right;
        transition: transform .3s ease; }
    .projects__item--lower {
      height: 30rem; }
      @media only screen and (max-width: 53.125em) {
        .projects__item--lower {
          height: 40rem; } }
    .projects__item--wider {
      grid-column: 1 / -1; }
    .projects__item--medium {
      grid-column: span 2;
      align-self: start; }
    .projects__item > div {
      color: inherit;
      text-decoration: none;
      display: block;
      width: 100%;
      height: 100%;
      position: relative; }
      .projects__item > div > img {
        position: absolute;
        top: 0;
        left: 0;
        width: 100%;
        height: 100%;
        object-fit: cover;
        transform: scale(1.1);
        transition: filter 0.3s ease;
        z-index: -10; }
      .projects__item > div:hover > img,
      .projects__item > div:focus > img,
      .projects__item > div:active > img {
        filter: blur(5px) grayscale(100%) brightness(10%); }
      .projects__item > div:hover .projects__item-info p,
      .projects__item > div:focus .projects__item-info p,
      .projects__item > div:active .projects__item-info p,
      .projects__item > div:hover .projects__item-info div,
      .projects__item > div:focus .projects__item-info div,
      .projects__item > div:active .projects__item-info div {
        transform: translateX(0); }
      .projects__item > div:hover .projects__item-info h4,
      .projects__item > div:focus .projects__item-info h4,
      .projects__item > div:active .projects__item-info h4 {
        background-color: transparent; }
      .projects__item > div:hover .heading-4,
      .projects__item > div:focus .heading-4,
      .projects__item > div:active .heading-4 {
        padding: 0.5rem 0; }
      .projects__item > div:hover .heading-5,
      .projects__item > div:focus .heading-5,
      .projects__item > div:active .heading-5 {
        position: absolute;
        transform: translate(-150%); }
      .projects__item > div:visited {
        color: white; }
    .projects__item:hover, .projects__item:has(a:focus), .projects__item:has(a:active) {
      transform: scale(1.2);
      z-index: 100; }
    .projects__item:nth-child(odd) .projects__item-info > p,
    .projects__item:nth-child(odd) .projects__item-info div {
      transform: translateX(200%); }
    .projects__item:nth-child(even) .projects__item-info > p,
    .projects__item:nth-child(even) .projects__item-info div {
      transform: translateX(-200%); }

.image-desktop {
  display: block; }

.image-medium {
  display: none; }

.image-mobile {
  display: none; }

@media only screen and (max-width: 1223px) {
  .image-desktop {
    display: none; }
  .image-medium {
    display: block; } }

@media only screen and (max-width: 666px) {
  .projects__item--medium {
    grid-column: span 1; }
  .image-medium {
    display: none; }
  .image-mobile {
    display: block; } }

.decoration {
  position: relative;
  padding: 10rem 0 5rem;
  user-select: none;
  background-image: linear-gradient(transparent, transparent);
  mask-image: linear-gradient(rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.15), rgba(0, 0, 0, 0));
  overflow: hidden; }
  .decoration__background {
    height: 10vw;
    width: 200%;
    position: relative;
    left: -50%;
    background-image: url("./../img/mateuszoleksy.svg");
    background-size: contain;
    background-repeat: no-repeat;
    background-position-x: center;
    opacity: 0%; }
  .decoration__text {
    font-size: 5vw;
    font-weight: bold;
    white-space: nowrap;
    text-align: center;
    margin-top: -6vw;
    position: absolute;
    color: #e1e1e1;
    opacity: 0%;
    transform: translateX(-500px); }

.contact {
  font-size: 3rem;
  color: rgba(225, 225, 225, 0.8);
  max-width: MIN(120rem, 90vw);
  margin: 10rem auto 0;
  position: relative; }
  .contact-email {
    display: inline-block;
    position: relative;
    padding: 0.5rem;
    color: #e1e1e1;
    transition: all 0.3s ease; }
    @media only screen and (max-width: 37.5em) {
      .contact-email {
        font-size: 2.5rem; } }
    @media only screen and (max-width: 18.75em) {
      .contact-email {
        font-size: 2rem; } }
    .contact-email__tooltip {
      position: absolute;
      bottom: -4rem;
      right: 0;
      font-size: 1.5rem;
      padding: 0.2rem 1rem;
      height: 50%;
      background-color: #e1e1e1;
      color: black;
      opacity: 0;
      transition: opacity 0.3s ease; }
      .contact-email__tooltip::after {
        content: "";
        position: absolute;
        left: 50%;
        top: -20%;
        transform: translateX(-50%) rotate(45deg);
        width: 1rem;
        height: 1rem;
        background-color: #e1e1e1;
        z-index: -1; }
    .contact-email:hover, .contact-email:focus, .contact-email:active {
      color: #102597;
      background-color: #e1e1e1; }

.form {
  width: 90%;
  margin: 0 auto;
  padding: 7rem 5rem; }
  @media only screen and (max-width: 37.5em) {
    .form {
      padding: 7rem 0; } }
  .form__main-info {
    display: flex;
    flex-wrap: wrap;
    row-gap: 4rem;
    column-gap: 2rem; }
  .form__label {
    visibility: visible;
    opacity: 1;
    font-size: 2rem;
    position: absolute;
    top: 0;
    display: block;
    transform: translateY(-3rem);
    transition: all 0.3s ease; }
  .form__input {
    font-size: 2rem;
    font-family: inherit;
    color: #e1e1e1;
    width: 100%;
    padding: 1rem 3rem;
    border-radius: 3rem;
    background-color: transparent;
    backdrop-filter: blur(1rem);
    outline: none;
    border: 1px solid #808080;
    transition: border-color 0.3s ease; }
    .form__input:placeholder-shown + .form__label {
      visibility: hidden;
      opacity: 0;
      transform: translateY(0) translateX(1rem); }
    .form__input:not(:placeholder-shown):valid {
      border-color: #0c960c; }
    .form__input:focus, .form__input:focus:invalid {
      border-color: #0051ff; }
    .form__input:not(:placeholder-shown):invalid, .form__input.invalid:not(:placeholder-shown) {
      border-color: #8a0606; }
  .form__message {
    margin-top: 2rem; }
  .form__area {
    display: block;
    resize: none;
    scrollbar-width: none;
    scroll-behavior: smooth;
    width: 100%;
    height: 25rem; }
  .form__submit {
    display: flex;
    flex-direction: row-reverse;
    align-items: center;
    justify-content: end;
    margin-top: 2rem; }
    @media only screen and (max-width: 37.5em) {
      .form__submit {
        display: block; } }
    .form__submit-info {
      font-size: 1.7rem;
      margin: 0 1.5rem;
      color: #0c960c;
      opacity: 0;
      z-index: -100;
      transition: opacity 0.9s cubic-bezier(0.2, 0.67, 0.77, 1.25); }
      @media only screen and (max-width: 37.5em) {
        .form__submit-info {
          margin: 1.5rem; } }

.input-container {
  position: relative; }
  @media only screen and (max-width: 37.5em) {
    .input-container {
      width: 100%; } }

.footer {
  font-size: 2rem;
  text-transform: lowercase;
  max-width: MIN(120rem, 90vw);
  margin: 0 auto;
  margin-bottom: 10rem; }
  .footer p {
    display: flex;
    justify-content: space-between; }
