// Copyright (C) 2020 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// -----------------------------------------------------------------------------
// Common + CSS reset
// -----------------------------------------------------------------------------
:root {
  --site-header-height: 50px;
  --home-highlights-height: 128px;
  --content-max-width: 1100px;
  --anim-ease: cubic-bezier(0.4, 0, 0.2, 1);

  // This is set to 1 by JS after onload. This is to prevent flickering on
  // page load on the nav bar and other entries while transitioning in their
  // initial state.
  --anim-enabled: 0;

  --anim-time: calc(0.15s * var(--anim-enabled));
}

$wide: "(max-width: 1100px)";
$mobile: "(max-width: 768px)";

@mixin minimal-scrollbar {
  &::-webkit-scrollbar {
    width: 8px;
    background-color: transparent;
  }
  &::-webkit-scrollbar-thumb {
    background-color: #ccc;
    border-radius: 8px;
  }
}

@media (max-aspect-ratio: 1/1) {
  :root {
    --home-highlights-height: 256px;
  }
}

* {
  box-sizing: border-box;
  -webkit-tap-highlight-color: none;
}

html {
  font-family: Roboto, sans-serif;
  -webkit-font-smoothing: antialiased;
}

html,
body {
  padding: 0;
  margin: 0;
}

h1,
h2,
h3 {
  font-family: inherit;
  font-size: inherit;
  font-weight: inherit;
  padding: 0;
  margin: 0;
}

// -----------------------------------------------------------------------------
// Site header
// -----------------------------------------------------------------------------
.site-header {
  background-color: hsl(210, 30%, 16%);
  color: hsl(210, 17%, 98%);
  position: sticky; // Sticky so the .docs element below doesn't start @ 0.
  top: 0;
  width: 100%;
  --sh-padding-y: 5px;
  max-height: var(--site-header-height);
  padding: var(--sh-padding-y) 30px;
  box-shadow: rgba(0, 0, 0, 0.3) 0 3px 3px 0;
  overflow: hidden;
  display: flex;
  z-index: 10;
  transition: max-height var(--anim-ease) var(--anim-time);
  &.expanded {
    max-height: 100vh;
  }
  .brand {
    img {
      height: 40px;
      vertical-align: bottom;
    }
    font-weight: 200;
    font-size: 28px;
    flex-grow: 1;
    .brand-docs {
      text-transform: uppercase;
      font-size: 14px;
      color: #ecba2a;
      vertical-align: bottom;
      line-height: 30px;
      font-weight: 400;
    }
  }
  > *:not(:first-child) {
    line-height: calc(var(--site-header-height) - var(--sh-padding-y) * 2);
    font-family: "Source Sans Pro", sans-serif;
    font-weight: 400;
    font-size: 1.1rem;
    margin: 0 20px;
    color: hsl(210, 17%, 85%);
  }
  a {
    text-decoration: none;
    &:hover {
      color: hsl(210, 17%, 100%);
    }
  }
  .menu {
    visibility: hidden;
    font-family: "Material Icons Round";
    font-size: 24px;
    text-align: center;
    position: absolute;
    right: 0;
    top: 0;
    line-height: var(--site-header-height);
  }

  @media #{$mobile} {
    flex-direction: column;
    > *:not(:first-child) {
      margin-left: 40px;
    }
    .menu {
      visibility: visible;
    }
  }
}

#search {
  position: relative;
  flex-grow: 0;
  transition: flex-grow cubic-bezier(1, 0.01, 1, 1) var(--anim-time),
    background-color ease var(--anim-time);
  padding: 0;
  &::before {
    visibility: hidden;
    user-select: none;
    content: "";
    position: fixed;
    left: 0;
    right: 0;
    top: var(--site-header-height);
    bottom: 0;
    z-index: -100;
    background-color: rgba(255, 255, 255, 0.8);
    backdrop-filter: blur(3px);
    opacity: 0;
    transition: opacity ease var(--anim-time), visibility 0s;
  }
  &:focus-within {
    flex-grow: 1000;
    &::before {
      display: block;
      opacity: 1;
      visibility: visible;
    }
    #search-res {
      display: block;
    }
  }

  @media #{$mobile} {
    display: none;
  }

  #search-box {
    width: 100%;
    height: 32px;
    font-size: 1rem;
    color: #333;
    background-color: rgba(255, 255, 255, 0.9);
    border: 1px solid #eee;
    border-radius: 2px;
    background-image: url('data:image/svg+xml;utf-8,<svg xmlns="http://www.w3.org/2000/svg" height="48" width="48"><path d="M39.8 41.95 26.65 28.8q-1.5 1.3-3.5 2.025-2 .725-4.25.725-5.4 0-9.15-3.75T6 18.75q0-5.3 3.75-9.05 3.75-3.75 9.1-3.75 5.3 0 9.025 3.75 3.725 3.75 3.725 9.05 0 2.15-.7 4.15-.7 2-2.1 3.75L42 39.75Zm-20.95-13.4q4.05 0 6.9-2.875Q28.6 22.8 28.6 18.75t-2.85-6.925Q22.9 8.95 18.85 8.95q-4.1 0-6.975 2.875T9 18.75q0 4.05 2.875 6.925t6.975 2.875Z"/></svg>');
    background-repeat: no-repeat;
    background-size: contain;
    padding-left: 40px;
    outline: none;
    &:hover,
    &:focus {
      background-color: rgba(255, 255, 255, 0.95);
    }
  }

  #search-res {
    display: none;
    background-color: rgba(255, 255, 255, 1);
    border: 1px solid #eee;
    box-shadow: #aaa 0px 1px 5px;
    color: #333;
    line-height: initial;
    margin-top: -4px;
    overflow-x: auto;
    position: fixed;
    top: var(--site-header-height);
    max-height: calc(100vh - var(--site-header-height));
    z-index: 10;
    > div {
      padding: 10px;
      margin: 0;
      &:hover {
        background-color: #f0f0f0;
      }
    }
    .sr-title {
      color: #333;
      font-weight: bold;
    }
    .sr-snippet {
      color: #444;
      font-size: 0.9rem;
    }

    a {
      text-decoration: none;
    }
    a:hover {
      color: initial;
    }

    &:empty {
      visibility: hidden;
    }
  }
}

// -----------------------------------------------------------------------------
// Site footer
// -----------------------------------------------------------------------------

// Footer in the index page.
.site-footer {
  background-color: hsl(210, 30%, 16%);
  padding: 1em 0;
  font-size: 14px;
  color: #fff;
  text-align: center;
  ul {
    list-style: none;
    margin: 0;
    padding: 0;
    li {
      display: inline;
      padding: 0 10px;
      &:not(:last-child) {
        border-right: solid 1px #fff;
      }
    }
  }
  a,
  a:visited {
    text-decoration: none;
    color: inherit;
  }
  .docs-footer-notice {
    display: none;
  }
}

// Footer overrides for the /docs/ page.
.docs .site-footer {
  grid-area: footer;
  background: transparent;
  color: #666;
  text-align: left;
  margin: 0 20px;
  padding: 12px 0;

  .docs-footer-notice {
    padding: 0;
    margin: 0;
    display: block;
  }

  ul {
    display: none;
  }
}

// -----------------------------------------------------------------------------
// Site content
// -----------------------------------------------------------------------------
.site-content {
  .section-wrapper {
    border-bottom: solid 1px #eee;
    &:nth-child(2n + 1) {
      background-color: hsl(210, 17%, 98%);
    }
  }
  section {
    display: block;
    position: relative;
    overflow: hidden;
    padding: 0 20px;
    margin: 0 auto;
    max-width: calc(var(--content-max-width) + 2 * 20px);
  }

  .banner {
    height: calc(
      100vh - var(--home-highlights-height) - var(--site-header-height)
    );
    @media (max-height: 639px) {
      // If the screen is too short (e.g. smartphone in landscape mode)
      // move the highlights sections (the four tiles) out of the visible
      // viewport.
      height: calc(100vh - var(--site-header-height));
    }
    min-height: 25vw;
    display: grid;
    grid-template-columns: 1fr;
    grid-template-rows: 1fr 1fr 5fr;
    h1,
    h2 {
      margin: auto;
      font-family: "Source Sans Pro", sans-serif;
      text-align: center;
      color: hsl(0, 0, 35%);
      span {
        white-space: nowrap;
      }
    }
    h1 {
      font-size: 2.5rem;
      font-size: calc(min(4rem, 8vw, 6vh));
      font-weight: 400;
      padding-top: calc(max(1rem, 2vh));
    }
    h2 {
      font-size: 1.25rem;
      font-size: calc(min(2rem, 6vw, 4vh));
      font-weight: 200;
      padding-top: 10px;
    }
    .home-img {
      padding: 1rem 0;
      overflow: hidden;
      position: relative;
      display: flex;
      img {
        max-height: 100%;
        max-width: 100%;
        margin: auto;
        display: block;
      }
    }
  }

  .home-highlights {
    &:before {
      border-top: 1px solid hsl(210, 17%, 90%);
    }
    height: var(--home-highlights-height);
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    grid-template-rows: 1fr;
    background-color: #fff;
    z-index: 2;
    @media (max-aspect-ratio: 1/1) {
      grid-template-columns: repeat(2, 1fr);
    }
    > a {
      color: hsl(0, 0, 20%);
      font-size: 22px;
      font-weight: 400;
      text-align: center;
      padding: 20px 0;
      font-family: "Source Sans Pro", sans-serif;
      text-decoration: none;
      .icon {
        background-image: url("/assets/sprite.png");
        background-repeat: no-repeat;
        width: 64px;
        height: 64px;
        margin: auto;
        background-size: 256px 128px;
        filter: grayscale(1);
        transition: filter ease var(--anim-time);
      }
      &:nth-child(1) .icon {
        background-position: 0 -64px;
      }
      &:nth-child(2) .icon {
        background-position: -64px -64px;
      }
      &:nth-child(3) .icon {
        background-position: -128px -64px;
      }
      &:nth-child(4) .icon {
        background-position: -192px -64px;
      }
      &:hover {
        background-color: hsl(210, 17%, 90%);
        .icon {
          filter: grayscale(0);
        }
      }
    }
  }
  .home-section {
    min-height: calc(min(100vh - var(--site-header-height), 800px));
    padding: 5% 20px;
    display: grid;
    grid-template-rows: 1fr;
    grid-column-gap: 4vw;
    > img {
      grid-area: img;
      max-width: 100%;
      max-height: 55vh;
      margin: auto;
      margin-top: 40px;
    }
    h2,
    > div {
      grid-area: content;
    }
    h2 {
      font-family: "Source Sans Pro", sans-serif;
      font-weight: 600;
      font-size: 2.5rem;
      color: #333;
      text-align: center;
    }
    &:nth-child(2n) {
      grid-template-columns: 5fr 4fr;
      grid-template-areas: "content img";
      h2 {
        padding: 0 0 0 50px;
        text-align: left;
      }
    }
    &:nth-child(2n + 1) {
      grid-template-columns: 4fr 5fr;
      grid-template-areas: "img content";
      h2 {
        padding: 0 50px 0 0;
        text-align: left;
      }
    }
    @media (max-aspect-ratio: 1/1) {
      padding: 5vh 20px;
      &:nth-child(n) {
        grid-template-rows: auto auto;
        grid-template-columns: 1fr;
        grid-template-areas: "img" "content";
        grid-row-gap: 30px;
        h2 {
          padding: 0;
          text-align: center;
        }
      }
      > img {
        padding: 0 10vw;
      }
    }
    div {
      grid-area: content;
      .button {
        display: inline-block;
        background: #337ab7;
        font-weight: 500;
        color: #fff;
        border-radius: 6px;
        font-size: 18px;
        padding: 10px 16px;
        transition: background-color ease var(--anim-time);
        text-decoration: none;
        &:hover {
          background: #286090;
        }
      }
    }
    .home-item {
      display: grid;
      grid-template-rows: auto auto;
      grid-template-columns: 50px auto;
      grid-template-areas: "img title" "img label";
      grid-column-gap: 20px;
      padding: 20px 30px;
      margin: 10px 0;
      // border: 1px solid #eee;
      font-family: "Source Sans Pro", sans-serif;
      color: #111111;
      transition: filter var(--anim-ease) var(--anim-time),
        background-color var(--anim-ease) var(--anim-time),
        transform var(--anim-ease) var(--anim-time),
        box-shadow linear var(--anim-time);
      border-radius: 6px;
      filter: opacity(0.6);
      &:hover {
        background-color: hsla(0, 0, 0, 0.02);
        filter: opacity(1);
        transform: scale(1.01);
      }
      > img,
      > i {
        grid-area: img;
        margin: auto;
        font-size: 50px;
      }
      > h3 {
        grid-area: title;
        font-size: 1.25rem;
        line-height: 20px;
        font-weight: 600;
      }
      > p {
        grid-area: label;
        font-size: 1rem;
        font-weight: 400;
        margin: 1em 0;
      }
    }
  }
}

// -----------------------------------------------------------------------------
// Docs
// -----------------------------------------------------------------------------
.docs {
  min-height: 100vh;
  display: grid;
  --nav-width: 240px;
  --toc-width: 180px;

  // 1665px is the clientWidth on a macbook pro. Adjust the layout so that
  // the max-width of the central .doc fits precisely when the browser is
  // full-screen on a macbook.
  --max-doc-width: calc(1665px - var(--toc-width) - var(--nav-width));

  grid-template-columns: var(--nav-width) minmax(auto, var(--max-doc-width)) var(
      --toc-width
    );
  grid-template-rows: 1fr max-content;
  grid-template-areas: "nav doc toc" "nav footer toc";

  background-color: hsl(210, 10%, 97%);
  .nav {
    grid-area: nav;
    border-right: 1px solid hsl(210, 30%, 90%);
    background-color: #fefefe;
    padding: 20px 0;
    padding-right: 16px;

    position: sticky;
    top: var(--site-header-height);
    height: calc(100vh - var(--site-header-height));
    overflow-y: auto;
    @include minimal-scrollbar;

    a {
      color: inherit;
      text-decoration: none;
      line-height: 24px;
      display: flex;
      transition: background-color var(--anim-ease) var(--anim-time),
        visibility linear var(--anim-time);
      border-radius: 0 10px 10px 0;
      -webkit-tap-highlight-color: transparent;
      &[href] {
        &:hover {
          color: #000;
          background-color: #f1f3f4;
        }
        &.selected {
          background-color: #ecba2a;
        }
      }
    }

    ul {
      list-style: none;
      margin: 0;
      padding: 0;
      overflow: hidden;
      li {
        font-size: 1rem;
        font-weight: 400;
        font-family: "Source Sans Pro", sans-serif;
        color: #4a4a4a;
        max-width: 100%;
        margin: 3px 0;
      }
      p {
        margin: 0;
      }
    }

    // Applies only to outer-level submenus.
    > ul {
      position: static; // Otherwise gets v-centered in the middle.
      > li {
        padding-bottom: 10px;
        margin-bottom: 10px;
        font-weight: 600;
        color: #111;

        &:not(:last-child) {
          border-bottom: 1px solid #eee;
        }

        &.compressible {
          > p > a::after {
            content: "keyboard_arrow_up";
            font-family: "Material Icons Round";
            font-size: 24px;
            width: 24px;
            transition: transform var(--anim-ease) var(--anim-time);
            margin: 0 0 0 auto;
            font-weight: 200;
            color: #666;
          }
          > ul {
            transition: max-height var(--anim-ease) var(--anim-time),
              opacity var(--anim-ease) var(--anim-time);
            opacity: 1;
          }
          &.compressed {
            // The JS will compute and set the maxHeight on each
            // element depending on the size of their children.
            // !important is needed to override the element-inline
            // max-height property set by JS, which is prioritary.
            > ul {
              max-height: 0 !important;
              visibility: hidden;
              opacity: 0;
            }
            > p > a::after {
              transform: scaleY(-1);
            }
          }
        } // .compressible
      }
    }

    li a {
      padding-left: 16px;
    }
    li li a {
      padding-left: 30px;
    }
    li li li a {
      padding-left: 44px;
    }
    .expanded a::after {
      transform: rotate(180deg);
    }
  }
  .doc {
    grid-area: doc;
    background-color: #fff;
    margin: 20px;
    padding: 30px 40px;
    font-family: Roboto, sans-serif;
    font-size: 1rem;
    font-weight: 400;
    line-height: 24px;
    -webkit-font-smoothing: antialiased;
    color: #4a4a4a;
    position: relative;
    box-shadow: 0 1px 2px 0 rgba(60, 64, 67, 0.1),
      0 1px 3px 1px rgba(60, 64, 67, 0.15);
    overflow: hidden;

    a {
      text-decoration: none;
      &:link {
        color: #007b83;
      }
      &:visited {
        color: #8e3317;
      }
      &:hover {
        color: #009da8;
      }
      &[href^="http"] {
        // External link.
        &:after {
          content: "open_in_new";
          font-family: "Material Icons Round";
          color: #666;
          text-decoration: none;
          margin-left: 2px;
          margin-right: 4px;
          vertical-align: bottom;
        }
      }
    }

    h1,
    h2,
    h3 {
      margin: 10px 0;
      padding: 0;
      padding-top: 30px;
    }
    h1 {
      font-size: 2.25rem;
      line-height: 2.25rem;
      margin: 0;
      padding: 0;
      margin-bottom: 1.5rem;
      font-family: "Source Sans Pro", sans-serif;
    }
    h2 {
      font-size: 1.5rem;
      border-bottom: 1px solid #e8eaed;
      padding-bottom: 6px;
    }
    h3 {
      font-size: 1.25rem;
    }
    * {
      max-width: 100%;
    }

    img[alt$="screenshot"] {
      box-shadow: 0 0 10px 2px #eee;
    }

    code:not(.code-block) {
      background: hsla(210, 17%, 90%, 0.2);
      border: 1px solid #e8eaed;
      border-radius: 6px;
      padding: 1px 4px;
    }
    .code-block {
      overflow-x: auto;
      white-space: pre;
      border-radius: 6px;
      box-shadow: 1px 1px 6px #999;
      border-top: 5px solid #8bc34a;
    }
    // Hide mermaid graphs until they are rendered, this is to avoid showing
    // the mermaid source while the renderer generates the SVG.
    .mermaid {
      transition: opacity var(--anim-ease) var(--anim-time);
      &:not(.rendered) {
        opacity: 0;
      }
    }
    .anchor {
      margin-left: -29px;
      padding-right: 5px;
      text-decoration: none;
      position: absolute;
      padding-top: var(--site-header-height);
      margin-top: calc(-1 * var(--site-header-height));
      outline: none;
      opacity: 0;
      transition: opacity var(--anim-ease) var(--anim-time);
      &::before {
        content: "insert_link";
        font-family: "Material Icons Round";
        color: #333;
        font-size: 24px;
      }
    }
    *:hover .anchor {
      opacity: 1;
    }
    code {
      font-family: "Roboto Mono", monospace;
      font-size: 14px;
    }
    table {
      width: 100%;
      font-size: 14px;
      border-spacing: 0;
      border-collapse: collapse;
      th,
      td {
        padding: 8px;
        border: 0 solid #dadce0;
        border-top-width: 1px;
        border-bottom-width: 1px;
      }
      tr {
        height: 20px;
      }
      tr:target {
        background-color: #ecba2a;
      }
      thead {
        text-align: left;
        background-color: #e8eaed;
        color: #202124;
      }
    }

    &[data-md-file^="/docs/reference/"] {
      h1,
      h2,
      h3 {
        code {
          margin-left: 20px;
          color: #666;
        }
      }
      table {
        width: 100%;
        font-size: 14px;
        border-spacing: 0;
        border-collapse: collapse;
        th,
        td {
          padding: 8px;
          border: 0 solid #dadce0;
          border-top-width: 1px;
          border-bottom-width: 1px;
        }
        tr {
          height: 20px;
        }
        thead {
          text-align: left;
          background-color: #e8eaed;
          color: #202124;
        }
        td {
          &:first-child {
            background: #f7f7f7;
          }

          /* Not really 100% but makes sure that the description
                     * column takes most of the width */
          &:last-child {
            width: 80%;
          }
        }
      }
    }

    .callout {
      padding: 0.5rem 0.5rem 0.5rem 2rem;
      border: none;
      border-radius: 2px;
      margin-left: auto;
      margin-right: auto;
      width: 90%;
      border-left: 3px solid transparent;
      box-shadow: 0 0.2rem 0.5rem rgba(0, 0, 0, 0.05),
        0 0 0.05rem rgba(0, 0, 0, 0.1);

      &:before {
        font-family: "Material Icons Round";
        position: absolute;
        font-size: 1.5rem;
        margin-left: -1.75rem;
        margin-top: -2px;
      }

      &.note {
        background-color: #e8f0fe;
        border-color: #1967d2;
        color: #1967d2;
        &:before {
          content: "bookmark";
        }
      }

      &.summary {
        background-color: #e4f7fb;
        border-color: #129eaf;
        color: #129eaf;
        &:before {
          content: "sms";
        }
      }

      &.tip {
        background-color: #e6f4ea;
        border-color: #188038;
        color: #188038;
        &:before {
          content: "star";
        }
      }

      &.todo {
        background-color: #f1f3f4;
        border-color: #5f6368;
        color: #5f6368;
        &:before {
          content: "error";
        }
      }

      &.warning {
        background-color: #fce8e6;
        border-color: #c5221f;
        color: #c5221f;
        &:before {
          content: "warning";
        }
      }
    }
  }
  .toc {
    grid-area: toc;
    padding: 20px 16px 20px 0;

    position: sticky;
    top: var(--site-header-height);
    height: calc(100vh - var(--site-header-height));
    overflow-y: auto;
    @include minimal-scrollbar;

    font-family: "Source Sans Pro", sans-serif;
    word-break: break-word;
    a {
      text-decoration: none;
    }
    a,
    a:visited {
      color: #333;
    }
    a.highlighted {
      font-weight: 500;
      color: hsl(45, 100%, 40%);
    }
    font-size: 0.875rem;
    ul {
      list-style: none;
      margin: 0;
      padding: 0;
      li {
        margin: 5px 0;
        /* This make it so that a single word gets elided but if there
                 * are multiple words they span across lines.  */
        overflow: hidden;
        text-overflow: ellipsis;
        white-space: break-spaces;
        word-break: normal;
      }
    }
    > ul {
      border-left: 4px solid #ecba2a;
      padding-left: 10px;
      position: static; // Otherwise gets v-centered in the middle.
      top: calc(var(--site-header-height) + 25px);
    }
  }

  @media #{$wide} {
    grid-template-columns: var(--nav-width) auto 0;
    .toc {
      display: none;
    }
  }
  @media #{$mobile} {
    display: block;
    .doc {
      margin: 0;
      padding: 20px;
    }
    .nav {
      // JS will persistently toggle to .after_first_click. This is to
      // avoid spurious transitions on page load.
      display: none;

      --nav-width-mobile: calc(min(90vw, 360px));
      width: var(--nav-width-mobile);
      position: fixed;
      z-index: 2;
      height: 100vh;
      overflow-y: auto;
      top: var(--site-header-height);
      transition: transform var(--anim-ease) var(--anim-time),
        box-shadow var(--anim-ease) var(--anim-time),
        visibility ease var(--anim-time);
      transform: translateX(calc(-1 * var(--nav-width-mobile)));
      visibility: hidden;
      > ul {
        position: static;
        top: 0;
      }
      &.after_first_click {
        display: block;
      }
      &.expanded {
        visibility: visible;
        transform: translateX(0);
        box-shadow: 0 1px 0 100vw rgba(0, 0, 0, 0.4);
      }
    }
  }
}
