/*
 * Copyright 2021 The Pigweed Authors
 *
 * 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
 *
 *     https://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.
 */

/********** Top left logo & search bar ***********/

/* Make the "Pigweed" logo text. One day, this will be an image. */
.sidebar-brand {
  font-size: 2em;
  font-family: 'Inconsolata', monospace;
  font-weight: bold;
  letter-spacing: 0.1em;
  text-transform: uppercase;
}
.sidebar-brand-text {
    font-size: 2.5rem;
}

/********** General document coloring ***********/

/* Code blocks inside block quotes end up getting italicized. */
blockquote {
  font-style: normal;
}

/* Update description list (dl) > description titles (dt) styles for autodoc */

/* Function signatures are gray */
dl.c>dt, dl.cpp>dt, dl.js>dt, dl.py>dt {
  border: none;
  border-left: 3px solid var(--color-api-function-border);
  background: var(--color-api-function-background);
  padding-top: 6px;
  padding-bottom: 6px;
  padding-left: 0.5em;
  font-family: var(--font-stack--monospace);
}

/* Adjust indentation for all list types */
dl.class>dt, dl.enum-class>dt, dl.enum-struct>dt, dl.enum>dt, dl.exception>dt, dl.function>dt, dl.method>dt, dl.type>dt {
  padding-left: 3em;
  text-indent: -2.5em;
}

/* Class and describe signatures are blue */
dl.class>dt, dl.describe>dt {
  background: var(--color-api-class-background);
  color: var(--color-api-class-foreground);
  border: none;
  border-top: 3px solid var(--color-api-class-border);
  font-family: var(--font-stack--monospace);
}
/* Adjust .. describe:: block padding */
dl.describe>dt {
  display: table;
  padding-top: 6px;
  padding-bottom: 6px;
  padding-left: 0.5em;
  padding-right: 0.5em;
}

/* Diagram backgrounds should always be light */
div>svg {
  background: #ffffff;
}

/* Make inline code standout more */
code.literal {
  border: 1px solid var(--color-inline-code-border);
}

/* Make sure text selection colors are readable */
::selection {
  color: var(--color-text-selection-foreground);
  background: var(--color-text-selection-background);
}

/* Use normal mixed-case for h4, h5, and h6 */
h4, h5, h6 {
    text-transform: none;
}
