/*
 * noVNC general input element CSS
 * Copyright (C) 2022 The noVNC Authors
 * noVNC is licensed under the MPL 2.0 (see LICENSE.txt)
 * This file is licensed under the 2-Clause BSD license (see LICENSE.txt).
 */

/*
 * Common for all inputs
 */
input, input::file-selector-button, button, select, textarea {
  /* Respect standard font settings */
  font: inherit;

  /* Disable default rendering */
  appearance: none;
  background: none;

  padding: 8px 12px;
  border: 1px solid #E7EBEE;
  border-radius: 8px;
  color: black;

  transition: all 0.3s;
}

/*
 * Buttons
 */
input[type=button],
input[type=color],
input[type=image],
input[type=reset],
input[type=submit],
input::file-selector-button,
button,
select {

  /* This avoids it jumping around when :active */
  vertical-align: middle;
  margin-top: 0;

  padding-left: 20px;
  padding-right: 20px;

  /* Disable Chrome's touch tap highlight */
  -webkit-tap-highlight-color: transparent;

  transition: all 0.3s;
  cursor: pointer;
}

/*
 * Select dropdowns
 */
select {
  --select-arrow: url("../images/menu-down.svg");
  background-image: var(--select-arrow);
  background-position: calc(100% - 7px), left top;
  background-repeat: no-repeat;
  background-size: 24px;
  padding-right: calc(2*7px + 8px);
  padding-left: 7px;
  outline: none;
}
/* FIXME: :active isn't set when the <select> is opened in Firefox:
          https://bugzilla.mozilla.org/show_bug.cgi?id=1805406 */
select:active {
  /* Rotated arrow */
}
option {
  color: black;
  background: white;
}

/*
 * Checkboxes
 */
input[type=checkbox] {
  display: inline-flex;
  justify-content: center;
  align-items: center;
  background-color: white;
  background-image: unset;
  border: 1px solid #E7EBEE;
  border-radius: 3px;
  width: 16px;
  height: 16px;
  padding: 0;
  margin: 0px;
  vertical-align: bottom;
  transition: 0.2s background-color linear;
}
input[type=checkbox]:checked {
  background-color: rgb(30, 63, 158);
  border-color: rgb(30, 63, 158);
}
input[type=checkbox]:checked::after {
  content: "";
  display: block; /* width & height doesn't work on inline elements */
  width: 3px;
  height: 7px;
  border: 1px solid white;
  border-width: 0 2px 2px 0;
  transform: rotate(40deg) translateY(-1px);
}

/*
 * Radiobuttons
 */
input[type=radio] {
  border-radius: 50%;
  border: 1px solid dimgrey;
  width: 12px;
  height: 12px;
  padding: 0;
  margin-right: 6px;
  transition: 0.2s border linear;
}
input[type=radio]:checked {
  border: 6px solid rgb(110, 132, 163);
}

/*
 * Range sliders
 */
input[type=range] {
  border: unset;
  border-radius: 3px;
  height: 20px;
  padding: 0;
  background: transparent;
}
/* -webkit-slider.. & -moz-range.. cant be in selector lists:
   https://bugs.chromium.org/p/chromium/issues/detail?id=1154623 */
input[type=range]::-webkit-slider-runnable-track {
  background-color: rgb(30, 63, 158);
  height: 6px;
  border-radius: 3px;
}
input[type=range]::-moz-range-track {
  background-color: rgb(30, 63, 158);
  height: 6px;
  border-radius: 3px;
}
input[type=range]::-webkit-slider-thumb {
  appearance: none;
  width: 20px;
  height: 20px;
  border-radius: 50%;
  background-color: white;
  border: 1px solid rgb(30, 63, 158);
  margin-top: -7px;
  cursor: pointer;
}
input[type=range]::-moz-range-thumb {
  appearance: none;
  width: 20px;
  height: 20px;
  border-radius: 50%;
  background-color: white;
  border: 1px solid rgb(30, 63, 158);
  margin-top: -7px;
  cursor: pointer;
}

/*
 * File choosers
 */
input[type=file] {
  background-image: none;
  border: none;
}
input::file-selector-button {
  margin-right: 6px;
}

/*
 * Hover
 */
input[type=button]:hover,
input[type=color]:hover,
input[type=image]:hover,
input[type=reset]:hover,
input[type=submit]:hover,
input::file-selector-button:hover,
button:hover {
  opacity: 0.8;
}
select:hover {
  background-image: var(--select-arrow);
  background-position: calc(100% - 7px), left top;
  background-repeat: no-repeat;
}
@media (any-pointer: coarse) {
  /* We don't want a hover style after touch input */
  input[type=button]:hover,
  input[type=color]:hover,
  input[type=image]:hover,
  input[type=reset]:hover,
  input[type=submit]:hover,
  input::file-selector-button:hover,
  button:hover {
    background-image: var(--bg-gradient);
  }
  select:hover {
    background-image: var(--select-arrow), var(--bg-gradient);
  }
}

/*
 * Active (clicked)
 */
input[type=button]:active,
input[type=color]:active,
input[type=image]:active,
input[type=reset]:active,
input[type=submit]:active,
input::file-selector-button:active,
button:active,
select:active {
}

/*
 * Focus (tab)
 */
input:focus-visible,
input:focus-visible::file-selector-button,
button:focus-visible,
select:focus-visible,
textarea:focus-visible {
  border: solid 1px rgb(30, 63, 158);
  box-shadow: 0px 1px 6px 0px rgba(30, 63, 158, 0.4);
  outline: none; /* We outline the button instead of the entire element */
}
input[type=file]:focus-visible {
  outline: none; /* We outline the button instead of the entire element */
}

/*
 * Disabled
 */
input:disabled,
input:disabled::file-selector-button,
button:disabled,
select:disabled,
textarea:disabled {
  opacity: 0.4;
}
input[type=button]:disabled,
input[type=color]:disabled,
input[type=image]:disabled,
input[type=reset]:disabled,
input[type=submit]:disabled,
input:disabled::file-selector-button,
button:disabled,
select:disabled {
  background-image: var(--bg-gradient);
  border-bottom-width: 2px;
  margin-top: 0;
}
input[type=file]:disabled {
  background-image: none;
}
select:disabled {
  background-image: var(--select-arrow), var(--bg-gradient);
}
input[type=image]:disabled {
  /* See Firefox bug:
     https://bugzilla.mozilla.org/show_bug.cgi?id=1798304 */
  cursor: default;
}
