diff options
Diffstat (limited to 'app/assets/stylesheets/content')
| -rw-r--r-- | app/assets/stylesheets/content/_button.scss | 183 | ||||
| -rw-r--r-- | app/assets/stylesheets/content/_code.scss | 91 | ||||
| -rw-r--r-- | app/assets/stylesheets/content/_embedded.scss | 48 | ||||
| -rw-r--r-- | app/assets/stylesheets/content/_form-alt-input-types.scss | 286 | ||||
| -rw-r--r-- | app/assets/stylesheets/content/_form-checkbox-radio.scss | 138 | ||||
| -rw-r--r-- | app/assets/stylesheets/content/_form.scss | 352 | ||||
| -rw-r--r-- | app/assets/stylesheets/content/_miscs.scss | 33 | ||||
| -rw-r--r-- | app/assets/stylesheets/content/_table.scss | 50 | ||||
| -rw-r--r-- | app/assets/stylesheets/content/_typography.scss | 264 | 
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); +} |