/* 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;
  text-decoration: underline;
}

:link {
  color: LinkText;
}

:visited {
  color: VisitedText;
}

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

:any-link:read-write {
  cursor: text;
}

/* stylelint-disable-next-line media-query-no-invalid */
@media -moz-pref("layout.css.always_underline_links") {
  :any-link {
    text-decoration: underline !important;
  }
}

: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: inherit;
  overflow-clip-box: inherit;
  resize: inherit;
  padding: inherit;
  box-decoration-break: 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) {
  -moz-top-layer: auto !important;
  position: fixed !important;
  inset: 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;
}

/* 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;
}

:root {
  /**
   * 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.
   */
  color: CanvasText;
  /* https://drafts.csswg.org/css-view-transitions-1/#ua-styles */
  view-transition-name: root;
}

::backdrop {
  -moz-top-layer: auto !important;
  display: block;
  position: fixed;
  inset: 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;
}

/* Custom content container in the CanvasFrame, positioned on top of everything
   everything else, not reacting to pointer events. */
.moz-custom-content-container:-moz-native-anonymous {
  pointer-events: none;
  user-select: none;
  -moz-top-layer: auto;
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  /* Initial direction depends on the document, make sure to reset it */
  direction: ltr;
}

/* contenteditable support */

:read-write:focus,
:root:read-write {
  /* Scroll-anchoring shouldn't work in any editable and scrollable elements
   * when user inserts something. */
  overflow-anchor: none;
}

/* https://drafts.csswg.org/css-view-transitions-1/#ua-styles */

/* :root section moved to the other root selectors for performance */

/* ::-moz-snapshot-containing-block is a wrapper of ::view-transition, so we set
 * some necessary properties here, instead of in ::view-transition. */
:root::-moz-snapshot-containing-block {
  /* The snapshot containing block is considered to be an absolute positioning
   * containing block and a fixed positioning containing block for
   * ::view-transition and its descendants.
   * Note that we use will-change property to make sure this pseudo-element
   * establish a fixed positioning containing block. */
  will-change: -moz-fixed-pos-containing-block;
  /* The snapshot containing block itself should be fixed positioned. It doesn't
   * move when scrolling. */
  position: fixed;
  /* The snapshot containing block origin refers to the top-left corner of the
   * snapshot containing block.
   * The snapshot containing block size refers to the width and height of the
   * snapshot containing block as a tuple of two numbers. */
  inset: 0;
  /* Avoid hit-testing on this pseudo-element.
   * Note that this doesn't affect `::view-transition` because that inherits
   * directly from the root. */
  pointer-events: none;
  /* Gecko implementation detail to make sure view transitions render in the
   * top layer */
  -moz-top-layer: auto;
}

:root::view-transition {
  /* This is confusing and we probably should use "position: absolute".
   * https://github.com/w3c/csswg-drafts/issues/12116 */
  position: fixed;
  inset: 0;
}

:root::view-transition-group(*) {
  position: absolute;
  top: 0;
  left: 0;

  animation-duration: 0.25s;
  animation-fill-mode: both;
}

:root::view-transition-image-pair(*) {
  position: absolute;
  inset: 0;

  animation-duration: inherit;
  animation-fill-mode: inherit;
  animation-delay: inherit;
}

:root::view-transition-old(*),
:root::view-transition-new(*) {
  position: absolute;
  inset-block-start: 0;
  inline-size: 100%;
  block-size: auto;

  animation-duration: inherit;
  animation-fill-mode: inherit;
  animation-delay: inherit;
}

/* Avoid exposing these keyframe names when view transitions are disabled */
/* stylelint-disable-next-line media-query-no-invalid */
@media -moz-pref("dom.viewTransitions.enabled") {
  /* Default cross-fade transition */
  @keyframes -ua-view-transition-fade-out {
    to { opacity: 0; }
  }
  @keyframes -ua-view-transition-fade-in {
    from { opacity: 0; }
  }

  /* Keyframes for blending when there are 2 images */
  @keyframes -ua-mix-blend-mode-plus-lighter {
    from { mix-blend-mode: plus-lighter }
    to { mix-blend-mode: plus-lighter }
  }
}
