/*  ==========================================================
    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));
}

.region:has(h1) {
  padding-block-start: var(
    --first-section-padding-block-start,
    var(--space-3xl-6xl)
  );
}

#header {
  position: fixed;
  inset: 0;
  bottom: unset;
  background: oklch(var(--color-light) / 0.75);
  border-bottom: 1px solid oklch(var(--color-light) / 0.75);
  -webkit-backdrop-filter: blur(10px);
  backdrop-filter: blur(10px);
  z-index: 10;
  isolation: isolate;

  --padding-block-start: var(--space-s) !important;
  --padding-block-end: var(--space-s) !important;
  --flex-align-items: center;
  --flex-justify-content: space-between;
}

.header-logo {
  inline-size: 100px;
  inline-size: clamp(100px, 15vi, 200px);
}

.language-switcher {
  display: grid !important;
  grid-template-columns: 2em 2em;
  align-items: center;
  z-index: 15;

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

    &.active {
      border-radius: 999em;
      font-weight: var(--fw-bold);
      background-color: oklch(var(--color-light-gray));
    }
  }

  & a {
    padding: var(--space-s);
    color: oklch(var(--color-dark));
    transition: color var(--anim-fast);

    &:hover {
      color: oklch(var(--color-secondary));
    }
  }
}

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

.menu-container {
  position: fixed;
  inset: 0;
  min-block-size: 100vb;
  padding-block: var(--space-xl-4xl) !important;
  background-color: oklch(var(--color-light-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);
      transition: color var(--anim-fast);

      &:hover {
        color: oklch(var(--color-dark));
      }
    }
  }
}

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

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

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

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

.hamburger-menu {
  --inline-size: 4rem;
  --block-size: 2px;
  --space: 8px;

  position: relative;
  width: fit-content;
  cursor: pointer;
  z-index: 15;

  &:hover span {
    inline-size: var(--inline-size) !important;
  }
}

.hamburger-menu span {
  display: block;
  inline-size: var(--inline-size);
  block-size: var(--block-size);
  background: oklch(var(--color-dark));
  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;
}

.flex-layout {
  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, 1em);
}

/* ? Typography */
.eyebrow {
  position: relative;
  color: oklch(var(--color-dark-gray));
  font-variant: small-caps;
  letter-spacing: calc((var(--tracking)) * 10);

  & + * {
    --flow-space: 0.25em;
  }
}

.big-img {
  --grid-min-item-size: 45rem;

  & figure {
    position: relative;
    min-block-size: 50dvb;
  }

  & img {
    position: absolute;
    inset: 0;
    inline-size: 100%;
    block-size: 100%;
    object-fit: cover;
  }

  &.shrink-top-left img {
    clip-path: polygon(15% 0, 100% 0, 100% 100%, 0 100%);
  }

  &.shrink-bottom-right img {
    clip-path: polygon(0 0, 100% 0, 85% 100%, 0 100%);
  }

  &.shrink-top-right img {
    clip-path: polygon(0 0, 85% 0, 100% 100%, 0 100%);
  }

  &.shrink-bottm-left img {
    clip-path: polygon(0 0, 100% 0, 100% 100%, 15% 100%);
  }
}

/* ? Btns and links style */
.btn {
  position: relative;
  display: block;
  max-inline-size: fit-content;
  padding: var(--space-xs) var(--space-m);
  color: oklch(var(--color-light));
  font-weight: var(--fw-medium);
  text-decoration: none;
  background: oklch(var(--color-primary));
  background: var(--btn-bg);
  border: 1px solid oklch(var(--color-primary));
  border-radius: var(--border-radius);
  box-shadow: var(--shadow-primary-around);
  cursor: pointer;
  isolation: isolate;
  transition: box-shadow var(--anim-medium);
  z-index: 2;

  --flow-space: 1.75em;

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