aboutsummaryrefslogtreecommitdiffstats
path: root/app/assets/stylesheets/content
diff options
context:
space:
mode:
Diffstat (limited to 'app/assets/stylesheets/content')
-rw-r--r--app/assets/stylesheets/content/_button.scss183
-rw-r--r--app/assets/stylesheets/content/_code.scss91
-rw-r--r--app/assets/stylesheets/content/_embedded.scss48
-rw-r--r--app/assets/stylesheets/content/_form-alt-input-types.scss286
-rw-r--r--app/assets/stylesheets/content/_form-checkbox-radio.scss138
-rw-r--r--app/assets/stylesheets/content/_form.scss352
-rw-r--r--app/assets/stylesheets/content/_miscs.scss33
-rw-r--r--app/assets/stylesheets/content/_table.scss50
-rw-r--r--app/assets/stylesheets/content/_typography.scss264
9 files changed, 1445 insertions, 0 deletions
diff --git a/app/assets/stylesheets/content/_button.scss b/app/assets/stylesheets/content/_button.scss
new file mode 100644
index 0000000..075a166
--- /dev/null
+++ b/app/assets/stylesheets/content/_button.scss
@@ -0,0 +1,183 @@
+/**
+ * Button
+ */
+
+// 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 on controls in Safari
+// 3. Show the overflow in Edge
+button {
+ margin: 0; // 2
+ overflow: visible; // 3
+ font-family: inherit; // 1
+ text-transform: none; // 1
+}
+
+// Correct the inability to style buttons in iOS and Safari
+button,
+[type="button"],
+[type="reset"],
+[type="submit"] {
+ -webkit-appearance: button;
+}
+
+// Pico
+// ––––––––––––––––––––
+
+button {
+ display: block;
+ width: 100%;
+ margin-bottom: var(--spacing);
+}
+
+[role="button"] {
+ display: inline-block;
+ text-decoration: none;
+}
+
+button,
+input[type="submit"],
+input[type="button"],
+input[type="reset"],
+[role="button"] {
+ --background-color: var(--primary);
+ --border-color: var(--primary);
+ --color: var(--primary-inverse);
+ --box-shadow: var(--button-box-shadow, 0 0 0 rgba(0, 0, 0, 0));
+ padding: var(--form-element-spacing-vertical)
+ var(--form-element-spacing-horizontal);
+ 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);
+ font-size: 1rem;
+ line-height: var(--line-height);
+ text-align: center;
+ cursor: pointer;
+
+ @if $enable-transitions {
+ transition: background-color var(--transition),
+ border-color var(--transition), color var(--transition),
+ box-shadow var(--transition);
+ }
+
+ &:is([aria-current], :hover, :active, :focus) {
+ --background-color: var(--primary-hover);
+ --border-color: var(--primary-hover);
+ --box-shadow: var(--button-hover-box-shadow, 0 0 0 rgba(0, 0, 0, 0));
+ --color: var(--primary-inverse);
+ }
+
+ &:focus {
+ --box-shadow: var(--button-hover-box-shadow, 0 0 0 rgba(0, 0, 0, 0)),
+ 0 0 0 var(--outline-width) var(--primary-focus);
+ }
+}
+
+// .secondary, .contrast & .outline
+@if $enable-classes {
+
+ // Secondary
+ :is(button, input[type="submit"], input[type="button"], [role="button"]).secondary,
+ input[type="reset"] {
+ --background-color: var(--secondary);
+ --border-color: var(--secondary);
+ --color: var(--secondary-inverse);
+ cursor: pointer;
+
+ &:is([aria-current], :hover, :active, :focus) {
+ --background-color: var(--secondary-hover);
+ --border-color: var(--secondary-hover);
+ --color: var(--secondary-inverse);
+ }
+
+ &:focus {
+ --box-shadow: var(--button-hover-box-shadow, 0 0 0 rgba(0, 0, 0, 0)),
+ 0 0 0 var(--outline-width) var(--secondary-focus);
+ }
+ }
+
+ // Contrast
+ :is(button, input[type="submit"], input[type="button"], [role="button"]).contrast {
+ --background-color: var(--contrast);
+ --border-color: var(--contrast);
+ --color: var(--contrast-inverse);
+
+ &:is([aria-current], :hover, :active, :focus) {
+ --background-color: var(--contrast-hover);
+ --border-color: var(--contrast-hover);
+ --color: var(--contrast-inverse);
+ }
+
+ &:focus {
+ --box-shadow: var(--button-hover-box-shadow, 0 0 0 rgba(0, 0, 0, 0)),
+ 0 0 0 var(--outline-width) var(--contrast-focus);
+ }
+ }
+
+ // Outline (primary)
+ :is(button, input[type="submit"], input[type="button"], [role="button"]).outline,
+ input[type="reset"].outline {
+ --background-color: transparent;
+ --color: var(--primary);
+
+ &:is([aria-current], :hover, :active, :focus) {
+ --background-color: transparent;
+ --color: var(--primary-hover);
+ }
+ }
+
+ // Outline (secondary)
+ :is(button, input[type="submit"], input[type="button"], [role="button"]).outline.secondary,
+ input[type="reset"].outline {
+ --color: var(--secondary);
+
+ &:is([aria-current], :hover, :active, :focus) {
+ --color: var(--secondary-hover);
+ }
+ }
+
+ // Outline (contrast)
+ :is(button, input[type="submit"], input[type="button"], [role="button"]).outline.contrast {
+ --color: var(--contrast);
+
+ &:is([aria-current], :hover, :active, :focus) {
+ --color: var(--contrast-hover);
+ }
+ }
+}
+@else {
+ // Secondary button without .class
+ input[type="reset"] {
+ --background-color: var(--secondary);
+ --border-color: var(--secondary);
+ --color: var(--secondary-inverse);
+ cursor: pointer;
+
+ &:is([aria-current], :hover, :active, :focus) {
+ --background-color: var(--secondary-hover);
+ --border-color: var(--secondary-hover);
+ }
+
+ &:focus {
+ --box-shadow: var(--button-hover-box-shadow, 0 0 0 rgba(0, 0, 0, 0)),
+ 0 0 0 var(--outline-width) var(--secondary-focus);
+ }
+ }
+}
+
+// Button [disabled]
+// Links without href are disabled by default
+:where(button, [type="submit"], [type="button"], [type="reset"], [role="button"])[disabled],
+:where(fieldset[disabled]) :is(button, [type="submit"], [type="button"], [type="reset"], [role="button"]),
+a[role="button"]:not([href]) {
+ opacity: 0.5;
+ pointer-events: none;
+}
diff --git a/app/assets/stylesheets/content/_code.scss b/app/assets/stylesheets/content/_code.scss
new file mode 100644
index 0000000..e03b191
--- /dev/null
+++ b/app/assets/stylesheets/content/_code.scss
@@ -0,0 +1,91 @@
+/**
+ * Code
+ */
+
+// 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. Correct the inheritance and scaling of font size in all browsers
+// 2. Correct the odd `em` font sizing in all browsers
+pre,
+code,
+kbd,
+samp {
+ font-size: 0.875em; // 2
+ font-family: var(--font-family); // 1
+}
+
+// Prevent overflow of the container in all browsers (opinionated)
+pre {
+ -ms-overflow-style: scrollbar;
+ overflow: auto;
+}
+
+// Pico
+// ––––––––––––––––––––
+
+pre,
+code,
+kbd {
+ border-radius: var(--border-radius);
+ background: var(--code-background-color);
+ color: var(--code-color);
+ font-weight: var(--font-weight);
+ line-height: initial;
+}
+
+code,
+kbd {
+ display: inline-block;
+ padding: 0.375rem 0.5rem;
+}
+
+pre {
+ display: block;
+ margin-bottom: var(--spacing);
+ overflow-x: auto;
+
+ > code {
+ display: block;
+ padding: var(--spacing);
+ background: none;
+ font-size: 14px;
+ line-height: var(--line-height);
+ }
+}
+
+// Code Syntax
+code {
+ // Tags
+ b {
+ color: var(--code-tag-color);
+ font-weight: var(--font-weight);
+ }
+
+ // Properties
+ i {
+ color: var(--code-property-color);
+ font-style: normal;
+ }
+
+ // Values
+ u {
+ color: var(--code-value-color);
+ text-decoration: none;
+ }
+
+ // Comments
+ em {
+ color: var(--code-comment-color);
+ font-style: normal;
+ }
+}
+
+// kbd
+kbd {
+ background-color: var(--code-kbd-background-color);
+ color: var(--code-kbd-color);
+ vertical-align: baseline;
+}
diff --git a/app/assets/stylesheets/content/_embedded.scss b/app/assets/stylesheets/content/_embedded.scss
new file mode 100644
index 0000000..d48293b
--- /dev/null
+++ b/app/assets/stylesheets/content/_embedded.scss
@@ -0,0 +1,48 @@
+/**
+ * Embedded content
+ */
+
+// 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
+// ––––––––––––––––––––
+
+// Change the alignment on media elements in all browsers (opinionated)
+:where(audio, canvas, iframe, img, svg, video) {
+ vertical-align: middle;
+}
+
+// Add the correct display in IE 9-
+audio,
+video {
+ display: inline-block;
+}
+
+// Add the correct display in iOS 4-7
+audio:not([controls]) {
+ display: none;
+ height: 0;
+}
+
+// Remove the border on iframes in all browsers (opinionated)
+:where(iframe) {
+ border-style: none;
+}
+
+// 1. Remove the border on images inside links in IE 10.
+// 2. Responsive by default
+img {
+ max-width: 100%; // 2
+ height: auto; // 2
+ border-style: none; // 1
+}
+
+// Change the fill color to match the text color in all browsers (opinionated)
+:where(svg:not([fill])) {
+ fill: currentColor;
+}
+
+// Hide the overflow in IE
+svg:not(:root) {
+ overflow: hidden;
+}
diff --git a/app/assets/stylesheets/content/_form-alt-input-types.scss b/app/assets/stylesheets/content/_form-alt-input-types.scss
new file mode 100644
index 0000000..f22151e
--- /dev/null
+++ b/app/assets/stylesheets/content/_form-alt-input-types.scss
@@ -0,0 +1,286 @@
+/**
+ * Form elements
+ * Alternatives input types (Not Checkboxes & Radios)
+ */
+
+// Color
+[type="color"] {
+ // Wrapper
+ @mixin color-wrapper {
+ padding: 0;
+ }
+
+ &::-webkit-color-swatch-wrapper {
+ @include color-wrapper;
+ }
+
+ &::-moz-focus-inner {
+ @include color-wrapper;
+ }
+
+ // Swatch
+ @mixin color-swatch {
+ border: 0;
+ border-radius: calc(var(--border-radius) * 0.5);
+ }
+
+ &::-webkit-color-swatch {
+ @include color-swatch;
+ }
+
+ &::-moz-color-swatch {
+ @include color-swatch;
+ }
+}
+
+// Date & Time
+// :not() are needed to add Specificity and avoid !important on padding
+input:not([type="checkbox"], [type="radio"], [type="range"], [type="file"]) {
+ &:is([type="date"], [type="datetime-local"], [type="month"], [type="time"], [type="week"]) {
+ --icon-position: 0.75rem;
+ --icon-width: 1rem;
+ padding-right: calc(var(--icon-width) + var(--icon-position));
+ background-image: var(--icon-date);
+ background-position: center right var(--icon-position);
+ background-size: var(--icon-width) auto;
+ background-repeat: no-repeat;
+ }
+
+ // Time
+ &[type="time"] {
+ background-image: var(--icon-time);
+ }
+}
+
+// Calendar picker
+[type="date"],
+[type="datetime-local"],
+[type="month"],
+[type="time"],
+[type="week"] {
+ &::-webkit-calendar-picker-indicator {
+ width: var(--icon-width);
+ margin-right: calc(var(--icon-width) * -1);
+ margin-left: var(--icon-position);
+ opacity: 0;
+ }
+}
+
+[dir="rtl"]
+ :is([type="date"], [type="datetime-local"], [type="month"], [type="time"], [type="week"]) {
+ text-align: right;
+}
+
+// Calendar icons are hidden in Firefox
+@if $enable-important {
+ @-moz-document url-prefix() {
+ [type="date"],
+ [type="datetime-local"],
+ [type="month"],
+ [type="time"],
+ [type="week"] {
+ padding-right: var(--form-element-spacing-horizontal) !important;
+ background-image: none !important;
+ }
+ }
+}
+
+// File
+[type="file"] {
+ --color: var(--muted-color);
+ padding: calc(var(--form-element-spacing-vertical) * 0.5) 0;
+ border: 0;
+ border-radius: 0;
+ background: none;
+
+ @mixin file-selector-button {
+ --background-color: var(--secondary);
+ --border-color: var(--secondary);
+ --color: var(--secondary-inverse);
+ margin-right: calc(var(--spacing) / 2);
+ margin-left: 0;
+ margin-inline-start: 0;
+ margin-inline-end: calc(var(--spacing) / 2);
+ padding: calc(var(--form-element-spacing-vertical) * 0.5)
+ calc(var(--form-element-spacing-horizontal) * 0.5);
+ 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);
+ font-size: 1rem;
+ line-height: var(--line-height);
+ text-align: center;
+ cursor: pointer;
+
+ @if $enable-transitions {
+ transition: background-color var(--transition),
+ border-color var(--transition), color var(--transition),
+ box-shadow var(--transition);
+ }
+
+ &:is(:hover, :active, :focus) {
+ --background-color: var(--secondary-hover);
+ --border-color: var(--secondary-hover);
+ }
+ }
+
+ &::file-selector-button {
+ @include file-selector-button;
+ }
+
+ &::-webkit-file-upload-button {
+ @include file-selector-button;
+ }
+
+ &::-ms-browse {
+ @include file-selector-button;
+ }
+}
+
+// Range
+[type="range"] {
+ // Config
+ $height-track: 0.25rem;
+ $height-thumb: 1.25rem;
+ $border-thumb: 2px;
+
+ // Styles
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ appearance: none;
+ width: 100%;
+ height: $height-thumb;
+ background: none;
+
+ // Slider Track
+ @mixin slider-track {
+ width: 100%;
+ height: $height-track;
+ border-radius: var(--border-radius);
+ background-color: var(--range-border-color);
+
+ @if $enable-transitions {
+ transition: background-color var(--transition),
+ box-shadow var(--transition);
+ }
+ }
+
+ &::-webkit-slider-runnable-track {
+ @include slider-track;
+ }
+
+ &::-moz-range-track {
+ @include slider-track;
+ }
+
+ &::-ms-track {
+ @include slider-track;
+ }
+
+ // Slider Thumb
+ @mixin slider-thumb {
+ -webkit-appearance: none;
+ width: $height-thumb;
+ height: $height-thumb;
+ margin-top: #{(-($height-thumb * 0.5) + ($height-track * 0.5))};
+ border: $border-thumb solid var(--range-thumb-border-color);
+ border-radius: 50%;
+ background-color: var(--range-thumb-color);
+ cursor: pointer;
+
+ @if $enable-transitions {
+ transition: background-color var(--transition),
+ transform var(--transition);
+ }
+ }
+ &::-webkit-slider-thumb {
+ @include slider-thumb;
+ }
+
+ &::-moz-range-thumb {
+ @include slider-thumb;
+ }
+
+ &::-ms-thumb {
+ @include slider-thumb;
+ }
+
+ &:hover,
+ &:focus {
+ --range-border-color: var(--range-active-border-color);
+ --range-thumb-color: var(--range-thumb-hover-color);
+ }
+
+ &:active {
+ --range-thumb-color: var(--range-thumb-active-color);
+
+ // Slider Thumb
+ &::-webkit-slider-thumb {
+ transform: scale(1.25);
+ }
+
+ &::-moz-range-thumb {
+ transform: scale(1.25);
+ }
+
+ &::-ms-thumb {
+ transform: scale(1.25);
+ }
+ }
+}
+
+// Search
+// :not() are needed to add Specificity and avoid !important on padding
+input:not([type="checkbox"], [type="radio"], [type="range"], [type="file"]) {
+ &[type="search"] {
+ padding-inline-start: calc(var(--form-element-spacing-horizontal) + 1.75rem);
+ border-radius: 5rem;
+ background-image: var(--icon-search);
+ background-position: center left 1.125rem;
+ background-size: 1rem auto;
+ background-repeat: no-repeat;
+
+ &[aria-invalid] {
+ @if $enable-important {
+ padding-inline-start: calc(var(--form-element-spacing-horizontal) + 1.75rem) !important;
+ }
+ @else {
+ padding-inline-start: calc(var(--form-element-spacing-horizontal) + 1.75rem);
+ }
+ background-position: center left 1.125rem, center right 0.75rem;
+ }
+
+ &[aria-invalid="false"] {
+ background-image: var(--icon-search), var(--icon-valid);
+ }
+
+ &[aria-invalid="true"] {
+ background-image: var(--icon-search), var(--icon-invalid);
+ }
+ }
+}
+
+// Cancel button
+[type="search"] {
+ &::-webkit-search-cancel-button {
+ -webkit-appearance: none;
+ display: none;
+ }
+}
+
+[dir="rtl"] {
+ :where(input) {
+ &:not([type="checkbox"], [type="radio"], [type="range"], [type="file"]) {
+ &[type="search"] {
+ background-position: center right 1.125rem;
+
+ &[aria-invalid] {
+ background-position: center right 1.125rem, center left 0.75rem;
+ }
+ }
+ }
+ }
+}
diff --git a/app/assets/stylesheets/content/_form-checkbox-radio.scss b/app/assets/stylesheets/content/_form-checkbox-radio.scss
new file mode 100644
index 0000000..c83d35e
--- /dev/null
+++ b/app/assets/stylesheets/content/_form-checkbox-radio.scss
@@ -0,0 +1,138 @@
+/**
+ * Form elements
+ * Checkboxes & Radios
+ */
+
+[type="checkbox"],
+[type="radio"] {
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ appearance: none;
+ width: 1.25em;
+ height: 1.25em;
+ margin-top: -0.125em;
+ margin-right: 0.375em;
+ margin-left: 0;
+ margin-inline-start: 0;
+ margin-inline-end: 0.375em;
+ border-width: var(--border-width);
+ font-size: inherit;
+ vertical-align: middle;
+ cursor: pointer;
+
+ &::-ms-check {
+ display: none; // unstyle IE checkboxes
+ }
+
+ &:checked,
+ &:checked:active,
+ &:checked:focus {
+ --background-color: var(--primary);
+ --border-color: var(--primary);
+ background-image: var(--icon-checkbox);
+ background-position: center;
+ background-size: 0.75em auto;
+ background-repeat: no-repeat;
+ }
+
+ & ~ label {
+ display: inline-block;
+ margin-right: 0.375em;
+ margin-bottom: 0;
+ cursor: pointer;
+ }
+}
+
+// Checkboxes
+[type="checkbox"] {
+ &:indeterminate {
+ --background-color: var(--primary);
+ --border-color: var(--primary);
+ background-image: var(--icon-minus);
+ background-position: center;
+ background-size: 0.75em auto;
+ background-repeat: no-repeat;
+ }
+}
+
+// Radios
+[type="radio"] {
+ border-radius: 50%;
+
+ &:checked,
+ &:checked:active,
+ &:checked:focus {
+ --background-color: var(--primary-inverse);
+ border-width: 0.35em;
+ background-image: none;
+ }
+}
+
+// Switchs
+[type="checkbox"][role="switch"] {
+ --background-color: var(--switch-background-color);
+ --border-color: var(--switch-background-color);
+ --color: var(--switch-color);
+
+ // Config
+ $switch-height: 1.25em;
+ $switch-width: 2.25em;
+ $switch-transition: 0.1s ease-in-out;
+
+ // Styles
+ width: $switch-width;
+ height: $switch-height;
+ border: var(--border-width) solid var(--border-color);
+ border-radius: $switch-height;
+ background-color: var(--background-color);
+ line-height: $switch-height;
+
+ &:focus {
+ --background-color: var(--switch-background-color);
+ --border-color: var(--switch-background-color);
+ }
+
+ &:checked {
+ --background-color: var(--switch-checked-background-color);
+ --border-color: var(--switch-checked-background-color);
+ }
+
+ &:before {
+ display: block;
+ width: calc(#{$switch-height} - (var(--border-width) * 2));
+ height: 100%;
+ border-radius: 50%;
+ background-color: var(--color);
+ content: "";
+
+ @if $enable-transitions {
+ transition: margin $switch-transition;
+ }
+ }
+
+ &:checked {
+ background-image: none;
+
+ &::before {
+ margin-left: calc(#{$switch-width * 0.5} - var(--border-width));
+ margin-inline-start: calc(#{$switch-width * 0.5} - var(--border-width));
+ }
+ }
+}
+
+// Aria-invalid
+[type="checkbox"],
+[type="checkbox"]:checked,
+[type="radio"],
+[type="radio"]:checked,
+[type="checkbox"][role="switch"],
+[type="checkbox"][role="switch"]:checked {
+
+ &[aria-invalid="false"] {
+ --border-color: var(--form-element-valid-border-color);
+ }
+
+ &[aria-invalid="true"] {
+ --border-color: var(--form-element-invalid-border-color);
+ }
+} \ No newline at end of file
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);
+ }
+}
diff --git a/app/assets/stylesheets/content/_miscs.scss b/app/assets/stylesheets/content/_miscs.scss
new file mode 100644
index 0000000..526baba
--- /dev/null
+++ b/app/assets/stylesheets/content/_miscs.scss
@@ -0,0 +1,33 @@
+/**
+ * Miscs
+ */
+
+// 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. Correct the inheritance of border color in Firefox
+// 2. Add the correct box sizing in Firefox
+hr {
+ height: 0; // 2
+ border: 0;
+ border-top: 1px solid var(--muted-border-color);
+ color: inherit; // 1
+}
+
+// Add the correct display in IE 10+
+[hidden],
+template {
+ @if $enable-important {
+ display: none !important;
+ }
+ @else {
+ display: none;
+ }
+}
+
+// Add the correct display in IE 9-
+canvas {
+ display: inline-block;
+}
diff --git a/app/assets/stylesheets/content/_table.scss b/app/assets/stylesheets/content/_table.scss
new file mode 100644
index 0000000..d70cfd7
--- /dev/null
+++ b/app/assets/stylesheets/content/_table.scss
@@ -0,0 +1,50 @@
+/**
+ * Table
+ */
+
+// 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. Collapse border spacing in all browsers (opinionated)
+// 2. Remove text indentation from table contents in Chrome, Edge, and Safari
+:where(table) {
+ width: 100%;
+ border-collapse: collapse; // 1
+ border-spacing: 0;
+ text-indent: 0; // 2
+}
+
+// Pico
+// ––––––––––––––––––––
+
+// Cells
+th,
+td {
+ padding: calc(var(--spacing) / 2) var(--spacing);
+ border-bottom: var(--border-width) solid var(--table-border-color);
+ color: var(--color);
+ font-weight: var(--font-weight);
+ font-size: var(--font-size);
+ text-align: left;
+ text-align: start;
+}
+
+// Footer
+tfoot {
+ th,
+ td {
+ border-top: var(--border-width) solid var(--table-border-color);
+ border-bottom: 0;
+ }
+}
+
+// Striped
+table {
+ &[role="grid"] {
+ tbody tr:nth-child(odd) {
+ background-color: var(--table-row-stripped-background-color);
+ }
+ }
+}
diff --git a/app/assets/stylesheets/content/_typography.scss b/app/assets/stylesheets/content/_typography.scss
new file mode 100644
index 0000000..a9ed71b
--- /dev/null
+++ b/app/assets/stylesheets/content/_typography.scss
@@ -0,0 +1,264 @@
+/**
+ * Typography
+ */
+
+// 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
+// ––––––––––––––––––––
+
+// Add the correct font weight in Chrome, Edge, and Safari
+b,
+strong {
+ font-weight: bolder;
+}
+
+// Prevent `sub` and `sup` elements from affecting the line height in all browsers
+sub,
+sup {
+ position: relative;
+ font-size: 0.75em;
+ line-height: 0;
+ vertical-align: baseline;
+}
+sub {
+ bottom: -0.25em;
+}
+sup {
+ top: -0.5em;
+}
+
+// Pico
+// ––––––––––––––––––––
+
+address,
+blockquote,
+dl,
+figure,
+form,
+ol,
+p,
+pre,
+table,
+ul {
+ margin-top: 0;
+ margin-bottom: var(--typography-spacing-vertical);
+ color: var(--color);
+ font-style: normal;
+ font-weight: var(--font-weight);
+ font-size: var(--font-size);
+}
+
+// Links
+// 1. Remove the gray background on active links in IE 10
+a,
+[role="link"] {
+ --color: var(--primary);
+ --background-color: transparent;
+ outline: none;
+ background-color: var(--background-color); // 1
+ color: var(--color);
+ text-decoration: var(--text-decoration);
+
+ @if $enable-transitions {
+ transition: background-color var(--transition), color var(--transition),
+ text-decoration var(--transition), box-shadow var(--transition);
+ }
+
+ &:is([aria-current], :hover, :active, :focus) {
+ --color: var(--primary-hover);
+ --text-decoration: underline;
+ }
+
+ &:focus {
+ --background-color: var(--primary-focus);
+ }
+
+ @if $enable-classes {
+ // Secondary
+ &.secondary {
+ --color: var(--secondary);
+
+ &:is([aria-current], :hover, :active, :focus) {
+ --color: var(--secondary-hover);
+ }
+
+ &:focus {
+ --background-color: var(--secondary-focus);
+ }
+ }
+
+ // Contrast
+ &.contrast {
+ --color: var(--contrast);
+
+ &:is([aria-current], :hover, :active, :focus) {
+ --color: var(--contrast-hover);
+ }
+
+ &:focus {
+ --background-color: var(--contrast-focus);
+ }
+ }
+ }
+}
+
+// Headings
+h1,
+h2,
+h3,
+h4,
+h5,
+h6 {
+ margin-top: 0;
+ margin-bottom: var(--typography-spacing-vertical);
+ color: var(--color);
+ font-weight: var(--font-weight);
+ font-size: var(--font-size);
+ font-family: var(--font-family);
+}
+
+h1 {
+ --color: var(--h1-color);
+}
+h2 {
+ --color: var(--h2-color);
+}
+h3 {
+ --color: var(--h3-color);
+}
+h4 {
+ --color: var(--h4-color);
+}
+h5 {
+ --color: var(--h5-color);
+}
+h6 {
+ --color: var(--h6-color);
+}
+
+// Margin-top for headings after a typography block
+:where(address, blockquote, dl, figure, form, ol, p, pre, table, ul) {
+ ~ :is(h1, h2, h3, h4, h5, h6) {
+ margin-top: var(--typography-spacing-vertical);
+ }
+}
+
+// Heading group
+@if $enable-classes == false {
+ hgroup {
+ margin-bottom: var(--typography-spacing-vertical);
+
+ > * {
+ margin-bottom: 0;
+ }
+
+ > *:last-child {
+ --color: var(--muted-color);
+ --font-weight: unset;
+ font-size: 1rem;
+ font-family: unset;
+ }
+ }
+}
+
+@if $enable-classes {
+ hgroup,
+ .headings {
+ margin-bottom: var(--typography-spacing-vertical);
+
+ > * {
+ margin-bottom: 0;
+ }
+
+ > *:last-child {
+ --color: var(--muted-color);
+ --font-weight: unset;
+ font-size: 1rem;
+ font-family: unset;
+ }
+ }
+}
+
+// Paragraphs
+p {
+ margin-bottom: var(--typography-spacing-vertical);
+}
+
+// Small
+small {
+ font-size: var(--font-size);
+}
+
+// Lists
+:where(dl, ol, ul) {
+ padding-right: 0;
+ padding-left: var(--spacing);
+ padding-inline-start: var(--spacing);
+ padding-inline-end: 0;
+
+ li {
+ margin-bottom: calc(var(--typography-spacing-vertical) * 0.25);
+ }
+}
+
+// Margin-top for nested lists
+// 1. Remove the margin on nested lists in Chrome, Edge, IE, and Safari
+:where(dl, ol, ul) {
+ :is(dl, ol, ul) {
+ margin: 0; // 1
+ margin-top: calc(var(--typography-spacing-vertical) * 0.25);
+ }
+}
+
+ul li {
+ list-style: square;
+}
+
+// Highlighted text
+mark {
+ padding: 0.125rem 0.25rem;
+ background-color: var(--mark-background-color);
+ color: var(--mark-color);
+ vertical-align: baseline;
+}
+
+// Blockquote
+blockquote {
+ display: block;
+ margin: var(--typography-spacing-vertical) 0;
+ padding: var(--spacing);
+ border-right: none;
+ border-left: 0.25rem solid var(--blockquote-border-color);
+ border-inline-start: 0.25rem solid var(--blockquote-border-color);
+ border-inline-end: none;
+
+ footer {
+ margin-top: calc(var(--typography-spacing-vertical) * 0.5);
+ color: var(--blockquote-footer-color);
+ }
+}
+
+// Abbreviations
+// 1. Remove underline decoration in Chrome, Edge, IE, Opera, and Safari
+abbr[title] {
+ border-bottom: 1px dotted;
+ text-decoration: none; // 1
+ cursor: help;
+}
+
+// Ins
+ins {
+ color: var(--ins-color);
+ text-decoration: none;
+}
+
+// del
+del {
+ color: var(--del-color);
+}
+
+// selection
+::selection {
+ background-color: var(--primary-focus);
+}