:root {
  /* point to nothing for the fallback */
  --cur-fallback: url();

  --cur-default: var(--set-cursor-default, var(--cur-fallback)), default;
  --cur-none: var(--set-cursor-none, var(--cur-fallback)), none;
  --cur-context-menu: var(--set-cursor-context-menu, var(--cur-fallback)),
    context-menu;
  --cur-help: var(--set-cursor-help, var(--cur-fallback)), help;
  --cur-pointer: var(--set-cursor-pointer, var(--cur-fallback)), pointer;
  --cur-progress: var(--set-cursor-progress, var(--cur-fallback)), progress;
  --cur-wait: var(--set-cursor-wait, var(--cur-fallback)), wait;
  --cur-cell: var(--set-cursor-cell, var(--cur-fallback)), cell;
  --cur-crosshair: var(--set-cursor-crosshair, var(--cur-fallback)), crosshair;
  --cur-text: var(--set-cursor-text, var(--cur-fallback)), text;
  --cur-vertical-text: var(--set-cursor-vertical-text, var(--cur-fallback)),
    vertical-text;
  --cur-alias: var(--set-cursor-alias, var(--cur-fallback)), alias;
  --cur-copy: var(--set-cursor-copy, var(--cur-fallback)), copy;
  --cur-move: var(--set-cursor-move, var(--cur-fallback)), move;
  --cur-no-drop: var(--set-cursor-no-drop, var(--cur-fallback)), no-drop;
  --cur-not-allowed: var(--set-cursor-not-allowed, var(--cur-fallback)),
    not-allowed;
  --cur-grab: var(--set-cursor-grab, var(--cur-fallback)), grab;
  --cur-grabbing: var(--set-cursor-grabbing, var(--cur-fallback)), grabbing;
  --cur-e-resize: var(--set-cursor-e-resize, var(--cur-fallback)), e-resize;
  --cur-n-resize: var(--set-cursor-n-resize, var(--cur-fallback)), n-resize;
  --cur-ne-resize: var(--set-cursor-ne-resize, var(--cur-fallback)), ne-resize;
  --cur-nw-resize: var(--set-cursor-nw-resize, var(--cur-fallback)), nw-resize;
  --cur-s-resize: var(--set-cursor-s-resize, var(--cur-fallback)), s-resize;
  --cur-se-resize: var(--set-cursor-se-resize, var(--cur-fallback)), se-resize;
  --cur-sw-resize: var(--set-cursor-sw-resize, var(--cur-fallback)), sw-resize;
  --cur-w-resize: var(--set-cursor-w-resize, var(--cur-fallback)), w-resize;
  --cur-ew-resize: var(--set-cursor-ew-resize, var(--cur-fallback)), ew-resize;
  --cur-ns-resize: var(--set-cursor-ns-resize, var(--cur-fallback)), ns-resize;
  --cur-nesw-resize: var(--set-cursor-nesw-resize, var(--cur-fallback)),
    nesw-resize;
  --cur-nwse-resize: var(--set-cursor-nwse-resize, var(--cur-fallback)),
    nwse-resize;
  --cur-col-resize: var(--set-cursor-col-resize, var(--cur-fallback)),
    col-resize;
  --cur-row-resize: var(--set-cursor-row-resize, var(--cur-fallback)),
    row-resize;
  --cur-all-scroll: var(--set-cursor-all-scroll, var(--cur-fallback)),
    all-scroll;
  --cur-zoom-in: var(--set-cursor-zoom-in, var(--cur-fallback)), zoom-in;
  --cur-zoom-out: var(--set-cursor-zoom-out, var(--cur-fallback)), zoom-out;

  --cur-auto: var(--cur-default, var(--cur-fallback)), auto;
}

*,
*::before,
*::after {
  cursor: var(--cur-auto);
}

/* The following is converted from Mozilla Firefox's user agent stylesheets, forms.css and ua.css */

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

/* From forms.css */

label {
  cursor: var(--cur-default);
}

input {
  cursor: var(--cur-text);
}

textarea {
  cursor: var(--cur-text);
}

select {
  cursor: var(--cur-default);
}

select > label {
  cursor: unset;
}

input:disabled,
textarea:disabled,
option:disabled,
optgroup:disabled,
select:disabled {
  cursor: unset;
}

input:disabled,
textarea:disabled {
  cursor: var(--cur-default);
}

input[type="hidden"] {
  cursor: var(--cur-auto);
}

input[type="image"] {
  cursor: var(--cur-pointer);
}

input[type="image"]:disabled {
  cursor: unset;
}

input[type="radio"],
input[type="checkbox"] {
  cursor: var(--cur-default);
}

input:is([type="radio"], [type="checkbox"]):is(
    :disabled,
    :disabled:active,
    :disabled:hover:active
  ) {
  cursor: unset;
}

button,
::file-selector-button,
input:is([type="color"], [type="reset"], [type="button"], [type="submit"]) {
  cursor: var(--cur-default);
}

:is(:disabled, :disabled:active)::file-selector-button,
button:is(:disabled, :disabled:active),
input:is([type="reset"], [type="button"], [type="submit"], [type="color"]):is(
    :disabled,
    :disabled:active
  ),
select:is(:disabled, :disabled:active) > button {
  cursor: unset;
}

/* file selector */
input[type="file"] {
  cursor: var(--cur-default);
}

input[type="file"] > label {
  cursor: unset;
}

::file-selector-button {
  cursor: unset;
}

input[type="range"] {
  cursor: var(--cur-default);
}

input:is([type="date"], [type="time"], [type="datetime-local"]) {
  cursor: var(--cur-default);
}

/* ua.css */

:any-link {
  cursor: var(--cur-pointer);
}
