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

@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-weight: 300;
  src: local("Roboto Light"), local("Roboto-Light"), url("#{$fdsFontPath}/roboto/Roboto-Light.woff2") format("woff2");
}

@font-face {
  font-family: 'Roboto';
  font-style: italic;
  font-weight: 300;
  src: local("Roboto LightItalic"), local("Roboto-LightItalic"), url("#{$fdsFontPath}/roboto/Roboto-LightItalic.woff2") format("woff2");
}

@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-weight: normal;
  src: local("Roboto Regular"), local("Roboto-Regular"), url("#{$fdsFontPath}/roboto/Roboto-Regular.woff2") format("woff2");
}

@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-weight: 500;
  src: local("Roboto Medium"), local("Roboto-Medium"), url("#{$fdsFontPath}/roboto/Roboto-Medium.woff2") format("woff2");
}

@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-weight: bold;
  src: local("Roboto Bold"), local("Roboto-Bold"), url("#{$fdsFontPath}/roboto/Roboto-Bold.woff2") format("woff2");
}

@font-face {
  font-family: 'Roboto';
  font-style: italic;
  font-weight: normal;
  src: local("Roboto Italic"), local("Roboto-Italic"), url("#{$fdsFontPath}/roboto/Roboto-RegularItalic.woff2") format("woff2");
}

@font-face {
  font-family: 'Roboto Slab';
  font-style: normal;
  font-weight: normal;
  src: local("RobotoSlab Regular"), local("RobotoSlab-Regular"), url("#{$fdsFontPath}/roboto-slab/Roboto-Slab-Regular.woff2") format("woff2");
}

@font-face {
  font-family: 'Roboto Slab';
  font-style: normal;
  font-weight: bold;
  src: local("RobotoSlab Bold"), local("RobotoSlab-Bold"), url("#{$fdsFontPath}/roboto-slab/Roboto-Slab-Bold.woff2") format("woff2");
}

body,
html {
  height: 100%;
}

body,
button,
input,
label,
select,
td,
textarea {
  font-family: $fontPrimary;
  font-size: 14px;
}

body {
  color: $bodyTextColor;
}

strong {
  font-weight: bold;
}

pre {
  overflow-x: auto;
}

em {
  font-style: italic;
}

h1,
h2,
h3,
h4,
h5,
h6 {
  font-family: $fontPrimary;
  font-weight: normal;
  font-style: normal;
}

h1 {
  color: $pageHeaderTextColor;
}

h2 {
  color: $subHeaderTextColor;
}

table {
  font-family: $fontPrimary;
  font-size: 13px;
  color: $grey2;
}

body[fds] {
  .md-title {
    font-weight: normal;
    color: $grey3;
  }

  .md-subhead {
    font-weight: lighter;
    font-size: 18px;
    color: $grey3;
  }

  .md-question {
    font-weight: bold;
  }

  .mat-card-title {
    line-height: normal;
  }
}
