:root {
  --white: #fff;
  --black: #000;

  background: var(--white);
  color: var(--black);

  font-size: calc(0.65em + 1vmin);

  --size-illu: calc(10 * 1.6em);
}

body,
html,
:root {
  margin: 0;
  padding: 0;
  font-family: "Apple Garamond Light", sans-serif;
  -webkit-font-smoothing: subpixel-antialiased;
  /*font-family: 'Lustria', serif;*/
}

::selection {
  background: var(--yellow);
  color: color-mix(in lab, var(--black) 50%, var(--yellow));
}

a:link {
  color: var(--blue);
}
a:hover {
  text-decoration: none;
}
a:visited {
  color: var(--pink);
}

.nav {
  position: fixed;
  width: 20vw;
  top: 0;
  bottom: 0;
  right: 0;

  box-shadow: 0 0 0 0.15em var(--white);
  z-index: 10;

  background: var(--white);
  padding-left: 5vw;

  transform: translateX(20vw);
  transition: 200ms transform cubic-bezier(0.3, 0.7, 0, 1);

  ul,
  li {
    list-style: none;
    padding: 0;
    margin: 0;
  }

  ul {
    box-shadow: inset 0 0 0 0.05em var(--black);
    flex: 0 0 calc(100vh - 20vw);
    overflow-y: auto;
  }

  li + li {
    border-top: 0.05em solid var(--black);
  }

  input {
    display: none;
  }

  label {
    display: flex;
    cursor: pointer;
    padding: 0.25rem;
    font-size: 0.8em;

    div {
      margin-left: 0.5em;
    }
  }

  label:has(input:checked) {
    background: var(--black);
    color: var(--white);
  }

  strong {
    display: block;
    border-top: 0.05em solid var(--black);
  }

  h3 {
    margin: 0;

    span {
      position: relative;
      display: inline-block;
      top: -0.25em;
      font-size: 0.6em;
    }
  }
}

.nav:hover {
  transform: translateX(0);
}

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

.navcube {
  height: 25vw;
  flex: 0 0 25vw;
  background: var(--white);
}

.nav::before {
  content: "";
  position: absolute;
  top: 0;
  left: 0;
  bottom: 0;
  width: 5vw;

  background: linear-gradient(0deg, var(--gradient)),
    linear-gradient(0deg, var(--gradientHard));
  background-size:
    calc(1px + 50%) 100%,
    50% 100%;
  background-repeat: no-repeat;
  background-position:
    0 0,
    100% 0;
}

.main {
  position: relative;
}

.block {
  display: flex;
  gap: 4rem;
  padding: 6vmin 6rem;
}
.block--vertical {
  flex-direction: column;
  gap: 0rem;
  .block__text p {
    max-width: 70ch;
  }
}

.block__text {
  font-size: 0.8em;
  line-height: 1.4;

  h1,
  h2 {
    margin-left: -0.1ex;
  }

  h1 + p,
  h2 + p {
    margin-top: 1.5em;
  }

  p {
    max-width: 50ch;
  }
}

.intro {
  flex-direction: column;
  width: max-content;
  margin-top: 20vmin;
  margin-left: calc(var(--size-illu) + 4em);

  align-items: center;
  p {
    max-width: 35ch;
  }
}

.intro-text {
  font-size: 0.8em;
  line-height: 1.4;
  h1 + p {
    margin-top: 0;
    max-width: 35ch;
  }
}

h1,
h2,
h3 {
  font-family: "Apple Garamond Light", sans-serif;
  font-weight: 100;
  line-height: 1;
}

h1 {
  font-size: 5rem;
  margin: 0;
  margin-bottom: 0.25ex;
}

h2 {
  font-size: 2.5rem;
  margin: 0.5em 0 0;
  margin-bottom: 0.25ex;
}

/* itten color wheel */
.c {
  position: relative;
  width: var(--size-illu);
  flex: 0 0 var(--size-illu);
  aspect-ratio: 1;
  background: conic-gradient(
    from calc(360deg / 48 / -2) at 50% 50%,
    var(--stops-48)
  );
  border-radius: 50%;
  box-shadow: 0 0 0 0.15em var(--white);
}

.c::before {
  content: "";
  position: absolute;
  background: var(--white);
  inset: -0.2em;
  border-radius: 50%;
  transition: 400ms transform cubic-bezier(0.3, 0.7, 0, 1);
  transform: scale(1);
}

.c:hover::before {
  transform: scale(0.76);
}

.c .c {
  margin-left: 0;
  position: absolute;
  inset: 1.5em;
  width: auto;
  background: conic-gradient(
    from calc(360deg / 24 / -2) at 50% 50%,
    var(--stops-24)
  );
}

.c .c .c {
  background: conic-gradient(
    from calc(360deg / 12 / -2) at 50% 50%,
    var(--stops-12)
  );
}

.c .c .c::before {
  display: none;
  content: "";
  position: absolute;
  background: var(--w);
  inset: 1.5em;
  border-radius: 50%;
}

.c .c .c .c {
  background: conic-gradient(var(--stops-6));
}

.c .c .c .c::before {
  display: none;
}

.c .c .c .c .c {
  background: conic-gradient(
    from calc(360deg / 3 / -2) at 50% 50%,
    var(--stops-3)
  );
  -webkit-clip-path: polygon(50% 0%, 6% 75%, 94% 75%);
  clip-path: polygon(50% 0%, 6% 75%, 94% 75%);
  inset: 0;
}

/* color cube */
.edges {
  --w: calc(var(--size-illu) - 4em);
  --padding-top: 3%;
  --padding-left: 33%;
  --padding-right: 7%;
  --height: 60%;
  --width: 60%;

  --padding-top-front: 30%;
  --padding-left-front: 6%;

  margin: 2em;

  position: relative;
  width: var(--w);
  height: var(--w);
  flex: 0 0 var(--w);

  input {
    appearance: none;
    padding: 0;
    border: 0;
    opacity: 0;
    cursor: pointer;
  }

  span {
    display: block;
    background: var(--c);
    background: var(--white);
    width: 0.5rem;
    height: 0.5rem;
    border-radius: 50%;
    box-shadow:
      0 0 0 0.05em var(--black),
      0 0 0 0.1em var(--white),
      0 0 0 0.2em var(--c),
      0 0 0 0.3em var(--white);
    transition:
      300ms box-shadow cubic-bezier(0.3, 0.7, 0, 1) 150ms,
      200ms background linear;
  }
}

.edges label {
  position: absolute;
  transform: translate(-50%, -50%);
  cursor: pointer;
}

.edges label:hover span {
  background: var(--c);
  box-shadow:
    0 0 0 0.1em var(--black),
    0 0 0 0.1em var(--white),
    0 0 0 0.2em var(--white),
    0 0 0 0.3em var(--c);
}

.edges b {
  position: absolute;
  left: 100%;
  top: 50%;
  transform: translate(0.2rem, 0.2rem);
  line-height: 1;
  font-size: 0.8em;
}

.edges .g {
  left: var(--padding-left);
  top: var(--padding-top);
}

.edges .b {
  left: var(--padding-left);
  top: calc(var(--padding-top) + var(--height));
}

.edges .v {
  left: calc(var(--padding-left) + var(--width));
  top: calc(var(--padding-top) + var(--height));
}

.edges .black {
  left: calc(var(--padding-left) + var(--width));
  top: var(--padding-top);
}

.edges .y {
  left: var(--padding-left-front);
  top: var(--padding-top-front);
}

.edges .w {
  left: var(--padding-left-front);
  top: calc(var(--padding-top-front) + var(--height));
}

.edges .r {
  left: calc(var(--padding-left-front) + var(--width));
  top: calc(var(--padding-top-front) + var(--height));
}

.edges .o {
  left: calc(var(--padding-left-front) + var(--width));
  top: var(--padding-top-front);
}

.cube {
  display: block;
}

.cube g {
  stroke: currentColor;
  stroke-width: 0.5;
  fill: none;
}

.cube__front {
  fill: var(--white);
}

.cube__coverline {
  fill: none;
  stroke: var(--black);
  stroke-dasharray: 1.5 1.5;
}

.gradient {
  position: relative;

  width: var(--size-illu);
  flex: 0 0 var(--size-illu);
  height: calc(var(--size-illu) / 2);
  background-image: var(--g);
  background-size: 100% calc(100% / var(--gs) + 1px);
  background-position: var(--gp);
  background-repeat: no-repeat;
}

.hsl-wheel {
  --w: calc(var(--size-illu) - 2em);

  margin-top: 2em;
  margin-bottom: 2em;
  margin-right: 2em;

  position: relative;
  width: var(--w);
  height: var(--w);
  flex: 0 0 var(--w);
}

.hsl-wheel::before {
  content: "";
  position: absolute;
  inset: 0.37em;
  border-radius: 50%;
  box-shadow: inset 0 0 0 0.03em var(--black);
}

.hsl-wheel__rim {
  position: absolute;
  inset: 0;
  border-radius: 50%;
  transform: scale(calc(0.2 + var(--i) * 0.6));
}

.hsl-wheel__rim--0 {
  background: conic-gradient(var(--gradient-l0));
}
.hsl-wheel__rim--0::before {
  content: "";
  position: absolute;
  inset: 0;
  background: var(--white);
  border-radius: 50%;
  transform: scale(0.5);
}
.hsl-wheel__rim--1 {
  background: conic-gradient(var(--gradient-l1));
}
.hsl-wheel__rim--2 {
  background: conic-gradient(var(--gradient-l2));
}
.hsl-wheel__rim--3 {
  background: conic-gradient(var(--gradient-l3));
}
.hsl-wheel__rim--4 {
  background: conic-gradient(var(--gradient-l4));
}
.hsl-wheel__rim--5 {
  background: conic-gradient(var(--gradient-l5));
}
.hsl-wheel__rim--6 {
  background: conic-gradient(var(--gradient-l6));
}
.hsl-wheel__rim--7 {
  background: conic-gradient(var(--gradient-l7));
}
.hsl-wheel__rim--8 {
  background: conic-gradient(var(--gradient-l8));
}
.hsl-wheel__rim--9 {
  background: conic-gradient(var(--gradient-l9));
}

.hsl-wheel__label {
  position: absolute;
  width: 100%;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%) rotate(calc(var(--i) * 360deg - 90deg));
  font-size: 0.6em;
  line-height: 1;
}

.hsl-wheel__label b {
  position: absolute;
  left: 100%;
  top: 50%;
  transform: translateY(-50%) translateX(1em);
  font-style: normal;
}

.hsl-wheel__label b::after {
  content: "";
  position: absolute;
  height: 1px;
  width: 0.5em;
  background: var(--black);
  top: 50%;
  right: 100%;
  transform: translateX(-0.5em);
  display: none;
}

.hsl-wheel__label b::before {
  content: "";
  position: absolute;
  width: 0.8em;
  height: 0.8em;
  background: var(--c);
  border-radius: 50%;
  top: 50%;
  right: 100%;
  transform: translateX(-1.25em) translateY(-50%);
  box-shadow:
    0 0 0 0.05em var(--c),
    0 0 0 0.2em var(--white),
    inset 0 0 0 0.1em var(--white);
}

.ramp-list {
  display: flex;
  gap: 10%;
  flex-wrap: wrap;
  max-width: 40rem;
}

.ramp {
  flex: 0 0 calc(25% - 10%);
}

.ramp__step {
  position: relative;
  transform: rotate(calc(var(--rnd) * 5deg))
    translateX(calc(var(--rnd) * 0.5em));
  height: calc(0.5rem + var(--rnd2) * 1.5rem);
  transition: 400ms height cubic-bezier(0.3, 0.7, 0, 1) 100ms;
}

.ramp__step + .ramp__step {
  margin-top: -0.25em;
}

.ramp__inner {
  position: absolute;
  height: min(100%, 6.5rem);
  width: 100%;
  background: var(--c);
  box-shadow: 0 0 0 0.05em var(--white);
  overflow: hidden;
  transform: rotate(0) scale(0.8);
  transition: 400ms transform cubic-bezier(0.3, 0.7, 0, 1) 350ms;
}

.ramp__label {
  position: absolute;
  top: 6.5rem;
  left: 1px;
  right: 1px;

  transform: translateY(0);

  font-size: 0.6em;
  background: var(--white);
  padding: 0.25em 0.5em;
  transition: 200ms transform ease-out 400ms;
  span {
    display: block;
  }
  span + span {
    opacity: 0;
    transition: 200ms opacity ease-out 600ms;
  }
}

.ramp__step--active,
.ramp__step:hover {
  height: 7rem;
  .ramp__label {
    transform: translateY(calc(-100% - 1px));
    span {
      opacity: 1;
    }
  }
  .ramp__inner {
    transform: rotate(calc(var(--rnd) * -5deg)) scale(1);
  }
}

.ramp:has(:hover) .ramp__step--active:not(:hover) {
  height: calc(0.5rem + var(--rnd2) * 1.5rem);

  .ramp__label {
    transform: translateY(0);
    span {
      opacity: 0;
    }
  }
  .ramp__inner {
    transform: rotate(0) scale(0.8);
  }
}

.ramp-list h2 {
  text-align: center;
  margin-bottom: 0.5em;
  margin-top: 1em;
}

.select {
  position: fixed;
  bottom: 2rem;
  right: 5rem;
  background: var(--white);
  color: var(--black);
  font: inherit;
  padding: 0.5em 1em;
}

.converter {
  --w: calc(var(--size-illu) - 4em);
  width: var(--w);
  margin: 2em;
  position: relative;
  aspect-ratio: 1;
}

.swatch {
  position: absolute;
  display: block;
  box-shadow: 0 0 0 0.05rem var(--black);
  padding: 0.3rem;
  padding-bottom: 0;
  width: 6rem;
  background: var(--white);
}

label.swatch {
  cursor: pointer;
}

.swatch--ryb {
  top: 0;
  right: 0;
}

.swatch--rgb {
  left: 2em;
  bottom: 0;
  background: #fff;
}

.swatch__color {
  width: 100%;
  aspect-ratio: 1;
  background: var(--c, var(--black));
}

.swatch__input {
  position: absolute;
  top: 0;
  opacity: 0;
}

.swatch__value,
.swatch__name {
  display: block;
  font-size: 0.8em;
  line-height: 1;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.swatch__name {
  padding-bottom: 0.25rem;
}

.swatch__value {
  font-size: 1rem;
}

.swatch__label {
  padding: 0.25em 0 0;
}

.smoothwheel {
  width: 60vw;
  aspect-ratio: 1;

  /*
  position: absolute;
  bottom: 0;
  left: 50%;
  transform: translateX(-50%) translateY(50%);
  z-index: -1;
  opacity: 0.5;
  */

  background: radial-gradient(
      closest-side,
      var(--black),
      rgba(0, 0, 0, 0),
      var(--white) 80%
    ),
    conic-gradient(from 0deg, var(--gradient));
  display: none;
}
