aboutsummaryrefslogtreecommitdiffstats
path: root/app/assets/stylesheets/content/_form.scss
diff options
context:
space:
mode:
Diffstat (limited to 'app/assets/stylesheets/content/_form.scss')
-rw-r--r--app/assets/stylesheets/content/_form.scss352
1 files changed, 352 insertions, 0 deletions
diff --git a/app/assets/stylesheets/content/_form.scss b/app/assets/stylesheets/content/_form.scss
new file mode 100644
index 0000000..1dda8f3
--- /dev/null
+++ b/app/assets/stylesheets/content/_form.scss
@@ -0,0 +1,352 @@
+/**
+ * Form elements
+ */
+
+// Reboot based on :
+// - normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css
+// - sanitize.css v13.0.0 | CC0 1.0 Universal | github.com/csstools/sanitize.css
+// ––––––––––––––––––––
+
+// 1. Change the font styles in all browsers
+// 2. Remove the margin in Firefox and Safari
+input,
+optgroup,
+select,
+textarea {
+ margin: 0; // 2
+ font-size: 1rem; // 1
+ line-height: var(--line-height); // 1
+ font-family: inherit; // 1
+ letter-spacing: inherit; // 2
+}
+
+// Show the overflow in IE.
+input {
+ overflow: visible;
+}
+
+// Remove the inheritance of text transform in Edge, Firefox, and IE
+select {
+ text-transform: none;
+}
+
+// 1. Correct the text wrapping in Edge and IE
+// 2. Correct the color inheritance from `fieldset` elements in IE
+// 3. Remove the padding so developers are not caught out when they zero out
+// `fieldset` elements in all browsers
+legend {
+ max-width: 100%; // 1
+ padding: 0; // 3
+ color: inherit; // 2
+ white-space: normal; // 1
+}
+
+// 1. Remove the default vertical scrollbar in IE
+textarea {
+ overflow: auto; // 1
+}
+
+// Remove the padding in IE 10
+[type="checkbox"],
+[type="radio"] {
+ padding: 0;
+}
+
+// Correct the cursor style of increment and decrement buttons in Safari
+::-webkit-inner-spin-button,
+::-webkit-outer-spin-button {
+ height: auto;
+}
+
+// 1. Correct the odd appearance in Chrome and Safari
+// 2. Correct the outline style in Safari
+[type="search"] {
+ -webkit-appearance: textfield; // 1
+ outline-offset: -2px; // 2
+}
+
+// Remove the inner padding in Chrome and Safari on macOS
+[type="search"]::-webkit-search-decoration {
+ -webkit-appearance: none;
+}
+
+// 1. Correct the inability to style clickable types in iOS and Safari
+// 2. Change font properties to `inherit` in Safari
+::-webkit-file-upload-button {
+ -webkit-appearance: button; // 1
+ font: inherit; // 2
+}
+
+// Remove the inner border and padding of focus outlines in Firefox
+::-moz-focus-inner {
+ padding: 0;
+ border-style: none;
+}
+
+// Remove the focus outline in Firefox
+:-moz-focusring {
+ outline: none;
+}
+
+// Remove the additional :invalid styles in Firefox
+:-moz-ui-invalid {
+ box-shadow: none;
+}
+
+// Change the inconsistent appearance in IE (opinionated)
+::-ms-expand {
+ display: none;
+}
+
+// Remove the border and padding in all browsers (opinionated)
+[type="file"],
+[type="range"] {
+ padding: 0;
+ border-width: 0;
+}
+
+// Pico
+// ––––––––––––––––––––
+
+// Force height for alternatives input types
+input:not([type="checkbox"], [type="radio"], [type="range"]) {
+ height: calc(
+ (1rem * var(--line-height)) + (var(--form-element-spacing-vertical) * 2) +
+ (var(--border-width) * 2)
+ );
+}
+
+// Fieldset
+fieldset {
+ margin: 0;
+ margin-bottom: var(--spacing);
+ padding: 0;
+ border: 0;
+}
+
+// Label & legend
+label,
+fieldset legend {
+ display: block;
+ margin-bottom: calc(var(--spacing) * 0.25);
+ font-weight: var(--form-label-font-weight, var(--font-weight));
+}
+
+// Blocks, 100%
+input:not([type="checkbox"], [type="radio"]),
+select,
+textarea {
+ width: 100%;
+}
+
+// Reset appearance (Not Checkboxes, Radios, Range and File)
+input:not([type="checkbox"], [type="radio"], [type="range"], [type="file"]),
+select,
+textarea {
+ appearance: none;
+ padding: var(--form-element-spacing-vertical)
+ var(--form-element-spacing-horizontal);
+}
+
+// Commons styles
+input,
+select,
+textarea {
+ --background-color: var(--form-element-background-color);
+ --border-color: var(--form-element-border-color);
+ --color: var(--form-element-color);
+ --box-shadow: none;
+ border: var(--border-width) solid var(--border-color);
+ border-radius: var(--border-radius);
+ outline: none;
+ background-color: var(--background-color);
+ box-shadow: var(--box-shadow);
+ color: var(--color);
+ font-weight: var(--font-weight);
+
+ @if $enable-transitions {
+ transition: background-color var(--transition),
+ border-color var(--transition), color var(--transition),
+ box-shadow var(--transition);
+ }
+}
+
+// Active & Focus
+input:not([type="submit"], [type="button"], [type="reset"], [type="checkbox"], [type="radio"], [readonly]),
+:where(select, textarea) {
+ &:is(:active, :focus) {
+ --background-color: var(--form-element-active-background-color);
+ }
+}
+
+// Active & Focus
+input:not([type="submit"], [type="button"], [type="reset"], [role="switch"], [readonly]),
+:where(select, textarea) {
+ &:is(:active, :focus) {
+ --border-color: var(--form-element-active-border-color);
+ }
+}
+
+// Focus
+input:not([type="submit"], [type="button"], [type="reset"], [type="range"], [type="file"], [readonly]),
+select,
+textarea {
+ &:focus {
+ --box-shadow: 0 0 0 var(--outline-width) var(--form-element-focus-color);
+ }
+}
+
+// Disabled
+input:not([type="submit"], [type="button"], [type="reset"])[disabled],
+select[disabled],
+textarea[disabled],
+:where(fieldset[disabled]) :is(input:not([type="submit"], [type="button"], [type="reset"]), select, textarea) {
+ --background-color: var(--form-element-disabled-background-color);
+ --border-color: var(--form-element-disabled-border-color);
+ opacity: var(--form-element-disabled-opacity);
+ pointer-events: none;
+}
+
+// Aria-invalid
+:where(input, select, textarea) {
+ &:not([type="checkbox"], [type="radio"], [type="date"], [type="datetime-local"], [type="month"], [type="time"], [type="week"]) {
+ &[aria-invalid] {
+ @if $enable-important {
+ padding-right: calc(
+ var(--form-element-spacing-horizontal) + 1.5rem
+ ) !important;
+ padding-left: var(--form-element-spacing-horizontal);
+ padding-inline-start: var(--form-element-spacing-horizontal) !important;
+ padding-inline-end: calc(
+ var(--form-element-spacing-horizontal) + 1.5rem
+ ) !important;
+ }
+ @else {
+ padding-right: calc(var(--form-element-spacing-horizontal) + 1.5rem);
+ padding-left: var(--form-element-spacing-horizontal);
+ padding-inline-start: var(--form-element-spacing-horizontal);
+ padding-inline-end: calc(var(--form-element-spacing-horizontal) + 1.5rem);
+ }
+ background-position: center right 0.75rem;
+ background-size: 1rem auto;
+ background-repeat: no-repeat;
+ }
+
+ &[aria-invalid="false"] {
+ background-image: var(--icon-valid);
+ }
+
+ &[aria-invalid="true"] {
+ background-image: var(--icon-invalid);
+ }
+ }
+
+ &[aria-invalid="false"] {
+ --border-color: var(--form-element-valid-border-color);
+
+ &:is(:active, :focus) {
+ @if $enable-important {
+ --border-color: var(--form-element-valid-active-border-color) !important;
+ --box-shadow: 0 0 0 var(--outline-width) var(--form-element-valid-focus-color) !important;
+ }
+ @else {
+ --border-color: var(--form-element-valid-active-border-color);
+ --box-shadow: 0 0 0 var(--outline-width) var(--form-element-valid-focus-color);
+ }
+ }
+ }
+
+ &[aria-invalid="true"] {
+ --border-color: var(--form-element-invalid-border-color);
+
+ &:is(:active, :focus) {
+ @if $enable-important {
+ --border-color: var(--form-element-invalid-active-border-color) !important;
+ --box-shadow: 0 0 0 var(--outline-width) var(--form-element-invalid-focus-color) !important;
+ }
+ @else {
+ --border-color: var(--form-element-invalid-active-border-color);
+ --box-shadow: 0 0 0 var(--outline-width) var(--form-element-invalid-focus-color);
+ }
+ }
+ }
+}
+
+[dir="rtl"] {
+ :where(input, select, textarea) {
+ &:not([type="checkbox"], [type="radio"]) {
+ &:is([aria-invalid], [aria-invalid="true"], [aria-invalid="false"] ){
+ background-position: center left 0.75rem;
+ }
+ }
+ }
+}
+
+// Placeholder
+input::placeholder,
+input::-webkit-input-placeholder,
+textarea::placeholder,
+textarea::-webkit-input-placeholder,
+select:invalid {
+ color: var(--form-element-placeholder-color);
+ opacity: 1;
+}
+
+// Margin bottom (Not Checkboxes and Radios)
+input:not([type="checkbox"], [type="radio"]),
+select,
+textarea {
+ margin-bottom: var(--spacing);
+}
+
+// Select
+select {
+ // Unstyle the caret on `<select>`s in IE10+.
+ &::-ms-expand {
+ border: 0;
+ background-color: transparent;
+ }
+
+ &:not([multiple], [size]) {
+ padding-right: calc(var(--form-element-spacing-horizontal) + 1.5rem);
+ padding-left: var(--form-element-spacing-horizontal);
+ padding-inline-start: var(--form-element-spacing-horizontal);
+ padding-inline-end: calc(var(--form-element-spacing-horizontal) + 1.5rem);
+ background-image: var(--icon-chevron);
+ background-position: center right 0.75rem;
+ background-size: 1rem auto;
+ background-repeat: no-repeat;
+ }
+}
+
+[dir="rtl"] {
+ select {
+ &:not([multiple], [size]) {
+ background-position: center left 0.75rem;
+ }
+ }
+}
+
+// Helper
+$inputs: "input, select, textarea";
+
+@if ($enable-classes and $enable-grid) {
+ $inputs: $inputs + ", .grid";
+}
+
+:where(#{$inputs}) {
+ + small {
+ display: block;
+ width: 100%;
+ margin-top: calc(var(--spacing) * -0.75);
+ margin-bottom: var(--spacing);
+ color: var(--muted-color);
+ }
+}
+
+// Styles for Input inside a label
+label {
+ > :where(input, select, textarea) {
+ margin-top: calc(var(--spacing) * 0.25);
+ }
+}