diff --git a/src/scss/_global.scss b/src/scss/_global.scss
index f70b4ae..2ecb8a1 100644
--- a/src/scss/_global.scss
+++ b/src/scss/_global.scss
@@ -8,16 +8,220 @@
--color-grey-500: #9CA3AF;
--color-grey-800: #4B5563;
--color-grey-900: #3A3A3A;
+ --color-grey-950: #1f1f1f;
--color-white: #ffffff;
--shadow-md: 0 1px 3px 0 rgba(0,0,0,0.1),0 1px 2px 0 rgba(0,0,0,0.06);
--shadow-lg: 0 10px 15px -3px rgba(0,0,0,0.1),0 4px 6px -2px rgba(0,0,0,0.05);
--shadow-xl: 0 25px 50px -12px rgba(0,0,0,0.25);
+
+ --icon-sun: url('data:image/svg+xml,\
+ ');
+ --icon-sun-filter: invert(0.61) sepia(0.8) saturate(5) hue-rotate(0deg) brightness(0.92);
+ --icon-moon: url('data:image/svg+xml,\
+ ');
+ --icon-moon-filter: invert(0.75);
+
+
+
+
+
+
+ --color-mode: 'light';
+ --color-dark: #141414;
+ --color-dark-alpha: rgba(0, 0, 0, 0.1);
+ --color-light: #efefef;
+ --color-light-alpha: rgba(255, 255, 255, 0.9);
+ --icon-sun: url('data:image/svg+xml,\
+ ');
+ --icon-sun-filter: invert(0.61) sepia(0.8) saturate(5) hue-rotate(0deg) brightness(0.92);
+ --icon-moon: url('data:image/svg+xml,\
+ ');
+ --icon-moon-filter: invert(0.75);
+ --background: #efefef;
+ --text-color: #141414;
+ --button-icon: var(--icon-moon);
+ --button-icon-filter: var(--icon-moon-filter);
+ --button-background: var(--color-dark);
+ --button-color: var(--color-light);
+ --border-color: var(--color-dark-alpha);
}
+@media (prefers-color-scheme: dark) {
+ :root {
+ --color-mode: 'dark';
+ }
+
+ :root:not([data-user-color-scheme]) {
+ --background: var(--color-dark);
+ --text-color: var(--color-light);
+ --button-icon: var(--icon-sun);
+ --button-icon-filter: var(--icon-sun-filter);
+ --button-background: var(--color-light-alpha);
+ --button-color: var(--color-dark);
+ --border-color: var(--color-light-alpha);
+
+
+ --color-primary: hsl(from var(--primary-color) h s calc(l - 50));
+ --color-secondary: hsl(from var(--secondary-color) h s calc(l + 10));
+
+ --logo-primary-color: hsl(from var(--primary-color) h s calc(l - 25));
+
+ --card-color: var(--color-white);
+ --card-bg: #181A1B;
+ --card-tag-bg: var(--color-white);
+ --card-tag-color: var(--color-grey-900);
+ --card-placeholder: var(--color-grey-400);
+
+ --nav-color: var(--color-white);
+ --nav-active-bg: #2C2F31;
+ // --nav-active-color: var(--color-grey-900);
+ // --nav-hover-color: var(--color-grey-900);
+ --nav-hover-bg: #2C2F31;
+
+ --tags-color: #c3beb6;
+ --tags-hover-color: #e8e6e3;
+ --tags-hover-bg: #3e4345;
+ --tags-active-color: #e8e6e3;
+ --tags-active-bg: #3e4345;
+
+ --recipe-placeholder: var(--color-grey-400);
+ --recipe-color: var(--color-white);
+ --recipe-serving-color: #e8e6e3;
+ --recipe-serving-bg: #2c2f31;
+ --recipe-serving-hover-bg: #3c444f;
+
+ --search-bg: var(--color-grey-950);
+ --search-border-color: var(--color-grey-500);
+ --search-input-border-color: var(--color-white);
+ --search-results-bg: var(--color-grey-950);
+ --search-results-border-color: var(--color-grey-500);
+
+ --home-gradient-1: #1B1D1E;
+ --home-gradient-bg: transparent;
+
+ --bgc-grey-100: #1B1D1E;
+ --site-bg: #181A1B;
+ --site-color: var(--color-white);
+ color-scheme: dark;
+ }
+}
+
+[data-user-color-scheme='dark'] {
+ --background: var(--color-dark);
+ --text-color: var(--color-light);
+ --button-icon: var(--icon-sun);
+ --button-icon-filter: var(--icon-sun-filter);
+ --button-background: var(--color-light-alpha);
+ --button-color: var(--color-dark);
+ --border-color: var(--color-light-alpha);
+
+
+ --color-primary: hsl(from var(--primary-color) h s calc(l - 50));
+ --color-secondary: hsl(from var(--secondary-color) h s calc(l + 10));
+
+ --logo-primary-color: hsl(from var(--primary-color) h s calc(l - 25));
+
+ --card-color: var(--color-white);
+ --card-bg: #181A1B;
+ --card-tag-bg: var(--color-white);
+ --card-tag-color: var(--color-grey-900);
+ --card-placeholder: var(--color-grey-400);
+
+ --nav-color: var(--color-white);
+ --nav-active-bg: #2C2F31;
+ // --nav-active-color: var(--color-grey-900);
+ // --nav-hover-color: var(--color-grey-900);
+ --nav-hover-bg: #2C2F31;
+
+ --tags-color: #c3beb6;
+ --tags-hover-color: #e8e6e3;
+ --tags-hover-bg: #3e4345;
+ --tags-active-color: #e8e6e3;
+ --tags-active-bg: #3e4345;
+
+ --recipe-placeholder: var(--color-grey-400);
+ --recipe-color: var(--color-white);
+ --recipe-serving-color: #e8e6e3;
+ --recipe-serving-bg: #2c2f31;
+ --recipe-serving-hover-bg: #3c444f;
+
+ --search-bg: var(--color-grey-950);
+ --search-border-color: var(--color-grey-500);
+ --search-input-border-color: var(--color-white);
+ --search-results-bg: var(--color-grey-950);
+ --search-results-border-color: var(--color-grey-500);
+
+ --home-gradient-1: #1B1D1E;
+ --home-gradient-bg: transparent;
+
+ --bgc-grey-100: #1B1D1E;
+ --site-bg: #181A1B;
+ --site-color: var(--color-white);
+ color-scheme: dark;
+}
+
+
+
+
+.no-js .user-toggle {
+ display: none;
+ }
+
+// .user-toggle {
+// margin: 2rem auto 0 auto;
+// padding-top: 2.5rem;
+// max-width: 20rem;
+// border-top: 1px solid var(--border-color);
+// text-align: center;
+// }
+
+ .toggle-button {
+ display: inline-flex;
+ background: var(--button-background);
+ color: var(--button-color);
+ border: none;
+ font: inherit;
+ // font-size: 1.5rem;
+ gap: .5em;
+ padding: .4rem .6rem;
+ align-items: center;
+ transition: background 500ms ease-in-out, color 200ms ease;
+ }
+
+ .toggle-button__icon {
+ background: var(--button-icon);
+ width: 1.2em;
+ height: 1.2em;
+ filter: var(--button-icon-filter);
+ transform: translateY(1px); /* Optical adjustment */
+ transition: filter 500ms ease-in-out;
+ }
+
+ .toggle-button:focus:focus-visible {
+ outline: 1px solid var(--button-background);
+ outline-offset: 0.5rem;
+ }
+
+
+
+
+
+
body {
display: flex;
flex-direction: column;
+ background: var(--site-bg, vra(--color-white));
+ color: var(--site-color, vra(--color-grey-900));
+ transition: background 500ms ease-in-out, color 200ms ease;
}
main {
diff --git a/src/scss/_utility.scss b/src/scss/_utility.scss
index 4d4565a..d0bb67a 100644
--- a/src/scss/_utility.scss
+++ b/src/scss/_utility.scss
@@ -27,7 +27,7 @@
.u-bgc-grey-100 {
- background-color: var(--color-grey-100);
+ background-color: var(--bgc-grey-100, var(--color-grey-100));
}
.u-highlight {
@@ -46,4 +46,16 @@
.u-mb-large {
margin-bottom: 30px;
+}
+
+.visually-hidden {
+ display: block;
+ height: 1px;
+ width: 1px;
+ overflow: hidden;
+ clip: rect(1px 1px 1px 1px);
+ clip: rect(1px, 1px, 1px, 1px);
+ clip-path: inset(1px);
+ white-space: nowrap;
+ position: absolute;
}
\ No newline at end of file
diff --git a/src/scss/components/_card.scss b/src/scss/components/_card.scss
index 7a7b688..999e332 100644
--- a/src/scss/components/_card.scss
+++ b/src/scss/components/_card.scss
@@ -12,17 +12,17 @@
display: flex;
flex-direction: column;
border-radius: 20px;
- background-color: var(--color-white);
+ background-color: var(--card-bg, var(--color-white));
box-shadow: var(--shadow-md);
text-decoration: none;
- color: var(--color-grey-900);
+ color: var(--card-color, var(--color-grey-900));
}
.c-card__image {
height: auto;
aspect-ratio: 16/9;
object-fit: cover;
- background-color: var(--color-grey-500); // fallback while image is loading
+ background-color: var(--card-placeholder, var(--color-grey-500)); // fallback while image is loading
border-radius: 20px 20px 0 0;
}
@@ -33,6 +33,7 @@
justify-content: space-between;
align-items: center;
background-color: var(--color-primary);
+ min-height: calc(1.5em + (12px * 2));
}
.c-card__tag-abbr {
@@ -46,8 +47,8 @@
justify-content: center;
align-items: center;
font-weight: bold;
- background-color: var(--color-grey-900);
- color: var(--color-white);
+ background-color: var(--card-tag-bg, var(--color-grey-900));
+ color: var(--card-tag-color, var(--color-white));
border-radius: 50%;
}
@@ -57,7 +58,7 @@
svg {
margin-right: 6px;
- fill: var(--color-grey-900);
+ fill: var(--card-color, var(--color-grey-900));
}
}
@@ -67,7 +68,7 @@
align-items: center;
padding: 12px 18px;
text-decoration: none;
- color: var(--color-grey-900);
+ color: var(--card-color, var(--color-grey-900));
&::before {
content: "";
@@ -85,7 +86,7 @@
&::before {
outline: none;
box-shadow: var(--shadow-lg);
- color: var(--color-grey-900);
+ color: var(--card-color, var(--color-grey-900));
text-decoration: none;
}
}
diff --git a/src/scss/components/_home.scss b/src/scss/components/_home.scss
index 2fbbf8a..020cd5c 100644
--- a/src/scss/components/_home.scss
+++ b/src/scss/components/_home.scss
@@ -5,8 +5,8 @@
z-index: -10;
width: 100%;
height: 400px;
- background-image: linear-gradient(to bottom, var(--color-primary), var(--color-white));
- background-color: hsla(0, 0%, 100%, .3);
+ background-image: linear-gradient(to bottom, var(--color-primary), var(--home-gradient-1, var(--color-white)));
+ background-color: var(--home-gradient-bg, hsla(0, 0%, 100%, .3));
background-blend-mode: overlay;
}
}
diff --git a/src/scss/components/_nav.scss b/src/scss/components/_nav.scss
index a0f1ffd..e5cb668 100644
--- a/src/scss/components/_nav.scss
+++ b/src/scss/components/_nav.scss
@@ -27,7 +27,7 @@
.c-nav__home {
display: flex;
align-items: center;
- color: var(--color-grey-900);
+ color: var(--nav-color, var(--color-grey-900));
text-decoration: none;
&:hover, &:focus {
@@ -51,19 +51,19 @@
.c-nav__nav-item {
padding: 4px 8px;
display: flex;
- color: var(--color-grey-900);
+ color: var(--nav-color, var(--color-grey-900));
text-decoration: none;
&:hover, &:focus {
text-decoration: none;
- background-color: var(--color-grey-900);
- color: var(--color-white);
+ background-color: var(--nav-hover-bg, var(--color-grey-900));
+ color: var(--nav-hover-color, var(--color-white));
border-radius: 6px;
}
}
.c-nav__nav-item--active {
- background-color: var(--color-grey-900);
- color: var(--color-white);
+ background-color: var(--nav-active-bg, var(--color-grey-900));
+ color: var(--nav-active-color, var(--color-white));
border-radius: 6px;
}
\ No newline at end of file
diff --git a/src/scss/components/_recipe-tags.scss b/src/scss/components/_recipe-tags.scss
index 2a8d077..d1d8ec5 100644
--- a/src/scss/components/_recipe-tags.scss
+++ b/src/scss/components/_recipe-tags.scss
@@ -8,7 +8,7 @@
.c-tags__tag {
display: inline-flex;
padding: 2px 6px;
- color: var(--color-grey-900);
+ color: var(--tags-color, var(--color-grey-900));
text-decoration: none;
border: 1px solid currentColor;
border-radius: 8px;
@@ -16,13 +16,13 @@
&:hover, &:focus {
text-decoration: none;
- color: var(--color-white);
- background-color: var(--color-grey-900);
+ color: var(--tags-hover-color, var(--color-white));
+ background-color: var(--tags-hover-bg, var(--color-grey-900));
}
}
.c-tag__tag--selected {
- color: var(--color-white);
- background-color: var(--color-grey-900);
+ color: var(--tags-active-color, var(--color-white));
+ background-color: var(--tags-active-bg, var(--color-grey-900));
border: 1px solid currentColor;
}
\ No newline at end of file
diff --git a/src/scss/components/_recipe.scss b/src/scss/components/_recipe.scss
index a140811..e02bb8b 100644
--- a/src/scss/components/_recipe.scss
+++ b/src/scss/components/_recipe.scss
@@ -5,7 +5,7 @@
object-fit: cover;
height: 50vh;
min-height: 300px;
- background-color: var(--color-grey-500); // fallback while image is loading
+ background-color: var(--recipe-placeholder, var(--color-grey-500)); // fallback while image is loading
}
.c-recipe__title {
@@ -19,6 +19,7 @@
}
input[type="checkbox"] {
+ accent-color: var(--color-secondary);
margin: 0;
margin-inline-end: 6px;
}
@@ -29,7 +30,7 @@
svg {
margin-right: 6px;
- fill: var(--color-grey-900);
+ fill: var(--recipe-color, var(--color-grey-900));
}
}
@@ -74,13 +75,13 @@
display: inline-flex;
justify-content: center;
align-items: center;
- background-color: var(--color-grey-900);
+ background-color: var(--recipe-serving-bg, var(--color-grey-900));
border: none;
border-radius: 50%;
- color: var(--color-white);
+ color: var(--recipe-serving-color, var(--color-white));
&:hover, &:focus {
- background-color: var(--color-grey-800);
+ background-color: var(--recipe-serving-hover-bg, var(--color-grey-800));
}
}
diff --git a/src/scss/components/_search.scss b/src/scss/components/_search.scss
index 386a902..f58ba7c 100644
--- a/src/scss/components/_search.scss
+++ b/src/scss/components/_search.scss
@@ -26,9 +26,9 @@
top: 60px;
right: 0;
width: 100%;
- background-color: var(--color-white);
+ background-color: var(--search-bg, var(--color-white));
padding: 24px;
- border: 1px solid var(--color-grey-300);
+ border: 1px solid var(--search-border-color, var(--color-grey-300));
border-radius: 10px;
box-shadow: var(--shadow-xl);
font-size: 1rem;
@@ -69,7 +69,7 @@
.c-search__input {
width: 100%;
padding: 4px 12px;
- border: 2px solid var(--color-grey-900);
+ border: 2px solid var(--search-input-border-color, var(--color-grey-900));
border-radius: 30px;
}
@@ -77,7 +77,7 @@
padding: 12px 18px 12px 46px;
width: 100%;
padding: 12px 18px 12px 46px;
- border: 2px solid var(--color-grey-900);
+ border: 2px solid var(--search-input-border-color, var(--color-grey-900));
}
.c-search__close-button {
@@ -126,8 +126,8 @@
width: 100%;
max-width: 500px;
padding: 24px;
- background-color: var(--color-white);
- border: 1px solid var(--color-grey-300);
+ background-color: var(--search-results-bg, var(--color-white));
+ border: 1px solid var(--search-results-border-color, var(--color-grey-300));
box-shadow: var(--shadow-xl);
border-radius: 10px;
}