aboutsummaryrefslogtreecommitdiffstats
path: root/htdocs/src/scss/layout/_grid.scss
blob: 37496783c378c14d4a6dca81547b649ca1473664 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
@use "../abstracts/functions" as fun;
@use "../abstracts/mixins" as mix;

.body {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  grid-template-rows: minmax(0, 1fr) max-content;
  height: 100vh;
  position: relative;

  @include mix.media("screen") {
    @include mix.dimensions("lg") {
      grid-template-columns: 1.5fr 4fr;
    }

    @include mix.dimensions("xl") {
      grid-template-columns: 1fr 4fr;
    }
  }
}

.header {
  grid-column: 1;
  grid-row: 1;
  width: 100%;
}

.main {
  grid-column: 1;
  grid-row: 1 / -1;

  @include mix.media("screen") {
    @include mix.dimensions("lg") {
      grid-column: 2;
    }
  }
}

.footer {
  grid-column: 1;
  grid-row: 2;
  width: 100%;
}
ight .kd { color: #008800; font-weight: bold } /* Keyword.Declaration */ .highlight .kn { color: #008800; font-weight: bold } /* Keyword.Namespace */ .highlight .kp { color: #008800 } /* Keyword.Pseudo */ .highlight .kr { color: #008800; font-weight: bold } /* Keyword.Reserved */ .highlight .kt { color: #888888; font-weight: bold } /* Keyword.Type */ .highlight .m { color: #0000DD; font-weight: bold } /* Literal.Number */ .highlight .s { color: #dd2200; background-color: #fff0f0 } /* Literal.String */ .highlight .na { color: #336699 } /* Name.Attribute */ .highlight .nb { color: #003388 } /* Name.Builtin */ .highlight .nc { color: #bb0066; font-weight: bold } /* Name.Class */ .highlight .no { color: #003366; font-weight: bold } /* Name.Constant */ .highlight .nd { color: #555555 } /* Name.Decorator */ .highlight .ne { color: #bb0066; font-weight: bold } /* Name.Exception */ .highlight .nf { color: #0066bb; font-weight: bold } /* Name.Function */ .highlight .nl { color: #336699; font-style: italic } /* Name.Label */ .highlight .nn { color: #bb0066; font-weight: bold } /* Name.Namespace */ .highlight .py { color: #336699; font-weight: bold } /* Name.Property */ .highlight .nt { color: #bb0066; font-weight: bold } /* Name.Tag */ .highlight .nv { color: #336699 } /* Name.Variable */ .highlight .ow { color: #008800 } /* Operator.Word */ .highlight .w { color: #bbbbbb } /* Text.Whitespace */ .highlight .mb { color: #0000DD; font-weight: bold } /* Literal.Number.Bin */ .highlight .mf { color: #0000DD; font-weight: bold } /* Literal.Number.Float */ .highlight .mh { color: #0000DD; font-weight: bold } /* Literal.Number.Hex */ .highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */ .highlight .mo { color: #0000DD; font-weight: bold } /* Literal.Number.Oct */ .highlight .sa { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Affix */ .highlight .sb { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Backtick */ .highlight .sc { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Char */ .highlight .dl { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Delimiter */ .highlight .sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */ .highlight .s2 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Double */ .highlight .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */ .highlight .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */ .highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */ .highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */ .highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */ .highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */ .highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */ .highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */ .highlight .vc { color: #336699 } /* Name.Variable.Class */ .highlight .vg { color: #dd7700 } /* Name.Variable.Global */ .highlight .vi { color: #3333bb } /* Name.Variable.Instance */ .highlight .vm { color: #336699 } /* Name.Variable.Magic */ .highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */
@use "@styles/abstracts/functions" as fun;
@use "@styles/abstracts/mixins" as mix;
@use "@styles/abstracts/placeholders";

.wrapper {
  --icon-size: #{fun.convert-px(25)};

  display: flex;
  flex-flow: column nowrap;
  place-items: center;
  height: var(--btn-size);
  width: var(--btn-size);
  background: var(--color-bg);
  position: relative;

  @include mix.media("screen") {
    @include mix.dimensions("sm") {
      background: inherit;
    }

    @include mix.dimensions("md") {
      --icon-size: #{fun.convert-px(30)};

      width: unset;
      height: unset;
    }
  }
}

.label {
  display: flex;
  flex-flow: column nowrap;
  width: 100%;
  height: 100%;

  &:hover {
    span,
    span::before,
    span::after {
      background: var(--color-primary-lighter);
      box-shadow: 2px 2px 0 0 var(--color-shadow);
    }
  }

  @include mix.media("screen") {
    @include mix.dimensions("md") {
      display: none;
    }
  }
}

.checkbox {
  position: absolute;

  // centered checkbox = btn-size - approximated checkbox size / 2
  top: calc((var(--btn-size) - #{fun.convert-px(14)}) / 2);
  left: calc((var(--btn-size) - #{fun.convert-px(14)}) / 2);
  opacity: 0;
  cursor: pointer;

  &:hover {
    ~ .label {
      span,
      span::before,
      span::after {
        background: var(--color-primary-lighter);
        box-shadow: 2px 2px 0 0 var(--color-shadow);
      }
    }
  }

  &:focus {
    ~ .label {
      outline: var(--color-primary-light) solid fun.convert-px(3);
    }
  }

  @include mix.media("screen") {
    @include mix.dimensions("md") {
      display: none;
    }
  }
}

.nav {
  display: flex;
  flex-flow: column wrap;
  place-content: center;
  padding-bottom: var(--toolbar-size);
  position: fixed;
  bottom: 0;
  z-index: -1;
  background: var(--color-bg-opacity);
  box-shadow: 0 0 fun.convert-px(3) 0 var(--color-shadow-dark);
  text-align: center;
  opacity: 1;
  visibility: visible;
  transform: translateY(0);
  transition: all 0.8s ease-in-out 0s;

  @include mix.media("screen") {
    @include mix.dimensions("sm") {
      padding-bottom: 0;
      position: absolute;
      bottom: auto;
      left: auto;
      right: auto;
      top: calc(var(--btn-size) + var(--spacing-sm));
      z-index: unset;
      border-bottom-width: fun.convert-px(5);
      transform-origin: 50% -100%;
    }

    @include mix.dimensions("md") {
      background: transparent;
      border: none;
      box-shadow: none;
      position: relative;
      top: 0;
    }
  }
}

.list {
  @extend %reset-list;

  @include mix.media("screen") {
    @include mix.dimensions(null, "2xs", "height") {
      display: grid;
      grid-template-columns: min-content min-content;
      max-height: calc(100vh - var(--toolbar-size));
    }

    @include mix.dimensions("md") {
      display: flex;
      flex-flow: row wrap;
      align-items: center;
      gap: var(--spacing-2xs);
    }
  }
}

.link {
  --draw-border-width: #{fun.convert-px(4)};

  display: block;
  min-width: fun.convert-px(85);
  padding: var(--spacing-xs) var(--spacing-xs) var(--spacing-2xs);
  background: var(--color-bg);
  background-repeat: no-repeat;
  font-size: var(--font-size-sm);
  font-variant: small-caps;
  font-weight: 600;
  text-decoration: none;

  @include mix.media("screen") {
    @include mix.dimensions("md") {
      margin: 0;
      background-color: inherit;
      border-radius: 8%;
    }
  }

  &:hover,
  &:focus {
    background-image: linear-gradient(
        to right,
        var(--color-primary-lighter),
        var(--color-primary-light)
      ),
      linear-gradient(
        to bottom,
        var(--color-primary-light),
        var(--color-primary-lighter)
      ),
      linear-gradient(
        to left,
        var(--color-primary-lighter),
        var(--color-primary-light)
      ),
      linear-gradient(
        to top,
        var(--color-primary-light),
        var(--color-primary-lighter)
      );
    background-position: top left, top right, bottom right, bottom left;
    background-size: 100% var(--draw-border-width),
      var(--draw-border-width) 100%, 100% var(--draw-border-width),
      var(--draw-border-width) 100%;
    color: var(--color-primary-light);

    :global {
      animation: draw-borders 0.8s linear 1 0s;
    }
  }

  &:focus {
    color: var(--color-primary-light);
  }

  &:active {
    background-image: linear-gradient(
        to right,
        var(--color-primary-light),
        var(--color-primary-dark)
      ),
      linear-gradient(
        to bottom,
        var(--color-primary-dark),
        var(--color-primary-light)
      ),
      linear-gradient(
        to left,
        var(--color-primary-light),
        var(--color-primary-dark)
      ),
      linear-gradient(
        to top,
        var(--color-primary-dark),
        var(--color-primary-light)
      );
    background-position: top left, top right, bottom right, bottom left;
  }

  &.current {
    background-image: linear-gradient(to right, transparent, transparent),
      linear-gradient(to bottom, transparent, transparent),
      linear-gradient(
        to left,
        var(--color-primary-lighter),
        var(--color-primary-light)
      ),
      linear-gradient(to top, transparent, transparent);
    background-position: top left, top right, bottom center, bottom left;
    background-size: 0% var(--draw-border-width), var(--draw-border-width) 0%,
      60% var(--draw-border-width), var(--draw-border-width) 0%;
    transition: all 0.3s linear 0s;

    &:hover,
    &:focus {
      background-image: linear-gradient(
          to right,
          var(--color-primary-lighter),
          var(--color-primary-light)
        ),
        linear-gradient(
          to bottom,
          var(--color-primary-light),
          var(--color-primary-lighter)
        ),
        linear-gradient(
          to left,
          var(--color-primary-lighter),
          var(--color-primary-light)
        ),
        linear-gradient(
          to top,
          var(--color-primary-light),
          var(--color-primary-lighter)
        );
      background-size: 100% var(--draw-border-width),
        var(--draw-border-width) 100%, 100% var(--draw-border-width),
        var(--draw-border-width) 100%;
    }

    &:active {
      background-image: linear-gradient(
          to right,
          var(--color-primary-light),
          var(--color-primary-dark)
        ),
        linear-gradient(
          to bottom,
          var(--color-primary-dark),
          var(--color-primary-light)
        ),
        linear-gradient(
          to left,
          var(--color-primary-light),
          var(--color-primary-dark)
        ),
        linear-gradient(
          to top,
          var(--color-primary-dark),
          var(--color-primary-light)
        );
    }
  }
}

.checkbox:not(:checked) {
  ~ .nav {
    opacity: 0;
    visibility: hidden;
    transform: translateY(100vw);

    @include mix.media("screen") {
      @include mix.dimensions("sm") {
        transform: perspective(20rem) translate3d(0, 100%, -20rem);
      }

      @include mix.dimensions("md") {
        opacity: 1;
        visibility: visible;
        transform: none;
      }
    }
  }
}

.checkbox:checked {
  ~ .label:hover {
    span {
      background: none;
      box-shadow: none;
    }
  }

  &:hover {
    ~ .label {
      span {
        background: none;
        box-shadow: none;
      }
    }
  }
}