/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

@namespace parsererror url(http://www.mozilla.org/newlayout/xml/parsererror.xml);
@namespace html url(http://www.w3.org/1999/xhtml);
@namespace xul url(http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul);

/* magic -- some of these rules are important to keep pages from overriding
            them
*/

/* Tables */

*|*::-moz-table {
  display: table;
  box-sizing: border-box; /* XXX do we really want this? */
}

*|*::-moz-inline-table {
  display: inline-table;
  box-sizing: border-box; /* XXX do we really want this? */
}

*|*::-moz-table-wrapper {
  /* The inherited properties here need to be safe to have on both the
   * table and the table wrapper, generally because code ignores them
   * for the table. */
  display: inherit; /* table or inline-table */
  -moz-top-layer: inherit;
  margin: inherit;
  float: inherit;
  clear: inherit;
  position: inherit;
  top: inherit;
  right: inherit;
  bottom: inherit;
  left: inherit;
  z-index: inherit;
  page-break-before: inherit;
  page-break-after: inherit;
  page-break-inside: inherit;
  vertical-align: inherit; /* needed for inline-table */
  line-height: inherit; /* needed for vertical-align on inline-table */
  /* Bug 722777 */
  transform: inherit;
  transform-origin: inherit;
  /* Bug 724750 */
  backface-visibility: inherit;
  clip: inherit;
  /* Other transform-related properties */
  /* transform-style: inherit; Bug 1560704 */
  rotate: inherit;
  scale: inherit;
  translate: inherit;
  /* When the table wrapper is a Flex/Grid item we need these: */
  align-self: inherit;
  justify-self: inherit;
  grid-column-start: inherit;
  grid-column-end: inherit;
  grid-row-start: inherit;
  grid-row-end: inherit;
  order: inherit;
  outline: inherit;
  outline-offset: inherit;
  column-span: inherit; /* needed if <table> has "column-span:all" */
  contain: inherit; /* needed if table has 'contain:layout' or 'paint' */
  container: inherit; /* Bug 1805588 */
  scroll-margin: inherit;  /* Bug 1633192 */
}

*|*::-moz-table-row {
  display: table-row;
}

/* The ::-moz-table-column pseudo-element is for extra columns at the end
   of a table. */
*|*::-moz-table-column {
  display: table-column;
  /* Make sure anonymous columns don't interfere with hit testing.  Basically,
   * they should pretend as much as possible to not exist (since in the spec
   * they do not exist).
   *
   * Please make sure to not reintroduce
   * https://bugzilla.mozilla.org/show_bug.cgi?id=1403293 if you change this
   * bit!
   */
  visibility: hidden;
}

*|*::-moz-table-column-group {
  display: table-column-group;
  /* Make sure anonymous colgroups don't interfere with hit testing.  Basically,
   * they should pretend as much as possible to not exist (since in the spec
   * they do not exist).
   *
   * Please make sure to not reintroduce
   * https://bugzilla.mozilla.org/show_bug.cgi?id=1403293 if you change this
   * bit!
   */
  visibility: hidden;
}

*|*::-moz-table-row-group {
  display: table-row-group;
}

*|*::-moz-table-cell {
  display: table-cell;
  white-space: inherit;
}

/* Ruby */
*|*::-moz-ruby {
  display: ruby;
  unicode-bidi: isolate;
}
*|*::-moz-ruby-base {
  display: ruby-base;
  unicode-bidi: isolate;
}
*|*::-moz-ruby-text {
  display: ruby-text;
  unicode-bidi: isolate;
}
*|*::-moz-ruby-base-container {
  display: ruby-base-container;
  unicode-bidi: isolate;
}
*|*::-moz-ruby-text-container {
  display: ruby-text-container;
  unicode-bidi: isolate;
}

/* https://drafts.csswg.org/css-lists-3/#ua-stylesheet */
::marker {
  text-align: end;
  text-transform: none;
  unicode-bidi: isolate;
  font-variant-numeric: tabular-nums;
  white-space: pre;
}

/* SVG documents don't always load this file but they do have links.
 * If you change the link rules, consider carefully whether to make
 * the same changes to svg.css.
 */

/* Links and focusable content */

:any-link {
  cursor: pointer;
}

:link {
  color: LinkText;
}

:any-link:active {
  color: ActiveText;
}

:visited {
  color: VisitedText;
}

:focus-visible {
  outline: 1px auto;
}

/* Inert subtrees */
:-moz-inert {
  -moz-inert: inert;
}

/* Miscellaneous */

*|*::-moz-cell-content {
  display: block;
  unicode-bidi: inherit;
  text-overflow: inherit;
  overflow-clip-box: inherit;
}

*|*::-moz-block-inside-inline-wrapper {
  display: block;
  /* we currently inherit from the inline that is split */
  position: inherit; /* static or relative or sticky */
  outline: inherit;
  outline-offset: inherit;
  clip-path: inherit;
  filter: inherit;
  mask: inherit;
  opacity: inherit;
  text-decoration: inherit;
  overflow-clip-box: inherit;
  unicode-bidi: inherit;
  user-select: inherit;
  text-overflow: inherit;
  /* The properties below here don't apply if our position is static,
     and we do want them to have an effect if it's not, so it's fine
     to always inherit them. */
  top: inherit;
  left: inherit;
  bottom: inherit;
  right: inherit;
  z-index: inherit;
}

*|*::-moz-scrolled-content, *|*::-moz-scrolled-canvas {
  /* e.g., text inputs, select boxes */
  padding: inherit;
  /* The display doesn't affect the kind of frame constructed here.  This just
     affects auto-width sizing of the block we create. */
  display: block;
  /* make unicode-bidi inherit, otherwise it has no effect on text inputs and
     blocks with overflow: scroll; */
  unicode-bidi: inherit;
  text-overflow: inherit;
  /* Please keep the declarations below in sync with ::-moz-fieldset-content /
     ::-moz-button-content in forms.css */
  content: inherit;
  /* Multicol container */
  column-count: inherit;
  column-width: inherit;
  column-gap: inherit;
  column-rule: inherit;
  column-fill: inherit;
  /* Flex container */
  flex-direction: inherit;
  flex-wrap: inherit;
  /* -webkit-box container (aliased from -webkit versions to -moz versions) */
  -moz-box-orient: inherit;
  -moz-box-direction: inherit;
  -moz-box-pack: inherit;
  -moz-box-align: inherit;
  -webkit-line-clamp: inherit;
  /* Grid container */
  grid-auto-columns: inherit;
  grid-auto-rows: inherit;
  grid-auto-flow: inherit;
  grid-column-gap: inherit;
  grid-row-gap: inherit;
  grid-template-areas: inherit;
  grid-template-columns: inherit;
  grid-template-rows: inherit;
  /* CSS Align */
  align-content: inherit;
  align-items: inherit;
  justify-content: inherit;
  justify-items: inherit;
  /* Do not change these. nsCSSFrameConstructor depends on them to create a good
     frame tree. */
  overflow-clip-box: inherit;
}

*|*::-moz-viewport, *|*::-moz-viewport-scroll, *|*::-moz-canvas, *|*::-moz-scrolled-canvas {
  display: block;
  background-color: inherit;
}

*|*::-moz-viewport-scroll {
  overflow: auto;
}

*|*::-moz-column-set,
*|*::-moz-column-content {
  /* the column boxes inside a column-flowed block */
  /* make unicode-bidi inherit, otherwise it has no effect on column boxes */
  unicode-bidi: inherit;
  text-overflow: inherit;
  /* Both -moz-column-set and -moz-column-content need to be blocks. */
  display: block;
}

*|*::-moz-column-set {
  /* Inherit from ColumnSetWrapperFrame so that nsColumnSetFrame is aware of
   them.*/
  columns: inherit;
  column-gap: inherit;
  column-rule: inherit;
  column-fill: inherit;
}

*|*::-moz-column-span-wrapper {
  /* As a result of the discussion in
   * https://github.com/w3c/csswg-drafts/issues/1072, most of the styles
   * currently applied to ::-moz-block-inside-inline-wrapper should not
   * apply here. */
  display: block;
  column-span: all;
}

*|*::-moz-anonymous-item {
  /* Anonymous blocks that wrap contiguous runs of text
   * inside of a flex / grid / -moz-box container. */
  display: block;
}

*|*::-moz-page-sequence {
  /* Collection of pages in print/print preview. Visual styles may only appear
   * in print preview. */
  display: block;
  background: #606060 linear-gradient(#606060, #8a8a8a) fixed;
  print-color-adjust: exact;
  /* We always fill the available space in both directions */
  height: 100%;
  width: 100%;
}

*|*::-moz-printed-sheet {
  /* Individual sheet of paper in print/print preview. Visual styles may only
   * appear in print preview. */
  display: block;
  background: white;
  print-color-adjust: exact;
  box-shadow: 5px 5px 8px #202020;
  box-decoration-break: clone;
  /* TODO: Remove margin if viewport is small or something? */
  margin: 0.125in 0.25in;
}

@media (monochrome) and (-moz-print-preview) {
  *|*::-moz-page {
    filter: grayscale(1);
  }
}

*|*::-moz-page-content {
  display: block;
  margin: auto;
}

*|*::-moz-page-break {
  display: block;
}

/* Printing */

@media print {
  * {
    cursor: default !important;
  }
}

:fullscreen:not(:root) {
  position: fixed !important;
  top: 0 !important;
  left: 0 !important;
  right: 0 !important;
  bottom: 0 !important;
  width: 100% !important;
  height: 100% !important;
  margin: 0 !important;
  min-width: 0 !important;
  max-width: none !important;
  min-height: 0 !important;
  max-height: none !important;
  box-sizing: border-box !important;
  object-fit: contain;
  transform: none !important;
}

xul|*:fullscreen:not(:root, [hidden="true"]) {
  /* The position: fixed; property above used to force the computed display
   * value to block. It is no longer the case now, so we manually set it here to
   * maintain the old behaviour. We should probably not do this, but we don't
   * fullscreen XUL element that frequently either. */
  display: block;
}

/* This pseudo-class is used to remove the inertness for the topmost modal
 * element in top layer.
 *
 * Avoid doing this if the element is explicitly inert though. */
:-moz-topmost-modal:not(html|*[inert]) {
  -moz-inert: none;
  /* Topmost modal elements need to be selectable even though ancestors are
   * inert, but allow users to override this if they want to. */
  user-select: text;
}

/**
 * Ensure we recompute the default color for the root based on its
 * computed color-scheme. This matches other browsers.
 *
 * For the default background, we look at the root
 * element style frame in
 * PresShell::GetDefaultBackgroundColorToDraw, however we
 * can't make the initial style (the style the root element
 * inherits from) depend on the root element's style, as that
 * is trivially cyclic.
 */
:root {
  color: CanvasText;
}

/* Selectors here should match the check in
 * nsViewportFrame.cpp:ShouldInTopLayerForFullscreen() */
:fullscreen:not(:root, :-moz-browser-frame) {
  -moz-top-layer: top !important;
}

::backdrop {
  -moz-top-layer: top !important;
  display: block;
  position: fixed;
  top: 0; left: 0;
  right: 0; bottom: 0;
  /* This prevents undesired interactions with the selection code. */
  user-select: none;
}

:fullscreen:not(:root)::backdrop {
  background: black;
}

/* XML parse error reporting */

parsererror|parsererror {
  display: block;
  font-family: sans-serif;
  font-weight: bold;
  white-space: pre;
  margin: 1em;
  padding: 1em;
  border-width: thin;
  border-style: inset;
  border-color: red;
  font-size: 14pt;
  background-color: lightyellow;
  color: black;
}

parsererror|sourcetext {
  display: block;
  white-space: pre;
  font-family: -moz-fixed;
  margin-top: 2em;
  margin-bottom: 1em;
  color: red;
  font-weight: bold;
  font-size: 12pt;
}

div:-moz-native-anonymous.moz-accessiblecaret {
  /* Add transition effect to make caret size changing smoother. */
  transition-property: width, height, margin-left;

  position: absolute;
  z-index: 2147483647;
}

div:-moz-native-anonymous.moz-accessiblecaret > :is(#text-overlay, #image) {
  width: 100%;

  /* Override this property in moz-custom-content-container to make dummy touch
   * listener work. */
  pointer-events: auto;
}

div:-moz-native-anonymous.moz-accessiblecaret > #image {
  background-position: center top;
  background-size: 100%;
  background-repeat: no-repeat;
  background-origin: content-box;
}

div:-moz-native-anonymous.moz-accessiblecaret.normal > #image {
  background-image: image-set(
    url("resource://gre-resources/accessiblecaret-normal@1x.png"),
    url("resource://gre-resources/accessiblecaret-normal@1.5x.png") 1.5x,
    url("resource://gre-resources/accessiblecaret-normal@2x.png") 2x,
    url("resource://gre-resources/accessiblecaret-normal@2.25x.png") 2.25x
  );
}

div:-moz-native-anonymous.moz-accessiblecaret.left > :is(#text-overlay, #image) {
  margin-left: -39%;
}

div:-moz-native-anonymous.moz-accessiblecaret.left > #image {
  background-image: image-set(
    url("resource://gre-resources/accessiblecaret-tilt-left@1x.png"),
    url("resource://gre-resources/accessiblecaret-tilt-left@1.5x.png") 1.5x,
    url("resource://gre-resources/accessiblecaret-tilt-left@2x.png") 2x,
    url("resource://gre-resources/accessiblecaret-tilt-left@2.25x.png") 2.25x
  );
}

div:-moz-native-anonymous.moz-accessiblecaret.right > :is(#text-overlay, #image) {
  margin-left: 41%;
}

div:-moz-native-anonymous.moz-accessiblecaret.right > #image {
  background-image: image-set(
    url("resource://gre-resources/accessiblecaret-tilt-right@1x.png"),
    url("resource://gre-resources/accessiblecaret-tilt-right@1.5x.png") 1.5x,
    url("resource://gre-resources/accessiblecaret-tilt-right@2x.png") 2x,
    url("resource://gre-resources/accessiblecaret-tilt-right@2.25x.png") 2.25x
  );
}

div:-moz-native-anonymous.moz-accessiblecaret.none {
  display: none;
}

div:-moz-native-anonymous.moz-accessiblecaret.hidden {
  visibility: hidden;
}

@media (-moz-platform: android) {
  div:-moz-native-anonymous.moz-accessiblecaret > :is(#text-overlay, #image) {
    /* border: 0.1px solid red; */ /* Uncomment border to see the touch target. */
    padding-left: 59%; /* Enlarge the touch area. ((48-22)/2)px / 22px ~= 59% */
    padding-right: 59%; /* Enlarge the touch area. */
    margin-left: -59%;
  }

  div:-moz-native-anonymous.moz-accessiblecaret > #image {
    padding-bottom: 59%; /* Enlarge the touch area. */
  }

  div:-moz-native-anonymous.moz-accessiblecaret.normal > #image {
    background-image: url("chrome://geckoview/skin/images/accessiblecaret-normal.svg");
  }

  div:-moz-native-anonymous.moz-accessiblecaret.left > :is(#text-overlay, #image) {
    margin-left: -109%;
  }

  div:-moz-native-anonymous.moz-accessiblecaret.left > #image {
    background-image: url("chrome://geckoview/skin/images/accessiblecaret-tilt-left.svg");
  }

  div:-moz-native-anonymous.moz-accessiblecaret.right > :is(#text-overlay, #image) {
    margin-left: -12%;
  }

  div:-moz-native-anonymous.moz-accessiblecaret.right > #image {
    background-image: url("chrome://geckoview/skin/images/accessiblecaret-tilt-right.svg");
  }
}

/* Custom content container in the CanvasFrame, positioned on top of everything
   everything else, not reacting to pointer events. */
div:-moz-native-anonymous.moz-custom-content-container {
  pointer-events: none;
  user-select: none;
  -moz-top-layer: top;
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
}
