/* Copyright (c) 2012 The Chromium Authors. All rights reserved.
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file. */

body {
  color: rgb(48, 57, 66);
  margin-inline-start: 23px;
}

body.uber-frame {
  margin-inline-start: 155px;
}

html[dir='rtl'] body.uber-frame {
  /* Enable vertical scrollbar at all times in RTL to avoid visual glitches when
   * showing sub-pages that vertically overflow. */
  overflow-y: scroll;
}

/* TODO(dbeam): Remove .page class from overlays in settings so the junk below
 * isn't necessary. */
body #extension-settings.page,
body #mainview-content .page,
body .subpage-sheet-container .page,
body > .page {
  margin-inline-end: 24px;
  min-width: 576px;
  padding-bottom: 20px;
  padding-top: 55px;
}

body header {
  background-image: -webkit-linear-gradient(white,
                                            white 40%,
                                            rgba(255, 255, 255, 0.92));
  left: 23px;
  /* <section>s in options currently amount to 638px total, broken up into
   * 600px max-width + 18px padding-inline-start + 20px margin-inline-end
   * so we mirror this value here so the headers match width and horizontal
   * alignment when scrolling sideways.
   * other-devices.css' .device width depends on this, please keep in sync. */
  max-width: 738px;
  min-width: 600px;
  position: fixed;
  right: 0;
  top: 0;
  /* list.css sets a z-index of up to 2, this is set to 3 to ensure that the
   * header is in front of the selected list item. */
  z-index: 3;
}

body.uber-frame header {
  left: 155px;
}

html[dir='rtl'] body header {
  left: 0;
  right: 23px;
}

html[dir='rtl'] body.uber-frame header {
  right: 155px;
}

body header > .search-field-container,
body header > .header-extras,
body header > button {
  position: absolute;
  right: 20px;
  top: 21px;
}

html[dir='rtl'] body header > .search-field-container,
html[dir='rtl'] body header > .header-extras,
html[dir='rtl'] body header > button {
  left: 20px;
  right: auto;
}

body header input[type='search'],
body header input[type='text'],
body header button {
  margin: 0;
}

body header > h1 {
  margin: 0;
  padding: 21px 0 13px;
}

/* Create a border under the h1 (but before anything that gets appended
 * to the end of the header). */
body header > h1::after {
  background-color: #eee;
  content: ' ';
  display: block;
  height: 1px;
  margin-inline-end: 20px;
  position: relative;
  top: 13px;
}

body footer {
  border-top: 1px solid #eee;
  margin-top: 16px;
  /* min-width and max-width should match the header */
  max-width: 638px;
  min-width: 600px;
  padding: 8px 0;
}

/* Sections are used in options pages, help page and history page. This defines
 * the section metrics to match the header metrics above. */
body section {
  margin-bottom: 24px;
  margin-top: 8px;
  max-width: 600px;
  padding-inline-start: 18px;
}

body section:last-of-type {
  margin-bottom: 0;
}

body section > h3 {
  margin-inline-start: -18px;
}

body section > div:only-of-type {
  -webkit-box-flex: 1;
}

body .section-header {
  margin-bottom: 0.8em;
  margin-inline-start: -18px;
  margin-top: 1.2em;
}

body .section-header > h3 {
  display: inline;
}

/* Styles for a hideable notification banner at the top of a page. */
.page.showing-banner {
  margin-top: 45px;
}

.page-banner {
  background-color: white;
  width: 100%;
  z-index: 2;
}

.page:not(.showing-banner) .page-banner {
  display: none;
}

.page-banner-gradient {
  background: -webkit-linear-gradient(rgb(255, 242, 183),
                                      rgb(250, 230, 145));
  border: 1px solid rgb(201, 189, 141);
  border-radius: 3px;
  margin: 9px 9px 0 9px;
  min-height: 25px;
}

.page-banner .page-banner-gradient {
  margin-bottom: 9px;
  margin-inline-end: 20px;
  margin-inline-start: 0;
}

.page-banner-text {
  background-image: url(../../../ui/webui/resources/images/business.svg);
  background-position: 0 center;
  background-repeat: no-repeat;
  background-size: 18px;
  display: block;
  padding-bottom: 8px;
  padding-inline-end: 8px;
  padding-inline-start: 26px;
  padding-top: 8px;
}

.page-banner.clickable:active .page-banner-text {
  background: -webkit-linear-gradient(rgb(250, 230, 145),
                                      rgb(255, 242, 183));
}
