/**
 * 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.
 */

.rst-content {
  color: #707070;

  h1 {
    margin-top: 0;
    margin-bottom: 30px;
    font-weight: 500;
    font-family: "Rubik", sans-serif;
    color: #51504f;
    font-size: 225%;
  }

  h2, h3, h4, h5, h6, p {
    font-family: 'Roboto', sans-serif;
    color: #707070;
  }

  h2, h3, h4, h5, h6 {
    margin-top: 40px;
    margin-bottom: 20px;
    font-weight: 500;
  }

  p {
    line-height: 1.63;
    margin: 0 0 30px;
    font-size: 16px;
    overflow-wrap: break-word;
  }

  h2 {
    font-size: 150%
  }

  h3 {
    font-size: 125%
  }

  h4 {
    font-size: 115%
  }

  h5 {
    font-size: 110%
  }

  h6 {
    font-size: 100%
  }

  code {
    max-width: 100%;
    color: #51504f;
    padding: 0 5px;
    font-family: 'Roboto Mono', monospace;
    overflow-x: auto;
  }

  .note, .attention, .caution, .danger, .error, .hint, .important, .tip, .warning, .admonition-todo, .admonition {
    padding: 9px 10px;
    line-height: 24px;
    margin-bottom: 24px;
    background: #e7f2fa;
  }

  @media (max-width: 768px) {
    .admonition p:not(.admonition-title) {
      font-size: 12px;
      line-height: 1.83;
    }
  }

  .admonition-title:before {
    content: "!";
    background-color: white;
    border-radius: 50%;
    padding: 0 4px;
    margin-right: 5px;
  }

  .admonition-title {
    color: #fff;
    font-weight: 500;
    font-size: 10px;
    line-height: 2.1;
    display: block;
    background: #68d1ff;
    margin: -10px;
    padding: 0 12px;
    margin-bottom: 9px;
  }

  .danger, .error {
    background: #fdece9;

    &::before {
      color: #fdece9;
    }
  }

  .danger .admonition-title, .error .admonition-title {
    background: #ee8170;

    &::before {
      color: #ee8170;
    }
  }

  .attention, .caution {
    background: #fff8f6;
  }

  .warning {
    background: #f8f8f8;
  }

  .attention .admonition-title, .caution .admonition-title {
    background: #ffa996;

    &::before {
      color: #ffa996;
    }
  }

  .warning .admonition-title {
    background: #a6a6a6;

    &::before {
      color: #a6a6a6;
    }
  }

  .note, .seealso {
    background: #f3fbff;
  }

  .note .admonition-title, .seealso .admonition-title {
    background: #68d2fe;

    &::before {
      color: #68d2fe;
    }
  }

  .hint {
    background: #f2fef6;
  }

  .important {
    background: #e6f9fc;
  }

  .tip {
    background: #e5f7ec;
  }

  .hint .admonition-title {
    background: #63e598;

    &::before {
      color: #63e598;
    }
  }

  .important .admonition-title {
    background: #5bdae3;

    &::before {
      color: #5bdae3;
    }
  }

  .tip .admonition-title {
    background: #5bcb88;

    &::before {
      color: #5bcb88;
    }
  }

  .note p:last-child, .attention p:last-child, .caution p:last-child, .danger p:last-child, .error p:last-child, .hint p:last-child, .important p:last-child, .tip p:last-child, .warning p:last-child, .seealso p:last-child, .admonition p:last-child {
    margin-bottom: 0
  }

  img {
    max-width: 100%;
    height: auto
  }

  div.figure {
    margin-bottom: 24px
  }

  div.figure p.caption {
    font-style: italic
  }

  div.figure p:last-child.caption {
    margin-bottom: 0;
  }

  div.figure.align-center {
    text-align: center
  }

  .section > img, .section > a > img {
    margin-bottom: 24px
  }

  abbr[title] {
    text-decoration: none
  }

  blockquote {
    margin-left: 24px;
    line-height: 24px;
    margin-bottom: 24px
  }

  pre {
    background-color: #f2f8fe;
  }

  pre.literal-block, .linenodiv pre {
    font-family: 'Roboto Mono', monospace;
    font-size: 12px;
    line-height: 1.4
  }

  @media print {
    div[class^='highlight'], div[class^='highlight'] pre {
      white-space: pre-wrap
    }
  }

  .admonition table {
    border-color: rgba(0, 0, 0, 0.1)
  }

  .admonition table td, .admonition table th {
    background: transparent !important;
    border-color: rgba(0, 0, 0, 0.1) !important
  }

  .section ol p, .section ul p {
    margin-bottom: 12px
  }

  .section ol li p:last-child, .section ul li p:last-child {
    margin-bottom: 0;
  }

  .section ol p:last-child, .section ul p:last-child {
    margin-bottom: 24px
  }

  .topic-title {
    font-weight: bold;
    margin-bottom: 12px
  }

  .toc-backref {
    color: inherit;
  }

  h1 .headerlink, h2 .headerlink, .toctree-wrapper p.caption .headerlink, h3 .headerlink, h4 .headerlink, h5 .headerlink, h6 .headerlink, dl dt .headerlink, p.caption .headerlink, table > caption .headerlink, .code-block-caption .headerlink {
    visibility: hidden;
    font-size: 14px
  }

  h1 .headerlink:after, h2 .headerlink:after, .toctree-wrapper p.caption .headerlink:after, h3 .headerlink:after, h4 .headerlink:after, h5 .headerlink:after, h6 .headerlink:after, dl dt .headerlink:after, p.caption .headerlink:after, table > caption .headerlink:after, .code-block-caption .headerlink:after {
    content: "";
  }

  h1:hover .headerlink:after, h2:hover .headerlink:after, .toctree-wrapper p.caption:hover .headerlink:after, h3:hover .headerlink:after, h4:hover .headerlink:after, h5:hover .headerlink:after, h6:hover .headerlink:after, dl dt:hover .headerlink:after, p.caption:hover .headerlink:after, table > caption:hover .headerlink:after, .code-block-caption:hover .headerlink:after {
    visibility: visible
  }

  table > caption .headerlink:after {
    font-size: 12px
  }

  .footnote-reference, .citation-reference {
    vertical-align: baseline;
    position: relative;
    top: -0.4em;
    line-height: 0;
    font-size: 90%
  }

  table.docutils, table.field-list {
    border-collapse: collapse;
    border-spacing: 0;
    empty-cells: show;
    margin-bottom: 24px
  }

  table.docutils caption, table.field-list caption {
    padding: 1em 0;
    text-align: center;
  }

  table.docutils td, table.docutils th, table.field-list th {
    margin: 0;
    overflow: visible;
  }

  table.docutils td {
    padding: 10px 31px;
  }

  table.docutils th, table.field-list th {
    padding: 11px 31px;
  }

  table.docutils td:first-child, table.field-list td:first-child, table.docutils th:first-child, table.field-list th:first-child {
    border-left-width: 0
  }

  table.docutils thead, table.field-list thead {
    text-align: left;
    vertical-align: bottom;
    white-space: nowrap
  }

  table.docutils thead th, table.field-list thead th {
    border-bottom: solid 1px rgba(81, 80, 79, 0.3);
    border-left: solid 1px rgba(81, 80, 79, 0.3);
  }

  table.docutils thead th p, table.field-list thead th p {
    font-weight: bold;
    font-size: 18px;
    color: #51504f;
    line-height: 1.33;
    margin-bottom: 0;
  }

  table.docutils td, table.field-list td {
    background-color: transparent;
    vertical-align: middle
  }

  td p:last-child, table.docutils td p:last-child, table.field-list td p:last-child {
    margin-bottom: 0
  }

  table.docutils:not(.field-list) tr:nth-child(2n-1) td {
    background-color: rgba(112, 112, 112, 0.05);
  }

  table.docutils {
    border: 1px solid rgba(81, 80, 79, 0.3);
  }

  table.docutils td {
    border-bottom: 1px solid rgba(81, 80, 79, 0.3);
    border-left: 1px solid rgba(81, 80, 79, 0.3);
  }

  table.docutils tbody > tr:last-child td {
    border-bottom-width: 0
  }

  .wy-table-responsive {
    margin-bottom: 24px;
    max-width: 100%;
    overflow: auto
  }

  .wy-table-responsive table {
    margin-bottom: 0 !important
  }

  .wy-table-responsive table td, .wy-table-responsive table th {
    white-space: nowrap
  }

  code big, tt em, code em {
    font-size: 100% !important;
    line-height: normal
  }

  code.literal {
    color: #E74C3C
  }

  code.xref, a code {
    font-weight: bold;
    color: #707070;
  }

  pre, kbd {
    font-family: "Roboto Mono", monospace;
  }

  kbd {
    background-color: inherit;
    color: inherit;
    box-shadow: none;
    border: none;
    font-size: 100%;
  }

  a code {
    color: #2980B9
  }

  dl {
    margin-bottom: 24px
  }

  dl dt {
    font-weight: bold;
    margin-bottom: 12px;
    word-break: break-word;
  }

  dl p, dl table, dl ul, dl ol {
    margin-bottom: 12px !important
  }

  dl dd {
    margin: 0 0 12px 24px;
    line-height: 24px
  }

  dl:not(.docutils) {
    margin-bottom: 24px
  }

  dl:not(.docutils) dt {
    font-family: "Roboto Mono", monospace;
    display: table;
    margin: 6px 0;
    font-size: 100%;
    line-height: 1.63;
    background: #f3fbff;
    color: #51504f;
    border-top: solid 4px #68d1ff;
    padding: 8px 10px;
    position: relative;

    @media (max-width: 768px) {
      font-size: 10px;
    }
  }

  dl:not(.docutils) dt:before {
    color: #68d1ff
  }

  dl:not(.docutils) dt .headerlink {
    color: #707070;
    font-size: 100% !important
  }

  dl:not(.docutils) dt .fn-backref {
    color: #0cb6ff;
  }

  dl:not(.docutils) dl dt {
    margin-bottom: 6px;
    border: none;
    border-left: solid 8px #a6a6a6;
    background: #f8f8f8;
    color: #707070
  }

  dl:not(.docutils) dl dt .headerlink {
    color: #707070;
    font-size: 100% !important
  }

  dl:not(.docutils) dt:first-child {
    margin-top: 0
  }

  dl:not(.docutils) code {
    font-weight: bold
  }

  dl:not(.docutils) code.descname, dl:not(.docutils) code.descclassname {
    background-color: transparent;
    border: none;
    padding: 0;
    font-size: 100% !important
  }

  dl:not(.docutils) code.descname {
    font-weight: bold
  }

  dl:not(.docutils) .optional {
    display: inline-block;
    padding: 0 4px;
    color: #51504f;
    font-weight: bold
  }

  dl:not(.docutils) .property {
    display: inline-block;
    padding-right: 8px
  }

  p.rubric {
    margin-bottom: 12px;
    font-weight: bold
  }

  .versionmodified {
    font-style: italic
  }

  .example-header {
    position: relative;
    background: #017cee;
    padding: 8px 16px;
    margin-bottom: 0;
  }

  .example-block-wrapper pre {
    margin: 0;
    width: unset;
    border-top-left-radius: 0;
    border-top-right-radius: 0;
  }

  .example-header--with-button {
    padding-right: 166px;
    @media (max-width: 768px) {
      padding-right: 100px
    }
  }

  .example-header:after {
    content: '';
    display: table;
    clear: both;
  }

  .example-title {
    display: block;
    padding: 4px;
    margin-right: 16px;
    color: white;
    overflow-x: auto;

    @media (max-width: 768px) {
      overflow-wrap: initial;
      font-size: 12px;
    }
  }

  .example-header-button {
    top: 8px;
    right: 16px;
    position: absolute;
  }

  .example-header + .highlight-python {
    margin-top: 0 !important;
  }

  .viewcode-button {
    display: inline-block;
    padding: 8px 16px;
    border: 0;
    margin: 0;
    color: white;
    font-weight: bold;
    line-height: 1;
    text-decoration: underline;
    text-overflow: ellipsis;
    overflow: hidden;
    text-transform: lowercase;
    vertical-align: middle;
    white-space: nowrap;

    @media (max-width: 768px) {
      font-size: 12px;
      padding: 7px 0;
    }
  }

  .viewcode-button:visited {
    color: #404040;
  }

  .viewcode-button:hover, .viewcode-button:focus {
    color: #404040;
  }

  .section {
    @media (min-width: 1024px) {
      &::before {
        display: block;
        content: " ";
        margin-top: -83px;
        height: 83px;
        visibility: hidden;
      }
    }
  }
}
