/**
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you 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.
 */


/* Customizing with theme CSS variables */

:root {
  --pst-color-link-hover: 215, 70, 51;
  --pst-color-headerlink: 215, 70, 51;
  /* Softer blue from bootstrap's default info color */
  --pst-color-info: 23, 162, 184;
}

code {
  color: rgb(215, 70, 51);
}

html[data-theme="dark"] code {
  color: rgb(255, 138, 117);
}

.footer {
  text-align: center;
}


/* Bootstrap "table-striped" applied globally so individual tables in
   user-guide pages don't need ":class: table-striped" added one by one. */

.table tbody tr:nth-of-type(odd) {
  background-color: rgba(0, 0, 0, 0.05);
}

html[data-theme="dark"] .table tbody tr:nth-of-type(odd) {
  background-color: rgba(255, 255, 255, 0.05);
}


/* Fix table text wrapping in RTD theme,
 * see https://rackerlabs.github.io/docs-rackspace/tools/rtd-tables.html
 */

@media screen {
    table.docutils td {
        /* !important prevents the common CSS stylesheets from overriding
          this as on RTD they are loaded after this stylesheet */
        white-space: normal !important;
    }
}


/* Hideable right-hand "On this page" sidebar.
 * toc-toggle.js adds the button and toggles `pst-secondary-hidden` on <body>;
 * hiding the sidebar lets the flex article container reclaim the width. */

body.pst-secondary-hidden .bd-sidebar-secondary {
  display: none;
}

/* Let the article use the freed space rather than just re-centering. */
body.pst-secondary-hidden .bd-article-container {
  max-width: none;
}

/* Floating toggle button, pinned to the top-right under the navbar. */
#pst-secondary-toggle {
  position: fixed;
  top: 4.5rem;
  right: 0.75rem;
  z-index: 1020;
  display: flex;
  align-items: center;
  justify-content: center;
  width: 2rem;
  height: 2rem;
  padding: 0;
  border: 1px solid var(--pst-color-border, #ccc);
  border-radius: 0.25rem;
  background-color: var(--pst-color-surface, #fff);
  color: var(--pst-color-text-base, #333);
  cursor: pointer;
}

#pst-secondary-toggle:hover {
  color: rgb(var(--pst-color-link-hover));
}

/* The toggle is only meaningful where the sidebar is shown (wide screens);
 * below the theme's lg breakpoint the sidebar is already collapsed away. */
@media (max-width: 959.98px) {
  #pst-secondary-toggle {
    display: none;
  }
}
