/*
 * SPDX-FileCopyrightText: 2023 John Colagioia
 *
 * SPDX-License-Identifier: AGPL-3.0-or-later
 */

/* Based on https://m3.material.io/ available under the MIT
 * license.
 */

/* Make disabled widgets look disabled. */
*:disabled {
  filter: saturate(10%);
}

*:disabled:hover {
  filter: brightness(100%) saturate(10%) !important;
}

/* Buttons (mostly) */
button,
input,
input::file-selector-button {
	overflow: visible;
}

button:active,
input:active,
input::file-selector-button:active {
  border-style: inset;
	filter: brightness(80%) saturate(80%);
}

button,
input,
input::file-selector-button,
optgroup,
select,
textarea {
	font-family: sans-serif;
	font-size: 100%;
	line-height: 1.15;
	margin: 0;
}

button,
input[type="button"],
input[type="reset"],
input[type="submit"],
input::file-selector-button {
	-webkit-box-shadow: 0 0.125em 0.125em 0 rgba(0,0,0,0.14),0 0.1875em 0.0625em -0.125em rgba(0,0,0,0.12),0 0.0625em 0.3125em 0 rgba(0,0,0,0.2);
  background-color: var(--green);
  border: none;
  border-radius: 0.125em;
	box-shadow: 0 0.125em 0.125em 0 rgba(0,0,0,0.14),0 0.1875em 0.0625em -0.125em rgba(0,0,0,0.12),0 0.0625em 0.3125em 0 rgba(0,0,0,0.2);
  color: var(--base01);
  height: 2.5em;
  letter-spacing: 0.0.3125em;
  padding: 0 1em;
  text-align: center;
  text-decoration: none;
  text-transform: uppercase;
}

input[type="reset"],
button[type="reset"] {
  background-color: var(--red);
}

button:hover,
input[type="button"]:hover,
input[type="reset"]:hover,
input[type="submit"]:hover,
input::file-selector-button {
  filter: brightness(125%);
}

button:hover:active,
input[type="button"]:hover:active,
input[type="reset"]:hover:active,
input[type="submit"]:hover:active,
input::file-selector-button {
  border-style: inset;
	filter: brightness(80%) saturate(80%);
}

/* Checkboxes */
[type="checkbox"]:not(:checked),
[type="checkbox"]:checked {
	position: absolute;
	opacity: 0;
	pointer-events: none;
}

[type="checkbox"],
[type="radio"] {
	-webkit-box-sizing: border-box;
	box-sizing: border-box;
	padding: 0;
}

[type="checkbox"]:not(.filled-in) + span::after {
	border: 0;
	-webkit-transform: scale(0);
	transform: scale(0);
}

[type="checkbox"] + span::before,
[type="checkbox"]:not(.filled-in) + span::after {
	content: '';
	position: absolute;
	top: 0;
	left: 0;
	width: 1em;
	height: 1em;
	z-index: 0;
	border: 0.125em solid var(--base01);
	border-radius: 0.0625em;
	margin-top: 0.1875em;
	-webkit-transition: .2s;
	transition: .2s;
}

[type="checkbox"] + span {
	position: relative;
	padding-left: 2.2em;
	cursor: pointer;
	display: inline-block;
	height: 1.5em;
	line-height: 1.5em;
	font-size: 1rem;
	-webkit-user-select: none;
	-moz-user-select: none;
	-ms-user-select: none;
	user-select: none;
}

[type="checkbox"]:not(.filled-in) + span::after {
	border: 0;
	-webkit-transform: scale(0);
	transform: scale(0);
}

[type="checkbox"]:checked + span::before {
	top: -0.33em;
	left: -0.3125em;
	width: 0.75em;
	height: 1.375em;
	border-top: 0.125em solid transparent;
	border-left: 0.125em solid transparent;
	border-right: 0.125em solid var(--cyan);
	border-bottom: 0.125em solid var(--cyan);
	-webkit-transform: rotate(40deg);
	transform: rotate(40deg);
	-webkit-backface-visibility: hidden;
	backface-visibility: hidden;
	-webkit-transform-origin: 100% 100%;
	transform-origin: 100% 100%;
}

[type="checkbox"]:indeterminate + span::before {
	top: -0.6875em;
	left: -0.75em;
	width: 0.625em;
	height: 1.375em;
	border-top: none;
	border-left: none;
	border-right: 0.125em solid #26a69a;
	border-bottom: none;
	-webkit-transform: rotate(90deg);
	transform: rotate(90deg);
	-webkit-backface-visibility: hidden;
	backface-visibility: hidden;
	-webkit-transform-origin: 100% 100%;
	transform-origin: 100% 100%;
}

[type="checkbox"]:not(:checked):disabled + span::before {
	border: none;
	background-color: rgba(0,0,0,0.42);
}

/* Radio Buttons */
[type="radio"]:not(:checked),
[type="radio"]:checked {
	position: absolute;
	opacity: 0;
	pointer-events: none;
}

[type="checkbox"],
[type="radio"] {
	-webkit-box-sizing: border-box;
	box-sizing: border-box;
	padding: 0;
}

[type="radio"]:checked + span::after {
	-webkit-transform: scale(1.02);
	transform: scale(1.02);
}

[type="radio"]:checked + span::after,
[type="radio"].with-gap:checked + span::after {
	background-color: var(--cyan);
}

[type="radio"]:checked + span::after,
[type="radio"].with-gap:checked + span::before,
[type="radio"].with-gap:checked + span::after {
	border: 0.125em solid var(--cyan);
}

[type="radio"]:not(:checked) + span::before,
[type="radio"]:not(:checked) + span::after,
[type="radio"]:checked + span::before,
[type="radio"]:checked + span::after,
[type="radio"].with-gap:checked + span::before,
[type="radio"].with-gap:checked + span::after {
	border-radius: 50%;
}

[type="radio"] + span::before,
[type="radio"] + span::after {
	content: '';
	position: absolute;
	left: 0;
	top: 0;
	margin: 0.25em;
	width: 1em;
	height: 1em;
	z-index: 0;
	-webkit-transition: .28s ease;
	transition: .28s ease;
}

[type="radio"]:checked + span::before {
	border: 0.125em solid transparent;
}

[type="radio"]:not(:checked) + span,
[type="radio"]:checked + span {
	position: relative;
	padding-left: 2.2em;
	cursor: pointer;
	display: inline-block;
	height: 1.5em;
	line-height: 1.5em;
	font-size: 1rem;
	-webkit-transition: .28s ease;
	transition: .28s ease;
	-webkit-user-select: none;
	-moz-user-select: none;
	-ms-user-select: none;
	user-select: none;
}

[type="radio"]:checked + span::before {
	border: 0.125em solid transparent;
}

[type="radio"]:not(:checked) + span::before,
[type="radio"]:not(:checked) + span::after,
[type="radio"]:checked + span::before,
[type="radio"]:checked + span::after,
[type="radio"].with-gap:checked + span::before,
[type="radio"].with-gap:checked + span::after {
	border-radius: 50%;
}

[type="radio"] + span::before,
[type="radio"] + span::after {
	content: '';
	position: absolute;
	left: 0;
	top: -0.1em;
	margin: 0.25em;
	width: 1em;
	height: 1em;
	z-index: 0;
	-webkit-transition: .28s ease;
	transition: .28s ease;
}

[type="radio"]:not(:checked) + span,
[type="radio"]:checked + span {
	cursor: pointer;
	line-height: 1.5em;
	font-size: 1rem;
}

[type="radio"]:not(:checked) + span::before,
[type="radio"]:not(:checked) + span::after {
	border: 0.125em solid var(--base0);
}

/* Everything else */
input:not([type]),
input[type="file"],
input[type="text"],
input[type="password"],
input[type="email"],
input[type="url"],
input[type="time"],
input[type="date"],
input[type="week"],
input[type="month"],
input[type="datetime"],
input[type="datetime-local"],
input[type="tel"],
input[type="number"],
input[type="search"],
input[type="color"],
optgroup,
select,
textarea {
	background-color: transparent;
	border: none;
	border-bottom: 0.0625em solid #9e9e9e;
	border-radius: 0;
	color: var(--base0);
	outline: none;
	height: 3rem;
	width: 100%;
	font-size: 1em;
	margin: 0 0 0.5em 0;
	padding: 0;
	-webkit-box-shadow: none;
	box-shadow: none;
	-webkit-box-sizing: content-box;
	box-sizing: content-box;
	-webkit-transition: border .3s, -webkit-box-shadow .3s;
	transition: border .3s, -webkit-box-shadow .3s;
	transition: box-shadow .3s, border .3s;
	transition: box-shadow .3s, border .3s, -webkit-box-shadow .3s;
}

textarea {
	line-height: normal;
	overflow-y: hidden;
	padding: .8rem 0 .8rem 0;
	resize: none;
	min-height: 3rem;
	-webkit-box-sizing: border-box;
	box-sizing: border-box;
}

select {
  background: var(--base03);
  border: 0;
  color: var(--base0);
}

label {
	font-size: .8rem;
	color: var(--base0);
}

