From 7469b8c0992864b1ea142c48dbf85c7d1c4863ce Mon Sep 17 00:00:00 2001 From: Eric Bremner <ebremner@uwaterloo.ca> Date: Wed, 27 Apr 2022 09:26:50 -0400 Subject: [PATCH] ISTWCMS-5509: adding minimum to have PL running --- src/patterns/01-core/_index.scss | 2 + src/patterns/01-core/elements/_address.scss | 8 + src/patterns/01-core/elements/_area.scss | 7 + src/patterns/01-core/elements/_article.scss | 4 + src/patterns/01-core/elements/_aside.scss | 4 + src/patterns/01-core/elements/_audio.scss | 11 ++ .../01-core/elements/_blockquote.scss | 33 ++++ src/patterns/01-core/elements/_body.scss | 10 ++ src/patterns/01-core/elements/_button.scss | 16 ++ src/patterns/01-core/elements/_canvas.scss | 6 + src/patterns/01-core/elements/_datalist.scss | 4 + .../01-core/elements/_definition-list.scss | 24 +++ src/patterns/01-core/elements/_details.scss | 29 ++++ src/patterns/01-core/elements/_dialog.scss | 13 ++ src/patterns/01-core/elements/_embed.scss | 6 + src/patterns/01-core/elements/_fieldset.scss | 7 + src/patterns/01-core/elements/_figure.scss | 4 + src/patterns/01-core/elements/_footer.scss | 4 + src/patterns/01-core/elements/_form.scss | 4 + src/patterns/01-core/elements/_header.scss | 4 + src/patterns/01-core/elements/_headings.scss | 40 +++++ .../01-core/elements/_horizontal-rule.scss | 8 + src/patterns/01-core/elements/_html.scss | 28 +++ src/patterns/01-core/elements/_iframe.scss | 10 ++ src/patterns/01-core/elements/_img.scss | 13 ++ src/patterns/01-core/elements/_index.scss | 58 +++++++ .../01-core/elements/_inline-elements.scss | 159 ++++++++++++++++++ src/patterns/01-core/elements/_input.scss | 93 ++++++++++ src/patterns/01-core/elements/_label.scss | 4 + src/patterns/01-core/elements/_legend.scss | 13 ++ src/patterns/01-core/elements/_list-item.scss | 11 ++ src/patterns/01-core/elements/_main.scss | 6 + src/patterns/01-core/elements/_menu.scss | 8 + src/patterns/01-core/elements/_meter.scss | 4 + src/patterns/01-core/elements/_nav.scss | 8 + src/patterns/01-core/elements/_object.scss | 8 + src/patterns/01-core/elements/_option.scss | 12 ++ .../01-core/elements/_ordered-list.scss | 7 + src/patterns/01-core/elements/_output.scss | 4 + src/patterns/01-core/elements/_paragraph.scss | 14 ++ .../01-core/elements/_preformatted-text.scss | 13 ++ src/patterns/01-core/elements/_progress.scss | 6 + src/patterns/01-core/elements/_section.scss | 4 + src/patterns/01-core/elements/_select.scss | 15 ++ src/patterns/01-core/elements/_svg.scss | 21 +++ src/patterns/01-core/elements/_table.scss | 58 +++++++ src/patterns/01-core/elements/_textarea.scss | 16 ++ src/patterns/01-core/elements/_universal.scss | 53 ++++++ .../01-core/elements/_unordered-list.scss | 7 + src/patterns/01-core/elements/_video.scss | 8 + .../font-face/DroidSerif-Bold-webfont.woff | Bin 0 -> 27796 bytes .../font-face/DroidSerif-Regular-webfont.woff | Bin 0 -> 27560 bytes src/patterns/01-core/font-face/_index.scss | 20 +++ .../01-core/mixins/_accessiblity.scss | 52 ++++++ src/patterns/01-core/mixins/_clearfix.scss | 10 ++ src/patterns/01-core/mixins/_headings.scss | 67 ++++++++ .../01-core/mixins/_image-replace.scss | 27 +++ src/patterns/01-core/mixins/_index.scss | 8 + src/patterns/01-core/mixins/_layout.scss | 38 +++++ src/patterns/01-core/mixins/_list.scss | 96 +++++++++++ .../01-core/mixins/_svg-background.scss | 9 + src/patterns/01-core/mixins/_svg-icon.scss | 15 ++ src/patterns/01-core/props/_animations.scss | 120 +++++++++++++ src/patterns/01-core/props/_aspects.scss | 8 + src/patterns/01-core/props/_borders.scss | 20 +++ src/patterns/01-core/props/_colors.scss | 132 +++++++++++++++ src/patterns/01-core/props/_easing.scss | 37 ++++ src/patterns/01-core/props/_fonts.scss | 47 ++++++ src/patterns/01-core/props/_index.scss | 11 ++ src/patterns/01-core/props/_layout.scss | 6 + src/patterns/01-core/props/_media.scss | 8 + src/patterns/01-core/props/_shadows.scss | 41 +++++ src/patterns/01-core/props/_sizes.scss | 39 +++++ src/patterns/01-core/props/_theme.scss | 4 + src/patterns/01-core/props/_zindex.scss | 8 + .../01-core/utilities/_accessibility.scss | 24 +++ src/patterns/01-core/utilities/_clearfix.scss | 9 + .../01-core/utilities/_constrain.scss | 13 ++ src/patterns/01-core/utilities/_index.scss | 3 + src/patterns/02-base/colors/colors.js | 14 ++ src/patterns/02-base/colors/colors.twig | 34 ++++ src/patterns/02-base/colors/colors.yml | 131 +++++++++++++++ src/patterns/global.scss | 2 +- 83 files changed, 1961 insertions(+), 1 deletion(-) create mode 100644 src/patterns/01-core/_index.scss create mode 100644 src/patterns/01-core/elements/_address.scss create mode 100644 src/patterns/01-core/elements/_area.scss create mode 100644 src/patterns/01-core/elements/_article.scss create mode 100644 src/patterns/01-core/elements/_aside.scss create mode 100644 src/patterns/01-core/elements/_audio.scss create mode 100644 src/patterns/01-core/elements/_blockquote.scss create mode 100644 src/patterns/01-core/elements/_body.scss create mode 100644 src/patterns/01-core/elements/_button.scss create mode 100644 src/patterns/01-core/elements/_canvas.scss create mode 100644 src/patterns/01-core/elements/_datalist.scss create mode 100644 src/patterns/01-core/elements/_definition-list.scss create mode 100644 src/patterns/01-core/elements/_details.scss create mode 100644 src/patterns/01-core/elements/_dialog.scss create mode 100644 src/patterns/01-core/elements/_embed.scss create mode 100644 src/patterns/01-core/elements/_fieldset.scss create mode 100644 src/patterns/01-core/elements/_figure.scss create mode 100644 src/patterns/01-core/elements/_footer.scss create mode 100644 src/patterns/01-core/elements/_form.scss create mode 100644 src/patterns/01-core/elements/_header.scss create mode 100644 src/patterns/01-core/elements/_headings.scss create mode 100644 src/patterns/01-core/elements/_horizontal-rule.scss create mode 100644 src/patterns/01-core/elements/_html.scss create mode 100644 src/patterns/01-core/elements/_iframe.scss create mode 100644 src/patterns/01-core/elements/_img.scss create mode 100644 src/patterns/01-core/elements/_index.scss create mode 100644 src/patterns/01-core/elements/_inline-elements.scss create mode 100644 src/patterns/01-core/elements/_input.scss create mode 100644 src/patterns/01-core/elements/_label.scss create mode 100644 src/patterns/01-core/elements/_legend.scss create mode 100644 src/patterns/01-core/elements/_list-item.scss create mode 100644 src/patterns/01-core/elements/_main.scss create mode 100644 src/patterns/01-core/elements/_menu.scss create mode 100644 src/patterns/01-core/elements/_meter.scss create mode 100644 src/patterns/01-core/elements/_nav.scss create mode 100644 src/patterns/01-core/elements/_object.scss create mode 100644 src/patterns/01-core/elements/_option.scss create mode 100644 src/patterns/01-core/elements/_ordered-list.scss create mode 100644 src/patterns/01-core/elements/_output.scss create mode 100644 src/patterns/01-core/elements/_paragraph.scss create mode 100644 src/patterns/01-core/elements/_preformatted-text.scss create mode 100644 src/patterns/01-core/elements/_progress.scss create mode 100644 src/patterns/01-core/elements/_section.scss create mode 100644 src/patterns/01-core/elements/_select.scss create mode 100644 src/patterns/01-core/elements/_svg.scss create mode 100644 src/patterns/01-core/elements/_table.scss create mode 100644 src/patterns/01-core/elements/_textarea.scss create mode 100644 src/patterns/01-core/elements/_universal.scss create mode 100644 src/patterns/01-core/elements/_unordered-list.scss create mode 100644 src/patterns/01-core/elements/_video.scss create mode 100644 src/patterns/01-core/font-face/DroidSerif-Bold-webfont.woff create mode 100644 src/patterns/01-core/font-face/DroidSerif-Regular-webfont.woff create mode 100644 src/patterns/01-core/font-face/_index.scss create mode 100644 src/patterns/01-core/mixins/_accessiblity.scss create mode 100644 src/patterns/01-core/mixins/_clearfix.scss create mode 100644 src/patterns/01-core/mixins/_headings.scss create mode 100644 src/patterns/01-core/mixins/_image-replace.scss create mode 100644 src/patterns/01-core/mixins/_index.scss create mode 100644 src/patterns/01-core/mixins/_layout.scss create mode 100644 src/patterns/01-core/mixins/_list.scss create mode 100644 src/patterns/01-core/mixins/_svg-background.scss create mode 100644 src/patterns/01-core/mixins/_svg-icon.scss create mode 100644 src/patterns/01-core/props/_animations.scss create mode 100644 src/patterns/01-core/props/_aspects.scss create mode 100644 src/patterns/01-core/props/_borders.scss create mode 100644 src/patterns/01-core/props/_colors.scss create mode 100644 src/patterns/01-core/props/_easing.scss create mode 100644 src/patterns/01-core/props/_fonts.scss create mode 100644 src/patterns/01-core/props/_index.scss create mode 100644 src/patterns/01-core/props/_layout.scss create mode 100644 src/patterns/01-core/props/_media.scss create mode 100644 src/patterns/01-core/props/_shadows.scss create mode 100644 src/patterns/01-core/props/_sizes.scss create mode 100644 src/patterns/01-core/props/_theme.scss create mode 100644 src/patterns/01-core/props/_zindex.scss create mode 100644 src/patterns/01-core/utilities/_accessibility.scss create mode 100644 src/patterns/01-core/utilities/_clearfix.scss create mode 100644 src/patterns/01-core/utilities/_constrain.scss create mode 100644 src/patterns/01-core/utilities/_index.scss create mode 100644 src/patterns/02-base/colors/colors.js create mode 100644 src/patterns/02-base/colors/colors.twig create mode 100644 src/patterns/02-base/colors/colors.yml diff --git a/src/patterns/01-core/_index.scss b/src/patterns/01-core/_index.scss new file mode 100644 index 00000000..35b88a49 --- /dev/null +++ b/src/patterns/01-core/_index.scss @@ -0,0 +1,2 @@ +@forward 'mixins'; +@forward 'props/media'; diff --git a/src/patterns/01-core/elements/_address.scss b/src/patterns/01-core/elements/_address.scss new file mode 100644 index 00000000..3cb6dd6c --- /dev/null +++ b/src/patterns/01-core/elements/_address.scss @@ -0,0 +1,8 @@ +// @file +// Address element styles. + +:where(address) { + font-style: normal; + margin-bottom: var(--size-2); + line-height: inherit; +} diff --git a/src/patterns/01-core/elements/_area.scss b/src/patterns/01-core/elements/_area.scss new file mode 100644 index 00000000..3591e0aa --- /dev/null +++ b/src/patterns/01-core/elements/_area.scss @@ -0,0 +1,7 @@ +// @file +// Area element styles. + +:where(area) { + cursor: pointer; + touch-action: manipulation; +} diff --git a/src/patterns/01-core/elements/_article.scss b/src/patterns/01-core/elements/_article.scss new file mode 100644 index 00000000..2ac66cf3 --- /dev/null +++ b/src/patterns/01-core/elements/_article.scss @@ -0,0 +1,4 @@ +// @file +// Article element styles. + +// :where(article) {} diff --git a/src/patterns/01-core/elements/_aside.scss b/src/patterns/01-core/elements/_aside.scss new file mode 100644 index 00000000..86064c99 --- /dev/null +++ b/src/patterns/01-core/elements/_aside.scss @@ -0,0 +1,4 @@ +// @file +// Aside element styles. + +// :where(aside) {} diff --git a/src/patterns/01-core/elements/_audio.scss b/src/patterns/01-core/elements/_audio.scss new file mode 100644 index 00000000..34dbd935 --- /dev/null +++ b/src/patterns/01-core/elements/_audio.scss @@ -0,0 +1,11 @@ +// @file +// Audio element styles. + +:where(audio) { + display: block; + + &:not([controls]) { + display: none; + height: 0; + } +} diff --git a/src/patterns/01-core/elements/_blockquote.scss b/src/patterns/01-core/elements/_blockquote.scss new file mode 100644 index 00000000..77910a55 --- /dev/null +++ b/src/patterns/01-core/elements/_blockquote.scss @@ -0,0 +1,33 @@ +// @file +// Blockquote styles. + +:where(blockquote) { + border-inline-start-width: var(--border-size-3); + display: grid; + font-size: var(--font-size-2); + gap: var(--size-3); + margin: 0 0 var(--size-5); + max-inline-size: var(--size-content-2); + padding-block: var(--size-3); + padding-inline: var(--size-4); + + * + & { + margin-top: var(--size-5); + } + + p { + color: inherit; + font-family: inherit; + font-size: inherit; + font-weight: inherit; + line-height: inherit; + } + + @media print { + page-break-inside: avoid; + } +} + +:where(:not(blockquote) > cite) { + padding-inline-start: var(--size-2); +} diff --git a/src/patterns/01-core/elements/_body.scss b/src/patterns/01-core/elements/_body.scss new file mode 100644 index 00000000..b43409f0 --- /dev/null +++ b/src/patterns/01-core/elements/_body.scss @@ -0,0 +1,10 @@ +// @file +// Body styles. + +:where(body) { + margin: 0; + min-block-size: 100%; + padding: 0; + scrollbar-gutter: stable both-edges; + word-wrap: break-word; +} diff --git a/src/patterns/01-core/elements/_button.scss b/src/patterns/01-core/elements/_button.scss new file mode 100644 index 00000000..ffe2b59e --- /dev/null +++ b/src/patterns/01-core/elements/_button.scss @@ -0,0 +1,16 @@ +// @file +// Button element styles. + +@use '../../01-core' as *; + +:where(button) { + font: inherit; + font-size: inherit; + color: inherit; + letter-spacing: inherit; +} + +:where(button label[for]) { + cursor: pointer; + touch-action: manipulation; +} diff --git a/src/patterns/01-core/elements/_canvas.scss b/src/patterns/01-core/elements/_canvas.scss new file mode 100644 index 00000000..98f64e08 --- /dev/null +++ b/src/patterns/01-core/elements/_canvas.scss @@ -0,0 +1,6 @@ +// @file +// Canvas element styles. + +:where(canvas) { + display: block; +} diff --git a/src/patterns/01-core/elements/_datalist.scss b/src/patterns/01-core/elements/_datalist.scss new file mode 100644 index 00000000..5f14e662 --- /dev/null +++ b/src/patterns/01-core/elements/_datalist.scss @@ -0,0 +1,4 @@ +// @file +// Datalist element styles. + +// :where(datalist) {} diff --git a/src/patterns/01-core/elements/_definition-list.scss b/src/patterns/01-core/elements/_definition-list.scss new file mode 100644 index 00000000..d1bb03f3 --- /dev/null +++ b/src/patterns/01-core/elements/_definition-list.scss @@ -0,0 +1,24 @@ +// @file +// Definition list styles. + +:where(dd) { + max-inline-size: var(--size-content-2); + margin-bottom: var(--size-4); + + dt + & { + margin-top: 0; + } +} + +:where(dt) { + font-weight: var(--font-weight-700); + max-inline-size: var(--size-header-3); + + &:not(:first-of-type) { + margin-block-start: var(--size-5); + } +} + +:where(dl) { + font-size: var(--font-size-2); +} diff --git a/src/patterns/01-core/elements/_details.scss b/src/patterns/01-core/elements/_details.scss new file mode 100644 index 00000000..702e8dda --- /dev/null +++ b/src/patterns/01-core/elements/_details.scss @@ -0,0 +1,29 @@ +// @file +// Details element styles. + +:where(details) { + background: var(--gray-2); + border-radius: var(--radius-2); + padding-block: var(--size-2); + padding-inline: var(--size-3); + + &[open] > summary { + border-end-end-radius: 0; + border-end-start-radius: 0; + margin-bottom: var(--size-2); + } + + p:last-child { + margin-bottom: 0; + } +} + +:where(summary) { + background: var(--gray-3); + border-radius: var(--radius-2); + cursor: pointer; + font-weight: var(--font-weight-700); + margin: calc(var(--size-2) * -1) calc(var(--size-3) * -1); + padding: var(--size-2) var(--size-3); + touch-action: manipulation; +} diff --git a/src/patterns/01-core/elements/_dialog.scss b/src/patterns/01-core/elements/_dialog.scss new file mode 100644 index 00000000..be5fad00 --- /dev/null +++ b/src/patterns/01-core/elements/_dialog.scss @@ -0,0 +1,13 @@ +// @file +// Dialog element styles. + +:where(dialog) { + background-color: var(--gray-0); + color: inherit; + border-radius: var(--radius-3); + box-shadow: var(--shadow-6); + + &::backdrop { + backdrop-filter: blur(25px); + } +} diff --git a/src/patterns/01-core/elements/_embed.scss b/src/patterns/01-core/elements/_embed.scss new file mode 100644 index 00000000..0253a099 --- /dev/null +++ b/src/patterns/01-core/elements/_embed.scss @@ -0,0 +1,6 @@ +// @file +// Embed element styles. + +:where(embed) { + display: block; +} diff --git a/src/patterns/01-core/elements/_fieldset.scss b/src/patterns/01-core/elements/_fieldset.scss new file mode 100644 index 00000000..1fb0cff0 --- /dev/null +++ b/src/patterns/01-core/elements/_fieldset.scss @@ -0,0 +1,7 @@ +// @file +// Fieldset element styles. + +:where(fieldset) { + border-radius: var(--radius-2); + border: var(--border-size-1) solid var(--gray-4); +} diff --git a/src/patterns/01-core/elements/_figure.scss b/src/patterns/01-core/elements/_figure.scss new file mode 100644 index 00000000..d1a8d778 --- /dev/null +++ b/src/patterns/01-core/elements/_figure.scss @@ -0,0 +1,4 @@ +// @file +// Figure element styles. + +// :where(figure) {} diff --git a/src/patterns/01-core/elements/_footer.scss b/src/patterns/01-core/elements/_footer.scss new file mode 100644 index 00000000..032ddc83 --- /dev/null +++ b/src/patterns/01-core/elements/_footer.scss @@ -0,0 +1,4 @@ +// @file +// Footer element styles. + +// :where(footer) {} diff --git a/src/patterns/01-core/elements/_form.scss b/src/patterns/01-core/elements/_form.scss new file mode 100644 index 00000000..c6989741 --- /dev/null +++ b/src/patterns/01-core/elements/_form.scss @@ -0,0 +1,4 @@ +// @file +// Form element styles. + +// :where(form) {} diff --git a/src/patterns/01-core/elements/_header.scss b/src/patterns/01-core/elements/_header.scss new file mode 100644 index 00000000..ac8f5432 --- /dev/null +++ b/src/patterns/01-core/elements/_header.scss @@ -0,0 +1,4 @@ +// @file +// Header element styles. + +// :where(header) {} diff --git a/src/patterns/01-core/elements/_headings.scss b/src/patterns/01-core/elements/_headings.scss new file mode 100644 index 00000000..2556b931 --- /dev/null +++ b/src/patterns/01-core/elements/_headings.scss @@ -0,0 +1,40 @@ +// @file +// Heading styles. + +@use '../../01-core' as *; + +h1 { + @include heading-1; +} + +h2 { + @include heading-2; +} + +h3 { + @include heading-3; +} + +h4 { + @include heading-4; +} + +h5 { + @include heading-5; +} + +h6 { + @include heading-6; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + // Remove top margin for adjacent subheadings. + & + & { + margin-top: 0; + } +} diff --git a/src/patterns/01-core/elements/_horizontal-rule.scss b/src/patterns/01-core/elements/_horizontal-rule.scss new file mode 100644 index 00000000..49ce9b08 --- /dev/null +++ b/src/patterns/01-core/elements/_horizontal-rule.scss @@ -0,0 +1,8 @@ +// @file +// Horizontal rule styles. + +:where(hr) { + background-color: var(--gray-3); + height: var(--border-size-2); + margin-block: var(--size-fluid-2); +} diff --git a/src/patterns/01-core/elements/_html.scss b/src/patterns/01-core/elements/_html.scss new file mode 100644 index 00000000..280a7b82 --- /dev/null +++ b/src/patterns/01-core/elements/_html.scss @@ -0,0 +1,28 @@ +// @file +// HTML styles. + +:where(html) { + --accent-color: var(--blue-6); + --caret-color: var(--blue-6); + --scrollbar-color: var(--gray-7); + --text-0: var(--gray-7); + + accent-color: var(--accent-color); + background-color: white; + block-size: 100%; + caret-color: var(--caret-color); + color: var(--text-0); + font-family: var(--font-sans); + line-height: var(--font-lineheight-4); + min-height: 100%; + scrollbar-color: var(--scrollbar-color) transparent; + text-size-adjust: none; + + @media screen and (prefers-reduced-motion: no-preference) { + scroll-behavior: smooth; + } + + &:has(dialog[open]) { + overflow: hidden; + } +} diff --git a/src/patterns/01-core/elements/_iframe.scss b/src/patterns/01-core/elements/_iframe.scss new file mode 100644 index 00000000..b2e5088c --- /dev/null +++ b/src/patterns/01-core/elements/_iframe.scss @@ -0,0 +1,10 @@ +// @file +// Iframe element styles. + +:where(iframe) { + display: block; + + @media print { + display: none; + } +} diff --git a/src/patterns/01-core/elements/_img.scss b/src/patterns/01-core/elements/_img.scss new file mode 100644 index 00000000..5b4f3a0f --- /dev/null +++ b/src/patterns/01-core/elements/_img.scss @@ -0,0 +1,13 @@ +// @file +// IMG element styles. + +:where(img) { + block-size: auto; + display: block; + max-inline-size: 100%; + + @media print { + max-width: 100% !important; + page-break-inside: avoid; + } +} diff --git a/src/patterns/01-core/elements/_index.scss b/src/patterns/01-core/elements/_index.scss new file mode 100644 index 00000000..b3c6bc39 --- /dev/null +++ b/src/patterns/01-core/elements/_index.scss @@ -0,0 +1,58 @@ +@forward 'universal'; +@forward 'html'; +@forward 'body'; +@forward 'main'; +@forward 'section'; +@forward 'article'; +@forward 'header'; +@forward 'footer'; +@forward 'aside'; +@forward 'menu'; +@forward 'nav'; +@forward 'details'; +@forward 'iframe'; + +// Typography +@forward 'headings'; +@forward 'paragraph'; +@forward 'inline-elements'; +@forward 'blockquote'; +@forward 'preformatted-text'; +@forward 'horizontal-rule'; +@forward 'address'; + +// Lists +@forward 'unordered-list'; +@forward 'ordered-list'; +@forward 'list-item'; +@forward 'definition-list'; + +// Tables +@forward 'table'; + +// Forms +@forward 'button'; +@forward 'datalist'; +@forward 'dialog'; +@forward 'fieldset'; +@forward 'form'; +@forward 'input'; +@forward 'label'; +@forward 'legend'; +@forward 'meter'; +@forward 'option'; +@forward 'output'; +@forward 'progress'; +@forward 'select'; +@forward 'textarea'; + +// Media +@forward 'area'; +@forward 'audio'; +@forward 'canvas'; +@forward 'embed'; +@forward 'figure'; +@forward 'img'; +@forward 'object'; +@forward 'svg'; +@forward 'video'; diff --git a/src/patterns/01-core/elements/_inline-elements.scss b/src/patterns/01-core/elements/_inline-elements.scss new file mode 100644 index 00000000..86067974 --- /dev/null +++ b/src/patterns/01-core/elements/_inline-elements.scss @@ -0,0 +1,159 @@ +// @file +// Inline element styles. + +@use '../../01-core' as *; + +:where(a) { + background-color: transparent; + transition-duration: 200ms; + transition-property: background-color, border-color, color, outline-color, text-decoration-color; + transition-timing-function: var(--ease-in-out-2); + + &:where([href]) { + color: var(--indigo-5); + text-decoration-color: var(--indigo-5); + + &:where(:hover) { + color: var(--indigo-9); + text-decoration-color: var(--indigo-9); + } + + &:where(:visited) { + color: var(--indigo-5); + text-decoration-color: var(--indigo-5); + } + } + + &:where(:not(:hover)) { + text-decoration: inherit; + } + + @media print { + &, + &:visited { + text-decoration: none; + } + + &[href]::after { + content: ' <' attr(href) '>'; + font-family: var(--font-sans); + font-size: 10pt; + font-weight: normal; + text-transform: lowercase; + } + + // Uncomment and replace example.com with your site’s domain. + //&[href^='/']::after { + // content: ' <http://example.com' attr(href) '>'; + //} + + &[href^='javascript:']::after, + &[href^='mailto:']::after, + &[href^='tel:']::after, + &[href^='#']::after, + &[href*='?']::after { + content: ''; + } + } +} + +:where(abbr) { + text-decoration-color: var(--blue-5); + text-underline-offset: var(--size-xs); + + &:hover { + cursor: help; + } + + @media print { + &[title]::after { + content: ' (' attr(title) ')'; + } + } +} + +:where(b) { + font-weight: var(--font-weight-900); +} + +:where(cite) { + color: var(--gray-6); + font-family: var(--font-sans); + font-size: var(--font-size-0); + font-style: normal; + font-weight: var(--font-weight-600); + letter-spacing: var(--font-letterspacing-1); + line-height: var(--font-lineheight-1); +} + +:where(code) { + font-family: var(--font-mono); +} + +:where(del) { + background-color: var(--red-9); + color: var(--red-1); +} + +:where(dfn) { + font-style: italic; +} + +:where(ins) { + background-color: var(--green-9); + color: var(--green-1); + text-underline-offset: var(--size-xs); +} + +:where(kbd) { + border-color: var(--gray-4); + border-radius: var(--radius-2); + border-width: var(--border-size-1); + font-family: var(--font-mono); + padding: var(--size-1) var(--size-2); +} + +:where(mark) { + border-radius: var(--radius-2); + padding-inline: var(--size-1); +} + +:where(samp) { + font-family: var(--font-mono); +} + +:where(small) { + font-size: max(.5em, var(--font-size-0)); + max-inline-size: var(--size-content-1); +} + +:where(strong) { + font-weight: var(--font-weight-700); +} + +:where(sub) { + bottom: -0.25em; + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +:where(sup) { + font-size: 75%; + line-height: 0; + position: relative; + top: -0.5em; + vertical-align: baseline; +} + +:where(u) { + text-underline-offset: var(--size-xs); +} + +:where(var) { + border-color: var(--gray-4); + border-radius: var(--radius-2); + border-width: var(--border-size-1); + padding: var(--size-1) var(--size-2); +} diff --git a/src/patterns/01-core/elements/_input.scss b/src/patterns/01-core/elements/_input.scss new file mode 100644 index 00000000..e3450a4e --- /dev/null +++ b/src/patterns/01-core/elements/_input.scss @@ -0,0 +1,93 @@ +// @file +// Input element styles. + +:where(input) { + color: inherit; + cursor: pointer; + font-size: inherit; + font: inherit; + letter-spacing: inherit; + padding-block: var(--size-1); + padding-inline: var(--size-2); + touch-action: manipulation; +} + +:where(input:not(button, button[type], input[type="button"], input[type="submit"], input[type="reset"])) { + background-color: var(--gray-1); + border-radius: var(--radius-2); + margin-inline-end: var(--size-1); +} + +// Checkbox, Options input +:where(input[type="checkbox"], input[type="radio"]) { + block-size: var(--size-4); + inline-size: var(--size-4); +} + +// file input +:where(input[type="file"]) { + align-self: flex-start; + background-color: white; + border-radius: var(--radius-2); + border-color: var(--gray-3); + border-style: solid; + border-width: var(--border-size-1); + box-shadow: var(--inner-shadow-1); + color: var(--gray-7); + cursor: initial; + display: block; + max-inline-size: 100%; + padding: 0; +} + +:where(input[type="file"])::-webkit-file-upload-button { + color: inherit; + font-size: inherit; + font: inherit; + letter-spacing: inherit; +} + +:where(input[type="file"])::-webkit-file-upload-button, +:where(input[type="file"])::file-selector-button { + cursor: pointer; + margin-inline-end: 1.75ch; +} + +// Number input +:where(input[type="number"])::-webkit-inner-spin-button, +:where(input[type="number"])::-webkit-outer-spin-button { + height: auto; +} + +// Search input +:where(input[type="search"]) { + appearance: textfield; + outline-offset: -2px; + + &::-webkit-search-decoration { + appearance: none; + } +} + +// :where(input[type='button']) {} +// :where(input[type='checkbox']) {} +// :where(input[type='color']) {} +// :where(input[type='date']) {} +// :where(input[type='datetime']) {} +// :where(input[type='datetime-local']) {} +// :where(input[type='email']) {} +// :where(input[type='file']) {} +// :where(input[type='image']) {} +// :where(input[type='month']) {} +// :where(input[type='number']) {} +// :where(input[type='password']) {} +// :where(input[type='radio']) {} +// :where(input[type='range']) {} +// :where(input[type='reset']) {} +// :where(input[type='search']) {} +// :where(input[type='submit']) {} +// :where(input[type='tel']) {} +// :where(input[type='text']) {} +// :where(input[type='time']) {} +// :where(input[type='url']) {} +// :where(input[type='week']) {} diff --git a/src/patterns/01-core/elements/_label.scss b/src/patterns/01-core/elements/_label.scss new file mode 100644 index 00000000..ccc88049 --- /dev/null +++ b/src/patterns/01-core/elements/_label.scss @@ -0,0 +1,4 @@ +// @file +// Label element styles. + +// :where(label) {} diff --git a/src/patterns/01-core/elements/_legend.scss b/src/patterns/01-core/elements/_legend.scss new file mode 100644 index 00000000..93f8db69 --- /dev/null +++ b/src/patterns/01-core/elements/_legend.scss @@ -0,0 +1,13 @@ +// @file +// Legend element styles. + +:where(legend) { + border: 0; + box-sizing: border-box; + color: inherit; + display: table; + margin: 0; + max-width: 100%; + padding: 0; + white-space: normal; +} diff --git a/src/patterns/01-core/elements/_list-item.scss b/src/patterns/01-core/elements/_list-item.scss new file mode 100644 index 00000000..475d0e0c --- /dev/null +++ b/src/patterns/01-core/elements/_list-item.scss @@ -0,0 +1,11 @@ +// @file +// List item styles. + +:where(li) { + max-inline-size: var(--size-content-2); + padding-inline-start: var(--size-1); + + @media print { + page-break-inside: avoid; + } +} diff --git a/src/patterns/01-core/elements/_main.scss b/src/patterns/01-core/elements/_main.scss new file mode 100644 index 00000000..b1da0f0b --- /dev/null +++ b/src/patterns/01-core/elements/_main.scss @@ -0,0 +1,6 @@ +// @file +// Main element styles. + +:where(main) { + display: block; +} diff --git a/src/patterns/01-core/elements/_menu.scss b/src/patterns/01-core/elements/_menu.scss new file mode 100644 index 00000000..137c7cda --- /dev/null +++ b/src/patterns/01-core/elements/_menu.scss @@ -0,0 +1,8 @@ +// @file +// Menu element styles. + +:where(menu) { + display: flex; + gap: var(--size-3); + padding-inline-start: 0; +} diff --git a/src/patterns/01-core/elements/_meter.scss b/src/patterns/01-core/elements/_meter.scss new file mode 100644 index 00000000..39861057 --- /dev/null +++ b/src/patterns/01-core/elements/_meter.scss @@ -0,0 +1,4 @@ +// @file +// Meter element styles. + +// :where(meter) {} diff --git a/src/patterns/01-core/elements/_nav.scss b/src/patterns/01-core/elements/_nav.scss new file mode 100644 index 00000000..408c463b --- /dev/null +++ b/src/patterns/01-core/elements/_nav.scss @@ -0,0 +1,8 @@ +// @file +// Nav element styles. + +:where(nav) { + @media print { + display: none; + } +} diff --git a/src/patterns/01-core/elements/_object.scss b/src/patterns/01-core/elements/_object.scss new file mode 100644 index 00000000..95d29525 --- /dev/null +++ b/src/patterns/01-core/elements/_object.scss @@ -0,0 +1,8 @@ +// @file +// Object element styles. + +:where(object) { + display: block; +} + +// :where(param) {} diff --git a/src/patterns/01-core/elements/_option.scss b/src/patterns/01-core/elements/_option.scss new file mode 100644 index 00000000..f145df10 --- /dev/null +++ b/src/patterns/01-core/elements/_option.scss @@ -0,0 +1,12 @@ +// @file +// Options element styles. + +// :where(option) {} + +:where(optgroup) { + font-family: inherit; + font-size: 100%; + font-weight: var(--font-bold); + line-height: var(--line-xs); + margin: 0; +} diff --git a/src/patterns/01-core/elements/_ordered-list.scss b/src/patterns/01-core/elements/_ordered-list.scss new file mode 100644 index 00000000..612b7693 --- /dev/null +++ b/src/patterns/01-core/elements/_ordered-list.scss @@ -0,0 +1,7 @@ +// @file +// Ordered list styles. + +:where(ol) { + font-size: var(--font-size-2); + padding-inline-start: var(--size-4); +} diff --git a/src/patterns/01-core/elements/_output.scss b/src/patterns/01-core/elements/_output.scss new file mode 100644 index 00000000..b55e678c --- /dev/null +++ b/src/patterns/01-core/elements/_output.scss @@ -0,0 +1,4 @@ +// @file +// Output element styles. + +// :where(output) {} diff --git a/src/patterns/01-core/elements/_paragraph.scss b/src/patterns/01-core/elements/_paragraph.scss new file mode 100644 index 00000000..4f64cc09 --- /dev/null +++ b/src/patterns/01-core/elements/_paragraph.scss @@ -0,0 +1,14 @@ +// @file +// Paragraph styles. + +:where(p) { + font-size: var(--font-size-2); + margin-bottom: var(--size-2);; + margin-top: 0; + max-inline-size: var(--size-content-3); + + @media print { + orphans: 3; + widows: 3; + } +} diff --git a/src/patterns/01-core/elements/_preformatted-text.scss b/src/patterns/01-core/elements/_preformatted-text.scss new file mode 100644 index 00000000..33d3bfa6 --- /dev/null +++ b/src/patterns/01-core/elements/_preformatted-text.scss @@ -0,0 +1,13 @@ +// @file +// Preformatted text styles. + +:where(pre) { + font-family: var(--font-mono); + max-inline-size: max-content; + min-inline-size: 0; + white-space: pre; + + @media print { + page-break-inside: avoid; + } +} diff --git a/src/patterns/01-core/elements/_progress.scss b/src/patterns/01-core/elements/_progress.scss new file mode 100644 index 00000000..fd31f143 --- /dev/null +++ b/src/patterns/01-core/elements/_progress.scss @@ -0,0 +1,6 @@ +// @file +// Progress element styles. + +:where(progress) { + vertical-align: baseline; +} diff --git a/src/patterns/01-core/elements/_section.scss b/src/patterns/01-core/elements/_section.scss new file mode 100644 index 00000000..b7e9ee68 --- /dev/null +++ b/src/patterns/01-core/elements/_section.scss @@ -0,0 +1,4 @@ +// @file +// Section element styles. + +//:where( section) {} diff --git a/src/patterns/01-core/elements/_select.scss b/src/patterns/01-core/elements/_select.scss new file mode 100644 index 00000000..3c1292c7 --- /dev/null +++ b/src/patterns/01-core/elements/_select.scss @@ -0,0 +1,15 @@ +// @file +// Select element styles. + +:where(select) { + background-color: var(--gray-2); + border-radius: var(--radius-2); + color: inherit; + cursor: pointer; + font-size: inherit; + font: inherit; + letter-spacing: inherit; + padding-block: .75ch; + padding-inline: 1.25ch 0; + touch-action: manipulation; +} diff --git a/src/patterns/01-core/elements/_svg.scss b/src/patterns/01-core/elements/_svg.scss new file mode 100644 index 00000000..e63382c7 --- /dev/null +++ b/src/patterns/01-core/elements/_svg.scss @@ -0,0 +1,21 @@ +// @file +// SVG element styles. + +:where(svg) { + block-size: auto; + display: block; + fill: currentColor; + max-inline-size: 100%; + stroke: none; + + &:where(:not([fill])) { + fill: none; + stroke-linecap: round; + stroke-linejoin: round; + stroke: currentColor; + } + + &:where(:not([width])) { + inline-size: var(--size-10); + } +} diff --git a/src/patterns/01-core/elements/_table.scss b/src/patterns/01-core/elements/_table.scss new file mode 100644 index 00000000..4ff02b55 --- /dev/null +++ b/src/patterns/01-core/elements/_table.scss @@ -0,0 +1,58 @@ +// @file +// Table styles. + +:where(caption) { + color: var(--gray-5); + padding-bottom: var(--size-1); + padding-top: var(--size-1); + text-align: left; +} + +:where(table) { + border-collapse: collapse; + border-color: var(--gray-2); + caption-side: bottom; + color: var(--gray-8); + margin-bottom: var(--size-2); + vertical-align: top; + width: 100%; + + > :not(caption) > * > * { + background-color: transparent; + border-bottom-width: var(--border-size-1); + padding: var(--size-1); + } + + > tbody { + vertical-align: inherit; + } + + > thead { + vertical-align: bottom; + } + + > :not(:first-child) { + border-top-color: currentColor; + border-top-width: var(--border-size-2); + } +} + +:where(thead, tbody, tfoot, tr, td, th) { + border-color: inherit; +} + +:where(thead) { + @media print { + display: table-header-group; + } +} + +:where(tr) { + @media print { + page-break-inside: avoid; + } +} + +:where(th) { + text-align: inherit; +} diff --git a/src/patterns/01-core/elements/_textarea.scss b/src/patterns/01-core/elements/_textarea.scss new file mode 100644 index 00000000..ad52287d --- /dev/null +++ b/src/patterns/01-core/elements/_textarea.scss @@ -0,0 +1,16 @@ +// @file +// Textarea element styles. + +:where(textarea) { + background-color: var(--gray-2); + border-radius: var(--radius-2); + color: inherit; + cursor: pointer; + font-size: inherit; + font: inherit; + letter-spacing: inherit; + padding-block: var(--size-1); + padding-inline: var(--size-2); + resize: block; + touch-action: manipulation; +} diff --git a/src/patterns/01-core/elements/_universal.scss b/src/patterns/01-core/elements/_universal.scss new file mode 100644 index 00000000..be2e32b1 --- /dev/null +++ b/src/patterns/01-core/elements/_universal.scss @@ -0,0 +1,53 @@ +// @file +// Universal styles. + +*, +::before, +::after { + box-sizing: border-box; +} + +* { + @media print { + background-color: transparent !important; + box-shadow: none !important; + color: #000 !important; + text-shadow: none !important; + } + + @page { + margin: 2cm; + } +} + +:where(:focus-visible) { + outline-color: var(--indigo-7); + outline-offset: 5px; + transition: outline-offset 145ms var(--ease-2); +} + +:where(:not(fieldset, progress, meter)) { + border-width: 0; + border-style: solid; + background-origin: border-box; + background-repeat: no-repeat; +} + +:where(:not(pre) > code, kbd) { + white-space: nowrap; +} + +:where(:not(pre) > code) { + padding: var(--size-1) var(--size-2); + background: var(--gray-2); + border-radius: var(--radius-2); +} + +:where(:not(dialog)) { + margin: 0; +} + +:where([tabindex]:not([tabindex*="-"])) { + cursor: pointer; + touch-action: manipulation; +} diff --git a/src/patterns/01-core/elements/_unordered-list.scss b/src/patterns/01-core/elements/_unordered-list.scss new file mode 100644 index 00000000..5c39180e --- /dev/null +++ b/src/patterns/01-core/elements/_unordered-list.scss @@ -0,0 +1,7 @@ +// @file +// Unordered list styles. + +:where(ul) { + font-size: var(--font-size-2); + padding-inline-start: var(--size-4); +} diff --git a/src/patterns/01-core/elements/_video.scss b/src/patterns/01-core/elements/_video.scss new file mode 100644 index 00000000..f3bdcae4 --- /dev/null +++ b/src/patterns/01-core/elements/_video.scss @@ -0,0 +1,8 @@ +// @file +// Video element styles. + +:where(video) { + block-size: auto; + display: block; + max-inline-size: 100%; +} diff --git a/src/patterns/01-core/font-face/DroidSerif-Bold-webfont.woff b/src/patterns/01-core/font-face/DroidSerif-Bold-webfont.woff new file mode 100644 index 0000000000000000000000000000000000000000..34e60c600c7fb139794737c0b516e11ed04345cb GIT binary patch literal 27796 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 literal 0 HcmV?d00001 diff --git a/src/patterns/01-core/font-face/DroidSerif-Regular-webfont.woff b/src/patterns/01-core/font-face/DroidSerif-Regular-webfont.woff new file mode 100644 index 0000000000000000000000000000000000000000..4c17b4da011d321174346a0cccded93c223e905a GIT binary patch literal 27560 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 E04dJ|5C8xG literal 0 HcmV?d00001 diff --git a/src/patterns/01-core/font-face/_index.scss b/src/patterns/01-core/font-face/_index.scss new file mode 100644 index 00000000..1927e3f7 --- /dev/null +++ b/src/patterns/01-core/font-face/_index.scss @@ -0,0 +1,20 @@ +// @file +// Styles for Font face. + +// Droid Serif Regular. +@font-face { + font-family: 'droid'; + font-style: normal; + font-weight: 400; + font-display: fallback; + src: url('../fonts/DroidSerif-Regular-webfont.woff') format('woff'); +} + +// Droid Serif Bold. +@font-face { + font-family: 'droid'; + font-style: normal; + font-weight: 700; + font-display: fallback; + src: url('../fonts/DroidSerif-Bold-webfont.woff') format('woff'); +} diff --git a/src/patterns/01-core/mixins/_accessiblity.scss b/src/patterns/01-core/mixins/_accessiblity.scss new file mode 100644 index 00000000..133cedac --- /dev/null +++ b/src/patterns/01-core/mixins/_accessiblity.scss @@ -0,0 +1,52 @@ +// @file +// Accessibility mixin + +// Hide an element visually, but have it available for screen readers +@mixin visually-hidden() { + border: 0; + clip: rect(1px 1px 1px 1px); + clip-path: inset(50%); + height: 1px; + overflow: hidden; + padding: 0; + position: absolute; + white-space: nowrap; + width: 1px; + word-wrap: normal; +} + +// Turns off the visually-hidden effect. +@mixin visually-hidden-off() { + clip: auto; + clip-path: none; + height: auto; + overflow: visible; + position: static; + white-space: inherit; + width: auto; +} + +// Makes an element visible when focused if it also has the visually-hidden styles. +@mixin focusable { + &:focus, + &:active { + @include visually-hidden-off; + } +} + +// Hide an element completely hidden, visually and to screen readers. +@mixin hidden() { + display: none; +} + +// Makes an element completely hidden, visually and to screen readers, but maintains its layout. +@mixin invisible() { + visibility: hidden; +} + +// Completely hide an element if it has a true aria-hidden attribute. +@mixin aria-hidden { + &[aria-hidden='true'] { + display: none; + } +} diff --git a/src/patterns/01-core/mixins/_clearfix.scss b/src/patterns/01-core/mixins/_clearfix.scss new file mode 100644 index 00000000..cc485bf1 --- /dev/null +++ b/src/patterns/01-core/mixins/_clearfix.scss @@ -0,0 +1,10 @@ +// @file +// Clearfix + +@mixin clearfix() { + &::after { + clear: both; + content: ''; + display: table; + } +} diff --git a/src/patterns/01-core/mixins/_headings.scss b/src/patterns/01-core/mixins/_headings.scss new file mode 100644 index 00000000..cfcd62ab --- /dev/null +++ b/src/patterns/01-core/mixins/_headings.scss @@ -0,0 +1,67 @@ +// @file +// Typography mixins + +@mixin heading-base { + color: var(--gray-9); + font-family: var(--font-sans); + font-weight: var(--font-weight-900); + hyphens: none; + line-height: var(--font-lineheight-4); + margin: 0 0 var(--size-1); + text-rendering: optimizeLegibility; + + @media print { + orphans: 3; + page-break-after: avoid; + widows: 3; + + &::after { + display: inline-block; + } + } + + * + & { + margin-top: var(--size-2); + } + + a { + color: inherit; + font-weight: inherit; + } +} + +@mixin heading-1 { + @include heading-base; + font-size: var(--font-size-10); + max-inline-size: var(--size-header-1); +} + +@mixin heading-2 { + @include heading-base; + font-size: var(--font-size-8); + max-inline-size: var(--size-header-2); +} + +@mixin heading-3 { + @include heading-base; + font-size: var(--font-size-6); + max-inline-size: var(--size-header-3); +} + +@mixin heading-4 { + @include heading-base; + font-size: var(--font-size-5); + max-inline-size: var(--size-header-3); +} + +@mixin heading-5 { + @include heading-base; + font-size: var(--font-size-3); + max-inline-size: var(--size-header-3); +} + +@mixin heading-6 { + @include heading-base; + font-size: var(--font-size-1); + max-inline-size: var(--size-header-3); +} diff --git a/src/patterns/01-core/mixins/_image-replace.scss b/src/patterns/01-core/mixins/_image-replace.scss new file mode 100644 index 00000000..29ab8c1a --- /dev/null +++ b/src/patterns/01-core/mixins/_image-replace.scss @@ -0,0 +1,27 @@ +// @file +// Image replacement + +// After applying mixin, inline elements will need the display property set to block or inline-block. +@mixin image-replace($width, $height: $width) { + height: $height; + overflow: hidden; + width: $width; + + &::before { + content: ''; + display: block; + height: 150%; + width: 0; + } +} + +// This image replacement approach works with <input> and <button> elements. +// The font-size declaration may cause problems for SEO and browsers with a +// minimum font-size setting. Other inherited styles might also cause problems. +@mixin image-replace-alt($width, $height: $width) { + color: transparent; + font: 0/0 a; + height: $height; + text-shadow: none; + width: $width; +} diff --git a/src/patterns/01-core/mixins/_index.scss b/src/patterns/01-core/mixins/_index.scss new file mode 100644 index 00000000..b297b2a0 --- /dev/null +++ b/src/patterns/01-core/mixins/_index.scss @@ -0,0 +1,8 @@ +@forward 'accessiblity'; +@forward 'clearfix'; +@forward 'headings'; +@forward 'image-replace'; +@forward 'layout'; +@forward 'list'; +@forward 'svg-background'; +@forward 'svg-icon'; diff --git a/src/patterns/01-core/mixins/_layout.scss b/src/patterns/01-core/mixins/_layout.scss new file mode 100644 index 00000000..4bf39ad0 --- /dev/null +++ b/src/patterns/01-core/mixins/_layout.scss @@ -0,0 +1,38 @@ +// @file +// Layout mixins + +@mixin layout-align-left($margin) { + float: left; + + @if $margin { + margin-right: $margin; + } +} + +@mixin layout-align-right($margin) { + float: right; + + @if $margin { + margin-left: $margin; + } +} + +@mixin layout-align-none { + float: none; + margin-left: 0; + margin-right: 0; +} + +@mixin layout-constrain { + margin-left: auto; + margin-right: auto; + max-width: var(--layout-max-width); + padding-left: var(--layout-gutter); + padding-right: var(--layout-gutter); + + // Just in case .l-constrain is nested within another .l-constrain. + & & { + padding-left: 0; + padding-right: 0; + } +} diff --git a/src/patterns/01-core/mixins/_list.scss b/src/patterns/01-core/mixins/_list.scss new file mode 100644 index 00000000..dc35fbd8 --- /dev/null +++ b/src/patterns/01-core/mixins/_list.scss @@ -0,0 +1,96 @@ +// @file +// List Mixins + +@use 'clearfix' as *; +@use '../props/media' as *; + +@mixin list-border { + list-style: none; + margin-left: 0; + padding-left: 0; + + li { + padding-left: 0; + } + + > li { + border-bottom: 1px solid var(--gray-5); + padding: var(--size-05); + } +} + +@mixin list-column { + list-style: none; + margin-left: 0; + padding-left: 0; + + li { + padding-left: 0; + } + + > li { + break-inside: avoid-column; + display: table; + margin-bottom: 0; + padding-bottom: var(--size-05); + } + + @media(min-width: $screen-sm) { + column-count: 2; + column-gap: var(--size-4); + } +} + +@mixin list-inline { + list-style-type: none; + margin-left: 0; + padding-left: 0; + + li { + padding-left: 0; + } + + > li { + display: inline; + } +} + +@mixin list-pipeline { + @include clearfix; + list-style-type: none; + margin-left: 0; + padding-left: 0; + + > li { + border-right: 1px solid var(--gray-5); + display: block; + float: left; + margin-right: 0.75em; + padding-left: 0; + padding-right: 0.75em; + + &.is-active { + font-weight: 700; + } + + &:last-child { + border-right: 0; + margin-right: 0; + padding-right: 0; + } + } +} + +@mixin list-unstyled { + list-style-type: none; + margin: 0; + padding: 0; + + li { + padding-left: 0; + + &::before { + display: none; + } + } +} diff --git a/src/patterns/01-core/mixins/_svg-background.scss b/src/patterns/01-core/mixins/_svg-background.scss new file mode 100644 index 00000000..b01a40d0 --- /dev/null +++ b/src/patterns/01-core/mixins/_svg-background.scss @@ -0,0 +1,9 @@ +// @file +// SVG background image Mixin + +@mixin svg-background($path) { + background-image: url($path), linear-gradient(transparent, transparent); + background-repeat: no-repeat; + background-size: 100%; + display: inline-block; +} diff --git a/src/patterns/01-core/mixins/_svg-icon.scss b/src/patterns/01-core/mixins/_svg-icon.scss new file mode 100644 index 00000000..cf6bf562 --- /dev/null +++ b/src/patterns/01-core/mixins/_svg-icon.scss @@ -0,0 +1,15 @@ +// @file +// SVG Icon mixins + +@mixin svg-icon($path, $height, $width, $color) { + background-color: $color; + background-size: cover; + content: ''; + display: inline-block; + height: $height; + mask-image: url($path); + mask-position: center; + mask-repeat: no-repeat; + mask-size: contain; + width: $width; +} diff --git a/src/patterns/01-core/props/_animations.scss b/src/patterns/01-core/props/_animations.scss new file mode 100644 index 00000000..980d121d --- /dev/null +++ b/src/patterns/01-core/props/_animations.scss @@ -0,0 +1,120 @@ +:where(html) { + --animation-fade-in: fade-in .5s var(--ease-3); + --animation-fade-out: fade-out .5s var(--ease-3); + --animation-scale-up: scale-up .5s var(--ease-3); + --animation-scale-down: scale-down .5s var(--ease-3); + --animation-slide-out-up: slide-out-up .5s var(--ease-3); + --animation-slide-out-down: slide-out-down .5s var(--ease-3); + --animation-slide-out-right: slide-out-right .5s var(--ease-3); + --animation-slide-out-left: slide-out-left .5s var(--ease-3); + --animation-slide-in-up: slide-in-up .5s var(--ease-3); + --animation-slide-in-down: slide-in-down .5s var(--ease-3); + --animation-slide-in-right: slide-in-right .5s var(--ease-3); + --animation-slide-in-left: slide-in-left .5s var(--ease-3); + --animation-shake-x: shake-x .75s var(--ease-out-5); + --animation-shake-y: shake-y .75s var(--ease-out-5); + --animation-spin: spin 2s linear infinite; + --animation-ping: ping 5s var(--ease-out-3) infinite; + --animation-blink: blink 1s var(--ease-out-3) infinite; + --animation-float: float 3s var(--ease-in-out-3) infinite; + --animation-bounce: bounce 2s var(--ease-squish-2) infinite; + --animation-pulse: pulse 2s var(--ease-out-3) infinite; +} + +@keyframes fade-in { + to { opacity: 1 } +} + +@keyframes fade-out { + to { opacity: 0 } +} + +@keyframes scale-up { + to { transform: scale(1.25) } +} + +@keyframes scale-down { + to { transform: scale(.75) } +} + +@keyframes slide-out-up { + to { transform: translateY(-100%) } +} + +@keyframes slide-out-down { + to { transform: translateY(100%) } +} + +@keyframes slide-out-right { + to { transform: translateX(100%) } +} + +@keyframes slide-out-left { + to { transform: translateX(-100%) } +} + +@keyframes slide-in-up { + from { transform: translateY(100%) } +} + +@keyframes slide-in-down { + from { transform: translateY(-100%) } +} + +@keyframes slide-in-right { + from { transform: translateX(-100%) } +} + +@keyframes slide-in-left { + from { transform: translateX(100%) } +} + +@keyframes shake-x { + 0%, 100% { transform: translateX(0%) } + 20% { transform: translateX(-5%) } + 40% { transform: translateX(5%) } + 60% { transform: translateX(-5%) } + 80% { transform: translateX(5%) } +} + +@keyframes shake-y { + 0%, 100% { transform: translateY(0%) } + 20% { transform: translateY(-5%) } + 40% { transform: translateY(5%) } + 60% { transform: translateY(-5%) } + 80% { transform: translateY(5%) } +} + +@keyframes spin { + to { transform: rotate(1turn) } +} + +@keyframes ping { + 90%, 100% { + transform: scale(2); + opacity: 0; + } +} + +@keyframes blink { + 0%, 100% { + opacity: 1 + } + 50% { + opacity: .5 + } +} + +@keyframes float { + 50% { transform: translateY(-25%) } +} + +@keyframes bounce { + 25% { transform: translateY(-20%) } + 40% { transform: translateY(-3%) } + 0%, 60%, 100% { transform: translateY(0) } +} + +@keyframes pulse { + 50% { transform: scale(.9,.9) } +} diff --git a/src/patterns/01-core/props/_aspects.scss b/src/patterns/01-core/props/_aspects.scss new file mode 100644 index 00000000..a7422c90 --- /dev/null +++ b/src/patterns/01-core/props/_aspects.scss @@ -0,0 +1,8 @@ +:where(html) { + --ratio-square: 1; + --ratio-landscape: 4/3; + --ratio-portrait: 3/4; + --ratio-widescreen: 16/9; + --ratio-ultrawide: 18/5; + --ratio-golden: 1.6180/1; +} diff --git a/src/patterns/01-core/props/_borders.scss b/src/patterns/01-core/props/_borders.scss new file mode 100644 index 00000000..3b04e35d --- /dev/null +++ b/src/patterns/01-core/props/_borders.scss @@ -0,0 +1,20 @@ +:where(html) { + --border-size-1: 1px; + --border-size-2: 2px; + --border-size-3: 5px; + --border-size-4: 10px; + --border-size-5: 25px; + --radius-1: 2px; + --radius-2: 5px; + --radius-3: 1rem; + --radius-4: 2rem; + --radius-5: 4rem; + --radius-6: 8rem; + --radius-round: 1e5px; + --radius-conditional-1: clamp(0px, calc(100vw - 100%) * 1e5, var(--radius-1)); + --radius-conditional-2: clamp(0px, calc(100vw - 100%) * 1e5, var(--radius-2)); + --radius-conditional-3: clamp(0px, calc(100vw - 100%) * 1e5, var(--radius-3)); + --radius-conditional-4: clamp(0px, calc(100vw - 100%) * 1e5, var(--radius-4)); + --radius-conditional-5: clamp(0px, calc(100vw - 100%) * 1e5, var(--radius-5)); + --radius-conditional-6: clamp(0px, calc(100vw - 100%) * 1e5, var(--radius-6)); +} diff --git a/src/patterns/01-core/props/_colors.scss b/src/patterns/01-core/props/_colors.scss new file mode 100644 index 00000000..5b6f5c12 --- /dev/null +++ b/src/patterns/01-core/props/_colors.scss @@ -0,0 +1,132 @@ +:where(html) { + --gray-0: #f8f9fa; + --gray-1: #f1f3f5; + --gray-2: #e9ecef; + --gray-3: #dee2e6; + --gray-4: #ced4da; + --gray-5: #adb5bd; + --gray-6: #868e96; + --gray-7: #495057; + --gray-8: #343a40; + --gray-9: #212529; + --red-0: #fff5f5; + --red-1: #ffe3e3; + --red-2: #ffc9c9; + --red-3: #ffa8a8; + --red-4: #ff8787; + --red-5: #ff6b6b; + --red-6: #fa5252; + --red-7: #f03e3e; + --red-8: #e03131; + --red-9: #c92a2a; + --pink-0: #fff0f6; + --pink-1: #ffdeeb; + --pink-2: #fcc2d7; + --pink-3: #faa2c1; + --pink-4: #f783ac; + --pink-5: #f06595; + --pink-6: #e64980; + --pink-7: #d6336c; + --pink-8: #c2255c; + --pink-9: #a61e4d; + --grape-0: #f8f0fc; + --grape-1: #f3d9fa; + --grape-2: #eebefa; + --grape-3: #e599f7; + --grape-4: #da77f2; + --grape-5: #cc5de8; + --grape-6: #be4bdb; + --grape-7: #ae3ec9; + --grape-8: #9c36b5; + --grape-9: #862e9c; + --violet-0: #f3f0ff; + --violet-1: #e5dbff; + --violet-2: #d0bfff; + --violet-3: #b197fc; + --violet-4: #9775fa; + --violet-5: #845ef7; + --violet-6: #7950f2; + --violet-7: #7048e8; + --violet-8: #6741d9; + --violet-9: #5f3dc4; + --indigo-0: #edf2ff; + --indigo-1: #dbe4ff; + --indigo-2: #bac8ff; + --indigo-3: #91a7ff; + --indigo-4: #748ffc; + --indigo-5: #5c7cfa; + --indigo-6: #4c6ef5; + --indigo-7: #4263eb; + --indigo-8: #3b5bdb; + --indigo-9: #364fc7; + --blue-0: #e7f5ff; + --blue-1: #d0ebff; + --blue-2: #a5d8ff; + --blue-3: #74c0fc; + --blue-4: #4dabf7; + --blue-5: #339af0; + --blue-6: #228be6; + --blue-7: #1c7ed6; + --blue-8: #1971c2; + --blue-9: #1864ab; + --cyan-0: #e3fafc; + --cyan-1: #c5f6fa; + --cyan-2: #99e9f2; + --cyan-3: #66d9e8; + --cyan-4: #3bc9db; + --cyan-5: #22b8cf; + --cyan-6: #15aabf; + --cyan-7: #1098ad; + --cyan-8: #0c8599; + --cyan-9: #0b7285; + --teal-0: #e6fcf5; + --teal-1: #c3fae8; + --teal-2: #96f2d7; + --teal-3: #63e6be; + --teal-4: #38d9a9; + --teal-5: #20c997; + --teal-6: #12b886; + --teal-7: #0ca678; + --teal-8: #099268; + --teal-9: #087f5b; + --green-0: #ebfbee; + --green-1: #d3f9d8; + --green-2: #b2f2bb; + --green-3: #8ce99a; + --green-4: #69db7c; + --green-5: #51cf66; + --green-6: #40c057; + --green-7: #37b24d; + --green-8: #2f9e44; + --green-9: #2b8a3e; + --lime-0: #f4fce3; + --lime-1: #e9fac8; + --lime-2: #d8f5a2; + --lime-3: #c0eb75; + --lime-4: #a9e34b; + --lime-5: #94d82d; + --lime-6: #82c91e; + --lime-7: #74b816; + --lime-8: #66a80f; + --lime-9: #5c940d; + --yellow-0: #fff9db; + --yellow-1: #fff3bf; + --yellow-2: #ffec99; + --yellow-3: #ffe066; + --yellow-4: #ffd43b; + --yellow-5: #fcc419; + --yellow-6: #fab005; + --yellow-7: #f59f00; + --yellow-8: #f08c00; + --yellow-9: #e67700; + --orange-0: #fff4e6; + --orange-1: #ffe8cc; + --orange-2: #ffd8a8; + --orange-3: #ffc078; + --orange-4: #ffa94d; + --orange-5: #ff922b; + --orange-6: #fd7e14; + --orange-7: #f76707; + --orange-8: #e8590c; + --orange-9: #d9480f; +} diff --git a/src/patterns/01-core/props/_easing.scss b/src/patterns/01-core/props/_easing.scss new file mode 100644 index 00000000..b855d8e8 --- /dev/null +++ b/src/patterns/01-core/props/_easing.scss @@ -0,0 +1,37 @@ +:where(html) { + --ease-1: cubic-bezier(.25, 0, .5, 1); + --ease-2: cubic-bezier(.25, 0, .4, 1); + --ease-3: cubic-bezier(.25, 0, .3, 1); + --ease-4: cubic-bezier(.25, 0, .2, 1); + --ease-5: cubic-bezier(.25, 0, .1, 1); + --ease-in-1: cubic-bezier(.25, 0, 1, 1); + --ease-in-2: cubic-bezier(.50, 0, 1, 1); + --ease-in-3: cubic-bezier(.70, 0, 1, 1); + --ease-in-4: cubic-bezier(.90, 0, 1, 1); + --ease-in-5: cubic-bezier(1, 0, 1, 1); + --ease-out-1: cubic-bezier(0, 0, .75, 1); + --ease-out-2: cubic-bezier(0, 0, .50, 1); + --ease-out-3: cubic-bezier(0, 0, .3, 1); + --ease-out-4: cubic-bezier(0, 0, .1, 1); + --ease-out-5: cubic-bezier(0, 0, 0, 1); + --ease-in-out-1: cubic-bezier(.1, 0, .9, 1); + --ease-in-out-2: cubic-bezier(.3, 0, .7, 1); + --ease-in-out-3: cubic-bezier(.5, 0, .5, 1); + --ease-in-out-4: cubic-bezier(.7, 0, .3, 1); + --ease-in-out-5: cubic-bezier(.9, 0, .1, 1); + --ease-elastic-1: cubic-bezier(.5, .75, .75, 1.25); + --ease-elastic-2: cubic-bezier(.5, 1, .75, 1.25); + --ease-elastic-3: cubic-bezier(.5, 1.25, .75, 1.25); + --ease-elastic-4: cubic-bezier(.5, 1.5, .75, 1.25); + --ease-elastic-5: cubic-bezier(.5, 1.75, .75, 1.25); + --ease-squish-1: cubic-bezier(.5, -.1, .1, 1.5); + --ease-squish-2: cubic-bezier(.5, -.3, .1, 1.5); + --ease-squish-3: cubic-bezier(.5, -.5, .1, 1.5); + --ease-squish-4: cubic-bezier(.5, -.7, .1, 1.5); + --ease-squish-5: cubic-bezier(.5, -.9, .1, 1.5); + --ease-step-1: steps(2); + --ease-step-2: steps(3); + --ease-step-3: steps(4); + --ease-step-4: steps(7); + --ease-step-5: steps(10); +} diff --git a/src/patterns/01-core/props/_fonts.scss b/src/patterns/01-core/props/_fonts.scss new file mode 100644 index 00000000..62f8cec7 --- /dev/null +++ b/src/patterns/01-core/props/_fonts.scss @@ -0,0 +1,47 @@ +:where(html) { + --font-sans: Helvetica, sans-serif; + --font-serif: Georgia, 'Times New Roman', Times, serif; + --font-system: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Oxygen-Sans', Ubuntu, Cantarell, 'Fira Sans', 'Droid Sans', sans-serif; + --font-mono: Menlo, Consolas, 'Lucida Console', 'Liberation Mono', 'Courier New', monospace, sans-serif; + --font-weight-100: 100; + --font-weight-200: 200; + --font-weight-300: 300; + --font-weight-400: 400; + --font-weight-500: 500; + --font-weight-600: 600; + --font-weight-700: 700; + --font-weight-800: 800; + --font-weight-900: 900; + --font-size-000: 0.625rem; // 10px + --font-size-00: 0.75rem; // 12px + --font-size-0: 0.875rem; // 14px + --font-size-1: 1rem; // 16px + --font-size-2: 1.125rem; // 18px + --font-size-3: 1.25rem; // 20px + --font-size-4: 1.375rem; // 22px + --font-size-5: 1.5rem; // 24px + --font-size-6: 1.75rem; // 28px + --font-size-7: 2rem; // 32px + --font-size-8: 2.25rem; // 36px + --font-size-9: 2.5rem; // 40px + --font-size-10: 3rem; // 48px + --font-size-11: 3.5rem; // 56px + --font-size-12: 4rem; // 64px + --font-size-13: 5rem; // 80px + --font-size-14: 7.5rem; // 120px + --font-lineheight-00: .95; + --font-lineheight-1: 1.1; + --font-lineheight-2: 1.25; + --font-lineheight-3: 1.375; + --font-lineheight-4: 1.5; + --font-lineheight-5: 1.75; + --font-lineheight-6: 2; + --font-letterspacing-0: -0.05em; + --font-letterspacing-1: 0.025em; + --font-letterspacing-2: 0.050em; + --font-letterspacing-3: 0.75em; + --font-letterspacing-4: 0.150em; + --font-letterspacing-5: 0.500em; + --font-letterspacing-6: 0.750em; + --font-letterspacing-7: 1em; +} diff --git a/src/patterns/01-core/props/_index.scss b/src/patterns/01-core/props/_index.scss new file mode 100644 index 00000000..2bcda520 --- /dev/null +++ b/src/patterns/01-core/props/_index.scss @@ -0,0 +1,11 @@ +@forward 'animations'; +@forward 'aspects'; +@forward 'borders'; +@forward 'colors'; +@forward 'easing'; +@forward 'fonts'; +@forward 'layout'; +@forward 'shadows'; +@forward 'sizes'; +@forward 'zindex'; +@forward 'theme'; diff --git a/src/patterns/01-core/props/_layout.scss b/src/patterns/01-core/props/_layout.scss new file mode 100644 index 00000000..a11e1ebd --- /dev/null +++ b/src/patterns/01-core/props/_layout.scss @@ -0,0 +1,6 @@ +:where(html) { + --layout-gutter: var(--size-6); + --layout-max-width: 90rem; // 1440px + --grid-gutter: var(--size-10); + --grid-gap: var(--size-2); +} diff --git a/src/patterns/01-core/props/_media.scss b/src/patterns/01-core/props/_media.scss new file mode 100644 index 00000000..e7767ee0 --- /dev/null +++ b/src/patterns/01-core/props/_media.scss @@ -0,0 +1,8 @@ +// Media Query Ranges +$screen-xxs: 240px; +$screen-xs: 360px; +$screen-sm: 480px; +$screen-md: 768px; +$screen-lg: 1024px; +$screen-xl: 1440px; +$screen-xxl: 1920px; diff --git a/src/patterns/01-core/props/_shadows.scss b/src/patterns/01-core/props/_shadows.scss new file mode 100644 index 00000000..b2734f54 --- /dev/null +++ b/src/patterns/01-core/props/_shadows.scss @@ -0,0 +1,41 @@ +:where(html) { + --shadow-color: 220 3% 15%; + --shadow-strength: 1%; + --shadow-1: 0 1px 2px -1px hsl(var(--shadow-color) / calc(var(--shadow-strength) + 9%)); + --shadow-2: + 0 3px 5px -2px hsl(var(--shadow-color) / calc(var(--shadow-strength) + 3%)), + 0 7px 14px -5px hsl(var(--shadow-color) / calc(var(--shadow-strength) + 5%)); + --shadow-3: + 0 -1px 3px 0 hsl(var(--shadow-color) / calc(var(--shadow-strength) + 2%)), + 0 1px 2px -5px hsl(var(--shadow-color) / calc(var(--shadow-strength) + 2%)), + 0 2px 5px -5px hsl(var(--shadow-color) / calc(var(--shadow-strength) + 4%)), + 0 4px 12px -5px hsl(var(--shadow-color) / calc(var(--shadow-strength) + 5%)), + 0 12px 15px -5px hsl(var(--shadow-color) / calc(var(--shadow-strength) + 7%)); + --shadow-4: + 0 -2px 5px 0 hsl(var(--shadow-color) / calc(var(--shadow-strength) + 2%)), + 0 1px 1px -2px hsl(var(--shadow-color) / calc(var(--shadow-strength) + 3%)), + 0 2px 2px -2px hsl(var(--shadow-color) / calc(var(--shadow-strength) + 3%)), + 0 5px 5px -2px hsl(var(--shadow-color) / calc(var(--shadow-strength) + 4%)), + 0 9px 9px -2px hsl(var(--shadow-color) / calc(var(--shadow-strength) + 5%)), + 0 16px 16px -2px hsl(var(--shadow-color) / calc(var(--shadow-strength) + 6%)); + --shadow-5: + 0 -1px 2px 0 hsl(var(--shadow-color) / calc(var(--shadow-strength) + 2%)), + 0 2px 1px -2px hsl(var(--shadow-color) / calc(var(--shadow-strength) + 3%)), + 0 5px 5px -2px hsl(var(--shadow-color) / calc(var(--shadow-strength) + 3%)), + 0 10px 10px -2px hsl(var(--shadow-color) / calc(var(--shadow-strength) + 4%)), + 0 20px 20px -2px hsl(var(--shadow-color) / calc(var(--shadow-strength) + 5%)), + 0 40px 40px -2px hsl(var(--shadow-color) / calc(var(--shadow-strength) + 7%)); + --shadow-6: + 0 -1px 2px 0 hsl(var(--shadow-color) / calc(var(--shadow-strength) + 2%)), + 0 3px 2px -2px hsl(var(--shadow-color) / calc(var(--shadow-strength) + 3%)), + 0 7px 5px -2px hsl(var(--shadow-color) / calc(var(--shadow-strength) + 3%)), + 0 12px 10px -2px hsl(var(--shadow-color) / calc(var(--shadow-strength) + 4%)), + 0 22px 18px -2px hsl(var(--shadow-color) / calc(var(--shadow-strength) + 5%)), + 0 41px 33px -2px hsl(var(--shadow-color) / calc(var(--shadow-strength) + 6%)), + 0 100px 80px -2px hsl(var(--shadow-color) / calc(var(--shadow-strength) + 7%)); + --inner-shadow-0: inset 0 0 0 1px hsl(var(--shadow-color) / calc(var(--shadow-strength) + 9%)); + --inner-shadow-1: inset 0 1px 2px 0 hsl(var(--shadow-color) / calc(var(--shadow-strength) + 9%)); + --inner-shadow-2: inset 0 1px 4px 0 hsl(var(--shadow-color) / calc(var(--shadow-strength) + 9%)); + --inner-shadow-3: inset 0 2px 8px 0 hsl(var(--shadow-color) / calc(var(--shadow-strength) + 9%)); + --inner-shadow-4: inset 0 2px 14px 0 hsl(var(--shadow-color) / calc(var(--shadow-strength) + 9%)); +} diff --git a/src/patterns/01-core/props/_sizes.scss b/src/patterns/01-core/props/_sizes.scss new file mode 100644 index 00000000..83b5a3af --- /dev/null +++ b/src/patterns/01-core/props/_sizes.scss @@ -0,0 +1,39 @@ +:where(html) { + --size-xs: 0.063rem; // 1px + --size-sm: 0.125rem; // 2px + --size-05: 0.25rem; // 4px + --size-1: 0.5rem; // 8px + --size-105: 0.75rem; // 12px + --size-2: 1rem; // 16px + --size-205: 1.25rem; // 20px + --size-3: 1.5rem; // 24px + --size-4: 2rem; // 32px + --size-5: 2.5rem; // 40px + --size-6: 3rem; // 48px + --size-7: 3.5rem; // 56px + --size-8: 4rem; // 64px + --size-9: 4.5rem; // 72px + --size-10: 5rem; // 80px + --size-11: 5.5rem; // 88px + --size-12: 6rem; // 96px + --size-13: 6.5rem; // 104px + --size-14: 7rem; // 112px + --size-15: 7.5rem; // 120px + --size-20: 10rem; // 160px + --size-fluid-1: clamp(.5rem, 1vw, 1rem); + --size-fluid-2: clamp(1rem, 2vw, 1.5rem); + --size-fluid-3: clamp(1.5rem, 3vw, 2rem); + --size-fluid-4: clamp(2rem, 4vw, 3rem); + --size-fluid-5: clamp(4rem, 5vw, 5rem); + --size-fluid-6: clamp(5rem, 7vw, 7.5rem); + --size-fluid-7: clamp(7.5rem, 10vw, 10rem); + --size-fluid-8: clamp(10rem, 20vw, 15rem); + --size-fluid-9: clamp(15rem, 30vw, 20rem); + --size-fluid-10: clamp(20rem, 40vw, 30rem); + --size-content-1: 20ch; + --size-content-2: 45ch; + --size-content-3: 60ch; + --size-header-1: 20ch; + --size-header-2: 25ch; + --size-header-3: 35ch; +} diff --git a/src/patterns/01-core/props/_theme.scss b/src/patterns/01-core/props/_theme.scss new file mode 100644 index 00000000..e645dc85 --- /dev/null +++ b/src/patterns/01-core/props/_theme.scss @@ -0,0 +1,4 @@ +:where(html) { + // theme css variables + // --link: var(--indigo-7); +} diff --git a/src/patterns/01-core/props/_zindex.scss b/src/patterns/01-core/props/_zindex.scss new file mode 100644 index 00000000..d6b869c9 --- /dev/null +++ b/src/patterns/01-core/props/_zindex.scss @@ -0,0 +1,8 @@ +:where(html) { + --layer-1: 1; + --layer-2: 2; + --layer-3: 3; + --layer-4: 4; + --layer-5: 5; + --layer-important: 2147483647; +} diff --git a/src/patterns/01-core/utilities/_accessibility.scss b/src/patterns/01-core/utilities/_accessibility.scss new file mode 100644 index 00000000..d5bdd829 --- /dev/null +++ b/src/patterns/01-core/utilities/_accessibility.scss @@ -0,0 +1,24 @@ +// @file +// Utility classes for Accessibility + +@use '../mixins/accessiblity' as *; + +// Accessibility utility classes +.visually-hidden { + @include visually-hidden; + + &.focusable { + &:focus, + &:active { + @include visually-hidden-off; + } + } +} + +.hidden { + @include hidden; +} + +.invisible { + @include invisible; +} diff --git a/src/patterns/01-core/utilities/_clearfix.scss b/src/patterns/01-core/utilities/_clearfix.scss new file mode 100644 index 00000000..1cd576f4 --- /dev/null +++ b/src/patterns/01-core/utilities/_clearfix.scss @@ -0,0 +1,9 @@ +// @file +// Utility classes for Clearfix + +@use '../mixins/clearfix' as *; + +// Clearfix +.clearfix { + @include clearfix; +} diff --git a/src/patterns/01-core/utilities/_constrain.scss b/src/patterns/01-core/utilities/_constrain.scss new file mode 100644 index 00000000..4a79e38c --- /dev/null +++ b/src/patterns/01-core/utilities/_constrain.scss @@ -0,0 +1,13 @@ +// @file +// Utility classes for constraining the page width. + +@use '../mixins/layout' as *; + +.l-constrain { + @include layout-constrain; +} + +.l-constrain--no-padding { + padding-left: 0; + padding-right: 0; +} diff --git a/src/patterns/01-core/utilities/_index.scss b/src/patterns/01-core/utilities/_index.scss new file mode 100644 index 00000000..26d28f7c --- /dev/null +++ b/src/patterns/01-core/utilities/_index.scss @@ -0,0 +1,3 @@ +@forward 'accessibility'; +@forward 'constrain'; +@forward 'clearfix'; diff --git a/src/patterns/02-base/colors/colors.js b/src/patterns/02-base/colors/colors.js new file mode 100644 index 00000000..0b2431b2 --- /dev/null +++ b/src/patterns/02-base/colors/colors.js @@ -0,0 +1,14 @@ +// var p = $("body"); +// +// p.blinker(); +// +// p.bind({ +// // pause blinking on mouseenter +// mouseenter: function(){ +// $(this).data("blinker").pause(); +// }, +// // resume blinking on mouseleave +// mouseleave: function(){ +// $(this).data("blinker").blinkagain(); +// } +// }); diff --git a/src/patterns/02-base/colors/colors.twig b/src/patterns/02-base/colors/colors.twig new file mode 100644 index 00000000..4a359483 --- /dev/null +++ b/src/patterns/02-base/colors/colors.twig @@ -0,0 +1,34 @@ +{# + * @file + * Display for theme color swatches. + * + * Each color swatch is populated from the yml file within + * this same directory (colors.yml). Add or remove any colors there. + * +#} + +<section class="pl-colors"> + {% for title, list in colors %} + <div class="just-for-gap"> + <h3>{{ title|capitalize }}</h3> + <article class="color-demo"> + {% for color, hex in list %} + <div style="background-color: {{ hex }}"> + <div>{{ color }}<br>{{ hex }}</div> + </div> + {% endfor %} + </article> + </div> + {% endfor %} +</section> + +{#{% for title, list in colors %}#} +{# <h3>{{ title|capitalize }}</h3>#} +{# <div class="pl-swatch__group">#} +{# {% for color, hex in list %}#} +{# <div class="pl-swatch" style="background-color: {{ hex }}">#} +{# <div class="pl-swatch__meta">{{ color }}<br>{{ hex }}</div>#} +{# </div>#} +{# {% endfor %}#} +{# </div>#} +{#{% endfor %}#} diff --git a/src/patterns/02-base/colors/colors.yml b/src/patterns/02-base/colors/colors.yml new file mode 100644 index 00000000..00e14ed9 --- /dev/null +++ b/src/patterns/02-base/colors/colors.yml @@ -0,0 +1,131 @@ +--- +colors: +# brand: +# blue-cool-30v: '#59b9de' +# blue-cool-50v: '#0d7ea2' +# green-warm-20: '#cbd17a' +# green-warm-50: '#6f7a41' +# red-warm-20v: '#f6bd9c' +# red-warm-40v: '#ef5e25' +# shades: +# light: '#fff' +# dark: '#000' + grayscale: +# gray-5: '#f0f0f0' +# gray-10: '#e6e6e6' +# gray-20: '#c9c9c9' +# gray-30: '#adadad' +# gray-40: '#919191' +# gray-50: '#757575' +# gray-60: '#5c5c5c' +# gray-70: '#454545' +# gray-80: '#2e2e2e' +# gray-90: '#1b1b1b' + white: '#fff' + gray-1: '#fafafa' + gray-2: '#eee' + gray-3: '#ccc' + gray-4: '#A2A2A2' + gray-5: '#757575' + gray-6: '#4e4e4e' + gray-7: '#333' + black: '#000' + uw-black: + lvl1: '#dfdfdf' + lvl2: '#a2a2a2' + lvl3: '#787878' + lvl4: '#000' + primary: '#000' + uw-gold: + lvl1: '#fffaaa' + lvl2: '#ffea30' + lvl3: '#fdd54f' + lvl4: '#e4b429' + primary: '#fffaaa' + uw-white: + lvl1: '#fff' + primary: '#fff' + neutral: + lvl1: '#dfdfdf' + lvl2: '#a2a2a2' + lvl3: '#787878' + lvl4: '#000' + primary: '#000' + org-ahs: + lvl1: '#97dfef' + lvl2: '#00bed0' + lvl3: '#0098a5' + lvl4: '#005963' + primary: '#005963' + org-art: + lvl1: '#ffd5a5' + lvl2: '#fbaf00' + lvl3: '#e78100' + lvl4: '#d93f00' + primary: '#d93f00' + org-eng: + lvl1: '#d0b4ef' + lvl2: '#be33da' + lvl3: '#8100b4' + lvl4: '#57058b' + primary: '#57058b' + org-env: + lvl1: '#daf582' + lvl2: '#bed500' + lvl3: '#b4be00' + lvl4: '#607000' + primary: '#607000' + org-mat: + lvl1: '#ffbeef' + lvl2: '#ff63aa' + lvl3: '#df2498' + lvl4: '#c60078' + primary: '#df2498' + org-sci: + lvl1: '#b4d5ff' + lvl2: '#63a0ff' + lvl3: '#0073ce' + lvl4: '#0033be' + primary: '#0073ce' + org-school: + lvl1: '#ffa5aa' + lvl2: '#e41740' + lvl3: '#b71233' + lvl4: '#80001f' + primary: '#b71233' + org-ren: + green: '#00693c' + red: '#de3831' + gold: '#d2c295' + lvl1: '#ffa5aa' + lvl2: '#e41740' + lvl3: '#b71233' + lvl4: '#80001f' + primary: '#00693c' + light: '#7FB49D' + org-stj: + green: '#01573e' + gold: '#c88a11' + lvl1: '#ffa5aa' + lvl2: '#e41740' + lvl3: '#b71233' + lvl4: '#80001f' + primary: '#01573e' + light: '#92B7AC' + org-stp: + green: '#879637' + brown: '#584528' + lvl1: '#ffa5aa' + lvl2: '#e41740' + lvl3: '#b71233' + lvl4: '#80001f' + primary: '#879637' + light: '#C2CD79' + org-cgc: + red: '#c4262e' + lvl1: '#ffa5aa' + lvl2: '#e41740' + lvl3: '#b71233' + lvl4: '#80001f' + primary: '#c4262e' + light: '#E8878C' diff --git a/src/patterns/global.scss b/src/patterns/global.scss index 3f82a3ce..67d81481 100644 --- a/src/patterns/global.scss +++ b/src/patterns/global.scss @@ -5,4 +5,4 @@ @use '01-core/props' as *; @use '01-core/utilities' as *; @use '01-core/elements' as *; -@use '03-layouts/grid/grid' as *; +//@use '03-layouts/grid/grid' as *; -- GitLab