/* 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;
}

figure img {
  max-width: 100%;
}

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";
}
