/*  ==========================================================
    COMPOSITION:
    ========================================================== */

/**
 * This is the "skeleton" and should not used to style what is going to be placed inside each component
 * 
 * # This layer is responsible for:
 *  - Providing high-level flexible layouts
 *  - Determining how elements interact with each other
 *  - Creating consistent flow and rhythm
 *
 * # It should NOT:
 *  - Provide visual treatments such as colors or font styles
 *  - Provide decorative styles such as shadows and patterns
 *  - Force a browser to generate a pixel-perfect layout instead of a flexible, progressive layout
 *
 */

.region {
  padding-block-start: var(--padding-block-start, var(--space-xl-4xl));
  padding-inline-end: var(--padding-inline-end, var(--space-s-5xl));
  padding-block-end: var(--padding-block-end, var(--space-xl-4xl));
  padding-inline-start: var(--padding-inline-start, var(--space-s-5xl));
}

body .region:first-child {
  padding-block-start: var(--padding-block-start, var(--space-3xl-4xl));
}

.header {
  --padding-block-start: var(--space-s) !important;
  --padding-block-end: var(--space-s) !important;
  --flex-align-items: center;
  
  position: fixed;
  inset: 0;
  bottom: unset;
  background: oklch(var(--color-dark));
  z-index: 10;
  isolation: isolate;

  --flex-justify-content: space-between;

  & .btn {
    /* ! Remove useless vertical spacing */
    text-box-trim: trim-both;
    text-box-edge: cap alphabetic;
    /* ? Short version:  */
    text-box: trim-both cap alphabetic;
  }
}

.header-menu {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 0.25em;
}

.menu-container-underlay {
  position: fixed;
  inset: 0;
  display: none;
  background: oklch(var(--color-light) / 0.05);
  backdrop-filter: blur(10px);
  -webkit-backdrop-filter: blur(10px);
  opacity: 0;
}

.language-switcher {
  padding: 0.25em;
  display: grid;
  grid-template-columns: 2em 2em;
  gap: 0.5em;
  background: oklch(var(--color-dark));
  background: linear-gradient(
    145deg,
    oklch(var(--color-dark)),
    oklch(var(--color-dark-gray))
  );
  border: 0.5px solid oklch(var(--color-dark));
  border-radius: 999em;
  box-shadow: var(--neumorph-shadow-up-down);
  z-index: 15;

  & > li {
    display: flex;
    align-items: center;
    justify-content: center;
    aspect-ratio: 1;
    text-align: center;
    border-radius: 100vw;
    overflow-wrap: normal;
  }

  & a {
    text-decoration: none;
  }

  & .active {
    background: oklch(var(--color-dark-gray));
    background: linear-gradient(
      145deg,
      oklch(var(--color-dark-gray)),
      oklch(var(--color-dark))
    );
    color: oklch(var(--color-light)) !important;
    box-shadow: var(--neumorph-shadow-up);
    will-change: box-shadow;
    transition: box-shadow var(--anim-fast);

    &:hover {
      box-shadow: 0 0 10px oklch(var(--color-primary));
    }
  }
}

.header-logo img {
  inline-size: 80px;
  inline-size: clamp(80px, 15vi, 160px);
}

.main-nav {
  gap: var(--space-xl-m);
}

.menu-container {
  position: fixed;
  inset: 0;
  display: none;
  padding-block: var(--space-xl-4xl) !important;
  background-color: oklch(var(--color-dark-gray));
  overflow: auto;
  translate: 100% 0;
  /* ! usefull on Landscape or Ultra Wide */
  z-index: -1;

  --flex-gap: var(--space-2xl);

  & .menu {
    display: flex;
    flex-flow: column wrap;
    justify-content: center;
    align-items: center;
    gap: var(--inverse-clamp);

    & a {
      inline-size: 100%;
      block-size: 100%;
      font-size: var(--step-2);
      font-size: var(--step-ultra) !important;
      font-weight: var(--fw-black);
    }
  }
}

@media screen and (min-width: 1240px) {
  .menu-container {
    box-shadow: 0 -25px 75px oklch(var(--color-dark) / 0.25);
    left: 50%;

    --flex-justify-content: flex-start !important;

    & .menu {
      align-items: flex-start;
    }
  }
}

/* Menu effect */
.menu-container ul {
  @media (hover) {
    & > li:not(:visited) {
      scale: 1 !important;
      opacity: 1 !important;
      transition:
        scale var(--anim-bounce),
        opacity var(--anim-fast);
    }

    &:has(> li:hover) > li:not(:hover),
    &:has(> li:focus-within) > li:not(:focus-within) {
      scale: 0.75 !important;
      opacity: 0.25 !important;
    }
  }
}

/* ? Hamburger menu */
.hamburger-menu {
  padding: 0.75em;
  align-self: stretch;
  background: transparent;
}

.header-logo,
.hamburger-menu {
  position: relative;
  width: fit-content;
  cursor: pointer;
  z-index: 15;
}

.hamburger-menu span {
  --inline-size: 2rem;
  --block-size: 2px;
  --space: 6px;

  display: block;
  inline-size: var(--inline-size);
  block-size: var(--block-size);
  background: oklch(var(--color-primary));
  border-radius: 2px;
  transition: all var(--anim-fast);
}

.hamburger-menu > span + span {
  margin-block-start: var(--space);
}

.hamburger-menu span:nth-of-type(2) {
  inline-size: calc(var(--inline-size) * 0.75);
}

.hamburger-menu span:nth-of-type(3) {
  inline-size: calc(var(--inline-size) * 0.5);
}

/** Hamburger animation */
.hamburger-menu.active span {
  inline-size: var(--inline-size);
}

.hamburger-menu.active span:first-of-type {
  translate: 0 calc(var(--space) + var(--block-size));
  rotate: 45deg;
}

.hamburger-menu.active span:nth-of-type(2) {
  opacity: 0;
}

.hamburger-menu.active span:last-of-type {
  translate: 0 calc(-1 * (var(--space) + var(--block-size)));
  rotate: -45deg;
}

.hamburger-menu.active span:first-of-type {
  translate: 0 calc(var(--space) + var(--block-size));
}

/*
 ? NOTICE: This wrapper allows for the use of a true responsive sidebar.
 ? To enable it just add .has-sidebar to the target wrapper
 */
.has-sidebar {
  display: flex;
  flex-wrap: wrap;
  gap: var(--sidebar-gap, var(--space-l-xl));
}

/* Sidebar content */
.has-sidebar > :first-child {
  flex-basis: var(--sidebar-width, 16rem);
  flex-grow: 1;
}

/* Main content */
.has-sidebar > :last-child {
  flex-basis: 0;
  flex-grow: 999;
  min-inline-size: var(--content-width, 60%);
}

.grid-auto-fit {
  display: grid;
  grid-template-columns: repeat(
    var(--grid-placement, auto-fit),
    minmax(min(var(--grid-min-item-size, 32ch), 100%), 1fr)
  );
  grid-auto-rows: var(--grid-row-height, unset);
  gap: var(--gap, var(--grid-gutter));
  justify-items: var(--grid-justify-items, stretch);
  align-items: var(--grid-align-items, stretch);
  align-content: var(--grid-align-content, normal);
  container: grid-auto-fit / inline-size;
}

.subgrid {
  display: grid;
  grid-template-rows: subgrid;
  grid-row: span var(--rows-num, 2);
  justify-items: var(--subgrid-justify-items, start);
  align-items: var(--subgrid-align-items, start);
  gap: var(--subgrid-gap, 0.5em);
}

.subgrid:has(> :nth-child(3):last-child),
.subgrid[data-subgrid-rows="3"] {
  --rows-num: 3;
}
.subgrid:has(> :nth-child(4):last-child),
.subgrid[data-subgrid-rows="4"] {
  --rows-num: 4;
}
.subgrid:has(> :nth-child(5):last-child),
.subgrid[data-subgrid-rows="5"] {
  --rows-num: 5;
}

.d-flex {
  display: flex;
  flex-direction: var(--flex-direction, row);
  flex-wrap: var(--flex-wrap, wrap);
  justify-content: var(--flex-justify-content, flex-start);
  align-items: var(--flex-align-items, flex-start);
  gap: var(--flex-gap, var(--grid-gutter));
}

.flow > * + * {
  margin-block-start: var(--flow-space, 1.25em);
}

/* ? Typography */
.eyebrow {
  position: relative;
  color: oklch(var(--color-primary));

  & + * {
    --flow-space: 0.1em !important;
  }
}

/* ? Btns and links style */
@property --__glow-angle {
  syntax: "<angle>";
  inherits: true;
  initial-value: 0deg;
}

.btn {
  --__conic-gradient: from var(--__glow-angle, 0deg), var(--glow-gradient);
  --neumorph-shadow-size: 4px;
  --neumorph-shadow-blur: 8px;

  position: relative;
  display: block;
  max-inline-size: fit-content;
  padding: var(--space-s) var(--space-m);
  color: oklch(var(--color-light));
  text-decoration: none;
  font-variant: small-caps;
  background:
    linear-gradient(
        var(--bg-clr, oklch(var(--color-dark))),
        var(--bg-clr, oklch(var(--color-dark)))
      )
      padding-box,
    conic-gradient(var(--__conic-gradient)) border-box;
  border: 2px solid transparent;
  border-radius: var(--border-radius);
  box-shadow: var(--neumorph-shadow-up);
  cursor: pointer;
  isolation: isolate;
  transition-property: box-shadow, background-color;
  transition-duration: var(--anim-medium);
  animation: border-rotation var(--__timing, 7500ms) linear infinite;
  z-index: 2;

  --flow-space: 1.75em;

  &:hover {
    background-color: oklch(var(--color-primary));
    box-shadow: 0 0 20px 5px oklch(var(--color-primary) / 0.5);
  }

  &::before,
  &::after {
    content: "";
    position: absolute;
    border-radius: inherit;
  }

  &::before {
    background: var(--bg-clr, oklch(var(--color-dark)));
    inset: var(--__glow-thickness, 0.25em);
    filter: blur(var(--__glow-spread, 0.25em));
    z-index: -1;
  }

  &::after {
    inset: calc(-1 * var(--__glow-thickness, 0.25em));
    background: conic-gradient(var(--__conic-gradient));
    filter: blur(var(--__glow-spread, 0.25em));
    opacity: var(--__glow-intensity, 0.75);
    z-index: -2;
  }
}

@media (prefers-reduced-motion: no-preference) {
  @keyframes border-rotation {
    100% {
      --__glow-angle: 360deg;
    }
  }
}