form {
display: block;
}
fieldset {
border: var(--border-width-thin) var(--border-style) var(--color-border);
border-radius: var(--radius);
padding: var(--gutter-md) var(--gutter-lg);
margin: 0 0 var(--gutter-md);
}
legend {
padding: 0 var(--gutter-sm);
font-weight: var(--font-weight-bold);
color: var(--color-text);
}
label {
display: inline-block;
margin-bottom: var(--gutter-xs);
font-weight: var(--font-weight-medium);
color: var(--color-text);
}
label + input,
label + textarea,
label + select {
margin-top: var(--gutter-xs);
}
input,
textarea,
select {
display: block;
width: 100%;
padding: var(--gutter-sm) var(--gutter-md);
font-family: inherit;
font-size: var(--font-size-base);
line-height: var(--line-height-tight);
color: var(--color-text);
background: var(--color-bg);
border: var(--border-width-thin) var(--border-style) var(--color-border);
border-radius: var(--radius);
transition: border-color var(--transition-fast), box-shadow var(--transition-fast);
margin-bottom: var(--gutter-md);
}
textarea {
min-height: var(--textarea-min-height);
resize: vertical;
}
select {
appearance: none;
background-image: linear-gradient(45deg, transparent 50%, var(--color-muted) 50%),
linear-gradient(135deg, var(--color-muted) 50%, transparent 50%);
background-position: calc(100% - 1.1rem) 50%, calc(100% - 0.7rem) 50%;
background-size: 0.4rem 0.4rem, 0.4rem 0.4rem;
background-repeat: no-repeat;
padding-right: var(--gutter-2xl);
}
input:focus,
textarea:focus,
select:focus {
outline: 0;
border-color: var(--color-link);
box-shadow: 0 0 0 3px var(--color-focus-ring);
}
input:disabled,
textarea:disabled,
select:disabled,
button:disabled {
opacity: var(--opacity-disabled);
cursor: not-allowed;
}
input:read-only,
textarea:read-only {
background: var(--color-surface);
color: var(--color-muted);
cursor: default;
}
input:invalid:not(:focus):not(:placeholder-shown),
textarea:invalid:not(:focus):not(:placeholder-shown) {
border-color: var(--color-error);
}
label:has(+ :required)::after {
content: " *";
color: var(--color-error);
}
optgroup {
font-weight: var(--font-weight-bold);
}
input[type="checkbox"],
input[type="radio"] {
display: inline-block;
width: auto;
margin-right: var(--gutter-xs);
margin-bottom: 0;
accent-color: var(--color-link);
}
input[type="range"] {
padding: 0;
border: 0;
background: transparent;
accent-color: var(--color-link);
}
input[type="color"] {
width: 3rem;
height: 2.5rem;
padding: 0.15rem;
cursor: pointer;
}
input[type="file"] {
padding: var(--gutter-xs);
}
input[type="search"] {
appearance: none;
}
input[type="search"]::-webkit-search-cancel-button {
appearance: none;
width: 0.8em;
height: 0.8em;
background: var(--color-muted);
clip-path: polygon(
14% 0, 0 14%, 36% 50%, 0 86%, 14% 100%,
50% 64%, 86% 100%, 100% 86%, 64% 50%,
100% 14%, 86% 0, 50% 36%
);
cursor: pointer;
}
::placeholder {
color: var(--color-muted);
opacity: 1;
}
input[type="checkbox"]:indeterminate {
opacity: 0.7;
}
progress:indeterminate {
opacity: 0.7;
}
button,
[type="submit"],
[type="reset"],
[type="button"] {
display: inline-block;
padding: var(--gutter-sm) var(--gutter-lg);
font-family: inherit;
font-size: var(--font-size-base);
font-weight: var(--font-weight-medium);
line-height: var(--line-height-tight);
color: #fff;
background: var(--color-link);
border: var(--border-width-thin) var(--border-style) var(--color-link);
border-radius: var(--radius);
cursor: pointer;
width: auto;
transition: background var(--transition-fast), border-color var(--transition-fast),
transform var(--transition-fast);
margin-bottom: 0;
}
button:hover:not(:disabled),
[type="submit"]:hover:not(:disabled),
[type="reset"]:hover:not(:disabled),
[type="button"]:hover:not(:disabled) {
background: var(--color-link-hover);
border-color: var(--color-link-hover);
}
button:active:not(:disabled),
[type="submit"]:active:not(:disabled),
[type="reset"]:active:not(:disabled),
[type="button"]:active:not(:disabled) {
transform: var(--button-press);
}
[type="reset"] {
background: var(--color-surface);
color: var(--color-text);
border-color: var(--color-border);
}
[type="reset"]:hover:not(:disabled) {
background: var(--color-surface-2);
border-color: var(--color-border);
color: var(--color-text);
}
progress {
width: 100%;
height: var(--meter-height);
accent-color: var(--color-link);
}
meter {
width: 100%;
height: var(--meter-height);
}
output {
display: inline-block;
padding: 0.15em 0.4em;
background: var(--color-surface);
border-radius: var(--radius-sm);
font-family: var(--font-family-mono);
font-size: var(--font-size-sm);
}