@charset "utf-8";
@import "util";

/**
 * Media rules for different screen sizes.
 * This will override some basic rules.
 */

$standard-margin: 4px;

// (orientation: portrait),
@media all and (max-width: 42.5em) {
  body,
  #search > ol,
  #search div.snippet > span,
  header,
  header input,
  div#resultinfo,
  #pagination > a {
    font-size: 9pt;
  }

  header {
    padding-top: 2rem;
    // padding-right: 8px;
  }
  
  header form {
    margin: 1.5rem 1rem;
    padding-left: 0;
    // padding-top: 33px;

    &#searchform {
      margin: 2.5rem 1rem 0 1rem;
    }
  }

  .navbar {
    *:not(:first-child) {
      display: none;
    }

    .burger-icon {
      position: relative;
      display: block !important;
      width: 4rem;
      height: 4rem;
      font-size: 1.8rem;
      color: $nearly-white;

      &::after {
        position: absolute;
        top: 2rem;
        left: 2rem;
        transform: translate(-50%, -50%);
        -o-transform: translate(-50%, -50%);
        -moz-transform: translate(-50%, -50%);
        -webkit-transform: translate(-50%, -50%);
      }
    }

    &.show .burger-icon {
      position: absolute;
      top: 0;
      right: 0;
      background-color: $middle-green;
    }

    &.show * {
      display: block;
    }

    &-group {
      margin-top: 4rem;
      width: 100%;
      display: block;
      position: fixed;
      top: 0;
      left: 0;
      background-color: $middle-green;

      fieldset.fieldset-login {
        display: block !important;
        margin-right: 0 !important;

        form.login {
          align-items: normal !important;
          flex-direction: column;
          gap: 6px;
          
          input[type=text],
          input[type=password] {
            @include input-field;
            margin-right: 0 !important;
          }
    
          button.btn-login {
            width: 100% !important;
            align-self: center;
            background-color: $dark-green !important;

            &:hover {
              background-color: $middle-green !important;
              color: unset !important;
            }
          }
        }

        p {
          padding: 0 1rem 1rem;

          a {
            display: inline;
          }
        }
      }
    }

    @media (hover: none) and (pointer: coarse) {
      .dropdown {
        margin-right: 0 !important;

        &-content {
          display: block !important;
          width: 100% !important;
        }
      }
    }
  }

  .vc {
    font-size: 9pt;
    .builder {
      .doc {
        padding-left: 3em;
      }
      * .docGroup {
        margin-left: 3em;
      }
      > .doc {
        padding-left: .5em;
      }
      > .docGroup {
        margin-left: .5em;
      }
    }
  }

  h1 {
    margin-left: 0px;
    width: 130px;
    height: 40px;
    background: {
      size: 100%;
      position: 50% 0;
    }
    z-index: 110;
    position: absolute !important;
    top: 50%;
    transform: translateY(-50%);
    -o-transform: translateY(-50%);;
    -moz-transform: translateY(-50%);
    -webkit-transform: translateY(-50%);
  }

  #searchbar {
    padding-right: 30px;
    margin-top: 0;
    input#q-field {
      font-size: 9pt;
      border-radius: 6px 0 0 6px;
    }
    button[type=submit] {
      right: 0;
    }
  }

  .level-1 {
    padding-bottom: 2px;
  }

  .level-2 {
    padding-bottom: 4px;
  }

  main {
    padding: 1rem;
    margin-left: $standard-margin;
    margin-right: $standard-margin;
  }

  header .button {
    margin-right: $standard-margin;
    &.top {
      height: auto;
    }
  }

  #search ol {
    > li:target, > li.active {
      > div > div.snippet {
	      margin: 2px 2em 2px 4px;
      }
    }
    > li div.meta {
      display: none;
    }
  }

  div.matchinfo {
    font-size: 9pt;
  }

  div.matchtable tr > * {
    padding: 1pt 3pt;
  }

  div.matchtree { //, div.metatable {
    h6 {
      display: block;
      float: none;
    }
    > div { // , > dl {
      margin-left: 2px;
    }
  }
  
  #logos {
    margin-left: 0;
    margin-right: 0;

    > div {
      border-top-width: 14px;
      padding-right: 0;
      .logo > * {
        background: {
        size: 60%;
        position: 0 0;
      }
      }
    }
  }

  div.intro {
    width: 100%;
  }

  body.embedded aside > div {
    top: 0;
    transform: translateY(0);
  }
  
  aside {
    &:not(:focus):not(.active) {
      margin-left: -1 * $logo-left-distance;
      &::after {
	      font-size: 12pt;
	      height: 11pt;
        text-align: right;
        padding-right: 3pt;
        padding-top: 2pt;
      }
    }
    ul {
      font-size: 9pt;
      line-height: 1em;
    }
    &.active ~ main div.intro,
    &.active ~ main.page {
      margin-left: $standard-margin !important;
    }

    &.active {
      position: relative;
      display: block;
      padding-top: 0;
      width: 100%;
      top: 0;
      border-width: 0;

      fieldset input {
        font-size: 9pt;
      }
      &::after {
        display: none;
      }
      p, hr {
        display: none;
      }
    }
  }

  #tutorial {
    border-radius: 0;
    border-width: 0;
    right: 0;
    left: 0;
    bottom: 0;
    top: 0;
    padding: 0;
    iframe {
      border-radius: 0;
    }
    > ul.action.right {
      height: 1.5em;
      right: 20px;
      border-bottom-left-radius: 5px;
      border-bottom-right-radius: 5px;
    }
  }

  main.page {
    margin-right: 20px;
  }

  footer {
    padding-left: 0 !important;
    padding-top: 2rem;
    flex-direction: column;
    height: unset;
  }
}


@media print {
  body, html, select, g > text {
    color: black;
  }
  header, aside {
    display: none;
  }
  main.page {
    margin: 1em;
  }
  a.embedded-link {
    color: black;
    text-decoration: underline;
  }
  pre.query.tutorial {
    background-color: white;
    color: black;
    margin-left: 1em;
    margin-right: 1em;
  }
  blockquote.warning {
    background-color: grey;
    color: white;
    border-left-color: black;
    border-left-width: 1em;
  }
}