/* Copyright 2015 The Vanadium Authors. All rights reserved. */
/* Use of this source code is governed by a BSD-style */
/* license that can be found in the LICENSE file. */

@import "constants";
@import "code";
@import "icon";

/**
 * Note to contributors: The style rules below have been tuned and tested
 * extensively across various device types and screen sizes. If you wish to make
 * changes, please consult the primary authors to ensure that your changes will
 * not break anything.
 */

*,
:before,
:after {
  box-sizing: border-box;
}

html {
  overflow-y: scroll;
}

html,
body {
  min-height: 100%;
}

body {
  position: relative;
  display: flex;
  flex-direction: column;
  margin: 0;
  font-family: "Roboto", sans-serif;
  font-size: 14px;
  line-height: 1.4;
  -webkit-font-smoothing: antialiased;
}

h1, h2, h3, h4, h5, h6 {
  color: @color-blue-grey-800;
  margin: 1.2em 0 0.4em;
  line-height: 1.5;
}
h4, h5, h6 {
  font-weight: 500;
}
h1.title {
  color: @color-primary-700;
  font-size: 45px;
  line-height: 48px;
}
h1 {
  color: @color-blue-grey-500;
  font-size: 34px;
  line-height: 40px;
}
h2 {
  font-size: 24px;
  line-height: 32px;
}
h3 {
  font-size: 20px;
}
h4 {
  font-size: 16px;
}
h5 {
  font-size: 14px;
}
h6 {
  color: @color-blue-grey-500;
  font-size: 12px;
}

p {
  margin: 1em 0;
  line-height: 1.7;
}

a {
  color: @color-primary-700;
  text-decoration: none;

  &:hover,
  &:active {
    color: @color-primary-800;
  }
}

blockquote {
  background-color: @color-grey-100;
  margin: 0 -@gutter-half;
  padding: 0 @gutter-half;
  overflow: hidden;
  font-style: normal;

  /* Undo the effects of MDL. */
  &:before,
  &:after {
    position: static;
    content: "";
    margin: 0;
  }
}

figure {
  margin: 0;
}

figcaption {
  margin: @gutter-quarter 0;
  color: @color-blue-grey-500;
  font-size: 12px;
  font-weight: 500;
}

table {
  width: 100%;
  border-collapse: collapse;
  border-spacing: 0;
}

th, td {
  border: 1px solid @color-grey-100;
  padding: @gutter-half;
}

th {
  font-weight: bold;
}

/* Page components ************************************************************/

header {
  @import "header";

  position: fixed;
  top: 0;
  width: 100%;
  z-index: 3;
}

/* Adjust for sidebar. */
main,
.previous-next {
  margin-left: @sidebar-width;

  @media @small-screen {
    margin-left: 0;
  }
}

main {
  position: relative;
  flex: 1;
  margin-top: @header-height;
  padding: 0 calc(@gutter + @gutter-half) @gutter;
  max-width: @main-max-width;

  @media @small-screen {
    padding: 0 @gutter @gutter;
  }

  /* Prevent headings from being obscured by the <header> for #heading urls. */
  h1[id], h2[id], h3[id], h4[id], h5[id], h6[id] {
    /**
     * Prevent the :before block from obscuring the element above. Note: The
     * meaning of "obscuring" here is subtle. The "visibility: hidden" rule
     * makes it so the :before block doesn't visually obscure anything, but it
     * does still obscure certain UI behaviors. For example, if there's a code
     * block with a horizontal scrollbar directly above a heading element,
     * hovering over that scrollbar doesn't bring it into focus.
     */
    position: relative;
    z-index: -1;

    &:before {
      display: block;
      content: "";
      margin-top: calc(-1 * (@header-height + @gutter-half));
      height: calc(@header-height + @gutter-half);
      visibility: hidden;
    }
  }
}

.previous-next {
  @import "previous-next";

  margin-top: @gutter;
}

.sidebar {
  @import "sidebar";

  position: fixed;
  top: 0;
  bottom: 0;
  left: 0;
  width: @sidebar-width;
  z-index: 2;  /* below header */

  @media @small-screen {
    top: 0;
    z-index: 5;  /* above mdl-layout__obfuscator */
    transform: translateX(-@sidebar-width);
    transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);

    &.is-visible {
      transform: translateX(0);
    }
  }
}

.toc {
  @import "toc";

  @media (min-width: 1100px) {
    position: fixed;
    top: @header-height;
    right: 0;
    bottom: 0;
    width: @sidebar-width;
  }
}

.sidebar-data {
  display: none;
}

/* The logo element appears in the header and in the sidebar. */
.logo {
  font-size: 20px;
}

.note {
  @import "note";
}
